diff --git a/.cargo/config b/.cargo/config new file mode 100644 index 0000000..cb66012 --- /dev/null +++ b/.cargo/config @@ -0,0 +1,33 @@ +[target.thumbv7m-none-eabi] +# uncomment this to make `cargo run` execute programs on QEMU +# runner = "qemu-system-arm -cpu cortex-m3 -machine lm3s6965evb -nographic -semihosting-config enable=on,target=native -kernel" + +[target.'cfg(all(target_arch = "arm", target_os = "none"))'] +# uncomment ONE of these three option to make `cargo run` start a GDB session +# which option to pick depends on your system +runner = "arm-none-eabi-gdb -q -x openocd.gdb" +# runner = "gdb-multiarch -q -x openocd.gdb" +# runner = "gdb -q -x openocd.gdb" + +rustflags = [ + # LLD (shipped with the Rust toolchain) is used as the default linker + "-C", "link-arg=-Tlink.x", + + # if you run into problems with LLD switch to the GNU linker by commenting out + # this line + # "-C", "linker=arm-none-eabi-ld", + + # if you need to link to pre-compiled C libraries provided by a C toolchain + # use GCC as the linker by commenting out both lines above and then + # uncommenting the three lines below + # "-C", "linker=arm-none-eabi-gcc", + # "-C", "link-arg=-Wl,-Tlink.x", + # "-C", "link-arg=-nostartfiles", +] + +[build] +# Pick ONE of these compilation targets +# target = "thumbv6m-none-eabi" # Cortex-M0 and Cortex-M0+ +target = "thumbv7m-none-eabi" # Cortex-M3 +# target = "thumbv7em-none-eabi" # Cortex-M4 and Cortex-M7 (no FPU) +# target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index ff4a22a..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: "[BUG]" -labels: bug -assignees: Steins7 - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Code -2. Specific Hardware used -3. OS and toolchain -4. Conditions for the bug to appear - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 97b15b8..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: "[FEATURE]" -labels: enhancement -assignees: Steins7 - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.gitignore b/.gitignore index 1042eb2..7967f31 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,45 @@ -bin +#------------------------------------------------------------------------------- +# Rust + +**/*.rs.bk +.#* .gdb_history -*tags -*.taghl +Cargo.lock +target/ + +#------------------------------------------------------------------------------- +# For PCBs designed using KiCad: https://www.kicad.org/ +# Format documentation: https://kicad.org/help/file-formats/ + +# Temporary files +*.000 +*.bak +*.bck +*.kicad_pcb-bak +*.kicad_sch-bak +*-backups +*.kicad_prl +*.sch-bak +*~ +_autosave-* +\#auto_saved_files\# +*.tmp +*-save.pro +*-save.kicad_pcb +fp-info-cache + +# Netlist files (exported from Eeschema) +*.net + +# Autorouter files (exported from Pcbnew) +*.dsn +*.ses + +# Exported BOM files +*.xml +*.csv + +#------------------------------------------------------------------------------- +# LibreOffice +*.~lock* + diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..629f8db --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,33 @@ +[package] +authors = ["Steins7"] +edition = "2018" +readme = "README.md" +name = "fan_monitor" +version = "0.1.0" + +[dependencies] +embedded-hal = "0.2.6" +nb = "0.1.2" +cortex-m = "0.7.4" +cortex-m-rt = "0.7.1" +cortex-m-semihosting = "0.3.7" +panic-halt = "0.2.0" +hd44780-driver = "0.3.0" +libm = "0.2.1" +half = "1.8.2" + +[dependencies.stm32f1xx-hal] +version = "0.8.0" +features = ["stm32f103", "rt", "medium"] + +# this lets you use `cargo fix`! +[[bin]] +name = "fan_monitor" +test = false +bench = false + +[profile.release] +codegen-units = 1 # better optimizations +debug = true # symbols are nice and they don't increase the size on Flash +lto = true # better optimizations + diff --git a/Makefile b/Makefile deleted file mode 100644 index 9eb2bd9..0000000 --- a/Makefile +++ /dev/null @@ -1,163 +0,0 @@ -#----------------------------------------------------------------------------- -# this GNU-makefile relies on the GCC toolchain - -# --- control global project settings -# RELEASE=1 -> enable optimisation, then disable debug -# RELEASE=0 -> disable optimisation, then enable debug -RELEASE=0 - -# --- project architecture -# program name -EXE_PREFIX=main -# project folders, This Makefile should be in the same folder as the SRC folder -SRC=src -BIN=bin -INC=include -LIB=lib -OBJ=${BIN}/obj -DEP=${BIN}/dep -# code folders, in the SRC folder -SUBFOLDERS=drivers target -# Define linker script file here -LDSCRIPT=${SRC}/target/STM32F103XB.ld - -# --- advanced config -# List all user C define here -UDEFS= -# Define ASM defines here -UADEFS= - -# --- toolchain configuration -TARGET=arm-none-eabi- -CC=$(TARGET)gcc -OBJCOPY=$(TARGET)objcopy -AS=$(TARGET)gcc -x assembler-with-cpp -c -SIZE=$(TARGET)size -OBJDUMP=$(TARGET)objdump - -# --- hardware settings -ARCH=armv7-m -FLOAT-ABI=soft #no FPU on stm32f103 -CPU=cortex-m3 -CPUFLAGS=-mthumb -FPU=fpv4-sp-d16 #"FLOAT-ABI=soft" disable that - -##----------------------------------------------------------------------------- -# --- makefile pre-incantation - -# List all default C defines here, like -D_DEBUG=1 -DDEFS=-march=$(ARCH) -mfloat-abi=$(FLOAT-ABI) -mcpu=$(CPU) -mfpu=$(FPU) $(CPUFLAGS) -# List all default ASM defines here, like -D_DEBUG=1 -DADEFS=-D__ASSEMBLY__ - -# --- deduce file names -MAIN_C_FILES=${wildcard ${SRC}/${strip ${EXE_PREFIX}}*.c} -COMMON_C_FILES=${filter-out ${MAIN_C_FILES},${wildcard ${SRC}/*.c} \ - ${foreach dir,${SUBFOLDERS},${wildcard ${SRC}/${dir}/*.c}}} -COMMON_ASM_FILES=${filter-out ${MAIN_CXX_FILES},${wildcard *.s} \ - ${foreach dir,${SUBFOLDERS},${wildcard ${SRC}/${dir}/*.s}}} -MAIN_OBJECT_FILES=${sort ${patsubst ${SRC}/%.c,${OBJ}/%.o,${MAIN_C_FILES}}} -COMMON_OBJECT_FILES=${sort ${patsubst ${SRC}/%.c,${OBJ}/%.o,${COMMON_C_FILES}} \ - ${patsubst ${SRC}/%.s,${OBJ}/%.o,${COMMON_ASM_FILES}}} -LIBRARIES=${foreach dir,${wildcard ${LIB}/*},${wildcard ${LIB}/${dir}/*.a}} - -#----------------------------------------------------------------------------- -# --- makefile incantation -# down here is black magic, you probably don't want to modify anything - -DEFS =$(DDEFS) $(UDEFS) -ADEFS =$(DADEFS) $(UADEFS) - -ifeq (${strip ${RELEASE}},0) - CFLAGS=-g3 -O0 -else - CFLAGS=-O3 -endif - -ASFLAGS = $(LIB) $(DEFS) -Wa,--gdwarf2 $(ADEFS) -CFLAGS+=-std=c17 -Wall $(DEFS) -Wextra -Warray-bounds -Wno-unused-parameter -fomit-frame-pointer -LDFLAGS= -T$(LDSCRIPT) -lc -lgcc -lgcov -lm -Wl,-Map=$@.map,--gc-sections --specs=nosys.specs -INCLUDE=-I${INC} - -# --- Generate dependency information -#CFLAGS += -MD -MP -MF ${DEP}/$(@F0).d -#ASFLAGS += -MD -MP -MF ${DEP}/$(@F).d - -# --- folder tree -DIR_GUARD=@mkdir -p ${@D} -ifeq (${OS},Windows_NT) - DIR_GUARD=@md ${@D} -endif - -# --- make rules -all: ${BIN}/${EXE_PREFIX}.elf ${BIN}/${EXE_PREFIX}.hex ${BIN}/${EXE_PREFIX}.bin - -rebuild : clean all - -.SUFFIXES: -.SECONDARY: -.PHONY: all clean rebuild - -${BIN}/%.elf : ${MAIN_OBJECT_FILES} ${COMMON_OBJECT_FILES} - @echo - @echo ==== linking $@ ==== - @echo ${COMMON_OBJECT_FILES} - @echo - ${DIR_GUARD} - ${CC} ${CFLAGS} -o $@ ${filter-out %ld, $^} ${LIBRARIES} ${LDFLAGS} - ${OBJDUMP} -h $@ - ${SIZE} $@ - @${SKIP_LINE} - -${BIN}/%.hex : ${BIN}/%.elf - @echo - @echo ==== traducing [opt=${opt}] $< ==== - @echo - ${OBJCOPY} -O ihex $< $@ - -${BIN}/%.bin : ${BIN}/%.elf - @echo - @echo ==== traducing [opt=${opt}] $< ==== - @echo - ${OBJCOPY} -O binary $< $@ - -${OBJ}/%.o : ${SRC}/%.c - @echo - @echo ==== compiling [opt=${opt}] $< ==== - @echo - ${DIR_GUARD} - ${CC} ${INCLUDE} -c ${CFLAGS} $< -o $@ ${LIBRARIES} - @${SKIP_LINE} - -${BIN}/%.o : ${SRC}/%.c - @echo - @echo ==== compiling [opt=${opt}] $< ==== - @echo - ${DIR_GUARD} - ${CC} ${INCLUDE} -c ${CFLAGS} $< -o $@ ${LIBRARIES} - @${SKIP_LINE} - -${OBJ}/%.o : ${SRC}/%.s - @echo - @echo ==== compiling [opt=${opt}] $^ $@ ${LIBRARIES}==== - @echo - ${DIR_GUARD} - ${AS} -o ${ASFLAGS} $< -o $@ ${LIBRARIES} - @${SKIP_LINE} - -${BIN}/%.o : ${SRC}/%.s - @echo - @echo ==== compiling [opt=${opt}] $^ $@ ${LIBRARIES}==== - @echo - ${DIR_GUARD} - ${AS} -o ${ASFLAGS} $< -o $@ ${LIBRARIES} - @${SKIP_LINE} - -# --- remove generated files -clean: - -rm -rf ${BIN}/* - -# Include the dependency files, should be the last of the makefile -# -#-include $(shell mkdir ${DEP}/ 2>/dev/null) $(wildcard ${DEP}/*) --include ${DEPEND_FILES} diff --git a/README.md b/README.md deleted file mode 100644 index 98bd856..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# stm32f1xx_HBL -simplified HAL for stm32f1 microcontrollers, designed to be easily customized diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..98f603e --- /dev/null +++ b/build.rs @@ -0,0 +1,18 @@ +use std::env; +use std::fs::File; +use std::io::Write; +use std::path::PathBuf; + +fn main() { + // Put the linker script somewhere the linker can find it + let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); + File::create(out.join("memory.x")) + .unwrap() + .write_all(include_bytes!("memory.x")) + .unwrap(); + println!("cargo:rustc-link-search={}", out.display()); + + // Only re-run the build script when memory.x is changed, + // instead of when any part of the source code changes. + println!("cargo:rerun-if-changed=memory.x"); +} diff --git a/cad/BOM.ods b/cad/BOM.ods new file mode 100644 index 0000000..30eb341 Binary files /dev/null and b/cad/BOM.ods differ diff --git a/cad/adapter/adapter.scad b/cad/adapter/adapter.scad new file mode 100644 index 0000000..52425a6 --- /dev/null +++ b/cad/adapter/adapter.scad @@ -0,0 +1,41 @@ +$fn = 100; + +// element dimensions +w = 60; +d = 30; +h = 4; + +// aditionnal parameters +e = 5; + +// internal values +we = w + e; +de = d + e; + +translate([0,0,e/2]); +cube([we,de,e/3], true); +module tab() { + translate([-e/4,0,(e/3+h)/2]) { + cube([e/2,2*e,h], true); + translate([-1.75*e,-e,h/2]) + rotate([0,-90,-90]) + linear_extrude(height = 2*e) + polygon([[0,1.2*e],[e/4,1.2*e],[0,2*e],[e/2,2*e]], + [[0,1,3,2]]); + } +} + +translate([we/2,-de/2+e,0]) +tab(); + +translate([-we/2,0,0]) +rotate([0,0,180]) +tab(); + +translate([8,de/2,0]) +rotate([0,0,90]) +tab(); + +translate([0,-de/2,0]) +rotate([0,0,-90]) +tab(); diff --git a/cad/adapter/adapter.stl b/cad/adapter/adapter.stl new file mode 100644 index 0000000..9b53a83 --- /dev/null +++ b/cad/adapter/adapter.stl @@ -0,0 +1,646 @@ +solid OpenSCAD_Model + facet normal 1 -0 0 + outer loop + vertex 32.5 -17.5 7.33333 + vertex 32.5 -7.5 0.833333 + vertex 32.5 -7.5 7.33333 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 32.5 -7.5 0.833333 + vertex 32.5 -17.5 7.33333 + vertex 32.5 -17.5 0.833333 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 28.5 -17.5 4.83333 + vertex 30 -7.5 4.83333 + vertex 30 -17.5 4.83333 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 30 -7.5 4.83333 + vertex 28.5 -17.5 4.83333 + vertex 28.5 -7.5 4.83333 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 30 -17.5 0.833333 + vertex 32.5 -7.5 0.833333 + vertex 32.5 -17.5 0.833333 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 32.5 -7.5 0.833333 + vertex 30 -17.5 0.833333 + vertex 30 -7.5 0.833333 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 30 -17.5 0.833333 + vertex 30 -7.5 4.83333 + vertex 30 -7.5 0.833333 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex 30 -7.5 4.83333 + vertex 30 -17.5 0.833333 + vertex 30 -17.5 4.83333 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 32.5 -7.5 7.33333 + vertex 30 -7.5 4.83333 + vertex 28.5 -7.5 6.08333 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 32.5 -7.5 0.833333 + vertex 30 -7.5 4.83333 + vertex 32.5 -7.5 7.33333 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 30 -7.5 4.83333 + vertex 32.5 -7.5 0.833333 + vertex 30 -7.5 0.833333 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 28.5 -7.5 6.08333 + vertex 30 -7.5 4.83333 + vertex 28.5 -7.5 4.83333 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 30 -17.5 4.83333 + vertex 28.5 -17.5 6.08333 + vertex 28.5 -17.5 4.83333 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 28.5 -17.5 6.08333 + vertex 30 -17.5 4.83333 + vertex 32.5 -17.5 7.33333 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 32.5 -17.5 0.833333 + vertex 30 -17.5 4.83333 + vertex 30 -17.5 0.833333 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 30 -17.5 4.83333 + vertex 32.5 -17.5 0.833333 + vertex 32.5 -17.5 7.33333 + endloop + endfacet + facet normal -0.298275 0 0.95448 + outer loop + vertex 28.5 -7.5 6.08333 + vertex 32.5 -17.5 7.33333 + vertex 32.5 -7.5 7.33333 + endloop + endfacet + facet normal -0.298275 0 0.95448 + outer loop + vertex 32.5 -17.5 7.33333 + vertex 28.5 -7.5 6.08333 + vertex 28.5 -17.5 6.08333 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 28.5 -17.5 4.83333 + vertex 28.5 -7.5 6.08333 + vertex 28.5 -7.5 4.83333 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex 28.5 -7.5 6.08333 + vertex 28.5 -17.5 4.83333 + vertex 28.5 -17.5 6.08333 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -32.5 -5 0.833333 + vertex -32.5 5 7.33333 + vertex -32.5 5 0.833333 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex -32.5 5 7.33333 + vertex -32.5 -5 0.833333 + vertex -32.5 -5 7.33333 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -30 -5 4.83333 + vertex -28.5 5 4.83333 + vertex -28.5 -5 4.83333 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -28.5 5 4.83333 + vertex -30 -5 4.83333 + vertex -30 5 4.83333 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -32.5 -5 0.833333 + vertex -30 5 0.833333 + vertex -30 -5 0.833333 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -30 5 0.833333 + vertex -32.5 -5 0.833333 + vertex -32.5 5 0.833333 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex -30 -5 4.83333 + vertex -30 5 0.833333 + vertex -30 5 4.83333 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -30 5 0.833333 + vertex -30 -5 4.83333 + vertex -30 -5 0.833333 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -32.5 -5 7.33333 + vertex -30 -5 4.83333 + vertex -28.5 -5 6.08333 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -32.5 -5 0.833333 + vertex -30 -5 4.83333 + vertex -32.5 -5 7.33333 + endloop + endfacet + facet normal 0 -1 -0 + outer loop + vertex -30 -5 4.83333 + vertex -32.5 -5 0.833333 + vertex -30 -5 0.833333 + endloop + endfacet + facet normal 0 -1 -0 + outer loop + vertex -28.5 -5 6.08333 + vertex -30 -5 4.83333 + vertex -28.5 -5 4.83333 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -30 5 4.83333 + vertex -28.5 5 6.08333 + vertex -28.5 5 4.83333 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -28.5 5 6.08333 + vertex -30 5 4.83333 + vertex -32.5 5 7.33333 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -32.5 5 0.833333 + vertex -30 5 4.83333 + vertex -30 5 0.833333 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -30 5 4.83333 + vertex -32.5 5 0.833333 + vertex -32.5 5 7.33333 + endloop + endfacet + facet normal 0.298275 0 0.95448 + outer loop + vertex -32.5 5 7.33333 + vertex -28.5 -5 6.08333 + vertex -28.5 5 6.08333 + endloop + endfacet + facet normal 0.298275 0 0.95448 + outer loop + vertex -28.5 -5 6.08333 + vertex -32.5 5 7.33333 + vertex -32.5 -5 7.33333 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex -28.5 -5 6.08333 + vertex -28.5 5 4.83333 + vertex -28.5 5 6.08333 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex -28.5 5 4.83333 + vertex -28.5 -5 6.08333 + vertex -28.5 -5 4.83333 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 13 17.5 0.833333 + vertex 3 17.5 7.33333 + vertex 13 17.5 7.33333 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex 3 17.5 7.33333 + vertex 13 17.5 0.833333 + vertex 3 17.5 0.833333 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 3 13.5 4.83333 + vertex 13 15 4.83333 + vertex 13 13.5 4.83333 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 13 15 4.83333 + vertex 3 13.5 4.83333 + vertex 3 15 4.83333 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 3 15 0.833333 + vertex 13 17.5 0.833333 + vertex 13 15 0.833333 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 13 17.5 0.833333 + vertex 3 15 0.833333 + vertex 3 17.5 0.833333 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 3 15 0.833333 + vertex 13 15 4.83333 + vertex 3 15 4.83333 + endloop + endfacet + facet normal 0 -1 -0 + outer loop + vertex 13 15 4.83333 + vertex 3 15 0.833333 + vertex 13 15 0.833333 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 3 15 4.83333 + vertex 3 17.5 0.833333 + vertex 3 15 0.833333 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 3 17.5 0.833333 + vertex 3 15 4.83333 + vertex 3 17.5 7.33333 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 3 13.5 6.08333 + vertex 3 15 4.83333 + vertex 3 13.5 4.83333 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 3 15 4.83333 + vertex 3 13.5 6.08333 + vertex 3 17.5 7.33333 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 13 17.5 7.33333 + vertex 13 15 4.83333 + vertex 13 17.5 0.833333 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 13 13.5 6.08333 + vertex 13 15 4.83333 + vertex 13 17.5 7.33333 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 13 15 4.83333 + vertex 13 13.5 6.08333 + vertex 13 13.5 4.83333 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 13 17.5 0.833333 + vertex 13 15 4.83333 + vertex 13 15 0.833333 + endloop + endfacet + facet normal 0 -0.298275 0.95448 + outer loop + vertex 3 17.5 7.33333 + vertex 13 13.5 6.08333 + vertex 13 17.5 7.33333 + endloop + endfacet + facet normal 0 -0.298275 0.95448 + outer loop + vertex 13 13.5 6.08333 + vertex 3 17.5 7.33333 + vertex 3 13.5 6.08333 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex 3 13.5 4.83333 + vertex 13 13.5 6.08333 + vertex 3 13.5 6.08333 + endloop + endfacet + facet normal 0 -1 -0 + outer loop + vertex 13 13.5 6.08333 + vertex 3 13.5 4.83333 + vertex 13 13.5 4.83333 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -5 -17.5 0.833333 + vertex 5 -17.5 7.33333 + vertex -5 -17.5 7.33333 + endloop + endfacet + facet normal 0 -1 -0 + outer loop + vertex 5 -17.5 7.33333 + vertex -5 -17.5 0.833333 + vertex 5 -17.5 0.833333 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -5 -15 4.83333 + vertex 5 -13.5 4.83333 + vertex 5 -15 4.83333 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 5 -13.5 4.83333 + vertex -5 -15 4.83333 + vertex -5 -13.5 4.83333 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -5 -17.5 0.833333 + vertex 5 -15 0.833333 + vertex 5 -17.5 0.833333 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 5 -15 0.833333 + vertex -5 -17.5 0.833333 + vertex -5 -15 0.833333 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 5 -15 0.833333 + vertex -5 -15 4.83333 + vertex 5 -15 4.83333 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -5 -15 4.83333 + vertex 5 -15 0.833333 + vertex -5 -15 0.833333 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 5 -13.5 6.08333 + vertex 5 -15 4.83333 + vertex 5 -13.5 4.83333 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 5 -17.5 7.33333 + vertex 5 -15 4.83333 + vertex 5 -13.5 6.08333 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 5 -17.5 0.833333 + vertex 5 -15 4.83333 + vertex 5 -17.5 7.33333 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 5 -15 4.83333 + vertex 5 -17.5 0.833333 + vertex 5 -15 0.833333 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -5 -15 0.833333 + vertex -5 -17.5 0.833333 + vertex -5 -15 4.83333 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -5 -15 4.83333 + vertex -5 -13.5 6.08333 + vertex -5 -13.5 4.83333 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -5 -15 4.83333 + vertex -5 -17.5 7.33333 + vertex -5 -13.5 6.08333 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -5 -17.5 7.33333 + vertex -5 -15 4.83333 + vertex -5 -17.5 0.833333 + endloop + endfacet + facet normal -0 0.298275 0.95448 + outer loop + vertex -5 -13.5 6.08333 + vertex 5 -17.5 7.33333 + vertex 5 -13.5 6.08333 + endloop + endfacet + facet normal 0 0.298275 0.95448 + outer loop + vertex 5 -17.5 7.33333 + vertex -5 -13.5 6.08333 + vertex -5 -17.5 7.33333 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 5 -13.5 4.83333 + vertex -5 -13.5 6.08333 + vertex 5 -13.5 6.08333 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -5 -13.5 6.08333 + vertex 5 -13.5 4.83333 + vertex -5 -13.5 4.83333 + endloop + endfacet + facet normal 1 -0 0 + outer loop + vertex 32.5 -17.5 0.833333 + vertex 32.5 17.5 -0.833333 + vertex 32.5 17.5 0.833333 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 32.5 17.5 -0.833333 + vertex 32.5 -17.5 0.833333 + vertex 32.5 -17.5 -0.833333 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -32.5 17.5 0.833333 + vertex 32.5 -17.5 0.833333 + vertex 32.5 17.5 0.833333 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 32.5 -17.5 0.833333 + vertex -32.5 17.5 0.833333 + vertex -32.5 -17.5 0.833333 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -32.5 -17.5 -0.833333 + vertex 32.5 17.5 -0.833333 + vertex 32.5 -17.5 -0.833333 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 32.5 17.5 -0.833333 + vertex -32.5 -17.5 -0.833333 + vertex -32.5 17.5 -0.833333 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -32.5 -17.5 -0.833333 + vertex -32.5 17.5 0.833333 + vertex -32.5 17.5 -0.833333 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex -32.5 17.5 0.833333 + vertex -32.5 -17.5 -0.833333 + vertex -32.5 -17.5 0.833333 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 32.5 17.5 -0.833333 + vertex -32.5 17.5 0.833333 + vertex 32.5 17.5 0.833333 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -32.5 17.5 0.833333 + vertex 32.5 17.5 -0.833333 + vertex -32.5 17.5 -0.833333 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -32.5 -17.5 -0.833333 + vertex 32.5 -17.5 0.833333 + vertex -32.5 -17.5 0.833333 + endloop + endfacet + facet normal 0 -1 -0 + outer loop + vertex 32.5 -17.5 0.833333 + vertex -32.5 -17.5 -0.833333 + vertex 32.5 -17.5 -0.833333 + endloop + endfacet +endsolid OpenSCAD_Model diff --git a/cad/encoder/encoder.scad b/cad/encoder/encoder.scad new file mode 100644 index 0000000..c65a830 --- /dev/null +++ b/cad/encoder/encoder.scad @@ -0,0 +1,34 @@ +$fn = 100; + +r = 12; +h = 12; + +center_r = 3.2; + +mol_r = 7; +mol_off = 6; + +difference() { + union() { + difference() { + cylinder(h=h, r=r, center=true); + translate([0,0,h/2]) + cylinder(h=15, r=center_r, center=true); + for(i=[0:45:359]) { + echo((r+mol_off*sin(i))); + translate([(r+mol_off)*cos(i),(r+mol_off) + *sin(i),0]) + cylinder(h=h, r=mol_r, center=true); + } + } + translate([3,0,0]) + cube([3,2*center_r,h], center=true); + } + difference() { + translate([0,0,3]) + cylinder(h=h, r=0.8*r, center=true); + translate([0,0,3]) + cylinder(h=h, r=1.4*center_r, center=true); + + } +} \ No newline at end of file diff --git a/cad/encoder/encoder.stl b/cad/encoder/encoder.stl new file mode 100644 index 0000000..3d96c20 --- /dev/null +++ b/cad/encoder/encoder.stl @@ -0,0 +1,12042 @@ +solid OpenSCAD_Model + facet normal 0.91777 0.397112 0 + outer loop + vertex 11.6383 -2.91591 6 + vertex 11.4916 -2.57687 -6 + vertex 11.4916 -2.57687 6 + endloop + endfacet + facet normal 0.91777 0.397112 0 + outer loop + vertex 11.4916 -2.57687 -6 + vertex 11.6383 -2.91591 6 + vertex 11.6383 -2.91591 -6 + endloop + endfacet + facet normal 0.960286 0.279019 0 + outer loop + vertex 11.3426 -2.16312 6 + vertex 11.2199 -1.74083 -6 + vertex 11.2199 -1.74083 6 + endloop + endfacet + facet normal 0.960286 0.279019 0 + outer loop + vertex 11.2199 -1.74083 -6 + vertex 11.3426 -2.16312 6 + vertex 11.3426 -2.16312 -6 + endloop + endfacet + facet normal 0.940851 0.33882 0 + outer loop + vertex 11.4916 -2.57687 6 + vertex 11.3426 -2.16312 -6 + vertex 11.3426 -2.16312 6 + endloop + endfacet + facet normal 0.940851 0.33882 0 + outer loop + vertex 11.3426 -2.16312 -6 + vertex 11.4916 -2.57687 6 + vertex 11.4916 -2.57687 -6 + endloop + endfacet + facet normal 0.975931 0.218081 0 + outer loop + vertex 11.2199 -1.74083 6 + vertex 11.124 -1.31167 -6 + vertex 11.124 -1.31167 6 + endloop + endfacet + facet normal 0.975931 0.218081 0 + outer loop + vertex 11.124 -1.31167 -6 + vertex 11.2199 -1.74083 6 + vertex 11.2199 -1.74083 -6 + endloop + endfacet + facet normal 0.999507 -0.0313815 0 + outer loop + vertex 11 0 6 + vertex 11.0138 0.439533 -6 + vertex 11.0138 0.439533 6 + endloop + endfacet + facet normal 0.999507 -0.0313815 0 + outer loop + vertex 11.0138 0.439533 -6 + vertex 11 0 6 + vertex 11 0 -6 + endloop + endfacet + facet normal 0.987686 -0.156451 0 + outer loop + vertex 11.0552 0.877332 6 + vertex 11.124 1.31167 -6 + vertex 11.124 1.31167 6 + endloop + endfacet + facet normal 0.987686 -0.156451 0 + outer loop + vertex 11.124 1.31167 -6 + vertex 11.0552 0.877332 6 + vertex 11.0552 0.877332 -6 + endloop + endfacet + facet normal 0.995559 0.0941439 0 + outer loop + vertex 11.0552 -0.877332 6 + vertex 11.0138 -0.439533 -6 + vertex 11.0138 -0.439533 6 + endloop + endfacet + facet normal 0.995559 0.0941439 0 + outer loop + vertex 11.0138 -0.439533 -6 + vertex 11.0552 -0.877332 6 + vertex 11.0552 -0.877332 -6 + endloop + endfacet + facet normal 0.940851 -0.33882 0 + outer loop + vertex 11.3426 2.16312 6 + vertex 11.4916 2.57687 -6 + vertex 11.4916 2.57687 6 + endloop + endfacet + facet normal 0.940851 -0.33882 0 + outer loop + vertex 11.4916 2.57687 -6 + vertex 11.3426 2.16312 6 + vertex 11.3426 2.16312 -6 + endloop + endfacet + facet normal 0.960286 -0.279019 0 + outer loop + vertex 11.2199 1.74083 6 + vertex 11.3426 2.16312 -6 + vertex 11.3426 2.16312 6 + endloop + endfacet + facet normal 0.960286 -0.279019 0 + outer loop + vertex 11.3426 2.16312 -6 + vertex 11.2199 1.74083 6 + vertex 11.2199 1.74083 -6 + endloop + endfacet + facet normal 0.999507 0.0313815 0 + outer loop + vertex 11.0138 -0.439533 6 + vertex 11 0 -6 + vertex 11 0 6 + endloop + endfacet + facet normal 0.999507 0.0313815 0 + outer loop + vertex 11 0 -6 + vertex 11.0138 -0.439533 6 + vertex 11.0138 -0.439533 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.623 -2.98428 -6 + vertex 11.4916 -2.57687 -6 + vertex 11.6383 -2.91591 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.4127 -3.7082 -6 + vertex 11.4916 -2.57687 -6 + vertex 11.623 -2.98428 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.4127 -3.7082 -6 + vertex 11.3426 -2.16312 -6 + vertex 11.4916 -2.57687 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.1573 -4.41749 -6 + vertex 11.3426 -2.16312 -6 + vertex 11.4127 -3.7082 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 11.3426 -2.16312 -6 + vertex 11.1573 -4.41749 -6 + vertex 11.2199 -1.74083 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 9.35565 -6.59377 -6 + vertex 11.2199 -1.74083 -6 + vertex 11.1573 -4.41749 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 8.97713 -6.81763 -6 + vertex 11.2199 -1.74083 -6 + vertex 9.35565 -6.59377 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 11.2199 -1.74083 -6 + vertex 8.97713 -6.81763 -6 + vertex 11.124 -1.31167 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 8.61343 -7.0648 -6 + vertex 11.124 -1.31167 -6 + vertex 8.97713 -6.81763 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 9.35565 -6.59377 -6 + vertex 11.1573 -4.41749 -6 + vertex 10.8579 -5.10935 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.4916 2.57687 -6 + vertex 11.623 2.98428 -6 + vertex 11.6383 2.91591 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.4916 2.57687 -6 + vertex 11.4127 3.7082 -6 + vertex 11.623 2.98428 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.3426 2.16312 -6 + vertex 11.4127 3.7082 -6 + vertex 11.4916 2.57687 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.1573 4.41749 -6 + vertex 11.3426 2.16312 -6 + vertex 11.2199 1.74083 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.3426 2.16312 -6 + vertex 11.1573 4.41749 -6 + vertex 11.4127 3.7082 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 8.97713 6.81763 -6 + vertex 11.2199 1.74083 -6 + vertex 11.124 1.31167 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 8.61343 7.0648 -6 + vertex 11.124 1.31167 -6 + vertex 11.0552 0.877332 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 8.26595 7.33433 -6 + vertex 11.0552 0.877332 -6 + vertex 11.0138 0.439533 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.2199 1.74083 -6 + vertex 9.35565 6.59377 -6 + vertex 11.1573 4.41749 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.93609 7.62514 -6 + vertex 11.0138 0.439533 -6 + vertex 11 0 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 11.124 -1.31167 -6 + vertex 8.61343 -7.0648 -6 + vertex 11.0552 -0.877332 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 9.74747 -6.39413 -6 + vertex 10.8579 -5.10935 -6 + vertex 10.5157 -5.78104 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 8.26595 -7.33433 -6 + vertex 11.0552 -0.877332 -6 + vertex 8.61343 -7.0648 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.151 -6.21949 -6 + vertex 10.5157 -5.78104 -6 + vertex 10.2849 -6.1713 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 9.74747 -6.39413 -6 + vertex 10.5157 -5.78104 -6 + vertex 10.151 -6.21949 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.8579 -5.10935 -6 + vertex 9.74747 -6.39413 -6 + vertex 9.35565 -6.59377 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.5157 5.78104 -6 + vertex 10.151 6.21949 -6 + vertex 10.2849 6.1713 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 11.0552 -0.877332 -6 + vertex 8.26595 -7.33433 -6 + vertex 11.0138 -0.439533 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.5157 5.78104 -6 + vertex 9.74747 6.39413 -6 + vertex 10.151 6.21949 -6 + endloop + endfacet + facet normal -0 -0 -1 + outer loop + vertex 9.74747 6.39413 -6 + vertex 10.8579 5.10935 -6 + vertex 9.35565 6.59377 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 10.8579 5.10935 -6 + vertex 9.74747 6.39413 -6 + vertex 10.5157 5.78104 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.2199 1.74083 -6 + vertex 8.97713 6.81763 -6 + vertex 9.35565 6.59377 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.1573 4.41749 -6 + vertex 9.35565 6.59377 -6 + vertex 10.8579 5.10935 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.93609 -7.62514 -6 + vertex 11.0138 -0.439533 -6 + vertex 8.26595 -7.33433 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.124 1.31167 -6 + vertex 8.61343 7.0648 -6 + vertex 8.97713 6.81763 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 11.0138 -0.439533 -6 + vertex 7.93609 -7.62514 -6 + vertex 11 0 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.0552 0.877332 -6 + vertex 8.26595 7.33433 -6 + vertex 8.61343 7.0648 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.93609 7.62514 -6 + vertex 11 0 -6 + vertex 7.93609 -7.62514 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 11.0138 0.439533 -6 + vertex 7.93609 7.62514 -6 + vertex 8.26595 7.33433 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.62514 -7.93609 -6 + vertex 7.93609 7.62514 -6 + vertex 7.93609 -7.62514 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.62514 -7.93609 -6 + vertex 7.62514 7.93609 -6 + vertex 7.93609 7.62514 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.439533 -11.0138 -6 + vertex 7.62514 -7.93609 -6 + vertex 7.33433 -8.26595 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 7.62514 -7.93609 -6 + vertex 0 -11 -6 + vertex 7.62514 7.93609 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0.877332 -11.0552 -6 + vertex 7.33433 -8.26595 -6 + vertex 7.0648 -8.61343 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 11 -6 + vertex 7.62514 7.93609 -6 + vertex 0 -11 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 1.31167 -11.124 -6 + vertex 7.0648 -8.61343 -6 + vertex 6.81763 -8.97713 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.439533 11.0138 -6 + vertex 7.62514 7.93609 -6 + vertex 0 11 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 1.74083 -11.2199 -6 + vertex 6.81763 -8.97713 -6 + vertex 6.59377 -9.35565 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.62514 -7.93609 -6 + vertex 0.439533 -11.0138 -6 + vertex 0 -11 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 5.10935 -10.8579 -6 + vertex 6.59377 -9.35565 -6 + vertex 6.39413 -9.74747 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.62514 7.93609 -6 + vertex 0.439533 11.0138 -6 + vertex 7.33433 8.26595 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 5.78104 -10.5157 -6 + vertex 6.39413 -9.74747 -6 + vertex 6.21949 -10.151 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.33433 -8.26595 -6 + vertex 0.877332 -11.0552 -6 + vertex 0.439533 -11.0138 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 5.78104 -10.5157 -6 + vertex 6.21949 -10.151 -6 + vertex 6.1713 -10.2849 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 1.31167 11.124 -6 + vertex 7.0648 8.61343 -6 + vertex 0.877332 11.0552 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 6.39413 -9.74747 -6 + vertex 5.78104 -10.5157 -6 + vertex 5.10935 -10.8579 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 6.81763 8.97713 -6 + vertex 1.74083 11.2199 -6 + vertex 6.59377 9.35565 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 6.59377 -9.35565 -6 + vertex 5.10935 -10.8579 -6 + vertex 4.41749 -11.1573 -6 + endloop + endfacet + facet normal -0 -0 -1 + outer loop + vertex 4.41749 11.1573 -6 + vertex 6.59377 9.35565 -6 + vertex 1.74083 11.2199 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 6.59377 -9.35565 -6 + vertex 4.41749 -11.1573 -6 + vertex 1.74083 -11.2199 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.0648 -8.61343 -6 + vertex 1.31167 -11.124 -6 + vertex 0.877332 -11.0552 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 2.16312 -11.3426 -6 + vertex 4.41749 -11.1573 -6 + vertex 3.7082 -11.4127 -6 + endloop + endfacet + facet normal -0 -0 -1 + outer loop + vertex 5.10935 10.8579 -6 + vertex 6.59377 9.35565 -6 + vertex 4.41749 11.1573 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 2.57687 -11.4916 -6 + vertex 3.7082 -11.4127 -6 + vertex 2.98428 -11.623 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 2.16312 -11.3426 -6 + vertex 3.7082 -11.4127 -6 + vertex 2.57687 -11.4916 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 2.57687 -11.4916 -6 + vertex 2.98428 -11.623 -6 + vertex 2.91591 -11.6383 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 4.41749 -11.1573 -6 + vertex 2.16312 -11.3426 -6 + vertex 1.74083 -11.2199 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 3.7082 11.4127 -6 + vertex 2.57687 11.4916 -6 + vertex 2.98428 11.623 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 2.98428 11.623 -6 + vertex 2.57687 11.4916 -6 + vertex 2.91591 11.6383 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 6.81763 -8.97713 -6 + vertex 1.74083 -11.2199 -6 + vertex 1.31167 -11.124 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 3.7082 11.4127 -6 + vertex 2.16312 11.3426 -6 + vertex 2.57687 11.4916 -6 + endloop + endfacet + facet normal -0 -0 -1 + outer loop + vertex 5.78104 10.5157 -6 + vertex 6.39413 9.74747 -6 + vertex 5.10935 10.8579 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 4.41749 11.1573 -6 + vertex 2.16312 11.3426 -6 + vertex 3.7082 11.4127 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 6.59377 9.35565 -6 + vertex 5.10935 10.8579 -6 + vertex 6.39413 9.74747 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 2.16312 11.3426 -6 + vertex 4.41749 11.1573 -6 + vertex 1.74083 11.2199 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 6.21949 10.151 -6 + vertex 5.78104 10.5157 -6 + vertex 6.1713 10.2849 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 6.39413 9.74747 -6 + vertex 5.78104 10.5157 -6 + vertex 6.21949 10.151 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.0648 8.61343 -6 + vertex 1.31167 11.124 -6 + vertex 6.81763 8.97713 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 1.74083 11.2199 -6 + vertex 6.81763 8.97713 -6 + vertex 1.31167 11.124 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex 0.877332 11.0552 -6 + vertex 7.33433 8.26595 -6 + vertex 0.439533 11.0138 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 7.33433 8.26595 -6 + vertex 0.877332 11.0552 -6 + vertex 7.0648 8.61343 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.62514 -7.93609 -6 + vertex 0 -11 -6 + vertex -0.439533 -11.0138 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex 0 -11 -6 + vertex -7.62514 -7.93609 -6 + vertex 0 11 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.33433 -8.26595 -6 + vertex -0.439533 -11.0138 -6 + vertex -0.877332 -11.0552 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.62514 7.93609 -6 + vertex 0 11 -6 + vertex -7.62514 -7.93609 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.0648 -8.61343 -6 + vertex -0.877332 -11.0552 -6 + vertex -1.31167 -11.124 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 0 11 -6 + vertex -7.62514 7.93609 -6 + vertex -0.439533 11.0138 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -6.81763 -8.97713 -6 + vertex -1.31167 -11.124 -6 + vertex -1.74083 -11.2199 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -7.33433 8.26595 -6 + vertex -0.439533 11.0138 -6 + vertex -7.62514 7.93609 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -4.41749 -11.1573 -6 + vertex -1.74083 -11.2199 -6 + vertex -2.16312 -11.3426 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -0.439533 11.0138 -6 + vertex -7.33433 8.26595 -6 + vertex -0.877332 11.0552 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -3.7082 -11.4127 -6 + vertex -2.16312 -11.3426 -6 + vertex -2.57687 -11.4916 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.439533 -11.0138 -6 + vertex -7.33433 -8.26595 -6 + vertex -7.62514 -7.93609 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -2.98428 -11.623 -6 + vertex -2.57687 -11.4916 -6 + vertex -2.91591 -11.6383 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -7.0648 8.61343 -6 + vertex -0.877332 11.0552 -6 + vertex -7.33433 8.26595 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -3.7082 -11.4127 -6 + vertex -2.57687 -11.4916 -6 + vertex -2.98428 -11.623 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -1.31167 11.124 -6 + vertex -6.81763 8.97713 -6 + vertex -1.74083 11.2199 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -2.16312 -11.3426 -6 + vertex -3.7082 -11.4127 -6 + vertex -4.41749 -11.1573 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -6.59377 9.35565 -6 + vertex -1.74083 11.2199 -6 + vertex -6.81763 8.97713 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -1.74083 -11.2199 -6 + vertex -4.41749 -11.1573 -6 + vertex -6.59377 -9.35565 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -0.877332 -11.0552 -6 + vertex -7.0648 -8.61343 -6 + vertex -7.33433 -8.26595 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -6.59377 -9.35565 -6 + vertex -4.41749 -11.1573 -6 + vertex -5.10935 -10.8579 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -4.41749 11.1573 -6 + vertex -1.74083 11.2199 -6 + vertex -6.59377 9.35565 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -6.39413 -9.74747 -6 + vertex -5.10935 -10.8579 -6 + vertex -5.78104 -10.5157 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -1.31167 -11.124 -6 + vertex -6.81763 -8.97713 -6 + vertex -7.0648 -8.61343 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -6.21949 -10.151 -6 + vertex -5.78104 -10.5157 -6 + vertex -6.1713 -10.2849 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -6.39413 -9.74747 -6 + vertex -5.78104 -10.5157 -6 + vertex -6.21949 -10.151 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -5.10935 -10.8579 -6 + vertex -6.39413 -9.74747 -6 + vertex -6.59377 -9.35565 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -5.78104 10.5157 -6 + vertex -6.21949 10.151 -6 + vertex -6.1713 10.2849 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -1.74083 -11.2199 -6 + vertex -6.59377 -9.35565 -6 + vertex -6.81763 -8.97713 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -5.78104 10.5157 -6 + vertex -6.39413 9.74747 -6 + vertex -6.21949 10.151 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -2.57687 11.4916 -6 + vertex -3.7082 11.4127 -6 + vertex -2.98428 11.623 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -5.10935 10.8579 -6 + vertex -6.39413 9.74747 -6 + vertex -5.78104 10.5157 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -4.41749 11.1573 -6 + vertex -6.59377 9.35565 -6 + vertex -5.10935 10.8579 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -6.39413 9.74747 -6 + vertex -5.10935 10.8579 -6 + vertex -6.59377 9.35565 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -2.16312 11.3426 -6 + vertex -3.7082 11.4127 -6 + vertex -2.57687 11.4916 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -3.7082 11.4127 -6 + vertex -2.16312 11.3426 -6 + vertex -4.41749 11.1573 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -1.74083 11.2199 -6 + vertex -4.41749 11.1573 -6 + vertex -2.16312 11.3426 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -2.57687 11.4916 -6 + vertex -2.98428 11.623 -6 + vertex -2.91591 11.6383 -6 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex -0.877332 11.0552 -6 + vertex -7.0648 8.61343 -6 + vertex -1.31167 11.124 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -6.81763 8.97713 -6 + vertex -1.31167 11.124 -6 + vertex -7.0648 8.61343 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.93609 -7.62514 -6 + vertex -7.62514 7.93609 -6 + vertex -7.62514 -7.93609 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.93609 -7.62514 -6 + vertex -7.93609 7.62514 -6 + vertex -7.62514 7.93609 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.0138 -0.439533 -6 + vertex -7.93609 -7.62514 -6 + vertex -8.26595 -7.33433 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.93609 -7.62514 -6 + vertex -11 0 -6 + vertex -7.93609 7.62514 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.0552 -0.877332 -6 + vertex -8.26595 -7.33433 -6 + vertex -8.61343 -7.0648 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.0138 0.439533 -6 + vertex -7.93609 7.62514 -6 + vertex -11 0 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.124 -1.31167 -6 + vertex -8.61343 -7.0648 -6 + vertex -8.97713 -6.81763 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.93609 7.62514 -6 + vertex -11.0138 0.439533 -6 + vertex -8.26595 7.33433 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.2199 -1.74083 -6 + vertex -8.97713 -6.81763 -6 + vertex -9.35565 -6.59377 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.0552 0.877332 -6 + vertex -8.26595 7.33433 -6 + vertex -11.0138 0.439533 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -10.8579 -5.10935 -6 + vertex -9.35565 -6.59377 -6 + vertex -9.74747 -6.39413 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -8.26595 7.33433 -6 + vertex -11.0552 0.877332 -6 + vertex -8.61343 7.0648 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -10.5157 -5.78104 -6 + vertex -9.74747 -6.39413 -6 + vertex -10.151 -6.21949 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.124 1.31167 -6 + vertex -8.61343 7.0648 -6 + vertex -11.0552 0.877332 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -10.5157 -5.78104 -6 + vertex -10.151 -6.21949 -6 + vertex -10.2849 -6.1713 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -8.61343 7.0648 -6 + vertex -11.124 1.31167 -6 + vertex -8.97713 6.81763 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -9.74747 -6.39413 -6 + vertex -10.5157 -5.78104 -6 + vertex -10.8579 -5.10935 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.2199 1.74083 -6 + vertex -8.97713 6.81763 -6 + vertex -11.124 1.31167 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -9.35565 -6.59377 -6 + vertex -10.8579 -5.10935 -6 + vertex -11.1573 -4.41749 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -8.97713 6.81763 -6 + vertex -11.2199 1.74083 -6 + vertex -9.35565 6.59377 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -11.1573 4.41749 -6 + vertex -9.35565 6.59377 -6 + vertex -11.2199 1.74083 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -7.93609 -7.62514 -6 + vertex -11.0138 -0.439533 -6 + vertex -11 0 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -8.26595 -7.33433 -6 + vertex -11.0552 -0.877332 -6 + vertex -11.0138 -0.439533 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -8.61343 -7.0648 -6 + vertex -11.124 -1.31167 -6 + vertex -11.0552 -0.877332 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -9.35565 -6.59377 -6 + vertex -11.1573 -4.41749 -6 + vertex -11.2199 -1.74083 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -8.97713 -6.81763 -6 + vertex -11.2199 -1.74083 -6 + vertex -11.124 -1.31167 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.1573 -4.41749 -6 + vertex -11.3426 -2.16312 -6 + vertex -11.2199 -1.74083 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.4127 -3.7082 -6 + vertex -11.3426 -2.16312 -6 + vertex -11.1573 -4.41749 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.4127 -3.7082 -6 + vertex -11.4916 -2.57687 -6 + vertex -11.3426 -2.16312 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.623 -2.98428 -6 + vertex -11.4916 -2.57687 -6 + vertex -11.4127 -3.7082 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.4916 -2.57687 -6 + vertex -11.623 -2.98428 -6 + vertex -11.6383 -2.91591 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -10.8579 5.10935 -6 + vertex -9.35565 6.59377 -6 + vertex -11.1573 4.41749 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -10.151 6.21949 -6 + vertex -10.5157 5.78104 -6 + vertex -10.2849 6.1713 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -9.74747 6.39413 -6 + vertex -10.5157 5.78104 -6 + vertex -10.151 6.21949 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -10.5157 5.78104 -6 + vertex -9.74747 6.39413 -6 + vertex -10.8579 5.10935 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -9.35565 6.59377 -6 + vertex -10.8579 5.10935 -6 + vertex -9.74747 6.39413 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.3426 2.16312 -6 + vertex -11.1573 4.41749 -6 + vertex -11.2199 1.74083 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.3426 2.16312 -6 + vertex -11.4127 3.7082 -6 + vertex -11.1573 4.41749 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.4916 2.57687 -6 + vertex -11.4127 3.7082 -6 + vertex -11.3426 2.16312 -6 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -11.4916 2.57687 -6 + vertex -11.623 2.98428 -6 + vertex -11.4127 3.7082 -6 + endloop + endfacet + facet normal 0 -0 -1 + outer loop + vertex -11.623 2.98428 -6 + vertex -11.4916 2.57687 -6 + vertex -11.6383 2.91591 -6 + endloop + endfacet + facet normal 0.995559 -0.0941439 0 + outer loop + vertex 11.0138 0.439533 6 + vertex 11.0552 0.877332 -6 + vertex 11.0552 0.877332 6 + endloop + endfacet + facet normal 0.995559 -0.0941439 0 + outer loop + vertex 11.0552 0.877332 -6 + vertex 11.0138 0.439533 6 + vertex 11.0138 0.439533 -6 + endloop + endfacet + facet normal 0.975931 -0.218081 0 + outer loop + vertex 11.124 1.31167 6 + vertex 11.2199 1.74083 -6 + vertex 11.2199 1.74083 6 + endloop + endfacet + facet normal 0.975931 -0.218081 0 + outer loop + vertex 11.2199 1.74083 -6 + vertex 11.124 1.31167 6 + vertex 11.124 1.31167 -6 + endloop + endfacet + facet normal 0.987686 0.156451 0 + outer loop + vertex 11.124 -1.31167 6 + vertex 11.0552 -0.877332 -6 + vertex 11.0552 -0.877332 6 + endloop + endfacet + facet normal 0.987686 0.156451 0 + outer loop + vertex 11.0552 -0.877332 -6 + vertex 11.124 -1.31167 6 + vertex 11.124 -1.31167 -6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.623 2.98428 6 + vertex 11.4916 2.57687 6 + vertex 11.6383 2.91591 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.4127 3.7082 6 + vertex 11.4916 2.57687 6 + vertex 11.623 2.98428 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.2984 2.38742 6 + vertex 11.4916 2.57687 6 + vertex 11.4127 3.7082 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.4916 2.57687 6 + vertex 9.2984 2.38742 6 + vertex 11.3426 2.16312 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.2984 2.38742 6 + vertex 11.4127 3.7082 6 + vertex 11.1573 4.41749 6 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 9.42996 1.79886 6 + vertex 11.3426 2.16312 6 + vertex 9.2984 2.38742 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.3426 2.16312 6 + vertex 9.42996 1.79886 6 + vertex 11.2199 1.74083 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.2199 1.74083 6 + vertex 9.42996 1.79886 6 + vertex 11.124 1.31167 6 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 9.5243 1.2032 6 + vertex 11.124 1.31167 6 + vertex 9.42996 1.79886 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.2984 2.38742 6 + vertex 11.1573 4.41749 6 + vertex 10.8579 5.10935 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.4916 -2.57687 6 + vertex 11.623 -2.98428 6 + vertex 11.6383 -2.91591 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.4916 -2.57687 6 + vertex 11.4127 -3.7082 6 + vertex 11.623 -2.98428 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 9.2984 -2.38742 6 + vertex 11.4916 -2.57687 6 + vertex 11.3426 -2.16312 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 9.42996 -1.79886 6 + vertex 11.3426 -2.16312 6 + vertex 11.2199 -1.74083 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.13014 -2.96656 6 + vertex 11.4916 -2.57687 6 + vertex 9.2984 -2.38742 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.42996 -1.79886 6 + vertex 11.2199 -1.74083 6 + vertex 11.124 -1.31167 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 9.5243 -1.2032 6 + vertex 11.124 -1.31167 6 + vertex 11.0552 -0.877332 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 9.58106 -0.602789 6 + vertex 11.0552 -0.877332 6 + vertex 11.0138 -0.439533 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.3426 -2.16312 6 + vertex 9.42996 -1.79886 6 + vertex 9.2984 -2.38742 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 9.6 0 6 + vertex 11.0138 -0.439533 6 + vertex 11 0 6 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 9.58106 0.602789 6 + vertex 11.0552 0.877332 6 + vertex 9.5243 1.2032 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.68634 4.08748 6 + vertex 10.8579 5.10935 6 + vertex 10.5157 5.78104 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.0138 -0.439533 6 + vertex 9.6 0 6 + vertex 9.58106 -0.602789 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.151 6.21949 6 + vertex 10.5157 5.78104 6 + vertex 10.2849 6.1713 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.0552 -0.877332 6 + vertex 9.58106 -0.602789 6 + vertex 9.5243 -1.2032 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.74747 6.39413 6 + vertex 10.5157 5.78104 6 + vertex 10.151 6.21949 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.124 -1.31167 6 + vertex 9.5243 -1.2032 6 + vertex 9.42996 -1.79886 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.5157 5.78104 6 + vertex 9.74747 6.39413 6 + vertex 8.41254 4.62484 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.4916 -2.57687 6 + vertex 9.13014 -2.96656 6 + vertex 11.4127 -3.7082 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.4127 -3.7082 6 + vertex 9.13014 -2.96656 6 + vertex 11.1573 -4.41749 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.0138 0.439533 6 + vertex 9.6 0 6 + vertex 11 0 6 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 9.6 0 6 + vertex 11.0138 0.439533 6 + vertex 9.58106 0.602789 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.0552 0.877332 6 + vertex 9.58106 0.602789 6 + vertex 11.0138 0.439533 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.10555 5.14394 6 + vertex 9.74747 6.39413 6 + vertex 9.35565 6.59377 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.124 1.31167 6 + vertex 9.5243 1.2032 6 + vertex 11.0552 0.877332 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.8579 5.10935 6 + vertex 9.13014 2.96656 6 + vertex 9.2984 2.38742 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.10555 5.14394 6 + vertex 9.35565 6.59377 6 + vertex 8.97713 6.81763 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.8579 5.10935 6 + vertex 8.92585 3.534 6 + vertex 9.13014 2.96656 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.8579 5.10935 6 + vertex 8.68634 4.08748 6 + vertex 8.92585 3.534 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.76656 5.64274 6 + vertex 8.97713 6.81763 6 + vertex 8.61343 7.0648 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.5157 5.78104 6 + vertex 8.41254 4.62484 6 + vertex 8.68634 4.08748 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.39693 6.11927 6 + vertex 8.61343 7.0648 6 + vertex 8.26595 7.33433 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.74747 6.39413 6 + vertex 8.10555 5.14394 6 + vertex 8.41254 4.62484 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.9981 6.57165 6 + vertex 8.26595 7.33433 6 + vertex 7.93609 7.62514 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.97713 6.81763 6 + vertex 7.76656 5.64274 6 + vertex 8.10555 5.14394 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.9981 6.57165 6 + vertex 7.93609 7.62514 6 + vertex 7.62514 7.93609 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.61343 7.0648 6 + vertex 7.39693 6.11927 6 + vertex 7.76656 5.64274 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.57165 6.9981 6 + vertex 7.62514 7.93609 6 + vertex 7.33433 8.26595 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.11927 7.39693 6 + vertex 7.33433 8.26595 6 + vertex 7.0648 8.61343 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.26595 7.33433 6 + vertex 6.9981 6.57165 6 + vertex 7.39693 6.11927 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.64274 7.76656 6 + vertex 7.0648 8.61343 6 + vertex 6.81763 8.97713 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.64274 7.76656 6 + vertex 6.81763 8.97713 6 + vertex 6.59377 9.35565 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.62514 7.93609 6 + vertex 6.57165 6.9981 6 + vertex 6.9981 6.57165 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.14394 8.10555 6 + vertex 6.59377 9.35565 6 + vertex 6.39413 9.74747 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.78104 10.5157 6 + vertex 6.39413 9.74747 6 + vertex 6.21949 10.151 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.78104 10.5157 6 + vertex 6.21949 10.151 6 + vertex 6.1713 10.2849 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.33433 8.26595 6 + vertex 6.11927 7.39693 6 + vertex 6.57165 6.9981 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.39413 9.74747 6 + vertex 5.78104 10.5157 6 + vertex 4.62484 8.41254 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.0648 8.61343 6 + vertex 5.64274 7.76656 6 + vertex 6.11927 7.39693 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.59377 9.35565 6 + vertex 5.14394 8.10555 6 + vertex 5.64274 7.76656 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.62484 8.41254 6 + vertex 5.78104 10.5157 6 + vertex 5.10935 10.8579 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.39413 9.74747 6 + vertex 4.62484 8.41254 6 + vertex 5.14394 8.10555 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.08748 8.68634 6 + vertex 5.10935 10.8579 6 + vertex 4.41749 11.1573 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.10935 10.8579 6 + vertex 4.08748 8.68634 6 + vertex 4.62484 8.41254 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.534 8.92585 6 + vertex 4.41749 11.1573 6 + vertex 3.7082 11.4127 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.41749 11.1573 6 + vertex 3.534 8.92585 6 + vertex 4.08748 8.68634 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.57687 11.4916 6 + vertex 3.7082 11.4127 6 + vertex 2.98428 11.623 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.7082 11.4127 6 + vertex 2.96656 9.13014 6 + vertex 3.534 8.92585 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.57687 11.4916 6 + vertex 2.98428 11.623 6 + vertex 2.91591 11.6383 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.7082 11.4127 6 + vertex 2.57687 11.4916 6 + vertex 2.96656 9.13014 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.57687 11.4916 6 + vertex 2.38742 9.2984 6 + vertex 2.96656 9.13014 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.16312 11.3426 6 + vertex 2.38742 9.2984 6 + vertex 2.57687 11.4916 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.16312 11.3426 6 + vertex 1.79886 9.42996 6 + vertex 2.38742 9.2984 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.74083 11.2199 6 + vertex 1.79886 9.42996 6 + vertex 2.16312 11.3426 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.31167 11.124 6 + vertex 1.79886 9.42996 6 + vertex 1.74083 11.2199 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.31167 11.124 6 + vertex 1.2032 9.5243 6 + vertex 1.79886 9.42996 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.877332 11.0552 6 + vertex 1.2032 9.5243 6 + vertex 1.31167 11.124 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.877332 11.0552 6 + vertex 0.602789 9.58106 6 + vertex 1.2032 9.5243 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.439533 11.0138 6 + vertex 0.602789 9.58106 6 + vertex 0.877332 11.0552 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 9.6 6 + vertex 0.439533 11.0138 6 + vertex 0 11 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.439533 11.0138 6 + vertex 0 9.6 6 + vertex 0.602789 9.58106 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.439533 11.0138 6 + vertex 0 9.6 6 + vertex 0 11 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.439533 11.0138 6 + vertex -0.602789 9.58106 6 + vertex 0 9.6 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.877332 11.0552 6 + vertex -0.602789 9.58106 6 + vertex -0.439533 11.0138 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.877332 11.0552 6 + vertex -1.2032 9.5243 6 + vertex -0.602789 9.58106 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.31167 11.124 6 + vertex -1.2032 9.5243 6 + vertex -0.877332 11.0552 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.79886 9.42996 6 + vertex -1.31167 11.124 6 + vertex -1.74083 11.2199 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.31167 11.124 6 + vertex -1.79886 9.42996 6 + vertex -1.2032 9.5243 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.16312 11.3426 6 + vertex -1.79886 9.42996 6 + vertex -1.74083 11.2199 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.16312 11.3426 6 + vertex -2.38742 9.2984 6 + vertex -1.79886 9.42996 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.57687 11.4916 6 + vertex -2.38742 9.2984 6 + vertex -2.16312 11.3426 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.98428 11.623 6 + vertex -2.57687 11.4916 6 + vertex -2.91591 11.6383 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.7082 11.4127 6 + vertex -2.57687 11.4916 6 + vertex -2.98428 11.623 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.57687 11.4916 6 + vertex -2.96656 9.13014 6 + vertex -2.38742 9.2984 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.57687 11.4916 6 + vertex -3.7082 11.4127 6 + vertex -2.96656 9.13014 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.96656 9.13014 6 + vertex -3.7082 11.4127 6 + vertex -3.534 8.92585 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.41749 11.1573 6 + vertex -3.534 8.92585 6 + vertex -3.7082 11.4127 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.534 8.92585 6 + vertex -4.41749 11.1573 6 + vertex -4.08748 8.68634 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.10935 10.8579 6 + vertex -4.08748 8.68634 6 + vertex -4.41749 11.1573 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.08748 8.68634 6 + vertex -5.10935 10.8579 6 + vertex -4.62484 8.41254 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.78104 10.5157 6 + vertex -4.62484 8.41254 6 + vertex -5.10935 10.8579 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.39413 9.74747 6 + vertex -4.62484 8.41254 6 + vertex -5.78104 10.5157 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.62484 8.41254 6 + vertex -6.39413 9.74747 6 + vertex -5.14394 8.10555 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.59377 9.35565 6 + vertex -5.14394 8.10555 6 + vertex -6.39413 9.74747 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.21949 10.151 6 + vertex -5.78104 10.5157 6 + vertex -6.1713 10.2849 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.39413 9.74747 6 + vertex -5.78104 10.5157 6 + vertex -6.21949 10.151 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.14394 8.10555 6 + vertex -6.59377 9.35565 6 + vertex -5.64274 7.76656 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.81763 8.97713 6 + vertex -5.64274 7.76656 6 + vertex -6.59377 9.35565 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -7.0648 8.61343 6 + vertex -5.64274 7.76656 6 + vertex -6.81763 8.97713 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.64274 7.76656 6 + vertex -7.0648 8.61343 6 + vertex -6.11927 7.39693 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -7.33433 8.26595 6 + vertex -6.11927 7.39693 6 + vertex -7.0648 8.61343 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.11927 7.39693 6 + vertex -7.33433 8.26595 6 + vertex -6.57165 6.9981 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -7.62514 7.93609 6 + vertex -6.57165 6.9981 6 + vertex -7.33433 8.26595 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.57165 6.9981 6 + vertex -7.62514 7.93609 6 + vertex -6.9981 6.57165 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -7.93609 7.62514 6 + vertex -6.9981 6.57165 6 + vertex -7.62514 7.93609 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.26595 7.33433 6 + vertex -6.9981 6.57165 6 + vertex -7.93609 7.62514 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.9981 6.57165 6 + vertex -8.26595 7.33433 6 + vertex -7.39693 6.11927 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.61343 7.0648 6 + vertex -7.39693 6.11927 6 + vertex -8.26595 7.33433 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.39693 6.11927 6 + vertex -8.61343 7.0648 6 + vertex -7.76656 5.64274 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.97713 6.81763 6 + vertex -7.76656 5.64274 6 + vertex -8.61343 7.0648 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.76656 5.64274 6 + vertex -8.97713 6.81763 6 + vertex -8.10555 5.14394 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.35565 6.59377 6 + vertex -8.10555 5.14394 6 + vertex -8.97713 6.81763 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.74747 6.39413 6 + vertex -8.10555 5.14394 6 + vertex -9.35565 6.59377 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.10555 5.14394 6 + vertex -9.74747 6.39413 6 + vertex -8.41254 4.62484 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -10.5157 5.78104 6 + vertex -8.41254 4.62484 6 + vertex -9.74747 6.39413 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.41254 4.62484 6 + vertex -10.5157 5.78104 6 + vertex -8.68634 4.08748 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -10.8579 5.10935 6 + vertex -8.68634 4.08748 6 + vertex -10.5157 5.78104 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.68634 4.08748 6 + vertex -10.8579 5.10935 6 + vertex -8.92585 3.534 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.92585 3.534 6 + vertex -11.1573 4.41749 6 + vertex -9.13014 2.96656 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.4916 2.57687 6 + vertex -9.13014 2.96656 6 + vertex -11.4127 3.7082 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.13014 2.96656 6 + vertex -11.4916 2.57687 6 + vertex -9.2984 2.38742 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.4127 3.7082 6 + vertex -9.13014 2.96656 6 + vertex -11.1573 4.41749 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.5243 -1.2032 6 + vertex -11.124 -1.31167 6 + vertex -9.42996 -1.79886 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.2199 -1.74083 6 + vertex -9.42996 -1.79886 6 + vertex -11.124 -1.31167 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.3426 -2.16312 6 + vertex -9.42996 -1.79886 6 + vertex -11.2199 -1.74083 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.42996 -1.79886 6 + vertex -11.3426 -2.16312 6 + vertex -9.2984 -2.38742 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.2984 -2.38742 6 + vertex -11.1573 -4.41749 6 + vertex -10.8579 -5.10935 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.4916 -2.57687 6 + vertex -9.2984 -2.38742 6 + vertex -11.3426 -2.16312 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.2984 -2.38742 6 + vertex -11.4127 -3.7082 6 + vertex -11.1573 -4.41749 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.2984 -2.38742 6 + vertex -11.4916 -2.57687 6 + vertex -11.4127 -3.7082 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.4916 -2.57687 6 + vertex -11.623 -2.98428 6 + vertex -11.4127 -3.7082 6 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -11.623 -2.98428 6 + vertex -11.4916 -2.57687 6 + vertex -11.6383 -2.91591 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 8.92585 -3.534 6 + vertex 11.1573 -4.41749 6 + vertex 9.13014 -2.96656 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 11.1573 -4.41749 6 + vertex 8.92585 -3.534 6 + vertex 10.8579 -5.10935 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 8.68634 -4.08748 6 + vertex 10.8579 -5.10935 6 + vertex 8.92585 -3.534 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.8579 -5.10935 6 + vertex 8.68634 -4.08748 6 + vertex 10.5157 -5.78104 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 8.41254 -4.62484 6 + vertex 10.5157 -5.78104 6 + vertex 8.68634 -4.08748 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.5157 -5.78104 6 + vertex 10.151 -6.21949 6 + vertex 10.2849 -6.1713 6 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 9.74747 -6.39413 6 + vertex 10.5157 -5.78104 6 + vertex 8.41254 -4.62484 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 10.5157 -5.78104 6 + vertex 9.74747 -6.39413 6 + vertex 10.151 -6.21949 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 8.10555 -5.14394 6 + vertex 9.74747 -6.39413 6 + vertex 8.41254 -4.62484 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.74747 -6.39413 6 + vertex 8.10555 -5.14394 6 + vertex 9.35565 -6.59377 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.35565 -6.59377 6 + vertex 8.10555 -5.14394 6 + vertex 8.97713 -6.81763 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 7.76656 -5.64274 6 + vertex 8.97713 -6.81763 6 + vertex 8.10555 -5.14394 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.97713 -6.81763 6 + vertex 7.76656 -5.64274 6 + vertex 8.61343 -7.0648 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 7.39693 -6.11927 6 + vertex 8.61343 -7.0648 6 + vertex 7.76656 -5.64274 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.61343 -7.0648 6 + vertex 7.39693 -6.11927 6 + vertex 8.26595 -7.33433 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 6.9981 -6.57165 6 + vertex 8.26595 -7.33433 6 + vertex 7.39693 -6.11927 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.26595 -7.33433 6 + vertex 6.9981 -6.57165 6 + vertex 7.93609 -7.62514 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.93609 -7.62514 6 + vertex 6.9981 -6.57165 6 + vertex 7.62514 -7.93609 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 6.57165 -6.9981 6 + vertex 7.62514 -7.93609 6 + vertex 6.9981 -6.57165 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.62514 -7.93609 6 + vertex 6.57165 -6.9981 6 + vertex 7.33433 -8.26595 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 6.11927 -7.39693 6 + vertex 7.33433 -8.26595 6 + vertex 6.57165 -6.9981 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.33433 -8.26595 6 + vertex 6.11927 -7.39693 6 + vertex 7.0648 -8.61343 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.64274 -7.76656 6 + vertex 7.0648 -8.61343 6 + vertex 6.11927 -7.39693 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.0648 -8.61343 6 + vertex 5.64274 -7.76656 6 + vertex 6.81763 -8.97713 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.81763 -8.97713 6 + vertex 5.64274 -7.76656 6 + vertex 6.59377 -9.35565 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.14394 -8.10555 6 + vertex 6.59377 -9.35565 6 + vertex 5.64274 -7.76656 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.59377 -9.35565 6 + vertex 5.14394 -8.10555 6 + vertex 6.39413 -9.74747 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.62484 -8.41254 6 + vertex 6.39413 -9.74747 6 + vertex 5.14394 -8.10555 6 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex 5.78104 -10.5157 6 + vertex 6.39413 -9.74747 6 + vertex 4.62484 -8.41254 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.39413 -9.74747 6 + vertex 5.78104 -10.5157 6 + vertex 6.21949 -10.151 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.21949 -10.151 6 + vertex 5.78104 -10.5157 6 + vertex 6.1713 -10.2849 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.78104 -10.5157 6 + vertex 4.62484 -8.41254 6 + vertex 5.10935 -10.8579 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.08748 -8.68634 6 + vertex 5.10935 -10.8579 6 + vertex 4.62484 -8.41254 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.10935 -10.8579 6 + vertex 4.08748 -8.68634 6 + vertex 4.41749 -11.1573 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.534 -8.92585 6 + vertex 4.41749 -11.1573 6 + vertex 4.08748 -8.68634 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.41749 -11.1573 6 + vertex 3.534 -8.92585 6 + vertex 3.7082 -11.4127 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.96656 -9.13014 6 + vertex 3.7082 -11.4127 6 + vertex 3.534 -8.92585 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.57687 -11.4916 6 + vertex 3.7082 -11.4127 6 + vertex 2.96656 -9.13014 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.7082 -11.4127 6 + vertex 2.57687 -11.4916 6 + vertex 2.98428 -11.623 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.98428 -11.623 6 + vertex 2.57687 -11.4916 6 + vertex 2.91591 -11.6383 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.38742 -9.2984 6 + vertex 2.57687 -11.4916 6 + vertex 2.96656 -9.13014 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.38742 -9.2984 6 + vertex 2.16312 -11.3426 6 + vertex 2.57687 -11.4916 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.79886 -9.42996 6 + vertex 2.16312 -11.3426 6 + vertex 2.38742 -9.2984 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.79886 -9.42996 6 + vertex 1.74083 -11.2199 6 + vertex 2.16312 -11.3426 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.79886 -9.42996 6 + vertex 1.31167 -11.124 6 + vertex 1.74083 -11.2199 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.2032 -9.5243 6 + vertex 1.31167 -11.124 6 + vertex 1.79886 -9.42996 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.2032 -9.5243 6 + vertex 0.877332 -11.0552 6 + vertex 1.31167 -11.124 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.602789 -9.58106 6 + vertex 0.877332 -11.0552 6 + vertex 1.2032 -9.5243 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.602789 -9.58106 6 + vertex 0.439533 -11.0138 6 + vertex 0.877332 -11.0552 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0 -9.6 6 + vertex 0.439533 -11.0138 6 + vertex 0.602789 -9.58106 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -9.6 6 + vertex 0 -11 6 + vertex 0.439533 -11.0138 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -9.6 6 + vertex -0.439533 -11.0138 6 + vertex 0 -11 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.602789 -9.58106 6 + vertex -0.439533 -11.0138 6 + vertex 0 -9.6 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.602789 -9.58106 6 + vertex -0.877332 -11.0552 6 + vertex -0.439533 -11.0138 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.2032 -9.5243 6 + vertex -0.877332 -11.0552 6 + vertex -0.602789 -9.58106 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.2032 -9.5243 6 + vertex -1.31167 -11.124 6 + vertex -0.877332 -11.0552 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.79886 -9.42996 6 + vertex -1.31167 -11.124 6 + vertex -1.2032 -9.5243 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.31167 -11.124 6 + vertex -1.79886 -9.42996 6 + vertex -1.74083 -11.2199 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.79886 -9.42996 6 + vertex -2.16312 -11.3426 6 + vertex -1.74083 -11.2199 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.38742 -9.2984 6 + vertex -2.16312 -11.3426 6 + vertex -1.79886 -9.42996 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.38742 -9.2984 6 + vertex -2.57687 -11.4916 6 + vertex -2.16312 -11.3426 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.96656 -9.13014 6 + vertex -2.57687 -11.4916 6 + vertex -2.38742 -9.2984 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.7082 -11.4127 6 + vertex -2.57687 -11.4916 6 + vertex -2.96656 -9.13014 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.57687 -11.4916 6 + vertex -2.98428 -11.623 6 + vertex -2.91591 -11.6383 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.7082 -11.4127 6 + vertex -2.96656 -9.13014 6 + vertex -3.534 -8.92585 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.57687 -11.4916 6 + vertex -3.7082 -11.4127 6 + vertex -2.98428 -11.623 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.41749 -11.1573 6 + vertex -3.534 -8.92585 6 + vertex -4.08748 -8.68634 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.534 -8.92585 6 + vertex -4.41749 -11.1573 6 + vertex -3.7082 -11.4127 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.10935 -10.8579 6 + vertex -4.08748 -8.68634 6 + vertex -4.62484 -8.41254 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.08748 -8.68634 6 + vertex -5.10935 -10.8579 6 + vertex -4.41749 -11.1573 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.39413 -9.74747 6 + vertex -4.62484 -8.41254 6 + vertex -5.14394 -8.10555 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.59377 -9.35565 6 + vertex -5.14394 -8.10555 6 + vertex -5.64274 -7.76656 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.62484 -8.41254 6 + vertex -5.78104 -10.5157 6 + vertex -5.10935 -10.8579 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.0648 -8.61343 6 + vertex -5.64274 -7.76656 6 + vertex -6.11927 -7.39693 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.62484 -8.41254 6 + vertex -6.39413 -9.74747 6 + vertex -5.78104 -10.5157 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.78104 -10.5157 6 + vertex -6.21949 -10.151 6 + vertex -6.1713 -10.2849 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.78104 -10.5157 6 + vertex -6.39413 -9.74747 6 + vertex -6.21949 -10.151 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.33433 -8.26595 6 + vertex -6.11927 -7.39693 6 + vertex -6.57165 -6.9981 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.14394 -8.10555 6 + vertex -6.59377 -9.35565 6 + vertex -6.39413 -9.74747 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.64274 -7.76656 6 + vertex -6.81763 -8.97713 6 + vertex -6.59377 -9.35565 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.62514 -7.93609 6 + vertex -6.57165 -6.9981 6 + vertex -6.9981 -6.57165 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.64274 -7.76656 6 + vertex -7.0648 -8.61343 6 + vertex -6.81763 -8.97713 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.11927 -7.39693 6 + vertex -7.33433 -8.26595 6 + vertex -7.0648 -8.61343 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.26595 -7.33433 6 + vertex -6.9981 -6.57165 6 + vertex -7.39693 -6.11927 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.57165 -6.9981 6 + vertex -7.62514 -7.93609 6 + vertex -7.33433 -8.26595 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.61343 -7.0648 6 + vertex -7.39693 -6.11927 6 + vertex -7.76656 -5.64274 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.9981 -6.57165 6 + vertex -7.93609 -7.62514 6 + vertex -7.62514 -7.93609 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.97713 -6.81763 6 + vertex -7.76656 -5.64274 6 + vertex -8.10555 -5.14394 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.9981 -6.57165 6 + vertex -8.26595 -7.33433 6 + vertex -7.93609 -7.62514 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.74747 -6.39413 6 + vertex -8.10555 -5.14394 6 + vertex -8.41254 -4.62484 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.39693 -6.11927 6 + vertex -8.61343 -7.0648 6 + vertex -8.26595 -7.33433 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5157 -5.78104 6 + vertex -8.41254 -4.62484 6 + vertex -8.68634 -4.08748 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.8579 -5.10935 6 + vertex -8.68634 -4.08748 6 + vertex -8.92585 -3.534 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.76656 -5.64274 6 + vertex -8.97713 -6.81763 6 + vertex -8.61343 -7.0648 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.8579 -5.10935 6 + vertex -8.92585 -3.534 6 + vertex -9.13014 -2.96656 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.8579 -5.10935 6 + vertex -9.13014 -2.96656 6 + vertex -9.2984 -2.38742 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.10555 -5.14394 6 + vertex -9.35565 -6.59377 6 + vertex -8.97713 -6.81763 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.124 -1.31167 6 + vertex -9.5243 -1.2032 6 + vertex -11.0552 -0.877332 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.0552 -0.877332 6 + vertex -9.58106 -0.602789 6 + vertex -11.0138 -0.439533 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.6 0 6 + vertex -11.0138 -0.439533 6 + vertex -9.58106 -0.602789 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.68634 -4.08748 6 + vertex -10.8579 -5.10935 6 + vertex -10.5157 -5.78104 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.0138 -0.439533 6 + vertex -9.6 0 6 + vertex -11 0 6 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -11.3426 2.16312 6 + vertex -9.2984 2.38742 6 + vertex -11.4916 2.57687 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5157 5.78104 6 + vertex -9.74747 6.39413 6 + vertex -10.151 6.21949 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.58106 -0.602789 6 + vertex -11.0552 -0.877332 6 + vertex -9.5243 -1.2032 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.5157 5.78104 6 + vertex -10.151 6.21949 6 + vertex -10.2849 6.1713 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.10555 -5.14394 6 + vertex -9.74747 -6.39413 6 + vertex -9.35565 -6.59377 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.1573 4.41749 6 + vertex -8.92585 3.534 6 + vertex -10.8579 5.10935 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.41254 -4.62484 6 + vertex -10.5157 -5.78104 6 + vertex -9.74747 -6.39413 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.2984 2.38742 6 + vertex -11.3426 2.16312 6 + vertex -9.42996 1.79886 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -10.151 -6.21949 6 + vertex -10.5157 -5.78104 6 + vertex -10.2849 -6.1713 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.74747 -6.39413 6 + vertex -10.5157 -5.78104 6 + vertex -10.151 -6.21949 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.6 0 6 + vertex -11.0138 0.439533 6 + vertex -11 0 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.58106 0.602789 6 + vertex -11.0138 0.439533 6 + vertex -9.6 0 6 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -11.0138 0.439533 6 + vertex -9.58106 0.602789 6 + vertex -11.0552 0.877332 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.42996 1.79886 6 + vertex -11.124 1.31167 6 + vertex -9.5243 1.2032 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.5243 1.2032 6 + vertex -11.0552 0.877332 6 + vertex -9.58106 0.602789 6 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -11.0552 0.877332 6 + vertex -9.5243 1.2032 6 + vertex -11.124 1.31167 6 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -11.124 1.31167 6 + vertex -9.42996 1.79886 6 + vertex -11.2199 1.74083 6 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -11.2199 1.74083 6 + vertex -9.42996 1.79886 6 + vertex -11.3426 2.16312 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -11.623 2.98428 6 + vertex -11.4916 2.57687 6 + vertex -11.4127 3.7082 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -11.4916 2.57687 6 + vertex -11.623 2.98428 6 + vertex -11.6383 2.91591 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 4.48 0 6 + vertex 4.47116 0.281301 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 4.47116 0.281301 6 + vertex 4.44467 0.561492 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 -2.82538 6 + vertex 4.48 0 6 + vertex 1.5 2.82538 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 4.44467 0.561492 6 + vertex 4.40065 0.839468 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.48 0 6 + vertex 1.5 -2.82538 6 + vertex 4.47116 -0.281301 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 4.40065 0.839468 6 + vertex 4.33925 1.11413 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.47116 -0.281301 6 + vertex 1.5 -2.82538 6 + vertex 4.44467 -0.561492 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 4.33925 1.11413 6 + vertex 4.26073 1.3844 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.44467 -0.561492 6 + vertex 1.5 -2.82538 6 + vertex 4.40065 -0.839468 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 4.26073 1.3844 6 + vertex 4.1654 1.6492 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.40065 -0.839468 6 + vertex 1.5 -2.82538 6 + vertex 4.33925 -1.11413 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 4.1654 1.6492 6 + vertex 4.05363 1.90749 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.33925 -1.11413 6 + vertex 1.5 -2.82538 6 + vertex 4.26073 -1.3844 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 4.05363 1.90749 6 + vertex 3.92585 2.15826 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.26073 -1.3844 6 + vertex 1.5 -2.82538 6 + vertex 4.1654 -1.6492 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 3.92585 2.15826 6 + vertex 3.78259 2.4005 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.1654 -1.6492 6 + vertex 1.5 -2.82538 6 + vertex 4.05363 -1.90749 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 3.78259 2.4005 6 + vertex 3.6244 2.63328 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.05363 -1.90749 6 + vertex 1.5 -2.82538 6 + vertex 3.92585 -2.15826 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 3.6244 2.63328 6 + vertex 3.4519 2.85566 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.92585 -2.15826 6 + vertex 1.5 -2.82538 6 + vertex 3.78259 -2.4005 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 3.4519 2.85566 6 + vertex 3.26578 3.06677 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.78259 -2.4005 6 + vertex 1.5 -2.82538 6 + vertex 3.6244 -2.63328 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 3.26578 3.06677 6 + vertex 3.06677 3.26578 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.6244 -2.63328 6 + vertex 1.5 -2.82538 6 + vertex 3.4519 -2.85566 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 3.06677 3.26578 6 + vertex 2.85566 3.4519 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.4519 -2.85566 6 + vertex 1.5 -2.82538 6 + vertex 3.26578 -3.06677 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 2.85566 3.4519 6 + vertex 2.63328 3.6244 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.26578 -3.06677 6 + vertex 1.5 -2.82538 6 + vertex 3.06677 -3.26578 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 2.63328 3.6244 6 + vertex 2.4005 3.78259 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.06677 -3.26578 6 + vertex 1.5 -2.82538 6 + vertex 2.85566 -3.4519 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 2.4005 3.78259 6 + vertex 2.15826 3.92585 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.85566 -3.4519 6 + vertex 1.5 -2.82538 6 + vertex 2.63328 -3.6244 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.5 2.82538 6 + vertex 2.15826 3.92585 6 + vertex 1.90749 4.05363 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.63328 -3.6244 6 + vertex 1.5 -2.82538 6 + vertex 2.4005 -3.78259 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.36249 2.89545 6 + vertex 1.90749 4.05363 6 + vertex 1.6492 4.1654 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.4005 -3.78259 6 + vertex 1.5 -2.82538 6 + vertex 2.15826 -3.92585 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.15826 -3.92585 6 + vertex 1.5 -2.82538 6 + vertex 1.90749 -4.05363 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.178 2.97528 6 + vertex 1.6492 4.1654 6 + vertex 1.3844 4.26073 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.90749 4.05363 6 + vertex 1.36249 2.89545 6 + vertex 1.5 2.82538 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.6492 4.1654 6 + vertex 1.178 2.97528 6 + vertex 1.36249 2.89545 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.988853 3.04338 6 + vertex 1.3844 4.26073 6 + vertex 1.11413 4.33925 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.3844 4.26073 6 + vertex 0.988853 3.04338 6 + vertex 1.178 2.97528 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.795807 3.09947 6 + vertex 1.11413 4.33925 6 + vertex 0.839468 4.40065 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.11413 4.33925 6 + vertex 0.795807 3.09947 6 + vertex 0.988853 3.04338 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.839468 4.40065 6 + vertex 0.59962 3.14332 6 + vertex 0.795807 3.09947 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.561492 4.44467 6 + vertex 0.59962 3.14332 6 + vertex 0.839468 4.40065 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.561492 4.44467 6 + vertex 0.401066 3.17477 6 + vertex 0.59962 3.14332 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.281301 4.47116 6 + vertex 0.401066 3.17477 6 + vertex 0.561492 4.44467 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.281301 4.47116 6 + vertex 0.20093 3.19368 6 + vertex 0.401066 3.17477 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 4.48 6 + vertex 0.20093 3.19368 6 + vertex 0.281301 4.47116 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 4.48 6 + vertex 0 3.2 6 + vertex 0.20093 3.19368 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 4.48 6 + vertex -0.20093 3.19368 6 + vertex 0 3.2 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.281301 4.47116 6 + vertex -0.20093 3.19368 6 + vertex 0 4.48 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.281301 4.47116 6 + vertex -0.401066 3.17477 6 + vertex -0.20093 3.19368 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.561492 4.44467 6 + vertex -0.401066 3.17477 6 + vertex -0.281301 4.47116 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.561492 4.44467 6 + vertex -0.59962 3.14332 6 + vertex -0.401066 3.17477 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.839468 4.40065 6 + vertex -0.59962 3.14332 6 + vertex -0.561492 4.44467 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.59962 3.14332 6 + vertex -0.839468 4.40065 6 + vertex -0.795807 3.09947 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -1.11413 4.33925 6 + vertex -0.795807 3.09947 6 + vertex -0.839468 4.40065 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.795807 3.09947 6 + vertex -1.11413 4.33925 6 + vertex -0.988853 3.04338 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -1.3844 4.26073 6 + vertex -0.988853 3.04338 6 + vertex -1.11413 4.33925 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.988853 3.04338 6 + vertex -1.3844 4.26073 6 + vertex -1.178 2.97528 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -1.6492 4.1654 6 + vertex -1.178 2.97528 6 + vertex -1.3844 4.26073 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.178 2.97528 6 + vertex -1.6492 4.1654 6 + vertex -1.36249 2.89545 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -1.90749 4.05363 6 + vertex -1.36249 2.89545 6 + vertex -1.6492 4.1654 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.36249 2.89545 6 + vertex -1.90749 4.05363 6 + vertex -1.54161 2.80418 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.15826 3.92585 6 + vertex -1.54161 2.80418 6 + vertex -1.90749 4.05363 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.54161 2.80418 6 + vertex -2.15826 3.92585 6 + vertex -1.71465 2.70185 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.4005 3.78259 6 + vertex -1.71465 2.70185 6 + vertex -2.15826 3.92585 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.71465 2.70185 6 + vertex -2.4005 3.78259 6 + vertex -1.88091 2.58885 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.63328 3.6244 6 + vertex -1.88091 2.58885 6 + vertex -2.4005 3.78259 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.88091 2.58885 6 + vertex -2.63328 3.6244 6 + vertex -2.03976 2.46564 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.85566 3.4519 6 + vertex -2.03976 2.46564 6 + vertex -2.63328 3.6244 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.03976 2.46564 6 + vertex -2.85566 3.4519 6 + vertex -2.19055 2.3327 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.06677 3.26578 6 + vertex -2.19055 2.3327 6 + vertex -2.85566 3.4519 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.19055 2.3327 6 + vertex -3.06677 3.26578 6 + vertex -2.3327 2.19055 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.26578 3.06677 6 + vertex -2.3327 2.19055 6 + vertex -3.06677 3.26578 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.3327 2.19055 6 + vertex -3.26578 3.06677 6 + vertex -2.46564 2.03976 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.4519 2.85566 6 + vertex -2.46564 2.03976 6 + vertex -3.26578 3.06677 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.46564 2.03976 6 + vertex -3.4519 2.85566 6 + vertex -2.58885 1.88091 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.6244 2.63328 6 + vertex -2.58885 1.88091 6 + vertex -3.4519 2.85566 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.58885 1.88091 6 + vertex -3.6244 2.63328 6 + vertex -2.70185 1.71465 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.78259 2.4005 6 + vertex -2.70185 1.71465 6 + vertex -3.6244 2.63328 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.70185 1.71465 6 + vertex -3.78259 2.4005 6 + vertex -2.80418 1.54161 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.92585 2.15826 6 + vertex -2.80418 1.54161 6 + vertex -3.78259 2.4005 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.80418 1.54161 6 + vertex -3.92585 2.15826 6 + vertex -2.89545 1.36249 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.05363 1.90749 6 + vertex -2.89545 1.36249 6 + vertex -3.92585 2.15826 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.1654 1.6492 6 + vertex -2.97528 1.178 6 + vertex -4.05363 1.90749 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.89545 1.36249 6 + vertex -4.05363 1.90749 6 + vertex -2.97528 1.178 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.36249 -2.89545 6 + vertex 1.90749 -4.05363 6 + vertex 1.5 -2.82538 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.90749 -4.05363 6 + vertex 1.36249 -2.89545 6 + vertex 1.6492 -4.1654 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.178 -2.97528 6 + vertex 1.6492 -4.1654 6 + vertex 1.36249 -2.89545 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.6492 -4.1654 6 + vertex 1.178 -2.97528 6 + vertex 1.3844 -4.26073 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.988853 -3.04338 6 + vertex 1.3844 -4.26073 6 + vertex 1.178 -2.97528 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.3844 -4.26073 6 + vertex 0.988853 -3.04338 6 + vertex 1.11413 -4.33925 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.795807 -3.09947 6 + vertex 1.11413 -4.33925 6 + vertex 0.988853 -3.04338 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.11413 -4.33925 6 + vertex 0.795807 -3.09947 6 + vertex 0.839468 -4.40065 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.59962 -3.14332 6 + vertex 0.839468 -4.40065 6 + vertex 0.795807 -3.09947 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.59962 -3.14332 6 + vertex 0.561492 -4.44467 6 + vertex 0.839468 -4.40065 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.401066 -3.17477 6 + vertex 0.561492 -4.44467 6 + vertex 0.59962 -3.14332 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.401066 -3.17477 6 + vertex 0.281301 -4.47116 6 + vertex 0.561492 -4.44467 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.20093 -3.19368 6 + vertex 0.281301 -4.47116 6 + vertex 0.401066 -3.17477 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0 -3.2 6 + vertex 0.281301 -4.47116 6 + vertex 0.20093 -3.19368 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -3.2 6 + vertex 0 -4.48 6 + vertex 0.281301 -4.47116 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.20093 -3.19368 6 + vertex 0 -4.48 6 + vertex 0 -3.2 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.20093 -3.19368 6 + vertex -0.281301 -4.47116 6 + vertex 0 -4.48 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.401066 -3.17477 6 + vertex -0.281301 -4.47116 6 + vertex -0.20093 -3.19368 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.401066 -3.17477 6 + vertex -0.561492 -4.44467 6 + vertex -0.281301 -4.47116 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.59962 -3.14332 6 + vertex -0.561492 -4.44467 6 + vertex -0.401066 -3.17477 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.839468 -4.40065 6 + vertex -0.59962 -3.14332 6 + vertex -0.795807 -3.09947 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.59962 -3.14332 6 + vertex -0.839468 -4.40065 6 + vertex -0.561492 -4.44467 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.11413 -4.33925 6 + vertex -0.795807 -3.09947 6 + vertex -0.988853 -3.04338 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.795807 -3.09947 6 + vertex -1.11413 -4.33925 6 + vertex -0.839468 -4.40065 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.3844 -4.26073 6 + vertex -0.988853 -3.04338 6 + vertex -1.178 -2.97528 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.6492 -4.1654 6 + vertex -1.178 -2.97528 6 + vertex -1.36249 -2.89545 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.988853 -3.04338 6 + vertex -1.3844 -4.26073 6 + vertex -1.11413 -4.33925 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.90749 -4.05363 6 + vertex -1.36249 -2.89545 6 + vertex -1.54161 -2.80418 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.178 -2.97528 6 + vertex -1.6492 -4.1654 6 + vertex -1.3844 -4.26073 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.15826 -3.92585 6 + vertex -1.54161 -2.80418 6 + vertex -1.71465 -2.70185 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.4005 -3.78259 6 + vertex -1.71465 -2.70185 6 + vertex -1.88091 -2.58885 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.36249 -2.89545 6 + vertex -1.90749 -4.05363 6 + vertex -1.6492 -4.1654 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.63328 -3.6244 6 + vertex -1.88091 -2.58885 6 + vertex -2.03976 -2.46564 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.54161 -2.80418 6 + vertex -2.15826 -3.92585 6 + vertex -1.90749 -4.05363 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.85566 -3.4519 6 + vertex -2.03976 -2.46564 6 + vertex -2.19055 -2.3327 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.06677 -3.26578 6 + vertex -2.19055 -2.3327 6 + vertex -2.3327 -2.19055 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.71465 -2.70185 6 + vertex -2.4005 -3.78259 6 + vertex -2.15826 -3.92585 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.26578 -3.06677 6 + vertex -2.3327 -2.19055 6 + vertex -2.46564 -2.03976 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.4519 -2.85566 6 + vertex -2.46564 -2.03976 6 + vertex -2.58885 -1.88091 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.88091 -2.58885 6 + vertex -2.63328 -3.6244 6 + vertex -2.4005 -3.78259 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.6244 -2.63328 6 + vertex -2.58885 -1.88091 6 + vertex -2.70185 -1.71465 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.78259 -2.4005 6 + vertex -2.70185 -1.71465 6 + vertex -2.80418 -1.54161 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.03976 -2.46564 6 + vertex -2.85566 -3.4519 6 + vertex -2.63328 -3.6244 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.92585 -2.15826 6 + vertex -2.80418 -1.54161 6 + vertex -2.89545 -1.36249 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.05363 -1.90749 6 + vertex -2.89545 -1.36249 6 + vertex -2.97528 -1.178 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.1654 -1.6492 6 + vertex -2.97528 -1.178 6 + vertex -3.04338 -0.988853 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.19055 -2.3327 6 + vertex -3.06677 -3.26578 6 + vertex -2.85566 -3.4519 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.26073 -1.3844 6 + vertex -3.04338 -0.988853 6 + vertex -3.09947 -0.795807 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.33925 -1.11413 6 + vertex -3.09947 -0.795807 6 + vertex -3.14332 -0.59962 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.40065 -0.839468 6 + vertex -3.14332 -0.59962 6 + vertex -3.17477 -0.401066 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.44467 -0.561492 6 + vertex -3.17477 -0.401066 6 + vertex -3.19368 -0.20093 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.3327 -2.19055 6 + vertex -3.26578 -3.06677 6 + vertex -3.06677 -3.26578 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.47116 -0.281301 6 + vertex -3.19368 -0.20093 6 + vertex -3.2 0 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.97528 1.178 6 + vertex -4.1654 1.6492 6 + vertex -3.04338 0.988853 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.26073 1.3844 6 + vertex -3.04338 0.988853 6 + vertex -4.1654 1.6492 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.46564 -2.03976 6 + vertex -3.4519 -2.85566 6 + vertex -3.26578 -3.06677 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.04338 0.988853 6 + vertex -4.26073 1.3844 6 + vertex -3.09947 0.795807 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.58885 -1.88091 6 + vertex -3.6244 -2.63328 6 + vertex -3.4519 -2.85566 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.33925 1.11413 6 + vertex -3.09947 0.795807 6 + vertex -4.26073 1.3844 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.70185 -1.71465 6 + vertex -3.78259 -2.4005 6 + vertex -3.6244 -2.63328 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.09947 0.795807 6 + vertex -4.33925 1.11413 6 + vertex -3.14332 0.59962 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.80418 -1.54161 6 + vertex -3.92585 -2.15826 6 + vertex -3.78259 -2.4005 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.40065 0.839468 6 + vertex -3.14332 0.59962 6 + vertex -4.33925 1.11413 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.89545 -1.36249 6 + vertex -4.05363 -1.90749 6 + vertex -3.92585 -2.15826 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.14332 0.59962 6 + vertex -4.40065 0.839468 6 + vertex -3.17477 0.401066 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.97528 -1.178 6 + vertex -4.1654 -1.6492 6 + vertex -4.05363 -1.90749 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.44467 0.561492 6 + vertex -3.17477 0.401066 6 + vertex -4.40065 0.839468 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.04338 -0.988853 6 + vertex -4.26073 -1.3844 6 + vertex -4.1654 -1.6492 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.17477 0.401066 6 + vertex -4.44467 0.561492 6 + vertex -3.19368 0.20093 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.09947 -0.795807 6 + vertex -4.33925 -1.11413 6 + vertex -4.26073 -1.3844 6 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.47116 0.281301 6 + vertex -3.19368 0.20093 6 + vertex -4.44467 0.561492 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.14332 -0.59962 6 + vertex -4.40065 -0.839468 6 + vertex -4.33925 -1.11413 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.19368 0.20093 6 + vertex -4.47116 0.281301 6 + vertex -3.2 0 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.17477 -0.401066 6 + vertex -4.44467 -0.561492 6 + vertex -4.40065 -0.839468 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.48 0 6 + vertex -3.2 0 6 + vertex -4.47116 0.281301 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.19368 -0.20093 6 + vertex -4.47116 -0.281301 6 + vertex -4.44467 -0.561492 6 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.2 0 6 + vertex -4.48 0 6 + vertex -4.47116 -0.281301 6 + endloop + endfacet + facet normal 0.91777 -0.397112 0 + outer loop + vertex 11.4916 2.57687 6 + vertex 11.6383 2.91591 -6 + vertex 11.6383 2.91591 6 + endloop + endfacet + facet normal 0.91777 -0.397112 0 + outer loop + vertex 11.6383 2.91591 -6 + vertex 11.4916 2.57687 6 + vertex 11.4916 2.57687 -6 + endloop + endfacet + facet normal 0.562083 0.827081 -0 + outer loop + vertex 8.97713 6.81763 -6 + vertex 8.61343 7.0648 6 + vertex 8.97713 6.81763 6 + endloop + endfacet + facet normal 0.562083 0.827081 0 + outer loop + vertex 8.61343 7.0648 6 + vertex 8.97713 6.81763 -6 + vertex 8.61343 7.0648 -6 + endloop + endfacet + facet normal 0.891009 0.453986 0 + outer loop + vertex 6.59377 9.35565 6 + vertex 6.39413 9.74747 -6 + vertex 6.39413 9.74747 6 + endloop + endfacet + facet normal 0.891009 0.453986 0 + outer loop + vertex 6.39413 9.74747 -6 + vertex 6.59377 9.35565 6 + vertex 6.59377 9.35565 -6 + endloop + endfacet + facet normal 0.940919 0.338632 0 + outer loop + vertex 6.21949 10.151 6 + vertex 6.1713 10.2849 -6 + vertex 6.1713 10.2849 6 + endloop + endfacet + facet normal 0.940919 0.338632 0 + outer loop + vertex 6.1713 10.2849 -6 + vertex 6.21949 10.151 6 + vertex 6.21949 10.151 -6 + endloop + endfacet + facet normal 0.338632 0.940919 -0 + outer loop + vertex 10.2849 6.1713 -6 + vertex 10.151 6.21949 6 + vertex 10.2849 6.1713 6 + endloop + endfacet + facet normal 0.338632 0.940919 0 + outer loop + vertex 10.151 6.21949 6 + vertex 10.2849 6.1713 -6 + vertex 10.151 6.21949 -6 + endloop + endfacet + facet normal 0.860738 0.509048 0 + outer loop + vertex 6.81763 8.97713 6 + vertex 6.59377 9.35565 -6 + vertex 6.59377 9.35565 6 + endloop + endfacet + facet normal 0.860738 0.509048 0 + outer loop + vertex 6.59377 9.35565 -6 + vertex 6.81763 8.97713 6 + vertex 6.81763 8.97713 -6 + endloop + endfacet + facet normal 0.453986 0.891009 -0 + outer loop + vertex 9.74747 6.39413 -6 + vertex 9.35565 6.59377 6 + vertex 9.74747 6.39413 6 + endloop + endfacet + facet normal 0.453986 0.891009 0 + outer loop + vertex 9.35565 6.59377 6 + vertex 9.74747 6.39413 -6 + vertex 9.35565 6.59377 -6 + endloop + endfacet + facet normal 0.827081 0.562083 0 + outer loop + vertex 7.0648 8.61343 6 + vertex 6.81763 8.97713 -6 + vertex 6.81763 8.97713 6 + endloop + endfacet + facet normal 0.827081 0.562083 0 + outer loop + vertex 6.81763 8.97713 -6 + vertex 7.0648 8.61343 6 + vertex 7.0648 8.61343 -6 + endloop + endfacet + facet normal 0.750112 0.661311 0 + outer loop + vertex 7.62514 7.93609 6 + vertex 7.33433 8.26595 -6 + vertex 7.33433 8.26595 6 + endloop + endfacet + facet normal 0.750112 0.661311 0 + outer loop + vertex 7.33433 8.26595 -6 + vertex 7.62514 7.93609 6 + vertex 7.62514 7.93609 -6 + endloop + endfacet + facet normal 0.39718 0.917741 -0 + outer loop + vertex 10.151 6.21949 -6 + vertex 9.74747 6.39413 6 + vertex 10.151 6.21949 6 + endloop + endfacet + facet normal 0.39718 0.917741 0 + outer loop + vertex 9.74747 6.39413 6 + vertex 10.151 6.21949 -6 + vertex 9.74747 6.39413 -6 + endloop + endfacet + facet normal 0.509048 0.860738 -0 + outer loop + vertex 9.35565 6.59377 -6 + vertex 8.97713 6.81763 6 + vertex 9.35565 6.59377 6 + endloop + endfacet + facet normal 0.509048 0.860738 0 + outer loop + vertex 8.97713 6.81763 6 + vertex 9.35565 6.59377 -6 + vertex 8.97713 6.81763 -6 + endloop + endfacet + facet normal 0.917741 0.39718 0 + outer loop + vertex 6.39413 9.74747 6 + vertex 6.21949 10.151 -6 + vertex 6.21949 10.151 6 + endloop + endfacet + facet normal 0.917741 0.39718 0 + outer loop + vertex 6.21949 10.151 -6 + vertex 6.39413 9.74747 6 + vertex 6.39413 9.74747 -6 + endloop + endfacet + facet normal 0.790158 0.612903 0 + outer loop + vertex 7.33433 8.26595 6 + vertex 7.0648 8.61343 -6 + vertex 7.0648 8.61343 6 + endloop + endfacet + facet normal 0.790158 0.612903 0 + outer loop + vertex 7.0648 8.61343 -6 + vertex 7.33433 8.26595 6 + vertex 7.33433 8.26595 -6 + endloop + endfacet + facet normal 0.612903 0.790158 -0 + outer loop + vertex 8.61343 7.0648 -6 + vertex 8.26595 7.33433 6 + vertex 8.61343 7.0648 6 + endloop + endfacet + facet normal 0.612903 0.790158 0 + outer loop + vertex 8.26595 7.33433 6 + vertex 8.61343 7.0648 -6 + vertex 8.26595 7.33433 -6 + endloop + endfacet + facet normal 0.707107 0.707107 0 + outer loop + vertex 7.93609 7.62514 6 + vertex 7.62514 7.93609 -6 + vertex 7.62514 7.93609 6 + endloop + endfacet + facet normal 0.707107 0.707107 0 + outer loop + vertex 7.62514 7.93609 -6 + vertex 7.93609 7.62514 6 + vertex 7.93609 7.62514 -6 + endloop + endfacet + facet normal 0.661311 0.750112 -0 + outer loop + vertex 8.26595 7.33433 -6 + vertex 7.93609 7.62514 6 + vertex 8.26595 7.33433 6 + endloop + endfacet + facet normal 0.661311 0.750112 0 + outer loop + vertex 7.93609 7.62514 6 + vertex 8.26595 7.33433 -6 + vertex 7.93609 7.62514 -6 + endloop + endfacet + facet normal -0.218081 0.975931 0 + outer loop + vertex 1.74083 11.2199 -6 + vertex 1.31167 11.124 6 + vertex 1.74083 11.2199 6 + endloop + endfacet + facet normal -0.218081 0.975931 0 + outer loop + vertex 1.31167 11.124 6 + vertex 1.74083 11.2199 -6 + vertex 1.31167 11.124 -6 + endloop + endfacet + facet normal -0.0941439 0.995559 0 + outer loop + vertex 0.877332 11.0552 -6 + vertex 0.439533 11.0138 6 + vertex 0.877332 11.0552 6 + endloop + endfacet + facet normal -0.0941439 0.995559 0 + outer loop + vertex 0.439533 11.0138 6 + vertex 0.877332 11.0552 -6 + vertex 0.439533 11.0138 -6 + endloop + endfacet + facet normal -0.397112 0.91777 0 + outer loop + vertex 2.91591 11.6383 -6 + vertex 2.57687 11.4916 6 + vertex 2.91591 11.6383 6 + endloop + endfacet + facet normal -0.397112 0.91777 0 + outer loop + vertex 2.57687 11.4916 6 + vertex 2.91591 11.6383 -6 + vertex 2.57687 11.4916 -6 + endloop + endfacet + facet normal 0.0941439 0.995559 -0 + outer loop + vertex -0.439533 11.0138 -6 + vertex -0.877332 11.0552 6 + vertex -0.439533 11.0138 6 + endloop + endfacet + facet normal 0.0941439 0.995559 0 + outer loop + vertex -0.877332 11.0552 6 + vertex -0.439533 11.0138 -6 + vertex -0.877332 11.0552 -6 + endloop + endfacet + facet normal 0.0313815 0.999507 -0 + outer loop + vertex 0 11 -6 + vertex -0.439533 11.0138 6 + vertex 0 11 6 + endloop + endfacet + facet normal 0.0313815 0.999507 0 + outer loop + vertex -0.439533 11.0138 6 + vertex 0 11 -6 + vertex -0.439533 11.0138 -6 + endloop + endfacet + facet normal 0.397112 0.91777 -0 + outer loop + vertex -2.57687 11.4916 -6 + vertex -2.91591 11.6383 6 + vertex -2.57687 11.4916 6 + endloop + endfacet + facet normal 0.397112 0.91777 0 + outer loop + vertex -2.91591 11.6383 6 + vertex -2.57687 11.4916 -6 + vertex -2.91591 11.6383 -6 + endloop + endfacet + facet normal 0.279019 0.960286 -0 + outer loop + vertex -1.74083 11.2199 -6 + vertex -2.16312 11.3426 6 + vertex -1.74083 11.2199 6 + endloop + endfacet + facet normal 0.279019 0.960286 0 + outer loop + vertex -2.16312 11.3426 6 + vertex -1.74083 11.2199 -6 + vertex -2.16312 11.3426 -6 + endloop + endfacet + facet normal -0.156451 0.987686 0 + outer loop + vertex 1.31167 11.124 -6 + vertex 0.877332 11.0552 6 + vertex 1.31167 11.124 6 + endloop + endfacet + facet normal -0.156451 0.987686 0 + outer loop + vertex 0.877332 11.0552 6 + vertex 1.31167 11.124 -6 + vertex 0.877332 11.0552 -6 + endloop + endfacet + facet normal 0.33882 0.940851 -0 + outer loop + vertex -2.16312 11.3426 -6 + vertex -2.57687 11.4916 6 + vertex -2.16312 11.3426 6 + endloop + endfacet + facet normal 0.33882 0.940851 0 + outer loop + vertex -2.57687 11.4916 6 + vertex -2.16312 11.3426 -6 + vertex -2.57687 11.4916 -6 + endloop + endfacet + facet normal 0.156451 0.987686 -0 + outer loop + vertex -0.877332 11.0552 -6 + vertex -1.31167 11.124 6 + vertex -0.877332 11.0552 6 + endloop + endfacet + facet normal 0.156451 0.987686 0 + outer loop + vertex -1.31167 11.124 6 + vertex -0.877332 11.0552 -6 + vertex -1.31167 11.124 -6 + endloop + endfacet + facet normal -0.279019 0.960286 0 + outer loop + vertex 2.16312 11.3426 -6 + vertex 1.74083 11.2199 6 + vertex 2.16312 11.3426 6 + endloop + endfacet + facet normal -0.279019 0.960286 0 + outer loop + vertex 1.74083 11.2199 6 + vertex 2.16312 11.3426 -6 + vertex 1.74083 11.2199 -6 + endloop + endfacet + facet normal -0.33882 0.940851 0 + outer loop + vertex 2.57687 11.4916 -6 + vertex 2.16312 11.3426 6 + vertex 2.57687 11.4916 6 + endloop + endfacet + facet normal -0.33882 0.940851 0 + outer loop + vertex 2.16312 11.3426 6 + vertex 2.57687 11.4916 -6 + vertex 2.16312 11.3426 -6 + endloop + endfacet + facet normal -0.0313815 0.999507 0 + outer loop + vertex 0.439533 11.0138 -6 + vertex 0 11 6 + vertex 0.439533 11.0138 6 + endloop + endfacet + facet normal -0.0313815 0.999507 0 + outer loop + vertex 0 11 6 + vertex 0.439533 11.0138 -6 + vertex 0 11 -6 + endloop + endfacet + facet normal 0.218081 0.975931 -0 + outer loop + vertex -1.31167 11.124 -6 + vertex -1.74083 11.2199 6 + vertex -1.31167 11.124 6 + endloop + endfacet + facet normal 0.218081 0.975931 0 + outer loop + vertex -1.74083 11.2199 6 + vertex -1.31167 11.124 -6 + vertex -1.74083 11.2199 -6 + endloop + endfacet + facet normal -0.39718 0.917741 0 + outer loop + vertex -9.74747 6.39413 -6 + vertex -10.151 6.21949 6 + vertex -9.74747 6.39413 6 + endloop + endfacet + facet normal -0.39718 0.917741 0 + outer loop + vertex -10.151 6.21949 6 + vertex -9.74747 6.39413 -6 + vertex -10.151 6.21949 -6 + endloop + endfacet + facet normal -0.661311 0.750112 0 + outer loop + vertex -7.93609 7.62514 -6 + vertex -8.26595 7.33433 6 + vertex -7.93609 7.62514 6 + endloop + endfacet + facet normal -0.661311 0.750112 0 + outer loop + vertex -8.26595 7.33433 6 + vertex -7.93609 7.62514 -6 + vertex -8.26595 7.33433 -6 + endloop + endfacet + facet normal -0.612903 0.790158 0 + outer loop + vertex -8.26595 7.33433 -6 + vertex -8.61343 7.0648 6 + vertex -8.26595 7.33433 6 + endloop + endfacet + facet normal -0.612903 0.790158 0 + outer loop + vertex -8.61343 7.0648 6 + vertex -8.26595 7.33433 -6 + vertex -8.61343 7.0648 -6 + endloop + endfacet + facet normal -0.453986 0.891009 0 + outer loop + vertex -9.35565 6.59377 -6 + vertex -9.74747 6.39413 6 + vertex -9.35565 6.59377 6 + endloop + endfacet + facet normal -0.453986 0.891009 0 + outer loop + vertex -9.74747 6.39413 6 + vertex -9.35565 6.59377 -6 + vertex -9.74747 6.39413 -6 + endloop + endfacet + facet normal -0.707107 0.707107 0 + outer loop + vertex -7.93609 7.62514 -6 + vertex -7.62514 7.93609 6 + vertex -7.62514 7.93609 -6 + endloop + endfacet + facet normal -0.707107 0.707107 0 + outer loop + vertex -7.62514 7.93609 6 + vertex -7.93609 7.62514 -6 + vertex -7.93609 7.62514 6 + endloop + endfacet + facet normal -0.827081 0.562083 0 + outer loop + vertex -7.0648 8.61343 -6 + vertex -6.81763 8.97713 6 + vertex -6.81763 8.97713 -6 + endloop + endfacet + facet normal -0.827081 0.562083 0 + outer loop + vertex -6.81763 8.97713 6 + vertex -7.0648 8.61343 -6 + vertex -7.0648 8.61343 6 + endloop + endfacet + facet normal -0.562083 0.827081 0 + outer loop + vertex -8.61343 7.0648 -6 + vertex -8.97713 6.81763 6 + vertex -8.61343 7.0648 6 + endloop + endfacet + facet normal -0.562083 0.827081 0 + outer loop + vertex -8.97713 6.81763 6 + vertex -8.61343 7.0648 -6 + vertex -8.97713 6.81763 -6 + endloop + endfacet + facet normal -0.338632 0.940919 0 + outer loop + vertex -10.151 6.21949 -6 + vertex -10.2849 6.1713 6 + vertex -10.151 6.21949 6 + endloop + endfacet + facet normal -0.338632 0.940919 0 + outer loop + vertex -10.2849 6.1713 6 + vertex -10.151 6.21949 -6 + vertex -10.2849 6.1713 -6 + endloop + endfacet + facet normal -0.891009 0.453986 0 + outer loop + vertex -6.59377 9.35565 -6 + vertex -6.39413 9.74747 6 + vertex -6.39413 9.74747 -6 + endloop + endfacet + facet normal -0.891009 0.453986 0 + outer loop + vertex -6.39413 9.74747 6 + vertex -6.59377 9.35565 -6 + vertex -6.59377 9.35565 6 + endloop + endfacet + facet normal -0.750112 0.661311 0 + outer loop + vertex -7.62514 7.93609 -6 + vertex -7.33433 8.26595 6 + vertex -7.33433 8.26595 -6 + endloop + endfacet + facet normal -0.750112 0.661311 0 + outer loop + vertex -7.33433 8.26595 6 + vertex -7.62514 7.93609 -6 + vertex -7.62514 7.93609 6 + endloop + endfacet + facet normal -0.790158 0.612903 0 + outer loop + vertex -7.33433 8.26595 -6 + vertex -7.0648 8.61343 6 + vertex -7.0648 8.61343 -6 + endloop + endfacet + facet normal -0.790158 0.612903 0 + outer loop + vertex -7.0648 8.61343 6 + vertex -7.33433 8.26595 -6 + vertex -7.33433 8.26595 6 + endloop + endfacet + facet normal -0.917741 0.39718 0 + outer loop + vertex -6.39413 9.74747 -6 + vertex -6.21949 10.151 6 + vertex -6.21949 10.151 -6 + endloop + endfacet + facet normal -0.917741 0.39718 0 + outer loop + vertex -6.21949 10.151 6 + vertex -6.39413 9.74747 -6 + vertex -6.39413 9.74747 6 + endloop + endfacet + facet normal -0.509048 0.860738 0 + outer loop + vertex -8.97713 6.81763 -6 + vertex -9.35565 6.59377 6 + vertex -8.97713 6.81763 6 + endloop + endfacet + facet normal -0.509048 0.860738 0 + outer loop + vertex -9.35565 6.59377 6 + vertex -8.97713 6.81763 -6 + vertex -9.35565 6.59377 -6 + endloop + endfacet + facet normal -0.940919 0.338632 0 + outer loop + vertex -6.21949 10.151 -6 + vertex -6.1713 10.2849 6 + vertex -6.1713 10.2849 -6 + endloop + endfacet + facet normal -0.940919 0.338632 0 + outer loop + vertex -6.1713 10.2849 6 + vertex -6.21949 10.151 -6 + vertex -6.21949 10.151 6 + endloop + endfacet + facet normal -0.860738 0.509048 0 + outer loop + vertex -6.81763 8.97713 -6 + vertex -6.59377 9.35565 6 + vertex -6.59377 9.35565 -6 + endloop + endfacet + facet normal -0.860738 0.509048 0 + outer loop + vertex -6.59377 9.35565 6 + vertex -6.81763 8.97713 -6 + vertex -6.81763 8.97713 6 + endloop + endfacet + facet normal -0.995559 -0.0941439 0 + outer loop + vertex -11.0138 0.439533 -6 + vertex -11.0552 0.877332 6 + vertex -11.0552 0.877332 -6 + endloop + endfacet + facet normal -0.995559 -0.0941439 0 + outer loop + vertex -11.0552 0.877332 6 + vertex -11.0138 0.439533 -6 + vertex -11.0138 0.439533 6 + endloop + endfacet + facet normal -0.999507 -0.0313815 0 + outer loop + vertex -11 0 -6 + vertex -11.0138 0.439533 6 + vertex -11.0138 0.439533 -6 + endloop + endfacet + facet normal -0.999507 -0.0313815 0 + outer loop + vertex -11.0138 0.439533 6 + vertex -11 0 -6 + vertex -11 0 6 + endloop + endfacet + facet normal -0.940851 -0.33882 0 + outer loop + vertex -11.3426 2.16312 -6 + vertex -11.4916 2.57687 6 + vertex -11.4916 2.57687 -6 + endloop + endfacet + facet normal -0.940851 -0.33882 0 + outer loop + vertex -11.4916 2.57687 6 + vertex -11.3426 2.16312 -6 + vertex -11.3426 2.16312 6 + endloop + endfacet + facet normal -0.999507 0.0313815 0 + outer loop + vertex -11.0138 -0.439533 -6 + vertex -11 0 6 + vertex -11 0 -6 + endloop + endfacet + facet normal -0.999507 0.0313815 0 + outer loop + vertex -11 0 6 + vertex -11.0138 -0.439533 -6 + vertex -11.0138 -0.439533 6 + endloop + endfacet + facet normal -0.91777 -0.397112 0 + outer loop + vertex -11.4916 2.57687 -6 + vertex -11.6383 2.91591 6 + vertex -11.6383 2.91591 -6 + endloop + endfacet + facet normal -0.91777 -0.397112 0 + outer loop + vertex -11.6383 2.91591 6 + vertex -11.4916 2.57687 -6 + vertex -11.4916 2.57687 6 + endloop + endfacet + facet normal -0.975931 -0.218081 0 + outer loop + vertex -11.124 1.31167 -6 + vertex -11.2199 1.74083 6 + vertex -11.2199 1.74083 -6 + endloop + endfacet + facet normal -0.975931 -0.218081 0 + outer loop + vertex -11.2199 1.74083 6 + vertex -11.124 1.31167 -6 + vertex -11.124 1.31167 6 + endloop + endfacet + facet normal -0.975931 0.218081 0 + outer loop + vertex -11.2199 -1.74083 -6 + vertex -11.124 -1.31167 6 + vertex -11.124 -1.31167 -6 + endloop + endfacet + facet normal -0.975931 0.218081 0 + outer loop + vertex -11.124 -1.31167 6 + vertex -11.2199 -1.74083 -6 + vertex -11.2199 -1.74083 6 + endloop + endfacet + facet normal -0.960286 0.279019 0 + outer loop + vertex -11.3426 -2.16312 -6 + vertex -11.2199 -1.74083 6 + vertex -11.2199 -1.74083 -6 + endloop + endfacet + facet normal -0.960286 0.279019 0 + outer loop + vertex -11.2199 -1.74083 6 + vertex -11.3426 -2.16312 -6 + vertex -11.3426 -2.16312 6 + endloop + endfacet + facet normal -0.987686 -0.156451 0 + outer loop + vertex -11.0552 0.877332 -6 + vertex -11.124 1.31167 6 + vertex -11.124 1.31167 -6 + endloop + endfacet + facet normal -0.987686 -0.156451 0 + outer loop + vertex -11.124 1.31167 6 + vertex -11.0552 0.877332 -6 + vertex -11.0552 0.877332 6 + endloop + endfacet + facet normal -0.987686 0.156451 0 + outer loop + vertex -11.124 -1.31167 -6 + vertex -11.0552 -0.877332 6 + vertex -11.0552 -0.877332 -6 + endloop + endfacet + facet normal -0.987686 0.156451 0 + outer loop + vertex -11.0552 -0.877332 6 + vertex -11.124 -1.31167 -6 + vertex -11.124 -1.31167 6 + endloop + endfacet + facet normal -0.995559 0.0941439 0 + outer loop + vertex -11.0552 -0.877332 -6 + vertex -11.0138 -0.439533 6 + vertex -11.0138 -0.439533 -6 + endloop + endfacet + facet normal -0.995559 0.0941439 0 + outer loop + vertex -11.0138 -0.439533 6 + vertex -11.0552 -0.877332 -6 + vertex -11.0552 -0.877332 6 + endloop + endfacet + facet normal -0.960286 -0.279019 0 + outer loop + vertex -11.2199 1.74083 -6 + vertex -11.3426 2.16312 6 + vertex -11.3426 2.16312 -6 + endloop + endfacet + facet normal -0.960286 -0.279019 0 + outer loop + vertex -11.3426 2.16312 6 + vertex -11.2199 1.74083 -6 + vertex -11.2199 1.74083 6 + endloop + endfacet + facet normal -0.91777 0.397112 0 + outer loop + vertex -11.6383 -2.91591 -6 + vertex -11.4916 -2.57687 6 + vertex -11.4916 -2.57687 -6 + endloop + endfacet + facet normal -0.91777 0.397112 0 + outer loop + vertex -11.4916 -2.57687 6 + vertex -11.6383 -2.91591 -6 + vertex -11.6383 -2.91591 6 + endloop + endfacet + facet normal -0.940851 0.33882 0 + outer loop + vertex -11.4916 -2.57687 -6 + vertex -11.3426 -2.16312 6 + vertex -11.3426 -2.16312 -6 + endloop + endfacet + facet normal -0.940851 0.33882 0 + outer loop + vertex -11.3426 -2.16312 6 + vertex -11.4916 -2.57687 -6 + vertex -11.4916 -2.57687 6 + endloop + endfacet + facet normal -0.338632 -0.940919 0 + outer loop + vertex -10.2849 -6.1713 -6 + vertex -10.151 -6.21949 6 + vertex -10.2849 -6.1713 6 + endloop + endfacet + facet normal -0.338632 -0.940919 -0 + outer loop + vertex -10.151 -6.21949 6 + vertex -10.2849 -6.1713 -6 + vertex -10.151 -6.21949 -6 + endloop + endfacet + facet normal -0.39718 -0.917741 0 + outer loop + vertex -10.151 -6.21949 -6 + vertex -9.74747 -6.39413 6 + vertex -10.151 -6.21949 6 + endloop + endfacet + facet normal -0.39718 -0.917741 -0 + outer loop + vertex -9.74747 -6.39413 6 + vertex -10.151 -6.21949 -6 + vertex -9.74747 -6.39413 -6 + endloop + endfacet + facet normal -0.661311 -0.750112 0 + outer loop + vertex -8.26595 -7.33433 -6 + vertex -7.93609 -7.62514 6 + vertex -8.26595 -7.33433 6 + endloop + endfacet + facet normal -0.661311 -0.750112 -0 + outer loop + vertex -7.93609 -7.62514 6 + vertex -8.26595 -7.33433 -6 + vertex -7.93609 -7.62514 -6 + endloop + endfacet + facet normal -0.860738 -0.509048 0 + outer loop + vertex -6.59377 -9.35565 -6 + vertex -6.81763 -8.97713 6 + vertex -6.81763 -8.97713 -6 + endloop + endfacet + facet normal -0.860738 -0.509048 0 + outer loop + vertex -6.81763 -8.97713 6 + vertex -6.59377 -9.35565 -6 + vertex -6.59377 -9.35565 6 + endloop + endfacet + facet normal -0.827081 -0.562083 0 + outer loop + vertex -6.81763 -8.97713 -6 + vertex -7.0648 -8.61343 6 + vertex -7.0648 -8.61343 -6 + endloop + endfacet + facet normal -0.827081 -0.562083 0 + outer loop + vertex -7.0648 -8.61343 6 + vertex -6.81763 -8.97713 -6 + vertex -6.81763 -8.97713 6 + endloop + endfacet + facet normal -0.562083 -0.827081 0 + outer loop + vertex -8.97713 -6.81763 -6 + vertex -8.61343 -7.0648 6 + vertex -8.97713 -6.81763 6 + endloop + endfacet + facet normal -0.562083 -0.827081 -0 + outer loop + vertex -8.61343 -7.0648 6 + vertex -8.97713 -6.81763 -6 + vertex -8.61343 -7.0648 -6 + endloop + endfacet + facet normal -0.917741 -0.39718 0 + outer loop + vertex -6.21949 -10.151 -6 + vertex -6.39413 -9.74747 6 + vertex -6.39413 -9.74747 -6 + endloop + endfacet + facet normal -0.917741 -0.39718 0 + outer loop + vertex -6.39413 -9.74747 6 + vertex -6.21949 -10.151 -6 + vertex -6.21949 -10.151 6 + endloop + endfacet + facet normal -0.891009 -0.453986 0 + outer loop + vertex -6.39413 -9.74747 -6 + vertex -6.59377 -9.35565 6 + vertex -6.59377 -9.35565 -6 + endloop + endfacet + facet normal -0.891009 -0.453986 0 + outer loop + vertex -6.59377 -9.35565 6 + vertex -6.39413 -9.74747 -6 + vertex -6.39413 -9.74747 6 + endloop + endfacet + facet normal -0.509048 -0.860738 0 + outer loop + vertex -9.35565 -6.59377 -6 + vertex -8.97713 -6.81763 6 + vertex -9.35565 -6.59377 6 + endloop + endfacet + facet normal -0.509048 -0.860738 -0 + outer loop + vertex -8.97713 -6.81763 6 + vertex -9.35565 -6.59377 -6 + vertex -8.97713 -6.81763 -6 + endloop + endfacet + facet normal -0.707107 -0.707107 0 + outer loop + vertex -7.62514 -7.93609 -6 + vertex -7.93609 -7.62514 6 + vertex -7.93609 -7.62514 -6 + endloop + endfacet + facet normal -0.707107 -0.707107 0 + outer loop + vertex -7.93609 -7.62514 6 + vertex -7.62514 -7.93609 -6 + vertex -7.62514 -7.93609 6 + endloop + endfacet + facet normal -0.750112 -0.661311 0 + outer loop + vertex -7.33433 -8.26595 -6 + vertex -7.62514 -7.93609 6 + vertex -7.62514 -7.93609 -6 + endloop + endfacet + facet normal -0.750112 -0.661311 0 + outer loop + vertex -7.62514 -7.93609 6 + vertex -7.33433 -8.26595 -6 + vertex -7.33433 -8.26595 6 + endloop + endfacet + facet normal -0.453986 -0.891009 0 + outer loop + vertex -9.74747 -6.39413 -6 + vertex -9.35565 -6.59377 6 + vertex -9.74747 -6.39413 6 + endloop + endfacet + facet normal -0.453986 -0.891009 -0 + outer loop + vertex -9.35565 -6.59377 6 + vertex -9.74747 -6.39413 -6 + vertex -9.35565 -6.59377 -6 + endloop + endfacet + facet normal -0.612903 -0.790158 0 + outer loop + vertex -8.61343 -7.0648 -6 + vertex -8.26595 -7.33433 6 + vertex -8.61343 -7.0648 6 + endloop + endfacet + facet normal -0.612903 -0.790158 -0 + outer loop + vertex -8.26595 -7.33433 6 + vertex -8.61343 -7.0648 -6 + vertex -8.26595 -7.33433 -6 + endloop + endfacet + facet normal -0.940919 -0.338632 0 + outer loop + vertex -6.1713 -10.2849 -6 + vertex -6.21949 -10.151 6 + vertex -6.21949 -10.151 -6 + endloop + endfacet + facet normal -0.940919 -0.338632 0 + outer loop + vertex -6.21949 -10.151 6 + vertex -6.1713 -10.2849 -6 + vertex -6.1713 -10.2849 6 + endloop + endfacet + facet normal -0.790158 -0.612903 0 + outer loop + vertex -7.0648 -8.61343 -6 + vertex -7.33433 -8.26595 6 + vertex -7.33433 -8.26595 -6 + endloop + endfacet + facet normal -0.790158 -0.612903 0 + outer loop + vertex -7.33433 -8.26595 6 + vertex -7.0648 -8.61343 -6 + vertex -7.0648 -8.61343 6 + endloop + endfacet + facet normal -0.0941439 -0.995559 0 + outer loop + vertex 0.439533 -11.0138 -6 + vertex 0.877332 -11.0552 6 + vertex 0.439533 -11.0138 6 + endloop + endfacet + facet normal -0.0941439 -0.995559 -0 + outer loop + vertex 0.877332 -11.0552 6 + vertex 0.439533 -11.0138 -6 + vertex 0.877332 -11.0552 -6 + endloop + endfacet + facet normal -0.33882 -0.940851 0 + outer loop + vertex 2.16312 -11.3426 -6 + vertex 2.57687 -11.4916 6 + vertex 2.16312 -11.3426 6 + endloop + endfacet + facet normal -0.33882 -0.940851 -0 + outer loop + vertex 2.57687 -11.4916 6 + vertex 2.16312 -11.3426 -6 + vertex 2.57687 -11.4916 -6 + endloop + endfacet + facet normal 0.33882 -0.940851 0 + outer loop + vertex -2.57687 -11.4916 -6 + vertex -2.16312 -11.3426 6 + vertex -2.57687 -11.4916 6 + endloop + endfacet + facet normal 0.33882 -0.940851 0 + outer loop + vertex -2.16312 -11.3426 6 + vertex -2.57687 -11.4916 -6 + vertex -2.16312 -11.3426 -6 + endloop + endfacet + facet normal 0.279019 -0.960286 0 + outer loop + vertex -2.16312 -11.3426 -6 + vertex -1.74083 -11.2199 6 + vertex -2.16312 -11.3426 6 + endloop + endfacet + facet normal 0.279019 -0.960286 0 + outer loop + vertex -1.74083 -11.2199 6 + vertex -2.16312 -11.3426 -6 + vertex -1.74083 -11.2199 -6 + endloop + endfacet + facet normal -0.156451 -0.987686 0 + outer loop + vertex 0.877332 -11.0552 -6 + vertex 1.31167 -11.124 6 + vertex 0.877332 -11.0552 6 + endloop + endfacet + facet normal -0.156451 -0.987686 -0 + outer loop + vertex 1.31167 -11.124 6 + vertex 0.877332 -11.0552 -6 + vertex 1.31167 -11.124 -6 + endloop + endfacet + facet normal -0.397112 -0.91777 0 + outer loop + vertex 2.57687 -11.4916 -6 + vertex 2.91591 -11.6383 6 + vertex 2.57687 -11.4916 6 + endloop + endfacet + facet normal -0.397112 -0.91777 -0 + outer loop + vertex 2.91591 -11.6383 6 + vertex 2.57687 -11.4916 -6 + vertex 2.91591 -11.6383 -6 + endloop + endfacet + facet normal 0.0941439 -0.995559 0 + outer loop + vertex -0.877332 -11.0552 -6 + vertex -0.439533 -11.0138 6 + vertex -0.877332 -11.0552 6 + endloop + endfacet + facet normal 0.0941439 -0.995559 0 + outer loop + vertex -0.439533 -11.0138 6 + vertex -0.877332 -11.0552 -6 + vertex -0.439533 -11.0138 -6 + endloop + endfacet + facet normal 0.0313815 -0.999507 0 + outer loop + vertex -0.439533 -11.0138 -6 + vertex 0 -11 6 + vertex -0.439533 -11.0138 6 + endloop + endfacet + facet normal 0.0313815 -0.999507 0 + outer loop + vertex 0 -11 6 + vertex -0.439533 -11.0138 -6 + vertex 0 -11 -6 + endloop + endfacet + facet normal -0.0313815 -0.999507 0 + outer loop + vertex 0 -11 -6 + vertex 0.439533 -11.0138 6 + vertex 0 -11 6 + endloop + endfacet + facet normal -0.0313815 -0.999507 -0 + outer loop + vertex 0.439533 -11.0138 6 + vertex 0 -11 -6 + vertex 0.439533 -11.0138 -6 + endloop + endfacet + facet normal 0.397112 -0.91777 0 + outer loop + vertex -2.91591 -11.6383 -6 + vertex -2.57687 -11.4916 6 + vertex -2.91591 -11.6383 6 + endloop + endfacet + facet normal 0.397112 -0.91777 0 + outer loop + vertex -2.57687 -11.4916 6 + vertex -2.91591 -11.6383 -6 + vertex -2.57687 -11.4916 -6 + endloop + endfacet + facet normal 0.218081 -0.975931 0 + outer loop + vertex -1.74083 -11.2199 -6 + vertex -1.31167 -11.124 6 + vertex -1.74083 -11.2199 6 + endloop + endfacet + facet normal 0.218081 -0.975931 0 + outer loop + vertex -1.31167 -11.124 6 + vertex -1.74083 -11.2199 -6 + vertex -1.31167 -11.124 -6 + endloop + endfacet + facet normal -0.279019 -0.960286 0 + outer loop + vertex 1.74083 -11.2199 -6 + vertex 2.16312 -11.3426 6 + vertex 1.74083 -11.2199 6 + endloop + endfacet + facet normal -0.279019 -0.960286 -0 + outer loop + vertex 2.16312 -11.3426 6 + vertex 1.74083 -11.2199 -6 + vertex 2.16312 -11.3426 -6 + endloop + endfacet + facet normal 0.156451 -0.987686 0 + outer loop + vertex -1.31167 -11.124 -6 + vertex -0.877332 -11.0552 6 + vertex -1.31167 -11.124 6 + endloop + endfacet + facet normal 0.156451 -0.987686 0 + outer loop + vertex -0.877332 -11.0552 6 + vertex -1.31167 -11.124 -6 + vertex -0.877332 -11.0552 -6 + endloop + endfacet + facet normal -0.218081 -0.975931 0 + outer loop + vertex 1.31167 -11.124 -6 + vertex 1.74083 -11.2199 6 + vertex 1.31167 -11.124 6 + endloop + endfacet + facet normal -0.218081 -0.975931 -0 + outer loop + vertex 1.74083 -11.2199 6 + vertex 1.31167 -11.124 -6 + vertex 1.74083 -11.2199 -6 + endloop + endfacet + facet normal 0.453986 -0.891009 0 + outer loop + vertex 9.35565 -6.59377 -6 + vertex 9.74747 -6.39413 6 + vertex 9.35565 -6.59377 6 + endloop + endfacet + facet normal 0.453986 -0.891009 0 + outer loop + vertex 9.74747 -6.39413 6 + vertex 9.35565 -6.59377 -6 + vertex 9.74747 -6.39413 -6 + endloop + endfacet + facet normal 0.827081 -0.562083 0 + outer loop + vertex 6.81763 -8.97713 6 + vertex 7.0648 -8.61343 -6 + vertex 7.0648 -8.61343 6 + endloop + endfacet + facet normal 0.827081 -0.562083 0 + outer loop + vertex 7.0648 -8.61343 -6 + vertex 6.81763 -8.97713 6 + vertex 6.81763 -8.97713 -6 + endloop + endfacet + facet normal 0.750112 -0.661311 0 + outer loop + vertex 7.33433 -8.26595 6 + vertex 7.62514 -7.93609 -6 + vertex 7.62514 -7.93609 6 + endloop + endfacet + facet normal 0.750112 -0.661311 0 + outer loop + vertex 7.62514 -7.93609 -6 + vertex 7.33433 -8.26595 6 + vertex 7.33433 -8.26595 -6 + endloop + endfacet + facet normal 0.661311 -0.750112 0 + outer loop + vertex 7.93609 -7.62514 -6 + vertex 8.26595 -7.33433 6 + vertex 7.93609 -7.62514 6 + endloop + endfacet + facet normal 0.661311 -0.750112 0 + outer loop + vertex 8.26595 -7.33433 6 + vertex 7.93609 -7.62514 -6 + vertex 8.26595 -7.33433 -6 + endloop + endfacet + facet normal 0.612903 -0.790158 0 + outer loop + vertex 8.26595 -7.33433 -6 + vertex 8.61343 -7.0648 6 + vertex 8.26595 -7.33433 6 + endloop + endfacet + facet normal 0.612903 -0.790158 0 + outer loop + vertex 8.61343 -7.0648 6 + vertex 8.26595 -7.33433 -6 + vertex 8.61343 -7.0648 -6 + endloop + endfacet + facet normal 0.707107 -0.707107 0 + outer loop + vertex 7.62514 -7.93609 6 + vertex 7.93609 -7.62514 -6 + vertex 7.93609 -7.62514 6 + endloop + endfacet + facet normal 0.707107 -0.707107 0 + outer loop + vertex 7.93609 -7.62514 -6 + vertex 7.62514 -7.93609 6 + vertex 7.62514 -7.93609 -6 + endloop + endfacet + facet normal 0.860738 -0.509048 0 + outer loop + vertex 6.59377 -9.35565 6 + vertex 6.81763 -8.97713 -6 + vertex 6.81763 -8.97713 6 + endloop + endfacet + facet normal 0.860738 -0.509048 0 + outer loop + vertex 6.81763 -8.97713 -6 + vertex 6.59377 -9.35565 6 + vertex 6.59377 -9.35565 -6 + endloop + endfacet + facet normal 0.790158 -0.612903 0 + outer loop + vertex 7.0648 -8.61343 6 + vertex 7.33433 -8.26595 -6 + vertex 7.33433 -8.26595 6 + endloop + endfacet + facet normal 0.790158 -0.612903 0 + outer loop + vertex 7.33433 -8.26595 -6 + vertex 7.0648 -8.61343 6 + vertex 7.0648 -8.61343 -6 + endloop + endfacet + facet normal 0.39718 -0.917741 0 + outer loop + vertex 9.74747 -6.39413 -6 + vertex 10.151 -6.21949 6 + vertex 9.74747 -6.39413 6 + endloop + endfacet + facet normal 0.39718 -0.917741 0 + outer loop + vertex 10.151 -6.21949 6 + vertex 9.74747 -6.39413 -6 + vertex 10.151 -6.21949 -6 + endloop + endfacet + facet normal 0.940919 -0.338632 0 + outer loop + vertex 6.1713 -10.2849 6 + vertex 6.21949 -10.151 -6 + vertex 6.21949 -10.151 6 + endloop + endfacet + facet normal 0.940919 -0.338632 0 + outer loop + vertex 6.21949 -10.151 -6 + vertex 6.1713 -10.2849 6 + vertex 6.1713 -10.2849 -6 + endloop + endfacet + facet normal 0.562083 -0.827081 0 + outer loop + vertex 8.61343 -7.0648 -6 + vertex 8.97713 -6.81763 6 + vertex 8.61343 -7.0648 6 + endloop + endfacet + facet normal 0.562083 -0.827081 0 + outer loop + vertex 8.97713 -6.81763 6 + vertex 8.61343 -7.0648 -6 + vertex 8.97713 -6.81763 -6 + endloop + endfacet + facet normal 0.917741 -0.39718 0 + outer loop + vertex 6.21949 -10.151 6 + vertex 6.39413 -9.74747 -6 + vertex 6.39413 -9.74747 6 + endloop + endfacet + facet normal 0.917741 -0.39718 0 + outer loop + vertex 6.39413 -9.74747 -6 + vertex 6.21949 -10.151 6 + vertex 6.21949 -10.151 -6 + endloop + endfacet + facet normal 0.338632 -0.940919 0 + outer loop + vertex 10.151 -6.21949 -6 + vertex 10.2849 -6.1713 6 + vertex 10.151 -6.21949 6 + endloop + endfacet + facet normal 0.338632 -0.940919 0 + outer loop + vertex 10.2849 -6.1713 6 + vertex 10.151 -6.21949 -6 + vertex 10.2849 -6.1713 -6 + endloop + endfacet + facet normal 0.509048 -0.860738 0 + outer loop + vertex 8.97713 -6.81763 -6 + vertex 9.35565 -6.59377 6 + vertex 8.97713 -6.81763 6 + endloop + endfacet + facet normal 0.509048 -0.860738 0 + outer loop + vertex 9.35565 -6.59377 6 + vertex 8.97713 -6.81763 -6 + vertex 9.35565 -6.59377 -6 + endloop + endfacet + facet normal 0.891009 -0.453986 0 + outer loop + vertex 6.39413 -9.74747 6 + vertex 6.59377 -9.35565 -6 + vertex 6.59377 -9.35565 6 + endloop + endfacet + facet normal 0.891009 -0.453986 0 + outer loop + vertex 6.59377 -9.35565 -6 + vertex 6.39413 -9.74747 6 + vertex 6.39413 -9.74747 -6 + endloop + endfacet + facet normal 0.975864 -0.218381 0 + outer loop + vertex 11.623 -2.98428 6 + vertex 11.6383 -2.91591 -6 + vertex 11.6383 -2.91591 6 + endloop + endfacet + facet normal 0.975864 -0.218381 0 + outer loop + vertex 11.6383 -2.91591 -6 + vertex 11.623 -2.98428 6 + vertex 11.623 -2.98428 -6 + endloop + endfacet + facet normal 0.917752 -0.397154 0 + outer loop + vertex 10.8579 -5.10935 6 + vertex 11.1573 -4.41749 -6 + vertex 11.1573 -4.41749 6 + endloop + endfacet + facet normal 0.917752 -0.397154 0 + outer loop + vertex 11.1573 -4.41749 -6 + vertex 10.8579 -5.10935 6 + vertex 10.8579 -5.10935 -6 + endloop + endfacet + facet normal -0.338785 0.940864 0 + outer loop + vertex -3.7082 11.4127 -6 + vertex -4.41749 11.1573 6 + vertex -3.7082 11.4127 6 + endloop + endfacet + facet normal -0.338785 0.940864 0 + outer loop + vertex -4.41749 11.1573 6 + vertex -3.7082 11.4127 -6 + vertex -4.41749 11.1573 -6 + endloop + endfacet + facet normal -0.397154 0.917752 0 + outer loop + vertex -4.41749 11.1573 -6 + vertex -5.10935 10.8579 6 + vertex -4.41749 11.1573 6 + endloop + endfacet + facet normal -0.397154 0.917752 0 + outer loop + vertex -5.10935 10.8579 6 + vertex -4.41749 11.1573 -6 + vertex -5.10935 10.8579 -6 + endloop + endfacet + facet normal 0.940864 -0.338785 0 + outer loop + vertex 11.1573 -4.41749 6 + vertex 11.4127 -3.7082 -6 + vertex 11.4127 -3.7082 6 + endloop + endfacet + facet normal 0.940864 -0.338785 0 + outer loop + vertex 11.4127 -3.7082 -6 + vertex 11.1573 -4.41749 6 + vertex 11.1573 -4.41749 -6 + endloop + endfacet + facet normal 0.397154 0.917752 -0 + outer loop + vertex 5.10935 10.8579 -6 + vertex 4.41749 11.1573 6 + vertex 5.10935 10.8579 6 + endloop + endfacet + facet normal 0.397154 0.917752 0 + outer loop + vertex 4.41749 11.1573 6 + vertex 5.10935 10.8579 -6 + vertex 4.41749 11.1573 -6 + endloop + endfacet + facet normal -0.218381 -0.975864 0 + outer loop + vertex -2.98428 -11.623 -6 + vertex -2.91591 -11.6383 6 + vertex -2.98428 -11.623 6 + endloop + endfacet + facet normal -0.218381 -0.975864 -0 + outer loop + vertex -2.91591 -11.6383 6 + vertex -2.98428 -11.623 -6 + vertex -2.91591 -11.6383 -6 + endloop + endfacet + facet normal -0.940864 -0.338785 0 + outer loop + vertex -11.1573 -4.41749 -6 + vertex -11.4127 -3.7082 6 + vertex -11.4127 -3.7082 -6 + endloop + endfacet + facet normal -0.940864 -0.338785 0 + outer loop + vertex -11.4127 -3.7082 6 + vertex -11.1573 -4.41749 -6 + vertex -11.1573 -4.41749 6 + endloop + endfacet + facet normal 0.975864 0.218381 0 + outer loop + vertex 11.6383 2.91591 6 + vertex 11.623 2.98428 -6 + vertex 11.623 2.98428 6 + endloop + endfacet + facet normal 0.975864 0.218381 0 + outer loop + vertex 11.623 2.98428 -6 + vertex 11.6383 2.91591 6 + vertex 11.6383 2.91591 -6 + endloop + endfacet + facet normal 0.453945 0.89103 -0 + outer loop + vertex 5.78104 10.5157 -6 + vertex 5.10935 10.8579 6 + vertex 5.78104 10.5157 6 + endloop + endfacet + facet normal 0.453945 0.89103 0 + outer loop + vertex 5.10935 10.8579 6 + vertex 5.78104 10.5157 -6 + vertex 5.10935 10.8579 -6 + endloop + endfacet + facet normal -0.860741 -0.509043 0 + outer loop + vertex -10.2849 -6.1713 -6 + vertex -10.5157 -5.78104 6 + vertex -10.5157 -5.78104 -6 + endloop + endfacet + facet normal -0.860741 -0.509043 0 + outer loop + vertex -10.5157 -5.78104 6 + vertex -10.2849 -6.1713 -6 + vertex -10.2849 -6.1713 6 + endloop + endfacet + facet normal -0.975864 0.218381 0 + outer loop + vertex -11.6383 2.91591 -6 + vertex -11.623 2.98428 6 + vertex -11.623 2.98428 -6 + endloop + endfacet + facet normal -0.975864 0.218381 0 + outer loop + vertex -11.623 2.98428 6 + vertex -11.6383 2.91591 -6 + vertex -11.6383 2.91591 6 + endloop + endfacet + facet normal 0.860741 0.509043 0 + outer loop + vertex 10.5157 5.78104 6 + vertex 10.2849 6.1713 -6 + vertex 10.2849 6.1713 6 + endloop + endfacet + facet normal 0.860741 0.509043 0 + outer loop + vertex 10.2849 6.1713 -6 + vertex 10.5157 5.78104 6 + vertex 10.5157 5.78104 -6 + endloop + endfacet + facet normal 0.218381 0.975864 -0 + outer loop + vertex 2.98428 11.623 -6 + vertex 2.91591 11.6383 6 + vertex 2.98428 11.623 6 + endloop + endfacet + facet normal 0.218381 0.975864 0 + outer loop + vertex 2.91591 11.6383 6 + vertex 2.98428 11.623 -6 + vertex 2.91591 11.6383 -6 + endloop + endfacet + facet normal 0.89103 -0.453945 0 + outer loop + vertex 10.5157 -5.78104 6 + vertex 10.8579 -5.10935 -6 + vertex 10.8579 -5.10935 6 + endloop + endfacet + facet normal 0.89103 -0.453945 0 + outer loop + vertex 10.8579 -5.10935 -6 + vertex 10.5157 -5.78104 6 + vertex 10.5157 -5.78104 -6 + endloop + endfacet + facet normal -0.89103 -0.453945 0 + outer loop + vertex -10.5157 -5.78104 -6 + vertex -10.8579 -5.10935 6 + vertex -10.8579 -5.10935 -6 + endloop + endfacet + facet normal -0.89103 -0.453945 0 + outer loop + vertex -10.8579 -5.10935 6 + vertex -10.5157 -5.78104 -6 + vertex -10.5157 -5.78104 6 + endloop + endfacet + facet normal 0.9603 0.278969 0 + outer loop + vertex 11.623 2.98428 6 + vertex 11.4127 3.7082 -6 + vertex 11.4127 3.7082 6 + endloop + endfacet + facet normal 0.9603 0.278969 0 + outer loop + vertex 11.4127 3.7082 -6 + vertex 11.623 2.98428 6 + vertex 11.623 2.98428 -6 + endloop + endfacet + facet normal -0.9603 0.278969 0 + outer loop + vertex -11.623 2.98428 -6 + vertex -11.4127 3.7082 6 + vertex -11.4127 3.7082 -6 + endloop + endfacet + facet normal -0.9603 0.278969 0 + outer loop + vertex -11.4127 3.7082 6 + vertex -11.623 2.98428 -6 + vertex -11.623 2.98428 6 + endloop + endfacet + facet normal -0.338785 -0.940864 0 + outer loop + vertex -4.41749 -11.1573 -6 + vertex -3.7082 -11.4127 6 + vertex -4.41749 -11.1573 6 + endloop + endfacet + facet normal -0.338785 -0.940864 -0 + outer loop + vertex -3.7082 -11.4127 6 + vertex -4.41749 -11.1573 -6 + vertex -3.7082 -11.4127 -6 + endloop + endfacet + facet normal 0.89103 0.453945 0 + outer loop + vertex 10.8579 5.10935 6 + vertex 10.5157 5.78104 -6 + vertex 10.5157 5.78104 6 + endloop + endfacet + facet normal 0.89103 0.453945 0 + outer loop + vertex 10.5157 5.78104 -6 + vertex 10.8579 5.10935 6 + vertex 10.8579 5.10935 -6 + endloop + endfacet + facet normal -0.917752 0.397154 0 + outer loop + vertex -11.1573 4.41749 -6 + vertex -10.8579 5.10935 6 + vertex -10.8579 5.10935 -6 + endloop + endfacet + facet normal -0.917752 0.397154 0 + outer loop + vertex -10.8579 5.10935 6 + vertex -11.1573 4.41749 -6 + vertex -11.1573 4.41749 6 + endloop + endfacet + facet normal 0.338785 0.940864 -0 + outer loop + vertex 4.41749 11.1573 -6 + vertex 3.7082 11.4127 6 + vertex 4.41749 11.1573 6 + endloop + endfacet + facet normal 0.338785 0.940864 0 + outer loop + vertex 3.7082 11.4127 6 + vertex 4.41749 11.1573 -6 + vertex 3.7082 11.4127 -6 + endloop + endfacet + facet normal -0.218381 0.975864 0 + outer loop + vertex -2.91591 11.6383 -6 + vertex -2.98428 11.623 6 + vertex -2.91591 11.6383 6 + endloop + endfacet + facet normal -0.218381 0.975864 0 + outer loop + vertex -2.98428 11.623 6 + vertex -2.91591 11.6383 -6 + vertex -2.98428 11.623 -6 + endloop + endfacet + facet normal -0.453945 -0.89103 0 + outer loop + vertex -5.78104 -10.5157 -6 + vertex -5.10935 -10.8579 6 + vertex -5.78104 -10.5157 6 + endloop + endfacet + facet normal -0.453945 -0.89103 -0 + outer loop + vertex -5.10935 -10.8579 6 + vertex -5.78104 -10.5157 -6 + vertex -5.10935 -10.8579 -6 + endloop + endfacet + facet normal -0.917752 -0.397154 0 + outer loop + vertex -10.8579 -5.10935 -6 + vertex -11.1573 -4.41749 6 + vertex -11.1573 -4.41749 -6 + endloop + endfacet + facet normal -0.917752 -0.397154 0 + outer loop + vertex -11.1573 -4.41749 6 + vertex -10.8579 -5.10935 -6 + vertex -10.8579 -5.10935 6 + endloop + endfacet + facet normal -0.278969 0.9603 0 + outer loop + vertex -2.98428 11.623 -6 + vertex -3.7082 11.4127 6 + vertex -2.98428 11.623 6 + endloop + endfacet + facet normal -0.278969 0.9603 0 + outer loop + vertex -3.7082 11.4127 6 + vertex -2.98428 11.623 -6 + vertex -3.7082 11.4127 -6 + endloop + endfacet + facet normal -0.860741 0.509043 0 + outer loop + vertex -10.5157 5.78104 -6 + vertex -10.2849 6.1713 6 + vertex -10.2849 6.1713 -6 + endloop + endfacet + facet normal -0.860741 0.509043 0 + outer loop + vertex -10.2849 6.1713 6 + vertex -10.5157 5.78104 -6 + vertex -10.5157 5.78104 6 + endloop + endfacet + facet normal 0.860741 -0.509043 0 + outer loop + vertex 10.2849 -6.1713 6 + vertex 10.5157 -5.78104 -6 + vertex 10.5157 -5.78104 6 + endloop + endfacet + facet normal 0.860741 -0.509043 0 + outer loop + vertex 10.5157 -5.78104 -6 + vertex 10.2849 -6.1713 6 + vertex 10.2849 -6.1713 -6 + endloop + endfacet + facet normal 0.397154 -0.917752 0 + outer loop + vertex 4.41749 -11.1573 -6 + vertex 5.10935 -10.8579 6 + vertex 4.41749 -11.1573 6 + endloop + endfacet + facet normal 0.397154 -0.917752 0 + outer loop + vertex 5.10935 -10.8579 6 + vertex 4.41749 -11.1573 -6 + vertex 5.10935 -10.8579 -6 + endloop + endfacet + facet normal 0.509043 -0.860741 0 + outer loop + vertex 5.78104 -10.5157 -6 + vertex 6.1713 -10.2849 6 + vertex 5.78104 -10.5157 6 + endloop + endfacet + facet normal 0.509043 -0.860741 0 + outer loop + vertex 6.1713 -10.2849 6 + vertex 5.78104 -10.5157 -6 + vertex 6.1713 -10.2849 -6 + endloop + endfacet + facet normal 0.453945 -0.89103 0 + outer loop + vertex 5.10935 -10.8579 -6 + vertex 5.78104 -10.5157 6 + vertex 5.10935 -10.8579 6 + endloop + endfacet + facet normal 0.453945 -0.89103 0 + outer loop + vertex 5.78104 -10.5157 6 + vertex 5.10935 -10.8579 -6 + vertex 5.78104 -10.5157 -6 + endloop + endfacet + facet normal 0.509043 0.860741 -0 + outer loop + vertex 6.1713 10.2849 -6 + vertex 5.78104 10.5157 6 + vertex 6.1713 10.2849 6 + endloop + endfacet + facet normal 0.509043 0.860741 0 + outer loop + vertex 5.78104 10.5157 6 + vertex 6.1713 10.2849 -6 + vertex 5.78104 10.5157 -6 + endloop + endfacet + facet normal -0.9603 -0.278969 0 + outer loop + vertex -11.4127 -3.7082 -6 + vertex -11.623 -2.98428 6 + vertex -11.623 -2.98428 -6 + endloop + endfacet + facet normal -0.9603 -0.278969 0 + outer loop + vertex -11.623 -2.98428 6 + vertex -11.4127 -3.7082 -6 + vertex -11.4127 -3.7082 6 + endloop + endfacet + facet normal 0.278969 0.9603 -0 + outer loop + vertex 3.7082 11.4127 -6 + vertex 2.98428 11.623 6 + vertex 3.7082 11.4127 6 + endloop + endfacet + facet normal 0.278969 0.9603 0 + outer loop + vertex 2.98428 11.623 6 + vertex 3.7082 11.4127 -6 + vertex 2.98428 11.623 -6 + endloop + endfacet + facet normal 0.218381 -0.975864 0 + outer loop + vertex 2.91591 -11.6383 -6 + vertex 2.98428 -11.623 6 + vertex 2.91591 -11.6383 6 + endloop + endfacet + facet normal 0.218381 -0.975864 0 + outer loop + vertex 2.98428 -11.623 6 + vertex 2.91591 -11.6383 -6 + vertex 2.98428 -11.623 -6 + endloop + endfacet + facet normal 0.278969 -0.9603 0 + outer loop + vertex 2.98428 -11.623 -6 + vertex 3.7082 -11.4127 6 + vertex 2.98428 -11.623 6 + endloop + endfacet + facet normal 0.278969 -0.9603 0 + outer loop + vertex 3.7082 -11.4127 6 + vertex 2.98428 -11.623 -6 + vertex 3.7082 -11.4127 -6 + endloop + endfacet + facet normal 0.940864 0.338785 0 + outer loop + vertex 11.4127 3.7082 6 + vertex 11.1573 4.41749 -6 + vertex 11.1573 4.41749 6 + endloop + endfacet + facet normal 0.940864 0.338785 0 + outer loop + vertex 11.1573 4.41749 -6 + vertex 11.4127 3.7082 6 + vertex 11.4127 3.7082 -6 + endloop + endfacet + facet normal -0.89103 0.453945 0 + outer loop + vertex -10.8579 5.10935 -6 + vertex -10.5157 5.78104 6 + vertex -10.5157 5.78104 -6 + endloop + endfacet + facet normal -0.89103 0.453945 0 + outer loop + vertex -10.5157 5.78104 6 + vertex -10.8579 5.10935 -6 + vertex -10.8579 5.10935 6 + endloop + endfacet + facet normal -0.278969 -0.9603 0 + outer loop + vertex -3.7082 -11.4127 -6 + vertex -2.98428 -11.623 6 + vertex -3.7082 -11.4127 6 + endloop + endfacet + facet normal -0.278969 -0.9603 -0 + outer loop + vertex -2.98428 -11.623 6 + vertex -3.7082 -11.4127 -6 + vertex -2.98428 -11.623 -6 + endloop + endfacet + facet normal -0.509043 0.860741 0 + outer loop + vertex -5.78104 10.5157 -6 + vertex -6.1713 10.2849 6 + vertex -5.78104 10.5157 6 + endloop + endfacet + facet normal -0.509043 0.860741 0 + outer loop + vertex -6.1713 10.2849 6 + vertex -5.78104 10.5157 -6 + vertex -6.1713 10.2849 -6 + endloop + endfacet + facet normal 0.917752 0.397154 0 + outer loop + vertex 11.1573 4.41749 6 + vertex 10.8579 5.10935 -6 + vertex 10.8579 5.10935 6 + endloop + endfacet + facet normal 0.917752 0.397154 0 + outer loop + vertex 10.8579 5.10935 -6 + vertex 11.1573 4.41749 6 + vertex 11.1573 4.41749 -6 + endloop + endfacet + facet normal 0.9603 -0.278969 0 + outer loop + vertex 11.4127 -3.7082 6 + vertex 11.623 -2.98428 -6 + vertex 11.623 -2.98428 6 + endloop + endfacet + facet normal 0.9603 -0.278969 0 + outer loop + vertex 11.623 -2.98428 -6 + vertex 11.4127 -3.7082 6 + vertex 11.4127 -3.7082 -6 + endloop + endfacet + facet normal -0.940864 0.338785 0 + outer loop + vertex -11.4127 3.7082 -6 + vertex -11.1573 4.41749 6 + vertex -11.1573 4.41749 -6 + endloop + endfacet + facet normal -0.940864 0.338785 0 + outer loop + vertex -11.1573 4.41749 6 + vertex -11.4127 3.7082 -6 + vertex -11.4127 3.7082 6 + endloop + endfacet + facet normal -0.975864 -0.218381 0 + outer loop + vertex -11.623 -2.98428 -6 + vertex -11.6383 -2.91591 6 + vertex -11.6383 -2.91591 -6 + endloop + endfacet + facet normal -0.975864 -0.218381 0 + outer loop + vertex -11.6383 -2.91591 6 + vertex -11.623 -2.98428 -6 + vertex -11.623 -2.98428 6 + endloop + endfacet + facet normal 0.338785 -0.940864 0 + outer loop + vertex 3.7082 -11.4127 -6 + vertex 4.41749 -11.1573 6 + vertex 3.7082 -11.4127 6 + endloop + endfacet + facet normal 0.338785 -0.940864 0 + outer loop + vertex 4.41749 -11.1573 6 + vertex 3.7082 -11.4127 -6 + vertex 4.41749 -11.1573 -6 + endloop + endfacet + facet normal -0.509043 -0.860741 0 + outer loop + vertex -6.1713 -10.2849 -6 + vertex -5.78104 -10.5157 6 + vertex -6.1713 -10.2849 6 + endloop + endfacet + facet normal -0.509043 -0.860741 -0 + outer loop + vertex -5.78104 -10.5157 6 + vertex -6.1713 -10.2849 -6 + vertex -5.78104 -10.5157 -6 + endloop + endfacet + facet normal -0.453945 0.89103 0 + outer loop + vertex -5.10935 10.8579 -6 + vertex -5.78104 10.5157 6 + vertex -5.10935 10.8579 6 + endloop + endfacet + facet normal -0.453945 0.89103 0 + outer loop + vertex -5.78104 10.5157 6 + vertex -5.10935 10.8579 -6 + vertex -5.78104 10.5157 -6 + endloop + endfacet + facet normal -0.397154 -0.917752 0 + outer loop + vertex -5.10935 -10.8579 -6 + vertex -4.41749 -11.1573 6 + vertex -5.10935 -10.8579 6 + endloop + endfacet + facet normal -0.397154 -0.917752 -0 + outer loop + vertex -4.41749 -11.1573 6 + vertex -5.10935 -10.8579 -6 + vertex -4.41749 -11.1573 -6 + endloop + endfacet + facet normal 0.827058 0.562117 0 + outer loop + vertex -2.58885 -1.88091 6 + vertex -2.70185 -1.71465 -1.5 + vertex -2.70185 -1.71465 6 + endloop + endfacet + facet normal 0.827058 0.562117 0 + outer loop + vertex -2.70185 -1.71465 -1.5 + vertex -2.58885 -1.88091 6 + vertex -2.58885 -1.88091 -1.5 + endloop + endfacet + facet normal 0.827058 -0.562117 0 + outer loop + vertex -2.70185 1.71465 6 + vertex -2.58885 1.88091 -1.5 + vertex -2.58885 1.88091 6 + endloop + endfacet + facet normal 0.827058 -0.562117 0 + outer loop + vertex -2.58885 1.88091 -1.5 + vertex -2.70185 1.71465 6 + vertex -2.70185 1.71465 -1.5 + endloop + endfacet + facet normal 0.750109 0.661314 0 + outer loop + vertex -2.3327 -2.19055 6 + vertex -2.46564 -2.03976 -1.5 + vertex -2.46564 -2.03976 6 + endloop + endfacet + facet normal 0.750109 0.661314 0 + outer loop + vertex -2.46564 -2.03976 -1.5 + vertex -2.3327 -2.19055 6 + vertex -2.3327 -2.19055 -1.5 + endloop + endfacet + facet normal 0.940876 0.338751 0 + outer loop + vertex -2.97528 -1.178 6 + vertex -3.04338 -0.988853 -1.5 + vertex -3.04338 -0.988853 6 + endloop + endfacet + facet normal 0.940876 0.338751 0 + outer loop + vertex -3.04338 -0.988853 -1.5 + vertex -2.97528 -1.178 6 + vertex -2.97528 -1.178 -1.5 + endloop + endfacet + facet normal 0.0314382 -0.999506 0 + outer loop + vertex -0.20093 3.19368 -1.5 + vertex 0 3.2 6 + vertex -0.20093 3.19368 6 + endloop + endfacet + facet normal 0.0314382 -0.999506 0 + outer loop + vertex 0 3.2 6 + vertex -0.20093 3.19368 -1.5 + vertex 0 3.2 -1.5 + endloop + endfacet + facet normal 0.860754 -0.509021 0 + outer loop + vertex -2.80418 1.54161 6 + vertex -2.70185 1.71465 -1.5 + vertex -2.70185 1.71465 6 + endloop + endfacet + facet normal 0.860754 -0.509021 0 + outer loop + vertex -2.70185 1.71465 -1.5 + vertex -2.80418 1.54161 6 + vertex -2.80418 1.54161 -1.5 + endloop + endfacet + facet normal 0.397123 0.917765 -0 + outer loop + vertex -1.178 -2.97528 -1.5 + vertex -1.36249 -2.89545 6 + vertex -1.178 -2.97528 6 + endloop + endfacet + facet normal 0.397123 0.917765 0 + outer loop + vertex -1.36249 -2.89545 6 + vertex -1.178 -2.97528 -1.5 + vertex -1.36249 -2.89545 -1.5 + endloop + endfacet + facet normal 0.509021 -0.860754 0 + outer loop + vertex -1.71465 2.70185 -1.5 + vertex -1.54161 2.80418 6 + vertex -1.71465 2.70185 6 + endloop + endfacet + facet normal 0.509021 -0.860754 0 + outer loop + vertex -1.54161 2.80418 6 + vertex -1.71465 2.70185 -1.5 + vertex -1.54161 2.80418 -1.5 + endloop + endfacet + facet normal 0.999506 0.0314382 0 + outer loop + vertex -3.19368 -0.20093 6 + vertex -3.2 0 -1.5 + vertex -3.2 0 6 + endloop + endfacet + facet normal 0.999506 0.0314382 0 + outer loop + vertex -3.2 0 -1.5 + vertex -3.19368 -0.20093 6 + vertex -3.19368 -0.20093 -1.5 + endloop + endfacet + facet normal 0.750109 -0.661314 0 + outer loop + vertex -2.46564 2.03976 6 + vertex -2.3327 2.19055 -1.5 + vertex -2.3327 2.19055 6 + endloop + endfacet + facet normal 0.750109 -0.661314 0 + outer loop + vertex -2.3327 2.19055 -1.5 + vertex -2.46564 2.03976 6 + vertex -2.46564 2.03976 -1.5 + endloop + endfacet + facet normal -0.454017 0.890993 0 + outer loop + vertex 1.5 -2.82538 -1.5 + vertex 1.36249 -2.89545 6 + vertex 1.5 -2.82538 6 + endloop + endfacet + facet normal -0.454017 0.890993 0 + outer loop + vertex 1.36249 -2.89545 6 + vertex 1.5 -2.82538 -1.5 + vertex 1.36249 -2.89545 -1.5 + endloop + endfacet + facet normal 0.612886 0.790171 -0 + outer loop + vertex -1.88091 -2.58885 -1.5 + vertex -2.03976 -2.46564 6 + vertex -1.88091 -2.58885 6 + endloop + endfacet + facet normal 0.612886 0.790171 0 + outer loop + vertex -2.03976 -2.46564 6 + vertex -1.88091 -2.58885 -1.5 + vertex -2.03976 -2.46564 -1.5 + endloop + endfacet + facet normal 0.97592 -0.218129 0 + outer loop + vertex -3.14332 0.59962 6 + vertex -3.09947 0.795807 -1.5 + vertex -3.09947 0.795807 6 + endloop + endfacet + facet normal 0.97592 -0.218129 0 + outer loop + vertex -3.09947 0.795807 -1.5 + vertex -3.14332 0.59962 6 + vertex -3.14332 0.59962 -1.5 + endloop + endfacet + facet normal 0.860754 0.509021 0 + outer loop + vertex -2.70185 -1.71465 6 + vertex -2.80418 -1.54161 -1.5 + vertex -2.80418 -1.54161 6 + endloop + endfacet + facet normal 0.860754 0.509021 0 + outer loop + vertex -2.80418 -1.54161 -1.5 + vertex -2.70185 -1.71465 6 + vertex -2.70185 -1.71465 -1.5 + endloop + endfacet + facet normal 0.987687 -0.156445 0 + outer loop + vertex -3.17477 0.401066 6 + vertex -3.14332 0.59962 -1.5 + vertex -3.14332 0.59962 6 + endloop + endfacet + facet normal 0.987687 -0.156445 0 + outer loop + vertex -3.14332 0.59962 -1.5 + vertex -3.17477 0.401066 6 + vertex -3.17477 0.401066 -1.5 + endloop + endfacet + facet normal -0.338751 -0.940876 0 + outer loop + vertex 0.988853 3.04338 -1.5 + vertex 1.178 2.97528 6 + vertex 0.988853 3.04338 6 + endloop + endfacet + facet normal -0.338751 -0.940876 -0 + outer loop + vertex 1.178 2.97528 6 + vertex 0.988853 3.04338 -1.5 + vertex 1.178 2.97528 -1.5 + endloop + endfacet + facet normal 0.338751 0.940876 -0 + outer loop + vertex -0.988853 -3.04338 -1.5 + vertex -1.178 -2.97528 6 + vertex -0.988853 -3.04338 6 + endloop + endfacet + facet normal 0.338751 0.940876 0 + outer loop + vertex -1.178 -2.97528 6 + vertex -0.988853 -3.04338 -1.5 + vertex -1.178 -2.97528 -1.5 + endloop + endfacet + facet normal -0.156445 -0.987687 0 + outer loop + vertex 0.401066 3.17477 -1.5 + vertex 0.59962 3.14332 6 + vertex 0.401066 3.17477 6 + endloop + endfacet + facet normal -0.156445 -0.987687 -0 + outer loop + vertex 0.59962 3.14332 6 + vertex 0.401066 3.17477 -1.5 + vertex 0.59962 3.14332 -1.5 + endloop + endfacet + facet normal 0.707107 -0.707107 0 + outer loop + vertex -2.3327 2.19055 6 + vertex -2.19055 2.3327 -1.5 + vertex -2.19055 2.3327 6 + endloop + endfacet + facet normal 0.707107 -0.707107 0 + outer loop + vertex -2.19055 2.3327 -1.5 + vertex -2.3327 2.19055 6 + vertex -2.3327 2.19055 -1.5 + endloop + endfacet + facet normal -0.454017 -0.890993 0 + outer loop + vertex 1.36249 2.89545 -1.5 + vertex 1.5 2.82538 6 + vertex 1.36249 2.89545 6 + endloop + endfacet + facet normal -0.454017 -0.890993 -0 + outer loop + vertex 1.5 2.82538 6 + vertex 1.36249 2.89545 -1.5 + vertex 1.5 2.82538 -1.5 + endloop + endfacet + facet normal -0.279014 0.960287 0 + outer loop + vertex 0.988853 -3.04338 -1.5 + vertex 0.795807 -3.09947 6 + vertex 0.988853 -3.04338 6 + endloop + endfacet + facet normal -0.279014 0.960287 0 + outer loop + vertex 0.795807 -3.09947 6 + vertex 0.988853 -3.04338 -1.5 + vertex 0.795807 -3.09947 -1.5 + endloop + endfacet + facet normal -0.0940668 0.995566 0 + outer loop + vertex 0.401066 -3.17477 -1.5 + vertex 0.20093 -3.19368 6 + vertex 0.401066 -3.17477 6 + endloop + endfacet + facet normal -0.0940668 0.995566 0 + outer loop + vertex 0.20093 -3.19368 6 + vertex 0.401066 -3.17477 -1.5 + vertex 0.20093 -3.19368 -1.5 + endloop + endfacet + facet normal -0.156445 0.987687 0 + outer loop + vertex 0.59962 -3.14332 -1.5 + vertex 0.401066 -3.17477 6 + vertex 0.59962 -3.14332 6 + endloop + endfacet + facet normal -0.156445 0.987687 0 + outer loop + vertex 0.401066 -3.17477 6 + vertex 0.59962 -3.14332 -1.5 + vertex 0.401066 -3.17477 -1.5 + endloop + endfacet + facet normal 0.661314 -0.750109 0 + outer loop + vertex -2.19055 2.3327 -1.5 + vertex -2.03976 2.46564 6 + vertex -2.19055 2.3327 6 + endloop + endfacet + facet normal 0.661314 -0.750109 0 + outer loop + vertex -2.03976 2.46564 6 + vertex -2.19055 2.3327 -1.5 + vertex -2.03976 2.46564 -1.5 + endloop + endfacet + facet normal 0.0314382 0.999506 -0 + outer loop + vertex 0 -3.2 -1.5 + vertex -0.20093 -3.19368 6 + vertex 0 -3.2 6 + endloop + endfacet + facet normal 0.0314382 0.999506 0 + outer loop + vertex -0.20093 -3.19368 6 + vertex 0 -3.2 -1.5 + vertex -0.20093 -3.19368 -1.5 + endloop + endfacet + facet normal 0.156445 0.987687 -0 + outer loop + vertex -0.401066 -3.17477 -1.5 + vertex -0.59962 -3.14332 6 + vertex -0.401066 -3.17477 6 + endloop + endfacet + facet normal 0.156445 0.987687 0 + outer loop + vertex -0.59962 -3.14332 6 + vertex -0.401066 -3.17477 -1.5 + vertex -0.59962 -3.14332 -1.5 + endloop + endfacet + facet normal 0.156445 -0.987687 0 + outer loop + vertex -0.59962 3.14332 -1.5 + vertex -0.401066 3.17477 6 + vertex -0.59962 3.14332 6 + endloop + endfacet + facet normal 0.156445 -0.987687 0 + outer loop + vertex -0.401066 3.17477 6 + vertex -0.59962 3.14332 -1.5 + vertex -0.401066 3.17477 -1.5 + endloop + endfacet + facet normal 0.940876 -0.338751 0 + outer loop + vertex -3.04338 0.988853 6 + vertex -2.97528 1.178 -1.5 + vertex -2.97528 1.178 6 + endloop + endfacet + facet normal 0.940876 -0.338751 0 + outer loop + vertex -2.97528 1.178 -1.5 + vertex -3.04338 0.988853 6 + vertex -3.04338 0.988853 -1.5 + endloop + endfacet + facet normal 0.790171 0.612886 0 + outer loop + vertex -2.46564 -2.03976 6 + vertex -2.58885 -1.88091 -1.5 + vertex -2.58885 -1.88091 6 + endloop + endfacet + facet normal 0.790171 0.612886 0 + outer loop + vertex -2.58885 -1.88091 -1.5 + vertex -2.46564 -2.03976 6 + vertex -2.46564 -2.03976 -1.5 + endloop + endfacet + facet normal 0.995566 0.0940668 0 + outer loop + vertex -3.17477 -0.401066 6 + vertex -3.19368 -0.20093 -1.5 + vertex -3.19368 -0.20093 6 + endloop + endfacet + facet normal 0.995566 0.0940668 0 + outer loop + vertex -3.19368 -0.20093 -1.5 + vertex -3.17477 -0.401066 6 + vertex -3.17477 -0.401066 -1.5 + endloop + endfacet + facet normal -0.279014 -0.960287 0 + outer loop + vertex 0.795807 3.09947 -1.5 + vertex 0.988853 3.04338 6 + vertex 0.795807 3.09947 6 + endloop + endfacet + facet normal -0.279014 -0.960287 -0 + outer loop + vertex 0.988853 3.04338 6 + vertex 0.795807 3.09947 -1.5 + vertex 0.988853 3.04338 -1.5 + endloop + endfacet + facet normal 0.960287 0.279014 0 + outer loop + vertex -3.04338 -0.988853 6 + vertex -3.09947 -0.795807 -1.5 + vertex -3.09947 -0.795807 6 + endloop + endfacet + facet normal 0.960287 0.279014 0 + outer loop + vertex -3.09947 -0.795807 -1.5 + vertex -3.04338 -0.988853 6 + vertex -3.04338 -0.988853 -1.5 + endloop + endfacet + facet normal 0.562117 -0.827058 0 + outer loop + vertex -1.88091 2.58885 -1.5 + vertex -1.71465 2.70185 6 + vertex -1.88091 2.58885 6 + endloop + endfacet + facet normal 0.562117 -0.827058 0 + outer loop + vertex -1.71465 2.70185 6 + vertex -1.88091 2.58885 -1.5 + vertex -1.71465 2.70185 -1.5 + endloop + endfacet + facet normal 0.960287 -0.279014 0 + outer loop + vertex -3.09947 0.795807 6 + vertex -3.04338 0.988853 -1.5 + vertex -3.04338 0.988853 6 + endloop + endfacet + facet normal 0.960287 -0.279014 0 + outer loop + vertex -3.04338 0.988853 -1.5 + vertex -3.09947 0.795807 6 + vertex -3.09947 0.795807 -1.5 + endloop + endfacet + facet normal -0.0314382 0.999506 0 + outer loop + vertex 0.20093 -3.19368 -1.5 + vertex 0 -3.2 6 + vertex 0.20093 -3.19368 6 + endloop + endfacet + facet normal -0.0314382 0.999506 0 + outer loop + vertex 0 -3.2 6 + vertex 0.20093 -3.19368 -1.5 + vertex 0 -3.2 -1.5 + endloop + endfacet + facet normal 0.279014 -0.960287 0 + outer loop + vertex -0.988853 3.04338 -1.5 + vertex -0.795807 3.09947 6 + vertex -0.988853 3.04338 6 + endloop + endfacet + facet normal 0.279014 -0.960287 0 + outer loop + vertex -0.795807 3.09947 6 + vertex -0.988853 3.04338 -1.5 + vertex -0.795807 3.09947 -1.5 + endloop + endfacet + facet normal 0.454006 0.890999 -0 + outer loop + vertex -1.36249 -2.89545 -1.5 + vertex -1.54161 -2.80418 6 + vertex -1.36249 -2.89545 6 + endloop + endfacet + facet normal 0.454006 0.890999 0 + outer loop + vertex -1.54161 -2.80418 6 + vertex -1.36249 -2.89545 -1.5 + vertex -1.54161 -2.80418 -1.5 + endloop + endfacet + facet normal 0.338751 -0.940876 0 + outer loop + vertex -1.178 2.97528 -1.5 + vertex -0.988853 3.04338 6 + vertex -1.178 2.97528 6 + endloop + endfacet + facet normal 0.338751 -0.940876 0 + outer loop + vertex -0.988853 3.04338 6 + vertex -1.178 2.97528 -1.5 + vertex -0.988853 3.04338 -1.5 + endloop + endfacet + facet normal 0.454006 -0.890999 0 + outer loop + vertex -1.54161 2.80418 -1.5 + vertex -1.36249 2.89545 6 + vertex -1.54161 2.80418 6 + endloop + endfacet + facet normal 0.454006 -0.890999 0 + outer loop + vertex -1.36249 2.89545 6 + vertex -1.54161 2.80418 -1.5 + vertex -1.36249 2.89545 -1.5 + endloop + endfacet + facet normal -0.397123 -0.917765 0 + outer loop + vertex 1.178 2.97528 -1.5 + vertex 1.36249 2.89545 6 + vertex 1.178 2.97528 6 + endloop + endfacet + facet normal -0.397123 -0.917765 -0 + outer loop + vertex 1.36249 2.89545 6 + vertex 1.178 2.97528 -1.5 + vertex 1.36249 2.89545 -1.5 + endloop + endfacet + facet normal 0.917765 0.397123 0 + outer loop + vertex -2.89545 -1.36249 6 + vertex -2.97528 -1.178 -1.5 + vertex -2.97528 -1.178 6 + endloop + endfacet + facet normal 0.917765 0.397123 0 + outer loop + vertex -2.97528 -1.178 -1.5 + vertex -2.89545 -1.36249 6 + vertex -2.89545 -1.36249 -1.5 + endloop + endfacet + facet normal 0.917765 -0.397123 0 + outer loop + vertex -2.97528 1.178 6 + vertex -2.89545 1.36249 -1.5 + vertex -2.89545 1.36249 6 + endloop + endfacet + facet normal 0.917765 -0.397123 0 + outer loop + vertex -2.89545 1.36249 -1.5 + vertex -2.97528 1.178 6 + vertex -2.97528 1.178 -1.5 + endloop + endfacet + facet normal 0.987687 0.156445 0 + outer loop + vertex -3.14332 -0.59962 6 + vertex -3.17477 -0.401066 -1.5 + vertex -3.17477 -0.401066 6 + endloop + endfacet + facet normal 0.987687 0.156445 0 + outer loop + vertex -3.17477 -0.401066 -1.5 + vertex -3.14332 -0.59962 6 + vertex -3.14332 -0.59962 -1.5 + endloop + endfacet + facet normal 0.0940668 0.995566 -0 + outer loop + vertex -0.20093 -3.19368 -1.5 + vertex -0.401066 -3.17477 6 + vertex -0.20093 -3.19368 6 + endloop + endfacet + facet normal 0.0940668 0.995566 0 + outer loop + vertex -0.401066 -3.17477 6 + vertex -0.20093 -3.19368 -1.5 + vertex -0.401066 -3.17477 -1.5 + endloop + endfacet + facet normal -0.338751 0.940876 0 + outer loop + vertex 1.178 -2.97528 -1.5 + vertex 0.988853 -3.04338 6 + vertex 1.178 -2.97528 6 + endloop + endfacet + facet normal -0.338751 0.940876 0 + outer loop + vertex 0.988853 -3.04338 6 + vertex 1.178 -2.97528 -1.5 + vertex 0.988853 -3.04338 -1.5 + endloop + endfacet + facet normal 0.0940668 -0.995566 0 + outer loop + vertex -0.401066 3.17477 -1.5 + vertex -0.20093 3.19368 6 + vertex -0.401066 3.17477 6 + endloop + endfacet + facet normal 0.0940668 -0.995566 0 + outer loop + vertex -0.20093 3.19368 6 + vertex -0.401066 3.17477 -1.5 + vertex -0.20093 3.19368 -1.5 + endloop + endfacet + facet normal 0.218129 -0.97592 0 + outer loop + vertex -0.795807 3.09947 -1.5 + vertex -0.59962 3.14332 6 + vertex -0.795807 3.09947 6 + endloop + endfacet + facet normal 0.218129 -0.97592 0 + outer loop + vertex -0.59962 3.14332 6 + vertex -0.795807 3.09947 -1.5 + vertex -0.59962 3.14332 -1.5 + endloop + endfacet + facet normal 0.995566 -0.0940668 0 + outer loop + vertex -3.19368 0.20093 6 + vertex -3.17477 0.401066 -1.5 + vertex -3.17477 0.401066 6 + endloop + endfacet + facet normal 0.995566 -0.0940668 0 + outer loop + vertex -3.17477 0.401066 -1.5 + vertex -3.19368 0.20093 6 + vertex -3.19368 0.20093 -1.5 + endloop + endfacet + facet normal 0.999506 -0.0314382 0 + outer loop + vertex -3.2 0 6 + vertex -3.19368 0.20093 -1.5 + vertex -3.19368 0.20093 6 + endloop + endfacet + facet normal 0.999506 -0.0314382 0 + outer loop + vertex -3.19368 0.20093 -1.5 + vertex -3.2 0 6 + vertex -3.2 0 -1.5 + endloop + endfacet + facet normal -0.0940668 -0.995566 0 + outer loop + vertex 0.20093 3.19368 -1.5 + vertex 0.401066 3.17477 6 + vertex 0.20093 3.19368 6 + endloop + endfacet + facet normal -0.0940668 -0.995566 -0 + outer loop + vertex 0.401066 3.17477 6 + vertex 0.20093 3.19368 -1.5 + vertex 0.401066 3.17477 -1.5 + endloop + endfacet + facet normal 0.397123 -0.917765 0 + outer loop + vertex -1.36249 2.89545 -1.5 + vertex -1.178 2.97528 6 + vertex -1.36249 2.89545 6 + endloop + endfacet + facet normal 0.397123 -0.917765 0 + outer loop + vertex -1.178 2.97528 6 + vertex -1.36249 2.89545 -1.5 + vertex -1.178 2.97528 -1.5 + endloop + endfacet + facet normal 0.612886 -0.790171 0 + outer loop + vertex -2.03976 2.46564 -1.5 + vertex -1.88091 2.58885 6 + vertex -2.03976 2.46564 6 + endloop + endfacet + facet normal 0.612886 -0.790171 0 + outer loop + vertex -1.88091 2.58885 6 + vertex -2.03976 2.46564 -1.5 + vertex -1.88091 2.58885 -1.5 + endloop + endfacet + facet normal 0.890999 -0.454006 0 + outer loop + vertex -2.89545 1.36249 6 + vertex -2.80418 1.54161 -1.5 + vertex -2.80418 1.54161 6 + endloop + endfacet + facet normal 0.890999 -0.454006 0 + outer loop + vertex -2.80418 1.54161 -1.5 + vertex -2.89545 1.36249 6 + vertex -2.89545 1.36249 -1.5 + endloop + endfacet + facet normal -0.218129 0.97592 0 + outer loop + vertex 0.795807 -3.09947 -1.5 + vertex 0.59962 -3.14332 6 + vertex 0.795807 -3.09947 6 + endloop + endfacet + facet normal -0.218129 0.97592 0 + outer loop + vertex 0.59962 -3.14332 6 + vertex 0.795807 -3.09947 -1.5 + vertex 0.59962 -3.14332 -1.5 + endloop + endfacet + facet normal -0.397123 0.917765 0 + outer loop + vertex 1.36249 -2.89545 -1.5 + vertex 1.178 -2.97528 6 + vertex 1.36249 -2.89545 6 + endloop + endfacet + facet normal -0.397123 0.917765 0 + outer loop + vertex 1.178 -2.97528 6 + vertex 1.36249 -2.89545 -1.5 + vertex 1.178 -2.97528 -1.5 + endloop + endfacet + facet normal 0.707107 0.707107 0 + outer loop + vertex -2.19055 -2.3327 6 + vertex -2.3327 -2.19055 -1.5 + vertex -2.3327 -2.19055 6 + endloop + endfacet + facet normal 0.707107 0.707107 0 + outer loop + vertex -2.3327 -2.19055 -1.5 + vertex -2.19055 -2.3327 6 + vertex -2.19055 -2.3327 -1.5 + endloop + endfacet + facet normal -0.0314382 -0.999506 0 + outer loop + vertex 0 3.2 -1.5 + vertex 0.20093 3.19368 6 + vertex 0 3.2 6 + endloop + endfacet + facet normal -0.0314382 -0.999506 -0 + outer loop + vertex 0.20093 3.19368 6 + vertex 0 3.2 -1.5 + vertex 0.20093 3.19368 -1.5 + endloop + endfacet + facet normal -0.218129 -0.97592 0 + outer loop + vertex 0.59962 3.14332 -1.5 + vertex 0.795807 3.09947 6 + vertex 0.59962 3.14332 6 + endloop + endfacet + facet normal -0.218129 -0.97592 -0 + outer loop + vertex 0.795807 3.09947 6 + vertex 0.59962 3.14332 -1.5 + vertex 0.795807 3.09947 -1.5 + endloop + endfacet + facet normal 0.790171 -0.612886 0 + outer loop + vertex -2.58885 1.88091 6 + vertex -2.46564 2.03976 -1.5 + vertex -2.46564 2.03976 6 + endloop + endfacet + facet normal 0.790171 -0.612886 0 + outer loop + vertex -2.46564 2.03976 -1.5 + vertex -2.58885 1.88091 6 + vertex -2.58885 1.88091 -1.5 + endloop + endfacet + facet normal 0.661314 0.750109 -0 + outer loop + vertex -2.03976 -2.46564 -1.5 + vertex -2.19055 -2.3327 6 + vertex -2.03976 -2.46564 6 + endloop + endfacet + facet normal 0.661314 0.750109 0 + outer loop + vertex -2.19055 -2.3327 6 + vertex -2.03976 -2.46564 -1.5 + vertex -2.19055 -2.3327 -1.5 + endloop + endfacet + facet normal 0.97592 0.218129 0 + outer loop + vertex -3.09947 -0.795807 6 + vertex -3.14332 -0.59962 -1.5 + vertex -3.14332 -0.59962 6 + endloop + endfacet + facet normal 0.97592 0.218129 0 + outer loop + vertex -3.14332 -0.59962 -1.5 + vertex -3.09947 -0.795807 6 + vertex -3.09947 -0.795807 -1.5 + endloop + endfacet + facet normal 0.509021 0.860754 -0 + outer loop + vertex -1.54161 -2.80418 -1.5 + vertex -1.71465 -2.70185 6 + vertex -1.54161 -2.80418 6 + endloop + endfacet + facet normal 0.509021 0.860754 0 + outer loop + vertex -1.71465 -2.70185 6 + vertex -1.54161 -2.80418 -1.5 + vertex -1.71465 -2.70185 -1.5 + endloop + endfacet + facet normal 0.562117 0.827058 -0 + outer loop + vertex -1.71465 -2.70185 -1.5 + vertex -1.88091 -2.58885 6 + vertex -1.71465 -2.70185 6 + endloop + endfacet + facet normal 0.562117 0.827058 0 + outer loop + vertex -1.88091 -2.58885 6 + vertex -1.71465 -2.70185 -1.5 + vertex -1.88091 -2.58885 -1.5 + endloop + endfacet + facet normal 0.279014 0.960287 -0 + outer loop + vertex -0.795807 -3.09947 -1.5 + vertex -0.988853 -3.04338 6 + vertex -0.795807 -3.09947 6 + endloop + endfacet + facet normal 0.279014 0.960287 0 + outer loop + vertex -0.988853 -3.04338 6 + vertex -0.795807 -3.09947 -1.5 + vertex -0.988853 -3.04338 -1.5 + endloop + endfacet + facet normal 0.218129 0.97592 -0 + outer loop + vertex -0.59962 -3.14332 -1.5 + vertex -0.795807 -3.09947 6 + vertex -0.59962 -3.14332 6 + endloop + endfacet + facet normal 0.218129 0.97592 0 + outer loop + vertex -0.795807 -3.09947 6 + vertex -0.59962 -3.14332 -1.5 + vertex -0.795807 -3.09947 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.36249 2.89545 -1.5 + vertex 1.5 -2.82538 -1.5 + vertex 1.5 2.82538 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.36249 2.89545 -1.5 + vertex 1.36249 -2.89545 -1.5 + vertex 1.5 -2.82538 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.178 2.97528 -1.5 + vertex 1.36249 -2.89545 -1.5 + vertex 1.36249 2.89545 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.178 2.97528 -1.5 + vertex 1.178 -2.97528 -1.5 + vertex 1.36249 -2.89545 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.988853 3.04338 -1.5 + vertex 1.178 -2.97528 -1.5 + vertex 1.178 2.97528 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.988853 3.04338 -1.5 + vertex 0.988853 -3.04338 -1.5 + vertex 1.178 -2.97528 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.795807 3.09947 -1.5 + vertex 0.988853 -3.04338 -1.5 + vertex 0.988853 3.04338 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.795807 3.09947 -1.5 + vertex 0.795807 -3.09947 -1.5 + vertex 0.988853 -3.04338 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.59962 3.14332 -1.5 + vertex 0.795807 -3.09947 -1.5 + vertex 0.795807 3.09947 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.59962 3.14332 -1.5 + vertex 0.59962 -3.14332 -1.5 + vertex 0.795807 -3.09947 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.401066 3.17477 -1.5 + vertex 0.59962 -3.14332 -1.5 + vertex 0.59962 3.14332 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.401066 3.17477 -1.5 + vertex 0.401066 -3.17477 -1.5 + vertex 0.59962 -3.14332 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.20093 3.19368 -1.5 + vertex 0.401066 -3.17477 -1.5 + vertex 0.401066 3.17477 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.20093 3.19368 -1.5 + vertex 0.20093 -3.19368 -1.5 + vertex 0.401066 -3.17477 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 3.2 -1.5 + vertex 0.20093 -3.19368 -1.5 + vertex 0.20093 3.19368 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 3.2 -1.5 + vertex 0 -3.2 -1.5 + vertex 0.20093 -3.19368 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.20093 3.19368 -1.5 + vertex 0 -3.2 -1.5 + vertex 0 3.2 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.20093 3.19368 -1.5 + vertex -0.20093 -3.19368 -1.5 + vertex 0 -3.2 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.401066 3.17477 -1.5 + vertex -0.20093 -3.19368 -1.5 + vertex -0.20093 3.19368 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.401066 3.17477 -1.5 + vertex -0.401066 -3.17477 -1.5 + vertex -0.20093 -3.19368 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.59962 3.14332 -1.5 + vertex -0.401066 -3.17477 -1.5 + vertex -0.401066 3.17477 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.59962 3.14332 -1.5 + vertex -0.59962 -3.14332 -1.5 + vertex -0.401066 -3.17477 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.795807 3.09947 -1.5 + vertex -0.59962 -3.14332 -1.5 + vertex -0.59962 3.14332 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.795807 3.09947 -1.5 + vertex -0.795807 -3.09947 -1.5 + vertex -0.59962 -3.14332 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.988853 3.04338 -1.5 + vertex -0.795807 -3.09947 -1.5 + vertex -0.795807 3.09947 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.988853 3.04338 -1.5 + vertex -0.988853 -3.04338 -1.5 + vertex -0.795807 -3.09947 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -1.178 2.97528 -1.5 + vertex -0.988853 -3.04338 -1.5 + vertex -0.988853 3.04338 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.178 2.97528 -1.5 + vertex -1.178 -2.97528 -1.5 + vertex -0.988853 -3.04338 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -1.36249 2.89545 -1.5 + vertex -1.178 -2.97528 -1.5 + vertex -1.178 2.97528 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.36249 2.89545 -1.5 + vertex -1.36249 -2.89545 -1.5 + vertex -1.178 -2.97528 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -1.54161 2.80418 -1.5 + vertex -1.36249 -2.89545 -1.5 + vertex -1.36249 2.89545 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.54161 2.80418 -1.5 + vertex -1.54161 -2.80418 -1.5 + vertex -1.36249 -2.89545 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -1.71465 2.70185 -1.5 + vertex -1.54161 -2.80418 -1.5 + vertex -1.54161 2.80418 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.71465 2.70185 -1.5 + vertex -1.71465 -2.70185 -1.5 + vertex -1.54161 -2.80418 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -1.88091 2.58885 -1.5 + vertex -1.71465 -2.70185 -1.5 + vertex -1.71465 2.70185 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.88091 2.58885 -1.5 + vertex -1.88091 -2.58885 -1.5 + vertex -1.71465 -2.70185 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.03976 2.46564 -1.5 + vertex -1.88091 -2.58885 -1.5 + vertex -1.88091 2.58885 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.03976 2.46564 -1.5 + vertex -2.03976 -2.46564 -1.5 + vertex -1.88091 -2.58885 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.19055 2.3327 -1.5 + vertex -2.03976 -2.46564 -1.5 + vertex -2.03976 2.46564 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.19055 2.3327 -1.5 + vertex -2.19055 -2.3327 -1.5 + vertex -2.03976 -2.46564 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.3327 2.19055 -1.5 + vertex -2.19055 -2.3327 -1.5 + vertex -2.19055 2.3327 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.3327 2.19055 -1.5 + vertex -2.3327 -2.19055 -1.5 + vertex -2.19055 -2.3327 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.46564 2.03976 -1.5 + vertex -2.3327 -2.19055 -1.5 + vertex -2.3327 2.19055 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.46564 2.03976 -1.5 + vertex -2.46564 -2.03976 -1.5 + vertex -2.3327 -2.19055 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.58885 1.88091 -1.5 + vertex -2.46564 -2.03976 -1.5 + vertex -2.46564 2.03976 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.58885 1.88091 -1.5 + vertex -2.58885 -1.88091 -1.5 + vertex -2.46564 -2.03976 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.70185 1.71465 -1.5 + vertex -2.58885 -1.88091 -1.5 + vertex -2.58885 1.88091 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.70185 1.71465 -1.5 + vertex -2.70185 -1.71465 -1.5 + vertex -2.58885 -1.88091 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.80418 1.54161 -1.5 + vertex -2.70185 -1.71465 -1.5 + vertex -2.70185 1.71465 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.80418 1.54161 -1.5 + vertex -2.80418 -1.54161 -1.5 + vertex -2.70185 -1.71465 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.89545 1.36249 -1.5 + vertex -2.80418 -1.54161 -1.5 + vertex -2.80418 1.54161 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.89545 1.36249 -1.5 + vertex -2.89545 -1.36249 -1.5 + vertex -2.80418 -1.54161 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.97528 1.178 -1.5 + vertex -2.89545 -1.36249 -1.5 + vertex -2.89545 1.36249 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.97528 1.178 -1.5 + vertex -2.97528 -1.178 -1.5 + vertex -2.89545 -1.36249 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.04338 0.988853 -1.5 + vertex -2.97528 -1.178 -1.5 + vertex -2.97528 1.178 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.04338 0.988853 -1.5 + vertex -3.04338 -0.988853 -1.5 + vertex -2.97528 -1.178 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.09947 0.795807 -1.5 + vertex -3.04338 -0.988853 -1.5 + vertex -3.04338 0.988853 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.09947 0.795807 -1.5 + vertex -3.09947 -0.795807 -1.5 + vertex -3.04338 -0.988853 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.14332 0.59962 -1.5 + vertex -3.09947 -0.795807 -1.5 + vertex -3.09947 0.795807 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.14332 0.59962 -1.5 + vertex -3.14332 -0.59962 -1.5 + vertex -3.09947 -0.795807 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.17477 0.401066 -1.5 + vertex -3.14332 -0.59962 -1.5 + vertex -3.14332 0.59962 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.17477 0.401066 -1.5 + vertex -3.17477 -0.401066 -1.5 + vertex -3.14332 -0.59962 -1.5 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.19368 0.20093 -1.5 + vertex -3.17477 -0.401066 -1.5 + vertex -3.17477 0.401066 -1.5 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.19368 0.20093 -1.5 + vertex -3.19368 -0.20093 -1.5 + vertex -3.17477 -0.401066 -1.5 + endloop + endfacet + facet normal 0 -0 1 + outer loop + vertex -3.19368 -0.20093 -1.5 + vertex -3.19368 0.20093 -1.5 + vertex -3.2 0 -1.5 + endloop + endfacet + facet normal 0.890999 0.454006 0 + outer loop + vertex -2.80418 -1.54161 6 + vertex -2.89545 -1.36249 -1.5 + vertex -2.89545 -1.36249 6 + endloop + endfacet + facet normal 0.890999 0.454006 0 + outer loop + vertex -2.89545 -1.36249 -1.5 + vertex -2.80418 -1.54161 6 + vertex -2.80418 -1.54161 -1.5 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex 1.5 -2.82538 -1.5 + vertex 1.5 2.82538 6 + vertex 1.5 2.82538 -1.5 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex 1.5 2.82538 6 + vertex 1.5 -2.82538 -1.5 + vertex 1.5 -2.82538 6 + endloop + endfacet + facet normal 0.707107 0.707107 0 + outer loop + vertex -6.57165 -6.9981 6 + vertex -6.9981 -6.57165 -3 + vertex -6.9981 -6.57165 6 + endloop + endfacet + facet normal 0.707107 0.707107 0 + outer loop + vertex -6.9981 -6.57165 -3 + vertex -6.57165 -6.9981 6 + vertex -6.57165 -6.9981 -3 + endloop + endfacet + facet normal -0.995561 -0.0941156 0 + outer loop + vertex 9.58106 0.602789 -3 + vertex 9.5243 1.2032 6 + vertex 9.5243 1.2032 -3 + endloop + endfacet + facet normal -0.995561 -0.0941156 0 + outer loop + vertex 9.5243 1.2032 6 + vertex 9.58106 0.602789 -3 + vertex 9.58106 0.602789 6 + endloop + endfacet + facet normal 0.56209 0.827076 -0 + outer loop + vertex -5.14394 -8.10555 -3 + vertex -5.64274 -7.76656 6 + vertex -5.14394 -8.10555 6 + endloop + endfacet + facet normal 0.56209 0.827076 0 + outer loop + vertex -5.64274 -7.76656 6 + vertex -5.14394 -8.10555 -3 + vertex -5.64274 -7.76656 -3 + endloop + endfacet + facet normal 0.509035 -0.860746 0 + outer loop + vertex -5.14394 8.10555 -3 + vertex -4.62484 8.41254 6 + vertex -5.14394 8.10555 6 + endloop + endfacet + facet normal 0.509035 -0.860746 0 + outer loop + vertex -4.62484 8.41254 6 + vertex -5.14394 8.10555 -3 + vertex -4.62484 8.41254 -3 + endloop + endfacet + facet normal -0.940881 -0.338736 0 + outer loop + vertex 9.13014 2.96656 -3 + vertex 8.92585 3.534 6 + vertex 8.92585 3.534 -3 + endloop + endfacet + facet normal -0.940881 -0.338736 0 + outer loop + vertex 8.92585 3.534 6 + vertex 9.13014 2.96656 -3 + vertex 9.13014 2.96656 6 + endloop + endfacet + facet normal -0.278998 0.960292 0 + outer loop + vertex 2.96656 -9.13014 -3 + vertex 2.38742 -9.2984 6 + vertex 2.96656 -9.13014 6 + endloop + endfacet + facet normal -0.278998 0.960292 0 + outer loop + vertex 2.38742 -9.2984 6 + vertex 2.96656 -9.13014 -3 + vertex 2.38742 -9.2984 -3 + endloop + endfacet + facet normal 0.338736 -0.940881 0 + outer loop + vertex -3.534 8.92585 -3 + vertex -2.96656 9.13014 6 + vertex -3.534 8.92585 6 + endloop + endfacet + facet normal 0.338736 -0.940881 0 + outer loop + vertex -2.96656 9.13014 6 + vertex -3.534 8.92585 -3 + vertex -2.96656 9.13014 -3 + endloop + endfacet + facet normal -0.827076 0.56209 0 + outer loop + vertex 7.76656 -5.64274 -3 + vertex 8.10555 -5.14394 6 + vertex 8.10555 -5.14394 -3 + endloop + endfacet + facet normal -0.827076 0.56209 0 + outer loop + vertex 8.10555 -5.14394 6 + vertex 7.76656 -5.64274 -3 + vertex 7.76656 -5.64274 6 + endloop + endfacet + facet normal -0.860746 -0.509035 0 + outer loop + vertex 8.41254 4.62484 -3 + vertex 8.10555 5.14394 6 + vertex 8.10555 5.14394 -3 + endloop + endfacet + facet normal -0.860746 -0.509035 0 + outer loop + vertex 8.10555 5.14394 6 + vertex 8.41254 4.62484 -3 + vertex 8.41254 4.62484 6 + endloop + endfacet + facet normal 0.975916 0.218145 0 + outer loop + vertex -9.2984 -2.38742 6 + vertex -9.42996 -1.79886 -3 + vertex -9.42996 -1.79886 6 + endloop + endfacet + facet normal 0.975916 0.218145 0 + outer loop + vertex -9.42996 -1.79886 -3 + vertex -9.2984 -2.38742 6 + vertex -9.2984 -2.38742 -3 + endloop + endfacet + facet normal -0.860746 0.509035 0 + outer loop + vertex 8.10555 -5.14394 -3 + vertex 8.41254 -4.62484 6 + vertex 8.41254 -4.62484 -3 + endloop + endfacet + facet normal -0.860746 0.509035 0 + outer loop + vertex 8.41254 -4.62484 6 + vertex 8.10555 -5.14394 -3 + vertex 8.10555 -5.14394 6 + endloop + endfacet + facet normal 0.999507 0.0314051 0 + outer loop + vertex -9.58106 -0.602789 6 + vertex -9.6 0 -3 + vertex -9.6 0 6 + endloop + endfacet + facet normal 0.999507 0.0314051 0 + outer loop + vertex -9.6 0 -3 + vertex -9.58106 -0.602789 6 + vertex -9.58106 -0.602789 -3 + endloop + endfacet + facet normal -0.960292 -0.278998 0 + outer loop + vertex 9.2984 2.38742 -3 + vertex 9.13014 2.96656 6 + vertex 9.13014 2.96656 -3 + endloop + endfacet + facet normal -0.960292 -0.278998 0 + outer loop + vertex 9.13014 2.96656 6 + vertex 9.2984 2.38742 -3 + vertex 9.2984 2.38742 6 + endloop + endfacet + facet normal 0.661315 -0.750108 0 + outer loop + vertex -6.57165 6.9981 -3 + vertex -6.11927 7.39693 6 + vertex -6.57165 6.9981 6 + endloop + endfacet + facet normal 0.661315 -0.750108 0 + outer loop + vertex -6.11927 7.39693 6 + vertex -6.57165 6.9981 -3 + vertex -6.11927 7.39693 -3 + endloop + endfacet + facet normal 0.397145 0.917756 -0 + outer loop + vertex -3.534 -8.92585 -3 + vertex -4.08748 -8.68634 6 + vertex -3.534 -8.92585 6 + endloop + endfacet + facet normal 0.397145 0.917756 0 + outer loop + vertex -4.08748 -8.68634 6 + vertex -3.534 -8.92585 -3 + vertex -4.08748 -8.68634 -3 + endloop + endfacet + facet normal -0.987689 -0.156429 0 + outer loop + vertex 9.5243 1.2032 -3 + vertex 9.42996 1.79886 6 + vertex 9.42996 1.79886 -3 + endloop + endfacet + facet normal -0.987689 -0.156429 0 + outer loop + vertex 9.42996 1.79886 6 + vertex 9.5243 1.2032 -3 + vertex 9.5243 1.2032 6 + endloop + endfacet + facet normal 0.0314051 0.999507 -0 + outer loop + vertex 0 -9.6 -3 + vertex -0.602789 -9.58106 6 + vertex 0 -9.6 6 + endloop + endfacet + facet normal 0.0314051 0.999507 0 + outer loop + vertex -0.602789 -9.58106 6 + vertex 0 -9.6 -3 + vertex -0.602789 -9.58106 -3 + endloop + endfacet + facet normal -0.790159 -0.612902 0 + outer loop + vertex 7.76656 5.64274 -3 + vertex 7.39693 6.11927 6 + vertex 7.39693 6.11927 -3 + endloop + endfacet + facet normal -0.790159 -0.612902 0 + outer loop + vertex 7.39693 6.11927 6 + vertex 7.76656 5.64274 -3 + vertex 7.76656 5.64274 6 + endloop + endfacet + facet normal 0.218145 -0.975916 0 + outer loop + vertex -2.38742 9.2984 -3 + vertex -1.79886 9.42996 6 + vertex -2.38742 9.2984 6 + endloop + endfacet + facet normal 0.218145 -0.975916 0 + outer loop + vertex -1.79886 9.42996 6 + vertex -2.38742 9.2984 -3 + vertex -1.79886 9.42996 -3 + endloop + endfacet + facet normal 0.218145 0.975916 -0 + outer loop + vertex -1.79886 -9.42996 -3 + vertex -2.38742 -9.2984 6 + vertex -1.79886 -9.42996 6 + endloop + endfacet + facet normal 0.218145 0.975916 0 + outer loop + vertex -2.38742 -9.2984 6 + vertex -1.79886 -9.42996 -3 + vertex -2.38742 -9.2984 -3 + endloop + endfacet + facet normal -0.156429 0.987689 0 + outer loop + vertex 1.79886 -9.42996 -3 + vertex 1.2032 -9.5243 6 + vertex 1.79886 -9.42996 6 + endloop + endfacet + facet normal -0.156429 0.987689 0 + outer loop + vertex 1.2032 -9.5243 6 + vertex 1.79886 -9.42996 -3 + vertex 1.2032 -9.5243 -3 + endloop + endfacet + facet normal -0.750108 0.661315 0 + outer loop + vertex 6.9981 -6.57165 -3 + vertex 7.39693 -6.11927 6 + vertex 7.39693 -6.11927 -3 + endloop + endfacet + facet normal -0.750108 0.661315 0 + outer loop + vertex 7.39693 -6.11927 6 + vertex 6.9981 -6.57165 -3 + vertex 6.9981 -6.57165 6 + endloop + endfacet + facet normal 0.156429 -0.987689 0 + outer loop + vertex -1.79886 9.42996 -3 + vertex -1.2032 9.5243 6 + vertex -1.79886 9.42996 6 + endloop + endfacet + facet normal 0.156429 -0.987689 0 + outer loop + vertex -1.2032 9.5243 6 + vertex -1.79886 9.42996 -3 + vertex -1.2032 9.5243 -3 + endloop + endfacet + facet normal 0.790159 -0.612902 0 + outer loop + vertex -7.76656 5.64274 6 + vertex -7.39693 6.11927 -3 + vertex -7.39693 6.11927 6 + endloop + endfacet + facet normal 0.790159 -0.612902 0 + outer loop + vertex -7.39693 6.11927 -3 + vertex -7.76656 5.64274 6 + vertex -7.76656 5.64274 -3 + endloop + endfacet + facet normal -0.338736 0.940881 0 + outer loop + vertex 3.534 -8.92585 -3 + vertex 2.96656 -9.13014 6 + vertex 3.534 -8.92585 6 + endloop + endfacet + facet normal -0.338736 0.940881 0 + outer loop + vertex 2.96656 -9.13014 6 + vertex 3.534 -8.92585 -3 + vertex 2.96656 -9.13014 -3 + endloop + endfacet + facet normal -0.975916 -0.218145 0 + outer loop + vertex 9.42996 1.79886 -3 + vertex 9.2984 2.38742 6 + vertex 9.2984 2.38742 -3 + endloop + endfacet + facet normal -0.975916 -0.218145 0 + outer loop + vertex 9.2984 2.38742 6 + vertex 9.42996 1.79886 -3 + vertex 9.42996 1.79886 6 + endloop + endfacet + facet normal 0.940881 -0.338736 0 + outer loop + vertex -9.13014 2.96656 6 + vertex -8.92585 3.534 -3 + vertex -8.92585 3.534 6 + endloop + endfacet + facet normal 0.940881 -0.338736 0 + outer loop + vertex -8.92585 3.534 -3 + vertex -9.13014 2.96656 6 + vertex -9.13014 2.96656 -3 + endloop + endfacet + facet normal 0.891006 -0.453992 0 + outer loop + vertex -8.68634 4.08748 6 + vertex -8.41254 4.62484 -3 + vertex -8.41254 4.62484 6 + endloop + endfacet + facet normal 0.891006 -0.453992 0 + outer loop + vertex -8.41254 4.62484 -3 + vertex -8.68634 4.08748 6 + vertex -8.68634 4.08748 -3 + endloop + endfacet + facet normal 0.397145 -0.917756 0 + outer loop + vertex -4.08748 8.68634 -3 + vertex -3.534 8.92585 6 + vertex -4.08748 8.68634 6 + endloop + endfacet + facet normal 0.397145 -0.917756 0 + outer loop + vertex -3.534 8.92585 6 + vertex -4.08748 8.68634 -3 + vertex -3.534 8.92585 -3 + endloop + endfacet + facet normal -0.999507 -0.0314051 0 + outer loop + vertex 9.6 0 -3 + vertex 9.58106 0.602789 6 + vertex 9.58106 0.602789 -3 + endloop + endfacet + facet normal -0.999507 -0.0314051 0 + outer loop + vertex 9.58106 0.602789 6 + vertex 9.6 0 -3 + vertex 9.6 0 6 + endloop + endfacet + facet normal -0.995561 0.0941156 0 + outer loop + vertex 9.5243 -1.2032 -3 + vertex 9.58106 -0.602789 6 + vertex 9.58106 -0.602789 -3 + endloop + endfacet + facet normal -0.995561 0.0941156 0 + outer loop + vertex 9.58106 -0.602789 6 + vertex 9.5243 -1.2032 -3 + vertex 9.5243 -1.2032 6 + endloop + endfacet + facet normal -0.960292 0.278998 0 + outer loop + vertex 9.13014 -2.96656 -3 + vertex 9.2984 -2.38742 6 + vertex 9.2984 -2.38742 -3 + endloop + endfacet + facet normal -0.960292 0.278998 0 + outer loop + vertex 9.2984 -2.38742 6 + vertex 9.13014 -2.96656 -3 + vertex 9.13014 -2.96656 6 + endloop + endfacet + facet normal -0.612902 -0.790159 0 + outer loop + vertex 5.64274 7.76656 -3 + vertex 6.11927 7.39693 6 + vertex 5.64274 7.76656 6 + endloop + endfacet + facet normal -0.612902 -0.790159 -0 + outer loop + vertex 6.11927 7.39693 6 + vertex 5.64274 7.76656 -3 + vertex 6.11927 7.39693 -3 + endloop + endfacet + facet normal 0.156429 0.987689 -0 + outer loop + vertex -1.2032 -9.5243 -3 + vertex -1.79886 -9.42996 6 + vertex -1.2032 -9.5243 6 + endloop + endfacet + facet normal 0.156429 0.987689 0 + outer loop + vertex -1.79886 -9.42996 6 + vertex -1.2032 -9.5243 -3 + vertex -1.79886 -9.42996 -3 + endloop + endfacet + facet normal -0.917756 -0.397145 0 + outer loop + vertex 8.92585 3.534 -3 + vertex 8.68634 4.08748 6 + vertex 8.68634 4.08748 -3 + endloop + endfacet + facet normal -0.917756 -0.397145 0 + outer loop + vertex 8.68634 4.08748 6 + vertex 8.92585 3.534 -3 + vertex 8.92585 3.534 6 + endloop + endfacet + facet normal 0.278998 0.960292 -0 + outer loop + vertex -2.38742 -9.2984 -3 + vertex -2.96656 -9.13014 6 + vertex -2.38742 -9.2984 6 + endloop + endfacet + facet normal 0.278998 0.960292 0 + outer loop + vertex -2.96656 -9.13014 6 + vertex -2.38742 -9.2984 -3 + vertex -2.96656 -9.13014 -3 + endloop + endfacet + facet normal 0.0314051 -0.999507 0 + outer loop + vertex -0.602789 9.58106 -3 + vertex 0 9.6 6 + vertex -0.602789 9.58106 6 + endloop + endfacet + facet normal 0.0314051 -0.999507 0 + outer loop + vertex 0 9.6 6 + vertex -0.602789 9.58106 -3 + vertex 0 9.6 -3 + endloop + endfacet + facet normal -0.750108 -0.661315 0 + outer loop + vertex 7.39693 6.11927 -3 + vertex 6.9981 6.57165 6 + vertex 6.9981 6.57165 -3 + endloop + endfacet + facet normal -0.750108 -0.661315 0 + outer loop + vertex 6.9981 6.57165 6 + vertex 7.39693 6.11927 -3 + vertex 7.39693 6.11927 6 + endloop + endfacet + facet normal 0.453992 -0.891006 0 + outer loop + vertex -4.62484 8.41254 -3 + vertex -4.08748 8.68634 6 + vertex -4.62484 8.41254 6 + endloop + endfacet + facet normal 0.453992 -0.891006 0 + outer loop + vertex -4.08748 8.68634 6 + vertex -4.62484 8.41254 -3 + vertex -4.08748 8.68634 -3 + endloop + endfacet + facet normal -0.975916 0.218145 0 + outer loop + vertex 9.2984 -2.38742 -3 + vertex 9.42996 -1.79886 6 + vertex 9.42996 -1.79886 -3 + endloop + endfacet + facet normal -0.975916 0.218145 0 + outer loop + vertex 9.42996 -1.79886 6 + vertex 9.2984 -2.38742 -3 + vertex 9.2984 -2.38742 6 + endloop + endfacet + facet normal 0.509035 0.860746 -0 + outer loop + vertex -4.62484 -8.41254 -3 + vertex -5.14394 -8.10555 6 + vertex -4.62484 -8.41254 6 + endloop + endfacet + facet normal 0.509035 0.860746 0 + outer loop + vertex -5.14394 -8.10555 6 + vertex -4.62484 -8.41254 -3 + vertex -5.14394 -8.10555 -3 + endloop + endfacet + facet normal -0.56209 0.827076 0 + outer loop + vertex 5.64274 -7.76656 -3 + vertex 5.14394 -8.10555 6 + vertex 5.64274 -7.76656 6 + endloop + endfacet + facet normal -0.56209 0.827076 0 + outer loop + vertex 5.14394 -8.10555 6 + vertex 5.64274 -7.76656 -3 + vertex 5.14394 -8.10555 -3 + endloop + endfacet + facet normal -0.56209 -0.827076 0 + outer loop + vertex 5.14394 8.10555 -3 + vertex 5.64274 7.76656 6 + vertex 5.14394 8.10555 6 + endloop + endfacet + facet normal -0.56209 -0.827076 -0 + outer loop + vertex 5.64274 7.76656 6 + vertex 5.14394 8.10555 -3 + vertex 5.64274 7.76656 -3 + endloop + endfacet + facet normal -0.453992 -0.891006 0 + outer loop + vertex 4.08748 8.68634 -3 + vertex 4.62484 8.41254 6 + vertex 4.08748 8.68634 6 + endloop + endfacet + facet normal -0.453992 -0.891006 -0 + outer loop + vertex 4.62484 8.41254 6 + vertex 4.08748 8.68634 -3 + vertex 4.62484 8.41254 -3 + endloop + endfacet + facet normal 0.975916 -0.218145 0 + outer loop + vertex -9.42996 1.79886 6 + vertex -9.2984 2.38742 -3 + vertex -9.2984 2.38742 6 + endloop + endfacet + facet normal 0.975916 -0.218145 0 + outer loop + vertex -9.2984 2.38742 -3 + vertex -9.42996 1.79886 6 + vertex -9.42996 1.79886 -3 + endloop + endfacet + facet normal -0.278998 -0.960292 0 + outer loop + vertex 2.38742 9.2984 -3 + vertex 2.96656 9.13014 6 + vertex 2.38742 9.2984 6 + endloop + endfacet + facet normal -0.278998 -0.960292 -0 + outer loop + vertex 2.96656 9.13014 6 + vertex 2.38742 9.2984 -3 + vertex 2.96656 9.13014 -3 + endloop + endfacet + facet normal -0.661315 -0.750108 0 + outer loop + vertex 6.11927 7.39693 -3 + vertex 6.57165 6.9981 6 + vertex 6.11927 7.39693 6 + endloop + endfacet + facet normal -0.661315 -0.750108 -0 + outer loop + vertex 6.57165 6.9981 6 + vertex 6.11927 7.39693 -3 + vertex 6.57165 6.9981 -3 + endloop + endfacet + facet normal 0.960292 -0.278998 0 + outer loop + vertex -9.2984 2.38742 6 + vertex -9.13014 2.96656 -3 + vertex -9.13014 2.96656 6 + endloop + endfacet + facet normal 0.960292 -0.278998 0 + outer loop + vertex -9.13014 2.96656 -3 + vertex -9.2984 2.38742 6 + vertex -9.2984 2.38742 -3 + endloop + endfacet + facet normal 0.917756 -0.397145 0 + outer loop + vertex -8.92585 3.534 6 + vertex -8.68634 4.08748 -3 + vertex -8.68634 4.08748 6 + endloop + endfacet + facet normal 0.917756 -0.397145 0 + outer loop + vertex -8.68634 4.08748 -3 + vertex -8.92585 3.534 6 + vertex -8.92585 3.534 -3 + endloop + endfacet + facet normal -0.509035 0.860746 0 + outer loop + vertex 5.14394 -8.10555 -3 + vertex 4.62484 -8.41254 6 + vertex 5.14394 -8.10555 6 + endloop + endfacet + facet normal -0.509035 0.860746 0 + outer loop + vertex 4.62484 -8.41254 6 + vertex 5.14394 -8.10555 -3 + vertex 4.62484 -8.41254 -3 + endloop + endfacet + facet normal -0.917756 0.397145 0 + outer loop + vertex 8.68634 -4.08748 -3 + vertex 8.92585 -3.534 6 + vertex 8.92585 -3.534 -3 + endloop + endfacet + facet normal -0.917756 0.397145 0 + outer loop + vertex 8.92585 -3.534 6 + vertex 8.68634 -4.08748 -3 + vertex 8.68634 -4.08748 6 + endloop + endfacet + facet normal -0.827076 -0.56209 0 + outer loop + vertex 8.10555 5.14394 -3 + vertex 7.76656 5.64274 6 + vertex 7.76656 5.64274 -3 + endloop + endfacet + facet normal -0.827076 -0.56209 0 + outer loop + vertex 7.76656 5.64274 6 + vertex 8.10555 5.14394 -3 + vertex 8.10555 5.14394 6 + endloop + endfacet + facet normal -0.707107 -0.707107 0 + outer loop + vertex 6.9981 6.57165 -3 + vertex 6.57165 6.9981 6 + vertex 6.57165 6.9981 -3 + endloop + endfacet + facet normal -0.707107 -0.707107 0 + outer loop + vertex 6.57165 6.9981 6 + vertex 6.9981 6.57165 -3 + vertex 6.9981 6.57165 6 + endloop + endfacet + facet normal -0.0941156 0.995561 0 + outer loop + vertex 1.2032 -9.5243 -3 + vertex 0.602789 -9.58106 6 + vertex 1.2032 -9.5243 6 + endloop + endfacet + facet normal -0.0941156 0.995561 0 + outer loop + vertex 0.602789 -9.58106 6 + vertex 1.2032 -9.5243 -3 + vertex 0.602789 -9.58106 -3 + endloop + endfacet + facet normal -0.0314051 0.999507 0 + outer loop + vertex 0.602789 -9.58106 -3 + vertex 0 -9.6 6 + vertex 0.602789 -9.58106 6 + endloop + endfacet + facet normal -0.0314051 0.999507 0 + outer loop + vertex 0 -9.6 6 + vertex 0.602789 -9.58106 -3 + vertex 0 -9.6 -3 + endloop + endfacet + facet normal -0.0941156 -0.995561 0 + outer loop + vertex 0.602789 9.58106 -3 + vertex 1.2032 9.5243 6 + vertex 0.602789 9.58106 6 + endloop + endfacet + facet normal -0.0941156 -0.995561 -0 + outer loop + vertex 1.2032 9.5243 6 + vertex 0.602789 9.58106 -3 + vertex 1.2032 9.5243 -3 + endloop + endfacet + facet normal -0.397145 -0.917756 0 + outer loop + vertex 3.534 8.92585 -3 + vertex 4.08748 8.68634 6 + vertex 3.534 8.92585 6 + endloop + endfacet + facet normal -0.397145 -0.917756 -0 + outer loop + vertex 4.08748 8.68634 6 + vertex 3.534 8.92585 -3 + vertex 4.08748 8.68634 -3 + endloop + endfacet + facet normal 0.917756 0.397145 0 + outer loop + vertex -8.68634 -4.08748 6 + vertex -8.92585 -3.534 -3 + vertex -8.92585 -3.534 6 + endloop + endfacet + facet normal 0.917756 0.397145 0 + outer loop + vertex -8.92585 -3.534 -3 + vertex -8.68634 -4.08748 6 + vertex -8.68634 -4.08748 -3 + endloop + endfacet + facet normal 0.827076 -0.56209 0 + outer loop + vertex -8.10555 5.14394 6 + vertex -7.76656 5.64274 -3 + vertex -7.76656 5.64274 6 + endloop + endfacet + facet normal 0.827076 -0.56209 0 + outer loop + vertex -7.76656 5.64274 -3 + vertex -8.10555 5.14394 6 + vertex -8.10555 5.14394 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.48 0 -3 + vertex 9.6 0 -3 + vertex 9.58106 0.602789 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.47116 0.281301 -3 + vertex 9.58106 0.602789 -3 + vertex 9.5243 1.2032 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.6 0 -3 + vertex 4.48 0 -3 + vertex 9.58106 -0.602789 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.44467 0.561492 -3 + vertex 9.5243 1.2032 -3 + vertex 9.42996 1.79886 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.47116 -0.281301 -3 + vertex 9.58106 -0.602789 -3 + vertex 4.48 0 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.40065 0.839468 -3 + vertex 9.42996 1.79886 -3 + vertex 9.2984 2.38742 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.58106 -0.602789 -3 + vertex 4.47116 -0.281301 -3 + vertex 9.5243 -1.2032 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.33925 1.11413 -3 + vertex 9.2984 2.38742 -3 + vertex 9.13014 2.96656 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.44467 -0.561492 -3 + vertex 9.5243 -1.2032 -3 + vertex 4.47116 -0.281301 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.26073 1.3844 -3 + vertex 9.13014 2.96656 -3 + vertex 8.92585 3.534 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.5243 -1.2032 -3 + vertex 4.44467 -0.561492 -3 + vertex 9.42996 -1.79886 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.1654 1.6492 -3 + vertex 8.92585 3.534 -3 + vertex 8.68634 4.08748 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.40065 -0.839468 -3 + vertex 9.42996 -1.79886 -3 + vertex 4.44467 -0.561492 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.05363 1.90749 -3 + vertex 8.68634 4.08748 -3 + vertex 8.41254 4.62484 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.42996 -1.79886 -3 + vertex 4.40065 -0.839468 -3 + vertex 9.2984 -2.38742 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.92585 2.15826 -3 + vertex 8.41254 4.62484 -3 + vertex 8.10555 5.14394 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.33925 -1.11413 -3 + vertex 9.2984 -2.38742 -3 + vertex 4.40065 -0.839468 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.78259 2.4005 -3 + vertex 8.10555 5.14394 -3 + vertex 7.76656 5.64274 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.2984 -2.38742 -3 + vertex 4.33925 -1.11413 -3 + vertex 9.13014 -2.96656 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.6244 2.63328 -3 + vertex 7.76656 5.64274 -3 + vertex 7.39693 6.11927 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.26073 -1.3844 -3 + vertex 9.13014 -2.96656 -3 + vertex 4.33925 -1.11413 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.4519 2.85566 -3 + vertex 7.39693 6.11927 -3 + vertex 6.9981 6.57165 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.13014 -2.96656 -3 + vertex 4.26073 -1.3844 -3 + vertex 8.92585 -3.534 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.26578 3.06677 -3 + vertex 6.9981 6.57165 -3 + vertex 6.57165 6.9981 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.1654 -1.6492 -3 + vertex 8.92585 -3.534 -3 + vertex 4.26073 -1.3844 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.06677 3.26578 -3 + vertex 6.57165 6.9981 -3 + vertex 6.11927 7.39693 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.92585 -3.534 -3 + vertex 4.1654 -1.6492 -3 + vertex 8.68634 -4.08748 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.85566 3.4519 -3 + vertex 6.11927 7.39693 -3 + vertex 5.64274 7.76656 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 4.05363 -1.90749 -3 + vertex 8.68634 -4.08748 -3 + vertex 4.1654 -1.6492 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.63328 3.6244 -3 + vertex 5.64274 7.76656 -3 + vertex 5.14394 8.10555 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.68634 -4.08748 -3 + vertex 4.05363 -1.90749 -3 + vertex 8.41254 -4.62484 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.4005 3.78259 -3 + vertex 5.14394 8.10555 -3 + vertex 4.62484 8.41254 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.92585 -2.15826 -3 + vertex 8.41254 -4.62484 -3 + vertex 4.05363 -1.90749 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.41254 -4.62484 -3 + vertex 3.92585 -2.15826 -3 + vertex 8.10555 -5.14394 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.58106 0.602789 -3 + vertex 4.47116 0.281301 -3 + vertex 4.48 0 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.5243 1.2032 -3 + vertex 4.44467 0.561492 -3 + vertex 4.47116 0.281301 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.42996 1.79886 -3 + vertex 4.40065 0.839468 -3 + vertex 4.44467 0.561492 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.2984 2.38742 -3 + vertex 4.33925 1.11413 -3 + vertex 4.40065 0.839468 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 9.13014 2.96656 -3 + vertex 4.26073 1.3844 -3 + vertex 4.33925 1.11413 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.92585 3.534 -3 + vertex 4.1654 1.6492 -3 + vertex 4.26073 1.3844 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.15826 3.92585 -3 + vertex 4.62484 8.41254 -3 + vertex 4.08748 8.68634 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.68634 4.08748 -3 + vertex 4.05363 1.90749 -3 + vertex 4.1654 1.6492 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.41254 4.62484 -3 + vertex 3.92585 2.15826 -3 + vertex 4.05363 1.90749 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.10555 5.14394 -3 + vertex 3.78259 2.4005 -3 + vertex 3.92585 2.15826 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.76656 5.64274 -3 + vertex 3.6244 2.63328 -3 + vertex 3.78259 2.4005 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.90749 4.05363 -3 + vertex 4.08748 8.68634 -3 + vertex 3.534 8.92585 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.39693 6.11927 -3 + vertex 3.4519 2.85566 -3 + vertex 3.6244 2.63328 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.9981 6.57165 -3 + vertex 3.26578 3.06677 -3 + vertex 3.4519 2.85566 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.57165 6.9981 -3 + vertex 3.06677 3.26578 -3 + vertex 3.26578 3.06677 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.6492 4.1654 -3 + vertex 3.534 8.92585 -3 + vertex 2.96656 9.13014 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.11927 7.39693 -3 + vertex 2.85566 3.4519 -3 + vertex 3.06677 3.26578 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.64274 7.76656 -3 + vertex 2.63328 3.6244 -3 + vertex 2.85566 3.4519 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.14394 8.10555 -3 + vertex 2.4005 3.78259 -3 + vertex 2.63328 3.6244 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.3844 4.26073 -3 + vertex 2.96656 9.13014 -3 + vertex 2.38742 9.2984 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.62484 8.41254 -3 + vertex 2.15826 3.92585 -3 + vertex 2.4005 3.78259 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.08748 8.68634 -3 + vertex 1.90749 4.05363 -3 + vertex 2.15826 3.92585 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.11413 4.33925 -3 + vertex 2.38742 9.2984 -3 + vertex 1.79886 9.42996 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.534 8.92585 -3 + vertex 1.6492 4.1654 -3 + vertex 1.90749 4.05363 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.96656 9.13014 -3 + vertex 1.3844 4.26073 -3 + vertex 1.6492 4.1654 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.839468 4.40065 -3 + vertex 1.79886 9.42996 -3 + vertex 1.2032 9.5243 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.38742 9.2984 -3 + vertex 1.11413 4.33925 -3 + vertex 1.3844 4.26073 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.79886 9.42996 -3 + vertex 0.839468 4.40065 -3 + vertex 1.11413 4.33925 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.561492 4.44467 -3 + vertex 1.2032 9.5243 -3 + vertex 0.602789 9.58106 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.2032 9.5243 -3 + vertex 0.561492 4.44467 -3 + vertex 0.839468 4.40065 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0.602789 9.58106 -3 + vertex 0.281301 4.47116 -3 + vertex 0.561492 4.44467 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 9.6 -3 + vertex 0.281301 4.47116 -3 + vertex 0.602789 9.58106 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 9.6 -3 + vertex 0 4.48 -3 + vertex 0.281301 4.47116 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 9.6 -3 + vertex -0.281301 4.47116 -3 + vertex 0 4.48 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -0.602789 9.58106 -3 + vertex -0.281301 4.47116 -3 + vertex 0 9.6 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.281301 4.47116 -3 + vertex -0.602789 9.58106 -3 + vertex -0.561492 4.44467 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -1.2032 9.5243 -3 + vertex -0.561492 4.44467 -3 + vertex -0.602789 9.58106 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.561492 4.44467 -3 + vertex -1.2032 9.5243 -3 + vertex -0.839468 4.40065 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -1.79886 9.42996 -3 + vertex -0.839468 4.40065 -3 + vertex -1.2032 9.5243 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.839468 4.40065 -3 + vertex -1.79886 9.42996 -3 + vertex -1.11413 4.33925 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.38742 9.2984 -3 + vertex -1.11413 4.33925 -3 + vertex -1.79886 9.42996 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.11413 4.33925 -3 + vertex -2.38742 9.2984 -3 + vertex -1.3844 4.26073 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -2.96656 9.13014 -3 + vertex -1.3844 4.26073 -3 + vertex -2.38742 9.2984 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.3844 4.26073 -3 + vertex -2.96656 9.13014 -3 + vertex -1.6492 4.1654 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -3.534 8.92585 -3 + vertex -1.6492 4.1654 -3 + vertex -2.96656 9.13014 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.6492 4.1654 -3 + vertex -3.534 8.92585 -3 + vertex -1.90749 4.05363 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.08748 8.68634 -3 + vertex -1.90749 4.05363 -3 + vertex -3.534 8.92585 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.90749 4.05363 -3 + vertex -4.08748 8.68634 -3 + vertex -2.15826 3.92585 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.62484 8.41254 -3 + vertex -2.15826 3.92585 -3 + vertex -4.08748 8.68634 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.15826 3.92585 -3 + vertex -4.62484 8.41254 -3 + vertex -2.4005 3.78259 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.14394 8.10555 -3 + vertex -2.4005 3.78259 -3 + vertex -4.62484 8.41254 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.4005 3.78259 -3 + vertex -5.14394 8.10555 -3 + vertex -2.63328 3.6244 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.64274 7.76656 -3 + vertex -2.63328 3.6244 -3 + vertex -5.14394 8.10555 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.63328 3.6244 -3 + vertex -5.64274 7.76656 -3 + vertex -2.85566 3.4519 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.11927 7.39693 -3 + vertex -2.85566 3.4519 -3 + vertex -5.64274 7.76656 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.85566 3.4519 -3 + vertex -6.11927 7.39693 -3 + vertex -3.06677 3.26578 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.57165 6.9981 -3 + vertex -3.06677 3.26578 -3 + vertex -6.11927 7.39693 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.06677 3.26578 -3 + vertex -6.57165 6.9981 -3 + vertex -3.26578 3.06677 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -6.9981 6.57165 -3 + vertex -3.26578 3.06677 -3 + vertex -6.57165 6.9981 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.26578 3.06677 -3 + vertex -6.9981 6.57165 -3 + vertex -3.4519 2.85566 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -7.39693 6.11927 -3 + vertex -3.4519 2.85566 -3 + vertex -6.9981 6.57165 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.4519 2.85566 -3 + vertex -7.39693 6.11927 -3 + vertex -3.6244 2.63328 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -7.76656 5.64274 -3 + vertex -3.6244 2.63328 -3 + vertex -7.39693 6.11927 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.6244 2.63328 -3 + vertex -7.76656 5.64274 -3 + vertex -3.78259 2.4005 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.78259 2.4005 -3 + vertex -8.10555 5.14394 -3 + vertex -3.92585 2.15826 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.10555 5.14394 -3 + vertex -3.78259 2.4005 -3 + vertex -7.76656 5.64274 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.78259 -2.4005 -3 + vertex 8.10555 -5.14394 -3 + vertex 3.92585 -2.15826 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 8.10555 -5.14394 -3 + vertex 3.78259 -2.4005 -3 + vertex 7.76656 -5.64274 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.6244 -2.63328 -3 + vertex 7.76656 -5.64274 -3 + vertex 3.78259 -2.4005 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.76656 -5.64274 -3 + vertex 3.6244 -2.63328 -3 + vertex 7.39693 -6.11927 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.4519 -2.85566 -3 + vertex 7.39693 -6.11927 -3 + vertex 3.6244 -2.63328 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 7.39693 -6.11927 -3 + vertex 3.4519 -2.85566 -3 + vertex 6.9981 -6.57165 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.26578 -3.06677 -3 + vertex 6.9981 -6.57165 -3 + vertex 3.4519 -2.85566 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.9981 -6.57165 -3 + vertex 3.26578 -3.06677 -3 + vertex 6.57165 -6.9981 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 3.06677 -3.26578 -3 + vertex 6.57165 -6.9981 -3 + vertex 3.26578 -3.06677 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.57165 -6.9981 -3 + vertex 3.06677 -3.26578 -3 + vertex 6.11927 -7.39693 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.85566 -3.4519 -3 + vertex 6.11927 -7.39693 -3 + vertex 3.06677 -3.26578 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.11927 -7.39693 -3 + vertex 2.85566 -3.4519 -3 + vertex 5.64274 -7.76656 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.63328 -3.6244 -3 + vertex 5.64274 -7.76656 -3 + vertex 2.85566 -3.4519 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.64274 -7.76656 -3 + vertex 2.63328 -3.6244 -3 + vertex 5.14394 -8.10555 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.4005 -3.78259 -3 + vertex 5.14394 -8.10555 -3 + vertex 2.63328 -3.6244 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 5.14394 -8.10555 -3 + vertex 2.4005 -3.78259 -3 + vertex 4.62484 -8.41254 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 2.15826 -3.92585 -3 + vertex 4.62484 -8.41254 -3 + vertex 2.4005 -3.78259 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.62484 -8.41254 -3 + vertex 2.15826 -3.92585 -3 + vertex 4.08748 -8.68634 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.90749 -4.05363 -3 + vertex 4.08748 -8.68634 -3 + vertex 2.15826 -3.92585 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 4.08748 -8.68634 -3 + vertex 1.90749 -4.05363 -3 + vertex 3.534 -8.92585 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.6492 -4.1654 -3 + vertex 3.534 -8.92585 -3 + vertex 1.90749 -4.05363 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 3.534 -8.92585 -3 + vertex 1.6492 -4.1654 -3 + vertex 2.96656 -9.13014 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.3844 -4.26073 -3 + vertex 2.96656 -9.13014 -3 + vertex 1.6492 -4.1654 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.96656 -9.13014 -3 + vertex 1.3844 -4.26073 -3 + vertex 2.38742 -9.2984 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 1.11413 -4.33925 -3 + vertex 2.38742 -9.2984 -3 + vertex 1.3844 -4.26073 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 2.38742 -9.2984 -3 + vertex 1.11413 -4.33925 -3 + vertex 1.79886 -9.42996 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.839468 -4.40065 -3 + vertex 1.79886 -9.42996 -3 + vertex 1.11413 -4.33925 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.79886 -9.42996 -3 + vertex 0.839468 -4.40065 -3 + vertex 1.2032 -9.5243 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.561492 -4.44467 -3 + vertex 1.2032 -9.5243 -3 + vertex 0.839468 -4.40065 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 1.2032 -9.5243 -3 + vertex 0.561492 -4.44467 -3 + vertex 0.602789 -9.58106 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0.281301 -4.47116 -3 + vertex 0.602789 -9.58106 -3 + vertex 0.561492 -4.44467 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 0 -4.48 -3 + vertex 0.602789 -9.58106 -3 + vertex 0.281301 -4.47116 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 0 -4.48 -3 + vertex 0 -9.6 -3 + vertex 0.602789 -9.58106 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.281301 -4.47116 -3 + vertex 0 -9.6 -3 + vertex 0 -4.48 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.602789 -9.58106 -3 + vertex -0.281301 -4.47116 -3 + vertex -0.561492 -4.44467 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.281301 -4.47116 -3 + vertex -0.602789 -9.58106 -3 + vertex 0 -9.6 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.2032 -9.5243 -3 + vertex -0.561492 -4.44467 -3 + vertex -0.839468 -4.40065 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.79886 -9.42996 -3 + vertex -0.839468 -4.40065 -3 + vertex -1.11413 -4.33925 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.561492 -4.44467 -3 + vertex -1.2032 -9.5243 -3 + vertex -0.602789 -9.58106 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.38742 -9.2984 -3 + vertex -1.11413 -4.33925 -3 + vertex -1.3844 -4.26073 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.96656 -9.13014 -3 + vertex -1.3844 -4.26073 -3 + vertex -1.6492 -4.1654 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -0.839468 -4.40065 -3 + vertex -1.79886 -9.42996 -3 + vertex -1.2032 -9.5243 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.534 -8.92585 -3 + vertex -1.6492 -4.1654 -3 + vertex -1.90749 -4.05363 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.08748 -8.68634 -3 + vertex -1.90749 -4.05363 -3 + vertex -2.15826 -3.92585 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.11413 -4.33925 -3 + vertex -2.38742 -9.2984 -3 + vertex -1.79886 -9.42996 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.62484 -8.41254 -3 + vertex -2.15826 -3.92585 -3 + vertex -2.4005 -3.78259 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.14394 -8.10555 -3 + vertex -2.4005 -3.78259 -3 + vertex -2.63328 -3.6244 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.64274 -7.76656 -3 + vertex -2.63328 -3.6244 -3 + vertex -2.85566 -3.4519 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.3844 -4.26073 -3 + vertex -2.96656 -9.13014 -3 + vertex -2.38742 -9.2984 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.11927 -7.39693 -3 + vertex -2.85566 -3.4519 -3 + vertex -3.06677 -3.26578 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.57165 -6.9981 -3 + vertex -3.06677 -3.26578 -3 + vertex -3.26578 -3.06677 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.9981 -6.57165 -3 + vertex -3.26578 -3.06677 -3 + vertex -3.4519 -2.85566 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.6492 -4.1654 -3 + vertex -3.534 -8.92585 -3 + vertex -2.96656 -9.13014 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.39693 -6.11927 -3 + vertex -3.4519 -2.85566 -3 + vertex -3.6244 -2.63328 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -7.76656 -5.64274 -3 + vertex -3.6244 -2.63328 -3 + vertex -3.78259 -2.4005 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.10555 -5.14394 -3 + vertex -3.78259 -2.4005 -3 + vertex -3.92585 -2.15826 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.41254 -4.62484 -3 + vertex -3.92585 -2.15826 -3 + vertex -4.05363 -1.90749 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -1.90749 -4.05363 -3 + vertex -4.08748 -8.68634 -3 + vertex -3.534 -8.92585 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.68634 -4.08748 -3 + vertex -4.05363 -1.90749 -3 + vertex -4.1654 -1.6492 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -8.92585 -3.534 -3 + vertex -4.1654 -1.6492 -3 + vertex -4.26073 -1.3844 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.13014 -2.96656 -3 + vertex -4.26073 -1.3844 -3 + vertex -4.33925 -1.11413 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.2984 -2.38742 -3 + vertex -4.33925 -1.11413 -3 + vertex -4.40065 -0.839468 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.42996 -1.79886 -3 + vertex -4.40065 -0.839468 -3 + vertex -4.44467 -0.561492 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.5243 -1.2032 -3 + vertex -4.44467 -0.561492 -3 + vertex -4.47116 -0.281301 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.15826 -3.92585 -3 + vertex -4.62484 -8.41254 -3 + vertex -4.08748 -8.68634 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.58106 -0.602789 -3 + vertex -4.47116 -0.281301 -3 + vertex -4.48 0 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.41254 4.62484 -3 + vertex -3.92585 2.15826 -3 + vertex -8.10555 5.14394 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.92585 2.15826 -3 + vertex -8.41254 4.62484 -3 + vertex -4.05363 1.90749 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.4005 -3.78259 -3 + vertex -5.14394 -8.10555 -3 + vertex -4.62484 -8.41254 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.68634 4.08748 -3 + vertex -4.05363 1.90749 -3 + vertex -8.41254 4.62484 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.63328 -3.6244 -3 + vertex -5.64274 -7.76656 -3 + vertex -5.14394 -8.10555 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.05363 1.90749 -3 + vertex -8.68634 4.08748 -3 + vertex -4.1654 1.6492 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -2.85566 -3.4519 -3 + vertex -6.11927 -7.39693 -3 + vertex -5.64274 -7.76656 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -8.92585 3.534 -3 + vertex -4.1654 1.6492 -3 + vertex -8.68634 4.08748 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.06677 -3.26578 -3 + vertex -6.57165 -6.9981 -3 + vertex -6.11927 -7.39693 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.1654 1.6492 -3 + vertex -8.92585 3.534 -3 + vertex -4.26073 1.3844 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.26578 -3.06677 -3 + vertex -6.9981 -6.57165 -3 + vertex -6.57165 -6.9981 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.13014 2.96656 -3 + vertex -4.26073 1.3844 -3 + vertex -8.92585 3.534 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.4519 -2.85566 -3 + vertex -7.39693 -6.11927 -3 + vertex -6.9981 -6.57165 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.26073 1.3844 -3 + vertex -9.13014 2.96656 -3 + vertex -4.33925 1.11413 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.6244 -2.63328 -3 + vertex -7.76656 -5.64274 -3 + vertex -7.39693 -6.11927 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.2984 2.38742 -3 + vertex -4.33925 1.11413 -3 + vertex -9.13014 2.96656 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.78259 -2.4005 -3 + vertex -8.10555 -5.14394 -3 + vertex -7.76656 -5.64274 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.33925 1.11413 -3 + vertex -9.2984 2.38742 -3 + vertex -4.40065 0.839468 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -3.92585 -2.15826 -3 + vertex -8.41254 -4.62484 -3 + vertex -8.10555 -5.14394 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.42996 1.79886 -3 + vertex -4.40065 0.839468 -3 + vertex -9.2984 2.38742 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.05363 -1.90749 -3 + vertex -8.68634 -4.08748 -3 + vertex -8.41254 -4.62484 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.40065 0.839468 -3 + vertex -9.42996 1.79886 -3 + vertex -4.44467 0.561492 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.1654 -1.6492 -3 + vertex -8.92585 -3.534 -3 + vertex -8.68634 -4.08748 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.5243 1.2032 -3 + vertex -4.44467 0.561492 -3 + vertex -9.42996 1.79886 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.26073 -1.3844 -3 + vertex -9.13014 -2.96656 -3 + vertex -8.92585 -3.534 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.44467 0.561492 -3 + vertex -9.5243 1.2032 -3 + vertex -4.47116 0.281301 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.33925 -1.11413 -3 + vertex -9.2984 -2.38742 -3 + vertex -9.13014 -2.96656 -3 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -9.58106 0.602789 -3 + vertex -4.47116 0.281301 -3 + vertex -9.5243 1.2032 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.40065 -0.839468 -3 + vertex -9.42996 -1.79886 -3 + vertex -9.2984 -2.38742 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.47116 0.281301 -3 + vertex -9.58106 0.602789 -3 + vertex -4.48 0 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.44467 -0.561492 -3 + vertex -9.5243 -1.2032 -3 + vertex -9.42996 -1.79886 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -9.6 0 -3 + vertex -4.48 0 -3 + vertex -9.58106 0.602789 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.47116 -0.281301 -3 + vertex -9.58106 -0.602789 -3 + vertex -9.5243 -1.2032 -3 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -4.48 0 -3 + vertex -9.6 0 -3 + vertex -9.58106 -0.602789 -3 + endloop + endfacet + facet normal 0.661315 0.750108 -0 + outer loop + vertex -6.11927 -7.39693 -3 + vertex -6.57165 -6.9981 6 + vertex -6.11927 -7.39693 6 + endloop + endfacet + facet normal 0.661315 0.750108 0 + outer loop + vertex -6.57165 -6.9981 6 + vertex -6.11927 -7.39693 -3 + vertex -6.57165 -6.9981 -3 + endloop + endfacet + facet normal -0.790159 0.612902 0 + outer loop + vertex 7.39693 -6.11927 -3 + vertex 7.76656 -5.64274 6 + vertex 7.76656 -5.64274 -3 + endloop + endfacet + facet normal -0.790159 0.612902 0 + outer loop + vertex 7.76656 -5.64274 6 + vertex 7.39693 -6.11927 -3 + vertex 7.39693 -6.11927 6 + endloop + endfacet + facet normal 0.995561 0.0941156 0 + outer loop + vertex -9.5243 -1.2032 6 + vertex -9.58106 -0.602789 -3 + vertex -9.58106 -0.602789 6 + endloop + endfacet + facet normal 0.995561 0.0941156 0 + outer loop + vertex -9.58106 -0.602789 -3 + vertex -9.5243 -1.2032 6 + vertex -9.5243 -1.2032 -3 + endloop + endfacet + facet normal 0.750108 -0.661315 0 + outer loop + vertex -7.39693 6.11927 6 + vertex -6.9981 6.57165 -3 + vertex -6.9981 6.57165 6 + endloop + endfacet + facet normal 0.750108 -0.661315 0 + outer loop + vertex -6.9981 6.57165 -3 + vertex -7.39693 6.11927 6 + vertex -7.39693 6.11927 -3 + endloop + endfacet + facet normal -0.987689 0.156429 0 + outer loop + vertex 9.42996 -1.79886 -3 + vertex 9.5243 -1.2032 6 + vertex 9.5243 -1.2032 -3 + endloop + endfacet + facet normal -0.987689 0.156429 0 + outer loop + vertex 9.5243 -1.2032 6 + vertex 9.42996 -1.79886 -3 + vertex 9.42996 -1.79886 6 + endloop + endfacet + facet normal 0.790159 0.612902 0 + outer loop + vertex -7.39693 -6.11927 6 + vertex -7.76656 -5.64274 -3 + vertex -7.76656 -5.64274 6 + endloop + endfacet + facet normal 0.790159 0.612902 0 + outer loop + vertex -7.76656 -5.64274 -3 + vertex -7.39693 -6.11927 6 + vertex -7.39693 -6.11927 -3 + endloop + endfacet + facet normal 0.750108 0.661315 0 + outer loop + vertex -6.9981 -6.57165 6 + vertex -7.39693 -6.11927 -3 + vertex -7.39693 -6.11927 6 + endloop + endfacet + facet normal 0.750108 0.661315 0 + outer loop + vertex -7.39693 -6.11927 -3 + vertex -6.9981 -6.57165 6 + vertex -6.9981 -6.57165 -3 + endloop + endfacet + facet normal 0.56209 -0.827076 0 + outer loop + vertex -5.64274 7.76656 -3 + vertex -5.14394 8.10555 6 + vertex -5.64274 7.76656 6 + endloop + endfacet + facet normal 0.56209 -0.827076 0 + outer loop + vertex -5.14394 8.10555 6 + vertex -5.64274 7.76656 -3 + vertex -5.14394 8.10555 -3 + endloop + endfacet + facet normal 0.987689 -0.156429 0 + outer loop + vertex -9.5243 1.2032 6 + vertex -9.42996 1.79886 -3 + vertex -9.42996 1.79886 6 + endloop + endfacet + facet normal 0.987689 -0.156429 0 + outer loop + vertex -9.42996 1.79886 -3 + vertex -9.5243 1.2032 6 + vertex -9.5243 1.2032 -3 + endloop + endfacet + facet normal -0.891006 -0.453992 0 + outer loop + vertex 8.68634 4.08748 -3 + vertex 8.41254 4.62484 6 + vertex 8.41254 4.62484 -3 + endloop + endfacet + facet normal -0.891006 -0.453992 0 + outer loop + vertex 8.41254 4.62484 6 + vertex 8.68634 4.08748 -3 + vertex 8.68634 4.08748 6 + endloop + endfacet + facet normal -0.999507 0.0314051 0 + outer loop + vertex 9.58106 -0.602789 -3 + vertex 9.6 0 6 + vertex 9.6 0 -3 + endloop + endfacet + facet normal -0.999507 0.0314051 0 + outer loop + vertex 9.6 0 6 + vertex 9.58106 -0.602789 -3 + vertex 9.58106 -0.602789 6 + endloop + endfacet + facet normal 0.987689 0.156429 0 + outer loop + vertex -9.42996 -1.79886 6 + vertex -9.5243 -1.2032 -3 + vertex -9.5243 -1.2032 6 + endloop + endfacet + facet normal 0.987689 0.156429 0 + outer loop + vertex -9.5243 -1.2032 -3 + vertex -9.42996 -1.79886 6 + vertex -9.42996 -1.79886 -3 + endloop + endfacet + facet normal -0.218145 0.975916 0 + outer loop + vertex 2.38742 -9.2984 -3 + vertex 1.79886 -9.42996 6 + vertex 2.38742 -9.2984 6 + endloop + endfacet + facet normal -0.218145 0.975916 0 + outer loop + vertex 1.79886 -9.42996 6 + vertex 2.38742 -9.2984 -3 + vertex 1.79886 -9.42996 -3 + endloop + endfacet + facet normal 0.612902 -0.790159 0 + outer loop + vertex -6.11927 7.39693 -3 + vertex -5.64274 7.76656 6 + vertex -6.11927 7.39693 6 + endloop + endfacet + facet normal 0.612902 -0.790159 0 + outer loop + vertex -5.64274 7.76656 6 + vertex -6.11927 7.39693 -3 + vertex -5.64274 7.76656 -3 + endloop + endfacet + facet normal -0.940881 0.338736 0 + outer loop + vertex 8.92585 -3.534 -3 + vertex 9.13014 -2.96656 6 + vertex 9.13014 -2.96656 -3 + endloop + endfacet + facet normal -0.940881 0.338736 0 + outer loop + vertex 9.13014 -2.96656 6 + vertex 8.92585 -3.534 -3 + vertex 8.92585 -3.534 6 + endloop + endfacet + facet normal -0.891006 0.453992 0 + outer loop + vertex 8.41254 -4.62484 -3 + vertex 8.68634 -4.08748 6 + vertex 8.68634 -4.08748 -3 + endloop + endfacet + facet normal -0.891006 0.453992 0 + outer loop + vertex 8.68634 -4.08748 6 + vertex 8.41254 -4.62484 -3 + vertex 8.41254 -4.62484 6 + endloop + endfacet + facet normal 0.0941156 0.995561 -0 + outer loop + vertex -0.602789 -9.58106 -3 + vertex -1.2032 -9.5243 6 + vertex -0.602789 -9.58106 6 + endloop + endfacet + facet normal 0.0941156 0.995561 0 + outer loop + vertex -1.2032 -9.5243 6 + vertex -0.602789 -9.58106 -3 + vertex -1.2032 -9.5243 -3 + endloop + endfacet + facet normal -0.397145 0.917756 0 + outer loop + vertex 4.08748 -8.68634 -3 + vertex 3.534 -8.92585 6 + vertex 4.08748 -8.68634 6 + endloop + endfacet + facet normal -0.397145 0.917756 0 + outer loop + vertex 3.534 -8.92585 6 + vertex 4.08748 -8.68634 -3 + vertex 3.534 -8.92585 -3 + endloop + endfacet + facet normal 0.940881 0.338736 0 + outer loop + vertex -8.92585 -3.534 6 + vertex -9.13014 -2.96656 -3 + vertex -9.13014 -2.96656 6 + endloop + endfacet + facet normal 0.940881 0.338736 0 + outer loop + vertex -9.13014 -2.96656 -3 + vertex -8.92585 -3.534 6 + vertex -8.92585 -3.534 -3 + endloop + endfacet + facet normal -0.156429 -0.987689 0 + outer loop + vertex 1.2032 9.5243 -3 + vertex 1.79886 9.42996 6 + vertex 1.2032 9.5243 6 + endloop + endfacet + facet normal -0.156429 -0.987689 -0 + outer loop + vertex 1.79886 9.42996 6 + vertex 1.2032 9.5243 -3 + vertex 1.79886 9.42996 -3 + endloop + endfacet + facet normal 0.278998 -0.960292 0 + outer loop + vertex -2.96656 9.13014 -3 + vertex -2.38742 9.2984 6 + vertex -2.96656 9.13014 6 + endloop + endfacet + facet normal 0.278998 -0.960292 0 + outer loop + vertex -2.38742 9.2984 6 + vertex -2.96656 9.13014 -3 + vertex -2.38742 9.2984 -3 + endloop + endfacet + facet normal 0.0941156 -0.995561 0 + outer loop + vertex -1.2032 9.5243 -3 + vertex -0.602789 9.58106 6 + vertex -1.2032 9.5243 6 + endloop + endfacet + facet normal 0.0941156 -0.995561 0 + outer loop + vertex -0.602789 9.58106 6 + vertex -1.2032 9.5243 -3 + vertex -0.602789 9.58106 -3 + endloop + endfacet + facet normal 0.860746 0.509035 0 + outer loop + vertex -8.10555 -5.14394 6 + vertex -8.41254 -4.62484 -3 + vertex -8.41254 -4.62484 6 + endloop + endfacet + facet normal 0.860746 0.509035 0 + outer loop + vertex -8.41254 -4.62484 -3 + vertex -8.10555 -5.14394 6 + vertex -8.10555 -5.14394 -3 + endloop + endfacet + facet normal -0.509035 -0.860746 0 + outer loop + vertex 4.62484 8.41254 -3 + vertex 5.14394 8.10555 6 + vertex 4.62484 8.41254 6 + endloop + endfacet + facet normal -0.509035 -0.860746 -0 + outer loop + vertex 5.14394 8.10555 6 + vertex 4.62484 8.41254 -3 + vertex 5.14394 8.10555 -3 + endloop + endfacet + facet normal 0.707107 -0.707107 0 + outer loop + vertex -6.9981 6.57165 6 + vertex -6.57165 6.9981 -3 + vertex -6.57165 6.9981 6 + endloop + endfacet + facet normal 0.707107 -0.707107 0 + outer loop + vertex -6.57165 6.9981 -3 + vertex -6.9981 6.57165 6 + vertex -6.9981 6.57165 -3 + endloop + endfacet + facet normal -0.612902 0.790159 0 + outer loop + vertex 6.11927 -7.39693 -3 + vertex 5.64274 -7.76656 6 + vertex 6.11927 -7.39693 6 + endloop + endfacet + facet normal -0.612902 0.790159 0 + outer loop + vertex 5.64274 -7.76656 6 + vertex 6.11927 -7.39693 -3 + vertex 5.64274 -7.76656 -3 + endloop + endfacet + facet normal 0.827076 0.56209 0 + outer loop + vertex -7.76656 -5.64274 6 + vertex -8.10555 -5.14394 -3 + vertex -8.10555 -5.14394 6 + endloop + endfacet + facet normal 0.827076 0.56209 0 + outer loop + vertex -8.10555 -5.14394 -3 + vertex -7.76656 -5.64274 6 + vertex -7.76656 -5.64274 -3 + endloop + endfacet + facet normal 0.453992 0.891006 -0 + outer loop + vertex -4.08748 -8.68634 -3 + vertex -4.62484 -8.41254 6 + vertex -4.08748 -8.68634 6 + endloop + endfacet + facet normal 0.453992 0.891006 0 + outer loop + vertex -4.62484 -8.41254 6 + vertex -4.08748 -8.68634 -3 + vertex -4.62484 -8.41254 -3 + endloop + endfacet + facet normal 0.995561 -0.0941156 0 + outer loop + vertex -9.58106 0.602789 6 + vertex -9.5243 1.2032 -3 + vertex -9.5243 1.2032 6 + endloop + endfacet + facet normal 0.995561 -0.0941156 0 + outer loop + vertex -9.5243 1.2032 -3 + vertex -9.58106 0.602789 6 + vertex -9.58106 0.602789 -3 + endloop + endfacet + facet normal 0.612902 0.790159 -0 + outer loop + vertex -5.64274 -7.76656 -3 + vertex -6.11927 -7.39693 6 + vertex -5.64274 -7.76656 6 + endloop + endfacet + facet normal 0.612902 0.790159 0 + outer loop + vertex -6.11927 -7.39693 6 + vertex -5.64274 -7.76656 -3 + vertex -6.11927 -7.39693 -3 + endloop + endfacet + facet normal -0.661315 0.750108 0 + outer loop + vertex 6.57165 -6.9981 -3 + vertex 6.11927 -7.39693 6 + vertex 6.57165 -6.9981 6 + endloop + endfacet + facet normal -0.661315 0.750108 0 + outer loop + vertex 6.11927 -7.39693 6 + vertex 6.57165 -6.9981 -3 + vertex 6.11927 -7.39693 -3 + endloop + endfacet + facet normal 0.960292 0.278998 0 + outer loop + vertex -9.13014 -2.96656 6 + vertex -9.2984 -2.38742 -3 + vertex -9.2984 -2.38742 6 + endloop + endfacet + facet normal 0.960292 0.278998 0 + outer loop + vertex -9.2984 -2.38742 -3 + vertex -9.13014 -2.96656 6 + vertex -9.13014 -2.96656 -3 + endloop + endfacet + facet normal -0.218145 -0.975916 0 + outer loop + vertex 1.79886 9.42996 -3 + vertex 2.38742 9.2984 6 + vertex 1.79886 9.42996 6 + endloop + endfacet + facet normal -0.218145 -0.975916 -0 + outer loop + vertex 2.38742 9.2984 6 + vertex 1.79886 9.42996 -3 + vertex 2.38742 9.2984 -3 + endloop + endfacet + facet normal -0.453992 0.891006 0 + outer loop + vertex 4.62484 -8.41254 -3 + vertex 4.08748 -8.68634 6 + vertex 4.62484 -8.41254 6 + endloop + endfacet + facet normal -0.453992 0.891006 0 + outer loop + vertex 4.08748 -8.68634 6 + vertex 4.62484 -8.41254 -3 + vertex 4.08748 -8.68634 -3 + endloop + endfacet + facet normal -0.0314051 -0.999507 0 + outer loop + vertex 0 9.6 -3 + vertex 0.602789 9.58106 6 + vertex 0 9.6 6 + endloop + endfacet + facet normal -0.0314051 -0.999507 -0 + outer loop + vertex 0.602789 9.58106 6 + vertex 0 9.6 -3 + vertex 0.602789 9.58106 -3 + endloop + endfacet + facet normal -0.707107 0.707107 0 + outer loop + vertex 6.57165 -6.9981 -3 + vertex 6.9981 -6.57165 6 + vertex 6.9981 -6.57165 -3 + endloop + endfacet + facet normal -0.707107 0.707107 0 + outer loop + vertex 6.9981 -6.57165 6 + vertex 6.57165 -6.9981 -3 + vertex 6.57165 -6.9981 6 + endloop + endfacet + facet normal -0.338736 -0.940881 0 + outer loop + vertex 2.96656 9.13014 -3 + vertex 3.534 8.92585 6 + vertex 2.96656 9.13014 6 + endloop + endfacet + facet normal -0.338736 -0.940881 -0 + outer loop + vertex 3.534 8.92585 6 + vertex 2.96656 9.13014 -3 + vertex 3.534 8.92585 -3 + endloop + endfacet + facet normal 0.999507 -0.0314051 0 + outer loop + vertex -9.6 0 6 + vertex -9.58106 0.602789 -3 + vertex -9.58106 0.602789 6 + endloop + endfacet + facet normal 0.999507 -0.0314051 0 + outer loop + vertex -9.58106 0.602789 -3 + vertex -9.6 0 6 + vertex -9.6 0 -3 + endloop + endfacet + facet normal 0.338736 0.940881 -0 + outer loop + vertex -2.96656 -9.13014 -3 + vertex -3.534 -8.92585 6 + vertex -2.96656 -9.13014 6 + endloop + endfacet + facet normal 0.338736 0.940881 0 + outer loop + vertex -3.534 -8.92585 6 + vertex -2.96656 -9.13014 -3 + vertex -3.534 -8.92585 -3 + endloop + endfacet + facet normal 0.891006 0.453992 0 + outer loop + vertex -8.41254 -4.62484 6 + vertex -8.68634 -4.08748 -3 + vertex -8.68634 -4.08748 6 + endloop + endfacet + facet normal 0.891006 0.453992 0 + outer loop + vertex -8.68634 -4.08748 -3 + vertex -8.41254 -4.62484 6 + vertex -8.41254 -4.62484 -3 + endloop + endfacet + facet normal 0.860746 -0.509035 0 + outer loop + vertex -8.41254 4.62484 6 + vertex -8.10555 5.14394 -3 + vertex -8.10555 5.14394 6 + endloop + endfacet + facet normal 0.860746 -0.509035 0 + outer loop + vertex -8.10555 5.14394 -3 + vertex -8.41254 4.62484 6 + vertex -8.41254 4.62484 -3 + endloop + endfacet + facet normal 0.940885 0.338726 0 + outer loop + vertex 4.26073 1.3844 6 + vertex 4.1654 1.6492 -3 + vertex 4.1654 1.6492 6 + endloop + endfacet + facet normal 0.940885 0.338726 0 + outer loop + vertex 4.1654 1.6492 -3 + vertex 4.26073 1.3844 6 + vertex 4.26073 1.3844 -3 + endloop + endfacet + facet normal -0.890997 -0.454008 0 + outer loop + vertex -3.92585 -2.15826 -3 + vertex -4.05363 -1.90749 6 + vertex -4.05363 -1.90749 -3 + endloop + endfacet + facet normal -0.890997 -0.454008 0 + outer loop + vertex -4.05363 -1.90749 6 + vertex -3.92585 -2.15826 -3 + vertex -3.92585 -2.15826 6 + endloop + endfacet + facet normal -0.562066 -0.827092 0 + outer loop + vertex -2.63328 -3.6244 -3 + vertex -2.4005 -3.78259 6 + vertex -2.63328 -3.6244 6 + endloop + endfacet + facet normal -0.562066 -0.827092 -0 + outer loop + vertex -2.4005 -3.78259 6 + vertex -2.63328 -3.6244 -3 + vertex -2.4005 -3.78259 -3 + endloop + endfacet + facet normal 0.995561 0.0941229 0 + outer loop + vertex 4.47116 0.281301 6 + vertex 4.44467 0.561492 -3 + vertex 4.44467 0.561492 6 + endloop + endfacet + facet normal 0.995561 0.0941229 0 + outer loop + vertex 4.44467 0.561492 -3 + vertex 4.47116 0.281301 6 + vertex 4.47116 0.281301 -3 + endloop + endfacet + facet normal 0.218163 -0.975912 0 + outer loop + vertex 0.839468 -4.40065 -3 + vertex 1.11413 -4.33925 6 + vertex 0.839468 -4.40065 6 + endloop + endfacet + facet normal 0.218163 -0.975912 0 + outer loop + vertex 1.11413 -4.33925 6 + vertex 0.839468 -4.40065 -3 + vertex 1.11413 -4.33925 -3 + endloop + endfacet + facet normal 0.338726 -0.940885 0 + outer loop + vertex 1.3844 -4.26073 -3 + vertex 1.6492 -4.1654 6 + vertex 1.3844 -4.26073 6 + endloop + endfacet + facet normal 0.338726 -0.940885 0 + outer loop + vertex 1.6492 -4.1654 6 + vertex 1.3844 -4.26073 -3 + vertex 1.6492 -4.1654 -3 + endloop + endfacet + facet normal -0.940885 -0.338726 0 + outer loop + vertex -4.1654 -1.6492 -3 + vertex -4.26073 -1.3844 6 + vertex -4.26073 -1.3844 -3 + endloop + endfacet + facet normal -0.940885 -0.338726 0 + outer loop + vertex -4.26073 -1.3844 6 + vertex -4.1654 -1.6492 -3 + vertex -4.1654 -1.6492 6 + endloop + endfacet + facet normal -0.0941229 -0.995561 0 + outer loop + vertex -0.561492 -4.44467 -3 + vertex -0.281301 -4.47116 6 + vertex -0.561492 -4.44467 6 + endloop + endfacet + facet normal -0.0941229 -0.995561 -0 + outer loop + vertex -0.281301 -4.47116 6 + vertex -0.561492 -4.44467 -3 + vertex -0.281301 -4.47116 -3 + endloop + endfacet + facet normal -0.999507 -0.0314099 0 + outer loop + vertex -4.47116 -0.281301 -3 + vertex -4.48 0 6 + vertex -4.48 0 -3 + endloop + endfacet + facet normal -0.999507 -0.0314099 0 + outer loop + vertex -4.48 0 6 + vertex -4.47116 -0.281301 -3 + vertex -4.47116 -0.281301 6 + endloop + endfacet + facet normal -0.15641 0.987692 0 + outer loop + vertex -0.561492 4.44467 -3 + vertex -0.839468 4.40065 6 + vertex -0.561492 4.44467 6 + endloop + endfacet + facet normal -0.15641 0.987692 0 + outer loop + vertex -0.839468 4.40065 6 + vertex -0.561492 4.44467 -3 + vertex -0.839468 4.40065 -3 + endloop + endfacet + facet normal 0.999507 -0.0314099 0 + outer loop + vertex 4.47116 -0.281301 6 + vertex 4.48 0 -3 + vertex 4.48 0 6 + endloop + endfacet + facet normal 0.999507 -0.0314099 0 + outer loop + vertex 4.48 0 -3 + vertex 4.47116 -0.281301 6 + vertex 4.47116 -0.281301 -3 + endloop + endfacet + facet normal -0.917757 -0.397142 0 + outer loop + vertex -4.05363 -1.90749 -3 + vertex -4.1654 -1.6492 6 + vertex -4.1654 -1.6492 -3 + endloop + endfacet + facet normal -0.917757 -0.397142 0 + outer loop + vertex -4.1654 -1.6492 6 + vertex -4.05363 -1.90749 -3 + vertex -4.05363 -1.90749 6 + endloop + endfacet + facet normal -0.15641 -0.987692 0 + outer loop + vertex -0.839468 -4.40065 -3 + vertex -0.561492 -4.44467 6 + vertex -0.839468 -4.40065 6 + endloop + endfacet + facet normal -0.15641 -0.987692 -0 + outer loop + vertex -0.561492 -4.44467 6 + vertex -0.839468 -4.40065 -3 + vertex -0.561492 -4.44467 -3 + endloop + endfacet + facet normal 0.987692 0.15641 0 + outer loop + vertex 4.44467 0.561492 6 + vertex 4.40065 0.839468 -3 + vertex 4.40065 0.839468 6 + endloop + endfacet + facet normal 0.987692 0.15641 0 + outer loop + vertex 4.40065 0.839468 -3 + vertex 4.44467 0.561492 6 + vertex 4.44467 0.561492 -3 + endloop + endfacet + facet normal -0.995561 0.0941229 0 + outer loop + vertex -4.47116 0.281301 -3 + vertex -4.44467 0.561492 6 + vertex -4.44467 0.561492 -3 + endloop + endfacet + facet normal -0.995561 0.0941229 0 + outer loop + vertex -4.44467 0.561492 6 + vertex -4.47116 0.281301 -3 + vertex -4.47116 0.281301 6 + endloop + endfacet + facet normal 0.827092 0.562066 0 + outer loop + vertex 3.78259 2.4005 6 + vertex 3.6244 2.63328 -3 + vertex 3.6244 2.63328 6 + endloop + endfacet + facet normal 0.827092 0.562066 0 + outer loop + vertex 3.6244 2.63328 -3 + vertex 3.78259 2.4005 6 + vertex 3.78259 2.4005 -3 + endloop + endfacet + facet normal 0.397142 0.917757 -0 + outer loop + vertex 1.90749 4.05363 -3 + vertex 1.6492 4.1654 6 + vertex 1.90749 4.05363 6 + endloop + endfacet + facet normal 0.397142 0.917757 0 + outer loop + vertex 1.6492 4.1654 6 + vertex 1.90749 4.05363 -3 + vertex 1.6492 4.1654 -3 + endloop + endfacet + facet normal 0.987692 -0.15641 0 + outer loop + vertex 4.40065 -0.839468 6 + vertex 4.44467 -0.561492 -3 + vertex 4.44467 -0.561492 6 + endloop + endfacet + facet normal 0.987692 -0.15641 0 + outer loop + vertex 4.44467 -0.561492 -3 + vertex 4.40065 -0.839468 6 + vertex 4.40065 -0.839468 -3 + endloop + endfacet + facet normal -0.827092 0.562066 0 + outer loop + vertex -3.78259 2.4005 -3 + vertex -3.6244 2.63328 6 + vertex -3.6244 2.63328 -3 + endloop + endfacet + facet normal -0.827092 0.562066 0 + outer loop + vertex -3.6244 2.63328 6 + vertex -3.78259 2.4005 -3 + vertex -3.78259 2.4005 6 + endloop + endfacet + facet normal 0.0941229 -0.995561 0 + outer loop + vertex 0.281301 -4.47116 -3 + vertex 0.561492 -4.44467 6 + vertex 0.281301 -4.47116 6 + endloop + endfacet + facet normal 0.0941229 -0.995561 0 + outer loop + vertex 0.561492 -4.44467 6 + vertex 0.281301 -4.47116 -3 + vertex 0.561492 -4.44467 -3 + endloop + endfacet + facet normal 0.999507 0.0314099 0 + outer loop + vertex 4.48 0 6 + vertex 4.47116 0.281301 -3 + vertex 4.47116 0.281301 6 + endloop + endfacet + facet normal 0.999507 0.0314099 0 + outer loop + vertex 4.47116 0.281301 -3 + vertex 4.48 0 6 + vertex 4.48 0 -3 + endloop + endfacet + facet normal -0.960294 0.278989 0 + outer loop + vertex -4.33925 1.11413 -3 + vertex -4.26073 1.3844 6 + vertex -4.26073 1.3844 -3 + endloop + endfacet + facet normal -0.960294 0.278989 0 + outer loop + vertex -4.26073 1.3844 6 + vertex -4.33925 1.11413 -3 + vertex -4.33925 1.11413 6 + endloop + endfacet + facet normal -0.0314099 0.999507 0 + outer loop + vertex 0 4.48 -3 + vertex -0.281301 4.47116 6 + vertex 0 4.48 6 + endloop + endfacet + facet normal -0.0314099 0.999507 0 + outer loop + vertex -0.281301 4.47116 6 + vertex 0 4.48 -3 + vertex -0.281301 4.47116 -3 + endloop + endfacet + facet normal -0.940885 0.338726 0 + outer loop + vertex -4.26073 1.3844 -3 + vertex -4.1654 1.6492 6 + vertex -4.1654 1.6492 -3 + endloop + endfacet + facet normal -0.940885 0.338726 0 + outer loop + vertex -4.1654 1.6492 6 + vertex -4.26073 1.3844 -3 + vertex -4.26073 1.3844 6 + endloop + endfacet + facet normal 0.917757 0.397142 0 + outer loop + vertex 4.1654 1.6492 6 + vertex 4.05363 1.90749 -3 + vertex 4.05363 1.90749 6 + endloop + endfacet + facet normal 0.917757 0.397142 0 + outer loop + vertex 4.05363 1.90749 -3 + vertex 4.1654 1.6492 6 + vertex 4.1654 1.6492 -3 + endloop + endfacet + facet normal -0.218163 0.975912 0 + outer loop + vertex -0.839468 4.40065 -3 + vertex -1.11413 4.33925 6 + vertex -0.839468 4.40065 6 + endloop + endfacet + facet normal -0.218163 0.975912 0 + outer loop + vertex -1.11413 4.33925 6 + vertex -0.839468 4.40065 -3 + vertex -1.11413 4.33925 -3 + endloop + endfacet + facet normal -0.509041 -0.860743 0 + outer loop + vertex -2.4005 -3.78259 -3 + vertex -2.15826 -3.92585 6 + vertex -2.4005 -3.78259 6 + endloop + endfacet + facet normal -0.509041 -0.860743 -0 + outer loop + vertex -2.15826 -3.92585 6 + vertex -2.4005 -3.78259 -3 + vertex -2.15826 -3.92585 -3 + endloop + endfacet + facet normal 0.0314099 -0.999507 0 + outer loop + vertex 0 -4.48 -3 + vertex 0.281301 -4.47116 6 + vertex 0 -4.48 6 + endloop + endfacet + facet normal 0.0314099 -0.999507 0 + outer loop + vertex 0.281301 -4.47116 6 + vertex 0 -4.48 -3 + vertex 0.281301 -4.47116 -3 + endloop + endfacet + facet normal -0.999507 0.0314099 0 + outer loop + vertex -4.48 0 -3 + vertex -4.47116 0.281301 6 + vertex -4.47116 0.281301 -3 + endloop + endfacet + facet normal -0.999507 0.0314099 0 + outer loop + vertex -4.47116 0.281301 6 + vertex -4.48 0 -3 + vertex -4.48 0 6 + endloop + endfacet + facet normal -0.218163 -0.975912 0 + outer loop + vertex -1.11413 -4.33925 -3 + vertex -0.839468 -4.40065 6 + vertex -1.11413 -4.33925 6 + endloop + endfacet + facet normal -0.218163 -0.975912 -0 + outer loop + vertex -0.839468 -4.40065 6 + vertex -1.11413 -4.33925 -3 + vertex -0.839468 -4.40065 -3 + endloop + endfacet + facet normal -0.987692 0.15641 0 + outer loop + vertex -4.44467 0.561492 -3 + vertex -4.40065 0.839468 6 + vertex -4.40065 0.839468 -3 + endloop + endfacet + facet normal -0.987692 0.15641 0 + outer loop + vertex -4.40065 0.839468 6 + vertex -4.44467 0.561492 -3 + vertex -4.44467 0.561492 6 + endloop + endfacet + facet normal 0.860743 0.509041 0 + outer loop + vertex 3.92585 2.15826 6 + vertex 3.78259 2.4005 -3 + vertex 3.78259 2.4005 6 + endloop + endfacet + facet normal 0.860743 0.509041 0 + outer loop + vertex 3.78259 2.4005 -3 + vertex 3.92585 2.15826 6 + vertex 3.92585 2.15826 -3 + endloop + endfacet + facet normal -0.707107 0.707107 0 + outer loop + vertex -3.26578 3.06677 -3 + vertex -3.06677 3.26578 6 + vertex -3.06677 3.26578 -3 + endloop + endfacet + facet normal -0.707107 0.707107 0 + outer loop + vertex -3.06677 3.26578 6 + vertex -3.26578 3.06677 -3 + vertex -3.26578 3.06677 6 + endloop + endfacet + facet normal -0.509041 0.860743 0 + outer loop + vertex -2.15826 3.92585 -3 + vertex -2.4005 3.78259 6 + vertex -2.15826 3.92585 6 + endloop + endfacet + facet normal -0.509041 0.860743 0 + outer loop + vertex -2.4005 3.78259 6 + vertex -2.15826 3.92585 -3 + vertex -2.4005 3.78259 -3 + endloop + endfacet + facet normal 0.15641 -0.987692 0 + outer loop + vertex 0.561492 -4.44467 -3 + vertex 0.839468 -4.40065 6 + vertex 0.561492 -4.44467 6 + endloop + endfacet + facet normal 0.15641 -0.987692 0 + outer loop + vertex 0.839468 -4.40065 6 + vertex 0.561492 -4.44467 -3 + vertex 0.839468 -4.40065 -3 + endloop + endfacet + facet normal 0.612917 0.790147 -0 + outer loop + vertex 2.85566 3.4519 -3 + vertex 2.63328 3.6244 6 + vertex 2.85566 3.4519 6 + endloop + endfacet + facet normal 0.612917 0.790147 0 + outer loop + vertex 2.63328 3.6244 6 + vertex 2.85566 3.4519 -3 + vertex 2.63328 3.6244 -3 + endloop + endfacet + facet normal -0.790147 -0.612917 0 + outer loop + vertex -3.4519 -2.85566 -3 + vertex -3.6244 -2.63328 6 + vertex -3.6244 -2.63328 -3 + endloop + endfacet + facet normal -0.790147 -0.612917 0 + outer loop + vertex -3.6244 -2.63328 6 + vertex -3.4519 -2.85566 -3 + vertex -3.4519 -2.85566 6 + endloop + endfacet + facet normal -0.750108 0.661315 0 + outer loop + vertex -3.4519 2.85566 -3 + vertex -3.26578 3.06677 6 + vertex -3.26578 3.06677 -3 + endloop + endfacet + facet normal -0.750108 0.661315 0 + outer loop + vertex -3.26578 3.06677 6 + vertex -3.4519 2.85566 -3 + vertex -3.4519 2.85566 6 + endloop + endfacet + facet normal 0.827092 -0.562066 0 + outer loop + vertex 3.6244 -2.63328 6 + vertex 3.78259 -2.4005 -3 + vertex 3.78259 -2.4005 6 + endloop + endfacet + facet normal 0.827092 -0.562066 0 + outer loop + vertex 3.78259 -2.4005 -3 + vertex 3.6244 -2.63328 6 + vertex 3.6244 -2.63328 -3 + endloop + endfacet + facet normal -0.707107 -0.707107 0 + outer loop + vertex -3.06677 -3.26578 -3 + vertex -3.26578 -3.06677 6 + vertex -3.26578 -3.06677 -3 + endloop + endfacet + facet normal -0.707107 -0.707107 0 + outer loop + vertex -3.26578 -3.06677 6 + vertex -3.06677 -3.26578 -3 + vertex -3.06677 -3.26578 6 + endloop + endfacet + facet normal 0.562066 0.827092 -0 + outer loop + vertex 2.63328 3.6244 -3 + vertex 2.4005 3.78259 6 + vertex 2.63328 3.6244 6 + endloop + endfacet + facet normal 0.562066 0.827092 0 + outer loop + vertex 2.4005 3.78259 6 + vertex 2.63328 3.6244 -3 + vertex 2.4005 3.78259 -3 + endloop + endfacet + facet normal -0.987692 -0.15641 0 + outer loop + vertex -4.40065 -0.839468 -3 + vertex -4.44467 -0.561492 6 + vertex -4.44467 -0.561492 -3 + endloop + endfacet + facet normal -0.987692 -0.15641 0 + outer loop + vertex -4.44467 -0.561492 6 + vertex -4.40065 -0.839468 -3 + vertex -4.40065 -0.839468 6 + endloop + endfacet + facet normal 0.960294 0.278989 0 + outer loop + vertex 4.33925 1.11413 6 + vertex 4.26073 1.3844 -3 + vertex 4.26073 1.3844 6 + endloop + endfacet + facet normal 0.960294 0.278989 0 + outer loop + vertex 4.26073 1.3844 -3 + vertex 4.33925 1.11413 6 + vertex 4.33925 1.11413 -3 + endloop + endfacet + facet normal -0.338726 -0.940885 0 + outer loop + vertex -1.6492 -4.1654 -3 + vertex -1.3844 -4.26073 6 + vertex -1.6492 -4.1654 6 + endloop + endfacet + facet normal -0.338726 -0.940885 -0 + outer loop + vertex -1.3844 -4.26073 6 + vertex -1.6492 -4.1654 -3 + vertex -1.3844 -4.26073 -3 + endloop + endfacet + facet normal -0.278989 -0.960294 0 + outer loop + vertex -1.3844 -4.26073 -3 + vertex -1.11413 -4.33925 6 + vertex -1.3844 -4.26073 6 + endloop + endfacet + facet normal -0.278989 -0.960294 -0 + outer loop + vertex -1.11413 -4.33925 6 + vertex -1.3844 -4.26073 -3 + vertex -1.11413 -4.33925 -3 + endloop + endfacet + facet normal 0.860743 -0.509041 0 + outer loop + vertex 3.78259 -2.4005 6 + vertex 3.92585 -2.15826 -3 + vertex 3.92585 -2.15826 6 + endloop + endfacet + facet normal 0.860743 -0.509041 0 + outer loop + vertex 3.92585 -2.15826 -3 + vertex 3.78259 -2.4005 6 + vertex 3.78259 -2.4005 -3 + endloop + endfacet + facet normal 0.707107 -0.707107 0 + outer loop + vertex 3.06677 -3.26578 6 + vertex 3.26578 -3.06677 -3 + vertex 3.26578 -3.06677 6 + endloop + endfacet + facet normal 0.707107 -0.707107 0 + outer loop + vertex 3.26578 -3.06677 -3 + vertex 3.06677 -3.26578 6 + vertex 3.06677 -3.26578 -3 + endloop + endfacet + facet normal 0.0941229 0.995561 -0 + outer loop + vertex 0.561492 4.44467 -3 + vertex 0.281301 4.47116 6 + vertex 0.561492 4.44467 6 + endloop + endfacet + facet normal 0.0941229 0.995561 0 + outer loop + vertex 0.281301 4.47116 6 + vertex 0.561492 4.44467 -3 + vertex 0.281301 4.47116 -3 + endloop + endfacet + facet normal -0.827092 -0.562066 0 + outer loop + vertex -3.6244 -2.63328 -3 + vertex -3.78259 -2.4005 6 + vertex -3.78259 -2.4005 -3 + endloop + endfacet + facet normal -0.827092 -0.562066 0 + outer loop + vertex -3.78259 -2.4005 6 + vertex -3.6244 -2.63328 -3 + vertex -3.6244 -2.63328 6 + endloop + endfacet + facet normal -0.562066 0.827092 0 + outer loop + vertex -2.4005 3.78259 -3 + vertex -2.63328 3.6244 6 + vertex -2.4005 3.78259 6 + endloop + endfacet + facet normal -0.562066 0.827092 0 + outer loop + vertex -2.63328 3.6244 6 + vertex -2.4005 3.78259 -3 + vertex -2.63328 3.6244 -3 + endloop + endfacet + facet normal -0.278989 0.960294 0 + outer loop + vertex -1.11413 4.33925 -3 + vertex -1.3844 4.26073 6 + vertex -1.11413 4.33925 6 + endloop + endfacet + facet normal -0.278989 0.960294 0 + outer loop + vertex -1.3844 4.26073 6 + vertex -1.11413 4.33925 -3 + vertex -1.3844 4.26073 -3 + endloop + endfacet + facet normal 0.890997 0.454008 0 + outer loop + vertex 4.05363 1.90749 6 + vertex 3.92585 2.15826 -3 + vertex 3.92585 2.15826 6 + endloop + endfacet + facet normal 0.890997 0.454008 0 + outer loop + vertex 3.92585 2.15826 -3 + vertex 4.05363 1.90749 6 + vertex 4.05363 1.90749 -3 + endloop + endfacet + facet normal 0.707107 0.707107 0 + outer loop + vertex 3.26578 3.06677 6 + vertex 3.06677 3.26578 -3 + vertex 3.06677 3.26578 6 + endloop + endfacet + facet normal 0.707107 0.707107 0 + outer loop + vertex 3.06677 3.26578 -3 + vertex 3.26578 3.06677 6 + vertex 3.26578 3.06677 -3 + endloop + endfacet + facet normal -0.338726 0.940885 0 + outer loop + vertex -1.3844 4.26073 -3 + vertex -1.6492 4.1654 6 + vertex -1.3844 4.26073 6 + endloop + endfacet + facet normal -0.338726 0.940885 0 + outer loop + vertex -1.6492 4.1654 6 + vertex -1.3844 4.26073 -3 + vertex -1.6492 4.1654 -3 + endloop + endfacet + facet normal 0.995561 -0.0941229 0 + outer loop + vertex 4.44467 -0.561492 6 + vertex 4.47116 -0.281301 -3 + vertex 4.47116 -0.281301 6 + endloop + endfacet + facet normal 0.995561 -0.0941229 0 + outer loop + vertex 4.47116 -0.281301 -3 + vertex 4.44467 -0.561492 6 + vertex 4.44467 -0.561492 -3 + endloop + endfacet + facet normal -0.454008 0.890997 0 + outer loop + vertex -1.90749 4.05363 -3 + vertex -2.15826 3.92585 6 + vertex -1.90749 4.05363 6 + endloop + endfacet + facet normal -0.454008 0.890997 0 + outer loop + vertex -2.15826 3.92585 6 + vertex -1.90749 4.05363 -3 + vertex -2.15826 3.92585 -3 + endloop + endfacet + facet normal 0.661315 -0.750108 0 + outer loop + vertex 2.85566 -3.4519 -3 + vertex 3.06677 -3.26578 6 + vertex 2.85566 -3.4519 6 + endloop + endfacet + facet normal 0.661315 -0.750108 0 + outer loop + vertex 3.06677 -3.26578 6 + vertex 2.85566 -3.4519 -3 + vertex 3.06677 -3.26578 -3 + endloop + endfacet + facet normal 0.917757 -0.397142 0 + outer loop + vertex 4.05363 -1.90749 6 + vertex 4.1654 -1.6492 -3 + vertex 4.1654 -1.6492 6 + endloop + endfacet + facet normal 0.917757 -0.397142 0 + outer loop + vertex 4.1654 -1.6492 -3 + vertex 4.05363 -1.90749 6 + vertex 4.05363 -1.90749 -3 + endloop + endfacet + facet normal -0.612917 0.790147 0 + outer loop + vertex -2.63328 3.6244 -3 + vertex -2.85566 3.4519 6 + vertex -2.63328 3.6244 6 + endloop + endfacet + facet normal -0.612917 0.790147 0 + outer loop + vertex -2.85566 3.4519 6 + vertex -2.63328 3.6244 -3 + vertex -2.85566 3.4519 -3 + endloop + endfacet + facet normal -0.890997 0.454008 0 + outer loop + vertex -4.05363 1.90749 -3 + vertex -3.92585 2.15826 6 + vertex -3.92585 2.15826 -3 + endloop + endfacet + facet normal -0.890997 0.454008 0 + outer loop + vertex -3.92585 2.15826 6 + vertex -4.05363 1.90749 -3 + vertex -4.05363 1.90749 6 + endloop + endfacet + facet normal 0.509041 -0.860743 0 + outer loop + vertex 2.15826 -3.92585 -3 + vertex 2.4005 -3.78259 6 + vertex 2.15826 -3.92585 6 + endloop + endfacet + facet normal 0.509041 -0.860743 0 + outer loop + vertex 2.4005 -3.78259 6 + vertex 2.15826 -3.92585 -3 + vertex 2.4005 -3.78259 -3 + endloop + endfacet + facet normal -0.975912 -0.218163 0 + outer loop + vertex -4.33925 -1.11413 -3 + vertex -4.40065 -0.839468 6 + vertex -4.40065 -0.839468 -3 + endloop + endfacet + facet normal -0.975912 -0.218163 0 + outer loop + vertex -4.40065 -0.839468 6 + vertex -4.33925 -1.11413 -3 + vertex -4.33925 -1.11413 6 + endloop + endfacet + facet normal 0.218163 0.975912 -0 + outer loop + vertex 1.11413 4.33925 -3 + vertex 0.839468 4.40065 6 + vertex 1.11413 4.33925 6 + endloop + endfacet + facet normal 0.218163 0.975912 0 + outer loop + vertex 0.839468 4.40065 6 + vertex 1.11413 4.33925 -3 + vertex 0.839468 4.40065 -3 + endloop + endfacet + facet normal -0.661315 -0.750108 0 + outer loop + vertex -3.06677 -3.26578 -3 + vertex -2.85566 -3.4519 6 + vertex -3.06677 -3.26578 6 + endloop + endfacet + facet normal -0.661315 -0.750108 -0 + outer loop + vertex -2.85566 -3.4519 6 + vertex -3.06677 -3.26578 -3 + vertex -2.85566 -3.4519 -3 + endloop + endfacet + facet normal -0.397142 0.917757 0 + outer loop + vertex -1.6492 4.1654 -3 + vertex -1.90749 4.05363 6 + vertex -1.6492 4.1654 6 + endloop + endfacet + facet normal -0.397142 0.917757 0 + outer loop + vertex -1.90749 4.05363 6 + vertex -1.6492 4.1654 -3 + vertex -1.90749 4.05363 -3 + endloop + endfacet + facet normal -0.975912 0.218163 0 + outer loop + vertex -4.40065 0.839468 -3 + vertex -4.33925 1.11413 6 + vertex -4.33925 1.11413 -3 + endloop + endfacet + facet normal -0.975912 0.218163 0 + outer loop + vertex -4.33925 1.11413 6 + vertex -4.40065 0.839468 -3 + vertex -4.40065 0.839468 6 + endloop + endfacet + facet normal 0.975912 -0.218163 0 + outer loop + vertex 4.33925 -1.11413 6 + vertex 4.40065 -0.839468 -3 + vertex 4.40065 -0.839468 6 + endloop + endfacet + facet normal 0.975912 -0.218163 0 + outer loop + vertex 4.40065 -0.839468 -3 + vertex 4.33925 -1.11413 6 + vertex 4.33925 -1.11413 -3 + endloop + endfacet + facet normal 0.975912 0.218163 0 + outer loop + vertex 4.40065 0.839468 6 + vertex 4.33925 1.11413 -3 + vertex 4.33925 1.11413 6 + endloop + endfacet + facet normal 0.975912 0.218163 0 + outer loop + vertex 4.33925 1.11413 -3 + vertex 4.40065 0.839468 6 + vertex 4.40065 0.839468 -3 + endloop + endfacet + facet normal 0.0314099 0.999507 -0 + outer loop + vertex 0.281301 4.47116 -3 + vertex 0 4.48 6 + vertex 0.281301 4.47116 6 + endloop + endfacet + facet normal 0.0314099 0.999507 0 + outer loop + vertex 0 4.48 6 + vertex 0.281301 4.47116 -3 + vertex 0 4.48 -3 + endloop + endfacet + facet normal 0.15641 0.987692 -0 + outer loop + vertex 0.839468 4.40065 -3 + vertex 0.561492 4.44467 6 + vertex 0.839468 4.40065 6 + endloop + endfacet + facet normal 0.15641 0.987692 0 + outer loop + vertex 0.561492 4.44467 6 + vertex 0.839468 4.40065 -3 + vertex 0.561492 4.44467 -3 + endloop + endfacet + facet normal 0.278989 0.960294 -0 + outer loop + vertex 1.3844 4.26073 -3 + vertex 1.11413 4.33925 6 + vertex 1.3844 4.26073 6 + endloop + endfacet + facet normal 0.278989 0.960294 0 + outer loop + vertex 1.11413 4.33925 6 + vertex 1.3844 4.26073 -3 + vertex 1.11413 4.33925 -3 + endloop + endfacet + facet normal -0.0941229 0.995561 0 + outer loop + vertex -0.281301 4.47116 -3 + vertex -0.561492 4.44467 6 + vertex -0.281301 4.47116 6 + endloop + endfacet + facet normal -0.0941229 0.995561 0 + outer loop + vertex -0.561492 4.44467 6 + vertex -0.281301 4.47116 -3 + vertex -0.561492 4.44467 -3 + endloop + endfacet + facet normal 0.790147 0.612917 0 + outer loop + vertex 3.6244 2.63328 6 + vertex 3.4519 2.85566 -3 + vertex 3.4519 2.85566 6 + endloop + endfacet + facet normal 0.790147 0.612917 0 + outer loop + vertex 3.4519 2.85566 -3 + vertex 3.6244 2.63328 6 + vertex 3.6244 2.63328 -3 + endloop + endfacet + facet normal -0.960294 -0.278989 0 + outer loop + vertex -4.26073 -1.3844 -3 + vertex -4.33925 -1.11413 6 + vertex -4.33925 -1.11413 -3 + endloop + endfacet + facet normal -0.960294 -0.278989 0 + outer loop + vertex -4.33925 -1.11413 6 + vertex -4.26073 -1.3844 -3 + vertex -4.26073 -1.3844 6 + endloop + endfacet + facet normal 0.661315 0.750108 -0 + outer loop + vertex 3.06677 3.26578 -3 + vertex 2.85566 3.4519 6 + vertex 3.06677 3.26578 6 + endloop + endfacet + facet normal 0.661315 0.750108 0 + outer loop + vertex 2.85566 3.4519 6 + vertex 3.06677 3.26578 -3 + vertex 2.85566 3.4519 -3 + endloop + endfacet + facet normal -0.0314099 -0.999507 0 + outer loop + vertex -0.281301 -4.47116 -3 + vertex 0 -4.48 6 + vertex -0.281301 -4.47116 6 + endloop + endfacet + facet normal -0.0314099 -0.999507 -0 + outer loop + vertex 0 -4.48 6 + vertex -0.281301 -4.47116 -3 + vertex 0 -4.48 -3 + endloop + endfacet + facet normal -0.661315 0.750108 0 + outer loop + vertex -2.85566 3.4519 -3 + vertex -3.06677 3.26578 6 + vertex -2.85566 3.4519 6 + endloop + endfacet + facet normal -0.661315 0.750108 0 + outer loop + vertex -3.06677 3.26578 6 + vertex -2.85566 3.4519 -3 + vertex -3.06677 3.26578 -3 + endloop + endfacet + facet normal -0.397142 -0.917757 0 + outer loop + vertex -1.90749 -4.05363 -3 + vertex -1.6492 -4.1654 6 + vertex -1.90749 -4.05363 6 + endloop + endfacet + facet normal -0.397142 -0.917757 -0 + outer loop + vertex -1.6492 -4.1654 6 + vertex -1.90749 -4.05363 -3 + vertex -1.6492 -4.1654 -3 + endloop + endfacet + facet normal -0.790147 0.612917 0 + outer loop + vertex -3.6244 2.63328 -3 + vertex -3.4519 2.85566 6 + vertex -3.4519 2.85566 -3 + endloop + endfacet + facet normal -0.790147 0.612917 0 + outer loop + vertex -3.4519 2.85566 6 + vertex -3.6244 2.63328 -3 + vertex -3.6244 2.63328 6 + endloop + endfacet + facet normal -0.860743 0.509041 0 + outer loop + vertex -3.92585 2.15826 -3 + vertex -3.78259 2.4005 6 + vertex -3.78259 2.4005 -3 + endloop + endfacet + facet normal -0.860743 0.509041 0 + outer loop + vertex -3.78259 2.4005 6 + vertex -3.92585 2.15826 -3 + vertex -3.92585 2.15826 6 + endloop + endfacet + facet normal 0.562066 -0.827092 0 + outer loop + vertex 2.4005 -3.78259 -3 + vertex 2.63328 -3.6244 6 + vertex 2.4005 -3.78259 6 + endloop + endfacet + facet normal 0.562066 -0.827092 0 + outer loop + vertex 2.63328 -3.6244 6 + vertex 2.4005 -3.78259 -3 + vertex 2.63328 -3.6244 -3 + endloop + endfacet + facet normal -0.750108 -0.661315 0 + outer loop + vertex -3.26578 -3.06677 -3 + vertex -3.4519 -2.85566 6 + vertex -3.4519 -2.85566 -3 + endloop + endfacet + facet normal -0.750108 -0.661315 0 + outer loop + vertex -3.4519 -2.85566 6 + vertex -3.26578 -3.06677 -3 + vertex -3.26578 -3.06677 6 + endloop + endfacet + facet normal -0.995561 -0.0941229 0 + outer loop + vertex -4.44467 -0.561492 -3 + vertex -4.47116 -0.281301 6 + vertex -4.47116 -0.281301 -3 + endloop + endfacet + facet normal -0.995561 -0.0941229 0 + outer loop + vertex -4.47116 -0.281301 6 + vertex -4.44467 -0.561492 -3 + vertex -4.44467 -0.561492 6 + endloop + endfacet + facet normal 0.397142 -0.917757 0 + outer loop + vertex 1.6492 -4.1654 -3 + vertex 1.90749 -4.05363 6 + vertex 1.6492 -4.1654 6 + endloop + endfacet + facet normal 0.397142 -0.917757 0 + outer loop + vertex 1.90749 -4.05363 6 + vertex 1.6492 -4.1654 -3 + vertex 1.90749 -4.05363 -3 + endloop + endfacet + facet normal 0.940885 -0.338726 0 + outer loop + vertex 4.1654 -1.6492 6 + vertex 4.26073 -1.3844 -3 + vertex 4.26073 -1.3844 6 + endloop + endfacet + facet normal 0.940885 -0.338726 0 + outer loop + vertex 4.26073 -1.3844 -3 + vertex 4.1654 -1.6492 6 + vertex 4.1654 -1.6492 -3 + endloop + endfacet + facet normal 0.960294 -0.278989 0 + outer loop + vertex 4.26073 -1.3844 6 + vertex 4.33925 -1.11413 -3 + vertex 4.33925 -1.11413 6 + endloop + endfacet + facet normal 0.960294 -0.278989 0 + outer loop + vertex 4.33925 -1.11413 -3 + vertex 4.26073 -1.3844 6 + vertex 4.26073 -1.3844 -3 + endloop + endfacet + facet normal 0.750108 -0.661315 0 + outer loop + vertex 3.26578 -3.06677 6 + vertex 3.4519 -2.85566 -3 + vertex 3.4519 -2.85566 6 + endloop + endfacet + facet normal 0.750108 -0.661315 0 + outer loop + vertex 3.4519 -2.85566 -3 + vertex 3.26578 -3.06677 6 + vertex 3.26578 -3.06677 -3 + endloop + endfacet + facet normal 0.790147 -0.612917 0 + outer loop + vertex 3.4519 -2.85566 6 + vertex 3.6244 -2.63328 -3 + vertex 3.6244 -2.63328 6 + endloop + endfacet + facet normal 0.790147 -0.612917 0 + outer loop + vertex 3.6244 -2.63328 -3 + vertex 3.4519 -2.85566 6 + vertex 3.4519 -2.85566 -3 + endloop + endfacet + facet normal 0.278989 -0.960294 0 + outer loop + vertex 1.11413 -4.33925 -3 + vertex 1.3844 -4.26073 6 + vertex 1.11413 -4.33925 6 + endloop + endfacet + facet normal 0.278989 -0.960294 0 + outer loop + vertex 1.3844 -4.26073 6 + vertex 1.11413 -4.33925 -3 + vertex 1.3844 -4.26073 -3 + endloop + endfacet + facet normal -0.860743 -0.509041 0 + outer loop + vertex -3.78259 -2.4005 -3 + vertex -3.92585 -2.15826 6 + vertex -3.92585 -2.15826 -3 + endloop + endfacet + facet normal -0.860743 -0.509041 0 + outer loop + vertex -3.92585 -2.15826 6 + vertex -3.78259 -2.4005 -3 + vertex -3.78259 -2.4005 6 + endloop + endfacet + facet normal 0.454008 -0.890997 0 + outer loop + vertex 1.90749 -4.05363 -3 + vertex 2.15826 -3.92585 6 + vertex 1.90749 -4.05363 6 + endloop + endfacet + facet normal 0.454008 -0.890997 0 + outer loop + vertex 2.15826 -3.92585 6 + vertex 1.90749 -4.05363 -3 + vertex 2.15826 -3.92585 -3 + endloop + endfacet + facet normal 0.890997 -0.454008 0 + outer loop + vertex 3.92585 -2.15826 6 + vertex 4.05363 -1.90749 -3 + vertex 4.05363 -1.90749 6 + endloop + endfacet + facet normal 0.890997 -0.454008 0 + outer loop + vertex 4.05363 -1.90749 -3 + vertex 3.92585 -2.15826 6 + vertex 3.92585 -2.15826 -3 + endloop + endfacet + facet normal -0.612917 -0.790147 0 + outer loop + vertex -2.85566 -3.4519 -3 + vertex -2.63328 -3.6244 6 + vertex -2.85566 -3.4519 6 + endloop + endfacet + facet normal -0.612917 -0.790147 -0 + outer loop + vertex -2.63328 -3.6244 6 + vertex -2.85566 -3.4519 -3 + vertex -2.63328 -3.6244 -3 + endloop + endfacet + facet normal 0.750108 0.661315 0 + outer loop + vertex 3.4519 2.85566 6 + vertex 3.26578 3.06677 -3 + vertex 3.26578 3.06677 6 + endloop + endfacet + facet normal 0.750108 0.661315 0 + outer loop + vertex 3.26578 3.06677 -3 + vertex 3.4519 2.85566 6 + vertex 3.4519 2.85566 -3 + endloop + endfacet + facet normal 0.509041 0.860743 -0 + outer loop + vertex 2.4005 3.78259 -3 + vertex 2.15826 3.92585 6 + vertex 2.4005 3.78259 6 + endloop + endfacet + facet normal 0.509041 0.860743 0 + outer loop + vertex 2.15826 3.92585 6 + vertex 2.4005 3.78259 -3 + vertex 2.15826 3.92585 -3 + endloop + endfacet + facet normal 0.454008 0.890997 -0 + outer loop + vertex 2.15826 3.92585 -3 + vertex 1.90749 4.05363 6 + vertex 2.15826 3.92585 6 + endloop + endfacet + facet normal 0.454008 0.890997 0 + outer loop + vertex 1.90749 4.05363 6 + vertex 2.15826 3.92585 -3 + vertex 1.90749 4.05363 -3 + endloop + endfacet + facet normal 0.338726 0.940885 -0 + outer loop + vertex 1.6492 4.1654 -3 + vertex 1.3844 4.26073 6 + vertex 1.6492 4.1654 6 + endloop + endfacet + facet normal 0.338726 0.940885 0 + outer loop + vertex 1.3844 4.26073 6 + vertex 1.6492 4.1654 -3 + vertex 1.3844 4.26073 -3 + endloop + endfacet + facet normal 0.612917 -0.790147 0 + outer loop + vertex 2.63328 -3.6244 -3 + vertex 2.85566 -3.4519 6 + vertex 2.63328 -3.6244 6 + endloop + endfacet + facet normal 0.612917 -0.790147 0 + outer loop + vertex 2.85566 -3.4519 6 + vertex 2.63328 -3.6244 -3 + vertex 2.85566 -3.4519 -3 + endloop + endfacet + facet normal -0.917757 0.397142 0 + outer loop + vertex -4.1654 1.6492 -3 + vertex -4.05363 1.90749 6 + vertex -4.05363 1.90749 -3 + endloop + endfacet + facet normal -0.917757 0.397142 0 + outer loop + vertex -4.05363 1.90749 6 + vertex -4.1654 1.6492 -3 + vertex -4.1654 1.6492 6 + endloop + endfacet + facet normal -0.454008 -0.890997 0 + outer loop + vertex -2.15826 -3.92585 -3 + vertex -1.90749 -4.05363 6 + vertex -2.15826 -3.92585 6 + endloop + endfacet + facet normal -0.454008 -0.890997 -0 + outer loop + vertex -1.90749 -4.05363 6 + vertex -2.15826 -3.92585 -3 + vertex -1.90749 -4.05363 -3 + endloop + endfacet +endsolid OpenSCAD_Model diff --git a/cad/fan_monitor/fan_monitor.kicad_pcb b/cad/fan_monitor/fan_monitor.kicad_pcb new file mode 100644 index 0000000..9747353 --- /dev/null +++ b/cad/fan_monitor/fan_monitor.kicad_pcb @@ -0,0 +1,26085 @@ +(kicad_pcb (version 20211014) (generator pcbnew) + + (general + (thickness 1.6) + ) + + (paper "A4") + (title_block + (title "Main Board") + (date "2022-03-05") + (rev "2.0") + ) + + (layers + (0 "F.Cu" signal) + (31 "B.Cu" signal) + (32 "B.Adhes" user "B.Adhesive") + (33 "F.Adhes" user "F.Adhesive") + (34 "B.Paste" user) + (35 "F.Paste" user) + (36 "B.SilkS" user "B.Silkscreen") + (37 "F.SilkS" user "F.Silkscreen") + (38 "B.Mask" user) + (39 "F.Mask" user) + (40 "Dwgs.User" user "User.Drawings") + (41 "Cmts.User" user "User.Comments") + (42 "Eco1.User" user "User.Eco1") + (43 "Eco2.User" user "User.Eco2") + (44 "Edge.Cuts" user) + (45 "Margin" user) + (46 "B.CrtYd" user "B.Courtyard") + (47 "F.CrtYd" user "F.Courtyard") + (48 "B.Fab" user) + (49 "F.Fab" user) + (50 "User.1" user) + (51 "User.2" user) + (52 "User.3" user) + (53 "User.4" user) + (54 "User.5" user) + (55 "User.6" user) + (56 "User.7" user) + (57 "User.8" user) + (58 "User.9" user) + ) + + (setup + (stackup + (layer "F.SilkS" (type "Top Silk Screen")) + (layer "F.Paste" (type "Top Solder Paste")) + (layer "F.Mask" (type "Top Solder Mask") (thickness 0.01)) + (layer "F.Cu" (type "copper") (thickness 0.035)) + (layer "dielectric 1" (type "core") (thickness 1.51) (material "FR4") (epsilon_r 4.5) (loss_tangent 0.02)) + (layer "B.Cu" (type "copper") (thickness 0.035)) + (layer "B.Mask" (type "Bottom Solder Mask") (thickness 0.01)) + (layer "B.Paste" (type "Bottom Solder Paste")) + (layer "B.SilkS" (type "Bottom Silk Screen")) + (copper_finish "None") + (dielectric_constraints no) + ) + (pad_to_mask_clearance 0) + (pcbplotparams + (layerselection 0x00010fc_ffffffff) + (disableapertmacros false) + (usegerberextensions false) + (usegerberattributes true) + (usegerberadvancedattributes true) + (creategerberjobfile true) + (svguseinch false) + (svgprecision 6) + (excludeedgelayer true) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (dxfpolygonmode true) + (dxfimperialunits true) + (dxfusepcbnewfont true) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (sketchpadsonfab false) + (subtractmaskfromsilk false) + (outputformat 4) + (mirror false) + (drillshape 2) + (scaleselection 1) + (outputdirectory "/home/main/Desktop/") + ) + ) + + (net 0 "") + (net 1 "unconnected-(U1-Pad3V3)") + (net 2 "Net-(BT1-Pad1)") + (net 3 "Override") + (net 4 "unconnected-(U1-PadNRST)") + (net 5 "Relay") + (net 6 "Net-(F1-Pad1)") + (net 7 "Net-(F1-Pad2)") + (net 8 "TH1+") + (net 9 "TH2+") + (net 10 "unconnected-(U1-PadPA6)") + (net 11 "unconnected-(U1-PadPA7)") + (net 12 "GND") + (net 13 "+5V") + (net 14 "Net-(J1-Pad3)") + (net 15 "RS") + (net 16 "R{slash}W") + (net 17 "E") + (net 18 "unconnected-(U1-PadPB0)") + (net 19 "unconnected-(U1-PadPB1)") + (net 20 "DB0") + (net 21 "DB1") + (net 22 "unconnected-(U1-PadPB5)") + (net 23 "unconnected-(J6-Pad2)") + (net 24 "THe+") + (net 25 "Net-(D3-Pad2)") + (net 26 "DB2") + (net 27 "unconnected-(U1-PadPB10)") + (net 28 "unconnected-(U1-PadPB11)") + (net 29 "Net-(J8-Pad1)") + (net 30 "DB3") + (net 31 "DB4") + (net 32 "DB5") + (net 33 "unconnected-(U1-PadPC13)") + (net 34 "unconnected-(U1-PadPC14)") + (net 35 "unconnected-(U1-PadPC15)") + (net 36 "TH1-") + (net 37 "DB6") + (net 38 "DB7") + (net 39 "Net-(J1-Pad15)") + (net 40 "Net-(Q1-Pad2)") + (net 41 "Net-(Q2-Pad2)") + (net 42 "Backlight") + (net 43 "Enc_B") + (net 44 "Enc_A") + (net 45 "Net-(R10-Pad1)") + (net 46 "TH2-") + (net 47 "Switch") + (net 48 "THe-") + (net 49 "Vbat") + (net 50 "Net-(J4-Pad1)") + + (footprint "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal" (layer "F.Cu") + (tedit 5B784ED0) (tstamp 024b208e-2c18-4f19-9ad8-8f278f43ae7a) + (at 42 66 -90) + (descr "Generic Phoenix Contact connector footprint for: MC_1,5/2-G-3.5; number of pins: 02; pin pitch: 3.50mm; Angled || order number: 1844210 8A 160V") + (tags "phoenix_contact connector MC_01x02_G_3.5mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/7f6546a5-0db6-464d-b3f1-ac7f1f61e7bd") + (attr through_hole) + (fp_text reference "J5" (at -4 2 180) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp a5912b2a-423b-4f24-bfc4-c9c05ae1f33d) + ) + (fp_text value "Conn_01x02" (at 1.75 9.2 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 172020f5-9f07-44d0-aae3-0382c09363b2) + ) + (fp_text user "${REFERENCE}" (at 1.75 -0.5 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp ec7a4356-caed-4797-a197-69b03edf45cc) + ) + (fp_line (start 6.06 8.11) (end 6.06 -1.31) (layer "F.SilkS") (width 0.12) (tstamp 0174e390-29df-4efb-90a5-5561fe970228)) + (fp_line (start -2.56 8.11) (end 6.06 8.11) (layer "F.SilkS") (width 0.12) (tstamp 09cf7be8-9b3a-41e7-a72a-24ea4170a17a)) + (fp_line (start -0.3 -2.6) (end 0.3 -2.6) (layer "F.SilkS") (width 0.12) (tstamp 4400b790-b105-4afe-ac46-c090afd9f31c)) + (fp_line (start 6.06 -1.31) (end 4.55 -1.31) (layer "F.SilkS") (width 0.12) (tstamp 4b2c29f5-6a8d-47fd-bd3b-d9251378ded2)) + (fp_line (start -2.56 -1.31) (end -2.56 8.11) (layer "F.SilkS") (width 0.12) (tstamp 4ffcdef9-f263-48cc-897b-8b27b543b905)) + (fp_line (start -2.56 4.8) (end 6.06 4.8) (layer "F.SilkS") (width 0.12) (tstamp 6ea921ce-42f8-4789-b540-4f550b5400ea)) + (fp_line (start 0 -2) (end -0.3 -2.6) (layer "F.SilkS") (width 0.12) (tstamp 9425b2f7-6e16-4988-a878-b5f04cd89850)) + (fp_line (start -2.56 -1.31) (end -1.05 -1.31) (layer "F.SilkS") (width 0.12) (tstamp a36a5de4-b1da-4456-bc1a-03e8d1e03cb0)) + (fp_line (start 1.05 -1.31) (end 2.45 -1.31) (layer "F.SilkS") (width 0.12) (tstamp a8243bb9-756b-403a-9dd0-dbbbfb8a2dab)) + (fp_line (start 0.3 -2.6) (end 0 -2) (layer "F.SilkS") (width 0.12) (tstamp e1a8e04c-4d2b-4c81-940b-163f01dc9f8f)) + (fp_line (start -3.06 8.5) (end 6.45 8.5) (layer "F.CrtYd") (width 0.05) (tstamp 0b640ab5-8106-4486-84ec-ab7e51ad8888)) + (fp_line (start 6.45 8.5) (end 6.45 -2.3) (layer "F.CrtYd") (width 0.05) (tstamp 1b3859ef-f226-4a79-a430-a43bcac88ca1)) + (fp_line (start 6.45 -2.3) (end -3.06 -2.3) (layer "F.CrtYd") (width 0.05) (tstamp 2ec42463-3763-4f09-b909-855cb59f6e22)) + (fp_line (start -3.06 -2.3) (end -3.06 8.5) (layer "F.CrtYd") (width 0.05) (tstamp c7f422e8-c23e-4127-bf88-c587e6088b20)) + (fp_line (start 5.95 8) (end 5.95 -1.2) (layer "F.Fab") (width 0.1) (tstamp 4a465d14-39f5-47c2-ada8-7183fb742df6)) + (fp_line (start 5.95 -1.2) (end -2.45 -1.2) (layer "F.Fab") (width 0.1) (tstamp 62eafb4c-9986-4cd3-86c6-f6258b9775e0)) + (fp_line (start 0 0) (end -0.8 -1.2) (layer "F.Fab") (width 0.1) (tstamp ad6b11bc-2801-4841-aab4-7cfffd6e93c1)) + (fp_line (start -2.45 8) (end 5.95 8) (layer "F.Fab") (width 0.1) (tstamp cc8cc590-3f25-44cd-9633-12795a461127)) + (fp_line (start 0.8 -1.2) (end 0 0) (layer "F.Fab") (width 0.1) (tstamp ce1cfb12-2f11-4799-a53b-70ebb3b1b2d0)) + (fp_line (start -2.45 -1.2) (end -2.45 8) (layer "F.Fab") (width 0.1) (tstamp f290e20c-74d2-429e-87d6-1f89e1e36528)) + (pad "1" thru_hole roundrect (at 0 0 270) (size 1.8 3.6) (drill 1.2) (layers *.Cu *.Mask) (roundrect_rratio 0.138889) + (net 13 "+5V") (pinfunction "Pin_1") (pintype "passive") (tstamp 24f530f4-f6c5-4c1a-b554-b887be7b0fb1)) + (pad "2" thru_hole oval (at 3.5 0 270) (size 1.8 3.6) (drill 1.2) (layers *.Cu *.Mask) + (net 50 "Net-(J4-Pad1)") (pinfunction "Pin_2") (pintype "passive") (tstamp 0a2b554a-008d-46ad-969c-405a25f619ba)) + (model "${KICAD6_3DMODEL_DIR}/Connector_Phoenix_MC.3dshapes/PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Diode_THT:D_DO-201AD_P15.24mm_Horizontal" (layer "F.Cu") + (tedit 5AE50CD5) (tstamp 04510c93-6e31-4d23-b790-e15f92cc911d) + (at 56.38 61) + (descr "Diode, DO-201AD series, Axial, Horizontal, pin pitch=15.24mm, , length*diameter=9.5*5.2mm^2, , http://www.diodes.com/_files/packages/DO-201AD.pdf") + (tags "Diode DO-201AD series Axial Horizontal pin pitch 15.24mm length 9.5mm diameter 5.2mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/3462e14d-f877-415a-8b53-496f63df60d2") + (attr through_hole) + (fp_text reference "D3" (at 7.62 -3.72) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 1ffd52d6-5479-425b-954f-9a850ede9335) + ) + (fp_text value "UF5400" (at 7.62 3.72) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 80e07f0d-00d1-433d-8b1e-63a5cc2f1ad7) + ) + (fp_text user "K" (at 0 -2.6) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 825c5f2b-3772-4238-a251-9890023edb88) + ) + (fp_text user "${REFERENCE}" (at 8.3325 0) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 688ae0e2-9f56-4a52-a8a8-e273aaed798c) + ) + (fp_text user "K" (at 0 -2.6) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp c9a8ca77-aefa-4ec4-ab56-ee1aefd7fcc9) + ) + (fp_line (start 4.415 -2.72) (end 4.415 2.72) (layer "F.SilkS") (width 0.12) (tstamp 19f3df22-2593-4128-8275-4087eeb53e01)) + (fp_line (start 13.4 0) (end 12.49 0) (layer "F.SilkS") (width 0.12) (tstamp 2cd8fe5c-c399-4fcb-9123-225a166cb2c7)) + (fp_line (start 2.75 2.72) (end 12.49 2.72) (layer "F.SilkS") (width 0.12) (tstamp 37cc7cd5-d341-420d-b14f-7cf8bdf3fb8b)) + (fp_line (start 2.75 -2.72) (end 2.75 2.72) (layer "F.SilkS") (width 0.12) (tstamp 404c04a4-4667-4ad1-ac67-bd4f4b563de3)) + (fp_line (start 12.49 2.72) (end 12.49 -2.72) (layer "F.SilkS") (width 0.12) (tstamp 491b1407-39d2-40f4-85bf-626672ef9f18)) + (fp_line (start 1.84 0) (end 2.75 0) (layer "F.SilkS") (width 0.12) (tstamp bd0ec3cd-3d3e-42db-91f0-774411c23dc6)) + (fp_line (start 12.49 -2.72) (end 2.75 -2.72) (layer "F.SilkS") (width 0.12) (tstamp c53fa102-54e2-450b-8067-a96c8b9e239f)) + (fp_line (start 4.295 -2.72) (end 4.295 2.72) (layer "F.SilkS") (width 0.12) (tstamp ceda01ef-bf8e-4add-b730-7f3c5c227b71)) + (fp_line (start 4.175 -2.72) (end 4.175 2.72) (layer "F.SilkS") (width 0.12) (tstamp d15f7e69-2eb0-4dab-9f61-c5b6188767ea)) + (fp_line (start -1.85 2.85) (end 17.09 2.85) (layer "F.CrtYd") (width 0.05) (tstamp 2be9f23a-29e5-41e0-b87b-b5ccc883dae0)) + (fp_line (start -1.85 -2.85) (end -1.85 2.85) (layer "F.CrtYd") (width 0.05) (tstamp 2c8540ea-de1d-4f53-9710-ba5c331e9758)) + (fp_line (start 17.09 -2.85) (end -1.85 -2.85) (layer "F.CrtYd") (width 0.05) (tstamp 61be4c3e-76a6-469e-91ff-1b02ceca8163)) + (fp_line (start 17.09 2.85) (end 17.09 -2.85) (layer "F.CrtYd") (width 0.05) (tstamp a2b79f07-6cc3-45c2-b949-991334504c7b)) + (fp_line (start 2.87 -2.6) (end 2.87 2.6) (layer "F.Fab") (width 0.1) (tstamp 0fb6b058-24f0-460f-88ed-1917c63fdca6)) + (fp_line (start 0 0) (end 2.87 0) (layer "F.Fab") (width 0.1) (tstamp 41e90036-bde9-463c-9b9a-54f88d5ed7df)) + (fp_line (start 15.24 0) (end 12.37 0) (layer "F.Fab") (width 0.1) (tstamp 47e1fea5-3ff5-49c5-9d81-83cbabbd1080)) + (fp_line (start 4.295 -2.6) (end 4.295 2.6) (layer "F.Fab") (width 0.1) (tstamp 7bb94f7a-b865-43bd-b4dc-faff99eb4d8a)) + (fp_line (start 12.37 -2.6) (end 2.87 -2.6) (layer "F.Fab") (width 0.1) (tstamp 8ea72f83-8c8f-48a0-ad23-6eccccd45be3)) + (fp_line (start 4.195 -2.6) (end 4.195 2.6) (layer "F.Fab") (width 0.1) (tstamp c6f92bec-3583-4521-ac40-27f95ddbc050)) + (fp_line (start 4.395 -2.6) (end 4.395 2.6) (layer "F.Fab") (width 0.1) (tstamp c9f8a24b-9391-4e61-9fe6-49649d07938e)) + (fp_line (start 12.37 2.6) (end 12.37 -2.6) (layer "F.Fab") (width 0.1) (tstamp cf407353-0827-45e6-98d2-5e3978d00e54)) + (fp_line (start 2.87 2.6) (end 12.37 2.6) (layer "F.Fab") (width 0.1) (tstamp e9760667-d2f2-40b6-9567-a6ebef7948ce)) + (pad "1" thru_hole rect (at 0 0) (size 3.2 3.2) (drill 1.6) (layers *.Cu *.Mask) + (net 13 "+5V") (pinfunction "K") (pintype "passive") (tstamp ffb59e62-39b0-495f-bf00-a833b43cf356)) + (pad "2" thru_hole oval (at 15.24 0) (size 3.2 3.2) (drill 1.6) (layers *.Cu *.Mask) + (net 25 "Net-(D3-Pad2)") (pinfunction "A") (pintype "passive") (tstamp 7b0941eb-1d5f-4697-98b3-1a7c910228ee)) + (model "${KICAD6_3DMODEL_DIR}/Diode_THT.3dshapes/D_DO-201AD_P15.24mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "" (layer "F.Cu") + (tedit 0) (tstamp 062f86ce-8a25-4e97-b510-4b57b202b43b) + (at 38.1 118.1) + (fp_text reference "" (at 0 0) (layer "F.SilkS") + (effects (font (size 1.27 1.27) (thickness 0.15))) + (tstamp 5536a585-c333-49d0-92dc-b1bb13a9791b) + ) + (fp_text value "" (at 0 0) (layer "F.SilkS") + (effects (font (size 1.27 1.27) (thickness 0.15))) + (tstamp 93e4100f-4886-47dd-8369-3f9e24c71106) + ) + (pad "1" thru_hole circle (at 0 0) (size 5.6 5.6) (drill 3.2) (layers *.Cu *.Mask) (tstamp 60321880-d2fa-425a-baaa-968a552b807c)) + ) + + (footprint "" (layer "F.Cu") + (tedit 0) (tstamp 0b0c3924-d4d1-4790-aacf-501084575e7d) + (at 78.1 48.1) + (fp_text reference "" (at 0 0) (layer "F.SilkS") + (effects (font (size 1.27 1.27) (thickness 0.15))) + (tstamp e4d60aa0-829b-452e-a0b4-f0b282cbe2f3) + ) + (fp_text value "" (at 0 0) (layer "F.SilkS") + (effects (font (size 1.27 1.27) (thickness 0.15))) + (tstamp ac81fb15-6f1a-451b-a962-fb87ffd26f6b) + ) + (pad "1" thru_hole circle (at 0 0) (size 5.6 5.6) (drill 3.2) (layers *.Cu *.Mask) (tstamp 872313a4-03e6-4e4a-b850-f54dcb50f9fc)) + ) + + (footprint "TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_Horizontal" (layer "F.Cu") + (tedit 5B294EE5) (tstamp 1c8c100f-47de-45a6-82a4-990e843c3e5f) + (at 54 115.305) + (descr "Terminal Block Phoenix MKDS-1,5-2, 2 pins, pitch 5mm, size 10x9.8mm^2, drill diamater 1.3mm, pad diameter 2.6mm, see http://www.farnell.com/datasheets/100425.pdf, script-generated using https://github.com/pointhi/kicad-footprint-generator/scripts/TerminalBlock_Phoenix") + (tags "THT Terminal Block Phoenix MKDS-1,5-2 pitch 5mm size 10x9.8mm^2 drill 1.3mm pad 2.6mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/6e6e6c89-98eb-40fc-b063-8fd4b219fd6f") + (attr through_hole) + (fp_text reference "J8" (at 9 3.695) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 515302b8-7193-4fcf-a467-19a0c2213907) + ) + (fp_text value "Conn_01x02" (at 2.5 5.66) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp aaf6838a-7b03-454b-b74b-dd1c4d75df9c) + ) + (fp_text user "${REFERENCE}" (at 2.5 3.2) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp f05d440e-051a-4fb6-9324-85d14eea9154) + ) + (fp_line (start -2.8 4.16) (end -2.8 4.9) (layer "F.SilkS") (width 0.12) (tstamp 1f16e5c8-ccf2-48bd-b037-51d6a6ba3e49)) + (fp_line (start -2.56 -5.261) (end 7.56 -5.261) (layer "F.SilkS") (width 0.12) (tstamp 3f152a26-dcee-4e78-9c76-bc04202d0bec)) + (fp_line (start -2.56 4.66) (end 7.56 4.66) (layer "F.SilkS") (width 0.12) (tstamp 6c810d9e-b6bf-4913-a9cc-dcde45de907f)) + (fp_line (start -2.56 -2.301) (end 7.56 -2.301) (layer "F.SilkS") (width 0.12) (tstamp 7f4c964d-cd4b-4cf5-bbaf-ffcf4e386fd6)) + (fp_line (start 6.07 -1.275) (end 6.035 -1.239) (layer "F.SilkS") (width 0.12) (tstamp 9c28c01b-6e82-4507-805c-851eb13fb47e)) + (fp_line (start 7.56 -5.261) (end 7.56 4.66) (layer "F.SilkS") (width 0.12) (tstamp a5c02a91-3f08-4cb7-af3c-74b5ae15b5e2)) + (fp_line (start -2.56 2.6) (end 7.56 2.6) (layer "F.SilkS") (width 0.12) (tstamp a9e51401-9558-4cad-9f8a-f88f104d3d8f)) + (fp_line (start -2.56 4.1) (end 7.56 4.1) (layer "F.SilkS") (width 0.12) (tstamp b55918a6-c76c-43a6-82b6-942bd1f54781)) + (fp_line (start 6.275 -1.069) (end 6.228 -1.023) (layer "F.SilkS") (width 0.12) (tstamp bb6cfb0c-b5c1-474f-abf5-05b9983ef884)) + (fp_line (start -2.56 -5.261) (end -2.56 4.66) (layer "F.SilkS") (width 0.12) (tstamp c04206ed-5d8c-4ee6-89b1-b0372293c195)) + (fp_line (start 3.773 1.023) (end 3.726 1.069) (layer "F.SilkS") (width 0.12) (tstamp cb15f976-d55c-4e11-8d9b-3d661e700f58)) + (fp_line (start 3.966 1.239) (end 3.931 1.274) (layer "F.SilkS") (width 0.12) (tstamp dc096375-a3ac-4bfa-8be0-6155ee988c21)) + (fp_line (start -2.8 4.9) (end -2.3 4.9) (layer "F.SilkS") (width 0.12) (tstamp e48d97f0-ff7d-48ce-8ff3-1ae2c78afc72)) + (fp_arc (start -0.683042 -1.535427) (mid 0.000524 -1.680501) (end 0.684 -1.535) (layer "F.SilkS") (width 0.12) (tstamp 03e9747f-2a1a-4a55-8804-51e3845d8dba)) + (fp_arc (start -1.535427 0.683042) (mid -1.680501 -0.000524) (end -1.535 -0.684) (layer "F.SilkS") (width 0.12) (tstamp 06de1b06-62a1-4675-8953-a3c299c8629d)) + (fp_arc (start 0.028805 1.680253) (mid -0.335551 1.646659) (end -0.684 1.535) (layer "F.SilkS") (width 0.12) (tstamp 476fd47a-f7ad-4e9d-9e28-a5f0cb0add40)) + (fp_arc (start 1.535427 -0.683042) (mid 1.680501 0.000524) (end 1.535 0.684) (layer "F.SilkS") (width 0.12) (tstamp 73f58e88-e77a-4d8b-822b-29f03dc20326)) + (fp_arc (start 0.683318 1.534756) (mid 0.349292 1.643288) (end 0 1.68) (layer "F.SilkS") (width 0.12) (tstamp a45ecf45-82b3-4f59-a7fb-9132f3f7b010)) + (fp_circle (center 5 0) (end 6.68 0) (layer "F.SilkS") (width 0.12) (fill none) (tstamp 2a0298fa-acab-479a-bf5e-c912e8e5f4e2)) + (fp_line (start 8 5.1) (end 8 -5.71) (layer "F.CrtYd") (width 0.05) (tstamp 65afb6b8-5da7-41eb-8d2d-475bfa5c0880)) + (fp_line (start -3 5.1) (end 8 5.1) (layer "F.CrtYd") (width 0.05) (tstamp 7bc6749d-6e8a-4136-8b94-37d4ae750c95)) + (fp_line (start 8 -5.71) (end -3 -5.71) (layer "F.CrtYd") (width 0.05) (tstamp 8cc3817c-f641-4abb-b6b8-ca676c47423f)) + (fp_line (start -3 -5.71) (end -3 5.1) (layer "F.CrtYd") (width 0.05) (tstamp aa5aa0eb-7b1d-4c7d-b10a-c5f13704d0ae)) + (fp_line (start -2.5 -2.3) (end 7.5 -2.3) (layer "F.Fab") (width 0.1) (tstamp 26d94e43-fd7b-4c73-8477-6bd0896c9a81)) + (fp_line (start -2.5 4.1) (end -2.5 -5.2) (layer "F.Fab") (width 0.1) (tstamp 38f7d1a6-e9ab-4ba2-9863-507c918b7707)) + (fp_line (start -2.5 2.6) (end 7.5 2.6) (layer "F.Fab") (width 0.1) (tstamp 51fac0d6-4230-4297-b4d3-00ed024d1f95)) + (fp_line (start 5.955 -1.138) (end 3.863 0.955) (layer "F.Fab") (width 0.1) (tstamp 5c7056d9-6105-445c-ad99-feaeab7e8f59)) + (fp_line (start -2.5 4.1) (end 7.5 4.1) (layer "F.Fab") (width 0.1) (tstamp 5f2b47b0-626f-450a-8d15-6d30bc71b4bc)) + (fp_line (start 7.5 -5.2) (end 7.5 4.6) (layer "F.Fab") (width 0.1) (tstamp 658e9104-5d3a-4f74-9a4d-0dfc02fdaab4)) + (fp_line (start 7.5 4.6) (end -2 4.6) (layer "F.Fab") (width 0.1) (tstamp 67d17772-9c23-4f15-904d-f7eda1dac6ca)) + (fp_line (start 0.955 -1.138) (end -1.138 0.955) (layer "F.Fab") (width 0.1) (tstamp 86ff63f2-7525-4603-a227-78791eb2edc5)) + (fp_line (start -2.5 -5.2) (end 7.5 -5.2) (layer "F.Fab") (width 0.1) (tstamp 94f4f2c4-a252-4179-b1b3-4fa908ad076d)) + (fp_line (start 6.138 -0.955) (end 4.046 1.138) (layer "F.Fab") (width 0.1) (tstamp a731fa14-cfe9-4417-9ab0-cf97e167008a)) + (fp_line (start -2 4.6) (end -2.5 4.1) (layer "F.Fab") (width 0.1) (tstamp db9f80f4-4113-4276-925b-7806e0c24c1b)) + (fp_line (start 1.138 -0.955) (end -0.955 1.138) (layer "F.Fab") (width 0.1) (tstamp f3e12394-41eb-45e0-b0ee-203a0d5be4d4)) + (fp_circle (center 0 0) (end 1.5 0) (layer "F.Fab") (width 0.1) (fill none) (tstamp 86b91b8d-991d-4e4c-ba5e-12a78db102fb)) + (fp_circle (center 5 0) (end 6.5 0) (layer "F.Fab") (width 0.1) (fill none) (tstamp abb4f6bf-d21a-4824-8a69-da889bd3c9a8)) + (pad "1" thru_hole rect (at 0 0) (size 2.6 2.6) (drill 1.3) (layers *.Cu *.Mask) + (net 29 "Net-(J8-Pad1)") (pinfunction "Pin_1") (pintype "passive") (tstamp d09618fe-7e75-421a-a20d-07f1d6e91b2f)) + (pad "2" thru_hole circle (at 5 0) (size 2.6 2.6) (drill 1.3) (layers *.Cu *.Mask) + (net 7 "Net-(F1-Pad2)") (pinfunction "Pin_2") (pintype "passive") (tstamp 3c3e95af-4aeb-4883-960e-23ac1386f655)) + (model "${KICAD6_3DMODEL_DIR}/TerminalBlock_Phoenix.3dshapes/TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Potentiometer_THT:Potentiometer_Vishay_T73XX_Horizontal" (layer "F.Cu") + (tedit 5A3D4993) (tstamp 1de72610-e364-4c06-b690-7dc9122e707d) + (at 155.46 49.46) + (descr "Potentiometer, horizontal, Vishay T73XX, http://www.vishay.com/docs/51016/t73.pdf") + (tags "Potentiometer horizontal Vishay T73XX") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/33a74763-48a8-4a27-ae92-f81f779cd726") + (attr through_hole) + (fp_text reference "RV1" (at 0 -2.01) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 0a7b2191-7dd2-44ba-98a2-8b6bcb9aa0a8) + ) + (fp_text value "10k" (at 0 7.09) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 724c04a8-682b-424c-ad61-1bbf0d8e3ca6) + ) + (fp_text user "${REFERENCE}" (at 1.33 2.54) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp be286456-56f3-4fcf-9ed5-176fcab7efc6) + ) + (fp_line (start -1.14 5.96) (end -0.65 5.96) (layer "F.SilkS") (width 0.12) (tstamp 3a152583-12c2-4462-ad53-005090cb1f52)) + (fp_line (start 0.65 5.96) (end 3.8 5.96) (layer "F.SilkS") (width 0.12) (tstamp 6084cbb3-5985-4b9d-93ea-d7b5b7968993)) + (fp_line (start -1.14 -0.88) (end -0.65 -0.88) (layer "F.SilkS") (width 0.12) (tstamp 622dab3b-dfcc-4e9f-86c3-905de3c0e772)) + (fp_line (start -1.14 -0.88) (end -1.14 5.96) (layer "F.SilkS") (width 0.12) (tstamp 78b21480-fa28-437c-b73d-1fa9f0d78459)) + (fp_line (start 3.8 -0.88) (end 3.8 5.96) (layer "F.SilkS") (width 0.12) (tstamp b5e8ec15-395a-4d4d-a17d-e04d701a4132)) + (fp_line (start 0.65 -0.88) (end 3.8 -0.88) (layer "F.SilkS") (width 0.12) (tstamp d71a7aac-22b8-4fd1-9339-80300f144536)) + (fp_line (start -1.3 -1.05) (end -1.3 6.1) (layer "F.CrtYd") (width 0.05) (tstamp 88d9e04d-4f29-4d82-8968-e7a578359e73)) + (fp_line (start 3.95 6.1) (end 3.95 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 89c90678-0a96-4726-8602-907427502de5)) + (fp_line (start 3.95 -1.05) (end -1.3 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp a7c963f5-130e-4a87-8822-f6f07d8a9247)) + (fp_line (start -1.3 6.1) (end 3.95 6.1) (layer "F.CrtYd") (width 0.05) (tstamp e05dd7f2-b49f-4e55-ab49-0bc4f085d27c)) + (fp_line (start 3.68 5.84) (end -1.02 5.84) (layer "F.Fab") (width 0.1) (tstamp 5fe67987-5241-44be-ae3b-74692fb3868d)) + (fp_line (start -1.02 -0.76) (end 3.68 -0.76) (layer "F.Fab") (width 0.1) (tstamp 7050eb04-5f17-4f78-984b-b85d9273d82a)) + (fp_line (start -1.02 5.84) (end -1.02 -0.76) (layer "F.Fab") (width 0.1) (tstamp 9f02ff30-b1d8-4021-b235-da71a8595f78)) + (fp_line (start 3.68 -0.76) (end 3.68 5.84) (layer "F.Fab") (width 0.1) (tstamp b358eeb0-4de1-42f6-8af5-6cd9a70f12e2)) + (pad "1" thru_hole circle (at 0 0) (size 1.44 1.44) (drill 0.8) (layers *.Cu *.Mask) + (net 12 "GND") (pinfunction "1") (pintype "passive") (tstamp d083e214-af29-477a-a167-a8175fb90089)) + (pad "2" thru_hole circle (at 2.54 2.54) (size 1.44 1.44) (drill 0.8) (layers *.Cu *.Mask) + (net 14 "Net-(J1-Pad3)") (pinfunction "2") (pintype "passive") (tstamp d5379bce-c3b8-4db5-8270-1ada75df6788)) + (pad "3" thru_hole circle (at 0 5.08) (size 1.44 1.44) (drill 0.8) (layers *.Cu *.Mask) + (net 13 "+5V") (pinfunction "3") (pintype "passive") (tstamp db0f3ea8-0418-4798-bd8f-25feed3550b7)) + (model "${KICAD6_3DMODEL_DIR}/Potentiometer_THT.3dshapes/Potentiometer_Vishay_T73XX_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp 1e511fcf-5434-49a0-bc62-86011eff151f) + (at 68.92 53.08 90) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/64dfe1a3-fa7b-4ccc-b41b-72cc579baccf") + (attr through_hole) + (fp_text reference "R10" (at 5.08 2.58 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 0893326e-3448-4b36-a9c7-7ac4f9e93875) + ) + (fp_text value "10k" (at 5.16 3 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp dd15e188-3441-4f51-bc80-0b9808c91efa) + ) + (fp_text user "${REFERENCE}" (at 5.08 0 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 0c25ef88-9aae-4145-88e2-e240b9b7759a) + ) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer "F.SilkS") (width 0.12) (tstamp 01bffd13-40d2-4842-9539-cfa280da4c4f)) + (fp_line (start 1.04 0) (end 1.81 0) (layer "F.SilkS") (width 0.12) (tstamp 0b7b5a75-e3f9-4f66-bccb-4aa69d3b7506)) + (fp_line (start 9.12 0) (end 8.35 0) (layer "F.SilkS") (width 0.12) (tstamp 39be2408-8af2-4b3e-a5db-7672b999dabc)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer "F.SilkS") (width 0.12) (tstamp 52470be0-44d7-45b1-8664-30346c52ba8c)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer "F.SilkS") (width 0.12) (tstamp 844d2c3f-55c5-463d-9a9b-f40ce8c3763c)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer "F.SilkS") (width 0.12) (tstamp baff6d34-0ed3-4922-a3f2-175df5e38ecb)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer "F.CrtYd") (width 0.05) (tstamp 45d2c234-eff6-47b4-9af6-3fae19a099ef)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer "F.CrtYd") (width 0.05) (tstamp 53a9d783-6bce-4c04-915f-4847be3d8d29)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer "F.CrtYd") (width 0.05) (tstamp 67f3ddce-1a82-4777-bd02-5d62a6dee20f)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer "F.CrtYd") (width 0.05) (tstamp 9508686a-b0c9-4491-8d65-00e49bfbca33)) + (fp_line (start 0 0) (end 1.93 0) (layer "F.Fab") (width 0.1) (tstamp 2ea1d8e7-519c-4a61-a7b3-83c5e93d3367)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer "F.Fab") (width 0.1) (tstamp 4b2c2eee-907c-458e-8c5e-e99141063c64)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer "F.Fab") (width 0.1) (tstamp 73fc735c-a0e1-4d54-becf-716c41d88e6e)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer "F.Fab") (width 0.1) (tstamp 8db7bb59-1a09-4d8a-9a83-f969c4115a4a)) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer "F.Fab") (width 0.1) (tstamp 91bbf7a9-f76c-4159-8ec6-a08b6b56cc63)) + (fp_line (start 10.16 0) (end 8.23 0) (layer "F.Fab") (width 0.1) (tstamp 92134ebf-7824-4315-902d-d9950136574b)) + (pad "1" thru_hole circle (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 45 "Net-(R10-Pad1)") (pintype "passive") (tstamp 6b43a225-5579-4c61-849c-ca815cf16124)) + (pad "2" thru_hole oval (at 10.16 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 47 "Switch") (pintype "passive") (tstamp 7ac9a700-c984-4172-aa99-7a7b90f8591f)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Package_TO_SOT_THT:TO-92_Inline" (layer "F.Cu") + (tedit 5A1DD157) (tstamp 2078e617-f762-4970-a1c8-88be32adc2f9) + (at 80.36 66) + (descr "TO-92 leads in-line, narrow, oval pads, drill 0.75mm (see NXP sot054_po.pdf)") + (tags "to-92 sc-43 sc-43a sot54 PA33 transistor") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/7058e9ec-7a8a-4c71-94e8-3c87c4bace1b") + (attr through_hole) + (fp_text reference "Q2" (at 1.27 -3.56) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp c507f83d-cb5c-4edd-a401-1cdcab44c37b) + ) + (fp_text value "BS170" (at 1.27 2.79) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 8bd9f937-a701-4978-99e0-8d7284da09c4) + ) + (fp_text user "${REFERENCE}" (at 1.27 0) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 3ab3a4c1-ccff-43dc-b0f4-a80f21704272) + ) + (fp_line (start -0.53 1.85) (end 3.07 1.85) (layer "F.SilkS") (width 0.12) (tstamp 5b3a27e8-d2c1-4905-85e0-479e44f425dd)) + (fp_arc (start -0.568478 1.838478) (mid -1.132087 -0.994977) (end 1.27 -2.6) (layer "F.SilkS") (width 0.12) (tstamp f022a843-a241-4c1d-9189-54590357192b)) + (fp_arc (start 1.27 -2.6) (mid 3.672087 -0.994977) (end 3.108478 1.838478) (layer "F.SilkS") (width 0.12) (tstamp fbbe99b6-b37c-41fb-9193-4ed32498b728)) + (fp_line (start 4 2.01) (end -1.46 2.01) (layer "F.CrtYd") (width 0.05) (tstamp 14b35a90-c5a6-4181-9fee-534d4de16d48)) + (fp_line (start -1.46 -2.73) (end 4 -2.73) (layer "F.CrtYd") (width 0.05) (tstamp 2e67781f-0524-4759-9b6b-a2938b4864e9)) + (fp_line (start 4 2.01) (end 4 -2.73) (layer "F.CrtYd") (width 0.05) (tstamp 495c2588-662d-4e0e-8dc7-4003b6dc3830)) + (fp_line (start -1.46 -2.73) (end -1.46 2.01) (layer "F.CrtYd") (width 0.05) (tstamp fdc12a3f-101d-4a60-9e1b-e92c3653b082)) + (fp_line (start -0.5 1.75) (end 3 1.75) (layer "F.Fab") (width 0.1) (tstamp a866a015-6900-4081-8cf1-b6f601e88093)) + (fp_arc (start 1.27 -2.48) (mid 3.561221 -0.949055) (end 3.023625 1.753625) (layer "F.Fab") (width 0.1) (tstamp c1d7b066-2e17-4b38-8c5c-be402be3c6bd)) + (fp_arc (start -0.483625 1.753625) (mid -1.021221 -0.949055) (end 1.27 -2.48) (layer "F.Fab") (width 0.1) (tstamp ca02b313-7938-434c-a80e-9e6bd92020e5)) + (pad "1" thru_hole rect (at 0 0) (size 1.05 1.5) (drill 0.75) (layers *.Cu *.Mask) + (net 25 "Net-(D3-Pad2)") (pinfunction "D") (pintype "passive") (tstamp e437cc68-df0a-45e3-aee2-8be61f2bb1eb)) + (pad "2" thru_hole oval (at 1.27 0) (size 1.05 1.5) (drill 0.75) (layers *.Cu *.Mask) + (net 41 "Net-(Q2-Pad2)") (pinfunction "G") (pintype "input") (tstamp 4364ec61-dfe1-419d-8dd3-8c88a52506a6)) + (pad "3" thru_hole oval (at 2.54 0) (size 1.05 1.5) (drill 0.75) (layers *.Cu *.Mask) + (net 12 "GND") (pinfunction "S") (pintype "passive") (tstamp 8e975ace-e656-4403-835d-ed556a2a915c)) + (model "${KICAD6_3DMODEL_DIR}/Package_TO_SOT_THT.3dshapes/TO-92_Inline.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Capacitor_SMD:C_0805_2012Metric" (layer "F.Cu") + (tedit 5F68FEEE) (tstamp 2281bd0f-fec3-4db7-9469-77f9709334ae) + (at 67.92 38.92 180) + (descr "Capacitor SMD 0805 (2012 Metric), square (rectangular) end terminal, IPC_7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf, https://docs.google.com/spreadsheets/d/1BsfQQcO9C6DZCsRaXUlFlo91Tg2WpOkGARC1WS5S8t0/edit?usp=sharing), generated with kicad-footprint-generator") + (tags "capacitor") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/71779c1e-6333-461a-9158-7f5d273fb62d") + (attr smd) + (fp_text reference "C1" (at 0 -1.68) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 46528dbb-3d63-4137-9698-1b7ff1f3b526) + ) + (fp_text value "3.3uF" (at 0 1.68) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp d6bef788-4f22-444f-aeef-3711bc6d4c65) + ) + (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") + (effects (font (size 0.5 0.5) (thickness 0.08))) + (tstamp 679844d3-65cc-47dc-aa5e-94090dc21c2c) + ) + (fp_line (start -0.261252 0.735) (end 0.261252 0.735) (layer "F.SilkS") (width 0.12) (tstamp 26f022f1-1267-4891-9a76-f4b5e88b8ae0)) + (fp_line (start -0.261252 -0.735) (end 0.261252 -0.735) (layer "F.SilkS") (width 0.12) (tstamp 3dce8a07-04c9-424a-985b-56ad768c8a1e)) + (fp_line (start 1.7 -0.98) (end 1.7 0.98) (layer "F.CrtYd") (width 0.05) (tstamp 08332c11-4333-41a6-a25b-ca08ce3349cd)) + (fp_line (start -1.7 -0.98) (end 1.7 -0.98) (layer "F.CrtYd") (width 0.05) (tstamp 48e9e3d1-ec49-476c-9ada-3311ea28d662)) + (fp_line (start -1.7 0.98) (end -1.7 -0.98) (layer "F.CrtYd") (width 0.05) (tstamp 52b81c6b-80c9-4560-8cba-4a128ed248ea)) + (fp_line (start 1.7 0.98) (end -1.7 0.98) (layer "F.CrtYd") (width 0.05) (tstamp 943d1ce2-4750-4c67-815b-06c49789d658)) + (fp_line (start -1 -0.625) (end 1 -0.625) (layer "F.Fab") (width 0.1) (tstamp 19bdc5b0-24eb-49d7-af7a-7152a467309d)) + (fp_line (start 1 0.625) (end -1 0.625) (layer "F.Fab") (width 0.1) (tstamp 1d442d46-1f02-47dc-8872-974cfc989252)) + (fp_line (start -1 0.625) (end -1 -0.625) (layer "F.Fab") (width 0.1) (tstamp e97f8166-1469-4ddf-8a19-2fe6539b81c7)) + (fp_line (start 1 -0.625) (end 1 0.625) (layer "F.Fab") (width 0.1) (tstamp f6e40cf9-a957-4d38-b27e-abd691d539f1)) + (pad "1" smd roundrect (at -0.95 0 180) (size 1 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) + (net 47 "Switch") (pintype "passive") (tstamp 0168125a-bccf-48f6-adc0-942556542b52)) + (pad "2" smd roundrect (at 0.95 0 180) (size 1 1.45) (layers "F.Cu" "F.Paste" "F.Mask") (roundrect_rratio 0.25) + (net 12 "GND") (pintype "passive") (tstamp bf583753-823b-447d-b526-05c0e1ebf15c)) + (model "${KICAD6_3DMODEL_DIR}/Capacitor_SMD.3dshapes/C_0805_2012Metric.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp 33987600-d664-487a-bf51-a33c9eb52027) + (at 110 52 180) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/4552ffc9-c70d-40a6-8661-2e785c52907f") + (attr through_hole) + (fp_text reference "R1" (at 5.08 -2.37) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 0446a5bd-3f2f-4dc5-9a6b-3cf1cc95ecb1) + ) + (fp_text value "100k" (at 5.08 2.37) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 5631e347-5e99-4488-884c-62d2cd190930) + ) + (fp_text user "${REFERENCE}" (at 5.08 0) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 3a5507f2-47e5-4b8c-b0ac-7fcb9bf43419) + ) + (fp_line (start 9.12 0) (end 8.35 0) (layer "F.SilkS") (width 0.12) (tstamp 004f4bb6-b2e2-4136-9f1f-b73356e56cef)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer "F.SilkS") (width 0.12) (tstamp 14ddbf2c-9669-454c-aede-fee40ec30f95)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer "F.SilkS") (width 0.12) (tstamp 2c0d2e24-afce-4855-a0ec-44b944854715)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer "F.SilkS") (width 0.12) (tstamp 7d716e10-c114-416e-9f2e-044001efc6c6)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer "F.SilkS") (width 0.12) (tstamp da3c6e1d-e0b9-4195-ad53-f289660d3a80)) + (fp_line (start 1.04 0) (end 1.81 0) (layer "F.SilkS") (width 0.12) (tstamp e97cf425-b976-417b-abd1-03718075098f)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer "F.CrtYd") (width 0.05) (tstamp 11e9f3e1-5db6-4b72-a939-fcc5db1e352b)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer "F.CrtYd") (width 0.05) (tstamp 24a8456c-189f-486e-af66-02a25b8e861c)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer "F.CrtYd") (width 0.05) (tstamp 3c7b7ee9-d9a9-4052-9c3c-ee9fdcc3c5e7)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer "F.CrtYd") (width 0.05) (tstamp 6d002d0d-9d5b-42f3-9fa2-eeb17980a4b8)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer "F.Fab") (width 0.1) (tstamp 2f15cceb-7511-4869-8dcf-ee171fc3ba07)) + (fp_line (start 10.16 0) (end 8.23 0) (layer "F.Fab") (width 0.1) (tstamp 536efeb4-6267-4d81-9b5f-0967bf22dffa)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer "F.Fab") (width 0.1) (tstamp 62b755d3-ef06-4cf7-b2d9-df07be56e4b7)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer "F.Fab") (width 0.1) (tstamp 995e029c-1f0b-481b-8697-a1bf6b0e8c6f)) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer "F.Fab") (width 0.1) (tstamp a8288a29-441a-40fb-81e3-175ae6ba20f8)) + (fp_line (start 0 0) (end 1.93 0) (layer "F.Fab") (width 0.1) (tstamp d2018925-3e4f-48e5-bc40-a8c223e3d719)) + (pad "1" thru_hole circle (at 0 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 42 "Backlight") (pintype "passive") (tstamp 18a3ebdb-bf2e-4d84-9d9e-c2056fda3747)) + (pad "2" thru_hole oval (at 10.16 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 40 "Net-(Q1-Pad2)") (pintype "passive") (tstamp 931fda3b-c290-47d8-9420-cab5bfaa00fe)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp 346aeacb-6f14-4b64-a859-e02b7d5e331a) + (at 81.63 81.08 90) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/f6871ffc-d4ef-4b3c-b99b-69c2e87ec0bd") + (attr through_hole) + (fp_text reference "R12" (at 5.08 2.37 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 4d6953f7-c223-4824-9283-0f812745b01e) + ) + (fp_text value "100k" (at 5.08 2.37 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp cc1225b3-7eaf-44aa-9024-2b73606f2406) + ) + (fp_text user "${REFERENCE}" (at 5.08 0 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp a7144f57-9c07-4e2b-a9eb-c8e9c5010f22) + ) + (fp_line (start 9.12 0) (end 8.35 0) (layer "F.SilkS") (width 0.12) (tstamp 06ff644a-6039-4184-813f-cfad4f958ec6)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer "F.SilkS") (width 0.12) (tstamp 0f98724d-fb64-441e-a4ca-fca725e38f2b)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer "F.SilkS") (width 0.12) (tstamp 5cca92b7-b745-4ec0-a349-5c668f8b207e)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer "F.SilkS") (width 0.12) (tstamp 7c4db1d7-9c5d-4215-821c-5216f4f8e60a)) + (fp_line (start 1.04 0) (end 1.81 0) (layer "F.SilkS") (width 0.12) (tstamp 87d6432f-8054-4994-8b75-646916d42c86)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer "F.SilkS") (width 0.12) (tstamp bac56b9c-9f98-41d2-8a5e-103f2f2ad58a)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer "F.CrtYd") (width 0.05) (tstamp 735facb8-30df-44fd-82b1-389bf54774cd)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer "F.CrtYd") (width 0.05) (tstamp 93d77368-8193-460f-83b3-ff27f598aaed)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer "F.CrtYd") (width 0.05) (tstamp 93e3343c-82cf-4b12-a98e-2f91cfbd0a14)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer "F.CrtYd") (width 0.05) (tstamp ebab6dab-8cde-4efb-85ae-d3d14ab2e8a3)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer "F.Fab") (width 0.1) (tstamp 0ed84119-2e9b-47dd-adee-1dda651ccd4d)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer "F.Fab") (width 0.1) (tstamp 265eb008-e662-4a4c-b256-142d0bcdd457)) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer "F.Fab") (width 0.1) (tstamp 67c0ed90-0204-4727-a9da-cf9f1ee4335b)) + (fp_line (start 10.16 0) (end 8.23 0) (layer "F.Fab") (width 0.1) (tstamp 68b834a3-44aa-4c5a-ba2e-308b3ace3ff3)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer "F.Fab") (width 0.1) (tstamp 99d350fe-2bf3-4f32-a861-d345e12c04c9)) + (fp_line (start 0 0) (end 1.93 0) (layer "F.Fab") (width 0.1) (tstamp a99135b2-a51a-48f9-8457-16831ab8d85d)) + (pad "1" thru_hole circle (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 3 "Override") (pintype "passive") (tstamp 62156d4a-38a4-443f-9f89-7188c764a738)) + (pad "2" thru_hole oval (at 10.16 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 41 "Net-(Q2-Pad2)") (pintype "passive") (tstamp 907fd10c-29bc-4ca2-be27-2753a54b8911)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp 36bbb615-9c3b-43c5-817a-da89d3b6dbfc) + (at 92 42.92 -90) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/84c8c457-b59f-4add-b4af-60870d81b762") + (attr through_hole) + (fp_text reference "R6" (at 5.08 -2.37 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 8d7cfc30-4b69-4809-b888-f23937e38a71) + ) + (fp_text value "100k" (at 5.08 2.37 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp e10df999-8571-47c1-928f-7b0f781e70ea) + ) + (fp_text user "${REFERENCE}" (at 5.08 0 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 59da4a42-ac74-430d-8878-2351bcd9272f) + ) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer "F.SilkS") (width 0.12) (tstamp 016fa245-b945-41a9-afd8-3261c9f3725f)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer "F.SilkS") (width 0.12) (tstamp 2638c6aa-ab67-4d60-993d-571b457c6c18)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer "F.SilkS") (width 0.12) (tstamp 334f4223-88e0-4ebc-87a1-7c9e16b8ab06)) + (fp_line (start 9.12 0) (end 8.35 0) (layer "F.SilkS") (width 0.12) (tstamp 50c273f0-c394-48bc-a50a-0ce82dafd047)) + (fp_line (start 1.04 0) (end 1.81 0) (layer "F.SilkS") (width 0.12) (tstamp 5b7287f1-fd32-4cd5-8ee9-d12ee4305566)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer "F.SilkS") (width 0.12) (tstamp 77f64f87-69e4-49d8-91d2-4f62867f968c)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer "F.CrtYd") (width 0.05) (tstamp 2d562380-4730-4123-80be-0e0c198b8ebb)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer "F.CrtYd") (width 0.05) (tstamp b79fce09-3a52-4910-b4eb-6f0c574174f9)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer "F.CrtYd") (width 0.05) (tstamp ca985d1a-5a71-48bc-865c-d922187bd2bb)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer "F.CrtYd") (width 0.05) (tstamp fc093ee0-770f-4995-99e4-4ceec2198ce6)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer "F.Fab") (width 0.1) (tstamp 1c5685d6-4ed6-4b97-833a-31f2f3b14c63)) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer "F.Fab") (width 0.1) (tstamp 4b3d9773-2bf3-4b01-8a5a-02bae3b9a2ec)) + (fp_line (start 0 0) (end 1.93 0) (layer "F.Fab") (width 0.1) (tstamp e091aad5-3131-4628-8fee-bdf99762f09a)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer "F.Fab") (width 0.1) (tstamp e4ad7cc3-27c1-440b-8982-b66a2618cedd)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer "F.Fab") (width 0.1) (tstamp e9601633-a980-4077-91e2-27ee0a2b0de8)) + (fp_line (start 10.16 0) (end 8.23 0) (layer "F.Fab") (width 0.1) (tstamp e9f63a02-18c5-4569-97e2-8e9d3d4ebe2e)) + (pad "1" thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 13 "+5V") (pintype "passive") (tstamp 00ad8ec9-b98e-48e5-81f0-59275f8c8dca)) + (pad "2" thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 44 "Enc_A") (pintype "passive") (tstamp 8c91ac10-aac5-461e-802a-113152a72761)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Fuse:Fuseholder_Cylinder-5x20mm_Stelvio-Kontek_PTF78_Horizontal_Open" (layer "F.Cu") + (tedit 5B7EAE13) (tstamp 3818702b-14d1-413a-9cc8-362a6ddeaff1) + (at 43.7 104) + (descr "https://www.tme.eu/en/Document/3b48dbe2b9714a62652c97b08fcd464b/PTF78.pdf") + (tags "Fuseholder horizontal open 5x20 Stelvio-Kontek PTF/78") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/93f33214-6d07-4045-8d18-4bc0c1f57476") + (attr through_hole) + (fp_text reference "F1" (at 11.25 -6) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp fbfd4aab-ee51-48f3-a4c7-39c83c503f73) + ) + (fp_text value "Fuse" (at 13 6) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 294c5820-b304-4ed5-912c-1a59ea4960bc) + ) + (fp_text user "${REFERENCE}" (at 11.25 4) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 9d31a5b0-a3fa-4eaf-ac47-c4a8a2115479) + ) + (fp_line (start 22.6 4.8) (end 22.6 2) (layer "F.SilkS") (width 0.12) (tstamp 390c14bf-e6aa-4629-af09-4bb0ae4cb6e5)) + (fp_line (start 22.6 -2) (end 22.6 -4.8) (layer "F.SilkS") (width 0.12) (tstamp 3b64d51e-72ff-44d1-ba6d-9a8724047534)) + (fp_line (start 0 4.8) (end 0 2) (layer "F.SilkS") (width 0.12) (tstamp 47920918-12fd-4636-ac82-53d604bb6ed9)) + (fp_line (start 0 -4.8) (end 22.6 -4.8) (layer "F.SilkS") (width 0.12) (tstamp 8f970cc8-631b-40c1-ae75-84d566cc0c0a)) + (fp_line (start 0 -2) (end 0 -4.8) (layer "F.SilkS") (width 0.12) (tstamp d67d17fc-9142-4b2f-b165-c663dc1686d4)) + (fp_line (start 0 4.8) (end 22.6 4.8) (layer "F.SilkS") (width 0.12) (tstamp eb306fd2-27cf-46f7-a5c9-aab29f0445c6)) + (fp_line (start -1.45 1.25) (end -1.85 0.45) (layer "F.CrtYd") (width 0.05) (tstamp 14992258-4dc8-4c91-8ab7-714fd5ae7c46)) + (fp_line (start 22.75 4.95) (end -0.15 4.95) (layer "F.CrtYd") (width 0.05) (tstamp 1ab5bb7b-a79e-47bb-b69a-b31c482a46e8)) + (fp_line (start -1.85 -0.45) (end -1.45 -1.25) (layer "F.CrtYd") (width 0.05) (tstamp 2019e552-d0ed-4a76-bb70-a53a86283898)) + (fp_line (start 24.05 1.25) (end 24.45 0.45) (layer "F.CrtYd") (width 0.05) (tstamp 453ca4e2-9907-4f6b-bdc0-1fba4068428d)) + (fp_line (start 24.45 0.45) (end 24.45 -0.45) (layer "F.CrtYd") (width 0.05) (tstamp 4f120d0c-cff0-45cf-948f-982c1e9d62ba)) + (fp_line (start 22.75 1.85) (end 23 1.85) (layer "F.CrtYd") (width 0.05) (tstamp 5493f725-7b2c-4ecf-9823-5ae8ab0538e4)) + (fp_line (start 22.75 -1.85) (end 23 -1.85) (layer "F.CrtYd") (width 0.05) (tstamp 75185454-59a7-471d-8e61-5df66290140c)) + (fp_line (start -0.75 1.75) (end -0.4 1.85) (layer "F.CrtYd") (width 0.05) (tstamp 76385863-c474-4879-8366-af00ba73e9c4)) + (fp_line (start -1.85 -0.45) (end -1.85 0.45) (layer "F.CrtYd") (width 0.05) (tstamp 7a7b23bd-ea89-4006-a62f-dffbb0fd7db7)) + (fp_line (start 23 1.85) (end 23.35 1.75) (layer "F.CrtYd") (width 0.05) (tstamp 7eee11e3-1a67-4635-9079-0e1b8a62da6d)) + (fp_line (start 22.75 1.85) (end 22.75 4.95) (layer "F.CrtYd") (width 0.05) (tstamp 81b93bbf-8c18-4157-bca2-f6e8d0b75023)) + (fp_line (start -1.45 1.25) (end -0.75 1.75) (layer "F.CrtYd") (width 0.05) (tstamp 912d8816-4f99-4daa-8b4f-6eef69f106aa)) + (fp_line (start 24.05 -1.25) (end 23.35 -1.75) (layer "F.CrtYd") (width 0.05) (tstamp 9404f586-2ff7-45aa-b262-af5dcd470644)) + (fp_line (start -0.15 -4.95) (end 22.75 -4.95) (layer "F.CrtYd") (width 0.05) (tstamp 9961beac-f737-4eab-8672-27fa01427bc9)) + (fp_line (start -0.15 4.95) (end -0.15 1.85) (layer "F.CrtYd") (width 0.05) (tstamp 9beabaae-9686-4322-95f2-5b07d4dc4747)) + (fp_line (start -0.4 1.85) (end -0.15 1.85) (layer "F.CrtYd") (width 0.05) (tstamp bbc685ee-67cd-45d9-a684-d08e9ceacb03)) + (fp_line (start -0.15 -1.85) (end -0.15 -4.95) (layer "F.CrtYd") (width 0.05) (tstamp cd985875-ef8e-4810-9852-6728779ac2f4)) + (fp_line (start -0.4 -1.85) (end -0.75 -1.75) (layer "F.CrtYd") (width 0.05) (tstamp d7e8753c-e66e-4132-86a5-b9968939e8ea)) + (fp_line (start 22.75 -1.85) (end 22.75 -4.95) (layer "F.CrtYd") (width 0.05) (tstamp dc2aeb6a-6bd1-4f34-8bf2-dae82d3fa4a4)) + (fp_line (start -0.15 -1.85) (end -0.4 -1.85) (layer "F.CrtYd") (width 0.05) (tstamp e19035e1-bd68-4b7b-91c7-a6fd9ae5d13f)) + (fp_line (start -0.75 -1.75) (end -1.45 -1.25) (layer "F.CrtYd") (width 0.05) (tstamp e314d214-ad62-4d1b-8c23-1e47e7a77480)) + (fp_line (start 23.35 1.75) (end 24.05 1.25) (layer "F.CrtYd") (width 0.05) (tstamp ee684d21-5edc-41f2-8380-88fc8d0beb63)) + (fp_line (start 23.35 -1.75) (end 23 -1.85) (layer "F.CrtYd") (width 0.05) (tstamp f6697b7f-bd66-451d-a5f6-24bd467a781d)) + (fp_line (start 24.45 -0.45) (end 24.05 -1.25) (layer "F.CrtYd") (width 0.05) (tstamp f6f9a590-9e20-4390-b3d0-052b1ee33d85)) + (fp_line (start 22.5 4.7) (end 22.5 -4.7) (layer "F.Fab") (width 0.1) (tstamp 3cbd8fae-b63f-40c5-8441-a8b5c1ae140f)) + (fp_line (start 0.1 4.7) (end 22.5 4.7) (layer "F.Fab") (width 0.1) (tstamp b9bf069f-b68c-4df8-98b7-ed3fea71ba57)) + (fp_line (start 0.1 -4.7) (end 0.1 4.7) (layer "F.Fab") (width 0.1) (tstamp c0fae68d-a066-4a27-a7a9-10b9f731ee95)) + (fp_line (start 22.5 -4.7) (end 0.1 -4.7) (layer "F.Fab") (width 0.1) (tstamp f6835750-da9d-467b-be75-e63682799e25)) + (pad "1" thru_hole circle (at 0 0) (size 3 3) (drill 1.5) (layers *.Cu *.Mask) + (net 6 "Net-(F1-Pad1)") (pintype "passive") (tstamp ba9b888a-bad3-44f9-a10f-f92e722b5245)) + (pad "2" thru_hole circle (at 22.6 0) (size 3 3) (drill 1.5) (layers *.Cu *.Mask) + (net 7 "Net-(F1-Pad2)") (pintype "passive") (tstamp 6c4cb602-31fb-4c89-9b31-28150a2d07dd)) + (model "${KICAD6_3DMODEL_DIR}/Fuse.3dshapes/Fuseholder_Cylinder-5x20mm_Stelvio-Kontek_PTF78_Horizontal_Open.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp 3b79d7a2-76d9-4d5a-b388-512bce3b85bf) + (at 109 99.19 -90) + (descr "Resistor, Axial_DIN0204 series, Axial, Horizontal, pin pitch=7.62mm, 0.167W, length*diameter=3.6*1.6mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0204 series Axial Horizontal pin pitch 7.62mm 0.167W length 3.6mm diameter 1.6mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/ccc8ae47-44db-474e-8a3e-956bbb3e4cd0") + (attr through_hole) + (fp_text reference "R2" (at 3.81 -1.92 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 020a14ee-2e90-4ec7-8281-cbc242c42cc4) + ) + (fp_text value "30k" (at 3.81 1.92 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 2b964353-0f46-4c14-a278-78a84a018627) + ) + (fp_text user "${REFERENCE}" (at 3.81 0 90) (layer "F.Fab") + (effects (font (size 0.72 0.72) (thickness 0.108))) + (tstamp 4224a202-a956-4b68-b382-75c49fb40cd9) + ) + (fp_line (start 0.94 0) (end 1.89 0) (layer "F.SilkS") (width 0.12) (tstamp 2eed9ee1-7d5b-4981-acc1-97de9a78abf7)) + (fp_line (start 1.89 0.92) (end 5.73 0.92) (layer "F.SilkS") (width 0.12) (tstamp 3a7a7f9b-f02e-4bac-b4d1-825103a5854d)) + (fp_line (start 1.89 -0.92) (end 1.89 0.92) (layer "F.SilkS") (width 0.12) (tstamp 874bdb86-f51f-4a91-9cdb-311be09f5b26)) + (fp_line (start 6.68 0) (end 5.73 0) (layer "F.SilkS") (width 0.12) (tstamp 8d461b0a-964e-4df7-827f-c1f15428da19)) + (fp_line (start 5.73 0.92) (end 5.73 -0.92) (layer "F.SilkS") (width 0.12) (tstamp a4203ee7-0c54-40c4-9262-60eb19541365)) + (fp_line (start 5.73 -0.92) (end 1.89 -0.92) (layer "F.SilkS") (width 0.12) (tstamp b5ed1c3c-c019-4c4c-8095-301b979aad4f)) + (fp_line (start 8.57 -1.05) (end -0.95 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 65b53f1d-9051-4a26-9652-9712e172426c)) + (fp_line (start -0.95 -1.05) (end -0.95 1.05) (layer "F.CrtYd") (width 0.05) (tstamp 8a046e2d-4fa0-479a-a5cf-da6df73764ba)) + (fp_line (start -0.95 1.05) (end 8.57 1.05) (layer "F.CrtYd") (width 0.05) (tstamp f0e11c8b-36bd-4fa2-94dd-22f08adb6e62)) + (fp_line (start 8.57 1.05) (end 8.57 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp fd3ff6d4-b05c-4d22-98cc-f361bd0c7d6a)) + (fp_line (start 0 0) (end 2.01 0) (layer "F.Fab") (width 0.1) (tstamp 173258d4-f74e-404a-9358-f3586bb7bdc8)) + (fp_line (start 2.01 -0.8) (end 2.01 0.8) (layer "F.Fab") (width 0.1) (tstamp 31d06b3e-4090-4344-b64a-1948af332bb7)) + (fp_line (start 7.62 0) (end 5.61 0) (layer "F.Fab") (width 0.1) (tstamp 696a6a51-35f5-4299-a8ae-83111a97139c)) + (fp_line (start 2.01 0.8) (end 5.61 0.8) (layer "F.Fab") (width 0.1) (tstamp 6d795d4d-34d7-4ce8-9ae5-26b5ba2b161d)) + (fp_line (start 5.61 -0.8) (end 2.01 -0.8) (layer "F.Fab") (width 0.1) (tstamp 7a6846a6-99c9-4b4d-936b-ea0f19a88922)) + (fp_line (start 5.61 0.8) (end 5.61 -0.8) (layer "F.Fab") (width 0.1) (tstamp bf6bce3e-3730-4b1a-bfe0-c200fc901c63)) + (pad "1" thru_hole circle (at 0 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 13 "+5V") (pintype "passive") (tstamp 2fe58069-01a5-4aba-93f9-a2f028135310)) + (pad "2" thru_hole oval (at 7.62 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 36 "TH1-") (pintype "passive") (tstamp 2e8117af-9f8b-4ce8-9628-5825adf9791d)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp 3c4760f7-0ebb-45a6-a851-024dd48c70fd) + (at 137 99.19 -90) + (descr "Resistor, Axial_DIN0204 series, Axial, Horizontal, pin pitch=7.62mm, 0.167W, length*diameter=3.6*1.6mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0204 series Axial Horizontal pin pitch 7.62mm 0.167W length 3.6mm diameter 1.6mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/3398c67f-46b1-4478-920f-dd0ec949557e") + (attr through_hole) + (fp_text reference "R14" (at 3.81 -1.92 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp a48ebfc3-0cd0-4c81-9820-ca65fa99539c) + ) + (fp_text value "30k" (at 3.81 1.92 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 37c7181f-c308-4ca6-909c-595ce18e4279) + ) + (fp_text user "${REFERENCE}" (at 3.81 0 90) (layer "F.Fab") + (effects (font (size 0.72 0.72) (thickness 0.108))) + (tstamp b3d709d8-3c1b-49f1-8c56-281116b6cb5d) + ) + (fp_line (start 6.68 0) (end 5.73 0) (layer "F.SilkS") (width 0.12) (tstamp 5ad7c509-d3f0-42dc-b6cf-f8ec23ab405b)) + (fp_line (start 5.73 0.92) (end 5.73 -0.92) (layer "F.SilkS") (width 0.12) (tstamp 7fc7695e-1a7d-44fc-b411-07f3f701f328)) + (fp_line (start 1.89 -0.92) (end 1.89 0.92) (layer "F.SilkS") (width 0.12) (tstamp bdb72f1e-412d-4d77-8dc4-e3c4ea466237)) + (fp_line (start 1.89 0.92) (end 5.73 0.92) (layer "F.SilkS") (width 0.12) (tstamp c6a5cc4c-93b1-4036-897c-95eeb883fd9f)) + (fp_line (start 5.73 -0.92) (end 1.89 -0.92) (layer "F.SilkS") (width 0.12) (tstamp da4f75d2-d108-4416-a34e-f5e27e32575f)) + (fp_line (start 0.94 0) (end 1.89 0) (layer "F.SilkS") (width 0.12) (tstamp eb823e70-3de9-43a1-8436-4f48c2fc3746)) + (fp_line (start 8.57 1.05) (end 8.57 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 37ce0f0c-ffc4-4483-b855-8108bbda15e1)) + (fp_line (start -0.95 -1.05) (end -0.95 1.05) (layer "F.CrtYd") (width 0.05) (tstamp 4f93899e-78b9-438b-9e5c-4a4373951f59)) + (fp_line (start -0.95 1.05) (end 8.57 1.05) (layer "F.CrtYd") (width 0.05) (tstamp 56d2c9e2-a1da-4a5b-bcc4-c2bf14960c15)) + (fp_line (start 8.57 -1.05) (end -0.95 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 91b9e2f8-5365-41ad-944b-482606b7f200)) + (fp_line (start 7.62 0) (end 5.61 0) (layer "F.Fab") (width 0.1) (tstamp 835f37db-feda-4f50-8dec-af6fecc8bfe8)) + (fp_line (start 5.61 0.8) (end 5.61 -0.8) (layer "F.Fab") (width 0.1) (tstamp 83c78f31-7608-4e5b-9dac-03be124d3b90)) + (fp_line (start 2.01 -0.8) (end 2.01 0.8) (layer "F.Fab") (width 0.1) (tstamp be2a200f-9eb2-4f61-a0a8-a2390019c1ed)) + (fp_line (start 5.61 -0.8) (end 2.01 -0.8) (layer "F.Fab") (width 0.1) (tstamp c562b354-60ba-4c54-8dee-86e98d66290e)) + (fp_line (start 2.01 0.8) (end 5.61 0.8) (layer "F.Fab") (width 0.1) (tstamp ce3827cd-50e6-46bb-a74b-a188ba8f4afb)) + (fp_line (start 0 0) (end 2.01 0) (layer "F.Fab") (width 0.1) (tstamp ff89a019-488a-418a-9acb-67b8daad36de)) + (pad "1" thru_hole circle (at 0 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 48 "THe-") (pintype "passive") (tstamp d403f602-2922-4fc8-a6f4-49b07994d5fc)) + (pad "2" thru_hole oval (at 7.62 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 12 "GND") (pintype "passive") (tstamp 2daedf53-b418-4b4c-96ba-03ae1780433c)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal" (layer "F.Cu") + (tedit 5B784ED0) (tstamp 421df253-94bd-4abf-8c3a-32c9d4298196) + (at 107 114) + (descr "Generic Phoenix Contact connector footprint for: MC_1,5/2-G-3.5; number of pins: 02; pin pitch: 3.50mm; Angled || order number: 1844210 8A 160V") + (tags "phoenix_contact connector MC_01x02_G_3.5mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/eb9d915a-a0f9-40b7-b6ca-2475b57417b1") + (attr through_hole) + (fp_text reference "J2" (at 1.75 -3) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 22f6d766-0ccb-4a7c-855f-00652b8f8d72) + ) + (fp_text value "Conn_01x02" (at 1.75 9.2) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 2fcc67db-bd3f-465e-b628-0900d46f4bdd) + ) + (fp_text user "${REFERENCE}" (at 1.75 -0.5) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp f1f2eeb8-d2a9-4c53-8077-f038be5f3612) + ) + (fp_line (start -0.3 -2.6) (end 0.3 -2.6) (layer "F.SilkS") (width 0.12) (tstamp 060f55ee-489d-4d1f-8d10-b9673dd35336)) + (fp_line (start -2.56 -1.31) (end -1.05 -1.31) (layer "F.SilkS") (width 0.12) (tstamp 10f154ba-57d1-4c26-b2bb-0e6a87fbccbb)) + (fp_line (start -2.56 8.11) (end 6.06 8.11) (layer "F.SilkS") (width 0.12) (tstamp 1ba2fcb8-0b5d-45eb-9f03-78fe8abff78e)) + (fp_line (start 6.06 -1.31) (end 4.55 -1.31) (layer "F.SilkS") (width 0.12) (tstamp 764dd925-da6b-49db-9c4c-0f5133fcfb78)) + (fp_line (start 0.3 -2.6) (end 0 -2) (layer "F.SilkS") (width 0.12) (tstamp 93d4d2f6-65df-460e-bab6-ae696dcaca08)) + (fp_line (start -2.56 -1.31) (end -2.56 8.11) (layer "F.SilkS") (width 0.12) (tstamp 98892996-9961-4ef7-9da1-8ecfb1564c82)) + (fp_line (start 1.05 -1.31) (end 2.45 -1.31) (layer "F.SilkS") (width 0.12) (tstamp da622fcb-11ee-44bd-a48f-a108c1c40821)) + (fp_line (start -2.56 4.8) (end 6.06 4.8) (layer "F.SilkS") (width 0.12) (tstamp de26f433-b670-4576-80ab-d0e7a9709e91)) + (fp_line (start 6.06 8.11) (end 6.06 -1.31) (layer "F.SilkS") (width 0.12) (tstamp e563111d-044c-4a8e-9cc0-314cfb29ff68)) + (fp_line (start 0 -2) (end -0.3 -2.6) (layer "F.SilkS") (width 0.12) (tstamp ff0a1d0d-cdd2-4957-bc62-3f387c048826)) + (fp_line (start 6.45 8.5) (end 6.45 -2.3) (layer "F.CrtYd") (width 0.05) (tstamp 615e0f14-03a2-4e22-bc60-8c12b4c3d901)) + (fp_line (start -3.06 -2.3) (end -3.06 8.5) (layer "F.CrtYd") (width 0.05) (tstamp db1928ef-e414-481d-b18c-6b6951f8859d)) + (fp_line (start 6.45 -2.3) (end -3.06 -2.3) (layer "F.CrtYd") (width 0.05) (tstamp e1732126-e771-42d6-94e8-a7de9bef666a)) + (fp_line (start -3.06 8.5) (end 6.45 8.5) (layer "F.CrtYd") (width 0.05) (tstamp eec2450f-f403-4ccb-8775-69dec651d1f0)) + (fp_line (start 0.8 -1.2) (end 0 0) (layer "F.Fab") (width 0.1) (tstamp 0313bc5e-8bb8-46df-af51-ea800f56f4e6)) + (fp_line (start 0 0) (end -0.8 -1.2) (layer "F.Fab") (width 0.1) (tstamp 17e01686-8a34-4bb2-9bdc-32955a9d83d7)) + (fp_line (start 5.95 8) (end 5.95 -1.2) (layer "F.Fab") (width 0.1) (tstamp 2f6483b6-fd66-4058-8ae9-cd16387461bc)) + (fp_line (start -2.45 8) (end 5.95 8) (layer "F.Fab") (width 0.1) (tstamp 70ed7f3f-7655-45c9-a899-7ced9449448c)) + (fp_line (start 5.95 -1.2) (end -2.45 -1.2) (layer "F.Fab") (width 0.1) (tstamp 8b58b4b3-a54f-490e-8f5e-2c12840a3f63)) + (fp_line (start -2.45 -1.2) (end -2.45 8) (layer "F.Fab") (width 0.1) (tstamp 9f0820e8-4210-40e7-bcdb-7cb71ad18d80)) + (pad "1" thru_hole roundrect (at 0 0) (size 1.8 3.6) (drill 1.2) (layers *.Cu *.Mask) (roundrect_rratio 0.138889) + (net 12 "GND") (pinfunction "Pin_1") (pintype "passive") (tstamp ca9cbc58-ca91-4942-9abb-473a129eda39)) + (pad "2" thru_hole oval (at 3.5 0) (size 1.8 3.6) (drill 1.2) (layers *.Cu *.Mask) + (net 8 "TH1+") (pinfunction "Pin_2") (pintype "passive") (tstamp c624e656-6970-4665-8a79-b8927b6f97d1)) + (model "${KICAD6_3DMODEL_DIR}/Connector_Phoenix_MC.3dshapes/PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp 50e0cf3a-d4f9-4408-b10f-99ef70bb19e9) + (at 105 99.19 -90) + (descr "Resistor, Axial_DIN0204 series, Axial, Horizontal, pin pitch=7.62mm, 0.167W, length*diameter=3.6*1.6mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0204 series Axial Horizontal pin pitch 7.62mm 0.167W length 3.6mm diameter 1.6mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/455120f9-696b-4fd9-bad0-3815e804c2a4") + (attr through_hole) + (fp_text reference "R3" (at 3.81 -1.92 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 254a4170-2425-4c3f-9cf1-e7ebcdeabc9a) + ) + (fp_text value "30k" (at 3.81 1.92 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 890d4c2e-2506-405c-867c-897a63819137) + ) + (fp_text user "${REFERENCE}" (at 3.81 0 90) (layer "F.Fab") + (effects (font (size 0.72 0.72) (thickness 0.108))) + (tstamp ce59bfb7-9ad3-49a8-8973-8e5e2dfb0bc3) + ) + (fp_line (start 6.68 0) (end 5.73 0) (layer "F.SilkS") (width 0.12) (tstamp 07b81149-0d74-4855-a824-34ca0f140a67)) + (fp_line (start 1.89 -0.92) (end 1.89 0.92) (layer "F.SilkS") (width 0.12) (tstamp 1a1c6661-6752-4649-b225-c04a4559b7d4)) + (fp_line (start 0.94 0) (end 1.89 0) (layer "F.SilkS") (width 0.12) (tstamp 32281179-3289-477a-b23d-38c5ff6e8b3c)) + (fp_line (start 1.89 0.92) (end 5.73 0.92) (layer "F.SilkS") (width 0.12) (tstamp 33a10c0e-7521-4ed0-9f4e-48a1984e2e79)) + (fp_line (start 5.73 -0.92) (end 1.89 -0.92) (layer "F.SilkS") (width 0.12) (tstamp 715d0e2c-e242-4076-830f-2b2c43240cc8)) + (fp_line (start 5.73 0.92) (end 5.73 -0.92) (layer "F.SilkS") (width 0.12) (tstamp a5b52e6e-2059-4107-800d-7a4831b61491)) + (fp_line (start 8.57 1.05) (end 8.57 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 08841ab5-e2ee-4c0e-aec4-fb5ed54a0ec4)) + (fp_line (start -0.95 -1.05) (end -0.95 1.05) (layer "F.CrtYd") (width 0.05) (tstamp 1535908e-d24d-4c9c-98e1-6ffd8eed9560)) + (fp_line (start 8.57 -1.05) (end -0.95 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 5bc95dc1-fa3c-4885-8b9c-4118652b1f16)) + (fp_line (start -0.95 1.05) (end 8.57 1.05) (layer "F.CrtYd") (width 0.05) (tstamp d64ebe69-f902-46dc-8db2-5cd5f12b60b8)) + (fp_line (start 5.61 0.8) (end 5.61 -0.8) (layer "F.Fab") (width 0.1) (tstamp 3dfc1a26-2cbd-4340-9216-3d3f417dd262)) + (fp_line (start 0 0) (end 2.01 0) (layer "F.Fab") (width 0.1) (tstamp 71fc0758-00b9-461b-86cf-c2366bead9fc)) + (fp_line (start 2.01 0.8) (end 5.61 0.8) (layer "F.Fab") (width 0.1) (tstamp 818f38a5-711f-4135-9f68-83e81456b4ad)) + (fp_line (start 5.61 -0.8) (end 2.01 -0.8) (layer "F.Fab") (width 0.1) (tstamp 8fcd444f-aed0-472a-8d9f-85e6cc9e5133)) + (fp_line (start 2.01 -0.8) (end 2.01 0.8) (layer "F.Fab") (width 0.1) (tstamp ac64222e-c54e-47a7-85bf-3ac6335b10df)) + (fp_line (start 7.62 0) (end 5.61 0) (layer "F.Fab") (width 0.1) (tstamp c6aa3056-ce64-4d20-addc-82781753a93c)) + (pad "1" thru_hole circle (at 0 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 36 "TH1-") (pintype "passive") (tstamp 715aff78-1d80-4af8-93a3-42ce82cc0109)) + (pad "2" thru_hole oval (at 7.62 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 12 "GND") (pintype "passive") (tstamp 04270447-11f0-4bf0-a541-6bdfb1ae786a)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp 5a864e63-3bc5-4963-8f67-c16e2c76627c) + (at 64 42.92 -90) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/bd159686-e073-485d-b5ee-8d8c789a45b4") + (attr through_hole) + (fp_text reference "R7" (at 5.08 -2.5 -270) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 3dab1c49-5b9b-4e1e-829d-56d9af3fe253) + ) + (fp_text value "100k" (at 5.08 2.37 -270) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 94fcfd62-9e9a-4d6e-9777-3e6c320a8df0) + ) + (fp_text user "${REFERENCE}" (at 5.08 0 -270) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 280a3923-d51e-4686-9b68-a974ca8b386e) + ) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer "F.SilkS") (width 0.12) (tstamp 04ff64f2-0c82-4eb8-9ae0-22e73311af5f)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer "F.SilkS") (width 0.12) (tstamp 127b3e41-a8ab-451c-9274-4f3b556288ba)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer "F.SilkS") (width 0.12) (tstamp 1fe2480b-3468-4981-bcff-d041d0e8fe96)) + (fp_line (start 1.04 0) (end 1.81 0) (layer "F.SilkS") (width 0.12) (tstamp 5b0a2e83-2516-4cad-89a9-e839f0d9de30)) + (fp_line (start 9.12 0) (end 8.35 0) (layer "F.SilkS") (width 0.12) (tstamp 6125f2bc-6e17-4c5a-8c18-8e2a3654d145)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer "F.SilkS") (width 0.12) (tstamp fa51d528-5081-4409-b2dc-874f405ccb8b)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer "F.CrtYd") (width 0.05) (tstamp 3d44f670-b5fb-4d95-bdb3-f50b66a6932d)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer "F.CrtYd") (width 0.05) (tstamp 4a8ea310-5d69-4b1a-babb-dc7501e4e379)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer "F.CrtYd") (width 0.05) (tstamp 61ad3860-3d31-43af-bbe5-b995571ace82)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer "F.CrtYd") (width 0.05) (tstamp 6e44a07b-740d-45c8-84f3-0a0b30db342f)) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer "F.Fab") (width 0.1) (tstamp 02c056c1-3d00-4690-87f0-1fc8c1233586)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer "F.Fab") (width 0.1) (tstamp 36a9005b-1f5c-4022-b424-0c0e4d255db4)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer "F.Fab") (width 0.1) (tstamp 7f074105-4bd0-490c-8527-fb27b4073d40)) + (fp_line (start 10.16 0) (end 8.23 0) (layer "F.Fab") (width 0.1) (tstamp 9fda704f-b2c8-456a-a3fa-e20d4d5b8c6f)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer "F.Fab") (width 0.1) (tstamp f4688d46-0d05-4edb-a40e-b3b7dec28076)) + (fp_line (start 0 0) (end 1.93 0) (layer "F.Fab") (width 0.1) (tstamp ffa5dc34-f6f4-464f-a67b-b773f0ce906e)) + (pad "1" thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 13 "+5V") (pintype "passive") (tstamp 032e5420-e700-4df5-948c-d45681ac58cf)) + (pad "2" thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 45 "Net-(R10-Pad1)") (pintype "passive") (tstamp 84f143eb-585f-4d13-bb15-95bc03d0c885)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp 6140bafe-473a-48ab-9e55-6351b7b809a9) + (at 86 42.92 -90) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/dd1b7cfe-5083-44fb-ae17-1601373156ae") + (attr through_hole) + (fp_text reference "R4" (at 5.08 -2.37 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 20d3832b-51b0-4248-b140-02c78cf59a7e) + ) + (fp_text value "100k" (at 5.08 2.37 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 5f9bac65-96cc-4ace-9886-cc5ddf9b552f) + ) + (fp_text user "${REFERENCE}" (at 5.08 0 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp bb8bf1ef-1e13-48ce-bf88-7f00191e88a1) + ) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer "F.SilkS") (width 0.12) (tstamp 4b66ac0b-f94c-452b-86e5-97001b1860b2)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer "F.SilkS") (width 0.12) (tstamp 88e080c6-05c1-4f3c-bbb2-b0a11d0af99b)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer "F.SilkS") (width 0.12) (tstamp 9881fc67-f088-4197-b2ab-726296f19aa3)) + (fp_line (start 9.12 0) (end 8.35 0) (layer "F.SilkS") (width 0.12) (tstamp c6862e9d-e65a-4b31-b956-45a91d10fc53)) + (fp_line (start 1.04 0) (end 1.81 0) (layer "F.SilkS") (width 0.12) (tstamp d87b988d-783c-43aa-a709-13ab1d2d4a53)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer "F.SilkS") (width 0.12) (tstamp e2052e2f-8015-46db-9f33-61144ea3634e)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer "F.CrtYd") (width 0.05) (tstamp 1da9cc6a-fa1a-4a2a-94d1-f52804da948a)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer "F.CrtYd") (width 0.05) (tstamp c1fb9a0a-5ad9-4e26-bcde-a31bdb8548ad)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer "F.CrtYd") (width 0.05) (tstamp cf184a08-95e9-4491-b325-e11d7fbce2dc)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer "F.CrtYd") (width 0.05) (tstamp edcf71ed-35de-45ac-9f5d-2b3a0d321335)) + (fp_line (start 0 0) (end 1.93 0) (layer "F.Fab") (width 0.1) (tstamp 092f791c-574f-4ffb-994c-a4cd4032d5f2)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer "F.Fab") (width 0.1) (tstamp 22c2faad-13c5-4e44-80ea-5ea8673380e4)) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer "F.Fab") (width 0.1) (tstamp 73354196-daeb-4f56-944d-da8f6e8be1b2)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer "F.Fab") (width 0.1) (tstamp a845c337-cc11-424e-8c9a-c8cb520c6532)) + (fp_line (start 10.16 0) (end 8.23 0) (layer "F.Fab") (width 0.1) (tstamp dcbb6362-9064-4acf-b18e-04e44a4338ea)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer "F.Fab") (width 0.1) (tstamp f8e2fd2b-d3e8-4540-99e8-55d13e77d213)) + (pad "1" thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 13 "+5V") (pintype "passive") (tstamp dab0caac-1bda-4e25-9b92-c46de104135f)) + (pad "2" thru_hole oval (at 10.16 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 43 "Enc_B") (pintype "passive") (tstamp feb36c08-6a56-43f7-9f94-97c4ea2ce130)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp 6227cd94-76ef-4d82-bbc1-fcc38077cf25) + (at 121 99.38 -90) + (descr "Resistor, Axial_DIN0204 series, Axial, Horizontal, pin pitch=7.62mm, 0.167W, length*diameter=3.6*1.6mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0204 series Axial Horizontal pin pitch 7.62mm 0.167W length 3.6mm diameter 1.6mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/9ae7595f-e806-4070-b18d-7dea7bdf40d3") + (attr through_hole) + (fp_text reference "R9" (at 3.81 -1.92 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 080aed87-44cb-411d-9ed7-628e3b10c486) + ) + (fp_text value "30k" (at 3.81 1.92 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 38ec17a2-c0b2-49a5-99c9-64ad50deae1d) + ) + (fp_text user "${REFERENCE}" (at 3.81 0 90) (layer "F.Fab") + (effects (font (size 0.72 0.72) (thickness 0.108))) + (tstamp 36efccd7-d0f9-4c5f-8ec5-49a85de6aa1d) + ) + (fp_line (start 1.89 0.92) (end 5.73 0.92) (layer "F.SilkS") (width 0.12) (tstamp 60d4bf52-6752-4857-8c84-c72cd96b0de0)) + (fp_line (start 6.68 0) (end 5.73 0) (layer "F.SilkS") (width 0.12) (tstamp 8195abf2-0557-4e38-bfab-ea43264ba134)) + (fp_line (start 5.73 -0.92) (end 1.89 -0.92) (layer "F.SilkS") (width 0.12) (tstamp 87aa4cbe-5104-4587-bbaf-a59a3fbb4ea7)) + (fp_line (start 0.94 0) (end 1.89 0) (layer "F.SilkS") (width 0.12) (tstamp 8a064c6a-4f71-42b4-baaa-a5e920dfd5b6)) + (fp_line (start 1.89 -0.92) (end 1.89 0.92) (layer "F.SilkS") (width 0.12) (tstamp c85c6437-fda8-42ac-afe8-f369f0765e72)) + (fp_line (start 5.73 0.92) (end 5.73 -0.92) (layer "F.SilkS") (width 0.12) (tstamp e7776734-182d-47f8-8594-0b945b1a189e)) + (fp_line (start -0.95 -1.05) (end -0.95 1.05) (layer "F.CrtYd") (width 0.05) (tstamp 1876b4d3-29cf-435b-b2a3-15cb306b0558)) + (fp_line (start -0.95 1.05) (end 8.57 1.05) (layer "F.CrtYd") (width 0.05) (tstamp 7d9ea654-fae4-492c-a6e7-5a5b80d38d99)) + (fp_line (start 8.57 1.05) (end 8.57 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 99afebc0-8e86-4084-9743-bd42bef04401)) + (fp_line (start 8.57 -1.05) (end -0.95 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp f9481886-0a8d-4721-a8f8-e59fd76e4b29)) + (fp_line (start 0 0) (end 2.01 0) (layer "F.Fab") (width 0.1) (tstamp 055a4791-223e-4b21-bb0b-03857e7a3733)) + (fp_line (start 7.62 0) (end 5.61 0) (layer "F.Fab") (width 0.1) (tstamp 096cd4fc-51d9-4dfd-aeb4-ce063643a3f9)) + (fp_line (start 2.01 -0.8) (end 2.01 0.8) (layer "F.Fab") (width 0.1) (tstamp 0c7ccf80-4430-440d-96c6-912433365c35)) + (fp_line (start 5.61 0.8) (end 5.61 -0.8) (layer "F.Fab") (width 0.1) (tstamp 664cb83d-505d-47a2-ac0a-59d5927111ea)) + (fp_line (start 2.01 0.8) (end 5.61 0.8) (layer "F.Fab") (width 0.1) (tstamp 687853b7-388e-4b06-a6ad-acbe275afcfc)) + (fp_line (start 5.61 -0.8) (end 2.01 -0.8) (layer "F.Fab") (width 0.1) (tstamp c360792b-754d-4e16-90c5-e11aad8f3e22)) + (pad "1" thru_hole circle (at 0 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 46 "TH2-") (pintype "passive") (tstamp 4fd69d59-ecee-4e4a-9822-dee8c5e95087)) + (pad "2" thru_hole oval (at 7.62 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 12 "GND") (pintype "passive") (tstamp 08b8ec47-57f6-4a18-a699-ca60f86adcca)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal" (layer "F.Cu") + (tedit 5B784ED0) (tstamp 6ba37e55-db0c-45b2-a380-650a6dfbd096) + (at 139 114) + (descr "Generic Phoenix Contact connector footprint for: MC_1,5/2-G-3.5; number of pins: 02; pin pitch: 3.50mm; Angled || order number: 1844210 8A 160V") + (tags "phoenix_contact connector MC_01x02_G_3.5mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/b541c487-b3a6-4eab-a218-c903d99346be") + (attr through_hole) + (fp_text reference "J7" (at 1.75 -3) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 0a36de81-1858-4977-ad4a-ee79037114b1) + ) + (fp_text value "Conn_01x02" (at 1.75 9.2) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp c7b9371f-9e9e-405d-8404-3ed12dcab167) + ) + (fp_text user "${REFERENCE}" (at 1.75 -0.5) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 38225122-dfc5-476a-ad1d-8b7848c36f2e) + ) + (fp_line (start -2.56 4.8) (end 6.06 4.8) (layer "F.SilkS") (width 0.12) (tstamp 2ab8b4ed-ca0d-4c2b-aa93-86f31480efd1)) + (fp_line (start -2.56 -1.31) (end -2.56 8.11) (layer "F.SilkS") (width 0.12) (tstamp 328c8ae6-64ba-4770-9451-e101f1b36f14)) + (fp_line (start 6.06 -1.31) (end 4.55 -1.31) (layer "F.SilkS") (width 0.12) (tstamp 62b58dae-bb1e-4894-83b7-211e2b1b0737)) + (fp_line (start 0 -2) (end -0.3 -2.6) (layer "F.SilkS") (width 0.12) (tstamp 784394cf-3041-4ef3-865f-e0cb7fda3c36)) + (fp_line (start -0.3 -2.6) (end 0.3 -2.6) (layer "F.SilkS") (width 0.12) (tstamp 83bfa8a3-c3e9-4696-b521-925726e3bf31)) + (fp_line (start 0.3 -2.6) (end 0 -2) (layer "F.SilkS") (width 0.12) (tstamp 9940792a-497f-4e02-9061-ed81b92cfbd8)) + (fp_line (start -2.56 8.11) (end 6.06 8.11) (layer "F.SilkS") (width 0.12) (tstamp 99a0049a-c987-49f2-bb3c-d8c3a52c71a8)) + (fp_line (start 6.06 8.11) (end 6.06 -1.31) (layer "F.SilkS") (width 0.12) (tstamp cfae51fe-9f24-4682-a18b-afb562c7dd15)) + (fp_line (start -2.56 -1.31) (end -1.05 -1.31) (layer "F.SilkS") (width 0.12) (tstamp dbbc3bcc-3fda-4d2d-b979-e03115941556)) + (fp_line (start 1.05 -1.31) (end 2.45 -1.31) (layer "F.SilkS") (width 0.12) (tstamp ea7dbfb1-68b4-4304-a1ae-08e95b6c019b)) + (fp_line (start 6.45 8.5) (end 6.45 -2.3) (layer "F.CrtYd") (width 0.05) (tstamp 06d93c70-cc56-4f5b-aa0b-9fc5c6e0613b)) + (fp_line (start 6.45 -2.3) (end -3.06 -2.3) (layer "F.CrtYd") (width 0.05) (tstamp 186b1ade-d2d6-48e8-875a-a99ccf3b3130)) + (fp_line (start -3.06 8.5) (end 6.45 8.5) (layer "F.CrtYd") (width 0.05) (tstamp 8d7194f5-b144-4dd1-bf40-bce7e3a215d1)) + (fp_line (start -3.06 -2.3) (end -3.06 8.5) (layer "F.CrtYd") (width 0.05) (tstamp 8fad7897-4524-4439-a221-90185283dff5)) + (fp_line (start 0 0) (end -0.8 -1.2) (layer "F.Fab") (width 0.1) (tstamp 16b8a696-0502-40f2-a82c-7d98c4209f81)) + (fp_line (start -2.45 8) (end 5.95 8) (layer "F.Fab") (width 0.1) (tstamp 32f67a69-b5fd-4ffb-99ba-335d0ef6e2c1)) + (fp_line (start -2.45 -1.2) (end -2.45 8) (layer "F.Fab") (width 0.1) (tstamp 4fc90bc8-cdf7-4b30-b6f0-a6c47af45aa8)) + (fp_line (start 5.95 -1.2) (end -2.45 -1.2) (layer "F.Fab") (width 0.1) (tstamp b79f2c47-9c09-4b1f-8e68-644f7f90569b)) + (fp_line (start 0.8 -1.2) (end 0 0) (layer "F.Fab") (width 0.1) (tstamp bb44bdb4-b362-4cff-9af6-1ca23a4467ef)) + (fp_line (start 5.95 8) (end 5.95 -1.2) (layer "F.Fab") (width 0.1) (tstamp f6a6ca87-8232-483c-925d-2bd970375bd8)) + (pad "1" thru_hole roundrect (at 0 0) (size 1.8 3.6) (drill 1.2) (layers *.Cu *.Mask) (roundrect_rratio 0.138889) + (net 12 "GND") (pinfunction "Pin_1") (pintype "passive") (tstamp 22f6b15d-62e4-4efc-bffd-ab98e49b207f)) + (pad "2" thru_hole oval (at 3.5 0) (size 1.8 3.6) (drill 1.2) (layers *.Cu *.Mask) + (net 24 "THe+") (pinfunction "Pin_2") (pintype "passive") (tstamp d82f3c61-0487-4d03-9aa7-9b15f611320b)) + (model "${KICAD6_3DMODEL_DIR}/Connector_Phoenix_MC.3dshapes/PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "fan_monitor:HF152FD_Form_A" (layer "F.Cu") + (tedit 62261D25) (tstamp 6d229791-1465-44cd-8d00-f26aad54a4da) + (at 70 71.6 -90) + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/6bb410ef-baee-442a-9c79-7d15078936cd") + (attr through_hole) + (fp_text reference "K1" (at -5.6 1 unlocked) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 8110b52c-1655-4b25-8189-2225b13baf1d) + ) + (fp_text value "HF152FD/5-1H" (at 6.4 -3.7 -90 unlocked) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp efa567cf-c002-42b9-ae1d-2672a62f88e9) + ) + (fp_line (start 13 3.75) (end 8.1 6) (layer "F.SilkS") (width 0.12) (tstamp 1d85dceb-f562-4790-beec-d35e59e0ad36)) + (fp_line (start 17 13.9) (end 17 -2) (layer "F.SilkS") (width 0.12) (tstamp 4f4c0b90-3503-4e4b-b594-f01f76935ae3)) + (fp_line (start 17 -2) (end -4.2 -2) (layer "F.SilkS") (width 0.12) (tstamp 54fa3af8-1914-4f7b-ab6b-dda6d764dc53)) + (fp_line (start -4.2 14) (end 17 14) (layer "F.SilkS") (width 0.12) (tstamp 907e5798-2a1f-43bb-bf60-e9c844061e46)) + (fp_line (start -0.8 6) (end 8.1 6) (layer "F.SilkS") (width 0.12) (tstamp 9587a999-2b2b-4c34-bd31-3489c5da95e6)) + (fp_line (start -4.2 -2) (end -4.2 14) (layer "F.SilkS") (width 0.12) (tstamp e47805d9-eba1-43d3-a689-dc5ea383fcbb)) + (fp_line (start 12.2 6.15) (end 12.2 10.85) (layer "F.SilkS") (width 0.12) (tstamp ed9bdf68-d34b-4a69-b37d-b32f36968885)) + (fp_rect (start -5.2 -3) (end 18 15) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp e67eb8d8-18cd-4729-b70d-0c280edb6432)) + (pad "1" thru_hole circle (at 0 0 270) (size 2.3 2.3) (drill 1.3) (layers *.Cu *.Mask) + (net 13 "+5V") (pintype "passive") (tstamp dc8d2b9c-272a-4694-81e9-374cf84d32cc)) + (pad "2" thru_hole circle (at 0 12 270) (size 2.3 2.3) (drill 1.3) (layers *.Cu *.Mask) + (net 25 "Net-(D3-Pad2)") (pintype "passive") (tstamp 4a22d684-8014-4df1-9e78-67f46306ff75)) + (pad "3" thru_hole circle (at -2 6 270) (size 2.3 2.3) (drill 1.3) (layers *.Cu *.Mask) + (net 29 "Net-(J8-Pad1)") (pintype "passive") (tstamp 621c5c81-3504-4390-9978-40493c0588de)) + (pad "4" thru_hole circle (at 12.2 12 270) (size 2.3 2.3) (drill 1.3) (layers *.Cu *.Mask) + (net 6 "Net-(F1-Pad1)") (pintype "passive") (tstamp 255d8bad-ffec-407a-af21-d9179f38a673)) + ) + + (footprint "fan_monitor:CR2032_Holder" (layer "F.Cu") + (tedit 62261CA8) (tstamp 70a122ac-d66c-4483-abad-433150fe3132) + (at 85 89.57 90) + (descr "Coin Cell PV Battery Holder") + (tags "CR2032") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/6331419e-1c96-4bc0-8cb4-fb5c6950f6a3") + (attr through_hole) + (fp_text reference "BT1" (at 4.07 0 unlocked) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp a429b26b-d36d-408b-b9e7-63b6461c6fe1) + ) + (fp_text value "CR2032" (at 7.3 -4.7 90 unlocked) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp f5e6ce74-9785-4a83-8a24-fa998d71cecf) + ) + (fp_text user "${REFERENCE}" (at 7.3 -3.2 90 unlocked) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 0f418f3d-fa6d-4a02-beef-7d0165ee86b5) + ) + (fp_line (start 2.54 2.54) (end 2.54 -2.54) (layer "F.SilkS") (width 0.12) (tstamp 0faa304a-8dd8-49fd-ba2f-dc7b395b816b)) + (fp_line (start -1.7 2.54) (end 2.54 2.54) (layer "F.SilkS") (width 0.12) (tstamp 2f010149-e585-474e-8e85-afd66a47b0d0)) + (fp_line (start 2.54 -2.54) (end -1.7 -2.54) (layer "F.SilkS") (width 0.12) (tstamp b6cb8e35-f936-41a2-9a89-3e08a89c28d7)) + (fp_circle (center -15.38 0) (end -1.5 0) (layer "F.SilkS") (width 0.12) (fill none) (tstamp 60f27f81-8213-4de9-9bca-788f4fc61eaa)) + (fp_line (start 3.4 3.4) (end 3.4 -3.4) (layer "F.CrtYd") (width 0.1) (tstamp 35a3b92b-8da3-408a-977e-884e3abfce7a)) + (fp_line (start -0.82 3.4) (end 3.4 3.4) (layer "F.CrtYd") (width 0.1) (tstamp 3776008f-a422-4ca7-a0d5-a1ed2a7b2ca4)) + (fp_line (start 3.4 -3.4) (end -0.82 -3.4) (layer "F.CrtYd") (width 0.1) (tstamp 8d99d2f4-7043-41f5-9821-9cc7f193a779)) + (fp_circle (center -15.38 0) (end -0.5 0) (layer "F.CrtYd") (width 0.1) (fill none) (tstamp 4d4e2234-51b5-4bb6-ac00-5253922335c0)) + (pad "1" thru_hole circle (at 0 0 90) (size 2 2) (drill oval 1.3 1.2) (layers *.Cu *.Mask) + (net 2 "Net-(BT1-Pad1)") (pinfunction "+") (pintype "passive") (tstamp 4ecea734-16ee-4f5d-bb8b-38316e1ed3dc)) + (pad "2" thru_hole circle (at -20.49 0 90) (size 2 2) (drill 1.3) (layers *.Cu *.Mask) + (net 12 "GND") (pinfunction "-") (pintype "passive") (tstamp 4b4ef7e7-ba84-4b6a-b2fa-bacc4e751d8d)) + ) + + (footprint "fan_monitor:blue_pill" (layer "F.Cu") + (tedit 62261D40) (tstamp 70b621b6-45b5-43cb-9683-d589118723d7) + (at 154.48 68 -90) + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/41fc1c23-edd4-45a5-8036-7f62b013770f") + (attr through_hole) + (fp_text reference "U1" (at 8 -5.02 180) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp f06f5cd7-428e-40b1-957c-1e7ed06e1d3c) + ) + (fp_text value "blue_pill" (at 8.255 14.105 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 55768f67-8190-4a54-a803-2d2eb35d0d8d) + ) + (fp_line (start 9.75 -2.75) (end 5.5 -2.75) (layer "F.SilkS") (width 0.12) (tstamp 0234454a-c8cc-4840-a884-68039305c02b)) + (fp_line (start 16.6 50.3) (end 16.6 -2.5) (layer "F.SilkS") (width 0.12) (tstamp 05a447a4-940a-403d-87f5-58de4b13f7c1)) + (fp_line (start 16.5 -2.5) (end -1.3 -2.5) (layer "F.SilkS") (width 0.12) (tstamp 70f3dc08-e7c0-4e37-8d93-7b715f0e4728)) + (fp_line (start 9.75 0.75) (end 9.75 -2.75) (layer "F.SilkS") (width 0.12) (tstamp 830cca53-7ab7-472d-a6c1-320277983d14)) + (fp_line (start 5.5 0.75) (end 9.75 0.75) (layer "F.SilkS") (width 0.12) (tstamp a58923f3-14e0-4a9d-b745-f5b975c80585)) + (fp_line (start 5.5 -2.75) (end 5.5 0.75) (layer "F.SilkS") (width 0.12) (tstamp b0011b44-71cd-4b07-ad92-7d5930fc02d0)) + (fp_line (start -1.3 -2.5) (end -1.3 50.3) (layer "F.SilkS") (width 0.12) (tstamp b694ae61-3e6f-425d-8619-cfb7f0dd90ae)) + (fp_line (start -1.3 50.3) (end 16.6 50.3) (layer "F.SilkS") (width 0.12) (tstamp dff3e918-9068-451f-802e-dd1d38767090)) + (fp_line (start -3.3 -3) (end 18.6 -3) (layer "F.CrtYd") (width 0.05) (tstamp 1b944565-4b4a-4cf2-a828-052c0a9910cb)) + (fp_line (start 18.6 54) (end -3.3 54) (layer "F.CrtYd") (width 0.05) (tstamp 84301cbd-fc2d-4ace-a10a-9c5a30473916)) + (fp_line (start 18.6 -3) (end 18.6 54) (layer "F.CrtYd") (width 0.05) (tstamp 90912f8c-205b-4043-b1be-0c0d2b92d885)) + (fp_line (start -3.3 -3) (end -3.3 54) (layer "F.CrtYd") (width 0.1) (tstamp ee82339a-7e86-4a56-be79-cdb7297081d6)) + (pad "3V3" thru_hole circle (at 15.24 5.08 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 1 "unconnected-(U1-Pad3V3)") (pinfunction "3.3V") (pintype "power_out+no_connect") (tstamp 991ed5e8-c959-4f78-9a85-e3c878e35f7b)) + (pad "3V3" thru_hole circle (at 0 48.26 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 1 "unconnected-(U1-Pad3V3)") (pinfunction "3.3V") (pintype "power_out+no_connect") (tstamp 9b29a9f2-da06-4027-9345-b06cac5ebe42)) + (pad "5V" thru_hole circle (at 0 43.18 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 13 "+5V") (pinfunction "5V") (pintype "power_out") (tstamp 770eb1d0-d433-4675-a5af-a2df0fd6bdd2)) + (pad "G" thru_hole circle (at 15.24 0 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 12 "GND") (pinfunction "GND") (pintype "power_out") (tstamp 673c264b-115c-40c4-9d65-b15619efd4f1)) + (pad "G" thru_hole circle (at 15.24 2.54 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 12 "GND") (pinfunction "GND") (pintype "power_out") (tstamp a2eab9b7-b601-4197-bcf7-4e3554658445)) + (pad "G" thru_hole circle (at 0 45.72 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 12 "GND") (pinfunction "GND") (pintype "power_out") (tstamp bc0cb692-710c-443b-870a-606da7a0df29)) + (pad "NRST" thru_hole circle (at 15.24 7.62 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 4 "unconnected-(U1-PadNRST)") (pinfunction "RESET") (pintype "input+no_connect") (tstamp 7b6ec761-edfa-4de5-ac0f-a59e5eff5405)) + (pad "PA0" thru_hole circle (at 15.24 38.1 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 36 "TH1-") (pinfunction "PA0") (pintype "bidirectional") (tstamp 318f74bc-1108-4078-b7ab-fbf4fef5c5a9)) + (pad "PA1" thru_hole circle (at 15.24 35.56 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 8 "TH1+") (pinfunction "PA1") (pintype "bidirectional") (tstamp b7bacddf-0f85-42b1-85ea-82aed3836491)) + (pad "PA2" thru_hole circle (at 15.24 33.02 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 46 "TH2-") (pinfunction "PA2") (pintype "bidirectional") (tstamp b7824c34-6a56-4fce-b94b-d647299299c2)) + (pad "PA3" thru_hole circle (at 15.24 30.48 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 9 "TH2+") (pinfunction "PA3") (pintype "bidirectional") (tstamp ccc7c5ac-6d99-430b-905d-46b7ecc50117)) + (pad "PA4" thru_hole circle (at 15.24 27.94 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 48 "THe-") (pinfunction "PA4") (pintype "bidirectional") (tstamp 5b7d8f4a-5b0a-479e-8bbf-50bfe8b1d4a4)) + (pad "PA5" thru_hole circle (at 15.24 25.4 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 24 "THe+") (pinfunction "PA5") (pintype "bidirectional") (tstamp 5443c9c1-8024-4994-be10-3fdf523597a6)) + (pad "PA6" thru_hole circle (at 15.24 22.86 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 10 "unconnected-(U1-PadPA6)") (pinfunction "PA6") (pintype "bidirectional+no_connect") (tstamp 0dad473d-9c94-4c92-93f7-996f8f544da8)) + (pad "PA7" thru_hole circle (at 15.24 20.32 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 11 "unconnected-(U1-PadPA7)") (pinfunction "PA7") (pintype "bidirectional+no_connect") (tstamp 487cc5d4-408f-4ec1-b3e2-5f0047ce6261)) + (pad "PA8" thru_hole circle (at 0 10.16 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 20 "DB0") (pinfunction "PA8") (pintype "bidirectional") (tstamp 8c0db3fb-ca8c-4490-8e75-7c46a2568f20)) + (pad "PA9" thru_hole circle (at 0 12.7 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 16 "R{slash}W") (pinfunction "PA9") (pintype "bidirectional") (tstamp 4d994f70-4a10-4fec-90bf-f77dbfb5781a)) + (pad "PA10" thru_hole circle (at 0 15.24 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 15 "RS") (pinfunction "PA10") (pintype "bidirectional") (tstamp 3605a4ee-201e-4b70-847b-3e4791e63454)) + (pad "PA11" thru_hole circle (at 0 17.78 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 17 "E") (pinfunction "PA11") (pintype "bidirectional") (tstamp 84a00c8e-3eb4-4ea1-ad45-7445ee00e6b3)) + (pad "PA12" thru_hole circle (at 0 20.32 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 21 "DB1") (pinfunction "PA12") (pintype "bidirectional") (tstamp fb7cf49c-c0d3-485c-b201-c9d085939d98)) + (pad "PA15" thru_hole circle (at 0 22.86 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 30 "DB3") (pinfunction "PA15") (pintype "bidirectional") (tstamp ae7a647f-2f0a-4fd1-939d-d64361ae054e)) + (pad "PB0" thru_hole circle (at 15.24 17.78 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 18 "unconnected-(U1-PadPB0)") (pinfunction "PB0") (pintype "bidirectional+no_connect") (tstamp 23faa31c-fbf2-47b7-a91f-aae5b3c1d2cb)) + (pad "PB1" thru_hole circle (at 15.24 15.24 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 19 "unconnected-(U1-PadPB1)") (pinfunction "PB1") (pintype "bidirectional+no_connect") (tstamp c50e9738-3f46-4dba-9260-6e8cef5bb6ea)) + (pad "PB3" thru_hole circle (at 0 25.4 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 32 "DB5") (pinfunction "PB3") (pintype "bidirectional") (tstamp 89e7d7c5-0504-4d39-ad73-5ace18ccce86)) + (pad "PB4" thru_hole circle (at 0 27.94 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 38 "DB7") (pinfunction "PB4") (pintype "bidirectional") (tstamp ebd43c71-0477-476c-8da1-450ef854565f)) + (pad "PB5" thru_hole circle (at 0 30.48 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 22 "unconnected-(U1-PadPB5)") (pinfunction "PB5") (pintype "bidirectional+no_connect") (tstamp eabb30fd-8354-402e-ab9d-5db966de1faf)) + (pad "PB6" thru_hole circle (at 0 33.02 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 44 "Enc_A") (pinfunction "PB6") (pintype "bidirectional") (tstamp 0c9c5ad6-05ae-447c-8ab0-d2cde595afe1)) + (pad "PB7" thru_hole circle (at 0 35.56 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 43 "Enc_B") (pinfunction "PB7") (pintype "bidirectional") (tstamp a5f28953-f0cf-44c7-a205-2a557f0da338)) + (pad "PB8" thru_hole circle (at 0 38.1 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 47 "Switch") (pinfunction "PB8") (pintype "bidirectional") (tstamp e2a35ce5-9343-497f-a5af-13aa3a9b0368)) + (pad "PB9" thru_hole circle (at 0 40.64 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 42 "Backlight") (pinfunction "PB9") (pintype "bidirectional") (tstamp 71023b8d-6fb4-4be5-a63c-f5e5a72790bf)) + (pad "PB10" thru_hole circle (at 15.24 12.7 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 27 "unconnected-(U1-PadPB10)") (pinfunction "PB10") (pintype "bidirectional+no_connect") (tstamp 35852d87-cbc9-4d2d-aaef-e99a74913333)) + (pad "PB11" thru_hole circle (at 15.24 10.16 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 28 "unconnected-(U1-PadPB11)") (pinfunction "PB11") (pintype "bidirectional+no_connect") (tstamp c57aebe1-101f-4a01-b3ae-2a1bc158e368)) + (pad "PB12" thru_hole circle (at 0 0 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 5 "Relay") (pinfunction "PB12") (pintype "bidirectional") (tstamp 404d1f24-42ac-49b3-906a-6834b69617fc)) + (pad "PB13" thru_hole circle (at 0 2.54 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 37 "DB6") (pinfunction "PB13") (pintype "bidirectional") (tstamp abd0b4ec-0021-4d60-900d-abcd05b6b6bc)) + (pad "PB14" thru_hole circle (at 0 5.08 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 31 "DB4") (pinfunction "PB14") (pintype "bidirectional") (tstamp 79eb0acd-97b2-4f3f-8f08-fe7fdd0c080a)) + (pad "PB15" thru_hole circle (at 0 7.62 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 26 "DB2") (pinfunction "PB15") (pintype "bidirectional") (tstamp 9561dc20-65ea-491d-ae72-693ef1edce0c)) + (pad "PC13" thru_hole circle (at 15.24 45.72 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 33 "unconnected-(U1-PadPC13)") (pinfunction "PC13") (pintype "bidirectional+no_connect") (tstamp 43b11c06-c3f4-41de-884a-1de76ace59bf)) + (pad "PC14" thru_hole circle (at 15.24 43.18 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 34 "unconnected-(U1-PadPC14)") (pinfunction "PC14") (pintype "bidirectional+no_connect") (tstamp 58dbbe11-3abb-4b2a-b129-1ca560e8b19a)) + (pad "PC15" thru_hole circle (at 15.24 40.64 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 35 "unconnected-(U1-PadPC15)") (pinfunction "PC15") (pintype "bidirectional+no_connect") (tstamp 085135a7-aca2-4cfc-bd52-f26bd2457895)) + (pad "VBAT" thru_hole circle (at 15.24 48.26 270) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) + (net 49 "Vbat") (pinfunction "Vbat") (pintype "power_in") (tstamp e119e3ad-2dd5-42c8-bf3a-3b836f9aac99)) + ) + + (footprint "Package_TO_SOT_THT:TO-92_Inline" (layer "F.Cu") + (tedit 5A1DD157) (tstamp 7337bbdc-f51e-4d4a-aa18-237b20ed0bd5) + (at 105.27 44.73 -90) + (descr "TO-92 leads in-line, narrow, oval pads, drill 0.75mm (see NXP sot054_po.pdf)") + (tags "to-92 sc-43 sc-43a sot54 PA33 transistor") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/f16e486c-ec75-49e3-b6f1-9e240f4f373f") + (attr through_hole) + (fp_text reference "Q1" (at 1.27 -3.56 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 468aedfb-c47f-46b8-a316-b0fc65cc2bfd) + ) + (fp_text value "BS170" (at 1.27 2.79 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 03a6d4cb-2ab3-4c3c-bb28-d6c0691dffbe) + ) + (fp_text user "${REFERENCE}" (at 1.27 0 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 8f22860c-963b-4da0-905e-cdda7fa0c909) + ) + (fp_line (start -0.53 1.85) (end 3.07 1.85) (layer "F.SilkS") (width 0.12) (tstamp 0bfe19c8-6fc8-461a-921d-8b49cdbaa643)) + (fp_arc (start 1.27 -2.6) (mid 3.672087 -0.994977) (end 3.108478 1.838478) (layer "F.SilkS") (width 0.12) (tstamp a76e48c6-0e80-47fe-9802-4a699d77d629)) + (fp_arc (start -0.568478 1.838478) (mid -1.132087 -0.994977) (end 1.27 -2.6) (layer "F.SilkS") (width 0.12) (tstamp df240c0d-2d4d-4987-a97d-74def30d421b)) + (fp_line (start 4 2.01) (end 4 -2.73) (layer "F.CrtYd") (width 0.05) (tstamp 27214c99-2fe1-45ac-8289-3afb1d0f8fac)) + (fp_line (start -1.46 -2.73) (end -1.46 2.01) (layer "F.CrtYd") (width 0.05) (tstamp 7be66a86-4afa-48c6-b667-cfeada690567)) + (fp_line (start 4 2.01) (end -1.46 2.01) (layer "F.CrtYd") (width 0.05) (tstamp 85d65bb5-b0b2-47d5-9b8e-7d7e7ea65cc7)) + (fp_line (start -1.46 -2.73) (end 4 -2.73) (layer "F.CrtYd") (width 0.05) (tstamp a8683606-6e9c-41a8-b9ab-d79b75a30b43)) + (fp_line (start -0.5 1.75) (end 3 1.75) (layer "F.Fab") (width 0.1) (tstamp d8d9714f-4737-4fe3-b5cf-dd0e6aab9061)) + (fp_arc (start 1.27 -2.48) (mid 3.561221 -0.949055) (end 3.023625 1.753625) (layer "F.Fab") (width 0.1) (tstamp 1683dbf1-a0fb-4333-9aa2-2a6f8134f65e)) + (fp_arc (start -0.483625 1.753625) (mid -1.021221 -0.949055) (end 1.27 -2.48) (layer "F.Fab") (width 0.1) (tstamp 64dc15fb-7663-452d-a413-bfa5856ffc79)) + (pad "1" thru_hole rect (at 0 0 270) (size 1.05 1.5) (drill 0.75) (layers *.Cu *.Mask) + (net 39 "Net-(J1-Pad15)") (pinfunction "D") (pintype "passive") (tstamp 8daf31ce-45dd-41d1-baf0-cd46a07e849d)) + (pad "2" thru_hole oval (at 1.27 0 270) (size 1.05 1.5) (drill 0.75) (layers *.Cu *.Mask) + (net 40 "Net-(Q1-Pad2)") (pinfunction "G") (pintype "input") (tstamp 827fd7a0-2183-4173-aadf-dd0a761aa0cf)) + (pad "3" thru_hole oval (at 2.54 0 270) (size 1.05 1.5) (drill 0.75) (layers *.Cu *.Mask) + (net 12 "GND") (pinfunction "S") (pintype "passive") (tstamp 9762bb61-c599-4e60-8d0c-2448f5c6e0d4)) + (model "${KICAD6_3DMODEL_DIR}/Package_TO_SOT_THT.3dshapes/TO-92_Inline.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "MountingHole:MountingHole_3.2mm_M3_DIN965_Pad" (layer "F.Cu") + (tedit 56D1B4CB) (tstamp 75248bea-b4a2-4f30-a37a-2ab1a8ab58ec) + (at 38 38) + (descr "Mounting Hole 3.2mm, M3, DIN965") + (tags "mounting hole 3.2mm m3 din965") + (attr exclude_from_pos_files exclude_from_bom) + (fp_text reference "M1" (at 0 -3.8) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 4cd3cfcc-9713-4435-ab8d-164c17bdd543) + ) + (fp_text value "MountingHole_3.2mm_M3_DIN965_Pad" (at 0 3.8) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 1c412655-09af-490e-951e-38feb568696e) + ) + (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 38e7c24c-be37-4e48-a4be-794ca1e2a10e) + ) + (fp_circle (center 0 0) (end 2.8 0) (layer "Cmts.User") (width 0.15) (fill none) (tstamp e783505d-3b7e-428c-923b-189d5b05f338)) + (fp_circle (center 0 0) (end 3.05 0) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp e6ca7ff3-c990-46b1-8921-9b7135cbafc2)) + (pad "1" thru_hole circle (at 0 0) (size 5.6 5.6) (drill 3.2) (layers *.Cu *.Mask) (tstamp 13d5171f-9ff7-43b0-85eb-7edfdd59e69a)) + ) + + (footprint "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal" (layer "F.Cu") + (tedit 5B784ED0) (tstamp 950e8466-651a-40da-b19c-94b32e497901) + (at 123 114) + (descr "Generic Phoenix Contact connector footprint for: MC_1,5/2-G-3.5; number of pins: 02; pin pitch: 3.50mm; Angled || order number: 1844210 8A 160V") + (tags "phoenix_contact connector MC_01x02_G_3.5mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/9a6e1c04-f987-4542-80ee-6f35841a05c3") + (attr through_hole) + (fp_text reference "J3" (at 1.75 -3) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp ce334533-2df3-4bbd-887e-2f6fd2eff0c4) + ) + (fp_text value "Conn_01x02" (at 1.75 9.2) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp a2ebfe72-936d-445c-8c27-c75fbac41d0d) + ) + (fp_text user "${REFERENCE}" (at 1.75 -0.5) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 3526360a-2f44-4174-ba02-381b39318542) + ) + (fp_line (start 0.3 -2.6) (end 0 -2) (layer "F.SilkS") (width 0.12) (tstamp 0aa20bd3-1b06-473e-a28d-3ddaf6aee6d1)) + (fp_line (start 6.06 8.11) (end 6.06 -1.31) (layer "F.SilkS") (width 0.12) (tstamp 0cf855fc-c741-406f-8e4e-e0c4fe12f1dc)) + (fp_line (start -2.56 8.11) (end 6.06 8.11) (layer "F.SilkS") (width 0.12) (tstamp 22d98550-cead-4f41-b465-5db4efa5b15a)) + (fp_line (start 0 -2) (end -0.3 -2.6) (layer "F.SilkS") (width 0.12) (tstamp 2f4bda02-18ef-4d54-a889-2f497ac9179c)) + (fp_line (start -2.56 4.8) (end 6.06 4.8) (layer "F.SilkS") (width 0.12) (tstamp 4bbe3046-76bd-49dd-b35e-e983d1721051)) + (fp_line (start -2.56 -1.31) (end -2.56 8.11) (layer "F.SilkS") (width 0.12) (tstamp 5c9f71ee-ab98-4bd6-8b9f-e1f7bcbad90f)) + (fp_line (start -0.3 -2.6) (end 0.3 -2.6) (layer "F.SilkS") (width 0.12) (tstamp 94e02358-71b6-4493-9197-2483c7f61e7c)) + (fp_line (start 1.05 -1.31) (end 2.45 -1.31) (layer "F.SilkS") (width 0.12) (tstamp 98b0e3ad-eae5-4387-b81a-1b6a0762af76)) + (fp_line (start 6.06 -1.31) (end 4.55 -1.31) (layer "F.SilkS") (width 0.12) (tstamp bcd75c44-185e-4643-a3fc-666559dff9b5)) + (fp_line (start -2.56 -1.31) (end -1.05 -1.31) (layer "F.SilkS") (width 0.12) (tstamp ed3c2a03-b6d1-45e6-907a-06153205bccb)) + (fp_line (start 6.45 8.5) (end 6.45 -2.3) (layer "F.CrtYd") (width 0.05) (tstamp 3cb2e071-533c-4bff-9cb8-a5854f723b8b)) + (fp_line (start -3.06 -2.3) (end -3.06 8.5) (layer "F.CrtYd") (width 0.05) (tstamp 4e6f2291-e68e-41a7-8e8a-1e7f44812e08)) + (fp_line (start -3.06 8.5) (end 6.45 8.5) (layer "F.CrtYd") (width 0.05) (tstamp 9eff6431-5bdb-456f-9977-4f82bb81f2c2)) + (fp_line (start 6.45 -2.3) (end -3.06 -2.3) (layer "F.CrtYd") (width 0.05) (tstamp e90000bd-c364-4371-adc9-1949cad3c51a)) + (fp_line (start 0.8 -1.2) (end 0 0) (layer "F.Fab") (width 0.1) (tstamp 1f78a440-3d14-4bfe-9503-6eb08a1c0d75)) + (fp_line (start -2.45 8) (end 5.95 8) (layer "F.Fab") (width 0.1) (tstamp 5ccd2e12-402c-437a-837b-4271ea823d88)) + (fp_line (start -2.45 -1.2) (end -2.45 8) (layer "F.Fab") (width 0.1) (tstamp 65a7ce4f-e403-4f0c-b16a-7f47dd381cd4)) + (fp_line (start 5.95 -1.2) (end -2.45 -1.2) (layer "F.Fab") (width 0.1) (tstamp 947cad03-b83e-4013-ab5d-a1a82917e860)) + (fp_line (start 0 0) (end -0.8 -1.2) (layer "F.Fab") (width 0.1) (tstamp 9b873155-33b0-4f6c-924e-0624f817cb4e)) + (fp_line (start 5.95 8) (end 5.95 -1.2) (layer "F.Fab") (width 0.1) (tstamp e4b53b66-60f0-41ef-a859-cdf41bf632ac)) + (pad "1" thru_hole roundrect (at 0 0) (size 1.8 3.6) (drill 1.2) (layers *.Cu *.Mask) (roundrect_rratio 0.138889) + (net 12 "GND") (pinfunction "Pin_1") (pintype "passive") (tstamp 879514ca-b644-4b78-8ecf-360ba169621d)) + (pad "2" thru_hole oval (at 3.5 0) (size 1.8 3.6) (drill 1.2) (layers *.Cu *.Mask) + (net 9 "TH2+") (pinfunction "Pin_2") (pintype "passive") (tstamp c6807e01-2bdb-4ef5-80fa-b4b33af104d4)) + (model "${KICAD6_3DMODEL_DIR}/Connector_Phoenix_MC.3dshapes/PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal" (layer "F.Cu") + (tedit 5B784ED0) (tstamp 9640fcb3-b62d-4d8c-97c9-30d930de4e82) + (at 42 76 -90) + (descr "Generic Phoenix Contact connector footprint for: MC_1,5/2-G-3.5; number of pins: 02; pin pitch: 3.50mm; Angled || order number: 1844210 8A 160V") + (tags "phoenix_contact connector MC_01x02_G_3.5mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/f00793b6-9de3-4563-a5dd-8810cad7c60e") + (attr through_hole) + (fp_text reference "J6" (at 8 2 180) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 0793bbd1-c5d2-4c26-b61e-c4780cacb801) + ) + (fp_text value "Conn_01x02" (at 1.75 9.2 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 1caee216-bb5c-41cc-a829-3140601a7a4b) + ) + (fp_text user "${REFERENCE}" (at 1.75 -0.5 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 88e601d3-fd03-4287-81b1-784a4433de6f) + ) + (fp_line (start 0.3 -2.6) (end 0 -2) (layer "F.SilkS") (width 0.12) (tstamp 2e3c884c-e8c8-4cb5-a826-0ce92ec20ea9)) + (fp_line (start -2.56 -1.31) (end -2.56 8.11) (layer "F.SilkS") (width 0.12) (tstamp 2e497f17-ebdb-4a57-83fc-f97322c764d2)) + (fp_line (start -2.56 4.8) (end 6.06 4.8) (layer "F.SilkS") (width 0.12) (tstamp 80d3f4a5-1f7a-4fa2-a50b-93ada77f3389)) + (fp_line (start -2.56 -1.31) (end -1.05 -1.31) (layer "F.SilkS") (width 0.12) (tstamp 89a21987-1c86-43f8-b6ce-59425536d4aa)) + (fp_line (start 6.06 -1.31) (end 4.55 -1.31) (layer "F.SilkS") (width 0.12) (tstamp 987ab4e3-6d2f-435b-8d27-cd5e3c9e92e6)) + (fp_line (start -2.56 8.11) (end 6.06 8.11) (layer "F.SilkS") (width 0.12) (tstamp 9a421fda-5e39-4a28-8868-a3b5050692ad)) + (fp_line (start -0.3 -2.6) (end 0.3 -2.6) (layer "F.SilkS") (width 0.12) (tstamp 9fbfacb0-e83e-47be-865d-0e84bacdc3b1)) + (fp_line (start 0 -2) (end -0.3 -2.6) (layer "F.SilkS") (width 0.12) (tstamp a9fda61b-9d9b-4a0b-ba0c-71083d788bec)) + (fp_line (start 6.06 8.11) (end 6.06 -1.31) (layer "F.SilkS") (width 0.12) (tstamp d85cfd30-8864-4063-8d03-e41c5f170dbd)) + (fp_line (start 1.05 -1.31) (end 2.45 -1.31) (layer "F.SilkS") (width 0.12) (tstamp f19079d7-ec01-4cd4-a98e-dbfce4569b04)) + (fp_line (start 6.45 -2.3) (end -3.06 -2.3) (layer "F.CrtYd") (width 0.05) (tstamp 28cbc278-aa45-419a-9f87-0d4291102e7f)) + (fp_line (start -3.06 -2.3) (end -3.06 8.5) (layer "F.CrtYd") (width 0.05) (tstamp 5adfd491-1869-42ad-ae52-d0e38bdfa04d)) + (fp_line (start 6.45 8.5) (end 6.45 -2.3) (layer "F.CrtYd") (width 0.05) (tstamp c870ed2c-d3cf-4502-a176-ad6df90a502b)) + (fp_line (start -3.06 8.5) (end 6.45 8.5) (layer "F.CrtYd") (width 0.05) (tstamp d247f11b-ca41-4c62-b7fe-d8d8c5e8a909)) + (fp_line (start -2.45 -1.2) (end -2.45 8) (layer "F.Fab") (width 0.1) (tstamp 2e62d65b-0511-445f-bf15-06a5d391487c)) + (fp_line (start -2.45 8) (end 5.95 8) (layer "F.Fab") (width 0.1) (tstamp 5a7a2565-8e41-4c47-8fed-ff39bbbc33c8)) + (fp_line (start 5.95 8) (end 5.95 -1.2) (layer "F.Fab") (width 0.1) (tstamp 8998ad92-26ba-4351-a7be-beebfbb27bf3)) + (fp_line (start 0.8 -1.2) (end 0 0) (layer "F.Fab") (width 0.1) (tstamp 8f9b7114-3d1a-4176-8f4b-a61f679da276)) + (fp_line (start 0 0) (end -0.8 -1.2) (layer "F.Fab") (width 0.1) (tstamp d332f250-93db-41e0-93dd-a82c5b480ab5)) + (fp_line (start 5.95 -1.2) (end -2.45 -1.2) (layer "F.Fab") (width 0.1) (tstamp df90487f-2702-46e9-bf06-fc47a860c131)) + (pad "1" thru_hole roundrect (at 0 0 270) (size 1.8 3.6) (drill 1.2) (layers *.Cu *.Mask) (roundrect_rratio 0.138889) + (net 3 "Override") (pinfunction "Pin_1") (pintype "passive") (tstamp 156ac4e6-596a-4945-bff6-fc9fb74f81c4)) + (pad "2" thru_hole oval (at 3.5 0 270) (size 1.8 3.6) (drill 1.2) (layers *.Cu *.Mask) + (net 23 "unconnected-(J6-Pad2)") (pinfunction "Pin_2") (pintype "passive+no_connect") (tstamp 0d4c0a31-1cda-4f7b-bc16-f26639d43f98)) + (model "${KICAD6_3DMODEL_DIR}/Connector_Phoenix_MC.3dshapes/PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Diode_THT:D_DO-201AD_P15.24mm_Horizontal" (layer "F.Cu") + (tedit 5AE50CD5) (tstamp 9bf2b7db-5cbb-4876-a739-bf0c31575890) + (at 92 80.62 90) + (descr "Diode, DO-201AD series, Axial, Horizontal, pin pitch=15.24mm, , length*diameter=9.5*5.2mm^2, , http://www.diodes.com/_files/packages/DO-201AD.pdf") + (tags "Diode DO-201AD series Axial Horizontal pin pitch 15.24mm length 9.5mm diameter 5.2mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/35a7db72-4c10-416f-a118-b17adfc999d2") + (attr through_hole) + (fp_text reference "D2" (at 7.62 -3.72 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp e6728aa7-1573-4652-bad3-4bfb804d0326) + ) + (fp_text value "UF5400" (at 7.62 3.72 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp ffc91b05-6c1f-4945-9fec-83c15c85e307) + ) + (fp_text user "K" (at 0 -2.6 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp a2edc35a-2795-47f8-87ab-37b809165efd) + ) + (fp_text user "${REFERENCE}" (at 8.3325 0 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 0f528f3a-8b74-4518-91f8-9d283fcf2017) + ) + (fp_text user "K" (at 0 -2.6 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp ad4622ac-d88c-49ed-8d01-40d3349078d9) + ) + (fp_line (start 2.75 2.72) (end 12.49 2.72) (layer "F.SilkS") (width 0.12) (tstamp 08f57ebe-804b-42fe-a953-b157135d3340)) + (fp_line (start 4.415 -2.72) (end 4.415 2.72) (layer "F.SilkS") (width 0.12) (tstamp 1d0858e6-f450-4ed6-8928-0c1a501cd4e5)) + (fp_line (start 4.175 -2.72) (end 4.175 2.72) (layer "F.SilkS") (width 0.12) (tstamp 2fb42a77-dd8e-4de7-ac5e-caa334624642)) + (fp_line (start 12.49 2.72) (end 12.49 -2.72) (layer "F.SilkS") (width 0.12) (tstamp 3759b0b7-32c6-47b0-b9aa-fdd191461eb4)) + (fp_line (start 12.49 -2.72) (end 2.75 -2.72) (layer "F.SilkS") (width 0.12) (tstamp 392357ab-79bc-4fd2-ad87-8205ff7f9ba4)) + (fp_line (start 2.75 -2.72) (end 2.75 2.72) (layer "F.SilkS") (width 0.12) (tstamp 501e0fad-75a5-4521-8533-4236d9e2da20)) + (fp_line (start 1.84 0) (end 2.75 0) (layer "F.SilkS") (width 0.12) (tstamp aad79809-80ca-4f60-b18a-06251c12e263)) + (fp_line (start 13.4 0) (end 12.49 0) (layer "F.SilkS") (width 0.12) (tstamp abcfb5d7-fc10-44be-8c3e-f247822d9bc8)) + (fp_line (start 4.295 -2.72) (end 4.295 2.72) (layer "F.SilkS") (width 0.12) (tstamp f8f8883a-21d2-4d80-a1e0-1b56fc30f613)) + (fp_line (start 17.09 2.85) (end 17.09 -2.85) (layer "F.CrtYd") (width 0.05) (tstamp 29140105-aa49-4f6e-bb10-39e81c201a80)) + (fp_line (start -1.85 -2.85) (end -1.85 2.85) (layer "F.CrtYd") (width 0.05) (tstamp 94327374-294f-4eef-b7bd-7fa734a2f903)) + (fp_line (start 17.09 -2.85) (end -1.85 -2.85) (layer "F.CrtYd") (width 0.05) (tstamp a9e7bae9-8ea2-4b40-99c5-a9cacb3bf42e)) + (fp_line (start -1.85 2.85) (end 17.09 2.85) (layer "F.CrtYd") (width 0.05) (tstamp f61f8b15-edf8-4f9a-bad8-e9ad95b2c9d0)) + (fp_line (start 12.37 2.6) (end 12.37 -2.6) (layer "F.Fab") (width 0.1) (tstamp 015c48a9-905a-45e7-a25c-0a2606fec5f5)) + (fp_line (start 4.295 -2.6) (end 4.295 2.6) (layer "F.Fab") (width 0.1) (tstamp 03419385-332d-4a43-9092-b9ebdaacef0d)) + (fp_line (start 4.395 -2.6) (end 4.395 2.6) (layer "F.Fab") (width 0.1) (tstamp 0c44ab45-51e2-4cff-ab01-2bcd7361668f)) + (fp_line (start 15.24 0) (end 12.37 0) (layer "F.Fab") (width 0.1) (tstamp 166ee8cf-2195-4984-a7be-07a63035ac29)) + (fp_line (start 12.37 -2.6) (end 2.87 -2.6) (layer "F.Fab") (width 0.1) (tstamp 17da216b-e861-4cb3-aeef-3b1016bbac5b)) + (fp_line (start 2.87 2.6) (end 12.37 2.6) (layer "F.Fab") (width 0.1) (tstamp 6f6effd4-c1cc-45c7-9a49-81d83fdaa15a)) + (fp_line (start 4.195 -2.6) (end 4.195 2.6) (layer "F.Fab") (width 0.1) (tstamp 7e4d21b9-fec5-4be5-8575-8b6d8d9473cb)) + (fp_line (start 2.87 -2.6) (end 2.87 2.6) (layer "F.Fab") (width 0.1) (tstamp a273ca30-48af-48d9-a068-764b67664ff2)) + (fp_line (start 0 0) (end 2.87 0) (layer "F.Fab") (width 0.1) (tstamp e00600f9-7002-4bda-b6d2-1028f71b3986)) + (pad "1" thru_hole rect (at 0 0 90) (size 3.2 3.2) (drill 1.6) (layers *.Cu *.Mask) + (net 3 "Override") (pinfunction "K") (pintype "passive") (tstamp 705f9018-d8e6-41c2-ae6f-0c2e45e24350)) + (pad "2" thru_hole oval (at 15.24 0 90) (size 3.2 3.2) (drill 1.6) (layers *.Cu *.Mask) + (net 5 "Relay") (pinfunction "A") (pintype "passive") (tstamp 0197ea9d-eb4a-4b45-afaf-61c0a598aca3)) + (model "${KICAD6_3DMODEL_DIR}/Diode_THT.3dshapes/D_DO-201AD_P15.24mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "fan_monitor:HE10-16" (layer "F.Cu") + (tedit 62261CF8) (tstamp a21e13ee-73c0-4aa7-a410-ce75b1d10f6a) + (at 127.35 47.73 180) + (descr "HE10-16 straight connector") + (tags "CONN HE10") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/feca530a-c6c1-4219-b383-a5f1908d3bf8") + (attr through_hole) + (fp_text reference "J1" (at 0.35 -5.27) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 2f2b6c3c-527c-4beb-a8f9-c456a2a820da) + ) + (fp_text value "Val**" (at 6.35 6.73) (layer "F.SilkS") hide + (effects (font (size 1.778 1.778) (thickness 0.3048))) + (tstamp 41afe2a4-d36d-4a09-b63b-20fea666485e) + ) + (fp_line (start 2.54 3.556) (end 2.54 4.318) (layer "F.SilkS") (width 0.12) (tstamp 31e0a92f-ceef-4f90-95b5-0ee12161e0a6)) + (fp_line (start -11.684 2.032) (end -10.414 1.27) (layer "F.SilkS") (width 0.3048) (tstamp 3b69df2a-b235-4832-814d-5f8479769aa0)) + (fp_line (start -12.7 3.556) (end -12.7 -3.556) (layer "F.SilkS") (width 0.12) (tstamp 4fd08da1-8ecb-4575-862a-6751ef841ba9)) + (fp_line (start 12.7 -3.556) (end 12.7 3.556) (layer "F.SilkS") (width 0.12) (tstamp 5e0940c3-f8a7-4d15-9e04-e2b242125e79)) + (fp_line (start -2.54 3.556) (end -12.7 3.556) (layer "F.SilkS") (width 0.12) (tstamp 6b615c63-7ef4-42b4-8147-acc54a302580)) + (fp_line (start -2.54 4.318) (end -2.54 3.556) (layer "F.SilkS") (width 0.12) (tstamp 6d4eefec-e9a7-47c9-bf3a-2617107374ea)) + (fp_line (start -11.684 0.508) (end -11.684 2.032) (layer "F.SilkS") (width 0.3048) (tstamp b097159d-f5f3-4ef9-8bcd-b1c7c514418c)) + (fp_line (start 12.7 3.556) (end 2.54 3.556) (layer "F.SilkS") (width 0.12) (tstamp bfd96bbf-f901-408e-9c49-213444ee42cc)) + (fp_line (start -10.414 1.27) (end -11.684 0.508) (layer "F.SilkS") (width 0.3048) (tstamp e296a7bc-1835-4f6b-99c2-e4a5581c1a0c)) + (fp_line (start -12.7 -3.556) (end 12.7 -3.556) (layer "F.SilkS") (width 0.12) (tstamp eb52b5b4-2363-48e3-8318-178a50fcb449)) + (fp_line (start -2.54 4.318) (end 2.54 4.318) (layer "F.SilkS") (width 0.12) (tstamp fb2ba44f-a4d1-4bd5-94e2-f45af7968cd5)) + (pad "1" thru_hole circle (at -8.89 1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 12 "GND") (pinfunction "Pin_1") (pintype "passive") (tstamp 9a72e6f8-6173-4c01-a6e2-9e4eef2149ee)) + (pad "2" thru_hole circle (at -8.89 -1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 13 "+5V") (pinfunction "Pin_2") (pintype "passive") (tstamp d79b8990-3b4b-4fbf-93d4-b87329fa425a)) + (pad "3" thru_hole circle (at -6.35 1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 14 "Net-(J1-Pad3)") (pinfunction "Pin_3") (pintype "passive") (tstamp b267a918-7ad9-47da-853c-0124e0abe1ab)) + (pad "4" thru_hole circle (at -6.35 -1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 15 "RS") (pinfunction "Pin_4") (pintype "passive") (tstamp 268cab2e-255c-4617-ad5f-d85d029ebe70)) + (pad "5" thru_hole circle (at -3.81 1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 16 "R{slash}W") (pinfunction "Pin_5") (pintype "passive") (tstamp 4a639770-034c-44d0-8ec1-7edb9fc90fd0)) + (pad "6" thru_hole circle (at -3.81 -1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 17 "E") (pinfunction "Pin_6") (pintype "passive") (tstamp 8f9e04bd-96d0-4aa0-93ee-8506dff73fd9)) + (pad "7" thru_hole circle (at -1.27 1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 20 "DB0") (pinfunction "Pin_7") (pintype "passive") (tstamp 56cda4de-583d-4cc5-bcaf-271dbba376f7)) + (pad "8" thru_hole circle (at -1.27 -1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 21 "DB1") (pinfunction "Pin_8") (pintype "passive") (tstamp 4e64ac1f-720a-4d6c-806b-6205f28d9fce)) + (pad "9" thru_hole circle (at 1.27 1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 26 "DB2") (pinfunction "Pin_9") (pintype "passive") (tstamp 53e9ab14-6d63-4fe7-a0aa-81d8ec94d50f)) + (pad "10" thru_hole circle (at 1.27 -1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 30 "DB3") (pinfunction "Pin_10") (pintype "passive") (tstamp 4c8187ec-c781-481a-929b-7dc57a4dbf7c)) + (pad "11" thru_hole circle (at 3.81 1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 31 "DB4") (pinfunction "Pin_11") (pintype "passive") (tstamp 49718e2b-af9f-4bb0-900d-f34a56b977af)) + (pad "12" thru_hole circle (at 3.81 -1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 32 "DB5") (pinfunction "Pin_12") (pintype "passive") (tstamp 3b0d94a7-046c-4a5d-aa95-4671afb2ed43)) + (pad "13" thru_hole circle (at 6.35 1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 37 "DB6") (pinfunction "Pin_13") (pintype "passive") (tstamp c6a6ccf0-8e84-4f37-bf53-f69fc6858d44)) + (pad "14" thru_hole circle (at 6.35 -1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 38 "DB7") (pinfunction "Pin_14") (pintype "passive") (tstamp 626a9aba-7cd5-44fa-a19c-b8cbfc2620cf)) + (pad "15" thru_hole circle (at 8.89 1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 39 "Net-(J1-Pad15)") (pinfunction "Pin_15") (pintype "passive") (tstamp f3f03a99-656a-4d26-bc77-9f25771a56e5)) + (pad "16" thru_hole circle (at 8.89 -1.27 180) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) + (net 13 "+5V") (pinfunction "Pin_16") (pintype "passive") (tstamp 1b0bd2f5-fcd6-417a-bd49-7770b9f0ba79)) + ) + + (footprint "" (layer "F.Cu") + (tedit 0) (tstamp a407b9f5-c9c0-4f56-9a41-642cd87cae56) + (at 158.1 38.1) + (fp_text reference "" (at 0 0) (layer "F.SilkS") + (effects (font (size 1.27 1.27) (thickness 0.15))) + (tstamp 741879e3-3045-40c7-849d-7f437c35ee91) + ) + (fp_text value "" (at 0 0) (layer "F.SilkS") + (effects (font (size 1.27 1.27) (thickness 0.15))) + (tstamp 6ee71a3c-fedb-4cc6-a3c6-f3d6f3ac6767) + ) + (pad "1" thru_hole circle (at 0 0) (size 5.6 5.6) (drill 3.2) (layers *.Cu *.Mask) (tstamp 5ef603f2-8407-4088-9f29-0b64dd4b046f)) + ) + + (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp a54d657b-a2d6-43e9-bcbb-53450e29d7b7) + (at 113 99.19 -90) + (descr "Resistor, Axial_DIN0204 series, Axial, Horizontal, pin pitch=7.62mm, 0.167W, length*diameter=3.6*1.6mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0204 series Axial Horizontal pin pitch 7.62mm 0.167W length 3.6mm diameter 1.6mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/3e74ac15-80d5-4343-b456-b5978edf9eda") + (attr through_hole) + (fp_text reference "R5" (at 3.81 -1.92 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp d2df8ea2-da12-49a4-a5c4-7a04461b6cfe) + ) + (fp_text value "30k" (at 3.81 1.92 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 7207d106-75b8-4ac8-ab04-00202d0ed508) + ) + (fp_text user "${REFERENCE}" (at 3.81 0 90) (layer "F.Fab") + (effects (font (size 0.72 0.72) (thickness 0.108))) + (tstamp 697cfee3-6608-4bfa-a922-36e24f4dc0d2) + ) + (fp_line (start 6.68 0) (end 5.73 0) (layer "F.SilkS") (width 0.12) (tstamp 257d4944-3805-4d9d-99c9-d79525d2b4f0)) + (fp_line (start 1.89 -0.92) (end 1.89 0.92) (layer "F.SilkS") (width 0.12) (tstamp 649d85ac-495d-4353-a9e2-089e3d299478)) + (fp_line (start 5.73 0.92) (end 5.73 -0.92) (layer "F.SilkS") (width 0.12) (tstamp 7ec4a53d-9a63-468c-af81-e0f2e8f046fe)) + (fp_line (start 5.73 -0.92) (end 1.89 -0.92) (layer "F.SilkS") (width 0.12) (tstamp b510f1c5-f2be-4081-ad71-3a72f133e00e)) + (fp_line (start 0.94 0) (end 1.89 0) (layer "F.SilkS") (width 0.12) (tstamp c4fe57e9-fecc-4f6c-bf5b-1df97eec8d12)) + (fp_line (start 1.89 0.92) (end 5.73 0.92) (layer "F.SilkS") (width 0.12) (tstamp e45aaded-774f-481a-8351-d9416f9593b5)) + (fp_line (start 8.57 -1.05) (end -0.95 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 19389836-df3e-4de6-9da9-c30b16df95d3)) + (fp_line (start -0.95 -1.05) (end -0.95 1.05) (layer "F.CrtYd") (width 0.05) (tstamp 1ad311a3-4bbf-46bd-8b71-8279585c2c0c)) + (fp_line (start 8.57 1.05) (end 8.57 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 87251c4a-39e5-4f43-9223-29efc955bab6)) + (fp_line (start -0.95 1.05) (end 8.57 1.05) (layer "F.CrtYd") (width 0.05) (tstamp d186cc99-d767-4631-bc48-8ea3baee9b84)) + (fp_line (start 2.01 -0.8) (end 2.01 0.8) (layer "F.Fab") (width 0.1) (tstamp 1cfdb221-74c6-442a-9ee9-fa2cbcafb77d)) + (fp_line (start 0 0) (end 2.01 0) (layer "F.Fab") (width 0.1) (tstamp 58ee3db8-819f-4f8f-9dba-90e22dd46e60)) + (fp_line (start 5.61 0.8) (end 5.61 -0.8) (layer "F.Fab") (width 0.1) (tstamp 6953fdd9-7899-4dad-bd66-2531bbba9852)) + (fp_line (start 5.61 -0.8) (end 2.01 -0.8) (layer "F.Fab") (width 0.1) (tstamp 98989104-c84f-4639-8adf-add275b0fa71)) + (fp_line (start 2.01 0.8) (end 5.61 0.8) (layer "F.Fab") (width 0.1) (tstamp e1036616-0662-4ad6-8065-632bcd318a6f)) + (fp_line (start 7.62 0) (end 5.61 0) (layer "F.Fab") (width 0.1) (tstamp fe8cb206-5a6f-43b6-aba7-b472f7b7c328)) + (pad "1" thru_hole circle (at 0 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 13 "+5V") (pintype "passive") (tstamp f5a7dfc4-68d4-494a-bd2d-2b6a312eb4ce)) + (pad "2" thru_hole oval (at 7.62 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 8 "TH1+") (pintype "passive") (tstamp 449bda68-d38c-4fb0-8bbe-c7b0ee67cc94)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "" (layer "F.Cu") + (tedit 0) (tstamp a9f58cdf-b35d-4828-9c70-b6de4f003301) + (at 158.1 118.1) + (fp_text reference "" (at 0 0) (layer "F.SilkS") + (effects (font (size 1.27 1.27) (thickness 0.15))) + (tstamp 06b6db7e-5210-41ec-a47b-0127ebbe0786) + ) + (fp_text value "" (at 0 0) (layer "F.SilkS") + (effects (font (size 1.27 1.27) (thickness 0.15))) + (tstamp 3f9f133b-59b8-4791-b0ab-6fa861da9e3f) + ) + (pad "1" thru_hole circle (at 0 0) (size 5.6 5.6) (drill 3.2) (layers *.Cu *.Mask) (tstamp dd4f23cd-8f89-457c-8b93-3828f8c20a8d)) + ) + + (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp b7fccf80-c96e-4662-a6ea-d51eab40b241) + (at 145 99.19 -90) + (descr "Resistor, Axial_DIN0204 series, Axial, Horizontal, pin pitch=7.62mm, 0.167W, length*diameter=3.6*1.6mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0204 series Axial Horizontal pin pitch 7.62mm 0.167W length 3.6mm diameter 1.6mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/e387ecc7-181a-4232-b5cc-8a3a5ffd88eb") + (attr through_hole) + (fp_text reference "R15" (at 3.81 -1.92 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 7441581f-1efd-4c69-bdb0-17301ca3df5f) + ) + (fp_text value "30k" (at 3.81 1.92 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 487e6742-779f-4a63-93a9-9bcac056c9fb) + ) + (fp_text user "${REFERENCE}" (at 3.81 0 90) (layer "F.Fab") + (effects (font (size 0.72 0.72) (thickness 0.108))) + (tstamp 02166ba0-b23b-4884-9879-5129cf13e23f) + ) + (fp_line (start 0.94 0) (end 1.89 0) (layer "F.SilkS") (width 0.12) (tstamp 2bc63e96-2c92-47a6-a81d-039d723fefdc)) + (fp_line (start 5.73 -0.92) (end 1.89 -0.92) (layer "F.SilkS") (width 0.12) (tstamp 53671148-da25-4786-aa5e-f817dc66af98)) + (fp_line (start 1.89 0.92) (end 5.73 0.92) (layer "F.SilkS") (width 0.12) (tstamp b4b1dc63-47ad-4b1a-9b6e-9c6c17dbc8fa)) + (fp_line (start 6.68 0) (end 5.73 0) (layer "F.SilkS") (width 0.12) (tstamp e9bc383d-4568-4e55-a3a7-60dd5cdaeaf3)) + (fp_line (start 1.89 -0.92) (end 1.89 0.92) (layer "F.SilkS") (width 0.12) (tstamp ea0a916c-7974-441c-aa06-1826be29f140)) + (fp_line (start 5.73 0.92) (end 5.73 -0.92) (layer "F.SilkS") (width 0.12) (tstamp ec9ad2c4-9a91-4a8e-af23-acd2addba3ac)) + (fp_line (start 8.57 -1.05) (end -0.95 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 51c4cbfd-bd2f-44c8-8c88-596b2641fc4b)) + (fp_line (start -0.95 -1.05) (end -0.95 1.05) (layer "F.CrtYd") (width 0.05) (tstamp 7c9f8f3e-699d-411e-87e5-f43867901b2a)) + (fp_line (start -0.95 1.05) (end 8.57 1.05) (layer "F.CrtYd") (width 0.05) (tstamp b7010b9b-5f32-492b-9168-f13802e24324)) + (fp_line (start 8.57 1.05) (end 8.57 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp edf4316a-62bf-4e58-a472-30c50ad75692)) + (fp_line (start 2.01 -0.8) (end 2.01 0.8) (layer "F.Fab") (width 0.1) (tstamp 1b32a32d-67f5-4442-aa2c-4e8ff8b270a5)) + (fp_line (start 5.61 -0.8) (end 2.01 -0.8) (layer "F.Fab") (width 0.1) (tstamp 387c85f3-3242-4375-8c6d-7014a1f517ca)) + (fp_line (start 0 0) (end 2.01 0) (layer "F.Fab") (width 0.1) (tstamp 42a987e0-81ad-4365-a378-cf19c2572d2b)) + (fp_line (start 7.62 0) (end 5.61 0) (layer "F.Fab") (width 0.1) (tstamp 53ed5758-eba0-4e07-a512-c43a2385e51d)) + (fp_line (start 5.61 0.8) (end 5.61 -0.8) (layer "F.Fab") (width 0.1) (tstamp 555d7203-89e7-4f91-ae2e-607e7232bb58)) + (fp_line (start 2.01 0.8) (end 5.61 0.8) (layer "F.Fab") (width 0.1) (tstamp ecf54061-197d-4de8-a975-e6386d96f2cf)) + (pad "1" thru_hole circle (at 0 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 13 "+5V") (pintype "passive") (tstamp 56df9224-2ba5-4a9b-a15f-fc959bcc55fa)) + (pad "2" thru_hole oval (at 7.62 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 24 "THe+") (pintype "passive") (tstamp 6da57c05-57b2-4b28-a962-424436336469)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp c02cdfb8-a180-400f-9df1-5dcd40869495) + (at 141 99.19 -90) + (descr "Resistor, Axial_DIN0204 series, Axial, Horizontal, pin pitch=7.62mm, 0.167W, length*diameter=3.6*1.6mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0204 series Axial Horizontal pin pitch 7.62mm 0.167W length 3.6mm diameter 1.6mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/d301fabf-fb4d-4174-9911-746839351c38") + (attr through_hole) + (fp_text reference "R13" (at 3.81 -1.92 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp e3459948-c0ea-4484-82e3-8017cd078251) + ) + (fp_text value "30k" (at 3.81 1.92 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 06e33704-a08c-4369-9bb2-6b9f0c8e28fa) + ) + (fp_text user "${REFERENCE}" (at 3.81 0 90) (layer "F.Fab") + (effects (font (size 0.72 0.72) (thickness 0.108))) + (tstamp e76ce0a5-6e07-4b78-b9ed-329adccab463) + ) + (fp_line (start 5.73 0.92) (end 5.73 -0.92) (layer "F.SilkS") (width 0.12) (tstamp 1f77f1d6-dc24-4f92-9ca0-2c9c6aaa443f)) + (fp_line (start 6.68 0) (end 5.73 0) (layer "F.SilkS") (width 0.12) (tstamp 38616388-a199-48e6-a0fe-4f6086e3e4d8)) + (fp_line (start 1.89 -0.92) (end 1.89 0.92) (layer "F.SilkS") (width 0.12) (tstamp 3f79752e-15d1-447e-857b-a3f620ec6c57)) + (fp_line (start 5.73 -0.92) (end 1.89 -0.92) (layer "F.SilkS") (width 0.12) (tstamp 7e6611af-ef8f-4178-af83-a6e3819818f5)) + (fp_line (start 1.89 0.92) (end 5.73 0.92) (layer "F.SilkS") (width 0.12) (tstamp 9f391534-590a-49fc-8d57-069f4158c02a)) + (fp_line (start 0.94 0) (end 1.89 0) (layer "F.SilkS") (width 0.12) (tstamp ce9b998a-7049-46f2-b657-7c61e1bbcea0)) + (fp_line (start 8.57 1.05) (end 8.57 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 32e1bcb4-59a4-457f-b2c0-602f8eed6faa)) + (fp_line (start 8.57 -1.05) (end -0.95 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 5d195067-0153-4848-90e1-f631146437a5)) + (fp_line (start -0.95 -1.05) (end -0.95 1.05) (layer "F.CrtYd") (width 0.05) (tstamp a2ade0fa-3d65-49f4-8053-92d2b6c8a638)) + (fp_line (start -0.95 1.05) (end 8.57 1.05) (layer "F.CrtYd") (width 0.05) (tstamp e6101a7d-1d62-4b00-9914-c282a6343b25)) + (fp_line (start 7.62 0) (end 5.61 0) (layer "F.Fab") (width 0.1) (tstamp 3a6d2a6d-5b53-4335-8e5c-03df3efc3d94)) + (fp_line (start 2.01 0.8) (end 5.61 0.8) (layer "F.Fab") (width 0.1) (tstamp 3c8cf1ab-ba39-42ad-bdf4-345404b8fb9f)) + (fp_line (start 5.61 -0.8) (end 2.01 -0.8) (layer "F.Fab") (width 0.1) (tstamp 735b33cf-4ec4-46d0-aec3-631ba05e88ef)) + (fp_line (start 5.61 0.8) (end 5.61 -0.8) (layer "F.Fab") (width 0.1) (tstamp 81cf7af5-60d2-423d-8e9f-029f0a8e3d76)) + (fp_line (start 2.01 -0.8) (end 2.01 0.8) (layer "F.Fab") (width 0.1) (tstamp d50ef9aa-874f-4b9c-9fbd-672fad9b65ea)) + (fp_line (start 0 0) (end 2.01 0) (layer "F.Fab") (width 0.1) (tstamp e35a4570-127f-482c-ad66-3cf25fda4445)) + (pad "1" thru_hole circle (at 0 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 13 "+5V") (pintype "passive") (tstamp a4fe31b9-6670-46db-be7b-a79ac9ea36e1)) + (pad "2" thru_hole oval (at 7.62 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 48 "THe-") (pintype "passive") (tstamp 466e5fac-b915-4eb8-8c5c-cc6cfa67b4bf)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal" (layer "F.Cu") + (tedit 5B784ED0) (tstamp c1ec815a-c418-4281-b1d3-404c84149c77) + (at 42 89 -90) + (descr "Generic Phoenix Contact connector footprint for: MC_1,5/2-G-3.5; number of pins: 02; pin pitch: 3.50mm; Angled || order number: 1844210 8A 160V") + (tags "phoenix_contact connector MC_01x02_G_3.5mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/442cee4f-59b9-413a-9eb0-b0d5464ec054") + (attr through_hole) + (fp_text reference "J4" (at 8 2 180) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 7b889656-c34f-4195-9598-468cd3b91dec) + ) + (fp_text value "Conn_01x02" (at 1.75 9.2 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 125153c9-ac40-4ca9-9864-b4acea714fdd) + ) + (fp_text user "${REFERENCE}" (at 1.75 -0.5 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 3f9b5c71-577b-478c-8ccc-3f364f5401ca) + ) + (fp_line (start -2.56 -1.31) (end -2.56 8.11) (layer "F.SilkS") (width 0.12) (tstamp 2c7033b2-854f-48bb-b2d3-7505f7670ff0)) + (fp_line (start -2.56 8.11) (end 6.06 8.11) (layer "F.SilkS") (width 0.12) (tstamp 2ca78716-4cc4-4969-8f66-6c00d9a6b127)) + (fp_line (start 6.06 -1.31) (end 4.55 -1.31) (layer "F.SilkS") (width 0.12) (tstamp 387b5313-abee-4d57-b4e5-260c11652812)) + (fp_line (start -2.56 4.8) (end 6.06 4.8) (layer "F.SilkS") (width 0.12) (tstamp 3dad73ce-0514-4014-98b9-ed39dcb468d3)) + (fp_line (start 0.3 -2.6) (end 0 -2) (layer "F.SilkS") (width 0.12) (tstamp 8aaf42a9-a2c7-4170-92ee-4ed059de5789)) + (fp_line (start -2.56 -1.31) (end -1.05 -1.31) (layer "F.SilkS") (width 0.12) (tstamp 9a43815f-db84-4a7a-94cb-f4654dc71030)) + (fp_line (start 6.06 8.11) (end 6.06 -1.31) (layer "F.SilkS") (width 0.12) (tstamp a381cc7e-2eb7-41e5-8a06-62baf4a1d6b8)) + (fp_line (start -0.3 -2.6) (end 0.3 -2.6) (layer "F.SilkS") (width 0.12) (tstamp aa493613-023b-4c8d-b868-e32ae9261d4b)) + (fp_line (start 1.05 -1.31) (end 2.45 -1.31) (layer "F.SilkS") (width 0.12) (tstamp c8cd929c-5db3-4fdd-a034-7bb46e1e2b10)) + (fp_line (start 0 -2) (end -0.3 -2.6) (layer "F.SilkS") (width 0.12) (tstamp f0f435e1-78d9-437b-9613-422c2ee54c84)) + (fp_line (start 6.45 -2.3) (end -3.06 -2.3) (layer "F.CrtYd") (width 0.05) (tstamp 3bcf5fd9-ba17-4d57-8661-6e1de96f1ad1)) + (fp_line (start -3.06 -2.3) (end -3.06 8.5) (layer "F.CrtYd") (width 0.05) (tstamp 509560b6-ceda-49e0-8aac-bb9b86c66d73)) + (fp_line (start -3.06 8.5) (end 6.45 8.5) (layer "F.CrtYd") (width 0.05) (tstamp 9ef29c71-4a9c-40b4-a6db-fe351681bdac)) + (fp_line (start 6.45 8.5) (end 6.45 -2.3) (layer "F.CrtYd") (width 0.05) (tstamp cc07c359-12e2-4564-87fe-013a8e9a0bb6)) + (fp_line (start 5.95 -1.2) (end -2.45 -1.2) (layer "F.Fab") (width 0.1) (tstamp 09de316a-aa57-4cc9-9441-636e1788fe46)) + (fp_line (start 0.8 -1.2) (end 0 0) (layer "F.Fab") (width 0.1) (tstamp b17a264f-14cc-4404-a791-4dfe22b0e936)) + (fp_line (start -2.45 8) (end 5.95 8) (layer "F.Fab") (width 0.1) (tstamp b5170b03-8049-4990-b64e-6d5794ff4b11)) + (fp_line (start 5.95 8) (end 5.95 -1.2) (layer "F.Fab") (width 0.1) (tstamp c50456a3-27eb-4a2a-9bab-b9c7c75bdbfb)) + (fp_line (start 0 0) (end -0.8 -1.2) (layer "F.Fab") (width 0.1) (tstamp f19bc018-bced-493b-9414-daad3530653d)) + (fp_line (start -2.45 -1.2) (end -2.45 8) (layer "F.Fab") (width 0.1) (tstamp f8bf277f-7ca5-4db0-935e-b34c8bed885d)) + (pad "1" thru_hole roundrect (at 0 0 270) (size 1.8 3.6) (drill 1.2) (layers *.Cu *.Mask) (roundrect_rratio 0.138889) + (net 50 "Net-(J4-Pad1)") (pinfunction "Pin_1") (pintype "passive") (tstamp ff1a77ce-8c14-47bb-b8d0-4f72e37873c4)) + (pad "2" thru_hole oval (at 3.5 0 270) (size 1.8 3.6) (drill 1.2) (layers *.Cu *.Mask) + (net 12 "GND") (pinfunction "Pin_2") (pintype "passive") (tstamp d6c5fd90-698a-49c7-98d1-938cc8948cfc)) + (model "${KICAD6_3DMODEL_DIR}/Connector_Phoenix_MC.3dshapes/PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp cbbad1fd-b6a5-4818-8be9-1a55489a3167) + (at 125 99.38 -90) + (descr "Resistor, Axial_DIN0204 series, Axial, Horizontal, pin pitch=7.62mm, 0.167W, length*diameter=3.6*1.6mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0204 series Axial Horizontal pin pitch 7.62mm 0.167W length 3.6mm diameter 1.6mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/e7ecb368-009e-4882-9aaf-33cd420e4678") + (attr through_hole) + (fp_text reference "R8" (at 3.81 -1.92 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp ede871d6-fd5b-4757-b2e1-1403bfa68714) + ) + (fp_text value "30k" (at 3.81 1.92 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp cf726eca-8746-4e03-aeb5-961e15d39e53) + ) + (fp_text user "${REFERENCE}" (at 3.81 0 90) (layer "F.Fab") + (effects (font (size 0.72 0.72) (thickness 0.108))) + (tstamp 27244f3c-8448-4228-acce-09f7ededc457) + ) + (fp_line (start 0.94 0) (end 1.89 0) (layer "F.SilkS") (width 0.12) (tstamp 2aefb0f4-844b-4947-a6fe-b18fc1403104)) + (fp_line (start 5.73 0.92) (end 5.73 -0.92) (layer "F.SilkS") (width 0.12) (tstamp 6ab3d924-dcd8-4771-b501-ba9ae2e1e8b0)) + (fp_line (start 1.89 -0.92) (end 1.89 0.92) (layer "F.SilkS") (width 0.12) (tstamp 702ddc21-96be-43ab-9062-b195e6f72ffb)) + (fp_line (start 5.73 -0.92) (end 1.89 -0.92) (layer "F.SilkS") (width 0.12) (tstamp 7de5b3b3-fbc4-409a-9f33-31458c0bcaf9)) + (fp_line (start 6.68 0) (end 5.73 0) (layer "F.SilkS") (width 0.12) (tstamp d1a576fe-dfe8-4f08-903f-cdeceb0a36bc)) + (fp_line (start 1.89 0.92) (end 5.73 0.92) (layer "F.SilkS") (width 0.12) (tstamp da2461a3-fe15-4d73-a5e6-8b1109a9664c)) + (fp_line (start 8.57 1.05) (end 8.57 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 204981df-d16f-4587-ba85-eb6d13407de7)) + (fp_line (start -0.95 -1.05) (end -0.95 1.05) (layer "F.CrtYd") (width 0.05) (tstamp 2709dbf8-24f1-4cc2-83d5-846bcb78e9e6)) + (fp_line (start 8.57 -1.05) (end -0.95 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 28ab9fad-1831-4c9b-a9e9-202d673c6b96)) + (fp_line (start -0.95 1.05) (end 8.57 1.05) (layer "F.CrtYd") (width 0.05) (tstamp ec3b2b65-3e37-4648-9e4c-fd201bce82f6)) + (fp_line (start 7.62 0) (end 5.61 0) (layer "F.Fab") (width 0.1) (tstamp 21abb2d2-a7a6-45fd-a3d8-852d8cf86fee)) + (fp_line (start 2.01 -0.8) (end 2.01 0.8) (layer "F.Fab") (width 0.1) (tstamp 3ac1eaf8-6d36-4ce0-80e2-c553279a0d8d)) + (fp_line (start 5.61 -0.8) (end 2.01 -0.8) (layer "F.Fab") (width 0.1) (tstamp 99bc3af8-bf50-468d-b0e6-55a96810cf3c)) + (fp_line (start 0 0) (end 2.01 0) (layer "F.Fab") (width 0.1) (tstamp ad4d059e-3d70-4587-bda8-5b3f2a4e10ff)) + (fp_line (start 2.01 0.8) (end 5.61 0.8) (layer "F.Fab") (width 0.1) (tstamp ccb7736e-9b1d-40e1-b18a-335085c434df)) + (fp_line (start 5.61 0.8) (end 5.61 -0.8) (layer "F.Fab") (width 0.1) (tstamp f8e8a077-7cd9-44ab-9a98-7e95a7a3c2d1)) + (pad "1" thru_hole circle (at 0 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 13 "+5V") (pintype "passive") (tstamp bf8b12b3-a712-4af8-aafe-85d68f549c09)) + (pad "2" thru_hole oval (at 7.62 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 46 "TH2-") (pintype "passive") (tstamp a6b9e776-9642-4815-a87d-1b2c2a5111cf)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Diode_SMD:D_SOD-323_HandSoldering" (layer "F.Cu") + (tedit 58641869) (tstamp d7e984bc-17c1-4ee5-860e-898d91f4a764) + (at 103 89 180) + (descr "SOD-323") + (tags "SOD-323") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/ea920653-d3ef-41d8-816c-663402544dc1") + (attr smd) + (fp_text reference "D1" (at 0 -1.85) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 92856668-4fce-4bc1-8ebd-90cec707dd69) + ) + (fp_text value "1SS315" (at 0.1 1.9) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 2b63007e-672d-4988-a3c3-053a1195ee7e) + ) + (fp_text user "${REFERENCE}" (at 0 -1.85) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 8d0740f4-89ea-4be2-9c44-dd1f472ab23f) + ) + (fp_line (start -1.9 -0.85) (end 1.25 -0.85) (layer "F.SilkS") (width 0.12) (tstamp 66e82c20-8d9f-4f14-a630-0bd8cb0f60f5)) + (fp_line (start -1.9 -0.85) (end -1.9 0.85) (layer "F.SilkS") (width 0.12) (tstamp b153e292-dc9d-4f8b-a3c1-6f2ec9c8d2a5)) + (fp_line (start -1.9 0.85) (end 1.25 0.85) (layer "F.SilkS") (width 0.12) (tstamp df7cbeee-a033-4c78-a501-5c2412936b8b)) + (fp_line (start 2 -0.95) (end 2 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 7347d474-80d8-4923-bf10-5e22a237e97d)) + (fp_line (start -2 -0.95) (end -2 0.95) (layer "F.CrtYd") (width 0.05) (tstamp 74e267c1-e376-4af8-b6b9-0ed1d9afffd2)) + (fp_line (start -2 -0.95) (end 2 -0.95) (layer "F.CrtYd") (width 0.05) (tstamp 980b2177-f855-410d-b978-29dbee1606b0)) + (fp_line (start -2 0.95) (end 2 0.95) (layer "F.CrtYd") (width 0.05) (tstamp b9ec2df6-76cd-422f-ba58-29476a3693a8)) + (fp_line (start 0.2 0.35) (end -0.3 0) (layer "F.Fab") (width 0.1) (tstamp 3fccda2b-6191-46f6-9165-4aeda57adbd0)) + (fp_line (start 0.9 -0.7) (end 0.9 0.7) (layer "F.Fab") (width 0.1) (tstamp 498714ef-1168-45dc-9f4c-ce9d85b70d96)) + (fp_line (start -0.9 -0.7) (end 0.9 -0.7) (layer "F.Fab") (width 0.1) (tstamp 659e1d81-ee93-4802-a88d-b2f60d57e502)) + (fp_line (start 0.2 -0.35) (end 0.2 0.35) (layer "F.Fab") (width 0.1) (tstamp 945c019a-61c6-488e-a286-3e4c3b793d8c)) + (fp_line (start 0.9 0.7) (end -0.9 0.7) (layer "F.Fab") (width 0.1) (tstamp a8d2d4a8-d190-487b-9189-07d64b286da3)) + (fp_line (start -0.9 0.7) (end -0.9 -0.7) (layer "F.Fab") (width 0.1) (tstamp d092f2d5-a194-410c-9b49-f2eefe8fcd4e)) + (fp_line (start -0.3 0) (end -0.5 0) (layer "F.Fab") (width 0.1) (tstamp d6e9299a-6852-4ed4-bf33-db5c1b9e7098)) + (fp_line (start 0.2 0) (end 0.45 0) (layer "F.Fab") (width 0.1) (tstamp eaedcfba-182f-420f-8b54-d4d6036ba135)) + (fp_line (start -0.3 -0.35) (end -0.3 0.35) (layer "F.Fab") (width 0.1) (tstamp f4264b4a-9f1b-43af-8974-4531563f62b8)) + (fp_line (start -0.3 0) (end 0.2 -0.35) (layer "F.Fab") (width 0.1) (tstamp f7b0136b-db33-4341-8ac2-27563d561811)) + (pad "1" smd rect (at -1.25 0 180) (size 1 1) (layers "F.Cu" "F.Paste" "F.Mask") + (net 49 "Vbat") (pinfunction "K") (pintype "passive") (tstamp 7b7c5ef0-28c5-452e-bd35-1635310a8cec)) + (pad "2" smd rect (at 1.25 0 180) (size 1 1) (layers "F.Cu" "F.Paste" "F.Mask") + (net 2 "Net-(BT1-Pad1)") (pinfunction "A") (pintype "passive") (tstamp 1fe12374-74c1-4a3b-b2b5-1b9c31a50c8b)) + (model "${KICAD6_3DMODEL_DIR}/Diode_SMD.3dshapes/D_SOD-323.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (layer "F.Cu") + (tedit 5AE5139B) (tstamp d888099a-bddc-4a07-a668-eaff9a01795e) + (at 129 99.38 -90) + (descr "Resistor, Axial_DIN0204 series, Axial, Horizontal, pin pitch=7.62mm, 0.167W, length*diameter=3.6*1.6mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0204 series Axial Horizontal pin pitch 7.62mm 0.167W length 3.6mm diameter 1.6mm") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/8e313960-99d3-4b62-bdde-41a4dd2b5445") + (attr through_hole) + (fp_text reference "R11" (at 3.81 -1.92 90) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 74c9f798-f3f4-4451-9a9b-e3a7bd142194) + ) + (fp_text value "30k" (at 3.81 1.92 90) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp e0199916-0381-4a29-a3ae-a9c43b12150d) + ) + (fp_text user "${REFERENCE}" (at 3.81 0 90) (layer "F.Fab") + (effects (font (size 0.72 0.72) (thickness 0.108))) + (tstamp 705e7295-ae54-42a9-9def-b213322e3656) + ) + (fp_line (start 1.89 0.92) (end 5.73 0.92) (layer "F.SilkS") (width 0.12) (tstamp 799589ac-883b-4ed7-abce-17a3844023da)) + (fp_line (start 0.94 0) (end 1.89 0) (layer "F.SilkS") (width 0.12) (tstamp 91481acc-8e1d-4a44-9645-aba3459b1012)) + (fp_line (start 1.89 -0.92) (end 1.89 0.92) (layer "F.SilkS") (width 0.12) (tstamp 9d113af2-5370-4575-a106-9593b4cba8eb)) + (fp_line (start 5.73 0.92) (end 5.73 -0.92) (layer "F.SilkS") (width 0.12) (tstamp b4b74557-a731-4717-a353-cc126f8120d4)) + (fp_line (start 5.73 -0.92) (end 1.89 -0.92) (layer "F.SilkS") (width 0.12) (tstamp f063d825-296f-409d-9e8d-115e70200c04)) + (fp_line (start 6.68 0) (end 5.73 0) (layer "F.SilkS") (width 0.12) (tstamp f1e68960-207d-4e96-a8e8-726eb38fb62b)) + (fp_line (start 8.57 1.05) (end 8.57 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 7098e6b5-f11f-4b1f-9457-1637077476f3)) + (fp_line (start 8.57 -1.05) (end -0.95 -1.05) (layer "F.CrtYd") (width 0.05) (tstamp 9e387e31-89d9-421b-b919-5885deddaef1)) + (fp_line (start -0.95 1.05) (end 8.57 1.05) (layer "F.CrtYd") (width 0.05) (tstamp c931175e-9a7e-4097-bfcc-8dffbb0abcf3)) + (fp_line (start -0.95 -1.05) (end -0.95 1.05) (layer "F.CrtYd") (width 0.05) (tstamp dabcbf50-83b8-408e-8e18-d123e0014890)) + (fp_line (start 5.61 0.8) (end 5.61 -0.8) (layer "F.Fab") (width 0.1) (tstamp 0afe28e8-b023-4fd3-95e4-4fce957ff05d)) + (fp_line (start 7.62 0) (end 5.61 0) (layer "F.Fab") (width 0.1) (tstamp 1a2d0ec7-150d-4303-a345-572a0d506d18)) + (fp_line (start 2.01 -0.8) (end 2.01 0.8) (layer "F.Fab") (width 0.1) (tstamp 1c1ab38a-9f18-4d5b-afc9-7e3c85f118d0)) + (fp_line (start 0 0) (end 2.01 0) (layer "F.Fab") (width 0.1) (tstamp cda0c441-9573-4866-8799-49a41f94029d)) + (fp_line (start 2.01 0.8) (end 5.61 0.8) (layer "F.Fab") (width 0.1) (tstamp e3d4255e-fb4e-4224-8d7c-193a3271e85f)) + (fp_line (start 5.61 -0.8) (end 2.01 -0.8) (layer "F.Fab") (width 0.1) (tstamp f72bc892-a0db-4939-9792-ddcb982f6cec)) + (pad "1" thru_hole circle (at 0 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 13 "+5V") (pintype "passive") (tstamp d06c57bb-f281-47de-b17c-69c56299fa48)) + (pad "2" thru_hole oval (at 7.62 0 270) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 9 "TH2+") (pintype "passive") (tstamp 7d3c671f-1ce0-477a-a967-85fe5a93cd43)) + (model "${KICAD6_3DMODEL_DIR}/Resistor_THT.3dshapes/R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal.wrl" + (offset (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (footprint "fan_monitor:RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm" (layer "B.Cu") + (tedit 6220DEE8) (tstamp 042b91e9-2272-471e-ba73-3608423fd858) + (at 48.1 48.1 180) + (descr "Alps rotary encoder, EC12E... with switch, vertical shaft, http://www.alps.com/prod/info/E/HTML/Encoder/Incremental/EC12E/EC12E1240405.html & http://cdn-reichelt.de/documents/datenblatt/F100/402097STEC12E08.PDF") + (tags "rotary encoder") + (property "Sheetfile" "fan_monitor.kicad_sch") + (property "Sheetname" "") + (path "/268a0bd8-e906-400f-9772-df2f797701c6") + (attr through_hole) + (fp_text reference "SW1" (at -4.7 7.2) (layer "B.SilkS") + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + (tstamp 8eddeab8-b54e-430c-a791-4650c4fabd0d) + ) + (fp_text value "RotaryEncoder_Switch" (at 0 -7.9) (layer "B.Fab") + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + (tstamp f5c602f4-af03-4224-88f8-d051184c6dc4) + ) + (fp_text user "${REFERENCE}" (at 4 -4.1) (layer "B.Fab") + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + (tstamp 88665049-b8d1-4ee4-a7e6-eb49ac7ef767) + ) + (fp_line (start 6.7 6.3) (end 6.7 3.7) (layer "B.SilkS") (width 0.12) (tstamp 047b43ad-4682-4a94-bf82-2f85491f7c7f)) + (fp_line (start -6.7 6.3) (end -6.7 3.8) (layer "B.SilkS") (width 0.12) (tstamp 10c28d81-6c62-467e-a7b0-a581130b3a79)) + (fp_line (start -7.8 4.1) (end -7.2 4.1) (layer "B.SilkS") (width 0.12) (tstamp 6d66bd04-7b0b-46e2-b10b-9481cf04376e)) + (fp_line (start -1.8 -6.3) (end -6.7 -6.3) (layer "B.SilkS") (width 0.12) (tstamp 715ba044-e26b-4978-925c-184310a1f063)) + (fp_line (start 6.7 -3.7) (end 6.7 -6.3) (layer "B.SilkS") (width 0.12) (tstamp 7babce8c-e374-425f-b9e1-5f3377caad9c)) + (fp_line (start 6.7 -6.3) (end 1.8 -6.3) (layer "B.SilkS") (width 0.12) (tstamp 84f6a074-547c-47b8-8d9e-630fb8f05d8d)) + (fp_line (start -7.5 3.8) (end -7.8 4.1) (layer "B.SilkS") (width 0.12) (tstamp 89be8e14-a03a-4b62-93dd-9b43057b837d)) + (fp_line (start 0 0.5) (end 0 -0.5) (layer "B.SilkS") (width 0.12) (tstamp 8ceeb3b7-206d-408a-bb30-340f8b78d29c)) + (fp_line (start 6.7 1.3) (end 6.7 -1.3) (layer "B.SilkS") (width 0.12) (tstamp 96da908c-aebc-40ba-9344-d17397115150)) + (fp_line (start 1.8 6.3) (end 6.7 6.3) (layer "B.SilkS") (width 0.12) (tstamp b7218672-7bab-4b3d-93dd-e9ed9a165212)) + (fp_line (start -7.2 4.1) (end -7.5 3.8) (layer "B.SilkS") (width 0.12) (tstamp ea8e8e76-a900-4f85-837e-cbb0c4393804)) + (fp_line (start -6.7 -6.3) (end -6.7 -3.5) (layer "B.SilkS") (width 0.12) (tstamp f5a22ddb-1209-4c85-a64a-011ab6410fdb)) + (fp_line (start -1.9 6.3) (end -6.7 6.3) (layer "B.SilkS") (width 0.12) (tstamp f7b4fd12-91c0-48ed-b73a-baf01121c427)) + (fp_line (start -0.5 0) (end 0.5 0) (layer "B.SilkS") (width 0.12) (tstamp fb810f90-6233-4625-b13a-2b0bc3e0911a)) + (fp_circle (center 0 0) (end 3 0) (layer "B.SilkS") (width 0.12) (fill none) (tstamp edfc1c8b-472e-45a9-9b84-6ab1d5a232a4)) + (fp_line (start 8.5 -7.35) (end -9 -7.35) (layer "B.CrtYd") (width 0.05) (tstamp 23fc7bbd-16ef-4292-82e2-8ebcecddf461)) + (fp_line (start 8.5 -7.35) (end 8.5 7.35) (layer "B.CrtYd") (width 0.05) (tstamp 3b3e0691-ad7a-432c-930d-97551b1c8a86)) + (fp_line (start -9 7.35) (end -9 -7.35) (layer "B.CrtYd") (width 0.05) (tstamp 44bb44d4-5bb9-4ab9-ba26-1e92778fa940)) + (fp_line (start -9 7.35) (end 8.5 7.35) (layer "B.CrtYd") (width 0.05) (tstamp 92642baa-7bd1-4843-9111-a3b2b1f1cd91)) + (fp_line (start -6.6 5.1) (end -5.6 6.2) (layer "B.Fab") (width 0.12) (tstamp 1483f3a8-7f8c-4eeb-b09b-f74ffb8387b9)) + (fp_line (start 0 3) (end 0 -3) (layer "B.Fab") (width 0.12) (tstamp 2f771d78-f8c5-405c-a9ea-da9e1a702466)) + (fp_line (start -5.6 6.2) (end 6.6 6.2) (layer "B.Fab") (width 0.12) (tstamp 485cd1b5-912a-4378-9669-383c419a2d60)) + (fp_line (start 6.6 -6.2) (end -6.6 -6.2) (layer "B.Fab") (width 0.12) (tstamp 9e0f5914-3de8-4f35-8ed4-099cedda7d10)) + (fp_line (start -6.6 -6.2) (end -6.6 5.1) (layer "B.Fab") (width 0.12) (tstamp aa196b56-5e01-401c-8791-51d826c63494)) + (fp_line (start 6.6 6.2) (end 6.6 -6.2) (layer "B.Fab") (width 0.12) (tstamp dc88f132-9417-485c-98cc-bdb57fbb8941)) + (fp_line (start -3 0) (end 3 0) (layer "B.Fab") (width 0.12) (tstamp ed1b8fca-a857-4452-bd3e-a7da4cf2f287)) + (fp_circle (center 0 0) (end 3 0) (layer "B.Fab") (width 0.12) (fill none) (tstamp 4ac7c21e-a8c5-4c3e-b1c1-e508af8e4ac6)) + (pad "A" thru_hole rect (at -7.5 2.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 44 "Enc_A") (pinfunction "A") (pintype "passive") (tstamp df9aa2bf-f1cb-417a-99e0-b5ea8d12582a)) + (pad "B" thru_hole circle (at -7.5 -2.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 43 "Enc_B") (pinfunction "B") (pintype "passive") (tstamp 070c6de7-a8b8-47f4-afdf-17d8410b4c42)) + (pad "C" thru_hole circle (at -7.5 0 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 12 "GND") (pinfunction "C") (pintype "passive") (tstamp c266c063-f7ba-4d4b-b831-bfd975bb96b8)) + (pad "MP" thru_hole rect (at 0 5.6 180) (size 3 2.5) (drill oval 2.5 2) (layers *.Cu *.Mask) (tstamp 45b8ad4c-be4b-490c-aa41-8e9ab6cd2044)) + (pad "MP" thru_hole rect (at 0 -5.6 180) (size 3 2.5) (drill oval 2.5 2) (layers *.Cu *.Mask) (tstamp da64a356-460b-4db6-8f08-8e3a71c924ae)) + (pad "S1" thru_hole circle (at 7 2.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 45 "Net-(R10-Pad1)") (pinfunction "S1") (pintype "passive") (tstamp 65202281-6d5b-4b7b-ad03-c99b302a398f)) + (pad "S2" thru_hole circle (at 7 -2.5 180) (size 2 2) (drill 1) (layers *.Cu *.Mask) + (net 12 "GND") (pinfunction "S2") (pintype "passive") (tstamp 2f41b1c8-961d-4198-b222-66d2df873b24)) + (model "${KICAD6_3DMODEL_DIR}/Rotary_Encoder.3dshapes/RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm.wrl" + (offset (xyz -7.5 2.5 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_line (start 34.5 37.5) (end 56 37.5) (layer "F.SilkS") (width 0.15) (tstamp 153a16cc-d18a-45e0-8279-f60fd84920a6)) + (gr_line (start 56 37.5) (end 56 34.5) (layer "F.SilkS") (width 0.15) (tstamp eb1d75f0-d2ef-4544-aeb7-803d362008aa)) + (gr_rect (start 34.5 34.5) (end 161.8 121.8) (layer "Edge.Cuts") (width 0.1) (fill none) (tstamp d62484af-33c2-40fe-ae18-b0cd2b40c365)) + (gr_text "+5v" (at 59 36) (layer "F.Cu") (tstamp 751dac96-c540-4ada-9d76-4481de5e1e39) + (effects (font (size 1 1) (thickness 0.25))) + ) + (gr_text "GND" (at 59 36) (layer "B.Cu") (tstamp 279e0143-783b-41e0-9009-d4535f11a87e) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (gr_text "GND" (at 46 93) (layer "F.SilkS") (tstamp 0225db91-a163-4a58-be52-eeb95876d0a2) + (effects (font (size 1.5 1.5) (thickness 0.15)) (justify left)) + ) + (gr_text "ON" (at 46 66) (layer "F.SilkS") (tstamp 0b8e4d31-3dcf-45f5-bf34-c87a163df157) + (effects (font (size 1.5 1.5) (thickness 0.15)) (justify left)) + ) + (gr_text "T1" (at 103.5 120) (layer "F.SilkS") (tstamp 0f252ce2-b0fc-47fe-a5b3-2b6356b6a1c9) + (effects (font (size 1.5 1.5) (thickness 0.15)) (justify right)) + ) + (gr_text "OFF" (at 46 70) (layer "F.SilkS") (tstamp 16120871-e072-47f7-bc6e-6f3851d08cce) + (effects (font (size 1.5 1.5) (thickness 0.15)) (justify left)) + ) + (gr_text "Text" (at 135.5 120) (layer "F.SilkS") (tstamp 2764b592-2142-4399-92be-908576b02cb5) + (effects (font (size 1.5 1.5) (thickness 0.15)) (justify right)) + ) + (gr_text "T2" (at 119.5 120) (layer "F.SilkS") (tstamp 3fb0e0fd-3f10-4c37-8244-509787dc3610) + (effects (font (size 1.5 1.5) (thickness 0.15)) (justify right)) + ) + (gr_text "STM32F103 {dblquote}blue pill{dblquote}" (at 130 76) (layer "F.SilkS") (tstamp 53073054-78ee-4843-b235-defeb926b806) + (effects (font (size 1.5 1.5) (thickness 0.15))) + ) + (gr_text "Auto" (at 46 76) (layer "F.SilkS") (tstamp 7e2b9b76-2a75-49e2-b1bc-2eb3c4873db8) + (effects (font (size 1.5 1.5) (thickness 0.15)) (justify left)) + ) + (gr_text "Fan_Monitor v2.0" (at 48.5 36) (layer "F.SilkS") (tstamp 8f6a166d-c6bd-4f23-b29f-d65847f17839) + (effects (font (size 1 1) (thickness 0.15))) + ) + (gr_text "+5V" (at 46 89) (layer "F.SilkS") (tstamp 93a90ae2-756d-42f3-a28d-f6c41463f86e) + (effects (font (size 1.5 1.5) (thickness 0.15)) (justify left)) + ) + (gr_text "400V 1A \nmax" (at 45 114) (layer "F.SilkS") (tstamp b3b9f623-b72a-433f-8e5c-5911412f750d) + (effects (font (size 1.5 1.5) (thickness 0.15))) + ) + (gr_text "Brightness" (at 154.5 57.5) (layer "F.SilkS") (tstamp b4cd8270-d352-4bcd-ae4a-78dd2c9d9939) + (effects (font (size 1.5 1.5) (thickness 0.15))) + ) + + (segment (start 101.75 89) (end 85.57 89) (width 0.5) (layer "F.Cu") (net 2) (tstamp 85c2d4c1-0f54-4646-9398-ca2386795554)) + (segment (start 85.57 89) (end 85 89.57) (width 0.5) (layer "F.Cu") (net 2) (tstamp d770c71b-fe52-410c-836a-b10e993c320c)) + (segment (start 76.55 76) (end 81.63 81.08) (width 0.5) (layer "B.Cu") (net 3) (tstamp 0f500a95-ebea-4620-a4ed-61366dd50494)) + (segment (start 81.63 81.08) (end 91.54 81.08) (width 0.5) (layer "B.Cu") (net 3) (tstamp 5ceb9d86-603c-43c4-b25d-696b31a42b59)) + (segment (start 42 76) (end 76.55 76) (width 0.5) (layer "B.Cu") (net 3) (tstamp c67b9a12-94b9-4db5-bff0-c11107e6dfb8)) + (segment (start 91.54 81.08) (end 92 80.62) (width 0.5) (layer "B.Cu") (net 3) (tstamp e53b6c49-24d9-40d3-b862-289526e01ab2)) + (segment (start 152.6 69.88) (end 154.48 68) (width 0.5) (layer "B.Cu") (net 5) (tstamp 9e4e50d8-ff6c-41e4-ace6-91326c1f0c55)) + (segment (start 96.5 69.88) (end 152.6 69.88) (width 0.5) (layer "B.Cu") (net 5) (tstamp a7bb6e76-fac8-4e1a-81d2-4857b3b0849d)) + (segment (start 92 65.38) (end 96.5 69.88) (width 0.5) (layer "B.Cu") (net 5) (tstamp bfac5cd9-094e-4a1f-a9f4-239ca3bd2622)) + (segment (start 58 89.7) (end 43.7 104) (width 0.8) (layer "F.Cu") (net 6) (tstamp 3ff248f2-bc3d-47ee-87f9-990a9cc6ef4d)) + (segment (start 58 83.8) (end 58 89.7) (width 0.8) (layer "F.Cu") (net 6) (tstamp c705e6c7-b5c4-413c-b6c0-12e1d0859544)) + (segment (start 66.3 108.005) (end 66.3 104) (width 0.8) (layer "F.Cu") (net 7) (tstamp 10f85b50-cb7f-480a-8044-a2d789daf79c)) + (segment (start 59 115.305) (end 66.3 108.005) (width 0.8) (layer "F.Cu") (net 7) (tstamp ba892498-6e98-4080-a53f-4f53a11d0b2b)) + (segment (start 118.92 100.89) (end 113 106.81) (width 0.5) (layer "F.Cu") (net 8) (tstamp 1c003c2d-4657-44bb-a082-3c03861b96eb)) + (segment (start 110.5 109.31) (end 113 106.81) (width 0.5) (layer "F.Cu") (net 8) (tstamp 340155ab-c487-4766-bcd1-59f2c74db50e)) + (segment (start 118.92 83.24) (end 118.92 100.89) (width 0.5) (layer "F.Cu") (net 8) (tstamp 7737e022-f353-4d8d-88b7-28c4bfaa9e4f)) + (segment (start 110.5 114) (end 110.5 109.31) (width 0.5) (layer "F.Cu") (net 8) (tstamp e20594da-ad88-4dd1-917e-675cabae1d42)) + (segment (start 126.5 114) (end 126.5 109.5) (width 0.5) (layer "F.Cu") (net 9) (tstamp 70270159-f52e-4c25-8aa4-73d29933804b)) + (segment (start 124 90) (end 131 97) (width 0.5) (layer "F.Cu") (net 9) (tstamp 76558969-c14c-47ec-8879-355fb78ded53)) + (segment (start 131 97) (end 131 105) (width 0.5) (layer "F.Cu") (net 9) (tstamp 8e8bddc7-955a-43d0-9c2b-b86580e4489c)) + (segment (start 126.5 109.5) (end 129 107) (width 0.5) (layer "F.Cu") (net 9) (tstamp ba32c8cb-765b-408f-ad3c-ac532844c289)) + (segment (start 131 105) (end 129 107) (width 0.5) (layer "F.Cu") (net 9) (tstamp dcb82f95-a8c6-459e-9acf-6ddd6188609c)) + (segment (start 124 83.24) (end 124 90) (width 0.5) (layer "F.Cu") (net 9) (tstamp e9617b6e-f7df-4c64-bb7f-4456a96abfaf)) + (segment (start 60 42) (end 63.08 38.92) (width 0.5) (layer "F.Cu") (net 12) (tstamp 1b065f33-0b1e-4247-8ff4-07f80ce63c59)) + (segment (start 60 45.114213) (end 60 42) (width 0.5) (layer "F.Cu") (net 12) (tstamp 66b534c8-998b-4b3d-8db5-d0f7dc68ee46)) + (segment (start 57.014213 48.1) (end 60 45.114213) (width 0.5) (layer "F.Cu") (net 12) (tstamp 784232a4-523d-4f0f-a4cb-ceb9ffd5effe)) + (segment (start 63.08 38.92) (end 66.97 38.92) (width 0.5) (layer "F.Cu") (net 12) (tstamp 7ab0ee4b-4788-48cb-b54d-84eea3278e91)) + (segment (start 55.6 48.1) (end 57.014213 48.1) (width 0.5) (layer "F.Cu") (net 12) (tstamp 9b0a1b5d-3ad9-4019-bc6a-a3169112ca9e)) + (segment (start 136.24 49) (end 134.24 51) (width 0.5) (layer "B.Cu") (net 13) (tstamp 36e4da11-6a21-431c-adcc-0aeffe20c7db)) + (segment (start 120.46 51) (end 118.46 49) (width 0.5) (layer "B.Cu") (net 13) (tstamp ad4a45ee-e4c1-4e44-a3c9-07d2d44d21f3)) + (segment (start 134.24 51) (end 120.46 51) (width 0.5) (layer "B.Cu") (net 13) (tstamp fabc02db-a74e-4a51-adea-0d84403ee876)) + (segment (start 135.16 45) (end 133.7 46.46) (width 0.5) (layer "B.Cu") (net 14) (tstamp 2f9621d7-741d-4dd4-9b51-6830a2b41cf2)) + (segment (start 146 52) (end 139 45) (width 0.5) (layer "B.Cu") (net 14) (tstamp 592a459c-6ef3-4650-af5f-6cd70ee5ba3b)) + (segment (start 139 45) (end 135.16 45) (width 0.5) (layer "B.Cu") (net 14) (tstamp b2395bbe-3412-4873-b54f-0cbed5a5d7f2)) + (segment (start 158 52) (end 146 52) (width 0.5) (layer "B.Cu") (net 14) (tstamp cf309179-5c8d-46de-be78-1e0753360a07)) + (segment (start 139.24 61.74) (end 139.24 68) (width 0.5) (layer "F.Cu") (net 15) (tstamp 7a240696-6408-45a7-8a05-70f81dfdf30d)) + (segment (start 133.7 56.2) (end 139.24 61.74) (width 0.5) (layer "F.Cu") (net 15) (tstamp 82c13dae-130f-4ca0-9572-b29007926b2f)) + (segment (start 133.7 49) (end 133.7 56.2) (width 0.5) (layer "F.Cu") (net 15) (tstamp a8bda8f7-8b92-406d-8443-014191e9fc7c)) + (segment (start 141.78 45.28) (end 140 43.5) (width 0.5) (layer "F.Cu") (net 16) (tstamp 35af4816-a895-4096-a60e-2a349c181352)) + (segment (start 141.78 68) (end 141.78 45.28) (width 0.5) (layer "F.Cu") (net 16) (tstamp 8d2d34a3-5fa6-4960-90f6-5b34288acd9b)) + (segment (start 132.5 43.5) (end 131.16 44.84) (width 0.5) (layer "F.Cu") (net 16) (tstamp cd859baf-4dd4-4cb6-9437-252cc15cacd4)) + (segment (start 140 43.5) (end 132.5 43.5) (width 0.5) (layer "F.Cu") (net 16) (tstamp d07ae89c-220b-42c0-8423-8e497efe836c)) + (segment (start 131.16 44.84) (end 131.16 46.46) (width 0.5) (layer "F.Cu") (net 16) (tstamp f3e1970e-445a-414c-b7d8-125605a26e72)) + (segment (start 131.16 56.16) (end 136.7 61.7) (width 0.5) (layer "F.Cu") (net 17) (tstamp b41a97c0-726d-442f-a64b-92c7ec8e671b)) + (segment (start 131.16 49) (end 131.16 56.16) (width 0.5) (layer "F.Cu") (net 17) (tstamp fb293679-4bb7-4500-8b82-72c8eac5f5b1)) + (segment (start 136.7 61.7) (end 136.7 68) (width 0.5) (layer "F.Cu") (net 17) (tstamp ff61bac3-8676-44bc-ba99-1206f720aba8)) + (segment (start 130.69952 42.80048) (end 128.62 44.88) (width 0.5) (layer "F.Cu") (net 20) (tstamp 0ab358b2-e9d4-41c8-bcd2-8ff00b4d9d5f)) + (segment (start 140.30048 42.80048) (end 130.69952 42.80048) (width 0.5) (layer "F.Cu") (net 20) (tstamp 343eeb00-0825-4a65-ba8b-a32e505f247a)) + (segment (start 128.62 44.88) (end 128.62 46.46) (width 0.5) (layer "F.Cu") (net 20) (tstamp 9a9aea14-4385-487a-9e18-44e283d7c0d5)) + (segment (start 144.32 46.82) (end 140.30048 42.80048) (width 0.5) (layer "F.Cu") (net 20) (tstamp d6c06402-9db1-4833-aa82-cf2146046a05)) + (segment (start 144.32 68) (end 144.32 46.82) (width 0.5) (layer "F.Cu") (net 20) (tstamp e43965ac-d9f5-4a12-afff-90a66b658ac5)) + (segment (start 128.62 56.12) (end 134.16 61.66) (width 0.5) (layer "F.Cu") (net 21) (tstamp 4b94abf4-9230-476c-8136-73aa690250d0)) + (segment (start 128.62 49) (end 128.62 56.12) (width 0.5) (layer "F.Cu") (net 21) (tstamp 66906b5c-486b-413f-b952-b2a8c4c7bebf)) + (segment (start 134.16 61.66) (end 134.16 68) (width 0.5) (layer "F.Cu") (net 21) (tstamp b49b79de-f803-4a81-88f0-3337109aca74)) + (segment (start 147 104.81) (end 145 106.81) (width 0.5) (layer "F.Cu") (net 24) (tstamp 07614dfa-c258-4640-8760-16f47d81d805)) + (segment (start 138 97) (end 146 97) (width 0.5) (layer "F.Cu") (net 24) (tstamp 1aeaf65e-eaef-4900-9b16-fc38e5528b42)) + (segment (start 146 97) (end 147 98) (width 0.5) (layer "F.Cu") (net 24) (tstamp 281038a1-d490-440b-8aa4-312df3eef7d7)) + (segment (start 147 98) (end 147 104.81) (width 0.5) (layer "F.Cu") (net 24) (tstamp 8f200621-d774-45e1-b34c-2817c6d31b7e)) + (segment (start 142.5 114) (end 142.5 109.31) (width 0.5) (layer "F.Cu") (net 24) (tstamp c3c59ff8-cef7-4695-85c5-d8fef3f6df61)) + (segment (start 142.5 109.31) (end 145 106.81) (width 0.5) (layer "F.Cu") (net 24) (tstamp c610d721-79b2-437a-a7f3-07a6842d9e01)) + (segment (start 129.08 88.08) (end 138 97) (width 0.5) (layer "F.Cu") (net 24) (tstamp c9fb9785-03c7-4450-a42d-429f480cae70)) + (segment (start 129.08 83.24) (end 129.08 88.08) (width 0.5) (layer "F.Cu") (net 24) (tstamp faa77f24-5da7-430d-a1fb-2c49798c90f3)) + (segment (start 80.36 66) (end 80.36 64.36) (width 0.5) (layer "F.Cu") (net 25) (tstamp 093e1d39-2d57-492b-9211-db019a7ec890)) + (segment (start 77 61) (end 71.62 61) (width 0.5) (layer "F.Cu") (net 25) (tstamp 159e3f85-ea5f-49ef-89f6-568f87c2d02f)) + (segment (start 58 70.226679) (end 58 71.6) (width 0.5) (layer "F.Cu") (net 25) (tstamp 1c68a169-a644-41cf-abd1-66b0e972cb02)) + (segment (start 71.62 61) (end 67.226679 61) (width 0.5) (layer "F.Cu") (net 25) (tstamp 505efb6c-9391-4909-8ec2-3c79035995a5)) + (segment (start 67.226679 61) (end 58 70.226679) (width 0.5) (layer "F.Cu") (net 25) (tstamp 58932177-f36a-43d5-bb4f-42ae7a917784)) + (segment (start 80.36 64.36) (end 77 61) (width 0.5) (layer "F.Cu") (net 25) (tstamp d6314a9a-5000-4f8f-953e-1535a673e951)) + (segment (start 126.08 44.92) (end 126.08 46.46) (width 0.5) (layer "F.Cu") (net 26) (tstamp 09ad63a5-a1c9-4e20-8411-e0f05f0467bc)) + (segment (start 146.86 68) (end 146.86 48.37073) (width 0.5) (layer "F.Cu") (net 26) (tstamp 1442bd75-ce9c-42c9-9bee-d23df4a63bd8)) + (segment (start 146.86 48.37073) (end 140.59023 42.10096) (width 0.5) (layer "F.Cu") (net 26) (tstamp 5738dfeb-47c0-4f73-940a-a3bf743661a6)) + (segment (start 128.89904 42.10096) (end 126.08 44.92) (width 0.5) (layer "F.Cu") (net 26) (tstamp b288b9ee-e89a-4739-8fd5-14a95cc46854)) + (segment (start 140.59023 42.10096) (end 128.89904 42.10096) (width 0.5) (layer "F.Cu") (net 26) (tstamp fc5c97dc-0695-4cad-b1a9-bfadca95d1e0)) + (segment (start 62.000489 105.204511) (end 54 113.205) (width 0.8) (layer "F.Cu") (net 29) (tstamp 53ab3551-2faf-4a1a-a843-dbed4bd2e069)) + (segment (start 54 113.205) (end 54 115.305) (width 0.8) (layer "F.Cu") (net 29) (tstamp 85d6b8c4-d845-4984-a043-151bfb4aa023)) + (segment (start 62.000489 71.599511) (end 62.000489 105.204511) (width 0.8) (layer "F.Cu") (net 29) (tstamp 93981df9-c7cf-4b00-8df6-5dc78c2daae1)) + (segment (start 64 69.6) (end 62.000489 71.599511) (width 0.8) (layer "F.Cu") (net 29) (tstamp f5bd4fdf-2228-4a8b-bcd5-8a81f9040b5c)) + (segment (start 126.08 56.08) (end 131.62 61.62) (width 0.5) (layer "F.Cu") (net 30) (tstamp 993e595c-253f-4731-8ea1-7d9be121518b)) + (segment (start 131.62 61.62) (end 131.62 68) (width 0.5) (layer "F.Cu") (net 30) (tstamp da20c9f8-ddb1-488e-b590-07a0c8d5e57f)) + (segment (start 126.08 49) (end 126.08 56.08) (width 0.5) (layer "F.Cu") (net 30) (tstamp e5fad014-cba4-4c4f-8cf5-a105a363ffeb)) + (segment (start 140.879981 41.401441) (end 127.098559 41.401441) (width 0.5) (layer "F.Cu") (net 31) (tstamp 0895a58b-dcf1-459b-903d-afb6bad3b004)) + (segment (start 149.4 68) (end 149.4 49.92146) (width 0.5) (layer "F.Cu") (net 31) (tstamp 3c46c313-b349-4a46-bf65-3ba5703f983c)) + (segment (start 123.54 44.96) (end 123.54 46.46) (width 0.5) (layer "F.Cu") (net 31) (tstamp 4ddac16c-dbdc-4b3c-9c98-9796153e3c7d)) + (segment (start 149.4 49.92146) (end 140.879981 41.401441) (width 0.5) (layer "F.Cu") (net 31) (tstamp e9fbb8ca-8b24-45ee-a719-bb51d8e242e7)) + (segment (start 127.098559 41.401441) (end 123.54 44.96) (width 0.5) (layer "F.Cu") (net 31) (tstamp ece95fa8-335d-4ab9-a108-8b053643b313)) + (segment (start 123.54 56.04) (end 129.08 61.58) (width 0.5) (layer "F.Cu") (net 32) (tstamp 6a6db224-5c79-4439-9ddf-ae3a417491f0)) + (segment (start 129.08 61.58) (end 129.08 68) (width 0.5) (layer "F.Cu") (net 32) (tstamp e4ca29bb-b007-4782-93ea-f26106ac453b)) + (segment (start 123.54 49) (end 123.54 56.04) (width 0.5) (layer "F.Cu") (net 32) (tstamp ef59de71-8d46-4593-815e-a8998d88de67)) + (segment (start 116.38 83.24) (end 116.38 87.81) (width 0.5) (layer "F.Cu") (net 36) (tstamp 0c00dd02-1b85-4f3c-ad22-d64c487ef8d5)) + (segment (start 105 99.19) (end 105 102.81) (width 0.5) (layer "F.Cu") (net 36) (tstamp 32c7c06a-582b-4eb5-98e4-45ef02213ab7)) + (segment (start 116.38 87.81) (end 105 99.19) (width 0.5) (layer "F.Cu") (net 36) (tstamp 6cf55c38-c420-49b6-8989-7f3b854be84e)) + (segment (start 105 102.81) (end 109 106.81) (width 0.5) (layer "F.Cu") (net 36) (tstamp a8f61591-23d0-43af-bae6-d61eb9c25d75)) + (segment (start 151.94 51.47219) (end 141.169731 40.701921) (width 0.5) (layer "F.Cu") (net 37) (tstamp 0c9c26f2-2ab0-4873-903c-fd932c48c31d)) + (segment (start 141.169731 40.701921) (end 125.298079 40.701921) (width 0.5) (layer "F.Cu") (net 37) (tstamp 2a550791-ef82-461b-ac23-3895df26c905)) + (segment (start 121 45) (end 121 46.46) (width 0.5) (layer "F.Cu") (net 37) (tstamp 3590e01c-3cf7-44d2-9192-28d95f2e6ef1)) + (segment (start 151.94 68) (end 151.94 51.47219) (width 0.5) (layer "F.Cu") (net 37) (tstamp bda98146-77bf-4cfe-aadb-7534c33a2098)) + (segment (start 125.298079 40.701921) (end 121 45) (width 0.5) (layer "F.Cu") (net 37) (tstamp c484bb21-d0ea-44e0-bc04-65c9902d4be4)) + (segment (start 121 56) (end 126.54 61.54) (width 0.5) (layer "F.Cu") (net 38) (tstamp 262a02ed-50d5-4e1d-b957-55e9d40222f0)) + (segment (start 121 49) (end 121 56) (width 0.5) (layer "F.Cu") (net 38) (tstamp 8915acbf-7f1d-427f-aefd-a3b672444ae5)) + (segment (start 126.54 61.54) (end 126.54 68) (width 0.5) (layer "F.Cu") (net 38) (tstamp fa6c6684-8ee2-4dd2-9371-6d9226bffd90)) + (segment (start 105.27 44.73) (end 116.73 44.73) (width 0.5) (layer "F.Cu") (net 39) (tstamp 0788793a-9efe-499c-9486-95e522c73720)) + (segment (start 116.73 44.73) (end 118.46 46.46) (width 0.5) (layer "F.Cu") (net 39) (tstamp 4194bdb4-e79d-4af0-958d-717449de38c3)) + (segment (start 103 46) (end 99.84 49.16) (width 0.5) (layer "F.Cu") (net 40) (tstamp 1db09cdd-e31a-497d-8e0d-0af8c20512d9)) + (segment (start 105.27 46) (end 103 46) (width 0.5) (layer "F.Cu") (net 40) (tstamp 576dfbb4-3d75-4c8e-851f-6981aa3669d9)) + (segment (start 99.84 49.16) (end 99.84 52) (width 0.5) (layer "F.Cu") (net 40) (tstamp fa8451b8-0793-4543-97e0-5044e24b2908)) + (segment (start 81.63 66) (end 81.63 70.92) (width 0.5) (layer "F.Cu") (net 41) (tstamp d18b8f39-6ece-4d2d-a295-fb652586d264)) + (segment (start 110 57) (end 113.84 60.84) (width 0.5) (layer "F.Cu") (net 42) (tstamp 07ea40e6-2378-4b19-a5b3-ca92ad909ad3)) + (segment (start 113.84 60.84) (end 113.84 68) (width 0.5) (layer "F.Cu") (net 42) (tstamp 1495ee6f-bffa-4b73-9d68-0467a674e076)) + (segment (start 110 52) (end 110 57) (width 0.5) (layer "F.Cu") (net 42) (tstamp 2ecb8a38-54aa-44e2-a441-65a7733f9886)) + (segment (start 55.6 50.6) (end 72.6 50.6) (width 0.5) (layer "B.Cu") (net 43) (tstamp 1851d365-30bf-4b5e-90ee-020f58f14a05)) + (segment (start 114 62) (end 94.92 62) (width 0.5) (layer "B.Cu") (net 43) (tstamp 33c4818e-90ad-45bf-805c-dc12ff640bc6)) + (segment (start 118.92 66.92) (end 114 62) (width 0.5) (layer "B.Cu") (net 43) (tstamp 3fed8847-f1eb-4add-95b8-759b6e637050)) + (segment (start 75.08 53.08) (end 86 53.08) (width 0.5) (layer "B.Cu") (net 43) (tstamp 5649978d-5115-4918-9eda-0a96e5788b24)) + (segment (start 118.92 68) (end 118.92 66.92) (width 0.5) (layer "B.Cu") (net 43) (tstamp 7e504f9a-6e35-49a8-a77d-648ad88c4b1c)) + (segment (start 72.6 50.6) (end 75.08 53.08) (width 0.5) (layer "B.Cu") (net 43) (tstamp ad76a582-01c1-43ad-ade8-2a2240e57aea)) + (segment (start 94.92 62) (end 86 53.08) (width 0.5) (layer "B.Cu") (net 43) (tstamp dde83a35-85de-476a-892e-af586af9fd71)) + (segment (start 72.4 45.6) (end 75 43) (width 0.5) (layer "B.Cu") (net 44) (tstamp 0a93099c-f58e-4eed-9723-0e3b3c597b5a)) + (segment (start 55.6 45.6) (end 72.4 45.6) (width 0.5) (layer "B.Cu") (net 44) (tstamp 5350dc58-05a1-4eb9-b03f-bd7b049e3fe6)) + (segment (start 81.92 43) (end 92 53.08) (width 0.5) (layer "B.Cu") (net 44) (tstamp 64180e29-c8cb-42fe-b3d5-31999c43eb48)) + (segment (start 115 60) (end 121.46 66.46) (width 0.5) (layer "B.Cu") (net 44) (tstamp 6d2f3b94-69a4-4e1d-95d3-536f65f686fc)) + (segment (start 99 60) (end 115 60) (width 0.5) (layer "B.Cu") (net 44) (tstamp 78fc4142-a9a0-4381-a77f-ba8f2df4b161)) + (segment (start 92.879999 53.879999) (end 99 60) (width 0.5) (layer "B.Cu") (net 44) (tstamp 82c112b8-92bc-45e1-998e-0df5a77425f7)) + (segment (start 75 43) (end 81.92 43) (width 0.5) (layer "B.Cu") (net 44) (tstamp b059694c-f257-4054-b9a0-a75ea0a17045)) + (segment (start 92 53.08) (end 92.799999 53.879999) (width 0.5) (layer "B.Cu") (net 44) (tstamp cc41ca77-a74b-426b-b1c7-3245c8ddbdff)) + (segment (start 92.799999 53.879999) (end 92.879999 53.879999) (width 0.5) (layer "B.Cu") (net 44) (tstamp d6bea4ea-0da1-46a9-b34a-ce7af1360b3d)) + (segment (start 121.46 66.46) (end 121.46 68) (width 0.5) (layer "B.Cu") (net 44) (tstamp e850e3c5-d8dd-4bdb-a132-d0c880a2609e)) + (segment (start 41.1 45.6) (end 46.6 45.6) (width 0.5) (layer "B.Cu") (net 45) (tstamp 9cab9e34-9148-41d5-827c-74eacb64aeae)) + (segment (start 64 53.08) (end 68.92 53.08) (width 0.5) (layer "B.Cu") (net 45) (tstamp b63de34b-3bb4-4ee7-9b3e-fc1337d13acd)) + (segment (start 46.6 45.6) (end 54.08 53.08) (width 0.5) (layer "B.Cu") (net 45) (tstamp eaf30923-7d3f-4813-87b8-1c1ac9166a67)) + (segment (start 54.08 53.08) (end 64 53.08) (width 0.5) (layer "B.Cu") (net 45) (tstamp fe169af6-f8ff-4c30-8381-d84d48f7fbd8)) + (segment (start 121 99.38) (end 121 103) (width 0.5) (layer "F.Cu") (net 46) (tstamp 77694694-895c-40d4-9cb8-378656083f10)) + (segment (start 121.46 83.24) (end 121.46 98.92) (width 0.5) (layer "F.Cu") (net 46) (tstamp 806b3422-a97f-4b74-a85c-b0a7035fc582)) + (segment (start 121 103) (end 125 107) (width 0.5) (layer "F.Cu") (net 46) (tstamp dcd7c117-9361-4a59-8e5a-64d036d54a50)) + (segment (start 121.46 98.92) (end 121 99.38) (width 0.5) (layer "F.Cu") (net 46) (tstamp ef5fe9b7-d628-4c68-8296-992a5ba795e4)) + (segment (start 90 70) (end 114.38 70) (width 0.5) (layer "F.Cu") (net 47) (tstamp 545d328a-7f05-4f64-9d9a-0d7b4953040d)) + (segment (start 114.38 70) (end 116.38 68) (width 0.5) (layer "F.Cu") (net 47) (tstamp a40fae64-c27a-41c7-87f2-53a25d000336)) + (segment (start 68.92 38.97) (end 68.87 38.92) (width 0.5) (layer "F.Cu") (net 47) (tstamp a940fafd-7d2c-4fde-9ec5-142736047964)) + (segment (start 68.92 42.92) (end 68.92 48.92) (width 0.5) (layer "F.Cu") (net 47) (tstamp b1b8aed6-9dd4-4c97-b504-a10e0bdfa457)) + (segment (start 68.92 42.92) (end 68.92 38.97) (width 0.5) (layer "F.Cu") (net 47) (tstamp b5be7b62-b137-42bc-a8e4-ab9d711f42f5)) + (segment (start 68.92 48.92) (end 90 70) (width 0.5) (layer "F.Cu") (net 47) (tstamp deee3e79-d2b6-4875-a2d8-3b85fec40ee6)) + (segment (start 126.54 88.73) (end 137 99.19) (width 0.5) (layer "F.Cu") (net 48) (tstamp 086d61cc-774b-4311-9da3-567c85252e3d)) + (segment (start 137 102.81) (end 141 106.81) (width 0.5) (layer "F.Cu") (net 48) (tstamp 4a8ea777-39fc-4546-8a86-70d89aa7b988)) + (segment (start 137 99.19) (end 137 102.81) (width 0.5) (layer "F.Cu") (net 48) (tstamp 732aa4c4-898f-4ad3-b069-06533a6c870a)) + (segment (start 126.54 83.24) (end 126.54 88.73) (width 0.5) (layer "F.Cu") (net 48) (tstamp c82d7901-1cec-4eb6-8c1d-377492c1dc9f)) + (segment (start 106.22 87.03) (end 104.25 89) (width 0.5) (layer "F.Cu") (net 49) (tstamp aafa013d-ae19-465f-a122-45f301b36be1)) + (segment (start 106.22 83.24) (end 106.22 87.03) (width 0.5) (layer "F.Cu") (net 49) (tstamp bacbbbb0-ea6c-48db-a4a9-31cc2b151e9a)) + (segment (start 38 85) (end 38 73.5) (width 0.8) (layer "F.Cu") (net 50) (tstamp 0035f00a-2bdc-481a-9cf8-88a316d48735)) + (segment (start 42 89) (end 38 85) (width 0.8) (layer "F.Cu") (net 50) (tstamp 5178ee2e-6e2a-47b9-92f7-e30189791284)) + (segment (start 38 73.5) (end 42 69.5) (width 0.8) (layer "F.Cu") (net 50) (tstamp 5d42fc5d-bc91-4fe9-9d67-823bee6daf3b)) + + (zone (net 13) (net_name "+5V") (layer "F.Cu") (tstamp 7b17aebc-be65-46c2-bb55-e0f86aeee782) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) (filled_areas_thickness no) + (fill yes (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 163 123) + (xy 33 123) + (xy 33 33) + (xy 163 33) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 55.942121 35.028002) + (xy 55.988614 35.081658) + (xy 56 35.134) + (xy 56 37.5) + (xy 56.888511 37.5) + (xy 56.89081 37.500247) + (xy 56.89081 37.5005) + (xy 61.109191 37.5005) + (xy 61.109191 37.500245) + (xy 61.110894 37.5) + (xy 62 37.5) + (xy 62 35.134) + (xy 62.020002 35.065879) + (xy 62.073658 35.019386) + (xy 62.126 35.008) + (xy 156.36793 35.008) + (xy 156.436051 35.028002) + (xy 156.482544 35.081658) + (xy 156.492648 35.151932) + (xy 156.463154 35.216512) + (xy 156.432636 35.242116) + (xy 156.247193 35.353101) + (xy 156.244467 35.355163) + (xy 156.244465 35.355164) + (xy 156.080605 35.479091) + (xy 155.961367 35.56927) + (xy 155.700559 35.815043) + (xy 155.467819 36.087546) + (xy 155.4659 36.090358) + (xy 155.465897 36.090363) + (xy 155.432796 36.138888) + (xy 155.265871 36.383591) + (xy 155.097077 36.699714) + (xy 154.963411 37.032218) + (xy 154.962491 37.035492) + (xy 154.962489 37.035497) + (xy 154.890424 37.291878) + (xy 154.866437 37.377213) + (xy 154.865875 37.38057) + (xy 154.865875 37.380571) + (xy 154.813007 37.696502) + (xy 154.80729 37.730663) + (xy 154.786661 38.088434) + (xy 154.804792 38.44634) + (xy 154.86147 38.800195) + (xy 154.956033 39.145859) + (xy 155.087374 39.479288) + (xy 155.088957 39.482303) + (xy 155.218529 39.729101) + (xy 155.253957 39.796582) + (xy 155.255858 39.799411) + (xy 155.255864 39.799421) + (xy 155.405184 40.02163) + (xy 155.453834 40.094029) + (xy 155.684665 40.36815) + (xy 155.943751 40.615738) + (xy 156.228061 40.833897) + (xy 156.260056 40.85335) + (xy 156.531355 41.018303) + (xy 156.53136 41.018306) + (xy 156.53427 41.020075) + (xy 156.537358 41.021521) + (xy 156.537357 41.021521) + (xy 156.85571 41.170649) + (xy 156.85572 41.170653) + (xy 156.858794 41.172093) + (xy 156.862012 41.173195) + (xy 156.862015 41.173196) + (xy 157.194615 41.287071) + (xy 157.194623 41.287073) + (xy 157.197838 41.288174) + (xy 157.547435 41.366959) + (xy 157.599728 41.372917) + (xy 157.900114 41.407142) + (xy 157.900122 41.407142) + (xy 157.903497 41.407527) + (xy 157.906901 41.407545) + (xy 157.906904 41.407545) + (xy 158.101227 41.408562) + (xy 158.261857 41.409403) + (xy 158.265243 41.409053) + (xy 158.265245 41.409053) + (xy 158.614932 41.372917) + (xy 158.614941 41.372916) + (xy 158.618324 41.372566) + (xy 158.621657 41.371852) + (xy 158.62166 41.371851) + (xy 158.794186 41.334864) + (xy 158.968727 41.297446) + (xy 159.308968 41.184922) + (xy 159.635066 41.036311) + (xy 159.828394 40.921521) + (xy 159.940262 40.855099) + (xy 159.940267 40.855096) + (xy 159.943207 40.85335) + (xy 160.015082 40.799385) + (xy 160.07913 40.751296) + (xy 160.229786 40.63818) + (xy 160.491451 40.393319) + (xy 160.72514 40.12163) + (xy 160.841402 39.952467) + (xy 160.92619 39.829101) + (xy 160.926195 39.829094) + (xy 160.92812 39.826292) + (xy 160.929732 39.823298) + (xy 160.929737 39.82329) + (xy 161.05506 39.59054) + (xy 161.104967 39.540044) + (xy 161.174251 39.524545) + (xy 161.240916 39.548965) + (xy 161.283795 39.60555) + (xy 161.292 39.650275) + (xy 161.292 116.550869) + (xy 161.271998 116.61899) + (xy 161.218342 116.665483) + (xy 161.148068 116.675587) + (xy 161.083488 116.646093) + (xy 161.054646 116.609828) + (xy 160.941702 116.396513) + (xy 160.941698 116.396506) + (xy 160.940103 116.393494) + (xy 160.73919 116.096746) + (xy 160.721116 116.075433) + (xy 160.618863 115.954861) + (xy 160.507403 115.823432) + (xy 160.247454 115.57675) + (xy 160.056448 115.431242) + (xy 159.965091 115.361647) + (xy 159.965089 115.361646) + (xy 159.962384 115.359585) + (xy 159.959472 115.357828) + (xy 159.959467 115.357825) + (xy 159.658443 115.176236) + (xy 159.658437 115.176233) + (xy 159.655528 115.174478) + (xy 159.359606 115.037115) + (xy 159.333571 115.02503) + (xy 159.333569 115.025029) + (xy 159.330475 115.023593) + (xy 159.134774 114.957352) + (xy 158.994255 114.909789) + (xy 158.99425 114.909788) + (xy 158.991028 114.908697) + (xy 158.792681 114.864724) + (xy 158.644493 114.831871) + (xy 158.644487 114.83187) + (xy 158.641158 114.831132) + (xy 158.637769 114.830758) + (xy 158.637764 114.830757) + (xy 158.288338 114.79218) + (xy 158.288333 114.79218) + (xy 158.284957 114.791807) + (xy 158.281558 114.791801) + (xy 158.281557 114.791801) + (xy 158.11208 114.791505) + (xy 157.926592 114.791182) + (xy 157.813413 114.803277) + (xy 157.573639 114.828901) + (xy 157.573631 114.828902) + (xy 157.570256 114.829263) + (xy 157.220117 114.905606) + (xy 156.880271 115.019317) + (xy 156.877178 115.020739) + (xy 156.877177 115.02074) + (xy 156.850455 115.033031) + (xy 156.554694 115.169066) + (xy 156.55176 115.170822) + (xy 156.551758 115.170823) + (xy 156.39775 115.262995) + (xy 156.247193 115.353101) + (xy 156.244467 115.355163) + (xy 156.244465 115.355164) + (xy 156.23862 115.359585) + (xy 155.961367 115.56927) + (xy 155.958882 115.571612) + (xy 155.958877 115.571616) + (xy 155.924939 115.603598) + (xy 155.700559 115.815043) + (xy 155.467819 116.087546) + (xy 155.4659 116.090358) + (xy 155.465897 116.090363) + (xy 155.414185 116.166171) + (xy 155.265871 116.383591) + (xy 155.097077 116.699714) + (xy 154.963411 117.032218) + (xy 154.962491 117.035492) + (xy 154.962489 117.035497) + (xy 154.928941 117.15485) + (xy 154.866437 117.377213) + (xy 154.80729 117.730663) + (xy 154.786661 118.088434) + (xy 154.786833 118.091829) + (xy 154.786833 118.09183) + (xy 154.80462 118.442945) + (xy 154.804792 118.44634) + (xy 154.805329 118.449695) + (xy 154.80533 118.449701) + (xy 154.810316 118.480828) + (xy 154.86147 118.800195) + (xy 154.956033 119.145859) + (xy 155.087374 119.479288) + (xy 155.111134 119.524545) + (xy 155.240546 119.771037) + (xy 155.253957 119.796582) + (xy 155.255858 119.799411) + (xy 155.255864 119.799421) + (xy 155.439569 120.0728) + (xy 155.453834 120.094029) + (xy 155.684665 120.36815) + (xy 155.943751 120.615738) + (xy 156.228061 120.833897) + (xy 156.260056 120.85335) + (xy 156.531355 121.018303) + (xy 156.53136 121.018306) + (xy 156.53427 121.020075) + (xy 156.537358 121.021521) + (xy 156.537357 121.021521) + (xy 156.602205 121.051898) + (xy 156.655408 121.098908) + (xy 156.67475 121.167219) + (xy 156.65409 121.235143) + (xy 156.599987 121.281115) + (xy 156.548756 121.292) + (xy 39.654328 121.292) + (xy 39.586207 121.271998) + (xy 39.539714 121.218342) + (xy 39.52961 121.148068) + (xy 39.559104 121.083488) + (xy 39.602077 121.051345) + (xy 39.631954 121.037729) + (xy 39.635066 121.036311) + (xy 39.729052 120.980506) + (xy 39.940262 120.855099) + (xy 39.940267 120.855096) + (xy 39.943207 120.85335) + (xy 40.229786 120.63818) + (xy 40.491451 120.393319) + (xy 40.72514 120.12163) + (xy 40.83175 119.966512) + (xy 40.92619 119.829101) + (xy 40.926195 119.829094) + (xy 40.92812 119.826292) + (xy 40.929732 119.823298) + (xy 40.929737 119.82329) + (xy 41.082249 119.540044) + (xy 41.098017 119.51076) + (xy 41.232842 119.178724) + (xy 41.243142 119.142568) + (xy 41.280789 119.010405) + (xy 41.33102 118.83407) + (xy 41.337386 118.796829) + (xy 41.390829 118.484175) + (xy 41.390829 118.484173) + (xy 41.391401 118.480828) + (xy 41.393511 118.44634) + (xy 41.413168 118.124928) + (xy 41.413278 118.123131) + (xy 41.413359 118.1) + (xy 41.393979 117.742159) + (xy 41.336066 117.388505) + (xy 41.240297 117.043173) + (xy 41.237243 117.035497) + (xy 41.109052 116.713369) + (xy 41.107793 116.710205) + (xy 41.023429 116.550869) + (xy 40.941702 116.396513) + (xy 40.941698 116.396506) + (xy 40.940103 116.393494) + (xy 40.73919 116.096746) + (xy 40.721116 116.075433) + (xy 40.618863 115.954861) + (xy 40.507403 115.823432) + (xy 40.247454 115.57675) + (xy 40.056448 115.431242) + (xy 39.965091 115.361647) + (xy 39.965089 115.361646) + (xy 39.962384 115.359585) + (xy 39.959472 115.357828) + (xy 39.959467 115.357825) + (xy 39.658443 115.176236) + (xy 39.658437 115.176233) + (xy 39.655528 115.174478) + (xy 39.359606 115.037115) + (xy 39.333571 115.02503) + (xy 39.333569 115.025029) + (xy 39.330475 115.023593) + (xy 39.134774 114.957352) + (xy 38.994255 114.909789) + (xy 38.99425 114.909788) + (xy 38.991028 114.908697) + (xy 38.792681 114.864724) + (xy 38.644493 114.831871) + (xy 38.644487 114.83187) + (xy 38.641158 114.831132) + (xy 38.637769 114.830758) + (xy 38.637764 114.830757) + (xy 38.288338 114.79218) + (xy 38.288333 114.79218) + (xy 38.284957 114.791807) + (xy 38.281558 114.791801) + (xy 38.281557 114.791801) + (xy 38.11208 114.791505) + (xy 37.926592 114.791182) + (xy 37.813413 114.803277) + (xy 37.573639 114.828901) + (xy 37.573631 114.828902) + (xy 37.570256 114.829263) + (xy 37.220117 114.905606) + (xy 36.880271 115.019317) + (xy 36.877178 115.020739) + (xy 36.877177 115.02074) + (xy 36.850455 115.033031) + (xy 36.554694 115.169066) + (xy 36.55176 115.170822) + (xy 36.551758 115.170823) + (xy 36.39775 115.262995) + (xy 36.247193 115.353101) + (xy 36.244467 115.355163) + (xy 36.244465 115.355164) + (xy 36.23862 115.359585) + (xy 35.961367 115.56927) + (xy 35.958882 115.571612) + (xy 35.958877 115.571616) + (xy 35.924939 115.603598) + (xy 35.700559 115.815043) + (xy 35.467819 116.087546) + (xy 35.4659 116.090358) + (xy 35.465897 116.090363) + (xy 35.414185 116.166171) + (xy 35.265871 116.383591) + (xy 35.264273 116.386584) + (xy 35.264265 116.386597) + (xy 35.245148 116.422401) + (xy 35.195418 116.473071) + (xy 35.126189 116.488812) + (xy 35.059439 116.464625) + (xy 35.016362 116.40819) + (xy 35.008 116.363054) + (xy 35.008 103.986367) + (xy 39.794511 103.986367) + (xy 39.794661 103.989548) + (xy 39.79636 104.025566) + (xy 39.813126 104.381111) + (xy 39.871538 104.771953) + (xy 39.872324 104.775035) + (xy 39.872324 104.775037) + (xy 39.952298 105.088785) + (xy 39.969148 105.154892) + (xy 40.026692 105.312139) + (xy 40.098227 105.507617) + (xy 40.104956 105.526006) + (xy 40.277573 105.881495) + (xy 40.48523 106.217721) + (xy 40.725802 106.531241) + (xy 40.727984 106.533557) + (xy 40.727993 106.533567) + (xy 40.983331 106.804524) + (xy 40.996826 106.818844) + (xy 40.999231 106.820928) + (xy 40.999237 106.820933) + (xy 41.199638 106.994525) + (xy 41.295526 107.077586) + (xy 41.618845 107.304818) + (xy 41.963472 107.498214) + (xy 42.325878 107.655793) + (xy 42.702353 107.775941) + (xy 42.912256 107.820175) + (xy 43.085924 107.856773) + (xy 43.085929 107.856774) + (xy 43.089043 107.85743) + (xy 43.481988 107.899423) + (xy 43.485176 107.89944) + (xy 43.485181 107.89944) + (xy 43.664213 107.900378) + (xy 43.877166 107.901493) + (xy 44.025671 107.887193) + (xy 44.267364 107.863921) + (xy 44.267369 107.86392) + (xy 44.270529 107.863616) + (xy 44.273648 107.862993) + (xy 44.273653 107.862992) + (xy 44.464643 107.824828) + (xy 44.658051 107.786181) + (xy 44.947161 107.69724) + (xy 45.032722 107.670918) + (xy 45.032725 107.670917) + (xy 45.035764 107.669982) + (xy 45.038692 107.668745) + (xy 45.038698 107.668743) + (xy 45.216418 107.593671) + (xy 45.399801 107.516207) + (xy 45.402604 107.514673) + (xy 45.402609 107.51467) + (xy 45.584824 107.41491) + (xy 45.746434 107.326431) + (xy 46.072114 107.102597) + (xy 46.101606 107.077586) + (xy 46.371078 106.849057) + (xy 46.37108 106.849055) + (xy 46.373508 106.846996) + (xy 46.375713 106.844704) + (xy 46.375719 106.844699) + (xy 46.54404 106.669787) + (xy 46.647528 106.562247) + (xy 46.89137 106.251264) + (xy 46.908141 106.224736) + (xy 47.080199 105.952566) + (xy 47.102537 105.917231) + (xy 47.103957 105.914382) + (xy 47.103962 105.914374) + (xy 47.277447 105.566416) + (xy 47.278867 105.563568) + (xy 47.407878 105.22215) + (xy 47.41743 105.196872) + (xy 47.417431 105.196869) + (xy 47.418554 105.193897) + (xy 47.426164 105.165299) + (xy 47.51162 104.844129) + (xy 47.520168 104.812002) + (xy 47.52256 104.797072) + (xy 47.558138 104.574947) + (xy 47.58267 104.421793) + (xy 47.600954 104.104697) + (xy 47.624844 104.03784) + (xy 47.63765 104.022855) + (xy 59.900421 91.760084) + (xy 59.907435 91.753583) + (xy 59.910655 91.750818) + (xy 59.948813 91.718055) + (xy 60.021418 91.639236) + (xy 60.024997 91.635508) + (xy 60.039772 91.620733) + (xy 60.075716 91.580319) + (xy 60.077193 91.578687) + (xy 60.168456 91.479614) + (xy 60.168459 91.47961) + (xy 60.170952 91.476904) + (xy 60.181654 91.462147) + (xy 60.189502 91.452386) + (xy 60.199186 91.441497) + (xy 60.199191 91.441491) + (xy 60.201633 91.438745) + (xy 60.203733 91.43574) + (xy 60.203738 91.435734) + (xy 60.280914 91.32531) + (xy 60.282189 91.323519) + (xy 60.361279 91.214461) + (xy 60.361282 91.214456) + (xy 60.363439 91.211482) + (xy 60.372355 91.195562) + (xy 60.37901 91.184954) + (xy 60.387345 91.173028) + (xy 60.387348 91.173023) + (xy 60.389458 91.170004) + (xy 60.454935 91.048145) + (xy 60.455985 91.04623) + (xy 60.521844 90.928631) + (xy 60.521847 90.928625) + (xy 60.523644 90.925416) + (xy 60.530644 90.908559) + (xy 60.536013 90.897251) + (xy 60.544645 90.881185) + (xy 60.595465 90.752503) + (xy 60.59629 90.750466) + (xy 60.647965 90.626017) + (xy 60.647966 90.626013) + (xy 60.649379 90.622611) + (xy 60.654361 90.605065) + (xy 60.658375 90.593204) + (xy 60.663725 90.579656) + (xy 60.665077 90.576233) + (xy 60.700545 90.442466) + (xy 60.701127 90.440346) + (xy 60.737924 90.31074) + (xy 60.737925 90.310734) + (xy 60.738927 90.307206) + (xy 60.741828 90.289193) + (xy 60.744431 90.276947) + (xy 60.749107 90.259312) + (xy 60.74999 90.253146) + (xy 60.768723 90.122344) + (xy 60.769053 90.120171) + (xy 60.790519 89.986898) + (xy 60.79052 89.986892) + (xy 60.791065 89.983506) + (xy 60.791611 89.972738) + (xy 60.792119 89.962697) + (xy 60.793231 89.951207) + (xy 60.794088 89.945229) + (xy 60.795588 89.934752) + (xy 60.797599 89.855333) + (xy 60.79772 89.852149) + (xy 60.799069 89.8255) + (xy 60.8005 89.797259) + (xy 60.8005 89.742317) + (xy 60.80054 89.739128) + (xy 60.803792 89.610675) + (xy 60.803792 89.610668) + (xy 60.803885 89.606986) + (xy 60.801029 89.575904) + (xy 60.8005 89.564375) + (xy 60.8005 86.028091) + (xy 60.820502 85.95997) + (xy 60.828579 85.948797) + (xy 60.868068 85.900032) + (xy 60.926483 85.85968) + (xy 60.99744 85.857314) + (xy 61.058412 85.893687) + (xy 61.09004 85.957249) + (xy 61.091989 85.979326) + (xy 61.091989 104.776008) + (xy 61.071987 104.844129) + (xy 61.055084 104.865103) + (xy 53.415168 112.505019) + (xy 53.400135 112.51786) + (xy 53.388747 112.526134) + (xy 53.384327 112.531043) + (xy 53.342984 112.576959) + (xy 53.338443 112.581744) + (xy 53.323928 112.596259) + (xy 53.321852 112.598823) + (xy 53.311006 112.612216) + (xy 53.306722 112.617231) + (xy 53.265381 112.663145) + (xy 53.265377 112.66315) + (xy 53.26096 112.668056) + (xy 53.25766 112.673772) + (xy 53.257657 112.673776) + (xy 53.253927 112.680237) + (xy 53.242727 112.696533) + (xy 53.233871 112.70747) + (xy 53.218822 112.737005) + (xy 53.202815 112.768421) + (xy 53.199669 112.774215) + (xy 53.165473 112.833444) + (xy 53.163432 112.839726) + (xy 53.163431 112.839728) + (xy 53.161125 112.846826) + (xy 53.15356 112.865092) + (xy 53.147171 112.87763) + (xy 53.145463 112.884003) + (xy 53.145463 112.884004) + (xy 53.129469 112.943695) + (xy 53.1276 112.950003) + (xy 53.106458 113.015072) + (xy 53.105768 113.021637) + (xy 53.105766 113.021646) + (xy 53.104985 113.029075) + (xy 53.101383 113.048509) + (xy 53.099453 113.055714) + (xy 53.097743 113.062097) + (xy 53.097398 113.068688) + (xy 53.097397 113.068692) + (xy 53.094164 113.130384) + (xy 53.093647 113.136958) + (xy 53.091844 113.154116) + (xy 53.0915 113.15739) + (xy 53.0915 113.177926) + (xy 53.091327 113.18452) + (xy 53.087748 113.25281) + (xy 53.08878 113.259325) + (xy 53.089949 113.266705) + (xy 53.0915 113.286417) + (xy 53.0915 113.3705) + (xy 53.071498 113.438621) + (xy 53.017842 113.485114) + (xy 52.9655 113.4965) + (xy 52.651866 113.4965) + (xy 52.589684 113.503255) + (xy 52.453295 113.554385) + (xy 52.336739 113.641739) + (xy 52.249385 113.758295) + (xy 52.198255 113.894684) + (xy 52.1915 113.956866) + (xy 52.1915 116.653134) + (xy 52.198255 116.715316) + (xy 52.249385 116.851705) + (xy 52.336739 116.968261) + (xy 52.453295 117.055615) + (xy 52.589684 117.106745) + (xy 52.651866 117.1135) + (xy 55.348134 117.1135) + (xy 55.410316 117.106745) + (xy 55.546705 117.055615) + (xy 55.565887 117.041239) + (xy 55.632394 117.016392) + (xy 55.701776 117.031446) + (xy 55.753718 117.084864) + (xy 55.789373 117.154843) + (xy 55.789381 117.154857) + (xy 55.790875 117.157789) + (xy 56.002124 117.483084) + (xy 56.246219 117.784516) + (xy 56.520484 118.058781) + (xy 56.821916 118.302876) + (xy 57.147211 118.514125) + (xy 57.492806 118.690214) + (xy 57.854913 118.829214) + (xy 58.229567 118.929602) + (xy 58.433201 118.961854) + (xy 58.609414 118.989764) + (xy 58.609422 118.989765) + (xy 58.612662 118.990278) + (xy 59 119.010578) + (xy 59.387338 118.990278) + (xy 59.390578 118.989765) + (xy 59.390586 118.989764) + (xy 59.566799 118.961854) + (xy 59.770433 118.929602) + (xy 60.145087 118.829214) + (xy 60.507194 118.690214) + (xy 60.852789 118.514125) + (xy 61.178084 118.302876) + (xy 61.479516 118.058781) + (xy 61.753781 117.784516) + (xy 61.997876 117.483084) + (xy 62.209125 117.157789) + (xy 62.385214 116.812194) + (xy 62.515391 116.473071) + (xy 62.523028 116.453177) + (xy 62.523029 116.453175) + (xy 62.524214 116.450087) + (xy 62.624602 116.075433) + (xy 62.685278 115.692338) + (xy 62.688948 115.622324) + (xy 62.696653 115.6004) + (xy 105.5915 115.6004) + (xy 105.591837 115.603646) + (xy 105.591837 115.60365) + (xy 105.600698 115.689048) + (xy 105.602474 115.706166) + (xy 105.65845 115.873946) + (xy 105.751522 116.024348) + (xy 105.876697 116.149305) + (xy 105.882927 116.153145) + (xy 105.882928 116.153146) + (xy 106.02009 116.237694) + (xy 106.027262 116.242115) + (xy 106.107005 116.268564) + (xy 106.188611 116.295632) + (xy 106.188613 116.295632) + (xy 106.195139 116.297797) + (xy 106.201975 116.298497) + (xy 106.201978 116.298498) + (xy 106.245031 116.302909) + (xy 106.2996 116.3085) + (xy 107.7004 116.3085) + (xy 107.703646 116.308163) + (xy 107.70365 116.308163) + (xy 107.799308 116.298238) + (xy 107.799312 116.298237) + (xy 107.806166 116.297526) + (xy 107.812702 116.295345) + (xy 107.812704 116.295345) + (xy 107.944806 116.251272) + (xy 107.973946 116.24155) + (xy 108.124348 116.148478) + (xy 108.249305 116.023303) + (xy 108.289116 115.958718) + (xy 108.338275 115.878968) + (xy 108.338276 115.878966) + (xy 108.342115 115.872738) + (xy 108.369684 115.789621) + (xy 108.395632 115.711389) + (xy 108.395632 115.711387) + (xy 108.397797 115.704861) + (xy 108.4085 115.6004) + (xy 108.4085 112.3996) + (xy 108.398905 112.307124) + (xy 108.398238 112.300692) + (xy 108.398237 112.300688) + (xy 108.397526 112.293834) + (xy 108.34155 112.126054) + (xy 108.248478 111.975652) + (xy 108.123303 111.850695) + (xy 108.117072 111.846854) + (xy 107.978968 111.761725) + (xy 107.978966 111.761724) + (xy 107.972738 111.757885) + (xy 107.812254 111.704655) + (xy 107.811389 111.704368) + (xy 107.811387 111.704368) + (xy 107.804861 111.702203) + (xy 107.798025 111.701503) + (xy 107.798022 111.701502) + (xy 107.754969 111.697091) + (xy 107.7004 111.6915) + (xy 106.2996 111.6915) + (xy 106.296354 111.691837) + (xy 106.29635 111.691837) + (xy 106.200692 111.701762) + (xy 106.200688 111.701763) + (xy 106.193834 111.702474) + (xy 106.187298 111.704655) + (xy 106.187296 111.704655) + (xy 106.055194 111.748728) + (xy 106.026054 111.75845) + (xy 105.875652 111.851522) + (xy 105.750695 111.976697) + (xy 105.746855 111.982927) + (xy 105.746854 111.982928) + (xy 105.708507 112.045139) + (xy 105.657885 112.127262) + (xy 105.655581 112.134209) + (xy 105.629037 112.214238) + (xy 105.602203 112.295139) + (xy 105.601503 112.301975) + (xy 105.601502 112.301978) + (xy 105.597091 112.345031) + (xy 105.5915 112.3996) + (xy 105.5915 115.6004) + (xy 62.696653 115.6004) + (xy 62.712488 115.555344) + (xy 62.72568 115.539825) + (xy 68.200421 110.065084) + (xy 68.205906 110.06) + (xy 83.486835 110.06) + (xy 83.505465 110.296711) + (xy 83.560895 110.527594) + (xy 83.65176 110.746963) + (xy 83.654346 110.751183) + (xy 83.773241 110.945202) + (xy 83.773245 110.945208) + (xy 83.775824 110.949416) + (xy 83.930031 111.129969) + (xy 84.110584 111.284176) + (xy 84.114792 111.286755) + (xy 84.114798 111.286759) + (xy 84.308817 111.405654) + (xy 84.313037 111.40824) + (xy 84.317607 111.410133) + (xy 84.317611 111.410135) + (xy 84.527833 111.497211) + (xy 84.532406 111.499105) + (xy 84.612609 111.51836) + (xy 84.758476 111.55338) + (xy 84.758482 111.553381) + (xy 84.763289 111.554535) + (xy 85 111.573165) + (xy 85.236711 111.554535) + (xy 85.241518 111.553381) + (xy 85.241524 111.55338) + (xy 85.387391 111.51836) + (xy 85.467594 111.499105) + (xy 85.472167 111.497211) + (xy 85.682389 111.410135) + (xy 85.682393 111.410133) + (xy 85.686963 111.40824) + (xy 85.691183 111.405654) + (xy 85.885202 111.286759) + (xy 85.885208 111.286755) + (xy 85.889416 111.284176) + (xy 86.069969 111.129969) + (xy 86.224176 110.949416) + (xy 86.226755 110.945208) + (xy 86.226759 110.945202) + (xy 86.345654 110.751183) + (xy 86.34824 110.746963) + (xy 86.439105 110.527594) + (xy 86.494535 110.296711) + (xy 86.513165 110.06) + (xy 86.494535 109.823289) + (xy 86.492349 109.814181) + (xy 86.44026 109.597218) + (xy 86.439105 109.592406) + (xy 86.43698 109.587276) + (xy 86.350135 109.377611) + (xy 86.350133 109.377607) + (xy 86.34824 109.373037) + (xy 86.278327 109.25895) + (xy 86.226759 109.174798) + (xy 86.226755 109.174792) + (xy 86.224176 109.170584) + (xy 86.090968 109.014618) + (xy 86.073177 108.993787) + (xy 86.069969 108.990031) + (xy 85.889416 108.835824) + (xy 85.885208 108.833245) + (xy 85.885202 108.833241) + (xy 85.691183 108.714346) + (xy 85.686963 108.71176) + (xy 85.682393 108.709867) + (xy 85.682389 108.709865) + (xy 85.472167 108.622789) + (xy 85.472165 108.622788) + (xy 85.467594 108.620895) + (xy 85.387391 108.60164) + (xy 85.241524 108.56662) + (xy 85.241518 108.566619) + (xy 85.236711 108.565465) + (xy 85 108.546835) + (xy 84.763289 108.565465) + (xy 84.758482 108.566619) + (xy 84.758476 108.56662) + (xy 84.612609 108.60164) + (xy 84.532406 108.620895) + (xy 84.527835 108.622788) + (xy 84.527833 108.622789) + (xy 84.317611 108.709865) + (xy 84.317607 108.709867) + (xy 84.313037 108.71176) + (xy 84.308817 108.714346) + (xy 84.114798 108.833241) + (xy 84.114792 108.833245) + (xy 84.110584 108.835824) + (xy 83.930031 108.990031) + (xy 83.926823 108.993787) + (xy 83.909032 109.014618) + (xy 83.775824 109.170584) + (xy 83.773245 109.174792) + (xy 83.773241 109.174798) + (xy 83.721673 109.25895) + (xy 83.65176 109.373037) + (xy 83.649867 109.377607) + (xy 83.649865 109.377611) + (xy 83.56302 109.587276) + (xy 83.560895 109.592406) + (xy 83.55974 109.597218) + (xy 83.507652 109.814181) + (xy 83.505465 109.823289) + (xy 83.486835 110.06) + (xy 68.205906 110.06) + (xy 68.207435 110.058583) + (xy 68.248813 110.023055) + (xy 68.321418 109.944236) + (xy 68.324997 109.940508) + (xy 68.339772 109.925733) + (xy 68.375716 109.885319) + (xy 68.377193 109.883687) + (xy 68.468456 109.784614) + (xy 68.468459 109.78461) + (xy 68.470952 109.781904) + (xy 68.481654 109.767147) + (xy 68.489502 109.757386) + (xy 68.499186 109.746497) + (xy 68.499191 109.746491) + (xy 68.501633 109.743745) + (xy 68.503733 109.74074) + (xy 68.503738 109.740734) + (xy 68.580914 109.63031) + (xy 68.582189 109.628519) + (xy 68.661279 109.519461) + (xy 68.661282 109.519456) + (xy 68.663439 109.516482) + (xy 68.66543 109.512928) + (xy 68.672352 109.500567) + (xy 68.67901 109.489954) + (xy 68.687345 109.478028) + (xy 68.687348 109.478023) + (xy 68.689458 109.475004) + (xy 68.754935 109.353145) + (xy 68.755985 109.35123) + (xy 68.821844 109.233631) + (xy 68.821847 109.233625) + (xy 68.823644 109.230416) + (xy 68.825161 109.226764) + (xy 68.830642 109.213563) + (xy 68.836013 109.202251) + (xy 68.844645 109.186185) + (xy 68.852291 109.166825) + (xy 68.895465 109.057503) + (xy 68.89629 109.055466) + (xy 68.947965 108.931017) + (xy 68.947966 108.931013) + (xy 68.949379 108.927611) + (xy 68.954361 108.910065) + (xy 68.958375 108.898204) + (xy 68.963725 108.884656) + (xy 68.965077 108.881233) + (xy 68.997998 108.757073) + (xy 69.000545 108.747466) + (xy 69.001127 108.745346) + (xy 69.037924 108.61574) + (xy 69.037925 108.615734) + (xy 69.038927 108.612206) + (xy 69.041828 108.594193) + (xy 69.044431 108.581947) + (xy 69.049107 108.564312) + (xy 69.04963 108.560661) + (xy 69.068723 108.427344) + (xy 69.069053 108.425171) + (xy 69.090519 108.291898) + (xy 69.09052 108.291892) + (xy 69.091065 108.288506) + (xy 69.092119 108.267694) + (xy 69.093231 108.256207) + (xy 69.095067 108.24339) + (xy 69.095588 108.239752) + (xy 69.096262 108.213116) + (xy 69.097599 108.160333) + (xy 69.09772 108.157149) + (xy 69.100419 108.103851) + (xy 69.1005 108.102259) + (xy 69.1005 108.047317) + (xy 69.10054 108.044128) + (xy 69.103792 107.915675) + (xy 69.103792 107.915668) + (xy 69.103885 107.911986) + (xy 69.10292 107.901476) + (xy 69.101029 107.880904) + (xy 69.1005 107.869375) + (xy 69.1005 106.81) + (xy 103.786884 106.81) + (xy 103.805314 107.020655) + (xy 103.806738 107.025968) + (xy 103.806738 107.02597) + (xy 103.857649 107.21597) + (xy 103.860044 107.22491) + (xy 103.949411 107.416558) + (xy 104.070699 107.589776) + (xy 104.220224 107.739301) + (xy 104.393442 107.860589) + (xy 104.39842 107.86291) + (xy 104.398423 107.862912) + (xy 104.580108 107.947633) + (xy 104.58509 107.949956) + (xy 104.590398 107.951378) + (xy 104.5904 107.951379) + (xy 104.78403 108.003262) + (xy 104.784032 108.003262) + (xy 104.789345 108.004686) + (xy 105 108.023116) + (xy 105.210655 108.004686) + (xy 105.215968 108.003262) + (xy 105.21597 108.003262) + (xy 105.4096 107.951379) + (xy 105.409602 107.951378) + (xy 105.41491 107.949956) + (xy 105.419892 107.947633) + (xy 105.601577 107.862912) + (xy 105.60158 107.86291) + (xy 105.606558 107.860589) + (xy 105.779776 107.739301) + (xy 105.929301 107.589776) + (xy 106.050589 107.416558) + (xy 106.139956 107.22491) + (xy 106.142352 107.21597) + (xy 106.193262 107.02597) + (xy 106.193262 107.025968) + (xy 106.194686 107.020655) + (xy 106.213116 106.81) + (xy 106.194686 106.599345) + (xy 106.192289 106.5904) + (xy 106.141379 106.4004) + (xy 106.141378 106.400398) + (xy 106.139956 106.39509) + (xy 106.137087 106.388937) + (xy 106.052912 106.208423) + (xy 106.05291 106.20842) + (xy 106.050589 106.203442) + (xy 105.929301 106.030224) + (xy 105.779776 105.880699) + (xy 105.606558 105.759411) + (xy 105.60158 105.75709) + (xy 105.601577 105.757088) + (xy 105.419892 105.672367) + (xy 105.419891 105.672366) + (xy 105.41491 105.670044) + (xy 105.409602 105.668622) + (xy 105.4096 105.668621) + (xy 105.21597 105.616738) + (xy 105.215968 105.616738) + (xy 105.210655 105.615314) + (xy 105 105.596884) + (xy 104.789345 105.615314) + (xy 104.784032 105.616738) + (xy 104.78403 105.616738) + (xy 104.5904 105.668621) + (xy 104.590398 105.668622) + (xy 104.58509 105.670044) + (xy 104.580109 105.672366) + (xy 104.580108 105.672367) + (xy 104.398423 105.757088) + (xy 104.39842 105.75709) + (xy 104.393442 105.759411) + (xy 104.220224 105.880699) + (xy 104.070699 106.030224) + (xy 103.949411 106.203442) + (xy 103.94709 106.20842) + (xy 103.947088 106.208423) + (xy 103.862913 106.388937) + (xy 103.860044 106.39509) + (xy 103.858622 106.400398) + (xy 103.858621 106.4004) + (xy 103.807711 106.5904) + (xy 103.805314 106.599345) + (xy 103.786884 106.81) + (xy 69.1005 106.81) + (xy 69.1005 106.765812) + (xy 69.120502 106.697691) + (xy 69.135711 106.678443) + (xy 69.245312 106.564551) + (xy 69.245323 106.564538) + (xy 69.247528 106.562247) + (xy 69.49137 106.251264) + (xy 69.508141 106.224736) + (xy 69.680199 105.952566) + (xy 69.702537 105.917231) + (xy 69.703957 105.914382) + (xy 69.703962 105.914374) + (xy 69.877447 105.566416) + (xy 69.878867 105.563568) + (xy 70.007878 105.22215) + (xy 70.01743 105.196872) + (xy 70.017431 105.196869) + (xy 70.018554 105.193897) + (xy 70.026164 105.165299) + (xy 70.11162 104.844129) + (xy 70.120168 104.812002) + (xy 70.12256 104.797072) + (xy 70.158138 104.574947) + (xy 70.18267 104.421793) + (xy 70.205418 104.027265) + (xy 70.205513 104) + (xy 70.204823 103.986367) + (xy 70.185681 103.608496) + (xy 70.18568 103.608491) + (xy 70.18552 103.605323) + (xy 70.147105 103.354279) + (xy 70.126228 103.217848) + (xy 70.126226 103.217839) + (xy 70.125744 103.214688) + (xy 70.088974 103.072507) + (xy 70.027595 102.835172) + (xy 70.027592 102.835164) + (xy 70.026798 102.832092) + (xy 70.021989 102.81909) + (xy 69.97269 102.685819) + (xy 69.889695 102.461455) + (xy 69.715839 102.10657) + (xy 69.507009 101.771071) + (xy 69.277229 101.47377) + (xy 69.267296 101.460918) + (xy 69.267291 101.460913) + (xy 69.265344 101.458393) + (xy 69.257922 101.450572) + (xy 68.995517 101.174054) + (xy 68.995514 101.174052) + (xy 68.993318 101.171737) + (xy 68.982408 101.162353) + (xy 68.696131 100.916116) + (xy 68.696128 100.916114) + (xy 68.693716 100.914039) + (xy 68.691108 100.912219) + (xy 68.691102 100.912215) + (xy 68.37222 100.68976) + (xy 68.369607 100.687937) + (xy 68.024307 100.495746) + (xy 68.021387 100.494488) + (xy 68.021382 100.494486) + (xy 67.664287 100.340696) + (xy 67.664277 100.340692) + (xy 67.661353 100.339433) + (xy 67.28446 100.220599) + (xy 66.968969 100.155264) + (xy 66.900613 100.141108) + (xy 66.90061 100.141108) + (xy 66.897488 100.140461) + (xy 66.595259 100.109228) + (xy 66.507555 100.100165) + (xy 66.507552 100.100165) + (xy 66.504399 100.099839) + (xy 66.501233 100.099833) + (xy 66.501224 100.099833) + (xy 66.306076 100.099493) + (xy 66.109217 100.09915) + (xy 65.99362 100.110688) + (xy 65.719161 100.138082) + (xy 65.719155 100.138083) + (xy 65.715988 100.138399) + (xy 65.580404 100.165984) + (xy 65.331863 100.21655) + (xy 65.331859 100.216551) + (xy 65.328738 100.217186) + (xy 65.325696 100.218133) + (xy 65.32569 100.218135) + (xy 65.247531 100.242479) + (xy 64.951433 100.334703) + (xy 64.948493 100.335957) + (xy 64.590873 100.488495) + (xy 64.590869 100.488497) + (xy 64.587936 100.489748) + (xy 64.585149 100.491287) + (xy 64.585148 100.491287) + (xy 64.526561 100.523629) + (xy 64.241967 100.680733) + (xy 64.239346 100.682548) + (xy 64.239341 100.682551) + (xy 64.231563 100.687937) + (xy 63.91707 100.905702) + (xy 63.616571 101.162353) + (xy 63.343546 101.448057) + (xy 63.341589 101.45057) + (xy 63.341588 101.450572) + (xy 63.134414 101.716699) + (xy 63.076785 101.758165) + (xy 63.005886 101.761892) + (xy 62.944227 101.726696) + (xy 62.911385 101.663753) + (xy 62.908989 101.639299) + (xy 62.908989 89.57) + (xy 83.486835 89.57) + (xy 83.505465 89.806711) + (xy 83.506619 89.811518) + (xy 83.50662 89.811524) + (xy 83.519041 89.863261) + (xy 83.560895 90.037594) + (xy 83.562788 90.042165) + (xy 83.562789 90.042167) + (xy 83.649842 90.252332) + (xy 83.65176 90.256963) + (xy 83.654346 90.261183) + (xy 83.773241 90.455202) + (xy 83.773245 90.455208) + (xy 83.775824 90.459416) + (xy 83.930031 90.639969) + (xy 84.110584 90.794176) + (xy 84.114792 90.796755) + (xy 84.114798 90.796759) + (xy 84.287787 90.902767) + (xy 84.313037 90.91824) + (xy 84.317607 90.920133) + (xy 84.317611 90.920135) + (xy 84.527833 91.007211) + (xy 84.532406 91.009105) + (xy 84.612609 91.02836) + (xy 84.758476 91.06338) + (xy 84.758482 91.063381) + (xy 84.763289 91.064535) + (xy 85 91.083165) + (xy 85.236711 91.064535) + (xy 85.241518 91.063381) + (xy 85.241524 91.06338) + (xy 85.387391 91.02836) + (xy 85.467594 91.009105) + (xy 85.472167 91.007211) + (xy 85.682389 90.920135) + (xy 85.682393 90.920133) + (xy 85.686963 90.91824) + (xy 85.712213 90.902767) + (xy 85.885202 90.796759) + (xy 85.885208 90.796755) + (xy 85.889416 90.794176) + (xy 86.069969 90.639969) + (xy 86.224176 90.459416) + (xy 86.226755 90.455208) + (xy 86.226759 90.455202) + (xy 86.345654 90.261183) + (xy 86.34824 90.256963) + (xy 86.350159 90.252332) + (xy 86.437211 90.042167) + (xy 86.437212 90.042165) + (xy 86.439105 90.037594) + (xy 86.482921 89.855085) + (xy 86.518273 89.793517) + (xy 86.5813 89.760834) + (xy 86.60544 89.7585) + (xy 100.745198 89.7585) + (xy 100.813319 89.778502) + (xy 100.846024 89.808935) + (xy 100.886739 89.863261) + (xy 101.003295 89.950615) + (xy 101.139684 90.001745) + (xy 101.201866 90.0085) + (xy 102.298134 90.0085) + (xy 102.360316 90.001745) + (xy 102.496705 89.950615) + (xy 102.613261 89.863261) + (xy 102.700615 89.746705) + (xy 102.751745 89.610316) + (xy 102.7585 89.548134) + (xy 103.2415 89.548134) + (xy 103.248255 89.610316) + (xy 103.299385 89.746705) + (xy 103.386739 89.863261) + (xy 103.503295 89.950615) + (xy 103.639684 90.001745) + (xy 103.701866 90.0085) + (xy 104.798134 90.0085) + (xy 104.860316 90.001745) + (xy 104.996705 89.950615) + (xy 105.113261 89.863261) + (xy 105.200615 89.746705) + (xy 105.251745 89.610316) + (xy 105.2585 89.548134) + (xy 105.2585 89.116371) + (xy 105.278502 89.04825) + (xy 105.295405 89.027276) + (xy 106.708911 87.61377) + (xy 106.723323 87.601384) + (xy 106.734918 87.592851) + (xy 106.734923 87.592846) + (xy 106.740818 87.588508) + (xy 106.745557 87.58293) + (xy 106.74556 87.582927) + (xy 106.775035 87.548232) + (xy 106.781965 87.540716) + (xy 106.787661 87.53502) + (xy 106.789924 87.532159) + (xy 106.789929 87.532154) + (xy 106.805293 87.512734) + (xy 106.808082 87.509333) + (xy 106.819563 87.495819) + (xy 106.855333 87.453715) + (xy 106.858659 87.447202) + (xy 106.86202 87.442163) + (xy 106.865196 87.437021) + (xy 106.869734 87.431284) + (xy 106.900655 87.365125) + (xy 106.902561 87.361225) + (xy 106.935769 87.296192) + (xy 106.937508 87.289083) + (xy 106.939604 87.283449) + (xy 106.941523 87.277679) + (xy 106.944622 87.27105) + (xy 106.959491 87.199565) + (xy 106.960461 87.195282) + (xy 106.976473 87.129844) + (xy 106.977808 87.12439) + (xy 106.9785 87.113236) + (xy 106.978535 87.113238) + (xy 106.978775 87.109266) + (xy 106.979152 87.105045) + (xy 106.980641 87.097885) + (xy 106.978546 87.020458) + (xy 106.9785 87.01705) + (xy 106.9785 84.325478) + (xy 106.998502 84.257357) + (xy 107.032229 84.222265) + (xy 107.03527 84.220136) + (xy 107.035272 84.220134) + (xy 107.039781 84.216977) + (xy 107.196977 84.059781) + (xy 107.324488 83.877676) + (xy 107.326811 83.872694) + (xy 107.326814 83.872689) + (xy 107.375805 83.767627) + (xy 107.422723 83.714342) + (xy 107.491 83.694881) + (xy 107.55896 83.715423) + (xy 107.604195 83.767627) + (xy 107.653186 83.872689) + (xy 107.653189 83.872694) + (xy 107.655512 83.877676) + (xy 107.783023 84.059781) + (xy 107.940219 84.216977) + (xy 107.944727 84.220134) + (xy 107.94473 84.220136) + (xy 107.947771 84.222265) + (xy 108.122323 84.344488) + (xy 108.127305 84.346811) + (xy 108.12731 84.346814) + (xy 108.318822 84.436117) + (xy 108.323804 84.43844) + (xy 108.329112 84.439862) + (xy 108.329114 84.439863) + (xy 108.394949 84.457503) + (xy 108.538537 84.495978) + (xy 108.76 84.515353) + (xy 108.981463 84.495978) + (xy 109.125051 84.457503) + (xy 109.190886 84.439863) + (xy 109.190888 84.439862) + (xy 109.196196 84.43844) + (xy 109.201178 84.436117) + (xy 109.39269 84.346814) + (xy 109.392695 84.346811) + (xy 109.397677 84.344488) + (xy 109.572229 84.222265) + (xy 109.57527 84.220136) + (xy 109.575273 84.220134) + (xy 109.579781 84.216977) + (xy 109.736977 84.059781) + (xy 109.864488 83.877676) + (xy 109.866811 83.872694) + (xy 109.866814 83.872689) + (xy 109.915805 83.767627) + (xy 109.962723 83.714342) + (xy 110.031 83.694881) + (xy 110.09896 83.715423) + (xy 110.144195 83.767627) + (xy 110.193186 83.872689) + (xy 110.193189 83.872694) + (xy 110.195512 83.877676) + (xy 110.323023 84.059781) + (xy 110.480219 84.216977) + (xy 110.484727 84.220134) + (xy 110.48473 84.220136) + (xy 110.487771 84.222265) + (xy 110.662323 84.344488) + (xy 110.667305 84.346811) + (xy 110.66731 84.346814) + (xy 110.858822 84.436117) + (xy 110.863804 84.43844) + (xy 110.869112 84.439862) + (xy 110.869114 84.439863) + (xy 110.934949 84.457503) + (xy 111.078537 84.495978) + (xy 111.3 84.515353) + (xy 111.521463 84.495978) + (xy 111.665051 84.457503) + (xy 111.730886 84.439863) + (xy 111.730888 84.439862) + (xy 111.736196 84.43844) + (xy 111.741178 84.436117) + (xy 111.93269 84.346814) + (xy 111.932695 84.346811) + (xy 111.937677 84.344488) + (xy 112.112229 84.222265) + (xy 112.11527 84.220136) + (xy 112.115273 84.220134) + (xy 112.119781 84.216977) + (xy 112.276977 84.059781) + (xy 112.404488 83.877676) + (xy 112.406811 83.872694) + (xy 112.406814 83.872689) + (xy 112.455805 83.767627) + (xy 112.502723 83.714342) + (xy 112.571 83.694881) + (xy 112.63896 83.715423) + (xy 112.684195 83.767627) + (xy 112.733186 83.872689) + (xy 112.733189 83.872694) + (xy 112.735512 83.877676) + (xy 112.863023 84.059781) + (xy 113.020219 84.216977) + (xy 113.024727 84.220134) + (xy 113.02473 84.220136) + (xy 113.027771 84.222265) + (xy 113.202323 84.344488) + (xy 113.207305 84.346811) + (xy 113.20731 84.346814) + (xy 113.398822 84.436117) + (xy 113.403804 84.43844) + (xy 113.409112 84.439862) + (xy 113.409114 84.439863) + (xy 113.474949 84.457503) + (xy 113.618537 84.495978) + (xy 113.84 84.515353) + (xy 114.061463 84.495978) + (xy 114.205051 84.457503) + (xy 114.270886 84.439863) + (xy 114.270888 84.439862) + (xy 114.276196 84.43844) + (xy 114.281178 84.436117) + (xy 114.47269 84.346814) + (xy 114.472695 84.346811) + (xy 114.477677 84.344488) + (xy 114.652229 84.222265) + (xy 114.65527 84.220136) + (xy 114.655273 84.220134) + (xy 114.659781 84.216977) + (xy 114.816977 84.059781) + (xy 114.944488 83.877676) + (xy 114.946811 83.872694) + (xy 114.946814 83.872689) + (xy 114.995805 83.767627) + (xy 115.042723 83.714342) + (xy 115.111 83.694881) + (xy 115.17896 83.715423) + (xy 115.224195 83.767627) + (xy 115.273186 83.872689) + (xy 115.273189 83.872694) + (xy 115.275512 83.877676) + (xy 115.403023 84.059781) + (xy 115.560219 84.216977) + (xy 115.564728 84.220134) + (xy 115.56473 84.220136) + (xy 115.567771 84.222265) + (xy 115.568797 84.223548) + (xy 115.568943 84.223671) + (xy 115.568918 84.2237) + (xy 115.612099 84.277722) + (xy 115.6215 84.325478) + (xy 115.6215 87.443629) + (xy 115.601498 87.51175) + (xy 115.584595 87.532724) + (xy 105.170684 97.946635) + (xy 105.108372 97.980661) + (xy 105.070608 97.983061) + (xy 105.005476 97.977363) + (xy 105.005475 97.977363) + (xy 105 97.976884) + (xy 104.789345 97.995314) + (xy 104.784032 97.996738) + (xy 104.78403 97.996738) + (xy 104.5904 98.048621) + (xy 104.590398 98.048622) + (xy 104.58509 98.050044) + (xy 104.580109 98.052366) + (xy 104.580108 98.052367) + (xy 104.398423 98.137088) + (xy 104.39842 98.13709) + (xy 104.393442 98.139411) + (xy 104.220224 98.260699) + (xy 104.070699 98.410224) + (xy 103.949411 98.583442) + (xy 103.94709 98.58842) + (xy 103.947088 98.588423) + (xy 103.886966 98.717355) + (xy 103.860044 98.77509) + (xy 103.858622 98.780398) + (xy 103.858621 98.7804) + (xy 103.807665 98.970571) + (xy 103.805314 98.979345) + (xy 103.786884 99.19) + (xy 103.805314 99.400655) + (xy 103.806738 99.405968) + (xy 103.806738 99.40597) + (xy 103.857649 99.59597) + (xy 103.860044 99.60491) + (xy 103.862366 99.609891) + (xy 103.862367 99.609892) + (xy 103.946087 99.789429) + (xy 103.949411 99.796558) + (xy 104.070699 99.969776) + (xy 104.204595 100.103672) + (xy 104.238621 100.165984) + (xy 104.2415 100.192767) + (xy 104.2415 102.74293) + (xy 104.240067 102.76188) + (xy 104.236801 102.783349) + (xy 104.237394 102.790641) + (xy 104.237394 102.790644) + (xy 104.241085 102.836018) + (xy 104.2415 102.846233) + (xy 104.2415 102.854293) + (xy 104.241925 102.857937) + (xy 104.244789 102.882507) + (xy 104.245222 102.886882) + (xy 104.249743 102.94246) + (xy 104.25114 102.959637) + (xy 104.253396 102.966601) + (xy 104.254587 102.97256) + (xy 104.255971 102.978415) + (xy 104.256818 102.985681) + (xy 104.281735 103.054327) + (xy 104.283152 103.058455) + (xy 104.305649 103.127899) + (xy 104.309445 103.134154) + (xy 104.311951 103.139628) + (xy 104.31467 103.145058) + (xy 104.317167 103.151937) + (xy 104.32118 103.158057) + (xy 104.32118 103.158058) + (xy 104.357186 103.212976) + (xy 104.359523 103.21668) + (xy 104.397405 103.279107) + (xy 104.401121 103.283315) + (xy 104.401122 103.283316) + (xy 104.404803 103.287484) + (xy 104.404776 103.287508) + (xy 104.407429 103.2905) + (xy 104.410132 103.293733) + (xy 104.414144 103.299852) + (xy 104.433195 103.317899) + (xy 104.470383 103.353128) + (xy 104.472825 103.355506) + (xy 107.756635 106.639316) + (xy 107.790661 106.701628) + (xy 107.793061 106.739392) + (xy 107.786884 106.81) + (xy 107.805314 107.020655) + (xy 107.806738 107.025968) + (xy 107.806738 107.02597) + (xy 107.857649 107.21597) + (xy 107.860044 107.22491) + (xy 107.949411 107.416558) + (xy 108.070699 107.589776) + (xy 108.220224 107.739301) + (xy 108.393442 107.860589) + (xy 108.39842 107.86291) + (xy 108.398423 107.862912) + (xy 108.580108 107.947633) + (xy 108.58509 107.949956) + (xy 108.590398 107.951378) + (xy 108.5904 107.951379) + (xy 108.78403 108.003262) + (xy 108.784032 108.003262) + (xy 108.789345 108.004686) + (xy 109 108.023116) + (xy 109.210655 108.004686) + (xy 109.215968 108.003262) + (xy 109.21597 108.003262) + (xy 109.4096 107.951379) + (xy 109.409602 107.951378) + (xy 109.41491 107.949956) + (xy 109.419892 107.947633) + (xy 109.601577 107.862912) + (xy 109.60158 107.86291) + (xy 109.606558 107.860589) + (xy 109.779776 107.739301) + (xy 109.929301 107.589776) + (xy 110.050589 107.416558) + (xy 110.139956 107.22491) + (xy 110.142352 107.21597) + (xy 110.193262 107.02597) + (xy 110.193262 107.025968) + (xy 110.194686 107.020655) + (xy 110.213116 106.81) + (xy 110.194686 106.599345) + (xy 110.192289 106.5904) + (xy 110.141379 106.4004) + (xy 110.141378 106.400398) + (xy 110.139956 106.39509) + (xy 110.137087 106.388937) + (xy 110.052912 106.208423) + (xy 110.05291 106.20842) + (xy 110.050589 106.203442) + (xy 109.929301 106.030224) + (xy 109.779776 105.880699) + (xy 109.606558 105.759411) + (xy 109.60158 105.75709) + (xy 109.601577 105.757088) + (xy 109.419892 105.672367) + (xy 109.419891 105.672366) + (xy 109.41491 105.670044) + (xy 109.409602 105.668622) + (xy 109.4096 105.668621) + (xy 109.21597 105.616738) + (xy 109.215968 105.616738) + (xy 109.210655 105.615314) + (xy 109 105.596884) + (xy 108.994525 105.597363) + (xy 108.994524 105.597363) + (xy 108.929392 105.603061) + (xy 108.859787 105.589071) + (xy 108.829316 105.566635) + (xy 105.795405 102.532724) + (xy 105.761379 102.470412) + (xy 105.7585 102.443629) + (xy 105.7585 100.204261) + (xy 108.350294 100.204261) + (xy 108.35959 100.216276) + (xy 108.389189 100.237001) + (xy 108.398677 100.242479) + (xy 108.580277 100.327159) + (xy 108.590571 100.330907) + (xy 108.784122 100.382769) + (xy 108.794909 100.384671) + (xy 108.994525 100.402135) + (xy 109.005475 100.402135) + (xy 109.205091 100.384671) + (xy 109.215878 100.382769) + (xy 109.409429 100.330907) + (xy 109.419723 100.327159) + (xy 109.601323 100.242479) + (xy 109.610811 100.237001) + (xy 109.641248 100.215689) + (xy 109.649623 100.205212) + (xy 109.649123 100.204261) + (xy 112.350294 100.204261) + (xy 112.35959 100.216276) + (xy 112.389189 100.237001) + (xy 112.398677 100.242479) + (xy 112.580277 100.327159) + (xy 112.590571 100.330907) + (xy 112.784122 100.382769) + (xy 112.794909 100.384671) + (xy 112.994525 100.402135) + (xy 113.005475 100.402135) + (xy 113.205091 100.384671) + (xy 113.215878 100.382769) + (xy 113.409429 100.330907) + (xy 113.419723 100.327159) + (xy 113.601323 100.242479) + (xy 113.610811 100.237001) + (xy 113.641248 100.215689) + (xy 113.649623 100.205212) + (xy 113.642554 100.191764) + (xy 113.012812 99.562022) + (xy 112.998868 99.554408) + (xy 112.997035 99.554539) + (xy 112.99042 99.55879) + (xy 112.356724 100.192486) + (xy 112.350294 100.204261) + (xy 109.649123 100.204261) + (xy 109.642554 100.191764) + (xy 109.012812 99.562022) + (xy 108.998868 99.554408) + (xy 108.997035 99.554539) + (xy 108.99042 99.55879) + (xy 108.356724 100.192486) + (xy 108.350294 100.204261) + (xy 105.7585 100.204261) + (xy 105.7585 100.192767) + (xy 105.778502 100.124646) + (xy 105.795405 100.103672) + (xy 105.929301 99.969776) + (xy 106.050589 99.796558) + (xy 106.053914 99.789429) + (xy 106.137633 99.609892) + (xy 106.137634 99.609891) + (xy 106.139956 99.60491) + (xy 106.142352 99.59597) + (xy 106.193262 99.40597) + (xy 106.193262 99.405968) + (xy 106.194686 99.400655) + (xy 106.212637 99.195475) + (xy 107.787865 99.195475) + (xy 107.805329 99.395091) + (xy 107.807231 99.405878) + (xy 107.859093 99.599429) + (xy 107.862841 99.609723) + (xy 107.947521 99.791323) + (xy 107.952999 99.800811) + (xy 107.974311 99.831248) + (xy 107.984788 99.839623) + (xy 107.998236 99.832554) + (xy 108.627978 99.202812) + (xy 108.634356 99.191132) + (xy 109.364408 99.191132) + (xy 109.364539 99.192965) + (xy 109.36879 99.19958) + (xy 110.002486 99.833276) + (xy 110.014261 99.839706) + (xy 110.026276 99.83041) + (xy 110.047001 99.800811) + (xy 110.052479 99.791323) + (xy 110.137159 99.609723) + (xy 110.140907 99.599429) + (xy 110.192769 99.405878) + (xy 110.194671 99.395091) + (xy 110.212135 99.195475) + (xy 111.787865 99.195475) + (xy 111.805329 99.395091) + (xy 111.807231 99.405878) + (xy 111.859093 99.599429) + (xy 111.862841 99.609723) + (xy 111.947521 99.791323) + (xy 111.952999 99.800811) + (xy 111.974311 99.831248) + (xy 111.984788 99.839623) + (xy 111.998236 99.832554) + (xy 112.627978 99.202812) + (xy 112.634356 99.191132) + (xy 113.364408 99.191132) + (xy 113.364539 99.192965) + (xy 113.36879 99.19958) + (xy 114.002486 99.833276) + (xy 114.014261 99.839706) + (xy 114.026276 99.83041) + (xy 114.047001 99.800811) + (xy 114.052479 99.791323) + (xy 114.137159 99.609723) + (xy 114.140907 99.599429) + (xy 114.192769 99.405878) + (xy 114.194671 99.395091) + (xy 114.212135 99.195475) + (xy 114.212135 99.184525) + (xy 114.194671 98.984909) + (xy 114.192769 98.974122) + (xy 114.140907 98.780571) + (xy 114.137159 98.770277) + (xy 114.052479 98.588677) + (xy 114.047001 98.579189) + (xy 114.025689 98.548752) + (xy 114.015212 98.540377) + (xy 114.001764 98.547446) + (xy 113.372022 99.177188) + (xy 113.364408 99.191132) + (xy 112.634356 99.191132) + (xy 112.635592 99.188868) + (xy 112.635461 99.187035) + (xy 112.63121 99.18042) + (xy 111.997514 98.546724) + (xy 111.985739 98.540294) + (xy 111.973724 98.54959) + (xy 111.952999 98.579189) + (xy 111.947521 98.588677) + (xy 111.862841 98.770277) + (xy 111.859093 98.780571) + (xy 111.807231 98.974122) + (xy 111.805329 98.984909) + (xy 111.787865 99.184525) + (xy 111.787865 99.195475) + (xy 110.212135 99.195475) + (xy 110.212135 99.184525) + (xy 110.194671 98.984909) + (xy 110.192769 98.974122) + (xy 110.140907 98.780571) + (xy 110.137159 98.770277) + (xy 110.052479 98.588677) + (xy 110.047001 98.579189) + (xy 110.025689 98.548752) + (xy 110.015212 98.540377) + (xy 110.001764 98.547446) + (xy 109.372022 99.177188) + (xy 109.364408 99.191132) + (xy 108.634356 99.191132) + (xy 108.635592 99.188868) + (xy 108.635461 99.187035) + (xy 108.63121 99.18042) + (xy 107.997514 98.546724) + (xy 107.985739 98.540294) + (xy 107.973724 98.54959) + (xy 107.952999 98.579189) + (xy 107.947521 98.588677) + (xy 107.862841 98.770277) + (xy 107.859093 98.780571) + (xy 107.807231 98.974122) + (xy 107.805329 98.984909) + (xy 107.787865 99.184525) + (xy 107.787865 99.195475) + (xy 106.212637 99.195475) + (xy 106.213116 99.19) + (xy 106.211796 99.174909) + (xy 106.206939 99.119392) + (xy 106.220929 99.049787) + (xy 106.243365 99.019316) + (xy 107.087893 98.174788) + (xy 108.350377 98.174788) + (xy 108.357446 98.188236) + (xy 108.987188 98.817978) + (xy 109.001132 98.825592) + (xy 109.002965 98.825461) + (xy 109.00958 98.82121) + (xy 109.643276 98.187514) + (xy 109.649706 98.175739) + (xy 109.64897 98.174788) + (xy 112.350377 98.174788) + (xy 112.357446 98.188236) + (xy 112.987188 98.817978) + (xy 113.001132 98.825592) + (xy 113.002965 98.825461) + (xy 113.00958 98.82121) + (xy 113.643276 98.187514) + (xy 113.649706 98.175739) + (xy 113.64041 98.163724) + (xy 113.610811 98.142999) + (xy 113.601323 98.137521) + (xy 113.419723 98.052841) + (xy 113.409429 98.049093) + (xy 113.215878 97.997231) + (xy 113.205091 97.995329) + (xy 113.005475 97.977865) + (xy 112.994525 97.977865) + (xy 112.794909 97.995329) + (xy 112.784122 97.997231) + (xy 112.590571 98.049093) + (xy 112.580277 98.052841) + (xy 112.398677 98.137521) + (xy 112.389189 98.142999) + (xy 112.358752 98.164311) + (xy 112.350377 98.174788) + (xy 109.64897 98.174788) + (xy 109.64041 98.163724) + (xy 109.610811 98.142999) + (xy 109.601323 98.137521) + (xy 109.419723 98.052841) + (xy 109.409429 98.049093) + (xy 109.215878 97.997231) + (xy 109.205091 97.995329) + (xy 109.005475 97.977865) + (xy 108.994525 97.977865) + (xy 108.794909 97.995329) + (xy 108.784122 97.997231) + (xy 108.590571 98.049093) + (xy 108.580277 98.052841) + (xy 108.398677 98.137521) + (xy 108.389189 98.142999) + (xy 108.358752 98.164311) + (xy 108.350377 98.174788) + (xy 107.087893 98.174788) + (xy 116.868911 88.39377) + (xy 116.883323 88.381384) + (xy 116.894918 88.372851) + (xy 116.894923 88.372846) + (xy 116.900818 88.368508) + (xy 116.905557 88.36293) + (xy 116.90556 88.362927) + (xy 116.935035 88.328232) + (xy 116.941965 88.320716) + (xy 116.94766 88.315021) + (xy 116.952518 88.30888) + (xy 116.965281 88.292749) + (xy 116.968072 88.289345) + (xy 117.010591 88.239297) + (xy 117.010592 88.239295) + (xy 117.015333 88.233715) + (xy 117.018661 88.227199) + (xy 117.022028 88.22215) + (xy 117.025195 88.217021) + (xy 117.029734 88.211284) + (xy 117.060655 88.145125) + (xy 117.062561 88.141225) + (xy 117.066869 88.132789) + (xy 117.095769 88.076192) + (xy 117.097508 88.069084) + (xy 117.099607 88.063441) + (xy 117.101524 88.057678) + (xy 117.104622 88.05105) + (xy 117.119487 87.979583) + (xy 117.120457 87.975299) + (xy 117.136473 87.909845) + (xy 117.137808 87.90439) + (xy 117.1385 87.893236) + (xy 117.138536 87.893238) + (xy 117.138775 87.889245) + (xy 117.139149 87.885053) + (xy 117.14064 87.877885) + (xy 117.138546 87.800479) + (xy 117.1385 87.797072) + (xy 117.1385 84.325478) + (xy 117.158502 84.257357) + (xy 117.192229 84.222265) + (xy 117.19527 84.220136) + (xy 117.195272 84.220134) + (xy 117.199781 84.216977) + (xy 117.356977 84.059781) + (xy 117.484488 83.877676) + (xy 117.486811 83.872694) + (xy 117.486814 83.872689) + (xy 117.535805 83.767627) + (xy 117.582723 83.714342) + (xy 117.651 83.694881) + (xy 117.71896 83.715423) + (xy 117.764195 83.767627) + (xy 117.813186 83.872689) + (xy 117.813189 83.872694) + (xy 117.815512 83.877676) + (xy 117.943023 84.059781) + (xy 118.100219 84.216977) + (xy 118.104728 84.220134) + (xy 118.10473 84.220136) + (xy 118.107771 84.222265) + (xy 118.108797 84.223548) + (xy 118.108943 84.223671) + (xy 118.108918 84.2237) + (xy 118.152099 84.277722) + (xy 118.1615 84.325478) + (xy 118.1615 100.523629) + (xy 118.141498 100.59175) + (xy 118.124595 100.612724) + (xy 113.170684 105.566635) + (xy 113.108372 105.600661) + (xy 113.070608 105.603061) + (xy 113.005476 105.597363) + (xy 113.005475 105.597363) + (xy 113 105.596884) + (xy 112.789345 105.615314) + (xy 112.784032 105.616738) + (xy 112.78403 105.616738) + (xy 112.5904 105.668621) + (xy 112.590398 105.668622) + (xy 112.58509 105.670044) + (xy 112.580109 105.672366) + (xy 112.580108 105.672367) + (xy 112.398423 105.757088) + (xy 112.39842 105.75709) + (xy 112.393442 105.759411) + (xy 112.220224 105.880699) + (xy 112.070699 106.030224) + (xy 111.949411 106.203442) + (xy 111.94709 106.20842) + (xy 111.947088 106.208423) + (xy 111.862913 106.388937) + (xy 111.860044 106.39509) + (xy 111.858622 106.400398) + (xy 111.858621 106.4004) + (xy 111.807711 106.5904) + (xy 111.805314 106.599345) + (xy 111.786884 106.81) + (xy 111.787363 106.815475) + (xy 111.787363 106.815476) + (xy 111.793061 106.880608) + (xy 111.779071 106.950213) + (xy 111.756635 106.980684) + (xy 110.011089 108.72623) + (xy 109.996677 108.738616) + (xy 109.985082 108.747149) + (xy 109.985077 108.747154) + (xy 109.979182 108.751492) + (xy 109.974443 108.75707) + (xy 109.97444 108.757073) + (xy 109.944965 108.791768) + (xy 109.938035 108.799284) + (xy 109.93234 108.804979) + (xy 109.93006 108.807861) + (xy 109.914719 108.827251) + (xy 109.911928 108.830655) + (xy 109.907537 108.835824) + (xy 109.864667 108.886285) + (xy 109.861339 108.892801) + (xy 109.857972 108.89785) + (xy 109.854805 108.902979) + (xy 109.850266 108.908716) + (xy 109.819345 108.974875) + (xy 109.817442 108.978769) + (xy 109.784231 109.043808) + (xy 109.782492 109.050916) + (xy 109.780393 109.056559) + (xy 109.778476 109.062322) + (xy 109.775378 109.06895) + (xy 109.773888 109.076112) + (xy 109.773888 109.076113) + (xy 109.760514 109.140412) + (xy 109.759544 109.144696) + (xy 109.742192 109.21561) + (xy 109.7415 109.226764) + (xy 109.741464 109.226762) + (xy 109.741225 109.230755) + (xy 109.740851 109.234947) + (xy 109.73936 109.242115) + (xy 109.739558 109.249432) + (xy 109.741454 109.319521) + (xy 109.7415 109.322928) + (xy 109.7415 111.84177) + (xy 109.721498 111.909891) + (xy 109.680865 111.949489) + (xy 109.673692 111.953842) + (xy 109.667117 111.957832) + (xy 109.663087 111.961329) + (xy 109.509762 112.094378) + (xy 109.486581 112.114493) + (xy 109.483198 112.118619) + (xy 109.483194 112.118623) + (xy 109.404795 112.214238) + (xy 109.335022 112.299333) + (xy 109.332383 112.303969) + (xy 109.332381 112.303972) + (xy 109.330587 112.307124) + (xy 109.216773 112.507066) + (xy 109.135216 112.731753) + (xy 109.134267 112.737002) + (xy 109.134266 112.737005) + (xy 109.09342 112.962885) + (xy 109.093419 112.962893) + (xy 109.092682 112.966969) + (xy 109.0915 112.992032) + (xy 109.0915 114.960012) + (xy 109.106617 115.138175) + (xy 109.107957 115.143339) + (xy 109.107958 115.143343) + (xy 109.162937 115.355164) + (xy 109.166668 115.36954) + (xy 109.16886 115.374406) + (xy 109.224345 115.497577) + (xy 109.264843 115.58748) + (xy 109.398334 115.785762) + (xy 109.402013 115.789619) + (xy 109.402015 115.789621) + (xy 109.47055 115.861464) + (xy 109.563326 115.958718) + (xy 109.7551 116.101402) + (xy 109.759851 116.103818) + (xy 109.759855 116.10382) + (xy 109.963414 116.207314) + (xy 109.968172 116.209733) + (xy 110.058221 116.237694) + (xy 110.191349 116.279032) + (xy 110.191355 116.279033) + (xy 110.196452 116.280616) + (xy 110.323883 116.297506) + (xy 110.428127 116.311323) + (xy 110.428131 116.311323) + (xy 110.433411 116.312023) + (xy 110.43874 116.311823) + (xy 110.438741 116.311823) + (xy 110.536509 116.308152) + (xy 110.672274 116.303055) + (xy 110.759184 116.284819) + (xy 110.900984 116.255067) + (xy 110.900987 116.255066) + (xy 110.906211 116.25397) + (xy 111.128533 116.166171) + (xy 111.332883 116.042168) + (xy 111.513419 115.885507) + (xy 111.516802 115.881381) + (xy 111.516806 115.881377) + (xy 111.655108 115.712704) + (xy 111.664978 115.700667) + (xy 111.722054 115.6004) + (xy 121.5915 115.6004) + (xy 121.591837 115.603646) + (xy 121.591837 115.60365) + (xy 121.600698 115.689048) + (xy 121.602474 115.706166) + (xy 121.65845 115.873946) + (xy 121.751522 116.024348) + (xy 121.876697 116.149305) + (xy 121.882927 116.153145) + (xy 121.882928 116.153146) + (xy 122.02009 116.237694) + (xy 122.027262 116.242115) + (xy 122.107005 116.268564) + (xy 122.188611 116.295632) + (xy 122.188613 116.295632) + (xy 122.195139 116.297797) + (xy 122.201975 116.298497) + (xy 122.201978 116.298498) + (xy 122.245031 116.302909) + (xy 122.2996 116.3085) + (xy 123.7004 116.3085) + (xy 123.703646 116.308163) + (xy 123.70365 116.308163) + (xy 123.799308 116.298238) + (xy 123.799312 116.298237) + (xy 123.806166 116.297526) + (xy 123.812702 116.295345) + (xy 123.812704 116.295345) + (xy 123.944806 116.251272) + (xy 123.973946 116.24155) + (xy 124.124348 116.148478) + (xy 124.249305 116.023303) + (xy 124.289116 115.958718) + (xy 124.338275 115.878968) + (xy 124.338276 115.878966) + (xy 124.342115 115.872738) + (xy 124.369684 115.789621) + (xy 124.395632 115.711389) + (xy 124.395632 115.711387) + (xy 124.397797 115.704861) + (xy 124.4085 115.6004) + (xy 124.4085 112.3996) + (xy 124.398905 112.307124) + (xy 124.398238 112.300692) + (xy 124.398237 112.300688) + (xy 124.397526 112.293834) + (xy 124.34155 112.126054) + (xy 124.248478 111.975652) + (xy 124.123303 111.850695) + (xy 124.117072 111.846854) + (xy 123.978968 111.761725) + (xy 123.978966 111.761724) + (xy 123.972738 111.757885) + (xy 123.812254 111.704655) + (xy 123.811389 111.704368) + (xy 123.811387 111.704368) + (xy 123.804861 111.702203) + (xy 123.798025 111.701503) + (xy 123.798022 111.701502) + (xy 123.754969 111.697091) + (xy 123.7004 111.6915) + (xy 122.2996 111.6915) + (xy 122.296354 111.691837) + (xy 122.29635 111.691837) + (xy 122.200692 111.701762) + (xy 122.200688 111.701763) + (xy 122.193834 111.702474) + (xy 122.187298 111.704655) + (xy 122.187296 111.704655) + (xy 122.055194 111.748728) + (xy 122.026054 111.75845) + (xy 121.875652 111.851522) + (xy 121.750695 111.976697) + (xy 121.746855 111.982927) + (xy 121.746854 111.982928) + (xy 121.708507 112.045139) + (xy 121.657885 112.127262) + (xy 121.655581 112.134209) + (xy 121.629037 112.214238) + (xy 121.602203 112.295139) + (xy 121.601503 112.301975) + (xy 121.601502 112.301978) + (xy 121.597091 112.345031) + (xy 121.5915 112.3996) + (xy 121.5915 115.6004) + (xy 111.722054 115.6004) + (xy 111.736688 115.574692) + (xy 111.780584 115.497577) + (xy 111.783227 115.492934) + (xy 111.864784 115.268247) + (xy 111.865734 115.262995) + (xy 111.90658 115.037115) + (xy 111.906581 115.037107) + (xy 111.907318 115.033031) + (xy 111.9085 115.007968) + (xy 111.9085 113.039988) + (xy 111.893383 112.861825) + (xy 111.892042 112.856657) + (xy 111.834673 112.635625) + (xy 111.834671 112.63562) + (xy 111.833332 112.63046) + (xy 111.798692 112.553563) + (xy 111.737347 112.417381) + (xy 111.737346 112.417378) + (xy 111.735157 112.41252) + (xy 111.601666 112.214238) + (xy 111.436674 112.041282) + (xy 111.309287 111.946503) + (xy 111.266574 111.889794) + (xy 111.2585 111.845415) + (xy 111.2585 109.676371) + (xy 111.278502 109.60825) + (xy 111.295405 109.587276) + (xy 112.829316 108.053365) + (xy 112.891628 108.019339) + (xy 112.929392 108.016939) + (xy 112.994524 108.022637) + (xy 112.994525 108.022637) + (xy 113 108.023116) + (xy 113.210655 108.004686) + (xy 113.215968 108.003262) + (xy 113.21597 108.003262) + (xy 113.4096 107.951379) + (xy 113.409602 107.951378) + (xy 113.41491 107.949956) + (xy 113.419892 107.947633) + (xy 113.601577 107.862912) + (xy 113.60158 107.86291) + (xy 113.606558 107.860589) + (xy 113.779776 107.739301) + (xy 113.929301 107.589776) + (xy 114.050589 107.416558) + (xy 114.139956 107.22491) + (xy 114.142352 107.21597) + (xy 114.193262 107.02597) + (xy 114.193262 107.025968) + (xy 114.194686 107.020655) + (xy 114.196493 107) + (xy 119.786884 107) + (xy 119.805314 107.210655) + (xy 119.806738 107.215968) + (xy 119.806738 107.21597) + (xy 119.835851 107.324619) + (xy 119.860044 107.41491) + (xy 119.862366 107.419891) + (xy 119.862367 107.419892) + (xy 119.943402 107.593671) + (xy 119.949411 107.606558) + (xy 120.070699 107.779776) + (xy 120.220224 107.929301) + (xy 120.393442 108.050589) + (xy 120.39842 108.05291) + (xy 120.398423 108.052912) + (xy 120.580108 108.137633) + (xy 120.58509 108.139956) + (xy 120.590398 108.141378) + (xy 120.5904 108.141379) + (xy 120.78403 108.193262) + (xy 120.784032 108.193262) + (xy 120.789345 108.194686) + (xy 121 108.213116) + (xy 121.210655 108.194686) + (xy 121.215968 108.193262) + (xy 121.21597 108.193262) + (xy 121.4096 108.141379) + (xy 121.409602 108.141378) + (xy 121.41491 108.139956) + (xy 121.419892 108.137633) + (xy 121.601577 108.052912) + (xy 121.60158 108.05291) + (xy 121.606558 108.050589) + (xy 121.779776 107.929301) + (xy 121.929301 107.779776) + (xy 122.050589 107.606558) + (xy 122.056599 107.593671) + (xy 122.137633 107.419892) + (xy 122.137634 107.419891) + (xy 122.139956 107.41491) + (xy 122.16415 107.324619) + (xy 122.193262 107.21597) + (xy 122.193262 107.215968) + (xy 122.194686 107.210655) + (xy 122.213116 107) + (xy 122.194686 106.789345) + (xy 122.193262 106.78403) + (xy 122.141379 106.5904) + (xy 122.141378 106.590398) + (xy 122.139956 106.58509) + (xy 122.137633 106.580108) + (xy 122.052912 106.398423) + (xy 122.05291 106.39842) + (xy 122.050589 106.393442) + (xy 121.929301 106.220224) + (xy 121.779776 106.070699) + (xy 121.606558 105.949411) + (xy 121.60158 105.94709) + (xy 121.601577 105.947088) + (xy 121.419892 105.862367) + (xy 121.419891 105.862366) + (xy 121.41491 105.860044) + (xy 121.409602 105.858622) + (xy 121.4096 105.858621) + (xy 121.21597 105.806738) + (xy 121.215968 105.806738) + (xy 121.210655 105.805314) + (xy 121 105.786884) + (xy 120.789345 105.805314) + (xy 120.784032 105.806738) + (xy 120.78403 105.806738) + (xy 120.5904 105.858621) + (xy 120.590398 105.858622) + (xy 120.58509 105.860044) + (xy 120.580109 105.862366) + (xy 120.580108 105.862367) + (xy 120.398423 105.947088) + (xy 120.39842 105.94709) + (xy 120.393442 105.949411) + (xy 120.220224 106.070699) + (xy 120.070699 106.220224) + (xy 119.949411 106.393442) + (xy 119.94709 106.39842) + (xy 119.947088 106.398423) + (xy 119.862367 106.580108) + (xy 119.860044 106.58509) + (xy 119.858622 106.590398) + (xy 119.858621 106.5904) + (xy 119.806738 106.78403) + (xy 119.805314 106.789345) + (xy 119.786884 107) + (xy 114.196493 107) + (xy 114.213116 106.81) + (xy 114.206939 106.739392) + (xy 114.220929 106.669787) + (xy 114.243365 106.639316) + (xy 119.408911 101.47377) + (xy 119.423323 101.461384) + (xy 119.434918 101.452851) + (xy 119.434923 101.452846) + (xy 119.440818 101.448508) + (xy 119.445557 101.44293) + (xy 119.44556 101.442927) + (xy 119.475035 101.408232) + (xy 119.481965 101.400716) + (xy 119.48766 101.395021) + (xy 119.505281 101.372749) + (xy 119.508072 101.369345) + (xy 119.550591 101.319297) + (xy 119.550592 101.319295) + (xy 119.555333 101.313715) + (xy 119.558661 101.307199) + (xy 119.562028 101.30215) + (xy 119.565195 101.297021) + (xy 119.569734 101.291284) + (xy 119.600655 101.225125) + (xy 119.602561 101.221225) + (xy 119.627831 101.171737) + (xy 119.635769 101.156192) + (xy 119.637508 101.149084) + (xy 119.639607 101.143441) + (xy 119.641524 101.137678) + (xy 119.644622 101.13105) + (xy 119.659487 101.059583) + (xy 119.660457 101.055299) + (xy 119.676473 100.989845) + (xy 119.677808 100.98439) + (xy 119.6785 100.973236) + (xy 119.678536 100.973238) + (xy 119.678775 100.969245) + (xy 119.679149 100.965053) + (xy 119.68064 100.957885) + (xy 119.678546 100.880479) + (xy 119.6785 100.877072) + (xy 119.6785 99.973937) + (xy 119.698502 99.905816) + (xy 119.752158 99.859323) + (xy 119.822432 99.849219) + (xy 119.887012 99.878713) + (xy 119.918695 99.920687) + (xy 119.943526 99.973937) + (xy 119.949411 99.986558) + (xy 120.070699 100.159776) + (xy 120.204595 100.293672) + (xy 120.238621 100.355984) + (xy 120.2415 100.382767) + (xy 120.2415 102.93293) + (xy 120.240067 102.95188) + (xy 120.236801 102.973349) + (xy 120.237394 102.980641) + (xy 120.237394 102.980644) + (xy 120.241085 103.026018) + (xy 120.2415 103.036233) + (xy 120.2415 103.044293) + (xy 120.241925 103.047937) + (xy 120.244789 103.072507) + (xy 120.245222 103.076882) + (xy 120.250326 103.139628) + (xy 120.25114 103.149637) + (xy 120.253396 103.156601) + (xy 120.254587 103.16256) + (xy 120.255971 103.168415) + (xy 120.256818 103.175681) + (xy 120.281735 103.244327) + (xy 120.283152 103.248455) + (xy 120.301433 103.304884) + (xy 120.305649 103.317899) + (xy 120.309445 103.324154) + (xy 120.311951 103.329628) + (xy 120.31467 103.335058) + (xy 120.317167 103.341937) + (xy 120.32118 103.348057) + (xy 120.32118 103.348058) + (xy 120.357186 103.402976) + (xy 120.359523 103.40668) + (xy 120.397405 103.469107) + (xy 120.401121 103.473315) + (xy 120.401122 103.473316) + (xy 120.404803 103.477484) + (xy 120.404776 103.477508) + (xy 120.407429 103.4805) + (xy 120.410132 103.483733) + (xy 120.414144 103.489852) + (xy 120.419456 103.494884) + (xy 120.470383 103.543128) + (xy 120.472825 103.545506) + (xy 123.756635 106.829316) + (xy 123.790661 106.891628) + (xy 123.793061 106.929392) + (xy 123.788574 106.980684) + (xy 123.786884 107) + (xy 123.805314 107.210655) + (xy 123.806738 107.215968) + (xy 123.806738 107.21597) + (xy 123.835851 107.324619) + (xy 123.860044 107.41491) + (xy 123.862366 107.419891) + (xy 123.862367 107.419892) + (xy 123.943402 107.593671) + (xy 123.949411 107.606558) + (xy 124.070699 107.779776) + (xy 124.220224 107.929301) + (xy 124.393442 108.050589) + (xy 124.39842 108.05291) + (xy 124.398423 108.052912) + (xy 124.580108 108.137633) + (xy 124.58509 108.139956) + (xy 124.590398 108.141378) + (xy 124.5904 108.141379) + (xy 124.78403 108.193262) + (xy 124.784032 108.193262) + (xy 124.789345 108.194686) + (xy 125 108.213116) + (xy 125.210655 108.194686) + (xy 125.215968 108.193262) + (xy 125.21597 108.193262) + (xy 125.4096 108.141379) + (xy 125.409602 108.141378) + (xy 125.41491 108.139956) + (xy 125.419892 108.137633) + (xy 125.601577 108.052912) + (xy 125.60158 108.05291) + (xy 125.606558 108.050589) + (xy 125.779776 107.929301) + (xy 125.929301 107.779776) + (xy 126.050589 107.606558) + (xy 126.056599 107.593671) + (xy 126.137633 107.419892) + (xy 126.137634 107.419891) + (xy 126.139956 107.41491) + (xy 126.16415 107.324619) + (xy 126.193262 107.21597) + (xy 126.193262 107.215968) + (xy 126.194686 107.210655) + (xy 126.213116 107) + (xy 126.194686 106.789345) + (xy 126.193262 106.78403) + (xy 126.141379 106.5904) + (xy 126.141378 106.590398) + (xy 126.139956 106.58509) + (xy 126.137633 106.580108) + (xy 126.052912 106.398423) + (xy 126.05291 106.39842) + (xy 126.050589 106.393442) + (xy 125.929301 106.220224) + (xy 125.779776 106.070699) + (xy 125.606558 105.949411) + (xy 125.60158 105.94709) + (xy 125.601577 105.947088) + (xy 125.419892 105.862367) + (xy 125.419891 105.862366) + (xy 125.41491 105.860044) + (xy 125.409602 105.858622) + (xy 125.4096 105.858621) + (xy 125.21597 105.806738) + (xy 125.215968 105.806738) + (xy 125.210655 105.805314) + (xy 125 105.786884) + (xy 124.994525 105.787363) + (xy 124.994524 105.787363) + (xy 124.929392 105.793061) + (xy 124.859787 105.779071) + (xy 124.829316 105.756635) + (xy 121.795405 102.722724) + (xy 121.761379 102.660412) + (xy 121.7585 102.633629) + (xy 121.7585 100.394261) + (xy 124.350294 100.394261) + (xy 124.35959 100.406276) + (xy 124.389189 100.427001) + (xy 124.398677 100.432479) + (xy 124.580277 100.517159) + (xy 124.590571 100.520907) + (xy 124.784122 100.572769) + (xy 124.794909 100.574671) + (xy 124.994525 100.592135) + (xy 125.005475 100.592135) + (xy 125.205091 100.574671) + (xy 125.215878 100.572769) + (xy 125.409429 100.520907) + (xy 125.419723 100.517159) + (xy 125.601323 100.432479) + (xy 125.610811 100.427001) + (xy 125.641248 100.405689) + (xy 125.649623 100.395212) + (xy 125.649123 100.394261) + (xy 128.350294 100.394261) + (xy 128.35959 100.406276) + (xy 128.389189 100.427001) + (xy 128.398677 100.432479) + (xy 128.580277 100.517159) + (xy 128.590571 100.520907) + (xy 128.784122 100.572769) + (xy 128.794909 100.574671) + (xy 128.994525 100.592135) + (xy 129.005475 100.592135) + (xy 129.205091 100.574671) + (xy 129.215878 100.572769) + (xy 129.409429 100.520907) + (xy 129.419723 100.517159) + (xy 129.601323 100.432479) + (xy 129.610811 100.427001) + (xy 129.641248 100.405689) + (xy 129.649623 100.395212) + (xy 129.642554 100.381764) + (xy 129.012812 99.752022) + (xy 128.998868 99.744408) + (xy 128.997035 99.744539) + (xy 128.99042 99.74879) + (xy 128.356724 100.382486) + (xy 128.350294 100.394261) + (xy 125.649123 100.394261) + (xy 125.642554 100.381764) + (xy 125.012812 99.752022) + (xy 124.998868 99.744408) + (xy 124.997035 99.744539) + (xy 124.99042 99.74879) + (xy 124.356724 100.382486) + (xy 124.350294 100.394261) + (xy 121.7585 100.394261) + (xy 121.7585 100.382767) + (xy 121.778502 100.314646) + (xy 121.795405 100.293672) + (xy 121.929301 100.159776) + (xy 122.050589 99.986558) + (xy 122.056475 99.973937) + (xy 122.137633 99.799892) + (xy 122.137634 99.799891) + (xy 122.139956 99.79491) + (xy 122.189532 99.609892) + (xy 122.193262 99.59597) + (xy 122.193262 99.595968) + (xy 122.194686 99.590655) + (xy 122.212637 99.385475) + (xy 123.787865 99.385475) + (xy 123.805329 99.585091) + (xy 123.807231 99.595878) + (xy 123.859093 99.789429) + (xy 123.862841 99.799723) + (xy 123.947521 99.981323) + (xy 123.952999 99.990811) + (xy 123.974311 100.021248) + (xy 123.984788 100.029623) + (xy 123.998236 100.022554) + (xy 124.627978 99.392812) + (xy 124.634356 99.381132) + (xy 125.364408 99.381132) + (xy 125.364539 99.382965) + (xy 125.36879 99.38958) + (xy 126.002486 100.023276) + (xy 126.014261 100.029706) + (xy 126.026276 100.02041) + (xy 126.047001 99.990811) + (xy 126.052479 99.981323) + (xy 126.137159 99.799723) + (xy 126.140907 99.789429) + (xy 126.192769 99.595878) + (xy 126.194671 99.585091) + (xy 126.212135 99.385475) + (xy 127.787865 99.385475) + (xy 127.805329 99.585091) + (xy 127.807231 99.595878) + (xy 127.859093 99.789429) + (xy 127.862841 99.799723) + (xy 127.947521 99.981323) + (xy 127.952999 99.990811) + (xy 127.974311 100.021248) + (xy 127.984788 100.029623) + (xy 127.998236 100.022554) + (xy 128.627978 99.392812) + (xy 128.635592 99.378868) + (xy 128.635461 99.377035) + (xy 128.63121 99.37042) + (xy 127.997514 98.736724) + (xy 127.985739 98.730294) + (xy 127.973724 98.73959) + (xy 127.952999 98.769189) + (xy 127.947521 98.778677) + (xy 127.862841 98.960277) + (xy 127.859093 98.970571) + (xy 127.807231 99.164122) + (xy 127.805329 99.174909) + (xy 127.787865 99.374525) + (xy 127.787865 99.385475) + (xy 126.212135 99.385475) + (xy 126.212135 99.374525) + (xy 126.194671 99.174909) + (xy 126.192769 99.164122) + (xy 126.140907 98.970571) + (xy 126.137159 98.960277) + (xy 126.052479 98.778677) + (xy 126.047001 98.769189) + (xy 126.025689 98.738752) + (xy 126.015212 98.730377) + (xy 126.001764 98.737446) + (xy 125.372022 99.367188) + (xy 125.364408 99.381132) + (xy 124.634356 99.381132) + (xy 124.635592 99.378868) + (xy 124.635461 99.377035) + (xy 124.63121 99.37042) + (xy 123.997514 98.736724) + (xy 123.985739 98.730294) + (xy 123.973724 98.73959) + (xy 123.952999 98.769189) + (xy 123.947521 98.778677) + (xy 123.862841 98.960277) + (xy 123.859093 98.970571) + (xy 123.807231 99.164122) + (xy 123.805329 99.174909) + (xy 123.787865 99.374525) + (xy 123.787865 99.385475) + (xy 122.212637 99.385475) + (xy 122.213116 99.38) + (xy 122.194686 99.169345) + (xy 122.193265 99.16404) + (xy 122.193218 99.163776) + (xy 122.193943 99.116238) + (xy 122.199488 99.089578) + (xy 122.200456 99.085304) + (xy 122.216473 99.019845) + (xy 122.217808 99.01439) + (xy 122.2185 99.003236) + (xy 122.218536 99.003238) + (xy 122.218775 98.999245) + (xy 122.219149 98.995053) + (xy 122.22064 98.987885) + (xy 122.218546 98.910479) + (xy 122.2185 98.907072) + (xy 122.2185 98.364788) + (xy 124.350377 98.364788) + (xy 124.357446 98.378236) + (xy 124.987188 99.007978) + (xy 125.001132 99.015592) + (xy 125.002965 99.015461) + (xy 125.00958 99.01121) + (xy 125.643276 98.377514) + (xy 125.649706 98.365739) + (xy 125.64897 98.364788) + (xy 128.350377 98.364788) + (xy 128.357446 98.378236) + (xy 128.987188 99.007978) + (xy 129.001132 99.015592) + (xy 129.002965 99.015461) + (xy 129.00958 99.01121) + (xy 129.643276 98.377514) + (xy 129.649706 98.365739) + (xy 129.64041 98.353724) + (xy 129.610811 98.332999) + (xy 129.601323 98.327521) + (xy 129.419723 98.242841) + (xy 129.409429 98.239093) + (xy 129.215878 98.187231) + (xy 129.205091 98.185329) + (xy 129.005475 98.167865) + (xy 128.994525 98.167865) + (xy 128.794909 98.185329) + (xy 128.784122 98.187231) + (xy 128.590571 98.239093) + (xy 128.580277 98.242841) + (xy 128.398677 98.327521) + (xy 128.389189 98.332999) + (xy 128.358752 98.354311) + (xy 128.350377 98.364788) + (xy 125.64897 98.364788) + (xy 125.64041 98.353724) + (xy 125.610811 98.332999) + (xy 125.601323 98.327521) + (xy 125.419723 98.242841) + (xy 125.409429 98.239093) + (xy 125.215878 98.187231) + (xy 125.205091 98.185329) + (xy 125.005475 98.167865) + (xy 124.994525 98.167865) + (xy 124.794909 98.185329) + (xy 124.784122 98.187231) + (xy 124.590571 98.239093) + (xy 124.580277 98.242841) + (xy 124.398677 98.327521) + (xy 124.389189 98.332999) + (xy 124.358752 98.354311) + (xy 124.350377 98.364788) + (xy 122.2185 98.364788) + (xy 122.2185 84.325478) + (xy 122.238502 84.257357) + (xy 122.272229 84.222265) + (xy 122.27527 84.220136) + (xy 122.275272 84.220134) + (xy 122.279781 84.216977) + (xy 122.436977 84.059781) + (xy 122.564488 83.877676) + (xy 122.566811 83.872694) + (xy 122.566814 83.872689) + (xy 122.615805 83.767627) + (xy 122.662723 83.714342) + (xy 122.731 83.694881) + (xy 122.79896 83.715423) + (xy 122.844195 83.767627) + (xy 122.893186 83.872689) + (xy 122.893189 83.872694) + (xy 122.895512 83.877676) + (xy 123.023023 84.059781) + (xy 123.180219 84.216977) + (xy 123.184728 84.220134) + (xy 123.18473 84.220136) + (xy 123.187771 84.222265) + (xy 123.188797 84.223548) + (xy 123.188943 84.223671) + (xy 123.188918 84.2237) + (xy 123.232099 84.277722) + (xy 123.2415 84.325478) + (xy 123.2415 89.93293) + (xy 123.240067 89.95188) + (xy 123.237951 89.965791) + (xy 123.236801 89.973349) + (xy 123.237394 89.980641) + (xy 123.237394 89.980644) + (xy 123.241085 90.026018) + (xy 123.2415 90.036233) + (xy 123.2415 90.044293) + (xy 123.241925 90.047937) + (xy 123.244789 90.072507) + (xy 123.245222 90.076882) + (xy 123.249504 90.129521) + (xy 123.25114 90.149637) + (xy 123.253396 90.156601) + (xy 123.254587 90.16256) + (xy 123.255971 90.168415) + (xy 123.256818 90.175681) + (xy 123.281735 90.244327) + (xy 123.283152 90.248455) + (xy 123.305649 90.317899) + (xy 123.309445 90.324154) + (xy 123.311951 90.329628) + (xy 123.31467 90.335058) + (xy 123.317167 90.341937) + (xy 123.32118 90.348057) + (xy 123.32118 90.348058) + (xy 123.357186 90.402976) + (xy 123.359523 90.40668) + (xy 123.397405 90.469107) + (xy 123.401121 90.473315) + (xy 123.401122 90.473316) + (xy 123.404803 90.477484) + (xy 123.404776 90.477508) + (xy 123.407429 90.4805) + (xy 123.410132 90.483733) + (xy 123.414144 90.489852) + (xy 123.419456 90.494884) + (xy 123.470383 90.543128) + (xy 123.472825 90.545506) + (xy 130.204595 97.277276) + (xy 130.238621 97.339588) + (xy 130.2415 97.366371) + (xy 130.2415 98.649234) + (xy 130.221498 98.717355) + (xy 130.167842 98.763848) + (xy 130.097568 98.773952) + (xy 130.036829 98.747656) + (xy 130.015212 98.730377) + (xy 130.001764 98.737446) + (xy 129.372022 99.367188) + (xy 129.364408 99.381132) + (xy 129.364539 99.382965) + (xy 129.36879 99.38958) + (xy 130.002486 100.023276) + (xy 130.014261 100.029706) + (xy 130.0384 100.011031) + (xy 130.104518 99.985167) + (xy 130.174123 99.999156) + (xy 130.225115 100.048555) + (xy 130.2415 100.110688) + (xy 130.2415 104.633629) + (xy 130.221498 104.70175) + (xy 130.204595 104.722724) + (xy 129.170684 105.756635) + (xy 129.108372 105.790661) + (xy 129.070608 105.793061) + (xy 129.005476 105.787363) + (xy 129.005475 105.787363) + (xy 129 105.786884) + (xy 128.789345 105.805314) + (xy 128.784032 105.806738) + (xy 128.78403 105.806738) + (xy 128.5904 105.858621) + (xy 128.590398 105.858622) + (xy 128.58509 105.860044) + (xy 128.580109 105.862366) + (xy 128.580108 105.862367) + (xy 128.398423 105.947088) + (xy 128.39842 105.94709) + (xy 128.393442 105.949411) + (xy 128.220224 106.070699) + (xy 128.070699 106.220224) + (xy 127.949411 106.393442) + (xy 127.94709 106.39842) + (xy 127.947088 106.398423) + (xy 127.862367 106.580108) + (xy 127.860044 106.58509) + (xy 127.858622 106.590398) + (xy 127.858621 106.5904) + (xy 127.806738 106.78403) + (xy 127.805314 106.789345) + (xy 127.786884 107) + (xy 127.787363 107.005475) + (xy 127.787363 107.005476) + (xy 127.793061 107.070608) + (xy 127.779071 107.140213) + (xy 127.756635 107.170684) + (xy 126.011089 108.91623) + (xy 125.996677 108.928616) + (xy 125.985082 108.937149) + (xy 125.985077 108.937154) + (xy 125.979182 108.941492) + (xy 125.974443 108.94707) + (xy 125.97444 108.947073) + (xy 125.944965 108.981768) + (xy 125.938035 108.989284) + (xy 125.93234 108.994979) + (xy 125.93006 108.997861) + (xy 125.914719 109.017251) + (xy 125.911928 109.020655) + (xy 125.869409 109.070703) + (xy 125.864667 109.076285) + (xy 125.861339 109.082801) + (xy 125.857972 109.08785) + (xy 125.854805 109.092979) + (xy 125.850266 109.098716) + (xy 125.819345 109.164875) + (xy 125.817442 109.168769) + (xy 125.784231 109.233808) + (xy 125.782492 109.240916) + (xy 125.780393 109.246559) + (xy 125.778476 109.252322) + (xy 125.775378 109.25895) + (xy 125.773888 109.266112) + (xy 125.773888 109.266113) + (xy 125.760514 109.330412) + (xy 125.759544 109.334696) + (xy 125.742192 109.40561) + (xy 125.7415 109.416764) + (xy 125.741464 109.416762) + (xy 125.741225 109.420755) + (xy 125.740851 109.424947) + (xy 125.73936 109.432115) + (xy 125.739558 109.439432) + (xy 125.741454 109.509521) + (xy 125.7415 109.512928) + (xy 125.7415 111.84177) + (xy 125.721498 111.909891) + (xy 125.680865 111.949489) + (xy 125.673692 111.953842) + (xy 125.667117 111.957832) + (xy 125.663087 111.961329) + (xy 125.509762 112.094378) + (xy 125.486581 112.114493) + (xy 125.483198 112.118619) + (xy 125.483194 112.118623) + (xy 125.404795 112.214238) + (xy 125.335022 112.299333) + (xy 125.332383 112.303969) + (xy 125.332381 112.303972) + (xy 125.330587 112.307124) + (xy 125.216773 112.507066) + (xy 125.135216 112.731753) + (xy 125.134267 112.737002) + (xy 125.134266 112.737005) + (xy 125.09342 112.962885) + (xy 125.093419 112.962893) + (xy 125.092682 112.966969) + (xy 125.0915 112.992032) + (xy 125.0915 114.960012) + (xy 125.106617 115.138175) + (xy 125.107957 115.143339) + (xy 125.107958 115.143343) + (xy 125.162937 115.355164) + (xy 125.166668 115.36954) + (xy 125.16886 115.374406) + (xy 125.224345 115.497577) + (xy 125.264843 115.58748) + (xy 125.398334 115.785762) + (xy 125.402013 115.789619) + (xy 125.402015 115.789621) + (xy 125.47055 115.861464) + (xy 125.563326 115.958718) + (xy 125.7551 116.101402) + (xy 125.759851 116.103818) + (xy 125.759855 116.10382) + (xy 125.963414 116.207314) + (xy 125.968172 116.209733) + (xy 126.058221 116.237694) + (xy 126.191349 116.279032) + (xy 126.191355 116.279033) + (xy 126.196452 116.280616) + (xy 126.323883 116.297506) + (xy 126.428127 116.311323) + (xy 126.428131 116.311323) + (xy 126.433411 116.312023) + (xy 126.43874 116.311823) + (xy 126.438741 116.311823) + (xy 126.536509 116.308152) + (xy 126.672274 116.303055) + (xy 126.759184 116.284819) + (xy 126.900984 116.255067) + (xy 126.900987 116.255066) + (xy 126.906211 116.25397) + (xy 127.128533 116.166171) + (xy 127.332883 116.042168) + (xy 127.513419 115.885507) + (xy 127.516802 115.881381) + (xy 127.516806 115.881377) + (xy 127.655108 115.712704) + (xy 127.664978 115.700667) + (xy 127.722054 115.6004) + (xy 137.5915 115.6004) + (xy 137.591837 115.603646) + (xy 137.591837 115.60365) + (xy 137.600698 115.689048) + (xy 137.602474 115.706166) + (xy 137.65845 115.873946) + (xy 137.751522 116.024348) + (xy 137.876697 116.149305) + (xy 137.882927 116.153145) + (xy 137.882928 116.153146) + (xy 138.02009 116.237694) + (xy 138.027262 116.242115) + (xy 138.107005 116.268564) + (xy 138.188611 116.295632) + (xy 138.188613 116.295632) + (xy 138.195139 116.297797) + (xy 138.201975 116.298497) + (xy 138.201978 116.298498) + (xy 138.245031 116.302909) + (xy 138.2996 116.3085) + (xy 139.7004 116.3085) + (xy 139.703646 116.308163) + (xy 139.70365 116.308163) + (xy 139.799308 116.298238) + (xy 139.799312 116.298237) + (xy 139.806166 116.297526) + (xy 139.812702 116.295345) + (xy 139.812704 116.295345) + (xy 139.944806 116.251272) + (xy 139.973946 116.24155) + (xy 140.124348 116.148478) + (xy 140.249305 116.023303) + (xy 140.289116 115.958718) + (xy 140.338275 115.878968) + (xy 140.338276 115.878966) + (xy 140.342115 115.872738) + (xy 140.369684 115.789621) + (xy 140.395632 115.711389) + (xy 140.395632 115.711387) + (xy 140.397797 115.704861) + (xy 140.4085 115.6004) + (xy 140.4085 112.3996) + (xy 140.398905 112.307124) + (xy 140.398238 112.300692) + (xy 140.398237 112.300688) + (xy 140.397526 112.293834) + (xy 140.34155 112.126054) + (xy 140.248478 111.975652) + (xy 140.123303 111.850695) + (xy 140.117072 111.846854) + (xy 139.978968 111.761725) + (xy 139.978966 111.761724) + (xy 139.972738 111.757885) + (xy 139.812254 111.704655) + (xy 139.811389 111.704368) + (xy 139.811387 111.704368) + (xy 139.804861 111.702203) + (xy 139.798025 111.701503) + (xy 139.798022 111.701502) + (xy 139.754969 111.697091) + (xy 139.7004 111.6915) + (xy 138.2996 111.6915) + (xy 138.296354 111.691837) + (xy 138.29635 111.691837) + (xy 138.200692 111.701762) + (xy 138.200688 111.701763) + (xy 138.193834 111.702474) + (xy 138.187298 111.704655) + (xy 138.187296 111.704655) + (xy 138.055194 111.748728) + (xy 138.026054 111.75845) + (xy 137.875652 111.851522) + (xy 137.750695 111.976697) + (xy 137.746855 111.982927) + (xy 137.746854 111.982928) + (xy 137.708507 112.045139) + (xy 137.657885 112.127262) + (xy 137.655581 112.134209) + (xy 137.629037 112.214238) + (xy 137.602203 112.295139) + (xy 137.601503 112.301975) + (xy 137.601502 112.301978) + (xy 137.597091 112.345031) + (xy 137.5915 112.3996) + (xy 137.5915 115.6004) + (xy 127.722054 115.6004) + (xy 127.736688 115.574692) + (xy 127.780584 115.497577) + (xy 127.783227 115.492934) + (xy 127.864784 115.268247) + (xy 127.865734 115.262995) + (xy 127.90658 115.037115) + (xy 127.906581 115.037107) + (xy 127.907318 115.033031) + (xy 127.9085 115.007968) + (xy 127.9085 113.039988) + (xy 127.893383 112.861825) + (xy 127.892042 112.856657) + (xy 127.834673 112.635625) + (xy 127.834671 112.63562) + (xy 127.833332 112.63046) + (xy 127.798692 112.553563) + (xy 127.737347 112.417381) + (xy 127.737346 112.417378) + (xy 127.735157 112.41252) + (xy 127.601666 112.214238) + (xy 127.436674 112.041282) + (xy 127.309287 111.946503) + (xy 127.266574 111.889794) + (xy 127.2585 111.845415) + (xy 127.2585 109.866371) + (xy 127.278502 109.79825) + (xy 127.295405 109.777276) + (xy 128.829316 108.243365) + (xy 128.891628 108.209339) + (xy 128.929392 108.206939) + (xy 128.994524 108.212637) + (xy 128.994525 108.212637) + (xy 129 108.213116) + (xy 129.210655 108.194686) + (xy 129.215968 108.193262) + (xy 129.21597 108.193262) + (xy 129.4096 108.141379) + (xy 129.409602 108.141378) + (xy 129.41491 108.139956) + (xy 129.419892 108.137633) + (xy 129.601577 108.052912) + (xy 129.60158 108.05291) + (xy 129.606558 108.050589) + (xy 129.779776 107.929301) + (xy 129.929301 107.779776) + (xy 130.050589 107.606558) + (xy 130.056599 107.593671) + (xy 130.137633 107.419892) + (xy 130.137634 107.419891) + (xy 130.139956 107.41491) + (xy 130.16415 107.324619) + (xy 130.193262 107.21597) + (xy 130.193262 107.215968) + (xy 130.194686 107.210655) + (xy 130.213116 107) + (xy 130.211426 106.980684) + (xy 130.206939 106.929392) + (xy 130.220929 106.859787) + (xy 130.243365 106.829316) + (xy 130.262681 106.81) + (xy 135.786884 106.81) + (xy 135.805314 107.020655) + (xy 135.806738 107.025968) + (xy 135.806738 107.02597) + (xy 135.857649 107.21597) + (xy 135.860044 107.22491) + (xy 135.949411 107.416558) + (xy 136.070699 107.589776) + (xy 136.220224 107.739301) + (xy 136.393442 107.860589) + (xy 136.39842 107.86291) + (xy 136.398423 107.862912) + (xy 136.580108 107.947633) + (xy 136.58509 107.949956) + (xy 136.590398 107.951378) + (xy 136.5904 107.951379) + (xy 136.78403 108.003262) + (xy 136.784032 108.003262) + (xy 136.789345 108.004686) + (xy 137 108.023116) + (xy 137.210655 108.004686) + (xy 137.215968 108.003262) + (xy 137.21597 108.003262) + (xy 137.4096 107.951379) + (xy 137.409602 107.951378) + (xy 137.41491 107.949956) + (xy 137.419892 107.947633) + (xy 137.601577 107.862912) + (xy 137.60158 107.86291) + (xy 137.606558 107.860589) + (xy 137.779776 107.739301) + (xy 137.929301 107.589776) + (xy 138.050589 107.416558) + (xy 138.139956 107.22491) + (xy 138.142352 107.21597) + (xy 138.193262 107.02597) + (xy 138.193262 107.025968) + (xy 138.194686 107.020655) + (xy 138.213116 106.81) + (xy 138.194686 106.599345) + (xy 138.192289 106.5904) + (xy 138.141379 106.4004) + (xy 138.141378 106.400398) + (xy 138.139956 106.39509) + (xy 138.137087 106.388937) + (xy 138.052912 106.208423) + (xy 138.05291 106.20842) + (xy 138.050589 106.203442) + (xy 137.929301 106.030224) + (xy 137.779776 105.880699) + (xy 137.606558 105.759411) + (xy 137.60158 105.75709) + (xy 137.601577 105.757088) + (xy 137.419892 105.672367) + (xy 137.419891 105.672366) + (xy 137.41491 105.670044) + (xy 137.409602 105.668622) + (xy 137.4096 105.668621) + (xy 137.21597 105.616738) + (xy 137.215968 105.616738) + (xy 137.210655 105.615314) + (xy 137 105.596884) + (xy 136.789345 105.615314) + (xy 136.784032 105.616738) + (xy 136.78403 105.616738) + (xy 136.5904 105.668621) + (xy 136.590398 105.668622) + (xy 136.58509 105.670044) + (xy 136.580109 105.672366) + (xy 136.580108 105.672367) + (xy 136.398423 105.757088) + (xy 136.39842 105.75709) + (xy 136.393442 105.759411) + (xy 136.220224 105.880699) + (xy 136.070699 106.030224) + (xy 135.949411 106.203442) + (xy 135.94709 106.20842) + (xy 135.947088 106.208423) + (xy 135.862913 106.388937) + (xy 135.860044 106.39509) + (xy 135.858622 106.400398) + (xy 135.858621 106.4004) + (xy 135.807711 106.5904) + (xy 135.805314 106.599345) + (xy 135.786884 106.81) + (xy 130.262681 106.81) + (xy 131.488911 105.58377) + (xy 131.503323 105.571384) + (xy 131.514918 105.562851) + (xy 131.514923 105.562846) + (xy 131.520818 105.558508) + (xy 131.525557 105.55293) + (xy 131.52556 105.552927) + (xy 131.555035 105.518232) + (xy 131.561965 105.510716) + (xy 131.56766 105.505021) + (xy 131.585281 105.482749) + (xy 131.588072 105.479345) + (xy 131.630591 105.429297) + (xy 131.630592 105.429295) + (xy 131.635333 105.423715) + (xy 131.638661 105.417199) + (xy 131.642028 105.41215) + (xy 131.645195 105.407021) + (xy 131.649734 105.401284) + (xy 131.680655 105.335125) + (xy 131.682561 105.331225) + (xy 131.703946 105.289345) + (xy 131.715769 105.266192) + (xy 131.717508 105.259084) + (xy 131.719607 105.253441) + (xy 131.721524 105.247678) + (xy 131.724622 105.24105) + (xy 131.739487 105.169583) + (xy 131.740457 105.165299) + (xy 131.742272 105.157883) + (xy 131.757808 105.09439) + (xy 131.7585 105.083236) + (xy 131.758536 105.083238) + (xy 131.758775 105.079245) + (xy 131.759149 105.075053) + (xy 131.76064 105.067885) + (xy 131.758546 104.990479) + (xy 131.7585 104.987072) + (xy 131.7585 97.06707) + (xy 131.759933 97.04812) + (xy 131.762099 97.033885) + (xy 131.762099 97.033881) + (xy 131.763199 97.026651) + (xy 131.758915 96.973982) + (xy 131.7585 96.963767) + (xy 131.7585 96.955707) + (xy 131.755209 96.92748) + (xy 131.754778 96.923121) + (xy 131.749453 96.85766) + (xy 131.74886 96.850364) + (xy 131.746605 96.843403) + (xy 131.745418 96.837463) + (xy 131.744029 96.831588) + (xy 131.743182 96.824319) + (xy 131.718264 96.75567) + (xy 131.716847 96.751542) + (xy 131.696607 96.689064) + (xy 131.696606 96.689062) + (xy 131.694351 96.682101) + (xy 131.690555 96.675846) + (xy 131.688049 96.670372) + (xy 131.68533 96.664942) + (xy 131.682833 96.658063) + (xy 131.642814 96.597024) + (xy 131.640467 96.593305) + (xy 131.602595 96.530893) + (xy 131.595197 96.522516) + (xy 131.595224 96.522492) + (xy 131.592571 96.5195) + (xy 131.589868 96.516267) + (xy 131.585856 96.510148) + (xy 131.529617 96.456872) + (xy 131.527175 96.454494) + (xy 124.795405 89.722724) + (xy 124.761379 89.660412) + (xy 124.7585 89.633629) + (xy 124.7585 84.325478) + (xy 124.778502 84.257357) + (xy 124.812229 84.222265) + (xy 124.81527 84.220136) + (xy 124.815272 84.220134) + (xy 124.819781 84.216977) + (xy 124.976977 84.059781) + (xy 125.104488 83.877676) + (xy 125.106811 83.872694) + (xy 125.106814 83.872689) + (xy 125.155805 83.767627) + (xy 125.202723 83.714342) + (xy 125.271 83.694881) + (xy 125.33896 83.715423) + (xy 125.384195 83.767627) + (xy 125.433186 83.872689) + (xy 125.433189 83.872694) + (xy 125.435512 83.877676) + (xy 125.563023 84.059781) + (xy 125.720219 84.216977) + (xy 125.724728 84.220134) + (xy 125.72473 84.220136) + (xy 125.727771 84.222265) + (xy 125.728797 84.223548) + (xy 125.728943 84.223671) + (xy 125.728918 84.2237) + (xy 125.772099 84.277722) + (xy 125.7815 84.325478) + (xy 125.7815 88.66293) + (xy 125.780067 88.68188) + (xy 125.776801 88.703349) + (xy 125.777394 88.710641) + (xy 125.777394 88.710644) + (xy 125.781085 88.756018) + (xy 125.7815 88.766233) + (xy 125.7815 88.774293) + (xy 125.781925 88.777937) + (xy 125.784789 88.802507) + (xy 125.785222 88.806882) + (xy 125.79114 88.879637) + (xy 125.793396 88.886601) + (xy 125.794587 88.89256) + (xy 125.795971 88.898415) + (xy 125.796818 88.905681) + (xy 125.821735 88.974327) + (xy 125.823152 88.978455) + (xy 125.845649 89.047899) + (xy 125.849445 89.054154) + (xy 125.851951 89.059628) + (xy 125.85467 89.065058) + (xy 125.857167 89.071937) + (xy 125.86118 89.078057) + (xy 125.86118 89.078058) + (xy 125.897186 89.132976) + (xy 125.899523 89.13668) + (xy 125.937405 89.199107) + (xy 125.941121 89.203315) + (xy 125.941122 89.203316) + (xy 125.944803 89.207484) + (xy 125.944776 89.207508) + (xy 125.947429 89.2105) + (xy 125.950132 89.213733) + (xy 125.954144 89.219852) + (xy 125.959456 89.224884) + (xy 126.010383 89.273128) + (xy 126.012825 89.275506) + (xy 135.756635 99.019316) + (xy 135.790661 99.081628) + (xy 135.793061 99.119392) + (xy 135.788204 99.174909) + (xy 135.786884 99.19) + (xy 135.805314 99.400655) + (xy 135.806738 99.405968) + (xy 135.806738 99.40597) + (xy 135.857649 99.59597) + (xy 135.860044 99.60491) + (xy 135.862366 99.609891) + (xy 135.862367 99.609892) + (xy 135.946087 99.789429) + (xy 135.949411 99.796558) + (xy 136.070699 99.969776) + (xy 136.204595 100.103672) + (xy 136.238621 100.165984) + (xy 136.2415 100.192767) + (xy 136.2415 102.74293) + (xy 136.240067 102.76188) + (xy 136.236801 102.783349) + (xy 136.237394 102.790641) + (xy 136.237394 102.790644) + (xy 136.241085 102.836018) + (xy 136.2415 102.846233) + (xy 136.2415 102.854293) + (xy 136.241925 102.857937) + (xy 136.244789 102.882507) + (xy 136.245222 102.886882) + (xy 136.249743 102.94246) + (xy 136.25114 102.959637) + (xy 136.253396 102.966601) + (xy 136.254587 102.97256) + (xy 136.255971 102.978415) + (xy 136.256818 102.985681) + (xy 136.281735 103.054327) + (xy 136.283152 103.058455) + (xy 136.305649 103.127899) + (xy 136.309445 103.134154) + (xy 136.311951 103.139628) + (xy 136.31467 103.145058) + (xy 136.317167 103.151937) + (xy 136.32118 103.158057) + (xy 136.32118 103.158058) + (xy 136.357186 103.212976) + (xy 136.359523 103.21668) + (xy 136.397405 103.279107) + (xy 136.401121 103.283315) + (xy 136.401122 103.283316) + (xy 136.404803 103.287484) + (xy 136.404776 103.287508) + (xy 136.407429 103.2905) + (xy 136.410132 103.293733) + (xy 136.414144 103.299852) + (xy 136.433195 103.317899) + (xy 136.470383 103.353128) + (xy 136.472825 103.355506) + (xy 139.756635 106.639316) + (xy 139.790661 106.701628) + (xy 139.793061 106.739392) + (xy 139.786884 106.81) + (xy 139.805314 107.020655) + (xy 139.806738 107.025968) + (xy 139.806738 107.02597) + (xy 139.857649 107.21597) + (xy 139.860044 107.22491) + (xy 139.949411 107.416558) + (xy 140.070699 107.589776) + (xy 140.220224 107.739301) + (xy 140.393442 107.860589) + (xy 140.39842 107.86291) + (xy 140.398423 107.862912) + (xy 140.580108 107.947633) + (xy 140.58509 107.949956) + (xy 140.590398 107.951378) + (xy 140.5904 107.951379) + (xy 140.78403 108.003262) + (xy 140.784032 108.003262) + (xy 140.789345 108.004686) + (xy 141 108.023116) + (xy 141.210655 108.004686) + (xy 141.215968 108.003262) + (xy 141.21597 108.003262) + (xy 141.4096 107.951379) + (xy 141.409602 107.951378) + (xy 141.41491 107.949956) + (xy 141.419892 107.947633) + (xy 141.601577 107.862912) + (xy 141.60158 107.86291) + (xy 141.606558 107.860589) + (xy 141.779776 107.739301) + (xy 141.929301 107.589776) + (xy 142.050589 107.416558) + (xy 142.139956 107.22491) + (xy 142.142352 107.21597) + (xy 142.193262 107.02597) + (xy 142.193262 107.025968) + (xy 142.194686 107.020655) + (xy 142.213116 106.81) + (xy 142.194686 106.599345) + (xy 142.192289 106.5904) + (xy 142.141379 106.4004) + (xy 142.141378 106.400398) + (xy 142.139956 106.39509) + (xy 142.137087 106.388937) + (xy 142.052912 106.208423) + (xy 142.05291 106.20842) + (xy 142.050589 106.203442) + (xy 141.929301 106.030224) + (xy 141.779776 105.880699) + (xy 141.606558 105.759411) + (xy 141.60158 105.75709) + (xy 141.601577 105.757088) + (xy 141.419892 105.672367) + (xy 141.419891 105.672366) + (xy 141.41491 105.670044) + (xy 141.409602 105.668622) + (xy 141.4096 105.668621) + (xy 141.21597 105.616738) + (xy 141.215968 105.616738) + (xy 141.210655 105.615314) + (xy 141 105.596884) + (xy 140.994525 105.597363) + (xy 140.994524 105.597363) + (xy 140.929392 105.603061) + (xy 140.859787 105.589071) + (xy 140.829316 105.566635) + (xy 137.795405 102.532724) + (xy 137.761379 102.470412) + (xy 137.7585 102.443629) + (xy 137.7585 100.204261) + (xy 140.350294 100.204261) + (xy 140.35959 100.216276) + (xy 140.389189 100.237001) + (xy 140.398677 100.242479) + (xy 140.580277 100.327159) + (xy 140.590571 100.330907) + (xy 140.784122 100.382769) + (xy 140.794909 100.384671) + (xy 140.994525 100.402135) + (xy 141.005475 100.402135) + (xy 141.205091 100.384671) + (xy 141.215878 100.382769) + (xy 141.409429 100.330907) + (xy 141.419723 100.327159) + (xy 141.601323 100.242479) + (xy 141.610811 100.237001) + (xy 141.641248 100.215689) + (xy 141.649623 100.205212) + (xy 141.649123 100.204261) + (xy 144.350294 100.204261) + (xy 144.35959 100.216276) + (xy 144.389189 100.237001) + (xy 144.398677 100.242479) + (xy 144.580277 100.327159) + (xy 144.590571 100.330907) + (xy 144.784122 100.382769) + (xy 144.794909 100.384671) + (xy 144.994525 100.402135) + (xy 145.005475 100.402135) + (xy 145.205091 100.384671) + (xy 145.215878 100.382769) + (xy 145.409429 100.330907) + (xy 145.419723 100.327159) + (xy 145.601323 100.242479) + (xy 145.610811 100.237001) + (xy 145.641248 100.215689) + (xy 145.649623 100.205212) + (xy 145.642554 100.191764) + (xy 145.012812 99.562022) + (xy 144.998868 99.554408) + (xy 144.997035 99.554539) + (xy 144.99042 99.55879) + (xy 144.356724 100.192486) + (xy 144.350294 100.204261) + (xy 141.649123 100.204261) + (xy 141.642554 100.191764) + (xy 141.012812 99.562022) + (xy 140.998868 99.554408) + (xy 140.997035 99.554539) + (xy 140.99042 99.55879) + (xy 140.356724 100.192486) + (xy 140.350294 100.204261) + (xy 137.7585 100.204261) + (xy 137.7585 100.192767) + (xy 137.778502 100.124646) + (xy 137.795405 100.103672) + (xy 137.929301 99.969776) + (xy 138.050589 99.796558) + (xy 138.053914 99.789429) + (xy 138.137633 99.609892) + (xy 138.137634 99.609891) + (xy 138.139956 99.60491) + (xy 138.142352 99.59597) + (xy 138.193262 99.40597) + (xy 138.193262 99.405968) + (xy 138.194686 99.400655) + (xy 138.212637 99.195475) + (xy 139.787865 99.195475) + (xy 139.805329 99.395091) + (xy 139.807231 99.405878) + (xy 139.859093 99.599429) + (xy 139.862841 99.609723) + (xy 139.947521 99.791323) + (xy 139.952999 99.800811) + (xy 139.974311 99.831248) + (xy 139.984788 99.839623) + (xy 139.998236 99.832554) + (xy 140.627978 99.202812) + (xy 140.634356 99.191132) + (xy 141.364408 99.191132) + (xy 141.364539 99.192965) + (xy 141.36879 99.19958) + (xy 142.002486 99.833276) + (xy 142.014261 99.839706) + (xy 142.026276 99.83041) + (xy 142.047001 99.800811) + (xy 142.052479 99.791323) + (xy 142.137159 99.609723) + (xy 142.140907 99.599429) + (xy 142.192769 99.405878) + (xy 142.194671 99.395091) + (xy 142.212135 99.195475) + (xy 143.787865 99.195475) + (xy 143.805329 99.395091) + (xy 143.807231 99.405878) + (xy 143.859093 99.599429) + (xy 143.862841 99.609723) + (xy 143.947521 99.791323) + (xy 143.952999 99.800811) + (xy 143.974311 99.831248) + (xy 143.984788 99.839623) + (xy 143.998236 99.832554) + (xy 144.627978 99.202812) + (xy 144.635592 99.188868) + (xy 144.635461 99.187035) + (xy 144.63121 99.18042) + (xy 143.997514 98.546724) + (xy 143.985739 98.540294) + (xy 143.973724 98.54959) + (xy 143.952999 98.579189) + (xy 143.947521 98.588677) + (xy 143.862841 98.770277) + (xy 143.859093 98.780571) + (xy 143.807231 98.974122) + (xy 143.805329 98.984909) + (xy 143.787865 99.184525) + (xy 143.787865 99.195475) + (xy 142.212135 99.195475) + (xy 142.212135 99.184525) + (xy 142.194671 98.984909) + (xy 142.192769 98.974122) + (xy 142.140907 98.780571) + (xy 142.137159 98.770277) + (xy 142.052479 98.588677) + (xy 142.047001 98.579189) + (xy 142.025689 98.548752) + (xy 142.015212 98.540377) + (xy 142.001764 98.547446) + (xy 141.372022 99.177188) + (xy 141.364408 99.191132) + (xy 140.634356 99.191132) + (xy 140.635592 99.188868) + (xy 140.635461 99.187035) + (xy 140.63121 99.18042) + (xy 139.997514 98.546724) + (xy 139.985739 98.540294) + (xy 139.973724 98.54959) + (xy 139.952999 98.579189) + (xy 139.947521 98.588677) + (xy 139.862841 98.770277) + (xy 139.859093 98.780571) + (xy 139.807231 98.974122) + (xy 139.805329 98.984909) + (xy 139.787865 99.184525) + (xy 139.787865 99.195475) + (xy 138.212637 99.195475) + (xy 138.213116 99.19) + (xy 138.194686 98.979345) + (xy 138.192335 98.970571) + (xy 138.141379 98.7804) + (xy 138.141378 98.780398) + (xy 138.139956 98.77509) + (xy 138.113034 98.717355) + (xy 138.052912 98.588423) + (xy 138.05291 98.58842) + (xy 138.050589 98.583442) + (xy 137.929301 98.410224) + (xy 137.779776 98.260699) + (xy 137.606558 98.139411) + (xy 137.60158 98.13709) + (xy 137.601577 98.137088) + (xy 137.419892 98.052367) + (xy 137.419891 98.052366) + (xy 137.41491 98.050044) + (xy 137.409602 98.048622) + (xy 137.4096 98.048621) + (xy 137.21597 97.996738) + (xy 137.215968 97.996738) + (xy 137.210655 97.995314) + (xy 137 97.976884) + (xy 136.994525 97.977363) + (xy 136.994524 97.977363) + (xy 136.929392 97.983061) + (xy 136.859787 97.969071) + (xy 136.829316 97.946635) + (xy 127.335405 88.452724) + (xy 127.301379 88.390412) + (xy 127.2985 88.363629) + (xy 127.2985 84.325478) + (xy 127.318502 84.257357) + (xy 127.352229 84.222265) + (xy 127.35527 84.220136) + (xy 127.355272 84.220134) + (xy 127.359781 84.216977) + (xy 127.516977 84.059781) + (xy 127.644488 83.877676) + (xy 127.646811 83.872694) + (xy 127.646814 83.872689) + (xy 127.695805 83.767627) + (xy 127.742723 83.714342) + (xy 127.811 83.694881) + (xy 127.87896 83.715423) + (xy 127.924195 83.767627) + (xy 127.973186 83.872689) + (xy 127.973189 83.872694) + (xy 127.975512 83.877676) + (xy 128.103023 84.059781) + (xy 128.260219 84.216977) + (xy 128.264728 84.220134) + (xy 128.26473 84.220136) + (xy 128.267771 84.222265) + (xy 128.268797 84.223548) + (xy 128.268943 84.223671) + (xy 128.268918 84.2237) + (xy 128.312099 84.277722) + (xy 128.3215 84.325478) + (xy 128.3215 88.01293) + (xy 128.320067 88.03188) + (xy 128.316801 88.053349) + (xy 128.317394 88.060641) + (xy 128.317394 88.060644) + (xy 128.321085 88.106018) + (xy 128.3215 88.116233) + (xy 128.3215 88.124293) + (xy 128.322951 88.136739) + (xy 128.324789 88.152507) + (xy 128.325222 88.156882) + (xy 128.330502 88.221789) + (xy 128.33114 88.229637) + (xy 128.333396 88.236601) + (xy 128.334587 88.24256) + (xy 128.335971 88.248415) + (xy 128.336818 88.255681) + (xy 128.361735 88.324327) + (xy 128.363152 88.328455) + (xy 128.383224 88.390412) + (xy 128.385649 88.397899) + (xy 128.389445 88.404154) + (xy 128.391951 88.409628) + (xy 128.39467 88.415058) + (xy 128.397167 88.421937) + (xy 128.40118 88.428057) + (xy 128.40118 88.428058) + (xy 128.437186 88.482976) + (xy 128.439523 88.48668) + (xy 128.477405 88.549107) + (xy 128.481121 88.553315) + (xy 128.481122 88.553316) + (xy 128.484803 88.557484) + (xy 128.484776 88.557508) + (xy 128.487429 88.5605) + (xy 128.490132 88.563733) + (xy 128.494144 88.569852) + (xy 128.499456 88.574884) + (xy 128.550383 88.623128) + (xy 128.552825 88.625506) + (xy 137.41623 97.488911) + (xy 137.428616 97.503323) + (xy 137.437149 97.514918) + (xy 137.437154 97.514923) + (xy 137.441492 97.520818) + (xy 137.44707 97.525557) + (xy 137.447073 97.52556) + (xy 137.481768 97.555035) + (xy 137.489284 97.561965) + (xy 137.494979 97.56766) + (xy 137.497861 97.56994) + (xy 137.517251 97.585281) + (xy 137.520655 97.588072) + (xy 137.570703 97.630591) + (xy 137.576285 97.635333) + (xy 137.582801 97.638661) + (xy 137.58785 97.642028) + (xy 137.592979 97.645195) + (xy 137.598716 97.649734) + (xy 137.664875 97.680655) + (xy 137.668769 97.682558) + (xy 137.733808 97.715769) + (xy 137.740916 97.717508) + (xy 137.746559 97.719607) + (xy 137.752322 97.721524) + (xy 137.75895 97.724622) + (xy 137.766112 97.726112) + (xy 137.766113 97.726112) + (xy 137.830412 97.739486) + (xy 137.834696 97.740456) + (xy 137.90561 97.757808) + (xy 137.911212 97.758156) + (xy 137.911215 97.758156) + (xy 137.916764 97.7585) + (xy 137.916762 97.758536) + (xy 137.920755 97.758775) + (xy 137.924947 97.759149) + (xy 137.932115 97.76064) + (xy 138.00952 97.758546) + (xy 138.012928 97.7585) + (xy 140.718011 97.7585) + (xy 140.786132 97.778502) + (xy 140.832625 97.832158) + (xy 140.842729 97.902432) + (xy 140.813235 97.967012) + (xy 140.750623 98.006207) + (xy 140.590571 98.049093) + (xy 140.580277 98.052841) + (xy 140.398677 98.137521) + (xy 140.389189 98.142999) + (xy 140.358752 98.164311) + (xy 140.350377 98.174788) + (xy 140.357446 98.188236) + (xy 140.987188 98.817978) + (xy 141.001132 98.825592) + (xy 141.002965 98.825461) + (xy 141.00958 98.82121) + (xy 141.643276 98.187514) + (xy 141.649706 98.175739) + (xy 141.64041 98.163724) + (xy 141.610811 98.142999) + (xy 141.601323 98.137521) + (xy 141.419723 98.052841) + (xy 141.409429 98.049093) + (xy 141.249377 98.006207) + (xy 141.188755 97.969255) + (xy 141.157733 97.905394) + (xy 141.166162 97.8349) + (xy 141.211365 97.780153) + (xy 141.281989 97.7585) + (xy 144.718011 97.7585) + (xy 144.786132 97.778502) + (xy 144.832625 97.832158) + (xy 144.842729 97.902432) + (xy 144.813235 97.967012) + (xy 144.750623 98.006207) + (xy 144.590571 98.049093) + (xy 144.580277 98.052841) + (xy 144.398677 98.137521) + (xy 144.389189 98.142999) + (xy 144.358752 98.164311) + (xy 144.350377 98.174788) + (xy 144.357446 98.188236) + (xy 144.987188 98.817978) + (xy 145.001132 98.825592) + (xy 145.002965 98.825461) + (xy 145.00958 98.82121) + (xy 145.643276 98.187514) + (xy 145.649706 98.175739) + (xy 145.64041 98.163724) + (xy 145.610811 98.142999) + (xy 145.601323 98.137521) + (xy 145.419723 98.052841) + (xy 145.409429 98.049093) + (xy 145.249377 98.006207) + (xy 145.188755 97.969255) + (xy 145.157733 97.905394) + (xy 145.166162 97.8349) + (xy 145.211365 97.780153) + (xy 145.281989 97.7585) + (xy 145.633629 97.7585) + (xy 145.70175 97.778502) + (xy 145.722724 97.795405) + (xy 146.204595 98.277276) + (xy 146.238621 98.339588) + (xy 146.2415 98.366371) + (xy 146.2415 98.459234) + (xy 146.221498 98.527355) + (xy 146.167842 98.573848) + (xy 146.097568 98.583952) + (xy 146.036829 98.557656) + (xy 146.015212 98.540377) + (xy 146.001764 98.547446) + (xy 145.372022 99.177188) + (xy 145.364408 99.191132) + (xy 145.364539 99.192965) + (xy 145.36879 99.19958) + (xy 146.002486 99.833276) + (xy 146.014261 99.839706) + (xy 146.0384 99.821031) + (xy 146.104518 99.795167) + (xy 146.174123 99.809156) + (xy 146.225115 99.858555) + (xy 146.2415 99.920688) + (xy 146.2415 104.443629) + (xy 146.221498 104.51175) + (xy 146.204595 104.532724) + (xy 145.170684 105.566635) + (xy 145.108372 105.600661) + (xy 145.070608 105.603061) + (xy 145.005476 105.597363) + (xy 145.005475 105.597363) + (xy 145 105.596884) + (xy 144.789345 105.615314) + (xy 144.784032 105.616738) + (xy 144.78403 105.616738) + (xy 144.5904 105.668621) + (xy 144.590398 105.668622) + (xy 144.58509 105.670044) + (xy 144.580109 105.672366) + (xy 144.580108 105.672367) + (xy 144.398423 105.757088) + (xy 144.39842 105.75709) + (xy 144.393442 105.759411) + (xy 144.220224 105.880699) + (xy 144.070699 106.030224) + (xy 143.949411 106.203442) + (xy 143.94709 106.20842) + (xy 143.947088 106.208423) + (xy 143.862913 106.388937) + (xy 143.860044 106.39509) + (xy 143.858622 106.400398) + (xy 143.858621 106.4004) + (xy 143.807711 106.5904) + (xy 143.805314 106.599345) + (xy 143.786884 106.81) + (xy 143.787363 106.815475) + (xy 143.787363 106.815476) + (xy 143.793061 106.880608) + (xy 143.779071 106.950213) + (xy 143.756635 106.980684) + (xy 142.011089 108.72623) + (xy 141.996677 108.738616) + (xy 141.985082 108.747149) + (xy 141.985077 108.747154) + (xy 141.979182 108.751492) + (xy 141.974443 108.75707) + (xy 141.97444 108.757073) + (xy 141.944965 108.791768) + (xy 141.938035 108.799284) + (xy 141.93234 108.804979) + (xy 141.93006 108.807861) + (xy 141.914719 108.827251) + (xy 141.911928 108.830655) + (xy 141.907537 108.835824) + (xy 141.864667 108.886285) + (xy 141.861339 108.892801) + (xy 141.857972 108.89785) + (xy 141.854805 108.902979) + (xy 141.850266 108.908716) + (xy 141.819345 108.974875) + (xy 141.817442 108.978769) + (xy 141.784231 109.043808) + (xy 141.782492 109.050916) + (xy 141.780393 109.056559) + (xy 141.778476 109.062322) + (xy 141.775378 109.06895) + (xy 141.773888 109.076112) + (xy 141.773888 109.076113) + (xy 141.760514 109.140412) + (xy 141.759544 109.144696) + (xy 141.742192 109.21561) + (xy 141.7415 109.226764) + (xy 141.741464 109.226762) + (xy 141.741225 109.230755) + (xy 141.740851 109.234947) + (xy 141.73936 109.242115) + (xy 141.739558 109.249432) + (xy 141.741454 109.319521) + (xy 141.7415 109.322928) + (xy 141.7415 111.84177) + (xy 141.721498 111.909891) + (xy 141.680865 111.949489) + (xy 141.673692 111.953842) + (xy 141.667117 111.957832) + (xy 141.663087 111.961329) + (xy 141.509762 112.094378) + (xy 141.486581 112.114493) + (xy 141.483198 112.118619) + (xy 141.483194 112.118623) + (xy 141.404795 112.214238) + (xy 141.335022 112.299333) + (xy 141.332383 112.303969) + (xy 141.332381 112.303972) + (xy 141.330587 112.307124) + (xy 141.216773 112.507066) + (xy 141.135216 112.731753) + (xy 141.134267 112.737002) + (xy 141.134266 112.737005) + (xy 141.09342 112.962885) + (xy 141.093419 112.962893) + (xy 141.092682 112.966969) + (xy 141.0915 112.992032) + (xy 141.0915 114.960012) + (xy 141.106617 115.138175) + (xy 141.107957 115.143339) + (xy 141.107958 115.143343) + (xy 141.162937 115.355164) + (xy 141.166668 115.36954) + (xy 141.16886 115.374406) + (xy 141.224345 115.497577) + (xy 141.264843 115.58748) + (xy 141.398334 115.785762) + (xy 141.402013 115.789619) + (xy 141.402015 115.789621) + (xy 141.47055 115.861464) + (xy 141.563326 115.958718) + (xy 141.7551 116.101402) + (xy 141.759851 116.103818) + (xy 141.759855 116.10382) + (xy 141.963414 116.207314) + (xy 141.968172 116.209733) + (xy 142.058221 116.237694) + (xy 142.191349 116.279032) + (xy 142.191355 116.279033) + (xy 142.196452 116.280616) + (xy 142.323883 116.297506) + (xy 142.428127 116.311323) + (xy 142.428131 116.311323) + (xy 142.433411 116.312023) + (xy 142.43874 116.311823) + (xy 142.438741 116.311823) + (xy 142.536509 116.308152) + (xy 142.672274 116.303055) + (xy 142.759184 116.284819) + (xy 142.900984 116.255067) + (xy 142.900987 116.255066) + (xy 142.906211 116.25397) + (xy 143.128533 116.166171) + (xy 143.332883 116.042168) + (xy 143.513419 115.885507) + (xy 143.516802 115.881381) + (xy 143.516806 115.881377) + (xy 143.655108 115.712704) + (xy 143.664978 115.700667) + (xy 143.736688 115.574692) + (xy 143.780584 115.497577) + (xy 143.783227 115.492934) + (xy 143.864784 115.268247) + (xy 143.865734 115.262995) + (xy 143.90658 115.037115) + (xy 143.906581 115.037107) + (xy 143.907318 115.033031) + (xy 143.9085 115.007968) + (xy 143.9085 113.039988) + (xy 143.893383 112.861825) + (xy 143.892042 112.856657) + (xy 143.834673 112.635625) + (xy 143.834671 112.63562) + (xy 143.833332 112.63046) + (xy 143.798692 112.553563) + (xy 143.737347 112.417381) + (xy 143.737346 112.417378) + (xy 143.735157 112.41252) + (xy 143.601666 112.214238) + (xy 143.436674 112.041282) + (xy 143.309287 111.946503) + (xy 143.266574 111.889794) + (xy 143.2585 111.845415) + (xy 143.2585 109.676371) + (xy 143.278502 109.60825) + (xy 143.295405 109.587276) + (xy 144.829316 108.053365) + (xy 144.891628 108.019339) + (xy 144.929392 108.016939) + (xy 144.994524 108.022637) + (xy 144.994525 108.022637) + (xy 145 108.023116) + (xy 145.210655 108.004686) + (xy 145.215968 108.003262) + (xy 145.21597 108.003262) + (xy 145.4096 107.951379) + (xy 145.409602 107.951378) + (xy 145.41491 107.949956) + (xy 145.419892 107.947633) + (xy 145.601577 107.862912) + (xy 145.60158 107.86291) + (xy 145.606558 107.860589) + (xy 145.779776 107.739301) + (xy 145.929301 107.589776) + (xy 146.050589 107.416558) + (xy 146.139956 107.22491) + (xy 146.142352 107.21597) + (xy 146.193262 107.02597) + (xy 146.193262 107.025968) + (xy 146.194686 107.020655) + (xy 146.213116 106.81) + (xy 146.206939 106.739392) + (xy 146.220929 106.669787) + (xy 146.243365 106.639316) + (xy 147.488911 105.39377) + (xy 147.503323 105.381384) + (xy 147.514918 105.372851) + (xy 147.514923 105.372846) + (xy 147.520818 105.368508) + (xy 147.525557 105.36293) + (xy 147.52556 105.362927) + (xy 147.555035 105.328232) + (xy 147.561965 105.320716) + (xy 147.56766 105.315021) + (xy 147.585281 105.292749) + (xy 147.588072 105.289345) + (xy 147.630591 105.239297) + (xy 147.630592 105.239295) + (xy 147.635333 105.233715) + (xy 147.638661 105.227199) + (xy 147.642028 105.22215) + (xy 147.645195 105.217021) + (xy 147.649734 105.211284) + (xy 147.680655 105.145125) + (xy 147.682561 105.141225) + (xy 147.703691 105.099845) + (xy 147.715769 105.076192) + (xy 147.717508 105.069084) + (xy 147.719607 105.063441) + (xy 147.721524 105.057678) + (xy 147.724622 105.05105) + (xy 147.739487 104.979583) + (xy 147.740457 104.975299) + (xy 147.756473 104.909845) + (xy 147.757808 104.90439) + (xy 147.7585 104.893236) + (xy 147.758536 104.893238) + (xy 147.758775 104.889245) + (xy 147.759149 104.885053) + (xy 147.76064 104.877885) + (xy 147.758849 104.811675) + (xy 147.758546 104.800479) + (xy 147.7585 104.797072) + (xy 147.7585 98.06707) + (xy 147.759933 98.04812) + (xy 147.762099 98.033885) + (xy 147.762099 98.033881) + (xy 147.763199 98.026651) + (xy 147.759654 97.983061) + (xy 147.758915 97.973982) + (xy 147.7585 97.963767) + (xy 147.7585 97.955707) + (xy 147.757443 97.946635) + (xy 147.755211 97.927497) + (xy 147.754778 97.923121) + (xy 147.749454 97.857662) + (xy 147.749453 97.857659) + (xy 147.74886 97.850364) + (xy 147.746604 97.8434) + (xy 147.745417 97.837461) + (xy 147.74403 97.83159) + (xy 147.743182 97.824319) + (xy 147.740686 97.817443) + (xy 147.740684 97.817434) + (xy 147.718275 97.755702) + (xy 147.716865 97.751598) + (xy 147.694352 97.682101) + (xy 147.690556 97.675846) + (xy 147.688057 97.670387) + (xy 147.685329 97.664939) + (xy 147.682833 97.658063) + (xy 147.642805 97.59701) + (xy 147.640481 97.593327) + (xy 147.63643 97.58665) + (xy 147.602595 97.530893) + (xy 147.597886 97.52556) + (xy 147.595198 97.522517) + (xy 147.595225 97.522493) + (xy 147.59257 97.519499) + (xy 147.589868 97.516268) + (xy 147.585856 97.510148) + (xy 147.529617 97.456872) + (xy 147.527175 97.454494) + (xy 146.58377 96.511089) + (xy 146.571384 96.496677) + (xy 146.562851 96.485082) + (xy 146.562846 96.485077) + (xy 146.558508 96.479182) + (xy 146.55293 96.474443) + (xy 146.552927 96.47444) + (xy 146.518232 96.444965) + (xy 146.510716 96.438035) + (xy 146.505021 96.43234) + (xy 146.49888 96.427482) + (xy 146.482749 96.414719) + (xy 146.479345 96.411928) + (xy 146.429297 96.369409) + (xy 146.429295 96.369408) + (xy 146.423715 96.364667) + (xy 146.417199 96.361339) + (xy 146.41215 96.357972) + (xy 146.407021 96.354805) + (xy 146.401284 96.350266) + (xy 146.335125 96.319345) + (xy 146.331225 96.317439) + (xy 146.266192 96.284231) + (xy 146.259084 96.282492) + (xy 146.253441 96.280393) + (xy 146.247678 96.278476) + (xy 146.24105 96.275378) + (xy 146.169583 96.260513) + (xy 146.165299 96.259543) + (xy 146.09439 96.242192) + (xy 146.088788 96.241844) + (xy 146.088785 96.241844) + (xy 146.083236 96.2415) + (xy 146.083238 96.241464) + (xy 146.079245 96.241225) + (xy 146.075053 96.240851) + (xy 146.067885 96.23936) + (xy 146.001675 96.241151) + (xy 145.990479 96.241454) + (xy 145.987072 96.2415) + (xy 138.366371 96.2415) + (xy 138.29825 96.221498) + (xy 138.277276 96.204595) + (xy 129.875405 87.802724) + (xy 129.841379 87.740412) + (xy 129.8385 87.713629) + (xy 129.8385 84.325478) + (xy 129.858502 84.257357) + (xy 129.892229 84.222265) + (xy 129.89527 84.220136) + (xy 129.895272 84.220134) + (xy 129.899781 84.216977) + (xy 130.056977 84.059781) + (xy 130.184488 83.877676) + (xy 130.186811 83.872694) + (xy 130.186814 83.872689) + (xy 130.235805 83.767627) + (xy 130.282723 83.714342) + (xy 130.351 83.694881) + (xy 130.41896 83.715423) + (xy 130.464195 83.767627) + (xy 130.513186 83.872689) + (xy 130.513189 83.872694) + (xy 130.515512 83.877676) + (xy 130.643023 84.059781) + (xy 130.800219 84.216977) + (xy 130.804727 84.220134) + (xy 130.80473 84.220136) + (xy 130.807771 84.222265) + (xy 130.982323 84.344488) + (xy 130.987305 84.346811) + (xy 130.98731 84.346814) + (xy 131.178822 84.436117) + (xy 131.183804 84.43844) + (xy 131.189112 84.439862) + (xy 131.189114 84.439863) + (xy 131.254949 84.457503) + (xy 131.398537 84.495978) + (xy 131.62 84.515353) + (xy 131.841463 84.495978) + (xy 131.985051 84.457503) + (xy 132.050886 84.439863) + (xy 132.050888 84.439862) + (xy 132.056196 84.43844) + (xy 132.061178 84.436117) + (xy 132.25269 84.346814) + (xy 132.252695 84.346811) + (xy 132.257677 84.344488) + (xy 132.432229 84.222265) + (xy 132.43527 84.220136) + (xy 132.435273 84.220134) + (xy 132.439781 84.216977) + (xy 132.596977 84.059781) + (xy 132.724488 83.877676) + (xy 132.726811 83.872694) + (xy 132.726814 83.872689) + (xy 132.775805 83.767627) + (xy 132.822723 83.714342) + (xy 132.891 83.694881) + (xy 132.95896 83.715423) + (xy 133.004195 83.767627) + (xy 133.053186 83.872689) + (xy 133.053189 83.872694) + (xy 133.055512 83.877676) + (xy 133.183023 84.059781) + (xy 133.340219 84.216977) + (xy 133.344727 84.220134) + (xy 133.34473 84.220136) + (xy 133.347771 84.222265) + (xy 133.522323 84.344488) + (xy 133.527305 84.346811) + (xy 133.52731 84.346814) + (xy 133.718822 84.436117) + (xy 133.723804 84.43844) + (xy 133.729112 84.439862) + (xy 133.729114 84.439863) + (xy 133.794949 84.457503) + (xy 133.938537 84.495978) + (xy 134.16 84.515353) + (xy 134.381463 84.495978) + (xy 134.525051 84.457503) + (xy 134.590886 84.439863) + (xy 134.590888 84.439862) + (xy 134.596196 84.43844) + (xy 134.601178 84.436117) + (xy 134.79269 84.346814) + (xy 134.792695 84.346811) + (xy 134.797677 84.344488) + (xy 134.972229 84.222265) + (xy 134.97527 84.220136) + (xy 134.975273 84.220134) + (xy 134.979781 84.216977) + (xy 135.136977 84.059781) + (xy 135.264488 83.877676) + (xy 135.266811 83.872694) + (xy 135.266814 83.872689) + (xy 135.315805 83.767627) + (xy 135.362723 83.714342) + (xy 135.431 83.694881) + (xy 135.49896 83.715423) + (xy 135.544195 83.767627) + (xy 135.593186 83.872689) + (xy 135.593189 83.872694) + (xy 135.595512 83.877676) + (xy 135.723023 84.059781) + (xy 135.880219 84.216977) + (xy 135.884727 84.220134) + (xy 135.88473 84.220136) + (xy 135.887771 84.222265) + (xy 136.062323 84.344488) + (xy 136.067305 84.346811) + (xy 136.06731 84.346814) + (xy 136.258822 84.436117) + (xy 136.263804 84.43844) + (xy 136.269112 84.439862) + (xy 136.269114 84.439863) + (xy 136.334949 84.457503) + (xy 136.478537 84.495978) + (xy 136.7 84.515353) + (xy 136.921463 84.495978) + (xy 137.065051 84.457503) + (xy 137.130886 84.439863) + (xy 137.130888 84.439862) + (xy 137.136196 84.43844) + (xy 137.141178 84.436117) + (xy 137.33269 84.346814) + (xy 137.332695 84.346811) + (xy 137.337677 84.344488) + (xy 137.512229 84.222265) + (xy 137.51527 84.220136) + (xy 137.515273 84.220134) + (xy 137.519781 84.216977) + (xy 137.676977 84.059781) + (xy 137.804488 83.877676) + (xy 137.806811 83.872694) + (xy 137.806814 83.872689) + (xy 137.855805 83.767627) + (xy 137.902723 83.714342) + (xy 137.971 83.694881) + (xy 138.03896 83.715423) + (xy 138.084195 83.767627) + (xy 138.133186 83.872689) + (xy 138.133189 83.872694) + (xy 138.135512 83.877676) + (xy 138.263023 84.059781) + (xy 138.420219 84.216977) + (xy 138.424727 84.220134) + (xy 138.42473 84.220136) + (xy 138.427771 84.222265) + (xy 138.602323 84.344488) + (xy 138.607305 84.346811) + (xy 138.60731 84.346814) + (xy 138.798822 84.436117) + (xy 138.803804 84.43844) + (xy 138.809112 84.439862) + (xy 138.809114 84.439863) + (xy 138.874949 84.457503) + (xy 139.018537 84.495978) + (xy 139.24 84.515353) + (xy 139.461463 84.495978) + (xy 139.605051 84.457503) + (xy 139.670886 84.439863) + (xy 139.670888 84.439862) + (xy 139.676196 84.43844) + (xy 139.681178 84.436117) + (xy 139.87269 84.346814) + (xy 139.872695 84.346811) + (xy 139.877677 84.344488) + (xy 140.052229 84.222265) + (xy 140.05527 84.220136) + (xy 140.055273 84.220134) + (xy 140.059781 84.216977) + (xy 140.216977 84.059781) + (xy 140.344488 83.877676) + (xy 140.346811 83.872694) + (xy 140.346814 83.872689) + (xy 140.395805 83.767627) + (xy 140.442723 83.714342) + (xy 140.511 83.694881) + (xy 140.57896 83.715423) + (xy 140.624195 83.767627) + (xy 140.673186 83.872689) + (xy 140.673189 83.872694) + (xy 140.675512 83.877676) + (xy 140.803023 84.059781) + (xy 140.960219 84.216977) + (xy 140.964727 84.220134) + (xy 140.96473 84.220136) + (xy 140.967771 84.222265) + (xy 141.142323 84.344488) + (xy 141.147305 84.346811) + (xy 141.14731 84.346814) + (xy 141.338822 84.436117) + (xy 141.343804 84.43844) + (xy 141.349112 84.439862) + (xy 141.349114 84.439863) + (xy 141.414949 84.457503) + (xy 141.558537 84.495978) + (xy 141.78 84.515353) + (xy 142.001463 84.495978) + (xy 142.145051 84.457503) + (xy 142.210886 84.439863) + (xy 142.210888 84.439862) + (xy 142.216196 84.43844) + (xy 142.221178 84.436117) + (xy 142.41269 84.346814) + (xy 142.412695 84.346811) + (xy 142.417677 84.344488) + (xy 142.592229 84.222265) + (xy 142.59527 84.220136) + (xy 142.595273 84.220134) + (xy 142.599781 84.216977) + (xy 142.756977 84.059781) + (xy 142.884488 83.877676) + (xy 142.886811 83.872694) + (xy 142.886814 83.872689) + (xy 142.935805 83.767627) + (xy 142.982723 83.714342) + (xy 143.051 83.694881) + (xy 143.11896 83.715423) + (xy 143.164195 83.767627) + (xy 143.213186 83.872689) + (xy 143.213189 83.872694) + (xy 143.215512 83.877676) + (xy 143.343023 84.059781) + (xy 143.500219 84.216977) + (xy 143.504727 84.220134) + (xy 143.50473 84.220136) + (xy 143.507771 84.222265) + (xy 143.682323 84.344488) + (xy 143.687305 84.346811) + (xy 143.68731 84.346814) + (xy 143.878822 84.436117) + (xy 143.883804 84.43844) + (xy 143.889112 84.439862) + (xy 143.889114 84.439863) + (xy 143.954949 84.457503) + (xy 144.098537 84.495978) + (xy 144.32 84.515353) + (xy 144.541463 84.495978) + (xy 144.685051 84.457503) + (xy 144.750886 84.439863) + (xy 144.750888 84.439862) + (xy 144.756196 84.43844) + (xy 144.761178 84.436117) + (xy 144.95269 84.346814) + (xy 144.952695 84.346811) + (xy 144.957677 84.344488) + (xy 145.132229 84.222265) + (xy 145.13527 84.220136) + (xy 145.135273 84.220134) + (xy 145.139781 84.216977) + (xy 145.296977 84.059781) + (xy 145.424488 83.877676) + (xy 145.426811 83.872694) + (xy 145.426814 83.872689) + (xy 145.475805 83.767627) + (xy 145.522723 83.714342) + (xy 145.591 83.694881) + (xy 145.65896 83.715423) + (xy 145.704195 83.767627) + (xy 145.753186 83.872689) + (xy 145.753189 83.872694) + (xy 145.755512 83.877676) + (xy 145.883023 84.059781) + (xy 146.040219 84.216977) + (xy 146.044727 84.220134) + (xy 146.04473 84.220136) + (xy 146.047771 84.222265) + (xy 146.222323 84.344488) + (xy 146.227305 84.346811) + (xy 146.22731 84.346814) + (xy 146.418822 84.436117) + (xy 146.423804 84.43844) + (xy 146.429112 84.439862) + (xy 146.429114 84.439863) + (xy 146.494949 84.457503) + (xy 146.638537 84.495978) + (xy 146.86 84.515353) + (xy 147.081463 84.495978) + (xy 147.225051 84.457503) + (xy 147.290886 84.439863) + (xy 147.290888 84.439862) + (xy 147.296196 84.43844) + (xy 147.301178 84.436117) + (xy 147.49269 84.346814) + (xy 147.492695 84.346811) + (xy 147.497677 84.344488) + (xy 147.672229 84.222265) + (xy 147.67527 84.220136) + (xy 147.675273 84.220134) + (xy 147.679781 84.216977) + (xy 147.836977 84.059781) + (xy 147.964488 83.877676) + (xy 147.966811 83.872694) + (xy 147.966814 83.872689) + (xy 148.015805 83.767627) + (xy 148.062723 83.714342) + (xy 148.131 83.694881) + (xy 148.19896 83.715423) + (xy 148.244195 83.767627) + (xy 148.293186 83.872689) + (xy 148.293189 83.872694) + (xy 148.295512 83.877676) + (xy 148.423023 84.059781) + (xy 148.580219 84.216977) + (xy 148.584727 84.220134) + (xy 148.58473 84.220136) + (xy 148.587771 84.222265) + (xy 148.762323 84.344488) + (xy 148.767305 84.346811) + (xy 148.76731 84.346814) + (xy 148.958822 84.436117) + (xy 148.963804 84.43844) + (xy 148.969112 84.439862) + (xy 148.969114 84.439863) + (xy 149.034949 84.457503) + (xy 149.178537 84.495978) + (xy 149.4 84.515353) + (xy 149.621463 84.495978) + (xy 149.765051 84.457503) + (xy 149.830886 84.439863) + (xy 149.830888 84.439862) + (xy 149.836196 84.43844) + (xy 149.841178 84.436117) + (xy 150.03269 84.346814) + (xy 150.032695 84.346811) + (xy 150.037677 84.344488) + (xy 150.212229 84.222265) + (xy 150.21527 84.220136) + (xy 150.215273 84.220134) + (xy 150.219781 84.216977) + (xy 150.376977 84.059781) + (xy 150.504488 83.877676) + (xy 150.506811 83.872694) + (xy 150.506814 83.872689) + (xy 150.555805 83.767627) + (xy 150.602723 83.714342) + (xy 150.671 83.694881) + (xy 150.73896 83.715423) + (xy 150.784195 83.767627) + (xy 150.833186 83.872689) + (xy 150.833189 83.872694) + (xy 150.835512 83.877676) + (xy 150.963023 84.059781) + (xy 151.120219 84.216977) + (xy 151.124727 84.220134) + (xy 151.12473 84.220136) + (xy 151.127771 84.222265) + (xy 151.302323 84.344488) + (xy 151.307305 84.346811) + (xy 151.30731 84.346814) + (xy 151.498822 84.436117) + (xy 151.503804 84.43844) + (xy 151.509112 84.439862) + (xy 151.509114 84.439863) + (xy 151.574949 84.457503) + (xy 151.718537 84.495978) + (xy 151.94 84.515353) + (xy 152.161463 84.495978) + (xy 152.305051 84.457503) + (xy 152.370886 84.439863) + (xy 152.370888 84.439862) + (xy 152.376196 84.43844) + (xy 152.381178 84.436117) + (xy 152.57269 84.346814) + (xy 152.572695 84.346811) + (xy 152.577677 84.344488) + (xy 152.752229 84.222265) + (xy 152.75527 84.220136) + (xy 152.755273 84.220134) + (xy 152.759781 84.216977) + (xy 152.916977 84.059781) + (xy 153.044488 83.877676) + (xy 153.046811 83.872694) + (xy 153.046814 83.872689) + (xy 153.095805 83.767627) + (xy 153.142723 83.714342) + (xy 153.211 83.694881) + (xy 153.27896 83.715423) + (xy 153.324195 83.767627) + (xy 153.373186 83.872689) + (xy 153.373189 83.872694) + (xy 153.375512 83.877676) + (xy 153.503023 84.059781) + (xy 153.660219 84.216977) + (xy 153.664727 84.220134) + (xy 153.66473 84.220136) + (xy 153.667771 84.222265) + (xy 153.842323 84.344488) + (xy 153.847305 84.346811) + (xy 153.84731 84.346814) + (xy 154.038822 84.436117) + (xy 154.043804 84.43844) + (xy 154.049112 84.439862) + (xy 154.049114 84.439863) + (xy 154.114949 84.457503) + (xy 154.258537 84.495978) + (xy 154.48 84.515353) + (xy 154.701463 84.495978) + (xy 154.845051 84.457503) + (xy 154.910886 84.439863) + (xy 154.910888 84.439862) + (xy 154.916196 84.43844) + (xy 154.921178 84.436117) + (xy 155.11269 84.346814) + (xy 155.112695 84.346811) + (xy 155.117677 84.344488) + (xy 155.292229 84.222265) + (xy 155.29527 84.220136) + (xy 155.295273 84.220134) + (xy 155.299781 84.216977) + (xy 155.456977 84.059781) + (xy 155.584488 83.877676) + (xy 155.586811 83.872694) + (xy 155.586814 83.872689) + (xy 155.676117 83.681178) + (xy 155.676118 83.681177) + (xy 155.67844 83.676196) + (xy 155.735978 83.461463) + (xy 155.755353 83.24) + (xy 155.735978 83.018537) + (xy 155.67844 82.803804) + (xy 155.616333 82.670615) + (xy 155.586814 82.607311) + (xy 155.586811 82.607306) + (xy 155.584488 82.602324) + (xy 155.57114 82.583261) + (xy 155.460136 82.42473) + (xy 155.460134 82.424727) + (xy 155.456977 82.420219) + (xy 155.299781 82.263023) + (xy 155.295273 82.259866) + (xy 155.29527 82.259864) + (xy 155.219505 82.206813) + (xy 155.117677 82.135512) + (xy 155.112695 82.133189) + (xy 155.11269 82.133186) + (xy 154.921178 82.043883) + (xy 154.921177 82.043882) + (xy 154.916196 82.04156) + (xy 154.910888 82.040138) + (xy 154.910886 82.040137) + (xy 154.84437 82.022314) + (xy 154.701463 81.984022) + (xy 154.48 81.964647) + (xy 154.258537 81.984022) + (xy 154.11563 82.022314) + (xy 154.049114 82.040137) + (xy 154.049112 82.040138) + (xy 154.043804 82.04156) + (xy 154.038823 82.043882) + (xy 154.038822 82.043883) + (xy 153.847311 82.133186) + (xy 153.847306 82.133189) + (xy 153.842324 82.135512) + (xy 153.837817 82.138668) + (xy 153.837815 82.138669) + (xy 153.66473 82.259864) + (xy 153.664727 82.259866) + (xy 153.660219 82.263023) + (xy 153.503023 82.420219) + (xy 153.499866 82.424727) + (xy 153.499864 82.42473) + (xy 153.38886 82.583261) + (xy 153.375512 82.602324) + (xy 153.373189 82.607306) + (xy 153.373186 82.607311) + (xy 153.324195 82.712373) + (xy 153.277277 82.765658) + (xy 153.209 82.785119) + (xy 153.14104 82.764577) + (xy 153.095805 82.712373) + (xy 153.046814 82.607311) + (xy 153.046811 82.607306) + (xy 153.044488 82.602324) + (xy 153.03114 82.583261) + (xy 152.920136 82.42473) + (xy 152.920134 82.424727) + (xy 152.916977 82.420219) + (xy 152.759781 82.263023) + (xy 152.755273 82.259866) + (xy 152.75527 82.259864) + (xy 152.679505 82.206813) + (xy 152.577677 82.135512) + (xy 152.572695 82.133189) + (xy 152.57269 82.133186) + (xy 152.381178 82.043883) + (xy 152.381177 82.043882) + (xy 152.376196 82.04156) + (xy 152.370888 82.040138) + (xy 152.370886 82.040137) + (xy 152.30437 82.022314) + (xy 152.161463 81.984022) + (xy 151.94 81.964647) + (xy 151.718537 81.984022) + (xy 151.57563 82.022314) + (xy 151.509114 82.040137) + (xy 151.509112 82.040138) + (xy 151.503804 82.04156) + (xy 151.498823 82.043882) + (xy 151.498822 82.043883) + (xy 151.307311 82.133186) + (xy 151.307306 82.133189) + (xy 151.302324 82.135512) + (xy 151.297817 82.138668) + (xy 151.297815 82.138669) + (xy 151.12473 82.259864) + (xy 151.124727 82.259866) + (xy 151.120219 82.263023) + (xy 150.963023 82.420219) + (xy 150.959866 82.424727) + (xy 150.959864 82.42473) + (xy 150.84886 82.583261) + (xy 150.835512 82.602324) + (xy 150.833189 82.607306) + (xy 150.833186 82.607311) + (xy 150.784195 82.712373) + (xy 150.737277 82.765658) + (xy 150.669 82.785119) + (xy 150.60104 82.764577) + (xy 150.555805 82.712373) + (xy 150.506814 82.607311) + (xy 150.506811 82.607306) + (xy 150.504488 82.602324) + (xy 150.49114 82.583261) + (xy 150.380136 82.42473) + (xy 150.380134 82.424727) + (xy 150.376977 82.420219) + (xy 150.219781 82.263023) + (xy 150.215273 82.259866) + (xy 150.21527 82.259864) + (xy 150.139505 82.206813) + (xy 150.037677 82.135512) + (xy 150.032695 82.133189) + (xy 150.03269 82.133186) + (xy 149.841178 82.043883) + (xy 149.841177 82.043882) + (xy 149.836196 82.04156) + (xy 149.830888 82.040138) + (xy 149.830886 82.040137) + (xy 149.76437 82.022314) + (xy 149.621463 81.984022) + (xy 149.4 81.964647) + (xy 149.178537 81.984022) + (xy 149.03563 82.022314) + (xy 148.969114 82.040137) + (xy 148.969112 82.040138) + (xy 148.963804 82.04156) + (xy 148.958823 82.043882) + (xy 148.958822 82.043883) + (xy 148.767311 82.133186) + (xy 148.767306 82.133189) + (xy 148.762324 82.135512) + (xy 148.757817 82.138668) + (xy 148.757815 82.138669) + (xy 148.58473 82.259864) + (xy 148.584727 82.259866) + (xy 148.580219 82.263023) + (xy 148.423023 82.420219) + (xy 148.419866 82.424727) + (xy 148.419864 82.42473) + (xy 148.30886 82.583261) + (xy 148.295512 82.602324) + (xy 148.293189 82.607306) + (xy 148.293186 82.607311) + (xy 148.244195 82.712373) + (xy 148.197277 82.765658) + (xy 148.129 82.785119) + (xy 148.06104 82.764577) + (xy 148.015805 82.712373) + (xy 147.966814 82.607311) + (xy 147.966811 82.607306) + (xy 147.964488 82.602324) + (xy 147.95114 82.583261) + (xy 147.840136 82.42473) + (xy 147.840134 82.424727) + (xy 147.836977 82.420219) + (xy 147.679781 82.263023) + (xy 147.675273 82.259866) + (xy 147.67527 82.259864) + (xy 147.599505 82.206813) + (xy 147.497677 82.135512) + (xy 147.492695 82.133189) + (xy 147.49269 82.133186) + (xy 147.301178 82.043883) + (xy 147.301177 82.043882) + (xy 147.296196 82.04156) + (xy 147.290888 82.040138) + (xy 147.290886 82.040137) + (xy 147.22437 82.022314) + (xy 147.081463 81.984022) + (xy 146.86 81.964647) + (xy 146.638537 81.984022) + (xy 146.49563 82.022314) + (xy 146.429114 82.040137) + (xy 146.429112 82.040138) + (xy 146.423804 82.04156) + (xy 146.418823 82.043882) + (xy 146.418822 82.043883) + (xy 146.227311 82.133186) + (xy 146.227306 82.133189) + (xy 146.222324 82.135512) + (xy 146.217817 82.138668) + (xy 146.217815 82.138669) + (xy 146.04473 82.259864) + (xy 146.044727 82.259866) + (xy 146.040219 82.263023) + (xy 145.883023 82.420219) + (xy 145.879866 82.424727) + (xy 145.879864 82.42473) + (xy 145.76886 82.583261) + (xy 145.755512 82.602324) + (xy 145.753189 82.607306) + (xy 145.753186 82.607311) + (xy 145.704195 82.712373) + (xy 145.657277 82.765658) + (xy 145.589 82.785119) + (xy 145.52104 82.764577) + (xy 145.475805 82.712373) + (xy 145.426814 82.607311) + (xy 145.426811 82.607306) + (xy 145.424488 82.602324) + (xy 145.41114 82.583261) + (xy 145.300136 82.42473) + (xy 145.300134 82.424727) + (xy 145.296977 82.420219) + (xy 145.139781 82.263023) + (xy 145.135273 82.259866) + (xy 145.13527 82.259864) + (xy 145.059505 82.206813) + (xy 144.957677 82.135512) + (xy 144.952695 82.133189) + (xy 144.95269 82.133186) + (xy 144.761178 82.043883) + (xy 144.761177 82.043882) + (xy 144.756196 82.04156) + (xy 144.750888 82.040138) + (xy 144.750886 82.040137) + (xy 144.68437 82.022314) + (xy 144.541463 81.984022) + (xy 144.32 81.964647) + (xy 144.098537 81.984022) + (xy 143.95563 82.022314) + (xy 143.889114 82.040137) + (xy 143.889112 82.040138) + (xy 143.883804 82.04156) + (xy 143.878823 82.043882) + (xy 143.878822 82.043883) + (xy 143.687311 82.133186) + (xy 143.687306 82.133189) + (xy 143.682324 82.135512) + (xy 143.677817 82.138668) + (xy 143.677815 82.138669) + (xy 143.50473 82.259864) + (xy 143.504727 82.259866) + (xy 143.500219 82.263023) + (xy 143.343023 82.420219) + (xy 143.339866 82.424727) + (xy 143.339864 82.42473) + (xy 143.22886 82.583261) + (xy 143.215512 82.602324) + (xy 143.213189 82.607306) + (xy 143.213186 82.607311) + (xy 143.164195 82.712373) + (xy 143.117277 82.765658) + (xy 143.049 82.785119) + (xy 142.98104 82.764577) + (xy 142.935805 82.712373) + (xy 142.886814 82.607311) + (xy 142.886811 82.607306) + (xy 142.884488 82.602324) + (xy 142.87114 82.583261) + (xy 142.760136 82.42473) + (xy 142.760134 82.424727) + (xy 142.756977 82.420219) + (xy 142.599781 82.263023) + (xy 142.595273 82.259866) + (xy 142.59527 82.259864) + (xy 142.519505 82.206813) + (xy 142.417677 82.135512) + (xy 142.412695 82.133189) + (xy 142.41269 82.133186) + (xy 142.221178 82.043883) + (xy 142.221177 82.043882) + (xy 142.216196 82.04156) + (xy 142.210888 82.040138) + (xy 142.210886 82.040137) + (xy 142.14437 82.022314) + (xy 142.001463 81.984022) + (xy 141.78 81.964647) + (xy 141.558537 81.984022) + (xy 141.41563 82.022314) + (xy 141.349114 82.040137) + (xy 141.349112 82.040138) + (xy 141.343804 82.04156) + (xy 141.338823 82.043882) + (xy 141.338822 82.043883) + (xy 141.147311 82.133186) + (xy 141.147306 82.133189) + (xy 141.142324 82.135512) + (xy 141.137817 82.138668) + (xy 141.137815 82.138669) + (xy 140.96473 82.259864) + (xy 140.964727 82.259866) + (xy 140.960219 82.263023) + (xy 140.803023 82.420219) + (xy 140.799866 82.424727) + (xy 140.799864 82.42473) + (xy 140.68886 82.583261) + (xy 140.675512 82.602324) + (xy 140.673189 82.607306) + (xy 140.673186 82.607311) + (xy 140.624195 82.712373) + (xy 140.577277 82.765658) + (xy 140.509 82.785119) + (xy 140.44104 82.764577) + (xy 140.395805 82.712373) + (xy 140.346814 82.607311) + (xy 140.346811 82.607306) + (xy 140.344488 82.602324) + (xy 140.33114 82.583261) + (xy 140.220136 82.42473) + (xy 140.220134 82.424727) + (xy 140.216977 82.420219) + (xy 140.059781 82.263023) + (xy 140.055273 82.259866) + (xy 140.05527 82.259864) + (xy 139.979505 82.206813) + (xy 139.877677 82.135512) + (xy 139.872695 82.133189) + (xy 139.87269 82.133186) + (xy 139.681178 82.043883) + (xy 139.681177 82.043882) + (xy 139.676196 82.04156) + (xy 139.670888 82.040138) + (xy 139.670886 82.040137) + (xy 139.60437 82.022314) + (xy 139.461463 81.984022) + (xy 139.24 81.964647) + (xy 139.018537 81.984022) + (xy 138.87563 82.022314) + (xy 138.809114 82.040137) + (xy 138.809112 82.040138) + (xy 138.803804 82.04156) + (xy 138.798823 82.043882) + (xy 138.798822 82.043883) + (xy 138.607311 82.133186) + (xy 138.607306 82.133189) + (xy 138.602324 82.135512) + (xy 138.597817 82.138668) + (xy 138.597815 82.138669) + (xy 138.42473 82.259864) + (xy 138.424727 82.259866) + (xy 138.420219 82.263023) + (xy 138.263023 82.420219) + (xy 138.259866 82.424727) + (xy 138.259864 82.42473) + (xy 138.14886 82.583261) + (xy 138.135512 82.602324) + (xy 138.133189 82.607306) + (xy 138.133186 82.607311) + (xy 138.084195 82.712373) + (xy 138.037277 82.765658) + (xy 137.969 82.785119) + (xy 137.90104 82.764577) + (xy 137.855805 82.712373) + (xy 137.806814 82.607311) + (xy 137.806811 82.607306) + (xy 137.804488 82.602324) + (xy 137.79114 82.583261) + (xy 137.680136 82.42473) + (xy 137.680134 82.424727) + (xy 137.676977 82.420219) + (xy 137.519781 82.263023) + (xy 137.515273 82.259866) + (xy 137.51527 82.259864) + (xy 137.439505 82.206813) + (xy 137.337677 82.135512) + (xy 137.332695 82.133189) + (xy 137.33269 82.133186) + (xy 137.141178 82.043883) + (xy 137.141177 82.043882) + (xy 137.136196 82.04156) + (xy 137.130888 82.040138) + (xy 137.130886 82.040137) + (xy 137.06437 82.022314) + (xy 136.921463 81.984022) + (xy 136.7 81.964647) + (xy 136.478537 81.984022) + (xy 136.33563 82.022314) + (xy 136.269114 82.040137) + (xy 136.269112 82.040138) + (xy 136.263804 82.04156) + (xy 136.258823 82.043882) + (xy 136.258822 82.043883) + (xy 136.067311 82.133186) + (xy 136.067306 82.133189) + (xy 136.062324 82.135512) + (xy 136.057817 82.138668) + (xy 136.057815 82.138669) + (xy 135.88473 82.259864) + (xy 135.884727 82.259866) + (xy 135.880219 82.263023) + (xy 135.723023 82.420219) + (xy 135.719866 82.424727) + (xy 135.719864 82.42473) + (xy 135.60886 82.583261) + (xy 135.595512 82.602324) + (xy 135.593189 82.607306) + (xy 135.593186 82.607311) + (xy 135.544195 82.712373) + (xy 135.497277 82.765658) + (xy 135.429 82.785119) + (xy 135.36104 82.764577) + (xy 135.315805 82.712373) + (xy 135.266814 82.607311) + (xy 135.266811 82.607306) + (xy 135.264488 82.602324) + (xy 135.25114 82.583261) + (xy 135.140136 82.42473) + (xy 135.140134 82.424727) + (xy 135.136977 82.420219) + (xy 134.979781 82.263023) + (xy 134.975273 82.259866) + (xy 134.97527 82.259864) + (xy 134.899505 82.206813) + (xy 134.797677 82.135512) + (xy 134.792695 82.133189) + (xy 134.79269 82.133186) + (xy 134.601178 82.043883) + (xy 134.601177 82.043882) + (xy 134.596196 82.04156) + (xy 134.590888 82.040138) + (xy 134.590886 82.040137) + (xy 134.52437 82.022314) + (xy 134.381463 81.984022) + (xy 134.16 81.964647) + (xy 133.938537 81.984022) + (xy 133.79563 82.022314) + (xy 133.729114 82.040137) + (xy 133.729112 82.040138) + (xy 133.723804 82.04156) + (xy 133.718823 82.043882) + (xy 133.718822 82.043883) + (xy 133.527311 82.133186) + (xy 133.527306 82.133189) + (xy 133.522324 82.135512) + (xy 133.517817 82.138668) + (xy 133.517815 82.138669) + (xy 133.34473 82.259864) + (xy 133.344727 82.259866) + (xy 133.340219 82.263023) + (xy 133.183023 82.420219) + (xy 133.179866 82.424727) + (xy 133.179864 82.42473) + (xy 133.06886 82.583261) + (xy 133.055512 82.602324) + (xy 133.053189 82.607306) + (xy 133.053186 82.607311) + (xy 133.004195 82.712373) + (xy 132.957277 82.765658) + (xy 132.889 82.785119) + (xy 132.82104 82.764577) + (xy 132.775805 82.712373) + (xy 132.726814 82.607311) + (xy 132.726811 82.607306) + (xy 132.724488 82.602324) + (xy 132.71114 82.583261) + (xy 132.600136 82.42473) + (xy 132.600134 82.424727) + (xy 132.596977 82.420219) + (xy 132.439781 82.263023) + (xy 132.435273 82.259866) + (xy 132.43527 82.259864) + (xy 132.359505 82.206813) + (xy 132.257677 82.135512) + (xy 132.252695 82.133189) + (xy 132.25269 82.133186) + (xy 132.061178 82.043883) + (xy 132.061177 82.043882) + (xy 132.056196 82.04156) + (xy 132.050888 82.040138) + (xy 132.050886 82.040137) + (xy 131.98437 82.022314) + (xy 131.841463 81.984022) + (xy 131.62 81.964647) + (xy 131.398537 81.984022) + (xy 131.25563 82.022314) + (xy 131.189114 82.040137) + (xy 131.189112 82.040138) + (xy 131.183804 82.04156) + (xy 131.178823 82.043882) + (xy 131.178822 82.043883) + (xy 130.987311 82.133186) + (xy 130.987306 82.133189) + (xy 130.982324 82.135512) + (xy 130.977817 82.138668) + (xy 130.977815 82.138669) + (xy 130.80473 82.259864) + (xy 130.804727 82.259866) + (xy 130.800219 82.263023) + (xy 130.643023 82.420219) + (xy 130.639866 82.424727) + (xy 130.639864 82.42473) + (xy 130.52886 82.583261) + (xy 130.515512 82.602324) + (xy 130.513189 82.607306) + (xy 130.513186 82.607311) + (xy 130.464195 82.712373) + (xy 130.417277 82.765658) + (xy 130.349 82.785119) + (xy 130.28104 82.764577) + (xy 130.235805 82.712373) + (xy 130.186814 82.607311) + (xy 130.186811 82.607306) + (xy 130.184488 82.602324) + (xy 130.17114 82.583261) + (xy 130.060136 82.42473) + (xy 130.060134 82.424727) + (xy 130.056977 82.420219) + (xy 129.899781 82.263023) + (xy 129.895273 82.259866) + (xy 129.89527 82.259864) + (xy 129.819505 82.206813) + (xy 129.717677 82.135512) + (xy 129.712695 82.133189) + (xy 129.71269 82.133186) + (xy 129.521178 82.043883) + (xy 129.521177 82.043882) + (xy 129.516196 82.04156) + (xy 129.510888 82.040138) + (xy 129.510886 82.040137) + (xy 129.44437 82.022314) + (xy 129.301463 81.984022) + (xy 129.08 81.964647) + (xy 128.858537 81.984022) + (xy 128.71563 82.022314) + (xy 128.649114 82.040137) + (xy 128.649112 82.040138) + (xy 128.643804 82.04156) + (xy 128.638823 82.043882) + (xy 128.638822 82.043883) + (xy 128.447311 82.133186) + (xy 128.447306 82.133189) + (xy 128.442324 82.135512) + (xy 128.437817 82.138668) + (xy 128.437815 82.138669) + (xy 128.26473 82.259864) + (xy 128.264727 82.259866) + (xy 128.260219 82.263023) + (xy 128.103023 82.420219) + (xy 128.099866 82.424727) + (xy 128.099864 82.42473) + (xy 127.98886 82.583261) + (xy 127.975512 82.602324) + (xy 127.973189 82.607306) + (xy 127.973186 82.607311) + (xy 127.924195 82.712373) + (xy 127.877277 82.765658) + (xy 127.809 82.785119) + (xy 127.74104 82.764577) + (xy 127.695805 82.712373) + (xy 127.646814 82.607311) + (xy 127.646811 82.607306) + (xy 127.644488 82.602324) + (xy 127.63114 82.583261) + (xy 127.520136 82.42473) + (xy 127.520134 82.424727) + (xy 127.516977 82.420219) + (xy 127.359781 82.263023) + (xy 127.355273 82.259866) + (xy 127.35527 82.259864) + (xy 127.279505 82.206813) + (xy 127.177677 82.135512) + (xy 127.172695 82.133189) + (xy 127.17269 82.133186) + (xy 126.981178 82.043883) + (xy 126.981177 82.043882) + (xy 126.976196 82.04156) + (xy 126.970888 82.040138) + (xy 126.970886 82.040137) + (xy 126.90437 82.022314) + (xy 126.761463 81.984022) + (xy 126.54 81.964647) + (xy 126.318537 81.984022) + (xy 126.17563 82.022314) + (xy 126.109114 82.040137) + (xy 126.109112 82.040138) + (xy 126.103804 82.04156) + (xy 126.098823 82.043882) + (xy 126.098822 82.043883) + (xy 125.907311 82.133186) + (xy 125.907306 82.133189) + (xy 125.902324 82.135512) + (xy 125.897817 82.138668) + (xy 125.897815 82.138669) + (xy 125.72473 82.259864) + (xy 125.724727 82.259866) + (xy 125.720219 82.263023) + (xy 125.563023 82.420219) + (xy 125.559866 82.424727) + (xy 125.559864 82.42473) + (xy 125.44886 82.583261) + (xy 125.435512 82.602324) + (xy 125.433189 82.607306) + (xy 125.433186 82.607311) + (xy 125.384195 82.712373) + (xy 125.337277 82.765658) + (xy 125.269 82.785119) + (xy 125.20104 82.764577) + (xy 125.155805 82.712373) + (xy 125.106814 82.607311) + (xy 125.106811 82.607306) + (xy 125.104488 82.602324) + (xy 125.09114 82.583261) + (xy 124.980136 82.42473) + (xy 124.980134 82.424727) + (xy 124.976977 82.420219) + (xy 124.819781 82.263023) + (xy 124.815273 82.259866) + (xy 124.81527 82.259864) + (xy 124.739505 82.206813) + (xy 124.637677 82.135512) + (xy 124.632695 82.133189) + (xy 124.63269 82.133186) + (xy 124.441178 82.043883) + (xy 124.441177 82.043882) + (xy 124.436196 82.04156) + (xy 124.430888 82.040138) + (xy 124.430886 82.040137) + (xy 124.36437 82.022314) + (xy 124.221463 81.984022) + (xy 124 81.964647) + (xy 123.778537 81.984022) + (xy 123.63563 82.022314) + (xy 123.569114 82.040137) + (xy 123.569112 82.040138) + (xy 123.563804 82.04156) + (xy 123.558823 82.043882) + (xy 123.558822 82.043883) + (xy 123.367311 82.133186) + (xy 123.367306 82.133189) + (xy 123.362324 82.135512) + (xy 123.357817 82.138668) + (xy 123.357815 82.138669) + (xy 123.18473 82.259864) + (xy 123.184727 82.259866) + (xy 123.180219 82.263023) + (xy 123.023023 82.420219) + (xy 123.019866 82.424727) + (xy 123.019864 82.42473) + (xy 122.90886 82.583261) + (xy 122.895512 82.602324) + (xy 122.893189 82.607306) + (xy 122.893186 82.607311) + (xy 122.844195 82.712373) + (xy 122.797277 82.765658) + (xy 122.729 82.785119) + (xy 122.66104 82.764577) + (xy 122.615805 82.712373) + (xy 122.566814 82.607311) + (xy 122.566811 82.607306) + (xy 122.564488 82.602324) + (xy 122.55114 82.583261) + (xy 122.440136 82.42473) + (xy 122.440134 82.424727) + (xy 122.436977 82.420219) + (xy 122.279781 82.263023) + (xy 122.275273 82.259866) + (xy 122.27527 82.259864) + (xy 122.199505 82.206813) + (xy 122.097677 82.135512) + (xy 122.092695 82.133189) + (xy 122.09269 82.133186) + (xy 121.901178 82.043883) + (xy 121.901177 82.043882) + (xy 121.896196 82.04156) + (xy 121.890888 82.040138) + (xy 121.890886 82.040137) + (xy 121.82437 82.022314) + (xy 121.681463 81.984022) + (xy 121.46 81.964647) + (xy 121.238537 81.984022) + (xy 121.09563 82.022314) + (xy 121.029114 82.040137) + (xy 121.029112 82.040138) + (xy 121.023804 82.04156) + (xy 121.018823 82.043882) + (xy 121.018822 82.043883) + (xy 120.827311 82.133186) + (xy 120.827306 82.133189) + (xy 120.822324 82.135512) + (xy 120.817817 82.138668) + (xy 120.817815 82.138669) + (xy 120.64473 82.259864) + (xy 120.644727 82.259866) + (xy 120.640219 82.263023) + (xy 120.483023 82.420219) + (xy 120.479866 82.424727) + (xy 120.479864 82.42473) + (xy 120.36886 82.583261) + (xy 120.355512 82.602324) + (xy 120.353189 82.607306) + (xy 120.353186 82.607311) + (xy 120.304195 82.712373) + (xy 120.257277 82.765658) + (xy 120.189 82.785119) + (xy 120.12104 82.764577) + (xy 120.075805 82.712373) + (xy 120.026814 82.607311) + (xy 120.026811 82.607306) + (xy 120.024488 82.602324) + (xy 120.01114 82.583261) + (xy 119.900136 82.42473) + (xy 119.900134 82.424727) + (xy 119.896977 82.420219) + (xy 119.739781 82.263023) + (xy 119.735273 82.259866) + (xy 119.73527 82.259864) + (xy 119.659505 82.206813) + (xy 119.557677 82.135512) + (xy 119.552695 82.133189) + (xy 119.55269 82.133186) + (xy 119.361178 82.043883) + (xy 119.361177 82.043882) + (xy 119.356196 82.04156) + (xy 119.350888 82.040138) + (xy 119.350886 82.040137) + (xy 119.28437 82.022314) + (xy 119.141463 81.984022) + (xy 118.92 81.964647) + (xy 118.698537 81.984022) + (xy 118.55563 82.022314) + (xy 118.489114 82.040137) + (xy 118.489112 82.040138) + (xy 118.483804 82.04156) + (xy 118.478823 82.043882) + (xy 118.478822 82.043883) + (xy 118.287311 82.133186) + (xy 118.287306 82.133189) + (xy 118.282324 82.135512) + (xy 118.277817 82.138668) + (xy 118.277815 82.138669) + (xy 118.10473 82.259864) + (xy 118.104727 82.259866) + (xy 118.100219 82.263023) + (xy 117.943023 82.420219) + (xy 117.939866 82.424727) + (xy 117.939864 82.42473) + (xy 117.82886 82.583261) + (xy 117.815512 82.602324) + (xy 117.813189 82.607306) + (xy 117.813186 82.607311) + (xy 117.764195 82.712373) + (xy 117.717277 82.765658) + (xy 117.649 82.785119) + (xy 117.58104 82.764577) + (xy 117.535805 82.712373) + (xy 117.486814 82.607311) + (xy 117.486811 82.607306) + (xy 117.484488 82.602324) + (xy 117.47114 82.583261) + (xy 117.360136 82.42473) + (xy 117.360134 82.424727) + (xy 117.356977 82.420219) + (xy 117.199781 82.263023) + (xy 117.195273 82.259866) + (xy 117.19527 82.259864) + (xy 117.119505 82.206813) + (xy 117.017677 82.135512) + (xy 117.012695 82.133189) + (xy 117.01269 82.133186) + (xy 116.821178 82.043883) + (xy 116.821177 82.043882) + (xy 116.816196 82.04156) + (xy 116.810888 82.040138) + (xy 116.810886 82.040137) + (xy 116.74437 82.022314) + (xy 116.601463 81.984022) + (xy 116.38 81.964647) + (xy 116.158537 81.984022) + (xy 116.01563 82.022314) + (xy 115.949114 82.040137) + (xy 115.949112 82.040138) + (xy 115.943804 82.04156) + (xy 115.938823 82.043882) + (xy 115.938822 82.043883) + (xy 115.747311 82.133186) + (xy 115.747306 82.133189) + (xy 115.742324 82.135512) + (xy 115.737817 82.138668) + (xy 115.737815 82.138669) + (xy 115.56473 82.259864) + (xy 115.564727 82.259866) + (xy 115.560219 82.263023) + (xy 115.403023 82.420219) + (xy 115.399866 82.424727) + (xy 115.399864 82.42473) + (xy 115.28886 82.583261) + (xy 115.275512 82.602324) + (xy 115.273189 82.607306) + (xy 115.273186 82.607311) + (xy 115.224195 82.712373) + (xy 115.177277 82.765658) + (xy 115.109 82.785119) + (xy 115.04104 82.764577) + (xy 114.995805 82.712373) + (xy 114.946814 82.607311) + (xy 114.946811 82.607306) + (xy 114.944488 82.602324) + (xy 114.93114 82.583261) + (xy 114.820136 82.42473) + (xy 114.820134 82.424727) + (xy 114.816977 82.420219) + (xy 114.659781 82.263023) + (xy 114.655273 82.259866) + (xy 114.65527 82.259864) + (xy 114.579505 82.206813) + (xy 114.477677 82.135512) + (xy 114.472695 82.133189) + (xy 114.47269 82.133186) + (xy 114.281178 82.043883) + (xy 114.281177 82.043882) + (xy 114.276196 82.04156) + (xy 114.270888 82.040138) + (xy 114.270886 82.040137) + (xy 114.20437 82.022314) + (xy 114.061463 81.984022) + (xy 113.84 81.964647) + (xy 113.618537 81.984022) + (xy 113.47563 82.022314) + (xy 113.409114 82.040137) + (xy 113.409112 82.040138) + (xy 113.403804 82.04156) + (xy 113.398823 82.043882) + (xy 113.398822 82.043883) + (xy 113.207311 82.133186) + (xy 113.207306 82.133189) + (xy 113.202324 82.135512) + (xy 113.197817 82.138668) + (xy 113.197815 82.138669) + (xy 113.02473 82.259864) + (xy 113.024727 82.259866) + (xy 113.020219 82.263023) + (xy 112.863023 82.420219) + (xy 112.859866 82.424727) + (xy 112.859864 82.42473) + (xy 112.74886 82.583261) + (xy 112.735512 82.602324) + (xy 112.733189 82.607306) + (xy 112.733186 82.607311) + (xy 112.684195 82.712373) + (xy 112.637277 82.765658) + (xy 112.569 82.785119) + (xy 112.50104 82.764577) + (xy 112.455805 82.712373) + (xy 112.406814 82.607311) + (xy 112.406811 82.607306) + (xy 112.404488 82.602324) + (xy 112.39114 82.583261) + (xy 112.280136 82.42473) + (xy 112.280134 82.424727) + (xy 112.276977 82.420219) + (xy 112.119781 82.263023) + (xy 112.115273 82.259866) + (xy 112.11527 82.259864) + (xy 112.039505 82.206813) + (xy 111.937677 82.135512) + (xy 111.932695 82.133189) + (xy 111.93269 82.133186) + (xy 111.741178 82.043883) + (xy 111.741177 82.043882) + (xy 111.736196 82.04156) + (xy 111.730888 82.040138) + (xy 111.730886 82.040137) + (xy 111.66437 82.022314) + (xy 111.521463 81.984022) + (xy 111.3 81.964647) + (xy 111.078537 81.984022) + (xy 110.93563 82.022314) + (xy 110.869114 82.040137) + (xy 110.869112 82.040138) + (xy 110.863804 82.04156) + (xy 110.858823 82.043882) + (xy 110.858822 82.043883) + (xy 110.667311 82.133186) + (xy 110.667306 82.133189) + (xy 110.662324 82.135512) + (xy 110.657817 82.138668) + (xy 110.657815 82.138669) + (xy 110.48473 82.259864) + (xy 110.484727 82.259866) + (xy 110.480219 82.263023) + (xy 110.323023 82.420219) + (xy 110.319866 82.424727) + (xy 110.319864 82.42473) + (xy 110.20886 82.583261) + (xy 110.195512 82.602324) + (xy 110.193189 82.607306) + (xy 110.193186 82.607311) + (xy 110.144195 82.712373) + (xy 110.097277 82.765658) + (xy 110.029 82.785119) + (xy 109.96104 82.764577) + (xy 109.915805 82.712373) + (xy 109.866814 82.607311) + (xy 109.866811 82.607306) + (xy 109.864488 82.602324) + (xy 109.85114 82.583261) + (xy 109.740136 82.42473) + (xy 109.740134 82.424727) + (xy 109.736977 82.420219) + (xy 109.579781 82.263023) + (xy 109.575273 82.259866) + (xy 109.57527 82.259864) + (xy 109.499505 82.206813) + (xy 109.397677 82.135512) + (xy 109.392695 82.133189) + (xy 109.39269 82.133186) + (xy 109.201178 82.043883) + (xy 109.201177 82.043882) + (xy 109.196196 82.04156) + (xy 109.190888 82.040138) + (xy 109.190886 82.040137) + (xy 109.12437 82.022314) + (xy 108.981463 81.984022) + (xy 108.76 81.964647) + (xy 108.538537 81.984022) + (xy 108.39563 82.022314) + (xy 108.329114 82.040137) + (xy 108.329112 82.040138) + (xy 108.323804 82.04156) + (xy 108.318823 82.043882) + (xy 108.318822 82.043883) + (xy 108.127311 82.133186) + (xy 108.127306 82.133189) + (xy 108.122324 82.135512) + (xy 108.117817 82.138668) + (xy 108.117815 82.138669) + (xy 107.94473 82.259864) + (xy 107.944727 82.259866) + (xy 107.940219 82.263023) + (xy 107.783023 82.420219) + (xy 107.779866 82.424727) + (xy 107.779864 82.42473) + (xy 107.66886 82.583261) + (xy 107.655512 82.602324) + (xy 107.653189 82.607306) + (xy 107.653186 82.607311) + (xy 107.604195 82.712373) + (xy 107.557277 82.765658) + (xy 107.489 82.785119) + (xy 107.42104 82.764577) + (xy 107.375805 82.712373) + (xy 107.326814 82.607311) + (xy 107.326811 82.607306) + (xy 107.324488 82.602324) + (xy 107.31114 82.583261) + (xy 107.200136 82.42473) + (xy 107.200134 82.424727) + (xy 107.196977 82.420219) + (xy 107.039781 82.263023) + (xy 107.035273 82.259866) + (xy 107.03527 82.259864) + (xy 106.959505 82.206813) + (xy 106.857677 82.135512) + (xy 106.852695 82.133189) + (xy 106.85269 82.133186) + (xy 106.661178 82.043883) + (xy 106.661177 82.043882) + (xy 106.656196 82.04156) + (xy 106.650888 82.040138) + (xy 106.650886 82.040137) + (xy 106.58437 82.022314) + (xy 106.441463 81.984022) + (xy 106.22 81.964647) + (xy 105.998537 81.984022) + (xy 105.85563 82.022314) + (xy 105.789114 82.040137) + (xy 105.789112 82.040138) + (xy 105.783804 82.04156) + (xy 105.778823 82.043882) + (xy 105.778822 82.043883) + (xy 105.587311 82.133186) + (xy 105.587306 82.133189) + (xy 105.582324 82.135512) + (xy 105.577817 82.138668) + (xy 105.577815 82.138669) + (xy 105.40473 82.259864) + (xy 105.404727 82.259866) + (xy 105.400219 82.263023) + (xy 105.243023 82.420219) + (xy 105.239866 82.424727) + (xy 105.239864 82.42473) + (xy 105.12886 82.583261) + (xy 105.115512 82.602324) + (xy 105.113189 82.607306) + (xy 105.113186 82.607311) + (xy 105.083667 82.670615) + (xy 105.02156 82.803804) + (xy 104.964022 83.018537) + (xy 104.944647 83.24) + (xy 104.964022 83.461463) + (xy 105.02156 83.676196) + (xy 105.023882 83.681177) + (xy 105.023883 83.681178) + (xy 105.113186 83.872689) + (xy 105.113189 83.872694) + (xy 105.115512 83.877676) + (xy 105.243023 84.059781) + (xy 105.400219 84.216977) + (xy 105.404728 84.220134) + (xy 105.40473 84.220136) + (xy 105.407771 84.222265) + (xy 105.408797 84.223548) + (xy 105.408943 84.223671) + (xy 105.408918 84.2237) + (xy 105.452099 84.277722) + (xy 105.4615 84.325478) + (xy 105.4615 86.663629) + (xy 105.441498 86.73175) + (xy 105.424595 86.752724) + (xy 104.222724 87.954595) + (xy 104.160412 87.988621) + (xy 104.133629 87.9915) + (xy 103.701866 87.9915) + (xy 103.639684 87.998255) + (xy 103.503295 88.049385) + (xy 103.386739 88.136739) + (xy 103.299385 88.253295) + (xy 103.248255 88.389684) + (xy 103.2415 88.451866) + (xy 103.2415 89.548134) + (xy 102.7585 89.548134) + (xy 102.7585 88.451866) + (xy 102.751745 88.389684) + (xy 102.700615 88.253295) + (xy 102.613261 88.136739) + (xy 102.496705 88.049385) + (xy 102.360316 87.998255) + (xy 102.298134 87.9915) + (xy 101.201866 87.9915) + (xy 101.139684 87.998255) + (xy 101.003295 88.049385) + (xy 100.886739 88.136739) + (xy 100.881358 88.143919) + (xy 100.846024 88.191065) + (xy 100.789165 88.23358) + (xy 100.745198 88.2415) + (xy 85.754711 88.2415) + (xy 85.69638 88.225048) + (xy 85.695593 88.226593) + (xy 85.691184 88.224346) + (xy 85.686963 88.22176) + (xy 85.530333 88.156882) + (xy 85.472167 88.132789) + (xy 85.472165 88.132788) + (xy 85.467594 88.130895) + (xy 85.363974 88.106018) + (xy 85.241524 88.07662) + (xy 85.241518 88.076619) + (xy 85.236711 88.075465) + (xy 85 88.056835) + (xy 84.763289 88.075465) + (xy 84.758482 88.076619) + (xy 84.758476 88.07662) + (xy 84.636026 88.106018) + (xy 84.532406 88.130895) + (xy 84.527835 88.132788) + (xy 84.527833 88.132789) + (xy 84.317611 88.219865) + (xy 84.317607 88.219867) + (xy 84.313037 88.22176) + (xy 84.308817 88.224346) + (xy 84.114798 88.343241) + (xy 84.114792 88.343245) + (xy 84.110584 88.345824) + (xy 83.930031 88.500031) + (xy 83.775824 88.680584) + (xy 83.773245 88.684792) + (xy 83.773241 88.684798) + (xy 83.701109 88.802507) + (xy 83.65176 88.883037) + (xy 83.649867 88.887607) + (xy 83.649865 88.887611) + (xy 83.57098 89.078058) + (xy 83.560895 89.102406) + (xy 83.505465 89.333289) + (xy 83.486835 89.57) + (xy 62.908989 89.57) + (xy 62.908989 81.08) + (xy 80.316502 81.08) + (xy 80.336457 81.308087) + (xy 80.395716 81.529243) + (xy 80.398039 81.534224) + (xy 80.398039 81.534225) + (xy 80.490151 81.731762) + (xy 80.490154 81.731767) + (xy 80.492477 81.736749) + (xy 80.623802 81.9243) + (xy 80.7857 82.086198) + (xy 80.790208 82.089355) + (xy 80.790211 82.089357) + (xy 80.852806 82.133186) + (xy 80.973251 82.217523) + (xy 80.978233 82.219846) + (xy 80.978238 82.219849) + (xy 81.081787 82.268134) + (xy 81.180757 82.314284) + (xy 81.186065 82.315706) + (xy 81.186067 82.315707) + (xy 81.396598 82.372119) + (xy 81.3966 82.372119) + (xy 81.401913 82.373543) + (xy 81.63 82.393498) + (xy 81.858087 82.373543) + (xy 81.8634 82.372119) + (xy 81.863402 82.372119) + (xy 82.073933 82.315707) + (xy 82.073935 82.315706) + (xy 82.079243 82.314284) + (xy 82.178213 82.268134) + (xy 89.8915 82.268134) + (xy 89.898255 82.330316) + (xy 89.949385 82.466705) + (xy 90.036739 82.583261) + (xy 90.153295 82.670615) + (xy 90.289684 82.721745) + (xy 90.351866 82.7285) + (xy 93.648134 82.7285) + (xy 93.710316 82.721745) + (xy 93.846705 82.670615) + (xy 93.963261 82.583261) + (xy 94.050615 82.466705) + (xy 94.101745 82.330316) + (xy 94.1085 82.268134) + (xy 94.1085 78.971866) + (xy 94.101745 78.909684) + (xy 94.050615 78.773295) + (xy 93.963261 78.656739) + (xy 93.846705 78.569385) + (xy 93.710316 78.518255) + (xy 93.648134 78.5115) + (xy 90.351866 78.5115) + (xy 90.289684 78.518255) + (xy 90.153295 78.569385) + (xy 90.036739 78.656739) + (xy 89.949385 78.773295) + (xy 89.898255 78.909684) + (xy 89.8915 78.971866) + (xy 89.8915 82.268134) + (xy 82.178213 82.268134) + (xy 82.281762 82.219849) + (xy 82.281767 82.219846) + (xy 82.286749 82.217523) + (xy 82.407194 82.133186) + (xy 82.469789 82.089357) + (xy 82.469792 82.089355) + (xy 82.4743 82.086198) + (xy 82.636198 81.9243) + (xy 82.767523 81.736749) + (xy 82.769846 81.731767) + (xy 82.769849 81.731762) + (xy 82.861961 81.534225) + (xy 82.861961 81.534224) + (xy 82.864284 81.529243) + (xy 82.923543 81.308087) + (xy 82.943498 81.08) + (xy 82.923543 80.851913) + (xy 82.864284 80.630757) + (xy 82.809569 80.513419) + (xy 82.769849 80.428238) + (xy 82.769846 80.428233) + (xy 82.767523 80.423251) + (xy 82.694098 80.318389) + (xy 82.639357 80.240211) + (xy 82.639355 80.240208) + (xy 82.636198 80.2357) + (xy 82.4743 80.073802) + (xy 82.469792 80.070645) + (xy 82.469789 80.070643) + (xy 82.391611 80.015902) + (xy 82.286749 79.942477) + (xy 82.281767 79.940154) + (xy 82.281762 79.940151) + (xy 82.084225 79.848039) + (xy 82.084224 79.848039) + (xy 82.079243 79.845716) + (xy 82.073935 79.844294) + (xy 82.073933 79.844293) + (xy 81.863402 79.787881) + (xy 81.8634 79.787881) + (xy 81.858087 79.786457) + (xy 81.63 79.766502) + (xy 81.401913 79.786457) + (xy 81.3966 79.787881) + (xy 81.396598 79.787881) + (xy 81.186067 79.844293) + (xy 81.186065 79.844294) + (xy 81.180757 79.845716) + (xy 81.175776 79.848039) + (xy 81.175775 79.848039) + (xy 80.978238 79.940151) + (xy 80.978233 79.940154) + (xy 80.973251 79.942477) + (xy 80.868389 80.015902) + (xy 80.790211 80.070643) + (xy 80.790208 80.070645) + (xy 80.7857 80.073802) + (xy 80.623802 80.2357) + (xy 80.620645 80.240208) + (xy 80.620643 80.240211) + (xy 80.565902 80.318389) + (xy 80.492477 80.423251) + (xy 80.490154 80.428233) + (xy 80.490151 80.428238) + (xy 80.450431 80.513419) + (xy 80.395716 80.630757) + (xy 80.336457 80.851913) + (xy 80.316502 81.08) + (xy 62.908989 81.08) + (xy 62.908989 72.942204) + (xy 69.023151 72.942204) + (xy 69.02772 72.948735) + (xy 69.240736 73.079271) + (xy 69.24953 73.083752) + (xy 69.481492 73.179834) + (xy 69.490877 73.182883) + (xy 69.735017 73.241496) + (xy 69.744764 73.243039) + (xy 69.99507 73.262739) + (xy 70.00493 73.262739) + (xy 70.255236 73.243039) + (xy 70.264983 73.241496) + (xy 70.509123 73.182883) + (xy 70.518508 73.179834) + (xy 70.75047 73.083752) + (xy 70.759264 73.079271) + (xy 70.970875 72.949596) + (xy 70.976922 72.94033) + (xy 70.970915 72.930125) + (xy 70.012812 71.972022) + (xy 69.998868 71.964408) + (xy 69.997035 71.964539) + (xy 69.99042 71.96879) + (xy 69.030544 72.928666) + (xy 69.023151 72.942204) + (xy 62.908989 72.942204) + (xy 62.908989 72.028014) + (xy 62.928991 71.959893) + (xy 62.945894 71.938919) + (xy 63.279883 71.60493) + (xy 68.337261 71.60493) + (xy 68.356961 71.855236) + (xy 68.358504 71.864983) + (xy 68.417117 72.109123) + (xy 68.420166 72.118508) + (xy 68.516248 72.35047) + (xy 68.520729 72.359264) + (xy 68.650404 72.570875) + (xy 68.65967 72.576922) + (xy 68.669875 72.570915) + (xy 69.627978 71.612812) + (xy 69.634356 71.601132) + (xy 70.364408 71.601132) + (xy 70.364539 71.602965) + (xy 70.36879 71.60958) + (xy 71.328666 72.569456) + (xy 71.342204 72.576849) + (xy 71.348735 72.57228) + (xy 71.479271 72.359264) + (xy 71.483752 72.35047) + (xy 71.579834 72.118508) + (xy 71.582883 72.109123) + (xy 71.641496 71.864983) + (xy 71.643039 71.855236) + (xy 71.662739 71.60493) + (xy 71.662739 71.59507) + (xy 71.643039 71.344764) + (xy 71.641496 71.335017) + (xy 71.582883 71.090877) + (xy 71.579834 71.081492) + (xy 71.483752 70.84953) + (xy 71.479271 70.840736) + (xy 71.349596 70.629125) + (xy 71.34033 70.623078) + (xy 71.330125 70.629085) + (xy 70.372022 71.587188) + (xy 70.364408 71.601132) + (xy 69.634356 71.601132) + (xy 69.635592 71.598868) + (xy 69.635461 71.597035) + (xy 69.63121 71.59042) + (xy 68.671334 70.630544) + (xy 68.657796 70.623151) + (xy 68.651265 70.62772) + (xy 68.520729 70.840736) + (xy 68.516248 70.84953) + (xy 68.420166 71.081492) + (xy 68.417117 71.090877) + (xy 68.358504 71.335017) + (xy 68.356961 71.344764) + (xy 68.337261 71.59507) + (xy 68.337261 71.60493) + (xy 63.279883 71.60493) + (xy 63.61076 71.274053) + (xy 63.673072 71.240027) + (xy 63.729275 71.240631) + (xy 63.734934 71.24199) + (xy 63.73494 71.241991) + (xy 63.739751 71.243146) + (xy 64 71.263628) + (xy 64.260249 71.243146) + (xy 64.265056 71.241992) + (xy 64.265062 71.241991) + (xy 64.425069 71.203576) + (xy 64.514089 71.182204) + (xy 64.518662 71.18031) + (xy 64.750697 71.084198) + (xy 64.750701 71.084196) + (xy 64.755271 71.082303) + (xy 64.977856 70.945903) + (xy 65.176363 70.776363) + (xy 65.345903 70.577856) + (xy 65.482303 70.355271) + (xy 65.499307 70.314221) + (xy 65.521903 70.25967) + (xy 69.023078 70.25967) + (xy 69.029085 70.269875) + (xy 69.987188 71.227978) + (xy 70.001132 71.235592) + (xy 70.002965 71.235461) + (xy 70.00958 71.23121) + (xy 70.969456 70.271334) + (xy 70.976849 70.257796) + (xy 70.97228 70.251265) + (xy 70.759264 70.120729) + (xy 70.75047 70.116248) + (xy 70.518508 70.020166) + (xy 70.509123 70.017117) + (xy 70.264983 69.958504) + (xy 70.255236 69.956961) + (xy 70.00493 69.937261) + (xy 69.99507 69.937261) + (xy 69.744764 69.956961) + (xy 69.735017 69.958504) + (xy 69.490877 70.017117) + (xy 69.481492 70.020166) + (xy 69.24953 70.116248) + (xy 69.240736 70.120729) + (xy 69.029125 70.250404) + (xy 69.023078 70.25967) + (xy 65.521903 70.25967) + (xy 65.58031 70.118662) + (xy 65.580311 70.11866) + (xy 65.582204 70.114089) + (xy 65.619557 69.958504) + (xy 65.641991 69.865062) + (xy 65.641992 69.865056) + (xy 65.643146 69.860249) + (xy 65.663628 69.6) + (xy 65.643146 69.339751) + (xy 65.641992 69.334944) + (xy 65.641991 69.334938) + (xy 65.58535 69.099016) + (xy 65.582204 69.085911) + (xy 65.551708 69.012287) + (xy 65.484198 68.849303) + (xy 65.484196 68.849299) + (xy 65.482303 68.844729) + (xy 65.345903 68.622144) + (xy 65.176363 68.423637) + (xy 64.977856 68.254097) + (xy 64.755271 68.117697) + (xy 64.750701 68.115804) + (xy 64.750697 68.115802) + (xy 64.518662 68.01969) + (xy 64.51866 68.019689) + (xy 64.514089 68.017796) + (xy 64.400061 67.99042) + (xy 64.265062 67.958009) + (xy 64.265056 67.958008) + (xy 64.260249 67.956854) + (xy 64 67.936372) + (xy 63.739751 67.956854) + (xy 63.734944 67.958008) + (xy 63.734938 67.958009) + (xy 63.599939 67.99042) + (xy 63.485911 68.017796) + (xy 63.48134 68.019689) + (xy 63.481338 68.01969) + (xy 63.249303 68.115802) + (xy 63.249299 68.115804) + (xy 63.244729 68.117697) + (xy 63.022144 68.254097) + (xy 62.823637 68.423637) + (xy 62.654097 68.622144) + (xy 62.517697 68.844729) + (xy 62.515804 68.849299) + (xy 62.515802 68.849303) + (xy 62.448292 69.012287) + (xy 62.417796 69.085911) + (xy 62.41465 69.099016) + (xy 62.358009 69.334938) + (xy 62.358008 69.334944) + (xy 62.356854 69.339751) + (xy 62.336372 69.6) + (xy 62.356854 69.860249) + (xy 62.358009 69.86506) + (xy 62.35801 69.865066) + (xy 62.359369 69.870725) + (xy 62.355826 69.941634) + (xy 62.325947 69.98924) + (xy 61.415657 70.89953) + (xy 61.400624 70.912371) + (xy 61.389236 70.920645) + (xy 61.384816 70.925554) + (xy 61.343473 70.97147) + (xy 61.338932 70.976255) + (xy 61.324417 70.99077) + (xy 61.322341 70.993334) + (xy 61.311495 71.006727) + (xy 61.307211 71.011742) + (xy 61.26587 71.057656) + (xy 61.265866 71.057661) + (xy 61.261449 71.062567) + (xy 61.258149 71.068283) + (xy 61.258146 71.068287) + (xy 61.254416 71.074748) + (xy 61.243216 71.091044) + (xy 61.23436 71.101981) + (xy 61.21366 71.142607) + (xy 61.203304 71.162932) + (xy 61.200158 71.168726) + (xy 61.165962 71.227955) + (xy 61.163921 71.234237) + (xy 61.16392 71.234239) + (xy 61.161614 71.241337) + (xy 61.154049 71.259603) + (xy 61.14766 71.272141) + (xy 61.130834 71.334938) + (xy 61.129958 71.338206) + (xy 61.128089 71.344514) + (xy 61.106947 71.409583) + (xy 61.106257 71.416148) + (xy 61.106255 71.416157) + (xy 61.105474 71.423586) + (xy 61.101872 71.44302) + (xy 61.099942 71.450225) + (xy 61.098232 71.456608) + (xy 61.097887 71.463199) + (xy 61.097886 71.463203) + (xy 61.094653 71.524895) + (xy 61.094136 71.531469) + (xy 61.092333 71.548627) + (xy 61.091989 71.551901) + (xy 61.091989 71.572437) + (xy 61.091816 71.579031) + (xy 61.090046 71.612812) + (xy 61.088237 71.647321) + (xy 61.089269 71.653836) + (xy 61.090438 71.661216) + (xy 61.091989 71.680928) + (xy 61.091989 81.620675) + (xy 61.071987 81.688796) + (xy 61.018331 81.735289) + (xy 60.948057 81.745393) + (xy 60.883477 81.715899) + (xy 60.868069 81.699969) + (xy 60.644242 81.423566) + (xy 60.642157 81.420991) + (xy 60.379009 81.157843) + (xy 60.089796 80.923643) + (xy 59.777687 80.720957) + (xy 59.549414 80.604646) + (xy 59.449035 80.5535) + (xy 59.449028 80.553497) + (xy 59.4461 80.552005) + (xy 59.443028 80.550826) + (xy 59.443024 80.550824) + (xy 59.31673 80.502344) + (xy 59.098671 80.418639) + (xy 58.739204 80.32232) + (xy 58.735954 80.321805) + (xy 58.735948 80.321804) + (xy 58.462769 80.278537) + (xy 58.371638 80.264104) + (xy 58.368353 80.263932) + (xy 58.368345 80.263931) + (xy 58.003301 80.2448) + (xy 58 80.244627) + (xy 57.996699 80.2448) + (xy 57.631655 80.263931) + (xy 57.631647 80.263932) + (xy 57.628362 80.264104) + (xy 57.537231 80.278537) + (xy 57.264052 80.321804) + (xy 57.264046 80.321805) + (xy 57.260796 80.32232) + (xy 56.901329 80.418639) + (xy 56.68327 80.502344) + (xy 56.556976 80.550824) + (xy 56.556972 80.550826) + (xy 56.5539 80.552005) + (xy 56.550972 80.553497) + (xy 56.550965 80.5535) + (xy 56.225255 80.719458) + (xy 56.225252 80.71946) + (xy 56.222314 80.720957) + (xy 56.219548 80.722753) + (xy 56.219545 80.722755) + (xy 56.049271 80.833332) + (xy 55.910204 80.923643) + (xy 55.620991 81.157843) + (xy 55.357843 81.420991) + (xy 55.123643 81.710204) + (xy 54.920957 82.022314) + (xy 54.919462 82.025248) + (xy 54.919458 82.025255) + (xy 54.7535 82.350965) + (xy 54.752005 82.3539) + (xy 54.750826 82.356972) + (xy 54.750824 82.356976) + (xy 54.736805 82.393498) + (xy 54.618639 82.701329) + (xy 54.52232 83.060796) + (xy 54.464104 83.428362) + (xy 54.463932 83.431647) + (xy 54.463931 83.431655) + (xy 54.446324 83.767627) + (xy 54.444627 83.8) + (xy 54.4448 83.803301) + (xy 54.458242 84.059781) + (xy 54.464104 84.171638) + (xy 54.464619 84.174889) + (xy 54.518467 84.514874) + (xy 54.52232 84.539204) + (xy 54.618639 84.898671) + (xy 54.674549 85.04432) + (xy 54.730443 85.189928) + (xy 54.752005 85.2461) + (xy 54.753497 85.249028) + (xy 54.7535 85.249035) + (xy 54.908011 85.552278) + (xy 54.920957 85.577686) + (xy 54.922753 85.580452) + (xy 54.922755 85.580455) + (xy 54.992037 85.68714) + (xy 55.123643 85.889796) + (xy 55.125717 85.892357) + (xy 55.125727 85.892371) + (xy 55.17142 85.948797) + (xy 55.198746 86.014324) + (xy 55.1995 86.028091) + (xy 55.1995 88.487805) + (xy 55.179498 88.555926) + (xy 55.162595 88.5769) + (xy 43.677113 100.062382) + (xy 43.614801 100.096408) + (xy 43.587799 100.099287) + (xy 43.509217 100.09915) + (xy 43.39362 100.110688) + (xy 43.119161 100.138082) + (xy 43.119155 100.138083) + (xy 43.115988 100.138399) + (xy 42.980404 100.165984) + (xy 42.731863 100.21655) + (xy 42.731859 100.216551) + (xy 42.728738 100.217186) + (xy 42.725696 100.218133) + (xy 42.72569 100.218135) + (xy 42.647531 100.242479) + (xy 42.351433 100.334703) + (xy 42.348493 100.335957) + (xy 41.990873 100.488495) + (xy 41.990869 100.488497) + (xy 41.987936 100.489748) + (xy 41.985149 100.491287) + (xy 41.985148 100.491287) + (xy 41.926561 100.523629) + (xy 41.641967 100.680733) + (xy 41.639346 100.682548) + (xy 41.639341 100.682551) + (xy 41.631563 100.687937) + (xy 41.31707 100.905702) + (xy 41.016571 101.162353) + (xy 40.743546 101.448057) + (xy 40.741589 101.45057) + (xy 40.741588 101.450572) + (xy 40.526632 101.726696) + (xy 40.500791 101.75989) + (xy 40.290791 102.094658) + (xy 40.115697 102.448934) + (xy 39.977301 102.81909) + (xy 39.877021 103.201338) + (xy 39.858768 103.317899) + (xy 39.823126 103.545506) + (xy 39.815882 103.591763) + (xy 39.815711 103.594925) + (xy 39.81571 103.594932) + (xy 39.797083 103.93888) + (xy 39.794511 103.986367) + (xy 35.008 103.986367) + (xy 35.008 92.433411) + (xy 39.687977 92.433411) + (xy 39.696945 92.672274) + (xy 39.74603 92.906211) + (xy 39.833829 93.128533) + (xy 39.957832 93.332883) + (xy 39.961329 93.336913) + (xy 40.05109 93.440353) + (xy 40.114493 93.513419) + (xy 40.118619 93.516802) + (xy 40.118623 93.516806) + (xy 40.217629 93.597985) + (xy 40.299333 93.664978) + (xy 40.303969 93.667617) + (xy 40.303972 93.667619) + (xy 40.417386 93.732178) + (xy 40.507066 93.783227) + (xy 40.731753 93.864784) + (xy 40.737002 93.865733) + (xy 40.737005 93.865734) + (xy 40.962885 93.90658) + (xy 40.962893 93.906581) + (xy 40.966969 93.907318) + (xy 40.985359 93.908185) + (xy 40.990544 93.90843) + (xy 40.990551 93.90843) + (xy 40.992032 93.9085) + (xy 42.960012 93.9085) + (xy 43.138175 93.893383) + (xy 43.143339 93.892043) + (xy 43.143343 93.892042) + (xy 43.364375 93.834673) + (xy 43.36438 93.834671) + (xy 43.36954 93.833332) + (xy 43.486636 93.780584) + (xy 43.582619 93.737347) + (xy 43.582622 93.737346) + (xy 43.58748 93.735157) + (xy 43.785762 93.601666) + (xy 43.958718 93.436674) + (xy 44.101402 93.2449) + (xy 44.209733 93.031828) + (xy 44.250361 92.900984) + (xy 44.279032 92.808651) + (xy 44.279033 92.808645) + (xy 44.280616 92.803548) + (xy 44.312023 92.566589) + (xy 44.303055 92.327726) + (xy 44.25397 92.093789) + (xy 44.166171 91.871467) + (xy 44.042168 91.667117) + (xy 43.966129 91.57949) + (xy 43.889007 91.490614) + (xy 43.889005 91.490612) + (xy 43.885507 91.486581) + (xy 43.881381 91.483198) + (xy 43.881377 91.483194) + (xy 43.704795 91.338407) + (xy 43.700667 91.335022) + (xy 43.696031 91.332383) + (xy 43.696028 91.332381) + (xy 43.497577 91.219416) + (xy 43.492934 91.216773) + (xy 43.268247 91.135216) + (xy 43.262998 91.134267) + (xy 43.262995 91.134266) + (xy 43.037115 91.09342) + (xy 43.037107 91.093419) + (xy 43.033031 91.092682) + (xy 43.014641 91.091815) + (xy 43.009456 91.09157) + (xy 43.009449 91.09157) + (xy 43.007968 91.0915) + (xy 41.039988 91.0915) + (xy 40.861825 91.106617) + (xy 40.856661 91.107957) + (xy 40.856657 91.107958) + (xy 40.635625 91.165327) + (xy 40.63562 91.165329) + (xy 40.63046 91.166668) + (xy 40.625594 91.16886) + (xy 40.417381 91.262653) + (xy 40.417378 91.262654) + (xy 40.41252 91.264843) + (xy 40.214238 91.398334) + (xy 40.210381 91.402013) + (xy 40.210379 91.402015) + (xy 40.157577 91.452386) + (xy 40.041282 91.563326) + (xy 39.898598 91.7551) + (xy 39.790267 91.968172) + (xy 39.754826 92.082312) + (xy 39.720968 92.191349) + (xy 39.720967 92.191355) + (xy 39.719384 92.196452) + (xy 39.687977 92.433411) + (xy 35.008 92.433411) + (xy 35.008 84.95219) + (xy 37.087748 84.95219) + (xy 37.088093 84.958777) + (xy 37.088093 84.958782) + (xy 37.091327 85.02048) + (xy 37.0915 85.027074) + (xy 37.0915 85.04761) + (xy 37.091844 85.050882) + (xy 37.091844 85.050884) + (xy 37.093647 85.068042) + (xy 37.094164 85.074616) + (xy 37.097743 85.142903) + (xy 37.099453 85.149284) + (xy 37.099453 85.149286) + (xy 37.101383 85.156491) + (xy 37.104985 85.175925) + (xy 37.105766 85.183354) + (xy 37.105768 85.183363) + (xy 37.106458 85.189928) + (xy 37.1276 85.254997) + (xy 37.129467 85.261299) + (xy 37.147171 85.32737) + (xy 37.153559 85.339907) + (xy 37.161125 85.358173) + (xy 37.165473 85.371556) + (xy 37.168776 85.377278) + (xy 37.168777 85.377279) + (xy 37.199667 85.430782) + (xy 37.202814 85.436577) + (xy 37.233871 85.49753) + (xy 37.238024 85.502658) + (xy 37.238025 85.50266) + (xy 37.242727 85.508466) + (xy 37.253927 85.524763) + (xy 37.257657 85.531224) + (xy 37.25766 85.531228) + (xy 37.26096 85.536944) + (xy 37.265377 85.54185) + (xy 37.265381 85.541855) + (xy 37.306722 85.587769) + (xy 37.311006 85.592784) + (xy 37.323928 85.608741) + (xy 37.338443 85.623256) + (xy 37.342984 85.628041) + (xy 37.388747 85.678866) + (xy 37.394086 85.682745) + (xy 37.394087 85.682746) + (xy 37.400135 85.68714) + (xy 37.415168 85.699981) + (xy 39.699067 87.98388) + (xy 39.733093 88.046192) + (xy 39.729566 88.112641) + (xy 39.702203 88.195139) + (xy 39.701503 88.201975) + (xy 39.701502 88.201978) + (xy 39.697679 88.239297) + (xy 39.6915 88.2996) + (xy 39.6915 89.7004) + (xy 39.691837 89.703646) + (xy 39.691837 89.70365) + (xy 39.70155 89.797259) + (xy 39.702474 89.806166) + (xy 39.75845 89.973946) + (xy 39.851522 90.124348) + (xy 39.976697 90.249305) + (xy 39.982927 90.253145) + (xy 39.982928 90.253146) + (xy 40.12009 90.337694) + (xy 40.127262 90.342115) + (xy 40.14518 90.348058) + (xy 40.288611 90.395632) + (xy 40.288613 90.395632) + (xy 40.295139 90.397797) + (xy 40.301975 90.398497) + (xy 40.301978 90.398498) + (xy 40.345031 90.402909) + (xy 40.3996 90.4085) + (xy 43.6004 90.4085) + (xy 43.603646 90.408163) + (xy 43.60365 90.408163) + (xy 43.699308 90.398238) + (xy 43.699312 90.398237) + (xy 43.706166 90.397526) + (xy 43.712702 90.395345) + (xy 43.712704 90.395345) + (xy 43.854439 90.348058) + (xy 43.873946 90.34155) + (xy 44.024348 90.248478) + (xy 44.149305 90.123303) + (xy 44.153146 90.117072) + (xy 44.238275 89.978968) + (xy 44.238276 89.978966) + (xy 44.242115 89.972738) + (xy 44.297797 89.804861) + (xy 44.29896 89.793517) + (xy 44.304617 89.738297) + (xy 44.3085 89.7004) + (xy 44.3085 88.2996) + (xy 44.300424 88.22176) + (xy 44.298238 88.200692) + (xy 44.298237 88.200688) + (xy 44.297526 88.193834) + (xy 44.276143 88.12974) + (xy 44.243868 88.033002) + (xy 44.24155 88.026054) + (xy 44.148478 87.875652) + (xy 44.023303 87.750695) + (xy 43.872738 87.657885) + (xy 43.739735 87.61377) + (xy 43.711389 87.604368) + (xy 43.711387 87.604368) + (xy 43.704861 87.602203) + (xy 43.698025 87.601503) + (xy 43.698022 87.601502) + (xy 43.654969 87.597091) + (xy 43.6004 87.5915) + (xy 41.928503 87.5915) + (xy 41.860382 87.571498) + (xy 41.839408 87.554595) + (xy 38.945405 84.660592) + (xy 38.911379 84.59828) + (xy 38.9085 84.571497) + (xy 38.9085 79.433411) + (xy 39.687977 79.433411) + (xy 39.696945 79.672274) + (xy 39.69804 79.677492) + (xy 39.720803 79.785978) + (xy 39.74603 79.906211) + (xy 39.833829 80.128533) + (xy 39.957832 80.332883) + (xy 39.961329 80.336913) + (xy 40.05109 80.440353) + (xy 40.114493 80.513419) + (xy 40.118619 80.516802) + (xy 40.118623 80.516806) + (xy 40.161552 80.552005) + (xy 40.299333 80.664978) + (xy 40.303969 80.667617) + (xy 40.303972 80.667619) + (xy 40.400832 80.722755) + (xy 40.507066 80.783227) + (xy 40.731753 80.864784) + (xy 40.737002 80.865733) + (xy 40.737005 80.865734) + (xy 40.962885 80.90658) + (xy 40.962893 80.906581) + (xy 40.966969 80.907318) + (xy 40.985359 80.908185) + (xy 40.990544 80.90843) + (xy 40.990551 80.90843) + (xy 40.992032 80.9085) + (xy 42.960012 80.9085) + (xy 43.138175 80.893383) + (xy 43.143339 80.892043) + (xy 43.143343 80.892042) + (xy 43.364375 80.834673) + (xy 43.36438 80.834671) + (xy 43.36954 80.833332) + (xy 43.486636 80.780584) + (xy 43.582619 80.737347) + (xy 43.582622 80.737346) + (xy 43.58748 80.735157) + (xy 43.785762 80.601666) + (xy 43.958718 80.436674) + (xy 44.101402 80.2449) + (xy 44.188393 80.073802) + (xy 44.207314 80.036586) + (xy 44.207314 80.036585) + (xy 44.209733 80.031828) + (xy 44.266801 79.848039) + (xy 44.279032 79.808651) + (xy 44.279033 79.808645) + (xy 44.280616 79.803548) + (xy 44.312023 79.566589) + (xy 44.303055 79.327726) + (xy 44.25397 79.093789) + (xy 44.166171 78.871467) + (xy 44.042168 78.667117) + (xy 44.038671 78.663087) + (xy 43.889007 78.490614) + (xy 43.889005 78.490612) + (xy 43.885507 78.486581) + (xy 43.881381 78.483198) + (xy 43.881377 78.483194) + (xy 43.704795 78.338407) + (xy 43.700667 78.335022) + (xy 43.696031 78.332383) + (xy 43.696028 78.332381) + (xy 43.497577 78.219416) + (xy 43.492934 78.216773) + (xy 43.268247 78.135216) + (xy 43.262998 78.134267) + (xy 43.262995 78.134266) + (xy 43.037115 78.09342) + (xy 43.037107 78.093419) + (xy 43.033031 78.092682) + (xy 43.014641 78.091815) + (xy 43.009456 78.09157) + (xy 43.009449 78.09157) + (xy 43.007968 78.0915) + (xy 41.039988 78.0915) + (xy 40.861825 78.106617) + (xy 40.856661 78.107957) + (xy 40.856657 78.107958) + (xy 40.635625 78.165327) + (xy 40.63562 78.165329) + (xy 40.63046 78.166668) + (xy 40.625594 78.16886) + (xy 40.417381 78.262653) + (xy 40.417378 78.262654) + (xy 40.41252 78.264843) + (xy 40.214238 78.398334) + (xy 40.041282 78.563326) + (xy 39.898598 78.7551) + (xy 39.896182 78.759851) + (xy 39.89618 78.759855) + (xy 39.792686 78.963414) + (xy 39.790267 78.968172) + (xy 39.788059 78.975283) + (xy 39.720968 79.191349) + (xy 39.720967 79.191355) + (xy 39.719384 79.196452) + (xy 39.687977 79.433411) + (xy 38.9085 79.433411) + (xy 38.9085 76.7004) + (xy 39.6915 76.7004) + (xy 39.702474 76.806166) + (xy 39.75845 76.973946) + (xy 39.851522 77.124348) + (xy 39.976697 77.249305) + (xy 39.982927 77.253145) + (xy 39.982928 77.253146) + (xy 40.12009 77.337694) + (xy 40.127262 77.342115) + (xy 40.207005 77.368564) + (xy 40.288611 77.395632) + (xy 40.288613 77.395632) + (xy 40.295139 77.397797) + (xy 40.301975 77.398497) + (xy 40.301978 77.398498) + (xy 40.345031 77.402909) + (xy 40.3996 77.4085) + (xy 43.6004 77.4085) + (xy 43.603646 77.408163) + (xy 43.60365 77.408163) + (xy 43.699308 77.398238) + (xy 43.699312 77.398237) + (xy 43.706166 77.397526) + (xy 43.712702 77.395345) + (xy 43.712704 77.395345) + (xy 43.844806 77.351272) + (xy 43.873946 77.34155) + (xy 44.024348 77.248478) + (xy 44.149305 77.123303) + (xy 44.242115 76.972738) + (xy 44.297797 76.804861) + (xy 44.3085 76.7004) + (xy 44.3085 75.2996) + (xy 44.297526 75.193834) + (xy 44.24155 75.026054) + (xy 44.148478 74.875652) + (xy 44.023303 74.750695) + (xy 44.017072 74.746854) + (xy 43.878968 74.661725) + (xy 43.878966 74.661724) + (xy 43.872738 74.657885) + (xy 43.712254 74.604655) + (xy 43.711389 74.604368) + (xy 43.711387 74.604368) + (xy 43.704861 74.602203) + (xy 43.698025 74.601503) + (xy 43.698022 74.601502) + (xy 43.654969 74.597091) + (xy 43.6004 74.5915) + (xy 40.3996 74.5915) + (xy 40.396354 74.591837) + (xy 40.39635 74.591837) + (xy 40.300692 74.601762) + (xy 40.300688 74.601763) + (xy 40.293834 74.602474) + (xy 40.287298 74.604655) + (xy 40.287296 74.604655) + (xy 40.155194 74.648728) + (xy 40.126054 74.65845) + (xy 39.975652 74.751522) + (xy 39.850695 74.876697) + (xy 39.757885 75.027262) + (xy 39.702203 75.195139) + (xy 39.6915 75.2996) + (xy 39.6915 76.7004) + (xy 38.9085 76.7004) + (xy 38.9085 73.928503) + (xy 38.928502 73.860382) + (xy 38.945405 73.839408) + (xy 41.839408 70.945405) + (xy 41.90172 70.911379) + (xy 41.928503 70.9085) + (xy 42.960012 70.9085) + (xy 43.138175 70.893383) + (xy 43.143339 70.892043) + (xy 43.143343 70.892042) + (xy 43.364375 70.834673) + (xy 43.36438 70.834671) + (xy 43.36954 70.833332) + (xy 43.488874 70.779576) + (xy 43.582619 70.737347) + (xy 43.582622 70.737346) + (xy 43.58748 70.735157) + (xy 43.785762 70.601666) + (xy 43.792544 70.595197) + (xy 43.89689 70.495655) + (xy 43.958718 70.436674) + (xy 44.101402 70.2449) + (xy 44.129943 70.188765) + (xy 44.207314 70.036586) + (xy 44.207314 70.036585) + (xy 44.209733 70.031828) + (xy 44.252681 69.893513) + (xy 44.279032 69.808651) + (xy 44.279033 69.808645) + (xy 44.280616 69.803548) + (xy 44.301014 69.649653) + (xy 44.311323 69.571873) + (xy 44.311323 69.571869) + (xy 44.312023 69.566589) + (xy 44.303055 69.327726) + (xy 44.280766 69.221498) + (xy 44.255067 69.099016) + (xy 44.255066 69.099013) + (xy 44.25397 69.093789) + (xy 44.166171 68.871467) + (xy 44.042168 68.667117) + (xy 44.020314 68.641932) + (xy 43.889007 68.490614) + (xy 43.889005 68.490612) + (xy 43.885507 68.486581) + (xy 43.881381 68.483198) + (xy 43.881377 68.483194) + (xy 43.704795 68.338407) + (xy 43.700667 68.335022) + (xy 43.696031 68.332383) + (xy 43.696028 68.332381) + (xy 43.497577 68.219416) + (xy 43.492934 68.216773) + (xy 43.268247 68.135216) + (xy 43.262998 68.134267) + (xy 43.262995 68.134266) + (xy 43.037115 68.09342) + (xy 43.037107 68.093419) + (xy 43.033031 68.092682) + (xy 43.014641 68.091815) + (xy 43.009456 68.09157) + (xy 43.009449 68.09157) + (xy 43.007968 68.0915) + (xy 41.039988 68.0915) + (xy 40.861825 68.106617) + (xy 40.856661 68.107957) + (xy 40.856657 68.107958) + (xy 40.635625 68.165327) + (xy 40.63562 68.165329) + (xy 40.63046 68.166668) + (xy 40.625594 68.16886) + (xy 40.417381 68.262653) + (xy 40.417378 68.262654) + (xy 40.41252 68.264843) + (xy 40.214238 68.398334) + (xy 40.210381 68.402013) + (xy 40.210379 68.402015) + (xy 40.138536 68.47055) + (xy 40.041282 68.563326) + (xy 39.898598 68.7551) + (xy 39.896182 68.759851) + (xy 39.89618 68.759855) + (xy 39.863731 68.823678) + (xy 39.790267 68.968172) + (xy 39.765789 69.047003) + (xy 39.720968 69.191349) + (xy 39.720967 69.191355) + (xy 39.719384 69.196452) + (xy 39.687977 69.433411) + (xy 39.696945 69.672274) + (xy 39.69804 69.677492) + (xy 39.743366 69.893513) + (xy 39.74603 69.906211) + (xy 39.833829 70.128533) + (xy 39.836596 70.133093) + (xy 39.836602 70.133105) + (xy 39.878009 70.20134) + (xy 39.896249 70.269954) + (xy 39.874498 70.337536) + (xy 39.859386 70.355801) + (xy 37.415168 72.800019) + (xy 37.400135 72.81286) + (xy 37.388747 72.821134) + (xy 37.384327 72.826043) + (xy 37.342984 72.871959) + (xy 37.338443 72.876744) + (xy 37.323928 72.891259) + (xy 37.321852 72.893823) + (xy 37.311006 72.907216) + (xy 37.306722 72.912231) + (xy 37.265381 72.958145) + (xy 37.265377 72.95815) + (xy 37.26096 72.963056) + (xy 37.25766 72.968772) + (xy 37.257657 72.968776) + (xy 37.253927 72.975237) + (xy 37.242727 72.991533) + (xy 37.233871 73.00247) + (xy 37.202815 73.063421) + (xy 37.199669 73.069215) + (xy 37.165473 73.128444) + (xy 37.163432 73.134726) + (xy 37.163431 73.134728) + (xy 37.161125 73.141826) + (xy 37.15356 73.160092) + (xy 37.147171 73.17263) + (xy 37.145463 73.179003) + (xy 37.145463 73.179004) + (xy 37.129469 73.238695) + (xy 37.1276 73.245003) + (xy 37.106458 73.310072) + (xy 37.105768 73.316637) + (xy 37.105766 73.316646) + (xy 37.104985 73.324075) + (xy 37.101383 73.343509) + (xy 37.099453 73.350714) + (xy 37.097743 73.357097) + (xy 37.097398 73.363688) + (xy 37.097397 73.363692) + (xy 37.094164 73.425384) + (xy 37.093647 73.431958) + (xy 37.091844 73.449116) + (xy 37.0915 73.45239) + (xy 37.0915 73.472926) + (xy 37.091327 73.47952) + (xy 37.087748 73.54781) + (xy 37.08878 73.554325) + (xy 37.089949 73.561705) + (xy 37.0915 73.581417) + (xy 37.0915 84.918583) + (xy 37.089949 84.938292) + (xy 37.087748 84.95219) + (xy 35.008 84.95219) + (xy 35.008 66.697095) + (xy 39.692001 66.697095) + (xy 39.692338 66.703614) + (xy 39.702257 66.799206) + (xy 39.705149 66.8126) + (xy 39.756588 66.966784) + (xy 39.762761 66.979962) + (xy 39.848063 67.117807) + (xy 39.857099 67.129208) + (xy 39.971829 67.243739) + (xy 39.98324 67.252751) + (xy 40.121243 67.337816) + (xy 40.134424 67.343963) + (xy 40.28871 67.395138) + (xy 40.302086 67.398005) + (xy 40.396438 67.407672) + (xy 40.402854 67.408) + (xy 41.727885 67.408) + (xy 41.743124 67.403525) + (xy 41.744329 67.402135) + (xy 41.746 67.394452) + (xy 41.746 67.389884) + (xy 42.254 67.389884) + (xy 42.258475 67.405123) + (xy 42.259865 67.406328) + (xy 42.267548 67.407999) + (xy 43.597095 67.407999) + (xy 43.603614 67.407662) + (xy 43.699206 67.397743) + (xy 43.7126 67.394851) + (xy 43.866784 67.343412) + (xy 43.879962 67.337239) + (xy 44.017807 67.251937) + (xy 44.029208 67.242901) + (xy 44.143739 67.128171) + (xy 44.152751 67.11676) + (xy 44.237816 66.978757) + (xy 44.243963 66.965576) + (xy 44.295138 66.81129) + (xy 44.298005 66.797914) + (xy 44.307672 66.703562) + (xy 44.308 66.697146) + (xy 44.308 66.272115) + (xy 44.303525 66.256876) + (xy 44.302135 66.255671) + (xy 44.294452 66.254) + (xy 42.272115 66.254) + (xy 42.256876 66.258475) + (xy 42.255671 66.259865) + (xy 42.254 66.267548) + (xy 42.254 67.389884) + (xy 41.746 67.389884) + (xy 41.746 66.272115) + (xy 41.741525 66.256876) + (xy 41.740135 66.255671) + (xy 41.732452 66.254) + (xy 39.710116 66.254) + (xy 39.694877 66.258475) + (xy 39.693672 66.259865) + (xy 39.692001 66.267548) + (xy 39.692001 66.697095) + (xy 35.008 66.697095) + (xy 35.008 65.727885) + (xy 39.692 65.727885) + (xy 39.696475 65.743124) + (xy 39.697865 65.744329) + (xy 39.705548 65.746) + (xy 41.727885 65.746) + (xy 41.743124 65.741525) + (xy 41.744329 65.740135) + (xy 41.746 65.732452) + (xy 41.746 65.727885) + (xy 42.254 65.727885) + (xy 42.258475 65.743124) + (xy 42.259865 65.744329) + (xy 42.267548 65.746) + (xy 44.289884 65.746) + (xy 44.305123 65.741525) + (xy 44.306328 65.740135) + (xy 44.307999 65.732452) + (xy 44.307999 65.302905) + (xy 44.307662 65.296386) + (xy 44.297743 65.200794) + (xy 44.294851 65.1874) + (xy 44.243412 65.033216) + (xy 44.237239 65.020038) + (xy 44.151937 64.882193) + (xy 44.142901 64.870792) + (xy 44.028171 64.756261) + (xy 44.01676 64.747249) + (xy 43.878757 64.662184) + (xy 43.865576 64.656037) + (xy 43.71129 64.604862) + (xy 43.697914 64.601995) + (xy 43.603562 64.592328) + (xy 43.597145 64.592) + (xy 42.272115 64.592) + (xy 42.256876 64.596475) + (xy 42.255671 64.597865) + (xy 42.254 64.605548) + (xy 42.254 65.727885) + (xy 41.746 65.727885) + (xy 41.746 64.610116) + (xy 41.741525 64.594877) + (xy 41.740135 64.593672) + (xy 41.732452 64.592001) + (xy 40.402905 64.592001) + (xy 40.396386 64.592338) + (xy 40.300794 64.602257) + (xy 40.2874 64.605149) + (xy 40.133216 64.656588) + (xy 40.120038 64.662761) + (xy 39.982193 64.748063) + (xy 39.970792 64.757099) + (xy 39.856261 64.871829) + (xy 39.847249 64.88324) + (xy 39.762184 65.021243) + (xy 39.756037 65.034424) + (xy 39.704862 65.18871) + (xy 39.701995 65.202086) + (xy 39.692328 65.296438) + (xy 39.692 65.302855) + (xy 39.692 65.727885) + (xy 35.008 65.727885) + (xy 35.008 62.644669) + (xy 54.272001 62.644669) + (xy 54.272371 62.65149) + (xy 54.277895 62.702352) + (xy 54.281521 62.717604) + (xy 54.326676 62.838054) + (xy 54.335214 62.853649) + (xy 54.411715 62.955724) + (xy 54.424276 62.968285) + (xy 54.526351 63.044786) + (xy 54.541946 63.053324) + (xy 54.662394 63.098478) + (xy 54.677649 63.102105) + (xy 54.728514 63.107631) + (xy 54.735328 63.108) + (xy 56.107885 63.108) + (xy 56.123124 63.103525) + (xy 56.124329 63.102135) + (xy 56.126 63.094452) + (xy 56.126 63.089884) + (xy 56.634 63.089884) + (xy 56.638475 63.105123) + (xy 56.639865 63.106328) + (xy 56.647548 63.107999) + (xy 58.024669 63.107999) + (xy 58.03149 63.107629) + (xy 58.082352 63.102105) + (xy 58.097604 63.098479) + (xy 58.218054 63.053324) + (xy 58.233649 63.044786) + (xy 58.335724 62.968285) + (xy 58.348285 62.955724) + (xy 58.424786 62.853649) + (xy 58.433324 62.838054) + (xy 58.478478 62.717606) + (xy 58.482105 62.702351) + (xy 58.487631 62.651486) + (xy 58.488 62.644672) + (xy 58.488 61.272115) + (xy 58.483525 61.256876) + (xy 58.482135 61.255671) + (xy 58.474452 61.254) + (xy 56.652115 61.254) + (xy 56.636876 61.258475) + (xy 56.635671 61.259865) + (xy 56.634 61.267548) + (xy 56.634 63.089884) + (xy 56.126 63.089884) + (xy 56.126 61.272115) + (xy 56.121525 61.256876) + (xy 56.120135 61.255671) + (xy 56.112452 61.254) + (xy 54.290116 61.254) + (xy 54.274877 61.258475) + (xy 54.273672 61.259865) + (xy 54.272001 61.267548) + (xy 54.272001 62.644669) + (xy 35.008 62.644669) + (xy 35.008 60.727885) + (xy 54.272 60.727885) + (xy 54.276475 60.743124) + (xy 54.277865 60.744329) + (xy 54.285548 60.746) + (xy 56.107885 60.746) + (xy 56.123124 60.741525) + (xy 56.124329 60.740135) + (xy 56.126 60.732452) + (xy 56.126 60.727885) + (xy 56.634 60.727885) + (xy 56.638475 60.743124) + (xy 56.639865 60.744329) + (xy 56.647548 60.746) + (xy 58.469884 60.746) + (xy 58.485123 60.741525) + (xy 58.486328 60.740135) + (xy 58.487999 60.732452) + (xy 58.487999 59.355331) + (xy 58.487629 59.34851) + (xy 58.482105 59.297648) + (xy 58.478479 59.282396) + (xy 58.433324 59.161946) + (xy 58.424786 59.146351) + (xy 58.348285 59.044276) + (xy 58.335724 59.031715) + (xy 58.233649 58.955214) + (xy 58.218054 58.946676) + (xy 58.097606 58.901522) + (xy 58.082351 58.897895) + (xy 58.031486 58.892369) + (xy 58.024672 58.892) + (xy 56.652115 58.892) + (xy 56.636876 58.896475) + (xy 56.635671 58.897865) + (xy 56.634 58.905548) + (xy 56.634 60.727885) + (xy 56.126 60.727885) + (xy 56.126 58.910116) + (xy 56.121525 58.894877) + (xy 56.120135 58.893672) + (xy 56.112452 58.892001) + (xy 54.735331 58.892001) + (xy 54.72851 58.892371) + (xy 54.677648 58.897895) + (xy 54.662396 58.901521) + (xy 54.541946 58.946676) + (xy 54.526351 58.955214) + (xy 54.424276 59.031715) + (xy 54.411715 59.044276) + (xy 54.335214 59.146351) + (xy 54.326676 59.161946) + (xy 54.281522 59.282394) + (xy 54.277895 59.297649) + (xy 54.272369 59.348514) + (xy 54.272 59.355328) + (xy 54.272 60.727885) + (xy 35.008 60.727885) + (xy 35.008 54.998134) + (xy 46.0915 54.998134) + (xy 46.098255 55.060316) + (xy 46.149385 55.196705) + (xy 46.236739 55.313261) + (xy 46.353295 55.400615) + (xy 46.489684 55.451745) + (xy 46.551866 55.4585) + (xy 49.648134 55.4585) + (xy 49.710316 55.451745) + (xy 49.846705 55.400615) + (xy 49.963261 55.313261) + (xy 50.050615 55.196705) + (xy 50.101745 55.060316) + (xy 50.1085 54.998134) + (xy 50.1085 53.08) + (xy 62.686502 53.08) + (xy 62.706457 53.308087) + (xy 62.707881 53.3134) + (xy 62.707881 53.313402) + (xy 62.757867 53.499949) + (xy 62.765716 53.529243) + (xy 62.768039 53.534224) + (xy 62.768039 53.534225) + (xy 62.860151 53.731762) + (xy 62.860154 53.731767) + (xy 62.862477 53.736749) + (xy 62.993802 53.9243) + (xy 63.1557 54.086198) + (xy 63.160208 54.089355) + (xy 63.160211 54.089357) + (xy 63.194567 54.113413) + (xy 63.343251 54.217523) + (xy 63.348233 54.219846) + (xy 63.348238 54.219849) + (xy 63.545775 54.311961) + (xy 63.550757 54.314284) + (xy 63.556065 54.315706) + (xy 63.556067 54.315707) + (xy 63.766598 54.372119) + (xy 63.7666 54.372119) + (xy 63.771913 54.373543) + (xy 64 54.393498) + (xy 64.228087 54.373543) + (xy 64.2334 54.372119) + (xy 64.233402 54.372119) + (xy 64.443933 54.315707) + (xy 64.443935 54.315706) + (xy 64.449243 54.314284) + (xy 64.454225 54.311961) + (xy 64.651762 54.219849) + (xy 64.651767 54.219846) + (xy 64.656749 54.217523) + (xy 64.805433 54.113413) + (xy 64.839789 54.089357) + (xy 64.839792 54.089355) + (xy 64.8443 54.086198) + (xy 65.006198 53.9243) + (xy 65.137523 53.736749) + (xy 65.139846 53.731767) + (xy 65.139849 53.731762) + (xy 65.231961 53.534225) + (xy 65.231961 53.534224) + (xy 65.234284 53.529243) + (xy 65.242134 53.499949) + (xy 65.292119 53.313402) + (xy 65.292119 53.3134) + (xy 65.293543 53.308087) + (xy 65.313498 53.08) + (xy 67.606502 53.08) + (xy 67.626457 53.308087) + (xy 67.627881 53.3134) + (xy 67.627881 53.313402) + (xy 67.677867 53.499949) + (xy 67.685716 53.529243) + (xy 67.688039 53.534224) + (xy 67.688039 53.534225) + (xy 67.780151 53.731762) + (xy 67.780154 53.731767) + (xy 67.782477 53.736749) + (xy 67.913802 53.9243) + (xy 68.0757 54.086198) + (xy 68.080208 54.089355) + (xy 68.080211 54.089357) + (xy 68.114567 54.113413) + (xy 68.263251 54.217523) + (xy 68.268233 54.219846) + (xy 68.268238 54.219849) + (xy 68.465775 54.311961) + (xy 68.470757 54.314284) + (xy 68.476065 54.315706) + (xy 68.476067 54.315707) + (xy 68.686598 54.372119) + (xy 68.6866 54.372119) + (xy 68.691913 54.373543) + (xy 68.92 54.393498) + (xy 69.148087 54.373543) + (xy 69.1534 54.372119) + (xy 69.153402 54.372119) + (xy 69.363933 54.315707) + (xy 69.363935 54.315706) + (xy 69.369243 54.314284) + (xy 69.374225 54.311961) + (xy 69.571762 54.219849) + (xy 69.571767 54.219846) + (xy 69.576749 54.217523) + (xy 69.725433 54.113413) + (xy 69.759789 54.089357) + (xy 69.759792 54.089355) + (xy 69.7643 54.086198) + (xy 69.926198 53.9243) + (xy 70.057523 53.736749) + (xy 70.059846 53.731767) + (xy 70.059849 53.731762) + (xy 70.151961 53.534225) + (xy 70.151961 53.534224) + (xy 70.154284 53.529243) + (xy 70.162134 53.499949) + (xy 70.212119 53.313402) + (xy 70.212119 53.3134) + (xy 70.213543 53.308087) + (xy 70.233498 53.08) + (xy 70.213543 52.851913) + (xy 70.211503 52.8443) + (xy 70.155707 52.636067) + (xy 70.155706 52.636065) + (xy 70.154284 52.630757) + (xy 70.151961 52.625775) + (xy 70.059849 52.428238) + (xy 70.059846 52.428233) + (xy 70.057523 52.423251) + (xy 69.926198 52.2357) + (xy 69.7643 52.073802) + (xy 69.759792 52.070645) + (xy 69.759789 52.070643) + (xy 69.588962 51.951029) + (xy 69.576749 51.942477) + (xy 69.571767 51.940154) + (xy 69.571762 51.940151) + (xy 69.374225 51.848039) + (xy 69.374224 51.848039) + (xy 69.369243 51.845716) + (xy 69.363935 51.844294) + (xy 69.363933 51.844293) + (xy 69.153402 51.787881) + (xy 69.1534 51.787881) + (xy 69.148087 51.786457) + (xy 68.92 51.766502) + (xy 68.691913 51.786457) + (xy 68.6866 51.787881) + (xy 68.686598 51.787881) + (xy 68.476067 51.844293) + (xy 68.476065 51.844294) + (xy 68.470757 51.845716) + (xy 68.465776 51.848039) + (xy 68.465775 51.848039) + (xy 68.268238 51.940151) + (xy 68.268233 51.940154) + (xy 68.263251 51.942477) + (xy 68.251038 51.951029) + (xy 68.080211 52.070643) + (xy 68.080208 52.070645) + (xy 68.0757 52.073802) + (xy 67.913802 52.2357) + (xy 67.782477 52.423251) + (xy 67.780154 52.428233) + (xy 67.780151 52.428238) + (xy 67.688039 52.625775) + (xy 67.685716 52.630757) + (xy 67.684294 52.636065) + (xy 67.684293 52.636067) + (xy 67.628497 52.8443) + (xy 67.626457 52.851913) + (xy 67.606502 53.08) + (xy 65.313498 53.08) + (xy 65.293543 52.851913) + (xy 65.291503 52.8443) + (xy 65.235707 52.636067) + (xy 65.235706 52.636065) + (xy 65.234284 52.630757) + (xy 65.231961 52.625775) + (xy 65.139849 52.428238) + (xy 65.139846 52.428233) + (xy 65.137523 52.423251) + (xy 65.006198 52.2357) + (xy 64.8443 52.073802) + (xy 64.839792 52.070645) + (xy 64.839789 52.070643) + (xy 64.668962 51.951029) + (xy 64.656749 51.942477) + (xy 64.651767 51.940154) + (xy 64.651762 51.940151) + (xy 64.454225 51.848039) + (xy 64.454224 51.848039) + (xy 64.449243 51.845716) + (xy 64.443935 51.844294) + (xy 64.443933 51.844293) + (xy 64.233402 51.787881) + (xy 64.2334 51.787881) + (xy 64.228087 51.786457) + (xy 64 51.766502) + (xy 63.771913 51.786457) + (xy 63.7666 51.787881) + (xy 63.766598 51.787881) + (xy 63.556067 51.844293) + (xy 63.556065 51.844294) + (xy 63.550757 51.845716) + (xy 63.545776 51.848039) + (xy 63.545775 51.848039) + (xy 63.348238 51.940151) + (xy 63.348233 51.940154) + (xy 63.343251 51.942477) + (xy 63.331038 51.951029) + (xy 63.160211 52.070643) + (xy 63.160208 52.070645) + (xy 63.1557 52.073802) + (xy 62.993802 52.2357) + (xy 62.862477 52.423251) + (xy 62.860154 52.428233) + (xy 62.860151 52.428238) + (xy 62.768039 52.625775) + (xy 62.765716 52.630757) + (xy 62.764294 52.636065) + (xy 62.764293 52.636067) + (xy 62.708497 52.8443) + (xy 62.706457 52.851913) + (xy 62.686502 53.08) + (xy 50.1085 53.08) + (xy 50.1085 52.401866) + (xy 50.101745 52.339684) + (xy 50.050615 52.203295) + (xy 49.963261 52.086739) + (xy 49.846705 51.999385) + (xy 49.710316 51.948255) + (xy 49.648134 51.9415) + (xy 46.551866 51.9415) + (xy 46.489684 51.948255) + (xy 46.353295 51.999385) + (xy 46.236739 52.086739) + (xy 46.149385 52.203295) + (xy 46.098255 52.339684) + (xy 46.0915 52.401866) + (xy 46.0915 54.998134) + (xy 35.008 54.998134) + (xy 35.008 50.6) + (xy 39.586835 50.6) + (xy 39.605465 50.836711) + (xy 39.606619 50.841518) + (xy 39.60662 50.841524) + (xy 39.628756 50.933724) + (xy 39.660895 51.067594) + (xy 39.662788 51.072165) + (xy 39.662789 51.072167) + (xy 39.727294 51.227896) + (xy 39.75176 51.286963) + (xy 39.754346 51.291183) + (xy 39.873241 51.485202) + (xy 39.873245 51.485208) + (xy 39.875824 51.489416) + (xy 40.030031 51.669969) + (xy 40.210584 51.824176) + (xy 40.214792 51.826755) + (xy 40.214798 51.826759) + (xy 40.403633 51.942477) + (xy 40.413037 51.94824) + (xy 40.417607 51.950133) + (xy 40.417611 51.950135) + (xy 40.551215 52.005475) + (xy 40.632406 52.039105) + (xy 40.712609 52.05836) + (xy 40.858476 52.09338) + (xy 40.858482 52.093381) + (xy 40.863289 52.094535) + (xy 41.1 52.113165) + (xy 41.336711 52.094535) + (xy 41.341518 52.093381) + (xy 41.341524 52.09338) + (xy 41.487391 52.05836) + (xy 41.567594 52.039105) + (xy 41.648785 52.005475) + (xy 41.782389 51.950135) + (xy 41.782393 51.950133) + (xy 41.786963 51.94824) + (xy 41.796367 51.942477) + (xy 41.985202 51.826759) + (xy 41.985208 51.826755) + (xy 41.989416 51.824176) + (xy 42.169969 51.669969) + (xy 42.324176 51.489416) + (xy 42.326755 51.485208) + (xy 42.326759 51.485202) + (xy 42.445654 51.291183) + (xy 42.44824 51.286963) + (xy 42.472707 51.227896) + (xy 42.537211 51.072167) + (xy 42.537212 51.072165) + (xy 42.539105 51.067594) + (xy 42.571244 50.933724) + (xy 42.59338 50.841524) + (xy 42.593381 50.841518) + (xy 42.594535 50.836711) + (xy 42.613165 50.6) + (xy 54.086835 50.6) + (xy 54.105465 50.836711) + (xy 54.106619 50.841518) + (xy 54.10662 50.841524) + (xy 54.128756 50.933724) + (xy 54.160895 51.067594) + (xy 54.162788 51.072165) + (xy 54.162789 51.072167) + (xy 54.227294 51.227896) + (xy 54.25176 51.286963) + (xy 54.254346 51.291183) + (xy 54.373241 51.485202) + (xy 54.373245 51.485208) + (xy 54.375824 51.489416) + (xy 54.530031 51.669969) + (xy 54.710584 51.824176) + (xy 54.714792 51.826755) + (xy 54.714798 51.826759) + (xy 54.903633 51.942477) + (xy 54.913037 51.94824) + (xy 54.917607 51.950133) + (xy 54.917611 51.950135) + (xy 55.051215 52.005475) + (xy 55.132406 52.039105) + (xy 55.212609 52.05836) + (xy 55.358476 52.09338) + (xy 55.358482 52.093381) + (xy 55.363289 52.094535) + (xy 55.6 52.113165) + (xy 55.836711 52.094535) + (xy 55.841518 52.093381) + (xy 55.841524 52.09338) + (xy 55.987391 52.05836) + (xy 56.067594 52.039105) + (xy 56.148785 52.005475) + (xy 56.282389 51.950135) + (xy 56.282393 51.950133) + (xy 56.286963 51.94824) + (xy 56.296367 51.942477) + (xy 56.485202 51.826759) + (xy 56.485208 51.826755) + (xy 56.489416 51.824176) + (xy 56.669969 51.669969) + (xy 56.824176 51.489416) + (xy 56.826755 51.485208) + (xy 56.826759 51.485202) + (xy 56.945654 51.291183) + (xy 56.94824 51.286963) + (xy 56.972707 51.227896) + (xy 57.037211 51.072167) + (xy 57.037212 51.072165) + (xy 57.039105 51.067594) + (xy 57.071244 50.933724) + (xy 57.09338 50.841524) + (xy 57.093381 50.841518) + (xy 57.094535 50.836711) + (xy 57.113165 50.6) + (xy 57.094535 50.363289) + (xy 57.067981 50.252681) + (xy 57.04026 50.137218) + (xy 57.039105 50.132406) + (xy 57.037211 50.127833) + (xy 56.950135 49.917611) + (xy 56.950133 49.917607) + (xy 56.94824 49.913037) + (xy 56.896804 49.829101) + (xy 56.826759 49.714798) + (xy 56.826755 49.714792) + (xy 56.824176 49.710584) + (xy 56.669969 49.530031) + (xy 56.666213 49.526823) + (xy 56.666208 49.526818) + (xy 56.571361 49.445811) + (xy 56.532551 49.386361) + (xy 56.532045 49.315366) + (xy 56.571361 49.254189) + (xy 56.666208 49.173182) + (xy 56.666213 49.173177) + (xy 56.669969 49.169969) + (xy 56.687854 49.149029) + (xy 56.820963 48.993178) + (xy 56.824176 48.989416) + (xy 56.855186 48.938813) + (xy 56.86544 48.92208) + (xy 56.918087 48.874448) + (xy 56.977266 48.861992) + (xy 56.980331 48.862099) + (xy 56.987562 48.863199) + (xy 56.994854 48.862606) + (xy 56.994856 48.862606) + (xy 57.040231 48.858915) + (xy 57.050446 48.8585) + (xy 57.058506 48.8585) + (xy 57.071796 48.856951) + (xy 57.08672 48.855211) + (xy 57.091095 48.854778) + (xy 57.156552 48.849454) + (xy 57.156555 48.849453) + (xy 57.16385 48.84886) + (xy 57.170814 48.846604) + (xy 57.176773 48.845413) + (xy 57.182628 48.844029) + (xy 57.189894 48.843182) + (xy 57.25854 48.818265) + (xy 57.262668 48.816848) + (xy 57.325149 48.796607) + (xy 57.325151 48.796606) + (xy 57.332112 48.794351) + (xy 57.338367 48.790555) + (xy 57.343841 48.788049) + (xy 57.349271 48.78533) + (xy 57.35615 48.782833) + (xy 57.362271 48.77882) + (xy 57.417189 48.742814) + (xy 57.420893 48.740477) + (xy 57.48332 48.702595) + (xy 57.491697 48.695197) + (xy 57.491721 48.695224) + (xy 57.494713 48.692571) + (xy 57.497946 48.689868) + (xy 57.504065 48.685856) + (xy 57.557341 48.629617) + (xy 57.559719 48.627175) + (xy 60.488911 45.697983) + (xy 60.503323 45.685597) + (xy 60.514918 45.677064) + (xy 60.514923 45.677059) + (xy 60.520818 45.672721) + (xy 60.525557 45.667143) + (xy 60.52556 45.66714) + (xy 60.555035 45.632445) + (xy 60.561965 45.624929) + (xy 60.56766 45.619234) + (xy 60.585281 45.596962) + (xy 60.588072 45.593558) + (xy 60.630591 45.54351) + (xy 60.630592 45.543508) + (xy 60.635333 45.537928) + (xy 60.638661 45.531412) + (xy 60.64202 45.526375) + (xy 60.645194 45.521236) + (xy 60.649734 45.515497) + (xy 60.680636 45.449376) + (xy 60.682569 45.445422) + (xy 60.695828 45.419456) + (xy 60.715769 45.380405) + (xy 60.71751 45.373289) + (xy 60.719604 45.367659) + (xy 60.721523 45.361892) + (xy 60.724621 45.355263) + (xy 60.731711 45.32118) + (xy 60.739482 45.283817) + (xy 60.740453 45.279528) + (xy 60.745399 45.259315) + (xy 60.757808 45.208603) + (xy 60.7585 45.197449) + (xy 60.758536 45.197451) + (xy 60.758775 45.193461) + (xy 60.75915 45.189263) + (xy 60.76064 45.182098) + (xy 60.758546 45.104692) + (xy 60.7585 45.101285) + (xy 60.7585 44.006062) + (xy 63.278493 44.006062) + (xy 63.287789 44.018077) + (xy 63.338994 44.053931) + (xy 63.348489 44.059414) + (xy 63.545947 44.15149) + (xy 63.556239 44.155236) + (xy 63.766688 44.211625) + (xy 63.777481 44.213528) + (xy 63.994525 44.232517) + (xy 64.005475 44.232517) + (xy 64.222519 44.213528) + (xy 64.233312 44.211625) + (xy 64.443761 44.155236) + (xy 64.454053 44.15149) + (xy 64.651511 44.059414) + (xy 64.661006 44.053931) + (xy 64.713048 44.017491) + (xy 64.721424 44.007012) + (xy 64.714356 43.993566) + (xy 64.012812 43.292022) + (xy 63.998868 43.284408) + (xy 63.997035 43.284539) + (xy 63.99042 43.28879) + (xy 63.284923 43.994287) + (xy 63.278493 44.006062) + (xy 60.7585 44.006062) + (xy 60.7585 42.925475) + (xy 62.687483 42.925475) + (xy 62.706472 43.142519) + (xy 62.708375 43.153312) + (xy 62.764764 43.363761) + (xy 62.76851 43.374053) + (xy 62.860586 43.571511) + (xy 62.866069 43.581006) + (xy 62.902509 43.633048) + (xy 62.912988 43.641424) + (xy 62.926434 43.634356) + (xy 63.627978 42.932812) + (xy 63.634356 42.921132) + (xy 64.364408 42.921132) + (xy 64.364539 42.922965) + (xy 64.36879 42.92958) + (xy 65.074287 43.635077) + (xy 65.086062 43.641507) + (xy 65.098077 43.632211) + (xy 65.133931 43.581006) + (xy 65.139414 43.571511) + (xy 65.23149 43.374053) + (xy 65.235236 43.363761) + (xy 65.291625 43.153312) + (xy 65.293528 43.142519) + (xy 65.312517 42.925475) + (xy 65.312517 42.914525) + (xy 65.293528 42.697481) + (xy 65.291625 42.686688) + (xy 65.235236 42.476239) + (xy 65.23149 42.465947) + (xy 65.139414 42.268489) + (xy 65.133931 42.258994) + (xy 65.097491 42.206952) + (xy 65.087012 42.198576) + (xy 65.073566 42.205644) + (xy 64.372022 42.907188) + (xy 64.364408 42.921132) + (xy 63.634356 42.921132) + (xy 63.635592 42.918868) + (xy 63.635461 42.917035) + (xy 63.63121 42.91042) + (xy 62.925713 42.204923) + (xy 62.913938 42.198493) + (xy 62.901923 42.207789) + (xy 62.866069 42.258994) + (xy 62.860586 42.268489) + (xy 62.76851 42.465947) + (xy 62.764764 42.476239) + (xy 62.708375 42.686688) + (xy 62.706472 42.697481) + (xy 62.687483 42.914525) + (xy 62.687483 42.925475) + (xy 60.7585 42.925475) + (xy 60.7585 42.366371) + (xy 60.778502 42.29825) + (xy 60.795405 42.277276) + (xy 61.239693 41.832988) + (xy 63.278576 41.832988) + (xy 63.285644 41.846434) + (xy 63.987188 42.547978) + (xy 64.001132 42.555592) + (xy 64.002965 42.555461) + (xy 64.00958 42.55121) + (xy 64.715077 41.845713) + (xy 64.721507 41.833938) + (xy 64.712211 41.821923) + (xy 64.661006 41.786069) + (xy 64.651511 41.780586) + (xy 64.454053 41.68851) + (xy 64.443761 41.684764) + (xy 64.233312 41.628375) + (xy 64.222519 41.626472) + (xy 64.005475 41.607483) + (xy 63.994525 41.607483) + (xy 63.777481 41.626472) + (xy 63.766688 41.628375) + (xy 63.556239 41.684764) + (xy 63.545947 41.68851) + (xy 63.348489 41.780586) + (xy 63.338994 41.786069) + (xy 63.286952 41.822509) + (xy 63.278576 41.832988) + (xy 61.239693 41.832988) + (xy 63.357276 39.715405) + (xy 63.419588 39.681379) + (xy 63.446371 39.6785) + (xy 65.933219 39.6785) + (xy 66.00134 39.698502) + (xy 66.040363 39.738197) + (xy 66.121522 39.869348) + (xy 66.246697 39.994305) + (xy 66.252927 39.998145) + (xy 66.252928 39.998146) + (xy 66.39009 40.082694) + (xy 66.397262 40.087115) + (xy 66.445254 40.103033) + (xy 66.558611 40.140632) + (xy 66.558613 40.140632) + (xy 66.565139 40.142797) + (xy 66.571975 40.143497) + (xy 66.571978 40.143498) + (xy 66.615031 40.147909) + (xy 66.6696 40.1535) + (xy 67.2704 40.1535) + (xy 67.273646 40.153163) + (xy 67.27365 40.153163) + (xy 67.369308 40.143238) + (xy 67.369312 40.143237) + (xy 67.376166 40.142526) + (xy 67.382702 40.140345) + (xy 67.382704 40.140345) + (xy 67.530026 40.091194) + (xy 67.543946 40.08655) + (xy 67.694348 39.993478) + (xy 67.729027 39.958739) + (xy 67.814134 39.873483) + (xy 67.819305 39.868303) + (xy 67.821906 39.864084) + (xy 67.87903 39.823583) + (xy 67.949953 39.820351) + (xy 68.011365 39.855976) + (xy 68.017922 39.86353) + (xy 68.021522 39.869348) + (xy 68.026704 39.874521) + (xy 68.124518 39.972165) + (xy 68.158597 40.034448) + (xy 68.1615 40.061338) + (xy 68.1615 41.788133) + (xy 68.141498 41.856254) + (xy 68.107772 41.891345) + (xy 68.0757 41.913802) + (xy 67.913802 42.0757) + (xy 67.782477 42.263251) + (xy 67.780154 42.268233) + (xy 67.780151 42.268238) + (xy 67.688039 42.465775) + (xy 67.685716 42.470757) + (xy 67.684294 42.476065) + (xy 67.684293 42.476067) + (xy 67.663019 42.555461) + (xy 67.626457 42.691913) + (xy 67.606502 42.92) + (xy 67.626457 43.148087) + (xy 67.627881 43.1534) + (xy 67.627881 43.153402) + (xy 67.665025 43.292022) + (xy 67.685716 43.369243) + (xy 67.688039 43.374224) + (xy 67.688039 43.374225) + (xy 67.780151 43.571762) + (xy 67.780154 43.571767) + (xy 67.782477 43.576749) + (xy 67.785634 43.581257) + (xy 67.910631 43.759771) + (xy 67.913802 43.7643) + (xy 68.0757 43.926198) + (xy 68.107771 43.948655) + (xy 68.152099 44.00411) + (xy 68.1615 44.051867) + (xy 68.1615 48.85293) + (xy 68.160067 48.87188) + (xy 68.156801 48.893349) + (xy 68.157394 48.900641) + (xy 68.157394 48.900644) + (xy 68.161085 48.946018) + (xy 68.1615 48.956233) + (xy 68.1615 48.964293) + (xy 68.161925 48.967937) + (xy 68.164789 48.992507) + (xy 68.165222 48.996882) + (xy 68.170453 49.061187) + (xy 68.17114 49.069637) + (xy 68.173396 49.076601) + (xy 68.174587 49.08256) + (xy 68.175971 49.088415) + (xy 68.176818 49.095681) + (xy 68.201735 49.164327) + (xy 68.203152 49.168455) + (xy 68.203643 49.169969) + (xy 68.225649 49.237899) + (xy 68.229445 49.244154) + (xy 68.231951 49.249628) + (xy 68.23467 49.255058) + (xy 68.237167 49.261937) + (xy 68.24118 49.268057) + (xy 68.24118 49.268058) + (xy 68.277186 49.322976) + (xy 68.279523 49.32668) + (xy 68.317405 49.389107) + (xy 68.321121 49.393315) + (xy 68.321122 49.393316) + (xy 68.324803 49.397484) + (xy 68.324776 49.397508) + (xy 68.327429 49.4005) + (xy 68.330132 49.403733) + (xy 68.334144 49.409852) + (xy 68.339456 49.414884) + (xy 68.390383 49.463128) + (xy 68.392825 49.465506) + (xy 83.679374 64.752055) + (xy 83.7134 64.814367) + (xy 83.708335 64.885182) + (xy 83.665788 64.942018) + (xy 83.599268 64.966829) + (xy 83.529894 64.951738) + (xy 83.509964 64.938235) + (xy 83.485472 64.917973) + (xy 83.485469 64.917971) + (xy 83.480722 64.914044) + (xy 83.302435 64.817644) + (xy 83.201315 64.786342) + (xy 83.114707 64.759532) + (xy 83.114704 64.759531) + (xy 83.10882 64.75771) + (xy 83.102695 64.757066) + (xy 83.102694 64.757066) + (xy 82.913378 64.737168) + (xy 82.913377 64.737168) + (xy 82.90725 64.736524) + (xy 82.823986 64.744102) + (xy 82.711543 64.754335) + (xy 82.71154 64.754336) + (xy 82.705404 64.754894) + (xy 82.699498 64.756632) + (xy 82.699494 64.756633) + (xy 82.598553 64.786342) + (xy 82.510971 64.812119) + (xy 82.505514 64.814972) + (xy 82.505511 64.814973) + (xy 82.421163 64.859069) + (xy 82.33154 64.905923) + (xy 82.331538 64.905923) + (xy 82.331355 64.906019) + (xy 82.331337 64.905984) + (xy 82.265559 64.925889) + (xy 82.204591 64.910729) + (xy 82.195815 64.905984) + (xy 82.032435 64.817644) + (xy 81.931315 64.786342) + (xy 81.844707 64.759532) + (xy 81.844704 64.759531) + (xy 81.83882 64.75771) + (xy 81.832695 64.757066) + (xy 81.832694 64.757066) + (xy 81.643378 64.737168) + (xy 81.643377 64.737168) + (xy 81.63725 64.736524) + (xy 81.553986 64.744102) + (xy 81.441543 64.754335) + (xy 81.44154 64.754336) + (xy 81.435404 64.754894) + (xy 81.429498 64.756632) + (xy 81.429494 64.756633) + (xy 81.280075 64.80061) + (xy 81.209079 64.800655) + (xy 81.149328 64.762309) + (xy 81.119794 64.697747) + (xy 81.1185 64.679736) + (xy 81.1185 64.42707) + (xy 81.119933 64.40812) + (xy 81.122099 64.393885) + (xy 81.122099 64.393881) + (xy 81.123199 64.386651) + (xy 81.118915 64.333982) + (xy 81.1185 64.323767) + (xy 81.1185 64.315707) + (xy 81.115209 64.28748) + (xy 81.114778 64.283121) + (xy 81.109454 64.217662) + (xy 81.109453 64.217659) + (xy 81.10886 64.210364) + (xy 81.106604 64.2034) + (xy 81.105417 64.197461) + (xy 81.10403 64.19159) + (xy 81.103182 64.184319) + (xy 81.100686 64.177443) + (xy 81.100684 64.177434) + (xy 81.078275 64.115702) + (xy 81.076865 64.111598) + (xy 81.054352 64.042101) + (xy 81.050556 64.035846) + (xy 81.048057 64.030387) + (xy 81.045329 64.024939) + (xy 81.042833 64.018063) + (xy 81.002805 63.95701) + (xy 81.000481 63.953327) + (xy 80.9655 63.89568) + (xy 80.965499 63.895679) + (xy 80.962595 63.890893) + (xy 80.955198 63.882517) + (xy 80.955225 63.882493) + (xy 80.95257 63.879499) + (xy 80.949868 63.876268) + (xy 80.945856 63.870148) + (xy 80.889617 63.816872) + (xy 80.887175 63.814494) + (xy 77.58377 60.511089) + (xy 77.571384 60.496677) + (xy 77.562851 60.485082) + (xy 77.562846 60.485077) + (xy 77.558508 60.479182) + (xy 77.55293 60.474443) + (xy 77.552927 60.47444) + (xy 77.518232 60.444965) + (xy 77.510716 60.438035) + (xy 77.505021 60.43234) + (xy 77.488736 60.419456) + (xy 77.482749 60.414719) + (xy 77.479345 60.411928) + (xy 77.429297 60.369409) + (xy 77.429295 60.369408) + (xy 77.423715 60.364667) + (xy 77.417199 60.361339) + (xy 77.41215 60.357972) + (xy 77.407021 60.354805) + (xy 77.401284 60.350266) + (xy 77.335125 60.319345) + (xy 77.331225 60.317439) + (xy 77.266192 60.284231) + (xy 77.259084 60.282492) + (xy 77.253441 60.280393) + (xy 77.247678 60.278476) + (xy 77.24105 60.275378) + (xy 77.169583 60.260513) + (xy 77.165299 60.259543) + (xy 77.09439 60.242192) + (xy 77.088788 60.241844) + (xy 77.088785 60.241844) + (xy 77.083236 60.2415) + (xy 77.083238 60.241464) + (xy 77.079245 60.241225) + (xy 77.075053 60.240851) + (xy 77.067885 60.23936) + (xy 77.00412 60.241085) + (xy 76.990479 60.241454) + (xy 76.987072 60.2415) + (xy 73.67704 60.2415) + (xy 73.608919 60.221498) + (xy 73.561404 60.165542) + (xy 73.561034 60.164688) + (xy 73.559607 60.160657) + (xy 73.549148 60.140392) + (xy 73.429715 59.908995) + (xy 73.429715 59.908994) + (xy 73.42775 59.905188) + (xy 73.414488 59.886317) + (xy 73.264904 59.673482) + (xy 73.262441 59.669977) + (xy 73.06674 59.459378) + (xy 72.844268 59.277287) + (xy 72.599142 59.127073) + (xy 72.581048 59.11913) + (xy 72.33983 59.013243) + (xy 72.335898 59.011517) + (xy 72.309963 59.004129) + (xy 72.063534 58.933932) + (xy 72.063535 58.933932) + (xy 72.059406 58.932756) + (xy 71.814245 58.897865) + (xy 71.779036 58.892854) + (xy 71.779034 58.892854) + (xy 71.774784 58.892249) + (xy 71.770495 58.892227) + (xy 71.770488 58.892226) + (xy 71.491583 58.890765) + (xy 71.491576 58.890765) + (xy 71.487297 58.890743) + (xy 71.483053 58.891302) + (xy 71.483049 58.891302) + (xy 71.35766 58.90781) + (xy 71.202266 58.928268) + (xy 71.198126 58.929401) + (xy 71.198124 58.929401) + (xy 71.134977 58.946676) + (xy 70.924964 59.004129) + (xy 70.921016 59.005813) + (xy 70.664476 59.115237) + (xy 70.664472 59.115239) + (xy 70.660524 59.116923) + (xy 70.585296 59.161946) + (xy 70.417521 59.262357) + (xy 70.417517 59.26236) + (xy 70.413839 59.264561) + (xy 70.189472 59.444313) + (xy 69.991577 59.652851) + (xy 69.823814 59.886317) + (xy 69.689288 60.140392) + (xy 69.687813 60.144422) + (xy 69.687811 60.144427) + (xy 69.68255 60.158803) + (xy 69.640355 60.2159) + (xy 69.57399 60.241121) + (xy 69.564225 60.2415) + (xy 67.293749 60.2415) + (xy 67.274799 60.240067) + (xy 67.260564 60.237901) + (xy 67.26056 60.237901) + (xy 67.25333 60.236801) + (xy 67.246038 60.237394) + (xy 67.246035 60.237394) + (xy 67.200661 60.241085) + (xy 67.190446 60.2415) + (xy 67.182386 60.2415) + (xy 67.178752 60.241924) + (xy 67.178746 60.241924) + (xy 67.165721 60.243443) + (xy 67.154159 60.244791) + (xy 67.149811 60.245221) + (xy 67.127738 60.247016) + (xy 67.084341 60.250546) + (xy 67.084338 60.250547) + (xy 67.077043 60.25114) + (xy 67.070079 60.253396) + (xy 67.06414 60.254583) + (xy 67.058269 60.25597) + (xy 67.050998 60.256818) + (xy 67.044122 60.259314) + (xy 67.044113 60.259316) + (xy 66.982381 60.281725) + (xy 66.978277 60.283135) + (xy 66.90878 60.305648) + (xy 66.902525 60.309444) + (xy 66.897066 60.311943) + (xy 66.891618 60.314671) + (xy 66.884742 60.317167) + (xy 66.823689 60.357195) + (xy 66.820016 60.359513) + (xy 66.757572 60.397405) + (xy 66.749196 60.404802) + (xy 66.749172 60.404775) + (xy 66.746178 60.40743) + (xy 66.742947 60.410132) + (xy 66.736827 60.414144) + (xy 66.70763 60.444965) + (xy 66.683551 60.470383) + (xy 66.681173 60.472825) + (xy 57.511089 69.642909) + (xy 57.496677 69.655295) + (xy 57.485082 69.663828) + (xy 57.485077 69.663833) + (xy 57.479182 69.668171) + (xy 57.474443 69.673749) + (xy 57.47444 69.673752) + (xy 57.444965 69.708447) + (xy 57.438035 69.715963) + (xy 57.43234 69.721658) + (xy 57.43006 69.72454) + (xy 57.414719 69.74393) + (xy 57.411928 69.747334) + (xy 57.377267 69.788133) + (xy 57.364667 69.802964) + (xy 57.361339 69.80948) + (xy 57.357972 69.814529) + (xy 57.354805 69.819658) + (xy 57.350266 69.825395) + (xy 57.319345 69.891554) + (xy 57.317442 69.895448) + (xy 57.284231 69.960487) + (xy 57.282492 69.967595) + (xy 57.280393 69.973238) + (xy 57.278476 69.979001) + (xy 57.275378 69.985629) + (xy 57.273888 69.992791) + (xy 57.273888 69.992792) + (xy 57.260514 70.057091) + (xy 57.25954 70.061392) + (xy 57.25827 70.06658) + (xy 57.222645 70.127991) + (xy 57.201719 70.144053) + (xy 57.128756 70.188765) + (xy 57.022144 70.254097) + (xy 56.823637 70.423637) + (xy 56.654097 70.622144) + (xy 56.517697 70.844729) + (xy 56.515804 70.849299) + (xy 56.515802 70.849303) + (xy 56.41969 71.081338) + (xy 56.417796 71.085911) + (xy 56.402869 71.148087) + (xy 56.358009 71.334938) + (xy 56.358008 71.334944) + (xy 56.356854 71.339751) + (xy 56.336372 71.6) + (xy 56.356854 71.860249) + (xy 56.358008 71.865056) + (xy 56.358009 71.865062) + (xy 56.384601 71.975824) + (xy 56.417796 72.114089) + (xy 56.419689 72.11866) + (xy 56.41969 72.118662) + (xy 56.45919 72.214022) + (xy 56.517697 72.355271) + (xy 56.654097 72.577856) + (xy 56.823637 72.776363) + (xy 57.022144 72.945903) + (xy 57.244729 73.082303) + (xy 57.249299 73.084196) + (xy 57.249303 73.084198) + (xy 57.480189 73.179834) + (xy 57.485911 73.182204) + (xy 57.574931 73.203576) + (xy 57.734938 73.241991) + (xy 57.734944 73.241992) + (xy 57.739751 73.243146) + (xy 58 73.263628) + (xy 58.260249 73.243146) + (xy 58.265056 73.241992) + (xy 58.265062 73.241991) + (xy 58.425069 73.203576) + (xy 58.514089 73.182204) + (xy 58.519811 73.179834) + (xy 58.750697 73.084198) + (xy 58.750701 73.084196) + (xy 58.755271 73.082303) + (xy 58.977856 72.945903) + (xy 59.176363 72.776363) + (xy 59.345903 72.577856) + (xy 59.482303 72.355271) + (xy 59.540811 72.214022) + (xy 59.58031 72.118662) + (xy 59.580311 72.11866) + (xy 59.582204 72.114089) + (xy 59.615399 71.975824) + (xy 59.641991 71.865062) + (xy 59.641992 71.865056) + (xy 59.643146 71.860249) + (xy 59.663628 71.6) + (xy 59.643146 71.339751) + (xy 59.641992 71.334944) + (xy 59.641991 71.334938) + (xy 59.597131 71.148087) + (xy 59.582204 71.085911) + (xy 59.58031 71.081338) + (xy 59.484198 70.849303) + (xy 59.484196 70.849299) + (xy 59.482303 70.844729) + (xy 59.345903 70.622144) + (xy 59.176363 70.423637) + (xy 59.11786 70.373671) + (xy 59.079051 70.314221) + (xy 59.078543 70.243226) + (xy 59.110595 70.188765) + (xy 67.503955 61.795405) + (xy 67.566267 61.761379) + (xy 67.59305 61.7585) + (xy 69.563621 61.7585) + (xy 69.631742 61.778502) + (xy 69.676186 61.827886) + (xy 69.798958 62.071991) + (xy 69.800885 62.075822) + (xy 69.963721 62.31275) + (xy 70.157206 62.525388) + (xy 70.160501 62.528143) + (xy 70.160502 62.528144) + (xy 70.368854 62.702352) + (xy 70.377759 62.709798) + (xy 70.621298 62.862571) + (xy 70.883318 62.980877) + (xy 70.887437 62.982097) + (xy 71.154857 63.061311) + (xy 71.154862 63.061312) + (xy 71.15897 63.062529) + (xy 71.163204 63.063177) + (xy 71.163209 63.063178) + (xy 71.337736 63.089884) + (xy 71.443153 63.106015) + (xy 71.589485 63.108314) + (xy 71.726317 63.110464) + (xy 71.726323 63.110464) + (xy 71.730608 63.110531) + (xy 71.73486 63.110016) + (xy 71.734868 63.110016) + (xy 72.011756 63.076508) + (xy 72.011761 63.076507) + (xy 72.016017 63.075992) + (xy 72.294097 63.003039) + (xy 72.559704 62.893021) + (xy 72.807922 62.747974) + (xy 73.034159 62.570582) + (xy 73.075285 62.528144) + (xy 73.231244 62.367206) + (xy 73.234227 62.364128) + (xy 73.23676 62.36068) + (xy 73.236764 62.360675) + (xy 73.401887 62.135886) + (xy 73.404425 62.132431) + (xy 73.406471 62.128663) + (xy 73.539554 61.883555) + (xy 73.539555 61.883553) + (xy 73.541604 61.879779) + (xy 73.55665 61.839961) + (xy 73.599441 61.783309) + (xy 73.666067 61.758784) + (xy 73.674516 61.7585) + (xy 76.633629 61.7585) + (xy 76.70175 61.778502) + (xy 76.722724 61.795405) + (xy 79.564595 64.637276) + (xy 79.598621 64.699588) + (xy 79.6015 64.726371) + (xy 79.6015 64.726461) + (xy 79.581498 64.794582) + (xy 79.551065 64.827287) + (xy 79.533387 64.840536) + (xy 79.471739 64.886739) + (xy 79.384385 65.003295) + (xy 79.333255 65.139684) + (xy 79.3265 65.201866) + (xy 79.3265 66.798134) + (xy 79.333255 66.860316) + (xy 79.384385 66.996705) + (xy 79.471739 67.113261) + (xy 79.588295 67.200615) + (xy 79.724684 67.251745) + (xy 79.786866 67.2585) + (xy 80.7455 67.2585) + (xy 80.813621 67.278502) + (xy 80.860114 67.332158) + (xy 80.8715 67.3845) + (xy 80.8715 69.788133) + (xy 80.851498 69.856254) + (xy 80.817772 69.891345) + (xy 80.7857 69.913802) + (xy 80.623802 70.0757) + (xy 80.620645 70.080208) + (xy 80.620643 70.080211) + (xy 80.592272 70.120729) + (xy 80.492477 70.263251) + (xy 80.490154 70.268233) + (xy 80.490151 70.268238) + (xy 80.398039 70.465775) + (xy 80.395716 70.470757) + (xy 80.394294 70.476065) + (xy 80.394293 70.476067) + (xy 80.339228 70.68157) + (xy 80.336457 70.691913) + (xy 80.316502 70.92) + (xy 80.336457 71.148087) + (xy 80.337881 71.1534) + (xy 80.337881 71.153402) + (xy 80.389136 71.344685) + (xy 80.395716 71.369243) + (xy 80.398039 71.374224) + (xy 80.398039 71.374225) + (xy 80.490151 71.571762) + (xy 80.490154 71.571767) + (xy 80.492477 71.576749) + (xy 80.623802 71.7643) + (xy 80.7857 71.926198) + (xy 80.790208 71.929355) + (xy 80.790211 71.929357) + (xy 80.851143 71.972022) + (xy 80.973251 72.057523) + (xy 80.978233 72.059846) + (xy 80.978238 72.059849) + (xy 81.175775 72.151961) + (xy 81.180757 72.154284) + (xy 81.186065 72.155706) + (xy 81.186067 72.155707) + (xy 81.396598 72.212119) + (xy 81.3966 72.212119) + (xy 81.401913 72.213543) + (xy 81.63 72.233498) + (xy 81.858087 72.213543) + (xy 81.8634 72.212119) + (xy 81.863402 72.212119) + (xy 82.073933 72.155707) + (xy 82.073935 72.155706) + (xy 82.079243 72.154284) + (xy 82.084225 72.151961) + (xy 82.281762 72.059849) + (xy 82.281767 72.059846) + (xy 82.286749 72.057523) + (xy 82.408857 71.972022) + (xy 82.469789 71.929357) + (xy 82.469792 71.929355) + (xy 82.4743 71.926198) + (xy 82.636198 71.7643) + (xy 82.767523 71.576749) + (xy 82.769846 71.571767) + (xy 82.769849 71.571762) + (xy 82.861961 71.374225) + (xy 82.861961 71.374224) + (xy 82.864284 71.369243) + (xy 82.870865 71.344685) + (xy 82.922119 71.153402) + (xy 82.922119 71.1534) + (xy 82.923543 71.148087) + (xy 82.943498 70.92) + (xy 82.923543 70.691913) + (xy 82.920772 70.68157) + (xy 82.865707 70.476067) + (xy 82.865706 70.476065) + (xy 82.864284 70.470757) + (xy 82.861961 70.465775) + (xy 82.769849 70.268238) + (xy 82.769846 70.268233) + (xy 82.767523 70.263251) + (xy 82.667728 70.120729) + (xy 82.639357 70.080211) + (xy 82.639355 70.080208) + (xy 82.636198 70.0757) + (xy 82.4743 69.913802) + (xy 82.442229 69.891345) + (xy 82.397901 69.83589) + (xy 82.3885 69.788133) + (xy 82.3885 67.319497) + (xy 82.408502 67.251376) + (xy 82.462158 67.204883) + (xy 82.532432 67.194779) + (xy 82.551759 67.199132) + (xy 82.685293 67.240468) + (xy 82.685296 67.240469) + (xy 82.69118 67.24229) + (xy 82.697305 67.242934) + (xy 82.697306 67.242934) + (xy 82.886622 67.262832) + (xy 82.886623 67.262832) + (xy 82.89275 67.263476) + (xy 82.976014 67.255898) + (xy 83.088457 67.245665) + (xy 83.08846 67.245664) + (xy 83.094596 67.245106) + (xy 83.100502 67.243368) + (xy 83.100506 67.243367) + (xy 83.245763 67.200615) + (xy 83.289029 67.187881) + (xy 83.294486 67.185028) + (xy 83.294489 67.185027) + (xy 83.403245 67.128171) + (xy 83.468645 67.093981) + (xy 83.477266 67.08705) + (xy 83.563476 67.017735) + (xy 83.626601 66.966981) + (xy 83.756881 66.811719) + (xy 83.759845 66.806327) + (xy 83.759848 66.806323) + (xy 83.851556 66.639506) + (xy 83.854523 66.634109) + (xy 83.915807 66.440916) + (xy 83.9335 66.283183) + (xy 83.9335 65.723996) + (xy 83.918723 65.573287) + (xy 83.860142 65.379258) + (xy 83.76499 65.200302) + (xy 83.733315 65.161465) + (xy 83.705761 65.096034) + (xy 83.717956 65.026092) + (xy 83.766028 64.973847) + (xy 83.834715 64.955885) + (xy 83.902209 64.97791) + (xy 83.920053 64.992734) + (xy 89.41623 70.488911) + (xy 89.428616 70.503323) + (xy 89.437149 70.514918) + (xy 89.437154 70.514923) + (xy 89.441492 70.520818) + (xy 89.44707 70.525557) + (xy 89.447073 70.52556) + (xy 89.481768 70.555035) + (xy 89.489284 70.561965) + (xy 89.494979 70.56766) + (xy 89.497861 70.56994) + (xy 89.517251 70.585281) + (xy 89.520655 70.588072) + (xy 89.570648 70.630544) + (xy 89.576285 70.635333) + (xy 89.582801 70.638661) + (xy 89.58785 70.642028) + (xy 89.592979 70.645195) + (xy 89.598716 70.649734) + (xy 89.664875 70.680655) + (xy 89.668769 70.682558) + (xy 89.733808 70.715769) + (xy 89.740916 70.717508) + (xy 89.746559 70.719607) + (xy 89.752322 70.721524) + (xy 89.75895 70.724622) + (xy 89.766112 70.726112) + (xy 89.766113 70.726112) + (xy 89.830412 70.739486) + (xy 89.834696 70.740456) + (xy 89.90561 70.757808) + (xy 89.911212 70.758156) + (xy 89.911215 70.758156) + (xy 89.916764 70.7585) + (xy 89.916762 70.758536) + (xy 89.920755 70.758775) + (xy 89.924947 70.759149) + (xy 89.932115 70.76064) + (xy 90.00952 70.758546) + (xy 90.012928 70.7585) + (xy 114.31293 70.7585) + (xy 114.33188 70.759933) + (xy 114.346115 70.762099) + (xy 114.346119 70.762099) + (xy 114.353349 70.763199) + (xy 114.360641 70.762606) + (xy 114.360644 70.762606) + (xy 114.406018 70.758915) + (xy 114.416233 70.7585) + (xy 114.424293 70.7585) + (xy 114.44168 70.756473) + (xy 114.452507 70.755211) + (xy 114.456882 70.754778) + (xy 114.522339 70.749454) + (xy 114.522342 70.749453) + (xy 114.529637 70.74886) + (xy 114.536601 70.746604) + (xy 114.54256 70.745413) + (xy 114.548415 70.744029) + (xy 114.555681 70.743182) + (xy 114.624327 70.718265) + (xy 114.628455 70.716848) + (xy 114.690936 70.696607) + (xy 114.690938 70.696606) + (xy 114.697899 70.694351) + (xy 114.704154 70.690555) + (xy 114.709628 70.688049) + (xy 114.715058 70.68533) + (xy 114.721937 70.682833) + (xy 114.728058 70.67882) + (xy 114.782976 70.642814) + (xy 114.78668 70.640477) + (xy 114.849107 70.602595) + (xy 114.857484 70.595197) + (xy 114.857508 70.595224) + (xy 114.8605 70.592571) + (xy 114.863733 70.589868) + (xy 114.869852 70.585856) + (xy 114.923128 70.529617) + (xy 114.925506 70.527175) + (xy 116.152086 69.300595) + (xy 116.214398 69.266569) + (xy 116.252162 69.264169) + (xy 116.374524 69.274874) + (xy 116.374525 69.274874) + (xy 116.38 69.275353) + (xy 116.601463 69.255978) + (xy 116.745051 69.217503) + (xy 116.810886 69.199863) + (xy 116.810888 69.199862) + (xy 116.816196 69.19844) + (xy 116.881814 69.167842) + (xy 117.01269 69.106814) + (xy 117.012695 69.106811) + (xy 117.017677 69.104488) + (xy 117.149353 69.012287) + (xy 117.19527 68.980136) + (xy 117.195273 68.980134) + (xy 117.199781 68.976977) + (xy 117.356977 68.819781) + (xy 117.405266 68.750818) + (xy 117.481331 68.642185) + (xy 117.481332 68.642183) + (xy 117.484488 68.637676) + (xy 117.486811 68.632694) + (xy 117.486814 68.632689) + (xy 117.535805 68.527627) + (xy 117.582723 68.474342) + (xy 117.651 68.454881) + (xy 117.71896 68.475423) + (xy 117.764195 68.527627) + (xy 117.813186 68.632689) + (xy 117.813189 68.632694) + (xy 117.815512 68.637676) + (xy 117.818668 68.642183) + (xy 117.818669 68.642185) + (xy 117.894735 68.750818) + (xy 117.943023 68.819781) + (xy 118.100219 68.976977) + (xy 118.104727 68.980134) + (xy 118.10473 68.980136) + (xy 118.150647 69.012287) + (xy 118.282323 69.104488) + (xy 118.287305 69.106811) + (xy 118.28731 69.106814) + (xy 118.418186 69.167842) + (xy 118.483804 69.19844) + (xy 118.489112 69.199862) + (xy 118.489114 69.199863) + (xy 118.554949 69.217503) + (xy 118.698537 69.255978) + (xy 118.92 69.275353) + (xy 119.141463 69.255978) + (xy 119.285051 69.217503) + (xy 119.350886 69.199863) + (xy 119.350888 69.199862) + (xy 119.356196 69.19844) + (xy 119.421814 69.167842) + (xy 119.55269 69.106814) + (xy 119.552695 69.106811) + (xy 119.557677 69.104488) + (xy 119.689353 69.012287) + (xy 119.73527 68.980136) + (xy 119.735273 68.980134) + (xy 119.739781 68.976977) + (xy 119.896977 68.819781) + (xy 119.945266 68.750818) + (xy 120.021331 68.642185) + (xy 120.021332 68.642183) + (xy 120.024488 68.637676) + (xy 120.026811 68.632694) + (xy 120.026814 68.632689) + (xy 120.075805 68.527627) + (xy 120.122723 68.474342) + (xy 120.191 68.454881) + (xy 120.25896 68.475423) + (xy 120.304195 68.527627) + (xy 120.353186 68.632689) + (xy 120.353189 68.632694) + (xy 120.355512 68.637676) + (xy 120.358668 68.642183) + (xy 120.358669 68.642185) + (xy 120.434735 68.750818) + (xy 120.483023 68.819781) + (xy 120.640219 68.976977) + (xy 120.644727 68.980134) + (xy 120.64473 68.980136) + (xy 120.690647 69.012287) + (xy 120.822323 69.104488) + (xy 120.827305 69.106811) + (xy 120.82731 69.106814) + (xy 120.958186 69.167842) + (xy 121.023804 69.19844) + (xy 121.029112 69.199862) + (xy 121.029114 69.199863) + (xy 121.094949 69.217503) + (xy 121.238537 69.255978) + (xy 121.46 69.275353) + (xy 121.681463 69.255978) + (xy 121.825051 69.217503) + (xy 121.890886 69.199863) + (xy 121.890888 69.199862) + (xy 121.896196 69.19844) + (xy 121.961814 69.167842) + (xy 122.09269 69.106814) + (xy 122.092695 69.106811) + (xy 122.097677 69.104488) + (xy 122.229353 69.012287) + (xy 122.27527 68.980136) + (xy 122.275273 68.980134) + (xy 122.279781 68.976977) + (xy 122.436977 68.819781) + (xy 122.485266 68.750818) + (xy 122.561331 68.642185) + (xy 122.561332 68.642183) + (xy 122.564488 68.637676) + (xy 122.566811 68.632694) + (xy 122.566814 68.632689) + (xy 122.615805 68.527627) + (xy 122.662723 68.474342) + (xy 122.731 68.454881) + (xy 122.79896 68.475423) + (xy 122.844195 68.527627) + (xy 122.893186 68.632689) + (xy 122.893189 68.632694) + (xy 122.895512 68.637676) + (xy 122.898668 68.642183) + (xy 122.898669 68.642185) + (xy 122.974735 68.750818) + (xy 123.023023 68.819781) + (xy 123.180219 68.976977) + (xy 123.184727 68.980134) + (xy 123.18473 68.980136) + (xy 123.230647 69.012287) + (xy 123.362323 69.104488) + (xy 123.367305 69.106811) + (xy 123.36731 69.106814) + (xy 123.498186 69.167842) + (xy 123.563804 69.19844) + (xy 123.569112 69.199862) + (xy 123.569114 69.199863) + (xy 123.634949 69.217503) + (xy 123.778537 69.255978) + (xy 124 69.275353) + (xy 124.221463 69.255978) + (xy 124.365051 69.217503) + (xy 124.430886 69.199863) + (xy 124.430888 69.199862) + (xy 124.436196 69.19844) + (xy 124.501814 69.167842) + (xy 124.63269 69.106814) + (xy 124.632695 69.106811) + (xy 124.637677 69.104488) + (xy 124.769353 69.012287) + (xy 124.81527 68.980136) + (xy 124.815273 68.980134) + (xy 124.819781 68.976977) + (xy 124.976977 68.819781) + (xy 125.025266 68.750818) + (xy 125.101331 68.642185) + (xy 125.101332 68.642183) + (xy 125.104488 68.637676) + (xy 125.106811 68.632694) + (xy 125.106814 68.632689) + (xy 125.155805 68.527627) + (xy 125.202723 68.474342) + (xy 125.271 68.454881) + (xy 125.33896 68.475423) + (xy 125.384195 68.527627) + (xy 125.433186 68.632689) + (xy 125.433189 68.632694) + (xy 125.435512 68.637676) + (xy 125.438668 68.642183) + (xy 125.438669 68.642185) + (xy 125.514735 68.750818) + (xy 125.563023 68.819781) + (xy 125.720219 68.976977) + (xy 125.724727 68.980134) + (xy 125.72473 68.980136) + (xy 125.770647 69.012287) + (xy 125.902323 69.104488) + (xy 125.907305 69.106811) + (xy 125.90731 69.106814) + (xy 126.038186 69.167842) + (xy 126.103804 69.19844) + (xy 126.109112 69.199862) + (xy 126.109114 69.199863) + (xy 126.174949 69.217503) + (xy 126.318537 69.255978) + (xy 126.54 69.275353) + (xy 126.761463 69.255978) + (xy 126.905051 69.217503) + (xy 126.970886 69.199863) + (xy 126.970888 69.199862) + (xy 126.976196 69.19844) + (xy 127.041814 69.167842) + (xy 127.17269 69.106814) + (xy 127.172695 69.106811) + (xy 127.177677 69.104488) + (xy 127.309353 69.012287) + (xy 127.35527 68.980136) + (xy 127.355273 68.980134) + (xy 127.359781 68.976977) + (xy 127.516977 68.819781) + (xy 127.565266 68.750818) + (xy 127.641331 68.642185) + (xy 127.641332 68.642183) + (xy 127.644488 68.637676) + (xy 127.646811 68.632694) + (xy 127.646814 68.632689) + (xy 127.695805 68.527627) + (xy 127.742723 68.474342) + (xy 127.811 68.454881) + (xy 127.87896 68.475423) + (xy 127.924195 68.527627) + (xy 127.973186 68.632689) + (xy 127.973189 68.632694) + (xy 127.975512 68.637676) + (xy 127.978668 68.642183) + (xy 127.978669 68.642185) + (xy 128.054735 68.750818) + (xy 128.103023 68.819781) + (xy 128.260219 68.976977) + (xy 128.264727 68.980134) + (xy 128.26473 68.980136) + (xy 128.310647 69.012287) + (xy 128.442323 69.104488) + (xy 128.447305 69.106811) + (xy 128.44731 69.106814) + (xy 128.578186 69.167842) + (xy 128.643804 69.19844) + (xy 128.649112 69.199862) + (xy 128.649114 69.199863) + (xy 128.714949 69.217503) + (xy 128.858537 69.255978) + (xy 129.08 69.275353) + (xy 129.301463 69.255978) + (xy 129.445051 69.217503) + (xy 129.510886 69.199863) + (xy 129.510888 69.199862) + (xy 129.516196 69.19844) + (xy 129.581814 69.167842) + (xy 129.71269 69.106814) + (xy 129.712695 69.106811) + (xy 129.717677 69.104488) + (xy 129.849353 69.012287) + (xy 129.89527 68.980136) + (xy 129.895273 68.980134) + (xy 129.899781 68.976977) + (xy 130.056977 68.819781) + (xy 130.105266 68.750818) + (xy 130.181331 68.642185) + (xy 130.181332 68.642183) + (xy 130.184488 68.637676) + (xy 130.186811 68.632694) + (xy 130.186814 68.632689) + (xy 130.235805 68.527627) + (xy 130.282723 68.474342) + (xy 130.351 68.454881) + (xy 130.41896 68.475423) + (xy 130.464195 68.527627) + (xy 130.513186 68.632689) + (xy 130.513189 68.632694) + (xy 130.515512 68.637676) + (xy 130.518668 68.642183) + (xy 130.518669 68.642185) + (xy 130.594735 68.750818) + (xy 130.643023 68.819781) + (xy 130.800219 68.976977) + (xy 130.804727 68.980134) + (xy 130.80473 68.980136) + (xy 130.850647 69.012287) + (xy 130.982323 69.104488) + (xy 130.987305 69.106811) + (xy 130.98731 69.106814) + (xy 131.118186 69.167842) + (xy 131.183804 69.19844) + (xy 131.189112 69.199862) + (xy 131.189114 69.199863) + (xy 131.254949 69.217503) + (xy 131.398537 69.255978) + (xy 131.62 69.275353) + (xy 131.841463 69.255978) + (xy 131.985051 69.217503) + (xy 132.050886 69.199863) + (xy 132.050888 69.199862) + (xy 132.056196 69.19844) + (xy 132.121814 69.167842) + (xy 132.25269 69.106814) + (xy 132.252695 69.106811) + (xy 132.257677 69.104488) + (xy 132.389353 69.012287) + (xy 132.43527 68.980136) + (xy 132.435273 68.980134) + (xy 132.439781 68.976977) + (xy 132.596977 68.819781) + (xy 132.645266 68.750818) + (xy 132.721331 68.642185) + (xy 132.721332 68.642183) + (xy 132.724488 68.637676) + (xy 132.726811 68.632694) + (xy 132.726814 68.632689) + (xy 132.775805 68.527627) + (xy 132.822723 68.474342) + (xy 132.891 68.454881) + (xy 132.95896 68.475423) + (xy 133.004195 68.527627) + (xy 133.053186 68.632689) + (xy 133.053189 68.632694) + (xy 133.055512 68.637676) + (xy 133.058668 68.642183) + (xy 133.058669 68.642185) + (xy 133.134735 68.750818) + (xy 133.183023 68.819781) + (xy 133.340219 68.976977) + (xy 133.344727 68.980134) + (xy 133.34473 68.980136) + (xy 133.390647 69.012287) + (xy 133.522323 69.104488) + (xy 133.527305 69.106811) + (xy 133.52731 69.106814) + (xy 133.658186 69.167842) + (xy 133.723804 69.19844) + (xy 133.729112 69.199862) + (xy 133.729114 69.199863) + (xy 133.794949 69.217503) + (xy 133.938537 69.255978) + (xy 134.16 69.275353) + (xy 134.381463 69.255978) + (xy 134.525051 69.217503) + (xy 134.590886 69.199863) + (xy 134.590888 69.199862) + (xy 134.596196 69.19844) + (xy 134.661814 69.167842) + (xy 134.79269 69.106814) + (xy 134.792695 69.106811) + (xy 134.797677 69.104488) + (xy 134.929353 69.012287) + (xy 134.97527 68.980136) + (xy 134.975273 68.980134) + (xy 134.979781 68.976977) + (xy 135.136977 68.819781) + (xy 135.185266 68.750818) + (xy 135.261331 68.642185) + (xy 135.261332 68.642183) + (xy 135.264488 68.637676) + (xy 135.266811 68.632694) + (xy 135.266814 68.632689) + (xy 135.315805 68.527627) + (xy 135.362723 68.474342) + (xy 135.431 68.454881) + (xy 135.49896 68.475423) + (xy 135.544195 68.527627) + (xy 135.593186 68.632689) + (xy 135.593189 68.632694) + (xy 135.595512 68.637676) + (xy 135.598668 68.642183) + (xy 135.598669 68.642185) + (xy 135.674735 68.750818) + (xy 135.723023 68.819781) + (xy 135.880219 68.976977) + (xy 135.884727 68.980134) + (xy 135.88473 68.980136) + (xy 135.930647 69.012287) + (xy 136.062323 69.104488) + (xy 136.067305 69.106811) + (xy 136.06731 69.106814) + (xy 136.198186 69.167842) + (xy 136.263804 69.19844) + (xy 136.269112 69.199862) + (xy 136.269114 69.199863) + (xy 136.334949 69.217503) + (xy 136.478537 69.255978) + (xy 136.7 69.275353) + (xy 136.921463 69.255978) + (xy 137.065051 69.217503) + (xy 137.130886 69.199863) + (xy 137.130888 69.199862) + (xy 137.136196 69.19844) + (xy 137.201814 69.167842) + (xy 137.33269 69.106814) + (xy 137.332695 69.106811) + (xy 137.337677 69.104488) + (xy 137.469353 69.012287) + (xy 137.51527 68.980136) + (xy 137.515273 68.980134) + (xy 137.519781 68.976977) + (xy 137.676977 68.819781) + (xy 137.725266 68.750818) + (xy 137.801331 68.642185) + (xy 137.801332 68.642183) + (xy 137.804488 68.637676) + (xy 137.806811 68.632694) + (xy 137.806814 68.632689) + (xy 137.855805 68.527627) + (xy 137.902723 68.474342) + (xy 137.971 68.454881) + (xy 138.03896 68.475423) + (xy 138.084195 68.527627) + (xy 138.133186 68.632689) + (xy 138.133189 68.632694) + (xy 138.135512 68.637676) + (xy 138.138668 68.642183) + (xy 138.138669 68.642185) + (xy 138.214735 68.750818) + (xy 138.263023 68.819781) + (xy 138.420219 68.976977) + (xy 138.424727 68.980134) + (xy 138.42473 68.980136) + (xy 138.470647 69.012287) + (xy 138.602323 69.104488) + (xy 138.607305 69.106811) + (xy 138.60731 69.106814) + (xy 138.738186 69.167842) + (xy 138.803804 69.19844) + (xy 138.809112 69.199862) + (xy 138.809114 69.199863) + (xy 138.874949 69.217503) + (xy 139.018537 69.255978) + (xy 139.24 69.275353) + (xy 139.461463 69.255978) + (xy 139.605051 69.217503) + (xy 139.670886 69.199863) + (xy 139.670888 69.199862) + (xy 139.676196 69.19844) + (xy 139.741814 69.167842) + (xy 139.87269 69.106814) + (xy 139.872695 69.106811) + (xy 139.877677 69.104488) + (xy 140.009353 69.012287) + (xy 140.05527 68.980136) + (xy 140.055273 68.980134) + (xy 140.059781 68.976977) + (xy 140.216977 68.819781) + (xy 140.265266 68.750818) + (xy 140.341331 68.642185) + (xy 140.341332 68.642183) + (xy 140.344488 68.637676) + (xy 140.346811 68.632694) + (xy 140.346814 68.632689) + (xy 140.395805 68.527627) + (xy 140.442723 68.474342) + (xy 140.511 68.454881) + (xy 140.57896 68.475423) + (xy 140.624195 68.527627) + (xy 140.673186 68.632689) + (xy 140.673189 68.632694) + (xy 140.675512 68.637676) + (xy 140.678668 68.642183) + (xy 140.678669 68.642185) + (xy 140.754735 68.750818) + (xy 140.803023 68.819781) + (xy 140.960219 68.976977) + (xy 140.964727 68.980134) + (xy 140.96473 68.980136) + (xy 141.010647 69.012287) + (xy 141.142323 69.104488) + (xy 141.147305 69.106811) + (xy 141.14731 69.106814) + (xy 141.278186 69.167842) + (xy 141.343804 69.19844) + (xy 141.349112 69.199862) + (xy 141.349114 69.199863) + (xy 141.414949 69.217503) + (xy 141.558537 69.255978) + (xy 141.78 69.275353) + (xy 142.001463 69.255978) + (xy 142.145051 69.217503) + (xy 142.210886 69.199863) + (xy 142.210888 69.199862) + (xy 142.216196 69.19844) + (xy 142.281814 69.167842) + (xy 142.41269 69.106814) + (xy 142.412695 69.106811) + (xy 142.417677 69.104488) + (xy 142.549353 69.012287) + (xy 142.59527 68.980136) + (xy 142.595273 68.980134) + (xy 142.599781 68.976977) + (xy 142.756977 68.819781) + (xy 142.805266 68.750818) + (xy 142.881331 68.642185) + (xy 142.881332 68.642183) + (xy 142.884488 68.637676) + (xy 142.886811 68.632694) + (xy 142.886814 68.632689) + (xy 142.935805 68.527627) + (xy 142.982723 68.474342) + (xy 143.051 68.454881) + (xy 143.11896 68.475423) + (xy 143.164195 68.527627) + (xy 143.213186 68.632689) + (xy 143.213189 68.632694) + (xy 143.215512 68.637676) + (xy 143.218668 68.642183) + (xy 143.218669 68.642185) + (xy 143.294735 68.750818) + (xy 143.343023 68.819781) + (xy 143.500219 68.976977) + (xy 143.504727 68.980134) + (xy 143.50473 68.980136) + (xy 143.550647 69.012287) + (xy 143.682323 69.104488) + (xy 143.687305 69.106811) + (xy 143.68731 69.106814) + (xy 143.818186 69.167842) + (xy 143.883804 69.19844) + (xy 143.889112 69.199862) + (xy 143.889114 69.199863) + (xy 143.954949 69.217503) + (xy 144.098537 69.255978) + (xy 144.32 69.275353) + (xy 144.541463 69.255978) + (xy 144.685051 69.217503) + (xy 144.750886 69.199863) + (xy 144.750888 69.199862) + (xy 144.756196 69.19844) + (xy 144.821814 69.167842) + (xy 144.95269 69.106814) + (xy 144.952695 69.106811) + (xy 144.957677 69.104488) + (xy 145.089353 69.012287) + (xy 145.13527 68.980136) + (xy 145.135273 68.980134) + (xy 145.139781 68.976977) + (xy 145.296977 68.819781) + (xy 145.345266 68.750818) + (xy 145.421331 68.642185) + (xy 145.421332 68.642183) + (xy 145.424488 68.637676) + (xy 145.426811 68.632694) + (xy 145.426814 68.632689) + (xy 145.475805 68.527627) + (xy 145.522723 68.474342) + (xy 145.591 68.454881) + (xy 145.65896 68.475423) + (xy 145.704195 68.527627) + (xy 145.753186 68.632689) + (xy 145.753189 68.632694) + (xy 145.755512 68.637676) + (xy 145.758668 68.642183) + (xy 145.758669 68.642185) + (xy 145.834735 68.750818) + (xy 145.883023 68.819781) + (xy 146.040219 68.976977) + (xy 146.044727 68.980134) + (xy 146.04473 68.980136) + (xy 146.090647 69.012287) + (xy 146.222323 69.104488) + (xy 146.227305 69.106811) + (xy 146.22731 69.106814) + (xy 146.358186 69.167842) + (xy 146.423804 69.19844) + (xy 146.429112 69.199862) + (xy 146.429114 69.199863) + (xy 146.494949 69.217503) + (xy 146.638537 69.255978) + (xy 146.86 69.275353) + (xy 147.081463 69.255978) + (xy 147.225051 69.217503) + (xy 147.290886 69.199863) + (xy 147.290888 69.199862) + (xy 147.296196 69.19844) + (xy 147.361814 69.167842) + (xy 147.49269 69.106814) + (xy 147.492695 69.106811) + (xy 147.497677 69.104488) + (xy 147.629353 69.012287) + (xy 147.67527 68.980136) + (xy 147.675273 68.980134) + (xy 147.679781 68.976977) + (xy 147.836977 68.819781) + (xy 147.885266 68.750818) + (xy 147.961331 68.642185) + (xy 147.961332 68.642183) + (xy 147.964488 68.637676) + (xy 147.966811 68.632694) + (xy 147.966814 68.632689) + (xy 148.015805 68.527627) + (xy 148.062723 68.474342) + (xy 148.131 68.454881) + (xy 148.19896 68.475423) + (xy 148.244195 68.527627) + (xy 148.293186 68.632689) + (xy 148.293189 68.632694) + (xy 148.295512 68.637676) + (xy 148.298668 68.642183) + (xy 148.298669 68.642185) + (xy 148.374735 68.750818) + (xy 148.423023 68.819781) + (xy 148.580219 68.976977) + (xy 148.584727 68.980134) + (xy 148.58473 68.980136) + (xy 148.630647 69.012287) + (xy 148.762323 69.104488) + (xy 148.767305 69.106811) + (xy 148.76731 69.106814) + (xy 148.898186 69.167842) + (xy 148.963804 69.19844) + (xy 148.969112 69.199862) + (xy 148.969114 69.199863) + (xy 149.034949 69.217503) + (xy 149.178537 69.255978) + (xy 149.4 69.275353) + (xy 149.621463 69.255978) + (xy 149.765051 69.217503) + (xy 149.830886 69.199863) + (xy 149.830888 69.199862) + (xy 149.836196 69.19844) + (xy 149.901814 69.167842) + (xy 150.03269 69.106814) + (xy 150.032695 69.106811) + (xy 150.037677 69.104488) + (xy 150.169353 69.012287) + (xy 150.21527 68.980136) + (xy 150.215273 68.980134) + (xy 150.219781 68.976977) + (xy 150.376977 68.819781) + (xy 150.425266 68.750818) + (xy 150.501331 68.642185) + (xy 150.501332 68.642183) + (xy 150.504488 68.637676) + (xy 150.506811 68.632694) + (xy 150.506814 68.632689) + (xy 150.555805 68.527627) + (xy 150.602723 68.474342) + (xy 150.671 68.454881) + (xy 150.73896 68.475423) + (xy 150.784195 68.527627) + (xy 150.833186 68.632689) + (xy 150.833189 68.632694) + (xy 150.835512 68.637676) + (xy 150.838668 68.642183) + (xy 150.838669 68.642185) + (xy 150.914735 68.750818) + (xy 150.963023 68.819781) + (xy 151.120219 68.976977) + (xy 151.124727 68.980134) + (xy 151.12473 68.980136) + (xy 151.170647 69.012287) + (xy 151.302323 69.104488) + (xy 151.307305 69.106811) + (xy 151.30731 69.106814) + (xy 151.438186 69.167842) + (xy 151.503804 69.19844) + (xy 151.509112 69.199862) + (xy 151.509114 69.199863) + (xy 151.574949 69.217503) + (xy 151.718537 69.255978) + (xy 151.94 69.275353) + (xy 152.161463 69.255978) + (xy 152.305051 69.217503) + (xy 152.370886 69.199863) + (xy 152.370888 69.199862) + (xy 152.376196 69.19844) + (xy 152.441814 69.167842) + (xy 152.57269 69.106814) + (xy 152.572695 69.106811) + (xy 152.577677 69.104488) + (xy 152.709353 69.012287) + (xy 152.75527 68.980136) + (xy 152.755273 68.980134) + (xy 152.759781 68.976977) + (xy 152.916977 68.819781) + (xy 152.965266 68.750818) + (xy 153.041331 68.642185) + (xy 153.041332 68.642183) + (xy 153.044488 68.637676) + (xy 153.046811 68.632694) + (xy 153.046814 68.632689) + (xy 153.095805 68.527627) + (xy 153.142723 68.474342) + (xy 153.211 68.454881) + (xy 153.27896 68.475423) + (xy 153.324195 68.527627) + (xy 153.373186 68.632689) + (xy 153.373189 68.632694) + (xy 153.375512 68.637676) + (xy 153.378668 68.642183) + (xy 153.378669 68.642185) + (xy 153.454735 68.750818) + (xy 153.503023 68.819781) + (xy 153.660219 68.976977) + (xy 153.664727 68.980134) + (xy 153.66473 68.980136) + (xy 153.710647 69.012287) + (xy 153.842323 69.104488) + (xy 153.847305 69.106811) + (xy 153.84731 69.106814) + (xy 153.978186 69.167842) + (xy 154.043804 69.19844) + (xy 154.049112 69.199862) + (xy 154.049114 69.199863) + (xy 154.114949 69.217503) + (xy 154.258537 69.255978) + (xy 154.48 69.275353) + (xy 154.701463 69.255978) + (xy 154.845051 69.217503) + (xy 154.910886 69.199863) + (xy 154.910888 69.199862) + (xy 154.916196 69.19844) + (xy 154.981814 69.167842) + (xy 155.11269 69.106814) + (xy 155.112695 69.106811) + (xy 155.117677 69.104488) + (xy 155.249353 69.012287) + (xy 155.29527 68.980136) + (xy 155.295273 68.980134) + (xy 155.299781 68.976977) + (xy 155.456977 68.819781) + (xy 155.505266 68.750818) + (xy 155.581331 68.642185) + (xy 155.581332 68.642183) + (xy 155.584488 68.637676) + (xy 155.586811 68.632694) + (xy 155.586814 68.632689) + (xy 155.676117 68.441178) + (xy 155.676118 68.441177) + (xy 155.67844 68.436196) + (xy 155.735978 68.221463) + (xy 155.755353 68) + (xy 155.735978 67.778537) + (xy 155.67844 67.563804) + (xy 155.642198 67.486082) + (xy 155.586814 67.367311) + (xy 155.586811 67.367306) + (xy 155.584488 67.362324) + (xy 155.571246 67.343412) + (xy 155.460136 67.18473) + (xy 155.460134 67.184727) + (xy 155.456977 67.180219) + (xy 155.299781 67.023023) + (xy 155.295273 67.019866) + (xy 155.29527 67.019864) + (xy 155.213006 66.962262) + (xy 155.117677 66.895512) + (xy 155.112695 66.893189) + (xy 155.11269 66.893186) + (xy 154.921178 66.803883) + (xy 154.921177 66.803882) + (xy 154.916196 66.80156) + (xy 154.910888 66.800138) + (xy 154.910886 66.800137) + (xy 154.845051 66.782497) + (xy 154.701463 66.744022) + (xy 154.48 66.724647) + (xy 154.258537 66.744022) + (xy 154.114949 66.782497) + (xy 154.049114 66.800137) + (xy 154.049112 66.800138) + (xy 154.043804 66.80156) + (xy 154.038823 66.803882) + (xy 154.038822 66.803883) + (xy 153.847311 66.893186) + (xy 153.847306 66.893189) + (xy 153.842324 66.895512) + (xy 153.837817 66.898668) + (xy 153.837815 66.898669) + (xy 153.66473 67.019864) + (xy 153.664727 67.019866) + (xy 153.660219 67.023023) + (xy 153.503023 67.180219) + (xy 153.499866 67.184727) + (xy 153.499864 67.18473) + (xy 153.388754 67.343412) + (xy 153.375512 67.362324) + (xy 153.373189 67.367306) + (xy 153.373186 67.367311) + (xy 153.324195 67.472373) + (xy 153.277277 67.525658) + (xy 153.209 67.545119) + (xy 153.14104 67.524577) + (xy 153.095805 67.472373) + (xy 153.046814 67.367311) + (xy 153.046811 67.367306) + (xy 153.044488 67.362324) + (xy 153.031246 67.343412) + (xy 152.920136 67.18473) + (xy 152.920134 67.184727) + (xy 152.916977 67.180219) + (xy 152.759781 67.023023) + (xy 152.752229 67.017735) + (xy 152.751203 67.016452) + (xy 152.751057 67.016329) + (xy 152.751082 67.0163) + (xy 152.707901 66.962278) + (xy 152.6985 66.914522) + (xy 152.6985 55.568621) + (xy 154.795933 55.568621) + (xy 154.805227 55.580635) + (xy 154.839146 55.604385) + (xy 154.848641 55.609868) + (xy 155.033413 55.696028) + (xy 155.043705 55.699774) + (xy 155.240632 55.75254) + (xy 155.251425 55.754443) + (xy 155.454525 55.772212) + (xy 155.465475 55.772212) + (xy 155.668575 55.754443) + (xy 155.679368 55.75254) + (xy 155.876295 55.699774) + (xy 155.886587 55.696028) + (xy 156.071359 55.609868) + (xy 156.080854 55.604385) + (xy 156.115607 55.580051) + (xy 156.123983 55.569572) + (xy 156.116916 55.556127) + (xy 155.472811 54.912021) + (xy 155.458868 54.904408) + (xy 155.457034 54.904539) + (xy 155.45042 54.90879) + (xy 154.80236 55.556851) + (xy 154.795933 55.568621) + (xy 152.6985 55.568621) + (xy 152.6985 54.545475) + (xy 154.227788 54.545475) + (xy 154.245557 54.748575) + (xy 154.24746 54.759368) + (xy 154.300226 54.956295) + (xy 154.303972 54.966587) + (xy 154.390135 55.151364) + (xy 154.395613 55.16085) + (xy 154.419949 55.195607) + (xy 154.430428 55.203983) + (xy 154.443872 55.196917) + (xy 155.087979 54.552811) + (xy 155.094356 54.541132) + (xy 155.824408 54.541132) + (xy 155.824539 54.542966) + (xy 155.82879 54.54958) + (xy 156.476851 55.19764) + (xy 156.488621 55.204067) + (xy 156.500635 55.194772) + (xy 156.524387 55.16085) + (xy 156.529865 55.151364) + (xy 156.616028 54.966587) + (xy 156.619774 54.956295) + (xy 156.67254 54.759368) + (xy 156.674443 54.748575) + (xy 156.692212 54.545475) + (xy 156.692212 54.534525) + (xy 156.674443 54.331425) + (xy 156.67254 54.320632) + (xy 156.619774 54.123705) + (xy 156.616028 54.113413) + (xy 156.529865 53.928636) + (xy 156.524387 53.91915) + (xy 156.500051 53.884393) + (xy 156.489572 53.876017) + (xy 156.476128 53.883083) + (xy 155.832021 54.527189) + (xy 155.824408 54.541132) + (xy 155.094356 54.541132) + (xy 155.095592 54.538868) + (xy 155.095461 54.537034) + (xy 155.09121 54.53042) + (xy 154.443149 53.88236) + (xy 154.431379 53.875933) + (xy 154.419365 53.885228) + (xy 154.395613 53.91915) + (xy 154.390135 53.928636) + (xy 154.303972 54.113413) + (xy 154.300226 54.123705) + (xy 154.24746 54.320632) + (xy 154.245557 54.331425) + (xy 154.227788 54.534525) + (xy 154.227788 54.545475) + (xy 152.6985 54.545475) + (xy 152.6985 53.510428) + (xy 154.796017 53.510428) + (xy 154.803083 53.523872) + (xy 155.447189 54.167979) + (xy 155.461132 54.175592) + (xy 155.462966 54.175461) + (xy 155.46958 54.17121) + (xy 156.11764 53.523149) + (xy 156.124067 53.511379) + (xy 156.114773 53.499365) + (xy 156.080854 53.475615) + (xy 156.071359 53.470132) + (xy 155.886587 53.383972) + (xy 155.876295 53.380226) + (xy 155.679368 53.32746) + (xy 155.668575 53.325557) + (xy 155.465475 53.307788) + (xy 155.454525 53.307788) + (xy 155.251425 53.325557) + (xy 155.240632 53.32746) + (xy 155.043705 53.380226) + (xy 155.033413 53.383972) + (xy 154.848636 53.470135) + (xy 154.83915 53.475613) + (xy 154.804393 53.499949) + (xy 154.796017 53.510428) + (xy 152.6985 53.510428) + (xy 152.6985 52) + (xy 156.766807 52) + (xy 156.785542 52.214142) + (xy 156.786966 52.219455) + (xy 156.786966 52.219457) + (xy 156.834933 52.398469) + (xy 156.841178 52.421777) + (xy 156.8435 52.426757) + (xy 156.843501 52.426759) + (xy 156.853986 52.449243) + (xy 156.932024 52.616596) + (xy 157.055319 52.792681) + (xy 157.207319 52.944681) + (xy 157.383403 53.067976) + (xy 157.388381 53.070297) + (xy 157.388384 53.070299) + (xy 157.532547 53.137523) + (xy 157.578223 53.158822) + (xy 157.583531 53.160244) + (xy 157.583533 53.160245) + (xy 157.780543 53.213034) + (xy 157.780545 53.213034) + (xy 157.785858 53.214458) + (xy 158 53.233193) + (xy 158.214142 53.214458) + (xy 158.219455 53.213034) + (xy 158.219457 53.213034) + (xy 158.416467 53.160245) + (xy 158.416469 53.160244) + (xy 158.421777 53.158822) + (xy 158.467453 53.137523) + (xy 158.611616 53.070299) + (xy 158.611619 53.070297) + (xy 158.616597 53.067976) + (xy 158.792681 52.944681) + (xy 158.944681 52.792681) + (xy 159.067976 52.616596) + (xy 159.146015 52.449243) + (xy 159.156499 52.426759) + (xy 159.1565 52.426757) + (xy 159.158822 52.421777) + (xy 159.165068 52.398469) + (xy 159.213034 52.219457) + (xy 159.213034 52.219455) + (xy 159.214458 52.214142) + (xy 159.233193 52) + (xy 159.214458 51.785858) + (xy 159.21219 51.777393) + (xy 159.160245 51.583533) + (xy 159.160244 51.583531) + (xy 159.158822 51.578223) + (xy 159.156499 51.573241) + (xy 159.070299 51.388385) + (xy 159.070297 51.388382) + (xy 159.067976 51.383404) + (xy 158.944681 51.207319) + (xy 158.792681 51.055319) + (xy 158.616597 50.932024) + (xy 158.611619 50.929703) + (xy 158.611616 50.929701) + (xy 158.426759 50.843501) + (xy 158.426758 50.8435) + (xy 158.421777 50.841178) + (xy 158.416469 50.839756) + (xy 158.416467 50.839755) + (xy 158.219457 50.786966) + (xy 158.219455 50.786966) + (xy 158.214142 50.785542) + (xy 158 50.766807) + (xy 157.785858 50.785542) + (xy 157.780545 50.786966) + (xy 157.780543 50.786966) + (xy 157.583533 50.839755) + (xy 157.583531 50.839756) + (xy 157.578223 50.841178) + (xy 157.573243 50.8435) + (xy 157.573241 50.843501) + (xy 157.388385 50.929701) + (xy 157.388382 50.929703) + (xy 157.383404 50.932024) + (xy 157.207319 51.055319) + (xy 157.055319 51.207319) + (xy 156.932024 51.383404) + (xy 156.929703 51.388382) + (xy 156.929701 51.388385) + (xy 156.843501 51.573241) + (xy 156.841178 51.578223) + (xy 156.839756 51.583531) + (xy 156.839755 51.583533) + (xy 156.78781 51.777393) + (xy 156.785542 51.785858) + (xy 156.766807 52) + (xy 152.6985 52) + (xy 152.6985 51.539253) + (xy 152.699933 51.520304) + (xy 152.702097 51.506076) + (xy 152.703198 51.498841) + (xy 152.702432 51.489416) + (xy 152.698915 51.446181) + (xy 152.6985 51.435967) + (xy 152.6985 51.427897) + (xy 152.698078 51.424277) + (xy 152.698077 51.424259) + (xy 152.695208 51.399651) + (xy 152.694775 51.395276) + (xy 152.69381 51.383404) + (xy 152.68886 51.322553) + (xy 152.686604 51.315589) + (xy 152.685413 51.30963) + (xy 152.684029 51.303775) + (xy 152.683182 51.296509) + (xy 152.658265 51.227863) + (xy 152.656848 51.223735) + (xy 152.636607 51.161254) + (xy 152.636606 51.161252) + (xy 152.634351 51.154291) + (xy 152.630555 51.148036) + (xy 152.628049 51.142562) + (xy 152.62533 51.137132) + (xy 152.622833 51.130253) + (xy 152.582809 51.069206) + (xy 152.580472 51.065502) + (xy 152.576657 51.059214) + (xy 152.552907 51.020075) + (xy 152.545509 51.007883) + (xy 152.545505 51.007878) + (xy 152.542595 51.003082) + (xy 152.535197 50.994706) + (xy 152.535223 50.994683) + (xy 152.532574 50.991693) + (xy 152.529866 50.988454) + (xy 152.525856 50.982338) + (xy 152.520549 50.977311) + (xy 152.520546 50.977307) + (xy 152.469617 50.929062) + (xy 152.467175 50.926684) + (xy 151.000491 49.46) + (xy 154.226807 49.46) + (xy 154.245542 49.674142) + (xy 154.246966 49.679455) + (xy 154.246966 49.679457) + (xy 154.279111 49.799421) + (xy 154.301178 49.881777) + (xy 154.3035 49.886757) + (xy 154.303501 49.886759) + (xy 154.389045 50.070207) + (xy 154.392024 50.076596) + (xy 154.515319 50.252681) + (xy 154.667319 50.404681) + (xy 154.843403 50.527976) + (xy 154.848381 50.530297) + (xy 154.848384 50.530299) + (xy 154.997859 50.6) + (xy 155.038223 50.618822) + (xy 155.043531 50.620244) + (xy 155.043533 50.620245) + (xy 155.240543 50.673034) + (xy 155.240545 50.673034) + (xy 155.245858 50.674458) + (xy 155.46 50.693193) + (xy 155.674142 50.674458) + (xy 155.679455 50.673034) + (xy 155.679457 50.673034) + (xy 155.876467 50.620245) + (xy 155.876469 50.620244) + (xy 155.881777 50.618822) + (xy 155.922141 50.6) + (xy 156.071616 50.530299) + (xy 156.071619 50.530297) + (xy 156.076597 50.527976) + (xy 156.252681 50.404681) + (xy 156.404681 50.252681) + (xy 156.527976 50.076596) + (xy 156.530956 50.070207) + (xy 156.616499 49.886759) + (xy 156.6165 49.886757) + (xy 156.618822 49.881777) + (xy 156.64089 49.799421) + (xy 156.673034 49.679457) + (xy 156.673034 49.679455) + (xy 156.674458 49.674142) + (xy 156.693193 49.46) + (xy 156.674458 49.245858) + (xy 156.673034 49.240543) + (xy 156.620245 49.043533) + (xy 156.620244 49.043531) + (xy 156.618822 49.038223) + (xy 156.606973 49.012812) + (xy 156.530299 48.848385) + (xy 156.530297 48.848382) + (xy 156.527976 48.843404) + (xy 156.404681 48.667319) + (xy 156.252681 48.515319) + (xy 156.076597 48.392024) + (xy 156.071619 48.389703) + (xy 156.071616 48.389701) + (xy 155.886759 48.303501) + (xy 155.886758 48.3035) + (xy 155.881777 48.301178) + (xy 155.876469 48.299756) + (xy 155.876467 48.299755) + (xy 155.679457 48.246966) + (xy 155.679455 48.246966) + (xy 155.674142 48.245542) + (xy 155.46 48.226807) + (xy 155.245858 48.245542) + (xy 155.240545 48.246966) + (xy 155.240543 48.246966) + (xy 155.043533 48.299755) + (xy 155.043531 48.299756) + (xy 155.038223 48.301178) + (xy 155.033243 48.3035) + (xy 155.033241 48.303501) + (xy 154.848385 48.389701) + (xy 154.848382 48.389703) + (xy 154.843404 48.392024) + (xy 154.667319 48.515319) + (xy 154.515319 48.667319) + (xy 154.392024 48.843404) + (xy 154.389703 48.848382) + (xy 154.389701 48.848385) + (xy 154.313027 49.012812) + (xy 154.301178 49.038223) + (xy 154.299756 49.043531) + (xy 154.299755 49.043533) + (xy 154.246966 49.240543) + (xy 154.245542 49.245858) + (xy 154.226807 49.46) + (xy 151.000491 49.46) + (xy 141.753501 40.21301) + (xy 141.741115 40.198598) + (xy 141.732582 40.187003) + (xy 141.732577 40.186998) + (xy 141.728239 40.181103) + (xy 141.722661 40.176364) + (xy 141.722658 40.176361) + (xy 141.687963 40.146886) + (xy 141.680447 40.139956) + (xy 141.674752 40.134261) + (xy 141.658467 40.121377) + (xy 141.65248 40.11664) + (xy 141.649076 40.113849) + (xy 141.599028 40.07133) + (xy 141.599026 40.071329) + (xy 141.593446 40.066588) + (xy 141.58693 40.06326) + (xy 141.581881 40.059893) + (xy 141.576752 40.056726) + (xy 141.571015 40.052187) + (xy 141.504856 40.021266) + (xy 141.500956 40.01936) + (xy 141.435923 39.986152) + (xy 141.428815 39.984413) + (xy 141.423172 39.982314) + (xy 141.417409 39.980397) + (xy 141.410781 39.977299) + (xy 141.386099 39.972165) + (xy 141.339319 39.962435) + (xy 141.33503 39.961464) + (xy 141.264121 39.944113) + (xy 141.258519 39.943765) + (xy 141.258516 39.943765) + (xy 141.252967 39.943421) + (xy 141.252969 39.943385) + (xy 141.248976 39.943146) + (xy 141.244784 39.942772) + (xy 141.237616 39.941281) + (xy 141.173851 39.943006) + (xy 141.16021 39.943375) + (xy 141.156803 39.943421) + (xy 125.365149 39.943421) + (xy 125.346199 39.941988) + (xy 125.331964 39.939822) + (xy 125.33196 39.939822) + (xy 125.32473 39.938722) + (xy 125.317438 39.939315) + (xy 125.317435 39.939315) + (xy 125.272061 39.943006) + (xy 125.261846 39.943421) + (xy 125.253786 39.943421) + (xy 125.250152 39.943845) + (xy 125.250146 39.943845) + (xy 125.237121 39.945364) + (xy 125.225559 39.946712) + (xy 125.221211 39.947142) + (xy 125.199138 39.948937) + (xy 125.155741 39.952467) + (xy 125.155738 39.952468) + (xy 125.148443 39.953061) + (xy 125.141479 39.955317) + (xy 125.13554 39.956504) + (xy 125.129669 39.957891) + (xy 125.122398 39.958739) + (xy 125.115522 39.961235) + (xy 125.115513 39.961237) + (xy 125.053781 39.983646) + (xy 125.049677 39.985056) + (xy 124.98018 40.007569) + (xy 124.973925 40.011365) + (xy 124.968466 40.013864) + (xy 124.963018 40.016592) + (xy 124.956142 40.019088) + (xy 124.895089 40.059116) + (xy 124.891416 40.061434) + (xy 124.828972 40.099326) + (xy 124.820596 40.106723) + (xy 124.820572 40.106696) + (xy 124.817578 40.109351) + (xy 124.814347 40.112053) + (xy 124.808227 40.116065) + (xy 124.77903 40.146886) + (xy 124.754951 40.172304) + (xy 124.752573 40.174746) + (xy 120.511089 44.41623) + (xy 120.496677 44.428616) + (xy 120.485082 44.437149) + (xy 120.485077 44.437154) + (xy 120.479182 44.441492) + (xy 120.474443 44.44707) + (xy 120.47444 44.447073) + (xy 120.444965 44.481768) + (xy 120.438035 44.489284) + (xy 120.43234 44.494979) + (xy 120.43006 44.497861) + (xy 120.414719 44.517251) + (xy 120.411928 44.520655) + (xy 120.372309 44.56729) + (xy 120.364667 44.576285) + (xy 120.361339 44.582801) + (xy 120.357972 44.58785) + (xy 120.354805 44.592979) + (xy 120.350266 44.598716) + (xy 120.319345 44.664875) + (xy 120.317442 44.668769) + (xy 120.284231 44.733808) + (xy 120.282492 44.740916) + (xy 120.280393 44.746559) + (xy 120.278476 44.752322) + (xy 120.275378 44.75895) + (xy 120.273888 44.766112) + (xy 120.273888 44.766113) + (xy 120.260514 44.830412) + (xy 120.259544 44.834696) + (xy 120.242192 44.90561) + (xy 120.2415 44.916764) + (xy 120.241464 44.916762) + (xy 120.241225 44.920755) + (xy 120.240851 44.924947) + (xy 120.23936 44.932115) + (xy 120.239558 44.939432) + (xy 120.241454 45.009521) + (xy 120.2415 45.012928) + (xy 120.2415 45.374523) + (xy 120.221498 45.442644) + (xy 120.187771 45.477735) + (xy 120.180219 45.483023) + (xy 120.023023 45.640219) + (xy 120.019866 45.644727) + (xy 120.019864 45.64473) + (xy 119.907359 45.805404) + (xy 119.895512 45.822324) + (xy 119.893189 45.827306) + (xy 119.893186 45.827311) + (xy 119.844195 45.932373) + (xy 119.797277 45.985658) + (xy 119.729 46.005119) + (xy 119.66104 45.984577) + (xy 119.615805 45.932373) + (xy 119.566814 45.827311) + (xy 119.566811 45.827306) + (xy 119.564488 45.822324) + (xy 119.552641 45.805404) + (xy 119.440136 45.64473) + (xy 119.440134 45.644727) + (xy 119.436977 45.640219) + (xy 119.279781 45.483023) + (xy 119.275273 45.479866) + (xy 119.27527 45.479864) + (xy 119.181412 45.414144) + (xy 119.097677 45.355512) + (xy 119.092695 45.353189) + (xy 119.09269 45.353186) + (xy 118.901178 45.263883) + (xy 118.901177 45.263882) + (xy 118.896196 45.26156) + (xy 118.890888 45.260138) + (xy 118.890886 45.260137) + (xy 118.806008 45.237394) + (xy 118.681463 45.204022) + (xy 118.46 45.184647) + (xy 118.454525 45.185126) + (xy 118.454524 45.185126) + (xy 118.332162 45.195831) + (xy 118.262558 45.181842) + (xy 118.232086 45.159405) + (xy 117.31377 44.241089) + (xy 117.301384 44.226677) + (xy 117.292851 44.215082) + (xy 117.292846 44.215077) + (xy 117.288508 44.209182) + (xy 117.28293 44.204443) + (xy 117.282927 44.20444) + (xy 117.248232 44.174965) + (xy 117.240716 44.168035) + (xy 117.235021 44.16234) + (xy 117.221307 44.15149) + (xy 117.212749 44.144719) + (xy 117.209345 44.141928) + (xy 117.159297 44.099409) + (xy 117.159295 44.099408) + (xy 117.153715 44.094667) + (xy 117.147199 44.091339) + (xy 117.14215 44.087972) + (xy 117.137021 44.084805) + (xy 117.131284 44.080266) + (xy 117.065125 44.049345) + (xy 117.061225 44.047439) + (xy 116.996192 44.014231) + (xy 116.989084 44.012492) + (xy 116.983441 44.010393) + (xy 116.977678 44.008476) + (xy 116.97105 44.005378) + (xy 116.899583 43.990513) + (xy 116.895299 43.989543) + (xy 116.890207 43.988297) + (xy 116.82439 43.972192) + (xy 116.818788 43.971844) + (xy 116.818785 43.971844) + (xy 116.813236 43.9715) + (xy 116.813238 43.971464) + (xy 116.809245 43.971225) + (xy 116.805053 43.970851) + (xy 116.797885 43.96936) + (xy 116.731675 43.971151) + (xy 116.720479 43.971454) + (xy 116.717072 43.9715) + (xy 106.543539 43.9715) + (xy 106.475418 43.951498) + (xy 106.442713 43.921065) + (xy 106.388643 43.84892) + (xy 106.388642 43.848919) + (xy 106.383261 43.841739) + (xy 106.266705 43.754385) + (xy 106.130316 43.703255) + (xy 106.068134 43.6965) + (xy 104.471866 43.6965) + (xy 104.409684 43.703255) + (xy 104.273295 43.754385) + (xy 104.156739 43.841739) + (xy 104.069385 43.958295) + (xy 104.018255 44.094684) + (xy 104.0115 44.156866) + (xy 104.0115 45.1155) + (xy 103.991498 45.183621) + (xy 103.937842 45.230114) + (xy 103.8855 45.2415) + (xy 103.06707 45.2415) + (xy 103.04812 45.240067) + (xy 103.033885 45.237901) + (xy 103.033881 45.237901) + (xy 103.026651 45.236801) + (xy 103.019359 45.237394) + (xy 103.019356 45.237394) + (xy 102.973982 45.241085) + (xy 102.963767 45.2415) + (xy 102.955707 45.2415) + (xy 102.952073 45.241924) + (xy 102.952067 45.241924) + (xy 102.939042 45.243443) + (xy 102.92748 45.244791) + (xy 102.923132 45.245221) + (xy 102.850364 45.25114) + (xy 102.843403 45.253395) + (xy 102.837463 45.254582) + (xy 102.831588 45.255971) + (xy 102.824319 45.256818) + (xy 102.75567 45.281736) + (xy 102.751542 45.283153) + (xy 102.689064 45.303393) + (xy 102.689062 45.303394) + (xy 102.682101 45.305649) + (xy 102.675846 45.309445) + (xy 102.670372 45.311951) + (xy 102.664942 45.31467) + (xy 102.658063 45.317167) + (xy 102.651943 45.32118) + (xy 102.651942 45.32118) + (xy 102.597024 45.357186) + (xy 102.59332 45.359523) + (xy 102.530893 45.397405) + (xy 102.522516 45.404803) + (xy 102.522492 45.404776) + (xy 102.5195 45.407429) + (xy 102.516267 45.410132) + (xy 102.510148 45.414144) + (xy 102.476772 45.449376) + (xy 102.456872 45.470383) + (xy 102.454494 45.472825) + (xy 99.351089 48.57623) + (xy 99.336677 48.588616) + (xy 99.325082 48.597149) + (xy 99.325077 48.597154) + (xy 99.319182 48.601492) + (xy 99.314443 48.60707) + (xy 99.31444 48.607073) + (xy 99.284965 48.641768) + (xy 99.278035 48.649284) + (xy 99.27234 48.654979) + (xy 99.27006 48.657861) + (xy 99.254719 48.677251) + (xy 99.251928 48.680655) + (xy 99.209409 48.730703) + (xy 99.204667 48.736285) + (xy 99.201339 48.742801) + (xy 99.197972 48.74785) + (xy 99.194805 48.752979) + (xy 99.190266 48.758716) + (xy 99.159345 48.824875) + (xy 99.157442 48.828769) + (xy 99.124231 48.893808) + (xy 99.122492 48.900916) + (xy 99.120393 48.906559) + (xy 99.118476 48.912322) + (xy 99.115378 48.91895) + (xy 99.113888 48.926112) + (xy 99.113888 48.926113) + (xy 99.100514 48.990412) + (xy 99.099545 48.994692) + (xy 99.082192 49.06561) + (xy 99.0815 49.076764) + (xy 99.081464 49.076762) + (xy 99.081225 49.080755) + (xy 99.080851 49.084947) + (xy 99.07936 49.092115) + (xy 99.079558 49.099432) + (xy 99.081454 49.169521) + (xy 99.0815 49.172928) + (xy 99.0815 50.868133) + (xy 99.061498 50.936254) + (xy 99.027772 50.971345) + (xy 98.9957 50.993802) + (xy 98.833802 51.1557) + (xy 98.830645 51.160208) + (xy 98.830643 51.160211) + (xy 98.786163 51.223735) + (xy 98.702477 51.343251) + (xy 98.700154 51.348233) + (xy 98.700151 51.348238) + (xy 98.626551 51.506076) + (xy 98.605716 51.550757) + (xy 98.604294 51.556065) + (xy 98.604293 51.556067) + (xy 98.574779 51.666213) + (xy 98.546457 51.771913) + (xy 98.526502 52) + (xy 98.546457 52.228087) + (xy 98.547881 52.2334) + (xy 98.547881 52.233402) + (xy 98.596934 52.416467) + (xy 98.605716 52.449243) + (xy 98.608039 52.454224) + (xy 98.608039 52.454225) + (xy 98.700151 52.651762) + (xy 98.700154 52.651767) + (xy 98.702477 52.656749) + (xy 98.705634 52.661257) + (xy 98.794499 52.788169) + (xy 98.833802 52.8443) + (xy 98.9957 53.006198) + (xy 99.000208 53.009355) + (xy 99.000211 53.009357) + (xy 99.027769 53.028653) + (xy 99.183251 53.137523) + (xy 99.188233 53.139846) + (xy 99.188238 53.139849) + (xy 99.349267 53.214937) + (xy 99.390757 53.234284) + (xy 99.396065 53.235706) + (xy 99.396067 53.235707) + (xy 99.606598 53.292119) + (xy 99.6066 53.292119) + (xy 99.611913 53.293543) + (xy 99.84 53.313498) + (xy 100.068087 53.293543) + (xy 100.0734 53.292119) + (xy 100.073402 53.292119) + (xy 100.283933 53.235707) + (xy 100.283935 53.235706) + (xy 100.289243 53.234284) + (xy 100.330733 53.214937) + (xy 100.491762 53.139849) + (xy 100.491767 53.139846) + (xy 100.496749 53.137523) + (xy 100.652231 53.028653) + (xy 100.679789 53.009357) + (xy 100.679792 53.009355) + (xy 100.6843 53.006198) + (xy 100.846198 52.8443) + (xy 100.885502 52.788169) + (xy 100.974366 52.661257) + (xy 100.977523 52.656749) + (xy 100.979846 52.651767) + (xy 100.979849 52.651762) + (xy 101.071961 52.454225) + (xy 101.071961 52.454224) + (xy 101.074284 52.449243) + (xy 101.083067 52.416467) + (xy 101.132119 52.233402) + (xy 101.132119 52.2334) + (xy 101.133543 52.228087) + (xy 101.153498 52) + (xy 101.133543 51.771913) + (xy 101.105221 51.666213) + (xy 101.075707 51.556067) + (xy 101.075706 51.556065) + (xy 101.074284 51.550757) + (xy 101.053449 51.506076) + (xy 100.979849 51.348238) + (xy 100.979846 51.348233) + (xy 100.977523 51.343251) + (xy 100.893837 51.223735) + (xy 100.849357 51.160211) + (xy 100.849355 51.160208) + (xy 100.846198 51.1557) + (xy 100.6843 50.993802) + (xy 100.652229 50.971345) + (xy 100.607901 50.91589) + (xy 100.5985 50.868133) + (xy 100.5985 50.058777) + (xy 117.765777 50.058777) + (xy 117.775074 50.070793) + (xy 117.818069 50.100898) + (xy 117.827555 50.106376) + (xy 118.018993 50.195645) + (xy 118.029285 50.199391) + (xy 118.233309 50.254059) + (xy 118.244104 50.255962) + (xy 118.454525 50.274372) + (xy 118.465475 50.274372) + (xy 118.675896 50.255962) + (xy 118.686691 50.254059) + (xy 118.890715 50.199391) + (xy 118.901007 50.195645) + (xy 119.092445 50.106376) + (xy 119.101931 50.100898) + (xy 119.145764 50.070207) + (xy 119.154139 50.059729) + (xy 119.147071 50.046281) + (xy 118.472812 49.372022) + (xy 118.458868 49.364408) + (xy 118.457035 49.364539) + (xy 118.45042 49.36879) + (xy 117.772207 50.047003) + (xy 117.765777 50.058777) + (xy 100.5985 50.058777) + (xy 100.5985 49.526371) + (xy 100.618502 49.45825) + (xy 100.635405 49.437276) + (xy 101.067206 49.005475) + (xy 117.185628 49.005475) + (xy 117.204038 49.215896) + (xy 117.205941 49.226691) + (xy 117.260609 49.430715) + (xy 117.264355 49.441007) + (xy 117.353623 49.632441) + (xy 117.359103 49.641932) + (xy 117.389794 49.685765) + (xy 117.400271 49.69414) + (xy 117.413718 49.687072) + (xy 118.087978 49.012812) + (xy 118.095592 48.998868) + (xy 118.095461 48.997035) + (xy 118.09121 48.99042) + (xy 117.412997 48.312207) + (xy 117.401223 48.305777) + (xy 117.389207 48.315074) + (xy 117.359103 48.358068) + (xy 117.353623 48.367559) + (xy 117.264355 48.558993) + (xy 117.260609 48.569285) + (xy 117.205941 48.773309) + (xy 117.204038 48.784104) + (xy 117.185628 48.994525) + (xy 117.185628 49.005475) + (xy 101.067206 49.005475) + (xy 103.277276 46.795405) + (xy 103.339588 46.761379) + (xy 103.366371 46.7585) + (xy 103.950503 46.7585) + (xy 104.018624 46.778502) + (xy 104.065117 46.832158) + (xy 104.075221 46.902432) + (xy 104.070868 46.921759) + (xy 104.032265 47.046466) + (xy 104.02771 47.06118) + (xy 104.027066 47.067305) + (xy 104.027066 47.067306) + (xy 104.007168 47.256622) + (xy 104.006524 47.26275) + (xy 104.008429 47.283678) + (xy 104.020202 47.413037) + (xy 104.024894 47.464596) + (xy 104.026632 47.470502) + (xy 104.026633 47.470506) + (xy 104.068251 47.611909) + (xy 104.082119 47.659029) + (xy 104.084972 47.664486) + (xy 104.084973 47.664489) + (xy 104.089127 47.672435) + (xy 104.176019 47.838645) + (xy 104.179879 47.843445) + (xy 104.179879 47.843446) + (xy 104.195833 47.863289) + (xy 104.303019 47.996601) + (xy 104.458281 48.126881) + (xy 104.463673 48.129845) + (xy 104.463677 48.129848) + (xy 104.630494 48.221556) + (xy 104.635891 48.224523) + (xy 104.829084 48.285807) + (xy 104.835201 48.286493) + (xy 104.835205 48.286494) + (xy 104.909348 48.29481) + (xy 104.986817 48.3035) + (xy 105.546004 48.3035) + (xy 105.696713 48.288723) + (xy 105.890742 48.230142) + (xy 106.069698 48.13499) + (xy 106.084239 48.123131) + (xy 106.221987 48.010785) + (xy 106.226763 48.00689) + (xy 106.239246 47.991801) + (xy 106.352027 47.855472) + (xy 106.352029 47.855469) + (xy 106.355956 47.850722) + (xy 106.452356 47.672435) + (xy 106.51229 47.47882) + (xy 106.517098 47.43308) + (xy 106.532832 47.283378) + (xy 106.532832 47.283377) + (xy 106.533476 47.27725) + (xy 106.518543 47.113165) + (xy 106.515665 47.081543) + (xy 106.515664 47.08154) + (xy 106.515106 47.075404) + (xy 106.507811 47.050615) + (xy 106.45962 46.88688) + (xy 106.457881 46.880971) + (xy 106.439968 46.846705) + (xy 106.38779 46.746898) + (xy 106.363981 46.701355) + (xy 106.364016 46.701337) + (xy 106.344111 46.635559) + (xy 106.359271 46.574591) + (xy 106.452356 46.402435) + (xy 106.51229 46.20882) + (xy 106.524741 46.090363) + (xy 106.532832 46.013378) + (xy 106.532832 46.013377) + (xy 106.533476 46.00725) + (xy 106.516646 45.822324) + (xy 106.515665 45.811543) + (xy 106.515664 45.81154) + (xy 106.515106 45.805404) + (xy 106.46939 45.650075) + (xy 106.469345 45.579079) + (xy 106.507691 45.519328) + (xy 106.572253 45.489794) + (xy 106.590264 45.4885) + (xy 116.363629 45.4885) + (xy 116.43175 45.508502) + (xy 116.452724 45.525405) + (xy 117.159405 46.232086) + (xy 117.193431 46.294398) + (xy 117.195831 46.332162) + (xy 117.185126 46.454524) + (xy 117.184647 46.46) + (xy 117.204022 46.681463) + (xy 117.26156 46.896196) + (xy 117.263882 46.901177) + (xy 117.263883 46.901178) + (xy 117.353186 47.092689) + (xy 117.353189 47.092694) + (xy 117.355512 47.097676) + (xy 117.358668 47.102183) + (xy 117.358669 47.102185) + (xy 117.476952 47.27111) + (xy 117.483023 47.279781) + (xy 117.640219 47.436977) + (xy 117.644727 47.440134) + (xy 117.64473 47.440136) + (xy 117.679663 47.464596) + (xy 117.822323 47.564488) + (xy 117.827305 47.566811) + (xy 117.82731 47.566814) + (xy 117.932965 47.616081) + (xy 117.98625 47.662998) + (xy 118.005711 47.731275) + (xy 117.985169 47.799235) + (xy 117.932965 47.844471) + (xy 117.827559 47.893623) + (xy 117.818068 47.899103) + (xy 117.774235 47.929794) + (xy 117.76586 47.940271) + (xy 117.772928 47.953718) + (xy 118.447188 48.627978) + (xy 118.461132 48.635592) + (xy 118.462965 48.635461) + (xy 118.46958 48.63121) + (xy 119.147793 47.952997) + (xy 119.154223 47.941223) + (xy 119.144926 47.929207) + (xy 119.101931 47.899102) + (xy 119.092445 47.893624) + (xy 118.987035 47.844471) + (xy 118.93375 47.797554) + (xy 118.914289 47.729277) + (xy 118.934831 47.661317) + (xy 118.987035 47.616081) + (xy 119.09269 47.566814) + (xy 119.092695 47.566811) + (xy 119.097677 47.564488) + (xy 119.240337 47.464596) + (xy 119.27527 47.440136) + (xy 119.275273 47.440134) + (xy 119.279781 47.436977) + (xy 119.436977 47.279781) + (xy 119.443049 47.27111) + (xy 119.561331 47.102185) + (xy 119.561332 47.102183) + (xy 119.564488 47.097676) + (xy 119.566811 47.092694) + (xy 119.566814 47.092689) + (xy 119.615805 46.987627) + (xy 119.662723 46.934342) + (xy 119.731 46.914881) + (xy 119.79896 46.935423) + (xy 119.844195 46.987627) + (xy 119.893186 47.092689) + (xy 119.893189 47.092694) + (xy 119.895512 47.097676) + (xy 119.898668 47.102183) + (xy 119.898669 47.102185) + (xy 120.016952 47.27111) + (xy 120.023023 47.279781) + (xy 120.180219 47.436977) + (xy 120.184727 47.440134) + (xy 120.18473 47.440136) + (xy 120.219663 47.464596) + (xy 120.362323 47.564488) + (xy 120.367305 47.566811) + (xy 120.36731 47.566814) + (xy 120.472373 47.615805) + (xy 120.525658 47.662722) + (xy 120.545119 47.730999) + (xy 120.524577 47.798959) + (xy 120.472373 47.844195) + (xy 120.367311 47.893186) + (xy 120.367306 47.893189) + (xy 120.362324 47.895512) + (xy 120.357817 47.898668) + (xy 120.357815 47.898669) + (xy 120.18473 48.019864) + (xy 120.184727 48.019866) + (xy 120.180219 48.023023) + (xy 120.023023 48.180219) + (xy 120.019866 48.184727) + (xy 120.019864 48.18473) + (xy 119.916901 48.331777) + (xy 119.895512 48.362324) + (xy 119.893189 48.367306) + (xy 119.893186 48.367311) + (xy 119.843919 48.472965) + (xy 119.797001 48.52625) + (xy 119.728724 48.545711) + (xy 119.660764 48.525169) + (xy 119.615529 48.472965) + (xy 119.566377 48.367559) + (xy 119.560897 48.358068) + (xy 119.530206 48.314235) + (xy 119.519729 48.30586) + (xy 119.506282 48.312928) + (xy 118.832022 48.987188) + (xy 118.824408 49.001132) + (xy 118.824539 49.002965) + (xy 118.82879 49.00958) + (xy 119.507003 49.687793) + (xy 119.518777 49.694223) + (xy 119.530793 49.684926) + (xy 119.560897 49.641932) + (xy 119.566377 49.632441) + (xy 119.615529 49.527035) + (xy 119.662447 49.47375) + (xy 119.730724 49.454289) + (xy 119.798684 49.474831) + (xy 119.843919 49.527035) + (xy 119.893186 49.632689) + (xy 119.893189 49.632694) + (xy 119.895512 49.637676) + (xy 119.898668 49.642183) + (xy 119.898669 49.642185) + (xy 120.008767 49.799421) + (xy 120.023023 49.819781) + (xy 120.180219 49.976977) + (xy 120.184728 49.980134) + (xy 120.18473 49.980136) + (xy 120.187771 49.982265) + (xy 120.188797 49.983548) + (xy 120.188943 49.983671) + (xy 120.188918 49.9837) + (xy 120.232099 50.037722) + (xy 120.2415 50.085478) + (xy 120.2415 55.93293) + (xy 120.240067 55.95188) + (xy 120.236801 55.973349) + (xy 120.237394 55.980641) + (xy 120.237394 55.980644) + (xy 120.241085 56.026018) + (xy 120.2415 56.036233) + (xy 120.2415 56.044293) + (xy 120.241925 56.047937) + (xy 120.244789 56.072507) + (xy 120.245222 56.076882) + (xy 120.250409 56.140644) + (xy 120.25114 56.149637) + (xy 120.253396 56.156601) + (xy 120.254587 56.16256) + (xy 120.255971 56.168415) + (xy 120.256818 56.175681) + (xy 120.281735 56.244327) + (xy 120.283152 56.248455) + (xy 120.300678 56.302553) + (xy 120.305649 56.317899) + (xy 120.309445 56.324154) + (xy 120.311951 56.329628) + (xy 120.31467 56.335058) + (xy 120.317167 56.341937) + (xy 120.32118 56.348057) + (xy 120.32118 56.348058) + (xy 120.357186 56.402976) + (xy 120.359523 56.40668) + (xy 120.397405 56.469107) + (xy 120.401121 56.473315) + (xy 120.401122 56.473316) + (xy 120.404803 56.477484) + (xy 120.404776 56.477508) + (xy 120.407429 56.4805) + (xy 120.410132 56.483733) + (xy 120.414144 56.489852) + (xy 120.433363 56.508058) + (xy 120.470383 56.543128) + (xy 120.472825 56.545506) + (xy 125.744595 61.817276) + (xy 125.778621 61.879588) + (xy 125.7815 61.906371) + (xy 125.7815 66.914523) + (xy 125.761498 66.982644) + (xy 125.727771 67.017735) + (xy 125.720219 67.023023) + (xy 125.563023 67.180219) + (xy 125.559866 67.184727) + (xy 125.559864 67.18473) + (xy 125.448754 67.343412) + (xy 125.435512 67.362324) + (xy 125.433189 67.367306) + (xy 125.433186 67.367311) + (xy 125.384195 67.472373) + (xy 125.337277 67.525658) + (xy 125.269 67.545119) + (xy 125.20104 67.524577) + (xy 125.155805 67.472373) + (xy 125.106814 67.367311) + (xy 125.106811 67.367306) + (xy 125.104488 67.362324) + (xy 125.091246 67.343412) + (xy 124.980136 67.18473) + (xy 124.980134 67.184727) + (xy 124.976977 67.180219) + (xy 124.819781 67.023023) + (xy 124.815273 67.019866) + (xy 124.81527 67.019864) + (xy 124.733006 66.962262) + (xy 124.637677 66.895512) + (xy 124.632695 66.893189) + (xy 124.63269 66.893186) + (xy 124.441178 66.803883) + (xy 124.441177 66.803882) + (xy 124.436196 66.80156) + (xy 124.430888 66.800138) + (xy 124.430886 66.800137) + (xy 124.365051 66.782497) + (xy 124.221463 66.744022) + (xy 124 66.724647) + (xy 123.778537 66.744022) + (xy 123.634949 66.782497) + (xy 123.569114 66.800137) + (xy 123.569112 66.800138) + (xy 123.563804 66.80156) + (xy 123.558823 66.803882) + (xy 123.558822 66.803883) + (xy 123.367311 66.893186) + (xy 123.367306 66.893189) + (xy 123.362324 66.895512) + (xy 123.357817 66.898668) + (xy 123.357815 66.898669) + (xy 123.18473 67.019864) + (xy 123.184727 67.019866) + (xy 123.180219 67.023023) + (xy 123.023023 67.180219) + (xy 123.019866 67.184727) + (xy 123.019864 67.18473) + (xy 122.908754 67.343412) + (xy 122.895512 67.362324) + (xy 122.893189 67.367306) + (xy 122.893186 67.367311) + (xy 122.844195 67.472373) + (xy 122.797277 67.525658) + (xy 122.729 67.545119) + (xy 122.66104 67.524577) + (xy 122.615805 67.472373) + (xy 122.566814 67.367311) + (xy 122.566811 67.367306) + (xy 122.564488 67.362324) + (xy 122.551246 67.343412) + (xy 122.440136 67.18473) + (xy 122.440134 67.184727) + (xy 122.436977 67.180219) + (xy 122.279781 67.023023) + (xy 122.275273 67.019866) + (xy 122.27527 67.019864) + (xy 122.193006 66.962262) + (xy 122.097677 66.895512) + (xy 122.092695 66.893189) + (xy 122.09269 66.893186) + (xy 121.901178 66.803883) + (xy 121.901177 66.803882) + (xy 121.896196 66.80156) + (xy 121.890888 66.800138) + (xy 121.890886 66.800137) + (xy 121.825051 66.782497) + (xy 121.681463 66.744022) + (xy 121.46 66.724647) + (xy 121.238537 66.744022) + (xy 121.094949 66.782497) + (xy 121.029114 66.800137) + (xy 121.029112 66.800138) + (xy 121.023804 66.80156) + (xy 121.018823 66.803882) + (xy 121.018822 66.803883) + (xy 120.827311 66.893186) + (xy 120.827306 66.893189) + (xy 120.822324 66.895512) + (xy 120.817817 66.898668) + (xy 120.817815 66.898669) + (xy 120.64473 67.019864) + (xy 120.644727 67.019866) + (xy 120.640219 67.023023) + (xy 120.483023 67.180219) + (xy 120.479866 67.184727) + (xy 120.479864 67.18473) + (xy 120.368754 67.343412) + (xy 120.355512 67.362324) + (xy 120.353189 67.367306) + (xy 120.353186 67.367311) + (xy 120.304195 67.472373) + (xy 120.257277 67.525658) + (xy 120.189 67.545119) + (xy 120.12104 67.524577) + (xy 120.075805 67.472373) + (xy 120.026814 67.367311) + (xy 120.026811 67.367306) + (xy 120.024488 67.362324) + (xy 120.011246 67.343412) + (xy 119.900136 67.18473) + (xy 119.900134 67.184727) + (xy 119.896977 67.180219) + (xy 119.739781 67.023023) + (xy 119.735273 67.019866) + (xy 119.73527 67.019864) + (xy 119.653006 66.962262) + (xy 119.557677 66.895512) + (xy 119.552695 66.893189) + (xy 119.55269 66.893186) + (xy 119.361178 66.803883) + (xy 119.361177 66.803882) + (xy 119.356196 66.80156) + (xy 119.350888 66.800138) + (xy 119.350886 66.800137) + (xy 119.285051 66.782497) + (xy 119.141463 66.744022) + (xy 118.92 66.724647) + (xy 118.698537 66.744022) + (xy 118.554949 66.782497) + (xy 118.489114 66.800137) + (xy 118.489112 66.800138) + (xy 118.483804 66.80156) + (xy 118.478823 66.803882) + (xy 118.478822 66.803883) + (xy 118.287311 66.893186) + (xy 118.287306 66.893189) + (xy 118.282324 66.895512) + (xy 118.277817 66.898668) + (xy 118.277815 66.898669) + (xy 118.10473 67.019864) + (xy 118.104727 67.019866) + (xy 118.100219 67.023023) + (xy 117.943023 67.180219) + (xy 117.939866 67.184727) + (xy 117.939864 67.18473) + (xy 117.828754 67.343412) + (xy 117.815512 67.362324) + (xy 117.813189 67.367306) + (xy 117.813186 67.367311) + (xy 117.764195 67.472373) + (xy 117.717277 67.525658) + (xy 117.649 67.545119) + (xy 117.58104 67.524577) + (xy 117.535805 67.472373) + (xy 117.486814 67.367311) + (xy 117.486811 67.367306) + (xy 117.484488 67.362324) + (xy 117.471246 67.343412) + (xy 117.360136 67.18473) + (xy 117.360134 67.184727) + (xy 117.356977 67.180219) + (xy 117.199781 67.023023) + (xy 117.195273 67.019866) + (xy 117.19527 67.019864) + (xy 117.113006 66.962262) + (xy 117.017677 66.895512) + (xy 117.012695 66.893189) + (xy 117.01269 66.893186) + (xy 116.821178 66.803883) + (xy 116.821177 66.803882) + (xy 116.816196 66.80156) + (xy 116.810888 66.800138) + (xy 116.810886 66.800137) + (xy 116.745051 66.782497) + (xy 116.601463 66.744022) + (xy 116.38 66.724647) + (xy 116.158537 66.744022) + (xy 116.014949 66.782497) + (xy 115.949114 66.800137) + (xy 115.949112 66.800138) + (xy 115.943804 66.80156) + (xy 115.938823 66.803882) + (xy 115.938822 66.803883) + (xy 115.747311 66.893186) + (xy 115.747306 66.893189) + (xy 115.742324 66.895512) + (xy 115.737817 66.898668) + (xy 115.737815 66.898669) + (xy 115.56473 67.019864) + (xy 115.564727 67.019866) + (xy 115.560219 67.023023) + (xy 115.403023 67.180219) + (xy 115.399866 67.184727) + (xy 115.399864 67.18473) + (xy 115.288754 67.343412) + (xy 115.275512 67.362324) + (xy 115.273189 67.367306) + (xy 115.273186 67.367311) + (xy 115.224195 67.472373) + (xy 115.177277 67.525658) + (xy 115.109 67.545119) + (xy 115.04104 67.524577) + (xy 114.995805 67.472373) + (xy 114.946814 67.367311) + (xy 114.946811 67.367306) + (xy 114.944488 67.362324) + (xy 114.931246 67.343412) + (xy 114.820136 67.18473) + (xy 114.820134 67.184727) + (xy 114.816977 67.180219) + (xy 114.659781 67.023023) + (xy 114.652229 67.017735) + (xy 114.651203 67.016452) + (xy 114.651057 67.016329) + (xy 114.651082 67.0163) + (xy 114.607901 66.962278) + (xy 114.5985 66.914522) + (xy 114.5985 60.90707) + (xy 114.599933 60.88812) + (xy 114.602099 60.873885) + (xy 114.602099 60.873881) + (xy 114.603199 60.866651) + (xy 114.598915 60.813982) + (xy 114.5985 60.803767) + (xy 114.5985 60.795707) + (xy 114.595211 60.767493) + (xy 114.594778 60.763118) + (xy 114.589454 60.697661) + (xy 114.589453 60.697658) + (xy 114.58886 60.690363) + (xy 114.586604 60.683399) + (xy 114.585413 60.67744) + (xy 114.584029 60.671585) + (xy 114.583182 60.664319) + (xy 114.558265 60.595673) + (xy 114.556848 60.591545) + (xy 114.536607 60.529064) + (xy 114.536606 60.529062) + (xy 114.534351 60.522101) + (xy 114.530555 60.515846) + (xy 114.528049 60.510372) + (xy 114.52533 60.504942) + (xy 114.522833 60.498063) + (xy 114.482814 60.437024) + (xy 114.480467 60.433305) + (xy 114.442595 60.370893) + (xy 114.435197 60.362516) + (xy 114.435224 60.362492) + (xy 114.432571 60.3595) + (xy 114.429868 60.356267) + (xy 114.425856 60.350148) + (xy 114.369617 60.296872) + (xy 114.367175 60.294494) + (xy 110.795405 56.722724) + (xy 110.761379 56.660412) + (xy 110.7585 56.633629) + (xy 110.7585 53.131867) + (xy 110.778502 53.063746) + (xy 110.812228 53.028655) + (xy 110.8443 53.006198) + (xy 111.006198 52.8443) + (xy 111.045502 52.788169) + (xy 111.134366 52.661257) + (xy 111.137523 52.656749) + (xy 111.139846 52.651767) + (xy 111.139849 52.651762) + (xy 111.231961 52.454225) + (xy 111.231961 52.454224) + (xy 111.234284 52.449243) + (xy 111.243067 52.416467) + (xy 111.292119 52.233402) + (xy 111.292119 52.2334) + (xy 111.293543 52.228087) + (xy 111.313498 52) + (xy 111.293543 51.771913) + (xy 111.265221 51.666213) + (xy 111.235707 51.556067) + (xy 111.235706 51.556065) + (xy 111.234284 51.550757) + (xy 111.213449 51.506076) + (xy 111.139849 51.348238) + (xy 111.139846 51.348233) + (xy 111.137523 51.343251) + (xy 111.053837 51.223735) + (xy 111.009357 51.160211) + (xy 111.009355 51.160208) + (xy 111.006198 51.1557) + (xy 110.8443 50.993802) + (xy 110.839792 50.990645) + (xy 110.839789 50.990643) + (xy 110.756072 50.932024) + (xy 110.656749 50.862477) + (xy 110.651767 50.860154) + (xy 110.651762 50.860151) + (xy 110.454225 50.768039) + (xy 110.454224 50.768039) + (xy 110.449243 50.765716) + (xy 110.443935 50.764294) + (xy 110.443933 50.764293) + (xy 110.233402 50.707881) + (xy 110.2334 50.707881) + (xy 110.228087 50.706457) + (xy 110 50.686502) + (xy 109.771913 50.706457) + (xy 109.7666 50.707881) + (xy 109.766598 50.707881) + (xy 109.556067 50.764293) + (xy 109.556065 50.764294) + (xy 109.550757 50.765716) + (xy 109.545776 50.768039) + (xy 109.545775 50.768039) + (xy 109.348238 50.860151) + (xy 109.348233 50.860154) + (xy 109.343251 50.862477) + (xy 109.243928 50.932024) + (xy 109.160211 50.990643) + (xy 109.160208 50.990645) + (xy 109.1557 50.993802) + (xy 108.993802 51.1557) + (xy 108.990645 51.160208) + (xy 108.990643 51.160211) + (xy 108.946163 51.223735) + (xy 108.862477 51.343251) + (xy 108.860154 51.348233) + (xy 108.860151 51.348238) + (xy 108.786551 51.506076) + (xy 108.765716 51.550757) + (xy 108.764294 51.556065) + (xy 108.764293 51.556067) + (xy 108.734779 51.666213) + (xy 108.706457 51.771913) + (xy 108.686502 52) + (xy 108.706457 52.228087) + (xy 108.707881 52.2334) + (xy 108.707881 52.233402) + (xy 108.756934 52.416467) + (xy 108.765716 52.449243) + (xy 108.768039 52.454224) + (xy 108.768039 52.454225) + (xy 108.860151 52.651762) + (xy 108.860154 52.651767) + (xy 108.862477 52.656749) + (xy 108.865634 52.661257) + (xy 108.954499 52.788169) + (xy 108.993802 52.8443) + (xy 109.1557 53.006198) + (xy 109.187771 53.028655) + (xy 109.232099 53.08411) + (xy 109.2415 53.131867) + (xy 109.2415 56.93293) + (xy 109.240067 56.95188) + (xy 109.236801 56.973349) + (xy 109.237394 56.980641) + (xy 109.237394 56.980644) + (xy 109.241085 57.026018) + (xy 109.2415 57.036233) + (xy 109.2415 57.044293) + (xy 109.241925 57.047937) + (xy 109.244789 57.072507) + (xy 109.245222 57.076882) + (xy 109.25114 57.149637) + (xy 109.253396 57.156601) + (xy 109.254587 57.16256) + (xy 109.255971 57.168415) + (xy 109.256818 57.175681) + (xy 109.281735 57.244327) + (xy 109.283152 57.248455) + (xy 109.305649 57.317899) + (xy 109.309445 57.324154) + (xy 109.311951 57.329628) + (xy 109.31467 57.335058) + (xy 109.317167 57.341937) + (xy 109.32118 57.348057) + (xy 109.32118 57.348058) + (xy 109.357186 57.402976) + (xy 109.359523 57.40668) + (xy 109.397405 57.469107) + (xy 109.401121 57.473315) + (xy 109.401122 57.473316) + (xy 109.404803 57.477484) + (xy 109.404776 57.477508) + (xy 109.407429 57.4805) + (xy 109.410132 57.483733) + (xy 109.414144 57.489852) + (xy 109.419456 57.494884) + (xy 109.470383 57.543128) + (xy 109.472825 57.545506) + (xy 113.044595 61.117276) + (xy 113.078621 61.179588) + (xy 113.0815 61.206371) + (xy 113.0815 66.914523) + (xy 113.061498 66.982644) + (xy 113.027771 67.017735) + (xy 113.020219 67.023023) + (xy 112.863023 67.180219) + (xy 112.859866 67.184727) + (xy 112.859864 67.18473) + (xy 112.748754 67.343412) + (xy 112.735512 67.362324) + (xy 112.733189 67.367306) + (xy 112.733186 67.367311) + (xy 112.683919 67.472965) + (xy 112.637001 67.52625) + (xy 112.568724 67.545711) + (xy 112.500764 67.525169) + (xy 112.455529 67.472965) + (xy 112.406377 67.367559) + (xy 112.400897 67.358068) + (xy 112.370206 67.314235) + (xy 112.359729 67.30586) + (xy 112.346282 67.312928) + (xy 111.672022 67.987188) + (xy 111.664408 68.001132) + (xy 111.664539 68.002965) + (xy 111.66879 68.00958) + (xy 112.347003 68.687793) + (xy 112.358777 68.694223) + (xy 112.370793 68.684926) + (xy 112.400897 68.641932) + (xy 112.406377 68.632441) + (xy 112.455529 68.527035) + (xy 112.502447 68.47375) + (xy 112.570724 68.454289) + (xy 112.638684 68.474831) + (xy 112.683919 68.527035) + (xy 112.733186 68.632689) + (xy 112.733189 68.632694) + (xy 112.735512 68.637676) + (xy 112.738668 68.642183) + (xy 112.738669 68.642185) + (xy 112.814735 68.750818) + (xy 112.863023 68.819781) + (xy 113.020219 68.976977) + (xy 113.024727 68.980134) + (xy 113.02473 68.980136) + (xy 113.070647 69.012287) + (xy 113.114975 69.067744) + (xy 113.122284 69.138363) + (xy 113.090253 69.201724) + (xy 113.029052 69.237709) + (xy 112.998376 69.2415) + (xy 112.110866 69.2415) + (xy 112.042745 69.221498) + (xy 111.996252 69.167842) + (xy 111.986148 69.097568) + (xy 111.993268 69.081123) + (xy 111.995261 69.061863) + (xy 111.987071 69.046281) + (xy 111.312812 68.372022) + (xy 111.298868 68.364408) + (xy 111.297035 68.364539) + (xy 111.29042 68.36879) + (xy 110.612207 69.047003) + (xy 110.604593 69.060947) + (xy 110.605882 69.078972) + (xy 110.615875 69.104521) + (xy 110.601885 69.174125) + (xy 110.552484 69.225117) + (xy 110.490354 69.2415) + (xy 109.601624 69.2415) + (xy 109.533503 69.221498) + (xy 109.48701 69.167842) + (xy 109.476906 69.097568) + (xy 109.5064 69.032988) + (xy 109.529353 69.012287) + (xy 109.57527 68.980136) + (xy 109.575273 68.980134) + (xy 109.579781 68.976977) + (xy 109.736977 68.819781) + (xy 109.785266 68.750818) + (xy 109.861331 68.642185) + (xy 109.861332 68.642183) + (xy 109.864488 68.637676) + (xy 109.866811 68.632694) + (xy 109.866814 68.632689) + (xy 109.916081 68.527035) + (xy 109.962999 68.47375) + (xy 110.031276 68.454289) + (xy 110.099236 68.474831) + (xy 110.144471 68.527035) + (xy 110.193623 68.632441) + (xy 110.199103 68.641932) + (xy 110.229794 68.685765) + (xy 110.240271 68.69414) + (xy 110.253718 68.687072) + (xy 110.927978 68.012812) + (xy 110.935592 67.998868) + (xy 110.935461 67.997035) + (xy 110.93121 67.99042) + (xy 110.252997 67.312207) + (xy 110.241223 67.305777) + (xy 110.229207 67.315074) + (xy 110.199103 67.358068) + (xy 110.193623 67.367559) + (xy 110.144471 67.472965) + (xy 110.097553 67.52625) + (xy 110.029276 67.545711) + (xy 109.961316 67.525169) + (xy 109.916081 67.472965) + (xy 109.866814 67.367311) + (xy 109.866811 67.367306) + (xy 109.864488 67.362324) + (xy 109.851246 67.343412) + (xy 109.740136 67.18473) + (xy 109.740134 67.184727) + (xy 109.736977 67.180219) + (xy 109.579781 67.023023) + (xy 109.575273 67.019866) + (xy 109.57527 67.019864) + (xy 109.493006 66.962262) + (xy 109.4616 66.940271) + (xy 110.60586 66.940271) + (xy 110.612928 66.953718) + (xy 111.287188 67.627978) + (xy 111.301132 67.635592) + (xy 111.302965 67.635461) + (xy 111.30958 67.63121) + (xy 111.987793 66.952997) + (xy 111.994223 66.941223) + (xy 111.984926 66.929207) + (xy 111.941931 66.899102) + (xy 111.932445 66.893624) + (xy 111.741007 66.804355) + (xy 111.730715 66.800609) + (xy 111.526691 66.745941) + (xy 111.515896 66.744038) + (xy 111.305475 66.725628) + (xy 111.294525 66.725628) + (xy 111.084104 66.744038) + (xy 111.073309 66.745941) + (xy 110.869285 66.800609) + (xy 110.858993 66.804355) + (xy 110.667559 66.893623) + (xy 110.658068 66.899103) + (xy 110.614235 66.929794) + (xy 110.60586 66.940271) + (xy 109.4616 66.940271) + (xy 109.397677 66.895512) + (xy 109.392695 66.893189) + (xy 109.39269 66.893186) + (xy 109.201178 66.803883) + (xy 109.201177 66.803882) + (xy 109.196196 66.80156) + (xy 109.190888 66.800138) + (xy 109.190886 66.800137) + (xy 109.125051 66.782497) + (xy 108.981463 66.744022) + (xy 108.76 66.724647) + (xy 108.538537 66.744022) + (xy 108.394949 66.782497) + (xy 108.329114 66.800137) + (xy 108.329112 66.800138) + (xy 108.323804 66.80156) + (xy 108.318823 66.803882) + (xy 108.318822 66.803883) + (xy 108.127311 66.893186) + (xy 108.127306 66.893189) + (xy 108.122324 66.895512) + (xy 108.117817 66.898668) + (xy 108.117815 66.898669) + (xy 107.94473 67.019864) + (xy 107.944727 67.019866) + (xy 107.940219 67.023023) + (xy 107.783023 67.180219) + (xy 107.779866 67.184727) + (xy 107.779864 67.18473) + (xy 107.668754 67.343412) + (xy 107.655512 67.362324) + (xy 107.653189 67.367306) + (xy 107.653186 67.367311) + (xy 107.604195 67.472373) + (xy 107.557277 67.525658) + (xy 107.489 67.545119) + (xy 107.42104 67.524577) + (xy 107.375805 67.472373) + (xy 107.326814 67.367311) + (xy 107.326811 67.367306) + (xy 107.324488 67.362324) + (xy 107.311246 67.343412) + (xy 107.200136 67.18473) + (xy 107.200134 67.184727) + (xy 107.196977 67.180219) + (xy 107.039781 67.023023) + (xy 107.035273 67.019866) + (xy 107.03527 67.019864) + (xy 106.953006 66.962262) + (xy 106.857677 66.895512) + (xy 106.852695 66.893189) + (xy 106.85269 66.893186) + (xy 106.661178 66.803883) + (xy 106.661177 66.803882) + (xy 106.656196 66.80156) + (xy 106.650888 66.800138) + (xy 106.650886 66.800137) + (xy 106.585051 66.782497) + (xy 106.441463 66.744022) + (xy 106.22 66.724647) + (xy 105.998537 66.744022) + (xy 105.854949 66.782497) + (xy 105.789114 66.800137) + (xy 105.789112 66.800138) + (xy 105.783804 66.80156) + (xy 105.778823 66.803882) + (xy 105.778822 66.803883) + (xy 105.587311 66.893186) + (xy 105.587306 66.893189) + (xy 105.582324 66.895512) + (xy 105.577817 66.898668) + (xy 105.577815 66.898669) + (xy 105.40473 67.019864) + (xy 105.404727 67.019866) + (xy 105.400219 67.023023) + (xy 105.243023 67.180219) + (xy 105.239866 67.184727) + (xy 105.239864 67.18473) + (xy 105.128754 67.343412) + (xy 105.115512 67.362324) + (xy 105.113189 67.367306) + (xy 105.113186 67.367311) + (xy 105.057802 67.486082) + (xy 105.02156 67.563804) + (xy 104.964022 67.778537) + (xy 104.944647 68) + (xy 104.964022 68.221463) + (xy 105.02156 68.436196) + (xy 105.023882 68.441177) + (xy 105.023883 68.441178) + (xy 105.113186 68.632689) + (xy 105.113189 68.632694) + (xy 105.115512 68.637676) + (xy 105.118668 68.642183) + (xy 105.118669 68.642185) + (xy 105.194735 68.750818) + (xy 105.243023 68.819781) + (xy 105.400219 68.976977) + (xy 105.404727 68.980134) + (xy 105.40473 68.980136) + (xy 105.450647 69.012287) + (xy 105.494975 69.067744) + (xy 105.502284 69.138363) + (xy 105.470253 69.201724) + (xy 105.409052 69.237709) + (xy 105.378376 69.2415) + (xy 90.366371 69.2415) + (xy 90.29825 69.221498) + (xy 90.277276 69.204595) + (xy 86.43055 65.357869) + (xy 89.886689 65.357869) + (xy 89.903238 65.644883) + (xy 89.904063 65.649088) + (xy 89.904064 65.649096) + (xy 89.922198 65.741525) + (xy 89.958586 65.926995) + (xy 89.959973 65.931045) + (xy 89.959974 65.93105) + (xy 90.050321 66.19493) + (xy 90.05171 66.198986) + (xy 90.053637 66.202817) + (xy 90.17031 66.434795) + (xy 90.180885 66.455822) + (xy 90.343721 66.69275) + (xy 90.346608 66.695923) + (xy 90.346609 66.695924) + (xy 90.531092 66.898669) + (xy 90.537206 66.905388) + (xy 90.540501 66.908143) + (xy 90.540502 66.908144) + (xy 90.677897 67.023023) + (xy 90.757759 67.089798) + (xy 91.001298 67.242571) + (xy 91.263318 67.360877) + (xy 91.267437 67.362097) + (xy 91.534857 67.441311) + (xy 91.534862 67.441312) + (xy 91.53897 67.442529) + (xy 91.543204 67.443177) + (xy 91.543209 67.443178) + (xy 91.791811 67.481219) + (xy 91.823153 67.486015) + (xy 91.969485 67.488314) + (xy 92.106317 67.490464) + (xy 92.106323 67.490464) + (xy 92.110608 67.490531) + (xy 92.11486 67.490016) + (xy 92.114868 67.490016) + (xy 92.391756 67.456508) + (xy 92.391761 67.456507) + (xy 92.396017 67.455992) + (xy 92.492602 67.430653) + (xy 92.669954 67.384126) + (xy 92.669955 67.384126) + (xy 92.674097 67.383039) + (xy 92.939704 67.273021) + (xy 93.094858 67.182356) + (xy 93.184219 67.130138) + (xy 93.18422 67.130137) + (xy 93.187922 67.127974) + (xy 93.414159 66.950582) + (xy 93.455285 66.908144) + (xy 93.560853 66.799206) + (xy 93.614227 66.744128) + (xy 93.61676 66.74068) + (xy 93.616764 66.740675) + (xy 93.781887 66.515886) + (xy 93.784425 66.512431) + (xy 93.826578 66.434795) + (xy 93.919554 66.263555) + (xy 93.919555 66.263553) + (xy 93.921604 66.259779) + (xy 94.023225 65.990848) + (xy 94.049279 65.877091) + (xy 94.086449 65.714797) + (xy 94.08645 65.714793) + (xy 94.087407 65.710613) + (xy 94.112963 65.42426) + (xy 94.113427 65.38) + (xy 94.10121 65.200794) + (xy 94.094165 65.097452) + (xy 94.094164 65.097446) + (xy 94.093873 65.093175) + (xy 94.089336 65.071264) + (xy 94.041554 64.840536) + (xy 94.035574 64.811658) + (xy 93.939607 64.540657) + (xy 93.80775 64.285188) + (xy 93.794488 64.266317) + (xy 93.644904 64.053482) + (xy 93.642441 64.049977) + (xy 93.49071 63.886695) + (xy 93.449661 63.842521) + (xy 93.449658 63.842519) + (xy 93.44674 63.839378) + (xy 93.224268 63.657287) + (xy 92.979142 63.507073) + (xy 92.961048 63.49913) + (xy 92.71983 63.393243) + (xy 92.715898 63.391517) + (xy 92.689963 63.384129) + (xy 92.443534 63.313932) + (xy 92.443535 63.313932) + (xy 92.439406 63.312756) + (xy 92.226704 63.282485) + (xy 92.159036 63.272854) + (xy 92.159034 63.272854) + (xy 92.154784 63.272249) + (xy 92.150495 63.272227) + (xy 92.150488 63.272226) + (xy 91.871583 63.270765) + (xy 91.871576 63.270765) + (xy 91.867297 63.270743) + (xy 91.863053 63.271302) + (xy 91.863049 63.271302) + (xy 91.73766 63.28781) + (xy 91.582266 63.308268) + (xy 91.578126 63.309401) + (xy 91.578124 63.309401) + (xy 91.501311 63.330415) + (xy 91.304964 63.384129) + (xy 91.301016 63.385813) + (xy 91.044476 63.495237) + (xy 91.044472 63.495239) + (xy 91.040524 63.496923) + (xy 90.91596 63.571473) + (xy 90.797521 63.642357) + (xy 90.797517 63.64236) + (xy 90.793839 63.644561) + (xy 90.569472 63.824313) + (xy 90.371577 64.032851) + (xy 90.203814 64.266317) + (xy 90.069288 64.520392) + (xy 90.067813 64.524423) + (xy 89.982666 64.757099) + (xy 89.970489 64.790373) + (xy 89.909245 65.071264) + (xy 89.886689 65.357869) + (xy 86.43055 65.357869) + (xy 74.152681 53.08) + (xy 84.686502 53.08) + (xy 84.706457 53.308087) + (xy 84.707881 53.3134) + (xy 84.707881 53.313402) + (xy 84.757867 53.499949) + (xy 84.765716 53.529243) + (xy 84.768039 53.534224) + (xy 84.768039 53.534225) + (xy 84.860151 53.731762) + (xy 84.860154 53.731767) + (xy 84.862477 53.736749) + (xy 84.993802 53.9243) + (xy 85.1557 54.086198) + (xy 85.160208 54.089355) + (xy 85.160211 54.089357) + (xy 85.194567 54.113413) + (xy 85.343251 54.217523) + (xy 85.348233 54.219846) + (xy 85.348238 54.219849) + (xy 85.545775 54.311961) + (xy 85.550757 54.314284) + (xy 85.556065 54.315706) + (xy 85.556067 54.315707) + (xy 85.766598 54.372119) + (xy 85.7666 54.372119) + (xy 85.771913 54.373543) + (xy 86 54.393498) + (xy 86.228087 54.373543) + (xy 86.2334 54.372119) + (xy 86.233402 54.372119) + (xy 86.443933 54.315707) + (xy 86.443935 54.315706) + (xy 86.449243 54.314284) + (xy 86.454225 54.311961) + (xy 86.651762 54.219849) + (xy 86.651767 54.219846) + (xy 86.656749 54.217523) + (xy 86.805433 54.113413) + (xy 86.839789 54.089357) + (xy 86.839792 54.089355) + (xy 86.8443 54.086198) + (xy 87.006198 53.9243) + (xy 87.137523 53.736749) + (xy 87.139846 53.731767) + (xy 87.139849 53.731762) + (xy 87.231961 53.534225) + (xy 87.231961 53.534224) + (xy 87.234284 53.529243) + (xy 87.242134 53.499949) + (xy 87.292119 53.313402) + (xy 87.292119 53.3134) + (xy 87.293543 53.308087) + (xy 87.313498 53.08) + (xy 90.686502 53.08) + (xy 90.706457 53.308087) + (xy 90.707881 53.3134) + (xy 90.707881 53.313402) + (xy 90.757867 53.499949) + (xy 90.765716 53.529243) + (xy 90.768039 53.534224) + (xy 90.768039 53.534225) + (xy 90.860151 53.731762) + (xy 90.860154 53.731767) + (xy 90.862477 53.736749) + (xy 90.993802 53.9243) + (xy 91.1557 54.086198) + (xy 91.160208 54.089355) + (xy 91.160211 54.089357) + (xy 91.194567 54.113413) + (xy 91.343251 54.217523) + (xy 91.348233 54.219846) + (xy 91.348238 54.219849) + (xy 91.545775 54.311961) + (xy 91.550757 54.314284) + (xy 91.556065 54.315706) + (xy 91.556067 54.315707) + (xy 91.766598 54.372119) + (xy 91.7666 54.372119) + (xy 91.771913 54.373543) + (xy 92 54.393498) + (xy 92.228087 54.373543) + (xy 92.2334 54.372119) + (xy 92.233402 54.372119) + (xy 92.443933 54.315707) + (xy 92.443935 54.315706) + (xy 92.449243 54.314284) + (xy 92.454225 54.311961) + (xy 92.651762 54.219849) + (xy 92.651767 54.219846) + (xy 92.656749 54.217523) + (xy 92.805433 54.113413) + (xy 92.839789 54.089357) + (xy 92.839792 54.089355) + (xy 92.8443 54.086198) + (xy 93.006198 53.9243) + (xy 93.137523 53.736749) + (xy 93.139846 53.731767) + (xy 93.139849 53.731762) + (xy 93.231961 53.534225) + (xy 93.231961 53.534224) + (xy 93.234284 53.529243) + (xy 93.242134 53.499949) + (xy 93.292119 53.313402) + (xy 93.292119 53.3134) + (xy 93.293543 53.308087) + (xy 93.313498 53.08) + (xy 93.293543 52.851913) + (xy 93.291503 52.8443) + (xy 93.235707 52.636067) + (xy 93.235706 52.636065) + (xy 93.234284 52.630757) + (xy 93.231961 52.625775) + (xy 93.139849 52.428238) + (xy 93.139846 52.428233) + (xy 93.137523 52.423251) + (xy 93.006198 52.2357) + (xy 92.8443 52.073802) + (xy 92.839792 52.070645) + (xy 92.839789 52.070643) + (xy 92.668962 51.951029) + (xy 92.656749 51.942477) + (xy 92.651767 51.940154) + (xy 92.651762 51.940151) + (xy 92.454225 51.848039) + (xy 92.454224 51.848039) + (xy 92.449243 51.845716) + (xy 92.443935 51.844294) + (xy 92.443933 51.844293) + (xy 92.233402 51.787881) + (xy 92.2334 51.787881) + (xy 92.228087 51.786457) + (xy 92 51.766502) + (xy 91.771913 51.786457) + (xy 91.7666 51.787881) + (xy 91.766598 51.787881) + (xy 91.556067 51.844293) + (xy 91.556065 51.844294) + (xy 91.550757 51.845716) + (xy 91.545776 51.848039) + (xy 91.545775 51.848039) + (xy 91.348238 51.940151) + (xy 91.348233 51.940154) + (xy 91.343251 51.942477) + (xy 91.331038 51.951029) + (xy 91.160211 52.070643) + (xy 91.160208 52.070645) + (xy 91.1557 52.073802) + (xy 90.993802 52.2357) + (xy 90.862477 52.423251) + (xy 90.860154 52.428233) + (xy 90.860151 52.428238) + (xy 90.768039 52.625775) + (xy 90.765716 52.630757) + (xy 90.764294 52.636065) + (xy 90.764293 52.636067) + (xy 90.708497 52.8443) + (xy 90.706457 52.851913) + (xy 90.686502 53.08) + (xy 87.313498 53.08) + (xy 87.293543 52.851913) + (xy 87.291503 52.8443) + (xy 87.235707 52.636067) + (xy 87.235706 52.636065) + (xy 87.234284 52.630757) + (xy 87.231961 52.625775) + (xy 87.139849 52.428238) + (xy 87.139846 52.428233) + (xy 87.137523 52.423251) + (xy 87.006198 52.2357) + (xy 86.8443 52.073802) + (xy 86.839792 52.070645) + (xy 86.839789 52.070643) + (xy 86.668962 51.951029) + (xy 86.656749 51.942477) + (xy 86.651767 51.940154) + (xy 86.651762 51.940151) + (xy 86.454225 51.848039) + (xy 86.454224 51.848039) + (xy 86.449243 51.845716) + (xy 86.443935 51.844294) + (xy 86.443933 51.844293) + (xy 86.233402 51.787881) + (xy 86.2334 51.787881) + (xy 86.228087 51.786457) + (xy 86 51.766502) + (xy 85.771913 51.786457) + (xy 85.7666 51.787881) + (xy 85.766598 51.787881) + (xy 85.556067 51.844293) + (xy 85.556065 51.844294) + (xy 85.550757 51.845716) + (xy 85.545776 51.848039) + (xy 85.545775 51.848039) + (xy 85.348238 51.940151) + (xy 85.348233 51.940154) + (xy 85.343251 51.942477) + (xy 85.331038 51.951029) + (xy 85.160211 52.070643) + (xy 85.160208 52.070645) + (xy 85.1557 52.073802) + (xy 84.993802 52.2357) + (xy 84.862477 52.423251) + (xy 84.860154 52.428233) + (xy 84.860151 52.428238) + (xy 84.768039 52.625775) + (xy 84.765716 52.630757) + (xy 84.764294 52.636065) + (xy 84.764293 52.636067) + (xy 84.708497 52.8443) + (xy 84.706457 52.851913) + (xy 84.686502 53.08) + (xy 74.152681 53.08) + (xy 69.715405 48.642724) + (xy 69.681379 48.580412) + (xy 69.6785 48.553629) + (xy 69.6785 48.088434) + (xy 74.786661 48.088434) + (xy 74.786833 48.091829) + (xy 74.786833 48.09183) + (xy 74.800801 48.367559) + (xy 74.804792 48.44634) + (xy 74.805329 48.449695) + (xy 74.80533 48.449701) + (xy 74.83821 48.654979) + (xy 74.86147 48.800195) + (xy 74.956033 49.145859) + (xy 75.025801 49.322976) + (xy 75.085852 49.475423) + (xy 75.087374 49.479288) + (xy 75.107085 49.516831) + (xy 75.206834 49.706825) + (xy 75.253957 49.796582) + (xy 75.255858 49.799411) + (xy 75.255864 49.799421) + (xy 75.430785 50.059729) + (xy 75.453834 50.094029) + (xy 75.684665 50.36815) + (xy 75.943751 50.615738) + (xy 76.228061 50.833897) + (xy 76.260056 50.85335) + (xy 76.531355 51.018303) + (xy 76.53136 51.018306) + (xy 76.53427 51.020075) + (xy 76.537358 51.021521) + (xy 76.537357 51.021521) + (xy 76.85571 51.170649) + (xy 76.85572 51.170653) + (xy 76.858794 51.172093) + (xy 76.862012 51.173195) + (xy 76.862015 51.173196) + (xy 77.194615 51.287071) + (xy 77.194623 51.287073) + (xy 77.197838 51.288174) + (xy 77.547435 51.366959) + (xy 77.599728 51.372917) + (xy 77.900114 51.407142) + (xy 77.900122 51.407142) + (xy 77.903497 51.407527) + (xy 77.906901 51.407545) + (xy 77.906904 51.407545) + (xy 78.101227 51.408562) + (xy 78.261857 51.409403) + (xy 78.265243 51.409053) + (xy 78.265245 51.409053) + (xy 78.614932 51.372917) + (xy 78.614941 51.372916) + (xy 78.618324 51.372566) + (xy 78.621657 51.371852) + (xy 78.62166 51.371851) + (xy 78.851613 51.322553) + (xy 78.968727 51.297446) + (xy 79.308968 51.184922) + (xy 79.635066 51.036311) + (xy 79.803581 50.936254) + (xy 79.940262 50.855099) + (xy 79.940267 50.855096) + (xy 79.943207 50.85335) + (xy 79.97194 50.831777) + (xy 80.059924 50.765716) + (xy 80.229786 50.63818) + (xy 80.491451 50.393319) + (xy 80.72514 50.12163) + (xy 80.871402 49.908817) + (xy 80.92619 49.829101) + (xy 80.926195 49.829094) + (xy 80.92812 49.826292) + (xy 80.929732 49.823298) + (xy 80.929737 49.82329) + (xy 81.085618 49.533787) + (xy 81.098017 49.51076) + (xy 81.186768 49.292191) + (xy 81.231562 49.181877) + (xy 81.231564 49.181872) + (xy 81.232842 49.178724) + (xy 81.23498 49.171221) + (xy 81.266324 49.061187) + (xy 81.33102 48.83407) + (xy 81.340464 48.77882) + (xy 81.390829 48.484175) + (xy 81.390829 48.484173) + (xy 81.391401 48.480828) + (xy 81.391919 48.472373) + (xy 81.413168 48.124928) + (xy 81.413278 48.123131) + (xy 81.413359 48.1) + (xy 81.393979 47.742159) + (xy 81.336066 47.388505) + (xy 81.240297 47.043173) + (xy 81.238679 47.039105) + (xy 81.127012 46.7585) + (xy 81.107793 46.710205) + (xy 81.068111 46.635259) + (xy 80.941702 46.396513) + (xy 80.941698 46.396506) + (xy 80.940103 46.393494) + (xy 80.73919 46.096746) + (xy 80.714468 46.067594) + (xy 80.643506 45.983919) + (xy 80.507403 45.823432) + (xy 80.266759 45.59507) + (xy 80.249921 45.579091) + (xy 80.24992 45.57909) + (xy 80.247454 45.57675) + (xy 79.962384 45.359585) + (xy 79.959472 45.357828) + (xy 79.959467 45.357825) + (xy 79.658443 45.176236) + (xy 79.658437 45.176233) + (xy 79.655528 45.174478) + (xy 79.330475 45.023593) + (xy 79.057573 44.931221) + (xy 78.994255 44.909789) + (xy 78.99425 44.909788) + (xy 78.991028 44.908697) + (xy 78.739473 44.852928) + (xy 78.644493 44.831871) + (xy 78.644487 44.83187) + (xy 78.641158 44.831132) + (xy 78.637769 44.830758) + (xy 78.637764 44.830757) + (xy 78.288338 44.79218) + (xy 78.288333 44.79218) + (xy 78.284957 44.791807) + (xy 78.281558 44.791801) + (xy 78.281557 44.791801) + (xy 78.11208 44.791505) + (xy 77.926592 44.791182) + (xy 77.826993 44.801826) + (xy 77.573639 44.828901) + (xy 77.573631 44.828902) + (xy 77.570256 44.829263) + (xy 77.220117 44.905606) + (xy 76.880271 45.019317) + (xy 76.877178 45.020739) + (xy 76.877177 45.02074) + (xy 76.870974 45.023593) + (xy 76.554694 45.169066) + (xy 76.55176 45.170822) + (xy 76.551758 45.170823) + (xy 76.291856 45.326371) + (xy 76.247193 45.353101) + (xy 76.244467 45.355163) + (xy 76.244465 45.355164) + (xy 75.977226 45.557276) + (xy 75.961367 45.56927) + (xy 75.958882 45.571612) + (xy 75.958877 45.571616) + (xy 75.894327 45.632445) + (xy 75.700559 45.815043) + (xy 75.467819 46.087546) + (xy 75.4659 46.090358) + (xy 75.465897 46.090363) + (xy 75.451696 46.111181) + (xy 75.265871 46.383591) + (xy 75.097077 46.699714) + (xy 74.963411 47.032218) + (xy 74.962491 47.035492) + (xy 74.962489 47.035497) + (xy 74.892729 47.283678) + (xy 74.866437 47.377213) + (xy 74.865875 47.38057) + (xy 74.865875 47.380571) + (xy 74.823733 47.632406) + (xy 74.80729 47.730663) + (xy 74.786661 48.088434) + (xy 69.6785 48.088434) + (xy 69.6785 44.051867) + (xy 69.691949 44.006062) + (xy 85.278493 44.006062) + (xy 85.287789 44.018077) + (xy 85.338994 44.053931) + (xy 85.348489 44.059414) + (xy 85.545947 44.15149) + (xy 85.556239 44.155236) + (xy 85.766688 44.211625) + (xy 85.777481 44.213528) + (xy 85.994525 44.232517) + (xy 86.005475 44.232517) + (xy 86.222519 44.213528) + (xy 86.233312 44.211625) + (xy 86.443761 44.155236) + (xy 86.454053 44.15149) + (xy 86.651511 44.059414) + (xy 86.661006 44.053931) + (xy 86.713048 44.017491) + (xy 86.721424 44.007012) + (xy 86.720925 44.006062) + (xy 91.278493 44.006062) + (xy 91.287789 44.018077) + (xy 91.338994 44.053931) + (xy 91.348489 44.059414) + (xy 91.545947 44.15149) + (xy 91.556239 44.155236) + (xy 91.766688 44.211625) + (xy 91.777481 44.213528) + (xy 91.994525 44.232517) + (xy 92.005475 44.232517) + (xy 92.222519 44.213528) + (xy 92.233312 44.211625) + (xy 92.443761 44.155236) + (xy 92.454053 44.15149) + (xy 92.651511 44.059414) + (xy 92.661006 44.053931) + (xy 92.713048 44.017491) + (xy 92.721424 44.007012) + (xy 92.714356 43.993566) + (xy 92.012812 43.292022) + (xy 91.998868 43.284408) + (xy 91.997035 43.284539) + (xy 91.99042 43.28879) + (xy 91.284923 43.994287) + (xy 91.278493 44.006062) + (xy 86.720925 44.006062) + (xy 86.714356 43.993566) + (xy 86.012812 43.292022) + (xy 85.998868 43.284408) + (xy 85.997035 43.284539) + (xy 85.99042 43.28879) + (xy 85.284923 43.994287) + (xy 85.278493 44.006062) + (xy 69.691949 44.006062) + (xy 69.698502 43.983746) + (xy 69.732228 43.948655) + (xy 69.7643 43.926198) + (xy 69.926198 43.7643) + (xy 69.92937 43.759771) + (xy 70.054366 43.581257) + (xy 70.057523 43.576749) + (xy 70.059846 43.571767) + (xy 70.059849 43.571762) + (xy 70.151961 43.374225) + (xy 70.151961 43.374224) + (xy 70.154284 43.369243) + (xy 70.174976 43.292022) + (xy 70.212119 43.153402) + (xy 70.212119 43.1534) + (xy 70.213543 43.148087) + (xy 70.233019 42.925475) + (xy 84.687483 42.925475) + (xy 84.706472 43.142519) + (xy 84.708375 43.153312) + (xy 84.764764 43.363761) + (xy 84.76851 43.374053) + (xy 84.860586 43.571511) + (xy 84.866069 43.581006) + (xy 84.902509 43.633048) + (xy 84.912988 43.641424) + (xy 84.926434 43.634356) + (xy 85.627978 42.932812) + (xy 85.634356 42.921132) + (xy 86.364408 42.921132) + (xy 86.364539 42.922965) + (xy 86.36879 42.92958) + (xy 87.074287 43.635077) + (xy 87.086062 43.641507) + (xy 87.098077 43.632211) + (xy 87.133931 43.581006) + (xy 87.139414 43.571511) + (xy 87.23149 43.374053) + (xy 87.235236 43.363761) + (xy 87.291625 43.153312) + (xy 87.293528 43.142519) + (xy 87.312517 42.925475) + (xy 90.687483 42.925475) + (xy 90.706472 43.142519) + (xy 90.708375 43.153312) + (xy 90.764764 43.363761) + (xy 90.76851 43.374053) + (xy 90.860586 43.571511) + (xy 90.866069 43.581006) + (xy 90.902509 43.633048) + (xy 90.912988 43.641424) + (xy 90.926434 43.634356) + (xy 91.627978 42.932812) + (xy 91.634356 42.921132) + (xy 92.364408 42.921132) + (xy 92.364539 42.922965) + (xy 92.36879 42.92958) + (xy 93.074287 43.635077) + (xy 93.086062 43.641507) + (xy 93.098077 43.632211) + (xy 93.133931 43.581006) + (xy 93.139414 43.571511) + (xy 93.23149 43.374053) + (xy 93.235236 43.363761) + (xy 93.291625 43.153312) + (xy 93.293528 43.142519) + (xy 93.312517 42.925475) + (xy 93.312517 42.914525) + (xy 93.293528 42.697481) + (xy 93.291625 42.686688) + (xy 93.235236 42.476239) + (xy 93.23149 42.465947) + (xy 93.139414 42.268489) + (xy 93.133931 42.258994) + (xy 93.097491 42.206952) + (xy 93.087012 42.198576) + (xy 93.073566 42.205644) + (xy 92.372022 42.907188) + (xy 92.364408 42.921132) + (xy 91.634356 42.921132) + (xy 91.635592 42.918868) + (xy 91.635461 42.917035) + (xy 91.63121 42.91042) + (xy 90.925713 42.204923) + (xy 90.913938 42.198493) + (xy 90.901923 42.207789) + (xy 90.866069 42.258994) + (xy 90.860586 42.268489) + (xy 90.76851 42.465947) + (xy 90.764764 42.476239) + (xy 90.708375 42.686688) + (xy 90.706472 42.697481) + (xy 90.687483 42.914525) + (xy 90.687483 42.925475) + (xy 87.312517 42.925475) + (xy 87.312517 42.914525) + (xy 87.293528 42.697481) + (xy 87.291625 42.686688) + (xy 87.235236 42.476239) + (xy 87.23149 42.465947) + (xy 87.139414 42.268489) + (xy 87.133931 42.258994) + (xy 87.097491 42.206952) + (xy 87.087012 42.198576) + (xy 87.073566 42.205644) + (xy 86.372022 42.907188) + (xy 86.364408 42.921132) + (xy 85.634356 42.921132) + (xy 85.635592 42.918868) + (xy 85.635461 42.917035) + (xy 85.63121 42.91042) + (xy 84.925713 42.204923) + (xy 84.913938 42.198493) + (xy 84.901923 42.207789) + (xy 84.866069 42.258994) + (xy 84.860586 42.268489) + (xy 84.76851 42.465947) + (xy 84.764764 42.476239) + (xy 84.708375 42.686688) + (xy 84.706472 42.697481) + (xy 84.687483 42.914525) + (xy 84.687483 42.925475) + (xy 70.233019 42.925475) + (xy 70.233498 42.92) + (xy 70.213543 42.691913) + (xy 70.176981 42.555461) + (xy 70.155707 42.476067) + (xy 70.155706 42.476065) + (xy 70.154284 42.470757) + (xy 70.151961 42.465775) + (xy 70.059849 42.268238) + (xy 70.059846 42.268233) + (xy 70.057523 42.263251) + (xy 69.926198 42.0757) + (xy 69.7643 41.913802) + (xy 69.732229 41.891345) + (xy 69.687901 41.83589) + (xy 69.68733 41.832988) + (xy 85.278576 41.832988) + (xy 85.285644 41.846434) + (xy 85.987188 42.547978) + (xy 86.001132 42.555592) + (xy 86.002965 42.555461) + (xy 86.00958 42.55121) + (xy 86.715077 41.845713) + (xy 86.721507 41.833938) + (xy 86.720772 41.832988) + (xy 91.278576 41.832988) + (xy 91.285644 41.846434) + (xy 91.987188 42.547978) + (xy 92.001132 42.555592) + (xy 92.002965 42.555461) + (xy 92.00958 42.55121) + (xy 92.715077 41.845713) + (xy 92.721507 41.833938) + (xy 92.712211 41.821923) + (xy 92.661006 41.786069) + (xy 92.651511 41.780586) + (xy 92.454053 41.68851) + (xy 92.443761 41.684764) + (xy 92.233312 41.628375) + (xy 92.222519 41.626472) + (xy 92.005475 41.607483) + (xy 91.994525 41.607483) + (xy 91.777481 41.626472) + (xy 91.766688 41.628375) + (xy 91.556239 41.684764) + (xy 91.545947 41.68851) + (xy 91.348489 41.780586) + (xy 91.338994 41.786069) + (xy 91.286952 41.822509) + (xy 91.278576 41.832988) + (xy 86.720772 41.832988) + (xy 86.712211 41.821923) + (xy 86.661006 41.786069) + (xy 86.651511 41.780586) + (xy 86.454053 41.68851) + (xy 86.443761 41.684764) + (xy 86.233312 41.628375) + (xy 86.222519 41.626472) + (xy 86.005475 41.607483) + (xy 85.994525 41.607483) + (xy 85.777481 41.626472) + (xy 85.766688 41.628375) + (xy 85.556239 41.684764) + (xy 85.545947 41.68851) + (xy 85.348489 41.780586) + (xy 85.338994 41.786069) + (xy 85.286952 41.822509) + (xy 85.278576 41.832988) + (xy 69.68733 41.832988) + (xy 69.6785 41.788133) + (xy 69.6785 39.961306) + (xy 69.698502 39.893185) + (xy 69.709683 39.879298) + (xy 69.709596 39.879229) + (xy 69.714134 39.873483) + (xy 69.719305 39.868303) + (xy 69.761765 39.799421) + (xy 69.808275 39.723968) + (xy 69.808276 39.723966) + (xy 69.812115 39.717738) + (xy 69.849326 39.60555) + (xy 69.865632 39.556389) + (xy 69.865632 39.556387) + (xy 69.867797 39.549861) + (xy 69.8785 39.4454) + (xy 69.8785 38.3946) + (xy 69.878163 38.39135) + (xy 69.868238 38.295692) + (xy 69.868237 38.295688) + (xy 69.867526 38.288834) + (xy 69.850289 38.237167) + (xy 69.813868 38.128002) + (xy 69.81155 38.121054) + (xy 69.718478 37.970652) + (xy 69.593303 37.845695) + (xy 69.587072 37.841854) + (xy 69.448968 37.756725) + (xy 69.448966 37.756724) + (xy 69.442738 37.752885) + (xy 69.282254 37.699655) + (xy 69.281389 37.699368) + (xy 69.281387 37.699368) + (xy 69.274861 37.697203) + (xy 69.268025 37.696503) + (xy 69.268022 37.696502) + (xy 69.224969 37.692091) + (xy 69.1704 37.6865) + (xy 68.5696 37.6865) + (xy 68.566354 37.686837) + (xy 68.56635 37.686837) + (xy 68.470692 37.696762) + (xy 68.470688 37.696763) + (xy 68.463834 37.697474) + (xy 68.457298 37.699655) + (xy 68.457296 37.699655) + (xy 68.374441 37.727298) + (xy 68.296054 37.75345) + (xy 68.145652 37.846522) + (xy 68.020695 37.971697) + (xy 68.018094 37.975916) + (xy 67.96097 38.016417) + (xy 67.890047 38.019649) + (xy 67.828635 37.984024) + (xy 67.822078 37.97647) + (xy 67.818478 37.970652) + (xy 67.693303 37.845695) + (xy 67.687072 37.841854) + (xy 67.548968 37.756725) + (xy 67.548966 37.756724) + (xy 67.542738 37.752885) + (xy 67.382254 37.699655) + (xy 67.381389 37.699368) + (xy 67.381387 37.699368) + (xy 67.374861 37.697203) + (xy 67.368025 37.696503) + (xy 67.368022 37.696502) + (xy 67.324969 37.692091) + (xy 67.2704 37.6865) + (xy 66.6696 37.6865) + (xy 66.666354 37.686837) + (xy 66.66635 37.686837) + (xy 66.570692 37.696762) + (xy 66.570688 37.696763) + (xy 66.563834 37.697474) + (xy 66.557298 37.699655) + (xy 66.557296 37.699655) + (xy 66.474441 37.727298) + (xy 66.396054 37.75345) + (xy 66.245652 37.846522) + (xy 66.120695 37.971697) + (xy 66.116855 37.977927) + (xy 66.116854 37.977928) + (xy 66.040611 38.101616) + (xy 65.987838 38.14911) + (xy 65.933351 38.1615) + (xy 63.14707 38.1615) + (xy 63.12812 38.160067) + (xy 63.113885 38.157901) + (xy 63.113881 38.157901) + (xy 63.106651 38.156801) + (xy 63.099359 38.157394) + (xy 63.099356 38.157394) + (xy 63.053982 38.161085) + (xy 63.043767 38.1615) + (xy 63.035707 38.1615) + (xy 63.032073 38.161924) + (xy 63.032067 38.161924) + (xy 63.019042 38.163443) + (xy 63.00748 38.164791) + (xy 63.003132 38.165221) + (xy 62.930364 38.17114) + (xy 62.923403 38.173395) + (xy 62.917463 38.174582) + (xy 62.911588 38.175971) + (xy 62.904319 38.176818) + (xy 62.83567 38.201736) + (xy 62.831542 38.203153) + (xy 62.769064 38.223393) + (xy 62.769062 38.223394) + (xy 62.762101 38.225649) + (xy 62.755846 38.229445) + (xy 62.750372 38.231951) + (xy 62.744942 38.23467) + (xy 62.738063 38.237167) + (xy 62.731943 38.24118) + (xy 62.731942 38.24118) + (xy 62.677024 38.277186) + (xy 62.67332 38.279523) + (xy 62.610893 38.317405) + (xy 62.602516 38.324803) + (xy 62.602492 38.324776) + (xy 62.5995 38.327429) + (xy 62.596267 38.330132) + (xy 62.590148 38.334144) + (xy 62.585116 38.339456) + (xy 62.536872 38.390383) + (xy 62.534494 38.392825) + (xy 59.511089 41.41623) + (xy 59.496677 41.428616) + (xy 59.485082 41.437149) + (xy 59.485077 41.437154) + (xy 59.479182 41.441492) + (xy 59.474443 41.44707) + (xy 59.47444 41.447073) + (xy 59.444965 41.481768) + (xy 59.438035 41.489284) + (xy 59.43234 41.494979) + (xy 59.43006 41.497861) + (xy 59.414719 41.517251) + (xy 59.411928 41.520655) + (xy 59.369409 41.570703) + (xy 59.364667 41.576285) + (xy 59.361339 41.582801) + (xy 59.357972 41.58785) + (xy 59.354805 41.592979) + (xy 59.350266 41.598716) + (xy 59.319345 41.664875) + (xy 59.317442 41.668769) + (xy 59.284231 41.733808) + (xy 59.282492 41.740916) + (xy 59.280393 41.746559) + (xy 59.278476 41.752322) + (xy 59.275378 41.75895) + (xy 59.273888 41.766112) + (xy 59.273888 41.766113) + (xy 59.260514 41.830412) + (xy 59.259544 41.834696) + (xy 59.242192 41.90561) + (xy 59.2415 41.916764) + (xy 59.241464 41.916762) + (xy 59.241225 41.920755) + (xy 59.240851 41.924947) + (xy 59.23936 41.932115) + (xy 59.239558 41.939432) + (xy 59.241454 42.009521) + (xy 59.2415 42.012928) + (xy 59.2415 44.747842) + (xy 59.221498 44.815963) + (xy 59.204595 44.836937) + (xy 57.323595 46.717937) + (xy 57.261283 46.751963) + (xy 57.190468 46.746898) + (xy 57.133632 46.704351) + (xy 57.108821 46.637831) + (xy 57.1085 46.628842) + (xy 57.1085 44.551866) + (xy 57.101745 44.489684) + (xy 57.050615 44.353295) + (xy 56.963261 44.236739) + (xy 56.846705 44.149385) + (xy 56.710316 44.098255) + (xy 56.648134 44.0915) + (xy 54.551866 44.0915) + (xy 54.489684 44.098255) + (xy 54.353295 44.149385) + (xy 54.236739 44.236739) + (xy 54.149385 44.353295) + (xy 54.098255 44.489684) + (xy 54.0915 44.551866) + (xy 54.0915 46.648134) + (xy 54.098255 46.710316) + (xy 54.149385 46.846705) + (xy 54.236739 46.963261) + (xy 54.344102 47.043725) + (xy 54.386616 47.100583) + (xy 54.391642 47.171401) + (xy 54.374424 47.209726) + (xy 54.375824 47.210584) + (xy 54.25176 47.413037) + (xy 54.249867 47.417607) + (xy 54.249865 47.417611) + (xy 54.190335 47.561331) + (xy 54.160895 47.632406) + (xy 54.153617 47.662722) + (xy 54.107342 47.855472) + (xy 54.105465 47.863289) + (xy 54.086835 48.1) + (xy 54.105465 48.336711) + (xy 54.106619 48.341518) + (xy 54.10662 48.341524) + (xy 54.138177 48.472965) + (xy 54.160895 48.567594) + (xy 54.162788 48.572165) + (xy 54.162789 48.572167) + (xy 54.24827 48.778537) + (xy 54.25176 48.786963) + (xy 54.254346 48.791183) + (xy 54.373241 48.985202) + (xy 54.373245 48.985208) + (xy 54.375824 48.989416) + (xy 54.530031 49.169969) + (xy 54.533787 49.173177) + (xy 54.533792 49.173182) + (xy 54.628639 49.254189) + (xy 54.667449 49.313639) + (xy 54.667955 49.384634) + (xy 54.628639 49.445811) + (xy 54.533792 49.526818) + (xy 54.533787 49.526823) + (xy 54.530031 49.530031) + (xy 54.375824 49.710584) + (xy 54.373245 49.714792) + (xy 54.373241 49.714798) + (xy 54.303196 49.829101) + (xy 54.25176 49.913037) + (xy 54.249867 49.917607) + (xy 54.249865 49.917611) + (xy 54.162789 50.127833) + (xy 54.160895 50.132406) + (xy 54.15974 50.137218) + (xy 54.13202 50.252681) + (xy 54.105465 50.363289) + (xy 54.086835 50.6) + (xy 42.613165 50.6) + (xy 42.594535 50.363289) + (xy 42.567981 50.252681) + (xy 42.54026 50.137218) + (xy 42.539105 50.132406) + (xy 42.537211 50.127833) + (xy 42.450135 49.917611) + (xy 42.450133 49.917607) + (xy 42.44824 49.913037) + (xy 42.396804 49.829101) + (xy 42.326759 49.714798) + (xy 42.326755 49.714792) + (xy 42.324176 49.710584) + (xy 42.169969 49.530031) + (xy 41.989416 49.375824) + (xy 41.985208 49.373245) + (xy 41.985202 49.373241) + (xy 41.791183 49.254346) + (xy 41.786963 49.25176) + (xy 41.782393 49.249867) + (xy 41.782389 49.249865) + (xy 41.572167 49.162789) + (xy 41.572165 49.162788) + (xy 41.567594 49.160895) + (xy 41.487391 49.14164) + (xy 41.341524 49.10662) + (xy 41.341518 49.106619) + (xy 41.336711 49.105465) + (xy 41.1 49.086835) + (xy 40.863289 49.105465) + (xy 40.858482 49.106619) + (xy 40.858476 49.10662) + (xy 40.712609 49.14164) + (xy 40.632406 49.160895) + (xy 40.627835 49.162788) + (xy 40.627833 49.162789) + (xy 40.417611 49.249865) + (xy 40.417607 49.249867) + (xy 40.413037 49.25176) + (xy 40.408817 49.254346) + (xy 40.214798 49.373241) + (xy 40.214792 49.373245) + (xy 40.210584 49.375824) + (xy 40.030031 49.530031) + (xy 39.875824 49.710584) + (xy 39.873245 49.714792) + (xy 39.873241 49.714798) + (xy 39.803196 49.829101) + (xy 39.75176 49.913037) + (xy 39.749867 49.917607) + (xy 39.749865 49.917611) + (xy 39.662789 50.127833) + (xy 39.660895 50.132406) + (xy 39.65974 50.137218) + (xy 39.63202 50.252681) + (xy 39.605465 50.363289) + (xy 39.586835 50.6) + (xy 35.008 50.6) + (xy 35.008 45.6) + (xy 39.586835 45.6) + (xy 39.605465 45.836711) + (xy 39.660895 46.067594) + (xy 39.662788 46.072165) + (xy 39.662789 46.072167) + (xy 39.746239 46.273633) + (xy 39.75176 46.286963) + (xy 39.754346 46.291183) + (xy 39.873241 46.485202) + (xy 39.873245 46.485208) + (xy 39.875824 46.489416) + (xy 40.030031 46.669969) + (xy 40.210584 46.824176) + (xy 40.214792 46.826755) + (xy 40.214798 46.826759) + (xy 40.392122 46.935423) + (xy 40.413037 46.94824) + (xy 40.417607 46.950133) + (xy 40.417611 46.950135) + (xy 40.615779 47.032218) + (xy 40.632406 47.039105) + (xy 40.680349 47.050615) + (xy 40.858476 47.09338) + (xy 40.858482 47.093381) + (xy 40.863289 47.094535) + (xy 41.1 47.113165) + (xy 41.336711 47.094535) + (xy 41.341518 47.093381) + (xy 41.341524 47.09338) + (xy 41.519651 47.050615) + (xy 41.567594 47.039105) + (xy 41.584221 47.032218) + (xy 41.782389 46.950135) + (xy 41.782393 46.950133) + (xy 41.786963 46.94824) + (xy 41.807878 46.935423) + (xy 41.985202 46.826759) + (xy 41.985208 46.826755) + (xy 41.989416 46.824176) + (xy 42.169969 46.669969) + (xy 42.324176 46.489416) + (xy 42.326755 46.485208) + (xy 42.326759 46.485202) + (xy 42.445654 46.291183) + (xy 42.44824 46.286963) + (xy 42.453762 46.273633) + (xy 42.537211 46.072167) + (xy 42.537212 46.072165) + (xy 42.539105 46.067594) + (xy 42.594535 45.836711) + (xy 42.613165 45.6) + (xy 42.594535 45.363289) + (xy 42.593224 45.357825) + (xy 42.551035 45.182098) + (xy 42.539105 45.132406) + (xy 42.532838 45.117276) + (xy 42.450135 44.917611) + (xy 42.450133 44.917607) + (xy 42.44824 44.913037) + (xy 42.429114 44.881826) + (xy 42.326759 44.714798) + (xy 42.326755 44.714792) + (xy 42.324176 44.710584) + (xy 42.169969 44.530031) + (xy 41.989416 44.375824) + (xy 41.985208 44.373245) + (xy 41.985202 44.373241) + (xy 41.791183 44.254346) + (xy 41.786963 44.25176) + (xy 41.782393 44.249867) + (xy 41.782389 44.249865) + (xy 41.572167 44.162789) + (xy 41.572165 44.162788) + (xy 41.567594 44.160895) + (xy 41.46509 44.136286) + (xy 41.341524 44.10662) + (xy 41.341518 44.106619) + (xy 41.336711 44.105465) + (xy 41.1 44.086835) + (xy 40.863289 44.105465) + (xy 40.858482 44.106619) + (xy 40.858476 44.10662) + (xy 40.73491 44.136286) + (xy 40.632406 44.160895) + (xy 40.627835 44.162788) + (xy 40.627833 44.162789) + (xy 40.417611 44.249865) + (xy 40.417607 44.249867) + (xy 40.413037 44.25176) + (xy 40.408817 44.254346) + (xy 40.214798 44.373241) + (xy 40.214792 44.373245) + (xy 40.210584 44.375824) + (xy 40.030031 44.530031) + (xy 39.875824 44.710584) + (xy 39.873245 44.714792) + (xy 39.873241 44.714798) + (xy 39.770886 44.881826) + (xy 39.75176 44.913037) + (xy 39.749867 44.917607) + (xy 39.749865 44.917611) + (xy 39.667162 45.117276) + (xy 39.660895 45.132406) + (xy 39.648965 45.182098) + (xy 39.606777 45.357825) + (xy 39.605465 45.363289) + (xy 39.586835 45.6) + (xy 35.008 45.6) + (xy 35.008 43.798134) + (xy 46.0915 43.798134) + (xy 46.098255 43.860316) + (xy 46.149385 43.996705) + (xy 46.236739 44.113261) + (xy 46.353295 44.200615) + (xy 46.489684 44.251745) + (xy 46.551866 44.2585) + (xy 49.648134 44.2585) + (xy 49.710316 44.251745) + (xy 49.846705 44.200615) + (xy 49.963261 44.113261) + (xy 50.050615 43.996705) + (xy 50.101745 43.860316) + (xy 50.1085 43.798134) + (xy 50.1085 41.201866) + (xy 50.101745 41.139684) + (xy 50.050615 41.003295) + (xy 49.963261 40.886739) + (xy 49.846705 40.799385) + (xy 49.710316 40.748255) + (xy 49.648134 40.7415) + (xy 46.551866 40.7415) + (xy 46.489684 40.748255) + (xy 46.353295 40.799385) + (xy 46.236739 40.886739) + (xy 46.149385 41.003295) + (xy 46.098255 41.139684) + (xy 46.0915 41.201866) + (xy 46.0915 43.798134) + (xy 35.008 43.798134) + (xy 35.008 39.892791) + (xy 35.028002 39.82467) + (xy 35.081658 39.778177) + (xy 35.151932 39.768073) + (xy 35.216512 39.797567) + (xy 35.23858 39.822514) + (xy 35.353834 39.994029) + (xy 35.584665 40.26815) + (xy 35.843751 40.515738) + (xy 36.128061 40.733897) + (xy 36.160056 40.75335) + (xy 36.431355 40.918303) + (xy 36.43136 40.918306) + (xy 36.43427 40.920075) + (xy 36.437358 40.921521) + (xy 36.437357 40.921521) + (xy 36.75571 41.070649) + (xy 36.75572 41.070653) + (xy 36.758794 41.072093) + (xy 36.762012 41.073195) + (xy 36.762015 41.073196) + (xy 37.094615 41.187071) + (xy 37.094623 41.187073) + (xy 37.097838 41.188174) + (xy 37.447435 41.266959) + (xy 37.499728 41.272917) + (xy 37.800114 41.307142) + (xy 37.800122 41.307142) + (xy 37.803497 41.307527) + (xy 37.806901 41.307545) + (xy 37.806904 41.307545) + (xy 38.001227 41.308562) + (xy 38.161857 41.309403) + (xy 38.165243 41.309053) + (xy 38.165245 41.309053) + (xy 38.514932 41.272917) + (xy 38.514941 41.272916) + (xy 38.518324 41.272566) + (xy 38.521657 41.271852) + (xy 38.52166 41.271851) + (xy 38.694186 41.234864) + (xy 38.868727 41.197446) + (xy 39.208968 41.084922) + (xy 39.535066 40.936311) + (xy 39.629052 40.880506) + (xy 39.840262 40.755099) + (xy 39.840267 40.755096) + (xy 39.843207 40.75335) + (xy 39.846299 40.751029) + (xy 40.023725 40.617813) + (xy 40.129786 40.53818) + (xy 40.391451 40.293319) + (xy 40.62514 40.02163) + (xy 40.738991 39.855976) + (xy 40.82619 39.729101) + (xy 40.826195 39.729094) + (xy 40.82812 39.726292) + (xy 40.829732 39.723298) + (xy 40.829737 39.72329) + (xy 40.996395 39.413772) + (xy 40.998017 39.41076) + (xy 41.104294 39.149029) + (xy 41.131562 39.081877) + (xy 41.131564 39.081872) + (xy 41.132842 39.078724) + (xy 41.23102 38.73407) + (xy 41.28956 38.391598) + (xy 41.290829 38.384175) + (xy 41.290829 38.384173) + (xy 41.291401 38.380828) + (xy 41.293932 38.339456) + (xy 41.313168 38.024928) + (xy 41.313278 38.023131) + (xy 41.313359 38) + (xy 41.293979 37.642159) + (xy 41.236066 37.288505) + (xy 41.140297 36.943173) + (xy 41.007793 36.610205) + (xy 40.894649 36.396513) + (xy 40.841702 36.296513) + (xy 40.841698 36.296506) + (xy 40.840103 36.293494) + (xy 40.63919 35.996746) + (xy 40.407403 35.723432) + (xy 40.147454 35.47675) + (xy 39.862384 35.259585) + (xy 39.848733 35.25135) + (xy 39.83305 35.241889) + (xy 39.785053 35.189575) + (xy 39.772958 35.119617) + (xy 39.800605 35.054224) + (xy 39.859217 35.014161) + (xy 39.898134 35.008) + (xy 55.874 35.008) + ) + ) + (filled_polygon + (layer "F.Cu") + (pts + (xy 139.70175 44.278502) + (xy 139.722724 44.295405) + (xy 140.984595 45.557276) + (xy 141.018621 45.619588) + (xy 141.0215 45.646371) + (xy 141.0215 66.914523) + (xy 141.001498 66.982644) + (xy 140.967771 67.017735) + (xy 140.960219 67.023023) + (xy 140.803023 67.180219) + (xy 140.799866 67.184727) + (xy 140.799864 67.18473) + (xy 140.688754 67.343412) + (xy 140.675512 67.362324) + (xy 140.673189 67.367306) + (xy 140.673186 67.367311) + (xy 140.624195 67.472373) + (xy 140.577277 67.525658) + (xy 140.509 67.545119) + (xy 140.44104 67.524577) + (xy 140.395805 67.472373) + (xy 140.346814 67.367311) + (xy 140.346811 67.367306) + (xy 140.344488 67.362324) + (xy 140.331246 67.343412) + (xy 140.220136 67.18473) + (xy 140.220134 67.184727) + (xy 140.216977 67.180219) + (xy 140.059781 67.023023) + (xy 140.052229 67.017735) + (xy 140.051203 67.016452) + (xy 140.051057 67.016329) + (xy 140.051082 67.0163) + (xy 140.007901 66.962278) + (xy 139.9985 66.914522) + (xy 139.9985 61.807069) + (xy 139.999933 61.788118) + (xy 140.002099 61.773883) + (xy 140.002099 61.773881) + (xy 140.003199 61.766651) + (xy 139.99998 61.727069) + (xy 139.998915 61.713982) + (xy 139.9985 61.703767) + (xy 139.9985 61.695707) + (xy 139.995967 61.673982) + (xy 139.995211 61.667493) + (xy 139.994778 61.663118) + (xy 139.989454 61.597661) + (xy 139.989453 61.597658) + (xy 139.98886 61.590363) + (xy 139.986604 61.583399) + (xy 139.985413 61.57744) + (xy 139.984029 61.571585) + (xy 139.983182 61.564319) + (xy 139.958265 61.495673) + (xy 139.956848 61.491545) + (xy 139.936607 61.429064) + (xy 139.936606 61.429062) + (xy 139.934351 61.422101) + (xy 139.930555 61.415846) + (xy 139.928049 61.410372) + (xy 139.92533 61.404942) + (xy 139.922833 61.398063) + (xy 139.912368 61.382101) + (xy 139.882814 61.337024) + (xy 139.880467 61.333305) + (xy 139.878855 61.330648) + (xy 139.842595 61.270893) + (xy 139.835197 61.262516) + (xy 139.835224 61.262492) + (xy 139.832571 61.2595) + (xy 139.829868 61.256267) + (xy 139.825856 61.250148) + (xy 139.769617 61.196872) + (xy 139.767175 61.194494) + (xy 134.495405 55.922724) + (xy 134.461379 55.860412) + (xy 134.4585 55.833629) + (xy 134.4585 50.085478) + (xy 134.46634 50.058777) + (xy 135.545777 50.058777) + (xy 135.555074 50.070793) + (xy 135.598069 50.100898) + (xy 135.607555 50.106376) + (xy 135.798993 50.195645) + (xy 135.809285 50.199391) + (xy 136.013309 50.254059) + (xy 136.024104 50.255962) + (xy 136.234525 50.274372) + (xy 136.245475 50.274372) + (xy 136.455896 50.255962) + (xy 136.466691 50.254059) + (xy 136.670715 50.199391) + (xy 136.681007 50.195645) + (xy 136.872445 50.106376) + (xy 136.881931 50.100898) + (xy 136.925764 50.070207) + (xy 136.934139 50.059729) + (xy 136.927071 50.046281) + (xy 136.252812 49.372022) + (xy 136.238868 49.364408) + (xy 136.237035 49.364539) + (xy 136.23042 49.36879) + (xy 135.552207 50.047003) + (xy 135.545777 50.058777) + (xy 134.46634 50.058777) + (xy 134.478502 50.017357) + (xy 134.512229 49.982265) + (xy 134.51527 49.980136) + (xy 134.515272 49.980134) + (xy 134.519781 49.976977) + (xy 134.676977 49.819781) + (xy 134.691234 49.799421) + (xy 134.801331 49.642185) + (xy 134.801332 49.642183) + (xy 134.804488 49.637676) + (xy 134.806811 49.632694) + (xy 134.806814 49.632689) + (xy 134.856081 49.527035) + (xy 134.902999 49.47375) + (xy 134.971276 49.454289) + (xy 135.039236 49.474831) + (xy 135.084471 49.527035) + (xy 135.133623 49.632441) + (xy 135.139103 49.641932) + (xy 135.169794 49.685765) + (xy 135.180271 49.69414) + (xy 135.193718 49.687072) + (xy 135.867978 49.012812) + (xy 135.874356 49.001132) + (xy 136.604408 49.001132) + (xy 136.604539 49.002965) + (xy 136.60879 49.00958) + (xy 137.287003 49.687793) + (xy 137.298777 49.694223) + (xy 137.310793 49.684926) + (xy 137.340897 49.641932) + (xy 137.346377 49.632441) + (xy 137.435645 49.441007) + (xy 137.439391 49.430715) + (xy 137.494059 49.226691) + (xy 137.495962 49.215896) + (xy 137.514372 49.005475) + (xy 137.514372 48.994525) + (xy 137.495962 48.784104) + (xy 137.494059 48.773309) + (xy 137.439391 48.569285) + (xy 137.435645 48.558993) + (xy 137.346377 48.367559) + (xy 137.340897 48.358068) + (xy 137.310206 48.314235) + (xy 137.299729 48.30586) + (xy 137.286282 48.312928) + (xy 136.612022 48.987188) + (xy 136.604408 49.001132) + (xy 135.874356 49.001132) + (xy 135.875592 48.998868) + (xy 135.875461 48.997035) + (xy 135.87121 48.99042) + (xy 135.192997 48.312207) + (xy 135.181223 48.305777) + (xy 135.169207 48.315074) + (xy 135.139103 48.358068) + (xy 135.133623 48.367559) + (xy 135.084471 48.472965) + (xy 135.037553 48.52625) + (xy 134.969276 48.545711) + (xy 134.901316 48.525169) + (xy 134.856081 48.472965) + (xy 134.806814 48.367311) + (xy 134.806811 48.367306) + (xy 134.804488 48.362324) + (xy 134.783099 48.331777) + (xy 134.680136 48.18473) + (xy 134.680134 48.184727) + (xy 134.676977 48.180219) + (xy 134.519781 48.023023) + (xy 134.515273 48.019866) + (xy 134.51527 48.019864) + (xy 134.438488 47.966101) + (xy 134.337677 47.895512) + (xy 134.332695 47.893189) + (xy 134.33269 47.893186) + (xy 134.227627 47.844195) + (xy 134.174342 47.797278) + (xy 134.154881 47.729001) + (xy 134.175423 47.661041) + (xy 134.227627 47.615805) + (xy 134.33269 47.566814) + (xy 134.332695 47.566811) + (xy 134.337677 47.564488) + (xy 134.480337 47.464596) + (xy 134.51527 47.440136) + (xy 134.515273 47.440134) + (xy 134.519781 47.436977) + (xy 134.676977 47.279781) + (xy 134.683049 47.27111) + (xy 134.801331 47.102185) + (xy 134.801332 47.102183) + (xy 134.804488 47.097676) + (xy 134.806811 47.092694) + (xy 134.806814 47.092689) + (xy 134.855805 46.987627) + (xy 134.902723 46.934342) + (xy 134.971 46.914881) + (xy 135.03896 46.935423) + (xy 135.084195 46.987627) + (xy 135.133186 47.092689) + (xy 135.133189 47.092694) + (xy 135.135512 47.097676) + (xy 135.138668 47.102183) + (xy 135.138669 47.102185) + (xy 135.256952 47.27111) + (xy 135.263023 47.279781) + (xy 135.420219 47.436977) + (xy 135.424727 47.440134) + (xy 135.42473 47.440136) + (xy 135.459663 47.464596) + (xy 135.602323 47.564488) + (xy 135.607305 47.566811) + (xy 135.60731 47.566814) + (xy 135.712965 47.616081) + (xy 135.76625 47.662998) + (xy 135.785711 47.731275) + (xy 135.765169 47.799235) + (xy 135.712965 47.844471) + (xy 135.607559 47.893623) + (xy 135.598068 47.899103) + (xy 135.554235 47.929794) + (xy 135.54586 47.940271) + (xy 135.552928 47.953718) + (xy 136.227188 48.627978) + (xy 136.241132 48.635592) + (xy 136.242965 48.635461) + (xy 136.24958 48.63121) + (xy 136.927793 47.952997) + (xy 136.934223 47.941223) + (xy 136.924926 47.929207) + (xy 136.881931 47.899102) + (xy 136.872445 47.893624) + (xy 136.767035 47.844471) + (xy 136.71375 47.797554) + (xy 136.694289 47.729277) + (xy 136.714831 47.661317) + (xy 136.767035 47.616081) + (xy 136.87269 47.566814) + (xy 136.872695 47.566811) + (xy 136.877677 47.564488) + (xy 137.020337 47.464596) + (xy 137.05527 47.440136) + (xy 137.055273 47.440134) + (xy 137.059781 47.436977) + (xy 137.216977 47.279781) + (xy 137.223049 47.27111) + (xy 137.341331 47.102185) + (xy 137.341332 47.102183) + (xy 137.344488 47.097676) + (xy 137.346811 47.092694) + (xy 137.346814 47.092689) + (xy 137.436117 46.901178) + (xy 137.436118 46.901177) + (xy 137.43844 46.896196) + (xy 137.495978 46.681463) + (xy 137.515353 46.46) + (xy 137.495978 46.238537) + (xy 137.43844 46.023804) + (xy 137.395805 45.932373) + (xy 137.346814 45.827311) + (xy 137.346811 45.827306) + (xy 137.344488 45.822324) + (xy 137.332641 45.805404) + (xy 137.220136 45.64473) + (xy 137.220134 45.644727) + (xy 137.216977 45.640219) + (xy 137.059781 45.483023) + (xy 137.055273 45.479866) + (xy 137.05527 45.479864) + (xy 136.961412 45.414144) + (xy 136.877677 45.355512) + (xy 136.872695 45.353189) + (xy 136.87269 45.353186) + (xy 136.681178 45.263883) + (xy 136.681177 45.263882) + (xy 136.676196 45.26156) + (xy 136.670888 45.260138) + (xy 136.670886 45.260137) + (xy 136.586008 45.237394) + (xy 136.461463 45.204022) + (xy 136.24 45.184647) + (xy 136.018537 45.204022) + (xy 135.893992 45.237394) + (xy 135.809114 45.260137) + (xy 135.809112 45.260138) + (xy 135.803804 45.26156) + (xy 135.798823 45.263882) + (xy 135.798822 45.263883) + (xy 135.607311 45.353186) + (xy 135.607306 45.353189) + (xy 135.602324 45.355512) + (xy 135.597817 45.358668) + (xy 135.597815 45.358669) + (xy 135.42473 45.479864) + (xy 135.424727 45.479866) + (xy 135.420219 45.483023) + (xy 135.263023 45.640219) + (xy 135.259866 45.644727) + (xy 135.259864 45.64473) + (xy 135.147359 45.805404) + (xy 135.135512 45.822324) + (xy 135.133189 45.827306) + (xy 135.133186 45.827311) + (xy 135.084195 45.932373) + (xy 135.037277 45.985658) + (xy 134.969 46.005119) + (xy 134.90104 45.984577) + (xy 134.855805 45.932373) + (xy 134.806814 45.827311) + (xy 134.806811 45.827306) + (xy 134.804488 45.822324) + (xy 134.792641 45.805404) + (xy 134.680136 45.64473) + (xy 134.680134 45.644727) + (xy 134.676977 45.640219) + (xy 134.519781 45.483023) + (xy 134.515273 45.479866) + (xy 134.51527 45.479864) + (xy 134.421412 45.414144) + (xy 134.337677 45.355512) + (xy 134.332695 45.353189) + (xy 134.33269 45.353186) + (xy 134.141178 45.263883) + (xy 134.141177 45.263882) + (xy 134.136196 45.26156) + (xy 134.130888 45.260138) + (xy 134.130886 45.260137) + (xy 134.046008 45.237394) + (xy 133.921463 45.204022) + (xy 133.7 45.184647) + (xy 133.478537 45.204022) + (xy 133.353992 45.237394) + (xy 133.269114 45.260137) + (xy 133.269112 45.260138) + (xy 133.263804 45.26156) + (xy 133.258823 45.263882) + (xy 133.258822 45.263883) + (xy 133.067311 45.353186) + (xy 133.067306 45.353189) + (xy 133.062324 45.355512) + (xy 133.057817 45.358668) + (xy 133.057815 45.358669) + (xy 132.88473 45.479864) + (xy 132.884727 45.479866) + (xy 132.880219 45.483023) + (xy 132.723023 45.640219) + (xy 132.719866 45.644727) + (xy 132.719864 45.64473) + (xy 132.607359 45.805404) + (xy 132.595512 45.822324) + (xy 132.593189 45.827306) + (xy 132.593186 45.827311) + (xy 132.544195 45.932373) + (xy 132.497277 45.985658) + (xy 132.429 46.005119) + (xy 132.36104 45.984577) + (xy 132.315805 45.932373) + (xy 132.266814 45.827311) + (xy 132.266811 45.827306) + (xy 132.264488 45.822324) + (xy 132.252641 45.805404) + (xy 132.140136 45.64473) + (xy 132.140134 45.644727) + (xy 132.136977 45.640219) + (xy 131.979781 45.483023) + (xy 131.972229 45.477735) + (xy 131.971203 45.476452) + (xy 131.971057 45.476329) + (xy 131.971082 45.4763) + (xy 131.927901 45.422278) + (xy 131.9185 45.374522) + (xy 131.9185 45.206371) + (xy 131.938502 45.13825) + (xy 131.955405 45.117276) + (xy 132.777276 44.295405) + (xy 132.839588 44.261379) + (xy 132.866371 44.2585) + (xy 139.633629 44.2585) + ) + ) + ) + (zone (net 0) (net_name "") (layers F&B.Cu) (tstamp 81566612-2b18-4631-8407-6fa3c37c657d) (hatch edge 0.508) + (connect_pads (clearance 0)) + (min_thickness 0.254) + (keepout (tracks allowed) (vias allowed) (pads allowed ) (copperpour not_allowed) (footprints allowed)) + (fill (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 62 37.5) + (xy 56 37.5) + (xy 56 34.5) + (xy 62 34.5) + ) + ) + ) + (zone (net 12) (net_name "GND") (layer "B.Cu") (tstamp ad1b4da6-ced2-49e2-bc05-5f48eaddb263) (hatch edge 0.508) + (connect_pads (clearance 0.508)) + (min_thickness 0.254) (filled_areas_thickness no) + (fill yes (thermal_gap 0.508) (thermal_bridge_width 0.508)) + (polygon + (pts + (xy 163 123) + (xy 33 123) + (xy 33 33) + (xy 163 33) + ) + ) + (filled_polygon + (layer "B.Cu") + (pts + (xy 55.942121 35.028002) + (xy 55.988614 35.081658) + (xy 56 35.134) + (xy 56 37.5) + (xy 62 37.5) + (xy 62 35.134) + (xy 62.020002 35.065879) + (xy 62.073658 35.019386) + (xy 62.126 35.008) + (xy 156.36793 35.008) + (xy 156.436051 35.028002) + (xy 156.482544 35.081658) + (xy 156.492648 35.151932) + (xy 156.463154 35.216512) + (xy 156.432636 35.242116) + (xy 156.247193 35.353101) + (xy 156.244467 35.355163) + (xy 156.244465 35.355164) + (xy 156.080605 35.479091) + (xy 155.961367 35.56927) + (xy 155.700559 35.815043) + (xy 155.467819 36.087546) + (xy 155.4659 36.090358) + (xy 155.465897 36.090363) + (xy 155.432796 36.138888) + (xy 155.265871 36.383591) + (xy 155.097077 36.699714) + (xy 154.963411 37.032218) + (xy 154.962491 37.035492) + (xy 154.962489 37.035497) + (xy 154.890424 37.291878) + (xy 154.866437 37.377213) + (xy 154.80729 37.730663) + (xy 154.786661 38.088434) + (xy 154.804792 38.44634) + (xy 154.86147 38.800195) + (xy 154.956033 39.145859) + (xy 155.087374 39.479288) + (xy 155.088957 39.482303) + (xy 155.218529 39.729101) + (xy 155.253957 39.796582) + (xy 155.255858 39.799411) + (xy 155.255864 39.799421) + (xy 155.403294 40.018818) + (xy 155.453834 40.094029) + (xy 155.684665 40.36815) + (xy 155.943751 40.615738) + (xy 156.228061 40.833897) + (xy 156.260056 40.85335) + (xy 156.531355 41.018303) + (xy 156.53136 41.018306) + (xy 156.53427 41.020075) + (xy 156.537358 41.021521) + (xy 156.537357 41.021521) + (xy 156.85571 41.170649) + (xy 156.85572 41.170653) + (xy 156.858794 41.172093) + (xy 156.862012 41.173195) + (xy 156.862015 41.173196) + (xy 157.194615 41.287071) + (xy 157.194623 41.287073) + (xy 157.197838 41.288174) + (xy 157.547435 41.366959) + (xy 157.599728 41.372917) + (xy 157.900114 41.407142) + (xy 157.900122 41.407142) + (xy 157.903497 41.407527) + (xy 157.906901 41.407545) + (xy 157.906904 41.407545) + (xy 158.101227 41.408562) + (xy 158.261857 41.409403) + (xy 158.265243 41.409053) + (xy 158.265245 41.409053) + (xy 158.614932 41.372917) + (xy 158.614941 41.372916) + (xy 158.618324 41.372566) + (xy 158.621657 41.371852) + (xy 158.62166 41.371851) + (xy 158.794186 41.334864) + (xy 158.968727 41.297446) + (xy 159.308968 41.184922) + (xy 159.635066 41.036311) + (xy 159.828394 40.921521) + (xy 159.940262 40.855099) + (xy 159.940267 40.855096) + (xy 159.943207 40.85335) + (xy 160.015082 40.799385) + (xy 160.07913 40.751296) + (xy 160.229786 40.63818) + (xy 160.491451 40.393319) + (xy 160.72514 40.12163) + (xy 160.882417 39.892791) + (xy 160.92619 39.829101) + (xy 160.926195 39.829094) + (xy 160.92812 39.826292) + (xy 160.929732 39.823298) + (xy 160.929737 39.82329) + (xy 161.05506 39.59054) + (xy 161.104967 39.540044) + (xy 161.174251 39.524545) + (xy 161.240916 39.548965) + (xy 161.283795 39.60555) + (xy 161.292 39.650275) + (xy 161.292 116.550869) + (xy 161.271998 116.61899) + (xy 161.218342 116.665483) + (xy 161.148068 116.675587) + (xy 161.083488 116.646093) + (xy 161.054646 116.609828) + (xy 160.941702 116.396513) + (xy 160.941698 116.396506) + (xy 160.940103 116.393494) + (xy 160.73919 116.096746) + (xy 160.721116 116.075433) + (xy 160.618863 115.954861) + (xy 160.507403 115.823432) + (xy 160.247454 115.57675) + (xy 160.056448 115.431242) + (xy 159.965091 115.361647) + (xy 159.965089 115.361646) + (xy 159.962384 115.359585) + (xy 159.959472 115.357828) + (xy 159.959467 115.357825) + (xy 159.658443 115.176236) + (xy 159.658437 115.176233) + (xy 159.655528 115.174478) + (xy 159.359606 115.037115) + (xy 159.333571 115.02503) + (xy 159.333569 115.025029) + (xy 159.330475 115.023593) + (xy 159.134774 114.957352) + (xy 158.994255 114.909789) + (xy 158.99425 114.909788) + (xy 158.991028 114.908697) + (xy 158.792681 114.864724) + (xy 158.644493 114.831871) + (xy 158.644487 114.83187) + (xy 158.641158 114.831132) + (xy 158.637769 114.830758) + (xy 158.637764 114.830757) + (xy 158.288338 114.79218) + (xy 158.288333 114.79218) + (xy 158.284957 114.791807) + (xy 158.281558 114.791801) + (xy 158.281557 114.791801) + (xy 158.11208 114.791505) + (xy 157.926592 114.791182) + (xy 157.813413 114.803277) + (xy 157.573639 114.828901) + (xy 157.573631 114.828902) + (xy 157.570256 114.829263) + (xy 157.220117 114.905606) + (xy 156.880271 115.019317) + (xy 156.877178 115.020739) + (xy 156.877177 115.02074) + (xy 156.850455 115.033031) + (xy 156.554694 115.169066) + (xy 156.55176 115.170822) + (xy 156.551758 115.170823) + (xy 156.322049 115.308301) + (xy 156.247193 115.353101) + (xy 156.244467 115.355163) + (xy 156.244465 115.355164) + (xy 156.23862 115.359585) + (xy 155.961367 115.56927) + (xy 155.958882 115.571612) + (xy 155.958877 115.571616) + (xy 155.924977 115.603562) + (xy 155.700559 115.815043) + (xy 155.467819 116.087546) + (xy 155.4659 116.090358) + (xy 155.465897 116.090363) + (xy 155.414185 116.166171) + (xy 155.265871 116.383591) + (xy 155.097077 116.699714) + (xy 154.963411 117.032218) + (xy 154.962491 117.035492) + (xy 154.962489 117.035497) + (xy 154.928941 117.15485) + (xy 154.866437 117.377213) + (xy 154.80729 117.730663) + (xy 154.786661 118.088434) + (xy 154.786833 118.091829) + (xy 154.786833 118.09183) + (xy 154.80462 118.442945) + (xy 154.804792 118.44634) + (xy 154.805329 118.449695) + (xy 154.80533 118.449701) + (xy 154.810316 118.480828) + (xy 154.86147 118.800195) + (xy 154.956033 119.145859) + (xy 155.087374 119.479288) + (xy 155.111134 119.524545) + (xy 155.240546 119.771037) + (xy 155.253957 119.796582) + (xy 155.255858 119.799411) + (xy 155.255864 119.799421) + (xy 155.439569 120.0728) + (xy 155.453834 120.094029) + (xy 155.684665 120.36815) + (xy 155.943751 120.615738) + (xy 156.228061 120.833897) + (xy 156.260056 120.85335) + (xy 156.531355 121.018303) + (xy 156.53136 121.018306) + (xy 156.53427 121.020075) + (xy 156.537358 121.021521) + (xy 156.537357 121.021521) + (xy 156.602205 121.051898) + (xy 156.655408 121.098908) + (xy 156.67475 121.167219) + (xy 156.65409 121.235143) + (xy 156.599987 121.281115) + (xy 156.548756 121.292) + (xy 39.654328 121.292) + (xy 39.586207 121.271998) + (xy 39.539714 121.218342) + (xy 39.52961 121.148068) + (xy 39.559104 121.083488) + (xy 39.602077 121.051345) + (xy 39.631954 121.037729) + (xy 39.635066 121.036311) + (xy 39.729052 120.980506) + (xy 39.940262 120.855099) + (xy 39.940267 120.855096) + (xy 39.943207 120.85335) + (xy 40.229786 120.63818) + (xy 40.491451 120.393319) + (xy 40.72514 120.12163) + (xy 40.83175 119.966512) + (xy 40.92619 119.829101) + (xy 40.926195 119.829094) + (xy 40.92812 119.826292) + (xy 40.929732 119.823298) + (xy 40.929737 119.82329) + (xy 41.082249 119.540044) + (xy 41.098017 119.51076) + (xy 41.232842 119.178724) + (xy 41.243142 119.142568) + (xy 41.280789 119.010405) + (xy 41.33102 118.83407) + (xy 41.337386 118.796829) + (xy 41.390829 118.484175) + (xy 41.390829 118.484173) + (xy 41.391401 118.480828) + (xy 41.393511 118.44634) + (xy 41.413168 118.124928) + (xy 41.413278 118.123131) + (xy 41.413359 118.1) + (xy 41.393979 117.742159) + (xy 41.336066 117.388505) + (xy 41.240297 117.043173) + (xy 41.237243 117.035497) + (xy 41.109052 116.713369) + (xy 41.107793 116.710205) + (xy 41.077575 116.653134) + (xy 52.1915 116.653134) + (xy 52.198255 116.715316) + (xy 52.249385 116.851705) + (xy 52.336739 116.968261) + (xy 52.453295 117.055615) + (xy 52.589684 117.106745) + (xy 52.651866 117.1135) + (xy 55.348134 117.1135) + (xy 55.410316 117.106745) + (xy 55.546705 117.055615) + (xy 55.565887 117.041239) + (xy 55.632394 117.016392) + (xy 55.701776 117.031446) + (xy 55.753718 117.084864) + (xy 55.789373 117.154843) + (xy 55.789381 117.154857) + (xy 55.790875 117.157789) + (xy 56.002124 117.483084) + (xy 56.246219 117.784516) + (xy 56.520484 118.058781) + (xy 56.821916 118.302876) + (xy 57.147211 118.514125) + (xy 57.492806 118.690214) + (xy 57.854913 118.829214) + (xy 58.229567 118.929602) + (xy 58.433201 118.961854) + (xy 58.609414 118.989764) + (xy 58.609422 118.989765) + (xy 58.612662 118.990278) + (xy 59 119.010578) + (xy 59.387338 118.990278) + (xy 59.390578 118.989765) + (xy 59.390586 118.989764) + (xy 59.566799 118.961854) + (xy 59.770433 118.929602) + (xy 60.145087 118.829214) + (xy 60.507194 118.690214) + (xy 60.852789 118.514125) + (xy 61.178084 118.302876) + (xy 61.479516 118.058781) + (xy 61.753781 117.784516) + (xy 61.997876 117.483084) + (xy 62.209125 117.157789) + (xy 62.385214 116.812194) + (xy 62.515391 116.473071) + (xy 62.523028 116.453177) + (xy 62.523029 116.453175) + (xy 62.524214 116.450087) + (xy 62.624602 116.075433) + (xy 62.670481 115.785762) + (xy 62.684764 115.695586) + (xy 62.684765 115.695578) + (xy 62.685278 115.692338) + (xy 62.69027 115.597095) + (xy 105.592001 115.597095) + (xy 105.592338 115.603614) + (xy 105.602257 115.699206) + (xy 105.605149 115.7126) + (xy 105.656588 115.866784) + (xy 105.662761 115.879962) + (xy 105.748063 116.017807) + (xy 105.757099 116.029208) + (xy 105.871829 116.143739) + (xy 105.88324 116.152751) + (xy 106.021243 116.237816) + (xy 106.034424 116.243963) + (xy 106.18871 116.295138) + (xy 106.202086 116.298005) + (xy 106.296438 116.307672) + (xy 106.302854 116.308) + (xy 106.727885 116.308) + (xy 106.743124 116.303525) + (xy 106.744329 116.302135) + (xy 106.746 116.294452) + (xy 106.746 116.289884) + (xy 107.254 116.289884) + (xy 107.258475 116.305123) + (xy 107.259865 116.306328) + (xy 107.267548 116.307999) + (xy 107.697095 116.307999) + (xy 107.703614 116.307662) + (xy 107.799206 116.297743) + (xy 107.8126 116.294851) + (xy 107.966784 116.243412) + (xy 107.979962 116.237239) + (xy 108.117807 116.151937) + (xy 108.129208 116.142901) + (xy 108.243739 116.028171) + (xy 108.252751 116.01676) + (xy 108.337816 115.878757) + (xy 108.343963 115.865576) + (xy 108.395138 115.71129) + (xy 108.398005 115.697914) + (xy 108.407672 115.603562) + (xy 108.408 115.597146) + (xy 108.408 114.960012) + (xy 109.0915 114.960012) + (xy 109.106617 115.138175) + (xy 109.107957 115.143339) + (xy 109.107958 115.143343) + (xy 109.162937 115.355164) + (xy 109.166668 115.36954) + (xy 109.16886 115.374406) + (xy 109.224345 115.497577) + (xy 109.264843 115.58748) + (xy 109.267822 115.591904) + (xy 109.267822 115.591905) + (xy 109.27567 115.603562) + (xy 109.398334 115.785762) + (xy 109.402013 115.789619) + (xy 109.402015 115.789621) + (xy 109.47055 115.861464) + (xy 109.563326 115.958718) + (xy 109.7551 116.101402) + (xy 109.759851 116.103818) + (xy 109.759855 116.10382) + (xy 109.963414 116.207314) + (xy 109.968172 116.209733) + (xy 110.056756 116.237239) + (xy 110.191349 116.279032) + (xy 110.191355 116.279033) + (xy 110.196452 116.280616) + (xy 110.323883 116.297506) + (xy 110.428127 116.311323) + (xy 110.428131 116.311323) + (xy 110.433411 116.312023) + (xy 110.43874 116.311823) + (xy 110.438741 116.311823) + (xy 110.549566 116.307662) + (xy 110.672274 116.303055) + (xy 110.759184 116.284819) + (xy 110.900984 116.255067) + (xy 110.900987 116.255066) + (xy 110.906211 116.25397) + (xy 111.128533 116.166171) + (xy 111.332883 116.042168) + (xy 111.513419 115.885507) + (xy 111.516802 115.881381) + (xy 111.516806 115.881377) + (xy 111.618897 115.756867) + (xy 111.664978 115.700667) + (xy 111.667871 115.695586) + (xy 111.723935 115.597095) + (xy 121.592001 115.597095) + (xy 121.592338 115.603614) + (xy 121.602257 115.699206) + (xy 121.605149 115.7126) + (xy 121.656588 115.866784) + (xy 121.662761 115.879962) + (xy 121.748063 116.017807) + (xy 121.757099 116.029208) + (xy 121.871829 116.143739) + (xy 121.88324 116.152751) + (xy 122.021243 116.237816) + (xy 122.034424 116.243963) + (xy 122.18871 116.295138) + (xy 122.202086 116.298005) + (xy 122.296438 116.307672) + (xy 122.302854 116.308) + (xy 122.727885 116.308) + (xy 122.743124 116.303525) + (xy 122.744329 116.302135) + (xy 122.746 116.294452) + (xy 122.746 116.289884) + (xy 123.254 116.289884) + (xy 123.258475 116.305123) + (xy 123.259865 116.306328) + (xy 123.267548 116.307999) + (xy 123.697095 116.307999) + (xy 123.703614 116.307662) + (xy 123.799206 116.297743) + (xy 123.8126 116.294851) + (xy 123.966784 116.243412) + (xy 123.979962 116.237239) + (xy 124.117807 116.151937) + (xy 124.129208 116.142901) + (xy 124.243739 116.028171) + (xy 124.252751 116.01676) + (xy 124.337816 115.878757) + (xy 124.343963 115.865576) + (xy 124.395138 115.71129) + (xy 124.398005 115.697914) + (xy 124.407672 115.603562) + (xy 124.408 115.597146) + (xy 124.408 114.960012) + (xy 125.0915 114.960012) + (xy 125.106617 115.138175) + (xy 125.107957 115.143339) + (xy 125.107958 115.143343) + (xy 125.162937 115.355164) + (xy 125.166668 115.36954) + (xy 125.16886 115.374406) + (xy 125.224345 115.497577) + (xy 125.264843 115.58748) + (xy 125.267822 115.591904) + (xy 125.267822 115.591905) + (xy 125.27567 115.603562) + (xy 125.398334 115.785762) + (xy 125.402013 115.789619) + (xy 125.402015 115.789621) + (xy 125.47055 115.861464) + (xy 125.563326 115.958718) + (xy 125.7551 116.101402) + (xy 125.759851 116.103818) + (xy 125.759855 116.10382) + (xy 125.963414 116.207314) + (xy 125.968172 116.209733) + (xy 126.056756 116.237239) + (xy 126.191349 116.279032) + (xy 126.191355 116.279033) + (xy 126.196452 116.280616) + (xy 126.323883 116.297506) + (xy 126.428127 116.311323) + (xy 126.428131 116.311323) + (xy 126.433411 116.312023) + (xy 126.43874 116.311823) + (xy 126.438741 116.311823) + (xy 126.549566 116.307662) + (xy 126.672274 116.303055) + (xy 126.759184 116.284819) + (xy 126.900984 116.255067) + (xy 126.900987 116.255066) + (xy 126.906211 116.25397) + (xy 127.128533 116.166171) + (xy 127.332883 116.042168) + (xy 127.513419 115.885507) + (xy 127.516802 115.881381) + (xy 127.516806 115.881377) + (xy 127.618897 115.756867) + (xy 127.664978 115.700667) + (xy 127.667871 115.695586) + (xy 127.723935 115.597095) + (xy 137.592001 115.597095) + (xy 137.592338 115.603614) + (xy 137.602257 115.699206) + (xy 137.605149 115.7126) + (xy 137.656588 115.866784) + (xy 137.662761 115.879962) + (xy 137.748063 116.017807) + (xy 137.757099 116.029208) + (xy 137.871829 116.143739) + (xy 137.88324 116.152751) + (xy 138.021243 116.237816) + (xy 138.034424 116.243963) + (xy 138.18871 116.295138) + (xy 138.202086 116.298005) + (xy 138.296438 116.307672) + (xy 138.302854 116.308) + (xy 138.727885 116.308) + (xy 138.743124 116.303525) + (xy 138.744329 116.302135) + (xy 138.746 116.294452) + (xy 138.746 116.289884) + (xy 139.254 116.289884) + (xy 139.258475 116.305123) + (xy 139.259865 116.306328) + (xy 139.267548 116.307999) + (xy 139.697095 116.307999) + (xy 139.703614 116.307662) + (xy 139.799206 116.297743) + (xy 139.8126 116.294851) + (xy 139.966784 116.243412) + (xy 139.979962 116.237239) + (xy 140.117807 116.151937) + (xy 140.129208 116.142901) + (xy 140.243739 116.028171) + (xy 140.252751 116.01676) + (xy 140.337816 115.878757) + (xy 140.343963 115.865576) + (xy 140.395138 115.71129) + (xy 140.398005 115.697914) + (xy 140.407672 115.603562) + (xy 140.408 115.597146) + (xy 140.408 114.960012) + (xy 141.0915 114.960012) + (xy 141.106617 115.138175) + (xy 141.107957 115.143339) + (xy 141.107958 115.143343) + (xy 141.162937 115.355164) + (xy 141.166668 115.36954) + (xy 141.16886 115.374406) + (xy 141.224345 115.497577) + (xy 141.264843 115.58748) + (xy 141.267822 115.591904) + (xy 141.267822 115.591905) + (xy 141.27567 115.603562) + (xy 141.398334 115.785762) + (xy 141.402013 115.789619) + (xy 141.402015 115.789621) + (xy 141.47055 115.861464) + (xy 141.563326 115.958718) + (xy 141.7551 116.101402) + (xy 141.759851 116.103818) + (xy 141.759855 116.10382) + (xy 141.963414 116.207314) + (xy 141.968172 116.209733) + (xy 142.056756 116.237239) + (xy 142.191349 116.279032) + (xy 142.191355 116.279033) + (xy 142.196452 116.280616) + (xy 142.323883 116.297506) + (xy 142.428127 116.311323) + (xy 142.428131 116.311323) + (xy 142.433411 116.312023) + (xy 142.43874 116.311823) + (xy 142.438741 116.311823) + (xy 142.549566 116.307662) + (xy 142.672274 116.303055) + (xy 142.759184 116.284819) + (xy 142.900984 116.255067) + (xy 142.900987 116.255066) + (xy 142.906211 116.25397) + (xy 143.128533 116.166171) + (xy 143.332883 116.042168) + (xy 143.513419 115.885507) + (xy 143.516802 115.881381) + (xy 143.516806 115.881377) + (xy 143.618897 115.756867) + (xy 143.664978 115.700667) + (xy 143.667871 115.695586) + (xy 143.780584 115.497577) + (xy 143.783227 115.492934) + (xy 143.864784 115.268247) + (xy 143.865734 115.262995) + (xy 143.90658 115.037115) + (xy 143.906581 115.037107) + (xy 143.907318 115.033031) + (xy 143.9085 115.007968) + (xy 143.9085 113.039988) + (xy 143.893383 112.861825) + (xy 143.883951 112.825484) + (xy 143.834673 112.635625) + (xy 143.834671 112.63562) + (xy 143.833332 112.63046) + (xy 143.798692 112.553563) + (xy 143.737347 112.417381) + (xy 143.737346 112.417378) + (xy 143.735157 112.41252) + (xy 143.601666 112.214238) + (xy 143.436674 112.041282) + (xy 143.2449 111.898598) + (xy 143.240149 111.896182) + (xy 143.240145 111.89618) + (xy 143.036586 111.792686) + (xy 143.036585 111.792686) + (xy 143.031828 111.790267) + (xy 142.889362 111.74603) + (xy 142.808651 111.720968) + (xy 142.808645 111.720967) + (xy 142.803548 111.719384) + (xy 142.672352 111.701995) + (xy 142.571873 111.688677) + (xy 142.571869 111.688677) + (xy 142.566589 111.687977) + (xy 142.56126 111.688177) + (xy 142.561259 111.688177) + (xy 142.463491 111.691848) + (xy 142.327726 111.696945) + (xy 142.264954 111.710116) + (xy 142.099016 111.744933) + (xy 142.099013 111.744934) + (xy 142.093789 111.74603) + (xy 141.871467 111.833829) + (xy 141.667117 111.957832) + (xy 141.663087 111.961329) + (xy 141.509762 112.094378) + (xy 141.486581 112.114493) + (xy 141.483198 112.118619) + (xy 141.483194 112.118623) + (xy 141.404795 112.214238) + (xy 141.335022 112.299333) + (xy 141.332383 112.303969) + (xy 141.332381 112.303972) + (xy 141.276065 112.402905) + (xy 141.216773 112.507066) + (xy 141.135216 112.731753) + (xy 141.134267 112.737002) + (xy 141.134266 112.737005) + (xy 141.09342 112.962885) + (xy 141.093419 112.962893) + (xy 141.092682 112.966969) + (xy 141.0915 112.992032) + (xy 141.0915 114.960012) + (xy 140.408 114.960012) + (xy 140.408 114.272115) + (xy 140.403525 114.256876) + (xy 140.402135 114.255671) + (xy 140.394452 114.254) + (xy 139.272115 114.254) + (xy 139.256876 114.258475) + (xy 139.255671 114.259865) + (xy 139.254 114.267548) + (xy 139.254 116.289884) + (xy 138.746 116.289884) + (xy 138.746 114.272115) + (xy 138.741525 114.256876) + (xy 138.740135 114.255671) + (xy 138.732452 114.254) + (xy 137.610116 114.254) + (xy 137.594877 114.258475) + (xy 137.593672 114.259865) + (xy 137.592001 114.267548) + (xy 137.592001 115.597095) + (xy 127.723935 115.597095) + (xy 127.780584 115.497577) + (xy 127.783227 115.492934) + (xy 127.864784 115.268247) + (xy 127.865734 115.262995) + (xy 127.90658 115.037115) + (xy 127.906581 115.037107) + (xy 127.907318 115.033031) + (xy 127.9085 115.007968) + (xy 127.9085 113.727885) + (xy 137.592 113.727885) + (xy 137.596475 113.743124) + (xy 137.597865 113.744329) + (xy 137.605548 113.746) + (xy 138.727885 113.746) + (xy 138.743124 113.741525) + (xy 138.744329 113.740135) + (xy 138.746 113.732452) + (xy 138.746 113.727885) + (xy 139.254 113.727885) + (xy 139.258475 113.743124) + (xy 139.259865 113.744329) + (xy 139.267548 113.746) + (xy 140.389884 113.746) + (xy 140.405123 113.741525) + (xy 140.406328 113.740135) + (xy 140.407999 113.732452) + (xy 140.407999 112.402905) + (xy 140.407662 112.396386) + (xy 140.397743 112.300794) + (xy 140.394851 112.2874) + (xy 140.343412 112.133216) + (xy 140.337239 112.120038) + (xy 140.251937 111.982193) + (xy 140.242901 111.970792) + (xy 140.128171 111.856261) + (xy 140.11676 111.847249) + (xy 139.978757 111.762184) + (xy 139.965576 111.756037) + (xy 139.81129 111.704862) + (xy 139.797914 111.701995) + (xy 139.703562 111.692328) + (xy 139.697145 111.692) + (xy 139.272115 111.692) + (xy 139.256876 111.696475) + (xy 139.255671 111.697865) + (xy 139.254 111.705548) + (xy 139.254 113.727885) + (xy 138.746 113.727885) + (xy 138.746 111.710116) + (xy 138.741525 111.694877) + (xy 138.740135 111.693672) + (xy 138.732452 111.692001) + (xy 138.302905 111.692001) + (xy 138.296386 111.692338) + (xy 138.200794 111.702257) + (xy 138.1874 111.705149) + (xy 138.033216 111.756588) + (xy 138.020038 111.762761) + (xy 137.882193 111.848063) + (xy 137.870792 111.857099) + (xy 137.756261 111.971829) + (xy 137.747249 111.98324) + (xy 137.662184 112.121243) + (xy 137.656037 112.134424) + (xy 137.604862 112.28871) + (xy 137.601995 112.302086) + (xy 137.592328 112.396438) + (xy 137.592 112.402855) + (xy 137.592 113.727885) + (xy 127.9085 113.727885) + (xy 127.9085 113.039988) + (xy 127.893383 112.861825) + (xy 127.883951 112.825484) + (xy 127.834673 112.635625) + (xy 127.834671 112.63562) + (xy 127.833332 112.63046) + (xy 127.798692 112.553563) + (xy 127.737347 112.417381) + (xy 127.737346 112.417378) + (xy 127.735157 112.41252) + (xy 127.601666 112.214238) + (xy 127.436674 112.041282) + (xy 127.2449 111.898598) + (xy 127.240149 111.896182) + (xy 127.240145 111.89618) + (xy 127.036586 111.792686) + (xy 127.036585 111.792686) + (xy 127.031828 111.790267) + (xy 126.889362 111.74603) + (xy 126.808651 111.720968) + (xy 126.808645 111.720967) + (xy 126.803548 111.719384) + (xy 126.672352 111.701995) + (xy 126.571873 111.688677) + (xy 126.571869 111.688677) + (xy 126.566589 111.687977) + (xy 126.56126 111.688177) + (xy 126.561259 111.688177) + (xy 126.463491 111.691848) + (xy 126.327726 111.696945) + (xy 126.264954 111.710116) + (xy 126.099016 111.744933) + (xy 126.099013 111.744934) + (xy 126.093789 111.74603) + (xy 125.871467 111.833829) + (xy 125.667117 111.957832) + (xy 125.663087 111.961329) + (xy 125.509762 112.094378) + (xy 125.486581 112.114493) + (xy 125.483198 112.118619) + (xy 125.483194 112.118623) + (xy 125.404795 112.214238) + (xy 125.335022 112.299333) + (xy 125.332383 112.303969) + (xy 125.332381 112.303972) + (xy 125.276065 112.402905) + (xy 125.216773 112.507066) + (xy 125.135216 112.731753) + (xy 125.134267 112.737002) + (xy 125.134266 112.737005) + (xy 125.09342 112.962885) + (xy 125.093419 112.962893) + (xy 125.092682 112.966969) + (xy 125.0915 112.992032) + (xy 125.0915 114.960012) + (xy 124.408 114.960012) + (xy 124.408 114.272115) + (xy 124.403525 114.256876) + (xy 124.402135 114.255671) + (xy 124.394452 114.254) + (xy 123.272115 114.254) + (xy 123.256876 114.258475) + (xy 123.255671 114.259865) + (xy 123.254 114.267548) + (xy 123.254 116.289884) + (xy 122.746 116.289884) + (xy 122.746 114.272115) + (xy 122.741525 114.256876) + (xy 122.740135 114.255671) + (xy 122.732452 114.254) + (xy 121.610116 114.254) + (xy 121.594877 114.258475) + (xy 121.593672 114.259865) + (xy 121.592001 114.267548) + (xy 121.592001 115.597095) + (xy 111.723935 115.597095) + (xy 111.780584 115.497577) + (xy 111.783227 115.492934) + (xy 111.864784 115.268247) + (xy 111.865734 115.262995) + (xy 111.90658 115.037115) + (xy 111.906581 115.037107) + (xy 111.907318 115.033031) + (xy 111.9085 115.007968) + (xy 111.9085 113.727885) + (xy 121.592 113.727885) + (xy 121.596475 113.743124) + (xy 121.597865 113.744329) + (xy 121.605548 113.746) + (xy 122.727885 113.746) + (xy 122.743124 113.741525) + (xy 122.744329 113.740135) + (xy 122.746 113.732452) + (xy 122.746 113.727885) + (xy 123.254 113.727885) + (xy 123.258475 113.743124) + (xy 123.259865 113.744329) + (xy 123.267548 113.746) + (xy 124.389884 113.746) + (xy 124.405123 113.741525) + (xy 124.406328 113.740135) + (xy 124.407999 113.732452) + (xy 124.407999 112.402905) + (xy 124.407662 112.396386) + (xy 124.397743 112.300794) + (xy 124.394851 112.2874) + (xy 124.343412 112.133216) + (xy 124.337239 112.120038) + (xy 124.251937 111.982193) + (xy 124.242901 111.970792) + (xy 124.128171 111.856261) + (xy 124.11676 111.847249) + (xy 123.978757 111.762184) + (xy 123.965576 111.756037) + (xy 123.81129 111.704862) + (xy 123.797914 111.701995) + (xy 123.703562 111.692328) + (xy 123.697145 111.692) + (xy 123.272115 111.692) + (xy 123.256876 111.696475) + (xy 123.255671 111.697865) + (xy 123.254 111.705548) + (xy 123.254 113.727885) + (xy 122.746 113.727885) + (xy 122.746 111.710116) + (xy 122.741525 111.694877) + (xy 122.740135 111.693672) + (xy 122.732452 111.692001) + (xy 122.302905 111.692001) + (xy 122.296386 111.692338) + (xy 122.200794 111.702257) + (xy 122.1874 111.705149) + (xy 122.033216 111.756588) + (xy 122.020038 111.762761) + (xy 121.882193 111.848063) + (xy 121.870792 111.857099) + (xy 121.756261 111.971829) + (xy 121.747249 111.98324) + (xy 121.662184 112.121243) + (xy 121.656037 112.134424) + (xy 121.604862 112.28871) + (xy 121.601995 112.302086) + (xy 121.592328 112.396438) + (xy 121.592 112.402855) + (xy 121.592 113.727885) + (xy 111.9085 113.727885) + (xy 111.9085 113.039988) + (xy 111.893383 112.861825) + (xy 111.883951 112.825484) + (xy 111.834673 112.635625) + (xy 111.834671 112.63562) + (xy 111.833332 112.63046) + (xy 111.798692 112.553563) + (xy 111.737347 112.417381) + (xy 111.737346 112.417378) + (xy 111.735157 112.41252) + (xy 111.601666 112.214238) + (xy 111.436674 112.041282) + (xy 111.2449 111.898598) + (xy 111.240149 111.896182) + (xy 111.240145 111.89618) + (xy 111.036586 111.792686) + (xy 111.036585 111.792686) + (xy 111.031828 111.790267) + (xy 110.889362 111.74603) + (xy 110.808651 111.720968) + (xy 110.808645 111.720967) + (xy 110.803548 111.719384) + (xy 110.672352 111.701995) + (xy 110.571873 111.688677) + (xy 110.571869 111.688677) + (xy 110.566589 111.687977) + (xy 110.56126 111.688177) + (xy 110.561259 111.688177) + (xy 110.463491 111.691848) + (xy 110.327726 111.696945) + (xy 110.264954 111.710116) + (xy 110.099016 111.744933) + (xy 110.099013 111.744934) + (xy 110.093789 111.74603) + (xy 109.871467 111.833829) + (xy 109.667117 111.957832) + (xy 109.663087 111.961329) + (xy 109.509762 112.094378) + (xy 109.486581 112.114493) + (xy 109.483198 112.118619) + (xy 109.483194 112.118623) + (xy 109.404795 112.214238) + (xy 109.335022 112.299333) + (xy 109.332383 112.303969) + (xy 109.332381 112.303972) + (xy 109.276065 112.402905) + (xy 109.216773 112.507066) + (xy 109.135216 112.731753) + (xy 109.134267 112.737002) + (xy 109.134266 112.737005) + (xy 109.09342 112.962885) + (xy 109.093419 112.962893) + (xy 109.092682 112.966969) + (xy 109.0915 112.992032) + (xy 109.0915 114.960012) + (xy 108.408 114.960012) + (xy 108.408 114.272115) + (xy 108.403525 114.256876) + (xy 108.402135 114.255671) + (xy 108.394452 114.254) + (xy 107.272115 114.254) + (xy 107.256876 114.258475) + (xy 107.255671 114.259865) + (xy 107.254 114.267548) + (xy 107.254 116.289884) + (xy 106.746 116.289884) + (xy 106.746 114.272115) + (xy 106.741525 114.256876) + (xy 106.740135 114.255671) + (xy 106.732452 114.254) + (xy 105.610116 114.254) + (xy 105.594877 114.258475) + (xy 105.593672 114.259865) + (xy 105.592001 114.267548) + (xy 105.592001 115.597095) + (xy 62.69027 115.597095) + (xy 62.705578 115.305) + (xy 62.685278 114.917662) + (xy 62.683859 114.908697) + (xy 62.625118 114.537828) + (xy 62.624602 114.534567) + (xy 62.524214 114.159913) + (xy 62.385214 113.797806) + (xy 62.349588 113.727885) + (xy 105.592 113.727885) + (xy 105.596475 113.743124) + (xy 105.597865 113.744329) + (xy 105.605548 113.746) + (xy 106.727885 113.746) + (xy 106.743124 113.741525) + (xy 106.744329 113.740135) + (xy 106.746 113.732452) + (xy 106.746 113.727885) + (xy 107.254 113.727885) + (xy 107.258475 113.743124) + (xy 107.259865 113.744329) + (xy 107.267548 113.746) + (xy 108.389884 113.746) + (xy 108.405123 113.741525) + (xy 108.406328 113.740135) + (xy 108.407999 113.732452) + (xy 108.407999 112.402905) + (xy 108.407662 112.396386) + (xy 108.397743 112.300794) + (xy 108.394851 112.2874) + (xy 108.343412 112.133216) + (xy 108.337239 112.120038) + (xy 108.251937 111.982193) + (xy 108.242901 111.970792) + (xy 108.128171 111.856261) + (xy 108.11676 111.847249) + (xy 107.978757 111.762184) + (xy 107.965576 111.756037) + (xy 107.81129 111.704862) + (xy 107.797914 111.701995) + (xy 107.703562 111.692328) + (xy 107.697145 111.692) + (xy 107.272115 111.692) + (xy 107.256876 111.696475) + (xy 107.255671 111.697865) + (xy 107.254 111.705548) + (xy 107.254 113.727885) + (xy 106.746 113.727885) + (xy 106.746 111.710116) + (xy 106.741525 111.694877) + (xy 106.740135 111.693672) + (xy 106.732452 111.692001) + (xy 106.302905 111.692001) + (xy 106.296386 111.692338) + (xy 106.200794 111.702257) + (xy 106.1874 111.705149) + (xy 106.033216 111.756588) + (xy 106.020038 111.762761) + (xy 105.882193 111.848063) + (xy 105.870792 111.857099) + (xy 105.756261 111.971829) + (xy 105.747249 111.98324) + (xy 105.662184 112.121243) + (xy 105.656037 112.134424) + (xy 105.604862 112.28871) + (xy 105.601995 112.302086) + (xy 105.592328 112.396438) + (xy 105.592 112.402855) + (xy 105.592 113.727885) + (xy 62.349588 113.727885) + (xy 62.209125 113.452211) + (xy 61.997876 113.126916) + (xy 61.753781 112.825484) + (xy 61.479516 112.551219) + (xy 61.178084 112.307124) + (xy 60.852789 112.095875) + (xy 60.507194 111.919786) + (xy 60.169786 111.790267) + (xy 60.148177 111.781972) + (xy 60.148175 111.781971) + (xy 60.145087 111.780786) + (xy 59.770433 111.680398) + (xy 59.566799 111.648146) + (xy 59.390586 111.620236) + (xy 59.390578 111.620235) + (xy 59.387338 111.619722) + (xy 59 111.599422) + (xy 58.612662 111.619722) + (xy 58.609422 111.620235) + (xy 58.609414 111.620236) + (xy 58.433201 111.648146) + (xy 58.229567 111.680398) + (xy 57.854913 111.780786) + (xy 57.851825 111.781971) + (xy 57.851823 111.781972) + (xy 57.830214 111.790267) + (xy 57.492806 111.919786) + (xy 57.147211 112.095875) + (xy 56.821916 112.307124) + (xy 56.520484 112.551219) + (xy 56.246219 112.825484) + (xy 56.002124 113.126916) + (xy 55.790875 113.452211) + (xy 55.789381 113.455143) + (xy 55.789373 113.455157) + (xy 55.753718 113.525136) + (xy 55.70497 113.576752) + (xy 55.636056 113.593818) + (xy 55.565887 113.568761) + (xy 55.562821 113.566463) + (xy 55.546705 113.554385) + (xy 55.410316 113.503255) + (xy 55.348134 113.4965) + (xy 52.651866 113.4965) + (xy 52.589684 113.503255) + (xy 52.453295 113.554385) + (xy 52.336739 113.641739) + (xy 52.249385 113.758295) + (xy 52.198255 113.894684) + (xy 52.1915 113.956866) + (xy 52.1915 116.653134) + (xy 41.077575 116.653134) + (xy 41.023429 116.550869) + (xy 40.941702 116.396513) + (xy 40.941698 116.396506) + (xy 40.940103 116.393494) + (xy 40.73919 116.096746) + (xy 40.721116 116.075433) + (xy 40.618863 115.954861) + (xy 40.507403 115.823432) + (xy 40.247454 115.57675) + (xy 40.056448 115.431242) + (xy 39.965091 115.361647) + (xy 39.965089 115.361646) + (xy 39.962384 115.359585) + (xy 39.959472 115.357828) + (xy 39.959467 115.357825) + (xy 39.658443 115.176236) + (xy 39.658437 115.176233) + (xy 39.655528 115.174478) + (xy 39.359606 115.037115) + (xy 39.333571 115.02503) + (xy 39.333569 115.025029) + (xy 39.330475 115.023593) + (xy 39.134774 114.957352) + (xy 38.994255 114.909789) + (xy 38.99425 114.909788) + (xy 38.991028 114.908697) + (xy 38.792681 114.864724) + (xy 38.644493 114.831871) + (xy 38.644487 114.83187) + (xy 38.641158 114.831132) + (xy 38.637769 114.830758) + (xy 38.637764 114.830757) + (xy 38.288338 114.79218) + (xy 38.288333 114.79218) + (xy 38.284957 114.791807) + (xy 38.281558 114.791801) + (xy 38.281557 114.791801) + (xy 38.11208 114.791505) + (xy 37.926592 114.791182) + (xy 37.813413 114.803277) + (xy 37.573639 114.828901) + (xy 37.573631 114.828902) + (xy 37.570256 114.829263) + (xy 37.220117 114.905606) + (xy 36.880271 115.019317) + (xy 36.877178 115.020739) + (xy 36.877177 115.02074) + (xy 36.850455 115.033031) + (xy 36.554694 115.169066) + (xy 36.55176 115.170822) + (xy 36.551758 115.170823) + (xy 36.322049 115.308301) + (xy 36.247193 115.353101) + (xy 36.244467 115.355163) + (xy 36.244465 115.355164) + (xy 36.23862 115.359585) + (xy 35.961367 115.56927) + (xy 35.958882 115.571612) + (xy 35.958877 115.571616) + (xy 35.924977 115.603562) + (xy 35.700559 115.815043) + (xy 35.467819 116.087546) + (xy 35.4659 116.090358) + (xy 35.465897 116.090363) + (xy 35.414185 116.166171) + (xy 35.265871 116.383591) + (xy 35.264273 116.386584) + (xy 35.264265 116.386597) + (xy 35.245148 116.422401) + (xy 35.195418 116.473071) + (xy 35.126189 116.488812) + (xy 35.059439 116.464625) + (xy 35.016362 116.40819) + (xy 35.008 116.363054) + (xy 35.008 111.29267) + (xy 84.13216 111.29267) + (xy 84.137887 111.30032) + (xy 84.309042 111.405205) + (xy 84.317837 111.409687) + (xy 84.527988 111.496734) + (xy 84.537373 111.499783) + (xy 84.758554 111.552885) + (xy 84.768301 111.554428) + (xy 84.99507 111.572275) + (xy 85.00493 111.572275) + (xy 85.231699 111.554428) + (xy 85.241446 111.552885) + (xy 85.462627 111.499783) + (xy 85.472012 111.496734) + (xy 85.682163 111.409687) + (xy 85.690958 111.405205) + (xy 85.858445 111.302568) + (xy 85.867907 111.29211) + (xy 85.864124 111.283334) + (xy 85.012812 110.432022) + (xy 84.998868 110.424408) + (xy 84.997035 110.424539) + (xy 84.99042 110.42879) + (xy 84.13892 111.28029) + (xy 84.13216 111.29267) + (xy 35.008 111.29267) + (xy 35.008 110.06493) + (xy 83.487725 110.06493) + (xy 83.505572 110.291699) + (xy 83.507115 110.301446) + (xy 83.560217 110.522627) + (xy 83.563266 110.532012) + (xy 83.650313 110.742163) + (xy 83.654795 110.750958) + (xy 83.757432 110.918445) + (xy 83.76789 110.927907) + (xy 83.776666 110.924124) + (xy 84.627978 110.072812) + (xy 84.634356 110.061132) + (xy 85.364408 110.061132) + (xy 85.364539 110.062965) + (xy 85.36879 110.06958) + (xy 86.22029 110.92108) + (xy 86.23267 110.92784) + (xy 86.24032 110.922113) + (xy 86.345205 110.750958) + (xy 86.349687 110.742163) + (xy 86.436734 110.532012) + (xy 86.439783 110.522627) + (xy 86.492885 110.301446) + (xy 86.494428 110.291699) + (xy 86.512275 110.06493) + (xy 86.512275 110.05507) + (xy 86.494428 109.828301) + (xy 86.492885 109.818554) + (xy 86.439783 109.597373) + (xy 86.436734 109.587988) + (xy 86.349687 109.377837) + (xy 86.345205 109.369042) + (xy 86.242568 109.201555) + (xy 86.23211 109.192093) + (xy 86.223334 109.195876) + (xy 85.372022 110.047188) + (xy 85.364408 110.061132) + (xy 84.634356 110.061132) + (xy 84.635592 110.058868) + (xy 84.635461 110.057035) + (xy 84.63121 110.05042) + (xy 83.77971 109.19892) + (xy 83.76733 109.19216) + (xy 83.75968 109.197887) + (xy 83.654795 109.369042) + (xy 83.650313 109.377837) + (xy 83.563266 109.587988) + (xy 83.560217 109.597373) + (xy 83.507115 109.818554) + (xy 83.505572 109.828301) + (xy 83.487725 110.05507) + (xy 83.487725 110.06493) + (xy 35.008 110.06493) + (xy 35.008 108.82789) + (xy 84.132093 108.82789) + (xy 84.135876 108.836666) + (xy 84.987188 109.687978) + (xy 85.001132 109.695592) + (xy 85.002965 109.695461) + (xy 85.00958 109.69121) + (xy 85.86108 108.83971) + (xy 85.86784 108.82733) + (xy 85.862113 108.81968) + (xy 85.690958 108.714795) + (xy 85.682163 108.710313) + (xy 85.472012 108.623266) + (xy 85.462627 108.620217) + (xy 85.241446 108.567115) + (xy 85.231699 108.565572) + (xy 85.00493 108.547725) + (xy 84.99507 108.547725) + (xy 84.768301 108.565572) + (xy 84.758554 108.567115) + (xy 84.537373 108.620217) + (xy 84.527988 108.623266) + (xy 84.317837 108.710313) + (xy 84.309042 108.714795) + (xy 84.141555 108.817432) + (xy 84.132093 108.82789) + (xy 35.008 108.82789) + (xy 35.008 103.986367) + (xy 39.794511 103.986367) + (xy 39.794661 103.989548) + (xy 39.79636 104.025566) + (xy 39.813126 104.381111) + (xy 39.871538 104.771953) + (xy 39.969148 105.154892) + (xy 40.104956 105.526006) + (xy 40.277573 105.881495) + (xy 40.48523 106.217721) + (xy 40.725802 106.531241) + (xy 40.727984 106.533557) + (xy 40.727993 106.533567) + (xy 40.983332 106.804525) + (xy 40.996826 106.818844) + (xy 40.999231 106.820928) + (xy 40.999237 106.820933) + (xy 41.199638 106.994525) + (xy 41.295526 107.077586) + (xy 41.618845 107.304818) + (xy 41.963472 107.498214) + (xy 42.325878 107.655793) + (xy 42.702353 107.775941) + (xy 42.912256 107.820175) + (xy 43.085924 107.856773) + (xy 43.085929 107.856774) + (xy 43.089043 107.85743) + (xy 43.481988 107.899423) + (xy 43.485176 107.89944) + (xy 43.485181 107.89944) + (xy 43.664213 107.900378) + (xy 43.877166 107.901493) + (xy 44.025671 107.887193) + (xy 44.267364 107.863921) + (xy 44.267369 107.86392) + (xy 44.270529 107.863616) + (xy 44.273648 107.862993) + (xy 44.273653 107.862992) + (xy 44.464643 107.824828) + (xy 44.658051 107.786181) + (xy 44.947161 107.69724) + (xy 45.032722 107.670918) + (xy 45.032725 107.670917) + (xy 45.035764 107.669982) + (xy 45.038692 107.668745) + (xy 45.038698 107.668743) + (xy 45.217178 107.59335) + (xy 45.399801 107.516207) + (xy 45.402604 107.514673) + (xy 45.402609 107.51467) + (xy 45.584824 107.41491) + (xy 45.746434 107.326431) + (xy 46.072114 107.102597) + (xy 46.102861 107.076522) + (xy 46.371078 106.849057) + (xy 46.37108 106.849055) + (xy 46.373508 106.846996) + (xy 46.375713 106.844704) + (xy 46.375719 106.844699) + (xy 46.606554 106.604825) + (xy 46.647528 106.562247) + (xy 46.89137 106.251264) + (xy 46.908141 106.224736) + (xy 47.080199 105.952566) + (xy 47.102537 105.917231) + (xy 47.103957 105.914382) + (xy 47.103962 105.914374) + (xy 47.277447 105.566416) + (xy 47.278867 105.563568) + (xy 47.418554 105.193897) + (xy 47.428933 105.154892) + (xy 47.519347 104.815087) + (xy 47.520168 104.812002) + (xy 47.58267 104.421793) + (xy 47.605418 104.027265) + (xy 47.605513 104) + (xy 47.604823 103.986367) + (xy 62.394511 103.986367) + (xy 62.394661 103.989548) + (xy 62.39636 104.025566) + (xy 62.413126 104.381111) + (xy 62.471538 104.771953) + (xy 62.569148 105.154892) + (xy 62.704956 105.526006) + (xy 62.877573 105.881495) + (xy 63.08523 106.217721) + (xy 63.325802 106.531241) + (xy 63.327984 106.533557) + (xy 63.327993 106.533567) + (xy 63.583332 106.804525) + (xy 63.596826 106.818844) + (xy 63.599231 106.820928) + (xy 63.599237 106.820933) + (xy 63.799638 106.994525) + (xy 63.895526 107.077586) + (xy 64.218845 107.304818) + (xy 64.563472 107.498214) + (xy 64.925878 107.655793) + (xy 65.302353 107.775941) + (xy 65.512256 107.820175) + (xy 65.685924 107.856773) + (xy 65.685929 107.856774) + (xy 65.689043 107.85743) + (xy 66.081988 107.899423) + (xy 66.085176 107.89944) + (xy 66.085181 107.89944) + (xy 66.264213 107.900378) + (xy 66.477166 107.901493) + (xy 66.625671 107.887193) + (xy 66.867364 107.863921) + (xy 66.867369 107.86392) + (xy 66.870529 107.863616) + (xy 66.873648 107.862993) + (xy 66.873653 107.862992) + (xy 67.064643 107.824828) + (xy 67.258051 107.786181) + (xy 67.547161 107.69724) + (xy 67.632722 107.670918) + (xy 67.632725 107.670917) + (xy 67.635764 107.669982) + (xy 67.638692 107.668745) + (xy 67.638698 107.668743) + (xy 67.817178 107.59335) + (xy 67.999801 107.516207) + (xy 68.002604 107.514673) + (xy 68.002609 107.51467) + (xy 68.184824 107.41491) + (xy 68.346434 107.326431) + (xy 68.672114 107.102597) + (xy 68.702861 107.076522) + (xy 103.820801 107.076522) + (xy 103.859092 107.219423) + (xy 103.862842 107.229727) + (xy 103.947521 107.411323) + (xy 103.952998 107.420811) + (xy 104.067925 107.584942) + (xy 104.074981 107.59335) + (xy 104.21665 107.735019) + (xy 104.225058 107.742075) + (xy 104.389189 107.857002) + (xy 104.398677 107.862479) + (xy 104.580273 107.947158) + (xy 104.590577 107.950908) + (xy 104.728503 107.987866) + (xy 104.742599 107.98753) + (xy 104.746 107.979588) + (xy 104.746 107.974439) + (xy 105.254 107.974439) + (xy 105.257973 107.98797) + (xy 105.266522 107.989199) + (xy 105.409423 107.950908) + (xy 105.419727 107.947158) + (xy 105.601323 107.862479) + (xy 105.610811 107.857002) + (xy 105.774942 107.742075) + (xy 105.78335 107.735019) + (xy 105.925019 107.59335) + (xy 105.932075 107.584942) + (xy 106.047002 107.420811) + (xy 106.052479 107.411323) + (xy 106.137158 107.229727) + (xy 106.140908 107.219423) + (xy 106.177866 107.081497) + (xy 106.17753 107.067401) + (xy 106.169588 107.064) + (xy 105.272115 107.064) + (xy 105.256876 107.068475) + (xy 105.255671 107.069865) + (xy 105.254 107.077548) + (xy 105.254 107.974439) + (xy 104.746 107.974439) + (xy 104.746 107.082115) + (xy 104.741525 107.066876) + (xy 104.740135 107.065671) + (xy 104.732452 107.064) + (xy 103.835561 107.064) + (xy 103.82203 107.067973) + (xy 103.820801 107.076522) + (xy 68.702861 107.076522) + (xy 68.971078 106.849057) + (xy 68.97108 106.849055) + (xy 68.973508 106.846996) + (xy 68.975713 106.844704) + (xy 68.975719 106.844699) + (xy 69.00911 106.81) + (xy 107.786884 106.81) + (xy 107.805314 107.020655) + (xy 107.806738 107.025968) + (xy 107.806738 107.02597) + (xy 107.857649 107.21597) + (xy 107.860044 107.22491) + (xy 107.862366 107.229891) + (xy 107.862367 107.229892) + (xy 107.875696 107.258475) + (xy 107.949411 107.416558) + (xy 108.070699 107.589776) + (xy 108.220224 107.739301) + (xy 108.393442 107.860589) + (xy 108.39842 107.86291) + (xy 108.398423 107.862912) + (xy 108.580108 107.947633) + (xy 108.58509 107.949956) + (xy 108.590398 107.951378) + (xy 108.5904 107.951379) + (xy 108.78403 108.003262) + (xy 108.784032 108.003262) + (xy 108.789345 108.004686) + (xy 109 108.023116) + (xy 109.210655 108.004686) + (xy 109.215968 108.003262) + (xy 109.21597 108.003262) + (xy 109.4096 107.951379) + (xy 109.409602 107.951378) + (xy 109.41491 107.949956) + (xy 109.419892 107.947633) + (xy 109.601577 107.862912) + (xy 109.60158 107.86291) + (xy 109.606558 107.860589) + (xy 109.779776 107.739301) + (xy 109.929301 107.589776) + (xy 110.050589 107.416558) + (xy 110.124305 107.258475) + (xy 110.137633 107.229892) + (xy 110.137634 107.229891) + (xy 110.139956 107.22491) + (xy 110.142352 107.21597) + (xy 110.193262 107.02597) + (xy 110.193262 107.025968) + (xy 110.194686 107.020655) + (xy 110.213116 106.81) + (xy 111.786884 106.81) + (xy 111.805314 107.020655) + (xy 111.806738 107.025968) + (xy 111.806738 107.02597) + (xy 111.857649 107.21597) + (xy 111.860044 107.22491) + (xy 111.862366 107.229891) + (xy 111.862367 107.229892) + (xy 111.875696 107.258475) + (xy 111.949411 107.416558) + (xy 112.070699 107.589776) + (xy 112.220224 107.739301) + (xy 112.393442 107.860589) + (xy 112.39842 107.86291) + (xy 112.398423 107.862912) + (xy 112.580108 107.947633) + (xy 112.58509 107.949956) + (xy 112.590398 107.951378) + (xy 112.5904 107.951379) + (xy 112.78403 108.003262) + (xy 112.784032 108.003262) + (xy 112.789345 108.004686) + (xy 113 108.023116) + (xy 113.210655 108.004686) + (xy 113.215968 108.003262) + (xy 113.21597 108.003262) + (xy 113.4096 107.951379) + (xy 113.409602 107.951378) + (xy 113.41491 107.949956) + (xy 113.419892 107.947633) + (xy 113.601577 107.862912) + (xy 113.60158 107.86291) + (xy 113.606558 107.860589) + (xy 113.779776 107.739301) + (xy 113.929301 107.589776) + (xy 114.050589 107.416558) + (xy 114.120553 107.266522) + (xy 119.820801 107.266522) + (xy 119.859092 107.409423) + (xy 119.862842 107.419727) + (xy 119.947521 107.601323) + (xy 119.952998 107.610811) + (xy 120.067925 107.774942) + (xy 120.074981 107.78335) + (xy 120.21665 107.925019) + (xy 120.225058 107.932075) + (xy 120.389189 108.047002) + (xy 120.398677 108.052479) + (xy 120.580273 108.137158) + (xy 120.590577 108.140908) + (xy 120.728503 108.177866) + (xy 120.742599 108.17753) + (xy 120.746 108.169588) + (xy 120.746 108.164439) + (xy 121.254 108.164439) + (xy 121.257973 108.17797) + (xy 121.266522 108.179199) + (xy 121.409423 108.140908) + (xy 121.419727 108.137158) + (xy 121.601323 108.052479) + (xy 121.610811 108.047002) + (xy 121.774942 107.932075) + (xy 121.78335 107.925019) + (xy 121.925019 107.78335) + (xy 121.932075 107.774942) + (xy 122.047002 107.610811) + (xy 122.052479 107.601323) + (xy 122.137158 107.419727) + (xy 122.140908 107.409423) + (xy 122.177866 107.271497) + (xy 122.17753 107.257401) + (xy 122.169588 107.254) + (xy 121.272115 107.254) + (xy 121.256876 107.258475) + (xy 121.255671 107.259865) + (xy 121.254 107.267548) + (xy 121.254 108.164439) + (xy 120.746 108.164439) + (xy 120.746 107.272115) + (xy 120.741525 107.256876) + (xy 120.740135 107.255671) + (xy 120.732452 107.254) + (xy 119.835561 107.254) + (xy 119.82203 107.257973) + (xy 119.820801 107.266522) + (xy 114.120553 107.266522) + (xy 114.124305 107.258475) + (xy 114.137633 107.229892) + (xy 114.137634 107.229891) + (xy 114.139956 107.22491) + (xy 114.142352 107.21597) + (xy 114.193262 107.02597) + (xy 114.193262 107.025968) + (xy 114.194686 107.020655) + (xy 114.196493 107) + (xy 123.786884 107) + (xy 123.805314 107.210655) + (xy 123.806738 107.215968) + (xy 123.806738 107.21597) + (xy 123.835851 107.324619) + (xy 123.860044 107.41491) + (xy 123.862366 107.419891) + (xy 123.862367 107.419892) + (xy 123.943402 107.593671) + (xy 123.949411 107.606558) + (xy 124.070699 107.779776) + (xy 124.220224 107.929301) + (xy 124.393442 108.050589) + (xy 124.39842 108.05291) + (xy 124.398423 108.052912) + (xy 124.580108 108.137633) + (xy 124.58509 108.139956) + (xy 124.590398 108.141378) + (xy 124.5904 108.141379) + (xy 124.78403 108.193262) + (xy 124.784032 108.193262) + (xy 124.789345 108.194686) + (xy 125 108.213116) + (xy 125.210655 108.194686) + (xy 125.215968 108.193262) + (xy 125.21597 108.193262) + (xy 125.4096 108.141379) + (xy 125.409602 108.141378) + (xy 125.41491 108.139956) + (xy 125.419892 108.137633) + (xy 125.601577 108.052912) + (xy 125.60158 108.05291) + (xy 125.606558 108.050589) + (xy 125.779776 107.929301) + (xy 125.929301 107.779776) + (xy 126.050589 107.606558) + (xy 126.056599 107.593671) + (xy 126.137633 107.419892) + (xy 126.137634 107.419891) + (xy 126.139956 107.41491) + (xy 126.16415 107.324619) + (xy 126.193262 107.21597) + (xy 126.193262 107.215968) + (xy 126.194686 107.210655) + (xy 126.213116 107) + (xy 127.786884 107) + (xy 127.805314 107.210655) + (xy 127.806738 107.215968) + (xy 127.806738 107.21597) + (xy 127.835851 107.324619) + (xy 127.860044 107.41491) + (xy 127.862366 107.419891) + (xy 127.862367 107.419892) + (xy 127.943402 107.593671) + (xy 127.949411 107.606558) + (xy 128.070699 107.779776) + (xy 128.220224 107.929301) + (xy 128.393442 108.050589) + (xy 128.39842 108.05291) + (xy 128.398423 108.052912) + (xy 128.580108 108.137633) + (xy 128.58509 108.139956) + (xy 128.590398 108.141378) + (xy 128.5904 108.141379) + (xy 128.78403 108.193262) + (xy 128.784032 108.193262) + (xy 128.789345 108.194686) + (xy 129 108.213116) + (xy 129.210655 108.194686) + (xy 129.215968 108.193262) + (xy 129.21597 108.193262) + (xy 129.4096 108.141379) + (xy 129.409602 108.141378) + (xy 129.41491 108.139956) + (xy 129.419892 108.137633) + (xy 129.601577 108.052912) + (xy 129.60158 108.05291) + (xy 129.606558 108.050589) + (xy 129.779776 107.929301) + (xy 129.929301 107.779776) + (xy 130.050589 107.606558) + (xy 130.056599 107.593671) + (xy 130.137633 107.419892) + (xy 130.137634 107.419891) + (xy 130.139956 107.41491) + (xy 130.16415 107.324619) + (xy 130.193262 107.21597) + (xy 130.193262 107.215968) + (xy 130.194686 107.210655) + (xy 130.206421 107.076522) + (xy 135.820801 107.076522) + (xy 135.859092 107.219423) + (xy 135.862842 107.229727) + (xy 135.947521 107.411323) + (xy 135.952998 107.420811) + (xy 136.067925 107.584942) + (xy 136.074981 107.59335) + (xy 136.21665 107.735019) + (xy 136.225058 107.742075) + (xy 136.389189 107.857002) + (xy 136.398677 107.862479) + (xy 136.580273 107.947158) + (xy 136.590577 107.950908) + (xy 136.728503 107.987866) + (xy 136.742599 107.98753) + (xy 136.746 107.979588) + (xy 136.746 107.974439) + (xy 137.254 107.974439) + (xy 137.257973 107.98797) + (xy 137.266522 107.989199) + (xy 137.409423 107.950908) + (xy 137.419727 107.947158) + (xy 137.601323 107.862479) + (xy 137.610811 107.857002) + (xy 137.774942 107.742075) + (xy 137.78335 107.735019) + (xy 137.925019 107.59335) + (xy 137.932075 107.584942) + (xy 138.047002 107.420811) + (xy 138.052479 107.411323) + (xy 138.137158 107.229727) + (xy 138.140908 107.219423) + (xy 138.177866 107.081497) + (xy 138.17753 107.067401) + (xy 138.169588 107.064) + (xy 137.272115 107.064) + (xy 137.256876 107.068475) + (xy 137.255671 107.069865) + (xy 137.254 107.077548) + (xy 137.254 107.974439) + (xy 136.746 107.974439) + (xy 136.746 107.082115) + (xy 136.741525 107.066876) + (xy 136.740135 107.065671) + (xy 136.732452 107.064) + (xy 135.835561 107.064) + (xy 135.82203 107.067973) + (xy 135.820801 107.076522) + (xy 130.206421 107.076522) + (xy 130.213116 107) + (xy 130.196493 106.81) + (xy 139.786884 106.81) + (xy 139.805314 107.020655) + (xy 139.806738 107.025968) + (xy 139.806738 107.02597) + (xy 139.857649 107.21597) + (xy 139.860044 107.22491) + (xy 139.862366 107.229891) + (xy 139.862367 107.229892) + (xy 139.875696 107.258475) + (xy 139.949411 107.416558) + (xy 140.070699 107.589776) + (xy 140.220224 107.739301) + (xy 140.393442 107.860589) + (xy 140.39842 107.86291) + (xy 140.398423 107.862912) + (xy 140.580108 107.947633) + (xy 140.58509 107.949956) + (xy 140.590398 107.951378) + (xy 140.5904 107.951379) + (xy 140.78403 108.003262) + (xy 140.784032 108.003262) + (xy 140.789345 108.004686) + (xy 141 108.023116) + (xy 141.210655 108.004686) + (xy 141.215968 108.003262) + (xy 141.21597 108.003262) + (xy 141.4096 107.951379) + (xy 141.409602 107.951378) + (xy 141.41491 107.949956) + (xy 141.419892 107.947633) + (xy 141.601577 107.862912) + (xy 141.60158 107.86291) + (xy 141.606558 107.860589) + (xy 141.779776 107.739301) + (xy 141.929301 107.589776) + (xy 142.050589 107.416558) + (xy 142.124305 107.258475) + (xy 142.137633 107.229892) + (xy 142.137634 107.229891) + (xy 142.139956 107.22491) + (xy 142.142352 107.21597) + (xy 142.193262 107.02597) + (xy 142.193262 107.025968) + (xy 142.194686 107.020655) + (xy 142.213116 106.81) + (xy 143.786884 106.81) + (xy 143.805314 107.020655) + (xy 143.806738 107.025968) + (xy 143.806738 107.02597) + (xy 143.857649 107.21597) + (xy 143.860044 107.22491) + (xy 143.862366 107.229891) + (xy 143.862367 107.229892) + (xy 143.875696 107.258475) + (xy 143.949411 107.416558) + (xy 144.070699 107.589776) + (xy 144.220224 107.739301) + (xy 144.393442 107.860589) + (xy 144.39842 107.86291) + (xy 144.398423 107.862912) + (xy 144.580108 107.947633) + (xy 144.58509 107.949956) + (xy 144.590398 107.951378) + (xy 144.5904 107.951379) + (xy 144.78403 108.003262) + (xy 144.784032 108.003262) + (xy 144.789345 108.004686) + (xy 145 108.023116) + (xy 145.210655 108.004686) + (xy 145.215968 108.003262) + (xy 145.21597 108.003262) + (xy 145.4096 107.951379) + (xy 145.409602 107.951378) + (xy 145.41491 107.949956) + (xy 145.419892 107.947633) + (xy 145.601577 107.862912) + (xy 145.60158 107.86291) + (xy 145.606558 107.860589) + (xy 145.779776 107.739301) + (xy 145.929301 107.589776) + (xy 146.050589 107.416558) + (xy 146.124305 107.258475) + (xy 146.137633 107.229892) + (xy 146.137634 107.229891) + (xy 146.139956 107.22491) + (xy 146.142352 107.21597) + (xy 146.193262 107.02597) + (xy 146.193262 107.025968) + (xy 146.194686 107.020655) + (xy 146.213116 106.81) + (xy 146.194686 106.599345) + (xy 146.192289 106.5904) + (xy 146.141379 106.4004) + (xy 146.141378 106.400398) + (xy 146.139956 106.39509) + (xy 146.137087 106.388937) + (xy 146.052912 106.208423) + (xy 146.05291 106.20842) + (xy 146.050589 106.203442) + (xy 145.929301 106.030224) + (xy 145.779776 105.880699) + (xy 145.606558 105.759411) + (xy 145.60158 105.75709) + (xy 145.601577 105.757088) + (xy 145.419892 105.672367) + (xy 145.419891 105.672366) + (xy 145.41491 105.670044) + (xy 145.409602 105.668622) + (xy 145.4096 105.668621) + (xy 145.21597 105.616738) + (xy 145.215968 105.616738) + (xy 145.210655 105.615314) + (xy 145 105.596884) + (xy 144.789345 105.615314) + (xy 144.784032 105.616738) + (xy 144.78403 105.616738) + (xy 144.5904 105.668621) + (xy 144.590398 105.668622) + (xy 144.58509 105.670044) + (xy 144.580109 105.672366) + (xy 144.580108 105.672367) + (xy 144.398423 105.757088) + (xy 144.39842 105.75709) + (xy 144.393442 105.759411) + (xy 144.220224 105.880699) + (xy 144.070699 106.030224) + (xy 143.949411 106.203442) + (xy 143.94709 106.20842) + (xy 143.947088 106.208423) + (xy 143.862913 106.388937) + (xy 143.860044 106.39509) + (xy 143.858622 106.400398) + (xy 143.858621 106.4004) + (xy 143.807711 106.5904) + (xy 143.805314 106.599345) + (xy 143.786884 106.81) + (xy 142.213116 106.81) + (xy 142.194686 106.599345) + (xy 142.192289 106.5904) + (xy 142.141379 106.4004) + (xy 142.141378 106.400398) + (xy 142.139956 106.39509) + (xy 142.137087 106.388937) + (xy 142.052912 106.208423) + (xy 142.05291 106.20842) + (xy 142.050589 106.203442) + (xy 141.929301 106.030224) + (xy 141.779776 105.880699) + (xy 141.606558 105.759411) + (xy 141.60158 105.75709) + (xy 141.601577 105.757088) + (xy 141.419892 105.672367) + (xy 141.419891 105.672366) + (xy 141.41491 105.670044) + (xy 141.409602 105.668622) + (xy 141.4096 105.668621) + (xy 141.21597 105.616738) + (xy 141.215968 105.616738) + (xy 141.210655 105.615314) + (xy 141 105.596884) + (xy 140.789345 105.615314) + (xy 140.784032 105.616738) + (xy 140.78403 105.616738) + (xy 140.5904 105.668621) + (xy 140.590398 105.668622) + (xy 140.58509 105.670044) + (xy 140.580109 105.672366) + (xy 140.580108 105.672367) + (xy 140.398423 105.757088) + (xy 140.39842 105.75709) + (xy 140.393442 105.759411) + (xy 140.220224 105.880699) + (xy 140.070699 106.030224) + (xy 139.949411 106.203442) + (xy 139.94709 106.20842) + (xy 139.947088 106.208423) + (xy 139.862913 106.388937) + (xy 139.860044 106.39509) + (xy 139.858622 106.400398) + (xy 139.858621 106.4004) + (xy 139.807711 106.5904) + (xy 139.805314 106.599345) + (xy 139.786884 106.81) + (xy 130.196493 106.81) + (xy 130.194686 106.789345) + (xy 130.182301 106.743124) + (xy 130.141379 106.5904) + (xy 130.141378 106.590398) + (xy 130.139956 106.58509) + (xy 130.124805 106.552599) + (xy 130.118232 106.538503) + (xy 135.822134 106.538503) + (xy 135.82247 106.552599) + (xy 135.830412 106.556) + (xy 136.727885 106.556) + (xy 136.743124 106.551525) + (xy 136.744329 106.550135) + (xy 136.746 106.542452) + (xy 136.746 106.537885) + (xy 137.254 106.537885) + (xy 137.258475 106.553124) + (xy 137.259865 106.554329) + (xy 137.267548 106.556) + (xy 138.164439 106.556) + (xy 138.17797 106.552027) + (xy 138.179199 106.543478) + (xy 138.140908 106.400577) + (xy 138.137158 106.390273) + (xy 138.052479 106.208677) + (xy 138.047002 106.199189) + (xy 137.932075 106.035058) + (xy 137.925019 106.02665) + (xy 137.78335 105.884981) + (xy 137.774942 105.877925) + (xy 137.610811 105.762998) + (xy 137.601323 105.757521) + (xy 137.419727 105.672842) + (xy 137.409423 105.669092) + (xy 137.271497 105.632134) + (xy 137.257401 105.63247) + (xy 137.254 105.640412) + (xy 137.254 106.537885) + (xy 136.746 106.537885) + (xy 136.746 105.645561) + (xy 136.742027 105.63203) + (xy 136.733478 105.630801) + (xy 136.590577 105.669092) + (xy 136.580273 105.672842) + (xy 136.398677 105.757521) + (xy 136.389189 105.762998) + (xy 136.225058 105.877925) + (xy 136.21665 105.884981) + (xy 136.074981 106.02665) + (xy 136.067925 106.035058) + (xy 135.952998 106.199189) + (xy 135.947521 106.208677) + (xy 135.862842 106.390273) + (xy 135.859092 106.400577) + (xy 135.822134 106.538503) + (xy 130.118232 106.538503) + (xy 130.052912 106.398423) + (xy 130.05291 106.39842) + (xy 130.050589 106.393442) + (xy 129.929301 106.220224) + (xy 129.779776 106.070699) + (xy 129.606558 105.949411) + (xy 129.60158 105.94709) + (xy 129.601577 105.947088) + (xy 129.419892 105.862367) + (xy 129.419891 105.862366) + (xy 129.41491 105.860044) + (xy 129.409602 105.858622) + (xy 129.4096 105.858621) + (xy 129.21597 105.806738) + (xy 129.215968 105.806738) + (xy 129.210655 105.805314) + (xy 129 105.786884) + (xy 128.789345 105.805314) + (xy 128.784032 105.806738) + (xy 128.78403 105.806738) + (xy 128.5904 105.858621) + (xy 128.590398 105.858622) + (xy 128.58509 105.860044) + (xy 128.580109 105.862366) + (xy 128.580108 105.862367) + (xy 128.398423 105.947088) + (xy 128.39842 105.94709) + (xy 128.393442 105.949411) + (xy 128.220224 106.070699) + (xy 128.070699 106.220224) + (xy 127.949411 106.393442) + (xy 127.94709 106.39842) + (xy 127.947088 106.398423) + (xy 127.875195 106.552599) + (xy 127.860044 106.58509) + (xy 127.858622 106.590398) + (xy 127.858621 106.5904) + (xy 127.817699 106.743124) + (xy 127.805314 106.789345) + (xy 127.786884 107) + (xy 126.213116 107) + (xy 126.194686 106.789345) + (xy 126.182301 106.743124) + (xy 126.141379 106.5904) + (xy 126.141378 106.590398) + (xy 126.139956 106.58509) + (xy 126.124805 106.552599) + (xy 126.052912 106.398423) + (xy 126.05291 106.39842) + (xy 126.050589 106.393442) + (xy 125.929301 106.220224) + (xy 125.779776 106.070699) + (xy 125.606558 105.949411) + (xy 125.60158 105.94709) + (xy 125.601577 105.947088) + (xy 125.419892 105.862367) + (xy 125.419891 105.862366) + (xy 125.41491 105.860044) + (xy 125.409602 105.858622) + (xy 125.4096 105.858621) + (xy 125.21597 105.806738) + (xy 125.215968 105.806738) + (xy 125.210655 105.805314) + (xy 125 105.786884) + (xy 124.789345 105.805314) + (xy 124.784032 105.806738) + (xy 124.78403 105.806738) + (xy 124.5904 105.858621) + (xy 124.590398 105.858622) + (xy 124.58509 105.860044) + (xy 124.580109 105.862366) + (xy 124.580108 105.862367) + (xy 124.398423 105.947088) + (xy 124.39842 105.94709) + (xy 124.393442 105.949411) + (xy 124.220224 106.070699) + (xy 124.070699 106.220224) + (xy 123.949411 106.393442) + (xy 123.94709 106.39842) + (xy 123.947088 106.398423) + (xy 123.875195 106.552599) + (xy 123.860044 106.58509) + (xy 123.858622 106.590398) + (xy 123.858621 106.5904) + (xy 123.817699 106.743124) + (xy 123.805314 106.789345) + (xy 123.786884 107) + (xy 114.196493 107) + (xy 114.213116 106.81) + (xy 114.205986 106.728503) + (xy 119.822134 106.728503) + (xy 119.82247 106.742599) + (xy 119.830412 106.746) + (xy 120.727885 106.746) + (xy 120.743124 106.741525) + (xy 120.744329 106.740135) + (xy 120.746 106.732452) + (xy 120.746 106.727885) + (xy 121.254 106.727885) + (xy 121.258475 106.743124) + (xy 121.259865 106.744329) + (xy 121.267548 106.746) + (xy 122.164439 106.746) + (xy 122.17797 106.742027) + (xy 122.179199 106.733478) + (xy 122.140908 106.590577) + (xy 122.137158 106.580273) + (xy 122.052479 106.398677) + (xy 122.047002 106.389189) + (xy 121.932075 106.225058) + (xy 121.925019 106.21665) + (xy 121.78335 106.074981) + (xy 121.774942 106.067925) + (xy 121.610811 105.952998) + (xy 121.601323 105.947521) + (xy 121.419727 105.862842) + (xy 121.409423 105.859092) + (xy 121.271497 105.822134) + (xy 121.257401 105.82247) + (xy 121.254 105.830412) + (xy 121.254 106.727885) + (xy 120.746 106.727885) + (xy 120.746 105.835561) + (xy 120.742027 105.82203) + (xy 120.733478 105.820801) + (xy 120.590577 105.859092) + (xy 120.580273 105.862842) + (xy 120.398677 105.947521) + (xy 120.389189 105.952998) + (xy 120.225058 106.067925) + (xy 120.21665 106.074981) + (xy 120.074981 106.21665) + (xy 120.067925 106.225058) + (xy 119.952998 106.389189) + (xy 119.947521 106.398677) + (xy 119.862842 106.580273) + (xy 119.859092 106.590577) + (xy 119.822134 106.728503) + (xy 114.205986 106.728503) + (xy 114.194686 106.599345) + (xy 114.192289 106.5904) + (xy 114.141379 106.4004) + (xy 114.141378 106.400398) + (xy 114.139956 106.39509) + (xy 114.137087 106.388937) + (xy 114.052912 106.208423) + (xy 114.05291 106.20842) + (xy 114.050589 106.203442) + (xy 113.929301 106.030224) + (xy 113.779776 105.880699) + (xy 113.606558 105.759411) + (xy 113.60158 105.75709) + (xy 113.601577 105.757088) + (xy 113.419892 105.672367) + (xy 113.419891 105.672366) + (xy 113.41491 105.670044) + (xy 113.409602 105.668622) + (xy 113.4096 105.668621) + (xy 113.21597 105.616738) + (xy 113.215968 105.616738) + (xy 113.210655 105.615314) + (xy 113 105.596884) + (xy 112.789345 105.615314) + (xy 112.784032 105.616738) + (xy 112.78403 105.616738) + (xy 112.5904 105.668621) + (xy 112.590398 105.668622) + (xy 112.58509 105.670044) + (xy 112.580109 105.672366) + (xy 112.580108 105.672367) + (xy 112.398423 105.757088) + (xy 112.39842 105.75709) + (xy 112.393442 105.759411) + (xy 112.220224 105.880699) + (xy 112.070699 106.030224) + (xy 111.949411 106.203442) + (xy 111.94709 106.20842) + (xy 111.947088 106.208423) + (xy 111.862913 106.388937) + (xy 111.860044 106.39509) + (xy 111.858622 106.400398) + (xy 111.858621 106.4004) + (xy 111.807711 106.5904) + (xy 111.805314 106.599345) + (xy 111.786884 106.81) + (xy 110.213116 106.81) + (xy 110.194686 106.599345) + (xy 110.192289 106.5904) + (xy 110.141379 106.4004) + (xy 110.141378 106.400398) + (xy 110.139956 106.39509) + (xy 110.137087 106.388937) + (xy 110.052912 106.208423) + (xy 110.05291 106.20842) + (xy 110.050589 106.203442) + (xy 109.929301 106.030224) + (xy 109.779776 105.880699) + (xy 109.606558 105.759411) + (xy 109.60158 105.75709) + (xy 109.601577 105.757088) + (xy 109.419892 105.672367) + (xy 109.419891 105.672366) + (xy 109.41491 105.670044) + (xy 109.409602 105.668622) + (xy 109.4096 105.668621) + (xy 109.21597 105.616738) + (xy 109.215968 105.616738) + (xy 109.210655 105.615314) + (xy 109 105.596884) + (xy 108.789345 105.615314) + (xy 108.784032 105.616738) + (xy 108.78403 105.616738) + (xy 108.5904 105.668621) + (xy 108.590398 105.668622) + (xy 108.58509 105.670044) + (xy 108.580109 105.672366) + (xy 108.580108 105.672367) + (xy 108.398423 105.757088) + (xy 108.39842 105.75709) + (xy 108.393442 105.759411) + (xy 108.220224 105.880699) + (xy 108.070699 106.030224) + (xy 107.949411 106.203442) + (xy 107.94709 106.20842) + (xy 107.947088 106.208423) + (xy 107.862913 106.388937) + (xy 107.860044 106.39509) + (xy 107.858622 106.400398) + (xy 107.858621 106.4004) + (xy 107.807711 106.5904) + (xy 107.805314 106.599345) + (xy 107.786884 106.81) + (xy 69.00911 106.81) + (xy 69.206554 106.604825) + (xy 69.247528 106.562247) + (xy 69.266146 106.538503) + (xy 103.822134 106.538503) + (xy 103.82247 106.552599) + (xy 103.830412 106.556) + (xy 104.727885 106.556) + (xy 104.743124 106.551525) + (xy 104.744329 106.550135) + (xy 104.746 106.542452) + (xy 104.746 106.537885) + (xy 105.254 106.537885) + (xy 105.258475 106.553124) + (xy 105.259865 106.554329) + (xy 105.267548 106.556) + (xy 106.164439 106.556) + (xy 106.17797 106.552027) + (xy 106.179199 106.543478) + (xy 106.140908 106.400577) + (xy 106.137158 106.390273) + (xy 106.052479 106.208677) + (xy 106.047002 106.199189) + (xy 105.932075 106.035058) + (xy 105.925019 106.02665) + (xy 105.78335 105.884981) + (xy 105.774942 105.877925) + (xy 105.610811 105.762998) + (xy 105.601323 105.757521) + (xy 105.419727 105.672842) + (xy 105.409423 105.669092) + (xy 105.271497 105.632134) + (xy 105.257401 105.63247) + (xy 105.254 105.640412) + (xy 105.254 106.537885) + (xy 104.746 106.537885) + (xy 104.746 105.645561) + (xy 104.742027 105.63203) + (xy 104.733478 105.630801) + (xy 104.590577 105.669092) + (xy 104.580273 105.672842) + (xy 104.398677 105.757521) + (xy 104.389189 105.762998) + (xy 104.225058 105.877925) + (xy 104.21665 105.884981) + (xy 104.074981 106.02665) + (xy 104.067925 106.035058) + (xy 103.952998 106.199189) + (xy 103.947521 106.208677) + (xy 103.862842 106.390273) + (xy 103.859092 106.400577) + (xy 103.822134 106.538503) + (xy 69.266146 106.538503) + (xy 69.49137 106.251264) + (xy 69.508141 106.224736) + (xy 69.680199 105.952566) + (xy 69.702537 105.917231) + (xy 69.703957 105.914382) + (xy 69.703962 105.914374) + (xy 69.877447 105.566416) + (xy 69.878867 105.563568) + (xy 70.018554 105.193897) + (xy 70.028933 105.154892) + (xy 70.119347 104.815087) + (xy 70.120168 104.812002) + (xy 70.18267 104.421793) + (xy 70.205418 104.027265) + (xy 70.205513 104) + (xy 70.204823 103.986367) + (xy 70.185681 103.608496) + (xy 70.18568 103.608491) + (xy 70.18552 103.605323) + (xy 70.125744 103.214688) + (xy 70.026798 102.832092) + (xy 70.021989 102.81909) + (xy 69.978816 102.70238) + (xy 69.889695 102.461455) + (xy 69.715839 102.10657) + (xy 69.507009 101.771071) + (xy 69.265344 101.458393) + (xy 68.993318 101.171737) + (xy 68.982408 101.162353) + (xy 68.696131 100.916116) + (xy 68.696128 100.916114) + (xy 68.693716 100.914039) + (xy 68.691108 100.912219) + (xy 68.691102 100.912215) + (xy 68.37222 100.68976) + (xy 68.369607 100.687937) + (xy 68.024307 100.495746) + (xy 68.021387 100.494488) + (xy 68.021382 100.494486) + (xy 67.664287 100.340696) + (xy 67.664277 100.340692) + (xy 67.661353 100.339433) + (xy 67.28446 100.220599) + (xy 66.968969 100.155264) + (xy 66.900613 100.141108) + (xy 66.90061 100.141108) + (xy 66.897488 100.140461) + (xy 66.595259 100.109228) + (xy 66.507555 100.100165) + (xy 66.507552 100.100165) + (xy 66.504399 100.099839) + (xy 66.501233 100.099833) + (xy 66.501224 100.099833) + (xy 66.306076 100.099493) + (xy 66.109217 100.09915) + (xy 65.952678 100.114774) + (xy 65.719161 100.138082) + (xy 65.719155 100.138083) + (xy 65.715988 100.138399) + (xy 65.514871 100.179317) + (xy 65.331863 100.21655) + (xy 65.331859 100.216551) + (xy 65.328738 100.217186) + (xy 65.325696 100.218133) + (xy 65.32569 100.218135) + (xy 65.140085 100.275945) + (xy 64.951433 100.334703) + (xy 64.948493 100.335957) + (xy 64.590873 100.488495) + (xy 64.590869 100.488497) + (xy 64.587936 100.489748) + (xy 64.241967 100.680733) + (xy 64.239346 100.682548) + (xy 64.239341 100.682551) + (xy 64.231563 100.687937) + (xy 63.91707 100.905702) + (xy 63.616571 101.162353) + (xy 63.343546 101.448057) + (xy 63.100791 101.75989) + (xy 62.890791 102.094658) + (xy 62.715697 102.448934) + (xy 62.577301 102.81909) + (xy 62.477021 103.201338) + (xy 62.415882 103.591763) + (xy 62.415711 103.594925) + (xy 62.41571 103.594932) + (xy 62.397083 103.93888) + (xy 62.394511 103.986367) + (xy 47.604823 103.986367) + (xy 47.585681 103.608496) + (xy 47.58568 103.608491) + (xy 47.58552 103.605323) + (xy 47.525744 103.214688) + (xy 47.426798 102.832092) + (xy 47.421989 102.81909) + (xy 47.378816 102.70238) + (xy 47.289695 102.461455) + (xy 47.115839 102.10657) + (xy 46.907009 101.771071) + (xy 46.665344 101.458393) + (xy 46.393318 101.171737) + (xy 46.382408 101.162353) + (xy 46.096131 100.916116) + (xy 46.096128 100.916114) + (xy 46.093716 100.914039) + (xy 46.091108 100.912219) + (xy 46.091102 100.912215) + (xy 45.77222 100.68976) + (xy 45.769607 100.687937) + (xy 45.424307 100.495746) + (xy 45.421387 100.494488) + (xy 45.421382 100.494486) + (xy 45.064287 100.340696) + (xy 45.064277 100.340692) + (xy 45.061353 100.339433) + (xy 44.68446 100.220599) + (xy 44.368969 100.155264) + (xy 44.300613 100.141108) + (xy 44.30061 100.141108) + (xy 44.297488 100.140461) + (xy 43.995259 100.109228) + (xy 43.907555 100.100165) + (xy 43.907552 100.100165) + (xy 43.904399 100.099839) + (xy 43.901233 100.099833) + (xy 43.901224 100.099833) + (xy 43.706076 100.099493) + (xy 43.509217 100.09915) + (xy 43.352678 100.114774) + (xy 43.119161 100.138082) + (xy 43.119155 100.138083) + (xy 43.115988 100.138399) + (xy 42.914871 100.179317) + (xy 42.731863 100.21655) + (xy 42.731859 100.216551) + (xy 42.728738 100.217186) + (xy 42.725696 100.218133) + (xy 42.72569 100.218135) + (xy 42.540085 100.275945) + (xy 42.351433 100.334703) + (xy 42.348493 100.335957) + (xy 41.990873 100.488495) + (xy 41.990869 100.488497) + (xy 41.987936 100.489748) + (xy 41.641967 100.680733) + (xy 41.639346 100.682548) + (xy 41.639341 100.682551) + (xy 41.631563 100.687937) + (xy 41.31707 100.905702) + (xy 41.016571 101.162353) + (xy 40.743546 101.448057) + (xy 40.500791 101.75989) + (xy 40.290791 102.094658) + (xy 40.115697 102.448934) + (xy 39.977301 102.81909) + (xy 39.877021 103.201338) + (xy 39.815882 103.591763) + (xy 39.815711 103.594925) + (xy 39.81571 103.594932) + (xy 39.797083 103.93888) + (xy 39.794511 103.986367) + (xy 35.008 103.986367) + (xy 35.008 99.19) + (xy 103.786884 99.19) + (xy 103.805314 99.400655) + (xy 103.806738 99.405968) + (xy 103.806738 99.40597) + (xy 103.857649 99.59597) + (xy 103.860044 99.60491) + (xy 103.949411 99.796558) + (xy 104.070699 99.969776) + (xy 104.220224 100.119301) + (xy 104.393442 100.240589) + (xy 104.39842 100.24291) + (xy 104.398423 100.242912) + (xy 104.580108 100.327633) + (xy 104.58509 100.329956) + (xy 104.590398 100.331378) + (xy 104.5904 100.331379) + (xy 104.78403 100.383262) + (xy 104.784032 100.383262) + (xy 104.789345 100.384686) + (xy 105 100.403116) + (xy 105.210655 100.384686) + (xy 105.215968 100.383262) + (xy 105.21597 100.383262) + (xy 105.4096 100.331379) + (xy 105.409602 100.331378) + (xy 105.41491 100.329956) + (xy 105.419892 100.327633) + (xy 105.601577 100.242912) + (xy 105.60158 100.24291) + (xy 105.606558 100.240589) + (xy 105.779776 100.119301) + (xy 105.929301 99.969776) + (xy 106.050589 99.796558) + (xy 106.139956 99.60491) + (xy 106.142352 99.59597) + (xy 106.193262 99.40597) + (xy 106.193262 99.405968) + (xy 106.194686 99.400655) + (xy 106.213116 99.19) + (xy 107.786884 99.19) + (xy 107.805314 99.400655) + (xy 107.806738 99.405968) + (xy 107.806738 99.40597) + (xy 107.857649 99.59597) + (xy 107.860044 99.60491) + (xy 107.949411 99.796558) + (xy 108.070699 99.969776) + (xy 108.220224 100.119301) + (xy 108.393442 100.240589) + (xy 108.39842 100.24291) + (xy 108.398423 100.242912) + (xy 108.580108 100.327633) + (xy 108.58509 100.329956) + (xy 108.590398 100.331378) + (xy 108.5904 100.331379) + (xy 108.78403 100.383262) + (xy 108.784032 100.383262) + (xy 108.789345 100.384686) + (xy 109 100.403116) + (xy 109.210655 100.384686) + (xy 109.215968 100.383262) + (xy 109.21597 100.383262) + (xy 109.4096 100.331379) + (xy 109.409602 100.331378) + (xy 109.41491 100.329956) + (xy 109.419892 100.327633) + (xy 109.601577 100.242912) + (xy 109.60158 100.24291) + (xy 109.606558 100.240589) + (xy 109.779776 100.119301) + (xy 109.929301 99.969776) + (xy 110.050589 99.796558) + (xy 110.139956 99.60491) + (xy 110.142352 99.59597) + (xy 110.193262 99.40597) + (xy 110.193262 99.405968) + (xy 110.194686 99.400655) + (xy 110.213116 99.19) + (xy 111.786884 99.19) + (xy 111.805314 99.400655) + (xy 111.806738 99.405968) + (xy 111.806738 99.40597) + (xy 111.857649 99.59597) + (xy 111.860044 99.60491) + (xy 111.949411 99.796558) + (xy 112.070699 99.969776) + (xy 112.220224 100.119301) + (xy 112.393442 100.240589) + (xy 112.39842 100.24291) + (xy 112.398423 100.242912) + (xy 112.580108 100.327633) + (xy 112.58509 100.329956) + (xy 112.590398 100.331378) + (xy 112.5904 100.331379) + (xy 112.78403 100.383262) + (xy 112.784032 100.383262) + (xy 112.789345 100.384686) + (xy 113 100.403116) + (xy 113.210655 100.384686) + (xy 113.215968 100.383262) + (xy 113.21597 100.383262) + (xy 113.4096 100.331379) + (xy 113.409602 100.331378) + (xy 113.41491 100.329956) + (xy 113.419892 100.327633) + (xy 113.601577 100.242912) + (xy 113.60158 100.24291) + (xy 113.606558 100.240589) + (xy 113.779776 100.119301) + (xy 113.929301 99.969776) + (xy 114.050589 99.796558) + (xy 114.139956 99.60491) + (xy 114.142352 99.59597) + (xy 114.193262 99.40597) + (xy 114.193262 99.405968) + (xy 114.194686 99.400655) + (xy 114.196493 99.38) + (xy 119.786884 99.38) + (xy 119.805314 99.590655) + (xy 119.806738 99.595968) + (xy 119.806738 99.59597) + (xy 119.810469 99.609892) + (xy 119.860044 99.79491) + (xy 119.862366 99.799891) + (xy 119.862367 99.799892) + (xy 119.943402 99.973671) + (xy 119.949411 99.986558) + (xy 120.070699 100.159776) + (xy 120.220224 100.309301) + (xy 120.393442 100.430589) + (xy 120.39842 100.43291) + (xy 120.398423 100.432912) + (xy 120.580108 100.517633) + (xy 120.58509 100.519956) + (xy 120.590398 100.521378) + (xy 120.5904 100.521379) + (xy 120.78403 100.573262) + (xy 120.784032 100.573262) + (xy 120.789345 100.574686) + (xy 121 100.593116) + (xy 121.210655 100.574686) + (xy 121.215968 100.573262) + (xy 121.21597 100.573262) + (xy 121.4096 100.521379) + (xy 121.409602 100.521378) + (xy 121.41491 100.519956) + (xy 121.419892 100.517633) + (xy 121.601577 100.432912) + (xy 121.60158 100.43291) + (xy 121.606558 100.430589) + (xy 121.779776 100.309301) + (xy 121.929301 100.159776) + (xy 122.050589 99.986558) + (xy 122.056599 99.973671) + (xy 122.137633 99.799892) + (xy 122.137634 99.799891) + (xy 122.139956 99.79491) + (xy 122.189532 99.609892) + (xy 122.193262 99.59597) + (xy 122.193262 99.595968) + (xy 122.194686 99.590655) + (xy 122.213116 99.38) + (xy 123.786884 99.38) + (xy 123.805314 99.590655) + (xy 123.806738 99.595968) + (xy 123.806738 99.59597) + (xy 123.810469 99.609892) + (xy 123.860044 99.79491) + (xy 123.862366 99.799891) + (xy 123.862367 99.799892) + (xy 123.943402 99.973671) + (xy 123.949411 99.986558) + (xy 124.070699 100.159776) + (xy 124.220224 100.309301) + (xy 124.393442 100.430589) + (xy 124.39842 100.43291) + (xy 124.398423 100.432912) + (xy 124.580108 100.517633) + (xy 124.58509 100.519956) + (xy 124.590398 100.521378) + (xy 124.5904 100.521379) + (xy 124.78403 100.573262) + (xy 124.784032 100.573262) + (xy 124.789345 100.574686) + (xy 125 100.593116) + (xy 125.210655 100.574686) + (xy 125.215968 100.573262) + (xy 125.21597 100.573262) + (xy 125.4096 100.521379) + (xy 125.409602 100.521378) + (xy 125.41491 100.519956) + (xy 125.419892 100.517633) + (xy 125.601577 100.432912) + (xy 125.60158 100.43291) + (xy 125.606558 100.430589) + (xy 125.779776 100.309301) + (xy 125.929301 100.159776) + (xy 126.050589 99.986558) + (xy 126.056599 99.973671) + (xy 126.137633 99.799892) + (xy 126.137634 99.799891) + (xy 126.139956 99.79491) + (xy 126.189532 99.609892) + (xy 126.193262 99.59597) + (xy 126.193262 99.595968) + (xy 126.194686 99.590655) + (xy 126.213116 99.38) + (xy 127.786884 99.38) + (xy 127.805314 99.590655) + (xy 127.806738 99.595968) + (xy 127.806738 99.59597) + (xy 127.810469 99.609892) + (xy 127.860044 99.79491) + (xy 127.862366 99.799891) + (xy 127.862367 99.799892) + (xy 127.943402 99.973671) + (xy 127.949411 99.986558) + (xy 128.070699 100.159776) + (xy 128.220224 100.309301) + (xy 128.393442 100.430589) + (xy 128.39842 100.43291) + (xy 128.398423 100.432912) + (xy 128.580108 100.517633) + (xy 128.58509 100.519956) + (xy 128.590398 100.521378) + (xy 128.5904 100.521379) + (xy 128.78403 100.573262) + (xy 128.784032 100.573262) + (xy 128.789345 100.574686) + (xy 129 100.593116) + (xy 129.210655 100.574686) + (xy 129.215968 100.573262) + (xy 129.21597 100.573262) + (xy 129.4096 100.521379) + (xy 129.409602 100.521378) + (xy 129.41491 100.519956) + (xy 129.419892 100.517633) + (xy 129.601577 100.432912) + (xy 129.60158 100.43291) + (xy 129.606558 100.430589) + (xy 129.779776 100.309301) + (xy 129.929301 100.159776) + (xy 130.050589 99.986558) + (xy 130.056599 99.973671) + (xy 130.137633 99.799892) + (xy 130.137634 99.799891) + (xy 130.139956 99.79491) + (xy 130.189532 99.609892) + (xy 130.193262 99.59597) + (xy 130.193262 99.595968) + (xy 130.194686 99.590655) + (xy 130.213116 99.38) + (xy 130.196493 99.19) + (xy 135.786884 99.19) + (xy 135.805314 99.400655) + (xy 135.806738 99.405968) + (xy 135.806738 99.40597) + (xy 135.857649 99.59597) + (xy 135.860044 99.60491) + (xy 135.949411 99.796558) + (xy 136.070699 99.969776) + (xy 136.220224 100.119301) + (xy 136.393442 100.240589) + (xy 136.39842 100.24291) + (xy 136.398423 100.242912) + (xy 136.580108 100.327633) + (xy 136.58509 100.329956) + (xy 136.590398 100.331378) + (xy 136.5904 100.331379) + (xy 136.78403 100.383262) + (xy 136.784032 100.383262) + (xy 136.789345 100.384686) + (xy 137 100.403116) + (xy 137.210655 100.384686) + (xy 137.215968 100.383262) + (xy 137.21597 100.383262) + (xy 137.4096 100.331379) + (xy 137.409602 100.331378) + (xy 137.41491 100.329956) + (xy 137.419892 100.327633) + (xy 137.601577 100.242912) + (xy 137.60158 100.24291) + (xy 137.606558 100.240589) + (xy 137.779776 100.119301) + (xy 137.929301 99.969776) + (xy 138.050589 99.796558) + (xy 138.139956 99.60491) + (xy 138.142352 99.59597) + (xy 138.193262 99.40597) + (xy 138.193262 99.405968) + (xy 138.194686 99.400655) + (xy 138.213116 99.19) + (xy 139.786884 99.19) + (xy 139.805314 99.400655) + (xy 139.806738 99.405968) + (xy 139.806738 99.40597) + (xy 139.857649 99.59597) + (xy 139.860044 99.60491) + (xy 139.949411 99.796558) + (xy 140.070699 99.969776) + (xy 140.220224 100.119301) + (xy 140.393442 100.240589) + (xy 140.39842 100.24291) + (xy 140.398423 100.242912) + (xy 140.580108 100.327633) + (xy 140.58509 100.329956) + (xy 140.590398 100.331378) + (xy 140.5904 100.331379) + (xy 140.78403 100.383262) + (xy 140.784032 100.383262) + (xy 140.789345 100.384686) + (xy 141 100.403116) + (xy 141.210655 100.384686) + (xy 141.215968 100.383262) + (xy 141.21597 100.383262) + (xy 141.4096 100.331379) + (xy 141.409602 100.331378) + (xy 141.41491 100.329956) + (xy 141.419892 100.327633) + (xy 141.601577 100.242912) + (xy 141.60158 100.24291) + (xy 141.606558 100.240589) + (xy 141.779776 100.119301) + (xy 141.929301 99.969776) + (xy 142.050589 99.796558) + (xy 142.139956 99.60491) + (xy 142.142352 99.59597) + (xy 142.193262 99.40597) + (xy 142.193262 99.405968) + (xy 142.194686 99.400655) + (xy 142.213116 99.19) + (xy 143.786884 99.19) + (xy 143.805314 99.400655) + (xy 143.806738 99.405968) + (xy 143.806738 99.40597) + (xy 143.857649 99.59597) + (xy 143.860044 99.60491) + (xy 143.949411 99.796558) + (xy 144.070699 99.969776) + (xy 144.220224 100.119301) + (xy 144.393442 100.240589) + (xy 144.39842 100.24291) + (xy 144.398423 100.242912) + (xy 144.580108 100.327633) + (xy 144.58509 100.329956) + (xy 144.590398 100.331378) + (xy 144.5904 100.331379) + (xy 144.78403 100.383262) + (xy 144.784032 100.383262) + (xy 144.789345 100.384686) + (xy 145 100.403116) + (xy 145.210655 100.384686) + (xy 145.215968 100.383262) + (xy 145.21597 100.383262) + (xy 145.4096 100.331379) + (xy 145.409602 100.331378) + (xy 145.41491 100.329956) + (xy 145.419892 100.327633) + (xy 145.601577 100.242912) + (xy 145.60158 100.24291) + (xy 145.606558 100.240589) + (xy 145.779776 100.119301) + (xy 145.929301 99.969776) + (xy 146.050589 99.796558) + (xy 146.139956 99.60491) + (xy 146.142352 99.59597) + (xy 146.193262 99.40597) + (xy 146.193262 99.405968) + (xy 146.194686 99.400655) + (xy 146.213116 99.19) + (xy 146.194686 98.979345) + (xy 146.192289 98.9704) + (xy 146.141379 98.7804) + (xy 146.141378 98.780398) + (xy 146.139956 98.77509) + (xy 146.058415 98.600224) + (xy 146.052912 98.588423) + (xy 146.05291 98.58842) + (xy 146.050589 98.583442) + (xy 145.929301 98.410224) + (xy 145.779776 98.260699) + (xy 145.606558 98.139411) + (xy 145.60158 98.13709) + (xy 145.601577 98.137088) + (xy 145.419892 98.052367) + (xy 145.419891 98.052366) + (xy 145.41491 98.050044) + (xy 145.409602 98.048622) + (xy 145.4096 98.048621) + (xy 145.21597 97.996738) + (xy 145.215968 97.996738) + (xy 145.210655 97.995314) + (xy 145 97.976884) + (xy 144.789345 97.995314) + (xy 144.784032 97.996738) + (xy 144.78403 97.996738) + (xy 144.5904 98.048621) + (xy 144.590398 98.048622) + (xy 144.58509 98.050044) + (xy 144.580109 98.052366) + (xy 144.580108 98.052367) + (xy 144.398423 98.137088) + (xy 144.39842 98.13709) + (xy 144.393442 98.139411) + (xy 144.220224 98.260699) + (xy 144.070699 98.410224) + (xy 143.949411 98.583442) + (xy 143.94709 98.58842) + (xy 143.947088 98.588423) + (xy 143.941585 98.600224) + (xy 143.860044 98.77509) + (xy 143.858622 98.780398) + (xy 143.858621 98.7804) + (xy 143.807711 98.9704) + (xy 143.805314 98.979345) + (xy 143.786884 99.19) + (xy 142.213116 99.19) + (xy 142.194686 98.979345) + (xy 142.192289 98.9704) + (xy 142.141379 98.7804) + (xy 142.141378 98.780398) + (xy 142.139956 98.77509) + (xy 142.058415 98.600224) + (xy 142.052912 98.588423) + (xy 142.05291 98.58842) + (xy 142.050589 98.583442) + (xy 141.929301 98.410224) + (xy 141.779776 98.260699) + (xy 141.606558 98.139411) + (xy 141.60158 98.13709) + (xy 141.601577 98.137088) + (xy 141.419892 98.052367) + (xy 141.419891 98.052366) + (xy 141.41491 98.050044) + (xy 141.409602 98.048622) + (xy 141.4096 98.048621) + (xy 141.21597 97.996738) + (xy 141.215968 97.996738) + (xy 141.210655 97.995314) + (xy 141 97.976884) + (xy 140.789345 97.995314) + (xy 140.784032 97.996738) + (xy 140.78403 97.996738) + (xy 140.5904 98.048621) + (xy 140.590398 98.048622) + (xy 140.58509 98.050044) + (xy 140.580109 98.052366) + (xy 140.580108 98.052367) + (xy 140.398423 98.137088) + (xy 140.39842 98.13709) + (xy 140.393442 98.139411) + (xy 140.220224 98.260699) + (xy 140.070699 98.410224) + (xy 139.949411 98.583442) + (xy 139.94709 98.58842) + (xy 139.947088 98.588423) + (xy 139.941585 98.600224) + (xy 139.860044 98.77509) + (xy 139.858622 98.780398) + (xy 139.858621 98.7804) + (xy 139.807711 98.9704) + (xy 139.805314 98.979345) + (xy 139.786884 99.19) + (xy 138.213116 99.19) + (xy 138.194686 98.979345) + (xy 138.192289 98.9704) + (xy 138.141379 98.7804) + (xy 138.141378 98.780398) + (xy 138.139956 98.77509) + (xy 138.058415 98.600224) + (xy 138.052912 98.588423) + (xy 138.05291 98.58842) + (xy 138.050589 98.583442) + (xy 137.929301 98.410224) + (xy 137.779776 98.260699) + (xy 137.606558 98.139411) + (xy 137.60158 98.13709) + (xy 137.601577 98.137088) + (xy 137.419892 98.052367) + (xy 137.419891 98.052366) + (xy 137.41491 98.050044) + (xy 137.409602 98.048622) + (xy 137.4096 98.048621) + (xy 137.21597 97.996738) + (xy 137.215968 97.996738) + (xy 137.210655 97.995314) + (xy 137 97.976884) + (xy 136.789345 97.995314) + (xy 136.784032 97.996738) + (xy 136.78403 97.996738) + (xy 136.5904 98.048621) + (xy 136.590398 98.048622) + (xy 136.58509 98.050044) + (xy 136.580109 98.052366) + (xy 136.580108 98.052367) + (xy 136.398423 98.137088) + (xy 136.39842 98.13709) + (xy 136.393442 98.139411) + (xy 136.220224 98.260699) + (xy 136.070699 98.410224) + (xy 135.949411 98.583442) + (xy 135.94709 98.58842) + (xy 135.947088 98.588423) + (xy 135.941585 98.600224) + (xy 135.860044 98.77509) + (xy 135.858622 98.780398) + (xy 135.858621 98.7804) + (xy 135.807711 98.9704) + (xy 135.805314 98.979345) + (xy 135.786884 99.19) + (xy 130.196493 99.19) + (xy 130.194686 99.169345) + (xy 130.143776 98.979345) + (xy 130.141379 98.9704) + (xy 130.141378 98.970398) + (xy 130.139956 98.96509) + (xy 130.050589 98.773442) + (xy 129.929301 98.600224) + (xy 129.779776 98.450699) + (xy 129.606558 98.329411) + (xy 129.60158 98.32709) + (xy 129.601577 98.327088) + (xy 129.419892 98.242367) + (xy 129.419891 98.242366) + (xy 129.41491 98.240044) + (xy 129.409602 98.238622) + (xy 129.4096 98.238621) + (xy 129.21597 98.186738) + (xy 129.215968 98.186738) + (xy 129.210655 98.185314) + (xy 129 98.166884) + (xy 128.789345 98.185314) + (xy 128.784032 98.186738) + (xy 128.78403 98.186738) + (xy 128.5904 98.238621) + (xy 128.590398 98.238622) + (xy 128.58509 98.240044) + (xy 128.580109 98.242366) + (xy 128.580108 98.242367) + (xy 128.398423 98.327088) + (xy 128.39842 98.32709) + (xy 128.393442 98.329411) + (xy 128.220224 98.450699) + (xy 128.070699 98.600224) + (xy 127.949411 98.773442) + (xy 127.860044 98.96509) + (xy 127.858622 98.970398) + (xy 127.858621 98.9704) + (xy 127.856224 98.979345) + (xy 127.805314 99.169345) + (xy 127.786884 99.38) + (xy 126.213116 99.38) + (xy 126.194686 99.169345) + (xy 126.143776 98.979345) + (xy 126.141379 98.9704) + (xy 126.141378 98.970398) + (xy 126.139956 98.96509) + (xy 126.050589 98.773442) + (xy 125.929301 98.600224) + (xy 125.779776 98.450699) + (xy 125.606558 98.329411) + (xy 125.60158 98.32709) + (xy 125.601577 98.327088) + (xy 125.419892 98.242367) + (xy 125.419891 98.242366) + (xy 125.41491 98.240044) + (xy 125.409602 98.238622) + (xy 125.4096 98.238621) + (xy 125.21597 98.186738) + (xy 125.215968 98.186738) + (xy 125.210655 98.185314) + (xy 125 98.166884) + (xy 124.789345 98.185314) + (xy 124.784032 98.186738) + (xy 124.78403 98.186738) + (xy 124.5904 98.238621) + (xy 124.590398 98.238622) + (xy 124.58509 98.240044) + (xy 124.580109 98.242366) + (xy 124.580108 98.242367) + (xy 124.398423 98.327088) + (xy 124.39842 98.32709) + (xy 124.393442 98.329411) + (xy 124.220224 98.450699) + (xy 124.070699 98.600224) + (xy 123.949411 98.773442) + (xy 123.860044 98.96509) + (xy 123.858622 98.970398) + (xy 123.858621 98.9704) + (xy 123.856224 98.979345) + (xy 123.805314 99.169345) + (xy 123.786884 99.38) + (xy 122.213116 99.38) + (xy 122.194686 99.169345) + (xy 122.143776 98.979345) + (xy 122.141379 98.9704) + (xy 122.141378 98.970398) + (xy 122.139956 98.96509) + (xy 122.050589 98.773442) + (xy 121.929301 98.600224) + (xy 121.779776 98.450699) + (xy 121.606558 98.329411) + (xy 121.60158 98.32709) + (xy 121.601577 98.327088) + (xy 121.419892 98.242367) + (xy 121.419891 98.242366) + (xy 121.41491 98.240044) + (xy 121.409602 98.238622) + (xy 121.4096 98.238621) + (xy 121.21597 98.186738) + (xy 121.215968 98.186738) + (xy 121.210655 98.185314) + (xy 121 98.166884) + (xy 120.789345 98.185314) + (xy 120.784032 98.186738) + (xy 120.78403 98.186738) + (xy 120.5904 98.238621) + (xy 120.590398 98.238622) + (xy 120.58509 98.240044) + (xy 120.580109 98.242366) + (xy 120.580108 98.242367) + (xy 120.398423 98.327088) + (xy 120.39842 98.32709) + (xy 120.393442 98.329411) + (xy 120.220224 98.450699) + (xy 120.070699 98.600224) + (xy 119.949411 98.773442) + (xy 119.860044 98.96509) + (xy 119.858622 98.970398) + (xy 119.858621 98.9704) + (xy 119.856224 98.979345) + (xy 119.805314 99.169345) + (xy 119.786884 99.38) + (xy 114.196493 99.38) + (xy 114.213116 99.19) + (xy 114.194686 98.979345) + (xy 114.192289 98.9704) + (xy 114.141379 98.7804) + (xy 114.141378 98.780398) + (xy 114.139956 98.77509) + (xy 114.058415 98.600224) + (xy 114.052912 98.588423) + (xy 114.05291 98.58842) + (xy 114.050589 98.583442) + (xy 113.929301 98.410224) + (xy 113.779776 98.260699) + (xy 113.606558 98.139411) + (xy 113.60158 98.13709) + (xy 113.601577 98.137088) + (xy 113.419892 98.052367) + (xy 113.419891 98.052366) + (xy 113.41491 98.050044) + (xy 113.409602 98.048622) + (xy 113.4096 98.048621) + (xy 113.21597 97.996738) + (xy 113.215968 97.996738) + (xy 113.210655 97.995314) + (xy 113 97.976884) + (xy 112.789345 97.995314) + (xy 112.784032 97.996738) + (xy 112.78403 97.996738) + (xy 112.5904 98.048621) + (xy 112.590398 98.048622) + (xy 112.58509 98.050044) + (xy 112.580109 98.052366) + (xy 112.580108 98.052367) + (xy 112.398423 98.137088) + (xy 112.39842 98.13709) + (xy 112.393442 98.139411) + (xy 112.220224 98.260699) + (xy 112.070699 98.410224) + (xy 111.949411 98.583442) + (xy 111.94709 98.58842) + (xy 111.947088 98.588423) + (xy 111.941585 98.600224) + (xy 111.860044 98.77509) + (xy 111.858622 98.780398) + (xy 111.858621 98.7804) + (xy 111.807711 98.9704) + (xy 111.805314 98.979345) + (xy 111.786884 99.19) + (xy 110.213116 99.19) + (xy 110.194686 98.979345) + (xy 110.192289 98.9704) + (xy 110.141379 98.7804) + (xy 110.141378 98.780398) + (xy 110.139956 98.77509) + (xy 110.058415 98.600224) + (xy 110.052912 98.588423) + (xy 110.05291 98.58842) + (xy 110.050589 98.583442) + (xy 109.929301 98.410224) + (xy 109.779776 98.260699) + (xy 109.606558 98.139411) + (xy 109.60158 98.13709) + (xy 109.601577 98.137088) + (xy 109.419892 98.052367) + (xy 109.419891 98.052366) + (xy 109.41491 98.050044) + (xy 109.409602 98.048622) + (xy 109.4096 98.048621) + (xy 109.21597 97.996738) + (xy 109.215968 97.996738) + (xy 109.210655 97.995314) + (xy 109 97.976884) + (xy 108.789345 97.995314) + (xy 108.784032 97.996738) + (xy 108.78403 97.996738) + (xy 108.5904 98.048621) + (xy 108.590398 98.048622) + (xy 108.58509 98.050044) + (xy 108.580109 98.052366) + (xy 108.580108 98.052367) + (xy 108.398423 98.137088) + (xy 108.39842 98.13709) + (xy 108.393442 98.139411) + (xy 108.220224 98.260699) + (xy 108.070699 98.410224) + (xy 107.949411 98.583442) + (xy 107.94709 98.58842) + (xy 107.947088 98.588423) + (xy 107.941585 98.600224) + (xy 107.860044 98.77509) + (xy 107.858622 98.780398) + (xy 107.858621 98.7804) + (xy 107.807711 98.9704) + (xy 107.805314 98.979345) + (xy 107.786884 99.19) + (xy 106.213116 99.19) + (xy 106.194686 98.979345) + (xy 106.192289 98.9704) + (xy 106.141379 98.7804) + (xy 106.141378 98.780398) + (xy 106.139956 98.77509) + (xy 106.058415 98.600224) + (xy 106.052912 98.588423) + (xy 106.05291 98.58842) + (xy 106.050589 98.583442) + (xy 105.929301 98.410224) + (xy 105.779776 98.260699) + (xy 105.606558 98.139411) + (xy 105.60158 98.13709) + (xy 105.601577 98.137088) + (xy 105.419892 98.052367) + (xy 105.419891 98.052366) + (xy 105.41491 98.050044) + (xy 105.409602 98.048622) + (xy 105.4096 98.048621) + (xy 105.21597 97.996738) + (xy 105.215968 97.996738) + (xy 105.210655 97.995314) + (xy 105 97.976884) + (xy 104.789345 97.995314) + (xy 104.784032 97.996738) + (xy 104.78403 97.996738) + (xy 104.5904 98.048621) + (xy 104.590398 98.048622) + (xy 104.58509 98.050044) + (xy 104.580109 98.052366) + (xy 104.580108 98.052367) + (xy 104.398423 98.137088) + (xy 104.39842 98.13709) + (xy 104.393442 98.139411) + (xy 104.220224 98.260699) + (xy 104.070699 98.410224) + (xy 103.949411 98.583442) + (xy 103.94709 98.58842) + (xy 103.947088 98.588423) + (xy 103.941585 98.600224) + (xy 103.860044 98.77509) + (xy 103.858622 98.780398) + (xy 103.858621 98.7804) + (xy 103.807711 98.9704) + (xy 103.805314 98.979345) + (xy 103.786884 99.19) + (xy 35.008 99.19) + (xy 35.008 92.76858) + (xy 39.717662 92.76858) + (xy 39.745413 92.90084) + (xy 39.748473 92.911037) + (xy 39.832315 93.12334) + (xy 39.837049 93.132876) + (xy 39.955468 93.328025) + (xy 39.961734 93.336618) + (xy 40.111342 93.509027) + (xy 40.118972 93.516447) + (xy 40.295488 93.66118) + (xy 40.304255 93.667206) + (xy 40.502633 93.780129) + (xy 40.512297 93.784595) + (xy 40.726868 93.862481) + (xy 40.737135 93.865251) + (xy 40.962932 93.906081) + (xy 40.971162 93.907016) + (xy 40.99055 93.90793) + (xy 40.993526 93.908) + (xy 41.727885 93.908) + (xy 41.743124 93.903525) + (xy 41.744329 93.902135) + (xy 41.746 93.894452) + (xy 41.746 93.889885) + (xy 42.254 93.889885) + (xy 42.258475 93.905124) + (xy 42.259865 93.906329) + (xy 42.267548 93.908) + (xy 42.95734 93.908) + (xy 42.962649 93.907775) + (xy 43.132771 93.89334) + (xy 43.143259 93.891548) + (xy 43.364211 93.834199) + (xy 43.374239 93.830667) + (xy 43.582363 93.736915) + (xy 43.591669 93.731735) + (xy 43.781024 93.604253) + (xy 43.789307 93.597594) + (xy 43.954478 93.440029) + (xy 43.96153 93.432058) + (xy 44.09779 93.248918) + (xy 44.103394 93.239881) + (xy 44.206851 93.036394) + (xy 44.210852 93.026541) + (xy 44.278544 92.808539) + (xy 44.280828 92.798152) + (xy 44.2843 92.771957) + (xy 44.282104 92.757793) + (xy 44.268919 92.754) + (xy 42.272115 92.754) + (xy 42.256876 92.758475) + (xy 42.255671 92.759865) + (xy 42.254 92.767548) + (xy 42.254 93.889885) + (xy 41.746 93.889885) + (xy 41.746 92.772115) + (xy 41.741525 92.756876) + (xy 41.740135 92.755671) + (xy 41.732452 92.754) + (xy 39.732718 92.754) + (xy 39.719187 92.757973) + (xy 39.717662 92.76858) + (xy 35.008 92.76858) + (xy 35.008 92.228043) + (xy 39.7157 92.228043) + (xy 39.717896 92.242207) + (xy 39.731081 92.246) + (xy 41.727885 92.246) + (xy 41.743124 92.241525) + (xy 41.744329 92.240135) + (xy 41.746 92.232452) + (xy 41.746 92.227885) + (xy 42.254 92.227885) + (xy 42.258475 92.243124) + (xy 42.259865 92.244329) + (xy 42.267548 92.246) + (xy 44.267282 92.246) + (xy 44.280813 92.242027) + (xy 44.282338 92.23142) + (xy 44.254587 92.09916) + (xy 44.251527 92.088963) + (xy 44.167685 91.87666) + (xy 44.162951 91.867124) + (xy 44.044532 91.671975) + (xy 44.038266 91.663382) + (xy 43.888658 91.490973) + (xy 43.881028 91.483553) + (xy 43.704512 91.33882) + (xy 43.695745 91.332794) + (xy 43.497367 91.219871) + (xy 43.487703 91.215405) + (xy 43.273132 91.137519) + (xy 43.262865 91.134749) + (xy 43.037068 91.093919) + (xy 43.028838 91.092984) + (xy 43.00945 91.09207) + (xy 43.006474 91.092) + (xy 42.272115 91.092) + (xy 42.256876 91.096475) + (xy 42.255671 91.097865) + (xy 42.254 91.105548) + (xy 42.254 92.227885) + (xy 41.746 92.227885) + (xy 41.746 91.110115) + (xy 41.741525 91.094876) + (xy 41.740135 91.093671) + (xy 41.732452 91.092) + (xy 41.04266 91.092) + (xy 41.037351 91.092225) + (xy 40.867229 91.10666) + (xy 40.856741 91.108452) + (xy 40.635789 91.165801) + (xy 40.625761 91.169333) + (xy 40.417637 91.263085) + (xy 40.408331 91.268265) + (xy 40.218976 91.395747) + (xy 40.210693 91.402406) + (xy 40.045522 91.559971) + (xy 40.03847 91.567942) + (xy 39.90221 91.751082) + (xy 39.896606 91.760119) + (xy 39.793149 91.963606) + (xy 39.789148 91.973459) + (xy 39.721456 92.191461) + (xy 39.719172 92.201848) + (xy 39.7157 92.228043) + (xy 35.008 92.228043) + (xy 35.008 89.7004) + (xy 39.6915 89.7004) + (xy 39.702474 89.806166) + (xy 39.75845 89.973946) + (xy 39.851522 90.124348) + (xy 39.976697 90.249305) + (xy 39.982927 90.253145) + (xy 39.982928 90.253146) + (xy 40.12009 90.337694) + (xy 40.127262 90.342115) + (xy 40.207005 90.368564) + (xy 40.288611 90.395632) + (xy 40.288613 90.395632) + (xy 40.295139 90.397797) + (xy 40.301975 90.398497) + (xy 40.301978 90.398498) + (xy 40.345031 90.402909) + (xy 40.3996 90.4085) + (xy 43.6004 90.4085) + (xy 43.603646 90.408163) + (xy 43.60365 90.408163) + (xy 43.699308 90.398238) + (xy 43.699312 90.398237) + (xy 43.706166 90.397526) + (xy 43.712702 90.395345) + (xy 43.712704 90.395345) + (xy 43.844806 90.351272) + (xy 43.873946 90.34155) + (xy 44.024348 90.248478) + (xy 44.149305 90.123303) + (xy 44.242115 89.972738) + (xy 44.297797 89.804861) + (xy 44.3085 89.7004) + (xy 44.3085 89.57) + (xy 83.486835 89.57) + (xy 83.505465 89.806711) + (xy 83.506619 89.811518) + (xy 83.50662 89.811524) + (xy 83.54164 89.957391) + (xy 83.560895 90.037594) + (xy 83.562788 90.042165) + (xy 83.562789 90.042167) + (xy 83.649842 90.252332) + (xy 83.65176 90.256963) + (xy 83.654346 90.261183) + (xy 83.773241 90.455202) + (xy 83.773245 90.455208) + (xy 83.775824 90.459416) + (xy 83.930031 90.639969) + (xy 84.110584 90.794176) + (xy 84.114792 90.796755) + (xy 84.114798 90.796759) + (xy 84.308817 90.915654) + (xy 84.313037 90.91824) + (xy 84.317607 90.920133) + (xy 84.317611 90.920135) + (xy 84.527833 91.007211) + (xy 84.532406 91.009105) + (xy 84.612609 91.02836) + (xy 84.758476 91.06338) + (xy 84.758482 91.063381) + (xy 84.763289 91.064535) + (xy 85 91.083165) + (xy 85.236711 91.064535) + (xy 85.241518 91.063381) + (xy 85.241524 91.06338) + (xy 85.387391 91.02836) + (xy 85.467594 91.009105) + (xy 85.472167 91.007211) + (xy 85.682389 90.920135) + (xy 85.682393 90.920133) + (xy 85.686963 90.91824) + (xy 85.691183 90.915654) + (xy 85.885202 90.796759) + (xy 85.885208 90.796755) + (xy 85.889416 90.794176) + (xy 86.069969 90.639969) + (xy 86.224176 90.459416) + (xy 86.226755 90.455208) + (xy 86.226759 90.455202) + (xy 86.345654 90.261183) + (xy 86.34824 90.256963) + (xy 86.350159 90.252332) + (xy 86.437211 90.042167) + (xy 86.437212 90.042165) + (xy 86.439105 90.037594) + (xy 86.45836 89.957391) + (xy 86.49338 89.811524) + (xy 86.493381 89.811518) + (xy 86.494535 89.806711) + (xy 86.513165 89.57) + (xy 86.494535 89.333289) + (xy 86.439105 89.102406) + (xy 86.34824 88.883037) + (xy 86.345654 88.878817) + (xy 86.226759 88.684798) + (xy 86.226755 88.684792) + (xy 86.224176 88.680584) + (xy 86.069969 88.500031) + (xy 85.889416 88.345824) + (xy 85.885208 88.343245) + (xy 85.885202 88.343241) + (xy 85.691183 88.224346) + (xy 85.686963 88.22176) + (xy 85.682393 88.219867) + (xy 85.682389 88.219865) + (xy 85.472167 88.132789) + (xy 85.472165 88.132788) + (xy 85.467594 88.130895) + (xy 85.387391 88.11164) + (xy 85.241524 88.07662) + (xy 85.241518 88.076619) + (xy 85.236711 88.075465) + (xy 85 88.056835) + (xy 84.763289 88.075465) + (xy 84.758482 88.076619) + (xy 84.758476 88.07662) + (xy 84.612609 88.11164) + (xy 84.532406 88.130895) + (xy 84.527835 88.132788) + (xy 84.527833 88.132789) + (xy 84.317611 88.219865) + (xy 84.317607 88.219867) + (xy 84.313037 88.22176) + (xy 84.308817 88.224346) + (xy 84.114798 88.343241) + (xy 84.114792 88.343245) + (xy 84.110584 88.345824) + (xy 83.930031 88.500031) + (xy 83.775824 88.680584) + (xy 83.773245 88.684792) + (xy 83.773241 88.684798) + (xy 83.654346 88.878817) + (xy 83.65176 88.883037) + (xy 83.560895 89.102406) + (xy 83.505465 89.333289) + (xy 83.486835 89.57) + (xy 44.3085 89.57) + (xy 44.3085 88.2996) + (xy 44.297526 88.193834) + (xy 44.276143 88.12974) + (xy 44.243868 88.033002) + (xy 44.24155 88.026054) + (xy 44.148478 87.875652) + (xy 44.023303 87.750695) + (xy 44.017072 87.746854) + (xy 43.878968 87.661725) + (xy 43.878966 87.661724) + (xy 43.872738 87.657885) + (xy 43.712254 87.604655) + (xy 43.711389 87.604368) + (xy 43.711387 87.604368) + (xy 43.704861 87.602203) + (xy 43.698025 87.601503) + (xy 43.698022 87.601502) + (xy 43.654969 87.597091) + (xy 43.6004 87.5915) + (xy 40.3996 87.5915) + (xy 40.396354 87.591837) + (xy 40.39635 87.591837) + (xy 40.300692 87.601762) + (xy 40.300688 87.601763) + (xy 40.293834 87.602474) + (xy 40.287298 87.604655) + (xy 40.287296 87.604655) + (xy 40.155194 87.648728) + (xy 40.126054 87.65845) + (xy 39.975652 87.751522) + (xy 39.850695 87.876697) + (xy 39.757885 88.027262) + (xy 39.702203 88.195139) + (xy 39.701503 88.201975) + (xy 39.701502 88.201978) + (xy 39.699475 88.22176) + (xy 39.6915 88.2996) + (xy 39.6915 89.7004) + (xy 35.008 89.7004) + (xy 35.008 83.8) + (xy 54.444627 83.8) + (xy 54.4448 83.803301) + (xy 54.458242 84.059781) + (xy 54.464104 84.171638) + (xy 54.464619 84.174889) + (xy 54.518467 84.514874) + (xy 54.52232 84.539204) + (xy 54.618639 84.898671) + (xy 54.752005 85.2461) + (xy 54.920957 85.577686) + (xy 55.123643 85.889796) + (xy 55.357843 86.179009) + (xy 55.620991 86.442157) + (xy 55.910204 86.676357) + (xy 56.222313 86.879043) + (xy 56.394625 86.96684) + (xy 56.550965 87.0465) + (xy 56.550972 87.046503) + (xy 56.5539 87.047995) + (xy 56.556972 87.049174) + (xy 56.556976 87.049176) + (xy 56.68327 87.097656) + (xy 56.901329 87.181361) + (xy 57.260796 87.27768) + (xy 57.264046 87.278195) + (xy 57.264052 87.278196) + (xy 57.537231 87.321463) + (xy 57.628362 87.335896) + (xy 57.631647 87.336068) + (xy 57.631655 87.336069) + (xy 57.996699 87.3552) + (xy 58 87.355373) + (xy 58.003301 87.3552) + (xy 58.368345 87.336069) + (xy 58.368353 87.336068) + (xy 58.371638 87.335896) + (xy 58.462769 87.321463) + (xy 58.735948 87.278196) + (xy 58.735954 87.278195) + (xy 58.739204 87.27768) + (xy 59.098671 87.181361) + (xy 59.31673 87.097656) + (xy 59.443024 87.049176) + (xy 59.443028 87.049174) + (xy 59.4461 87.047995) + (xy 59.449028 87.046503) + (xy 59.449035 87.0465) + (xy 59.605375 86.96684) + (xy 59.777687 86.879043) + (xy 60.089796 86.676357) + (xy 60.379009 86.442157) + (xy 60.642157 86.179009) + (xy 60.876357 85.889796) + (xy 61.079043 85.577686) + (xy 61.247995 85.2461) + (xy 61.381361 84.898671) + (xy 61.47768 84.539204) + (xy 61.481534 84.514874) + (xy 61.535381 84.174889) + (xy 61.535896 84.171638) + (xy 61.541759 84.059781) + (xy 61.5552 83.803301) + (xy 61.555373 83.8) + (xy 61.553614 83.766443) + (xy 61.536069 83.431655) + (xy 61.536068 83.431647) + (xy 61.535896 83.428362) + (xy 61.506063 83.24) + (xy 104.944647 83.24) + (xy 104.964022 83.461463) + (xy 105.02156 83.676196) + (xy 105.023882 83.681177) + (xy 105.023883 83.681178) + (xy 105.113186 83.872689) + (xy 105.113189 83.872694) + (xy 105.115512 83.877676) + (xy 105.118668 83.882183) + (xy 105.118669 83.882185) + (xy 105.155107 83.934223) + (xy 105.243023 84.059781) + (xy 105.400219 84.216977) + (xy 105.404727 84.220134) + (xy 105.40473 84.220136) + (xy 105.480495 84.273187) + (xy 105.582323 84.344488) + (xy 105.587305 84.346811) + (xy 105.58731 84.346814) + (xy 105.77781 84.435645) + (xy 105.783804 84.43844) + (xy 105.789112 84.439862) + (xy 105.789114 84.439863) + (xy 105.854949 84.457503) + (xy 105.998537 84.495978) + (xy 106.22 84.515353) + (xy 106.441463 84.495978) + (xy 106.585051 84.457503) + (xy 106.650886 84.439863) + (xy 106.650888 84.439862) + (xy 106.656196 84.43844) + (xy 106.66219 84.435645) + (xy 106.85269 84.346814) + (xy 106.852695 84.346811) + (xy 106.857677 84.344488) + (xy 106.959505 84.273187) + (xy 107.03527 84.220136) + (xy 107.035273 84.220134) + (xy 107.039781 84.216977) + (xy 107.196977 84.059781) + (xy 107.284894 83.934223) + (xy 107.321331 83.882185) + (xy 107.321332 83.882183) + (xy 107.324488 83.877676) + (xy 107.326811 83.872694) + (xy 107.326814 83.872689) + (xy 107.375805 83.767627) + (xy 107.422723 83.714342) + (xy 107.491 83.694881) + (xy 107.55896 83.715423) + (xy 107.604195 83.767627) + (xy 107.653186 83.872689) + (xy 107.653189 83.872694) + (xy 107.655512 83.877676) + (xy 107.658668 83.882183) + (xy 107.658669 83.882185) + (xy 107.695107 83.934223) + (xy 107.783023 84.059781) + (xy 107.940219 84.216977) + (xy 107.944727 84.220134) + (xy 107.94473 84.220136) + (xy 108.020495 84.273187) + (xy 108.122323 84.344488) + (xy 108.127305 84.346811) + (xy 108.12731 84.346814) + (xy 108.31781 84.435645) + (xy 108.323804 84.43844) + (xy 108.329112 84.439862) + (xy 108.329114 84.439863) + (xy 108.394949 84.457503) + (xy 108.538537 84.495978) + (xy 108.76 84.515353) + (xy 108.981463 84.495978) + (xy 109.125051 84.457503) + (xy 109.190886 84.439863) + (xy 109.190888 84.439862) + (xy 109.196196 84.43844) + (xy 109.20219 84.435645) + (xy 109.39269 84.346814) + (xy 109.392695 84.346811) + (xy 109.397677 84.344488) + (xy 109.499505 84.273187) + (xy 109.57527 84.220136) + (xy 109.575273 84.220134) + (xy 109.579781 84.216977) + (xy 109.736977 84.059781) + (xy 109.824894 83.934223) + (xy 109.861331 83.882185) + (xy 109.861332 83.882183) + (xy 109.864488 83.877676) + (xy 109.866811 83.872694) + (xy 109.866814 83.872689) + (xy 109.915805 83.767627) + (xy 109.962723 83.714342) + (xy 110.031 83.694881) + (xy 110.09896 83.715423) + (xy 110.144195 83.767627) + (xy 110.193186 83.872689) + (xy 110.193189 83.872694) + (xy 110.195512 83.877676) + (xy 110.198668 83.882183) + (xy 110.198669 83.882185) + (xy 110.235107 83.934223) + (xy 110.323023 84.059781) + (xy 110.480219 84.216977) + (xy 110.484727 84.220134) + (xy 110.48473 84.220136) + (xy 110.560495 84.273187) + (xy 110.662323 84.344488) + (xy 110.667305 84.346811) + (xy 110.66731 84.346814) + (xy 110.85781 84.435645) + (xy 110.863804 84.43844) + (xy 110.869112 84.439862) + (xy 110.869114 84.439863) + (xy 110.934949 84.457503) + (xy 111.078537 84.495978) + (xy 111.3 84.515353) + (xy 111.521463 84.495978) + (xy 111.665051 84.457503) + (xy 111.730886 84.439863) + (xy 111.730888 84.439862) + (xy 111.736196 84.43844) + (xy 111.74219 84.435645) + (xy 111.93269 84.346814) + (xy 111.932695 84.346811) + (xy 111.937677 84.344488) + (xy 112.039505 84.273187) + (xy 112.11527 84.220136) + (xy 112.115273 84.220134) + (xy 112.119781 84.216977) + (xy 112.276977 84.059781) + (xy 112.364894 83.934223) + (xy 112.401331 83.882185) + (xy 112.401332 83.882183) + (xy 112.404488 83.877676) + (xy 112.406811 83.872694) + (xy 112.406814 83.872689) + (xy 112.455805 83.767627) + (xy 112.502723 83.714342) + (xy 112.571 83.694881) + (xy 112.63896 83.715423) + (xy 112.684195 83.767627) + (xy 112.733186 83.872689) + (xy 112.733189 83.872694) + (xy 112.735512 83.877676) + (xy 112.738668 83.882183) + (xy 112.738669 83.882185) + (xy 112.775107 83.934223) + (xy 112.863023 84.059781) + (xy 113.020219 84.216977) + (xy 113.024727 84.220134) + (xy 113.02473 84.220136) + (xy 113.100495 84.273187) + (xy 113.202323 84.344488) + (xy 113.207305 84.346811) + (xy 113.20731 84.346814) + (xy 113.39781 84.435645) + (xy 113.403804 84.43844) + (xy 113.409112 84.439862) + (xy 113.409114 84.439863) + (xy 113.474949 84.457503) + (xy 113.618537 84.495978) + (xy 113.84 84.515353) + (xy 114.061463 84.495978) + (xy 114.205051 84.457503) + (xy 114.270886 84.439863) + (xy 114.270888 84.439862) + (xy 114.276196 84.43844) + (xy 114.28219 84.435645) + (xy 114.47269 84.346814) + (xy 114.472695 84.346811) + (xy 114.477677 84.344488) + (xy 114.579505 84.273187) + (xy 114.65527 84.220136) + (xy 114.655273 84.220134) + (xy 114.659781 84.216977) + (xy 114.816977 84.059781) + (xy 114.904894 83.934223) + (xy 114.941331 83.882185) + (xy 114.941332 83.882183) + (xy 114.944488 83.877676) + (xy 114.946811 83.872694) + (xy 114.946814 83.872689) + (xy 114.995805 83.767627) + (xy 115.042723 83.714342) + (xy 115.111 83.694881) + (xy 115.17896 83.715423) + (xy 115.224195 83.767627) + (xy 115.273186 83.872689) + (xy 115.273189 83.872694) + (xy 115.275512 83.877676) + (xy 115.278668 83.882183) + (xy 115.278669 83.882185) + (xy 115.315107 83.934223) + (xy 115.403023 84.059781) + (xy 115.560219 84.216977) + (xy 115.564727 84.220134) + (xy 115.56473 84.220136) + (xy 115.640495 84.273187) + (xy 115.742323 84.344488) + (xy 115.747305 84.346811) + (xy 115.74731 84.346814) + (xy 115.93781 84.435645) + (xy 115.943804 84.43844) + (xy 115.949112 84.439862) + (xy 115.949114 84.439863) + (xy 116.014949 84.457503) + (xy 116.158537 84.495978) + (xy 116.38 84.515353) + (xy 116.601463 84.495978) + (xy 116.745051 84.457503) + (xy 116.810886 84.439863) + (xy 116.810888 84.439862) + (xy 116.816196 84.43844) + (xy 116.82219 84.435645) + (xy 117.01269 84.346814) + (xy 117.012695 84.346811) + (xy 117.017677 84.344488) + (xy 117.119505 84.273187) + (xy 117.19527 84.220136) + (xy 117.195273 84.220134) + (xy 117.199781 84.216977) + (xy 117.356977 84.059781) + (xy 117.444894 83.934223) + (xy 117.481331 83.882185) + (xy 117.481332 83.882183) + (xy 117.484488 83.877676) + (xy 117.486811 83.872694) + (xy 117.486814 83.872689) + (xy 117.535805 83.767627) + (xy 117.582723 83.714342) + (xy 117.651 83.694881) + (xy 117.71896 83.715423) + (xy 117.764195 83.767627) + (xy 117.813186 83.872689) + (xy 117.813189 83.872694) + (xy 117.815512 83.877676) + (xy 117.818668 83.882183) + (xy 117.818669 83.882185) + (xy 117.855107 83.934223) + (xy 117.943023 84.059781) + (xy 118.100219 84.216977) + (xy 118.104727 84.220134) + (xy 118.10473 84.220136) + (xy 118.180495 84.273187) + (xy 118.282323 84.344488) + (xy 118.287305 84.346811) + (xy 118.28731 84.346814) + (xy 118.47781 84.435645) + (xy 118.483804 84.43844) + (xy 118.489112 84.439862) + (xy 118.489114 84.439863) + (xy 118.554949 84.457503) + (xy 118.698537 84.495978) + (xy 118.92 84.515353) + (xy 119.141463 84.495978) + (xy 119.285051 84.457503) + (xy 119.350886 84.439863) + (xy 119.350888 84.439862) + (xy 119.356196 84.43844) + (xy 119.36219 84.435645) + (xy 119.55269 84.346814) + (xy 119.552695 84.346811) + (xy 119.557677 84.344488) + (xy 119.659505 84.273187) + (xy 119.73527 84.220136) + (xy 119.735273 84.220134) + (xy 119.739781 84.216977) + (xy 119.896977 84.059781) + (xy 119.984894 83.934223) + (xy 120.021331 83.882185) + (xy 120.021332 83.882183) + (xy 120.024488 83.877676) + (xy 120.026811 83.872694) + (xy 120.026814 83.872689) + (xy 120.075805 83.767627) + (xy 120.122723 83.714342) + (xy 120.191 83.694881) + (xy 120.25896 83.715423) + (xy 120.304195 83.767627) + (xy 120.353186 83.872689) + (xy 120.353189 83.872694) + (xy 120.355512 83.877676) + (xy 120.358668 83.882183) + (xy 120.358669 83.882185) + (xy 120.395107 83.934223) + (xy 120.483023 84.059781) + (xy 120.640219 84.216977) + (xy 120.644727 84.220134) + (xy 120.64473 84.220136) + (xy 120.720495 84.273187) + (xy 120.822323 84.344488) + (xy 120.827305 84.346811) + (xy 120.82731 84.346814) + (xy 121.01781 84.435645) + (xy 121.023804 84.43844) + (xy 121.029112 84.439862) + (xy 121.029114 84.439863) + (xy 121.094949 84.457503) + (xy 121.238537 84.495978) + (xy 121.46 84.515353) + (xy 121.681463 84.495978) + (xy 121.825051 84.457503) + (xy 121.890886 84.439863) + (xy 121.890888 84.439862) + (xy 121.896196 84.43844) + (xy 121.90219 84.435645) + (xy 122.09269 84.346814) + (xy 122.092695 84.346811) + (xy 122.097677 84.344488) + (xy 122.199505 84.273187) + (xy 122.27527 84.220136) + (xy 122.275273 84.220134) + (xy 122.279781 84.216977) + (xy 122.436977 84.059781) + (xy 122.524894 83.934223) + (xy 122.561331 83.882185) + (xy 122.561332 83.882183) + (xy 122.564488 83.877676) + (xy 122.566811 83.872694) + (xy 122.566814 83.872689) + (xy 122.615805 83.767627) + (xy 122.662723 83.714342) + (xy 122.731 83.694881) + (xy 122.79896 83.715423) + (xy 122.844195 83.767627) + (xy 122.893186 83.872689) + (xy 122.893189 83.872694) + (xy 122.895512 83.877676) + (xy 122.898668 83.882183) + (xy 122.898669 83.882185) + (xy 122.935107 83.934223) + (xy 123.023023 84.059781) + (xy 123.180219 84.216977) + (xy 123.184727 84.220134) + (xy 123.18473 84.220136) + (xy 123.260495 84.273187) + (xy 123.362323 84.344488) + (xy 123.367305 84.346811) + (xy 123.36731 84.346814) + (xy 123.55781 84.435645) + (xy 123.563804 84.43844) + (xy 123.569112 84.439862) + (xy 123.569114 84.439863) + (xy 123.634949 84.457503) + (xy 123.778537 84.495978) + (xy 124 84.515353) + (xy 124.221463 84.495978) + (xy 124.365051 84.457503) + (xy 124.430886 84.439863) + (xy 124.430888 84.439862) + (xy 124.436196 84.43844) + (xy 124.44219 84.435645) + (xy 124.63269 84.346814) + (xy 124.632695 84.346811) + (xy 124.637677 84.344488) + (xy 124.739505 84.273187) + (xy 124.81527 84.220136) + (xy 124.815273 84.220134) + (xy 124.819781 84.216977) + (xy 124.976977 84.059781) + (xy 125.064894 83.934223) + (xy 125.101331 83.882185) + (xy 125.101332 83.882183) + (xy 125.104488 83.877676) + (xy 125.106811 83.872694) + (xy 125.106814 83.872689) + (xy 125.155805 83.767627) + (xy 125.202723 83.714342) + (xy 125.271 83.694881) + (xy 125.33896 83.715423) + (xy 125.384195 83.767627) + (xy 125.433186 83.872689) + (xy 125.433189 83.872694) + (xy 125.435512 83.877676) + (xy 125.438668 83.882183) + (xy 125.438669 83.882185) + (xy 125.475107 83.934223) + (xy 125.563023 84.059781) + (xy 125.720219 84.216977) + (xy 125.724727 84.220134) + (xy 125.72473 84.220136) + (xy 125.800495 84.273187) + (xy 125.902323 84.344488) + (xy 125.907305 84.346811) + (xy 125.90731 84.346814) + (xy 126.09781 84.435645) + (xy 126.103804 84.43844) + (xy 126.109112 84.439862) + (xy 126.109114 84.439863) + (xy 126.174949 84.457503) + (xy 126.318537 84.495978) + (xy 126.54 84.515353) + (xy 126.761463 84.495978) + (xy 126.905051 84.457503) + (xy 126.970886 84.439863) + (xy 126.970888 84.439862) + (xy 126.976196 84.43844) + (xy 126.98219 84.435645) + (xy 127.17269 84.346814) + (xy 127.172695 84.346811) + (xy 127.177677 84.344488) + (xy 127.279505 84.273187) + (xy 127.35527 84.220136) + (xy 127.355273 84.220134) + (xy 127.359781 84.216977) + (xy 127.516977 84.059781) + (xy 127.604894 83.934223) + (xy 127.641331 83.882185) + (xy 127.641332 83.882183) + (xy 127.644488 83.877676) + (xy 127.646811 83.872694) + (xy 127.646814 83.872689) + (xy 127.695805 83.767627) + (xy 127.742723 83.714342) + (xy 127.811 83.694881) + (xy 127.87896 83.715423) + (xy 127.924195 83.767627) + (xy 127.973186 83.872689) + (xy 127.973189 83.872694) + (xy 127.975512 83.877676) + (xy 127.978668 83.882183) + (xy 127.978669 83.882185) + (xy 128.015107 83.934223) + (xy 128.103023 84.059781) + (xy 128.260219 84.216977) + (xy 128.264727 84.220134) + (xy 128.26473 84.220136) + (xy 128.340495 84.273187) + (xy 128.442323 84.344488) + (xy 128.447305 84.346811) + (xy 128.44731 84.346814) + (xy 128.63781 84.435645) + (xy 128.643804 84.43844) + (xy 128.649112 84.439862) + (xy 128.649114 84.439863) + (xy 128.714949 84.457503) + (xy 128.858537 84.495978) + (xy 129.08 84.515353) + (xy 129.301463 84.495978) + (xy 129.445051 84.457503) + (xy 129.510886 84.439863) + (xy 129.510888 84.439862) + (xy 129.516196 84.43844) + (xy 129.52219 84.435645) + (xy 129.71269 84.346814) + (xy 129.712695 84.346811) + (xy 129.717677 84.344488) + (xy 129.819505 84.273187) + (xy 129.89527 84.220136) + (xy 129.895273 84.220134) + (xy 129.899781 84.216977) + (xy 130.056977 84.059781) + (xy 130.144894 83.934223) + (xy 130.181331 83.882185) + (xy 130.181332 83.882183) + (xy 130.184488 83.877676) + (xy 130.186811 83.872694) + (xy 130.186814 83.872689) + (xy 130.235805 83.767627) + (xy 130.282723 83.714342) + (xy 130.351 83.694881) + (xy 130.41896 83.715423) + (xy 130.464195 83.767627) + (xy 130.513186 83.872689) + (xy 130.513189 83.872694) + (xy 130.515512 83.877676) + (xy 130.518668 83.882183) + (xy 130.518669 83.882185) + (xy 130.555107 83.934223) + (xy 130.643023 84.059781) + (xy 130.800219 84.216977) + (xy 130.804727 84.220134) + (xy 130.80473 84.220136) + (xy 130.880495 84.273187) + (xy 130.982323 84.344488) + (xy 130.987305 84.346811) + (xy 130.98731 84.346814) + (xy 131.17781 84.435645) + (xy 131.183804 84.43844) + (xy 131.189112 84.439862) + (xy 131.189114 84.439863) + (xy 131.254949 84.457503) + (xy 131.398537 84.495978) + (xy 131.62 84.515353) + (xy 131.841463 84.495978) + (xy 131.985051 84.457503) + (xy 132.050886 84.439863) + (xy 132.050888 84.439862) + (xy 132.056196 84.43844) + (xy 132.06219 84.435645) + (xy 132.25269 84.346814) + (xy 132.252695 84.346811) + (xy 132.257677 84.344488) + (xy 132.359505 84.273187) + (xy 132.43527 84.220136) + (xy 132.435273 84.220134) + (xy 132.439781 84.216977) + (xy 132.596977 84.059781) + (xy 132.684894 83.934223) + (xy 132.721331 83.882185) + (xy 132.721332 83.882183) + (xy 132.724488 83.877676) + (xy 132.726811 83.872694) + (xy 132.726814 83.872689) + (xy 132.775805 83.767627) + (xy 132.822723 83.714342) + (xy 132.891 83.694881) + (xy 132.95896 83.715423) + (xy 133.004195 83.767627) + (xy 133.053186 83.872689) + (xy 133.053189 83.872694) + (xy 133.055512 83.877676) + (xy 133.058668 83.882183) + (xy 133.058669 83.882185) + (xy 133.095107 83.934223) + (xy 133.183023 84.059781) + (xy 133.340219 84.216977) + (xy 133.344727 84.220134) + (xy 133.34473 84.220136) + (xy 133.420495 84.273187) + (xy 133.522323 84.344488) + (xy 133.527305 84.346811) + (xy 133.52731 84.346814) + (xy 133.71781 84.435645) + (xy 133.723804 84.43844) + (xy 133.729112 84.439862) + (xy 133.729114 84.439863) + (xy 133.794949 84.457503) + (xy 133.938537 84.495978) + (xy 134.16 84.515353) + (xy 134.381463 84.495978) + (xy 134.525051 84.457503) + (xy 134.590886 84.439863) + (xy 134.590888 84.439862) + (xy 134.596196 84.43844) + (xy 134.60219 84.435645) + (xy 134.79269 84.346814) + (xy 134.792695 84.346811) + (xy 134.797677 84.344488) + (xy 134.899505 84.273187) + (xy 134.97527 84.220136) + (xy 134.975273 84.220134) + (xy 134.979781 84.216977) + (xy 135.136977 84.059781) + (xy 135.224894 83.934223) + (xy 135.261331 83.882185) + (xy 135.261332 83.882183) + (xy 135.264488 83.877676) + (xy 135.266811 83.872694) + (xy 135.266814 83.872689) + (xy 135.315805 83.767627) + (xy 135.362723 83.714342) + (xy 135.431 83.694881) + (xy 135.49896 83.715423) + (xy 135.544195 83.767627) + (xy 135.593186 83.872689) + (xy 135.593189 83.872694) + (xy 135.595512 83.877676) + (xy 135.598668 83.882183) + (xy 135.598669 83.882185) + (xy 135.635107 83.934223) + (xy 135.723023 84.059781) + (xy 135.880219 84.216977) + (xy 135.884727 84.220134) + (xy 135.88473 84.220136) + (xy 135.960495 84.273187) + (xy 136.062323 84.344488) + (xy 136.067305 84.346811) + (xy 136.06731 84.346814) + (xy 136.25781 84.435645) + (xy 136.263804 84.43844) + (xy 136.269112 84.439862) + (xy 136.269114 84.439863) + (xy 136.334949 84.457503) + (xy 136.478537 84.495978) + (xy 136.7 84.515353) + (xy 136.921463 84.495978) + (xy 137.065051 84.457503) + (xy 137.130886 84.439863) + (xy 137.130888 84.439862) + (xy 137.136196 84.43844) + (xy 137.14219 84.435645) + (xy 137.33269 84.346814) + (xy 137.332695 84.346811) + (xy 137.337677 84.344488) + (xy 137.439505 84.273187) + (xy 137.51527 84.220136) + (xy 137.515273 84.220134) + (xy 137.519781 84.216977) + (xy 137.676977 84.059781) + (xy 137.764894 83.934223) + (xy 137.801331 83.882185) + (xy 137.801332 83.882183) + (xy 137.804488 83.877676) + (xy 137.806811 83.872694) + (xy 137.806814 83.872689) + (xy 137.855805 83.767627) + (xy 137.902723 83.714342) + (xy 137.971 83.694881) + (xy 138.03896 83.715423) + (xy 138.084195 83.767627) + (xy 138.133186 83.872689) + (xy 138.133189 83.872694) + (xy 138.135512 83.877676) + (xy 138.138668 83.882183) + (xy 138.138669 83.882185) + (xy 138.175107 83.934223) + (xy 138.263023 84.059781) + (xy 138.420219 84.216977) + (xy 138.424727 84.220134) + (xy 138.42473 84.220136) + (xy 138.500495 84.273187) + (xy 138.602323 84.344488) + (xy 138.607305 84.346811) + (xy 138.60731 84.346814) + (xy 138.79781 84.435645) + (xy 138.803804 84.43844) + (xy 138.809112 84.439862) + (xy 138.809114 84.439863) + (xy 138.874949 84.457503) + (xy 139.018537 84.495978) + (xy 139.24 84.515353) + (xy 139.461463 84.495978) + (xy 139.605051 84.457503) + (xy 139.670886 84.439863) + (xy 139.670888 84.439862) + (xy 139.676196 84.43844) + (xy 139.68219 84.435645) + (xy 139.87269 84.346814) + (xy 139.872695 84.346811) + (xy 139.877677 84.344488) + (xy 139.979505 84.273187) + (xy 140.05527 84.220136) + (xy 140.055273 84.220134) + (xy 140.059781 84.216977) + (xy 140.216977 84.059781) + (xy 140.304894 83.934223) + (xy 140.341331 83.882185) + (xy 140.341332 83.882183) + (xy 140.344488 83.877676) + (xy 140.346811 83.872694) + (xy 140.346814 83.872689) + (xy 140.395805 83.767627) + (xy 140.442723 83.714342) + (xy 140.511 83.694881) + (xy 140.57896 83.715423) + (xy 140.624195 83.767627) + (xy 140.673186 83.872689) + (xy 140.673189 83.872694) + (xy 140.675512 83.877676) + (xy 140.678668 83.882183) + (xy 140.678669 83.882185) + (xy 140.715107 83.934223) + (xy 140.803023 84.059781) + (xy 140.960219 84.216977) + (xy 140.964727 84.220134) + (xy 140.96473 84.220136) + (xy 141.040495 84.273187) + (xy 141.142323 84.344488) + (xy 141.147305 84.346811) + (xy 141.14731 84.346814) + (xy 141.33781 84.435645) + (xy 141.343804 84.43844) + (xy 141.349112 84.439862) + (xy 141.349114 84.439863) + (xy 141.414949 84.457503) + (xy 141.558537 84.495978) + (xy 141.78 84.515353) + (xy 142.001463 84.495978) + (xy 142.145051 84.457503) + (xy 142.210886 84.439863) + (xy 142.210888 84.439862) + (xy 142.216196 84.43844) + (xy 142.22219 84.435645) + (xy 142.41269 84.346814) + (xy 142.412695 84.346811) + (xy 142.417677 84.344488) + (xy 142.519505 84.273187) + (xy 142.59527 84.220136) + (xy 142.595273 84.220134) + (xy 142.599781 84.216977) + (xy 142.756977 84.059781) + (xy 142.844894 83.934223) + (xy 142.881331 83.882185) + (xy 142.881332 83.882183) + (xy 142.884488 83.877676) + (xy 142.886811 83.872694) + (xy 142.886814 83.872689) + (xy 142.935805 83.767627) + (xy 142.982723 83.714342) + (xy 143.051 83.694881) + (xy 143.11896 83.715423) + (xy 143.164195 83.767627) + (xy 143.213186 83.872689) + (xy 143.213189 83.872694) + (xy 143.215512 83.877676) + (xy 143.218668 83.882183) + (xy 143.218669 83.882185) + (xy 143.255107 83.934223) + (xy 143.343023 84.059781) + (xy 143.500219 84.216977) + (xy 143.504727 84.220134) + (xy 143.50473 84.220136) + (xy 143.580495 84.273187) + (xy 143.682323 84.344488) + (xy 143.687305 84.346811) + (xy 143.68731 84.346814) + (xy 143.87781 84.435645) + (xy 143.883804 84.43844) + (xy 143.889112 84.439862) + (xy 143.889114 84.439863) + (xy 143.954949 84.457503) + (xy 144.098537 84.495978) + (xy 144.32 84.515353) + (xy 144.541463 84.495978) + (xy 144.685051 84.457503) + (xy 144.750886 84.439863) + (xy 144.750888 84.439862) + (xy 144.756196 84.43844) + (xy 144.76219 84.435645) + (xy 144.95269 84.346814) + (xy 144.952695 84.346811) + (xy 144.957677 84.344488) + (xy 145.059505 84.273187) + (xy 145.13527 84.220136) + (xy 145.135273 84.220134) + (xy 145.139781 84.216977) + (xy 145.296977 84.059781) + (xy 145.384894 83.934223) + (xy 145.421331 83.882185) + (xy 145.421332 83.882183) + (xy 145.424488 83.877676) + (xy 145.426811 83.872694) + (xy 145.426814 83.872689) + (xy 145.475805 83.767627) + (xy 145.522723 83.714342) + (xy 145.591 83.694881) + (xy 145.65896 83.715423) + (xy 145.704195 83.767627) + (xy 145.753186 83.872689) + (xy 145.753189 83.872694) + (xy 145.755512 83.877676) + (xy 145.758668 83.882183) + (xy 145.758669 83.882185) + (xy 145.795107 83.934223) + (xy 145.883023 84.059781) + (xy 146.040219 84.216977) + (xy 146.044727 84.220134) + (xy 146.04473 84.220136) + (xy 146.120495 84.273187) + (xy 146.222323 84.344488) + (xy 146.227305 84.346811) + (xy 146.22731 84.346814) + (xy 146.41781 84.435645) + (xy 146.423804 84.43844) + (xy 146.429112 84.439862) + (xy 146.429114 84.439863) + (xy 146.494949 84.457503) + (xy 146.638537 84.495978) + (xy 146.86 84.515353) + (xy 147.081463 84.495978) + (xy 147.225051 84.457503) + (xy 147.290886 84.439863) + (xy 147.290888 84.439862) + (xy 147.296196 84.43844) + (xy 147.30219 84.435645) + (xy 147.49269 84.346814) + (xy 147.492695 84.346811) + (xy 147.497677 84.344488) + (xy 147.599505 84.273187) + (xy 147.67527 84.220136) + (xy 147.675273 84.220134) + (xy 147.679781 84.216977) + (xy 147.836977 84.059781) + (xy 147.924894 83.934223) + (xy 147.961331 83.882185) + (xy 147.961332 83.882183) + (xy 147.964488 83.877676) + (xy 147.966811 83.872694) + (xy 147.966814 83.872689) + (xy 148.015805 83.767627) + (xy 148.062723 83.714342) + (xy 148.131 83.694881) + (xy 148.19896 83.715423) + (xy 148.244195 83.767627) + (xy 148.293186 83.872689) + (xy 148.293189 83.872694) + (xy 148.295512 83.877676) + (xy 148.298668 83.882183) + (xy 148.298669 83.882185) + (xy 148.335107 83.934223) + (xy 148.423023 84.059781) + (xy 148.580219 84.216977) + (xy 148.584727 84.220134) + (xy 148.58473 84.220136) + (xy 148.660495 84.273187) + (xy 148.762323 84.344488) + (xy 148.767305 84.346811) + (xy 148.76731 84.346814) + (xy 148.95781 84.435645) + (xy 148.963804 84.43844) + (xy 148.969112 84.439862) + (xy 148.969114 84.439863) + (xy 149.034949 84.457503) + (xy 149.178537 84.495978) + (xy 149.4 84.515353) + (xy 149.621463 84.495978) + (xy 149.765051 84.457503) + (xy 149.830886 84.439863) + (xy 149.830888 84.439862) + (xy 149.836196 84.43844) + (xy 149.84219 84.435645) + (xy 150.03269 84.346814) + (xy 150.032695 84.346811) + (xy 150.037677 84.344488) + (xy 150.102959 84.298777) + (xy 151.245777 84.298777) + (xy 151.255074 84.310793) + (xy 151.298069 84.340898) + (xy 151.307555 84.346376) + (xy 151.498993 84.435645) + (xy 151.509285 84.439391) + (xy 151.713309 84.494059) + (xy 151.724104 84.495962) + (xy 151.934525 84.514372) + (xy 151.945475 84.514372) + (xy 152.155896 84.495962) + (xy 152.166691 84.494059) + (xy 152.370715 84.439391) + (xy 152.381007 84.435645) + (xy 152.572445 84.346376) + (xy 152.581931 84.340898) + (xy 152.625764 84.310207) + (xy 152.634139 84.299729) + (xy 152.633639 84.298777) + (xy 153.785777 84.298777) + (xy 153.795074 84.310793) + (xy 153.838069 84.340898) + (xy 153.847555 84.346376) + (xy 154.038993 84.435645) + (xy 154.049285 84.439391) + (xy 154.253309 84.494059) + (xy 154.264104 84.495962) + (xy 154.474525 84.514372) + (xy 154.485475 84.514372) + (xy 154.695896 84.495962) + (xy 154.706691 84.494059) + (xy 154.910715 84.439391) + (xy 154.921007 84.435645) + (xy 155.112445 84.346376) + (xy 155.121931 84.340898) + (xy 155.165764 84.310207) + (xy 155.174139 84.299729) + (xy 155.167071 84.286281) + (xy 154.492812 83.612022) + (xy 154.478868 83.604408) + (xy 154.477035 83.604539) + (xy 154.47042 83.60879) + (xy 153.792207 84.287003) + (xy 153.785777 84.298777) + (xy 152.633639 84.298777) + (xy 152.627071 84.286281) + (xy 151.952812 83.612022) + (xy 151.938868 83.604408) + (xy 151.937035 83.604539) + (xy 151.93042 83.60879) + (xy 151.252207 84.287003) + (xy 151.245777 84.298777) + (xy 150.102959 84.298777) + (xy 150.139505 84.273187) + (xy 150.21527 84.220136) + (xy 150.215273 84.220134) + (xy 150.219781 84.216977) + (xy 150.376977 84.059781) + (xy 150.464894 83.934223) + (xy 150.501331 83.882185) + (xy 150.501332 83.882183) + (xy 150.504488 83.877676) + (xy 150.506811 83.872694) + (xy 150.506814 83.872689) + (xy 150.556081 83.767035) + (xy 150.602999 83.71375) + (xy 150.671276 83.694289) + (xy 150.739236 83.714831) + (xy 150.784471 83.767035) + (xy 150.833623 83.872441) + (xy 150.839103 83.881932) + (xy 150.869794 83.925765) + (xy 150.880271 83.93414) + (xy 150.893718 83.927072) + (xy 151.567978 83.252812) + (xy 151.574356 83.241132) + (xy 152.304408 83.241132) + (xy 152.304539 83.242965) + (xy 152.30879 83.24958) + (xy 152.987003 83.927793) + (xy 152.998777 83.934223) + (xy 153.010793 83.924926) + (xy 153.040897 83.881932) + (xy 153.046377 83.872441) + (xy 153.095805 83.766443) + (xy 153.142722 83.713158) + (xy 153.211 83.693697) + (xy 153.27896 83.714239) + (xy 153.324195 83.766443) + (xy 153.373623 83.872441) + (xy 153.379103 83.881932) + (xy 153.409794 83.925765) + (xy 153.420271 83.93414) + (xy 153.433718 83.927072) + (xy 154.107978 83.252812) + (xy 154.114356 83.241132) + (xy 154.844408 83.241132) + (xy 154.844539 83.242965) + (xy 154.84879 83.24958) + (xy 155.527003 83.927793) + (xy 155.538777 83.934223) + (xy 155.550793 83.924926) + (xy 155.580897 83.881932) + (xy 155.586377 83.872441) + (xy 155.675645 83.681007) + (xy 155.679391 83.670715) + (xy 155.734059 83.466691) + (xy 155.735962 83.455896) + (xy 155.754372 83.245475) + (xy 155.754372 83.234525) + (xy 155.735962 83.024104) + (xy 155.734059 83.013309) + (xy 155.679391 82.809285) + (xy 155.675645 82.798993) + (xy 155.586377 82.607559) + (xy 155.580897 82.598068) + (xy 155.550206 82.554235) + (xy 155.539729 82.54586) + (xy 155.526282 82.552928) + (xy 154.852022 83.227188) + (xy 154.844408 83.241132) + (xy 154.114356 83.241132) + (xy 154.115592 83.238868) + (xy 154.115461 83.237035) + (xy 154.11121 83.23042) + (xy 153.432997 82.552207) + (xy 153.421223 82.545777) + (xy 153.409207 82.555074) + (xy 153.379103 82.598068) + (xy 153.373623 82.607559) + (xy 153.324195 82.713557) + (xy 153.277278 82.766842) + (xy 153.209 82.786303) + (xy 153.14104 82.765761) + (xy 153.095805 82.713557) + (xy 153.046377 82.607559) + (xy 153.040897 82.598068) + (xy 153.010206 82.554235) + (xy 152.999729 82.54586) + (xy 152.986282 82.552928) + (xy 152.312022 83.227188) + (xy 152.304408 83.241132) + (xy 151.574356 83.241132) + (xy 151.575592 83.238868) + (xy 151.575461 83.237035) + (xy 151.57121 83.23042) + (xy 150.892997 82.552207) + (xy 150.881223 82.545777) + (xy 150.869207 82.555074) + (xy 150.839103 82.598068) + (xy 150.833623 82.607559) + (xy 150.784471 82.712965) + (xy 150.737553 82.76625) + (xy 150.669276 82.785711) + (xy 150.601316 82.765169) + (xy 150.556081 82.712965) + (xy 150.506814 82.607311) + (xy 150.506811 82.607306) + (xy 150.504488 82.602324) + (xy 150.49114 82.583261) + (xy 150.380136 82.42473) + (xy 150.380134 82.424727) + (xy 150.376977 82.420219) + (xy 150.219781 82.263023) + (xy 150.215273 82.259866) + (xy 150.21527 82.259864) + (xy 150.139505 82.206813) + (xy 150.101599 82.180271) + (xy 151.24586 82.180271) + (xy 151.252928 82.193718) + (xy 151.927188 82.867978) + (xy 151.941132 82.875592) + (xy 151.942965 82.875461) + (xy 151.94958 82.87121) + (xy 152.627793 82.192997) + (xy 152.634223 82.181223) + (xy 152.633486 82.180271) + (xy 153.78586 82.180271) + (xy 153.792928 82.193718) + (xy 154.467188 82.867978) + (xy 154.481132 82.875592) + (xy 154.482965 82.875461) + (xy 154.48958 82.87121) + (xy 155.167793 82.192997) + (xy 155.174223 82.181223) + (xy 155.164926 82.169207) + (xy 155.121931 82.139102) + (xy 155.112445 82.133624) + (xy 154.921007 82.044355) + (xy 154.910715 82.040609) + (xy 154.706691 81.985941) + (xy 154.695896 81.984038) + (xy 154.485475 81.965628) + (xy 154.474525 81.965628) + (xy 154.264104 81.984038) + (xy 154.253309 81.985941) + (xy 154.049285 82.040609) + (xy 154.038993 82.044355) + (xy 153.847559 82.133623) + (xy 153.838068 82.139103) + (xy 153.794235 82.169794) + (xy 153.78586 82.180271) + (xy 152.633486 82.180271) + (xy 152.624926 82.169207) + (xy 152.581931 82.139102) + (xy 152.572445 82.133624) + (xy 152.381007 82.044355) + (xy 152.370715 82.040609) + (xy 152.166691 81.985941) + (xy 152.155896 81.984038) + (xy 151.945475 81.965628) + (xy 151.934525 81.965628) + (xy 151.724104 81.984038) + (xy 151.713309 81.985941) + (xy 151.509285 82.040609) + (xy 151.498993 82.044355) + (xy 151.307559 82.133623) + (xy 151.298068 82.139103) + (xy 151.254235 82.169794) + (xy 151.24586 82.180271) + (xy 150.101599 82.180271) + (xy 150.037677 82.135512) + (xy 150.032695 82.133189) + (xy 150.03269 82.133186) + (xy 149.841178 82.043883) + (xy 149.841177 82.043882) + (xy 149.836196 82.04156) + (xy 149.830888 82.040138) + (xy 149.830886 82.040137) + (xy 149.76437 82.022314) + (xy 149.621463 81.984022) + (xy 149.4 81.964647) + (xy 149.178537 81.984022) + (xy 149.03563 82.022314) + (xy 148.969114 82.040137) + (xy 148.969112 82.040138) + (xy 148.963804 82.04156) + (xy 148.958823 82.043882) + (xy 148.958822 82.043883) + (xy 148.767311 82.133186) + (xy 148.767306 82.133189) + (xy 148.762324 82.135512) + (xy 148.757817 82.138668) + (xy 148.757815 82.138669) + (xy 148.58473 82.259864) + (xy 148.584727 82.259866) + (xy 148.580219 82.263023) + (xy 148.423023 82.420219) + (xy 148.419866 82.424727) + (xy 148.419864 82.42473) + (xy 148.30886 82.583261) + (xy 148.295512 82.602324) + (xy 148.293189 82.607306) + (xy 148.293186 82.607311) + (xy 148.244195 82.712373) + (xy 148.197277 82.765658) + (xy 148.129 82.785119) + (xy 148.06104 82.764577) + (xy 148.015805 82.712373) + (xy 147.966814 82.607311) + (xy 147.966811 82.607306) + (xy 147.964488 82.602324) + (xy 147.95114 82.583261) + (xy 147.840136 82.42473) + (xy 147.840134 82.424727) + (xy 147.836977 82.420219) + (xy 147.679781 82.263023) + (xy 147.675273 82.259866) + (xy 147.67527 82.259864) + (xy 147.599505 82.206813) + (xy 147.497677 82.135512) + (xy 147.492695 82.133189) + (xy 147.49269 82.133186) + (xy 147.301178 82.043883) + (xy 147.301177 82.043882) + (xy 147.296196 82.04156) + (xy 147.290888 82.040138) + (xy 147.290886 82.040137) + (xy 147.22437 82.022314) + (xy 147.081463 81.984022) + (xy 146.86 81.964647) + (xy 146.638537 81.984022) + (xy 146.49563 82.022314) + (xy 146.429114 82.040137) + (xy 146.429112 82.040138) + (xy 146.423804 82.04156) + (xy 146.418823 82.043882) + (xy 146.418822 82.043883) + (xy 146.227311 82.133186) + (xy 146.227306 82.133189) + (xy 146.222324 82.135512) + (xy 146.217817 82.138668) + (xy 146.217815 82.138669) + (xy 146.04473 82.259864) + (xy 146.044727 82.259866) + (xy 146.040219 82.263023) + (xy 145.883023 82.420219) + (xy 145.879866 82.424727) + (xy 145.879864 82.42473) + (xy 145.76886 82.583261) + (xy 145.755512 82.602324) + (xy 145.753189 82.607306) + (xy 145.753186 82.607311) + (xy 145.704195 82.712373) + (xy 145.657277 82.765658) + (xy 145.589 82.785119) + (xy 145.52104 82.764577) + (xy 145.475805 82.712373) + (xy 145.426814 82.607311) + (xy 145.426811 82.607306) + (xy 145.424488 82.602324) + (xy 145.41114 82.583261) + (xy 145.300136 82.42473) + (xy 145.300134 82.424727) + (xy 145.296977 82.420219) + (xy 145.139781 82.263023) + (xy 145.135273 82.259866) + (xy 145.13527 82.259864) + (xy 145.059505 82.206813) + (xy 144.957677 82.135512) + (xy 144.952695 82.133189) + (xy 144.95269 82.133186) + (xy 144.761178 82.043883) + (xy 144.761177 82.043882) + (xy 144.756196 82.04156) + (xy 144.750888 82.040138) + (xy 144.750886 82.040137) + (xy 144.68437 82.022314) + (xy 144.541463 81.984022) + (xy 144.32 81.964647) + (xy 144.098537 81.984022) + (xy 143.95563 82.022314) + (xy 143.889114 82.040137) + (xy 143.889112 82.040138) + (xy 143.883804 82.04156) + (xy 143.878823 82.043882) + (xy 143.878822 82.043883) + (xy 143.687311 82.133186) + (xy 143.687306 82.133189) + (xy 143.682324 82.135512) + (xy 143.677817 82.138668) + (xy 143.677815 82.138669) + (xy 143.50473 82.259864) + (xy 143.504727 82.259866) + (xy 143.500219 82.263023) + (xy 143.343023 82.420219) + (xy 143.339866 82.424727) + (xy 143.339864 82.42473) + (xy 143.22886 82.583261) + (xy 143.215512 82.602324) + (xy 143.213189 82.607306) + (xy 143.213186 82.607311) + (xy 143.164195 82.712373) + (xy 143.117277 82.765658) + (xy 143.049 82.785119) + (xy 142.98104 82.764577) + (xy 142.935805 82.712373) + (xy 142.886814 82.607311) + (xy 142.886811 82.607306) + (xy 142.884488 82.602324) + (xy 142.87114 82.583261) + (xy 142.760136 82.42473) + (xy 142.760134 82.424727) + (xy 142.756977 82.420219) + (xy 142.599781 82.263023) + (xy 142.595273 82.259866) + (xy 142.59527 82.259864) + (xy 142.519505 82.206813) + (xy 142.417677 82.135512) + (xy 142.412695 82.133189) + (xy 142.41269 82.133186) + (xy 142.221178 82.043883) + (xy 142.221177 82.043882) + (xy 142.216196 82.04156) + (xy 142.210888 82.040138) + (xy 142.210886 82.040137) + (xy 142.14437 82.022314) + (xy 142.001463 81.984022) + (xy 141.78 81.964647) + (xy 141.558537 81.984022) + (xy 141.41563 82.022314) + (xy 141.349114 82.040137) + (xy 141.349112 82.040138) + (xy 141.343804 82.04156) + (xy 141.338823 82.043882) + (xy 141.338822 82.043883) + (xy 141.147311 82.133186) + (xy 141.147306 82.133189) + (xy 141.142324 82.135512) + (xy 141.137817 82.138668) + (xy 141.137815 82.138669) + (xy 140.96473 82.259864) + (xy 140.964727 82.259866) + (xy 140.960219 82.263023) + (xy 140.803023 82.420219) + (xy 140.799866 82.424727) + (xy 140.799864 82.42473) + (xy 140.68886 82.583261) + (xy 140.675512 82.602324) + (xy 140.673189 82.607306) + (xy 140.673186 82.607311) + (xy 140.624195 82.712373) + (xy 140.577277 82.765658) + (xy 140.509 82.785119) + (xy 140.44104 82.764577) + (xy 140.395805 82.712373) + (xy 140.346814 82.607311) + (xy 140.346811 82.607306) + (xy 140.344488 82.602324) + (xy 140.33114 82.583261) + (xy 140.220136 82.42473) + (xy 140.220134 82.424727) + (xy 140.216977 82.420219) + (xy 140.059781 82.263023) + (xy 140.055273 82.259866) + (xy 140.05527 82.259864) + (xy 139.979505 82.206813) + (xy 139.877677 82.135512) + (xy 139.872695 82.133189) + (xy 139.87269 82.133186) + (xy 139.681178 82.043883) + (xy 139.681177 82.043882) + (xy 139.676196 82.04156) + (xy 139.670888 82.040138) + (xy 139.670886 82.040137) + (xy 139.60437 82.022314) + (xy 139.461463 81.984022) + (xy 139.24 81.964647) + (xy 139.018537 81.984022) + (xy 138.87563 82.022314) + (xy 138.809114 82.040137) + (xy 138.809112 82.040138) + (xy 138.803804 82.04156) + (xy 138.798823 82.043882) + (xy 138.798822 82.043883) + (xy 138.607311 82.133186) + (xy 138.607306 82.133189) + (xy 138.602324 82.135512) + (xy 138.597817 82.138668) + (xy 138.597815 82.138669) + (xy 138.42473 82.259864) + (xy 138.424727 82.259866) + (xy 138.420219 82.263023) + (xy 138.263023 82.420219) + (xy 138.259866 82.424727) + (xy 138.259864 82.42473) + (xy 138.14886 82.583261) + (xy 138.135512 82.602324) + (xy 138.133189 82.607306) + (xy 138.133186 82.607311) + (xy 138.084195 82.712373) + (xy 138.037277 82.765658) + (xy 137.969 82.785119) + (xy 137.90104 82.764577) + (xy 137.855805 82.712373) + (xy 137.806814 82.607311) + (xy 137.806811 82.607306) + (xy 137.804488 82.602324) + (xy 137.79114 82.583261) + (xy 137.680136 82.42473) + (xy 137.680134 82.424727) + (xy 137.676977 82.420219) + (xy 137.519781 82.263023) + (xy 137.515273 82.259866) + (xy 137.51527 82.259864) + (xy 137.439505 82.206813) + (xy 137.337677 82.135512) + (xy 137.332695 82.133189) + (xy 137.33269 82.133186) + (xy 137.141178 82.043883) + (xy 137.141177 82.043882) + (xy 137.136196 82.04156) + (xy 137.130888 82.040138) + (xy 137.130886 82.040137) + (xy 137.06437 82.022314) + (xy 136.921463 81.984022) + (xy 136.7 81.964647) + (xy 136.478537 81.984022) + (xy 136.33563 82.022314) + (xy 136.269114 82.040137) + (xy 136.269112 82.040138) + (xy 136.263804 82.04156) + (xy 136.258823 82.043882) + (xy 136.258822 82.043883) + (xy 136.067311 82.133186) + (xy 136.067306 82.133189) + (xy 136.062324 82.135512) + (xy 136.057817 82.138668) + (xy 136.057815 82.138669) + (xy 135.88473 82.259864) + (xy 135.884727 82.259866) + (xy 135.880219 82.263023) + (xy 135.723023 82.420219) + (xy 135.719866 82.424727) + (xy 135.719864 82.42473) + (xy 135.60886 82.583261) + (xy 135.595512 82.602324) + (xy 135.593189 82.607306) + (xy 135.593186 82.607311) + (xy 135.544195 82.712373) + (xy 135.497277 82.765658) + (xy 135.429 82.785119) + (xy 135.36104 82.764577) + (xy 135.315805 82.712373) + (xy 135.266814 82.607311) + (xy 135.266811 82.607306) + (xy 135.264488 82.602324) + (xy 135.25114 82.583261) + (xy 135.140136 82.42473) + (xy 135.140134 82.424727) + (xy 135.136977 82.420219) + (xy 134.979781 82.263023) + (xy 134.975273 82.259866) + (xy 134.97527 82.259864) + (xy 134.899505 82.206813) + (xy 134.797677 82.135512) + (xy 134.792695 82.133189) + (xy 134.79269 82.133186) + (xy 134.601178 82.043883) + (xy 134.601177 82.043882) + (xy 134.596196 82.04156) + (xy 134.590888 82.040138) + (xy 134.590886 82.040137) + (xy 134.52437 82.022314) + (xy 134.381463 81.984022) + (xy 134.16 81.964647) + (xy 133.938537 81.984022) + (xy 133.79563 82.022314) + (xy 133.729114 82.040137) + (xy 133.729112 82.040138) + (xy 133.723804 82.04156) + (xy 133.718823 82.043882) + (xy 133.718822 82.043883) + (xy 133.527311 82.133186) + (xy 133.527306 82.133189) + (xy 133.522324 82.135512) + (xy 133.517817 82.138668) + (xy 133.517815 82.138669) + (xy 133.34473 82.259864) + (xy 133.344727 82.259866) + (xy 133.340219 82.263023) + (xy 133.183023 82.420219) + (xy 133.179866 82.424727) + (xy 133.179864 82.42473) + (xy 133.06886 82.583261) + (xy 133.055512 82.602324) + (xy 133.053189 82.607306) + (xy 133.053186 82.607311) + (xy 133.004195 82.712373) + (xy 132.957277 82.765658) + (xy 132.889 82.785119) + (xy 132.82104 82.764577) + (xy 132.775805 82.712373) + (xy 132.726814 82.607311) + (xy 132.726811 82.607306) + (xy 132.724488 82.602324) + (xy 132.71114 82.583261) + (xy 132.600136 82.42473) + (xy 132.600134 82.424727) + (xy 132.596977 82.420219) + (xy 132.439781 82.263023) + (xy 132.435273 82.259866) + (xy 132.43527 82.259864) + (xy 132.359505 82.206813) + (xy 132.257677 82.135512) + (xy 132.252695 82.133189) + (xy 132.25269 82.133186) + (xy 132.061178 82.043883) + (xy 132.061177 82.043882) + (xy 132.056196 82.04156) + (xy 132.050888 82.040138) + (xy 132.050886 82.040137) + (xy 131.98437 82.022314) + (xy 131.841463 81.984022) + (xy 131.62 81.964647) + (xy 131.398537 81.984022) + (xy 131.25563 82.022314) + (xy 131.189114 82.040137) + (xy 131.189112 82.040138) + (xy 131.183804 82.04156) + (xy 131.178823 82.043882) + (xy 131.178822 82.043883) + (xy 130.987311 82.133186) + (xy 130.987306 82.133189) + (xy 130.982324 82.135512) + (xy 130.977817 82.138668) + (xy 130.977815 82.138669) + (xy 130.80473 82.259864) + (xy 130.804727 82.259866) + (xy 130.800219 82.263023) + (xy 130.643023 82.420219) + (xy 130.639866 82.424727) + (xy 130.639864 82.42473) + (xy 130.52886 82.583261) + (xy 130.515512 82.602324) + (xy 130.513189 82.607306) + (xy 130.513186 82.607311) + (xy 130.464195 82.712373) + (xy 130.417277 82.765658) + (xy 130.349 82.785119) + (xy 130.28104 82.764577) + (xy 130.235805 82.712373) + (xy 130.186814 82.607311) + (xy 130.186811 82.607306) + (xy 130.184488 82.602324) + (xy 130.17114 82.583261) + (xy 130.060136 82.42473) + (xy 130.060134 82.424727) + (xy 130.056977 82.420219) + (xy 129.899781 82.263023) + (xy 129.895273 82.259866) + (xy 129.89527 82.259864) + (xy 129.819505 82.206813) + (xy 129.717677 82.135512) + (xy 129.712695 82.133189) + (xy 129.71269 82.133186) + (xy 129.521178 82.043883) + (xy 129.521177 82.043882) + (xy 129.516196 82.04156) + (xy 129.510888 82.040138) + (xy 129.510886 82.040137) + (xy 129.44437 82.022314) + (xy 129.301463 81.984022) + (xy 129.08 81.964647) + (xy 128.858537 81.984022) + (xy 128.71563 82.022314) + (xy 128.649114 82.040137) + (xy 128.649112 82.040138) + (xy 128.643804 82.04156) + (xy 128.638823 82.043882) + (xy 128.638822 82.043883) + (xy 128.447311 82.133186) + (xy 128.447306 82.133189) + (xy 128.442324 82.135512) + (xy 128.437817 82.138668) + (xy 128.437815 82.138669) + (xy 128.26473 82.259864) + (xy 128.264727 82.259866) + (xy 128.260219 82.263023) + (xy 128.103023 82.420219) + (xy 128.099866 82.424727) + (xy 128.099864 82.42473) + (xy 127.98886 82.583261) + (xy 127.975512 82.602324) + (xy 127.973189 82.607306) + (xy 127.973186 82.607311) + (xy 127.924195 82.712373) + (xy 127.877277 82.765658) + (xy 127.809 82.785119) + (xy 127.74104 82.764577) + (xy 127.695805 82.712373) + (xy 127.646814 82.607311) + (xy 127.646811 82.607306) + (xy 127.644488 82.602324) + (xy 127.63114 82.583261) + (xy 127.520136 82.42473) + (xy 127.520134 82.424727) + (xy 127.516977 82.420219) + (xy 127.359781 82.263023) + (xy 127.355273 82.259866) + (xy 127.35527 82.259864) + (xy 127.279505 82.206813) + (xy 127.177677 82.135512) + (xy 127.172695 82.133189) + (xy 127.17269 82.133186) + (xy 126.981178 82.043883) + (xy 126.981177 82.043882) + (xy 126.976196 82.04156) + (xy 126.970888 82.040138) + (xy 126.970886 82.040137) + (xy 126.90437 82.022314) + (xy 126.761463 81.984022) + (xy 126.54 81.964647) + (xy 126.318537 81.984022) + (xy 126.17563 82.022314) + (xy 126.109114 82.040137) + (xy 126.109112 82.040138) + (xy 126.103804 82.04156) + (xy 126.098823 82.043882) + (xy 126.098822 82.043883) + (xy 125.907311 82.133186) + (xy 125.907306 82.133189) + (xy 125.902324 82.135512) + (xy 125.897817 82.138668) + (xy 125.897815 82.138669) + (xy 125.72473 82.259864) + (xy 125.724727 82.259866) + (xy 125.720219 82.263023) + (xy 125.563023 82.420219) + (xy 125.559866 82.424727) + (xy 125.559864 82.42473) + (xy 125.44886 82.583261) + (xy 125.435512 82.602324) + (xy 125.433189 82.607306) + (xy 125.433186 82.607311) + (xy 125.384195 82.712373) + (xy 125.337277 82.765658) + (xy 125.269 82.785119) + (xy 125.20104 82.764577) + (xy 125.155805 82.712373) + (xy 125.106814 82.607311) + (xy 125.106811 82.607306) + (xy 125.104488 82.602324) + (xy 125.09114 82.583261) + (xy 124.980136 82.42473) + (xy 124.980134 82.424727) + (xy 124.976977 82.420219) + (xy 124.819781 82.263023) + (xy 124.815273 82.259866) + (xy 124.81527 82.259864) + (xy 124.739505 82.206813) + (xy 124.637677 82.135512) + (xy 124.632695 82.133189) + (xy 124.63269 82.133186) + (xy 124.441178 82.043883) + (xy 124.441177 82.043882) + (xy 124.436196 82.04156) + (xy 124.430888 82.040138) + (xy 124.430886 82.040137) + (xy 124.36437 82.022314) + (xy 124.221463 81.984022) + (xy 124 81.964647) + (xy 123.778537 81.984022) + (xy 123.63563 82.022314) + (xy 123.569114 82.040137) + (xy 123.569112 82.040138) + (xy 123.563804 82.04156) + (xy 123.558823 82.043882) + (xy 123.558822 82.043883) + (xy 123.367311 82.133186) + (xy 123.367306 82.133189) + (xy 123.362324 82.135512) + (xy 123.357817 82.138668) + (xy 123.357815 82.138669) + (xy 123.18473 82.259864) + (xy 123.184727 82.259866) + (xy 123.180219 82.263023) + (xy 123.023023 82.420219) + (xy 123.019866 82.424727) + (xy 123.019864 82.42473) + (xy 122.90886 82.583261) + (xy 122.895512 82.602324) + (xy 122.893189 82.607306) + (xy 122.893186 82.607311) + (xy 122.844195 82.712373) + (xy 122.797277 82.765658) + (xy 122.729 82.785119) + (xy 122.66104 82.764577) + (xy 122.615805 82.712373) + (xy 122.566814 82.607311) + (xy 122.566811 82.607306) + (xy 122.564488 82.602324) + (xy 122.55114 82.583261) + (xy 122.440136 82.42473) + (xy 122.440134 82.424727) + (xy 122.436977 82.420219) + (xy 122.279781 82.263023) + (xy 122.275273 82.259866) + (xy 122.27527 82.259864) + (xy 122.199505 82.206813) + (xy 122.097677 82.135512) + (xy 122.092695 82.133189) + (xy 122.09269 82.133186) + (xy 121.901178 82.043883) + (xy 121.901177 82.043882) + (xy 121.896196 82.04156) + (xy 121.890888 82.040138) + (xy 121.890886 82.040137) + (xy 121.82437 82.022314) + (xy 121.681463 81.984022) + (xy 121.46 81.964647) + (xy 121.238537 81.984022) + (xy 121.09563 82.022314) + (xy 121.029114 82.040137) + (xy 121.029112 82.040138) + (xy 121.023804 82.04156) + (xy 121.018823 82.043882) + (xy 121.018822 82.043883) + (xy 120.827311 82.133186) + (xy 120.827306 82.133189) + (xy 120.822324 82.135512) + (xy 120.817817 82.138668) + (xy 120.817815 82.138669) + (xy 120.64473 82.259864) + (xy 120.644727 82.259866) + (xy 120.640219 82.263023) + (xy 120.483023 82.420219) + (xy 120.479866 82.424727) + (xy 120.479864 82.42473) + (xy 120.36886 82.583261) + (xy 120.355512 82.602324) + (xy 120.353189 82.607306) + (xy 120.353186 82.607311) + (xy 120.304195 82.712373) + (xy 120.257277 82.765658) + (xy 120.189 82.785119) + (xy 120.12104 82.764577) + (xy 120.075805 82.712373) + (xy 120.026814 82.607311) + (xy 120.026811 82.607306) + (xy 120.024488 82.602324) + (xy 120.01114 82.583261) + (xy 119.900136 82.42473) + (xy 119.900134 82.424727) + (xy 119.896977 82.420219) + (xy 119.739781 82.263023) + (xy 119.735273 82.259866) + (xy 119.73527 82.259864) + (xy 119.659505 82.206813) + (xy 119.557677 82.135512) + (xy 119.552695 82.133189) + (xy 119.55269 82.133186) + (xy 119.361178 82.043883) + (xy 119.361177 82.043882) + (xy 119.356196 82.04156) + (xy 119.350888 82.040138) + (xy 119.350886 82.040137) + (xy 119.28437 82.022314) + (xy 119.141463 81.984022) + (xy 118.92 81.964647) + (xy 118.698537 81.984022) + (xy 118.55563 82.022314) + (xy 118.489114 82.040137) + (xy 118.489112 82.040138) + (xy 118.483804 82.04156) + (xy 118.478823 82.043882) + (xy 118.478822 82.043883) + (xy 118.287311 82.133186) + (xy 118.287306 82.133189) + (xy 118.282324 82.135512) + (xy 118.277817 82.138668) + (xy 118.277815 82.138669) + (xy 118.10473 82.259864) + (xy 118.104727 82.259866) + (xy 118.100219 82.263023) + (xy 117.943023 82.420219) + (xy 117.939866 82.424727) + (xy 117.939864 82.42473) + (xy 117.82886 82.583261) + (xy 117.815512 82.602324) + (xy 117.813189 82.607306) + (xy 117.813186 82.607311) + (xy 117.764195 82.712373) + (xy 117.717277 82.765658) + (xy 117.649 82.785119) + (xy 117.58104 82.764577) + (xy 117.535805 82.712373) + (xy 117.486814 82.607311) + (xy 117.486811 82.607306) + (xy 117.484488 82.602324) + (xy 117.47114 82.583261) + (xy 117.360136 82.42473) + (xy 117.360134 82.424727) + (xy 117.356977 82.420219) + (xy 117.199781 82.263023) + (xy 117.195273 82.259866) + (xy 117.19527 82.259864) + (xy 117.119505 82.206813) + (xy 117.017677 82.135512) + (xy 117.012695 82.133189) + (xy 117.01269 82.133186) + (xy 116.821178 82.043883) + (xy 116.821177 82.043882) + (xy 116.816196 82.04156) + (xy 116.810888 82.040138) + (xy 116.810886 82.040137) + (xy 116.74437 82.022314) + (xy 116.601463 81.984022) + (xy 116.38 81.964647) + (xy 116.158537 81.984022) + (xy 116.01563 82.022314) + (xy 115.949114 82.040137) + (xy 115.949112 82.040138) + (xy 115.943804 82.04156) + (xy 115.938823 82.043882) + (xy 115.938822 82.043883) + (xy 115.747311 82.133186) + (xy 115.747306 82.133189) + (xy 115.742324 82.135512) + (xy 115.737817 82.138668) + (xy 115.737815 82.138669) + (xy 115.56473 82.259864) + (xy 115.564727 82.259866) + (xy 115.560219 82.263023) + (xy 115.403023 82.420219) + (xy 115.399866 82.424727) + (xy 115.399864 82.42473) + (xy 115.28886 82.583261) + (xy 115.275512 82.602324) + (xy 115.273189 82.607306) + (xy 115.273186 82.607311) + (xy 115.224195 82.712373) + (xy 115.177277 82.765658) + (xy 115.109 82.785119) + (xy 115.04104 82.764577) + (xy 114.995805 82.712373) + (xy 114.946814 82.607311) + (xy 114.946811 82.607306) + (xy 114.944488 82.602324) + (xy 114.93114 82.583261) + (xy 114.820136 82.42473) + (xy 114.820134 82.424727) + (xy 114.816977 82.420219) + (xy 114.659781 82.263023) + (xy 114.655273 82.259866) + (xy 114.65527 82.259864) + (xy 114.579505 82.206813) + (xy 114.477677 82.135512) + (xy 114.472695 82.133189) + (xy 114.47269 82.133186) + (xy 114.281178 82.043883) + (xy 114.281177 82.043882) + (xy 114.276196 82.04156) + (xy 114.270888 82.040138) + (xy 114.270886 82.040137) + (xy 114.20437 82.022314) + (xy 114.061463 81.984022) + (xy 113.84 81.964647) + (xy 113.618537 81.984022) + (xy 113.47563 82.022314) + (xy 113.409114 82.040137) + (xy 113.409112 82.040138) + (xy 113.403804 82.04156) + (xy 113.398823 82.043882) + (xy 113.398822 82.043883) + (xy 113.207311 82.133186) + (xy 113.207306 82.133189) + (xy 113.202324 82.135512) + (xy 113.197817 82.138668) + (xy 113.197815 82.138669) + (xy 113.02473 82.259864) + (xy 113.024727 82.259866) + (xy 113.020219 82.263023) + (xy 112.863023 82.420219) + (xy 112.859866 82.424727) + (xy 112.859864 82.42473) + (xy 112.74886 82.583261) + (xy 112.735512 82.602324) + (xy 112.733189 82.607306) + (xy 112.733186 82.607311) + (xy 112.684195 82.712373) + (xy 112.637277 82.765658) + (xy 112.569 82.785119) + (xy 112.50104 82.764577) + (xy 112.455805 82.712373) + (xy 112.406814 82.607311) + (xy 112.406811 82.607306) + (xy 112.404488 82.602324) + (xy 112.39114 82.583261) + (xy 112.280136 82.42473) + (xy 112.280134 82.424727) + (xy 112.276977 82.420219) + (xy 112.119781 82.263023) + (xy 112.115273 82.259866) + (xy 112.11527 82.259864) + (xy 112.039505 82.206813) + (xy 111.937677 82.135512) + (xy 111.932695 82.133189) + (xy 111.93269 82.133186) + (xy 111.741178 82.043883) + (xy 111.741177 82.043882) + (xy 111.736196 82.04156) + (xy 111.730888 82.040138) + (xy 111.730886 82.040137) + (xy 111.66437 82.022314) + (xy 111.521463 81.984022) + (xy 111.3 81.964647) + (xy 111.078537 81.984022) + (xy 110.93563 82.022314) + (xy 110.869114 82.040137) + (xy 110.869112 82.040138) + (xy 110.863804 82.04156) + (xy 110.858823 82.043882) + (xy 110.858822 82.043883) + (xy 110.667311 82.133186) + (xy 110.667306 82.133189) + (xy 110.662324 82.135512) + (xy 110.657817 82.138668) + (xy 110.657815 82.138669) + (xy 110.48473 82.259864) + (xy 110.484727 82.259866) + (xy 110.480219 82.263023) + (xy 110.323023 82.420219) + (xy 110.319866 82.424727) + (xy 110.319864 82.42473) + (xy 110.20886 82.583261) + (xy 110.195512 82.602324) + (xy 110.193189 82.607306) + (xy 110.193186 82.607311) + (xy 110.144195 82.712373) + (xy 110.097277 82.765658) + (xy 110.029 82.785119) + (xy 109.96104 82.764577) + (xy 109.915805 82.712373) + (xy 109.866814 82.607311) + (xy 109.866811 82.607306) + (xy 109.864488 82.602324) + (xy 109.85114 82.583261) + (xy 109.740136 82.42473) + (xy 109.740134 82.424727) + (xy 109.736977 82.420219) + (xy 109.579781 82.263023) + (xy 109.575273 82.259866) + (xy 109.57527 82.259864) + (xy 109.499505 82.206813) + (xy 109.397677 82.135512) + (xy 109.392695 82.133189) + (xy 109.39269 82.133186) + (xy 109.201178 82.043883) + (xy 109.201177 82.043882) + (xy 109.196196 82.04156) + (xy 109.190888 82.040138) + (xy 109.190886 82.040137) + (xy 109.12437 82.022314) + (xy 108.981463 81.984022) + (xy 108.76 81.964647) + (xy 108.538537 81.984022) + (xy 108.39563 82.022314) + (xy 108.329114 82.040137) + (xy 108.329112 82.040138) + (xy 108.323804 82.04156) + (xy 108.318823 82.043882) + (xy 108.318822 82.043883) + (xy 108.127311 82.133186) + (xy 108.127306 82.133189) + (xy 108.122324 82.135512) + (xy 108.117817 82.138668) + (xy 108.117815 82.138669) + (xy 107.94473 82.259864) + (xy 107.944727 82.259866) + (xy 107.940219 82.263023) + (xy 107.783023 82.420219) + (xy 107.779866 82.424727) + (xy 107.779864 82.42473) + (xy 107.66886 82.583261) + (xy 107.655512 82.602324) + (xy 107.653189 82.607306) + (xy 107.653186 82.607311) + (xy 107.604195 82.712373) + (xy 107.557277 82.765658) + (xy 107.489 82.785119) + (xy 107.42104 82.764577) + (xy 107.375805 82.712373) + (xy 107.326814 82.607311) + (xy 107.326811 82.607306) + (xy 107.324488 82.602324) + (xy 107.31114 82.583261) + (xy 107.200136 82.42473) + (xy 107.200134 82.424727) + (xy 107.196977 82.420219) + (xy 107.039781 82.263023) + (xy 107.035273 82.259866) + (xy 107.03527 82.259864) + (xy 106.959505 82.206813) + (xy 106.857677 82.135512) + (xy 106.852695 82.133189) + (xy 106.85269 82.133186) + (xy 106.661178 82.043883) + (xy 106.661177 82.043882) + (xy 106.656196 82.04156) + (xy 106.650888 82.040138) + (xy 106.650886 82.040137) + (xy 106.58437 82.022314) + (xy 106.441463 81.984022) + (xy 106.22 81.964647) + (xy 105.998537 81.984022) + (xy 105.85563 82.022314) + (xy 105.789114 82.040137) + (xy 105.789112 82.040138) + (xy 105.783804 82.04156) + (xy 105.778823 82.043882) + (xy 105.778822 82.043883) + (xy 105.587311 82.133186) + (xy 105.587306 82.133189) + (xy 105.582324 82.135512) + (xy 105.577817 82.138668) + (xy 105.577815 82.138669) + (xy 105.40473 82.259864) + (xy 105.404727 82.259866) + (xy 105.400219 82.263023) + (xy 105.243023 82.420219) + (xy 105.239866 82.424727) + (xy 105.239864 82.42473) + (xy 105.12886 82.583261) + (xy 105.115512 82.602324) + (xy 105.113189 82.607306) + (xy 105.113186 82.607311) + (xy 105.083667 82.670615) + (xy 105.02156 82.803804) + (xy 104.964022 83.018537) + (xy 104.944647 83.24) + (xy 61.506063 83.24) + (xy 61.478196 83.064052) + (xy 61.478195 83.064046) + (xy 61.47768 83.060796) + (xy 61.381361 82.701329) + (xy 61.263195 82.393498) + (xy 61.249176 82.356976) + (xy 61.249174 82.356972) + (xy 61.247995 82.3539) + (xy 61.2465 82.350965) + (xy 61.080542 82.025255) + (xy 61.080538 82.025248) + (xy 61.079043 82.022314) + (xy 61.054187 81.984038) + (xy 60.878159 81.712979) + (xy 60.876357 81.710204) + (xy 60.642157 81.420991) + (xy 60.379009 81.157843) + (xy 60.089796 80.923643) + (xy 59.777687 80.720957) + (xy 59.549414 80.604646) + (xy 59.449035 80.5535) + (xy 59.449028 80.553497) + (xy 59.4461 80.552005) + (xy 59.443028 80.550826) + (xy 59.443024 80.550824) + (xy 59.31673 80.502344) + (xy 59.098671 80.418639) + (xy 58.739204 80.32232) + (xy 58.735954 80.321805) + (xy 58.735948 80.321804) + (xy 58.462769 80.278537) + (xy 58.371638 80.264104) + (xy 58.368353 80.263932) + (xy 58.368345 80.263931) + (xy 58.003301 80.2448) + (xy 58 80.244627) + (xy 57.996699 80.2448) + (xy 57.631655 80.263931) + (xy 57.631647 80.263932) + (xy 57.628362 80.264104) + (xy 57.537231 80.278537) + (xy 57.264052 80.321804) + (xy 57.264046 80.321805) + (xy 57.260796 80.32232) + (xy 56.901329 80.418639) + (xy 56.68327 80.502344) + (xy 56.556976 80.550824) + (xy 56.556972 80.550826) + (xy 56.5539 80.552005) + (xy 56.550972 80.553497) + (xy 56.550965 80.5535) + (xy 56.225255 80.719458) + (xy 56.225252 80.71946) + (xy 56.222314 80.720957) + (xy 56.219548 80.722753) + (xy 56.219545 80.722755) + (xy 56.049271 80.833332) + (xy 55.910204 80.923643) + (xy 55.620991 81.157843) + (xy 55.357843 81.420991) + (xy 55.123643 81.710204) + (xy 55.121841 81.712979) + (xy 54.945814 81.984038) + (xy 54.920957 82.022314) + (xy 54.919462 82.025248) + (xy 54.919458 82.025255) + (xy 54.7535 82.350965) + (xy 54.752005 82.3539) + (xy 54.750826 82.356972) + (xy 54.750824 82.356976) + (xy 54.736805 82.393498) + (xy 54.618639 82.701329) + (xy 54.52232 83.060796) + (xy 54.521805 83.064046) + (xy 54.521804 83.064052) + (xy 54.493937 83.24) + (xy 54.464104 83.428362) + (xy 54.463932 83.431647) + (xy 54.463931 83.431655) + (xy 54.446386 83.766443) + (xy 54.444627 83.8) + (xy 35.008 83.8) + (xy 35.008 79.433411) + (xy 39.687977 79.433411) + (xy 39.696945 79.672274) + (xy 39.69804 79.677492) + (xy 39.720803 79.785978) + (xy 39.74603 79.906211) + (xy 39.833829 80.128533) + (xy 39.957832 80.332883) + (xy 39.961329 80.336913) + (xy 40.05109 80.440353) + (xy 40.114493 80.513419) + (xy 40.118619 80.516802) + (xy 40.118623 80.516806) + (xy 40.161552 80.552005) + (xy 40.299333 80.664978) + (xy 40.303969 80.667617) + (xy 40.303972 80.667619) + (xy 40.400832 80.722755) + (xy 40.507066 80.783227) + (xy 40.731753 80.864784) + (xy 40.737002 80.865733) + (xy 40.737005 80.865734) + (xy 40.962885 80.90658) + (xy 40.962893 80.906581) + (xy 40.966969 80.907318) + (xy 40.985359 80.908185) + (xy 40.990544 80.90843) + (xy 40.990551 80.90843) + (xy 40.992032 80.9085) + (xy 42.960012 80.9085) + (xy 43.138175 80.893383) + (xy 43.143339 80.892043) + (xy 43.143343 80.892042) + (xy 43.364375 80.834673) + (xy 43.36438 80.834671) + (xy 43.36954 80.833332) + (xy 43.486636 80.780584) + (xy 43.582619 80.737347) + (xy 43.582622 80.737346) + (xy 43.58748 80.735157) + (xy 43.785762 80.601666) + (xy 43.958718 80.436674) + (xy 44.101402 80.2449) + (xy 44.126519 80.1955) + (xy 44.207314 80.036586) + (xy 44.207314 80.036585) + (xy 44.209733 80.031828) + (xy 44.266801 79.848039) + (xy 44.279032 79.808651) + (xy 44.279033 79.808645) + (xy 44.280616 79.803548) + (xy 44.312023 79.566589) + (xy 44.303055 79.327726) + (xy 44.25397 79.093789) + (xy 44.166171 78.871467) + (xy 44.042168 78.667117) + (xy 44.038671 78.663087) + (xy 43.889007 78.490614) + (xy 43.889005 78.490612) + (xy 43.885507 78.486581) + (xy 43.881381 78.483198) + (xy 43.881377 78.483194) + (xy 43.704795 78.338407) + (xy 43.700667 78.335022) + (xy 43.696031 78.332383) + (xy 43.696028 78.332381) + (xy 43.497577 78.219416) + (xy 43.492934 78.216773) + (xy 43.268247 78.135216) + (xy 43.262998 78.134267) + (xy 43.262995 78.134266) + (xy 43.037115 78.09342) + (xy 43.037107 78.093419) + (xy 43.033031 78.092682) + (xy 43.014641 78.091815) + (xy 43.009456 78.09157) + (xy 43.009449 78.09157) + (xy 43.007968 78.0915) + (xy 41.039988 78.0915) + (xy 40.861825 78.106617) + (xy 40.856661 78.107957) + (xy 40.856657 78.107958) + (xy 40.635625 78.165327) + (xy 40.63562 78.165329) + (xy 40.63046 78.166668) + (xy 40.625594 78.16886) + (xy 40.417381 78.262653) + (xy 40.417378 78.262654) + (xy 40.41252 78.264843) + (xy 40.214238 78.398334) + (xy 40.041282 78.563326) + (xy 39.898598 78.7551) + (xy 39.896182 78.759851) + (xy 39.89618 78.759855) + (xy 39.792686 78.963414) + (xy 39.790267 78.968172) + (xy 39.788059 78.975283) + (xy 39.720968 79.191349) + (xy 39.720967 79.191355) + (xy 39.719384 79.196452) + (xy 39.687977 79.433411) + (xy 35.008 79.433411) + (xy 35.008 76.7004) + (xy 39.6915 76.7004) + (xy 39.691837 76.703646) + (xy 39.691837 76.70365) + (xy 39.700431 76.786473) + (xy 39.702474 76.806166) + (xy 39.75845 76.973946) + (xy 39.851522 77.124348) + (xy 39.976697 77.249305) + (xy 39.982927 77.253145) + (xy 39.982928 77.253146) + (xy 40.12009 77.337694) + (xy 40.127262 77.342115) + (xy 40.207005 77.368564) + (xy 40.288611 77.395632) + (xy 40.288613 77.395632) + (xy 40.295139 77.397797) + (xy 40.301975 77.398497) + (xy 40.301978 77.398498) + (xy 40.345031 77.402909) + (xy 40.3996 77.4085) + (xy 43.6004 77.4085) + (xy 43.603646 77.408163) + (xy 43.60365 77.408163) + (xy 43.699308 77.398238) + (xy 43.699312 77.398237) + (xy 43.706166 77.397526) + (xy 43.712702 77.395345) + (xy 43.712704 77.395345) + (xy 43.844806 77.351272) + (xy 43.873946 77.34155) + (xy 44.024348 77.248478) + (xy 44.149305 77.123303) + (xy 44.242115 76.972738) + (xy 44.284539 76.844833) + (xy 44.324969 76.786473) + (xy 44.390534 76.759236) + (xy 44.404132 76.7585) + (xy 76.183629 76.7585) + (xy 76.25175 76.778502) + (xy 76.272724 76.795405) + (xy 80.294329 80.81701) + (xy 80.328355 80.879322) + (xy 80.330755 80.917087) + (xy 80.329999 80.925725) + (xy 80.316502 81.08) + (xy 80.336457 81.308087) + (xy 80.395716 81.529243) + (xy 80.398039 81.534224) + (xy 80.398039 81.534225) + (xy 80.490151 81.731762) + (xy 80.490154 81.731767) + (xy 80.492477 81.736749) + (xy 80.623802 81.9243) + (xy 80.7857 82.086198) + (xy 80.790208 82.089355) + (xy 80.790211 82.089357) + (xy 80.861256 82.139103) + (xy 80.973251 82.217523) + (xy 80.978233 82.219846) + (xy 80.978238 82.219849) + (xy 81.081787 82.268134) + (xy 81.180757 82.314284) + (xy 81.186065 82.315706) + (xy 81.186067 82.315707) + (xy 81.396598 82.372119) + (xy 81.3966 82.372119) + (xy 81.401913 82.373543) + (xy 81.63 82.393498) + (xy 81.858087 82.373543) + (xy 81.8634 82.372119) + (xy 81.863402 82.372119) + (xy 82.073933 82.315707) + (xy 82.073935 82.315706) + (xy 82.079243 82.314284) + (xy 82.178213 82.268134) + (xy 82.281762 82.219849) + (xy 82.281767 82.219846) + (xy 82.286749 82.217523) + (xy 82.398744 82.139103) + (xy 82.469789 82.089357) + (xy 82.469792 82.089355) + (xy 82.4743 82.086198) + (xy 82.636198 81.9243) + (xy 82.658655 81.892229) + (xy 82.71411 81.847901) + (xy 82.761867 81.8385) + (xy 89.7655 81.8385) + (xy 89.833621 81.858502) + (xy 89.880114 81.912158) + (xy 89.8915 81.9645) + (xy 89.8915 82.268134) + (xy 89.898255 82.330316) + (xy 89.949385 82.466705) + (xy 90.036739 82.583261) + (xy 90.153295 82.670615) + (xy 90.289684 82.721745) + (xy 90.351866 82.7285) + (xy 93.648134 82.7285) + (xy 93.710316 82.721745) + (xy 93.846705 82.670615) + (xy 93.963261 82.583261) + (xy 94.050615 82.466705) + (xy 94.101745 82.330316) + (xy 94.1085 82.268134) + (xy 94.1085 78.971866) + (xy 94.101745 78.909684) + (xy 94.050615 78.773295) + (xy 93.963261 78.656739) + (xy 93.846705 78.569385) + (xy 93.710316 78.518255) + (xy 93.648134 78.5115) + (xy 90.351866 78.5115) + (xy 90.289684 78.518255) + (xy 90.153295 78.569385) + (xy 90.036739 78.656739) + (xy 89.949385 78.773295) + (xy 89.898255 78.909684) + (xy 89.8915 78.971866) + (xy 89.8915 80.1955) + (xy 89.871498 80.263621) + (xy 89.817842 80.310114) + (xy 89.7655 80.3215) + (xy 82.761867 80.3215) + (xy 82.693746 80.301498) + (xy 82.658655 80.267772) + (xy 82.636198 80.2357) + (xy 82.4743 80.073802) + (xy 82.469792 80.070645) + (xy 82.469789 80.070643) + (xy 82.391611 80.015902) + (xy 82.286749 79.942477) + (xy 82.281767 79.940154) + (xy 82.281762 79.940151) + (xy 82.084225 79.848039) + (xy 82.084224 79.848039) + (xy 82.079243 79.845716) + (xy 82.073935 79.844294) + (xy 82.073933 79.844293) + (xy 81.863402 79.787881) + (xy 81.8634 79.787881) + (xy 81.858087 79.786457) + (xy 81.63 79.766502) + (xy 81.624525 79.766981) + (xy 81.467087 79.780755) + (xy 81.397482 79.766766) + (xy 81.36701 79.744329) + (xy 77.13377 75.511089) + (xy 77.121384 75.496677) + (xy 77.112851 75.485082) + (xy 77.112846 75.485077) + (xy 77.108508 75.479182) + (xy 77.10293 75.474443) + (xy 77.102927 75.47444) + (xy 77.068232 75.444965) + (xy 77.060716 75.438035) + (xy 77.055021 75.43234) + (xy 77.04888 75.427482) + (xy 77.032749 75.414719) + (xy 77.029345 75.411928) + (xy 76.979297 75.369409) + (xy 76.979295 75.369408) + (xy 76.973715 75.364667) + (xy 76.967199 75.361339) + (xy 76.96215 75.357972) + (xy 76.957021 75.354805) + (xy 76.951284 75.350266) + (xy 76.885125 75.319345) + (xy 76.881225 75.317439) + (xy 76.816192 75.284231) + (xy 76.809084 75.282492) + (xy 76.803441 75.280393) + (xy 76.797678 75.278476) + (xy 76.79105 75.275378) + (xy 76.719583 75.260513) + (xy 76.715299 75.259543) + (xy 76.64439 75.242192) + (xy 76.638788 75.241844) + (xy 76.638785 75.241844) + (xy 76.633236 75.2415) + (xy 76.633238 75.241464) + (xy 76.629245 75.241225) + (xy 76.625053 75.240851) + (xy 76.617885 75.23936) + (xy 76.551675 75.241151) + (xy 76.540479 75.241454) + (xy 76.537072 75.2415) + (xy 44.404219 75.2415) + (xy 44.336098 75.221498) + (xy 44.289605 75.167842) + (xy 44.284695 75.155376) + (xy 44.243868 75.033002) + (xy 44.24155 75.026054) + (xy 44.148478 74.875652) + (xy 44.023303 74.750695) + (xy 44.017072 74.746854) + (xy 43.878968 74.661725) + (xy 43.878966 74.661724) + (xy 43.872738 74.657885) + (xy 43.712254 74.604655) + (xy 43.711389 74.604368) + (xy 43.711387 74.604368) + (xy 43.704861 74.602203) + (xy 43.698025 74.601503) + (xy 43.698022 74.601502) + (xy 43.654969 74.597091) + (xy 43.6004 74.5915) + (xy 40.3996 74.5915) + (xy 40.396354 74.591837) + (xy 40.39635 74.591837) + (xy 40.300692 74.601762) + (xy 40.300688 74.601763) + (xy 40.293834 74.602474) + (xy 40.287298 74.604655) + (xy 40.287296 74.604655) + (xy 40.155194 74.648728) + (xy 40.126054 74.65845) + (xy 39.975652 74.751522) + (xy 39.850695 74.876697) + (xy 39.757885 75.027262) + (xy 39.702203 75.195139) + (xy 39.6915 75.2996) + (xy 39.6915 76.7004) + (xy 35.008 76.7004) + (xy 35.008 71.6) + (xy 56.336372 71.6) + (xy 56.356854 71.860249) + (xy 56.358008 71.865056) + (xy 56.358009 71.865062) + (xy 56.371751 71.922301) + (xy 56.417796 72.114089) + (xy 56.419689 72.11866) + (xy 56.41969 72.118662) + (xy 56.45919 72.214022) + (xy 56.517697 72.355271) + (xy 56.654097 72.577856) + (xy 56.823637 72.776363) + (xy 57.022144 72.945903) + (xy 57.244729 73.082303) + (xy 57.249299 73.084196) + (xy 57.249303 73.084198) + (xy 57.481338 73.18031) + (xy 57.485911 73.182204) + (xy 57.574931 73.203576) + (xy 57.734938 73.241991) + (xy 57.734944 73.241992) + (xy 57.739751 73.243146) + (xy 58 73.263628) + (xy 58.260249 73.243146) + (xy 58.265056 73.241992) + (xy 58.265062 73.241991) + (xy 58.425069 73.203576) + (xy 58.514089 73.182204) + (xy 58.518662 73.18031) + (xy 58.750697 73.084198) + (xy 58.750701 73.084196) + (xy 58.755271 73.082303) + (xy 58.977856 72.945903) + (xy 59.176363 72.776363) + (xy 59.345903 72.577856) + (xy 59.482303 72.355271) + (xy 59.540811 72.214022) + (xy 59.58031 72.118662) + (xy 59.580311 72.11866) + (xy 59.582204 72.114089) + (xy 59.628249 71.922301) + (xy 59.641991 71.865062) + (xy 59.641992 71.865056) + (xy 59.643146 71.860249) + (xy 59.663628 71.6) + (xy 68.336372 71.6) + (xy 68.356854 71.860249) + (xy 68.358008 71.865056) + (xy 68.358009 71.865062) + (xy 68.371751 71.922301) + (xy 68.417796 72.114089) + (xy 68.419689 72.11866) + (xy 68.41969 72.118662) + (xy 68.45919 72.214022) + (xy 68.517697 72.355271) + (xy 68.654097 72.577856) + (xy 68.823637 72.776363) + (xy 69.022144 72.945903) + (xy 69.244729 73.082303) + (xy 69.249299 73.084196) + (xy 69.249303 73.084198) + (xy 69.481338 73.18031) + (xy 69.485911 73.182204) + (xy 69.574931 73.203576) + (xy 69.734938 73.241991) + (xy 69.734944 73.241992) + (xy 69.739751 73.243146) + (xy 70 73.263628) + (xy 70.260249 73.243146) + (xy 70.265056 73.241992) + (xy 70.265062 73.241991) + (xy 70.425069 73.203576) + (xy 70.514089 73.182204) + (xy 70.518662 73.18031) + (xy 70.750697 73.084198) + (xy 70.750701 73.084196) + (xy 70.755271 73.082303) + (xy 70.977856 72.945903) + (xy 71.176363 72.776363) + (xy 71.345903 72.577856) + (xy 71.482303 72.355271) + (xy 71.540811 72.214022) + (xy 71.58031 72.118662) + (xy 71.580311 72.11866) + (xy 71.582204 72.114089) + (xy 71.628249 71.922301) + (xy 71.641991 71.865062) + (xy 71.641992 71.865056) + (xy 71.643146 71.860249) + (xy 71.663628 71.6) + (xy 71.643146 71.339751) + (xy 71.641992 71.334944) + (xy 71.641991 71.334938) + (xy 71.597131 71.148087) + (xy 71.582204 71.085911) + (xy 71.58031 71.081338) + (xy 71.513482 70.92) + (xy 80.316502 70.92) + (xy 80.336457 71.148087) + (xy 80.337881 71.1534) + (xy 80.337881 71.153402) + (xy 80.389136 71.344685) + (xy 80.395716 71.369243) + (xy 80.398039 71.374224) + (xy 80.398039 71.374225) + (xy 80.490151 71.571762) + (xy 80.490154 71.571767) + (xy 80.492477 71.576749) + (xy 80.623802 71.7643) + (xy 80.7857 71.926198) + (xy 80.790208 71.929355) + (xy 80.790211 71.929357) + (xy 80.868389 71.984098) + (xy 80.973251 72.057523) + (xy 80.978233 72.059846) + (xy 80.978238 72.059849) + (xy 81.175775 72.151961) + (xy 81.180757 72.154284) + (xy 81.186065 72.155706) + (xy 81.186067 72.155707) + (xy 81.396598 72.212119) + (xy 81.3966 72.212119) + (xy 81.401913 72.213543) + (xy 81.63 72.233498) + (xy 81.858087 72.213543) + (xy 81.8634 72.212119) + (xy 81.863402 72.212119) + (xy 82.073933 72.155707) + (xy 82.073935 72.155706) + (xy 82.079243 72.154284) + (xy 82.084225 72.151961) + (xy 82.281762 72.059849) + (xy 82.281767 72.059846) + (xy 82.286749 72.057523) + (xy 82.391611 71.984098) + (xy 82.469789 71.929357) + (xy 82.469792 71.929355) + (xy 82.4743 71.926198) + (xy 82.636198 71.7643) + (xy 82.767523 71.576749) + (xy 82.769846 71.571767) + (xy 82.769849 71.571762) + (xy 82.861961 71.374225) + (xy 82.861961 71.374224) + (xy 82.864284 71.369243) + (xy 82.870865 71.344685) + (xy 82.922119 71.153402) + (xy 82.922119 71.1534) + (xy 82.923543 71.148087) + (xy 82.943498 70.92) + (xy 82.923543 70.691913) + (xy 82.922119 70.686598) + (xy 82.865707 70.476067) + (xy 82.865706 70.476065) + (xy 82.864284 70.470757) + (xy 82.850858 70.441965) + (xy 82.769849 70.268238) + (xy 82.769846 70.268233) + (xy 82.767523 70.263251) + (xy 82.669713 70.123564) + (xy 82.639357 70.080211) + (xy 82.639355 70.080208) + (xy 82.636198 70.0757) + (xy 82.4743 69.913802) + (xy 82.469792 69.910645) + (xy 82.469789 69.910643) + (xy 82.316841 69.803548) + (xy 82.286749 69.782477) + (xy 82.281767 69.780154) + (xy 82.281762 69.780151) + (xy 82.084225 69.688039) + (xy 82.084224 69.688039) + (xy 82.079243 69.685716) + (xy 82.073935 69.684294) + (xy 82.073933 69.684293) + (xy 81.863402 69.627881) + (xy 81.8634 69.627881) + (xy 81.858087 69.626457) + (xy 81.63 69.606502) + (xy 81.401913 69.626457) + (xy 81.3966 69.627881) + (xy 81.396598 69.627881) + (xy 81.186067 69.684293) + (xy 81.186065 69.684294) + (xy 81.180757 69.685716) + (xy 81.175776 69.688039) + (xy 81.175775 69.688039) + (xy 80.978238 69.780151) + (xy 80.978233 69.780154) + (xy 80.973251 69.782477) + (xy 80.943159 69.803548) + (xy 80.790211 69.910643) + (xy 80.790208 69.910645) + (xy 80.7857 69.913802) + (xy 80.623802 70.0757) + (xy 80.620645 70.080208) + (xy 80.620643 70.080211) + (xy 80.590287 70.123564) + (xy 80.492477 70.263251) + (xy 80.490154 70.268233) + (xy 80.490151 70.268238) + (xy 80.409142 70.441965) + (xy 80.395716 70.470757) + (xy 80.394294 70.476065) + (xy 80.394293 70.476067) + (xy 80.337881 70.686598) + (xy 80.336457 70.691913) + (xy 80.316502 70.92) + (xy 71.513482 70.92) + (xy 71.484198 70.849303) + (xy 71.484196 70.849299) + (xy 71.482303 70.844729) + (xy 71.345903 70.622144) + (xy 71.176363 70.423637) + (xy 70.977856 70.254097) + (xy 70.755271 70.117697) + (xy 70.750701 70.115804) + (xy 70.750697 70.115802) + (xy 70.518662 70.01969) + (xy 70.51866 70.019689) + (xy 70.514089 70.017796) + (xy 70.425069 69.996424) + (xy 70.265062 69.958009) + (xy 70.265056 69.958008) + (xy 70.260249 69.956854) + (xy 70 69.936372) + (xy 69.739751 69.956854) + (xy 69.734944 69.958008) + (xy 69.734938 69.958009) + (xy 69.574931 69.996424) + (xy 69.485911 70.017796) + (xy 69.48134 70.019689) + (xy 69.481338 70.01969) + (xy 69.249303 70.115802) + (xy 69.249299 70.115804) + (xy 69.244729 70.117697) + (xy 69.022144 70.254097) + (xy 68.823637 70.423637) + (xy 68.654097 70.622144) + (xy 68.517697 70.844729) + (xy 68.515804 70.849299) + (xy 68.515802 70.849303) + (xy 68.41969 71.081338) + (xy 68.417796 71.085911) + (xy 68.402869 71.148087) + (xy 68.358009 71.334938) + (xy 68.358008 71.334944) + (xy 68.356854 71.339751) + (xy 68.336372 71.6) + (xy 59.663628 71.6) + (xy 59.643146 71.339751) + (xy 59.641992 71.334944) + (xy 59.641991 71.334938) + (xy 59.597131 71.148087) + (xy 59.582204 71.085911) + (xy 59.58031 71.081338) + (xy 59.484198 70.849303) + (xy 59.484196 70.849299) + (xy 59.482303 70.844729) + (xy 59.345903 70.622144) + (xy 59.176363 70.423637) + (xy 58.977856 70.254097) + (xy 58.755271 70.117697) + (xy 58.750701 70.115804) + (xy 58.750697 70.115802) + (xy 58.518662 70.01969) + (xy 58.51866 70.019689) + (xy 58.514089 70.017796) + (xy 58.425069 69.996424) + (xy 58.265062 69.958009) + (xy 58.265056 69.958008) + (xy 58.260249 69.956854) + (xy 58 69.936372) + (xy 57.739751 69.956854) + (xy 57.734944 69.958008) + (xy 57.734938 69.958009) + (xy 57.574931 69.996424) + (xy 57.485911 70.017796) + (xy 57.48134 70.019689) + (xy 57.481338 70.01969) + (xy 57.249303 70.115802) + (xy 57.249299 70.115804) + (xy 57.244729 70.117697) + (xy 57.022144 70.254097) + (xy 56.823637 70.423637) + (xy 56.654097 70.622144) + (xy 56.517697 70.844729) + (xy 56.515804 70.849299) + (xy 56.515802 70.849303) + (xy 56.41969 71.081338) + (xy 56.417796 71.085911) + (xy 56.402869 71.148087) + (xy 56.358009 71.334938) + (xy 56.358008 71.334944) + (xy 56.356854 71.339751) + (xy 56.336372 71.6) + (xy 35.008 71.6) + (xy 35.008 69.433411) + (xy 39.687977 69.433411) + (xy 39.696945 69.672274) + (xy 39.74603 69.906211) + (xy 39.833829 70.128533) + (xy 39.957832 70.332883) + (xy 39.961329 70.336913) + (xy 40.082081 70.476067) + (xy 40.114493 70.513419) + (xy 40.118619 70.516802) + (xy 40.118623 70.516806) + (xy 40.242501 70.618379) + (xy 40.299333 70.664978) + (xy 40.303969 70.667617) + (xy 40.303972 70.667619) + (xy 40.417386 70.732178) + (xy 40.507066 70.783227) + (xy 40.731753 70.864784) + (xy 40.737002 70.865733) + (xy 40.737005 70.865734) + (xy 40.962885 70.90658) + (xy 40.962893 70.906581) + (xy 40.966969 70.907318) + (xy 40.985359 70.908185) + (xy 40.990544 70.90843) + (xy 40.990551 70.90843) + (xy 40.992032 70.9085) + (xy 42.960012 70.9085) + (xy 43.138175 70.893383) + (xy 43.143339 70.892043) + (xy 43.143343 70.892042) + (xy 43.364375 70.834673) + (xy 43.36438 70.834671) + (xy 43.36954 70.833332) + (xy 43.488874 70.779576) + (xy 43.582619 70.737347) + (xy 43.582622 70.737346) + (xy 43.58748 70.735157) + (xy 43.785762 70.601666) + (xy 43.795434 70.59244) + (xy 43.914477 70.478878) + (xy 43.958718 70.436674) + (xy 43.981868 70.40556) + (xy 44.087748 70.263251) + (xy 44.101402 70.2449) + (xy 44.164761 70.120283) + (xy 44.207314 70.036586) + (xy 44.207314 70.036585) + (xy 44.209733 70.031828) + (xy 44.250361 69.900984) + (xy 44.279032 69.808651) + (xy 44.279033 69.808645) + (xy 44.280616 69.803548) + (xy 44.304088 69.626457) + (xy 44.307595 69.6) + (xy 62.336372 69.6) + (xy 62.356854 69.860249) + (xy 62.358008 69.865056) + (xy 62.358009 69.865062) + (xy 62.375223 69.93676) + (xy 62.417796 70.114089) + (xy 62.419689 70.11866) + (xy 62.41969 70.118662) + (xy 62.510093 70.336913) + (xy 62.517697 70.355271) + (xy 62.654097 70.577856) + (xy 62.823637 70.776363) + (xy 63.022144 70.945903) + (xy 63.244729 71.082303) + (xy 63.249299 71.084196) + (xy 63.249303 71.084198) + (xy 63.481338 71.18031) + (xy 63.485911 71.182204) + (xy 63.574931 71.203576) + (xy 63.734938 71.241991) + (xy 63.734944 71.241992) + (xy 63.739751 71.243146) + (xy 64 71.263628) + (xy 64.260249 71.243146) + (xy 64.265056 71.241992) + (xy 64.265062 71.241991) + (xy 64.425069 71.203576) + (xy 64.514089 71.182204) + (xy 64.518662 71.18031) + (xy 64.750697 71.084198) + (xy 64.750701 71.084196) + (xy 64.755271 71.082303) + (xy 64.977856 70.945903) + (xy 65.176363 70.776363) + (xy 65.345903 70.577856) + (xy 65.482303 70.355271) + (xy 65.489908 70.336913) + (xy 65.58031 70.118662) + (xy 65.580311 70.11866) + (xy 65.582204 70.114089) + (xy 65.624777 69.93676) + (xy 65.641991 69.865062) + (xy 65.641992 69.865056) + (xy 65.643146 69.860249) + (xy 65.663628 69.6) + (xy 65.643146 69.339751) + (xy 65.641992 69.334944) + (xy 65.641991 69.334938) + (xy 65.58535 69.099016) + (xy 65.582204 69.085911) + (xy 65.569767 69.055886) + (xy 65.484198 68.849303) + (xy 65.484196 68.849299) + (xy 65.482303 68.844729) + (xy 65.345903 68.622144) + (xy 65.176363 68.423637) + (xy 64.977856 68.254097) + (xy 64.755271 68.117697) + (xy 64.750701 68.115804) + (xy 64.750697 68.115802) + (xy 64.518662 68.01969) + (xy 64.51866 68.019689) + (xy 64.514089 68.017796) + (xy 64.400061 67.99042) + (xy 64.265062 67.958009) + (xy 64.265056 67.958008) + (xy 64.260249 67.956854) + (xy 64 67.936372) + (xy 63.739751 67.956854) + (xy 63.734944 67.958008) + (xy 63.734938 67.958009) + (xy 63.599939 67.99042) + (xy 63.485911 68.017796) + (xy 63.48134 68.019689) + (xy 63.481338 68.01969) + (xy 63.249303 68.115802) + (xy 63.249299 68.115804) + (xy 63.244729 68.117697) + (xy 63.022144 68.254097) + (xy 62.823637 68.423637) + (xy 62.654097 68.622144) + (xy 62.517697 68.844729) + (xy 62.515804 68.849299) + (xy 62.515802 68.849303) + (xy 62.430233 69.055886) + (xy 62.417796 69.085911) + (xy 62.41465 69.099016) + (xy 62.358009 69.334938) + (xy 62.358008 69.334944) + (xy 62.356854 69.339751) + (xy 62.336372 69.6) + (xy 44.307595 69.6) + (xy 44.311323 69.571873) + (xy 44.311323 69.571869) + (xy 44.312023 69.566589) + (xy 44.303055 69.327726) + (xy 44.27444 69.191349) + (xy 44.255067 69.099016) + (xy 44.255066 69.099013) + (xy 44.25397 69.093789) + (xy 44.166171 68.871467) + (xy 44.042168 68.667117) + (xy 44.020314 68.641932) + (xy 43.889007 68.490614) + (xy 43.889005 68.490612) + (xy 43.885507 68.486581) + (xy 43.881381 68.483198) + (xy 43.881377 68.483194) + (xy 43.704795 68.338407) + (xy 43.700667 68.335022) + (xy 43.696031 68.332383) + (xy 43.696028 68.332381) + (xy 43.497577 68.219416) + (xy 43.492934 68.216773) + (xy 43.268247 68.135216) + (xy 43.262998 68.134267) + (xy 43.262995 68.134266) + (xy 43.037115 68.09342) + (xy 43.037107 68.093419) + (xy 43.033031 68.092682) + (xy 43.014641 68.091815) + (xy 43.009456 68.09157) + (xy 43.009449 68.09157) + (xy 43.007968 68.0915) + (xy 41.039988 68.0915) + (xy 40.861825 68.106617) + (xy 40.856661 68.107957) + (xy 40.856657 68.107958) + (xy 40.635625 68.165327) + (xy 40.63562 68.165329) + (xy 40.63046 68.166668) + (xy 40.625594 68.16886) + (xy 40.417381 68.262653) + (xy 40.417378 68.262654) + (xy 40.41252 68.264843) + (xy 40.214238 68.398334) + (xy 40.210381 68.402013) + (xy 40.210379 68.402015) + (xy 40.138536 68.47055) + (xy 40.041282 68.563326) + (xy 39.898598 68.7551) + (xy 39.896182 68.759851) + (xy 39.89618 68.759855) + (xy 39.863731 68.823678) + (xy 39.790267 68.968172) + (xy 39.768109 69.039532) + (xy 39.720968 69.191349) + (xy 39.720967 69.191355) + (xy 39.719384 69.196452) + (xy 39.687977 69.433411) + (xy 35.008 69.433411) + (xy 35.008 66.7004) + (xy 39.6915 66.7004) + (xy 39.691837 66.703646) + (xy 39.691837 66.70365) + (xy 39.701641 66.798134) + (xy 39.702474 66.806166) + (xy 39.704655 66.812702) + (xy 39.704655 66.812704) + (xy 39.738625 66.914523) + (xy 39.75845 66.973946) + (xy 39.851522 67.124348) + (xy 39.976697 67.249305) + (xy 39.982927 67.253145) + (xy 39.982928 67.253146) + (xy 40.12009 67.337694) + (xy 40.127262 67.342115) + (xy 40.175359 67.358068) + (xy 40.288611 67.395632) + (xy 40.288613 67.395632) + (xy 40.295139 67.397797) + (xy 40.301975 67.398497) + (xy 40.301978 67.398498) + (xy 40.345031 67.402909) + (xy 40.3996 67.4085) + (xy 43.6004 67.4085) + (xy 43.603646 67.408163) + (xy 43.60365 67.408163) + (xy 43.699308 67.398238) + (xy 43.699312 67.398237) + (xy 43.706166 67.397526) + (xy 43.712702 67.395345) + (xy 43.712704 67.395345) + (xy 43.844806 67.351272) + (xy 43.873946 67.34155) + (xy 44.024348 67.248478) + (xy 44.149305 67.123303) + (xy 44.159921 67.106081) + (xy 44.238275 66.978968) + (xy 44.238276 66.978966) + (xy 44.242115 66.972738) + (xy 44.285107 66.843121) + (xy 44.295632 66.811389) + (xy 44.295632 66.811387) + (xy 44.297797 66.804861) + (xy 44.298487 66.798134) + (xy 79.3265 66.798134) + (xy 79.333255 66.860316) + (xy 79.384385 66.996705) + (xy 79.471739 67.113261) + (xy 79.588295 67.200615) + (xy 79.724684 67.251745) + (xy 79.786866 67.2585) + (xy 80.933134 67.2585) + (xy 80.995316 67.251745) + (xy 81.036623 67.23626) + (xy 81.123296 67.203768) + (xy 81.123299 67.203766) + (xy 81.131705 67.200615) + (xy 81.138894 67.195227) + (xy 81.139137 67.195094) + (xy 81.208494 67.179924) + (xy 81.236907 67.185248) + (xy 81.42118 67.24229) + (xy 81.427305 67.242934) + (xy 81.427306 67.242934) + (xy 81.616622 67.262832) + (xy 81.616623 67.262832) + (xy 81.62275 67.263476) + (xy 81.706014 67.255898) + (xy 81.818457 67.245665) + (xy 81.81846 67.245664) + (xy 81.824596 67.245106) + (xy 81.830502 67.243368) + (xy 81.830506 67.243367) + (xy 82.01312 67.18962) + (xy 82.013119 67.18962) + (xy 82.019029 67.187881) + (xy 82.024486 67.185028) + (xy 82.024489 67.185027) + (xy 82.193181 67.096838) + (xy 82.193185 67.096835) + (xy 82.198645 67.093981) + (xy 82.198897 67.093779) + (xy 82.264912 67.073799) + (xy 82.325885 67.088959) + (xy 82.492342 67.178962) + (xy 82.503647 67.183714) + (xy 82.628692 67.222422) + (xy 82.642795 67.222628) + (xy 82.646 67.215873) + (xy 82.646 67.208986) + (xy 83.154 67.208986) + (xy 83.157973 67.222517) + (xy 83.165768 67.223637) + (xy 83.282932 67.189154) + (xy 83.2943 67.184561) + (xy 83.462911 67.096414) + (xy 83.473173 67.089698) + (xy 83.621443 66.970485) + (xy 83.630213 66.961897) + (xy 83.752499 66.816162) + (xy 83.759437 66.806031) + (xy 83.851094 66.639308) + (xy 83.855924 66.628038) + (xy 83.913452 66.446685) + (xy 83.916002 66.434691) + (xy 83.932607 66.28665) + (xy 83.933 66.279626) + (xy 83.933 66.272115) + (xy 83.928525 66.256876) + (xy 83.927135 66.255671) + (xy 83.919452 66.254) + (xy 83.172115 66.254) + (xy 83.156876 66.258475) + (xy 83.155671 66.259865) + (xy 83.154 66.267548) + (xy 83.154 67.208986) + (xy 82.646 67.208986) + (xy 82.646 66.446242) + (xy 82.646785 66.432197) + (xy 82.65312 66.375721) + (xy 82.6635 66.283183) + (xy 82.6635 65.727885) + (xy 83.154 65.727885) + (xy 83.158475 65.743124) + (xy 83.159865 65.744329) + (xy 83.167548 65.746) + (xy 83.914885 65.746) + (xy 83.930124 65.741525) + (xy 83.931329 65.740135) + (xy 83.933 65.732452) + (xy 83.933 65.72711) + (xy 83.9327 65.720965) + (xy 83.91883 65.579519) + (xy 83.916447 65.567481) + (xy 83.861458 65.385349) + (xy 83.856783 65.374007) + (xy 83.767465 65.206023) + (xy 83.760678 65.195807) + (xy 83.640428 65.048366) + (xy 83.631784 65.039662) + (xy 83.485191 64.91839) + (xy 83.47502 64.91153) + (xy 83.307658 64.821038) + (xy 83.296353 64.816286) + (xy 83.171308 64.777578) + (xy 83.157205 64.777372) + (xy 83.154 64.784127) + (xy 83.154 65.727885) + (xy 82.6635 65.727885) + (xy 82.6635 65.723996) + (xy 82.648723 65.573287) + (xy 82.648032 65.570998) + (xy 82.646 65.550276) + (xy 82.646 64.791014) + (xy 82.642027 64.777483) + (xy 82.634232 64.776363) + (xy 82.517068 64.810846) + (xy 82.5057 64.815439) + (xy 82.337093 64.903584) + (xy 82.334017 64.905597) + (xy 82.332178 64.906154) + (xy 82.33163 64.90644) + (xy 82.331576 64.906336) + (xy 82.266064 64.926161) + (xy 82.205094 64.911001) + (xy 82.173502 64.893919) + (xy 82.032435 64.817644) + (xy 81.899078 64.776363) + (xy 81.844707 64.759532) + (xy 81.844704 64.759531) + (xy 81.83882 64.75771) + (xy 81.832695 64.757066) + (xy 81.832694 64.757066) + (xy 81.643378 64.737168) + (xy 81.643377 64.737168) + (xy 81.63725 64.736524) + (xy 81.553986 64.744102) + (xy 81.441543 64.754335) + (xy 81.44154 64.754336) + (xy 81.435404 64.754894) + (xy 81.429498 64.756632) + (xy 81.429494 64.756633) + (xy 81.246879 64.81038) + (xy 81.246877 64.810381) + (xy 81.245493 64.810788) + (xy 81.242537 64.811658) + (xy 81.240971 64.812119) + (xy 81.240718 64.81126) + (xy 81.175338 64.817714) + (xy 81.138594 64.804548) + (xy 81.131705 64.799385) + (xy 81.123304 64.796236) + (xy 81.123301 64.796234) + (xy 81.018819 64.757066) + (xy 80.995316 64.748255) + (xy 80.933134 64.7415) + (xy 79.786866 64.7415) + (xy 79.724684 64.748255) + (xy 79.588295 64.799385) + (xy 79.471739 64.886739) + (xy 79.384385 65.003295) + (xy 79.333255 65.139684) + (xy 79.3265 65.201866) + (xy 79.3265 66.798134) + (xy 44.298487 66.798134) + (xy 44.298837 66.794717) + (xy 44.304029 66.744038) + (xy 44.3085 66.7004) + (xy 44.3085 65.2996) + (xy 44.298371 65.201978) + (xy 44.298238 65.200692) + (xy 44.298237 65.200688) + (xy 44.297526 65.193834) + (xy 44.24155 65.026054) + (xy 44.148478 64.875652) + (xy 44.023303 64.750695) + (xy 44.001358 64.737168) + (xy 43.878968 64.661725) + (xy 43.878966 64.661724) + (xy 43.872738 64.657885) + (xy 43.712254 64.604655) + (xy 43.711389 64.604368) + (xy 43.711387 64.604368) + (xy 43.704861 64.602203) + (xy 43.698025 64.601503) + (xy 43.698022 64.601502) + (xy 43.654969 64.597091) + (xy 43.6004 64.5915) + (xy 40.3996 64.5915) + (xy 40.396354 64.591837) + (xy 40.39635 64.591837) + (xy 40.300692 64.601762) + (xy 40.300688 64.601763) + (xy 40.293834 64.602474) + (xy 40.287298 64.604655) + (xy 40.287296 64.604655) + (xy 40.155194 64.648728) + (xy 40.126054 64.65845) + (xy 39.975652 64.751522) + (xy 39.850695 64.876697) + (xy 39.846855 64.882927) + (xy 39.846854 64.882928) + (xy 39.772659 65.003295) + (xy 39.757885 65.027262) + (xy 39.702203 65.195139) + (xy 39.701503 65.201975) + (xy 39.701502 65.201978) + (xy 39.701088 65.206023) + (xy 39.6915 65.2996) + (xy 39.6915 66.7004) + (xy 35.008 66.7004) + (xy 35.008 62.648134) + (xy 54.2715 62.648134) + (xy 54.278255 62.710316) + (xy 54.329385 62.846705) + (xy 54.416739 62.963261) + (xy 54.533295 63.050615) + (xy 54.669684 63.101745) + (xy 54.731866 63.1085) + (xy 58.028134 63.1085) + (xy 58.090316 63.101745) + (xy 58.226705 63.050615) + (xy 58.343261 62.963261) + (xy 58.430615 62.846705) + (xy 58.481745 62.710316) + (xy 58.4885 62.648134) + (xy 58.4885 60.977869) + (xy 69.506689 60.977869) + (xy 69.523238 61.264883) + (xy 69.524063 61.269088) + (xy 69.524064 61.269096) + (xy 69.539382 61.347171) + (xy 69.578586 61.546995) + (xy 69.579973 61.551045) + (xy 69.579974 61.55105) + (xy 69.670321 61.81493) + (xy 69.67171 61.818986) + (xy 69.800885 62.075822) + (xy 69.963721 62.31275) + (xy 70.157206 62.525388) + (xy 70.160501 62.528143) + (xy 70.160502 62.528144) + (xy 70.368983 62.70246) + (xy 70.377759 62.709798) + (xy 70.621298 62.862571) + (xy 70.883318 62.980877) + (xy 70.887437 62.982097) + (xy 71.154857 63.061311) + (xy 71.154862 63.061312) + (xy 71.15897 63.062529) + (xy 71.163204 63.063177) + (xy 71.163209 63.063178) + (xy 71.39712 63.098971) + (xy 71.443153 63.106015) + (xy 71.589485 63.108314) + (xy 71.726317 63.110464) + (xy 71.726323 63.110464) + (xy 71.730608 63.110531) + (xy 71.73486 63.110016) + (xy 71.734868 63.110016) + (xy 72.011756 63.076508) + (xy 72.011761 63.076507) + (xy 72.016017 63.075992) + (xy 72.112748 63.050615) + (xy 72.289954 63.004126) + (xy 72.289955 63.004126) + (xy 72.294097 63.003039) + (xy 72.559704 62.893021) + (xy 72.786586 62.760442) + (xy 72.804219 62.750138) + (xy 72.80422 62.750137) + (xy 72.807922 62.747974) + (xy 73.034159 62.570582) + (xy 73.039507 62.565064) + (xy 73.231244 62.367206) + (xy 73.234227 62.364128) + (xy 73.23676 62.36068) + (xy 73.236764 62.360675) + (xy 73.401887 62.135886) + (xy 73.404425 62.132431) + (xy 73.541604 61.879779) + (xy 73.643225 61.610848) + (xy 73.688458 61.41335) + (xy 73.706449 61.334797) + (xy 73.70645 61.334793) + (xy 73.707407 61.330613) + (xy 73.708411 61.319371) + (xy 73.732743 61.046726) + (xy 73.732743 61.046724) + (xy 73.732963 61.04426) + (xy 73.733427 61) + (xy 73.717109 60.76064) + (xy 73.714165 60.717452) + (xy 73.714164 60.717446) + (xy 73.713873 60.713175) + (xy 73.709336 60.691264) + (xy 73.656443 60.435855) + (xy 73.655574 60.431658) + (xy 73.559607 60.160657) + (xy 73.42775 59.905188) + (xy 73.414488 59.886317) + (xy 73.264904 59.673482) + (xy 73.262441 59.669977) + (xy 73.108526 59.504345) + (xy 73.069661 59.462521) + (xy 73.069658 59.462519) + (xy 73.06674 59.459378) + (xy 72.844268 59.277287) + (xy 72.599142 59.127073) + (xy 72.581048 59.11913) + (xy 72.33983 59.013243) + (xy 72.335898 59.011517) + (xy 72.309963 59.004129) + (xy 72.063534 58.933932) + (xy 72.063535 58.933932) + (xy 72.059406 58.932756) + (xy 71.836477 58.901029) + (xy 71.779036 58.892854) + (xy 71.779034 58.892854) + (xy 71.774784 58.892249) + (xy 71.770495 58.892227) + (xy 71.770488 58.892226) + (xy 71.491583 58.890765) + (xy 71.491576 58.890765) + (xy 71.487297 58.890743) + (xy 71.483053 58.891302) + (xy 71.483049 58.891302) + (xy 71.35766 58.90781) + (xy 71.202266 58.928268) + (xy 71.198126 58.929401) + (xy 71.198124 58.929401) + (xy 71.136597 58.946233) + (xy 70.924964 59.004129) + (xy 70.921016 59.005813) + (xy 70.664476 59.115237) + (xy 70.664472 59.115239) + (xy 70.660524 59.116923) + (xy 70.611758 59.146109) + (xy 70.417521 59.262357) + (xy 70.417517 59.26236) + (xy 70.413839 59.264561) + (xy 70.189472 59.444313) + (xy 69.991577 59.652851) + (xy 69.823814 59.886317) + (xy 69.689288 60.140392) + (xy 69.590489 60.410373) + (xy 69.529245 60.691264) + (xy 69.506689 60.977869) + (xy 58.4885 60.977869) + (xy 58.4885 59.351866) + (xy 58.481745 59.289684) + (xy 58.430615 59.153295) + (xy 58.343261 59.036739) + (xy 58.226705 58.949385) + (xy 58.090316 58.898255) + (xy 58.028134 58.8915) + (xy 54.731866 58.8915) + (xy 54.669684 58.898255) + (xy 54.533295 58.949385) + (xy 54.416739 59.036739) + (xy 54.329385 59.153295) + (xy 54.278255 59.289684) + (xy 54.2715 59.351866) + (xy 54.2715 62.648134) + (xy 35.008 62.648134) + (xy 35.008 54.998134) + (xy 46.0915 54.998134) + (xy 46.098255 55.060316) + (xy 46.149385 55.196705) + (xy 46.236739 55.313261) + (xy 46.353295 55.400615) + (xy 46.489684 55.451745) + (xy 46.551866 55.4585) + (xy 49.648134 55.4585) + (xy 49.710316 55.451745) + (xy 49.846705 55.400615) + (xy 49.963261 55.313261) + (xy 50.050615 55.196705) + (xy 50.101745 55.060316) + (xy 50.1085 54.998134) + (xy 50.1085 52.401866) + (xy 50.101745 52.339684) + (xy 50.050615 52.203295) + (xy 49.963261 52.086739) + (xy 49.846705 51.999385) + (xy 49.710316 51.948255) + (xy 49.648134 51.9415) + (xy 46.551866 51.9415) + (xy 46.489684 51.948255) + (xy 46.353295 51.999385) + (xy 46.236739 52.086739) + (xy 46.149385 52.203295) + (xy 46.098255 52.339684) + (xy 46.0915 52.401866) + (xy 46.0915 54.998134) + (xy 35.008 54.998134) + (xy 35.008 51.83267) + (xy 40.23216 51.83267) + (xy 40.237887 51.84032) + (xy 40.409042 51.945205) + (xy 40.417837 51.949687) + (xy 40.627988 52.036734) + (xy 40.637373 52.039783) + (xy 40.858554 52.092885) + (xy 40.868301 52.094428) + (xy 41.09507 52.112275) + (xy 41.10493 52.112275) + (xy 41.331699 52.094428) + (xy 41.341446 52.092885) + (xy 41.562627 52.039783) + (xy 41.572012 52.036734) + (xy 41.782163 51.949687) + (xy 41.790958 51.945205) + (xy 41.958445 51.842568) + (xy 41.967907 51.83211) + (xy 41.964124 51.823334) + (xy 41.112812 50.972022) + (xy 41.098868 50.964408) + (xy 41.097035 50.964539) + (xy 41.09042 50.96879) + (xy 40.23892 51.82029) + (xy 40.23216 51.83267) + (xy 35.008 51.83267) + (xy 35.008 50.60493) + (xy 39.587725 50.60493) + (xy 39.605572 50.831699) + (xy 39.607115 50.841446) + (xy 39.660217 51.062627) + (xy 39.663266 51.072012) + (xy 39.750313 51.282163) + (xy 39.754795 51.290958) + (xy 39.857432 51.458445) + (xy 39.86789 51.467907) + (xy 39.876666 51.464124) + (xy 40.727978 50.612812) + (xy 40.734356 50.601132) + (xy 41.464408 50.601132) + (xy 41.464539 50.602965) + (xy 41.46879 50.60958) + (xy 42.32029 51.46108) + (xy 42.33267 51.46784) + (xy 42.34032 51.462113) + (xy 42.445205 51.290958) + (xy 42.449687 51.282163) + (xy 42.536734 51.072012) + (xy 42.539783 51.062627) + (xy 42.592885 50.841446) + (xy 42.594428 50.831699) + (xy 42.612275 50.60493) + (xy 42.612275 50.59507) + (xy 42.594428 50.368301) + (xy 42.592885 50.358554) + (xy 42.539783 50.137373) + (xy 42.536734 50.127988) + (xy 42.449687 49.917837) + (xy 42.445205 49.909042) + (xy 42.342568 49.741555) + (xy 42.33211 49.732093) + (xy 42.323334 49.735876) + (xy 41.472022 50.587188) + (xy 41.464408 50.601132) + (xy 40.734356 50.601132) + (xy 40.735592 50.598868) + (xy 40.735461 50.597035) + (xy 40.73121 50.59042) + (xy 39.87971 49.73892) + (xy 39.86733 49.73216) + (xy 39.85968 49.737887) + (xy 39.754795 49.909042) + (xy 39.750313 49.917837) + (xy 39.663266 50.127988) + (xy 39.660217 50.137373) + (xy 39.607115 50.358554) + (xy 39.605572 50.368301) + (xy 39.587725 50.59507) + (xy 39.587725 50.60493) + (xy 35.008 50.60493) + (xy 35.008 49.36789) + (xy 40.232093 49.36789) + (xy 40.235876 49.376666) + (xy 41.087188 50.227978) + (xy 41.101132 50.235592) + (xy 41.102965 50.235461) + (xy 41.10958 50.23121) + (xy 41.96108 49.37971) + (xy 41.96784 49.36733) + (xy 41.962113 49.35968) + (xy 41.790958 49.254795) + (xy 41.782163 49.250313) + (xy 41.572012 49.163266) + (xy 41.562627 49.160217) + (xy 41.341446 49.107115) + (xy 41.331699 49.105572) + (xy 41.10493 49.087725) + (xy 41.09507 49.087725) + (xy 40.868301 49.105572) + (xy 40.858554 49.107115) + (xy 40.637373 49.160217) + (xy 40.627988 49.163266) + (xy 40.417837 49.250313) + (xy 40.409042 49.254795) + (xy 40.241555 49.357432) + (xy 40.232093 49.36789) + (xy 35.008 49.36789) + (xy 35.008 45.6) + (xy 39.586835 45.6) + (xy 39.605465 45.836711) + (xy 39.606619 45.841518) + (xy 39.60662 45.841524) + (xy 39.640964 45.984577) + (xy 39.660895 46.067594) + (xy 39.662788 46.072165) + (xy 39.662789 46.072167) + (xy 39.746239 46.273633) + (xy 39.75176 46.286963) + (xy 39.754346 46.291183) + (xy 39.873241 46.485202) + (xy 39.873245 46.485208) + (xy 39.875824 46.489416) + (xy 40.030031 46.669969) + (xy 40.210584 46.824176) + (xy 40.214792 46.826755) + (xy 40.214798 46.826759) + (xy 40.392122 46.935423) + (xy 40.413037 46.94824) + (xy 40.417607 46.950133) + (xy 40.417611 46.950135) + (xy 40.618874 47.0335) + (xy 40.632406 47.039105) + (xy 40.680349 47.050615) + (xy 40.858476 47.09338) + (xy 40.858482 47.093381) + (xy 40.863289 47.094535) + (xy 41.1 47.113165) + (xy 41.336711 47.094535) + (xy 41.341518 47.093381) + (xy 41.341524 47.09338) + (xy 41.519651 47.050615) + (xy 41.567594 47.039105) + (xy 41.581126 47.0335) + (xy 41.782389 46.950135) + (xy 41.782393 46.950133) + (xy 41.786963 46.94824) + (xy 41.807878 46.935423) + (xy 41.985202 46.826759) + (xy 41.985208 46.826755) + (xy 41.989416 46.824176) + (xy 42.169969 46.669969) + (xy 42.324176 46.489416) + (xy 42.367533 46.418664) + (xy 42.420181 46.371033) + (xy 42.474965 46.3585) + (xy 46.233629 46.3585) + (xy 46.30175 46.378502) + (xy 46.322724 46.395405) + (xy 53.49623 53.568911) + (xy 53.508616 53.583323) + (xy 53.517149 53.594918) + (xy 53.517154 53.594923) + (xy 53.521492 53.600818) + (xy 53.52707 53.605557) + (xy 53.527073 53.60556) + (xy 53.561768 53.635035) + (xy 53.569284 53.641965) + (xy 53.574979 53.64766) + (xy 53.577861 53.64994) + (xy 53.597251 53.665281) + (xy 53.600655 53.668072) + (xy 53.650703 53.710591) + (xy 53.656285 53.715333) + (xy 53.662801 53.718661) + (xy 53.66785 53.722028) + (xy 53.672979 53.725195) + (xy 53.678716 53.729734) + (xy 53.744872 53.760653) + (xy 53.748769 53.762558) + (xy 53.813808 53.795769) + (xy 53.820916 53.797508) + (xy 53.826559 53.799607) + (xy 53.832322 53.801524) + (xy 53.83895 53.804622) + (xy 53.846112 53.806112) + (xy 53.846113 53.806112) + (xy 53.910412 53.819486) + (xy 53.914696 53.820456) + (xy 53.98561 53.837808) + (xy 53.991212 53.838156) + (xy 53.991215 53.838156) + (xy 53.996764 53.8385) + (xy 53.996762 53.838536) + (xy 54.000755 53.838775) + (xy 54.004947 53.839149) + (xy 54.012115 53.84064) + (xy 54.08952 53.838546) + (xy 54.092928 53.8385) + (xy 62.868133 53.8385) + (xy 62.936254 53.858502) + (xy 62.971345 53.892228) + (xy 62.993802 53.9243) + (xy 63.1557 54.086198) + (xy 63.160208 54.089355) + (xy 63.160211 54.089357) + (xy 63.194321 54.113241) + (xy 63.343251 54.217523) + (xy 63.348233 54.219846) + (xy 63.348238 54.219849) + (xy 63.545775 54.311961) + (xy 63.550757 54.314284) + (xy 63.556065 54.315706) + (xy 63.556067 54.315707) + (xy 63.766598 54.372119) + (xy 63.7666 54.372119) + (xy 63.771913 54.373543) + (xy 64 54.393498) + (xy 64.228087 54.373543) + (xy 64.2334 54.372119) + (xy 64.233402 54.372119) + (xy 64.443933 54.315707) + (xy 64.443935 54.315706) + (xy 64.449243 54.314284) + (xy 64.454225 54.311961) + (xy 64.651762 54.219849) + (xy 64.651767 54.219846) + (xy 64.656749 54.217523) + (xy 64.805679 54.113241) + (xy 64.839789 54.089357) + (xy 64.839792 54.089355) + (xy 64.8443 54.086198) + (xy 65.006198 53.9243) + (xy 65.028655 53.892229) + (xy 65.08411 53.847901) + (xy 65.131867 53.8385) + (xy 67.788133 53.8385) + (xy 67.856254 53.858502) + (xy 67.891345 53.892228) + (xy 67.913802 53.9243) + (xy 68.0757 54.086198) + (xy 68.080208 54.089355) + (xy 68.080211 54.089357) + (xy 68.114321 54.113241) + (xy 68.263251 54.217523) + (xy 68.268233 54.219846) + (xy 68.268238 54.219849) + (xy 68.465775 54.311961) + (xy 68.470757 54.314284) + (xy 68.476065 54.315706) + (xy 68.476067 54.315707) + (xy 68.686598 54.372119) + (xy 68.6866 54.372119) + (xy 68.691913 54.373543) + (xy 68.92 54.393498) + (xy 69.148087 54.373543) + (xy 69.1534 54.372119) + (xy 69.153402 54.372119) + (xy 69.363933 54.315707) + (xy 69.363935 54.315706) + (xy 69.369243 54.314284) + (xy 69.374225 54.311961) + (xy 69.571762 54.219849) + (xy 69.571767 54.219846) + (xy 69.576749 54.217523) + (xy 69.725679 54.113241) + (xy 69.759789 54.089357) + (xy 69.759792 54.089355) + (xy 69.7643 54.086198) + (xy 69.926198 53.9243) + (xy 70.057523 53.736749) + (xy 70.059846 53.731767) + (xy 70.059849 53.731762) + (xy 70.151961 53.534225) + (xy 70.151961 53.534224) + (xy 70.154284 53.529243) + (xy 70.170239 53.469701) + (xy 70.212119 53.313402) + (xy 70.212119 53.3134) + (xy 70.213543 53.308087) + (xy 70.233498 53.08) + (xy 70.213543 52.851913) + (xy 70.211503 52.8443) + (xy 70.155707 52.636067) + (xy 70.155706 52.636065) + (xy 70.154284 52.630757) + (xy 70.151961 52.625775) + (xy 70.059849 52.428238) + (xy 70.059846 52.428233) + (xy 70.057523 52.423251) + (xy 69.97227 52.301498) + (xy 69.929357 52.240211) + (xy 69.929355 52.240208) + (xy 69.926198 52.2357) + (xy 69.7643 52.073802) + (xy 69.759792 52.070645) + (xy 69.759789 52.070643) + (xy 69.588962 51.951029) + (xy 69.576749 51.942477) + (xy 69.571767 51.940154) + (xy 69.571762 51.940151) + (xy 69.374225 51.848039) + (xy 69.374224 51.848039) + (xy 69.369243 51.845716) + (xy 69.363935 51.844294) + (xy 69.363933 51.844293) + (xy 69.153402 51.787881) + (xy 69.1534 51.787881) + (xy 69.148087 51.786457) + (xy 68.92 51.766502) + (xy 68.691913 51.786457) + (xy 68.6866 51.787881) + (xy 68.686598 51.787881) + (xy 68.476067 51.844293) + (xy 68.476065 51.844294) + (xy 68.470757 51.845716) + (xy 68.465776 51.848039) + (xy 68.465775 51.848039) + (xy 68.268238 51.940151) + (xy 68.268233 51.940154) + (xy 68.263251 51.942477) + (xy 68.251038 51.951029) + (xy 68.080211 52.070643) + (xy 68.080208 52.070645) + (xy 68.0757 52.073802) + (xy 67.913802 52.2357) + (xy 67.891345 52.267771) + (xy 67.83589 52.312099) + (xy 67.788133 52.3215) + (xy 65.131867 52.3215) + (xy 65.063746 52.301498) + (xy 65.028655 52.267772) + (xy 65.006198 52.2357) + (xy 64.8443 52.073802) + (xy 64.839792 52.070645) + (xy 64.839789 52.070643) + (xy 64.668962 51.951029) + (xy 64.656749 51.942477) + (xy 64.651767 51.940154) + (xy 64.651762 51.940151) + (xy 64.454225 51.848039) + (xy 64.454224 51.848039) + (xy 64.449243 51.845716) + (xy 64.443935 51.844294) + (xy 64.443933 51.844293) + (xy 64.233402 51.787881) + (xy 64.2334 51.787881) + (xy 64.228087 51.786457) + (xy 64 51.766502) + (xy 63.771913 51.786457) + (xy 63.7666 51.787881) + (xy 63.766598 51.787881) + (xy 63.556067 51.844293) + (xy 63.556065 51.844294) + (xy 63.550757 51.845716) + (xy 63.545776 51.848039) + (xy 63.545775 51.848039) + (xy 63.348238 51.940151) + (xy 63.348233 51.940154) + (xy 63.343251 51.942477) + (xy 63.331038 51.951029) + (xy 63.160211 52.070643) + (xy 63.160208 52.070645) + (xy 63.1557 52.073802) + (xy 62.993802 52.2357) + (xy 62.971345 52.267771) + (xy 62.91589 52.312099) + (xy 62.868133 52.3215) + (xy 55.955904 52.3215) + (xy 55.887783 52.301498) + (xy 55.84129 52.247842) + (xy 55.831186 52.177568) + (xy 55.86068 52.112988) + (xy 55.92649 52.072981) + (xy 56.067594 52.039105) + (xy 56.072167 52.037211) + (xy 56.282389 51.950135) + (xy 56.282393 51.950133) + (xy 56.286963 51.94824) + (xy 56.296367 51.942477) + (xy 56.485202 51.826759) + (xy 56.485208 51.826755) + (xy 56.489416 51.824176) + (xy 56.669969 51.669969) + (xy 56.7423 51.585281) + (xy 56.820963 51.493178) + (xy 56.824176 51.489416) + (xy 56.867533 51.418664) + (xy 56.920181 51.371033) + (xy 56.974965 51.3585) + (xy 72.233629 51.3585) + (xy 72.30175 51.378502) + (xy 72.322724 51.395405) + (xy 74.49623 53.568911) + (xy 74.508616 53.583323) + (xy 74.517149 53.594918) + (xy 74.517154 53.594923) + (xy 74.521492 53.600818) + (xy 74.52707 53.605557) + (xy 74.527073 53.60556) + (xy 74.561768 53.635035) + (xy 74.569284 53.641965) + (xy 74.57498 53.647661) + (xy 74.577841 53.649924) + (xy 74.577846 53.649929) + (xy 74.597256 53.665285) + (xy 74.600656 53.668072) + (xy 74.656285 53.715333) + (xy 74.662802 53.718661) + (xy 74.66785 53.722027) + (xy 74.672972 53.72519) + (xy 74.678716 53.729735) + (xy 74.744895 53.760664) + (xy 74.748775 53.762561) + (xy 74.813808 53.795769) + (xy 74.820923 53.79751) + (xy 74.826578 53.799613) + (xy 74.832317 53.801522) + (xy 74.83895 53.804622) + (xy 74.910435 53.819491) + (xy 74.914701 53.820457) + (xy 74.98561 53.837808) + (xy 74.991212 53.838156) + (xy 74.991215 53.838156) + (xy 74.996764 53.8385) + (xy 74.996762 53.838535) + (xy 75.000734 53.838775) + (xy 75.004955 53.839152) + (xy 75.012115 53.840641) + (xy 75.089542 53.838546) + (xy 75.09295 53.8385) + (xy 84.868133 53.8385) + (xy 84.936254 53.858502) + (xy 84.971345 53.892228) + (xy 84.993802 53.9243) + (xy 85.1557 54.086198) + (xy 85.160208 54.089355) + (xy 85.160211 54.089357) + (xy 85.194321 54.113241) + (xy 85.343251 54.217523) + (xy 85.348233 54.219846) + (xy 85.348238 54.219849) + (xy 85.545775 54.311961) + (xy 85.550757 54.314284) + (xy 85.556065 54.315706) + (xy 85.556067 54.315707) + (xy 85.766598 54.372119) + (xy 85.7666 54.372119) + (xy 85.771913 54.373543) + (xy 86 54.393498) + (xy 86.005475 54.393019) + (xy 86.162913 54.379245) + (xy 86.232518 54.393234) + (xy 86.26299 54.415671) + (xy 94.33623 62.488911) + (xy 94.348616 62.503323) + (xy 94.357149 62.514918) + (xy 94.357154 62.514923) + (xy 94.361492 62.520818) + (xy 94.36707 62.525557) + (xy 94.367073 62.52556) + (xy 94.401768 62.555035) + (xy 94.409284 62.561965) + (xy 94.414979 62.56766) + (xy 94.417861 62.56994) + (xy 94.437251 62.585281) + (xy 94.440655 62.588072) + (xy 94.490703 62.630591) + (xy 94.496285 62.635333) + (xy 94.502801 62.638661) + (xy 94.50785 62.642028) + (xy 94.512979 62.645195) + (xy 94.518716 62.649734) + (xy 94.584875 62.680655) + (xy 94.588769 62.682558) + (xy 94.653808 62.715769) + (xy 94.660916 62.717508) + (xy 94.666559 62.719607) + (xy 94.672322 62.721524) + (xy 94.67895 62.724622) + (xy 94.686112 62.726112) + (xy 94.686113 62.726112) + (xy 94.750412 62.739486) + (xy 94.754696 62.740456) + (xy 94.82561 62.757808) + (xy 94.831212 62.758156) + (xy 94.831215 62.758156) + (xy 94.836764 62.7585) + (xy 94.836762 62.758536) + (xy 94.840755 62.758775) + (xy 94.844947 62.759149) + (xy 94.852115 62.76064) + (xy 94.92952 62.758546) + (xy 94.932928 62.7585) + (xy 113.633629 62.7585) + (xy 113.70175 62.778502) + (xy 113.722724 62.795405) + (xy 117.936783 67.009464) + (xy 117.970809 67.071776) + (xy 117.965744 67.142591) + (xy 117.944933 67.178309) + (xy 117.943023 67.180219) + (xy 117.815512 67.362324) + (xy 117.813189 67.367306) + (xy 117.813186 67.367311) + (xy 117.764195 67.472373) + (xy 117.717277 67.525658) + (xy 117.649 67.545119) + (xy 117.58104 67.524577) + (xy 117.535805 67.472373) + (xy 117.486814 67.367311) + (xy 117.486811 67.367306) + (xy 117.484488 67.362324) + (xy 117.463683 67.332611) + (xy 117.360136 67.18473) + (xy 117.360134 67.184727) + (xy 117.356977 67.180219) + (xy 117.199781 67.023023) + (xy 117.195273 67.019866) + (xy 117.19527 67.019864) + (xy 117.112484 66.961897) + (xy 117.017677 66.895512) + (xy 117.012695 66.893189) + (xy 117.01269 66.893186) + (xy 116.821178 66.803883) + (xy 116.821177 66.803882) + (xy 116.816196 66.80156) + (xy 116.810888 66.800138) + (xy 116.810886 66.800137) + (xy 116.714017 66.774181) + (xy 116.601463 66.744022) + (xy 116.38 66.724647) + (xy 116.158537 66.744022) + (xy 116.045983 66.774181) + (xy 115.949114 66.800137) + (xy 115.949112 66.800138) + (xy 115.943804 66.80156) + (xy 115.938823 66.803882) + (xy 115.938822 66.803883) + (xy 115.747311 66.893186) + (xy 115.747306 66.893189) + (xy 115.742324 66.895512) + (xy 115.737817 66.898668) + (xy 115.737815 66.898669) + (xy 115.56473 67.019864) + (xy 115.564727 67.019866) + (xy 115.560219 67.023023) + (xy 115.403023 67.180219) + (xy 115.399866 67.184727) + (xy 115.399864 67.18473) + (xy 115.296317 67.332611) + (xy 115.275512 67.362324) + (xy 115.273189 67.367306) + (xy 115.273186 67.367311) + (xy 115.224195 67.472373) + (xy 115.177277 67.525658) + (xy 115.109 67.545119) + (xy 115.04104 67.524577) + (xy 114.995805 67.472373) + (xy 114.946814 67.367311) + (xy 114.946811 67.367306) + (xy 114.944488 67.362324) + (xy 114.923683 67.332611) + (xy 114.820136 67.18473) + (xy 114.820134 67.184727) + (xy 114.816977 67.180219) + (xy 114.659781 67.023023) + (xy 114.655273 67.019866) + (xy 114.65527 67.019864) + (xy 114.572484 66.961897) + (xy 114.477677 66.895512) + (xy 114.472695 66.893189) + (xy 114.47269 66.893186) + (xy 114.281178 66.803883) + (xy 114.281177 66.803882) + (xy 114.276196 66.80156) + (xy 114.270888 66.800138) + (xy 114.270886 66.800137) + (xy 114.174017 66.774181) + (xy 114.061463 66.744022) + (xy 113.84 66.724647) + (xy 113.618537 66.744022) + (xy 113.505983 66.774181) + (xy 113.409114 66.800137) + (xy 113.409112 66.800138) + (xy 113.403804 66.80156) + (xy 113.398823 66.803882) + (xy 113.398822 66.803883) + (xy 113.207311 66.893186) + (xy 113.207306 66.893189) + (xy 113.202324 66.895512) + (xy 113.197817 66.898668) + (xy 113.197815 66.898669) + (xy 113.02473 67.019864) + (xy 113.024727 67.019866) + (xy 113.020219 67.023023) + (xy 112.863023 67.180219) + (xy 112.859866 67.184727) + (xy 112.859864 67.18473) + (xy 112.756317 67.332611) + (xy 112.735512 67.362324) + (xy 112.733189 67.367306) + (xy 112.733186 67.367311) + (xy 112.684195 67.472373) + (xy 112.637277 67.525658) + (xy 112.569 67.545119) + (xy 112.50104 67.524577) + (xy 112.455805 67.472373) + (xy 112.406814 67.367311) + (xy 112.406811 67.367306) + (xy 112.404488 67.362324) + (xy 112.383683 67.332611) + (xy 112.280136 67.18473) + (xy 112.280134 67.184727) + (xy 112.276977 67.180219) + (xy 112.119781 67.023023) + (xy 112.115273 67.019866) + (xy 112.11527 67.019864) + (xy 112.032484 66.961897) + (xy 111.937677 66.895512) + (xy 111.932695 66.893189) + (xy 111.93269 66.893186) + (xy 111.741178 66.803883) + (xy 111.741177 66.803882) + (xy 111.736196 66.80156) + (xy 111.730888 66.800138) + (xy 111.730886 66.800137) + (xy 111.634017 66.774181) + (xy 111.521463 66.744022) + (xy 111.3 66.724647) + (xy 111.078537 66.744022) + (xy 110.965983 66.774181) + (xy 110.869114 66.800137) + (xy 110.869112 66.800138) + (xy 110.863804 66.80156) + (xy 110.858823 66.803882) + (xy 110.858822 66.803883) + (xy 110.667311 66.893186) + (xy 110.667306 66.893189) + (xy 110.662324 66.895512) + (xy 110.657817 66.898668) + (xy 110.657815 66.898669) + (xy 110.48473 67.019864) + (xy 110.484727 67.019866) + (xy 110.480219 67.023023) + (xy 110.323023 67.180219) + (xy 110.319866 67.184727) + (xy 110.319864 67.18473) + (xy 110.216317 67.332611) + (xy 110.195512 67.362324) + (xy 110.193189 67.367306) + (xy 110.193186 67.367311) + (xy 110.143919 67.472965) + (xy 110.097001 67.52625) + (xy 110.028724 67.545711) + (xy 109.960764 67.525169) + (xy 109.915529 67.472965) + (xy 109.866377 67.367559) + (xy 109.860897 67.358068) + (xy 109.830206 67.314235) + (xy 109.819729 67.30586) + (xy 109.806282 67.312928) + (xy 109.132022 67.987188) + (xy 109.124408 68.001132) + (xy 109.124539 68.002965) + (xy 109.12879 68.00958) + (xy 109.807003 68.687793) + (xy 109.818777 68.694223) + (xy 109.830793 68.684926) + (xy 109.860897 68.641932) + (xy 109.866377 68.632441) + (xy 109.915529 68.527035) + (xy 109.962447 68.47375) + (xy 110.030724 68.454289) + (xy 110.098684 68.474831) + (xy 110.143919 68.527035) + (xy 110.193186 68.632689) + (xy 110.193189 68.632694) + (xy 110.195512 68.637676) + (xy 110.198668 68.642183) + (xy 110.198669 68.642185) + (xy 110.274735 68.750818) + (xy 110.323023 68.819781) + (xy 110.409647 68.906405) + (xy 110.443673 68.968717) + (xy 110.438608 69.039532) + (xy 110.396061 69.096368) + (xy 110.329541 69.121179) + (xy 110.320552 69.1215) + (xy 109.562725 69.1215) + (xy 109.494604 69.101498) + (xy 109.451194 69.054124) + (xy 109.447072 69.046282) + (xy 108.772812 68.372022) + (xy 108.758868 68.364408) + (xy 108.757035 68.364539) + (xy 108.75042 68.36879) + (xy 108.072206 69.047004) + (xy 108.067356 69.055886) + (xy 108.017154 69.106088) + (xy 107.956769 69.1215) + (xy 107.199448 69.1215) + (xy 107.131327 69.101498) + (xy 107.084834 69.047842) + (xy 107.07473 68.977568) + (xy 107.104224 68.912988) + (xy 107.110353 68.906405) + (xy 107.196977 68.819781) + (xy 107.245266 68.750818) + (xy 107.321331 68.642185) + (xy 107.321332 68.642183) + (xy 107.324488 68.637676) + (xy 107.326811 68.632694) + (xy 107.326814 68.632689) + (xy 107.376081 68.527035) + (xy 107.422999 68.47375) + (xy 107.491276 68.454289) + (xy 107.559236 68.474831) + (xy 107.604471 68.527035) + (xy 107.653623 68.632441) + (xy 107.659103 68.641932) + (xy 107.689794 68.685765) + (xy 107.700271 68.69414) + (xy 107.713718 68.687072) + (xy 108.387978 68.012812) + (xy 108.395592 67.998868) + (xy 108.395461 67.997035) + (xy 108.39121 67.99042) + (xy 107.712997 67.312207) + (xy 107.701223 67.305777) + (xy 107.689207 67.315074) + (xy 107.659103 67.358068) + (xy 107.653623 67.367559) + (xy 107.604471 67.472965) + (xy 107.557553 67.52625) + (xy 107.489276 67.545711) + (xy 107.421316 67.525169) + (xy 107.376081 67.472965) + (xy 107.326814 67.367311) + (xy 107.326811 67.367306) + (xy 107.324488 67.362324) + (xy 107.303683 67.332611) + (xy 107.200136 67.18473) + (xy 107.200134 67.184727) + (xy 107.196977 67.180219) + (xy 107.039781 67.023023) + (xy 107.035273 67.019866) + (xy 107.03527 67.019864) + (xy 106.952484 66.961897) + (xy 106.921599 66.940271) + (xy 108.06586 66.940271) + (xy 108.072928 66.953718) + (xy 108.747188 67.627978) + (xy 108.761132 67.635592) + (xy 108.762965 67.635461) + (xy 108.76958 67.63121) + (xy 109.447793 66.952997) + (xy 109.454223 66.941223) + (xy 109.444926 66.929207) + (xy 109.401931 66.899102) + (xy 109.392445 66.893624) + (xy 109.201007 66.804355) + (xy 109.190715 66.800609) + (xy 108.986691 66.745941) + (xy 108.975896 66.744038) + (xy 108.765475 66.725628) + (xy 108.754525 66.725628) + (xy 108.544104 66.744038) + (xy 108.533309 66.745941) + (xy 108.329285 66.800609) + (xy 108.318993 66.804355) + (xy 108.127559 66.893623) + (xy 108.118068 66.899103) + (xy 108.074235 66.929794) + (xy 108.06586 66.940271) + (xy 106.921599 66.940271) + (xy 106.857677 66.895512) + (xy 106.852695 66.893189) + (xy 106.85269 66.893186) + (xy 106.661178 66.803883) + (xy 106.661177 66.803882) + (xy 106.656196 66.80156) + (xy 106.650888 66.800138) + (xy 106.650886 66.800137) + (xy 106.554017 66.774181) + (xy 106.441463 66.744022) + (xy 106.22 66.724647) + (xy 105.998537 66.744022) + (xy 105.885983 66.774181) + (xy 105.789114 66.800137) + (xy 105.789112 66.800138) + (xy 105.783804 66.80156) + (xy 105.778823 66.803882) + (xy 105.778822 66.803883) + (xy 105.587311 66.893186) + (xy 105.587306 66.893189) + (xy 105.582324 66.895512) + (xy 105.577817 66.898668) + (xy 105.577815 66.898669) + (xy 105.40473 67.019864) + (xy 105.404727 67.019866) + (xy 105.400219 67.023023) + (xy 105.243023 67.180219) + (xy 105.239866 67.184727) + (xy 105.239864 67.18473) + (xy 105.136317 67.332611) + (xy 105.115512 67.362324) + (xy 105.113189 67.367306) + (xy 105.113186 67.367311) + (xy 105.057802 67.486082) + (xy 105.02156 67.563804) + (xy 104.964022 67.778537) + (xy 104.944647 68) + (xy 104.964022 68.221463) + (xy 105.02156 68.436196) + (xy 105.023882 68.441177) + (xy 105.023883 68.441178) + (xy 105.113186 68.632689) + (xy 105.113189 68.632694) + (xy 105.115512 68.637676) + (xy 105.118668 68.642183) + (xy 105.118669 68.642185) + (xy 105.194735 68.750818) + (xy 105.243023 68.819781) + (xy 105.329647 68.906405) + (xy 105.363673 68.968717) + (xy 105.358608 69.039532) + (xy 105.316061 69.096368) + (xy 105.249541 69.121179) + (xy 105.240552 69.1215) + (xy 96.866371 69.1215) + (xy 96.79825 69.101498) + (xy 96.777276 69.084595) + (xy 93.987595 66.294914) + (xy 93.953569 66.232602) + (xy 93.958824 66.161281) + (xy 94.021707 65.994866) + (xy 94.021708 65.994862) + (xy 94.023225 65.990848) + (xy 94.049279 65.877091) + (xy 94.086449 65.714797) + (xy 94.08645 65.714793) + (xy 94.087407 65.710613) + (xy 94.112963 65.42426) + (xy 94.113427 65.38) + (xy 94.113258 65.37752) + (xy 94.094165 65.097452) + (xy 94.094164 65.097446) + (xy 94.093873 65.093175) + (xy 94.089336 65.071264) + (xy 94.036828 64.817714) + (xy 94.035574 64.811658) + (xy 93.939607 64.540657) + (xy 93.80775 64.285188) + (xy 93.794488 64.266317) + (xy 93.644904 64.053482) + (xy 93.642441 64.049977) + (xy 93.44674 63.839378) + (xy 93.224268 63.657287) + (xy 92.979142 63.507073) + (xy 92.961048 63.49913) + (xy 92.71983 63.393243) + (xy 92.715898 63.391517) + (xy 92.689963 63.384129) + (xy 92.443534 63.313932) + (xy 92.443535 63.313932) + (xy 92.439406 63.312756) + (xy 92.226704 63.282485) + (xy 92.159036 63.272854) + (xy 92.159034 63.272854) + (xy 92.154784 63.272249) + (xy 92.150495 63.272227) + (xy 92.150488 63.272226) + (xy 91.871583 63.270765) + (xy 91.871576 63.270765) + (xy 91.867297 63.270743) + (xy 91.863053 63.271302) + (xy 91.863049 63.271302) + (xy 91.73766 63.28781) + (xy 91.582266 63.308268) + (xy 91.578126 63.309401) + (xy 91.578124 63.309401) + (xy 91.501311 63.330415) + (xy 91.304964 63.384129) + (xy 91.301016 63.385813) + (xy 91.044476 63.495237) + (xy 91.044472 63.495239) + (xy 91.040524 63.496923) + (xy 90.91596 63.571473) + (xy 90.797521 63.642357) + (xy 90.797517 63.64236) + (xy 90.793839 63.644561) + (xy 90.569472 63.824313) + (xy 90.371577 64.032851) + (xy 90.203814 64.266317) + (xy 90.069288 64.520392) + (xy 89.970489 64.790373) + (xy 89.909245 65.071264) + (xy 89.908909 65.075534) + (xy 89.891531 65.29635) + (xy 89.886689 65.357869) + (xy 89.903238 65.644883) + (xy 89.904063 65.649088) + (xy 89.904064 65.649096) + (xy 89.922198 65.741525) + (xy 89.958586 65.926995) + (xy 89.959973 65.931045) + (xy 89.959974 65.93105) + (xy 90.050321 66.19493) + (xy 90.05171 66.198986) + (xy 90.059085 66.21365) + (xy 90.17629 66.446685) + (xy 90.180885 66.455822) + (xy 90.343721 66.69275) + (xy 90.346608 66.695923) + (xy 90.346609 66.695924) + (xy 90.531092 66.898669) + (xy 90.537206 66.905388) + (xy 90.540501 66.908143) + (xy 90.540502 66.908144) + (xy 90.736205 67.071776) + (xy 90.757759 67.089798) + (xy 91.001298 67.242571) + (xy 91.263318 67.360877) + (xy 91.267437 67.362097) + (xy 91.534857 67.441311) + (xy 91.534862 67.441312) + (xy 91.53897 67.442529) + (xy 91.543204 67.443177) + (xy 91.543209 67.443178) + (xy 91.791811 67.481219) + (xy 91.823153 67.486015) + (xy 91.969485 67.488314) + (xy 92.106317 67.490464) + (xy 92.106323 67.490464) + (xy 92.110608 67.490531) + (xy 92.11486 67.490016) + (xy 92.114868 67.490016) + (xy 92.391756 67.456508) + (xy 92.391761 67.456507) + (xy 92.396017 67.455992) + (xy 92.618876 67.397526) + (xy 92.669954 67.384126) + (xy 92.669955 67.384126) + (xy 92.674097 67.383039) + (xy 92.767334 67.344419) + (xy 92.77752 67.3402) + (xy 92.84811 67.332611) + (xy 92.914833 67.367514) + (xy 95.91623 70.368911) + (xy 95.928616 70.383323) + (xy 95.937149 70.394918) + (xy 95.937154 70.394923) + (xy 95.941492 70.400818) + (xy 95.94707 70.405557) + (xy 95.947073 70.40556) + (xy 95.981768 70.435035) + (xy 95.989284 70.441965) + (xy 95.994979 70.44766) + (xy 95.997861 70.44994) + (xy 96.017251 70.465281) + (xy 96.020655 70.468072) + (xy 96.069285 70.509386) + (xy 96.076285 70.515333) + (xy 96.082801 70.518661) + (xy 96.08785 70.522028) + (xy 96.092979 70.525195) + (xy 96.098716 70.529734) + (xy 96.164875 70.560655) + (xy 96.168769 70.562558) + (xy 96.233808 70.595769) + (xy 96.240916 70.597508) + (xy 96.246559 70.599607) + (xy 96.252322 70.601524) + (xy 96.25895 70.604622) + (xy 96.32509 70.618379) + (xy 96.330412 70.619486) + (xy 96.334696 70.620456) + (xy 96.40561 70.637808) + (xy 96.411212 70.638156) + (xy 96.411215 70.638156) + (xy 96.416764 70.6385) + (xy 96.416762 70.638536) + (xy 96.420755 70.638775) + (xy 96.424947 70.639149) + (xy 96.432115 70.64064) + (xy 96.50952 70.638546) + (xy 96.512928 70.6385) + (xy 152.53293 70.6385) + (xy 152.55188 70.639933) + (xy 152.566115 70.642099) + (xy 152.566119 70.642099) + (xy 152.573349 70.643199) + (xy 152.580641 70.642606) + (xy 152.580644 70.642606) + (xy 152.626018 70.638915) + (xy 152.636233 70.6385) + (xy 152.644293 70.6385) + (xy 152.66168 70.636473) + (xy 152.672507 70.635211) + (xy 152.676882 70.634778) + (xy 152.742339 70.629454) + (xy 152.742342 70.629453) + (xy 152.749637 70.62886) + (xy 152.756601 70.626604) + (xy 152.76256 70.625413) + (xy 152.768415 70.624029) + (xy 152.775681 70.623182) + (xy 152.844327 70.598265) + (xy 152.848455 70.596848) + (xy 152.910936 70.576607) + (xy 152.910938 70.576606) + (xy 152.917899 70.574351) + (xy 152.924154 70.570555) + (xy 152.929628 70.568049) + (xy 152.935058 70.56533) + (xy 152.941937 70.562833) + (xy 152.948058 70.55882) + (xy 153.002976 70.522814) + (xy 153.00668 70.520477) + (xy 153.069107 70.482595) + (xy 153.077484 70.475197) + (xy 153.077508 70.475224) + (xy 153.0805 70.472571) + (xy 153.083733 70.469868) + (xy 153.089852 70.465856) + (xy 153.143128 70.409617) + (xy 153.145506 70.407175) + (xy 154.252086 69.300595) + (xy 154.314398 69.266569) + (xy 154.352162 69.264169) + (xy 154.474524 69.274874) + (xy 154.474525 69.274874) + (xy 154.48 69.275353) + (xy 154.701463 69.255978) + (xy 154.845051 69.217503) + (xy 154.910886 69.199863) + (xy 154.910888 69.199862) + (xy 154.916196 69.19844) + (xy 154.931403 69.191349) + (xy 155.11269 69.106814) + (xy 155.112695 69.106811) + (xy 155.117677 69.104488) + (xy 155.219505 69.033187) + (xy 155.29527 68.980136) + (xy 155.295273 68.980134) + (xy 155.299781 68.976977) + (xy 155.456977 68.819781) + (xy 155.505266 68.750818) + (xy 155.581331 68.642185) + (xy 155.581332 68.642183) + (xy 155.584488 68.637676) + (xy 155.586811 68.632694) + (xy 155.586814 68.632689) + (xy 155.676117 68.441178) + (xy 155.676118 68.441177) + (xy 155.67844 68.436196) + (xy 155.735978 68.221463) + (xy 155.755353 68) + (xy 155.735978 67.778537) + (xy 155.67844 67.563804) + (xy 155.642198 67.486082) + (xy 155.586814 67.367311) + (xy 155.586811 67.367306) + (xy 155.584488 67.362324) + (xy 155.563683 67.332611) + (xy 155.460136 67.18473) + (xy 155.460134 67.184727) + (xy 155.456977 67.180219) + (xy 155.299781 67.023023) + (xy 155.295273 67.019866) + (xy 155.29527 67.019864) + (xy 155.212484 66.961897) + (xy 155.117677 66.895512) + (xy 155.112695 66.893189) + (xy 155.11269 66.893186) + (xy 154.921178 66.803883) + (xy 154.921177 66.803882) + (xy 154.916196 66.80156) + (xy 154.910888 66.800138) + (xy 154.910886 66.800137) + (xy 154.814017 66.774181) + (xy 154.701463 66.744022) + (xy 154.48 66.724647) + (xy 154.258537 66.744022) + (xy 154.145983 66.774181) + (xy 154.049114 66.800137) + (xy 154.049112 66.800138) + (xy 154.043804 66.80156) + (xy 154.038823 66.803882) + (xy 154.038822 66.803883) + (xy 153.847311 66.893186) + (xy 153.847306 66.893189) + (xy 153.842324 66.895512) + (xy 153.837817 66.898668) + (xy 153.837815 66.898669) + (xy 153.66473 67.019864) + (xy 153.664727 67.019866) + (xy 153.660219 67.023023) + (xy 153.503023 67.180219) + (xy 153.499866 67.184727) + (xy 153.499864 67.18473) + (xy 153.396317 67.332611) + (xy 153.375512 67.362324) + (xy 153.373189 67.367306) + (xy 153.373186 67.367311) + (xy 153.324195 67.472373) + (xy 153.277277 67.525658) + (xy 153.209 67.545119) + (xy 153.14104 67.524577) + (xy 153.095805 67.472373) + (xy 153.046814 67.367311) + (xy 153.046811 67.367306) + (xy 153.044488 67.362324) + (xy 153.023683 67.332611) + (xy 152.920136 67.18473) + (xy 152.920134 67.184727) + (xy 152.916977 67.180219) + (xy 152.759781 67.023023) + (xy 152.755273 67.019866) + (xy 152.75527 67.019864) + (xy 152.672484 66.961897) + (xy 152.577677 66.895512) + (xy 152.572695 66.893189) + (xy 152.57269 66.893186) + (xy 152.381178 66.803883) + (xy 152.381177 66.803882) + (xy 152.376196 66.80156) + (xy 152.370888 66.800138) + (xy 152.370886 66.800137) + (xy 152.274017 66.774181) + (xy 152.161463 66.744022) + (xy 151.94 66.724647) + (xy 151.718537 66.744022) + (xy 151.605983 66.774181) + (xy 151.509114 66.800137) + (xy 151.509112 66.800138) + (xy 151.503804 66.80156) + (xy 151.498823 66.803882) + (xy 151.498822 66.803883) + (xy 151.307311 66.893186) + (xy 151.307306 66.893189) + (xy 151.302324 66.895512) + (xy 151.297817 66.898668) + (xy 151.297815 66.898669) + (xy 151.12473 67.019864) + (xy 151.124727 67.019866) + (xy 151.120219 67.023023) + (xy 150.963023 67.180219) + (xy 150.959866 67.184727) + (xy 150.959864 67.18473) + (xy 150.856317 67.332611) + (xy 150.835512 67.362324) + (xy 150.833189 67.367306) + (xy 150.833186 67.367311) + (xy 150.784195 67.472373) + (xy 150.737277 67.525658) + (xy 150.669 67.545119) + (xy 150.60104 67.524577) + (xy 150.555805 67.472373) + (xy 150.506814 67.367311) + (xy 150.506811 67.367306) + (xy 150.504488 67.362324) + (xy 150.483683 67.332611) + (xy 150.380136 67.18473) + (xy 150.380134 67.184727) + (xy 150.376977 67.180219) + (xy 150.219781 67.023023) + (xy 150.215273 67.019866) + (xy 150.21527 67.019864) + (xy 150.132484 66.961897) + (xy 150.037677 66.895512) + (xy 150.032695 66.893189) + (xy 150.03269 66.893186) + (xy 149.841178 66.803883) + (xy 149.841177 66.803882) + (xy 149.836196 66.80156) + (xy 149.830888 66.800138) + (xy 149.830886 66.800137) + (xy 149.734017 66.774181) + (xy 149.621463 66.744022) + (xy 149.4 66.724647) + (xy 149.178537 66.744022) + (xy 149.065983 66.774181) + (xy 148.969114 66.800137) + (xy 148.969112 66.800138) + (xy 148.963804 66.80156) + (xy 148.958823 66.803882) + (xy 148.958822 66.803883) + (xy 148.767311 66.893186) + (xy 148.767306 66.893189) + (xy 148.762324 66.895512) + (xy 148.757817 66.898668) + (xy 148.757815 66.898669) + (xy 148.58473 67.019864) + (xy 148.584727 67.019866) + (xy 148.580219 67.023023) + (xy 148.423023 67.180219) + (xy 148.419866 67.184727) + (xy 148.419864 67.18473) + (xy 148.316317 67.332611) + (xy 148.295512 67.362324) + (xy 148.293189 67.367306) + (xy 148.293186 67.367311) + (xy 148.244195 67.472373) + (xy 148.197277 67.525658) + (xy 148.129 67.545119) + (xy 148.06104 67.524577) + (xy 148.015805 67.472373) + (xy 147.966814 67.367311) + (xy 147.966811 67.367306) + (xy 147.964488 67.362324) + (xy 147.943683 67.332611) + (xy 147.840136 67.18473) + (xy 147.840134 67.184727) + (xy 147.836977 67.180219) + (xy 147.679781 67.023023) + (xy 147.675273 67.019866) + (xy 147.67527 67.019864) + (xy 147.592484 66.961897) + (xy 147.497677 66.895512) + (xy 147.492695 66.893189) + (xy 147.49269 66.893186) + (xy 147.301178 66.803883) + (xy 147.301177 66.803882) + (xy 147.296196 66.80156) + (xy 147.290888 66.800138) + (xy 147.290886 66.800137) + (xy 147.194017 66.774181) + (xy 147.081463 66.744022) + (xy 146.86 66.724647) + (xy 146.638537 66.744022) + (xy 146.525983 66.774181) + (xy 146.429114 66.800137) + (xy 146.429112 66.800138) + (xy 146.423804 66.80156) + (xy 146.418823 66.803882) + (xy 146.418822 66.803883) + (xy 146.227311 66.893186) + (xy 146.227306 66.893189) + (xy 146.222324 66.895512) + (xy 146.217817 66.898668) + (xy 146.217815 66.898669) + (xy 146.04473 67.019864) + (xy 146.044727 67.019866) + (xy 146.040219 67.023023) + (xy 145.883023 67.180219) + (xy 145.879866 67.184727) + (xy 145.879864 67.18473) + (xy 145.776317 67.332611) + (xy 145.755512 67.362324) + (xy 145.753189 67.367306) + (xy 145.753186 67.367311) + (xy 145.704195 67.472373) + (xy 145.657277 67.525658) + (xy 145.589 67.545119) + (xy 145.52104 67.524577) + (xy 145.475805 67.472373) + (xy 145.426814 67.367311) + (xy 145.426811 67.367306) + (xy 145.424488 67.362324) + (xy 145.403683 67.332611) + (xy 145.300136 67.18473) + (xy 145.300134 67.184727) + (xy 145.296977 67.180219) + (xy 145.139781 67.023023) + (xy 145.135273 67.019866) + (xy 145.13527 67.019864) + (xy 145.052484 66.961897) + (xy 144.957677 66.895512) + (xy 144.952695 66.893189) + (xy 144.95269 66.893186) + (xy 144.761178 66.803883) + (xy 144.761177 66.803882) + (xy 144.756196 66.80156) + (xy 144.750888 66.800138) + (xy 144.750886 66.800137) + (xy 144.654017 66.774181) + (xy 144.541463 66.744022) + (xy 144.32 66.724647) + (xy 144.098537 66.744022) + (xy 143.985983 66.774181) + (xy 143.889114 66.800137) + (xy 143.889112 66.800138) + (xy 143.883804 66.80156) + (xy 143.878823 66.803882) + (xy 143.878822 66.803883) + (xy 143.687311 66.893186) + (xy 143.687306 66.893189) + (xy 143.682324 66.895512) + (xy 143.677817 66.898668) + (xy 143.677815 66.898669) + (xy 143.50473 67.019864) + (xy 143.504727 67.019866) + (xy 143.500219 67.023023) + (xy 143.343023 67.180219) + (xy 143.339866 67.184727) + (xy 143.339864 67.18473) + (xy 143.236317 67.332611) + (xy 143.215512 67.362324) + (xy 143.213189 67.367306) + (xy 143.213186 67.367311) + (xy 143.164195 67.472373) + (xy 143.117277 67.525658) + (xy 143.049 67.545119) + (xy 142.98104 67.524577) + (xy 142.935805 67.472373) + (xy 142.886814 67.367311) + (xy 142.886811 67.367306) + (xy 142.884488 67.362324) + (xy 142.863683 67.332611) + (xy 142.760136 67.18473) + (xy 142.760134 67.184727) + (xy 142.756977 67.180219) + (xy 142.599781 67.023023) + (xy 142.595273 67.019866) + (xy 142.59527 67.019864) + (xy 142.512484 66.961897) + (xy 142.417677 66.895512) + (xy 142.412695 66.893189) + (xy 142.41269 66.893186) + (xy 142.221178 66.803883) + (xy 142.221177 66.803882) + (xy 142.216196 66.80156) + (xy 142.210888 66.800138) + (xy 142.210886 66.800137) + (xy 142.114017 66.774181) + (xy 142.001463 66.744022) + (xy 141.78 66.724647) + (xy 141.558537 66.744022) + (xy 141.445983 66.774181) + (xy 141.349114 66.800137) + (xy 141.349112 66.800138) + (xy 141.343804 66.80156) + (xy 141.338823 66.803882) + (xy 141.338822 66.803883) + (xy 141.147311 66.893186) + (xy 141.147306 66.893189) + (xy 141.142324 66.895512) + (xy 141.137817 66.898668) + (xy 141.137815 66.898669) + (xy 140.96473 67.019864) + (xy 140.964727 67.019866) + (xy 140.960219 67.023023) + (xy 140.803023 67.180219) + (xy 140.799866 67.184727) + (xy 140.799864 67.18473) + (xy 140.696317 67.332611) + (xy 140.675512 67.362324) + (xy 140.673189 67.367306) + (xy 140.673186 67.367311) + (xy 140.624195 67.472373) + (xy 140.577277 67.525658) + (xy 140.509 67.545119) + (xy 140.44104 67.524577) + (xy 140.395805 67.472373) + (xy 140.346814 67.367311) + (xy 140.346811 67.367306) + (xy 140.344488 67.362324) + (xy 140.323683 67.332611) + (xy 140.220136 67.18473) + (xy 140.220134 67.184727) + (xy 140.216977 67.180219) + (xy 140.059781 67.023023) + (xy 140.055273 67.019866) + (xy 140.05527 67.019864) + (xy 139.972484 66.961897) + (xy 139.877677 66.895512) + (xy 139.872695 66.893189) + (xy 139.87269 66.893186) + (xy 139.681178 66.803883) + (xy 139.681177 66.803882) + (xy 139.676196 66.80156) + (xy 139.670888 66.800138) + (xy 139.670886 66.800137) + (xy 139.574017 66.774181) + (xy 139.461463 66.744022) + (xy 139.24 66.724647) + (xy 139.018537 66.744022) + (xy 138.905983 66.774181) + (xy 138.809114 66.800137) + (xy 138.809112 66.800138) + (xy 138.803804 66.80156) + (xy 138.798823 66.803882) + (xy 138.798822 66.803883) + (xy 138.607311 66.893186) + (xy 138.607306 66.893189) + (xy 138.602324 66.895512) + (xy 138.597817 66.898668) + (xy 138.597815 66.898669) + (xy 138.42473 67.019864) + (xy 138.424727 67.019866) + (xy 138.420219 67.023023) + (xy 138.263023 67.180219) + (xy 138.259866 67.184727) + (xy 138.259864 67.18473) + (xy 138.156317 67.332611) + (xy 138.135512 67.362324) + (xy 138.133189 67.367306) + (xy 138.133186 67.367311) + (xy 138.084195 67.472373) + (xy 138.037277 67.525658) + (xy 137.969 67.545119) + (xy 137.90104 67.524577) + (xy 137.855805 67.472373) + (xy 137.806814 67.367311) + (xy 137.806811 67.367306) + (xy 137.804488 67.362324) + (xy 137.783683 67.332611) + (xy 137.680136 67.18473) + (xy 137.680134 67.184727) + (xy 137.676977 67.180219) + (xy 137.519781 67.023023) + (xy 137.515273 67.019866) + (xy 137.51527 67.019864) + (xy 137.432484 66.961897) + (xy 137.337677 66.895512) + (xy 137.332695 66.893189) + (xy 137.33269 66.893186) + (xy 137.141178 66.803883) + (xy 137.141177 66.803882) + (xy 137.136196 66.80156) + (xy 137.130888 66.800138) + (xy 137.130886 66.800137) + (xy 137.034017 66.774181) + (xy 136.921463 66.744022) + (xy 136.7 66.724647) + (xy 136.478537 66.744022) + (xy 136.365983 66.774181) + (xy 136.269114 66.800137) + (xy 136.269112 66.800138) + (xy 136.263804 66.80156) + (xy 136.258823 66.803882) + (xy 136.258822 66.803883) + (xy 136.067311 66.893186) + (xy 136.067306 66.893189) + (xy 136.062324 66.895512) + (xy 136.057817 66.898668) + (xy 136.057815 66.898669) + (xy 135.88473 67.019864) + (xy 135.884727 67.019866) + (xy 135.880219 67.023023) + (xy 135.723023 67.180219) + (xy 135.719866 67.184727) + (xy 135.719864 67.18473) + (xy 135.616317 67.332611) + (xy 135.595512 67.362324) + (xy 135.593189 67.367306) + (xy 135.593186 67.367311) + (xy 135.544195 67.472373) + (xy 135.497277 67.525658) + (xy 135.429 67.545119) + (xy 135.36104 67.524577) + (xy 135.315805 67.472373) + (xy 135.266814 67.367311) + (xy 135.266811 67.367306) + (xy 135.264488 67.362324) + (xy 135.243683 67.332611) + (xy 135.140136 67.18473) + (xy 135.140134 67.184727) + (xy 135.136977 67.180219) + (xy 134.979781 67.023023) + (xy 134.975273 67.019866) + (xy 134.97527 67.019864) + (xy 134.892484 66.961897) + (xy 134.797677 66.895512) + (xy 134.792695 66.893189) + (xy 134.79269 66.893186) + (xy 134.601178 66.803883) + (xy 134.601177 66.803882) + (xy 134.596196 66.80156) + (xy 134.590888 66.800138) + (xy 134.590886 66.800137) + (xy 134.494017 66.774181) + (xy 134.381463 66.744022) + (xy 134.16 66.724647) + (xy 133.938537 66.744022) + (xy 133.825983 66.774181) + (xy 133.729114 66.800137) + (xy 133.729112 66.800138) + (xy 133.723804 66.80156) + (xy 133.718823 66.803882) + (xy 133.718822 66.803883) + (xy 133.527311 66.893186) + (xy 133.527306 66.893189) + (xy 133.522324 66.895512) + (xy 133.517817 66.898668) + (xy 133.517815 66.898669) + (xy 133.34473 67.019864) + (xy 133.344727 67.019866) + (xy 133.340219 67.023023) + (xy 133.183023 67.180219) + (xy 133.179866 67.184727) + (xy 133.179864 67.18473) + (xy 133.076317 67.332611) + (xy 133.055512 67.362324) + (xy 133.053189 67.367306) + (xy 133.053186 67.367311) + (xy 133.004195 67.472373) + (xy 132.957277 67.525658) + (xy 132.889 67.545119) + (xy 132.82104 67.524577) + (xy 132.775805 67.472373) + (xy 132.726814 67.367311) + (xy 132.726811 67.367306) + (xy 132.724488 67.362324) + (xy 132.703683 67.332611) + (xy 132.600136 67.18473) + (xy 132.600134 67.184727) + (xy 132.596977 67.180219) + (xy 132.439781 67.023023) + (xy 132.435273 67.019866) + (xy 132.43527 67.019864) + (xy 132.352484 66.961897) + (xy 132.257677 66.895512) + (xy 132.252695 66.893189) + (xy 132.25269 66.893186) + (xy 132.061178 66.803883) + (xy 132.061177 66.803882) + (xy 132.056196 66.80156) + (xy 132.050888 66.800138) + (xy 132.050886 66.800137) + (xy 131.954017 66.774181) + (xy 131.841463 66.744022) + (xy 131.62 66.724647) + (xy 131.398537 66.744022) + (xy 131.285983 66.774181) + (xy 131.189114 66.800137) + (xy 131.189112 66.800138) + (xy 131.183804 66.80156) + (xy 131.178823 66.803882) + (xy 131.178822 66.803883) + (xy 130.987311 66.893186) + (xy 130.987306 66.893189) + (xy 130.982324 66.895512) + (xy 130.977817 66.898668) + (xy 130.977815 66.898669) + (xy 130.80473 67.019864) + (xy 130.804727 67.019866) + (xy 130.800219 67.023023) + (xy 130.643023 67.180219) + (xy 130.639866 67.184727) + (xy 130.639864 67.18473) + (xy 130.536317 67.332611) + (xy 130.515512 67.362324) + (xy 130.513189 67.367306) + (xy 130.513186 67.367311) + (xy 130.464195 67.472373) + (xy 130.417277 67.525658) + (xy 130.349 67.545119) + (xy 130.28104 67.524577) + (xy 130.235805 67.472373) + (xy 130.186814 67.367311) + (xy 130.186811 67.367306) + (xy 130.184488 67.362324) + (xy 130.163683 67.332611) + (xy 130.060136 67.18473) + (xy 130.060134 67.184727) + (xy 130.056977 67.180219) + (xy 129.899781 67.023023) + (xy 129.895273 67.019866) + (xy 129.89527 67.019864) + (xy 129.812484 66.961897) + (xy 129.717677 66.895512) + (xy 129.712695 66.893189) + (xy 129.71269 66.893186) + (xy 129.521178 66.803883) + (xy 129.521177 66.803882) + (xy 129.516196 66.80156) + (xy 129.510888 66.800138) + (xy 129.510886 66.800137) + (xy 129.414017 66.774181) + (xy 129.301463 66.744022) + (xy 129.08 66.724647) + (xy 128.858537 66.744022) + (xy 128.745983 66.774181) + (xy 128.649114 66.800137) + (xy 128.649112 66.800138) + (xy 128.643804 66.80156) + (xy 128.638823 66.803882) + (xy 128.638822 66.803883) + (xy 128.447311 66.893186) + (xy 128.447306 66.893189) + (xy 128.442324 66.895512) + (xy 128.437817 66.898668) + (xy 128.437815 66.898669) + (xy 128.26473 67.019864) + (xy 128.264727 67.019866) + (xy 128.260219 67.023023) + (xy 128.103023 67.180219) + (xy 128.099866 67.184727) + (xy 128.099864 67.18473) + (xy 127.996317 67.332611) + (xy 127.975512 67.362324) + (xy 127.973189 67.367306) + (xy 127.973186 67.367311) + (xy 127.924195 67.472373) + (xy 127.877277 67.525658) + (xy 127.809 67.545119) + (xy 127.74104 67.524577) + (xy 127.695805 67.472373) + (xy 127.646814 67.367311) + (xy 127.646811 67.367306) + (xy 127.644488 67.362324) + (xy 127.623683 67.332611) + (xy 127.520136 67.18473) + (xy 127.520134 67.184727) + (xy 127.516977 67.180219) + (xy 127.359781 67.023023) + (xy 127.355273 67.019866) + (xy 127.35527 67.019864) + (xy 127.272484 66.961897) + (xy 127.177677 66.895512) + (xy 127.172695 66.893189) + (xy 127.17269 66.893186) + (xy 126.981178 66.803883) + (xy 126.981177 66.803882) + (xy 126.976196 66.80156) + (xy 126.970888 66.800138) + (xy 126.970886 66.800137) + (xy 126.874017 66.774181) + (xy 126.761463 66.744022) + (xy 126.54 66.724647) + (xy 126.318537 66.744022) + (xy 126.205983 66.774181) + (xy 126.109114 66.800137) + (xy 126.109112 66.800138) + (xy 126.103804 66.80156) + (xy 126.098823 66.803882) + (xy 126.098822 66.803883) + (xy 125.907311 66.893186) + (xy 125.907306 66.893189) + (xy 125.902324 66.895512) + (xy 125.897817 66.898668) + (xy 125.897815 66.898669) + (xy 125.72473 67.019864) + (xy 125.724727 67.019866) + (xy 125.720219 67.023023) + (xy 125.563023 67.180219) + (xy 125.559866 67.184727) + (xy 125.559864 67.18473) + (xy 125.456317 67.332611) + (xy 125.435512 67.362324) + (xy 125.433189 67.367306) + (xy 125.433186 67.367311) + (xy 125.384195 67.472373) + (xy 125.337277 67.525658) + (xy 125.269 67.545119) + (xy 125.20104 67.524577) + (xy 125.155805 67.472373) + (xy 125.106814 67.367311) + (xy 125.106811 67.367306) + (xy 125.104488 67.362324) + (xy 125.083683 67.332611) + (xy 124.980136 67.18473) + (xy 124.980134 67.184727) + (xy 124.976977 67.180219) + (xy 124.819781 67.023023) + (xy 124.815273 67.019866) + (xy 124.81527 67.019864) + (xy 124.732484 66.961897) + (xy 124.637677 66.895512) + (xy 124.632695 66.893189) + (xy 124.63269 66.893186) + (xy 124.441178 66.803883) + (xy 124.441177 66.803882) + (xy 124.436196 66.80156) + (xy 124.430888 66.800138) + (xy 124.430886 66.800137) + (xy 124.334017 66.774181) + (xy 124.221463 66.744022) + (xy 124 66.724647) + (xy 123.778537 66.744022) + (xy 123.665983 66.774181) + (xy 123.569114 66.800137) + (xy 123.569112 66.800138) + (xy 123.563804 66.80156) + (xy 123.558823 66.803882) + (xy 123.558822 66.803883) + (xy 123.367311 66.893186) + (xy 123.367306 66.893189) + (xy 123.362324 66.895512) + (xy 123.357817 66.898668) + (xy 123.357815 66.898669) + (xy 123.18473 67.019864) + (xy 123.184727 67.019866) + (xy 123.180219 67.023023) + (xy 123.023023 67.180219) + (xy 123.019866 67.184727) + (xy 123.019864 67.18473) + (xy 122.916317 67.332611) + (xy 122.895512 67.362324) + (xy 122.893189 67.367306) + (xy 122.893186 67.367311) + (xy 122.844195 67.472373) + (xy 122.797277 67.525658) + (xy 122.729 67.545119) + (xy 122.66104 67.524577) + (xy 122.615805 67.472373) + (xy 122.566814 67.367311) + (xy 122.566811 67.367306) + (xy 122.564488 67.362324) + (xy 122.543683 67.332611) + (xy 122.440136 67.18473) + (xy 122.440134 67.184727) + (xy 122.436977 67.180219) + (xy 122.279781 67.023023) + (xy 122.275259 67.019856) + (xy 122.272229 67.017735) + (xy 122.271203 67.016452) + (xy 122.271057 67.016329) + (xy 122.271082 67.0163) + (xy 122.227901 66.962278) + (xy 122.2185 66.914522) + (xy 122.2185 66.52707) + (xy 122.219933 66.50812) + (xy 122.222099 66.493885) + (xy 122.222099 66.493881) + (xy 122.223199 66.486651) + (xy 122.220692 66.455822) + (xy 122.218915 66.433982) + (xy 122.2185 66.423767) + (xy 122.2185 66.415707) + (xy 122.215209 66.38748) + (xy 122.214778 66.383121) + (xy 122.209454 66.317662) + (xy 122.209453 66.317659) + (xy 122.20886 66.310364) + (xy 122.206604 66.3034) + (xy 122.205417 66.297461) + (xy 122.20403 66.29159) + (xy 122.203182 66.284319) + (xy 122.200686 66.277443) + (xy 122.200684 66.277434) + (xy 122.178275 66.215702) + (xy 122.176865 66.211598) + (xy 122.154352 66.142101) + (xy 122.150556 66.135846) + (xy 122.148057 66.130387) + (xy 122.145329 66.124939) + (xy 122.142833 66.118063) + (xy 122.102805 66.05701) + (xy 122.100481 66.053327) + (xy 122.0655 65.99568) + (xy 122.065499 65.995679) + (xy 122.062595 65.990893) + (xy 122.055198 65.982517) + (xy 122.055225 65.982493) + (xy 122.05257 65.979499) + (xy 122.049868 65.976268) + (xy 122.045856 65.970148) + (xy 121.989617 65.916872) + (xy 121.987175 65.914494) + (xy 115.58377 59.511089) + (xy 115.571384 59.496677) + (xy 115.562851 59.485082) + (xy 115.562846 59.485077) + (xy 115.558508 59.479182) + (xy 115.55293 59.474443) + (xy 115.552927 59.47444) + (xy 115.518232 59.444965) + (xy 115.510716 59.438035) + (xy 115.505021 59.43234) + (xy 115.49888 59.427482) + (xy 115.482749 59.414719) + (xy 115.479345 59.411928) + (xy 115.429297 59.369409) + (xy 115.429295 59.369408) + (xy 115.423715 59.364667) + (xy 115.417199 59.361339) + (xy 115.41215 59.357972) + (xy 115.407021 59.354805) + (xy 115.401284 59.350266) + (xy 115.335125 59.319345) + (xy 115.331225 59.317439) + (xy 115.266192 59.284231) + (xy 115.259084 59.282492) + (xy 115.253441 59.280393) + (xy 115.247678 59.278476) + (xy 115.24105 59.275378) + (xy 115.169583 59.260513) + (xy 115.165299 59.259543) + (xy 115.09439 59.242192) + (xy 115.088788 59.241844) + (xy 115.088785 59.241844) + (xy 115.083236 59.2415) + (xy 115.083238 59.241464) + (xy 115.079245 59.241225) + (xy 115.075053 59.240851) + (xy 115.067885 59.23936) + (xy 115.001675 59.241151) + (xy 114.990479 59.241454) + (xy 114.987072 59.2415) + (xy 99.366371 59.2415) + (xy 99.29825 59.221498) + (xy 99.277276 59.204595) + (xy 94.612681 54.54) + (xy 154.226807 54.54) + (xy 154.245542 54.754142) + (xy 154.301178 54.961777) + (xy 154.3035 54.966757) + (xy 154.303501 54.966759) + (xy 154.347128 55.060316) + (xy 154.392024 55.156596) + (xy 154.515319 55.332681) + (xy 154.667319 55.484681) + (xy 154.843403 55.607976) + (xy 154.848381 55.610297) + (xy 154.848384 55.610299) + (xy 155.033241 55.696499) + (xy 155.038223 55.698822) + (xy 155.043531 55.700244) + (xy 155.043533 55.700245) + (xy 155.240543 55.753034) + (xy 155.240545 55.753034) + (xy 155.245858 55.754458) + (xy 155.46 55.773193) + (xy 155.674142 55.754458) + (xy 155.679455 55.753034) + (xy 155.679457 55.753034) + (xy 155.876467 55.700245) + (xy 155.876469 55.700244) + (xy 155.881777 55.698822) + (xy 155.886759 55.696499) + (xy 156.071616 55.610299) + (xy 156.071619 55.610297) + (xy 156.076597 55.607976) + (xy 156.252681 55.484681) + (xy 156.404681 55.332681) + (xy 156.527976 55.156596) + (xy 156.572873 55.060316) + (xy 156.616499 54.966759) + (xy 156.6165 54.966757) + (xy 156.618822 54.961777) + (xy 156.674458 54.754142) + (xy 156.693193 54.54) + (xy 156.674458 54.325858) + (xy 156.618822 54.118223) + (xy 156.605362 54.089357) + (xy 156.530299 53.928385) + (xy 156.530297 53.928382) + (xy 156.527976 53.923404) + (xy 156.404681 53.747319) + (xy 156.252681 53.595319) + (xy 156.076597 53.472024) + (xy 156.071619 53.469703) + (xy 156.071616 53.469701) + (xy 155.886759 53.383501) + (xy 155.886758 53.3835) + (xy 155.881777 53.381178) + (xy 155.876469 53.379756) + (xy 155.876467 53.379755) + (xy 155.679457 53.326966) + (xy 155.679455 53.326966) + (xy 155.674142 53.325542) + (xy 155.46 53.306807) + (xy 155.245858 53.325542) + (xy 155.240545 53.326966) + (xy 155.240543 53.326966) + (xy 155.043533 53.379755) + (xy 155.043531 53.379756) + (xy 155.038223 53.381178) + (xy 155.033243 53.3835) + (xy 155.033241 53.383501) + (xy 154.848385 53.469701) + (xy 154.848382 53.469703) + (xy 154.843404 53.472024) + (xy 154.667319 53.595319) + (xy 154.515319 53.747319) + (xy 154.392024 53.923404) + (xy 154.389703 53.928382) + (xy 154.389701 53.928385) + (xy 154.314638 54.089357) + (xy 154.301178 54.118223) + (xy 154.245542 54.325858) + (xy 154.226807 54.54) + (xy 94.612681 54.54) + (xy 93.463769 53.391088) + (xy 93.451383 53.376676) + (xy 93.44285 53.365081) + (xy 93.442845 53.365076) + (xy 93.438507 53.359181) + (xy 93.432929 53.354442) + (xy 93.432926 53.354439) + (xy 93.398231 53.324964) + (xy 93.390715 53.318034) + (xy 93.38502 53.312339) + (xy 93.371248 53.301443) + (xy 93.362748 53.294718) + (xy 93.359344 53.291927) + (xy 93.349026 53.283161) + (xy 93.310062 53.223812) + (xy 93.305086 53.176155) + (xy 93.313019 53.085486) + (xy 93.313019 53.085475) + (xy 93.313498 53.08) + (xy 93.293543 52.851913) + (xy 93.291503 52.8443) + (xy 93.235707 52.636067) + (xy 93.235706 52.636065) + (xy 93.234284 52.630757) + (xy 93.231961 52.625775) + (xy 93.139849 52.428238) + (xy 93.139846 52.428233) + (xy 93.137523 52.423251) + (xy 93.05227 52.301498) + (xy 93.009357 52.240211) + (xy 93.009355 52.240208) + (xy 93.006198 52.2357) + (xy 92.8443 52.073802) + (xy 92.839792 52.070645) + (xy 92.839789 52.070643) + (xy 92.7389 52) + (xy 98.526502 52) + (xy 98.546457 52.228087) + (xy 98.547881 52.2334) + (xy 98.547881 52.233402) + (xy 98.596934 52.416467) + (xy 98.605716 52.449243) + (xy 98.608039 52.454224) + (xy 98.608039 52.454225) + (xy 98.700151 52.651762) + (xy 98.700154 52.651767) + (xy 98.702477 52.656749) + (xy 98.746033 52.718953) + (xy 98.794499 52.788169) + (xy 98.833802 52.8443) + (xy 98.9957 53.006198) + (xy 99.000208 53.009355) + (xy 99.000211 53.009357) + (xy 99.078389 53.064098) + (xy 99.183251 53.137523) + (xy 99.188233 53.139846) + (xy 99.188238 53.139849) + (xy 99.385775 53.231961) + (xy 99.390757 53.234284) + (xy 99.396065 53.235706) + (xy 99.396067 53.235707) + (xy 99.606598 53.292119) + (xy 99.6066 53.292119) + (xy 99.611913 53.293543) + (xy 99.84 53.313498) + (xy 100.068087 53.293543) + (xy 100.0734 53.292119) + (xy 100.073402 53.292119) + (xy 100.283933 53.235707) + (xy 100.283935 53.235706) + (xy 100.289243 53.234284) + (xy 100.294225 53.231961) + (xy 100.491762 53.139849) + (xy 100.491767 53.139846) + (xy 100.496749 53.137523) + (xy 100.601611 53.064098) + (xy 100.679789 53.009357) + (xy 100.679792 53.009355) + (xy 100.6843 53.006198) + (xy 100.846198 52.8443) + (xy 100.885502 52.788169) + (xy 100.933967 52.718953) + (xy 100.977523 52.656749) + (xy 100.979846 52.651767) + (xy 100.979849 52.651762) + (xy 101.071961 52.454225) + (xy 101.071961 52.454224) + (xy 101.074284 52.449243) + (xy 101.083067 52.416467) + (xy 101.132119 52.233402) + (xy 101.132119 52.2334) + (xy 101.133543 52.228087) + (xy 101.153498 52) + (xy 108.686502 52) + (xy 108.706457 52.228087) + (xy 108.707881 52.2334) + (xy 108.707881 52.233402) + (xy 108.756934 52.416467) + (xy 108.765716 52.449243) + (xy 108.768039 52.454224) + (xy 108.768039 52.454225) + (xy 108.860151 52.651762) + (xy 108.860154 52.651767) + (xy 108.862477 52.656749) + (xy 108.906033 52.718953) + (xy 108.954499 52.788169) + (xy 108.993802 52.8443) + (xy 109.1557 53.006198) + (xy 109.160208 53.009355) + (xy 109.160211 53.009357) + (xy 109.238389 53.064098) + (xy 109.343251 53.137523) + (xy 109.348233 53.139846) + (xy 109.348238 53.139849) + (xy 109.545775 53.231961) + (xy 109.550757 53.234284) + (xy 109.556065 53.235706) + (xy 109.556067 53.235707) + (xy 109.766598 53.292119) + (xy 109.7666 53.292119) + (xy 109.771913 53.293543) + (xy 110 53.313498) + (xy 110.228087 53.293543) + (xy 110.2334 53.292119) + (xy 110.233402 53.292119) + (xy 110.443933 53.235707) + (xy 110.443935 53.235706) + (xy 110.449243 53.234284) + (xy 110.454225 53.231961) + (xy 110.651762 53.139849) + (xy 110.651767 53.139846) + (xy 110.656749 53.137523) + (xy 110.761611 53.064098) + (xy 110.839789 53.009357) + (xy 110.839792 53.009355) + (xy 110.8443 53.006198) + (xy 111.006198 52.8443) + (xy 111.045502 52.788169) + (xy 111.093967 52.718953) + (xy 111.137523 52.656749) + (xy 111.139846 52.651767) + (xy 111.139849 52.651762) + (xy 111.231961 52.454225) + (xy 111.231961 52.454224) + (xy 111.234284 52.449243) + (xy 111.243067 52.416467) + (xy 111.292119 52.233402) + (xy 111.292119 52.2334) + (xy 111.293543 52.228087) + (xy 111.313498 52) + (xy 111.293543 51.771913) + (xy 111.290913 51.762099) + (xy 111.235707 51.556067) + (xy 111.235706 51.556065) + (xy 111.234284 51.550757) + (xy 111.217572 51.514918) + (xy 111.139849 51.348238) + (xy 111.139846 51.348233) + (xy 111.137523 51.343251) + (xy 111.05227 51.221498) + (xy 111.009357 51.160211) + (xy 111.009355 51.160208) + (xy 111.006198 51.1557) + (xy 110.8443 50.993802) + (xy 110.839792 50.990645) + (xy 110.839789 50.990643) + (xy 110.756072 50.932024) + (xy 110.656749 50.862477) + (xy 110.651767 50.860154) + (xy 110.651762 50.860151) + (xy 110.454225 50.768039) + (xy 110.454224 50.768039) + (xy 110.449243 50.765716) + (xy 110.443935 50.764294) + (xy 110.443933 50.764293) + (xy 110.233402 50.707881) + (xy 110.2334 50.707881) + (xy 110.228087 50.706457) + (xy 110 50.686502) + (xy 109.771913 50.706457) + (xy 109.7666 50.707881) + (xy 109.766598 50.707881) + (xy 109.556067 50.764293) + (xy 109.556065 50.764294) + (xy 109.550757 50.765716) + (xy 109.545776 50.768039) + (xy 109.545775 50.768039) + (xy 109.348238 50.860151) + (xy 109.348233 50.860154) + (xy 109.343251 50.862477) + (xy 109.243928 50.932024) + (xy 109.160211 50.990643) + (xy 109.160208 50.990645) + (xy 109.1557 50.993802) + (xy 108.993802 51.1557) + (xy 108.990645 51.160208) + (xy 108.990643 51.160211) + (xy 108.94773 51.221498) + (xy 108.862477 51.343251) + (xy 108.860154 51.348233) + (xy 108.860151 51.348238) + (xy 108.782428 51.514918) + (xy 108.765716 51.550757) + (xy 108.764294 51.556065) + (xy 108.764293 51.556067) + (xy 108.709087 51.762099) + (xy 108.706457 51.771913) + (xy 108.686502 52) + (xy 101.153498 52) + (xy 101.133543 51.771913) + (xy 101.130913 51.762099) + (xy 101.075707 51.556067) + (xy 101.075706 51.556065) + (xy 101.074284 51.550757) + (xy 101.057572 51.514918) + (xy 100.979849 51.348238) + (xy 100.979846 51.348233) + (xy 100.977523 51.343251) + (xy 100.89227 51.221498) + (xy 100.849357 51.160211) + (xy 100.849355 51.160208) + (xy 100.846198 51.1557) + (xy 100.6843 50.993802) + (xy 100.679792 50.990645) + (xy 100.679789 50.990643) + (xy 100.596072 50.932024) + (xy 100.496749 50.862477) + (xy 100.491767 50.860154) + (xy 100.491762 50.860151) + (xy 100.294225 50.768039) + (xy 100.294224 50.768039) + (xy 100.289243 50.765716) + (xy 100.283935 50.764294) + (xy 100.283933 50.764293) + (xy 100.073402 50.707881) + (xy 100.0734 50.707881) + (xy 100.068087 50.706457) + (xy 99.84 50.686502) + (xy 99.611913 50.706457) + (xy 99.6066 50.707881) + (xy 99.606598 50.707881) + (xy 99.396067 50.764293) + (xy 99.396065 50.764294) + (xy 99.390757 50.765716) + (xy 99.385776 50.768039) + (xy 99.385775 50.768039) + (xy 99.188238 50.860151) + (xy 99.188233 50.860154) + (xy 99.183251 50.862477) + (xy 99.083928 50.932024) + (xy 99.000211 50.990643) + (xy 99.000208 50.990645) + (xy 98.9957 50.993802) + (xy 98.833802 51.1557) + (xy 98.830645 51.160208) + (xy 98.830643 51.160211) + (xy 98.78773 51.221498) + (xy 98.702477 51.343251) + (xy 98.700154 51.348233) + (xy 98.700151 51.348238) + (xy 98.622428 51.514918) + (xy 98.605716 51.550757) + (xy 98.604294 51.556065) + (xy 98.604293 51.556067) + (xy 98.549087 51.762099) + (xy 98.546457 51.771913) + (xy 98.526502 52) + (xy 92.7389 52) + (xy 92.668962 51.951029) + (xy 92.656749 51.942477) + (xy 92.651767 51.940154) + (xy 92.651762 51.940151) + (xy 92.454225 51.848039) + (xy 92.454224 51.848039) + (xy 92.449243 51.845716) + (xy 92.443935 51.844294) + (xy 92.443933 51.844293) + (xy 92.233402 51.787881) + (xy 92.2334 51.787881) + (xy 92.228087 51.786457) + (xy 92 51.766502) + (xy 91.994525 51.766981) + (xy 91.837087 51.780755) + (xy 91.767482 51.766766) + (xy 91.73701 51.744329) + (xy 88.992681 49) + (xy 117.184647 49) + (xy 117.204022 49.221463) + (xy 117.26156 49.436196) + (xy 117.263882 49.441177) + (xy 117.263883 49.441178) + (xy 117.353186 49.632689) + (xy 117.353189 49.632694) + (xy 117.355512 49.637676) + (xy 117.358668 49.642183) + (xy 117.358669 49.642185) + (xy 117.468767 49.799421) + (xy 117.483023 49.819781) + (xy 117.640219 49.976977) + (xy 117.644727 49.980134) + (xy 117.64473 49.980136) + (xy 117.690134 50.011928) + (xy 117.822323 50.104488) + (xy 117.827305 50.106811) + (xy 117.82731 50.106814) + (xy 117.958186 50.167842) + (xy 118.023804 50.19844) + (xy 118.029112 50.199862) + (xy 118.029114 50.199863) + (xy 118.094949 50.217503) + (xy 118.238537 50.255978) + (xy 118.46 50.275353) + (xy 118.465475 50.274874) + (xy 118.465476 50.274874) + (xy 118.587838 50.264169) + (xy 118.657442 50.278158) + (xy 118.687914 50.300595) + (xy 119.87623 51.488911) + (xy 119.888616 51.503323) + (xy 119.897149 51.514918) + (xy 119.897154 51.514923) + (xy 119.901492 51.520818) + (xy 119.90707 51.525557) + (xy 119.907073 51.52556) + (xy 119.941768 51.555035) + (xy 119.949284 51.561965) + (xy 119.954979 51.56766) + (xy 119.957861 51.56994) + (xy 119.977251 51.585281) + (xy 119.980655 51.588072) + (xy 120.030703 51.630591) + (xy 120.036285 51.635333) + (xy 120.042801 51.638661) + (xy 120.04785 51.642028) + (xy 120.052979 51.645195) + (xy 120.058716 51.649734) + (xy 120.124875 51.680655) + (xy 120.128769 51.682558) + (xy 120.193808 51.715769) + (xy 120.200916 51.717508) + (xy 120.206559 51.719607) + (xy 120.212322 51.721524) + (xy 120.21895 51.724622) + (xy 120.226112 51.726112) + (xy 120.226113 51.726112) + (xy 120.290412 51.739486) + (xy 120.294696 51.740456) + (xy 120.36561 51.757808) + (xy 120.371212 51.758156) + (xy 120.371215 51.758156) + (xy 120.376764 51.7585) + (xy 120.376762 51.758536) + (xy 120.380755 51.758775) + (xy 120.384947 51.759149) + (xy 120.392115 51.76064) + (xy 120.46952 51.758546) + (xy 120.472928 51.7585) + (xy 134.17293 51.7585) + (xy 134.19188 51.759933) + (xy 134.206115 51.762099) + (xy 134.206119 51.762099) + (xy 134.213349 51.763199) + (xy 134.220641 51.762606) + (xy 134.220644 51.762606) + (xy 134.266018 51.758915) + (xy 134.276233 51.7585) + (xy 134.284293 51.7585) + (xy 134.30168 51.756473) + (xy 134.312507 51.755211) + (xy 134.316882 51.754778) + (xy 134.382339 51.749454) + (xy 134.382342 51.749453) + (xy 134.389637 51.74886) + (xy 134.396601 51.746604) + (xy 134.40256 51.745413) + (xy 134.408415 51.744029) + (xy 134.415681 51.743182) + (xy 134.484327 51.718265) + (xy 134.488455 51.716848) + (xy 134.550936 51.696607) + (xy 134.550938 51.696606) + (xy 134.557899 51.694351) + (xy 134.564154 51.690555) + (xy 134.569628 51.688049) + (xy 134.575058 51.68533) + (xy 134.581937 51.682833) + (xy 134.607287 51.666213) + (xy 134.642976 51.642814) + (xy 134.64668 51.640477) + (xy 134.709107 51.602595) + (xy 134.717484 51.595197) + (xy 134.717508 51.595224) + (xy 134.7205 51.592571) + (xy 134.723733 51.589868) + (xy 134.729852 51.585856) + (xy 134.783128 51.529617) + (xy 134.785506 51.527175) + (xy 136.012086 50.300595) + (xy 136.074398 50.266569) + (xy 136.112162 50.264169) + (xy 136.234524 50.274874) + (xy 136.234525 50.274874) + (xy 136.24 50.275353) + (xy 136.461463 50.255978) + (xy 136.605051 50.217503) + (xy 136.670886 50.199863) + (xy 136.670888 50.199862) + (xy 136.676196 50.19844) + (xy 136.741814 50.167842) + (xy 136.87269 50.106814) + (xy 136.872695 50.106811) + (xy 136.877677 50.104488) + (xy 137.009866 50.011928) + (xy 137.05527 49.980136) + (xy 137.055273 49.980134) + (xy 137.059781 49.976977) + (xy 137.216977 49.819781) + (xy 137.231234 49.799421) + (xy 137.341331 49.642185) + (xy 137.341332 49.642183) + (xy 137.344488 49.637676) + (xy 137.346811 49.632694) + (xy 137.346814 49.632689) + (xy 137.436117 49.441178) + (xy 137.436118 49.441177) + (xy 137.43844 49.436196) + (xy 137.495978 49.221463) + (xy 137.515353 49) + (xy 137.495978 48.778537) + (xy 137.457503 48.634949) + (xy 137.439863 48.569114) + (xy 137.439862 48.569112) + (xy 137.43844 48.563804) + (xy 137.420148 48.524577) + (xy 137.346814 48.367311) + (xy 137.346811 48.367306) + (xy 137.344488 48.362324) + (xy 137.299816 48.298525) + (xy 137.220136 48.18473) + (xy 137.220134 48.184727) + (xy 137.216977 48.180219) + (xy 137.059781 48.023023) + (xy 137.055273 48.019866) + (xy 137.05527 48.019864) + (xy 136.979505 47.966813) + (xy 136.877677 47.895512) + (xy 136.872695 47.893189) + (xy 136.87269 47.893186) + (xy 136.767035 47.843919) + (xy 136.71375 47.797002) + (xy 136.694289 47.728725) + (xy 136.714831 47.660765) + (xy 136.767035 47.615529) + (xy 136.872445 47.566376) + (xy 136.881931 47.560898) + (xy 136.925764 47.530207) + (xy 136.934139 47.519729) + (xy 136.927071 47.506281) + (xy 136.252812 46.832022) + (xy 136.238868 46.824408) + (xy 136.237035 46.824539) + (xy 136.23042 46.82879) + (xy 135.552207 47.507003) + (xy 135.545777 47.518777) + (xy 135.555074 47.530793) + (xy 135.598069 47.560898) + (xy 135.607555 47.566376) + (xy 135.712965 47.615529) + (xy 135.76625 47.662446) + (xy 135.785711 47.730723) + (xy 135.765169 47.798683) + (xy 135.712965 47.843919) + (xy 135.607311 47.893186) + (xy 135.607306 47.893189) + (xy 135.602324 47.895512) + (xy 135.597817 47.898668) + (xy 135.597815 47.898669) + (xy 135.42473 48.019864) + (xy 135.424727 48.019866) + (xy 135.420219 48.023023) + (xy 135.263023 48.180219) + (xy 135.259866 48.184727) + (xy 135.259864 48.18473) + (xy 135.180184 48.298525) + (xy 135.135512 48.362324) + (xy 135.133189 48.367306) + (xy 135.133186 48.367311) + (xy 135.084195 48.472373) + (xy 135.037277 48.525658) + (xy 134.969 48.545119) + (xy 134.90104 48.524577) + (xy 134.855805 48.472373) + (xy 134.806814 48.367311) + (xy 134.806811 48.367306) + (xy 134.804488 48.362324) + (xy 134.759816 48.298525) + (xy 134.680136 48.18473) + (xy 134.680134 48.184727) + (xy 134.676977 48.180219) + (xy 134.519781 48.023023) + (xy 134.515273 48.019866) + (xy 134.51527 48.019864) + (xy 134.439505 47.966813) + (xy 134.337677 47.895512) + (xy 134.332695 47.893189) + (xy 134.33269 47.893186) + (xy 134.227627 47.844195) + (xy 134.174342 47.797278) + (xy 134.154881 47.729001) + (xy 134.175423 47.661041) + (xy 134.227627 47.615805) + (xy 134.33269 47.566814) + (xy 134.332695 47.566811) + (xy 134.337677 47.564488) + (xy 134.439505 47.493187) + (xy 134.51527 47.440136) + (xy 134.515273 47.440134) + (xy 134.519781 47.436977) + (xy 134.676977 47.279781) + (xy 134.726116 47.209604) + (xy 134.801331 47.102185) + (xy 134.801332 47.102183) + (xy 134.804488 47.097676) + (xy 134.806811 47.092694) + (xy 134.806814 47.092689) + (xy 134.856081 46.987035) + (xy 134.902999 46.93375) + (xy 134.971276 46.914289) + (xy 135.039236 46.934831) + (xy 135.084471 46.987035) + (xy 135.133623 47.092441) + (xy 135.139103 47.101932) + (xy 135.169794 47.145765) + (xy 135.180271 47.15414) + (xy 135.193718 47.147072) + (xy 136.150905 46.189885) + (xy 136.213217 46.155859) + (xy 136.284032 46.160924) + (xy 136.329095 46.189885) + (xy 137.287003 47.147793) + (xy 137.298777 47.154223) + (xy 137.310793 47.144926) + (xy 137.340897 47.101932) + (xy 137.346377 47.092441) + (xy 137.435645 46.901007) + (xy 137.439391 46.890715) + (xy 137.494059 46.686691) + (xy 137.495962 46.675896) + (xy 137.514372 46.465475) + (xy 137.514372 46.454525) + (xy 137.495962 46.244104) + (xy 137.494059 46.233309) + (xy 137.439391 46.029285) + (xy 137.435643 46.018988) + (xy 137.397761 45.937751) + (xy 137.387099 45.867559) + (xy 137.416078 45.802746) + (xy 137.475498 45.76389) + (xy 137.511955 45.7585) + (xy 138.633629 45.7585) + (xy 138.70175 45.778502) + (xy 138.722724 45.795405) + (xy 145.41623 52.488911) + (xy 145.428616 52.503323) + (xy 145.437149 52.514918) + (xy 145.437154 52.514923) + (xy 145.441492 52.520818) + (xy 145.44707 52.525557) + (xy 145.447073 52.52556) + (xy 145.481768 52.555035) + (xy 145.489284 52.561965) + (xy 145.494979 52.56766) + (xy 145.497861 52.56994) + (xy 145.517251 52.585281) + (xy 145.520655 52.588072) + (xy 145.570703 52.630591) + (xy 145.576285 52.635333) + (xy 145.582801 52.638661) + (xy 145.58785 52.642028) + (xy 145.592979 52.645195) + (xy 145.598716 52.649734) + (xy 145.664875 52.680655) + (xy 145.668769 52.682558) + (xy 145.733808 52.715769) + (xy 145.740916 52.717508) + (xy 145.746559 52.719607) + (xy 145.752322 52.721524) + (xy 145.75895 52.724622) + (xy 145.766112 52.726112) + (xy 145.766113 52.726112) + (xy 145.830412 52.739486) + (xy 145.834696 52.740456) + (xy 145.90561 52.757808) + (xy 145.911212 52.758156) + (xy 145.911215 52.758156) + (xy 145.916764 52.7585) + (xy 145.916762 52.758536) + (xy 145.920755 52.758775) + (xy 145.924947 52.759149) + (xy 145.932115 52.76064) + (xy 146.00952 52.758546) + (xy 146.012928 52.7585) + (xy 156.968948 52.7585) + (xy 157.037069 52.778502) + (xy 157.058043 52.795405) + (xy 157.207319 52.944681) + (xy 157.383403 53.067976) + (xy 157.388381 53.070297) + (xy 157.388384 53.070299) + (xy 157.532547 53.137523) + (xy 157.578223 53.158822) + (xy 157.583531 53.160244) + (xy 157.583533 53.160245) + (xy 157.780543 53.213034) + (xy 157.780545 53.213034) + (xy 157.785858 53.214458) + (xy 158 53.233193) + (xy 158.214142 53.214458) + (xy 158.219455 53.213034) + (xy 158.219457 53.213034) + (xy 158.416467 53.160245) + (xy 158.416469 53.160244) + (xy 158.421777 53.158822) + (xy 158.467453 53.137523) + (xy 158.611616 53.070299) + (xy 158.611619 53.070297) + (xy 158.616597 53.067976) + (xy 158.792681 52.944681) + (xy 158.944681 52.792681) + (xy 159.067976 52.616596) + (xy 159.082579 52.585281) + (xy 159.156499 52.426759) + (xy 159.1565 52.426757) + (xy 159.158822 52.421777) + (xy 159.165068 52.398469) + (xy 159.213034 52.219457) + (xy 159.213034 52.219455) + (xy 159.214458 52.214142) + (xy 159.233193 52) + (xy 159.214458 51.785858) + (xy 159.21219 51.777393) + (xy 159.160245 51.583533) + (xy 159.160244 51.583531) + (xy 159.158822 51.578223) + (xy 159.15496 51.56994) + (xy 159.070299 51.388385) + (xy 159.070297 51.388382) + (xy 159.067976 51.383404) + (xy 158.944681 51.207319) + (xy 158.792681 51.055319) + (xy 158.616597 50.932024) + (xy 158.611619 50.929703) + (xy 158.611616 50.929701) + (xy 158.426759 50.843501) + (xy 158.426758 50.8435) + (xy 158.421777 50.841178) + (xy 158.416469 50.839756) + (xy 158.416467 50.839755) + (xy 158.219457 50.786966) + (xy 158.219455 50.786966) + (xy 158.214142 50.785542) + (xy 158 50.766807) + (xy 157.785858 50.785542) + (xy 157.780545 50.786966) + (xy 157.780543 50.786966) + (xy 157.583533 50.839755) + (xy 157.583531 50.839756) + (xy 157.578223 50.841178) + (xy 157.573243 50.8435) + (xy 157.573241 50.843501) + (xy 157.388385 50.929701) + (xy 157.388382 50.929703) + (xy 157.383404 50.932024) + (xy 157.207319 51.055319) + (xy 157.058043 51.204595) + (xy 156.995731 51.238621) + (xy 156.968948 51.2415) + (xy 146.366371 51.2415) + (xy 146.29825 51.221498) + (xy 146.277276 51.204595) + (xy 145.561302 50.488621) + (xy 154.795933 50.488621) + (xy 154.805227 50.500635) + (xy 154.839146 50.524385) + (xy 154.848641 50.529868) + (xy 155.033413 50.616028) + (xy 155.043705 50.619774) + (xy 155.240632 50.67254) + (xy 155.251425 50.674443) + (xy 155.454525 50.692212) + (xy 155.465475 50.692212) + (xy 155.668575 50.674443) + (xy 155.679368 50.67254) + (xy 155.876295 50.619774) + (xy 155.886587 50.616028) + (xy 156.071359 50.529868) + (xy 156.080854 50.524385) + (xy 156.115607 50.500051) + (xy 156.123983 50.489572) + (xy 156.116916 50.476127) + (xy 155.472811 49.832021) + (xy 155.458868 49.824408) + (xy 155.457034 49.824539) + (xy 155.45042 49.82879) + (xy 154.80236 50.476851) + (xy 154.795933 50.488621) + (xy 145.561302 50.488621) + (xy 144.538156 49.465475) + (xy 154.227788 49.465475) + (xy 154.245557 49.668575) + (xy 154.24746 49.679368) + (xy 154.300226 49.876295) + (xy 154.303972 49.886587) + (xy 154.390135 50.071364) + (xy 154.395613 50.08085) + (xy 154.419949 50.115607) + (xy 154.430428 50.123983) + (xy 154.443872 50.116917) + (xy 155.087979 49.472811) + (xy 155.094356 49.461132) + (xy 155.824408 49.461132) + (xy 155.824539 49.462966) + (xy 155.82879 49.46958) + (xy 156.476851 50.11764) + (xy 156.488621 50.124067) + (xy 156.500635 50.114772) + (xy 156.524387 50.08085) + (xy 156.529865 50.071364) + (xy 156.616028 49.886587) + (xy 156.619774 49.876295) + (xy 156.67254 49.679368) + (xy 156.674443 49.668575) + (xy 156.692212 49.465475) + (xy 156.692212 49.454525) + (xy 156.674443 49.251425) + (xy 156.67254 49.240632) + (xy 156.619774 49.043705) + (xy 156.616028 49.033413) + (xy 156.529865 48.848636) + (xy 156.524387 48.83915) + (xy 156.500051 48.804393) + (xy 156.489572 48.796017) + (xy 156.476128 48.803083) + (xy 155.832021 49.447189) + (xy 155.824408 49.461132) + (xy 155.094356 49.461132) + (xy 155.095592 49.458868) + (xy 155.095461 49.457034) + (xy 155.09121 49.45042) + (xy 154.443149 48.80236) + (xy 154.431379 48.795933) + (xy 154.419365 48.805228) + (xy 154.395613 48.83915) + (xy 154.390135 48.848636) + (xy 154.303972 49.033413) + (xy 154.300226 49.043705) + (xy 154.24746 49.240632) + (xy 154.245557 49.251425) + (xy 154.227788 49.454525) + (xy 154.227788 49.465475) + (xy 144.538156 49.465475) + (xy 143.503109 48.430428) + (xy 154.796017 48.430428) + (xy 154.803083 48.443872) + (xy 155.447189 49.087979) + (xy 155.461132 49.095592) + (xy 155.462966 49.095461) + (xy 155.46958 49.09121) + (xy 156.11764 48.443149) + (xy 156.124067 48.431379) + (xy 156.114773 48.419365) + (xy 156.080854 48.395615) + (xy 156.071359 48.390132) + (xy 155.886587 48.303972) + (xy 155.876295 48.300226) + (xy 155.679368 48.24746) + (xy 155.668575 48.245557) + (xy 155.465475 48.227788) + (xy 155.454525 48.227788) + (xy 155.251425 48.245557) + (xy 155.240632 48.24746) + (xy 155.043705 48.300226) + (xy 155.033413 48.303972) + (xy 154.848636 48.390135) + (xy 154.83915 48.395613) + (xy 154.804393 48.419949) + (xy 154.796017 48.430428) + (xy 143.503109 48.430428) + (xy 139.58377 44.511089) + (xy 139.571384 44.496677) + (xy 139.562851 44.485082) + (xy 139.562846 44.485077) + (xy 139.558508 44.479182) + (xy 139.55293 44.474443) + (xy 139.552927 44.47444) + (xy 139.518232 44.444965) + (xy 139.510716 44.438035) + (xy 139.505021 44.43234) + (xy 139.488736 44.419456) + (xy 139.482749 44.414719) + (xy 139.479345 44.411928) + (xy 139.429297 44.369409) + (xy 139.429295 44.369408) + (xy 139.423715 44.364667) + (xy 139.417199 44.361339) + (xy 139.41215 44.357972) + (xy 139.407021 44.354805) + (xy 139.401284 44.350266) + (xy 139.335125 44.319345) + (xy 139.331225 44.317439) + (xy 139.266192 44.284231) + (xy 139.259084 44.282492) + (xy 139.253441 44.280393) + (xy 139.247678 44.278476) + (xy 139.24105 44.275378) + (xy 139.169583 44.260513) + (xy 139.165299 44.259543) + (xy 139.09439 44.242192) + (xy 139.088788 44.241844) + (xy 139.088785 44.241844) + (xy 139.083236 44.2415) + (xy 139.083238 44.241464) + (xy 139.079245 44.241225) + (xy 139.075053 44.240851) + (xy 139.067885 44.23936) + (xy 139.00412 44.241085) + (xy 138.990479 44.241454) + (xy 138.987072 44.2415) + (xy 135.22707 44.2415) + (xy 135.20812 44.240067) + (xy 135.193885 44.237901) + (xy 135.193881 44.237901) + (xy 135.186651 44.236801) + (xy 135.179359 44.237394) + (xy 135.179356 44.237394) + (xy 135.133982 44.241085) + (xy 135.123767 44.2415) + (xy 135.115707 44.2415) + (xy 135.112073 44.241924) + (xy 135.112067 44.241924) + (xy 135.099042 44.243443) + (xy 135.08748 44.244791) + (xy 135.083132 44.245221) + (xy 135.010364 44.25114) + (xy 135.003403 44.253395) + (xy 134.997463 44.254582) + (xy 134.991588 44.255971) + (xy 134.984319 44.256818) + (xy 134.91567 44.281736) + (xy 134.911542 44.283153) + (xy 134.849064 44.303393) + (xy 134.849062 44.303394) + (xy 134.842101 44.305649) + (xy 134.835846 44.309445) + (xy 134.830372 44.311951) + (xy 134.824942 44.31467) + (xy 134.818063 44.317167) + (xy 134.811943 44.32118) + (xy 134.811942 44.32118) + (xy 134.757024 44.357186) + (xy 134.75332 44.359523) + (xy 134.690893 44.397405) + (xy 134.682516 44.404803) + (xy 134.682492 44.404776) + (xy 134.6795 44.407429) + (xy 134.676267 44.410132) + (xy 134.670148 44.414144) + (xy 134.640951 44.444965) + (xy 134.616872 44.470383) + (xy 134.614494 44.472825) + (xy 133.927914 45.159405) + (xy 133.865602 45.193431) + (xy 133.827838 45.195831) + (xy 133.705476 45.185126) + (xy 133.705475 45.185126) + (xy 133.7 45.184647) + (xy 133.478537 45.204022) + (xy 133.334949 45.242497) + (xy 133.269114 45.260137) + (xy 133.269112 45.260138) + (xy 133.263804 45.26156) + (xy 133.258823 45.263882) + (xy 133.258822 45.263883) + (xy 133.067311 45.353186) + (xy 133.067306 45.353189) + (xy 133.062324 45.355512) + (xy 133.057817 45.358668) + (xy 133.057815 45.358669) + (xy 132.88473 45.479864) + (xy 132.884727 45.479866) + (xy 132.880219 45.483023) + (xy 132.723023 45.640219) + (xy 132.719866 45.644727) + (xy 132.719864 45.64473) + (xy 132.607359 45.805404) + (xy 132.595512 45.822324) + (xy 132.593189 45.827306) + (xy 132.593186 45.827311) + (xy 132.544195 45.932373) + (xy 132.497277 45.985658) + (xy 132.429 46.005119) + (xy 132.36104 45.984577) + (xy 132.315805 45.932373) + (xy 132.266814 45.827311) + (xy 132.266811 45.827306) + (xy 132.264488 45.822324) + (xy 132.252641 45.805404) + (xy 132.140136 45.64473) + (xy 132.140134 45.644727) + (xy 132.136977 45.640219) + (xy 131.979781 45.483023) + (xy 131.975273 45.479866) + (xy 131.97527 45.479864) + (xy 131.81583 45.368223) + (xy 131.797677 45.355512) + (xy 131.792695 45.353189) + (xy 131.79269 45.353186) + (xy 131.601178 45.263883) + (xy 131.601177 45.263882) + (xy 131.596196 45.26156) + (xy 131.590888 45.260138) + (xy 131.590886 45.260137) + (xy 131.525051 45.242497) + (xy 131.381463 45.204022) + (xy 131.16 45.184647) + (xy 130.938537 45.204022) + (xy 130.794949 45.242497) + (xy 130.729114 45.260137) + (xy 130.729112 45.260138) + (xy 130.723804 45.26156) + (xy 130.718823 45.263882) + (xy 130.718822 45.263883) + (xy 130.527311 45.353186) + (xy 130.527306 45.353189) + (xy 130.522324 45.355512) + (xy 130.517817 45.358668) + (xy 130.517815 45.358669) + (xy 130.34473 45.479864) + (xy 130.344727 45.479866) + (xy 130.340219 45.483023) + (xy 130.183023 45.640219) + (xy 130.179866 45.644727) + (xy 130.179864 45.64473) + (xy 130.067359 45.805404) + (xy 130.055512 45.822324) + (xy 130.053189 45.827306) + (xy 130.053186 45.827311) + (xy 130.004195 45.932373) + (xy 129.957277 45.985658) + (xy 129.889 46.005119) + (xy 129.82104 45.984577) + (xy 129.775805 45.932373) + (xy 129.726814 45.827311) + (xy 129.726811 45.827306) + (xy 129.724488 45.822324) + (xy 129.712641 45.805404) + (xy 129.600136 45.64473) + (xy 129.600134 45.644727) + (xy 129.596977 45.640219) + (xy 129.439781 45.483023) + (xy 129.435273 45.479866) + (xy 129.43527 45.479864) + (xy 129.27583 45.368223) + (xy 129.257677 45.355512) + (xy 129.252695 45.353189) + (xy 129.25269 45.353186) + (xy 129.061178 45.263883) + (xy 129.061177 45.263882) + (xy 129.056196 45.26156) + (xy 129.050888 45.260138) + (xy 129.050886 45.260137) + (xy 128.985051 45.242497) + (xy 128.841463 45.204022) + (xy 128.62 45.184647) + (xy 128.398537 45.204022) + (xy 128.254949 45.242497) + (xy 128.189114 45.260137) + (xy 128.189112 45.260138) + (xy 128.183804 45.26156) + (xy 128.178823 45.263882) + (xy 128.178822 45.263883) + (xy 127.987311 45.353186) + (xy 127.987306 45.353189) + (xy 127.982324 45.355512) + (xy 127.977817 45.358668) + (xy 127.977815 45.358669) + (xy 127.80473 45.479864) + (xy 127.804727 45.479866) + (xy 127.800219 45.483023) + (xy 127.643023 45.640219) + (xy 127.639866 45.644727) + (xy 127.639864 45.64473) + (xy 127.527359 45.805404) + (xy 127.515512 45.822324) + (xy 127.513189 45.827306) + (xy 127.513186 45.827311) + (xy 127.464195 45.932373) + (xy 127.417277 45.985658) + (xy 127.349 46.005119) + (xy 127.28104 45.984577) + (xy 127.235805 45.932373) + (xy 127.186814 45.827311) + (xy 127.186811 45.827306) + (xy 127.184488 45.822324) + (xy 127.172641 45.805404) + (xy 127.060136 45.64473) + (xy 127.060134 45.644727) + (xy 127.056977 45.640219) + (xy 126.899781 45.483023) + (xy 126.895273 45.479866) + (xy 126.89527 45.479864) + (xy 126.73583 45.368223) + (xy 126.717677 45.355512) + (xy 126.712695 45.353189) + (xy 126.71269 45.353186) + (xy 126.521178 45.263883) + (xy 126.521177 45.263882) + (xy 126.516196 45.26156) + (xy 126.510888 45.260138) + (xy 126.510886 45.260137) + (xy 126.445051 45.242497) + (xy 126.301463 45.204022) + (xy 126.08 45.184647) + (xy 125.858537 45.204022) + (xy 125.714949 45.242497) + (xy 125.649114 45.260137) + (xy 125.649112 45.260138) + (xy 125.643804 45.26156) + (xy 125.638823 45.263882) + (xy 125.638822 45.263883) + (xy 125.447311 45.353186) + (xy 125.447306 45.353189) + (xy 125.442324 45.355512) + (xy 125.437817 45.358668) + (xy 125.437815 45.358669) + (xy 125.26473 45.479864) + (xy 125.264727 45.479866) + (xy 125.260219 45.483023) + (xy 125.103023 45.640219) + (xy 125.099866 45.644727) + (xy 125.099864 45.64473) + (xy 124.987359 45.805404) + (xy 124.975512 45.822324) + (xy 124.973189 45.827306) + (xy 124.973186 45.827311) + (xy 124.924195 45.932373) + (xy 124.877277 45.985658) + (xy 124.809 46.005119) + (xy 124.74104 45.984577) + (xy 124.695805 45.932373) + (xy 124.646814 45.827311) + (xy 124.646811 45.827306) + (xy 124.644488 45.822324) + (xy 124.632641 45.805404) + (xy 124.520136 45.64473) + (xy 124.520134 45.644727) + (xy 124.516977 45.640219) + (xy 124.359781 45.483023) + (xy 124.355273 45.479866) + (xy 124.35527 45.479864) + (xy 124.19583 45.368223) + (xy 124.177677 45.355512) + (xy 124.172695 45.353189) + (xy 124.17269 45.353186) + (xy 123.981178 45.263883) + (xy 123.981177 45.263882) + (xy 123.976196 45.26156) + (xy 123.970888 45.260138) + (xy 123.970886 45.260137) + (xy 123.905051 45.242497) + (xy 123.761463 45.204022) + (xy 123.54 45.184647) + (xy 123.318537 45.204022) + (xy 123.174949 45.242497) + (xy 123.109114 45.260137) + (xy 123.109112 45.260138) + (xy 123.103804 45.26156) + (xy 123.098823 45.263882) + (xy 123.098822 45.263883) + (xy 122.907311 45.353186) + (xy 122.907306 45.353189) + (xy 122.902324 45.355512) + (xy 122.897817 45.358668) + (xy 122.897815 45.358669) + (xy 122.72473 45.479864) + (xy 122.724727 45.479866) + (xy 122.720219 45.483023) + (xy 122.563023 45.640219) + (xy 122.559866 45.644727) + (xy 122.559864 45.64473) + (xy 122.447359 45.805404) + (xy 122.435512 45.822324) + (xy 122.433189 45.827306) + (xy 122.433186 45.827311) + (xy 122.384195 45.932373) + (xy 122.337277 45.985658) + (xy 122.269 46.005119) + (xy 122.20104 45.984577) + (xy 122.155805 45.932373) + (xy 122.106814 45.827311) + (xy 122.106811 45.827306) + (xy 122.104488 45.822324) + (xy 122.092641 45.805404) + (xy 121.980136 45.64473) + (xy 121.980134 45.644727) + (xy 121.976977 45.640219) + (xy 121.819781 45.483023) + (xy 121.815273 45.479866) + (xy 121.81527 45.479864) + (xy 121.65583 45.368223) + (xy 121.637677 45.355512) + (xy 121.632695 45.353189) + (xy 121.63269 45.353186) + (xy 121.441178 45.263883) + (xy 121.441177 45.263882) + (xy 121.436196 45.26156) + (xy 121.430888 45.260138) + (xy 121.430886 45.260137) + (xy 121.365051 45.242497) + (xy 121.221463 45.204022) + (xy 121 45.184647) + (xy 120.778537 45.204022) + (xy 120.634949 45.242497) + (xy 120.569114 45.260137) + (xy 120.569112 45.260138) + (xy 120.563804 45.26156) + (xy 120.558823 45.263882) + (xy 120.558822 45.263883) + (xy 120.367311 45.353186) + (xy 120.367306 45.353189) + (xy 120.362324 45.355512) + (xy 120.357817 45.358668) + (xy 120.357815 45.358669) + (xy 120.18473 45.479864) + (xy 120.184727 45.479866) + (xy 120.180219 45.483023) + (xy 120.023023 45.640219) + (xy 120.019866 45.644727) + (xy 120.019864 45.64473) + (xy 119.907359 45.805404) + (xy 119.895512 45.822324) + (xy 119.893189 45.827306) + (xy 119.893186 45.827311) + (xy 119.844195 45.932373) + (xy 119.797277 45.985658) + (xy 119.729 46.005119) + (xy 119.66104 45.984577) + (xy 119.615805 45.932373) + (xy 119.566814 45.827311) + (xy 119.566811 45.827306) + (xy 119.564488 45.822324) + (xy 119.552641 45.805404) + (xy 119.440136 45.64473) + (xy 119.440134 45.644727) + (xy 119.436977 45.640219) + (xy 119.279781 45.483023) + (xy 119.275273 45.479866) + (xy 119.27527 45.479864) + (xy 119.11583 45.368223) + (xy 119.097677 45.355512) + (xy 119.092695 45.353189) + (xy 119.09269 45.353186) + (xy 118.901178 45.263883) + (xy 118.901177 45.263882) + (xy 118.896196 45.26156) + (xy 118.890888 45.260138) + (xy 118.890886 45.260137) + (xy 118.825051 45.242497) + (xy 118.681463 45.204022) + (xy 118.46 45.184647) + (xy 118.238537 45.204022) + (xy 118.094949 45.242497) + (xy 118.029114 45.260137) + (xy 118.029112 45.260138) + (xy 118.023804 45.26156) + (xy 118.018823 45.263882) + (xy 118.018822 45.263883) + (xy 117.827311 45.353186) + (xy 117.827306 45.353189) + (xy 117.822324 45.355512) + (xy 117.817817 45.358668) + (xy 117.817815 45.358669) + (xy 117.64473 45.479864) + (xy 117.644727 45.479866) + (xy 117.640219 45.483023) + (xy 117.483023 45.640219) + (xy 117.479866 45.644727) + (xy 117.479864 45.64473) + (xy 117.367359 45.805404) + (xy 117.355512 45.822324) + (xy 117.353189 45.827306) + (xy 117.353186 45.827311) + (xy 117.272142 46.00111) + (xy 117.26156 46.023804) + (xy 117.204022 46.238537) + (xy 117.184647 46.46) + (xy 117.204022 46.681463) + (xy 117.26156 46.896196) + (xy 117.263882 46.901177) + (xy 117.263883 46.901178) + (xy 117.353186 47.092689) + (xy 117.353189 47.092694) + (xy 117.355512 47.097676) + (xy 117.358668 47.102183) + (xy 117.358669 47.102185) + (xy 117.433885 47.209604) + (xy 117.483023 47.279781) + (xy 117.640219 47.436977) + (xy 117.644727 47.440134) + (xy 117.64473 47.440136) + (xy 117.720495 47.493187) + (xy 117.822323 47.564488) + (xy 117.827305 47.566811) + (xy 117.82731 47.566814) + (xy 117.932373 47.615805) + (xy 117.985658 47.662722) + (xy 118.005119 47.730999) + (xy 117.984577 47.798959) + (xy 117.932373 47.844195) + (xy 117.827311 47.893186) + (xy 117.827306 47.893189) + (xy 117.822324 47.895512) + (xy 117.817817 47.898668) + (xy 117.817815 47.898669) + (xy 117.64473 48.019864) + (xy 117.644727 48.019866) + (xy 117.640219 48.023023) + (xy 117.483023 48.180219) + (xy 117.479866 48.184727) + (xy 117.479864 48.18473) + (xy 117.400184 48.298525) + (xy 117.355512 48.362324) + (xy 117.353189 48.367306) + (xy 117.353186 48.367311) + (xy 117.279852 48.524577) + (xy 117.26156 48.563804) + (xy 117.260138 48.569112) + (xy 117.260137 48.569114) + (xy 117.242497 48.634949) + (xy 117.204022 48.778537) + (xy 117.184647 49) + (xy 88.992681 49) + (xy 87.528449 47.535768) + (xy 104.046363 47.535768) + (xy 104.080846 47.652932) + (xy 104.085439 47.6643) + (xy 104.173586 47.832911) + (xy 104.180302 47.843173) + (xy 104.299515 47.991443) + (xy 104.308103 48.000213) + (xy 104.453838 48.122499) + (xy 104.463969 48.129437) + (xy 104.630692 48.221094) + (xy 104.641962 48.225924) + (xy 104.823315 48.283452) + (xy 104.835309 48.286002) + (xy 104.98335 48.302607) + (xy 104.990374 48.303) + (xy 104.997885 48.303) + (xy 105.013124 48.298525) + (xy 105.014329 48.297135) + (xy 105.016 48.289452) + (xy 105.016 48.284885) + (xy 105.524 48.284885) + (xy 105.528475 48.300124) + (xy 105.529865 48.301329) + (xy 105.537548 48.303) + (xy 105.54289 48.303) + (xy 105.549035 48.3027) + (xy 105.690481 48.28883) + (xy 105.702519 48.286447) + (xy 105.884651 48.231458) + (xy 105.895993 48.226783) + (xy 106.063977 48.137465) + (xy 106.074193 48.130678) + (xy 106.221634 48.010428) + (xy 106.230338 48.001784) + (xy 106.35161 47.855191) + (xy 106.35847 47.84502) + (xy 106.448962 47.677658) + (xy 106.453714 47.666353) + (xy 106.492422 47.541308) + (xy 106.492628 47.527205) + (xy 106.485873 47.524) + (xy 105.542115 47.524) + (xy 105.526876 47.528475) + (xy 105.525671 47.529865) + (xy 105.524 47.537548) + (xy 105.524 48.284885) + (xy 105.016 48.284885) + (xy 105.016 47.542115) + (xy 105.011525 47.526876) + (xy 105.010135 47.525671) + (xy 105.002452 47.524) + (xy 104.061014 47.524) + (xy 104.047483 47.527973) + (xy 104.046363 47.535768) + (xy 87.528449 47.535768) + (xy 85.985431 45.99275) + (xy 104.006524 45.99275) + (xy 104.009849 46.029285) + (xy 104.024099 46.185856) + (xy 104.024894 46.194596) + (xy 104.026632 46.200502) + (xy 104.026633 46.200506) + (xy 104.060875 46.316848) + (xy 104.082119 46.389029) + (xy 104.084972 46.394486) + (xy 104.084973 46.394489) + (xy 104.173162 46.563181) + (xy 104.173165 46.563185) + (xy 104.176019 46.568645) + (xy 104.176221 46.568897) + (xy 104.196201 46.634912) + (xy 104.181041 46.695885) + (xy 104.091038 46.862342) + (xy 104.086286 46.873647) + (xy 104.047578 46.998692) + (xy 104.047372 47.012795) + (xy 104.054127 47.016) + (xy 104.823758 47.016) + (xy 104.837803 47.016785) + (xy 104.986817 47.0335) + (xy 105.546004 47.0335) + (xy 105.696713 47.018723) + (xy 105.699002 47.018032) + (xy 105.719724 47.016) + (xy 106.478986 47.016) + (xy 106.492517 47.012027) + (xy 106.493637 47.004232) + (xy 106.459154 46.887068) + (xy 106.454561 46.8757) + (xy 106.366416 46.707093) + (xy 106.364403 46.704017) + (xy 106.363846 46.702178) + (xy 106.36356 46.70163) + (xy 106.363664 46.701576) + (xy 106.343839 46.636064) + (xy 106.358999 46.575094) + (xy 106.36544 46.563181) + (xy 106.452356 46.402435) + (xy 106.486794 46.291183) + (xy 106.510468 46.214707) + (xy 106.510469 46.214704) + (xy 106.51229 46.20882) + (xy 106.517857 46.155859) + (xy 106.532832 46.013378) + (xy 106.532832 46.013377) + (xy 106.533476 46.00725) + (xy 106.516646 45.822324) + (xy 106.515665 45.811543) + (xy 106.515664 45.81154) + (xy 106.515106 45.805404) + (xy 106.512164 45.795405) + (xy 106.45962 45.616879) + (xy 106.459619 45.616877) + (xy 106.457881 45.610971) + (xy 106.45874 45.610718) + (xy 106.452286 45.545338) + (xy 106.465452 45.508594) + (xy 106.470615 45.501705) + (xy 106.473768 45.493296) + (xy 106.518971 45.372715) + (xy 106.521745 45.365316) + (xy 106.5285 45.303134) + (xy 106.5285 44.156866) + (xy 106.521745 44.094684) + (xy 106.470615 43.958295) + (xy 106.383261 43.841739) + (xy 106.266705 43.754385) + (xy 106.130316 43.703255) + (xy 106.068134 43.6965) + (xy 104.471866 43.6965) + (xy 104.409684 43.703255) + (xy 104.273295 43.754385) + (xy 104.156739 43.841739) + (xy 104.069385 43.958295) + (xy 104.018255 44.094684) + (xy 104.0115 44.156866) + (xy 104.0115 45.303134) + (xy 104.018255 45.365316) + (xy 104.021029 45.372715) + (xy 104.066232 45.493296) + (xy 104.066234 45.493299) + (xy 104.069385 45.501705) + (xy 104.074773 45.508894) + (xy 104.074906 45.509137) + (xy 104.090076 45.578494) + (xy 104.084752 45.606907) + (xy 104.083494 45.610971) + (xy 104.031635 45.778502) + (xy 104.02771 45.79118) + (xy 104.027066 45.797305) + (xy 104.027066 45.797306) + (xy 104.019682 45.867559) + (xy 104.006524 45.99275) + (xy 85.985431 45.99275) + (xy 82.912681 42.92) + (xy 84.686502 42.92) + (xy 84.706457 43.148087) + (xy 84.765716 43.369243) + (xy 84.768039 43.374224) + (xy 84.768039 43.374225) + (xy 84.860151 43.571762) + (xy 84.860154 43.571767) + (xy 84.862477 43.576749) + (xy 84.865634 43.581257) + (xy 84.990631 43.759771) + (xy 84.993802 43.7643) + (xy 85.1557 43.926198) + (xy 85.160208 43.929355) + (xy 85.160211 43.929357) + (xy 85.191276 43.951109) + (xy 85.343251 44.057523) + (xy 85.348233 44.059846) + (xy 85.348238 44.059849) + (xy 85.533491 44.146233) + (xy 85.550757 44.154284) + (xy 85.556065 44.155706) + (xy 85.556067 44.155707) + (xy 85.766598 44.212119) + (xy 85.7666 44.212119) + (xy 85.771913 44.213543) + (xy 86 44.233498) + (xy 86.228087 44.213543) + (xy 86.2334 44.212119) + (xy 86.233402 44.212119) + (xy 86.443933 44.155707) + (xy 86.443935 44.155706) + (xy 86.449243 44.154284) + (xy 86.466509 44.146233) + (xy 86.651762 44.059849) + (xy 86.651767 44.059846) + (xy 86.656749 44.057523) + (xy 86.808724 43.951109) + (xy 86.839789 43.929357) + (xy 86.839792 43.929355) + (xy 86.8443 43.926198) + (xy 87.006198 43.7643) + (xy 87.00937 43.759771) + (xy 87.134366 43.581257) + (xy 87.137523 43.576749) + (xy 87.139846 43.571767) + (xy 87.139849 43.571762) + (xy 87.231961 43.374225) + (xy 87.231961 43.374224) + (xy 87.234284 43.369243) + (xy 87.293543 43.148087) + (xy 87.313498 42.92) + (xy 90.686502 42.92) + (xy 90.706457 43.148087) + (xy 90.765716 43.369243) + (xy 90.768039 43.374224) + (xy 90.768039 43.374225) + (xy 90.860151 43.571762) + (xy 90.860154 43.571767) + (xy 90.862477 43.576749) + (xy 90.865634 43.581257) + (xy 90.990631 43.759771) + (xy 90.993802 43.7643) + (xy 91.1557 43.926198) + (xy 91.160208 43.929355) + (xy 91.160211 43.929357) + (xy 91.191276 43.951109) + (xy 91.343251 44.057523) + (xy 91.348233 44.059846) + (xy 91.348238 44.059849) + (xy 91.533491 44.146233) + (xy 91.550757 44.154284) + (xy 91.556065 44.155706) + (xy 91.556067 44.155707) + (xy 91.766598 44.212119) + (xy 91.7666 44.212119) + (xy 91.771913 44.213543) + (xy 92 44.233498) + (xy 92.228087 44.213543) + (xy 92.2334 44.212119) + (xy 92.233402 44.212119) + (xy 92.443933 44.155707) + (xy 92.443935 44.155706) + (xy 92.449243 44.154284) + (xy 92.466509 44.146233) + (xy 92.651762 44.059849) + (xy 92.651767 44.059846) + (xy 92.656749 44.057523) + (xy 92.808724 43.951109) + (xy 92.839789 43.929357) + (xy 92.839792 43.929355) + (xy 92.8443 43.926198) + (xy 93.006198 43.7643) + (xy 93.00937 43.759771) + (xy 93.134366 43.581257) + (xy 93.137523 43.576749) + (xy 93.139846 43.571767) + (xy 93.139849 43.571762) + (xy 93.231961 43.374225) + (xy 93.231961 43.374224) + (xy 93.234284 43.369243) + (xy 93.293543 43.148087) + (xy 93.313498 42.92) + (xy 93.293543 42.691913) + (xy 93.241229 42.496677) + (xy 93.235707 42.476067) + (xy 93.235706 42.476065) + (xy 93.234284 42.470757) + (xy 93.205198 42.408381) + (xy 93.139849 42.268238) + (xy 93.139846 42.268233) + (xy 93.137523 42.263251) + (xy 93.006198 42.0757) + (xy 92.8443 41.913802) + (xy 92.839792 41.910645) + (xy 92.839789 41.910643) + (xy 92.761611 41.855902) + (xy 92.656749 41.782477) + (xy 92.651767 41.780154) + (xy 92.651762 41.780151) + (xy 92.454225 41.688039) + (xy 92.454224 41.688039) + (xy 92.449243 41.685716) + (xy 92.443935 41.684294) + (xy 92.443933 41.684293) + (xy 92.233402 41.627881) + (xy 92.2334 41.627881) + (xy 92.228087 41.626457) + (xy 92 41.606502) + (xy 91.771913 41.626457) + (xy 91.7666 41.627881) + (xy 91.766598 41.627881) + (xy 91.556067 41.684293) + (xy 91.556065 41.684294) + (xy 91.550757 41.685716) + (xy 91.545776 41.688039) + (xy 91.545775 41.688039) + (xy 91.348238 41.780151) + (xy 91.348233 41.780154) + (xy 91.343251 41.782477) + (xy 91.238389 41.855902) + (xy 91.160211 41.910643) + (xy 91.160208 41.910645) + (xy 91.1557 41.913802) + (xy 90.993802 42.0757) + (xy 90.862477 42.263251) + (xy 90.860154 42.268233) + (xy 90.860151 42.268238) + (xy 90.794802 42.408381) + (xy 90.765716 42.470757) + (xy 90.764294 42.476065) + (xy 90.764293 42.476067) + (xy 90.758771 42.496677) + (xy 90.706457 42.691913) + (xy 90.686502 42.92) + (xy 87.313498 42.92) + (xy 87.293543 42.691913) + (xy 87.241229 42.496677) + (xy 87.235707 42.476067) + (xy 87.235706 42.476065) + (xy 87.234284 42.470757) + (xy 87.205198 42.408381) + (xy 87.139849 42.268238) + (xy 87.139846 42.268233) + (xy 87.137523 42.263251) + (xy 87.006198 42.0757) + (xy 86.8443 41.913802) + (xy 86.839792 41.910645) + (xy 86.839789 41.910643) + (xy 86.761611 41.855902) + (xy 86.656749 41.782477) + (xy 86.651767 41.780154) + (xy 86.651762 41.780151) + (xy 86.454225 41.688039) + (xy 86.454224 41.688039) + (xy 86.449243 41.685716) + (xy 86.443935 41.684294) + (xy 86.443933 41.684293) + (xy 86.233402 41.627881) + (xy 86.2334 41.627881) + (xy 86.228087 41.626457) + (xy 86 41.606502) + (xy 85.771913 41.626457) + (xy 85.7666 41.627881) + (xy 85.766598 41.627881) + (xy 85.556067 41.684293) + (xy 85.556065 41.684294) + (xy 85.550757 41.685716) + (xy 85.545776 41.688039) + (xy 85.545775 41.688039) + (xy 85.348238 41.780151) + (xy 85.348233 41.780154) + (xy 85.343251 41.782477) + (xy 85.238389 41.855902) + (xy 85.160211 41.910643) + (xy 85.160208 41.910645) + (xy 85.1557 41.913802) + (xy 84.993802 42.0757) + (xy 84.862477 42.263251) + (xy 84.860154 42.268233) + (xy 84.860151 42.268238) + (xy 84.794802 42.408381) + (xy 84.765716 42.470757) + (xy 84.764294 42.476065) + (xy 84.764293 42.476067) + (xy 84.758771 42.496677) + (xy 84.706457 42.691913) + (xy 84.686502 42.92) + (xy 82.912681 42.92) + (xy 82.50377 42.511089) + (xy 82.491384 42.496677) + (xy 82.482851 42.485082) + (xy 82.482846 42.485077) + (xy 82.478508 42.479182) + (xy 82.47293 42.474443) + (xy 82.472927 42.47444) + (xy 82.438232 42.444965) + (xy 82.430716 42.438035) + (xy 82.425021 42.43234) + (xy 82.41888 42.427482) + (xy 82.402749 42.414719) + (xy 82.399345 42.411928) + (xy 82.349297 42.369409) + (xy 82.349295 42.369408) + (xy 82.343715 42.364667) + (xy 82.337199 42.361339) + (xy 82.33215 42.357972) + (xy 82.327021 42.354805) + (xy 82.321284 42.350266) + (xy 82.255125 42.319345) + (xy 82.251225 42.317439) + (xy 82.186192 42.284231) + (xy 82.179084 42.282492) + (xy 82.173441 42.280393) + (xy 82.167678 42.278476) + (xy 82.16105 42.275378) + (xy 82.089583 42.260513) + (xy 82.085299 42.259543) + (xy 82.050958 42.25114) + (xy 82.01439 42.242192) + (xy 82.008788 42.241844) + (xy 82.008785 42.241844) + (xy 82.003236 42.2415) + (xy 82.003238 42.241464) + (xy 81.999245 42.241225) + (xy 81.995053 42.240851) + (xy 81.987885 42.23936) + (xy 81.92412 42.241085) + (xy 81.910479 42.241454) + (xy 81.907072 42.2415) + (xy 75.067069 42.2415) + (xy 75.048121 42.240067) + (xy 75.04078 42.23895) + (xy 75.033883 42.237901) + (xy 75.033881 42.237901) + (xy 75.026651 42.236801) + (xy 75.019359 42.237394) + (xy 75.019356 42.237394) + (xy 74.973982 42.241085) + (xy 74.963767 42.2415) + (xy 74.955707 42.2415) + (xy 74.942417 42.243049) + (xy 74.927493 42.244789) + (xy 74.923118 42.245222) + (xy 74.857661 42.250546) + (xy 74.857658 42.250547) + (xy 74.850363 42.25114) + (xy 74.843399 42.253396) + (xy 74.83744 42.254587) + (xy 74.831585 42.255971) + (xy 74.824319 42.256818) + (xy 74.755673 42.281735) + (xy 74.751545 42.283152) + (xy 74.689064 42.303393) + (xy 74.689062 42.303394) + (xy 74.682101 42.305649) + (xy 74.675846 42.309445) + (xy 74.670372 42.311951) + (xy 74.664942 42.31467) + (xy 74.658063 42.317167) + (xy 74.597016 42.357191) + (xy 74.593327 42.359518) + (xy 74.584843 42.364667) + (xy 74.535693 42.394491) + (xy 74.535688 42.394495) + (xy 74.530892 42.397405) + (xy 74.522516 42.404803) + (xy 74.522493 42.404777) + (xy 74.519503 42.407426) + (xy 74.516264 42.410134) + (xy 74.510148 42.414144) + (xy 74.505121 42.419451) + (xy 74.505117 42.419454) + (xy 74.456872 42.470383) + (xy 74.454494 42.472825) + (xy 72.122724 44.804595) + (xy 72.060412 44.838621) + (xy 72.033629 44.8415) + (xy 57.2345 44.8415) + (xy 57.166379 44.821498) + (xy 57.119886 44.767842) + (xy 57.1085 44.7155) + (xy 57.1085 44.551866) + (xy 57.101745 44.489684) + (xy 57.050615 44.353295) + (xy 56.963261 44.236739) + (xy 56.846705 44.149385) + (xy 56.710316 44.098255) + (xy 56.648134 44.0915) + (xy 54.551866 44.0915) + (xy 54.489684 44.098255) + (xy 54.353295 44.149385) + (xy 54.236739 44.236739) + (xy 54.149385 44.353295) + (xy 54.098255 44.489684) + (xy 54.0915 44.551866) + (xy 54.0915 46.648134) + (xy 54.098255 46.710316) + (xy 54.149385 46.846705) + (xy 54.236739 46.963261) + (xy 54.243919 46.968642) + (xy 54.24392 46.968643) + (xy 54.344503 47.044026) + (xy 54.387018 47.100885) + (xy 54.392044 47.171704) + (xy 54.374824 47.210017) + (xy 54.37623 47.210879) + (xy 54.254795 47.409042) + (xy 54.250313 47.417837) + (xy 54.163266 47.627988) + (xy 54.160217 47.637373) + (xy 54.107115 47.858554) + (xy 54.105572 47.868301) + (xy 54.087725 48.09507) + (xy 54.087725 48.10493) + (xy 54.105572 48.331699) + (xy 54.107115 48.341446) + (xy 54.160217 48.562627) + (xy 54.163266 48.572012) + (xy 54.250313 48.782163) + (xy 54.254795 48.790958) + (xy 54.357432 48.958445) + (xy 54.36789 48.967907) + (xy 54.376666 48.964124) + (xy 55.510905 47.829885) + (xy 55.573217 47.795859) + (xy 55.644032 47.800924) + (xy 55.689095 47.829885) + (xy 56.82029 48.96108) + (xy 56.83267 48.96784) + (xy 56.84032 48.962113) + (xy 56.945205 48.790958) + (xy 56.949687 48.782163) + (xy 57.036734 48.572012) + (xy 57.039783 48.562627) + (xy 57.092885 48.341446) + (xy 57.094428 48.331699) + (xy 57.112275 48.10493) + (xy 57.112275 48.09507) + (xy 57.111753 48.088434) + (xy 74.786661 48.088434) + (xy 74.786833 48.091829) + (xy 74.786833 48.09183) + (xy 74.801945 48.390132) + (xy 74.804792 48.44634) + (xy 74.805329 48.449695) + (xy 74.80533 48.449701) + (xy 74.824457 48.569114) + (xy 74.86147 48.800195) + (xy 74.956033 49.145859) + (xy 74.998944 49.254795) + (xy 75.085852 49.475423) + (xy 75.087374 49.479288) + (xy 75.11233 49.526823) + (xy 75.245953 49.781336) + (xy 75.253957 49.796582) + (xy 75.255858 49.799411) + (xy 75.255864 49.799421) + (xy 75.412816 50.032988) + (xy 75.453834 50.094029) + (xy 75.684665 50.36815) + (xy 75.943751 50.615738) + (xy 76.228061 50.833897) + (xy 76.260056 50.85335) + (xy 76.531355 51.018303) + (xy 76.53136 51.018306) + (xy 76.53427 51.020075) + (xy 76.537358 51.021521) + (xy 76.537357 51.021521) + (xy 76.85571 51.170649) + (xy 76.85572 51.170653) + (xy 76.858794 51.172093) + (xy 76.862012 51.173195) + (xy 76.862015 51.173196) + (xy 77.194615 51.287071) + (xy 77.194623 51.287073) + (xy 77.197838 51.288174) + (xy 77.547435 51.366959) + (xy 77.599728 51.372917) + (xy 77.900114 51.407142) + (xy 77.900122 51.407142) + (xy 77.903497 51.407527) + (xy 77.906901 51.407545) + (xy 77.906904 51.407545) + (xy 78.101227 51.408562) + (xy 78.261857 51.409403) + (xy 78.265243 51.409053) + (xy 78.265245 51.409053) + (xy 78.614932 51.372917) + (xy 78.614941 51.372916) + (xy 78.618324 51.372566) + (xy 78.621657 51.371852) + (xy 78.62166 51.371851) + (xy 78.794186 51.334864) + (xy 78.968727 51.297446) + (xy 79.308968 51.184922) + (xy 79.635066 51.036311) + (xy 79.756164 50.964408) + (xy 79.940262 50.855099) + (xy 79.940267 50.855096) + (xy 79.943207 50.85335) + (xy 79.97194 50.831777) + (xy 80.059924 50.765716) + (xy 80.229786 50.63818) + (xy 80.491451 50.393319) + (xy 80.72514 50.12163) + (xy 80.864149 49.919371) + (xy 80.92619 49.829101) + (xy 80.926195 49.829094) + (xy 80.92812 49.826292) + (xy 80.929732 49.823298) + (xy 80.929737 49.82329) + (xy 81.085618 49.533787) + (xy 81.098017 49.51076) + (xy 81.215488 49.221463) + (xy 81.231562 49.181877) + (xy 81.231564 49.181872) + (xy 81.232842 49.178724) + (xy 81.237246 49.163266) + (xy 81.274235 49.033413) + (xy 81.33102 48.83407) + (xy 81.339893 48.782163) + (xy 81.390829 48.484175) + (xy 81.390829 48.484173) + (xy 81.391401 48.480828) + (xy 81.391919 48.472373) + (xy 81.413168 48.124928) + (xy 81.413278 48.123131) + (xy 81.413359 48.1) + (xy 81.393979 47.742159) + (xy 81.336066 47.388505) + (xy 81.240297 47.043173) + (xy 81.238679 47.039105) + (xy 81.114318 46.726601) + (xy 81.107793 46.710205) + (xy 80.992883 46.493178) + (xy 80.941702 46.396513) + (xy 80.941698 46.396506) + (xy 80.940103 46.393494) + (xy 80.73919 46.096746) + (xy 80.714468 46.067594) + (xy 80.643506 45.983919) + (xy 80.507403 45.823432) + (xy 80.247454 45.57675) + (xy 79.962384 45.359585) + (xy 79.959472 45.357828) + (xy 79.959467 45.357825) + (xy 79.658443 45.176236) + (xy 79.658437 45.176233) + (xy 79.655528 45.174478) + (xy 79.361588 45.038035) + (xy 79.333571 45.02503) + (xy 79.333569 45.025029) + (xy 79.330475 45.023593) + (xy 79.104695 44.947171) + (xy 78.994255 44.909789) + (xy 78.99425 44.909788) + (xy 78.991028 44.908697) + (xy 78.792681 44.864724) + (xy 78.644493 44.831871) + (xy 78.644487 44.83187) + (xy 78.641158 44.831132) + (xy 78.637769 44.830758) + (xy 78.637764 44.830757) + (xy 78.288338 44.79218) + (xy 78.288333 44.79218) + (xy 78.284957 44.791807) + (xy 78.281558 44.791801) + (xy 78.281557 44.791801) + (xy 78.11208 44.791505) + (xy 77.926592 44.791182) + (xy 77.813413 44.803277) + (xy 77.573639 44.828901) + (xy 77.573631 44.828902) + (xy 77.570256 44.829263) + (xy 77.220117 44.905606) + (xy 76.880271 45.019317) + (xy 76.877178 45.020739) + (xy 76.877177 45.02074) + (xy 76.824508 45.044965) + (xy 76.554694 45.169066) + (xy 76.55176 45.170822) + (xy 76.551758 45.170823) + (xy 76.496287 45.204022) + (xy 76.247193 45.353101) + (xy 76.244467 45.355163) + (xy 76.244465 45.355164) + (xy 75.978103 45.556613) + (xy 75.961367 45.56927) + (xy 75.958882 45.571612) + (xy 75.958877 45.571616) + (xy 75.890213 45.636322) + (xy 75.700559 45.815043) + (xy 75.467819 46.087546) + (xy 75.4659 46.090358) + (xy 75.465897 46.090363) + (xy 75.390763 46.200506) + (xy 75.265871 46.383591) + (xy 75.097077 46.699714) + (xy 74.963411 47.032218) + (xy 74.962491 47.035492) + (xy 74.962489 47.035497) + (xy 74.892729 47.283678) + (xy 74.866437 47.377213) + (xy 74.865875 47.38057) + (xy 74.865875 47.380571) + (xy 74.818706 47.662446) + (xy 74.80729 47.730663) + (xy 74.786661 48.088434) + (xy 57.111753 48.088434) + (xy 57.094428 47.868301) + (xy 57.092885 47.858554) + (xy 57.039783 47.637373) + (xy 57.036734 47.627988) + (xy 56.949687 47.417837) + (xy 56.945205 47.409042) + (xy 56.82377 47.210879) + (xy 56.825851 47.209604) + (xy 56.80528 47.152261) + (xy 56.821242 47.083082) + (xy 56.855497 47.044026) + (xy 56.95608 46.968643) + (xy 56.956081 46.968642) + (xy 56.963261 46.963261) + (xy 57.050615 46.846705) + (xy 57.101745 46.710316) + (xy 57.1085 46.648134) + (xy 57.1085 46.4845) + (xy 57.128502 46.416379) + (xy 57.182158 46.369886) + (xy 57.2345 46.3585) + (xy 72.33293 46.3585) + (xy 72.35188 46.359933) + (xy 72.366115 46.362099) + (xy 72.366119 46.362099) + (xy 72.373349 46.363199) + (xy 72.380641 46.362606) + (xy 72.380644 46.362606) + (xy 72.426018 46.358915) + (xy 72.436233 46.3585) + (xy 72.444293 46.3585) + (xy 72.457583 46.356951) + (xy 72.472507 46.355211) + (xy 72.476882 46.354778) + (xy 72.542339 46.349454) + (xy 72.542342 46.349453) + (xy 72.549637 46.34886) + (xy 72.556601 46.346604) + (xy 72.56256 46.345413) + (xy 72.568415 46.344029) + (xy 72.575681 46.343182) + (xy 72.644327 46.318265) + (xy 72.648455 46.316848) + (xy 72.710936 46.296607) + (xy 72.710938 46.296606) + (xy 72.717899 46.294351) + (xy 72.724154 46.290555) + (xy 72.729628 46.288049) + (xy 72.735058 46.28533) + (xy 72.741937 46.282833) + (xy 72.801008 46.244104) + (xy 72.802976 46.242814) + (xy 72.80668 46.240477) + (xy 72.869107 46.202595) + (xy 72.877484 46.195197) + (xy 72.877508 46.195224) + (xy 72.8805 46.192571) + (xy 72.883733 46.189868) + (xy 72.889852 46.185856) + (xy 72.943128 46.129617) + (xy 72.945506 46.127175) + (xy 75.277276 43.795405) + (xy 75.339588 43.761379) + (xy 75.366371 43.7585) + (xy 81.553629 43.7585) + (xy 81.62175 43.778502) + (xy 81.642724 43.795405) + (xy 90.664329 52.81701) + (xy 90.698355 52.879322) + (xy 90.700755 52.917087) + (xy 90.68783 53.064821) + (xy 90.686502 53.08) + (xy 90.706457 53.308087) + (xy 90.707881 53.3134) + (xy 90.707881 53.313402) + (xy 90.749762 53.469701) + (xy 90.765716 53.529243) + (xy 90.768039 53.534224) + (xy 90.768039 53.534225) + (xy 90.860151 53.731762) + (xy 90.860154 53.731767) + (xy 90.862477 53.736749) + (xy 90.993802 53.9243) + (xy 91.1557 54.086198) + (xy 91.160208 54.089355) + (xy 91.160211 54.089357) + (xy 91.194321 54.113241) + (xy 91.343251 54.217523) + (xy 91.348233 54.219846) + (xy 91.348238 54.219849) + (xy 91.545775 54.311961) + (xy 91.550757 54.314284) + (xy 91.556065 54.315706) + (xy 91.556067 54.315707) + (xy 91.766598 54.372119) + (xy 91.7666 54.372119) + (xy 91.771913 54.373543) + (xy 92 54.393498) + (xy 92.158692 54.379614) + (xy 92.228297 54.393603) + (xy 92.251254 54.409111) + (xy 92.281768 54.435035) + (xy 92.289283 54.441964) + (xy 92.294978 54.447659) + (xy 92.29786 54.449939) + (xy 92.31725 54.46528) + (xy 92.320654 54.468071) + (xy 92.370702 54.51059) + (xy 92.376284 54.515332) + (xy 92.3828 54.51866) + (xy 92.387849 54.522027) + (xy 92.392978 54.525194) + (xy 92.398715 54.529733) + (xy 92.464874 54.560654) + (xy 92.468774 54.56256) + (xy 92.49418 54.575533) + (xy 92.525974 54.598655) + (xy 98.41623 60.488911) + (xy 98.428616 60.503323) + (xy 98.437149 60.514918) + (xy 98.437154 60.514923) + (xy 98.441492 60.520818) + (xy 98.44707 60.525557) + (xy 98.447073 60.52556) + (xy 98.481768 60.555035) + (xy 98.489284 60.561965) + (xy 98.494979 60.56766) + (xy 98.497861 60.56994) + (xy 98.517251 60.585281) + (xy 98.520655 60.588072) + (xy 98.570703 60.630591) + (xy 98.576285 60.635333) + (xy 98.582801 60.638661) + (xy 98.58785 60.642028) + (xy 98.592979 60.645195) + (xy 98.598716 60.649734) + (xy 98.664875 60.680655) + (xy 98.668769 60.682558) + (xy 98.733808 60.715769) + (xy 98.740916 60.717508) + (xy 98.746559 60.719607) + (xy 98.752322 60.721524) + (xy 98.75895 60.724622) + (xy 98.766112 60.726112) + (xy 98.766113 60.726112) + (xy 98.830412 60.739486) + (xy 98.834696 60.740456) + (xy 98.90561 60.757808) + (xy 98.911212 60.758156) + (xy 98.911215 60.758156) + (xy 98.916764 60.7585) + (xy 98.916762 60.758536) + (xy 98.920755 60.758775) + (xy 98.924947 60.759149) + (xy 98.932115 60.76064) + (xy 99.00952 60.758546) + (xy 99.012928 60.7585) + (xy 114.633629 60.7585) + (xy 114.70175 60.778502) + (xy 114.722724 60.795405) + (xy 120.664595 66.737276) + (xy 120.698621 66.799588) + (xy 120.7015 66.826371) + (xy 120.7015 66.914523) + (xy 120.681498 66.982644) + (xy 120.647771 67.017735) + (xy 120.640219 67.023023) + (xy 120.483023 67.180219) + (xy 120.479866 67.184727) + (xy 120.479864 67.18473) + (xy 120.376317 67.332611) + (xy 120.355512 67.362324) + (xy 120.353189 67.367306) + (xy 120.353186 67.367311) + (xy 120.304195 67.472373) + (xy 120.257277 67.525658) + (xy 120.189 67.545119) + (xy 120.12104 67.524577) + (xy 120.075805 67.472373) + (xy 120.026814 67.367311) + (xy 120.026811 67.367306) + (xy 120.024488 67.362324) + (xy 120.003683 67.332611) + (xy 119.900136 67.18473) + (xy 119.900134 67.184727) + (xy 119.896977 67.180219) + (xy 119.739781 67.023023) + (xy 119.735269 67.019864) + (xy 119.73526 67.019856) + (xy 119.734873 67.019585) + (xy 119.734743 67.019422) + (xy 119.731057 67.016329) + (xy 119.731679 67.015588) + (xy 119.690549 66.964124) + (xy 119.681568 66.926595) + (xy 119.678915 66.893983) + (xy 119.6785 66.883767) + (xy 119.6785 66.875707) + (xy 119.677569 66.867715) + (xy 119.675211 66.847497) + (xy 119.674778 66.843121) + (xy 119.66886 66.770364) + (xy 119.666605 66.763403) + (xy 119.665418 66.757463) + (xy 119.664029 66.751588) + (xy 119.663182 66.744319) + (xy 119.638264 66.67567) + (xy 119.636847 66.671542) + (xy 119.616607 66.609064) + (xy 119.616606 66.609062) + (xy 119.614351 66.602101) + (xy 119.610555 66.595846) + (xy 119.608049 66.590372) + (xy 119.60533 66.584942) + (xy 119.602833 66.578063) + (xy 119.562814 66.517024) + (xy 119.560467 66.513305) + (xy 119.544293 66.486651) + (xy 119.522595 66.450893) + (xy 119.515197 66.442516) + (xy 119.515224 66.442492) + (xy 119.512571 66.4395) + (xy 119.509868 66.436267) + (xy 119.505856 66.430148) + (xy 119.449617 66.376872) + (xy 119.447175 66.374494) + (xy 114.58377 61.511089) + (xy 114.571384 61.496677) + (xy 114.562851 61.485082) + (xy 114.562846 61.485077) + (xy 114.558508 61.479182) + (xy 114.55293 61.474443) + (xy 114.552927 61.47444) + (xy 114.518232 61.444965) + (xy 114.510716 61.438035) + (xy 114.505021 61.43234) + (xy 114.49888 61.427482) + (xy 114.482749 61.414719) + (xy 114.479345 61.411928) + (xy 114.429297 61.369409) + (xy 114.429295 61.369408) + (xy 114.423715 61.364667) + (xy 114.417199 61.361339) + (xy 114.41215 61.357972) + (xy 114.407021 61.354805) + (xy 114.401284 61.350266) + (xy 114.335125 61.319345) + (xy 114.331225 61.317439) + (xy 114.266192 61.284231) + (xy 114.259084 61.282492) + (xy 114.253441 61.280393) + (xy 114.247678 61.278476) + (xy 114.24105 61.275378) + (xy 114.169583 61.260513) + (xy 114.165299 61.259543) + (xy 114.09439 61.242192) + (xy 114.088788 61.241844) + (xy 114.088785 61.241844) + (xy 114.083236 61.2415) + (xy 114.083238 61.241464) + (xy 114.079245 61.241225) + (xy 114.075053 61.240851) + (xy 114.067885 61.23936) + (xy 114.001675 61.241151) + (xy 113.990479 61.241454) + (xy 113.987072 61.2415) + (xy 95.286371 61.2415) + (xy 95.21825 61.221498) + (xy 95.197276 61.204595) + (xy 87.335671 53.34299) + (xy 87.301645 53.280678) + (xy 87.299245 53.242913) + (xy 87.313019 53.085475) + (xy 87.313498 53.08) + (xy 87.293543 52.851913) + (xy 87.291503 52.8443) + (xy 87.235707 52.636067) + (xy 87.235706 52.636065) + (xy 87.234284 52.630757) + (xy 87.231961 52.625775) + (xy 87.139849 52.428238) + (xy 87.139846 52.428233) + (xy 87.137523 52.423251) + (xy 87.05227 52.301498) + (xy 87.009357 52.240211) + (xy 87.009355 52.240208) + (xy 87.006198 52.2357) + (xy 86.8443 52.073802) + (xy 86.839792 52.070645) + (xy 86.839789 52.070643) + (xy 86.668962 51.951029) + (xy 86.656749 51.942477) + (xy 86.651767 51.940154) + (xy 86.651762 51.940151) + (xy 86.454225 51.848039) + (xy 86.454224 51.848039) + (xy 86.449243 51.845716) + (xy 86.443935 51.844294) + (xy 86.443933 51.844293) + (xy 86.233402 51.787881) + (xy 86.2334 51.787881) + (xy 86.228087 51.786457) + (xy 86 51.766502) + (xy 85.771913 51.786457) + (xy 85.7666 51.787881) + (xy 85.766598 51.787881) + (xy 85.556067 51.844293) + (xy 85.556065 51.844294) + (xy 85.550757 51.845716) + (xy 85.545776 51.848039) + (xy 85.545775 51.848039) + (xy 85.348238 51.940151) + (xy 85.348233 51.940154) + (xy 85.343251 51.942477) + (xy 85.331038 51.951029) + (xy 85.160211 52.070643) + (xy 85.160208 52.070645) + (xy 85.1557 52.073802) + (xy 84.993802 52.2357) + (xy 84.971345 52.267771) + (xy 84.91589 52.312099) + (xy 84.868133 52.3215) + (xy 75.44637 52.3215) + (xy 75.378249 52.301498) + (xy 75.357275 52.284595) + (xy 74.284512 51.211831) + (xy 73.18377 50.111089) + (xy 73.171384 50.096677) + (xy 73.162851 50.085082) + (xy 73.162846 50.085077) + (xy 73.158508 50.079182) + (xy 73.15293 50.074443) + (xy 73.152927 50.07444) + (xy 73.118232 50.044965) + (xy 73.110716 50.038035) + (xy 73.105021 50.03234) + (xy 73.09888 50.027482) + (xy 73.082749 50.014719) + (xy 73.079345 50.011928) + (xy 73.029297 49.969409) + (xy 73.029295 49.969408) + (xy 73.023715 49.964667) + (xy 73.017199 49.961339) + (xy 73.01215 49.957972) + (xy 73.007021 49.954805) + (xy 73.001284 49.950266) + (xy 72.935125 49.919345) + (xy 72.931225 49.917439) + (xy 72.866192 49.884231) + (xy 72.859084 49.882492) + (xy 72.853441 49.880393) + (xy 72.847678 49.878476) + (xy 72.84105 49.875378) + (xy 72.769583 49.860513) + (xy 72.765299 49.859543) + (xy 72.69439 49.842192) + (xy 72.688788 49.841844) + (xy 72.688785 49.841844) + (xy 72.683236 49.8415) + (xy 72.683238 49.841464) + (xy 72.679245 49.841225) + (xy 72.675053 49.840851) + (xy 72.667885 49.83936) + (xy 72.601675 49.841151) + (xy 72.590479 49.841454) + (xy 72.587072 49.8415) + (xy 56.974965 49.8415) + (xy 56.906844 49.821498) + (xy 56.867533 49.781336) + (xy 56.824176 49.710584) + (xy 56.669969 49.530031) + (xy 56.507474 49.391247) + (xy 56.473598 49.345314) + (xy 56.464122 49.323332) + (xy 55.612812 48.472022) + (xy 55.598868 48.464408) + (xy 55.597035 48.464539) + (xy 55.59042 48.46879) + (xy 54.73892 49.32029) + (xy 54.717974 49.358648) + (xy 54.689218 49.394072) + (xy 54.589443 49.479288) + (xy 54.530031 49.530031) + (xy 54.375824 49.710584) + (xy 54.373245 49.714792) + (xy 54.373241 49.714798) + (xy 54.269412 49.884231) + (xy 54.25176 49.913037) + (xy 54.249867 49.917607) + (xy 54.249865 49.917611) + (xy 54.162789 50.127833) + (xy 54.160895 50.132406) + (xy 54.15974 50.137218) + (xy 54.126577 50.275353) + (xy 54.105465 50.363289) + (xy 54.086835 50.6) + (xy 54.105465 50.836711) + (xy 54.106619 50.841518) + (xy 54.10662 50.841524) + (xy 54.129105 50.935179) + (xy 54.160895 51.067594) + (xy 54.162788 51.072165) + (xy 54.162789 51.072167) + (xy 54.249772 51.282163) + (xy 54.25176 51.286963) + (xy 54.254346 51.291183) + (xy 54.373241 51.485202) + (xy 54.373245 51.485208) + (xy 54.375824 51.489416) + (xy 54.530031 51.669969) + (xy 54.710584 51.824176) + (xy 54.714792 51.826755) + (xy 54.714798 51.826759) + (xy 54.903633 51.942477) + (xy 54.913037 51.94824) + (xy 54.917607 51.950133) + (xy 54.917611 51.950135) + (xy 55.127833 52.037211) + (xy 55.132406 52.039105) + (xy 55.27351 52.072981) + (xy 55.335079 52.108333) + (xy 55.367762 52.17136) + (xy 55.361182 52.242051) + (xy 55.317427 52.297962) + (xy 55.244096 52.3215) + (xy 54.446371 52.3215) + (xy 54.37825 52.301498) + (xy 54.357276 52.284595) + (xy 47.18377 45.111089) + (xy 47.171384 45.096677) + (xy 47.162851 45.085082) + (xy 47.162846 45.085077) + (xy 47.158508 45.079182) + (xy 47.15293 45.074443) + (xy 47.152927 45.07444) + (xy 47.118232 45.044965) + (xy 47.110716 45.038035) + (xy 47.105021 45.03234) + (xy 47.090359 45.02074) + (xy 47.082749 45.014719) + (xy 47.079345 45.011928) + (xy 47.029297 44.969409) + (xy 47.029295 44.969408) + (xy 47.023715 44.964667) + (xy 47.017199 44.961339) + (xy 47.01215 44.957972) + (xy 47.007021 44.954805) + (xy 47.001284 44.950266) + (xy 46.935125 44.919345) + (xy 46.931225 44.917439) + (xy 46.866192 44.884231) + (xy 46.859084 44.882492) + (xy 46.853441 44.880393) + (xy 46.847678 44.878476) + (xy 46.84105 44.875378) + (xy 46.769583 44.860513) + (xy 46.765299 44.859543) + (xy 46.69439 44.842192) + (xy 46.688788 44.841844) + (xy 46.688785 44.841844) + (xy 46.683236 44.8415) + (xy 46.683238 44.841464) + (xy 46.679245 44.841225) + (xy 46.675053 44.840851) + (xy 46.667885 44.83936) + (xy 46.601675 44.841151) + (xy 46.590479 44.841454) + (xy 46.587072 44.8415) + (xy 42.474965 44.8415) + (xy 42.406844 44.821498) + (xy 42.367533 44.781336) + (xy 42.359264 44.767842) + (xy 42.324176 44.710584) + (xy 42.169969 44.530031) + (xy 41.989416 44.375824) + (xy 41.985208 44.373245) + (xy 41.985202 44.373241) + (xy 41.791183 44.254346) + (xy 41.786963 44.25176) + (xy 41.782393 44.249867) + (xy 41.782389 44.249865) + (xy 41.572167 44.162789) + (xy 41.572165 44.162788) + (xy 41.567594 44.160895) + (xy 41.487391 44.14164) + (xy 41.341524 44.10662) + (xy 41.341518 44.106619) + (xy 41.336711 44.105465) + (xy 41.1 44.086835) + (xy 40.863289 44.105465) + (xy 40.858482 44.106619) + (xy 40.858476 44.10662) + (xy 40.712609 44.14164) + (xy 40.632406 44.160895) + (xy 40.627835 44.162788) + (xy 40.627833 44.162789) + (xy 40.417611 44.249865) + (xy 40.417607 44.249867) + (xy 40.413037 44.25176) + (xy 40.408817 44.254346) + (xy 40.214798 44.373241) + (xy 40.214792 44.373245) + (xy 40.210584 44.375824) + (xy 40.030031 44.530031) + (xy 39.875824 44.710584) + (xy 39.873245 44.714792) + (xy 39.873241 44.714798) + (xy 39.769412 44.884231) + (xy 39.75176 44.913037) + (xy 39.749867 44.917607) + (xy 39.749865 44.917611) + (xy 39.697114 45.044965) + (xy 39.660895 45.132406) + (xy 39.650372 45.176236) + (xy 39.606777 45.357825) + (xy 39.605465 45.363289) + (xy 39.586835 45.6) + (xy 35.008 45.6) + (xy 35.008 43.798134) + (xy 46.0915 43.798134) + (xy 46.098255 43.860316) + (xy 46.149385 43.996705) + (xy 46.236739 44.113261) + (xy 46.353295 44.200615) + (xy 46.489684 44.251745) + (xy 46.551866 44.2585) + (xy 49.648134 44.2585) + (xy 49.710316 44.251745) + (xy 49.846705 44.200615) + (xy 49.963261 44.113261) + (xy 50.050615 43.996705) + (xy 50.101745 43.860316) + (xy 50.1085 43.798134) + (xy 50.1085 42.92) + (xy 62.686502 42.92) + (xy 62.706457 43.148087) + (xy 62.765716 43.369243) + (xy 62.768039 43.374224) + (xy 62.768039 43.374225) + (xy 62.860151 43.571762) + (xy 62.860154 43.571767) + (xy 62.862477 43.576749) + (xy 62.865634 43.581257) + (xy 62.990631 43.759771) + (xy 62.993802 43.7643) + (xy 63.1557 43.926198) + (xy 63.160208 43.929355) + (xy 63.160211 43.929357) + (xy 63.191276 43.951109) + (xy 63.343251 44.057523) + (xy 63.348233 44.059846) + (xy 63.348238 44.059849) + (xy 63.533491 44.146233) + (xy 63.550757 44.154284) + (xy 63.556065 44.155706) + (xy 63.556067 44.155707) + (xy 63.766598 44.212119) + (xy 63.7666 44.212119) + (xy 63.771913 44.213543) + (xy 64 44.233498) + (xy 64.228087 44.213543) + (xy 64.2334 44.212119) + (xy 64.233402 44.212119) + (xy 64.443933 44.155707) + (xy 64.443935 44.155706) + (xy 64.449243 44.154284) + (xy 64.466509 44.146233) + (xy 64.651762 44.059849) + (xy 64.651767 44.059846) + (xy 64.656749 44.057523) + (xy 64.808724 43.951109) + (xy 64.839789 43.929357) + (xy 64.839792 43.929355) + (xy 64.8443 43.926198) + (xy 65.006198 43.7643) + (xy 65.00937 43.759771) + (xy 65.134366 43.581257) + (xy 65.137523 43.576749) + (xy 65.139846 43.571767) + (xy 65.139849 43.571762) + (xy 65.231961 43.374225) + (xy 65.231961 43.374224) + (xy 65.234284 43.369243) + (xy 65.293543 43.148087) + (xy 65.313498 42.92) + (xy 67.606502 42.92) + (xy 67.626457 43.148087) + (xy 67.685716 43.369243) + (xy 67.688039 43.374224) + (xy 67.688039 43.374225) + (xy 67.780151 43.571762) + (xy 67.780154 43.571767) + (xy 67.782477 43.576749) + (xy 67.785634 43.581257) + (xy 67.910631 43.759771) + (xy 67.913802 43.7643) + (xy 68.0757 43.926198) + (xy 68.080208 43.929355) + (xy 68.080211 43.929357) + (xy 68.111276 43.951109) + (xy 68.263251 44.057523) + (xy 68.268233 44.059846) + (xy 68.268238 44.059849) + (xy 68.453491 44.146233) + (xy 68.470757 44.154284) + (xy 68.476065 44.155706) + (xy 68.476067 44.155707) + (xy 68.686598 44.212119) + (xy 68.6866 44.212119) + (xy 68.691913 44.213543) + (xy 68.92 44.233498) + (xy 69.148087 44.213543) + (xy 69.1534 44.212119) + (xy 69.153402 44.212119) + (xy 69.363933 44.155707) + (xy 69.363935 44.155706) + (xy 69.369243 44.154284) + (xy 69.386509 44.146233) + (xy 69.571762 44.059849) + (xy 69.571767 44.059846) + (xy 69.576749 44.057523) + (xy 69.728724 43.951109) + (xy 69.759789 43.929357) + (xy 69.759792 43.929355) + (xy 69.7643 43.926198) + (xy 69.926198 43.7643) + (xy 69.92937 43.759771) + (xy 70.054366 43.581257) + (xy 70.057523 43.576749) + (xy 70.059846 43.571767) + (xy 70.059849 43.571762) + (xy 70.151961 43.374225) + (xy 70.151961 43.374224) + (xy 70.154284 43.369243) + (xy 70.213543 43.148087) + (xy 70.233498 42.92) + (xy 70.213543 42.691913) + (xy 70.161229 42.496677) + (xy 70.155707 42.476067) + (xy 70.155706 42.476065) + (xy 70.154284 42.470757) + (xy 70.125198 42.408381) + (xy 70.059849 42.268238) + (xy 70.059846 42.268233) + (xy 70.057523 42.263251) + (xy 69.926198 42.0757) + (xy 69.7643 41.913802) + (xy 69.759792 41.910645) + (xy 69.759789 41.910643) + (xy 69.681611 41.855902) + (xy 69.576749 41.782477) + (xy 69.571767 41.780154) + (xy 69.571762 41.780151) + (xy 69.374225 41.688039) + (xy 69.374224 41.688039) + (xy 69.369243 41.685716) + (xy 69.363935 41.684294) + (xy 69.363933 41.684293) + (xy 69.153402 41.627881) + (xy 69.1534 41.627881) + (xy 69.148087 41.626457) + (xy 68.92 41.606502) + (xy 68.691913 41.626457) + (xy 68.6866 41.627881) + (xy 68.686598 41.627881) + (xy 68.476067 41.684293) + (xy 68.476065 41.684294) + (xy 68.470757 41.685716) + (xy 68.465776 41.688039) + (xy 68.465775 41.688039) + (xy 68.268238 41.780151) + (xy 68.268233 41.780154) + (xy 68.263251 41.782477) + (xy 68.158389 41.855902) + (xy 68.080211 41.910643) + (xy 68.080208 41.910645) + (xy 68.0757 41.913802) + (xy 67.913802 42.0757) + (xy 67.782477 42.263251) + (xy 67.780154 42.268233) + (xy 67.780151 42.268238) + (xy 67.714802 42.408381) + (xy 67.685716 42.470757) + (xy 67.684294 42.476065) + (xy 67.684293 42.476067) + (xy 67.678771 42.496677) + (xy 67.626457 42.691913) + (xy 67.606502 42.92) + (xy 65.313498 42.92) + (xy 65.293543 42.691913) + (xy 65.241229 42.496677) + (xy 65.235707 42.476067) + (xy 65.235706 42.476065) + (xy 65.234284 42.470757) + (xy 65.205198 42.408381) + (xy 65.139849 42.268238) + (xy 65.139846 42.268233) + (xy 65.137523 42.263251) + (xy 65.006198 42.0757) + (xy 64.8443 41.913802) + (xy 64.839792 41.910645) + (xy 64.839789 41.910643) + (xy 64.761611 41.855902) + (xy 64.656749 41.782477) + (xy 64.651767 41.780154) + (xy 64.651762 41.780151) + (xy 64.454225 41.688039) + (xy 64.454224 41.688039) + (xy 64.449243 41.685716) + (xy 64.443935 41.684294) + (xy 64.443933 41.684293) + (xy 64.233402 41.627881) + (xy 64.2334 41.627881) + (xy 64.228087 41.626457) + (xy 64 41.606502) + (xy 63.771913 41.626457) + (xy 63.7666 41.627881) + (xy 63.766598 41.627881) + (xy 63.556067 41.684293) + (xy 63.556065 41.684294) + (xy 63.550757 41.685716) + (xy 63.545776 41.688039) + (xy 63.545775 41.688039) + (xy 63.348238 41.780151) + (xy 63.348233 41.780154) + (xy 63.343251 41.782477) + (xy 63.238389 41.855902) + (xy 63.160211 41.910643) + (xy 63.160208 41.910645) + (xy 63.1557 41.913802) + (xy 62.993802 42.0757) + (xy 62.862477 42.263251) + (xy 62.860154 42.268233) + (xy 62.860151 42.268238) + (xy 62.794802 42.408381) + (xy 62.765716 42.470757) + (xy 62.764294 42.476065) + (xy 62.764293 42.476067) + (xy 62.758771 42.496677) + (xy 62.706457 42.691913) + (xy 62.686502 42.92) + (xy 50.1085 42.92) + (xy 50.1085 41.201866) + (xy 50.101745 41.139684) + (xy 50.050615 41.003295) + (xy 49.963261 40.886739) + (xy 49.846705 40.799385) + (xy 49.710316 40.748255) + (xy 49.648134 40.7415) + (xy 46.551866 40.7415) + (xy 46.489684 40.748255) + (xy 46.353295 40.799385) + (xy 46.236739 40.886739) + (xy 46.149385 41.003295) + (xy 46.098255 41.139684) + (xy 46.0915 41.201866) + (xy 46.0915 43.798134) + (xy 35.008 43.798134) + (xy 35.008 39.892791) + (xy 35.028002 39.82467) + (xy 35.081658 39.778177) + (xy 35.151932 39.768073) + (xy 35.216512 39.797567) + (xy 35.23858 39.822514) + (xy 35.353834 39.994029) + (xy 35.584665 40.26815) + (xy 35.843751 40.515738) + (xy 36.128061 40.733897) + (xy 36.160056 40.75335) + (xy 36.431355 40.918303) + (xy 36.43136 40.918306) + (xy 36.43427 40.920075) + (xy 36.437358 40.921521) + (xy 36.437357 40.921521) + (xy 36.75571 41.070649) + (xy 36.75572 41.070653) + (xy 36.758794 41.072093) + (xy 36.762012 41.073195) + (xy 36.762015 41.073196) + (xy 37.094615 41.187071) + (xy 37.094623 41.187073) + (xy 37.097838 41.188174) + (xy 37.447435 41.266959) + (xy 37.499728 41.272917) + (xy 37.800114 41.307142) + (xy 37.800122 41.307142) + (xy 37.803497 41.307527) + (xy 37.806901 41.307545) + (xy 37.806904 41.307545) + (xy 38.001227 41.308562) + (xy 38.161857 41.309403) + (xy 38.165243 41.309053) + (xy 38.165245 41.309053) + (xy 38.514932 41.272917) + (xy 38.514941 41.272916) + (xy 38.518324 41.272566) + (xy 38.521657 41.271852) + (xy 38.52166 41.271851) + (xy 38.694186 41.234864) + (xy 38.868727 41.197446) + (xy 39.208968 41.084922) + (xy 39.535066 40.936311) + (xy 39.629052 40.880506) + (xy 39.840262 40.755099) + (xy 39.840267 40.755096) + (xy 39.843207 40.75335) + (xy 39.846299 40.751029) + (xy 40.023725 40.617813) + (xy 40.129786 40.53818) + (xy 40.391451 40.293319) + (xy 40.62514 40.02163) + (xy 40.73175 39.866512) + (xy 40.82619 39.729101) + (xy 40.826195 39.729094) + (xy 40.82812 39.726292) + (xy 40.829732 39.723298) + (xy 40.829737 39.72329) + (xy 40.996395 39.413772) + (xy 40.998017 39.41076) + (xy 41.104294 39.149029) + (xy 41.131562 39.081877) + (xy 41.131564 39.081872) + (xy 41.132842 39.078724) + (xy 41.23102 38.73407) + (xy 41.291401 38.380828) + (xy 41.313278 38.023131) + (xy 41.313359 38) + (xy 41.293979 37.642159) + (xy 41.236066 37.288505) + (xy 41.140297 36.943173) + (xy 41.007793 36.610205) + (xy 40.894649 36.396513) + (xy 40.841702 36.296513) + (xy 40.841698 36.296506) + (xy 40.840103 36.293494) + (xy 40.63919 35.996746) + (xy 40.407403 35.723432) + (xy 40.147454 35.47675) + (xy 39.862384 35.259585) + (xy 39.848733 35.25135) + (xy 39.83305 35.241889) + (xy 39.785053 35.189575) + (xy 39.772958 35.119617) + (xy 39.800605 35.054224) + (xy 39.859217 35.014161) + (xy 39.898134 35.008) + (xy 55.874 35.008) + ) + ) + ) +) diff --git a/cad/fan_monitor/fan_monitor.kicad_pro b/cad/fan_monitor/fan_monitor.kicad_pro new file mode 100644 index 0000000..5bfc140 --- /dev/null +++ b/cad/fan_monitor/fan_monitor.kicad_pro @@ -0,0 +1,484 @@ +{ + "board": { + "design_settings": { + "defaults": { + "board_outline_line_width": 0.09999999999999999, + "copper_line_width": 0.19999999999999998, + "copper_text_italic": false, + "copper_text_size_h": 1.5, + "copper_text_size_v": 1.5, + "copper_text_thickness": 0.3, + "copper_text_upright": false, + "courtyard_line_width": 0.049999999999999996, + "dimension_precision": 4, + "dimension_units": 3, + "dimensions": { + "arrow_length": 1270000, + "extension_offset": 500000, + "keep_text_aligned": true, + "suppress_zeroes": false, + "text_position": 0, + "units_format": 1 + }, + "fab_line_width": 0.09999999999999999, + "fab_text_italic": false, + "fab_text_size_h": 1.0, + "fab_text_size_v": 1.0, + "fab_text_thickness": 0.15, + "fab_text_upright": false, + "other_line_width": 0.15, + "other_text_italic": false, + "other_text_size_h": 1.0, + "other_text_size_v": 1.0, + "other_text_thickness": 0.15, + "other_text_upright": false, + "pads": { + "drill": 3.2, + "height": 5.6, + "width": 5.6 + }, + "silk_line_width": 0.15, + "silk_text_italic": false, + "silk_text_size_h": 1.0, + "silk_text_size_v": 1.0, + "silk_text_thickness": 0.15, + "silk_text_upright": false, + "zones": { + "45_degree_only": false, + "min_clearance": 0.508 + } + }, + "diff_pair_dimensions": [ + { + "gap": 0.0, + "via_gap": 0.0, + "width": 0.0 + } + ], + "drc_exclusions": [], + "meta": { + "version": 2 + }, + "rule_severities": { + "annular_width": "error", + "clearance": "error", + "copper_edge_clearance": "error", + "courtyards_overlap": "error", + "diff_pair_gap_out_of_range": "error", + "diff_pair_uncoupled_length_too_long": "error", + "drill_out_of_range": "error", + "duplicate_footprints": "warning", + "extra_footprint": "warning", + "footprint_type_mismatch": "error", + "hole_clearance": "error", + "hole_near_hole": "error", + "invalid_outline": "error", + "item_on_disabled_layer": "error", + "items_not_allowed": "error", + "length_out_of_range": "error", + "malformed_courtyard": "ignore", + "microvia_drill_out_of_range": "error", + "missing_courtyard": "ignore", + "missing_footprint": "warning", + "net_conflict": "warning", + "npth_inside_courtyard": "ignore", + "padstack": "error", + "pth_inside_courtyard": "ignore", + "shorting_items": "error", + "silk_over_copper": "ignore", + "silk_overlap": "warning", + "skew_out_of_range": "error", + "through_hole_pad_without_hole": "error", + "too_many_vias": "error", + "track_dangling": "warning", + "track_width": "error", + "tracks_crossing": "error", + "unconnected_items": "error", + "unresolved_variable": "error", + "via_dangling": "warning", + "zone_has_empty_net": "error", + "zones_intersect": "error" + }, + "rules": { + "allow_blind_buried_vias": false, + "allow_microvias": false, + "max_error": 0.005, + "min_clearance": 0.0, + "min_copper_edge_clearance": 0.0, + "min_hole_clearance": 0.25, + "min_hole_to_hole": 0.25, + "min_microvia_diameter": 0.19999999999999998, + "min_microvia_drill": 0.09999999999999999, + "min_silk_clearance": 0.0, + "min_through_hole_diameter": 0.3, + "min_track_width": 0.15, + "min_via_annular_width": 0.049999999999999996, + "min_via_diameter": 0.39999999999999997, + "solder_mask_clearance": 0.0, + "solder_mask_min_width": 0.0, + "use_height_for_length_calcs": true + }, + "track_widths": [ + 0.0, + 0.5, + 0.8 + ], + "via_dimensions": [ + { + "diameter": 0.0, + "drill": 0.0 + }, + { + "diameter": 0.6, + "drill": 0.3 + }, + { + "diameter": 0.9, + "drill": 0.6 + } + ], + "zones_allow_external_fillets": false, + "zones_use_no_outline": true + }, + "layer_presets": [] + }, + "boards": [], + "cvpcb": { + "equivalence_files": [] + }, + "erc": { + "erc_exclusions": [], + "meta": { + "version": 0 + }, + "pin_map": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 2, + 0, + 1, + 0, + 0, + 1, + 0, + 2, + 2, + 2, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 2 + ], + [ + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 1, + 1, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + [ + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 2 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 2, + 1, + 2, + 0, + 0, + 1, + 0, + 2, + 2, + 2, + 2 + ], + [ + 0, + 2, + 0, + 1, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 2 + ], + [ + 0, + 2, + 1, + 1, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 2 + ], + [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ] + ], + "rule_severities": { + "bus_definition_conflict": "error", + "bus_entry_needed": "error", + "bus_label_syntax": "error", + "bus_to_bus_conflict": "error", + "bus_to_net_conflict": "error", + "different_unit_footprint": "error", + "different_unit_net": "error", + "duplicate_reference": "error", + "duplicate_sheet_names": "error", + "extra_units": "error", + "global_label_dangling": "warning", + "hier_label_mismatch": "error", + "label_dangling": "error", + "lib_symbol_issues": "warning", + "multiple_net_names": "warning", + "net_not_bus_member": "warning", + "no_connect_connected": "warning", + "no_connect_dangling": "warning", + "pin_not_connected": "error", + "pin_not_driven": "error", + "pin_to_pin": "warning", + "power_pin_not_driven": "error", + "similar_labels": "warning", + "unannotated": "error", + "unit_value_mismatch": "error", + "unresolved_variable": "error", + "wire_dangling": "error" + } + }, + "libraries": { + "pinned_footprint_libs": [], + "pinned_symbol_libs": [] + }, + "meta": { + "filename": "fan_monitor.kicad_pro", + "version": 1 + }, + "net_settings": { + "classes": [ + { + "bus_width": 12.0, + "clearance": 0.2, + "diff_pair_gap": 0.25, + "diff_pair_via_gap": 0.25, + "diff_pair_width": 0.2, + "line_style": 0, + "microvia_diameter": 0.3, + "microvia_drill": 0.1, + "name": "Default", + "pcb_color": "rgba(0, 0, 0, 0.000)", + "schematic_color": "rgba(0, 0, 0, 0.000)", + "track_width": 0.5, + "via_diameter": 0.6, + "via_drill": 0.35, + "wire_width": 6.0 + }, + { + "bus_width": 12.0, + "clearance": 2.4, + "diff_pair_gap": 0.25, + "diff_pair_via_gap": 0.25, + "diff_pair_width": 0.2, + "line_style": 0, + "microvia_diameter": 0.3, + "microvia_drill": 0.1, + "name": "380AC", + "nets": [ + "Net-(F1-Pad1)", + "Net-(F1-Pad2)" + ], + "pcb_color": "rgba(0, 0, 0, 0.000)", + "schematic_color": "rgba(0, 0, 0, 0.000)", + "track_width": 0.8, + "via_diameter": 0.9, + "via_drill": 0.6, + "wire_width": 6.0 + }, + { + "bus_width": 12.0, + "clearance": 0.2, + "diff_pair_gap": 0.25, + "diff_pair_via_gap": 0.25, + "diff_pair_width": 0.2, + "line_style": 0, + "microvia_diameter": 0.3, + "microvia_drill": 0.1, + "name": "5V_main", + "nets": [ + "Net-(J4-Pad1)" + ], + "pcb_color": "rgba(0, 0, 0, 0.000)", + "schematic_color": "rgba(0, 0, 0, 0.000)", + "track_width": 0.8, + "via_diameter": 0.6, + "via_drill": 0.35, + "wire_width": 6.0 + } + ], + "meta": { + "version": 2 + }, + "net_colors": null + }, + "pcbnew": { + "last_paths": { + "gencad": "", + "idf": "", + "netlist": "", + "specctra_dsn": "", + "step": "", + "vrml": "" + }, + "page_layout_descr_file": "" + }, + "schematic": { + "annotate_start_num": 0, + "drawing": { + "default_line_thickness": 6.0, + "default_text_size": 50.0, + "field_names": [], + "intersheets_ref_own_page": false, + "intersheets_ref_prefix": "", + "intersheets_ref_short": false, + "intersheets_ref_show": false, + "intersheets_ref_suffix": "", + "junction_size_choice": 3, + "label_size_ratio": 0.375, + "pin_symbol_size": 25.0, + "text_offset_ratio": 0.15 + }, + "legacy_lib_dir": "", + "legacy_lib_list": [], + "meta": { + "version": 1 + }, + "net_format_name": "", + "ngspice": { + "fix_include_paths": true, + "fix_passive_vals": false, + "meta": { + "version": 0 + }, + "model_mode": 0, + "workbook_filename": "" + }, + "page_layout_descr_file": "", + "plot_directory": "", + "spice_adjust_passive_values": false, + "spice_external_command": "spice \"%I\"", + "subpart_first_id": 65, + "subpart_id_separator": 0 + }, + "sheets": [ + [ + "6475547d-3216-45a4-a15c-48314f1dd0f9", + "" + ] + ], + "text_variables": {} +} diff --git a/cad/fan_monitor/fan_monitor.kicad_sch b/cad/fan_monitor/fan_monitor.kicad_sch new file mode 100644 index 0000000..b1224be --- /dev/null +++ b/cad/fan_monitor/fan_monitor.kicad_sch @@ -0,0 +1,3574 @@ +(kicad_sch (version 20211123) (generator eeschema) + + (uuid 6475547d-3216-45a4-a15c-48314f1dd0f9) + + (paper "A4") + + (title_block + (title "Main Board") + (date "2022-03-05") + (rev "2.0") + ) + + (lib_symbols + (symbol "Connector_Generic:Conn_01x02" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "J" (id 0) (at 0 2.54 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "Conn_01x02" (id 1) (at 0 -5.08 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "connector" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Generic connector, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "Connector*:*_1x??_*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "Conn_01x02_1_1" + (rectangle (start -1.27 -2.413) (end 0 -2.667) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 0.127) (end 0 -0.127) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 1.27) (end 1.27 -3.81) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type background)) + ) + (pin passive line (at -5.08 0 0) (length 3.81) + (name "Pin_1" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -2.54 0) (length 3.81) + (name "Pin_2" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Connector_Generic:Conn_02x08_Odd_Even" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "J" (id 0) (at 1.27 10.16 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "Conn_02x08_Odd_Even" (id 1) (at 1.27 -12.7 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "connector" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Generic connector, double row, 02x08, odd/even pin numbering scheme (row 1 odd numbers, row 2 even numbers), script generated (kicad-library-utils/schlib/autogen/connector/)" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "Connector*:*_2x??_*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "Conn_02x08_Odd_Even_1_1" + (rectangle (start -1.27 -10.033) (end 0 -10.287) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 -7.493) (end 0 -7.747) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 -4.953) (end 0 -5.207) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 -2.413) (end 0 -2.667) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 0.127) (end 0 -0.127) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 2.667) (end 0 2.413) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 5.207) (end 0 4.953) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 7.747) (end 0 7.493) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 8.89) (end 3.81 -11.43) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type background)) + ) + (rectangle (start 3.81 -10.033) (end 2.54 -10.287) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start 3.81 -7.493) (end 2.54 -7.747) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start 3.81 -4.953) (end 2.54 -5.207) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start 3.81 -2.413) (end 2.54 -2.667) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start 3.81 0.127) (end 2.54 -0.127) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start 3.81 2.667) (end 2.54 2.413) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start 3.81 5.207) (end 2.54 4.953) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start 3.81 7.747) (end 2.54 7.493) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (pin passive line (at -5.08 7.62 0) (length 3.81) + (name "Pin_1" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -2.54 180) (length 3.81) + (name "Pin_10" (effects (font (size 1.27 1.27)))) + (number "10" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -5.08 0) (length 3.81) + (name "Pin_11" (effects (font (size 1.27 1.27)))) + (number "11" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -5.08 180) (length 3.81) + (name "Pin_12" (effects (font (size 1.27 1.27)))) + (number "12" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -7.62 0) (length 3.81) + (name "Pin_13" (effects (font (size 1.27 1.27)))) + (number "13" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -7.62 180) (length 3.81) + (name "Pin_14" (effects (font (size 1.27 1.27)))) + (number "14" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -10.16 0) (length 3.81) + (name "Pin_15" (effects (font (size 1.27 1.27)))) + (number "15" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -10.16 180) (length 3.81) + (name "Pin_16" (effects (font (size 1.27 1.27)))) + (number "16" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 7.62 180) (length 3.81) + (name "Pin_2" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 5.08 0) (length 3.81) + (name "Pin_3" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 5.08 180) (length 3.81) + (name "Pin_4" (effects (font (size 1.27 1.27)))) + (number "4" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 2.54 0) (length 3.81) + (name "Pin_5" (effects (font (size 1.27 1.27)))) + (number "5" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 2.54 180) (length 3.81) + (name "Pin_6" (effects (font (size 1.27 1.27)))) + (number "6" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 0 0) (length 3.81) + (name "Pin_7" (effects (font (size 1.27 1.27)))) + (number "7" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 0 180) (length 3.81) + (name "Pin_8" (effects (font (size 1.27 1.27)))) + (number "8" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -2.54 0) (length 3.81) + (name "Pin_9" (effects (font (size 1.27 1.27)))) + (number "9" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Device:Battery_Cell" (pin_numbers hide) (pin_names (offset 0) hide) (in_bom yes) (on_board yes) + (property "Reference" "BT" (id 0) (at 2.54 2.54 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "Battery_Cell" (id 1) (at 2.54 0 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "" (id 2) (at 0 1.524 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 0 1.524 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "battery cell" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Single-cell battery" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "Battery_Cell_0_1" + (rectangle (start -2.286 1.778) (end 2.286 1.524) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type outline)) + ) + (rectangle (start -1.5748 1.1938) (end 1.4732 0.6858) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type outline)) + ) + (polyline + (pts + (xy 0 0.762) + (xy 0 0) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 1.778) + (xy 0 2.54) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.508 3.429) + (xy 1.524 3.429) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.016 3.937) + (xy 1.016 2.921) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "Battery_Cell_1_1" + (pin passive line (at 0 5.08 270) (length 2.54) + (name "+" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 0 -2.54 90) (length 2.54) + (name "-" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Device:C" (pin_numbers hide) (pin_names (offset 0.254)) (in_bom yes) (on_board yes) + (property "Reference" "C" (id 0) (at 0.635 2.54 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "C" (id 1) (at 0.635 -2.54 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "" (id 2) (at 0.9652 -3.81 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "cap capacitor" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Unpolarized capacitor" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "C_*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "C_0_1" + (polyline + (pts + (xy -2.032 -0.762) + (xy 2.032 -0.762) + ) + (stroke (width 0.508) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -2.032 0.762) + (xy 2.032 0.762) + ) + (stroke (width 0.508) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "C_1_1" + (pin passive line (at 0 3.81 270) (length 2.794) + (name "~" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 0 -3.81 90) (length 2.794) + (name "~" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Device:Fuse" (pin_numbers hide) (pin_names (offset 0)) (in_bom yes) (on_board yes) + (property "Reference" "F" (id 0) (at 2.032 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "Fuse" (id 1) (at -1.905 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (id 2) (at -1.778 0 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "fuse" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Fuse" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "*Fuse*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "Fuse_0_1" + (rectangle (start -0.762 -2.54) (end 0.762 2.54) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 2.54) + (xy 0 -2.54) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "Fuse_1_1" + (pin passive line (at 0 3.81 270) (length 1.27) + (name "~" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 0 -3.81 90) (length 1.27) + (name "~" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Device:R" (pin_numbers hide) (pin_names (offset 0)) (in_bom yes) (on_board yes) + (property "Reference" "R" (id 0) (at 2.032 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "R" (id 1) (at 0 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (id 2) (at -1.778 0 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "R res resistor" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Resistor" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "R_*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "R_0_1" + (rectangle (start -1.016 -2.54) (end 1.016 2.54) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "R_1_1" + (pin passive line (at 0 3.81 270) (length 1.27) + (name "~" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 0 -3.81 90) (length 1.27) + (name "~" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Device:R_Potentiometer" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "RV" (id 0) (at -4.445 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "R_Potentiometer" (id 1) (at -2.54 0 90) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "resistor variable" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Potentiometer" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "Potentiometer*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "R_Potentiometer_0_1" + (polyline + (pts + (xy 2.54 0) + (xy 1.524 0) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.143 0) + (xy 2.286 0.508) + (xy 2.286 -0.508) + (xy 1.143 0) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type outline)) + ) + (rectangle (start 1.016 2.54) (end -1.016 -2.54) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "R_Potentiometer_1_1" + (pin passive line (at 0 3.81 270) (length 1.27) + (name "1" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 3.81 0 180) (length 1.27) + (name "2" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 0 -3.81 90) (length 1.27) + (name "3" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Device:RotaryEncoder_Switch" (pin_names (offset 0.254) hide) (in_bom yes) (on_board yes) + (property "Reference" "SW" (id 0) (at 0 6.604 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "RotaryEncoder_Switch" (id 1) (at 0 -6.604 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (id 2) (at -3.81 4.064 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 0 6.604 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "rotary switch encoder switch push button" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Rotary encoder, dual channel, incremental quadrate outputs, with switch" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "RotaryEncoder*Switch*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "RotaryEncoder_Switch_0_1" + (rectangle (start -5.08 5.08) (end 5.08 -5.08) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type background)) + ) + (circle (center -3.81 0) (radius 0.254) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type outline)) + ) + (arc (start -0.381 -2.794) (mid 2.3622 -0.0635) (end -0.381 2.667) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (circle (center -0.381 0) (radius 1.905) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -0.635 -1.778) + (xy -0.635 1.778) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -0.381 -1.778) + (xy -0.381 1.778) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -0.127 1.778) + (xy -0.127 -1.778) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 3.81 0) + (xy 3.429 0) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 3.81 1.016) + (xy 3.81 -1.016) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -5.08 -2.54) + (xy -3.81 -2.54) + (xy -3.81 -2.032) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -5.08 2.54) + (xy -3.81 2.54) + (xy -3.81 2.032) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.254 -3.048) + (xy -0.508 -2.794) + (xy 0.127 -2.413) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.254 2.921) + (xy -0.508 2.667) + (xy 0.127 2.286) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 5.08 -2.54) + (xy 4.318 -2.54) + (xy 4.318 -1.016) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 5.08 2.54) + (xy 4.318 2.54) + (xy 4.318 1.016) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -5.08 0) + (xy -3.81 0) + (xy -3.81 -1.016) + (xy -3.302 -2.032) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -4.318 0) + (xy -3.81 0) + (xy -3.81 1.016) + (xy -3.302 2.032) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (circle (center 4.318 -1.016) (radius 0.127) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (circle (center 4.318 1.016) (radius 0.127) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "RotaryEncoder_Switch_1_1" + (pin passive line (at -7.62 2.54 0) (length 2.54) + (name "A" (effects (font (size 1.27 1.27)))) + (number "A" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -7.62 -2.54 0) (length 2.54) + (name "B" (effects (font (size 1.27 1.27)))) + (number "B" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -7.62 0 0) (length 2.54) + (name "C" (effects (font (size 1.27 1.27)))) + (number "C" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 2.54 180) (length 2.54) + (name "S1" (effects (font (size 1.27 1.27)))) + (number "S1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -2.54 180) (length 2.54) + (name "S2" (effects (font (size 1.27 1.27)))) + (number "S2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Diode:UF5400" (pin_numbers hide) (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "D" (id 0) (at 0 2.54 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "UF5400" (id 1) (at 0 -2.54 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Diode_THT:D_DO-201AD_P15.24mm_Horizontal" (id 2) (at 0 -4.445 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "http://www.vishay.com/docs/88756/uf5400.pdf" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "diode" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "50V 3A Soft Recovery Ultrafast Rectifier Diode, DO-201AD" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "D*DO?201AD*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "UF5400_0_1" + (polyline + (pts + (xy -1.27 1.27) + (xy -1.27 -1.27) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 0) + (xy -1.27 0) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 1.27) + (xy 1.27 -1.27) + (xy -1.27 0) + (xy 1.27 1.27) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "UF5400_1_1" + (pin passive line (at -3.81 0 0) (length 2.54) + (name "K" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 3.81 0 180) (length 2.54) + (name "A" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "Transistor_FET:BS170" (pin_names hide) (in_bom yes) (on_board yes) + (property "Reference" "Q" (id 0) (at 5.08 1.905 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "BS170" (id 1) (at 5.08 0 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-92_Inline" (id 2) (at 5.08 -1.905 0) + (effects (font (size 1.27 1.27) italic) (justify left) hide) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/BS170-D.PDF" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "ki_keywords" "N-Channel MOSFET" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "0.5A Id, 60V Vds, N-Channel MOSFET, TO-92" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "TO?92*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "BS170_0_1" + (polyline + (pts + (xy 0.254 0) + (xy -2.54 0) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.254 1.905) + (xy 0.254 -1.905) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.762 -1.27) + (xy 0.762 -2.286) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.762 0.508) + (xy 0.762 -0.508) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.762 2.286) + (xy 0.762 1.27) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 2.54 2.54) + (xy 2.54 1.778) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 2.54 -2.54) + (xy 2.54 0) + (xy 0.762 0) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.762 -1.778) + (xy 3.302 -1.778) + (xy 3.302 1.778) + (xy 0.762 1.778) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.016 0) + (xy 2.032 0.381) + (xy 2.032 -0.381) + (xy 1.016 0) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type outline)) + ) + (polyline + (pts + (xy 2.794 0.508) + (xy 2.921 0.381) + (xy 3.683 0.381) + (xy 3.81 0.254) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 3.302 0.381) + (xy 2.921 -0.254) + (xy 3.683 -0.254) + (xy 3.302 0.381) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (circle (center 1.651 0) (radius 2.794) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (circle (center 2.54 -1.778) (radius 0.254) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type outline)) + ) + (circle (center 2.54 1.778) (radius 0.254) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type outline)) + ) + ) + (symbol "BS170_1_1" + (pin passive line (at 2.54 5.08 270) (length 2.54) + (name "D" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -5.08 0 0) (length 2.54) + (name "G" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 2.54 -5.08 90) (length 2.54) + (name "S" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "fan_monitor:1SS315" (pin_numbers hide) (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "D" (id 0) (at 0 2.54 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "1SS315" (id 1) (at 0 -2.54 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Diode_SMD:D_SOD-323_HandSoldering" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "diode CMS SOD-323" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Diode CMS Toshiba, 30mA, 5V, SOD-323" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "TO-???* *_Diode_* *SingleDiode* D_*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "1SS315_0_1" + (polyline + (pts + (xy -1.27 1.27) + (xy -1.27 -1.27) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 0) + (xy -1.27 0) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 1.27) + (xy 1.27 -1.27) + (xy -1.27 0) + (xy 1.27 1.27) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "1SS315_1_1" + (pin passive line (at -3.81 0 0) (length 2.54) + (name "K" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 3.81 0 180) (length 2.54) + (name "A" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "fan_monitor:HF152FD{slash}5-1H" (in_bom yes) (on_board yes) + (property "Reference" "K" (id 0) (at 11.43 3.81 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "HF152FD{slash}5-1H" (id 1) (at 18.415 1.27 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "fan_monitor:HF152FD_Form_A" (id 2) (at 33.655 -1.27 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "SPST 1P1T" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Hongfa, Small Non-Latching Power Relay, Single coil, 400VAC, 1 Form A" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "Relay*1P1T*NO*Panasonic*ADW11xxxxW*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "HF152FD{slash}5-1H_0_0" + (text "?" (at -3.81 3.175 0) + (effects (font (size 1.27 1.27))) + ) + ) + (symbol "HF152FD{slash}5-1H_1_1" + (rectangle (start -10.16 5.08) (end 10.16 -5.08) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type background)) + ) + (rectangle (start -8.255 1.905) (end -1.905 -1.905) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -7.62 -1.905) + (xy -2.54 1.905) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -5.08 -5.08) + (xy -5.08 -1.905) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -5.08 5.08) + (xy -5.08 1.905) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.905 0) + (xy -1.27 0) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -0.635 0) + (xy 0 0) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.635 0) + (xy 1.27 0) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.635 0) + (xy 1.27 0) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.905 0) + (xy 2.54 0) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 3.175 0) + (xy 3.81 0) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 5.08 -2.54) + (xy 3.175 3.81) + ) + (stroke (width 0.508) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 5.08 -2.54) + (xy 5.08 -5.08) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 7.62 3.81) + (xy 7.62 5.08) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 7.62 3.81) + (xy 7.62 2.54) + (xy 6.985 3.175) + (xy 7.62 3.81) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (pin passive line (at -5.08 7.62 270) (length 2.54) + (name "~" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -7.62 90) (length 2.54) + (name "~" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 -7.62 90) (length 2.54) + (name "~" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 7.62 270) (length 2.54) + (name "~" (effects (font (size 1.27 1.27)))) + (number "4" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "fan_monitor:blue_pill" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) + (property "Reference" "U" (id 0) (at -12.7 22.86 0) + (effects (font (size 1.524 1.524))) + ) + (property "Value" "blue_pill" (id 1) (at 7.62 -24.13 0) + (effects (font (size 1.524 1.524))) + ) + (property "Footprint" "Module:blue_pill" (id 2) (at -2.54 19.05 0) + (effects (font (size 1.524 1.524)) hide) + ) + (property "Datasheet" "https://www.electronicshub.org/getting-started-with-stm32f103c8t6-blue-pill/" (id 3) (at -2.54 19.05 0) + (effects (font (size 1.524 1.524)) hide) + ) + (symbol "blue_pill_0_1" + (rectangle (start -13.97 21.59) (end 13.97 -21.59) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "blue_pill_1_1" + (pin power_out line (at 0 26.67 270) (length 5.08) + (name "3.3V" (effects (font (size 1.27 1.27)))) + (number "3V3" (effects (font (size 1.27 1.27)))) + ) + (pin power_out line (at 3.81 26.67 270) (length 5.08) + (name "5V" (effects (font (size 1.27 1.27)))) + (number "5V" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -3.81 -26.67 90) (length 5.08) + (name "BOOT0" (effects (font (size 1.27 1.27)))) + (number "BOOT" (effects (font (size 1.27 1.27)))) + ) + (pin power_out line (at 3.81 -26.67 90) (length 5.08) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "G" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -19.05 -20.32 0) (length 5.08) + (name "RESET" (effects (font (size 1.27 1.27)))) + (number "NRST" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 12.7 0) (length 5.08) + (name "PA0" (effects (font (size 1.27 1.27)))) + (number "PA0" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 10.16 0) (length 5.08) + (name "PA1" (effects (font (size 1.27 1.27)))) + (number "PA1" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -5.08 180) (length 5.08) + (name "PA10" (effects (font (size 1.27 1.27)))) + (number "PA10" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -2.54 180) (length 5.08) + (name "PA11" (effects (font (size 1.27 1.27)))) + (number "PA11" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 0 180) (length 5.08) + (name "PA12" (effects (font (size 1.27 1.27)))) + (number "PA12" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 2.54 180) (length 5.08) + (name "PA15" (effects (font (size 1.27 1.27)))) + (number "PA15" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 7.62 0) (length 5.08) + (name "PA2" (effects (font (size 1.27 1.27)))) + (number "PA2" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 5.08 0) (length 5.08) + (name "PA3" (effects (font (size 1.27 1.27)))) + (number "PA3" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 2.54 0) (length 5.08) + (name "PA4" (effects (font (size 1.27 1.27)))) + (number "PA4" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 0 0) (length 5.08) + (name "PA5" (effects (font (size 1.27 1.27)))) + (number "PA5" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 -2.54 0) (length 5.08) + (name "PA6" (effects (font (size 1.27 1.27)))) + (number "PA6" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 -5.08 0) (length 5.08) + (name "PA7" (effects (font (size 1.27 1.27)))) + (number "PA7" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -10.16 180) (length 5.08) + (name "PA8" (effects (font (size 1.27 1.27)))) + (number "PA8" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -7.62 180) (length 5.08) + (name "PA9" (effects (font (size 1.27 1.27)))) + (number "PA9" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 -7.62 0) (length 5.08) + (name "PB0" (effects (font (size 1.27 1.27)))) + (number "PB0" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 -10.16 0) (length 5.08) + (name "PB1" (effects (font (size 1.27 1.27)))) + (number "PB1" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 -12.7 0) (length 5.08) + (name "PB10" (effects (font (size 1.27 1.27)))) + (number "PB10" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 -15.24 0) (length 5.08) + (name "PB11" (effects (font (size 1.27 1.27)))) + (number "PB11" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -20.32 180) (length 5.08) + (name "PB12" (effects (font (size 1.27 1.27)))) + (number "PB12" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -17.78 180) (length 5.08) + (name "PB13" (effects (font (size 1.27 1.27)))) + (number "PB13" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -15.24 180) (length 5.08) + (name "PB14" (effects (font (size 1.27 1.27)))) + (number "PB14" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -12.7 180) (length 5.08) + (name "PB15" (effects (font (size 1.27 1.27)))) + (number "PB15" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -1.27 -26.67 90) (length 5.08) + (name "BOOT1" (effects (font (size 1.27 1.27)))) + (number "PB2" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 5.08 180) (length 5.08) + (name "PB3" (effects (font (size 1.27 1.27)))) + (number "PB3" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 7.62 180) (length 5.08) + (name "PB4" (effects (font (size 1.27 1.27)))) + (number "PB4" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 10.16 180) (length 5.08) + (name "PB5" (effects (font (size 1.27 1.27)))) + (number "PB5" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 12.7 180) (length 5.08) + (name "PB6" (effects (font (size 1.27 1.27)))) + (number "PB6" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 15.24 180) (length 5.08) + (name "PB7" (effects (font (size 1.27 1.27)))) + (number "PB7" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 17.78 180) (length 5.08) + (name "PB8" (effects (font (size 1.27 1.27)))) + (number "PB8" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 20.32 180) (length 5.08) + (name "PB9" (effects (font (size 1.27 1.27)))) + (number "PB9" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 20.32 0) (length 5.08) + (name "PC13" (effects (font (size 1.27 1.27)))) + (number "PC13" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 17.78 0) (length 5.08) + (name "PC14" (effects (font (size 1.27 1.27)))) + (number "PC14" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 15.24 0) (length 5.08) + (name "PC15" (effects (font (size 1.27 1.27)))) + (number "PC15" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at -3.81 26.67 270) (length 5.08) + (name "Vbat" (effects (font (size 1.27 1.27)))) + (number "VBAT" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "power:+5V" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) + (property "Reference" "#PWR" (id 0) (at 0 -3.81 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+5V" (id 1) (at 0 3.556 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "power-flag" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Power symbol creates a global label with name \"+5V\"" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "+5V_0_1" + (polyline + (pts + (xy -0.762 1.27) + (xy 0 2.54) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 0) + (xy 0 2.54) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0 2.54) + (xy 0.762 1.27) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "+5V_1_1" + (pin power_in line (at 0 0 90) (length 0) hide + (name "+5V" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "power:GND" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes) + (property "Reference" "#PWR" (id 0) (at 0 -6.35 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (id 1) (at 0 -3.81 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "power-flag" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Power symbol creates a global label with name \"GND\" , ground" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "GND_0_1" + (polyline + (pts + (xy 0 0) + (xy 0 -1.27) + (xy 1.27 -1.27) + (xy 0 -2.54) + (xy -1.27 -1.27) + (xy 0 -1.27) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "GND_1_1" + (pin power_in line (at 0 0 270) (length 0) hide + (name "GND" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + ) + ) + ) + + (junction (at 146.05 48.26) (diameter 0) (color 0 0 0 0) + (uuid 012a894b-b531-41f6-bdbf-c44ab3cac0e9) + ) + (junction (at 250.19 48.26) (diameter 0) (color 0 0 0 0) + (uuid 0154b47c-42e3-4e3e-a994-7b4525c46b71) + ) + (junction (at 199.39 27.94) (diameter 0) (color 0 0 0 0) + (uuid 12ed14eb-e742-45d2-88fa-5420804018ad) + ) + (junction (at 199.39 48.26) (diameter 0) (color 0 0 0 0) + (uuid 16377a63-e049-4f11-93e1-19639da76c96) + ) + (junction (at 203.2 82.55) (diameter 0) (color 0 0 0 0) + (uuid 1a7e035e-e537-47b0-a6f4-52d66195f34e) + ) + (junction (at 203.2 142.24) (diameter 0) (color 0 0 0 0) + (uuid 1b44b5c8-e052-4a16-82bf-053b861cf966) + ) + (junction (at 187.96 82.55) (diameter 0) (color 0 0 0 0) + (uuid 4fa93160-d865-4adf-977d-63ee4fd7acae) + ) + (junction (at 154.94 82.55) (diameter 0) (color 0 0 0 0) + (uuid 610f4437-0164-4e84-a016-733798c18f3c) + ) + (junction (at 144.78 87.63) (diameter 0) (color 0 0 0 0) + (uuid 8d340722-c585-4620-a2e7-d044d8f5498e) + ) + (junction (at 146.05 27.94) (diameter 0) (color 0 0 0 0) + (uuid 98e4cf90-c754-43c5-8e27-eaf2b381db72) + ) + (junction (at 250.19 27.94) (diameter 0) (color 0 0 0 0) + (uuid ac19aad5-d1d2-4c6d-9c50-8d83b7aaa2ec) + ) + (junction (at 96.52 36.83) (diameter 0) (color 0 0 0 0) + (uuid aecc3e00-8013-4bcf-89a1-dc628bf127bb) + ) + (junction (at 57.15 36.83) (diameter 0) (color 0 0 0 0) + (uuid af800419-e785-4110-9701-e4834e99be86) + ) + (junction (at 149.86 72.39) (diameter 0) (color 0 0 0 0) + (uuid bbaf396e-8da3-4129-8590-87d3baba1f36) + ) + (junction (at 223.52 118.11) (diameter 0) (color 0 0 0 0) + (uuid cc208546-dfed-4105-bf62-b4cddfd10e11) + ) + (junction (at 223.52 135.89) (diameter 0) (color 0 0 0 0) + (uuid d67c7bd2-b107-45c1-83a1-5daf57986e16) + ) + + (no_connect (at 81.28 152.4) (uuid 32837a5f-35d4-470b-bc2c-06006ff713e3)) + (no_connect (at 83.82 152.4) (uuid 32837a5f-35d4-470b-bc2c-06006ff713e4)) + (no_connect (at 66.04 107.95) (uuid 3b5c885b-852c-4e2b-8eb7-b008ea210871)) + (no_connect (at 66.04 110.49) (uuid 3b5c885b-852c-4e2b-8eb7-b008ea210872)) + (no_connect (at 66.04 105.41) (uuid 3b5c885b-852c-4e2b-8eb7-b008ea210873)) + (no_connect (at 66.04 138.43) (uuid 3b5c885b-852c-4e2b-8eb7-b008ea210874)) + (no_connect (at 66.04 133.35) (uuid 3b5c885b-852c-4e2b-8eb7-b008ea210875)) + (no_connect (at 66.04 130.81) (uuid 3b5c885b-852c-4e2b-8eb7-b008ea210876)) + (no_connect (at 66.04 135.89) (uuid 3b5c885b-852c-4e2b-8eb7-b008ea210877)) + (no_connect (at 66.04 128.27) (uuid 3b5c885b-852c-4e2b-8eb7-b008ea210878)) + (no_connect (at 66.04 140.97) (uuid 3b5c885b-852c-4e2b-8eb7-b008ea210879)) + (no_connect (at 66.04 146.05) (uuid 3b5c885b-852c-4e2b-8eb7-b008ea21087a)) + (no_connect (at 256.54 87.63) (uuid 49df4c2e-b520-458b-a40c-83b813e3a918)) + (no_connect (at 104.14 115.57) (uuid 6009d08d-a7a8-4099-8bf2-e49852d9dd8a)) + (no_connect (at 85.09 99.06) (uuid a4629a95-0ef5-46d7-b455-1309fd390e33)) + + (wire (pts (xy 17.78 78.74) (xy 121.92 78.74)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 06ef4a25-0dbc-4e03-a8c8-aa4e9b3c17d4) + ) + (wire (pts (xy 255.27 36.83) (xy 255.27 41.91)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 0835bb80-7453-40a4-92f1-4731d76d4a62) + ) + (wire (pts (xy 44.45 62.23) (xy 48.26 62.23)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 08567971-c216-4d62-8243-65761381cac1) + ) + (wire (pts (xy 255.27 80.01) (xy 256.54 80.01)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 0a543278-308f-4b96-a84c-a707cd137fba) + ) + (wire (pts (xy 129.54 57.15) (xy 279.4 57.15)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 0aae34ea-b488-4011-a174-7372d00e7b0b) + ) + (wire (pts (xy 27.94 96.52) (xy 27.94 99.06)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 0d70f406-8d8d-47c7-beb4-a3f5a60fe60e) + ) + (wire (pts (xy 257.81 44.45) (xy 255.27 44.45)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 0e721b64-85c9-4277-8ea2-a1c40977849e) + ) + (wire (pts (xy 181.61 82.55) (xy 187.96 82.55)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 0f9c4c3a-d585-449c-8b0b-fd2ce709eae6) + ) + (wire (pts (xy 250.19 48.26) (xy 245.11 48.26)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 0ffdce78-4989-441b-8772-ac74c019c7c1) + ) + (wire (pts (xy 213.36 135.89) (xy 223.52 135.89)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 10c2d36f-3d5d-484e-9efe-259af9421b17) + ) + (wire (pts (xy 204.47 41.91) (xy 207.01 41.91)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 11e08e02-6503-4745-b331-0981e8e6279c) + ) + (wire (pts (xy 88.9 95.25) (xy 88.9 99.06)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 12a79695-6b4e-4f30-ba86-3813ad57b869) + ) + (wire (pts (xy 146.05 48.26) (xy 140.97 48.26)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 12b75ed2-222e-4e1e-9517-d0f11cb37d62) + ) + (wire (pts (xy 151.13 27.94) (xy 151.13 29.21)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 13c3e8c8-0996-434e-b9aa-911283c90ca8) + ) + (wire (pts (xy 140.97 29.21) (xy 140.97 27.94)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 1571081f-47f0-413e-bbc7-9f486ec3b5b7) + ) + (wire (pts (xy 223.52 116.84) (xy 223.52 118.11)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 16405d08-3a86-41eb-be4f-0a4cbfa70e99) + ) + (wire (pts (xy 279.4 102.87) (xy 279.4 62.23)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 16873ffd-7c41-4c70-ab31-4753adb84797) + ) + (wire (pts (xy 194.31 27.94) (xy 199.39 27.94)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 18f73984-0fc5-4e1d-992f-46eef38235f2) + ) + (wire (pts (xy 255.27 48.26) (xy 250.19 48.26)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 1dbbf3fe-a921-44be-b4e0-a110db5c87bd) + ) + (wire (pts (xy 242.57 85.09) (xy 240.03 85.09)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 1e0378df-4eb5-4433-998b-5f346ec4a88e) + ) + (wire (pts (xy 17.78 130.81) (xy 46.99 130.81)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 2738fd44-c558-452a-aaa1-97a580f8e059) + ) + (wire (pts (xy 140.97 48.26) (xy 140.97 46.99)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 29b5340f-db60-4239-9524-30f3edf4a5df) + ) + (wire (pts (xy 129.54 62.23) (xy 129.54 102.87)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 2ccb505a-0613-4946-814a-15045c4bb55e) + ) + (wire (pts (xy 204.47 44.45) (xy 204.47 48.26)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 2e460b93-cc5a-4c65-b47b-bbe75d15418a) + ) + (wire (pts (xy 121.92 17.78) (xy 17.78 17.78)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 2e7d332e-a8ad-4671-8b97-9125f93075c0) + ) + (wire (pts (xy 140.97 87.63) (xy 144.78 87.63)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 30a03818-4b28-4ba6-b246-47110f495fac) + ) + (wire (pts (xy 179.07 157.48) (xy 279.4 157.48)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 30ac413a-21a8-473d-bdfe-d517cb7b75ca) + ) + (wire (pts (xy 194.31 29.21) (xy 194.31 27.94)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 3214fdb0-10f7-4848-b384-3b73ed57237b) + ) + (wire (pts (xy 223.52 118.11) (xy 223.52 119.38)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 37986788-6b5b-43d8-b8c7-4f05c730e476) + ) + (wire (pts (xy 227.33 62.23) (xy 279.4 62.23)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 37cff2c4-20f4-4b50-9b43-7122d096e105) + ) + (wire (pts (xy 81.28 95.25) (xy 81.28 99.06)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 3a928598-d27e-4814-997b-bfd4ca742d42) + ) + (wire (pts (xy 279.4 17.78) (xy 279.4 57.15)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 3cd7bdad-fef5-4b95-b487-f9d614463c4b) + ) + (wire (pts (xy 242.57 87.63) (xy 242.57 85.09)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 406b0538-e407-42dc-b3f5-635fd43e5eaf) + ) + (wire (pts (xy 199.39 48.26) (xy 199.39 49.53)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 4080fcad-ee8d-4f9f-9f86-4a13aadfa001) + ) + (wire (pts (xy 66.04 31.75) (xy 66.04 39.37)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 433ba099-4985-456f-a834-4a807cd0b622) + ) + (wire (pts (xy 88.9 152.4) (xy 88.9 154.94)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 43974b42-1d1f-48fe-8af5-471a86c34bf8) + ) + (wire (pts (xy 187.96 71.12) (xy 187.96 73.66)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 4465e524-6fee-4968-ba38-91e6c1ba73fa) + ) + (wire (pts (xy 204.47 27.94) (xy 204.47 29.21)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 4f4f8c21-7416-45db-a009-a5846575560f) + ) + (wire (pts (xy 227.33 62.23) (xy 227.33 102.87)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 50d55c19-c9e0-4949-befb-71b355502d30) + ) + (wire (pts (xy 213.36 130.81) (xy 213.36 135.89)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 5162b779-ac43-4801-8b8b-e60d1c5dc93e) + ) + (wire (pts (xy 129.54 102.87) (xy 220.98 102.87)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 53c518ac-d58b-4fb6-ae0e-c81843505bf0) + ) + (wire (pts (xy 250.19 26.67) (xy 250.19 27.94)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 55b2d518-7f5c-4b10-8070-cfe0b67d4ac2) + ) + (wire (pts (xy 181.61 87.63) (xy 184.15 87.63)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 56cb1d96-4d22-4584-b3ea-f5aae54beea2) + ) + (wire (pts (xy 140.97 36.83) (xy 140.97 39.37)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 576cf913-1b2a-4d80-a6a0-508f21ef04e1) + ) + (wire (pts (xy 200.66 142.24) (xy 203.2 142.24)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 590ac75f-b08c-47c9-952e-22049f41fcf7) + ) + (wire (pts (xy 245.11 27.94) (xy 250.19 27.94)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 5936c5fc-d621-4d16-a1a1-b1646d0d52b6) + ) + (wire (pts (xy 151.13 36.83) (xy 151.13 41.91)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 599d1e10-8daf-45f3-b804-fedc019ce947) + ) + (wire (pts (xy 213.36 118.11) (xy 223.52 118.11)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 5ace203f-0149-4c7a-af2d-e3d9399552d2) + ) + (wire (pts (xy 121.92 78.74) (xy 121.92 17.78)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 5c967444-6ae9-4095-84b8-a83ecb649f78) + ) + (wire (pts (xy 190.5 142.24) (xy 193.04 142.24)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 5e41d220-3667-43f4-9829-b13502752708) + ) + (wire (pts (xy 250.19 27.94) (xy 255.27 27.94)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 602ab548-b0d1-4171-a142-59881f3194d1) + ) + (wire (pts (xy 204.47 36.83) (xy 204.47 41.91)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 60a8f1b7-2548-4d0a-a54d-b316b8d620fa) + ) + (wire (pts (xy 255.27 77.47) (xy 255.27 80.01)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 6286484f-64aa-4cde-bb18-113c198fbce3) + ) + (wire (pts (xy 194.31 48.26) (xy 194.31 46.99)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 644859c4-eb0b-4d26-a91d-8be7c8217609) + ) + (wire (pts (xy 250.19 48.26) (xy 250.19 49.53)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 67be0d24-79aa-4a4b-9dd1-2e8ad6f9b1eb) + ) + (wire (pts (xy 96.52 54.61) (xy 96.52 36.83)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 69ad3d78-919d-4cad-8e99-6ac5149a0e3f) + ) + (wire (pts (xy 66.04 54.61) (xy 73.66 54.61)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 6b6978ed-30c2-4a38-810f-02946d843d3e) + ) + (wire (pts (xy 201.93 82.55) (xy 203.2 82.55)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 6f047b98-6dc9-4659-bc63-494813e08d93) + ) + (wire (pts (xy 203.2 142.24) (xy 205.74 142.24)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 708a1b8c-3029-4cf7-b552-04aa2eb2543b) + ) + (wire (pts (xy 57.15 36.83) (xy 57.15 38.1)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 70b785c1-0846-4b15-87f5-3640defb78e0) + ) + (wire (pts (xy 53.34 85.09) (xy 53.34 163.83)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 7361ac6d-1ea0-4f7c-9e62-6e3e3d41ce1e) + ) + (wire (pts (xy 256.54 135.89) (xy 233.68 135.89)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 7370aff6-36da-4be8-8863-db513199b559) + ) + (wire (pts (xy 153.67 44.45) (xy 151.13 44.45)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 7502ade2-8dff-4682-9787-9a2c2e5dc707) + ) + (wire (pts (xy 55.88 62.23) (xy 58.42 62.23)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 77444039-3d22-4e44-916c-97ffe166861a) + ) + (wire (pts (xy 203.2 82.55) (xy 208.28 82.55)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 77da96a7-4d3c-42ec-ac2f-2039aab5c40d) + ) + (wire (pts (xy 146.05 27.94) (xy 151.13 27.94)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 793abbb7-09e6-4a36-bfb8-1178c924823e) + ) + (wire (pts (xy 151.13 44.45) (xy 151.13 48.26)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 7a1ce870-4112-4fe6-ab97-4b4579c404bb) + ) + (wire (pts (xy 255.27 27.94) (xy 255.27 29.21)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 7b9139cd-b345-47a1-8e1a-8ba3c1effa80) + ) + (wire (pts (xy 245.11 36.83) (xy 245.11 39.37)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 7cfcbd76-dd3e-4e59-8ed1-1817c1de8f1d) + ) + (wire (pts (xy 213.36 123.19) (xy 213.36 118.11)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 7d76f8b8-753a-4b79-938e-d387aaaf026f) + ) + (wire (pts (xy 149.86 71.12) (xy 149.86 72.39)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 7f004501-2dc4-42bd-b2b2-02c60f6b917c) + ) + (wire (pts (xy 220.98 62.23) (xy 129.54 62.23)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 807f25c3-883b-4f3e-92b1-c33ed6e6f3f5) + ) + (wire (pts (xy 166.37 87.63) (xy 144.78 87.63)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 85b8405d-cde6-4e92-b95a-ac05d3a76c03) + ) + (wire (pts (xy 163.83 85.09) (xy 163.83 93.98)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 868f92ec-18bb-479d-b3f5-373298889482) + ) + (wire (pts (xy 66.04 39.37) (xy 73.66 39.37)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 87f80e4c-b247-4252-9f7c-9724559d1951) + ) + (wire (pts (xy 53.34 85.09) (xy 121.92 85.09)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 90b694f6-8afa-4550-b22a-aa412452ae8c) + ) + (wire (pts (xy 204.47 48.26) (xy 199.39 48.26)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 92c67349-8b61-44f7-b424-98ba56f35347) + ) + (wire (pts (xy 207.01 44.45) (xy 204.47 44.45)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 97497814-5d87-424e-8a0f-7434067008ea) + ) + (wire (pts (xy 199.39 26.67) (xy 199.39 27.94)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 9f869536-8017-47b0-841d-e3eddb8f75cf) + ) + (wire (pts (xy 184.15 87.63) (xy 184.15 93.98)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid 9fadce8d-5b7e-4a9e-af95-5029debb0896) + ) + (wire (pts (xy 194.31 36.83) (xy 194.31 39.37)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid a01d9e3e-2328-4ea1-a56d-effe232de5a7) + ) + (wire (pts (xy 179.07 109.22) (xy 279.4 109.22)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid a26ef159-fb24-4a9a-84bd-80781c197b3d) + ) + (wire (pts (xy 223.52 135.89) (xy 223.52 134.62)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid a82da6af-da61-4bd9-a5bf-fc90fdfa7728) + ) + (wire (pts (xy 146.05 48.26) (xy 146.05 49.53)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid aa8df04f-b16d-4d29-aeae-5c3d9e65f9eb) + ) + (wire (pts (xy 199.39 48.26) (xy 194.31 48.26)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid aa9eae34-3634-4f9c-ba53-b396fbebc884) + ) + (wire (pts (xy 73.66 36.83) (xy 57.15 36.83)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid ab858ab4-1935-4fe8-a349-f426ac178edc) + ) + (wire (pts (xy 154.94 82.55) (xy 154.94 81.28)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid ad5d781c-6950-4e13-b50c-699821e16caf) + ) + (wire (pts (xy 255.27 44.45) (xy 255.27 48.26)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid af9c914e-ef7a-4d0c-b68e-167ac230efea) + ) + (wire (pts (xy 53.34 163.83) (xy 121.92 163.83)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid afa48eea-001f-4b40-bfcb-1d0373da980b) + ) + (wire (pts (xy 27.94 121.92) (xy 27.94 119.38)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid b1dad057-353e-4203-819d-ab515f8b2158) + ) + (wire (pts (xy 144.78 72.39) (xy 149.86 72.39)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid b3ace371-1e5b-4b78-a0ac-97f49e6b8991) + ) + (wire (pts (xy 166.37 85.09) (xy 163.83 85.09)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid b682a1e3-fe49-4990-8ef4-e1e82a20ef19) + ) + (wire (pts (xy 279.4 17.78) (xy 129.54 17.78)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid b6afca87-fc37-4a58-b764-63704321bf48) + ) + (wire (pts (xy 203.2 82.55) (xy 203.2 83.82)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid b97a2d29-2d8e-4a6d-bb89-647042c15041) + ) + (wire (pts (xy 46.99 130.81) (xy 46.99 85.09)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid b9e1b954-97ff-4982-b546-b8107bfc1229) + ) + (wire (pts (xy 255.27 41.91) (xy 257.81 41.91)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid bbe631a6-966d-40c9-b6b0-c9dfa5ff3584) + ) + (wire (pts (xy 121.92 163.83) (xy 121.92 85.09)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid beeb8fb0-5354-4f20-a930-e788de0782db) + ) + (wire (pts (xy 86.36 54.61) (xy 96.52 54.61)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid c0d60a41-14b3-4461-b26b-d39dada05e5c) + ) + (wire (pts (xy 151.13 41.91) (xy 153.67 41.91)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid c1629523-a297-4fd8-ba85-0d806dc10f2e) + ) + (wire (pts (xy 154.94 72.39) (xy 154.94 73.66)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid c202f02a-1038-404a-8c89-dde7b12af668) + ) + (wire (pts (xy 236.22 118.11) (xy 236.22 119.38)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid c31bf188-b1b5-405d-94ef-bb81886a8bd8) + ) + (wire (pts (xy 17.78 85.09) (xy 46.99 85.09)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid c446d13d-80d9-45e9-ac19-865cd3b7b719) + ) + (wire (pts (xy 236.22 118.11) (xy 242.57 118.11)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid c713d19b-9a88-4b71-a431-39bfc7d807cb) + ) + (wire (pts (xy 57.15 35.56) (xy 57.15 36.83)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid c825dca3-4ba9-42c6-95b2-1d34077e9b65) + ) + (wire (pts (xy 203.2 91.44) (xy 203.2 93.98)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid c8b688aa-22ca-4057-bbd4-65182e7bd9f0) + ) + (wire (pts (xy 256.54 120.65) (xy 256.54 135.89)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid c8d9dceb-285a-410d-9411-820b4d90740c) + ) + (wire (pts (xy 96.52 36.83) (xy 96.52 34.29)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid c9f05bda-27aa-45f5-bbb0-43bbd466a33b) + ) + (wire (pts (xy 220.98 102.87) (xy 220.98 62.23)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid ca49d009-84fa-4129-b874-cf92ff68cb47) + ) + (wire (pts (xy 203.2 135.89) (xy 203.2 142.24)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid cab24741-784b-4b78-8db5-cc3807903004) + ) + (wire (pts (xy 57.15 25.4) (xy 57.15 27.94)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid cc228eb3-dda4-4506-8454-dc68182f0e8b) + ) + (wire (pts (xy 27.94 106.68) (xy 27.94 111.76)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid cdfdfd2e-8426-4847-9f77-8c8c18b9747c) + ) + (wire (pts (xy 199.39 27.94) (xy 204.47 27.94)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid cea5ddf2-3a28-4442-9f31-4b7767f027ae) + ) + (wire (pts (xy 66.04 69.85) (xy 66.04 67.31)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid cebe1d55-cd01-4d5c-87c0-62151bed116a) + ) + (wire (pts (xy 245.11 48.26) (xy 245.11 46.99)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid cf9fb6af-5d88-4882-8bc6-68fb1c97ebff) + ) + (wire (pts (xy 140.97 82.55) (xy 154.94 82.55)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid d003c39c-5415-4414-9d57-2c5796dd247e) + ) + (wire (pts (xy 240.03 82.55) (xy 256.54 82.55)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid d01ae736-64c8-47b9-817e-57be4d72b8c3) + ) + (wire (pts (xy 17.78 85.09) (xy 17.78 130.81)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid d0e3b79d-31e2-4957-8974-e7f1efa20501) + ) + (wire (pts (xy 86.36 36.83) (xy 96.52 36.83)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid d25e62f3-be1b-4170-8b6f-22102e2badf8) + ) + (wire (pts (xy 144.78 87.63) (xy 144.78 81.28)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid d364aa85-ad43-4e43-8f0e-bca1fb55e090) + ) + (wire (pts (xy 223.52 137.16) (xy 223.52 135.89)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid d3fa6da6-abec-4c6e-bbed-0a0348a3f1de) + ) + (wire (pts (xy 223.52 147.32) (xy 223.52 149.86)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid d47cc44f-abd2-4cb0-955c-53ff852a7670) + ) + (wire (pts (xy 129.54 17.78) (xy 129.54 57.15)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid d88875c3-744d-49c5-bc3c-3ad04408a3fa) + ) + (wire (pts (xy 179.07 109.22) (xy 179.07 157.48)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid dab9cffa-3d83-4f13-9de0-a6dfdad18edf) + ) + (wire (pts (xy 60.96 31.75) (xy 66.04 31.75)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid dc485af2-e760-48f3-958f-22a4a53ce730) + ) + (wire (pts (xy 227.33 102.87) (xy 279.4 102.87)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid e1011013-62a3-47d2-9a4f-ee5ec3ce63cf) + ) + (wire (pts (xy 151.13 48.26) (xy 146.05 48.26)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid e3a78471-8363-48c8-90b1-531ef6bbcf5e) + ) + (wire (pts (xy 250.19 118.11) (xy 257.81 118.11)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid e3b484f9-6cea-420c-887a-19136372ea01) + ) + (wire (pts (xy 187.96 82.55) (xy 187.96 81.28)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid e6898862-7fcc-4d4d-a506-98b58e316eef) + ) + (wire (pts (xy 17.78 17.78) (xy 17.78 78.74)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid e77bdd04-e6b7-42cf-950f-64692f7b1cde) + ) + (wire (pts (xy 245.11 29.21) (xy 245.11 27.94)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid e90bad83-5f75-4ebb-b7a7-b5e2e619fd9e) + ) + (wire (pts (xy 146.05 26.67) (xy 146.05 27.94)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid ea1981a2-ece5-469a-b96b-674c19323889) + ) + (wire (pts (xy 154.94 82.55) (xy 166.37 82.55)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid f0c883ac-8f83-4e6a-9ff6-063cc76ac3b7) + ) + (wire (pts (xy 279.4 157.48) (xy 279.4 109.22)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid f54d1f06-f1a2-4692-a019-f97933d9ca26) + ) + (wire (pts (xy 149.86 72.39) (xy 154.94 72.39)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid f5ebf8d7-9c53-4154-8f0d-b8aee0eb85d9) + ) + (wire (pts (xy 144.78 73.66) (xy 144.78 72.39)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid f8b37816-950d-45dc-902e-023df812a18b) + ) + (wire (pts (xy 187.96 82.55) (xy 194.31 82.55)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid fa7c21e5-37cc-4ac4-b711-1b2a6b818ed5) + ) + (wire (pts (xy 233.68 135.89) (xy 233.68 134.62)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid fb3c6c26-02b8-4fbd-b60e-82f65cc6eee8) + ) + (wire (pts (xy 257.81 120.65) (xy 256.54 120.65)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid fbfca471-84da-4243-9d6a-8a118add1ffa) + ) + (wire (pts (xy 66.04 54.61) (xy 66.04 57.15)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid fc9bfd31-eb15-46ca-bfb1-f43c1d130e3f) + ) + (wire (pts (xy 213.36 142.24) (xy 215.9 142.24)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid fdb404c9-5607-4f4e-961f-aaa1814b16ca) + ) + (wire (pts (xy 140.97 27.94) (xy 146.05 27.94)) + (stroke (width 0) (type default) (color 0 0 0 0)) + (uuid ffde76b1-b9e9-44e3-b7d4-18b297dff674) + ) + + (label "Relay" (at 180.34 111.76 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 0628b574-dad3-4eed-a787-5e72557c0089) + ) + (label "Encoder & Button" (at 130.81 64.77 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 3a517106-3e10-4e90-bcff-457c3a98adf6) + ) + (label "Thermic probes" (at 130.81 20.32 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 66cdfc63-404a-42af-9e06-fcbb43c4f2fd) + ) + (label "LCD & Backlight" (at 19.05 20.32 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 934e1c4a-9594-4ef3-8023-6727efd98987) + ) + (label "Battery" (at 19.05 87.63 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid 9be5693c-b86f-40e0-ab3e-41dcf440d054) + ) + (label "Supply & Manual mode" (at 228.6 64.77 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid caa9c827-4372-4a2e-8a95-cfb15bdf5da5) + ) + (label "µP" (at 54.61 87.63 0) + (effects (font (size 1.27 1.27)) (justify left bottom)) + (uuid ec6968be-d78a-452a-891d-4f2c7981f839) + ) + + (global_label "Switch" (shape input) (at 104.14 107.95 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 08485760-2d59-42b0-9972-1bb17897c55d) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 112.6612 107.8706 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "DB3" (shape input) (at 86.36 46.99 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 084f3920-ec06-49e3-a9ee-bf3aa2d0a318) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 92.5226 46.9106 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "TH2+" (shape input) (at 204.47 38.1 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 08eaa787-6ec4-4045-b9bf-d3c6a8f7e391) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 211.9631 38.0206 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "Vbat" (shape input) (at 27.94 96.52 90) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 09d70d5d-4f78-4532-b2a2-1bcb807b8c10) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 27.8606 89.9945 90) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "Override" (shape input) (at 256.54 85.09 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid 0c8d4df7-b9c8-45a8-ae21-eadcebe2a68d) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 246.3255 85.0106 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "THe+" (shape input) (at 255.27 38.1 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 127dc83c-0c6e-44c9-b7a3-7b249e25a2bd) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 262.6421 38.0206 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "DB6" (shape input) (at 73.66 52.07 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid 1f419e45-e362-4881-8ef1-c3792d960c39) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 67.4974 51.9906 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "THe+" (shape input) (at 66.04 125.73 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid 2e0cdf3b-6f45-482f-83f0-6d7ced85914e) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 58.6679 125.6506 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "RS" (shape input) (at 104.14 130.81 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 2f389684-fc2a-46a1-b11d-5ff1e4efe356) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 109.0326 130.7306 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "DB1" (shape input) (at 104.14 125.73 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 36137f4e-b25a-43d9-8340-bff323d3912e) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 110.3026 125.6506 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "DB0" (shape input) (at 73.66 44.45 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid 3638dde7-8cb4-452e-a918-06f6d36b5500) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 67.4974 44.3706 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "Override" (shape input) (at 203.2 135.89 90) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 3a21eece-32ac-4de2-9677-facfd1fd2c8a) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 203.2794 125.6755 90) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "DB1" (shape input) (at 86.36 44.45 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 3a4b3fda-9c64-418b-9c4c-bdabf2acafab) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 92.5226 44.3706 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "DB4" (shape input) (at 73.66 49.53 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid 43c283c0-09ff-4eaa-81b5-a3a40517c258) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 67.4974 49.4506 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "R{slash}W" (shape input) (at 104.14 133.35 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 453a77ad-fac0-4cd4-9fca-6e04f8cfa3e5) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 110.605 133.2706 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "DB5" (shape input) (at 104.14 120.65 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 4d44b129-c661-445a-acd1-16280b0de7da) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 110.3026 120.5706 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "TH2-" (shape input) (at 66.04 118.11 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid 4e8b2a89-58a8-460d-a283-67e8d3bec0e6) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 58.5469 118.0306 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "Enc_A" (shape input) (at 140.97 82.55 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid 60af2486-27b0-4394-8b74-bf0b63a58ade) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 133.114 82.4706 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "E" (shape input) (at 86.36 41.91 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 64c335ed-c090-407c-812b-fbbccd0e20ec) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 89.9221 41.8306 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "Vbat" (shape input) (at 81.28 95.25 90) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 69dc2f39-7422-4324-8841-54dd5e5db9b9) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 81.2006 88.7245 90) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "Enc_B" (shape input) (at 140.97 87.63 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid 6b27d8b2-ee0e-419a-8cca-494e0b743c57) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 132.9326 87.5506 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "DB0" (shape input) (at 104.14 135.89 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 70292c19-a672-4311-9469-cca02074edfc) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 110.3026 135.8106 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "Enc_B" (shape input) (at 104.14 110.49 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 756c320d-1757-4c24-8d25-eea4479fc01c) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 112.1774 110.4106 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "Backlight" (shape input) (at 44.45 62.23 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid 7b597960-c029-42de-a1c9-b55826f6eb6a) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 33.2074 62.3094 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "DB7" (shape input) (at 104.14 118.11 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 7d74b5e4-377b-4d94-8b21-289fadde7386) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 110.3026 118.0306 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "Switch" (shape input) (at 208.28 82.55 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 84097444-716a-4875-b364-64e9438fdb77) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 216.8012 82.4706 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "TH1+" (shape input) (at 66.04 115.57 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid 86d01c79-7437-422a-a650-3e7ef04c5785) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 58.5469 115.4906 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "DB6" (shape input) (at 104.14 143.51 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid 8b92f201-07d8-4821-a7c1-053fe8198e60) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 110.3026 143.4306 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "R{slash}W" (shape input) (at 73.66 41.91 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid 9cc74417-a4db-4993-9d95-2bf995c7221a) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 67.195 41.8306 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "TH2-" (shape input) (at 194.31 38.1 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid a06484f8-f4c6-4dc1-a0e6-116fdd9a6ec5) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 201.8031 38.0206 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "Enc_A" (shape input) (at 104.14 113.03 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid a0f97c88-a377-4734-bf9e-5236e5048cb7) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 111.996 113.1094 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "E" (shape input) (at 104.14 128.27 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid ace8219d-d0bc-43a6-b6c9-4295c22c4c2e) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 107.7021 128.1906 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "Relay" (shape input) (at 190.5 142.24 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid ad18e4a4-986c-4e6f-b666-f1cade2fc852) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 182.9464 142.1606 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "DB7" (shape input) (at 86.36 52.07 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid b1bbf5fc-248f-4f6e-a178-1cd932e30d02) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 92.5226 51.9906 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "Backlight" (shape input) (at 104.14 105.41 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid b382b9a8-3b57-4f04-b0a7-4c44b7a05944) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 115.3826 105.3306 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "THe-" (shape input) (at 245.11 38.1 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid caf2a3f1-e51a-4535-a0fc-46cd24df7db3) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 252.4821 38.0206 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "TH1-" (shape input) (at 140.97 38.1 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid cc82d4de-1632-411c-a000-6431791e0412) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 148.4631 38.0206 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "DB5" (shape input) (at 86.36 49.53 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid ce39d830-29f6-4127-9a84-898a2f1c9f8f) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 92.5226 49.4506 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "RS" (shape input) (at 86.36 39.37 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid d2a2d595-c71b-425e-a2be-8543c0300d91) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 91.2526 39.2906 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "TH2+" (shape input) (at 66.04 120.65 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid d2fa2bf3-ae15-4345-958f-0d95620dc3de) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 58.5469 120.5706 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "THe-" (shape input) (at 66.04 123.19 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid d6b95b9f-6d82-464b-8d90-a6e9eb3d5271) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 58.6679 123.1106 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "DB4" (shape input) (at 104.14 140.97 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid e02ef194-98aa-44c2-8b22-88f98c8d0607) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 110.3026 140.8906 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "TH1-" (shape input) (at 66.04 113.03 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid e1cba8f4-b392-48f8-b48f-5023d6825762) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 58.5469 112.9506 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + (global_label "DB3" (shape input) (at 104.14 123.19 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid e40bc77b-2486-4e5a-8cc3-39554d887208) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 110.3026 123.1106 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "TH1+" (shape input) (at 151.13 38.1 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid eca4d332-71b1-4237-9cc7-cf7803e4e200) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 158.6231 38.0206 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "Relay" (shape input) (at 104.14 146.05 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid ee426ba5-5805-4b6f-8e78-60387fd503d2) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 111.6936 145.9706 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "DB2" (shape input) (at 104.14 138.43 0) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify left)) + (uuid f294a229-6752-4bf0-afcf-4e666738928a) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 110.3026 138.3506 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + ) + (global_label "DB2" (shape input) (at 73.66 46.99 180) (fields_autoplaced) + (effects (font (size 1.27 1.27)) (justify right)) + (uuid f7348c83-c317-430e-873c-c4f5fe9173e8) + (property "Intersheet References" "${INTERSHEET_REFS}" (id 0) (at 67.4974 46.9106 0) + (effects (font (size 1.27 1.27)) (justify right) hide) + ) + ) + + (symbol (lib_id "power:GND") (at 203.2 93.98 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 11f447ef-0c27-4d9a-8a9a-481e8f9cd22a) + (property "Reference" "#PWR0102" (id 0) (at 203.2 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (id 1) (at 203.2 98.5425 0)) + (property "Footprint" "" (id 2) (at 203.2 93.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 203.2 93.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 1869d1ed-75ae-4eba-b66f-78661a3a8d8a)) + ) + + (symbol (lib_id "power:+5V") (at 223.52 116.84 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 1e6eff36-15d8-4667-ae16-1187a03602e6) + (property "Reference" "#PWR0116" (id 0) (at 223.52 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+5V" (id 1) (at 223.52 113.2355 0)) + (property "Footprint" "" (id 2) (at 223.52 116.84 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 223.52 116.84 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 3f78dec3-05c0-40b6-97c8-31f0e399e03d)) + ) + + (symbol (lib_id "power:GND") (at 250.19 49.53 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 21e381e9-2adc-4bbe-ba0e-3a95de502df6) + (property "Reference" "#PWR0112" (id 0) (at 250.19 55.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (id 1) (at 250.19 54.0925 0)) + (property "Footprint" "" (id 2) (at 250.19 49.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 250.19 49.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 6cae1b8a-aa8d-4736-b5a9-25877a54ef6d)) + ) + + (symbol (lib_id "Device:RotaryEncoder_Switch") (at 173.99 85.09 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 268a0bd8-e906-400f-9772-df2f797701c6) + (property "Reference" "SW1" (id 0) (at 173.99 76.0435 0)) + (property "Value" "RotaryEncoder_Switch" (id 1) (at 173.99 78.8186 0)) + (property "Footprint" "fan_monitor:RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm" (id 2) (at 170.18 81.026 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 173.99 78.486 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "A" (uuid 04726370-abb9-47b8-bcca-0644b458b2ab)) + (pin "B" (uuid baa8c547-3998-44fc-bcce-9779ed347356)) + (pin "C" (uuid 5be8e207-49c0-41d0-a378-d1672c1bc926)) + (pin "S1" (uuid 900843ca-2872-4cdd-99a5-a34f215ee332)) + (pin "S2" (uuid 7ede7cc1-1a74-47a4-a936-714becae38e4)) + ) + + (symbol (lib_id "power:+5V") (at 199.39 26.67 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 30e74571-b0f7-45c9-826c-d5e788b99fbc) + (property "Reference" "#PWR0110" (id 0) (at 199.39 30.48 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+5V" (id 1) (at 199.39 23.0655 0)) + (property "Footprint" "" (id 2) (at 199.39 26.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 199.39 26.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid edd5b967-44ba-4eed-b604-a698d6482c26)) + ) + + (symbol (lib_id "Device:R") (at 245.11 43.18 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 3398c67f-46b1-4478-920f-dd0ec949557e) + (property "Reference" "R14" (id 0) (at 246.888 42.2715 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "30k" (id 1) (at 246.888 45.0466 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (id 2) (at 243.332 43.18 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 245.11 43.18 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid d1865cad-c728-4306-b995-19c302a500f3)) + (pin "2" (uuid 0c02f9f2-7aad-46a6-b3f7-1de0262517af)) + ) + + (symbol (lib_id "Device:R_Potentiometer") (at 57.15 31.75 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) + (uuid 33a74763-48a8-4a27-ae92-f81f779cd726) + (property "Reference" "RV1" (id 0) (at 55.3721 32.6585 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Value" "10k" (id 1) (at 55.3721 29.8834 0) + (effects (font (size 1.27 1.27)) (justify right)) + ) + (property "Footprint" "Potentiometer_THT:Potentiometer_Vishay_T73XX_Horizontal" (id 2) (at 57.15 31.75 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 57.15 31.75 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid f82eeb9f-b11b-48a2-a090-98ffe30cec79)) + (pin "2" (uuid 1f33d72b-5bb0-44dc-9ded-e4161c0499df)) + (pin "3" (uuid 00860e26-7517-4b0b-8574-a666d9919b18)) + ) + + (symbol (lib_id "Diode:UF5400") (at 213.36 127 270) (unit 1) + (in_bom yes) (on_board yes) + (uuid 3462e14d-f877-415a-8b53-496f63df60d2) + (property "Reference" "D3" (id 0) (at 208.28 125.73 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "UF5400" (id 1) (at 204.47 123.19 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Diode_THT:D_DO-201AD_P15.24mm_Horizontal" (id 2) (at 208.915 127 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "http://www.vishay.com/docs/88756/uf5400.pdf" (id 3) (at 213.36 127 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 9708d13d-0f10-49ae-ae5d-1b511ffebf6c)) + (pin "2" (uuid babdfb1f-4378-45bf-9995-04f226b7ad0b)) + ) + + (symbol (lib_id "Diode:UF5400") (at 196.85 142.24 180) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 35a7db72-4c10-416f-a118-b17adfc999d2) + (property "Reference" "D2" (id 0) (at 196.85 137.0035 0)) + (property "Value" "UF5400" (id 1) (at 196.85 139.7786 0)) + (property "Footprint" "Diode_THT:D_DO-201AD_P15.24mm_Horizontal" (id 2) (at 196.85 137.795 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "http://www.vishay.com/docs/88756/uf5400.pdf" (id 3) (at 196.85 142.24 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid c828e8ca-82e4-443c-86a8-a66acacca1a4)) + (pin "2" (uuid 53e0f8db-02b0-478b-a7fa-163873de1668)) + ) + + (symbol (lib_id "power:GND") (at 223.52 149.86 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 3a8d1bf6-6950-4a2e-96f5-bd4eba2a8797) + (property "Reference" "#PWR0117" (id 0) (at 223.52 156.21 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (id 1) (at 223.52 154.4225 0)) + (property "Footprint" "" (id 2) (at 223.52 149.86 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 223.52 149.86 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 101e85da-b295-4fbb-8a1e-f0c37eed275f)) + ) + + (symbol (lib_id "Device:R") (at 151.13 33.02 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 3e74ac15-80d5-4343-b456-b5978edf9eda) + (property "Reference" "R5" (id 0) (at 152.908 32.1115 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "30k" (id 1) (at 152.908 34.8866 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (id 2) (at 149.352 33.02 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 151.13 33.02 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 437a2af2-f789-42f4-8177-a146500172ab)) + (pin "2" (uuid 7543c1d4-805b-45cc-88a4-9e1cb6d2ac88)) + ) + + (symbol (lib_id "fan_monitor:blue_pill") (at 85.09 125.73 0) (unit 1) + (in_bom yes) (on_board yes) + (uuid 41fc1c23-edd4-45a5-8036-7f62b013770f) + (property "Reference" "U1" (id 0) (at 91.44 99.06 0) + (effects (font (size 1.524 1.524)) (justify left)) + ) + (property "Value" "blue_pill" (id 1) (at 91.44 101.6 0) + (effects (font (size 1.524 1.524)) (justify left)) + ) + (property "Footprint" "fan_monitor:blue_pill" (id 2) (at 82.55 106.68 0) + (effects (font (size 1.524 1.524)) hide) + ) + (property "Datasheet" "https://www.electronicshub.org/getting-started-with-stm32f103c8t6-blue-pill/" (id 3) (at 82.55 106.68 0) + (effects (font (size 1.524 1.524)) hide) + ) + (pin "3V3" (uuid 08d1dac8-0d6e-4029-9a06-c8863d7fbd51)) + (pin "5V" (uuid 40962e92-90b6-487d-b0dc-0a6c42b5ebc2)) + (pin "BOOT" (uuid 25b39db8-8576-4473-b331-b912323e85f4)) + (pin "G" (uuid ffde4898-4c0e-4c24-bd8c-aadcd7279172)) + (pin "NRST" (uuid 5aa0e472-160b-49ac-864f-0fa7cd9cf9b0)) + (pin "PA0" (uuid 086ab04d-4086-427c-992f-819b91a9021d)) + (pin "PA1" (uuid 59246647-4e57-4b5f-9f1e-b0cc1fb90bb2)) + (pin "PA10" (uuid 51bdd1cb-8a01-4b1c-940a-3ff4dd1de87c)) + (pin "PA11" (uuid 6025c071-1487-4c03-a645-f67437519813)) + (pin "PA12" (uuid b79d8d99-88b5-4d84-a010-b6d768d67ec8)) + (pin "PA15" (uuid a2c0fc07-9ed2-42e8-8fef-f02fce3412ee)) + (pin "PA2" (uuid 0d678ff1-21aa-4e6f-ae06-abf24406f3c8)) + (pin "PA3" (uuid e7c8f673-e523-47ce-91b8-92cf1c7605ce)) + (pin "PA4" (uuid eb06cbed-9a37-40e7-bc33-37acd0ee650a)) + (pin "PA5" (uuid 172b515f-13aa-42a2-b6ac-db67c2e524e7)) + (pin "PA6" (uuid a5c35670-98af-44c6-a3f4-bbad7ffecfd3)) + (pin "PA7" (uuid 5bd90e77-727e-49e2-881e-09f4ce3768d4)) + (pin "PA8" (uuid af7ccd5a-4c05-4a49-a412-ca568e4c81d2)) + (pin "PA9" (uuid 911557e5-adec-4d13-9794-a18b325eb4ea)) + (pin "PB0" (uuid d40ed1bf-6a69-492a-acf3-f71f1c7a81f2)) + (pin "PB1" (uuid 67320774-1745-4c89-bec7-2213f7bb7ecc)) + (pin "PB10" (uuid cab0d0a9-e089-4f0b-8483-22b4e0addcae)) + (pin "PB11" (uuid 3c5840eb-164e-426c-ab78-faa89624b9dc)) + (pin "PB12" (uuid 43b7aab0-ec9b-4c58-bfa1-8dda8fccb53f)) + (pin "PB13" (uuid 5968c877-7376-4e25-b8db-5e755d570d06)) + (pin "PB14" (uuid 1cd85cce-d94a-4a92-8af2-23d3a2b66793)) + (pin "PB15" (uuid a26bc030-7d8a-4b19-aa84-9206cc0de2b0)) + (pin "PB2" (uuid d66c8b0e-b6b3-43ea-8c6d-9724edcc57d6)) + (pin "PB3" (uuid 3d19e22b-2666-4e7d-825d-37a04ed07fa1)) + (pin "PB4" (uuid 054f8e07-0141-451f-a3c4-ea786b83b680)) + (pin "PB5" (uuid ed6caead-58a0-4a37-97cf-621d3ffb0ca4)) + (pin "PB6" (uuid 62af6e3c-7d06-438a-b62f-014ae3262ea1)) + (pin "PB7" (uuid afc1392c-4488-4251-8167-de520abba754)) + (pin "PB8" (uuid 248d15cd-dd0c-425d-94cb-b44ccf865457)) + (pin "PB9" (uuid 42688fc6-3e24-4a56-9963-828da46dcdfb)) + (pin "PC13" (uuid c546008e-7661-419e-94b3-0bbb9fd14ec8)) + (pin "PC14" (uuid a6460cc6-b11c-4dff-a0ea-9de680e68ca8)) + (pin "PC15" (uuid 3aec5e23-e675-4bcf-9a9e-48cb59d51927)) + (pin "VBAT" (uuid 01657d30-6f8e-4bbd-a3dd-6a0742c69aca)) + ) + + (symbol (lib_id "Connector_Generic:Conn_01x02") (at 234.95 82.55 0) (mirror y) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 442cee4f-59b9-413a-9eb0-b0d5464ec054) + (property "Reference" "J4" (id 0) (at 234.95 77.5802 0)) + (property "Value" "Conn_01x02" (id 1) (at 234.95 80.1171 0)) + (property "Footprint" "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal" (id 2) (at 234.95 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 234.95 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 899e9df1-0e0e-4338-9eed-5f8cd03b0cae)) + (pin "2" (uuid 42c2ee71-3a98-4b5f-9098-4c10dc33807e)) + ) + + (symbol (lib_id "Device:R") (at 140.97 43.18 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 455120f9-696b-4fd9-bad0-3815e804c2a4) + (property "Reference" "R3" (id 0) (at 142.748 42.2715 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "30k" (id 1) (at 142.748 45.0466 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (id 2) (at 139.192 43.18 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 140.97 43.18 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 89d15f38-8940-4d08-8fff-2bc8c5c6ea15)) + (pin "2" (uuid a9ded329-97b1-4fb3-bb2a-791ab6833b5a)) + ) + + (symbol (lib_id "Device:R") (at 52.07 62.23 90) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 4552ffc9-c70d-40a6-8661-2e785c52907f) + (property "Reference" "R1" (id 0) (at 52.07 57.2475 90)) + (property "Value" "100k" (id 1) (at 52.07 60.0226 90)) + (property "Footprint" "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (id 2) (at 52.07 64.008 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 52.07 62.23 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 700a4be1-8742-4152-b7d9-81c0edf6c6e0)) + (pin "2" (uuid 086bb101-650a-4a37-9b60-59f6a058bcfa)) + ) + + (symbol (lib_id "Device:Battery_Cell") (at 27.94 116.84 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 6331419e-1c96-4bc0-8cb4-fb5c6950f6a3) + (property "Reference" "BT1" (id 0) (at 30.861 113.8995 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "CR2032" (id 1) (at 30.861 116.6746 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "fan_monitor:CR2032_Holder" (id 2) (at 27.94 115.316 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 27.94 115.316 90) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid ea4d2b2f-e3dd-4b1c-a542-d44c8fdf2526)) + (pin "2" (uuid 7effd23c-e6eb-4489-a974-2a4435d51b92)) + ) + + (symbol (lib_id "Device:R") (at 198.12 82.55 90) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 64dfe1a3-fa7b-4ccc-b41b-72cc579baccf) + (property "Reference" "R10" (id 0) (at 198.12 77.5675 90)) + (property "Value" "10k" (id 1) (at 198.12 80.3426 90)) + (property "Footprint" "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (id 2) (at 198.12 84.328 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 198.12 82.55 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 0a14e458-03d5-43c6-a18c-5335f9554e02)) + (pin "2" (uuid 416b51d3-da04-4937-81ec-5394dcfbf140)) + ) + + (symbol (lib_id "fan_monitor:HF152FD{slash}5-1H") (at 228.6 127 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 6bb410ef-baee-442a-9c79-7d15078936cd) + (property "Reference" "K1" (id 0) (at 239.522 126.0915 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "HF152FD/5-1H" (id 1) (at 239.522 128.8666 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "fan_monitor:HF152FD_Form_A" (id 2) (at 262.255 128.27 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 228.6 127 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 4ce9b17a-dff4-451b-a87c-6fb4d0036e42)) + (pin "2" (uuid 90adb1e3-c76d-46dd-a379-a28b0b14d63b)) + (pin "3" (uuid b01cbaf5-cf22-4e73-b185-9f26acda98e6)) + (pin "4" (uuid 95b4d372-1eb0-4352-abb3-861f854ec461)) + ) + + (symbol (lib_id "power:GND") (at 163.83 93.98 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 6d271f9d-b4e6-402c-9013-3ee298d41224) + (property "Reference" "#PWR0107" (id 0) (at 163.83 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (id 1) (at 163.83 98.5425 0)) + (property "Footprint" "" (id 2) (at 163.83 93.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 163.83 93.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid dd1ab198-a4ce-4623-b253-d0914cf19267)) + ) + + (symbol (lib_id "Connector_Generic:Conn_01x02") (at 262.89 120.65 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 6e6e6c89-98eb-40fc-b063-8fd4b219fd6f) + (property "Reference" "J8" (id 0) (at 262.89 113.1402 0)) + (property "Value" "Conn_01x02" (id 1) (at 262.89 115.6771 0)) + (property "Footprint" "TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_Horizontal" (id 2) (at 262.89 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 262.89 120.65 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 9ed0c289-99a6-4df5-a90e-355503ea1524)) + (pin "2" (uuid 93d93b65-e0c8-47a7-b205-d47b7ad8c431)) + ) + + (symbol (lib_id "power:GND") (at 27.94 121.92 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 6fffabdd-399b-4a0a-b97c-38239cb1912c) + (property "Reference" "#PWR0122" (id 0) (at 27.94 128.27 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (id 1) (at 27.94 126.4825 0)) + (property "Footprint" "" (id 2) (at 27.94 121.92 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 27.94 121.92 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 99095c67-dbe4-40ff-b564-d4764560ce26)) + ) + + (symbol (lib_id "Transistor_FET:BS170") (at 220.98 142.24 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 7058e9ec-7a8a-4c71-94e8-3c87c4bace1b) + (property "Reference" "Q2" (id 0) (at 226.187 141.3315 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "BS170" (id 1) (at 226.187 144.1066 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-92_Inline" (id 2) (at 226.06 144.145 0) + (effects (font (size 1.27 1.27) italic) (justify left) hide) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/BS170-D.PDF" (id 3) (at 220.98 142.24 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (pin "1" (uuid 861098d0-6430-4898-9fca-7c30f46b17a1)) + (pin "2" (uuid 4fd3d87c-4f1c-426a-a881-67fc2d5ddd0b)) + (pin "3" (uuid e496c016-e122-4986-a4e8-c930aa79b345)) + ) + + (symbol (lib_id "Device:C") (at 203.2 87.63 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 71779c1e-6333-461a-9158-7f5d273fb62d) + (property "Reference" "C1" (id 0) (at 206.121 86.7215 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "3.3uF" (id 1) (at 206.121 89.4966 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (id 2) (at 204.1652 91.44 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 203.2 87.63 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 040c06e6-1ecf-4fb4-8685-07b4b9053be6)) + (pin "2" (uuid 0d30b51d-51ad-49b2-8865-087e0ff9789d)) + ) + + (symbol (lib_id "power:+5V") (at 149.86 71.12 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 724c36a6-e775-4252-9adf-c2fc7b537eb5) + (property "Reference" "#PWR0106" (id 0) (at 149.86 74.93 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+5V" (id 1) (at 149.86 67.5155 0)) + (property "Footprint" "" (id 2) (at 149.86 71.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 149.86 71.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid df54d43a-f5e0-432f-b332-41cc8854119c)) + ) + + (symbol (lib_id "power:GND") (at 146.05 49.53 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 73f8f461-0657-41ff-bb94-1b3295f1b47e) + (property "Reference" "#PWR0109" (id 0) (at 146.05 55.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (id 1) (at 146.05 54.0925 0)) + (property "Footprint" "" (id 2) (at 146.05 49.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 146.05 49.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 84baad96-d4cd-464d-9410-d9e9a8499108)) + ) + + (symbol (lib_id "Connector_Generic:Conn_01x02") (at 261.62 80.01 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 7f6546a5-0db6-464d-b3f1-ac7f1f61e7bd) + (property "Reference" "J5" (id 0) (at 263.652 80.3715 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "Conn_01x02" (id 1) (at 263.652 83.1466 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal" (id 2) (at 261.62 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 261.62 80.01 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 01369ec5-1ed9-49de-977b-9ba88fa00db6)) + (pin "2" (uuid 51bd3b6b-8895-45a1-a3a4-a8511a516ab1)) + ) + + (symbol (lib_id "Device:R") (at 154.94 77.47 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 84c8c457-b59f-4add-b4af-60870d81b762) + (property "Reference" "R6" (id 0) (at 156.718 76.5615 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "100k" (id 1) (at 156.718 79.3366 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (id 2) (at 153.162 77.47 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 154.94 77.47 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 32c2ad92-e605-4fa4-9bc7-4caadf704bcd)) + (pin "2" (uuid 06a9123f-bccf-4886-9e75-4cf364e3ca27)) + ) + + (symbol (lib_id "power:+5V") (at 88.9 95.25 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 84d9b467-8b42-4ced-8ff3-fd41daf44d51) + (property "Reference" "#PWR0118" (id 0) (at 88.9 99.06 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+5V" (id 1) (at 88.9 91.6455 0)) + (property "Footprint" "" (id 2) (at 88.9 95.25 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 88.9 95.25 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid a9385424-d78f-4487-8f1f-7c1f518378f6)) + ) + + (symbol (lib_id "power:GND") (at 66.04 69.85 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 8627f593-e149-436d-9a08-c5ae5b7b17e3) + (property "Reference" "#PWR0120" (id 0) (at 66.04 76.2 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (id 1) (at 66.04 74.4125 0)) + (property "Footprint" "" (id 2) (at 66.04 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 66.04 69.85 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 25802f6b-6e02-4d39-ad78-26be0554a620)) + ) + + (symbol (lib_id "power:+5V") (at 250.19 26.67 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 863c3bdc-34b0-4d2f-8c22-e78512f7a454) + (property "Reference" "#PWR0113" (id 0) (at 250.19 30.48 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+5V" (id 1) (at 250.19 23.0655 0)) + (property "Footprint" "" (id 2) (at 250.19 26.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 250.19 26.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid b6a01939-5305-421f-9b36-02b0102f52f4)) + ) + + (symbol (lib_id "power:GND") (at 199.39 49.53 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 89870a58-fd08-44ca-bfe6-107ba5ea9add) + (property "Reference" "#PWR0111" (id 0) (at 199.39 55.88 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (id 1) (at 199.39 54.0925 0)) + (property "Footprint" "" (id 2) (at 199.39 49.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 199.39 49.53 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 80260f7e-0cb1-4e11-a687-55be478da8ab)) + ) + + (symbol (lib_id "Device:R") (at 204.47 33.02 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 8e313960-99d3-4b62-bdde-41a4dd2b5445) + (property "Reference" "R11" (id 0) (at 206.248 32.1115 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "30k" (id 1) (at 206.248 34.8866 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (id 2) (at 202.692 33.02 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 204.47 33.02 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 8cdfe9e8-5302-4c74-969a-46f23e923813)) + (pin "2" (uuid e0cc4e5b-d06f-4872-b518-8ec949ffdd8b)) + ) + + (symbol (lib_id "Device:Fuse") (at 246.38 118.11 90) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 93f33214-6d07-4045-8d18-4bc0c1f57476) + (property "Reference" "F1" (id 0) (at 246.38 113.3815 90)) + (property "Value" "Fuse" (id 1) (at 246.38 116.1566 90)) + (property "Footprint" "Fuse:Fuseholder_Cylinder-5x20mm_Stelvio-Kontek_PTF78_Horizontal_Open" (id 2) (at 246.38 119.888 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 246.38 118.11 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 5ccb2231-d048-4641-bb2e-2ffc110dabe7)) + (pin "2" (uuid 4597b219-e670-4b62-858b-ac43cd983585)) + ) + + (symbol (lib_id "power:+5V") (at 255.27 77.47 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 98ed307b-1c82-4cb4-b6e0-b6d874ca2db2) + (property "Reference" "#PWR0115" (id 0) (at 255.27 81.28 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+5V" (id 1) (at 255.27 73.8655 0)) + (property "Footprint" "" (id 2) (at 255.27 77.47 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 255.27 77.47 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid f323f654-e797-42e7-ab70-73effb049a0c)) + ) + + (symbol (lib_id "Connector_Generic:Conn_01x02") (at 212.09 44.45 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) + (uuid 9a6e1c04-f987-4542-80ee-6f35841a05c3) + (property "Reference" "J3" (id 0) (at 215.9 44.45 0)) + (property "Value" "Conn_01x02" (id 1) (at 213.36 46.99 0)) + (property "Footprint" "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal" (id 2) (at 212.09 44.45 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 212.09 44.45 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 8a99416f-ff9b-4052-8af7-6c29ef7ccbe2)) + (pin "2" (uuid bfd91d93-ba38-4fc5-81d2-3b78e19d0312)) + ) + + (symbol (lib_id "Device:R") (at 194.31 43.18 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid 9ae7595f-e806-4070-b18d-7dea7bdf40d3) + (property "Reference" "R9" (id 0) (at 196.088 42.2715 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "30k" (id 1) (at 196.088 45.0466 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (id 2) (at 192.532 43.18 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 194.31 43.18 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 910ba498-c827-4b4f-88db-ef5a00809468)) + (pin "2" (uuid bcdd5111-1ef1-449b-a8c9-ab0bd9a803ef)) + ) + + (symbol (lib_id "power:+5V") (at 57.15 25.4 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid a2433216-b45a-40a6-bfcc-efbce5d81246) + (property "Reference" "#PWR0103" (id 0) (at 57.15 29.21 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+5V" (id 1) (at 57.15 21.7955 0)) + (property "Footprint" "" (id 2) (at 57.15 25.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 57.15 25.4 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 1f320a5a-66b7-4b05-8790-dfb51c3fb586)) + ) + + (symbol (lib_id "power:GND") (at 242.57 87.63 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid a6a4eea9-f75e-4f3a-bb3d-08d711b31662) + (property "Reference" "#PWR0114" (id 0) (at 242.57 93.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (id 1) (at 242.57 92.1925 0)) + (property "Footprint" "" (id 2) (at 242.57 87.63 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 242.57 87.63 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 9c62cee8-92e1-4d8c-ae39-608e89b46f51)) + ) + + (symbol (lib_id "power:GND") (at 88.9 154.94 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid af414215-6dee-4755-aa42-f53370c95cbd) + (property "Reference" "#PWR0119" (id 0) (at 88.9 161.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (id 1) (at 88.9 159.5025 0)) + (property "Footprint" "" (id 2) (at 88.9 154.94 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 88.9 154.94 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid fa0f7290-0c57-42ec-a97f-898b4c345a37)) + ) + + (symbol (lib_id "power:+5V") (at 96.52 34.29 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid b0a56ec1-5a34-4ab9-8fbd-7223052d0bea) + (property "Reference" "#PWR0121" (id 0) (at 96.52 38.1 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+5V" (id 1) (at 96.52 30.6855 0)) + (property "Footprint" "" (id 2) (at 96.52 34.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 96.52 34.29 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid c6e080f2-c535-4467-98bf-40ee712b30f3)) + ) + + (symbol (lib_id "power:GND") (at 184.15 93.98 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid b2cad6b8-2473-4871-9c8b-2a427fdaa4f6) + (property "Reference" "#PWR0108" (id 0) (at 184.15 100.33 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (id 1) (at 184.15 98.5425 0)) + (property "Footprint" "" (id 2) (at 184.15 93.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 184.15 93.98 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 585e6ecd-bfc4-4e31-9245-cb2ee4608f2b)) + ) + + (symbol (lib_id "Connector_Generic:Conn_01x02") (at 262.89 44.45 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) + (uuid b541c487-b3a6-4eab-a218-c903d99346be) + (property "Reference" "J7" (id 0) (at 266.7 44.45 0)) + (property "Value" "Conn_01x02" (id 1) (at 264.16 46.99 0)) + (property "Footprint" "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal" (id 2) (at 262.89 44.45 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 262.89 44.45 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 72eaa590-53ee-4bfd-887d-83ba8cbb014b)) + (pin "2" (uuid bc5d1faa-209c-44c8-a3fb-9a13917dc6ae)) + ) + + (symbol (lib_id "Device:R") (at 187.96 77.47 0) (unit 1) + (in_bom yes) (on_board yes) + (uuid bd159686-e073-485d-b5ee-8d8c789a45b4) + (property "Reference" "R7" (id 0) (at 189.738 76.5615 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "100k" (id 1) (at 189.738 79.3366 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (id 2) (at 186.182 77.47 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 187.96 77.47 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 59ab0b4a-8dfa-4db8-8017-eb731874585f)) + (pin "2" (uuid 67214784-4652-46cd-a6a1-b625243c0061)) + ) + + (symbol (lib_id "Device:R") (at 140.97 33.02 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid ccc8ae47-44db-474e-8a3e-956bbb3e4cd0) + (property "Reference" "R2" (id 0) (at 142.748 32.1115 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "30k" (id 1) (at 142.748 34.8866 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (id 2) (at 139.192 33.02 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 140.97 33.02 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid d2871dcd-bfb3-4eb0-b1d1-7ae348676fbf)) + (pin "2" (uuid 4b970a94-c358-4fe5-8063-d2fd614c0034)) + ) + + (symbol (lib_id "power:GND") (at 57.15 38.1 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid d1a029ea-8d7b-4e76-91ff-3ab9c15af48e) + (property "Reference" "#PWR0104" (id 0) (at 57.15 44.45 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "GND" (id 1) (at 57.15 42.6625 0)) + (property "Footprint" "" (id 2) (at 57.15 38.1 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 57.15 38.1 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid e8032277-ca10-4c0a-9e62-232da1f7db69)) + ) + + (symbol (lib_id "Device:R") (at 245.11 33.02 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid d301fabf-fb4d-4174-9911-746839351c38) + (property "Reference" "R13" (id 0) (at 246.888 32.1115 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "30k" (id 1) (at 246.888 34.8866 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (id 2) (at 243.332 33.02 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 245.11 33.02 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 87714084-4e48-4500-af72-c76d2859f65e)) + (pin "2" (uuid 1c0d4728-f30f-4c8c-a94d-7671945c7a8c)) + ) + + (symbol (lib_id "power:+5V") (at 187.96 71.12 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid d9874f19-10cf-48d3-a873-c23d77f218de) + (property "Reference" "#PWR0105" (id 0) (at 187.96 74.93 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+5V" (id 1) (at 187.96 67.5155 0)) + (property "Footprint" "" (id 2) (at 187.96 71.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 187.96 71.12 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 4dcdacc4-0cee-4677-a60a-9a2f48f743b0)) + ) + + (symbol (lib_id "Device:R") (at 144.78 77.47 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid dd1b7cfe-5083-44fb-ae17-1601373156ae) + (property "Reference" "R4" (id 0) (at 146.558 76.5615 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "100k" (id 1) (at 146.558 79.3366 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (id 2) (at 143.002 77.47 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 144.78 77.47 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid f8aff68b-c7d4-4e9c-ae29-dfc77deda4f0)) + (pin "2" (uuid e3ab677f-78df-4c7d-a97a-e9d1476d75cd)) + ) + + (symbol (lib_id "Device:R") (at 255.27 33.02 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid e387ecc7-181a-4232-b5cc-8a3a5ffd88eb) + (property "Reference" "R15" (id 0) (at 257.048 32.1115 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "30k" (id 1) (at 257.048 34.8866 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (id 2) (at 253.492 33.02 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 255.27 33.02 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 5880f436-16ba-4ed5-82dc-c4f1b598df8f)) + (pin "2" (uuid 9d92218a-200a-45ae-9e6e-9845f93b011e)) + ) + + (symbol (lib_id "Device:R") (at 194.31 33.02 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid e7ecb368-009e-4882-9aaf-33cd420e4678) + (property "Reference" "R8" (id 0) (at 196.088 32.1115 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "30k" (id 1) (at 196.088 34.8866 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal" (id 2) (at 192.532 33.02 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 194.31 33.02 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 6e16770c-24c2-4537-8f82-49e7f6cccdd9)) + (pin "2" (uuid 826ed655-5eaf-4b80-8586-45bb619a45ac)) + ) + + (symbol (lib_id "fan_monitor:1SS315") (at 27.94 102.87 270) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid ea920653-d3ef-41d8-816c-663402544dc1) + (property "Reference" "D1" (id 0) (at 29.972 102.0353 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "1SS315" (id 1) (at 29.972 104.5722 90) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Diode_SMD:D_SOD-323_HandSoldering" (id 2) (at 27.94 102.87 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 27.94 102.87 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 6808969e-b4d7-41aa-a57f-45a54d2ef18f)) + (pin "2" (uuid 36d90dd5-9c31-40d6-ac08-e118b07d9f12)) + ) + + (symbol (lib_id "Connector_Generic:Conn_01x02") (at 158.75 44.45 0) (mirror x) (unit 1) + (in_bom yes) (on_board yes) + (uuid eb9d915a-a0f9-40b7-b6ca-2475b57417b1) + (property "Reference" "J2" (id 0) (at 162.56 44.45 0)) + (property "Value" "Conn_01x02" (id 1) (at 161.29 46.99 0)) + (property "Footprint" "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal" (id 2) (at 158.75 44.45 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 158.75 44.45 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 9f3f948a-6537-4ae1-88d1-48111b84d722)) + (pin "2" (uuid 2a7ea07c-32bb-4be3-84c8-4e2e815c6e9f)) + ) + + (symbol (lib_id "Connector_Generic:Conn_01x02") (at 261.62 85.09 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid f00793b6-9de3-4563-a5dd-8810cad7c60e) + (property "Reference" "J6" (id 0) (at 263.652 85.4515 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "Conn_01x02" (id 1) (at 263.652 88.2266 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal" (id 2) (at 261.62 85.09 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 261.62 85.09 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid c51c6cf4-254f-4c40-8dd7-09e6762d0e47)) + (pin "2" (uuid 9edd2f4d-ab17-4d21-be4a-64fba361cb20)) + ) + + (symbol (lib_id "Transistor_FET:BS170") (at 63.5 62.23 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid f16e486c-ec75-49e3-b6f1-9e240f4f373f) + (property "Reference" "Q1" (id 0) (at 68.707 61.3215 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "BS170" (id 1) (at 68.707 64.0966 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-92_Inline" (id 2) (at 68.58 64.135 0) + (effects (font (size 1.27 1.27) italic) (justify left) hide) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/BS170-D.PDF" (id 3) (at 63.5 62.23 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (pin "1" (uuid 976d01b6-614e-4fbe-b05f-0e5d353d8f84)) + (pin "2" (uuid 493f8618-3aab-4c96-ae70-7012ead03985)) + (pin "3" (uuid 17de1a0c-3539-4035-a527-1fc1e308275c)) + ) + + (symbol (lib_id "Device:R") (at 209.55 142.24 90) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid f6871ffc-d4ef-4b3c-b99b-69c2e87ec0bd) + (property "Reference" "R12" (id 0) (at 209.55 137.2575 90)) + (property "Value" "100k" (id 1) (at 209.55 140.0326 90)) + (property "Footprint" "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" (id 2) (at 209.55 144.018 90) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 209.55 142.24 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 2cc3c540-8b96-4e00-9776-e2eb612c96dd)) + (pin "2" (uuid d0e224ca-b37e-45cf-984b-71a50d8595ee)) + ) + + (symbol (lib_id "power:+5V") (at 146.05 26.67 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid fa7b15f9-6411-40a8-8121-35865f3277d3) + (property "Reference" "#PWR0101" (id 0) (at 146.05 30.48 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Value" "+5V" (id 1) (at 146.05 23.0655 0)) + (property "Footprint" "" (id 2) (at 146.05 26.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 146.05 26.67 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid ada669e4-c925-4d1f-be53-9c67fb9b8128)) + ) + + (symbol (lib_id "Connector_Generic:Conn_02x08_Odd_Even") (at 78.74 44.45 0) (unit 1) + (in_bom yes) (on_board yes) (fields_autoplaced) + (uuid feca530a-c6c1-4219-b383-a5f1908d3bf8) + (property "Reference" "J1" (id 0) (at 80.01 31.5935 0)) + (property "Value" "HE10-16" (id 1) (at 80.01 34.3686 0)) + (property "Footprint" "fan_monitor:HE10-16" (id 2) (at 78.74 44.45 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 78.74 44.45 0) + (effects (font (size 1.27 1.27)) hide) + ) + (pin "1" (uuid 6fe8aca6-0bb8-47aa-98f1-76bb761c3b1d)) + (pin "10" (uuid 58b7b4bd-4e1e-4ac9-8216-48461f572753)) + (pin "11" (uuid 736ccf25-e764-4c5a-879b-4a4046f70874)) + (pin "12" (uuid 3e9e7a8c-fce8-453f-b394-7ff37c75fffa)) + (pin "13" (uuid 96c33868-d76e-47a5-be6d-c61693b91cc4)) + (pin "14" (uuid b0a41647-bf7b-406d-b583-da55aaaac8e9)) + (pin "15" (uuid 077c5790-1788-4f35-97cf-f09dab3f13c7)) + (pin "16" (uuid 8016ace4-b164-40ff-a63b-582c2cabda23)) + (pin "2" (uuid aa2698cd-962d-4020-aaef-301339897a9f)) + (pin "3" (uuid 97ef0709-7e8a-4241-a1d2-d5a8a8c43b71)) + (pin "4" (uuid 3fe7e44d-58a3-4e8c-b51f-2ca613da6459)) + (pin "5" (uuid 8b5ef870-c787-47b8-8a14-ed9256c6b5f1)) + (pin "6" (uuid d63bb756-117c-400a-bd7d-cb4352d51ebb)) + (pin "7" (uuid 3bcb09e5-d1da-4c01-bb55-cb9b6c206704)) + (pin "8" (uuid d527976a-aaf5-4b91-875f-fbf5d6c15241)) + (pin "9" (uuid 27e7bf49-8632-4bfd-bca8-7de423199f5c)) + ) + + (sheet_instances + (path "/" (page "1")) + ) + + (symbol_instances + (path "/fa7b15f9-6411-40a8-8121-35865f3277d3" + (reference "#PWR0101") (unit 1) (value "+5V") (footprint "") + ) + (path "/11f447ef-0c27-4d9a-8a9a-481e8f9cd22a" + (reference "#PWR0102") (unit 1) (value "GND") (footprint "") + ) + (path "/a2433216-b45a-40a6-bfcc-efbce5d81246" + (reference "#PWR0103") (unit 1) (value "+5V") (footprint "") + ) + (path "/d1a029ea-8d7b-4e76-91ff-3ab9c15af48e" + (reference "#PWR0104") (unit 1) (value "GND") (footprint "") + ) + (path "/d9874f19-10cf-48d3-a873-c23d77f218de" + (reference "#PWR0105") (unit 1) (value "+5V") (footprint "") + ) + (path "/724c36a6-e775-4252-9adf-c2fc7b537eb5" + (reference "#PWR0106") (unit 1) (value "+5V") (footprint "") + ) + (path "/6d271f9d-b4e6-402c-9013-3ee298d41224" + (reference "#PWR0107") (unit 1) (value "GND") (footprint "") + ) + (path "/b2cad6b8-2473-4871-9c8b-2a427fdaa4f6" + (reference "#PWR0108") (unit 1) (value "GND") (footprint "") + ) + (path "/73f8f461-0657-41ff-bb94-1b3295f1b47e" + (reference "#PWR0109") (unit 1) (value "GND") (footprint "") + ) + (path "/30e74571-b0f7-45c9-826c-d5e788b99fbc" + (reference "#PWR0110") (unit 1) (value "+5V") (footprint "") + ) + (path "/89870a58-fd08-44ca-bfe6-107ba5ea9add" + (reference "#PWR0111") (unit 1) (value "GND") (footprint "") + ) + (path "/21e381e9-2adc-4bbe-ba0e-3a95de502df6" + (reference "#PWR0112") (unit 1) (value "GND") (footprint "") + ) + (path "/863c3bdc-34b0-4d2f-8c22-e78512f7a454" + (reference "#PWR0113") (unit 1) (value "+5V") (footprint "") + ) + (path "/a6a4eea9-f75e-4f3a-bb3d-08d711b31662" + (reference "#PWR0114") (unit 1) (value "GND") (footprint "") + ) + (path "/98ed307b-1c82-4cb4-b6e0-b6d874ca2db2" + (reference "#PWR0115") (unit 1) (value "+5V") (footprint "") + ) + (path "/1e6eff36-15d8-4667-ae16-1187a03602e6" + (reference "#PWR0116") (unit 1) (value "+5V") (footprint "") + ) + (path "/3a8d1bf6-6950-4a2e-96f5-bd4eba2a8797" + (reference "#PWR0117") (unit 1) (value "GND") (footprint "") + ) + (path "/84d9b467-8b42-4ced-8ff3-fd41daf44d51" + (reference "#PWR0118") (unit 1) (value "+5V") (footprint "") + ) + (path "/af414215-6dee-4755-aa42-f53370c95cbd" + (reference "#PWR0119") (unit 1) (value "GND") (footprint "") + ) + (path "/8627f593-e149-436d-9a08-c5ae5b7b17e3" + (reference "#PWR0120") (unit 1) (value "GND") (footprint "") + ) + (path "/b0a56ec1-5a34-4ab9-8fbd-7223052d0bea" + (reference "#PWR0121") (unit 1) (value "+5V") (footprint "") + ) + (path "/6fffabdd-399b-4a0a-b97c-38239cb1912c" + (reference "#PWR0122") (unit 1) (value "GND") (footprint "") + ) + (path "/6331419e-1c96-4bc0-8cb4-fb5c6950f6a3" + (reference "BT1") (unit 1) (value "CR2032") (footprint "fan_monitor:CR2032_Holder") + ) + (path "/71779c1e-6333-461a-9158-7f5d273fb62d" + (reference "C1") (unit 1) (value "3.3uF") (footprint "Capacitor_SMD:C_0805_2012Metric") + ) + (path "/ea920653-d3ef-41d8-816c-663402544dc1" + (reference "D1") (unit 1) (value "1SS315") (footprint "Diode_SMD:D_SOD-323_HandSoldering") + ) + (path "/35a7db72-4c10-416f-a118-b17adfc999d2" + (reference "D2") (unit 1) (value "UF5400") (footprint "Diode_THT:D_DO-201AD_P15.24mm_Horizontal") + ) + (path "/3462e14d-f877-415a-8b53-496f63df60d2" + (reference "D3") (unit 1) (value "UF5400") (footprint "Diode_THT:D_DO-201AD_P15.24mm_Horizontal") + ) + (path "/93f33214-6d07-4045-8d18-4bc0c1f57476" + (reference "F1") (unit 1) (value "Fuse") (footprint "Fuse:Fuseholder_Cylinder-5x20mm_Stelvio-Kontek_PTF78_Horizontal_Open") + ) + (path "/feca530a-c6c1-4219-b383-a5f1908d3bf8" + (reference "J1") (unit 1) (value "HE10-16") (footprint "fan_monitor:HE10-16") + ) + (path "/eb9d915a-a0f9-40b7-b6ca-2475b57417b1" + (reference "J2") (unit 1) (value "Conn_01x02") (footprint "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal") + ) + (path "/9a6e1c04-f987-4542-80ee-6f35841a05c3" + (reference "J3") (unit 1) (value "Conn_01x02") (footprint "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal") + ) + (path "/442cee4f-59b9-413a-9eb0-b0d5464ec054" + (reference "J4") (unit 1) (value "Conn_01x02") (footprint "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal") + ) + (path "/7f6546a5-0db6-464d-b3f1-ac7f1f61e7bd" + (reference "J5") (unit 1) (value "Conn_01x02") (footprint "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal") + ) + (path "/f00793b6-9de3-4563-a5dd-8810cad7c60e" + (reference "J6") (unit 1) (value "Conn_01x02") (footprint "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal") + ) + (path "/b541c487-b3a6-4eab-a218-c903d99346be" + (reference "J7") (unit 1) (value "Conn_01x02") (footprint "Connector_Phoenix_MC:PhoenixContact_MC_1,5_2-G-3.5_1x02_P3.50mm_Horizontal") + ) + (path "/6e6e6c89-98eb-40fc-b063-8fd4b219fd6f" + (reference "J8") (unit 1) (value "Conn_01x02") (footprint "TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_Horizontal") + ) + (path "/6bb410ef-baee-442a-9c79-7d15078936cd" + (reference "K1") (unit 1) (value "HF152FD/5-1H") (footprint "fan_monitor:HF152FD_Form_A") + ) + (path "/f16e486c-ec75-49e3-b6f1-9e240f4f373f" + (reference "Q1") (unit 1) (value "BS170") (footprint "Package_TO_SOT_THT:TO-92_Inline") + ) + (path "/7058e9ec-7a8a-4c71-94e8-3c87c4bace1b" + (reference "Q2") (unit 1) (value "BS170") (footprint "Package_TO_SOT_THT:TO-92_Inline") + ) + (path "/4552ffc9-c70d-40a6-8661-2e785c52907f" + (reference "R1") (unit 1) (value "100k") (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal") + ) + (path "/ccc8ae47-44db-474e-8a3e-956bbb3e4cd0" + (reference "R2") (unit 1) (value "30k") (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal") + ) + (path "/455120f9-696b-4fd9-bad0-3815e804c2a4" + (reference "R3") (unit 1) (value "30k") (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal") + ) + (path "/dd1b7cfe-5083-44fb-ae17-1601373156ae" + (reference "R4") (unit 1) (value "100k") (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal") + ) + (path "/3e74ac15-80d5-4343-b456-b5978edf9eda" + (reference "R5") (unit 1) (value "30k") (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal") + ) + (path "/84c8c457-b59f-4add-b4af-60870d81b762" + (reference "R6") (unit 1) (value "100k") (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal") + ) + (path "/bd159686-e073-485d-b5ee-8d8c789a45b4" + (reference "R7") (unit 1) (value "100k") (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal") + ) + (path "/e7ecb368-009e-4882-9aaf-33cd420e4678" + (reference "R8") (unit 1) (value "30k") (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal") + ) + (path "/9ae7595f-e806-4070-b18d-7dea7bdf40d3" + (reference "R9") (unit 1) (value "30k") (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal") + ) + (path "/64dfe1a3-fa7b-4ccc-b41b-72cc579baccf" + (reference "R10") (unit 1) (value "10k") (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal") + ) + (path "/8e313960-99d3-4b62-bdde-41a4dd2b5445" + (reference "R11") (unit 1) (value "30k") (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal") + ) + (path "/f6871ffc-d4ef-4b3c-b99b-69c2e87ec0bd" + (reference "R12") (unit 1) (value "100k") (footprint "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal") + ) + (path "/d301fabf-fb4d-4174-9911-746839351c38" + (reference "R13") (unit 1) (value "30k") (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal") + ) + (path "/3398c67f-46b1-4478-920f-dd0ec949557e" + (reference "R14") (unit 1) (value "30k") (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal") + ) + (path "/e387ecc7-181a-4232-b5cc-8a3a5ffd88eb" + (reference "R15") (unit 1) (value "30k") (footprint "Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal") + ) + (path "/33a74763-48a8-4a27-ae92-f81f779cd726" + (reference "RV1") (unit 1) (value "10k") (footprint "Potentiometer_THT:Potentiometer_Vishay_T73XX_Horizontal") + ) + (path "/268a0bd8-e906-400f-9772-df2f797701c6" + (reference "SW1") (unit 1) (value "RotaryEncoder_Switch") (footprint "fan_monitor:RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm") + ) + (path "/41fc1c23-edd4-45a5-8036-7f62b013770f" + (reference "U1") (unit 1) (value "blue_pill") (footprint "fan_monitor:blue_pill") + ) + ) +) diff --git a/cad/fan_monitor/fan_monitor.kicad_sym b/cad/fan_monitor/fan_monitor.kicad_sym new file mode 100644 index 0000000..4572cb1 --- /dev/null +++ b/cad/fan_monitor/fan_monitor.kicad_sym @@ -0,0 +1,638 @@ +(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor) + (symbol "1SS315" (pin_numbers hide) (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "D" (id 0) (at 0 2.54 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "1SS315" (id 1) (at 0 -2.54 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "Diode_SMD:D_SOD-323_HandSoldering" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "diode CMS SOD-323" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Diode CMS Toshiba, 30mA, 5V, SOD-323" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "TO-???* *_Diode_* *SingleDiode* D_*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "1SS315_0_1" + (polyline + (pts + (xy -1.27 1.27) + (xy -1.27 -1.27) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 0) + (xy -1.27 0) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 1.27) + (xy 1.27 -1.27) + (xy -1.27 0) + (xy 1.27 1.27) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "1SS315_1_1" + (pin passive line (at -3.81 0 0) (length 2.54) + (name "K" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 3.81 0 180) (length 2.54) + (name "A" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "2N4401" (pin_names (offset 0) hide) (in_bom yes) (on_board yes) + (property "Reference" "Q" (id 0) (at 5.08 1.905 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Value" "2N4401" (id 1) (at 5.08 0 0) + (effects (font (size 1.27 1.27)) (justify left)) + ) + (property "Footprint" "Package_TO_SOT_THT:TO-92_Inline" (id 2) (at 5.08 -1.905 0) + (effects (font (size 1.27 1.27) italic) (justify left) hide) + ) + (property "Datasheet" "https://www.onsemi.com/pub/Collateral/2N3903-D.PDF" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) (justify left) hide) + ) + (property "ki_keywords" "NPN Transistor" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "0.2A Ic, 40V Vce, Small Signal NPN Transistor, TO-92" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "TO?92*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "2N4401_0_1" + (polyline + (pts + (xy 0.635 0.635) + (xy 2.54 2.54) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.635 -0.635) + (xy 2.54 -2.54) + (xy 2.54 -2.54) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.635 1.905) + (xy 0.635 -1.905) + (xy 0.635 -1.905) + ) + (stroke (width 0.508) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.27 -1.778) + (xy 1.778 -1.27) + (xy 2.286 -2.286) + (xy 1.27 -1.778) + (xy 1.27 -1.778) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type outline)) + ) + (circle (center 1.27 0) (radius 2.8194) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "2N4401_1_1" + (pin passive line (at 2.54 -5.08 90) (length 2.54) + (name "E" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 0 0) (length 5.715) + (name "B" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 2.54 5.08 270) (length 2.54) + (name "C" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "HE10-16" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes) + (property "Reference" "J" (id 0) (at 1.27 10.16 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "HE10-16" (id 1) (at 1.27 -12.7 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" (id 2) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "~" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "connector" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Generic connector, double row, 02x08, odd/even pin numbering scheme (row 1 odd numbers, row 2 even numbers), script generated (kicad-library-utils/schlib/autogen/connector/)" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "Connector*:*_2x??_*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "HE10-16_1_1" + (rectangle (start -1.27 -10.033) (end 0 -10.287) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 -7.493) (end 0 -7.747) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 -4.953) (end 0 -5.207) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 -2.413) (end 0 -2.667) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 0.127) (end 0 -0.127) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 2.667) (end 0 2.413) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 5.207) (end 0 4.953) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 7.747) (end 0 7.493) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start -1.27 8.89) (end 3.81 -11.43) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type background)) + ) + (rectangle (start 3.81 -10.033) (end 2.54 -10.287) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start 3.81 -7.493) (end 2.54 -7.747) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start 3.81 -4.953) (end 2.54 -5.207) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start 3.81 -2.413) (end 2.54 -2.667) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start 3.81 0.127) (end 2.54 -0.127) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start 3.81 2.667) (end 2.54 2.413) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start 3.81 5.207) (end 2.54 4.953) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (rectangle (start 3.81 7.747) (end 2.54 7.493) + (stroke (width 0.1524) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (pin passive line (at -5.08 7.62 0) (length 3.81) + (name "Pin_1" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -2.54 180) (length 3.81) + (name "Pin_10" (effects (font (size 1.27 1.27)))) + (number "10" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -5.08 0) (length 3.81) + (name "Pin_11" (effects (font (size 1.27 1.27)))) + (number "11" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -5.08 180) (length 3.81) + (name "Pin_12" (effects (font (size 1.27 1.27)))) + (number "12" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -7.62 0) (length 3.81) + (name "Pin_13" (effects (font (size 1.27 1.27)))) + (number "13" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -7.62 180) (length 3.81) + (name "Pin_14" (effects (font (size 1.27 1.27)))) + (number "14" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -10.16 0) (length 3.81) + (name "Pin_15" (effects (font (size 1.27 1.27)))) + (number "15" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 -10.16 180) (length 3.81) + (name "Pin_16" (effects (font (size 1.27 1.27)))) + (number "16" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 7.62 180) (length 3.81) + (name "Pin_2" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 5.08 0) (length 3.81) + (name "Pin_3" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 5.08 180) (length 3.81) + (name "Pin_4" (effects (font (size 1.27 1.27)))) + (number "4" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 2.54 0) (length 3.81) + (name "Pin_5" (effects (font (size 1.27 1.27)))) + (number "5" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 2.54 180) (length 3.81) + (name "Pin_6" (effects (font (size 1.27 1.27)))) + (number "6" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 0 0) (length 3.81) + (name "Pin_7" (effects (font (size 1.27 1.27)))) + (number "7" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 0 180) (length 3.81) + (name "Pin_8" (effects (font (size 1.27 1.27)))) + (number "8" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -2.54 0) (length 3.81) + (name "Pin_9" (effects (font (size 1.27 1.27)))) + (number "9" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "HF152FD{slash}5-1H" (in_bom yes) (on_board yes) + (property "Reference" "K" (id 0) (at 11.43 3.81 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "HF152FD{slash}5-1H" (id 1) (at 18.415 1.27 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "fan_monitor:HF152FD_Form_A" (id 2) (at 33.655 -1.27 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "" (id 3) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_keywords" "SPST 1P1T" (id 4) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_description" "Hongfa, Small Non-Latching Power Relay, Single coil, 400VAC, 1 Form A" (id 5) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "ki_fp_filters" "Relay*1P1T*NO*Panasonic*ADW11xxxxW*" (id 6) (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "HF152FD{slash}5-1H_0_0" + (text "?" (at -3.81 3.175 0) + (effects (font (size 1.27 1.27))) + ) + ) + (symbol "HF152FD{slash}5-1H_1_1" + (rectangle (start -10.16 5.08) (end 10.16 -5.08) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type background)) + ) + (rectangle (start -8.255 1.905) (end -1.905 -1.905) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -7.62 -1.905) + (xy -2.54 1.905) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -5.08 -5.08) + (xy -5.08 -1.905) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -5.08 5.08) + (xy -5.08 1.905) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -1.905 0) + (xy -1.27 0) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy -0.635 0) + (xy 0 0) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.635 0) + (xy 1.27 0) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 0.635 0) + (xy 1.27 0) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 1.905 0) + (xy 2.54 0) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 3.175 0) + (xy 3.81 0) + ) + (stroke (width 0.254) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 5.08 -2.54) + (xy 3.175 3.81) + ) + (stroke (width 0.508) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 5.08 -2.54) + (xy 5.08 -5.08) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 7.62 3.81) + (xy 7.62 5.08) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (polyline + (pts + (xy 7.62 3.81) + (xy 7.62 2.54) + (xy 6.985 3.175) + (xy 7.62 3.81) + ) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + (pin passive line (at -5.08 7.62 270) (length 2.54) + (name "~" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at -5.08 -7.62 90) (length 2.54) + (name "~" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 5.08 -7.62 90) (length 2.54) + (name "~" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + (pin passive line (at 7.62 7.62 270) (length 2.54) + (name "~" (effects (font (size 1.27 1.27)))) + (number "4" (effects (font (size 1.27 1.27)))) + ) + ) + ) + (symbol "blue_pill" (pin_names (offset 1.016)) (in_bom yes) (on_board yes) + (property "Reference" "U" (id 0) (at -12.7 22.86 0) + (effects (font (size 1.524 1.524))) + ) + (property "Value" "blue_pill" (id 1) (at 7.62 -24.13 0) + (effects (font (size 1.524 1.524))) + ) + (property "Footprint" "Module:blue_pill" (id 2) (at -2.54 19.05 0) + (effects (font (size 1.524 1.524)) hide) + ) + (property "Datasheet" "https://www.electronicshub.org/getting-started-with-stm32f103c8t6-blue-pill/" (id 3) (at -2.54 19.05 0) + (effects (font (size 1.524 1.524)) hide) + ) + (symbol "blue_pill_0_1" + (rectangle (start -13.97 21.59) (end 13.97 -21.59) + (stroke (width 0) (type default) (color 0 0 0 0)) + (fill (type none)) + ) + ) + (symbol "blue_pill_1_1" + (pin power_out line (at 0 26.67 270) (length 5.08) + (name "3.3V" (effects (font (size 1.27 1.27)))) + (number "3V3" (effects (font (size 1.27 1.27)))) + ) + (pin power_out line (at 3.81 26.67 270) (length 5.08) + (name "5V" (effects (font (size 1.27 1.27)))) + (number "5V" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -3.81 -26.67 90) (length 5.08) + (name "BOOT0" (effects (font (size 1.27 1.27)))) + (number "BOOT" (effects (font (size 1.27 1.27)))) + ) + (pin power_out line (at 3.81 -26.67 90) (length 5.08) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "G" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -19.05 -20.32 0) (length 5.08) + (name "RESET" (effects (font (size 1.27 1.27)))) + (number "NRST" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 12.7 0) (length 5.08) + (name "PA0" (effects (font (size 1.27 1.27)))) + (number "PA0" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 10.16 0) (length 5.08) + (name "PA1" (effects (font (size 1.27 1.27)))) + (number "PA1" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -5.08 180) (length 5.08) + (name "PA10" (effects (font (size 1.27 1.27)))) + (number "PA10" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -2.54 180) (length 5.08) + (name "PA11" (effects (font (size 1.27 1.27)))) + (number "PA11" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 0 180) (length 5.08) + (name "PA12" (effects (font (size 1.27 1.27)))) + (number "PA12" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 2.54 180) (length 5.08) + (name "PA15" (effects (font (size 1.27 1.27)))) + (number "PA15" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 7.62 0) (length 5.08) + (name "PA2" (effects (font (size 1.27 1.27)))) + (number "PA2" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 5.08 0) (length 5.08) + (name "PA3" (effects (font (size 1.27 1.27)))) + (number "PA3" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 2.54 0) (length 5.08) + (name "PA4" (effects (font (size 1.27 1.27)))) + (number "PA4" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 0 0) (length 5.08) + (name "PA5" (effects (font (size 1.27 1.27)))) + (number "PA5" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 -2.54 0) (length 5.08) + (name "PA6" (effects (font (size 1.27 1.27)))) + (number "PA6" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 -5.08 0) (length 5.08) + (name "PA7" (effects (font (size 1.27 1.27)))) + (number "PA7" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -10.16 180) (length 5.08) + (name "PA8" (effects (font (size 1.27 1.27)))) + (number "PA8" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -7.62 180) (length 5.08) + (name "PA9" (effects (font (size 1.27 1.27)))) + (number "PA9" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 -7.62 0) (length 5.08) + (name "PB0" (effects (font (size 1.27 1.27)))) + (number "PB0" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 -10.16 0) (length 5.08) + (name "PB1" (effects (font (size 1.27 1.27)))) + (number "PB1" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 -12.7 0) (length 5.08) + (name "PB10" (effects (font (size 1.27 1.27)))) + (number "PB10" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 -15.24 0) (length 5.08) + (name "PB11" (effects (font (size 1.27 1.27)))) + (number "PB11" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -20.32 180) (length 5.08) + (name "PB12" (effects (font (size 1.27 1.27)))) + (number "PB12" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -17.78 180) (length 5.08) + (name "PB13" (effects (font (size 1.27 1.27)))) + (number "PB13" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -15.24 180) (length 5.08) + (name "PB14" (effects (font (size 1.27 1.27)))) + (number "PB14" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 -12.7 180) (length 5.08) + (name "PB15" (effects (font (size 1.27 1.27)))) + (number "PB15" (effects (font (size 1.27 1.27)))) + ) + (pin input line (at -1.27 -26.67 90) (length 5.08) + (name "BOOT1" (effects (font (size 1.27 1.27)))) + (number "PB2" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 5.08 180) (length 5.08) + (name "PB3" (effects (font (size 1.27 1.27)))) + (number "PB3" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 7.62 180) (length 5.08) + (name "PB4" (effects (font (size 1.27 1.27)))) + (number "PB4" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 10.16 180) (length 5.08) + (name "PB5" (effects (font (size 1.27 1.27)))) + (number "PB5" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 12.7 180) (length 5.08) + (name "PB6" (effects (font (size 1.27 1.27)))) + (number "PB6" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 15.24 180) (length 5.08) + (name "PB7" (effects (font (size 1.27 1.27)))) + (number "PB7" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 17.78 180) (length 5.08) + (name "PB8" (effects (font (size 1.27 1.27)))) + (number "PB8" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at 19.05 20.32 180) (length 5.08) + (name "PB9" (effects (font (size 1.27 1.27)))) + (number "PB9" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 20.32 0) (length 5.08) + (name "PC13" (effects (font (size 1.27 1.27)))) + (number "PC13" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 17.78 0) (length 5.08) + (name "PC14" (effects (font (size 1.27 1.27)))) + (number "PC14" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line (at -19.05 15.24 0) (length 5.08) + (name "PC15" (effects (font (size 1.27 1.27)))) + (number "PC15" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line (at -3.81 26.67 270) (length 5.08) + (name "Vbat" (effects (font (size 1.27 1.27)))) + (number "VBAT" (effects (font (size 1.27 1.27)))) + ) + ) + ) +) diff --git a/cad/fan_monitor/fan_monitor.pretty/CR2032_Holder.kicad_mod b/cad/fan_monitor/fan_monitor.pretty/CR2032_Holder.kicad_mod new file mode 100644 index 0000000..4398c84 --- /dev/null +++ b/cad/fan_monitor/fan_monitor.pretty/CR2032_Holder.kicad_mod @@ -0,0 +1,29 @@ +(footprint "CR2032_Holder" (version 20211014) (generator pcbnew) + (layer "F.Cu") + (tedit 62261CA8) + (descr "Coin Cell PV Battery Holder") + (tags "CR2032") + (attr through_hole) + (fp_text reference "REF**" (at 7.3 -6.2 unlocked) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 23c65112-425a-4ada-b1ca-3a5e5f538f08) + ) + (fp_text value "CR2032_Battery_Holder" (at 7.3 -4.7 unlocked) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 4ef94bb9-2e0a-4fb6-a2da-03965e6f684d) + ) + (fp_text user "${REFERENCE}" (at 7.3 -3.2 unlocked) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 65867e2e-3f24-4116-aeeb-b7c0d0114cc2) + ) + (fp_line (start 2.54 -2.54) (end -1.7 -2.54) (layer "F.SilkS") (width 0.12) (tstamp 476b1128-2a06-4418-8c4e-6e9ca4d7e5b7)) + (fp_line (start 2.54 2.54) (end 2.54 -2.54) (layer "F.SilkS") (width 0.12) (tstamp 533854f6-ac37-46ef-b665-ba2d8aac1c93)) + (fp_line (start -1.7 2.54) (end 2.54 2.54) (layer "F.SilkS") (width 0.12) (tstamp b2600e4c-aec5-41d4-a697-836066376dce)) + (fp_circle (center -15.38 0) (end -1.5 0) (layer "F.SilkS") (width 0.12) (fill none) (tstamp 5b0557b9-b3ad-49ce-b3bc-d9e1ab30942e)) + (fp_line (start 3.4 3.4) (end 3.4 -3.4) (layer "F.CrtYd") (width 0.1) (tstamp 07d95c75-cc60-460d-8e32-ab4c50dd8b25)) + (fp_line (start -0.82 3.4) (end 3.4 3.4) (layer "F.CrtYd") (width 0.1) (tstamp 21b8ac40-eadf-4191-b4e4-7b4932f275a8)) + (fp_line (start 3.4 -3.4) (end -0.82 -3.4) (layer "F.CrtYd") (width 0.1) (tstamp 9add2b14-349f-4255-8bc9-6867c4ac3e1c)) + (fp_circle (center -15.38 0) (end -0.5 0) (layer "F.CrtYd") (width 0.1) (fill none) (tstamp 9e528cce-46ff-4bf2-83ab-a1ec37fb2e1f)) + (pad "1" thru_hole circle (at 0 0) (size 2 2) (drill oval 1.3 1.2) (layers *.Cu *.Mask) (tstamp 48d89f06-d1fb-4760-981e-831543f25182)) + (pad "2" thru_hole circle (at -20.49 0) (size 2 2) (drill 1.3) (layers *.Cu *.Mask) (tstamp 04216d84-e824-4bb3-b463-ea6199a58c8c)) +) diff --git a/cad/fan_monitor/fan_monitor.pretty/HE10-16.kicad_mod b/cad/fan_monitor/fan_monitor.pretty/HE10-16.kicad_mod new file mode 100644 index 0000000..60beb57 --- /dev/null +++ b/cad/fan_monitor/fan_monitor.pretty/HE10-16.kicad_mod @@ -0,0 +1,42 @@ +(footprint "HE10-16" (version 20211014) (generator pcbnew) + (layer "F.Cu") + (tedit 62261CF8) + (descr "HE10-16 straight connector") + (tags "CONN HE10") + (attr through_hole) + (fp_text reference "HE10-16" (at -5.588 -6.096) (layer "F.SilkS") + (effects (font (size 1.778 1.778) (thickness 0.3048))) + (tstamp 89ef1cf6-a73d-4c50-90d3-6c27b7f0cb41) + ) + (fp_text value "Val**" (at 12.7 6.096) (layer "F.SilkS") + (effects (font (size 1.778 1.778) (thickness 0.3048))) + (tstamp 0c0726bc-34f3-42e8-9a5f-0ffe16108e71) + ) + (fp_line (start -12.7 -3.556) (end 12.7 -3.556) (layer "F.SilkS") (width 0.12) (tstamp 003a5141-e200-4e63-b032-3dc8d3c60607)) + (fp_line (start -2.54 3.556) (end -12.7 3.556) (layer "F.SilkS") (width 0.12) (tstamp 092f439c-150d-415b-8b93-adf5f43b88bb)) + (fp_line (start 12.7 3.556) (end 2.54 3.556) (layer "F.SilkS") (width 0.12) (tstamp 11338925-1d78-44eb-8945-bafb4bea6979)) + (fp_line (start -11.684 0.508) (end -11.684 2.032) (layer "F.SilkS") (width 0.3048) (tstamp 48016a16-8602-46dd-bd85-d3687867709e)) + (fp_line (start -2.54 4.318) (end 2.54 4.318) (layer "F.SilkS") (width 0.12) (tstamp 5a96ec7d-775a-4197-bd3a-b35afffc8167)) + (fp_line (start -12.7 3.556) (end -12.7 -3.556) (layer "F.SilkS") (width 0.12) (tstamp 62572e48-123e-40e3-bbac-e4ee3d41f626)) + (fp_line (start 12.7 -3.556) (end 12.7 3.556) (layer "F.SilkS") (width 0.12) (tstamp 6c09dd4e-4b6b-4d6d-bc2f-6d45b2513087)) + (fp_line (start 2.54 3.556) (end 2.54 4.318) (layer "F.SilkS") (width 0.12) (tstamp 8ffd1010-e240-4259-9498-37bf8e52f29e)) + (fp_line (start -2.54 4.318) (end -2.54 3.556) (layer "F.SilkS") (width 0.12) (tstamp c62d4278-6b5d-4e14-a6ad-d17662e7c6cc)) + (fp_line (start -10.414 1.27) (end -11.684 0.508) (layer "F.SilkS") (width 0.3048) (tstamp e02cc154-2e4b-4cc3-94d2-75105d00954f)) + (fp_line (start -11.684 2.032) (end -10.414 1.27) (layer "F.SilkS") (width 0.3048) (tstamp e9b94cbb-b6a7-43f9-a9af-38d866bd1cb6)) + (pad "1" thru_hole circle (at -8.89 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp 754700b8-82bc-4d0e-926c-196988658878)) + (pad "2" thru_hole circle (at -8.89 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp 57c102eb-b177-4220-ac3e-15a5da0e4ef6)) + (pad "3" thru_hole circle (at -6.35 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp 8f7a1c62-e866-4146-b861-025badda20d3)) + (pad "4" thru_hole circle (at -6.35 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp 2b71dc2a-4c96-42a0-bd46-95937452e3f3)) + (pad "5" thru_hole circle (at -3.81 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp 9bc1f9b0-8c47-431f-99ec-8a9b89e7b1d6)) + (pad "6" thru_hole circle (at -3.81 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp 439749f2-96d3-44a8-bdc0-e4c1c8bbc1ad)) + (pad "7" thru_hole circle (at -1.27 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp c39b5135-fbe0-4931-ad80-ed9c1070d5dd)) + (pad "8" thru_hole circle (at -1.27 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp a15870b4-20f7-4f81-83ab-93da37c2d447)) + (pad "9" thru_hole circle (at 1.27 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp 003ad17d-831b-4d0b-96cd-c4dc99e2314f)) + (pad "10" thru_hole circle (at 1.27 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp 79d5e4ae-1bbc-4f06-959e-391f5b194e0e)) + (pad "11" thru_hole circle (at 3.81 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp a4523af0-9cc4-4355-96d1-c401269d0754)) + (pad "12" thru_hole circle (at 3.81 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp 8ee69a29-e666-41b5-8ae6-a4a1a8687d7c)) + (pad "13" thru_hole circle (at 6.35 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp 6d37ba34-3704-4806-86e1-7fae824ef21b)) + (pad "14" thru_hole circle (at 6.35 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp 20f6e38c-67a5-4644-b9a7-6ec89b3b64fd)) + (pad "15" thru_hole circle (at 8.89 1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp 92c15745-902a-4afa-9c24-dd3fb8f004e2)) + (pad "16" thru_hole circle (at 8.89 -1.27) (size 1.524 1.524) (drill 0.9144) (layers *.Cu *.Mask) (tstamp 59147bef-e7d3-42c9-9796-6326ea61071b)) +) diff --git a/cad/fan_monitor/fan_monitor.pretty/HF152FD_Form_A.kicad_mod b/cad/fan_monitor/fan_monitor.pretty/HF152FD_Form_A.kicad_mod new file mode 100644 index 0000000..ab4326a --- /dev/null +++ b/cad/fan_monitor/fan_monitor.pretty/HF152FD_Form_A.kicad_mod @@ -0,0 +1,25 @@ +(footprint "HF152FD_Form_A" (version 20211014) (generator pcbnew) + (layer "F.Cu") + (tedit 62261D25) + (attr through_hole) + (fp_text reference "REF**" (at 6 -5.5 unlocked) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 801b2c57-3824-49e5-89e3-7099dacfe6d1) + ) + (fp_text value "HF152FD_Form_A" (at 6.4 -3.7 unlocked) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 208846ef-9d16-4aea-8884-4ad489287be5) + ) + (fp_line (start 17 13.9) (end 17 -2) (layer "F.SilkS") (width 0.12) (tstamp 049a0d59-31c4-4e8e-8965-d3040279d0ae)) + (fp_line (start 12.2 6.15) (end 12.2 10.85) (layer "F.SilkS") (width 0.12) (tstamp 20b31638-a6e0-490f-9160-2d6a76791db0)) + (fp_line (start -0.8 6) (end 8.1 6) (layer "F.SilkS") (width 0.12) (tstamp a577a535-624f-49ce-91f3-34c1213746d8)) + (fp_line (start 17 -2) (end -4.2 -2) (layer "F.SilkS") (width 0.12) (tstamp c1d01f2b-f45c-4cb9-b5bf-219aa60b0ea2)) + (fp_line (start -4.2 14) (end 17 14) (layer "F.SilkS") (width 0.12) (tstamp c8348631-404d-4e66-a92f-6abdda5d5496)) + (fp_line (start -4.2 -2) (end -4.2 14) (layer "F.SilkS") (width 0.12) (tstamp d169ccd3-ab8c-409f-8140-98ac4d80171c)) + (fp_line (start 13 3.75) (end 8.1 6) (layer "F.SilkS") (width 0.12) (tstamp fb9c178b-f3d0-4b11-be23-163bfb0daeef)) + (fp_rect (start -5.2 -3) (end 18 15) (layer "F.CrtYd") (width 0.05) (fill none) (tstamp 30abb9a4-6a70-4e36-840d-453db3cb840e)) + (pad "1" thru_hole circle (at 0 0) (size 2.3 2.3) (drill 1.3) (layers *.Cu *.Mask) (tstamp da302846-016d-4be2-af55-6d603d02eb89)) + (pad "2" thru_hole circle (at 0 12) (size 2.3 2.3) (drill 1.3) (layers *.Cu *.Mask) (tstamp c9b530ce-e490-420e-928e-df4bf9bc5adc)) + (pad "3" thru_hole circle (at -2 6) (size 2.3 2.3) (drill 1.3) (layers *.Cu *.Mask) (tstamp c164a52d-67af-4765-976d-f02114341851)) + (pad "4" thru_hole circle (at 12.2 12) (size 2.3 2.3) (drill 1.3) (layers *.Cu *.Mask) (tstamp c518c217-c92c-446b-ac12-3b43c18b8312)) +) diff --git a/cad/fan_monitor/fan_monitor.pretty/RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm.kicad_mod b/cad/fan_monitor/fan_monitor.pretty/RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm.kicad_mod new file mode 100644 index 0000000..d876dc1 --- /dev/null +++ b/cad/fan_monitor/fan_monitor.pretty/RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm.kicad_mod @@ -0,0 +1,58 @@ +(footprint "RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm" (version 20211014) (generator pcbnew) + (layer "F.Cu") + (tedit 6220DEE8) + (descr "Alps rotary encoder, EC12E... with switch, vertical shaft, http://www.alps.com/prod/info/E/HTML/Encoder/Incremental/EC12E/EC12E1240405.html & http://cdn-reichelt.de/documents/datenblatt/F100/402097STEC12E08.PDF") + (tags "rotary encoder") + (attr through_hole) + (fp_text reference "REF**" (at -4.7 -7.2) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 3230eb40-7bc6-4e5e-9d9e-ed2d003f678f) + ) + (fp_text value "RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm" (at 0 7.9) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp d2467a1a-9475-484b-816d-d3278d65b6ae) + ) + (fp_text user "${REFERENCE}" (at 4 4.1) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp fa348cbb-8f00-4f00-86b6-34a42c5da4b2) + ) + (fp_line (start 6.7 3.7) (end 6.7 6.3) (layer "F.SilkS") (width 0.12) (tstamp 13bda85d-bdb4-4028-8655-ca62082bbd0e)) + (fp_line (start -1.9 -6.3) (end -6.7 -6.3) (layer "F.SilkS") (width 0.12) (tstamp 28877f51-a477-4be7-81a8-44ee712ec7d3)) + (fp_line (start -7.2 -4.1) (end -7.5 -3.8) (layer "F.SilkS") (width 0.12) (tstamp 2d38f326-70be-48c0-9620-f374e6b44553)) + (fp_line (start 6.7 6.3) (end 1.8 6.3) (layer "F.SilkS") (width 0.12) (tstamp 38834dde-49a4-4749-b387-93717fe74f4e)) + (fp_line (start 6.7 -6.3) (end 6.7 -3.7) (layer "F.SilkS") (width 0.12) (tstamp 39160ce7-41b6-4f4c-925c-316217a932c4)) + (fp_line (start 0 -0.5) (end 0 0.5) (layer "F.SilkS") (width 0.12) (tstamp 6ccf62e1-00c5-4e79-a745-289343765f26)) + (fp_line (start -6.7 -6.3) (end -6.7 -3.8) (layer "F.SilkS") (width 0.12) (tstamp 7a92dacf-b8e9-4fc9-b96c-8a353418d4e1)) + (fp_line (start -7.8 -4.1) (end -7.2 -4.1) (layer "F.SilkS") (width 0.12) (tstamp 9ddf10e3-9a31-4929-b680-2824fd2c0b53)) + (fp_line (start 1.8 -6.3) (end 6.7 -6.3) (layer "F.SilkS") (width 0.12) (tstamp ccbb416c-3309-48c4-93c5-907d5564b1e9)) + (fp_line (start 6.7 -1.3) (end 6.7 1.3) (layer "F.SilkS") (width 0.12) (tstamp db916804-132c-4833-8e4e-e331d03795fe)) + (fp_line (start -7.5 -3.8) (end -7.8 -4.1) (layer "F.SilkS") (width 0.12) (tstamp e4b61a90-9fdc-4218-9938-e16c6f7c1ca6)) + (fp_line (start -1.8 6.3) (end -6.7 6.3) (layer "F.SilkS") (width 0.12) (tstamp eceb0525-a06c-4fa4-a0f2-8145028606d4)) + (fp_line (start -6.7 6.3) (end -6.7 3.5) (layer "F.SilkS") (width 0.12) (tstamp f4ce0425-7c60-4743-a869-ee9f6d7040b0)) + (fp_line (start -0.5 0) (end 0.5 0) (layer "F.SilkS") (width 0.12) (tstamp f733798e-9aaa-4c97-9f3c-157847976754)) + (fp_circle (center 0 0) (end 3 0) (layer "F.SilkS") (width 0.12) (fill none) (tstamp df367f70-b410-4873-ad4b-63a9c86a05ca)) + (fp_line (start -9 -7.35) (end -9 7.35) (layer "F.CrtYd") (width 0.05) (tstamp 4f32e0aa-f6fb-4cf3-831e-4b12621e63dc)) + (fp_line (start 8.5 7.35) (end 8.5 -7.35) (layer "F.CrtYd") (width 0.05) (tstamp 732685a8-328e-432e-8c85-ee4b2fffe0b0)) + (fp_line (start -9 -7.35) (end 8.5 -7.35) (layer "F.CrtYd") (width 0.05) (tstamp 82d0b3be-eea8-4bc5-8533-79dfb04cc7cb)) + (fp_line (start 8.5 7.35) (end -9 7.35) (layer "F.CrtYd") (width 0.05) (tstamp 8e1082f7-21b2-416f-8e96-fe3bbc69296c)) + (fp_line (start 6.6 -6.2) (end 6.6 6.2) (layer "F.Fab") (width 0.12) (tstamp 271d4529-d8e6-4856-bebe-d720a70a7c07)) + (fp_line (start 6.6 6.2) (end -6.6 6.2) (layer "F.Fab") (width 0.12) (tstamp 36010ca5-cfa5-465a-8dc7-6635522cbf65)) + (fp_line (start -5.6 -6.2) (end 6.6 -6.2) (layer "F.Fab") (width 0.12) (tstamp 5e1aadb2-931a-493b-9ac2-eb23274a2317)) + (fp_line (start -3 0) (end 3 0) (layer "F.Fab") (width 0.12) (tstamp 6ab1e2c5-9404-47fc-9b40-3a7a764a6b49)) + (fp_line (start -6.6 -5.1) (end -5.6 -6.2) (layer "F.Fab") (width 0.12) (tstamp bc10529c-c01c-4e90-a8ac-d5dae8a36dc8)) + (fp_line (start 0 -3) (end 0 3) (layer "F.Fab") (width 0.12) (tstamp c9b8d358-c79a-4379-833f-0ced5eb8dee0)) + (fp_line (start -6.6 6.2) (end -6.6 -5.1) (layer "F.Fab") (width 0.12) (tstamp fd4b24da-969c-4c00-b821-9c55ad3429fa)) + (fp_circle (center 0 0) (end 3 0) (layer "F.Fab") (width 0.12) (fill none) (tstamp 8e42c692-a244-40c3-90a4-95d7f4220979)) + (pad "A" thru_hole rect (at -7.5 -2.5) (size 2 2) (drill 1) (layers *.Cu *.Mask) (tstamp 959d1fc3-a140-4705-aad1-4aeaa394a1e6)) + (pad "B" thru_hole circle (at -7.5 2.5) (size 2 2) (drill 1) (layers *.Cu *.Mask) (tstamp 84789112-335a-4624-b647-9a9c525f08b3)) + (pad "C" thru_hole circle (at -7.5 0) (size 2 2) (drill 1) (layers *.Cu *.Mask) (tstamp 016d7760-6329-438b-8502-f5fbd25e0c16)) + (pad "MP" thru_hole rect (at 0 5.6) (size 3 2.5) (drill oval 2.5 2) (layers *.Cu *.Mask) (tstamp 7caeec3f-9b1c-4bb8-930b-1529be94c357)) + (pad "MP" thru_hole rect (at 0 -5.6) (size 3 2.5) (drill oval 2.5 2) (layers *.Cu *.Mask) (tstamp e030cdbc-437e-432d-9c29-74b330e45d14)) + (pad "S1" thru_hole circle (at 7 -2.5) (size 2 2) (drill 1) (layers *.Cu *.Mask) (tstamp f38003a7-92db-4262-a7f0-21b2df95ac2a)) + (pad "S2" thru_hole circle (at 7 2.5) (size 2 2) (drill 1) (layers *.Cu *.Mask) (tstamp 47686dc9-b9b5-4ae5-868a-c868ae958872)) + (model "${KICAD6_3DMODEL_DIR}/Rotary_Encoder.3dshapes/RotaryEncoder_Alps_EC12E-Switch_Vertical_H20mm.wrl" + (offset (xyz -7.5 2.5 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/cad/fan_monitor/fan_monitor.pretty/blue_pill.kicad_mod b/cad/fan_monitor/fan_monitor.pretty/blue_pill.kicad_mod new file mode 100644 index 0000000..dbeefaf --- /dev/null +++ b/cad/fan_monitor/fan_monitor.pretty/blue_pill.kicad_mod @@ -0,0 +1,65 @@ +(footprint "blue_pill" (version 20211014) (generator pcbnew) + (layer "F.Cu") + (tedit 62261D40) + (attr through_hole) + (fp_text reference "REF**" (at 9.525 12.7) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp f8c2bdc8-0f14-44b8-96a1-6b3ede9c5b64) + ) + (fp_text value "blue_pill" (at 8.255 14.105) (layer "F.Fab") + (effects (font (size 1 1) (thickness 0.15))) + (tstamp 6fee9d9c-f0c8-4edf-980b-473836d5c178) + ) + (fp_line (start -1.3 -2.5) (end -1.3 50.3) (layer "F.SilkS") (width 0.12) (tstamp 03b7ea59-04ff-4bfc-a26f-17e4b04b9d62)) + (fp_line (start 9.75 -2.75) (end 5.5 -2.75) (layer "F.SilkS") (width 0.12) (tstamp 1df5d875-8a9c-43e5-b202-fc86872522cf)) + (fp_line (start 16.5 -2.5) (end -1.3 -2.5) (layer "F.SilkS") (width 0.12) (tstamp 2a047ba3-1265-48c2-9aba-747f2aba922c)) + (fp_line (start -1.3 50.3) (end 16.6 50.3) (layer "F.SilkS") (width 0.12) (tstamp 3597f731-eae6-47ca-8690-cde5f7bdb161)) + (fp_line (start 9.75 0.75) (end 9.75 -2.75) (layer "F.SilkS") (width 0.12) (tstamp 6577e2d6-e771-4f1a-b78b-c897f7ae89cb)) + (fp_line (start 5.5 -2.75) (end 5.5 0.75) (layer "F.SilkS") (width 0.12) (tstamp bf3dac99-ac50-4ac6-bfbd-9ed628e3720e)) + (fp_line (start 16.6 50.3) (end 16.6 -2.5) (layer "F.SilkS") (width 0.12) (tstamp c719e44a-a7cf-4402-b739-a46a404f89a2)) + (fp_line (start 5.5 0.75) (end 9.75 0.75) (layer "F.SilkS") (width 0.12) (tstamp ced23a17-cc8a-4c5d-95f6-018b51394a9f)) + (fp_line (start 18.6 54) (end -3.3 54) (layer "F.CrtYd") (width 0.05) (tstamp 7889cf67-d749-4721-9a05-b8f106a0c34d)) + (fp_line (start -3.3 -3) (end -3.3 54) (layer "F.CrtYd") (width 0.1) (tstamp b1bbb12a-19e6-4036-b1b0-c1d0661cdfd6)) + (fp_line (start -3.3 -3) (end 18.6 -3) (layer "F.CrtYd") (width 0.05) (tstamp ebb85895-3703-4d7d-81db-0607e5c7c87e)) + (fp_line (start 18.6 -3) (end 18.6 54) (layer "F.CrtYd") (width 0.05) (tstamp f85d8a88-cc20-4a57-91db-da57a46bd0e8)) + (pad "3V3" thru_hole circle (at 15.24 5.08) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 9429d18d-18ba-4899-a864-514af21c1c9e)) + (pad "3V3" thru_hole circle (at 0 48.26) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp ab93c249-614f-4756-8205-775844995b38)) + (pad "5V" thru_hole circle (at 0 43.18) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 9d2d5d11-17ad-498b-b650-ef6577a9e2e4)) + (pad "G" thru_hole circle (at 15.24 2.54) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 5769ca6c-3a60-4d6a-b8b1-c7432d89c83e)) + (pad "G" thru_hole circle (at 0 45.72) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 99122ab4-05b4-425f-afa6-c53cd70cfd8a)) + (pad "G" thru_hole circle (at 15.24 0) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp a53e144c-ae51-4f49-839a-b31e423f0b9d)) + (pad "NRST" thru_hole circle (at 15.24 7.62) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 89adf5f0-766a-45e3-af45-a3faf584a058)) + (pad "PA0" thru_hole circle (at 15.24 38.1) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp e7e7fbd7-4b54-4338-b1d2-29f53f7b660c)) + (pad "PA1" thru_hole circle (at 15.24 35.56) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp c14f5110-1d19-4caa-9122-5ac098ce414a)) + (pad "PA2" thru_hole circle (at 15.24 33.02) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 3991cdf7-8300-4efb-bb38-01580a5689c5)) + (pad "PA3" thru_hole circle (at 15.24 30.48) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 78e39cfa-07bc-4f7a-b896-73828b677fe1)) + (pad "PA4" thru_hole circle (at 15.24 27.94) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 56bca0f5-d3d4-461e-b2b6-fc223cd81593)) + (pad "PA5" thru_hole circle (at 15.24 25.4) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp f5742966-ec76-4f1f-88df-f64b9d56d458)) + (pad "PA6" thru_hole circle (at 15.24 22.86) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp d5e75f75-0d2d-44be-ae3e-080c6022f848)) + (pad "PA7" thru_hole circle (at 15.24 20.32) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp feef1a5d-b0e4-47c5-bf36-03b69c53c26e)) + (pad "PA8" thru_hole circle (at 0 10.16) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp d1d00f7c-ba70-407d-8a05-6b69162b6688)) + (pad "PA9" thru_hole circle (at 0 12.7) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 7efb9b93-c827-4b3b-a5d9-b36f9ef25816)) + (pad "PA10" thru_hole circle (at 0 15.24) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 71175409-5161-4e7f-870a-7220bae2c840)) + (pad "PA11" thru_hole circle (at 0 17.78) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 83d3b4b0-830f-4b2c-a2ad-25662b5585f5)) + (pad "PA12" thru_hole circle (at 0 20.32) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 2c9a54f8-1020-4c9b-88be-de55d79c9941)) + (pad "PA15" thru_hole circle (at 0 22.86) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp e6ecce2c-676a-4740-82a3-1cf281e0b525)) + (pad "PB0" thru_hole circle (at 15.24 17.78) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 6531a13d-ba14-42d0-a09c-ec44f2278da1)) + (pad "PB1" thru_hole circle (at 15.24 15.24) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 5f8423d6-a368-46fb-a863-e202201145ce)) + (pad "PB3" thru_hole circle (at 0 25.4) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 41fc3f0d-22fa-48a7-9930-c2029b9b969a)) + (pad "PB4" thru_hole circle (at 0 27.94) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp ba716453-7f84-4787-b000-a2ee3220be04)) + (pad "PB5" thru_hole circle (at 0 30.48) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp ddb6da8f-716c-4060-b5a4-c4f35c7c375f)) + (pad "PB6" thru_hole circle (at 0 33.02) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 0de60cee-8896-437b-a77d-cd13d6795028)) + (pad "PB7" thru_hole circle (at 0 35.56) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 4033c1c8-aeee-45cd-a4cf-4f861de46bdb)) + (pad "PB8" thru_hole circle (at 0 38.1) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 3f2a3830-7912-4fc3-8059-eef54d216ee3)) + (pad "PB9" thru_hole circle (at 0 40.64) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp f555b93a-c2fc-4e0d-b244-9eb4c2e6b819)) + (pad "PB10" thru_hole circle (at 15.24 12.7) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 90b36a28-d7c6-48d8-9dcb-2871978e5364)) + (pad "PB11" thru_hole circle (at 15.24 10.16) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp a1908b8e-0825-48b3-8135-e1cc6c5b0526)) + (pad "PB12" thru_hole circle (at 0 0) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 8a540c29-89ce-44a9-acf2-abe44ea3381b)) + (pad "PB13" thru_hole circle (at 0 2.54) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 3ab34b92-d783-4739-b3ee-5ec0badcacc5)) + (pad "PB14" thru_hole circle (at 0 5.08) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 7bdc6b61-1f4e-405d-addb-1f53ec9c409c)) + (pad "PB15" thru_hole circle (at 0 7.62) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 781733b4-d333-437b-af9a-88f7d844e98c)) + (pad "PC13" thru_hole circle (at 15.24 45.72) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp f5325825-1d7c-45fb-b4e1-4316fcafd9d2)) + (pad "PC14" thru_hole circle (at 15.24 43.18) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 02fd0541-1fc4-49c6-9718-ed72e55c2174)) + (pad "PC15" thru_hole circle (at 15.24 40.64) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 9111aca0-9ec0-4dd6-a8d4-54f6887adc07)) + (pad "VBAT" thru_hole circle (at 15.24 48.26) (size 1.524 1.524) (drill 0.9) (layers *.Cu *.Mask) (tstamp 02d8ba94-59de-429f-94fd-4bb380c66404)) +) diff --git a/cad/fan_monitor/fp-lib-table b/cad/fan_monitor/fp-lib-table new file mode 100644 index 0000000..35851ef --- /dev/null +++ b/cad/fan_monitor/fp-lib-table @@ -0,0 +1,3 @@ +(fp_lib_table + (lib (name "fan_monitor")(type "KiCad")(uri "${KIPRJMOD}/fan_monitor.pretty")(options "")(descr "")) +) diff --git a/cad/fan_monitor/sym-lib-table b/cad/fan_monitor/sym-lib-table new file mode 100644 index 0000000..21a1fc3 --- /dev/null +++ b/cad/fan_monitor/sym-lib-table @@ -0,0 +1,3 @@ +(sym_lib_table + (lib (name "fan_monitor")(type "KiCad")(uri "${KIPRJMOD}/fan_monitor.kicad_sym")(options "")(descr "")) +) diff --git a/cad/main_board.old/main_board_routing.json b/cad/main_board.old/main_board_routing.json new file mode 100644 index 0000000..a2548cf --- /dev/null +++ b/cad/main_board.old/main_board_routing.json @@ -0,0 +1,231 @@ +{ + "head": { + "docType": "3", + "editorVersion": "6.3.22", + "c_para": {}, + "hasIdFlag": true, + "x": "4000", + "y": "3000", + "importFlag": 0, + "transformList": "", + "bind_sch_id": [ + "24ccf7168b3146f69201c3694ab3b0fa" + ] + }, + "canvas": "CA~1000~1000~#000000~yes~#FFFFFF~10~1000~1000~line~10~mm~1.9685~45~visible~5~4000~3000~1~yes", + "shape": [ + "COPPERAREA~1~1~+5V~M 3505 2975 L 3505 3190 L 3830 3190 L 3830 3340 L 4020 3340 L 4020 2975 Z~1~solid~gge539~spoke~none~~0~~2~1~1~1~yes~0", + "COPPERAREA~1~1~+3.3V~M 3505 3190 L 3505 3340 L 3830 3340 L3830,3190 Z~1~solid~gge542~spoke~none~~0~~3~1~1~1~yes~0", + "COPPERAREA~1~2~GND~M 3505 2980 L 3505 3345 L 4020 3345 L4020,2980 Z~1~solid~gge537~spoke~none~~0~~1~1~1~1~yes~0", + "TRACK~1~10~S$1075~4015 2995.04 4015 3320.04 4005 3330.04 3525.04 3330.04 3512.5 3317.5 3512.5 2997.5 3524.96 2985.04 4005 2985.04 4015 2995.04~gge430~0", + "TRACK~1.5748~1~BACK~3815 3090.039 3815 3055 3795 3035 3755 3035~gge743~0", + "TRACK~1.5748~1~LCD_15~3755 3030 3750 3030 3735 3045~gge742~0", + "TRACK~1.5748~1~LCD_15~3845 3030 3755 3030~gge741~0", + "TRACK~3.937~1~+3.3V~3955 3150.039 3955 3155 3830 3280 3820 3280~gge548~0", + "TRACK~1.9685~1~DB6~3965 3090.04 3965 3020 3940 2995 3880 2995 3855 3020 3855 3030~gge64~0", + "TRACK~1.9685~1~DB4~3955 3090.04 3955 3020 3935 3000 3885 3000 3865 3020 3865 3030~gge63~0", + "TRACK~1.9685~1~DB0~3935 3090.04 3935 3020 3925 3010 3895 3010 3885 3020 3885 3030~gge62~0", + "TRACK~1.9685~1~R/W~3925 3090.04 3925 3020 3920 3015 3900 3015 3895 3020 3895 3030~gge61~0", + "TRACK~1.9685~1~DB2~3945 3090.04 3945 3020 3930 3005 3890 3005 3875 3020 3875 3030~gge60~0", + "TRACK~3.937~1~SWITCH_1_2~3542.5 3147.5 3555 3160~gge472~0", + "TRACK~1.9685~1~TH1-~3585 3220.0001 3585 3209.961 3615 3179.961~gge502~0", + "TRACK~1.9685~1~TH1+~3635 3255 3635 3210 3660.04 3184.96 3705 3185~gge527~0", + "TRACK~1.9685~1~TH1+~3705 3185 3820 3185 3835 3170 3835 3150.0391~gge522~0", + "TRACK~1.9685~1~TH1-~3615 3180 3815 3180 3825 3170 3825 3150.0391~gge498~0", + "TRACK~1.9685~1~TH2-~3680 3220.0001 3680 3209.961 3700 3189.961~gge528~0", + "TRACK~1.9685~1~TH2+~3730 3255 3730 3210 3745 3195 3830 3195 3855 3170 3855 3150.04~gge524~0", + "TRACK~1.9685~1~TH2-~3700 3190 3825 3190 3845 3170 3845 3150.0391~gge523~0", + "TRACK~1.9685~1~TH_EXT-~3770 3220.04 3770 3210 3780 3200 3835 3200 3865 3170 3865 3150.04~gge15~0", + "TRACK~1.9685~1~TH_EXT+~3795 3265.04 3810 3265 3820 3255 3820 3210 3825 3205 3840 3205 3875 3170 3875 3150.04~gge14~0", + "TRACK~3.937~1~F1_1~3943.31 3280 3950 3280 3980 3250 3985 3250~gge11~0", + "TRACK~1.9685~1~TH_EXT+~3795 3265.039 3795 3300.039~gge10~0", + "TRACK~1.9685~1~+3.3V~3800 3220.039 3800 3230.039 3795 3235.039~gge9~0", + "TRACK~1.9685~1~TH_EXT-~3770 3220.039 3770 3230.039 3775 3235.039~gge8~0", + "TRACK~1.9685~1~TH2+~3705 3300.0001 3705 3265.0001~gge532~0", + "TRACK~1.9685~1~+3.3V~3710 3220.0001 3710 3230.0001 3705 3235.0001~gge531~0", + "TRACK~1.9685~1~TH2-~3680 3220.0001 3680 3230.0001 3685 3235.0001~gge530~0", + "TRACK~1.9685~1~TH2+~3705 3265.0001 3720 3264.961 3730 3254.961~gge529~0", + "TRACK~1.9685~1~TH1+~3610 3265.0001 3610 3300.0001~gge506~0", + "TRACK~1.9685~1~+3.3V~3615 3220.0001 3615 3230.0001 3610 3235.0001~gge505~0", + "TRACK~1.9685~1~TH1-~3585 3220.0001 3585 3230.0001 3590 3235.0001~gge504~0", + "TRACK~1.9685~1~TH1+~3610 3265.0001 3625 3264.961 3635 3254.961~gge503~0", + "TRACK~3.937~1~SWITCH_1_2~3555 3160 3642.5 3160 3662.5 3140~gge478~0", + "TRACK~1.5748~3~S$554~3830 3330 3830 3190 3510 3190~gge553~0", + "TRACK~0.3937~3~S$518~3684.9999 3104.9999 3682.4999 3122.4999~gge476~0", + "TRACK~0.3937~3~S$520~3662.4999 3122.4999 3659.9999 3104.9999~gge477~0", + "TRACK~1.1811~3~S$487~3575 3205.0001 3625 3205.0001 3625 3330.0001~gge501~0", + "TRACK~1.1811~3~S$485~3670 3205.0001 3670 3330.0001~gge526~0", + "TRACK~1.1811~3~S$485~3760 3205.039 3760 3330.039~gge23~0", + "TRACK~0.3937~3~S$522~3634.9999 3104.9999 3637.4999 3122.4999~gge475~0", + "TRACK~1.1811~3~S$487~3760 3205.039 3810 3205.039 3810 3330.039~gge39~0", + "TRACK~1.1811~3~S$487~3670 3205.0001 3720 3205.0001 3720 3330.0001~gge525~0", + "TRACK~1.1811~3~S$485~3575 3205.0001 3575 3330.0001~gge500~0", + "TRACK~1.1811~3~S$509~3692.4999 3112.4999 3692.4999 3097.4999 3627.4999 3097.4999 3627.4999 3112.4999 3692.4999 3112.4999~gge474~0", + "TRACK~1.5748~3~S$572~3512.5 3000 3620 3000 3622.5 2997.5 3635 2985~gge571~0", + "TRACK~1.5748~2~LCD_3~3980 3035 3940 3035 3925 3025 3910 3025 3905 3030 3905 3030~gge750~0", + "TRACK~1.9685~2~UP_21~3735 3140 3682.5 3140~gge480~0", + "TRACK~1.9685~2~UP_35~3576.77 3009.84 3576.93 3010 3770 3010 3835 3075 3835 3090.04~gge58~0", + "TRACK~1.9685~2~SW~3557.09 3066.93 3557.09 3062.91 3560 3060 3810 3060 3825 3075 3825 3090.04~gge59~0", + "TRACK~1.9685~2~DB7~3855 3040 3855 3050 3865 3060 3865 3090.04~gge56~0", + "TRACK~1.9685~2~DB5~3875 3090.04 3875 3060 3865 3050 3865 3040~gge55~0", + "TRACK~1.9685~2~DB3~3875 3040 3875 3050 3885 3060 3885 3090.04~gge54~0", + "TRACK~1.9685~2~DB1~3895 3090.04 3895 3060 3885 3050 3885 3040~gge53~0", + "TRACK~1.9685~2~E~3895 3040 3895 3050 3905 3060 3905 3090.04~gge52~0", + "TRACK~1.9685~2~RS~3915 3090.04 3915 3060 3905 3050 3905 3040~gge51~0", + "TRACK~1.9685~2~UP_21~3735 3140 3940 3140 3975 3105 3975 3090.0391~gge49~0", + "TRACK~1.9685~2~UP_34~3557.09 3009.84 3557.09 3007.91 3565 3000 3770 3000 3845 3075 3845 3090.04~gge57~0", + "TRACK~3.937~1~FAN1_2~3985 3230 3975 3220 3940 3220~gge790~0", + "TRACK~3.937~1~F1_2~3910 3220 3910 3240 3869.98 3279.98 3856.76 3279.98~gge792~0", + "TRACK~1.9685~2~RC_2~3870 3220 3870 3210 3860 3200 3765 3200 3735 3170~gge794~0", + "PAD~ELLIPSE~3527.559~3000~19.685~19.685~11~~1~5.9055~~0~gge431~0~~Y~0~0~0.4~3527.5591,3000", + "PAD~ELLIPSE~4000~3000~19.685~19.685~11~~2~5.9055~~0~gge432~0~~Y~0~0~0.4~3999.9998,3000", + "PAD~ELLIPSE~4000~3314.961~19.685~19.685~11~~1~5.9055~~0~gge433~0~~Y~0~0~0.4~3999.9998,3314.9602", + "PAD~ELLIPSE~3527.559~3314.961~19.685~19.685~11~~1~5.9055~~0~gge434~0~~Y~0~0~0.4~3527.5591,3314.9598", + "PAD~ELLIPSE~3685.039~3039.37~19.685~19.685~11~~1~5.9055~~0~gge458~0~~Y~0~0~0.4~3685.0394,3039.3701", + "TEXT~L~3740~3065~0.8~90~0~3~~3.937~10k~M 3734.87 3065 L 3734.69 3064.64 L 3734.15 3064.11 L 3737.91 3064.11 M 3734.15 3061.85 L 3734.33 3062.39 L 3734.87 3062.75 L 3735.76 3062.92 L 3736.3 3062.92 L 3737.19 3062.75 L 3737.73 3062.39 L 3737.91 3061.85 L 3737.91 3061.49 L 3737.73 3060.96 L 3737.19 3060.6 L 3736.3 3060.42 L 3735.76 3060.42 L 3734.87 3060.6 L 3734.33 3060.96 L 3734.15 3061.49 L 3734.15 3061.85 M 3734.15 3059.24 L 3737.91 3059.24 M 3735.41 3057.45 L 3737.19 3059.24 M 3736.48 3058.52 L 3737.91 3057.27~~gge738~~0~pinpart", + "TEXT~L~3850~3310.39~0.8~0~0~3~~7.0866~Fusible 5x20mm 1A~M 3850 3302.8199 L 3850 3309.5899 M 3850 3302.8199 L 3854.19 3302.8199 M 3850 3306.0499 L 3852.58 3306.0499 M 3856.31 3305.0799 L 3856.31 3308.2999 L 3856.64 3309.2699 L 3857.28 3309.5899 L 3858.25 3309.5899 L 3858.89 3309.2699 L 3859.86 3308.2999 M 3859.86 3305.0799 L 3859.86 3309.5899 M 3865.53 3306.0499 L 3865.2 3305.3999 L 3864.24 3305.0799 L 3863.27 3305.0799 L 3862.3 3305.3999 L 3861.98 3306.0499 L 3862.3 3306.6899 L 3862.95 3307.0099 L 3864.56 3307.3299 L 3865.2 3307.6599 L 3865.53 3308.2999 L 3865.53 3308.6199 L 3865.2 3309.2699 L 3864.24 3309.5899 L 3863.27 3309.5899 L 3862.3 3309.2699 L 3861.98 3308.6199 M 3867.65 3302.8199 L 3867.97 3303.1499 L 3868.3 3302.8199 L 3867.97 3302.4999 L 3867.65 3302.8199 M 3867.97 3305.0799 L 3867.97 3309.5899 M 3870.42 3302.8199 L 3870.42 3309.5899 M 3870.42 3306.0499 L 3871.07 3305.3999 L 3871.71 3305.0799 L 3872.68 3305.0799 L 3873.32 3305.3999 L 3873.97 3306.0499 L 3874.29 3307.0099 L 3874.29 3307.6599 L 3873.97 3308.6199 L 3873.32 3309.2699 L 3872.68 3309.5899 L 3871.71 3309.5899 L 3871.07 3309.2699 L 3870.42 3308.6199 M 3876.41 3302.8199 L 3876.41 3309.5899 M 3878.54 3307.0099 L 3882.41 3307.0099 L 3882.41 3306.3699 L 3882.08 3305.7199 L 3881.76 3305.3999 L 3881.12 3305.0799 L 3880.15 3305.0799 L 3879.51 3305.3999 L 3878.86 3306.0499 L 3878.54 3307.0099 L 3878.54 3307.6599 L 3878.86 3308.6199 L 3879.51 3309.2699 L 3880.15 3309.5899 L 3881.12 3309.5899 L 3881.76 3309.2699 L 3882.41 3308.6199 M 3893.36 3302.8199 L 3890.14 3302.8199 L 3889.81 3305.7199 L 3890.14 3305.3999 L 3891.1 3305.0799 L 3892.07 3305.0799 L 3893.04 3305.3999 L 3893.68 3306.0499 L 3894 3307.0099 L 3894 3307.6599 L 3893.68 3308.6199 L 3893.04 3309.2699 L 3892.07 3309.5899 L 3891.1 3309.5899 L 3890.14 3309.2699 L 3889.81 3308.9399 L 3889.49 3308.2999 M 3896.13 3305.0799 L 3899.67 3309.5899 M 3899.67 3305.0799 L 3896.13 3309.5899 M 3902.12 3304.4399 L 3902.12 3304.1099 L 3902.44 3303.4699 L 3902.76 3303.1499 L 3903.41 3302.8199 L 3904.7 3302.8199 L 3905.34 3303.1499 L 3905.66 3303.4699 L 3905.98 3304.1099 L 3905.98 3304.7599 L 3905.66 3305.3999 L 3905.02 3306.3699 L 3901.8 3309.5899 L 3906.31 3309.5899 M 3910.37 3302.8199 L 3909.4 3303.1499 L 3908.75 3304.1099 L 3908.43 3305.7199 L 3908.43 3306.6899 L 3908.75 3308.2999 L 3909.4 3309.2699 L 3910.37 3309.5899 L 3911.01 3309.5899 L 3911.98 3309.2699 L 3912.62 3308.2999 L 3912.94 3306.6899 L 3912.94 3305.7199 L 3912.62 3304.1099 L 3911.98 3303.1499 L 3911.01 3302.8199 L 3910.37 3302.8199 M 3915.07 3305.0799 L 3915.07 3309.5899 M 3915.07 3306.3699 L 3916.03 3305.3999 L 3916.68 3305.0799 L 3917.64 3305.0799 L 3918.29 3305.3999 L 3918.61 3306.3699 L 3918.61 3309.5899 M 3918.61 3306.3699 L 3919.58 3305.3999 L 3920.22 3305.0799 L 3921.19 3305.0799 L 3921.83 3305.3999 L 3922.15 3306.3699 L 3922.15 3309.5899 M 3924.28 3305.0799 L 3924.28 3309.5899 M 3924.28 3306.3699 L 3925.25 3305.3999 L 3925.89 3305.0799 L 3926.86 3305.0799 L 3927.5 3305.3999 L 3927.82 3306.3699 L 3927.82 3309.5899 M 3927.82 3306.3699 L 3928.79 3305.3999 L 3929.43 3305.0799 L 3930.4 3305.0799 L 3931.05 3305.3999 L 3931.37 3306.3699 L 3931.37 3309.5899 M 3938.45 3304.1099 L 3939.1 3303.7899 L 3940.06 3302.8199 L 3940.06 3309.5899 M 3944.77 3302.8199 L 3942.19 3309.5899 M 3944.77 3302.8199 L 3947.34 3309.5899 M 3943.16 3307.3299 L 3946.38 3307.3299~~gge24~~0~pinpart", + "TEXT~L~3800~3255.039~0.8~90~0~3~~3.937~10k~M 3794.87 3255.039 L 3794.69 3254.679 L 3794.15 3254.149 L 3797.91 3254.149 M 3794.15 3251.889 L 3794.33 3252.429 L 3794.87 3252.789 L 3795.76 3252.959 L 3796.3 3252.959 L 3797.19 3252.789 L 3797.73 3252.429 L 3797.91 3251.889 L 3797.91 3251.529 L 3797.73 3250.999 L 3797.19 3250.639 L 3796.3 3250.459 L 3795.76 3250.459 L 3794.87 3250.639 L 3794.33 3250.999 L 3794.15 3251.529 L 3794.15 3251.889 M 3794.15 3249.279 L 3797.91 3249.279 M 3795.41 3247.489 L 3797.19 3249.279 M 3796.48 3248.559 L 3797.91 3247.309~~gge30~~0~pinpart", + "TEXT~L~3780~3255.039~0.8~90~0~3~~3.937~10k~M 3774.87 3255.039 L 3774.69 3254.679 L 3774.15 3254.149 L 3777.91 3254.149 M 3774.15 3251.889 L 3774.33 3252.429 L 3774.87 3252.789 L 3775.76 3252.959 L 3776.3 3252.959 L 3777.19 3252.789 L 3777.73 3252.429 L 3777.91 3251.889 L 3777.91 3251.529 L 3777.73 3250.999 L 3777.19 3250.639 L 3776.3 3250.459 L 3775.76 3250.459 L 3774.87 3250.639 L 3774.33 3250.999 L 3774.15 3251.529 L 3774.15 3251.889 M 3774.15 3249.279 L 3777.91 3249.279 M 3775.41 3247.489 L 3777.19 3249.279 M 3776.48 3248.559 L 3777.91 3247.309~~gge31~~0~pinpart", + "TEXT~L~3780~3225.039~0.8~0~0~3~~3.937~10k~M 3780 3219.909 L 3780.36 3219.729 L 3780.89 3219.189 L 3780.89 3222.949 M 3783.15 3219.189 L 3782.61 3219.369 L 3782.25 3219.909 L 3782.08 3220.799 L 3782.08 3221.339 L 3782.25 3222.229 L 3782.61 3222.769 L 3783.15 3222.949 L 3783.51 3222.949 L 3784.04 3222.769 L 3784.4 3222.229 L 3784.58 3221.339 L 3784.58 3220.799 L 3784.4 3219.909 L 3784.04 3219.369 L 3783.51 3219.189 L 3783.15 3219.189 M 3785.76 3219.189 L 3785.76 3222.949 M 3787.55 3220.449 L 3785.76 3222.229 M 3786.48 3221.519 L 3787.73 3222.949~~gge32~~0~pinpart", + "TEXT~L~3710~3255~0.8~90~0~3~~3.937~10k~M 3704.87 3255 L 3704.69 3254.64 L 3704.15 3254.11 L 3707.91 3254.11 M 3704.15 3251.85 L 3704.33 3252.39 L 3704.87 3252.75 L 3705.76 3252.92 L 3706.3 3252.92 L 3707.19 3252.75 L 3707.73 3252.39 L 3707.91 3251.85 L 3707.91 3251.49 L 3707.73 3250.96 L 3707.19 3250.6 L 3706.3 3250.42 L 3705.76 3250.42 L 3704.87 3250.6 L 3704.33 3250.96 L 3704.15 3251.49 L 3704.15 3251.85 M 3704.15 3249.24 L 3707.91 3249.24 M 3705.41 3247.45 L 3707.19 3249.24 M 3706.48 3248.52 L 3707.91 3247.27~~gge33~~0~pinpart", + "TEXT~L~3690~3255~0.8~90~0~3~~3.937~10k~M 3684.87 3255 L 3684.69 3254.64 L 3684.15 3254.11 L 3687.91 3254.11 M 3684.15 3251.85 L 3684.33 3252.39 L 3684.87 3252.75 L 3685.76 3252.92 L 3686.3 3252.92 L 3687.19 3252.75 L 3687.73 3252.39 L 3687.91 3251.85 L 3687.91 3251.49 L 3687.73 3250.96 L 3687.19 3250.6 L 3686.3 3250.42 L 3685.76 3250.42 L 3684.87 3250.6 L 3684.33 3250.96 L 3684.15 3251.49 L 3684.15 3251.85 M 3684.15 3249.24 L 3687.91 3249.24 M 3685.41 3247.45 L 3687.19 3249.24 M 3686.48 3248.52 L 3687.91 3247.27~~gge34~~0~pinpart", + "TEXT~L~3615~3255~0.8~90~0~3~~3.937~10k~M 3609.87 3255 L 3609.69 3254.64 L 3609.15 3254.11 L 3612.91 3254.11 M 3609.15 3251.85 L 3609.33 3252.39 L 3609.87 3252.75 L 3610.76 3252.92 L 3611.3 3252.92 L 3612.19 3252.75 L 3612.73 3252.39 L 3612.91 3251.85 L 3612.91 3251.49 L 3612.73 3250.96 L 3612.19 3250.6 L 3611.3 3250.42 L 3610.76 3250.42 L 3609.87 3250.6 L 3609.33 3250.96 L 3609.15 3251.49 L 3609.15 3251.85 M 3609.15 3249.24 L 3612.91 3249.24 M 3610.41 3247.45 L 3612.19 3249.24 M 3611.48 3248.52 L 3612.91 3247.27~~gge35~~0~pinpart", + "TEXT~L~3595~3255~0.8~90~0~3~~3.937~10k~M 3589.87 3255 L 3589.69 3254.64 L 3589.15 3254.11 L 3592.91 3254.11 M 3589.15 3251.85 L 3589.33 3252.39 L 3589.87 3252.75 L 3590.76 3252.92 L 3591.3 3252.92 L 3592.19 3252.75 L 3592.73 3252.39 L 3592.91 3251.85 L 3592.91 3251.49 L 3592.73 3250.96 L 3592.19 3250.6 L 3591.3 3250.42 L 3590.76 3250.42 L 3589.87 3250.6 L 3589.33 3250.96 L 3589.15 3251.49 L 3589.15 3251.85 M 3589.15 3249.24 L 3592.91 3249.24 M 3590.41 3247.45 L 3592.19 3249.24 M 3591.48 3248.52 L 3592.91 3247.27~~gge36~~0~pinpart", + "TEXT~L~3595~3225~0.8~0~0~3~~3.937~10k~M 3595 3219.87 L 3595.36 3219.69 L 3595.89 3219.15 L 3595.89 3222.91 M 3598.15 3219.15 L 3597.61 3219.33 L 3597.25 3219.87 L 3597.08 3220.76 L 3597.08 3221.3 L 3597.25 3222.19 L 3597.61 3222.73 L 3598.15 3222.91 L 3598.51 3222.91 L 3599.04 3222.73 L 3599.4 3222.19 L 3599.58 3221.3 L 3599.58 3220.76 L 3599.4 3219.87 L 3599.04 3219.33 L 3598.51 3219.15 L 3598.15 3219.15 M 3600.76 3219.15 L 3600.76 3222.91 M 3602.55 3220.41 L 3600.76 3222.19 M 3601.48 3221.48 L 3602.73 3222.91~~gge37~~0~pinpart", + "TEXT~L~3690~3225~0.8~0~0~3~~3.937~10k~M 3690 3219.87 L 3690.36 3219.69 L 3690.89 3219.15 L 3690.89 3222.91 M 3693.15 3219.15 L 3692.61 3219.33 L 3692.25 3219.87 L 3692.08 3220.76 L 3692.08 3221.3 L 3692.25 3222.19 L 3692.61 3222.73 L 3693.15 3222.91 L 3693.51 3222.91 L 3694.04 3222.73 L 3694.4 3222.19 L 3694.58 3221.3 L 3694.58 3220.76 L 3694.4 3219.87 L 3694.04 3219.33 L 3693.51 3219.15 L 3693.15 3219.15 M 3695.76 3219.15 L 3695.76 3222.91 M 3697.55 3220.41 L 3695.76 3222.19 M 3696.48 3221.48 L 3697.73 3222.91~~gge38~~0~pinpart", + "TEXT~L~3740~3160~0.8~90~0~3~~3.937~10k~M 3734.87 3160 L 3734.69 3159.64 L 3734.15 3159.11 L 3737.91 3159.11 M 3734.15 3156.85 L 3734.33 3157.39 L 3734.87 3157.75 L 3735.76 3157.92 L 3736.3 3157.92 L 3737.19 3157.75 L 3737.73 3157.39 L 3737.91 3156.85 L 3737.91 3156.49 L 3737.73 3155.96 L 3737.19 3155.6 L 3736.3 3155.42 L 3735.76 3155.42 L 3734.87 3155.6 L 3734.33 3155.96 L 3734.15 3156.49 L 3734.15 3156.85 M 3734.15 3154.24 L 3737.91 3154.24 M 3735.41 3152.45 L 3737.19 3154.24 M 3736.48 3153.52 L 3737.91 3152.27~~gge45~~0~pinpart", + "TEXT~L~3520~3201.92~0.8~0~0~3~~5.9055~+3.3v~M 3522.42 3195.8001 L 3522.42 3200.6401 M 3520 3198.2201 L 3524.83 3198.2201 M 3527.14 3195.0001 L 3530.09 3195.0001 L 3528.48 3197.1501 L 3529.29 3197.1501 L 3529.82 3197.4101 L 3530.09 3197.6801 L 3530.36 3198.4901 L 3530.36 3199.0301 L 3530.09 3199.8301 L 3529.56 3200.3701 L 3528.75 3200.6401 L 3527.95 3200.6401 L 3527.14 3200.3701 L 3526.87 3200.1001 L 3526.6 3199.5601 M 3532.4 3199.2901 L 3532.13 3199.5601 L 3532.4 3199.8301 L 3532.67 3199.5601 L 3532.4 3199.2901 M 3534.98 3195.0001 L 3537.93 3195.0001 L 3536.32 3197.1501 L 3537.13 3197.1501 L 3537.66 3197.4101 L 3537.93 3197.6801 L 3538.2 3198.4901 L 3538.2 3199.0301 L 3537.93 3199.8301 L 3537.39 3200.3701 L 3536.59 3200.6401 L 3535.78 3200.6401 L 3534.98 3200.3701 L 3534.71 3200.1001 L 3534.44 3199.5601 M 3539.97 3196.8801 L 3541.58 3200.6401 M 3543.19 3196.8801 L 3541.58 3200.6401~~gge559~~0~pinpart", + "TEXT~L~3520~3186.92~0.8~0~0~3~~5.9055~+5v~M 3522.42 3180.7999 L 3522.42 3185.6399 M 3520 3183.2199 L 3524.83 3183.2199 M 3529.82 3179.9999 L 3527.14 3179.9999 L 3526.87 3182.4099 L 3527.14 3182.1499 L 3527.95 3181.8799 L 3528.75 3181.8799 L 3529.56 3182.1499 L 3530.09 3182.6799 L 3530.36 3183.4899 L 3530.36 3184.0299 L 3530.09 3184.8299 L 3529.56 3185.3699 L 3528.75 3185.6399 L 3527.95 3185.6399 L 3527.14 3185.3699 L 3526.87 3185.0999 L 3526.6 3184.5599 M 3532.13 3181.8799 L 3533.74 3185.6399 M 3535.35 3181.8799 L 3533.74 3185.6399~~gge563~~0~pinpart", + "TEXT~L~3545~2994.69~0.8~0~0~3~~5.9055~Fan_Monitor v1.1~M 3545 2988.73L3545 2994.37 M 3545 2988.73L3548.49 2988.73 M 3545 2991.42L3547.15 2991.42 M 3553.48 2990.61L3553.48 2994.37 M 3553.48 2991.42L3552.95 2990.88 L3552.41 2990.61 L3551.6 2990.61 L3551.07 2990.88 L3550.53 2991.42 L3550.26 2992.22 L3550.26 2992.76 L3550.53 2993.56 L3551.07 2994.1 L3551.6 2994.37 L3552.41 2994.37 L3552.95 2994.1 L3553.48 2993.56 M 3555.25 2990.61L3555.25 2994.37 M 3555.25 2991.68L3556.06 2990.88 L3556.6 2990.61 L3557.4 2990.61 L3557.94 2990.88 L3558.21 2991.68 L3558.21 2994.37 M 3559.98 2996.25L3564.81 2996.25 M 3566.58 2988.73L3566.58 2994.37 M 3566.58 2988.73L3568.73 2994.37 M 3570.88 2988.73L3568.73 2994.37 M 3570.88 2988.73L3570.88 2994.37 M 3573.99 2990.61L3573.45 2990.88 L3572.92 2991.42 L3572.65 2992.22 L3572.65 2992.76 L3572.92 2993.56 L3573.45 2994.1 L3573.99 2994.37 L3574.8 2994.37 L3575.33 2994.1 L3575.87 2993.56 L3576.14 2992.76 L3576.14 2992.22 L3575.87 2991.42 L3575.33 2990.88 L3574.8 2990.61 L3573.99 2990.61 M 3577.91 2990.61L3577.91 2994.37 M 3577.91 2991.68L3578.72 2990.88 L3579.25 2990.61 L3580.06 2990.61 L3580.59 2990.88 L3580.86 2991.68 L3580.86 2994.37 M 3582.63 2988.73L3582.9 2989 L3583.17 2988.73 L3582.9 2988.46 L3582.63 2988.73 M 3582.9 2990.61L3582.9 2994.37 M 3585.75 2988.73L3585.75 2993.29 L3586.02 2994.1 L3586.55 2994.37 L3587.09 2994.37 M 3584.94 2990.61L3586.82 2990.61 M 3590.2 2990.61L3589.67 2990.88 L3589.13 2991.42 L3588.86 2992.22 L3588.86 2992.76 L3589.13 2993.56 L3589.67 2994.1 L3590.2 2994.37 L3591.01 2994.37 L3591.55 2994.1 L3592.08 2993.56 L3592.35 2992.76 L3592.35 2992.22 L3592.08 2991.42 L3591.55 2990.88 L3591.01 2990.61 L3590.2 2990.61 M 3594.12 2990.61L3594.12 2994.37 M 3594.12 2992.22L3594.39 2991.42 L3594.93 2990.88 L3595.47 2990.61 L3596.27 2990.61 M 3602.18 2990.61L3603.79 2994.37 M 3605.4 2990.61L3603.79 2994.37 M 3607.17 2989.8L3607.71 2989.54 L3608.51 2988.73 L3608.51 2994.37 M 3610.55 2993.03L3610.28 2993.29 L3610.55 2993.56 L3610.82 2993.29 L3610.55 2993.03 M 3612.59 2989.8L3613.13 2989.54 L3613.93 2988.73 L3613.93 2994.37 ~~gge567~~0~pinpart", + "TEXT~L~3515~3165~0.8~0~0~3~~8~+~M 3518.27 3158.03 L 3518.27 3164.57 M 3515 3161.3 L 3521.55 3161.3~~gge575~~0~pinpart", + "TEXT~L~3522.5~3120~0.8~90~0~3~~8~-~M 3518.8 3120 L 3518.8 3113.45~~gge577~~0~pinpart", + "TEXT~L~3695.81~3088.27~0.8~180~0~3~~8~ON~M 3693.6301 3092.6299 L 3694.3601 3092.2699 L 3695.0801 3091.5399 L 3695.4501 3090.8199 L 3695.8101 3089.7199 L 3695.8101 3087.9099 L 3695.4501 3086.8199 L 3695.0801 3086.0899 L 3694.3601 3085.3599 L 3693.6301 3084.9999 L 3692.1701 3084.9999 L 3691.4501 3085.3599 L 3690.7201 3086.0899 L 3690.3601 3086.8199 L 3689.9901 3087.9099 L 3689.9901 3089.7199 L 3690.3601 3090.8199 L 3690.7201 3091.5399 L 3691.4501 3092.2699 L 3692.1701 3092.6299 L 3693.6301 3092.6299 M 3687.5901 3092.6299 L 3687.5901 3084.9999 M 3687.5901 3092.6299 L 3682.5001 3084.9999 M 3682.5001 3092.6299 L 3682.5001 3084.9999~~gge581~~0~pinpart", + "TEXT~L~3670~3085~0.8~180~0~3~~8~OFF~M 3667.82 3093.06 L 3668.55 3092.7 L 3669.27 3091.97 L 3669.64 3091.25 L 3670 3090.15 L 3670 3088.34 L 3669.64 3087.25 L 3669.27 3086.52 L 3668.55 3085.79 L 3667.82 3085.43 L 3666.36 3085.43 L 3665.64 3085.79 L 3664.91 3086.52 L 3664.55 3087.25 L 3664.18 3088.34 L 3664.18 3090.15 L 3664.55 3091.25 L 3664.91 3091.97 L 3665.64 3092.7 L 3666.36 3093.06 L 3667.82 3093.06 M 3661.78 3093.06 L 3661.78 3085.43 M 3661.78 3093.06 L 3657.05 3093.06 M 3661.78 3089.43 L 3658.87 3089.43 M 3654.65 3093.06 L 3654.65 3085.43 M 3654.65 3093.06 L 3649.93 3093.06 M 3654.65 3089.43 L 3651.75 3089.43~~gge583~~0~pinpart", + "TEXT~L~3640~3085~0.8~180~0~3~~8~AUTO~M 3637.09 3093.06 L 3640 3085.43 M 3637.09 3093.06 L 3634.18 3085.43 M 3638.91 3087.97 L 3635.27 3087.97 M 3631.78 3093.06 L 3631.78 3087.61 L 3631.42 3086.52 L 3630.69 3085.79 L 3629.6 3085.43 L 3628.87 3085.43 L 3627.78 3085.79 L 3627.05 3086.52 L 3626.69 3087.61 L 3626.69 3093.06 M 3621.75 3093.06 L 3621.75 3085.43 M 3624.29 3093.06 L 3619.2 3093.06 M 3614.62 3093.06 L 3615.35 3092.7 L 3616.07 3091.97 L 3616.44 3091.25 L 3616.8 3090.15 L 3616.8 3088.34 L 3616.44 3087.25 L 3616.07 3086.52 L 3615.35 3085.79 L 3614.62 3085.43 L 3613.16 3085.43 L 3612.44 3085.79 L 3611.71 3086.52 L 3611.35 3087.25 L 3610.98 3088.34 L 3610.98 3090.15 L 3611.35 3091.25 L 3611.71 3091.97 L 3612.44 3092.7 L 3613.16 3093.06 L 3614.62 3093.06~~gge585~~0~pinpart", + "LIB~3940~3220~package`OMRON G3MC-201PL DC5`~~~gge756~1~cd3abf10edb044229bff6476e7bd84bf~1580655442~0~b5b0bfa718994d30#@$TEXT~N~3900~3210.36~0.6~0~0~3~~4.5~Omron G3MC-201PL DC5~M 3901.23 3205.82L3900.82 3206.02 L3900.41 3206.43 L3900.2 3206.84 L3900 3207.46 L3900 3208.48 L3900.2 3209.09 L3900.41 3209.5 L3900.82 3209.91 L3901.23 3210.11 L3902.05 3210.11 L3902.45 3209.91 L3902.86 3209.5 L3903.07 3209.09 L3903.27 3208.48 L3903.27 3207.46 L3903.07 3206.84 L3902.86 3206.43 L3902.45 3206.02 L3902.05 3205.82 L3901.23 3205.82 M 3904.62 3207.25L3904.62 3210.11 M 3904.62 3208.07L3905.24 3207.46 L3905.65 3207.25 L3906.26 3207.25 L3906.67 3207.46 L3906.87 3208.07 L3906.87 3210.11 M 3906.87 3208.07L3907.49 3207.46 L3907.9 3207.25 L3908.51 3207.25 L3908.92 3207.46 L3909.12 3208.07 L3909.12 3210.11 M 3910.47 3207.25L3910.47 3210.11 M 3910.47 3208.48L3910.68 3207.86 L3911.09 3207.46 L3911.5 3207.25 L3912.11 3207.25 M 3914.48 3207.25L3914.07 3207.46 L3913.66 3207.86 L3913.46 3208.48 L3913.46 3208.89 L3913.66 3209.5 L3914.07 3209.91 L3914.48 3210.11 L3915.1 3210.11 L3915.5 3209.91 L3915.91 3209.5 L3916.12 3208.89 L3916.12 3208.48 L3915.91 3207.86 L3915.5 3207.46 L3915.1 3207.25 L3914.48 3207.25 M 3917.47 3207.25L3917.47 3210.11 M 3917.47 3208.07L3918.08 3207.46 L3918.49 3207.25 L3919.1 3207.25 L3919.51 3207.46 L3919.72 3208.07 L3919.72 3210.11 M 3927.29 3206.84L3927.08 3206.43 L3926.67 3206.02 L3926.26 3205.82 L3925.45 3205.82 L3925.04 3206.02 L3924.63 3206.43 L3924.42 3206.84 L3924.22 3207.46 L3924.22 3208.48 L3924.42 3209.09 L3924.63 3209.5 L3925.04 3209.91 L3925.45 3210.11 L3926.26 3210.11 L3926.67 3209.91 L3927.08 3209.5 L3927.29 3209.09 L3927.29 3208.48 M 3926.26 3208.48L3927.29 3208.48 M 3929.05 3205.82L3931.3 3205.82 L3930.07 3207.46 L3930.68 3207.46 L3931.09 3207.66 L3931.3 3207.86 L3931.5 3208.48 L3931.5 3208.89 L3931.3 3209.5 L3930.89 3209.91 L3930.27 3210.11 L3929.66 3210.11 L3929.05 3209.91 L3928.84 3209.71 L3928.64 3209.3 M 3932.85 3205.82L3932.85 3210.11 M 3932.85 3205.82L3934.49 3210.11 M 3936.12 3205.82L3934.49 3210.11 M 3936.12 3205.82L3936.12 3210.11 M 3940.54 3206.84L3940.34 3206.43 L3939.93 3206.02 L3939.52 3205.82 L3938.7 3205.82 L3938.29 3206.02 L3937.88 3206.43 L3937.68 3206.84 L3937.47 3207.46 L3937.47 3208.48 L3937.68 3209.09 L3937.88 3209.5 L3938.29 3209.91 L3938.7 3210.11 L3939.52 3210.11 L3939.93 3209.91 L3940.34 3209.5 L3940.54 3209.09 M 3941.89 3208.27L3945.57 3208.27 M 3947.13 3206.84L3947.13 3206.64 L3947.33 3206.23 L3947.54 3206.02 L3947.95 3205.82 L3948.76 3205.82 L3949.17 3206.02 L3949.38 3206.23 L3949.58 3206.64 L3949.58 3207.05 L3949.38 3207.46 L3948.97 3208.07 L3946.92 3210.11 L3949.79 3210.11 M 3952.36 3205.82L3951.75 3206.02 L3951.34 3206.64 L3951.14 3207.66 L3951.14 3208.27 L3951.34 3209.3 L3951.75 3209.91 L3952.36 3210.11 L3952.77 3210.11 L3953.39 3209.91 L3953.8 3209.3 L3954 3208.27 L3954 3207.66 L3953.8 3206.64 L3953.39 3206.02 L3952.77 3205.82 L3952.36 3205.82 M 3955.35 3206.64L3955.76 3206.43 L3956.37 3205.82 L3956.37 3210.11 M 3957.72 3205.82L3957.72 3210.11 M 3957.72 3205.82L3959.56 3205.82 L3960.18 3206.02 L3960.38 3206.23 L3960.59 3206.64 L3960.59 3207.25 L3960.38 3207.66 L3960.18 3207.86 L3959.56 3208.07 L3957.72 3208.07 M 3961.94 3205.82L3961.94 3210.11 M 3961.94 3210.11L3964.39 3210.11 M 3968.89 3205.82L3968.89 3210.11 M 3968.89 3205.82L3970.32 3205.82 L3970.94 3206.02 L3971.35 3206.43 L3971.55 3206.84 L3971.75 3207.46 L3971.75 3208.48 L3971.55 3209.09 L3971.35 3209.5 L3970.94 3209.91 L3970.32 3210.11 L3968.89 3210.11 M 3976.17 3206.84L3975.97 3206.43 L3975.56 3206.02 L3975.15 3205.82 L3974.33 3205.82 L3973.92 3206.02 L3973.51 3206.43 L3973.31 3206.84 L3973.1 3207.46 L3973.1 3208.48 L3973.31 3209.09 L3973.51 3209.5 L3973.92 3209.91 L3974.33 3210.11 L3975.15 3210.11 L3975.56 3209.91 L3975.97 3209.5 L3976.17 3209.09 M 3979.98 3205.82L3977.93 3205.82 L3977.73 3207.66 L3977.93 3207.46 L3978.55 3207.25 L3979.16 3207.25 L3979.77 3207.46 L3980.18 3207.86 L3980.39 3208.48 L3980.39 3208.89 L3980.18 3209.5 L3979.77 3209.91 L3979.16 3210.11 L3978.55 3210.11 L3977.93 3209.91 L3977.73 3209.71 L3977.52 3209.3 ~none~gge307~~0~#@$TEXT~P~3892.5~3228.65~0.6~0~0~3~~4.5~RE~M 3892.5 3224.11L3892.5 3228.4 M 3892.5 3224.11L3894.34 3224.11 L3894.95 3224.31 L3895.16 3224.52 L3895.36 3224.93 L3895.36 3225.34 L3895.16 3225.75 L3894.95 3225.95 L3894.34 3226.15 L3892.5 3226.15 M 3893.93 3226.15L3895.36 3228.4 M 3896.71 3224.11L3896.71 3228.4 M 3896.71 3224.11L3899.37 3224.11 M 3896.71 3226.15L3898.35 3226.15 M 3896.71 3228.4L3899.37 3228.4 ~~gge306~~0~#@$TRACK~1~3~~3890 3205 3890 3207.5~gge761~0#@$TRACK~1~3~~3890 3210 3890 3212.5~gge762~0#@$TRACK~1~3~~3890 3215 3890 3217.5~gge763~0#@$TRACK~1~3~~3890 3220 3890 3222.5~gge764~0#@$TRACK~1~3~~3855 3205 3945 3205 3945 3225 3855 3225 3855 3205~gge765~0#@$PAD~RECT~3940~3220~6.6929~6.6929~11~FAN1_2~1~2.1654~3936.6535 3216.6535 3943.3465 3216.6535 3943.3465 3223.3465 3936.6535 3223.3465~0~gge766~0~~Y~0~0~0.4~3940,3220#@$PAD~ELLIPSE~3910~3220~6.6929~6.6929~11~F1_2~2~2.1654~~0~gge771~0~~Y~0~0~0.4~3910,3220#@$PAD~ELLIPSE~3870~3220~6.6929~6.6929~11~RC_2~3~2.1654~~0~gge776~0~~Y~0~0~0.4~3870,3220#@$PAD~ELLIPSE~3860~3220~6.6929~6.6929~11~GND~4~2.1654~~0~gge781~0~~Y~0~0~0.4~3860,3220", + "LIB~3566.9291~3039.37~package`ROTARY_ENCODER_ALPS_EC12E`~180~~gge389~2~37a986a9869a4e0db122df20aae5e69a~1572782235~0~432be3f56af9f417#@$TEXT~P~3574.289~3081.151~0.6~0~1~4~~4.5~ENC~M 3574.2888 3078.6965 L 3574.2888 3082.9919 M 3574.2888 3078.6965 L 3571.6297 3078.6965 M 3574.2888 3080.7419 L 3572.6525 3080.7419 M 3574.2888 3082.9919 L 3571.6297 3082.9919 M 3570.2797 3078.6965 L 3570.2797 3082.9919 M 3570.2797 3078.6965 L 3567.4161 3082.9919 M 3567.4161 3078.6965 L 3567.4161 3082.9919 M 3562.9979 3079.7192 L 3563.2025 3079.3101 L 3563.6116 3078.901 L 3564.0207 3078.6965 L 3564.8388 3078.6965 L 3565.2479 3078.901 L 3565.657 3079.3101 L 3565.8616 3079.7192 L 3566.0661 3080.3328 L 3566.0661 3081.3555 L 3565.8616 3081.9692 L 3565.657 3082.3783 L 3565.2479 3082.7874 L 3564.8388 3082.9919 L 3564.0207 3082.9919 L 3563.6116 3082.7874 L 3563.2025 3082.3783 L 3562.9979 3081.9692~~gge390~~0~#@$TEXT~N~3566.88~3075.969~0.6~180~1~4~~4.5~Encoder_Alps_24imp_switch~M 3566.8803 3078.4236 L 3566.8803 3074.1282 M 3566.8803 3078.4236 L 3569.5394 3078.4236 M 3566.8803 3076.3782 L 3568.5167 3076.3782 M 3566.8803 3074.1282 L 3569.5394 3074.1282 M 3570.8894 3076.9918 L 3570.8894 3074.1282 M 3570.8894 3076.1736 L 3571.5031 3076.7873 L 3571.9122 3076.9918 L 3572.5258 3076.9918 L 3572.9349 3076.7873 L 3573.1394 3076.1736 L 3573.1394 3074.1282 M 3576.944 3076.3782 L 3576.5349 3076.7873 L 3576.1258 3076.9918 L 3575.5122 3076.9918 L 3575.1031 3076.7873 L 3574.694 3076.3782 L 3574.4894 3075.7646 L 3574.4894 3075.3555 L 3574.694 3074.7418 L 3575.1031 3074.3327 L 3575.5122 3074.1282 L 3576.1258 3074.1282 L 3576.5349 3074.3327 L 3576.944 3074.7418 M 3579.3167 3076.9918 L 3578.9076 3076.7873 L 3578.4985 3076.3782 L 3578.294 3075.7646 L 3578.294 3075.3555 L 3578.4985 3074.7418 L 3578.9076 3074.3327 L 3579.3167 3074.1282 L 3579.9303 3074.1282 L 3580.3394 3074.3327 L 3580.7485 3074.7418 L 3580.9531 3075.3555 L 3580.9531 3075.7646 L 3580.7485 3076.3782 L 3580.3394 3076.7873 L 3579.9303 3076.9918 L 3579.3167 3076.9918 M 3584.7576 3078.4236 L 3584.7576 3074.1282 M 3584.7576 3076.3782 L 3584.3485 3076.7873 L 3583.9394 3076.9918 L 3583.3258 3076.9918 L 3582.9167 3076.7873 L 3582.5076 3076.3782 L 3582.3031 3075.7646 L 3582.3031 3075.3555 L 3582.5076 3074.7418 L 3582.9167 3074.3327 L 3583.3258 3074.1282 L 3583.9394 3074.1282 L 3584.3485 3074.3327 L 3584.7576 3074.7418 M 3586.1076 3075.7646 L 3588.5622 3075.7646 L 3588.5622 3076.1736 L 3588.3576 3076.5827 L 3588.1531 3076.7873 L 3587.744 3076.9918 L 3587.1303 3076.9918 L 3586.7212 3076.7873 L 3586.3122 3076.3782 L 3586.1076 3075.7646 L 3586.1076 3075.3555 L 3586.3122 3074.7418 L 3586.7212 3074.3327 L 3587.1303 3074.1282 L 3587.744 3074.1282 L 3588.1531 3074.3327 L 3588.5622 3074.7418 M 3589.9122 3076.9918 L 3589.9122 3074.1282 M 3589.9122 3075.7646 L 3590.1167 3076.3782 L 3590.5258 3076.7873 L 3590.9349 3076.9918 L 3591.5485 3076.9918 M 3592.8985 3072.6964 L 3596.5803 3072.6964 M 3599.5667 3078.4236 L 3597.9303 3074.1282 M 3599.5667 3078.4236 L 3601.2031 3074.1282 M 3598.544 3075.56 L 3600.5894 3075.56 M 3602.5531 3078.4236 L 3602.5531 3074.1282 M 3603.9031 3076.9918 L 3603.9031 3072.6964 M 3603.9031 3076.3782 L 3604.3122 3076.7873 L 3604.7212 3076.9918 L 3605.3349 3076.9918 L 3605.744 3076.7873 L 3606.1531 3076.3782 L 3606.3576 3075.7646 L 3606.3576 3075.3555 L 3606.1531 3074.7418 L 3605.744 3074.3327 L 3605.3349 3074.1282 L 3604.7212 3074.1282 L 3604.3122 3074.3327 L 3603.9031 3074.7418 M 3609.9576 3076.3782 L 3609.7531 3076.7873 L 3609.1394 3076.9918 L 3608.5258 3076.9918 L 3607.9122 3076.7873 L 3607.7076 3076.3782 L 3607.9122 3075.9691 L 3608.3212 3075.7646 L 3609.344 3075.56 L 3609.7531 3075.3555 L 3609.9576 3074.9464 L 3609.9576 3074.7418 L 3609.7531 3074.3327 L 3609.1394 3074.1282 L 3608.5258 3074.1282 L 3607.9122 3074.3327 L 3607.7076 3074.7418 M 3611.3076 3072.6964 L 3614.9894 3072.6964 M 3616.544 3077.4009 L 3616.544 3077.6055 L 3616.7485 3078.0146 L 3616.9531 3078.2191 L 3617.3622 3078.4236 L 3618.1803 3078.4236 L 3618.5894 3078.2191 L 3618.794 3078.0146 L 3618.9985 3077.6055 L 3618.9985 3077.1964 L 3618.794 3076.7873 L 3618.3849 3076.1736 L 3616.3394 3074.1282 L 3619.2031 3074.1282 M 3622.5985 3078.4236 L 3620.5531 3075.56 L 3623.6212 3075.56 M 3622.5985 3078.4236 L 3622.5985 3074.1282 M 3624.9712 3078.4236 L 3625.1758 3078.2191 L 3625.3803 3078.4236 L 3625.1758 3078.6282 L 3624.9712 3078.4236 M 3625.1758 3076.9918 L 3625.1758 3074.1282 M 3626.7303 3076.9918 L 3626.7303 3074.1282 M 3626.7303 3076.1736 L 3627.344 3076.7873 L 3627.7531 3076.9918 L 3628.3667 3076.9918 L 3628.7758 3076.7873 L 3628.9803 3076.1736 L 3628.9803 3074.1282 M 3628.9803 3076.1736 L 3629.594 3076.7873 L 3630.0031 3076.9918 L 3630.6167 3076.9918 L 3631.0258 3076.7873 L 3631.2303 3076.1736 L 3631.2303 3074.1282 M 3632.5803 3076.9918 L 3632.5803 3072.6964 M 3632.5803 3076.3782 L 3632.9894 3076.7873 L 3633.3985 3076.9918 L 3634.0122 3076.9918 L 3634.4212 3076.7873 L 3634.8303 3076.3782 L 3635.0349 3075.7646 L 3635.0349 3075.3555 L 3634.8303 3074.7418 L 3634.4212 3074.3327 L 3634.0122 3074.1282 L 3633.3985 3074.1282 L 3632.9894 3074.3327 L 3632.5803 3074.7418 M 3636.3849 3072.6964 L 3640.0667 3072.6964 M 3643.6667 3076.3782 L 3643.4622 3076.7873 L 3642.8485 3076.9918 L 3642.2349 3076.9918 L 3641.6212 3076.7873 L 3641.4167 3076.3782 L 3641.6212 3075.9691 L 3642.0303 3075.7646 L 3643.0531 3075.56 L 3643.4622 3075.3555 L 3643.6667 3074.9464 L 3643.6667 3074.7418 L 3643.4622 3074.3327 L 3642.8485 3074.1282 L 3642.2349 3074.1282 L 3641.6212 3074.3327 L 3641.4167 3074.7418 M 3645.0167 3076.9918 L 3645.8349 3074.1282 M 3646.6531 3076.9918 L 3645.8349 3074.1282 M 3646.6531 3076.9918 L 3647.4712 3074.1282 M 3648.2894 3076.9918 L 3647.4712 3074.1282 M 3649.6394 3078.4236 L 3649.844 3078.2191 L 3650.0485 3078.4236 L 3649.844 3078.6282 L 3649.6394 3078.4236 M 3649.844 3076.9918 L 3649.844 3074.1282 M 3652.0122 3078.4236 L 3652.0122 3074.9464 L 3652.2167 3074.3327 L 3652.6258 3074.1282 L 3653.0349 3074.1282 M 3651.3985 3076.9918 L 3652.8303 3076.9918 M 3656.8394 3076.3782 L 3656.4303 3076.7873 L 3656.0212 3076.9918 L 3655.4076 3076.9918 L 3654.9985 3076.7873 L 3654.5894 3076.3782 L 3654.3849 3075.7646 L 3654.3849 3075.3555 L 3654.5894 3074.7418 L 3654.9985 3074.3327 L 3655.4076 3074.1282 L 3656.0212 3074.1282 L 3656.4303 3074.3327 L 3656.8394 3074.7418 M 3658.1894 3078.4236 L 3658.1894 3074.1282 M 3658.1894 3076.1736 L 3658.8031 3076.7873 L 3659.2122 3076.9918 L 3659.8258 3076.9918 L 3660.2349 3076.7873 L 3660.4394 3076.1736 L 3660.4394 3074.1282~none~gge391~~0~#@$TRACK~1.524~4~null~3591.3381 3065.3543 3591.3381 3013.3857~gge392~0#@$TRACK~1.524~4~null~3542.5192 3065.3543 3591.3381 3065.3543~gge393~0#@$TRACK~1.524~4~null~3542.5192 3013.3857 3542.5192 3065.3543~gge394~0#@$TRACK~1.524~4~null~3591.3381 3013.3857 3542.5192 3013.3857~gge395~0#@$CIRCLE~3566.928~3039.37~12~1.524~4~gge396~0~~#@$PAD~ELLIPSE~3557.086~3009.842~8~8~11~UP_34~A~2.2~~270~gge397~0~~Y~0~0~0.4~3557.0861,3009.8424#@$PAD~ELLIPSE~3566.928~3009.842~8~8~11~GND~C~2.2~~270~gge402~0~~Y~0~0~0.4~3566.9286,3009.8424#@$PAD~ELLIPSE~3576.771~3009.842~8~8~11~UP_35~B~2.2~~270~gge405~0~~Y~0~0~0.4~3576.7712,3009.8424#@$PAD~ELLIPSE~3576.771~3066.929~8~8~11~GND~SW2~2.2~~270~gge410~0~~Y~0~0~0.4~3576.7712,3066.9291#@$PAD~ELLIPSE~3557.086~3066.929~8~8~11~SW~SW1~2.2~~270~gge415~0~~Y~0~0~0.4~3557.0861,3066.9291#@$PAD~RECT~3544.881~3039.37~12.4~12.4~11~GND~Shield~4.1339~3551.0814 3045.57 3551.0814 3033.17 3538.6814 3033.17 3538.6814 3045.57~270~gge420~0~~Y~0~0~0.4~3544.8814,3039.37#@$PAD~RECT~3588.976~3039.37~12.4~12.4~11~GND~Shield~4.3307~3595.1759 3045.57 3595.1759 3033.17 3582.7759 3033.17 3582.7759 3045.57~270~gge425~0~~Y~0~0~0.4~3588.9759,3039.37", + "LIB~3650~3015~package`AXIAL-0.3`~90~~gge587~1~b9efc06d0fb742f99a478d48de211eb9~1548710936~0~86ef0676550a2e7e#@$TEXT~N~3638~3015~0.6~90~0~3~~4.5~10k~M 3634.28 3015 L 3634.07 3014.59 L 3633.46 3013.98 L 3637.75 3013.98 M 3633.46 3011.4 L 3633.66 3012.01 L 3634.28 3012.42 L 3635.3 3012.63 L 3635.91 3012.63 L 3636.94 3012.42 L 3637.55 3012.01 L 3637.75 3011.4 L 3637.75 3010.99 L 3637.55 3010.38 L 3636.94 3009.97 L 3635.91 3009.76 L 3635.3 3009.76 L 3634.28 3009.97 L 3633.66 3010.38 L 3633.46 3010.99 L 3633.46 3011.4 M 3633.46 3008.41 L 3637.75 3008.41 M 3634.89 3006.37 L 3636.94 3008.41 M 3636.12 3007.6 L 3637.75 3006.16~none~gge588~~0~#@$TEXT~P~3645~3025~0.6~90~0~3~~4.5~RE_B~M 3640.46 3025 L 3644.75 3025 M 3640.46 3025 L 3640.46 3023.16 L 3640.66 3022.55 L 3640.87 3022.34 L 3641.28 3022.14 L 3641.69 3022.14 L 3642.1 3022.34 L 3642.3 3022.55 L 3642.5 3023.16 L 3642.5 3025 M 3642.5 3023.57 L 3644.75 3022.14 M 3640.46 3020.79 L 3644.75 3020.79 M 3640.46 3020.79 L 3640.46 3018.13 M 3642.5 3020.79 L 3642.5 3019.15 M 3644.75 3020.79 L 3644.75 3018.13 M 3646.19 3016.78 L 3646.19 3013.1 M 3640.46 3011.75 L 3644.75 3011.75 M 3640.46 3011.75 L 3640.46 3009.9 L 3640.66 3009.29 L 3640.87 3009.09 L 3641.28 3008.88 L 3641.69 3008.88 L 3642.1 3009.09 L 3642.3 3009.29 L 3642.5 3009.9 M 3642.5 3011.75 L 3642.5 3009.9 L 3642.71 3009.29 L 3642.91 3009.09 L 3643.32 3008.88 L 3643.94 3008.88 L 3644.35 3009.09 L 3644.55 3009.29 L 3644.75 3009.9 L 3644.75 3011.75~~gge590~~0~#@$TRACK~1~3~~3647 3025 3647 3005~gge592~0#@$TRACK~1~3~~3647 3005 3650 3005~gge593~0#@$TRACK~1~3~~3650 3005 3653 3005~gge594~0#@$TRACK~1~3~~3653 3005 3653 3025~gge595~0#@$TRACK~1~3~~3653 3025 3650 3025~gge596~0#@$TRACK~1~3~~3650 3025 3647 3025~gge597~0#@$TRACK~1~3~~3650 3005 3650 3004~gge598~0#@$TRACK~1~3~~3650 3025 3650 3026~gge599~0#@$PAD~ELLIPSE~3650~3030~7.4~7.4~11~+5V~1~1.77~~90~gge600~0~~Y~0~0~0.4~3650,3030#@$PAD~ELLIPSE~3650~3000~7.4~7.4~11~UP_34~2~1.77~~90~gge605~0~~Y~0~0~0.4~3650,3000", + "LIB~3630~3025~package`AXIAL-0.3`~90~~gge610~1~b9efc06d0fb742f99a478d48de211eb9~1548710936~0~a37e8ce20a012485#@$TEXT~N~3618~3025~0.6~90~0~3~~4.5~10k~M 3614.28 3025 L 3614.07 3024.59 L 3613.46 3023.98 L 3617.75 3023.98 M 3613.46 3021.4 L 3613.66 3022.01 L 3614.28 3022.42 L 3615.3 3022.63 L 3615.91 3022.63 L 3616.94 3022.42 L 3617.55 3022.01 L 3617.75 3021.4 L 3617.75 3020.99 L 3617.55 3020.38 L 3616.94 3019.97 L 3615.91 3019.76 L 3615.3 3019.76 L 3614.28 3019.97 L 3613.66 3020.38 L 3613.46 3020.99 L 3613.46 3021.4 M 3613.46 3018.41 L 3617.75 3018.41 M 3614.89 3016.37 L 3616.94 3018.41 M 3616.12 3017.6 L 3617.75 3016.16~none~gge611~~0~#@$TEXT~P~3625~3035~0.6~90~0~3~~4.5~RC_A~M 3620.46 3035 L 3624.75 3035 M 3620.46 3035 L 3620.46 3033.16 L 3620.66 3032.55 L 3620.87 3032.34 L 3621.28 3032.14 L 3621.69 3032.14 L 3622.1 3032.34 L 3622.3 3032.55 L 3622.5 3033.16 L 3622.5 3035 M 3622.5 3033.57 L 3624.75 3032.14 M 3621.48 3027.72 L 3621.07 3027.92 L 3620.66 3028.33 L 3620.46 3028.74 L 3620.46 3029.56 L 3620.66 3029.97 L 3621.07 3030.38 L 3621.48 3030.58 L 3622.1 3030.79 L 3623.12 3030.79 L 3623.73 3030.58 L 3624.14 3030.38 L 3624.55 3029.97 L 3624.75 3029.56 L 3624.75 3028.74 L 3624.55 3028.33 L 3624.14 3027.92 L 3623.73 3027.72 M 3626.19 3026.37 L 3626.19 3022.69 M 3620.46 3019.7 L 3624.75 3021.34 M 3620.46 3019.7 L 3624.75 3018.06 M 3623.32 3020.72 L 3623.32 3018.68~~gge613~~0~#@$TRACK~1~3~~3627 3035 3627 3015~gge615~0#@$TRACK~1~3~~3627 3015 3630 3015~gge616~0#@$TRACK~1~3~~3630 3015 3633 3015~gge617~0#@$TRACK~1~3~~3633 3015 3633 3035~gge618~0#@$TRACK~1~3~~3633 3035 3630 3035~gge619~0#@$TRACK~1~3~~3630 3035 3627 3035~gge620~0#@$TRACK~1~3~~3630 3015 3630 3014~gge621~0#@$TRACK~1~3~~3630 3035 3630 3036~gge622~0#@$PAD~ELLIPSE~3630~3040~7.4~7.4~11~+5V~1~1.77~~90~gge623~0~~Y~0~0~0.4~3630,3040#@$PAD~ELLIPSE~3630~3010~7.4~7.4~11~UP_35~2~1.77~~90~gge628~0~~Y~0~0~0.4~3630,3010", + "LIB~3735~3060~package`AXIAL-0.3`~270~~gge633~1~b9efc06d0fb742f99a478d48de211eb9~1548710936~0~e2249db0f2948866#@$TEXT~N~3751.79~3068.84~0.6~90~0~3~~4.5~10k~M 3748.07 3068.8401 L 3747.86 3068.4301 L 3747.25 3067.8201 L 3751.54 3067.8201 M 3747.25 3065.2401 L 3747.45 3065.8501 L 3748.07 3066.2601 L 3749.09 3066.4701 L 3749.7 3066.4701 L 3750.73 3066.2601 L 3751.34 3065.8501 L 3751.54 3065.2401 L 3751.54 3064.8301 L 3751.34 3064.2201 L 3750.73 3063.8101 L 3749.7 3063.6001 L 3749.09 3063.6001 L 3748.07 3063.8101 L 3747.45 3064.2201 L 3747.25 3064.8301 L 3747.25 3065.2401 M 3747.25 3062.2501 L 3751.54 3062.2501 M 3748.68 3060.2101 L 3750.73 3062.2501 M 3749.91 3061.4401 L 3751.54 3060.0001~none~gge634~~0~#@$TEXT~P~3745~3075~0.6~90~0~3~~4.5~R_BACK~M 3740.46 3075 L 3744.75 3075 M 3740.46 3075 L 3740.46 3073.16 L 3740.66 3072.55 L 3740.87 3072.34 L 3741.28 3072.14 L 3741.69 3072.14 L 3742.1 3072.34 L 3742.3 3072.55 L 3742.5 3073.16 L 3742.5 3075 M 3742.5 3073.57 L 3744.75 3072.14 M 3746.19 3070.79 L 3746.19 3067.1 M 3740.46 3065.75 L 3744.75 3065.75 M 3740.46 3065.75 L 3740.46 3063.91 L 3740.66 3063.3 L 3740.87 3063.1 L 3741.28 3062.89 L 3741.69 3062.89 L 3742.1 3063.1 L 3742.3 3063.3 L 3742.5 3063.91 M 3742.5 3065.75 L 3742.5 3063.91 L 3742.71 3063.3 L 3742.91 3063.1 L 3743.32 3062.89 L 3743.94 3062.89 L 3744.35 3063.1 L 3744.55 3063.3 L 3744.75 3063.91 L 3744.75 3065.75 M 3740.46 3059.9 L 3744.75 3061.54 M 3740.46 3059.9 L 3744.75 3058.27 M 3743.32 3060.93 L 3743.32 3058.88 M 3741.48 3053.85 L 3741.07 3054.05 L 3740.66 3054.46 L 3740.46 3054.87 L 3740.46 3055.69 L 3740.66 3056.1 L 3741.07 3056.51 L 3741.48 3056.71 L 3742.1 3056.92 L 3743.12 3056.92 L 3743.73 3056.71 L 3744.14 3056.51 L 3744.55 3056.1 L 3744.75 3055.69 L 3744.75 3054.87 L 3744.55 3054.46 L 3744.14 3054.05 L 3743.73 3053.85 M 3740.46 3052.5 L 3744.75 3052.5 M 3740.46 3049.64 L 3743.32 3052.5 M 3742.3 3051.48 L 3744.75 3049.64~~gge636~~0~#@$TRACK~1~3~~3738 3050 3738 3070~gge638~0#@$TRACK~1~3~~3738 3070 3735 3070~gge639~0#@$TRACK~1~3~~3735 3070 3732 3070~gge640~0#@$TRACK~1~3~~3732 3070 3732 3050~gge641~0#@$TRACK~1~3~~3732 3050 3735 3050~gge642~0#@$TRACK~1~3~~3735 3050 3738 3050~gge643~0#@$TRACK~1~3~~3735 3070 3735 3071~gge644~0#@$TRACK~1~3~~3735 3050 3735 3049~gge645~0#@$PAD~ELLIPSE~3735~3045~7.4~7.4~11~LCD_15~1~1.77~~270~gge646~0~~Y~0~0~0.4~3735,3045#@$PAD~ELLIPSE~3735~3075~7.4~7.4~11~GND~2~1.77~~270~gge651~0~~Y~0~0~0.4~3735,3075", + "LIB~3755~3035~package`TO-92`~90~~gge656~1~6071b6b5f7d04c43b9eeb79578969dae~1541741641~0~a73cc99978d99a40#@$TEXT~N~3736~3035.9~0.6~90~0~3~~4.5~BS170~M 3731.46 3035.9 L 3735.75 3035.9 M 3731.46 3035.9 L 3731.46 3034.06 L 3731.66 3033.45 L 3731.87 3033.24 L 3732.28 3033.04 L 3732.69 3033.04 L 3733.1 3033.24 L 3733.3 3033.45 L 3733.5 3034.06 M 3733.5 3035.9 L 3733.5 3034.06 L 3733.71 3033.45 L 3733.91 3033.24 L 3734.32 3033.04 L 3734.94 3033.04 L 3735.35 3033.24 L 3735.55 3033.45 L 3735.75 3034.06 L 3735.75 3035.9 M 3732.07 3028.82 L 3731.66 3029.23 L 3731.46 3029.85 L 3731.46 3030.66 L 3731.66 3031.28 L 3732.07 3031.69 L 3732.48 3031.69 L 3732.89 3031.48 L 3733.1 3031.28 L 3733.3 3030.87 L 3733.71 3029.64 L 3733.91 3029.23 L 3734.12 3029.03 L 3734.53 3028.82 L 3735.14 3028.82 L 3735.55 3029.23 L 3735.75 3029.85 L 3735.75 3030.66 L 3735.55 3031.28 L 3735.14 3031.69 M 3732.28 3027.47 L 3732.07 3027.06 L 3731.46 3026.45 L 3735.75 3026.45 M 3731.46 3022.24 L 3735.75 3024.28 M 3731.46 3025.1 L 3731.46 3022.24 M 3731.46 3019.66 L 3731.66 3020.27 L 3732.28 3020.68 L 3733.3 3020.89 L 3733.91 3020.89 L 3734.94 3020.68 L 3735.55 3020.27 L 3735.75 3019.66 L 3735.75 3019.25 L 3735.55 3018.64 L 3734.94 3018.23 L 3733.91 3018.02 L 3733.3 3018.02 L 3732.28 3018.23 L 3731.66 3018.64 L 3731.46 3019.25 L 3731.46 3019.66~none~gge657~~0~#@$TEXT~P~3750~3025~0.6~0~0~3~~4.5~Q1~M 3751.23 3020.46 L 3750.82 3020.66 L 3750.41 3021.07 L 3750.2 3021.48 L 3750 3022.1 L 3750 3023.12 L 3750.2 3023.73 L 3750.41 3024.14 L 3750.82 3024.55 L 3751.23 3024.75 L 3752.05 3024.75 L 3752.45 3024.55 L 3752.86 3024.14 L 3753.07 3023.73 L 3753.27 3023.12 L 3753.27 3022.1 L 3753.07 3021.48 L 3752.86 3021.07 L 3752.45 3020.66 L 3752.05 3020.46 L 3751.23 3020.46 M 3751.84 3023.94 L 3753.07 3025.16 M 3754.62 3021.28 L 3755.03 3021.07 L 3755.65 3020.46 L 3755.65 3024.75~~gge659~~0~#@$TRACK~1~3~~3760.31 3042.58 3760.31 3027.46~gge661~0#@$ARC~1~3~~M 3760.27 3027.42 A 10.07 10.07 0 1 0 3760.27 3042.62~~gge662~0#@$PAD~RECT~3755~3040~3.2~3.8~11~+5V~1~1.4~3753.1 3041.6 3753.1 3038.4 3756.9 3038.4 3756.9 3041.6~90~gge663~0~~Y~0~0~0.4~3755,3040#@$PAD~ELLIPSE~3755~3035~3.9~3.9~11~BACK~2~1.4~~90~gge668~0~~Y~0~0~0.4~3755,3035#@$PAD~ELLIPSE~3755~3030~3.9~3.9~11~LCD_15~3~1.4~~90~gge673~0~~Y~0~0~0.4~3755,3030", + "LIB~3990~3025~package`VISHAY_T73YE`~90~~gge678~1~b3a12e2b4b8f4dd78135d16beb90ae09~1580653525~0~80443c68dbd62656#@$TEXT~N~3969~3035~0.6~90~0~3~~4.5~Vishay-T73YE~M 3964.46 3035 L 3968.75 3033.36 M 3964.46 3031.73 L 3968.75 3033.36 M 3964.46 3030.38 L 3964.66 3030.17 L 3964.46 3029.97 L 3964.25 3030.17 L 3964.46 3030.38 M 3965.89 3030.17 L 3968.75 3030.17 M 3966.5 3026.37 L 3966.1 3026.57 L 3965.89 3027.19 L 3965.89 3027.8 L 3966.1 3028.41 L 3966.5 3028.62 L 3966.91 3028.41 L 3967.12 3028 L 3967.32 3026.98 L 3967.53 3026.57 L 3967.94 3026.37 L 3968.14 3026.37 L 3968.55 3026.57 L 3968.75 3027.19 L 3968.75 3027.8 L 3968.55 3028.41 L 3968.14 3028.62 M 3964.46 3025.02 L 3968.75 3025.02 M 3966.71 3025.02 L 3966.1 3024.4 L 3965.89 3024 L 3965.89 3023.38 L 3966.1 3022.97 L 3966.71 3022.77 L 3968.75 3022.77 M 3965.89 3018.96 L 3968.75 3018.96 M 3966.5 3018.96 L 3966.1 3019.37 L 3965.89 3019.78 L 3965.89 3020.4 L 3966.1 3020.8 L 3966.5 3021.21 L 3967.12 3021.42 L 3967.53 3021.42 L 3968.14 3021.21 L 3968.55 3020.8 L 3968.75 3020.4 L 3968.75 3019.78 L 3968.55 3019.37 L 3968.14 3018.96 M 3965.89 3017.41 L 3968.75 3016.18 M 3965.89 3014.95 L 3968.75 3016.18 L 3969.57 3016.59 L 3969.98 3017 L 3970.19 3017.41 L 3970.19 3017.61 M 3966.91 3013.6 L 3966.91 3009.92 M 3964.46 3007.14 L 3968.75 3007.14 M 3964.46 3008.57 L 3964.46 3005.71 M 3964.46 3001.5 L 3968.75 3003.54 M 3964.46 3004.36 L 3964.46 3001.5 M 3964.46 2999.74 L 3964.46 2997.49 L 3966.1 2998.71 L 3966.1 2998.1 L 3966.3 2997.69 L 3966.5 2997.49 L 3967.12 2997.28 L 3967.53 2997.28 L 3968.14 2997.49 L 3968.55 2997.9 L 3968.75 2998.51 L 3968.75 2999.12 L 3968.55 2999.74 L 3968.35 2999.94 L 3967.94 3000.15 M 3964.46 2995.93 L 3966.5 2994.3 L 3968.75 2994.3 M 3964.46 2992.66 L 3966.5 2994.3 M 3964.46 2991.31 L 3968.75 2991.31 M 3964.46 2991.31 L 3964.46 2988.65 M 3966.5 2991.31 L 3966.5 2989.67 M 3968.75 2991.31 L 3968.75 2988.65~none~gge679~~0~#@$TEXT~P~3975~3050~0.6~90~0~3~~4.5~T_CONT~M 3970.46 3048.57 L 3974.75 3048.57 M 3970.46 3050 L 3970.46 3047.14 M 3976.19 3045.79 L 3976.19 3042.1 M 3971.48 3037.69 L 3971.07 3037.89 L 3970.66 3038.3 L 3970.46 3038.71 L 3970.46 3039.53 L 3970.66 3039.94 L 3971.07 3040.35 L 3971.48 3040.55 L 3972.1 3040.75 L 3973.12 3040.75 L 3973.73 3040.55 L 3974.14 3040.35 L 3974.55 3039.94 L 3974.75 3039.53 L 3974.75 3038.71 L 3974.55 3038.3 L 3974.14 3037.89 L 3973.73 3037.69 M 3970.46 3035.11 L 3970.66 3035.52 L 3971.07 3035.93 L 3971.48 3036.13 L 3972.1 3036.34 L 3973.12 3036.34 L 3973.73 3036.13 L 3974.14 3035.93 L 3974.55 3035.52 L 3974.75 3035.11 L 3974.75 3034.29 L 3974.55 3033.88 L 3974.14 3033.47 L 3973.73 3033.27 L 3973.12 3033.06 L 3972.1 3033.06 L 3971.48 3033.27 L 3971.07 3033.47 L 3970.66 3033.88 L 3970.46 3034.29 L 3970.46 3035.11 M 3970.46 3031.71 L 3974.75 3031.71 M 3970.46 3031.71 L 3974.75 3028.85 M 3970.46 3028.85 L 3974.75 3028.85 M 3970.46 3026.07 L 3974.75 3026.07 M 3970.46 3027.5 L 3970.46 3024.64~~gge681~~0~#@$TRACK~1~3~~3986.063 3034.8425 3993.937 3034.8425~gge683~0#@$TRACK~1~3~~3990 3038.7795 3990 3030.9055~gge684~0#@$TRACK~1~3~~3976.221 3048.622 3976.221 3021.063 4003.78 3021.063 4003.78 3048.622 3976.221 3048.622~gge685~0#@$PAD~ELLIPSE~3990~3025~3.937~3.937~11~GND~1~1.0827~~90~gge686~0~~Y~0~0~0.4~3990,3025#@$PAD~ELLIPSE~3980~3035~3.937~3.937~11~LCD_3~2~1.0827~~90~gge691~0~~Y~0~0~0.4~3980,3035#@$PAD~ELLIPSE~3990~3045~3.937~3.937~11~+5V~3~1.0827~~90~gge696~0~~Y~0~0~0.4~3990,3045", + "LIB~3695~3220~package`AXIAL-0.3`~180~~gge65~1~b9efc06d0fb742f99a478d48de211eb9~1548710936~0~8b276cccf50706e2#@$TEXT~P~3682.5~3215~0.6~0~0~3~~4.5~TH2_R2~M 3683.9299 3208.8496 L 3683.9299 3213.1396 M 3682.4999 3208.8496 L 3685.3599 3208.8496 M 3686.7099 3208.8496 L 3686.7099 3213.1396 M 3689.5799 3208.8496 L 3689.5799 3213.1396 M 3686.7099 3210.8896 L 3689.5799 3210.8896 M 3691.1299 3209.8696 L 3691.1299 3209.6596 L 3691.3399 3209.2496 L 3691.5399 3209.0496 L 3691.9499 3208.8496 L 3692.7699 3208.8496 L 3693.1799 3209.0496 L 3693.3799 3209.2496 L 3693.5899 3209.6596 L 3693.5899 3210.0696 L 3693.3799 3210.4796 L 3692.9699 3211.0996 L 3690.9299 3213.1396 L 3693.7899 3213.1396 M 3695.1399 3214.5696 L 3698.8199 3214.5696 M 3700.1699 3208.8496 L 3700.1699 3213.1396 M 3700.1699 3208.8496 L 3702.0099 3208.8496 L 3702.6299 3209.0496 L 3702.8299 3209.2496 L 3703.0399 3209.6596 L 3703.0399 3210.0696 L 3702.8299 3210.4796 L 3702.6299 3210.6896 L 3702.0099 3210.8896 L 3700.1699 3210.8896 M 3701.5999 3210.8896 L 3703.0399 3213.1396 M 3704.5899 3209.8696 L 3704.5899 3209.6596 L 3704.7999 3209.2496 L 3704.9999 3209.0496 L 3705.4099 3208.8496 L 3706.2299 3208.8496 L 3706.6399 3209.0496 L 3706.8399 3209.2496 L 3707.0499 3209.6596 L 3707.0499 3210.0696 L 3706.8399 3210.4796 L 3706.4299 3211.0996 L 3704.3899 3213.1396 L 3707.2499 3213.1396~~gge66~~0~#@$TEXT~N~3695~3230.17~0.6~180~0~3~~4.5~10k~M 3695 3235.51 L 3694.59 3235.71 L 3693.98 3236.32 L 3693.98 3232.03 M 3691.4 3236.32 L 3692.01 3236.12 L 3692.42 3235.51 L 3692.63 3234.48 L 3692.63 3233.87 L 3692.42 3232.85 L 3692.01 3232.23 L 3691.4 3232.03 L 3690.99 3232.03 L 3690.38 3232.23 L 3689.97 3232.85 L 3689.76 3233.87 L 3689.76 3234.48 L 3689.97 3235.51 L 3690.38 3236.12 L 3690.99 3236.32 L 3691.4 3236.32 M 3688.41 3236.32 L 3688.41 3232.03 M 3686.37 3234.89 L 3688.41 3232.85 M 3687.6 3233.67 L 3686.16 3232.03~none~gge67~~0~#@$TRACK~1~3~~3705 3223 3685 3223~gge68~0#@$TRACK~1~3~~3685 3223 3685 3220~gge69~0#@$TRACK~1~3~~3685 3220 3685 3217~gge70~0#@$TRACK~1~3~~3685 3217 3705 3217~gge71~0#@$TRACK~1~3~~3705 3217 3705 3220~gge72~0#@$TRACK~1~3~~3705 3220 3705 3223~gge73~0#@$TRACK~1~3~~3685 3220 3684 3220~gge74~0#@$TRACK~1~3~~3705 3220 3706 3220~gge75~0#@$PAD~ELLIPSE~3710~3220~7.4~7.4~11~+3.3V~1~1.77~~180~gge76~0~~Y~0~0~0.4~3710,3220#@$PAD~ELLIPSE~3680~3220~7.4~7.4~11~TH2-~2~1.77~~180~gge77~0~~Y~0~0~0.4~3680,3220", + "LIB~3705~3250~package`AXIAL-0.3`~270~~gge78~1~b9efc06d0fb742f99a478d48de211eb9~1548710936~0~6de8ed11f5334ab4#@$TEXT~P~3716.15~3260.41~0.6~90~0~3~~4.5~TH2_R1~M 3710.0001 3258.98 L 3714.2901 3258.98 M 3710.0001 3260.41 L 3710.0001 3257.55 M 3710.0001 3256.2 L 3714.2901 3256.2 M 3710.0001 3253.33 L 3714.2901 3253.33 M 3712.0401 3256.2 L 3712.0401 3253.33 M 3711.0201 3251.78 L 3710.8101 3251.78 L 3710.4001 3251.57 L 3710.2001 3251.37 L 3710.0001 3250.96 L 3710.0001 3250.14 L 3710.2001 3249.73 L 3710.4001 3249.53 L 3710.8101 3249.32 L 3711.2201 3249.32 L 3711.6301 3249.53 L 3712.2501 3249.94 L 3714.2901 3251.98 L 3714.2901 3249.12 M 3715.7201 3247.77 L 3715.7201 3244.09 M 3710.0001 3242.74 L 3714.2901 3242.74 M 3710.0001 3242.74 L 3710.0001 3240.9 L 3710.2001 3240.28 L 3710.4001 3240.08 L 3710.8101 3239.87 L 3711.2201 3239.87 L 3711.6301 3240.08 L 3711.8401 3240.28 L 3712.0401 3240.9 L 3712.0401 3242.74 M 3712.0401 3241.31 L 3714.2901 3239.87 M 3710.8101 3238.52 L 3710.6101 3238.11 L 3710.0001 3237.5 L 3714.2901 3237.5~~gge79~~0~#@$TEXT~N~3715.17~3250~0.6~270~0~3~~4.5~10k~M 3720.51 3250 L 3720.71 3250.41 L 3721.32 3251.02 L 3717.03 3251.02 M 3721.32 3253.6 L 3721.12 3252.99 L 3720.51 3252.58 L 3719.48 3252.37 L 3718.87 3252.37 L 3717.85 3252.58 L 3717.23 3252.99 L 3717.03 3253.6 L 3717.03 3254.01 L 3717.23 3254.62 L 3717.85 3255.03 L 3718.87 3255.24 L 3719.48 3255.24 L 3720.51 3255.03 L 3721.12 3254.62 L 3721.32 3254.01 L 3721.32 3253.6 M 3721.32 3256.59 L 3717.03 3256.59 M 3719.89 3258.63 L 3717.85 3256.59 M 3718.67 3257.4 L 3717.03 3258.84~none~gge80~~0~#@$TRACK~1~3~~3708 3240 3708 3260~gge81~0#@$TRACK~1~3~~3708 3260 3705 3260~gge82~0#@$TRACK~1~3~~3705 3260 3702 3260~gge83~0#@$TRACK~1~3~~3702 3260 3702 3240~gge84~0#@$TRACK~1~3~~3702 3240 3705 3240~gge85~0#@$TRACK~1~3~~3705 3240 3708 3240~gge86~0#@$TRACK~1~3~~3705 3260 3705 3261~gge87~0#@$TRACK~1~3~~3705 3240 3705 3239~gge88~0#@$PAD~ELLIPSE~3705~3235~7.4~7.4~11~+3.3V~1~1.77~~270~gge89~0~~Y~0~0~0.4~3705,3235#@$PAD~ELLIPSE~3705~3265~7.4~7.4~11~TH2+~2~1.77~~270~gge90~0~~Y~0~0~0.4~3705,3265", + "LIB~3795~3250.039~package`AXIAL-0.3`~270~~gge91~1~b9efc06d0fb742f99a478d48de211eb9~1548710936~0~92a6000dabb17af8#@$TEXT~P~3806.15~3268.699~0.6~90~0~3~~4.5~TH_EXT_R1~M 3800.0001 3267.269 L 3804.2901 3267.269 M 3800.0001 3268.699 L 3800.0001 3265.839 M 3800.0001 3264.489 L 3804.2901 3264.489 M 3800.0001 3261.619 L 3804.2901 3261.619 M 3802.0401 3264.489 L 3802.0401 3261.619 M 3805.7201 3260.269 L 3805.7201 3256.589 M 3800.0001 3255.239 L 3804.2901 3255.239 M 3800.0001 3255.239 L 3800.0001 3252.579 M 3802.0401 3255.239 L 3802.0401 3253.599 M 3804.2901 3255.239 L 3804.2901 3252.579 M 3800.0001 3251.229 L 3804.2901 3248.369 M 3800.0001 3248.369 L 3804.2901 3251.229 M 3800.0001 3245.589 L 3804.2901 3245.589 M 3800.0001 3247.019 L 3800.0001 3244.149 M 3805.7201 3242.799 L 3805.7201 3239.119 M 3800.0001 3237.769 L 3804.2901 3237.769 M 3800.0001 3237.769 L 3800.0001 3235.929 L 3800.2001 3235.319 L 3800.4001 3235.109 L 3800.8101 3234.909 L 3801.2201 3234.909 L 3801.6301 3235.109 L 3801.8401 3235.319 L 3802.0401 3235.929 L 3802.0401 3237.769 M 3802.0401 3236.339 L 3804.2901 3234.909 M 3800.8101 3233.559 L 3800.6101 3233.149 L 3800.0001 3232.539 L 3804.2901 3232.539~~gge92~~0~#@$TEXT~N~3805.17~3250.039~0.6~270~0~3~~4.5~10k~M 3810.51 3250.039 L 3810.71 3250.449 L 3811.32 3251.059 L 3807.03 3251.059 M 3811.32 3253.639 L 3811.12 3253.029 L 3810.51 3252.619 L 3809.48 3252.409 L 3808.87 3252.409 L 3807.85 3252.619 L 3807.23 3253.029 L 3807.03 3253.639 L 3807.03 3254.049 L 3807.23 3254.659 L 3807.85 3255.069 L 3808.87 3255.279 L 3809.48 3255.279 L 3810.51 3255.069 L 3811.12 3254.659 L 3811.32 3254.049 L 3811.32 3253.639 M 3811.32 3256.629 L 3807.03 3256.629 M 3809.89 3258.669 L 3807.85 3256.629 M 3808.67 3257.439 L 3807.03 3258.879~none~gge93~~0~#@$TRACK~1~3~~3798 3240.039 3798 3260.039~gge94~0#@$TRACK~1~3~~3798 3260.039 3795 3260.039~gge95~0#@$TRACK~1~3~~3795 3260.039 3792 3260.039~gge96~0#@$TRACK~1~3~~3792 3260.039 3792 3240.039~gge97~0#@$TRACK~1~3~~3792 3240.039 3795 3240.039~gge98~0#@$TRACK~1~3~~3795 3240.039 3798 3240.039~gge99~0#@$TRACK~1~3~~3795 3260.039 3795 3261.039~gge100~0#@$TRACK~1~3~~3795 3240.039 3795 3239.039~gge101~0#@$PAD~ELLIPSE~3795~3235.039~7.4~7.4~11~+3.3V~1~1.77~~270~gge102~0~~Y~0~0~0.4~3795,3235.039#@$PAD~ELLIPSE~3795~3265.039~7.4~7.4~11~TH_EXT+~2~1.77~~270~gge103~0~~Y~0~0~0.4~3795,3265.039", + "LIB~3785~3220.039~package`AXIAL-0.3`~180~~gge104~1~b9efc06d0fb742f99a478d48de211eb9~1548710936~0~fcd80f936e5f79ac#@$TEXT~P~3767.5~3215.039~0.6~0~0~3~~4.5~TH_EXT_R2~M 3768.9299 3208.8886 L 3768.9299 3213.1786 M 3767.4999 3208.8886 L 3770.3599 3208.8886 M 3771.7099 3208.8886 L 3771.7099 3213.1786 M 3774.5799 3208.8886 L 3774.5799 3213.1786 M 3771.7099 3210.9286 L 3774.5799 3210.9286 M 3775.9299 3214.6086 L 3779.6099 3214.6086 M 3780.9599 3208.8886 L 3780.9599 3213.1786 M 3780.9599 3208.8886 L 3783.6199 3208.8886 M 3780.9599 3210.9286 L 3782.5999 3210.9286 M 3780.9599 3213.1786 L 3783.6199 3213.1786 M 3784.9699 3208.8886 L 3787.8299 3213.1786 M 3787.8299 3208.8886 L 3784.9699 3213.1786 M 3790.6099 3208.8886 L 3790.6099 3213.1786 M 3789.1799 3208.8886 L 3792.0499 3208.8886 M 3793.3999 3214.6086 L 3797.0799 3214.6086 M 3798.4299 3208.8886 L 3798.4299 3213.1786 M 3798.4299 3208.8886 L 3800.2699 3208.8886 L 3800.8799 3209.0886 L 3801.0899 3209.2886 L 3801.2899 3209.6986 L 3801.2899 3210.1086 L 3801.0899 3210.5186 L 3800.8799 3210.7286 L 3800.2699 3210.9286 L 3798.4299 3210.9286 M 3799.8599 3210.9286 L 3801.2899 3213.1786 M 3802.8499 3209.9086 L 3802.8499 3209.6986 L 3803.0499 3209.2886 L 3803.2499 3209.0886 L 3803.6599 3208.8886 L 3804.4799 3208.8886 L 3804.8899 3209.0886 L 3805.0999 3209.2886 L 3805.2999 3209.6986 L 3805.2999 3210.1086 L 3805.0999 3210.5186 L 3804.6899 3211.1386 L 3802.6399 3213.1786 L 3805.4999 3213.1786~~gge105~~0~#@$TEXT~N~3785~3230.209~0.6~180~0~3~~4.5~10k~M 3785 3235.549 L 3784.59 3235.749 L 3783.98 3236.359 L 3783.98 3232.069 M 3781.4 3236.359 L 3782.01 3236.159 L 3782.42 3235.549 L 3782.63 3234.519 L 3782.63 3233.909 L 3782.42 3232.889 L 3782.01 3232.269 L 3781.4 3232.069 L 3780.99 3232.069 L 3780.38 3232.269 L 3779.97 3232.889 L 3779.76 3233.909 L 3779.76 3234.519 L 3779.97 3235.549 L 3780.38 3236.159 L 3780.99 3236.359 L 3781.4 3236.359 M 3778.41 3236.359 L 3778.41 3232.069 M 3776.37 3234.929 L 3778.41 3232.889 M 3777.6 3233.709 L 3776.16 3232.069~none~gge106~~0~#@$TRACK~1~3~~3795 3223.039 3775 3223.039~gge107~0#@$TRACK~1~3~~3775 3223.039 3775 3220.039~gge108~0#@$TRACK~1~3~~3775 3220.039 3775 3217.039~gge109~0#@$TRACK~1~3~~3775 3217.039 3795 3217.039~gge110~0#@$TRACK~1~3~~3795 3217.039 3795 3220.039~gge111~0#@$TRACK~1~3~~3795 3220.039 3795 3223.039~gge112~0#@$TRACK~1~3~~3775 3220.039 3774 3220.039~gge113~0#@$TRACK~1~3~~3795 3220.039 3796 3220.039~gge114~0#@$PAD~ELLIPSE~3800~3220.039~7.4~7.4~11~+3.3V~1~1.77~~180~gge115~0~~Y~0~0~0.4~3800,3220.039#@$PAD~ELLIPSE~3770~3220.039~7.4~7.4~11~TH_EXT-~2~1.77~~180~gge116~0~~Y~0~0~0.4~3770,3220.039", + "LIB~3775~3250.039~package`AXIAL-0.3`~270~~gge117~1~b9efc06d0fb742f99a478d48de211eb9~1548710936~0~f222f07e8c464b76#@$TEXT~P~3786.15~3270.539~0.6~90~0~3~~4.5~TH_EXT_R3~M 3780.0001 3269.109 L 3784.2901 3269.109 M 3780.0001 3270.539 L 3780.0001 3267.679 M 3780.0001 3266.329 L 3784.2901 3266.329 M 3780.0001 3263.459 L 3784.2901 3263.459 M 3782.0401 3266.329 L 3782.0401 3263.459 M 3785.7201 3262.109 L 3785.7201 3258.429 M 3780.0001 3257.079 L 3784.2901 3257.079 M 3780.0001 3257.079 L 3780.0001 3254.419 M 3782.0401 3257.079 L 3782.0401 3255.439 M 3784.2901 3257.079 L 3784.2901 3254.419 M 3780.0001 3253.069 L 3784.2901 3250.209 M 3780.0001 3250.209 L 3784.2901 3253.069 M 3780.0001 3247.429 L 3784.2901 3247.429 M 3780.0001 3248.859 L 3780.0001 3245.989 M 3785.7201 3244.639 L 3785.7201 3240.959 M 3780.0001 3239.609 L 3784.2901 3239.609 M 3780.0001 3239.609 L 3780.0001 3237.769 L 3780.2001 3237.159 L 3780.4001 3236.949 L 3780.8101 3236.749 L 3781.2201 3236.749 L 3781.6301 3236.949 L 3781.8401 3237.159 L 3782.0401 3237.769 L 3782.0401 3239.609 M 3782.0401 3238.179 L 3784.2901 3236.749 M 3780.0001 3234.989 L 3780.0001 3232.739 L 3781.6301 3233.969 L 3781.6301 3233.349 L 3781.8401 3232.939 L 3782.0401 3232.739 L 3782.6501 3232.539 L 3783.0601 3232.539 L 3783.6801 3232.739 L 3784.0901 3233.149 L 3784.2901 3233.759 L 3784.2901 3234.379 L 3784.0901 3234.989 L 3783.8801 3235.189 L 3783.4701 3235.399~~gge118~~0~#@$TEXT~N~3785.17~3250.039~0.6~270~0~3~~4.5~10k~M 3790.51 3250.039 L 3790.71 3250.449 L 3791.32 3251.059 L 3787.03 3251.059 M 3791.32 3253.639 L 3791.12 3253.029 L 3790.51 3252.619 L 3789.48 3252.409 L 3788.87 3252.409 L 3787.85 3252.619 L 3787.23 3253.029 L 3787.03 3253.639 L 3787.03 3254.049 L 3787.23 3254.659 L 3787.85 3255.069 L 3788.87 3255.279 L 3789.48 3255.279 L 3790.51 3255.069 L 3791.12 3254.659 L 3791.32 3254.049 L 3791.32 3253.639 M 3791.32 3256.629 L 3787.03 3256.629 M 3789.89 3258.669 L 3787.85 3256.629 M 3788.67 3257.439 L 3787.03 3258.879~none~gge119~~0~#@$TRACK~1~3~~3778 3240.039 3778 3260.039~gge120~0#@$TRACK~1~3~~3778 3260.039 3775 3260.039~gge121~0#@$TRACK~1~3~~3775 3260.039 3772 3260.039~gge122~0#@$TRACK~1~3~~3772 3260.039 3772 3240.039~gge123~0#@$TRACK~1~3~~3772 3240.039 3775 3240.039~gge124~0#@$TRACK~1~3~~3775 3240.039 3778 3240.039~gge125~0#@$TRACK~1~3~~3775 3260.039 3775 3261.039~gge126~0#@$TRACK~1~3~~3775 3240.039 3775 3239.039~gge127~0#@$PAD~ELLIPSE~3775~3235.039~7.4~7.4~11~TH_EXT-~1~1.77~~270~gge128~0~~Y~0~0~0.4~3775,3235.039#@$PAD~ELLIPSE~3775~3265.039~7.4~7.4~11~GND~2~1.77~~270~gge129~0~~Y~0~0~0.4~3775,3265.039", + "LIB~3685~3300~package`PHOENIX-2PIN-5.08MM`~~~gge130~1~cee0def10c584f32ac2d8c27339b6535~1571571027~0~d953ce59ee18cb42#@$TEXT~P~3690~3328.651~0.6~0~0~3~~4.5~TH2~M 3691.43 3322.5 L 3691.43 3326.79 M 3690 3322.5 L 3692.86 3322.5 M 3694.21 3322.5 L 3694.21 3326.79 M 3697.08 3322.5 L 3697.08 3326.79 M 3694.21 3324.54 L 3697.08 3324.54 M 3698.63 3323.52 L 3698.63 3323.31 L 3698.84 3322.9 L 3699.04 3322.7 L 3699.45 3322.5 L 3700.27 3322.5 L 3700.68 3322.7 L 3700.88 3322.9 L 3701.09 3323.31 L 3701.09 3323.72 L 3700.88 3324.13 L 3700.47 3324.75 L 3698.43 3326.79 L 3701.29 3326.79~~gge131~~0~#@$TEXT~N~3695~3275.361~0.6~0~0~3~~4.5~Phoenix-2pin-5.08mm~M 3695 3269.21 L 3695 3273.5 M 3695 3269.21 L 3696.84 3269.21 L 3697.45 3269.41 L 3697.66 3269.61 L 3697.86 3270.02 L 3697.86 3270.64 L 3697.66 3271.05 L 3697.45 3271.25 L 3696.84 3271.46 L 3695 3271.46 M 3699.21 3269.21 L 3699.21 3273.5 M 3699.21 3271.46 L 3699.83 3270.84 L 3700.24 3270.64 L 3700.85 3270.64 L 3701.26 3270.84 L 3701.46 3271.46 L 3701.46 3273.5 M 3703.84 3270.64 L 3703.43 3270.84 L 3703.02 3271.25 L 3702.81 3271.86 L 3702.81 3272.27 L 3703.02 3272.89 L 3703.43 3273.3 L 3703.84 3273.5 L 3704.45 3273.5 L 3704.86 3273.3 L 3705.27 3272.89 L 3705.47 3272.27 L 3705.47 3271.86 L 3705.27 3271.25 L 3704.86 3270.84 L 3704.45 3270.64 L 3703.84 3270.64 M 3706.82 3271.86 L 3709.28 3271.86 L 3709.28 3271.46 L 3709.07 3271.05 L 3708.87 3270.84 L 3708.46 3270.64 L 3707.85 3270.64 L 3707.44 3270.84 L 3707.03 3271.25 L 3706.82 3271.86 L 3706.82 3272.27 L 3707.03 3272.89 L 3707.44 3273.3 L 3707.85 3273.5 L 3708.46 3273.5 L 3708.87 3273.3 L 3709.28 3272.89 M 3710.63 3270.64 L 3710.63 3273.5 M 3710.63 3271.46 L 3711.24 3270.84 L 3711.65 3270.64 L 3712.26 3270.64 L 3712.67 3270.84 L 3712.88 3271.46 L 3712.88 3273.5 M 3714.23 3269.21 L 3714.43 3269.41 L 3714.64 3269.21 L 3714.43 3269 L 3714.23 3269.21 M 3714.43 3270.64 L 3714.43 3273.5 M 3715.99 3270.64 L 3718.24 3273.5 M 3718.24 3270.64 L 3715.99 3273.5 M 3719.59 3271.66 L 3723.27 3271.66 M 3724.82 3270.23 L 3724.82 3270.02 L 3725.03 3269.61 L 3725.23 3269.41 L 3725.64 3269.21 L 3726.46 3269.21 L 3726.87 3269.41 L 3727.07 3269.61 L 3727.28 3270.02 L 3727.28 3270.43 L 3727.07 3270.84 L 3726.66 3271.46 L 3724.62 3273.5 L 3727.48 3273.5 M 3728.83 3270.64 L 3728.83 3274.93 M 3728.83 3271.25 L 3729.24 3270.84 L 3729.65 3270.64 L 3730.26 3270.64 L 3730.67 3270.84 L 3731.08 3271.25 L 3731.29 3271.86 L 3731.29 3272.27 L 3731.08 3272.89 L 3730.67 3273.3 L 3730.26 3273.5 L 3729.65 3273.5 L 3729.24 3273.3 L 3728.83 3272.89 M 3732.64 3269.21 L 3732.84 3269.41 L 3733.05 3269.21 L 3732.84 3269 L 3732.64 3269.21 M 3732.84 3270.64 L 3732.84 3273.5 M 3734.4 3270.64 L 3734.4 3273.5 M 3734.4 3271.46 L 3735.01 3270.84 L 3735.42 3270.64 L 3736.03 3270.64 L 3736.44 3270.84 L 3736.65 3271.46 L 3736.65 3273.5 M 3738 3271.66 L 3741.68 3271.66 M 3745.48 3269.21 L 3743.44 3269.21 L 3743.23 3271.05 L 3743.44 3270.84 L 3744.05 3270.64 L 3744.66 3270.64 L 3745.28 3270.84 L 3745.69 3271.25 L 3745.89 3271.86 L 3745.89 3272.27 L 3745.69 3272.89 L 3745.28 3273.3 L 3744.66 3273.5 L 3744.05 3273.5 L 3743.44 3273.3 L 3743.23 3273.09 L 3743.03 3272.68 M 3747.45 3272.48 L 3747.24 3272.68 L 3747.45 3272.89 L 3747.65 3272.68 L 3747.45 3272.48 M 3750.23 3269.21 L 3749.61 3269.41 L 3749.2 3270.02 L 3749 3271.05 L 3749 3271.66 L 3749.2 3272.68 L 3749.61 3273.3 L 3750.23 3273.5 L 3750.64 3273.5 L 3751.25 3273.3 L 3751.66 3272.68 L 3751.86 3271.66 L 3751.86 3271.05 L 3751.66 3270.02 L 3751.25 3269.41 L 3750.64 3269.21 L 3750.23 3269.21 M 3754.24 3269.21 L 3753.62 3269.41 L 3753.42 3269.82 L 3753.42 3270.23 L 3753.62 3270.64 L 3754.03 3270.84 L 3754.85 3271.05 L 3755.46 3271.25 L 3755.87 3271.66 L 3756.08 3272.07 L 3756.08 3272.68 L 3755.87 3273.09 L 3755.67 3273.3 L 3755.05 3273.5 L 3754.24 3273.5 L 3753.62 3273.3 L 3753.42 3273.09 L 3753.21 3272.68 L 3753.21 3272.07 L 3753.42 3271.66 L 3753.83 3271.25 L 3754.44 3271.05 L 3755.26 3270.84 L 3755.67 3270.64 L 3755.87 3270.23 L 3755.87 3269.82 L 3755.67 3269.41 L 3755.05 3269.21 L 3754.24 3269.21 M 3757.43 3270.64 L 3757.43 3273.5 M 3757.43 3271.46 L 3758.04 3270.84 L 3758.45 3270.64 L 3759.06 3270.64 L 3759.47 3270.84 L 3759.68 3271.46 L 3759.68 3273.5 M 3759.68 3271.46 L 3760.29 3270.84 L 3760.7 3270.64 L 3761.31 3270.64 L 3761.72 3270.84 L 3761.93 3271.46 L 3761.93 3273.5 M 3763.28 3270.64 L 3763.28 3273.5 M 3763.28 3271.46 L 3763.89 3270.84 L 3764.3 3270.64 L 3764.91 3270.64 L 3765.32 3270.84 L 3765.53 3271.46 L 3765.53 3273.5 M 3765.53 3271.46 L 3766.14 3270.84 L 3766.55 3270.64 L 3767.16 3270.64 L 3767.57 3270.84 L 3767.78 3271.46 L 3767.78 3273.5~none~gge132~~0~#@$TRACK~1~3~~3675 3280 3715 3280 3715 3320 3675 3320 3675 3280~gge133~0#@$TRACK~1~3~~3695 3315 3715 3315 3715 3320 3695 3320 3695 3315~gge134~0#@$TRACK~1~3~~3675 3315 3695 3315 3695 3320 3675 3320 3675 3315~gge135~0#@$PAD~RECT~3685~3300~8.6614~8.6614~11~GND~1~2.5~3680.6693 3295.6693 3689.3307 3295.6693 3689.3307 3304.3307 3680.6693 3304.3307~0~gge136~0~~Y~0~0~0.4~3685,3300#@$PAD~ELLIPSE~3705~3300~8.6614~8.6614~11~TH2+~2~2.5~~0~gge137~0~~Y~0~0~0.4~3705,3300", + "LIB~3542.5~3127.5~package`PHOENIX-2PIN-5.08MM`~270~~gge138~1~cee0def10c584f32ac2d8c27339b6535~1571571027~0~1593fc5a36bf2a31#@$TEXT~P~3513.85~3129.42~0.6~270~0~3~~4.5~5V_IN~M 3520 3131.87 L 3520 3129.83 L 3518.16 3129.62 L 3518.37 3129.83 L 3518.57 3130.44 L 3518.57 3131.06 L 3518.37 3131.67 L 3517.96 3132.08 L 3517.35 3132.28 L 3516.94 3132.28 L 3516.32 3132.08 L 3515.91 3131.67 L 3515.71 3131.06 L 3515.71 3130.44 L 3515.91 3129.83 L 3516.12 3129.62 L 3516.53 3129.42 M 3520 3133.63 L 3515.71 3135.27 M 3520 3136.91 L 3515.71 3135.27 M 3514.28 3138.26 L 3514.28 3141.94 M 3520 3143.29 L 3515.71 3143.29 M 3520 3144.64 L 3515.71 3144.64 M 3520 3144.64 L 3515.71 3147.5 M 3520 3147.5 L 3515.71 3147.5~~gge139~~0~#@$TEXT~N~3567.14~3137.5~0.6~270~0~3~~4.5~Phoenix-2pin-5.08mm~M 3573.29 3137.5 L 3569 3137.5 M 3573.29 3137.5 L 3573.29 3139.34 L 3573.09 3139.95 L 3572.89 3140.16 L 3572.48 3140.36 L 3571.86 3140.36 L 3571.45 3140.16 L 3571.25 3139.95 L 3571.04 3139.34 L 3571.04 3137.5 M 3573.29 3141.71 L 3569 3141.71 M 3571.04 3141.71 L 3571.66 3142.33 L 3571.86 3142.74 L 3571.86 3143.35 L 3571.66 3143.76 L 3571.04 3143.96 L 3569 3143.96 M 3571.86 3146.34 L 3571.66 3145.93 L 3571.25 3145.52 L 3570.64 3145.31 L 3570.23 3145.31 L 3569.61 3145.52 L 3569.2 3145.93 L 3569 3146.34 L 3569 3146.95 L 3569.2 3147.36 L 3569.61 3147.77 L 3570.23 3147.97 L 3570.64 3147.97 L 3571.25 3147.77 L 3571.66 3147.36 L 3571.86 3146.95 L 3571.86 3146.34 M 3570.64 3149.32 L 3570.64 3151.78 L 3571.04 3151.78 L 3571.45 3151.57 L 3571.66 3151.37 L 3571.86 3150.96 L 3571.86 3150.35 L 3571.66 3149.94 L 3571.25 3149.53 L 3570.64 3149.32 L 3570.23 3149.32 L 3569.61 3149.53 L 3569.2 3149.94 L 3569 3150.35 L 3569 3150.96 L 3569.2 3151.37 L 3569.61 3151.78 M 3571.86 3153.13 L 3569 3153.13 M 3571.04 3153.13 L 3571.66 3153.74 L 3571.86 3154.15 L 3571.86 3154.76 L 3571.66 3155.17 L 3571.04 3155.38 L 3569 3155.38 M 3573.29 3156.73 L 3573.09 3156.93 L 3573.29 3157.14 L 3573.5 3156.93 L 3573.29 3156.73 M 3571.86 3156.93 L 3569 3156.93 M 3571.86 3158.49 L 3569 3160.74 M 3571.86 3160.74 L 3569 3158.49 M 3570.84 3162.09 L 3570.84 3165.77 M 3572.27 3167.32 L 3572.48 3167.32 L 3572.89 3167.53 L 3573.09 3167.73 L 3573.29 3168.14 L 3573.29 3168.96 L 3573.09 3169.37 L 3572.89 3169.57 L 3572.48 3169.78 L 3572.07 3169.78 L 3571.66 3169.57 L 3571.04 3169.16 L 3569 3167.12 L 3569 3169.98 M 3571.86 3171.33 L 3567.57 3171.33 M 3571.25 3171.33 L 3571.66 3171.74 L 3571.86 3172.15 L 3571.86 3172.76 L 3571.66 3173.17 L 3571.25 3173.58 L 3570.64 3173.79 L 3570.23 3173.79 L 3569.61 3173.58 L 3569.2 3173.17 L 3569 3172.76 L 3569 3172.15 L 3569.2 3171.74 L 3569.61 3171.33 M 3573.29 3175.14 L 3573.09 3175.34 L 3573.29 3175.55 L 3573.5 3175.34 L 3573.29 3175.14 M 3571.86 3175.34 L 3569 3175.34 M 3571.86 3176.9 L 3569 3176.9 M 3571.04 3176.9 L 3571.66 3177.51 L 3571.86 3177.92 L 3571.86 3178.53 L 3571.66 3178.94 L 3571.04 3179.15 L 3569 3179.15 M 3570.84 3180.5 L 3570.84 3184.18 M 3573.29 3187.98 L 3573.29 3185.94 L 3571.45 3185.73 L 3571.66 3185.94 L 3571.86 3186.55 L 3571.86 3187.16 L 3571.66 3187.78 L 3571.25 3188.19 L 3570.64 3188.39 L 3570.23 3188.39 L 3569.61 3188.19 L 3569.2 3187.78 L 3569 3187.16 L 3569 3186.55 L 3569.2 3185.94 L 3569.41 3185.73 L 3569.82 3185.53 M 3570.02 3189.95 L 3569.82 3189.74 L 3569.61 3189.95 L 3569.82 3190.15 L 3570.02 3189.95 M 3573.29 3192.73 L 3573.09 3192.11 L 3572.48 3191.7 L 3571.45 3191.5 L 3570.84 3191.5 L 3569.82 3191.7 L 3569.2 3192.11 L 3569 3192.73 L 3569 3193.14 L 3569.2 3193.75 L 3569.82 3194.16 L 3570.84 3194.36 L 3571.45 3194.36 L 3572.48 3194.16 L 3573.09 3193.75 L 3573.29 3193.14 L 3573.29 3192.73 M 3573.29 3196.74 L 3573.09 3196.12 L 3572.68 3195.92 L 3572.27 3195.92 L 3571.86 3196.12 L 3571.66 3196.53 L 3571.45 3197.35 L 3571.25 3197.96 L 3570.84 3198.37 L 3570.43 3198.58 L 3569.82 3198.58 L 3569.41 3198.37 L 3569.2 3198.17 L 3569 3197.55 L 3569 3196.74 L 3569.2 3196.12 L 3569.41 3195.92 L 3569.82 3195.71 L 3570.43 3195.71 L 3570.84 3195.92 L 3571.25 3196.33 L 3571.45 3196.94 L 3571.66 3197.76 L 3571.86 3198.17 L 3572.27 3198.37 L 3572.68 3198.37 L 3573.09 3198.17 L 3573.29 3197.55 L 3573.29 3196.74 M 3571.86 3199.93 L 3569 3199.93 M 3571.04 3199.93 L 3571.66 3200.54 L 3571.86 3200.95 L 3571.86 3201.56 L 3571.66 3201.97 L 3571.04 3202.18 L 3569 3202.18 M 3571.04 3202.18 L 3571.66 3202.79 L 3571.86 3203.2 L 3571.86 3203.81 L 3571.66 3204.22 L 3571.04 3204.43 L 3569 3204.43 M 3571.86 3205.78 L 3569 3205.78 M 3571.04 3205.78 L 3571.66 3206.39 L 3571.86 3206.8 L 3571.86 3207.41 L 3571.66 3207.82 L 3571.04 3208.03 L 3569 3208.03 M 3571.04 3208.03 L 3571.66 3208.64 L 3571.86 3209.05 L 3571.86 3209.66 L 3571.66 3210.07 L 3571.04 3210.28 L 3569 3210.28~none~gge140~~0~#@$TRACK~1~3~~3562.5 3117.5 3562.5 3157.5 3522.5 3157.5 3522.5 3117.5 3562.5 3117.5~gge141~0#@$TRACK~1~3~~3527.5 3137.5 3527.5 3157.5 3522.5 3157.5 3522.5 3137.5 3527.5 3137.5~gge142~0#@$TRACK~1~3~~3527.5 3117.5 3527.5 3137.5 3522.5 3137.5 3522.5 3117.5 3527.5 3117.5~gge143~0#@$PAD~RECT~3542.5~3127.5~8.6614~8.6614~11~GND~1~2.5~3546.8307 3123.1693 3546.8307 3131.8307 3538.1693 3131.8307 3538.1693 3123.1693~270~gge144~0~~Y~0~0~0.4~3542.5,3127.5#@$PAD~ELLIPSE~3542.5~3147.5~8.6614~8.6614~11~SWITCH_1_2~2~2.5~~270~gge145~0~~Y~0~0~0.4~3542.5,3147.5", + "LIB~3590~3300~package`PHOENIX-2PIN-5.08MM`~~~gge146~1~cee0def10c584f32ac2d8c27339b6535~1571571027~0~79407ed2f7829b77#@$TEXT~P~3595~3328.651~0.6~0~0~3~~4.5~TH1~M 3596.4299 3322.5 L 3596.4299 3326.79 M 3594.9999 3322.5 L 3597.8599 3322.5 M 3599.2099 3322.5 L 3599.2099 3326.79 M 3602.0799 3322.5 L 3602.0799 3326.79 M 3599.2099 3324.54 L 3602.0799 3324.54 M 3603.4299 3323.31 L 3603.8399 3323.11 L 3604.4499 3322.5 L 3604.4499 3326.79~~gge147~~0~#@$TEXT~N~3600~3275.361~0.6~0~0~3~~4.5~Phoenix-2pin-5.08mm~M 3600 3269.21 L 3600 3273.5 M 3600 3269.21 L 3601.84 3269.21 L 3602.45 3269.41 L 3602.66 3269.61 L 3602.86 3270.02 L 3602.86 3270.64 L 3602.66 3271.05 L 3602.45 3271.25 L 3601.84 3271.46 L 3600 3271.46 M 3604.21 3269.21 L 3604.21 3273.5 M 3604.21 3271.46 L 3604.83 3270.84 L 3605.24 3270.64 L 3605.85 3270.64 L 3606.26 3270.84 L 3606.46 3271.46 L 3606.46 3273.5 M 3608.84 3270.64 L 3608.43 3270.84 L 3608.02 3271.25 L 3607.81 3271.86 L 3607.81 3272.27 L 3608.02 3272.89 L 3608.43 3273.3 L 3608.84 3273.5 L 3609.45 3273.5 L 3609.86 3273.3 L 3610.27 3272.89 L 3610.47 3272.27 L 3610.47 3271.86 L 3610.27 3271.25 L 3609.86 3270.84 L 3609.45 3270.64 L 3608.84 3270.64 M 3611.82 3271.86 L 3614.28 3271.86 L 3614.28 3271.46 L 3614.07 3271.05 L 3613.87 3270.84 L 3613.46 3270.64 L 3612.85 3270.64 L 3612.44 3270.84 L 3612.03 3271.25 L 3611.82 3271.86 L 3611.82 3272.27 L 3612.03 3272.89 L 3612.44 3273.3 L 3612.85 3273.5 L 3613.46 3273.5 L 3613.87 3273.3 L 3614.28 3272.89 M 3615.63 3270.64 L 3615.63 3273.5 M 3615.63 3271.46 L 3616.24 3270.84 L 3616.65 3270.64 L 3617.26 3270.64 L 3617.67 3270.84 L 3617.88 3271.46 L 3617.88 3273.5 M 3619.23 3269.21 L 3619.43 3269.41 L 3619.64 3269.21 L 3619.43 3269 L 3619.23 3269.21 M 3619.43 3270.64 L 3619.43 3273.5 M 3620.99 3270.64 L 3623.24 3273.5 M 3623.24 3270.64 L 3620.99 3273.5 M 3624.59 3271.66 L 3628.27 3271.66 M 3629.82 3270.23 L 3629.82 3270.02 L 3630.03 3269.61 L 3630.23 3269.41 L 3630.64 3269.21 L 3631.46 3269.21 L 3631.87 3269.41 L 3632.07 3269.61 L 3632.28 3270.02 L 3632.28 3270.43 L 3632.07 3270.84 L 3631.66 3271.46 L 3629.62 3273.5 L 3632.48 3273.5 M 3633.83 3270.64 L 3633.83 3274.93 M 3633.83 3271.25 L 3634.24 3270.84 L 3634.65 3270.64 L 3635.26 3270.64 L 3635.67 3270.84 L 3636.08 3271.25 L 3636.29 3271.86 L 3636.29 3272.27 L 3636.08 3272.89 L 3635.67 3273.3 L 3635.26 3273.5 L 3634.65 3273.5 L 3634.24 3273.3 L 3633.83 3272.89 M 3637.64 3269.21 L 3637.84 3269.41 L 3638.05 3269.21 L 3637.84 3269 L 3637.64 3269.21 M 3637.84 3270.64 L 3637.84 3273.5 M 3639.4 3270.64 L 3639.4 3273.5 M 3639.4 3271.46 L 3640.01 3270.84 L 3640.42 3270.64 L 3641.03 3270.64 L 3641.44 3270.84 L 3641.65 3271.46 L 3641.65 3273.5 M 3643 3271.66 L 3646.68 3271.66 M 3650.48 3269.21 L 3648.44 3269.21 L 3648.23 3271.05 L 3648.44 3270.84 L 3649.05 3270.64 L 3649.66 3270.64 L 3650.28 3270.84 L 3650.69 3271.25 L 3650.89 3271.86 L 3650.89 3272.27 L 3650.69 3272.89 L 3650.28 3273.3 L 3649.66 3273.5 L 3649.05 3273.5 L 3648.44 3273.3 L 3648.23 3273.09 L 3648.03 3272.68 M 3652.45 3272.48 L 3652.24 3272.68 L 3652.45 3272.89 L 3652.65 3272.68 L 3652.45 3272.48 M 3655.23 3269.21 L 3654.61 3269.41 L 3654.2 3270.02 L 3654 3271.05 L 3654 3271.66 L 3654.2 3272.68 L 3654.61 3273.3 L 3655.23 3273.5 L 3655.64 3273.5 L 3656.25 3273.3 L 3656.66 3272.68 L 3656.86 3271.66 L 3656.86 3271.05 L 3656.66 3270.02 L 3656.25 3269.41 L 3655.64 3269.21 L 3655.23 3269.21 M 3659.24 3269.21 L 3658.62 3269.41 L 3658.42 3269.82 L 3658.42 3270.23 L 3658.62 3270.64 L 3659.03 3270.84 L 3659.85 3271.05 L 3660.46 3271.25 L 3660.87 3271.66 L 3661.08 3272.07 L 3661.08 3272.68 L 3660.87 3273.09 L 3660.67 3273.3 L 3660.05 3273.5 L 3659.24 3273.5 L 3658.62 3273.3 L 3658.42 3273.09 L 3658.21 3272.68 L 3658.21 3272.07 L 3658.42 3271.66 L 3658.83 3271.25 L 3659.44 3271.05 L 3660.26 3270.84 L 3660.67 3270.64 L 3660.87 3270.23 L 3660.87 3269.82 L 3660.67 3269.41 L 3660.05 3269.21 L 3659.24 3269.21 M 3662.43 3270.64 L 3662.43 3273.5 M 3662.43 3271.46 L 3663.04 3270.84 L 3663.45 3270.64 L 3664.06 3270.64 L 3664.47 3270.84 L 3664.68 3271.46 L 3664.68 3273.5 M 3664.68 3271.46 L 3665.29 3270.84 L 3665.7 3270.64 L 3666.31 3270.64 L 3666.72 3270.84 L 3666.93 3271.46 L 3666.93 3273.5 M 3668.28 3270.64 L 3668.28 3273.5 M 3668.28 3271.46 L 3668.89 3270.84 L 3669.3 3270.64 L 3669.91 3270.64 L 3670.32 3270.84 L 3670.53 3271.46 L 3670.53 3273.5 M 3670.53 3271.46 L 3671.14 3270.84 L 3671.55 3270.64 L 3672.16 3270.64 L 3672.57 3270.84 L 3672.78 3271.46 L 3672.78 3273.5~none~gge148~~0~#@$TRACK~1~3~~3580 3280 3620 3280 3620 3320 3580 3320 3580 3280~gge149~0#@$TRACK~1~3~~3600 3315 3620 3315 3620 3320 3600 3320 3600 3315~gge150~0#@$TRACK~1~3~~3580 3315 3600 3315 3600 3320 3580 3320 3580 3315~gge151~0#@$PAD~RECT~3590~3300~8.6614~8.6614~11~GND~1~2.5~3585.6693 3295.6693 3594.3307 3295.6693 3594.3307 3304.3307 3585.6693 3304.3307~0~gge152~0~~Y~0~0~0.4~3590,3300#@$PAD~ELLIPSE~3610~3300~8.6614~8.6614~11~TH1+~2~2.5~~0~gge153~0~~Y~0~0~0.4~3610,3300", + "LIB~3685~3250~package`AXIAL-0.3`~270~~gge154~1~b9efc06d0fb742f99a478d48de211eb9~1548710936~0~10c992c37b4406e3#@$TEXT~P~3696.15~3259.75~0.6~90~0~3~~4.5~TH2_R3~M 3690.0001 3258.32 L 3694.2901 3258.32 M 3690.0001 3259.75 L 3690.0001 3256.89 M 3690.0001 3255.54 L 3694.2901 3255.54 M 3690.0001 3252.67 L 3694.2901 3252.67 M 3692.0401 3255.54 L 3692.0401 3252.67 M 3691.0201 3251.12 L 3690.8101 3251.12 L 3690.4001 3250.91 L 3690.2001 3250.71 L 3690.0001 3250.3 L 3690.0001 3249.48 L 3690.2001 3249.07 L 3690.4001 3248.87 L 3690.8101 3248.66 L 3691.2201 3248.66 L 3691.6301 3248.87 L 3692.2501 3249.28 L 3694.2901 3251.32 L 3694.2901 3248.46 M 3695.7201 3247.11 L 3695.7201 3243.43 M 3690.0001 3242.08 L 3694.2901 3242.08 M 3690.0001 3242.08 L 3690.0001 3240.24 L 3690.2001 3239.62 L 3690.4001 3239.42 L 3690.8101 3239.21 L 3691.2201 3239.21 L 3691.6301 3239.42 L 3691.8401 3239.62 L 3692.0401 3240.24 L 3692.0401 3242.08 M 3692.0401 3240.65 L 3694.2901 3239.21 M 3690.0001 3237.45 L 3690.0001 3235.2 L 3691.6301 3236.43 L 3691.6301 3235.82 L 3691.8401 3235.41 L 3692.0401 3235.2 L 3692.6501 3235 L 3693.0601 3235 L 3693.6801 3235.2 L 3694.0901 3235.61 L 3694.2901 3236.23 L 3694.2901 3236.84 L 3694.0901 3237.45 L 3693.8801 3237.66 L 3693.4701 3237.86~~gge155~~0~#@$TEXT~N~3695.17~3250~0.6~270~0~3~~4.5~10k~M 3700.51 3250 L 3700.71 3250.41 L 3701.32 3251.02 L 3697.03 3251.02 M 3701.32 3253.6 L 3701.12 3252.99 L 3700.51 3252.58 L 3699.48 3252.37 L 3698.87 3252.37 L 3697.85 3252.58 L 3697.23 3252.99 L 3697.03 3253.6 L 3697.03 3254.01 L 3697.23 3254.62 L 3697.85 3255.03 L 3698.87 3255.24 L 3699.48 3255.24 L 3700.51 3255.03 L 3701.12 3254.62 L 3701.32 3254.01 L 3701.32 3253.6 M 3701.32 3256.59 L 3697.03 3256.59 M 3699.89 3258.63 L 3697.85 3256.59 M 3698.67 3257.4 L 3697.03 3258.84~none~gge156~~0~#@$TRACK~1~3~~3688 3240 3688 3260~gge157~0#@$TRACK~1~3~~3688 3260 3685 3260~gge158~0#@$TRACK~1~3~~3685 3260 3682 3260~gge159~0#@$TRACK~1~3~~3682 3260 3682 3240~gge160~0#@$TRACK~1~3~~3682 3240 3685 3240~gge161~0#@$TRACK~1~3~~3685 3240 3688 3240~gge162~0#@$TRACK~1~3~~3685 3260 3685 3261~gge163~0#@$TRACK~1~3~~3685 3240 3685 3239~gge164~0#@$PAD~ELLIPSE~3685~3235~7.4~7.4~11~TH2-~1~1.77~~270~gge165~0~~Y~0~0~0.4~3685,3235#@$PAD~ELLIPSE~3685~3265~7.4~7.4~11~GND~2~1.77~~270~gge166~0~~Y~0~0~0.4~3685,3265", + "LIB~3590~3250~package`AXIAL-0.3`~270~~gge167~1~b9efc06d0fb742f99a478d48de211eb9~1548710936~0~e3a4e5e7649585ad#@$TEXT~P~3601.15~3260.41~0.6~90~0~3~~4.5~TH1_R3~M 3595.0001 3258.98 L 3599.2901 3258.98 M 3595.0001 3260.41 L 3595.0001 3257.55 M 3595.0001 3256.2 L 3599.2901 3256.2 M 3595.0001 3253.33 L 3599.2901 3253.33 M 3597.0401 3256.2 L 3597.0401 3253.33 M 3595.8101 3251.98 L 3595.6101 3251.57 L 3595.0001 3250.96 L 3599.2901 3250.96 M 3600.7201 3249.61 L 3600.7201 3245.93 M 3595.0001 3244.58 L 3599.2901 3244.58 M 3595.0001 3244.58 L 3595.0001 3242.74 L 3595.2001 3242.12 L 3595.4001 3241.92 L 3595.8101 3241.71 L 3596.2201 3241.71 L 3596.6301 3241.92 L 3596.8401 3242.12 L 3597.0401 3242.74 L 3597.0401 3244.58 M 3597.0401 3243.15 L 3599.2901 3241.71 M 3595.0001 3239.96 L 3595.0001 3237.71 L 3596.6301 3238.93 L 3596.6301 3238.32 L 3596.8401 3237.91 L 3597.0401 3237.71 L 3597.6501 3237.5 L 3598.0601 3237.5 L 3598.6801 3237.71 L 3599.0901 3238.11 L 3599.2901 3238.73 L 3599.2901 3239.34 L 3599.0901 3239.96 L 3598.8801 3240.16 L 3598.4701 3240.36~~gge168~~0~#@$TEXT~N~3600.17~3250~0.6~270~0~3~~4.5~10k~M 3605.51 3250 L 3605.71 3250.41 L 3606.32 3251.02 L 3602.03 3251.02 M 3606.32 3253.6 L 3606.12 3252.99 L 3605.51 3252.58 L 3604.48 3252.37 L 3603.87 3252.37 L 3602.85 3252.58 L 3602.23 3252.99 L 3602.03 3253.6 L 3602.03 3254.01 L 3602.23 3254.62 L 3602.85 3255.03 L 3603.87 3255.24 L 3604.48 3255.24 L 3605.51 3255.03 L 3606.12 3254.62 L 3606.32 3254.01 L 3606.32 3253.6 M 3606.32 3256.59 L 3602.03 3256.59 M 3604.89 3258.63 L 3602.85 3256.59 M 3603.67 3257.4 L 3602.03 3258.84~none~gge169~~0~#@$TRACK~1~3~~3593 3240 3593 3260~gge170~0#@$TRACK~1~3~~3593 3260 3590 3260~gge171~0#@$TRACK~1~3~~3590 3260 3587 3260~gge172~0#@$TRACK~1~3~~3587 3260 3587 3240~gge173~0#@$TRACK~1~3~~3587 3240 3590 3240~gge174~0#@$TRACK~1~3~~3590 3240 3593 3240~gge175~0#@$TRACK~1~3~~3590 3260 3590 3261~gge176~0#@$TRACK~1~3~~3590 3240 3590 3239~gge177~0#@$PAD~ELLIPSE~3590~3235~7.4~7.4~11~TH1-~1~1.77~~270~gge178~0~~Y~0~0~0.4~3590,3235#@$PAD~ELLIPSE~3590~3265~7.4~7.4~11~GND~2~1.77~~270~gge179~0~~Y~0~0~0.4~3590,3265", + "LIB~3610~3250~package`AXIAL-0.3`~270~~gge180~1~b9efc06d0fb742f99a478d48de211eb9~1548710936~0~c04ea579bd5f85dc#@$TEXT~P~3621.15~3261.07~0.6~90~0~3~~4.5~TH1_R1~M 3615.0001 3259.64 L 3619.2901 3259.64 M 3615.0001 3261.07 L 3615.0001 3258.21 M 3615.0001 3256.86 L 3619.2901 3256.86 M 3615.0001 3253.99 L 3619.2901 3253.99 M 3617.0401 3256.86 L 3617.0401 3253.99 M 3615.8101 3252.64 L 3615.6101 3252.23 L 3615.0001 3251.62 L 3619.2901 3251.62 M 3620.7201 3250.27 L 3620.7201 3246.59 M 3615.0001 3245.24 L 3619.2901 3245.24 M 3615.0001 3245.24 L 3615.0001 3243.4 L 3615.2001 3242.78 L 3615.4001 3242.58 L 3615.8101 3242.37 L 3616.2201 3242.37 L 3616.6301 3242.58 L 3616.8401 3242.78 L 3617.0401 3243.4 L 3617.0401 3245.24 M 3617.0401 3243.81 L 3619.2901 3242.37 M 3615.8101 3241.02 L 3615.6101 3240.62 L 3615.0001 3240 L 3619.2901 3240~~gge181~~0~#@$TEXT~N~3620.17~3250~0.6~270~0~3~~4.5~10k~M 3625.51 3250 L 3625.71 3250.41 L 3626.32 3251.02 L 3622.03 3251.02 M 3626.32 3253.6 L 3626.12 3252.99 L 3625.51 3252.58 L 3624.48 3252.37 L 3623.87 3252.37 L 3622.85 3252.58 L 3622.23 3252.99 L 3622.03 3253.6 L 3622.03 3254.01 L 3622.23 3254.62 L 3622.85 3255.03 L 3623.87 3255.24 L 3624.48 3255.24 L 3625.51 3255.03 L 3626.12 3254.62 L 3626.32 3254.01 L 3626.32 3253.6 M 3626.32 3256.59 L 3622.03 3256.59 M 3624.89 3258.63 L 3622.85 3256.59 M 3623.67 3257.4 L 3622.03 3258.84~none~gge182~~0~#@$TRACK~1~3~~3613 3240 3613 3260~gge183~0#@$TRACK~1~3~~3613 3260 3610 3260~gge184~0#@$TRACK~1~3~~3610 3260 3607 3260~gge185~0#@$TRACK~1~3~~3607 3260 3607 3240~gge186~0#@$TRACK~1~3~~3607 3240 3610 3240~gge187~0#@$TRACK~1~3~~3610 3240 3613 3240~gge188~0#@$TRACK~1~3~~3610 3260 3610 3261~gge189~0#@$TRACK~1~3~~3610 3240 3610 3239~gge190~0#@$PAD~ELLIPSE~3610~3235~7.4~7.4~11~+3.3V~1~1.77~~270~gge191~0~~Y~0~0~0.4~3610,3235#@$PAD~ELLIPSE~3610~3265~7.4~7.4~11~TH1+~2~1.77~~270~gge192~0~~Y~0~0~0.4~3610,3265", + "LIB~3600~3220~package`AXIAL-0.3`~180~~gge193~1~b9efc06d0fb742f99a478d48de211eb9~1548710936~0~08499375005bf27f#@$TEXT~P~3590~3216.151~0.6~0~0~3~~4.5~TH1_R2~M 3591.43 3210.0001 L 3591.43 3214.2901 M 3590 3210.0001 L 3592.86 3210.0001 M 3594.21 3210.0001 L 3594.21 3214.2901 M 3597.08 3210.0001 L 3597.08 3214.2901 M 3594.21 3212.0401 L 3597.08 3212.0401 M 3598.43 3210.8101 L 3598.84 3210.6101 L 3599.45 3210.0001 L 3599.45 3214.2901 M 3600.8 3215.7201 L 3604.48 3215.7201 M 3605.83 3210.0001 L 3605.83 3214.2901 M 3605.83 3210.0001 L 3607.67 3210.0001 L 3608.29 3210.2001 L 3608.49 3210.4001 L 3608.7 3210.8101 L 3608.7 3211.2201 L 3608.49 3211.6301 L 3608.29 3211.8401 L 3607.67 3212.0401 L 3605.83 3212.0401 M 3607.26 3212.0401 L 3608.7 3214.2901 M 3610.25 3211.0201 L 3610.25 3210.8101 L 3610.45 3210.4001 L 3610.66 3210.2001 L 3611.07 3210.0001 L 3611.89 3210.0001 L 3612.3 3210.2001 L 3612.5 3210.4001 L 3612.7 3210.8101 L 3612.7 3211.2201 L 3612.5 3211.6301 L 3612.09 3212.2501 L 3610.05 3214.2901 L 3612.91 3214.2901~~gge194~~0~#@$TEXT~N~3600~3230.17~0.6~180~0~3~~4.5~10k~M 3600 3235.51 L 3599.59 3235.71 L 3598.98 3236.32 L 3598.98 3232.03 M 3596.4 3236.32 L 3597.01 3236.12 L 3597.42 3235.51 L 3597.63 3234.48 L 3597.63 3233.87 L 3597.42 3232.85 L 3597.01 3232.23 L 3596.4 3232.03 L 3595.99 3232.03 L 3595.38 3232.23 L 3594.97 3232.85 L 3594.76 3233.87 L 3594.76 3234.48 L 3594.97 3235.51 L 3595.38 3236.12 L 3595.99 3236.32 L 3596.4 3236.32 M 3593.41 3236.32 L 3593.41 3232.03 M 3591.37 3234.89 L 3593.41 3232.85 M 3592.6 3233.67 L 3591.16 3232.03~none~gge195~~0~#@$TRACK~1~3~~3610 3223 3590 3223~gge196~0#@$TRACK~1~3~~3590 3223 3590 3220~gge197~0#@$TRACK~1~3~~3590 3220 3590 3217~gge198~0#@$TRACK~1~3~~3590 3217 3610 3217~gge199~0#@$TRACK~1~3~~3610 3217 3610 3220~gge200~0#@$TRACK~1~3~~3610 3220 3610 3223~gge201~0#@$TRACK~1~3~~3590 3220 3589 3220~gge202~0#@$TRACK~1~3~~3610 3220 3611 3220~gge203~0#@$PAD~ELLIPSE~3615~3220~7.4~7.4~11~+3.3V~1~1.77~~180~gge204~0~~Y~0~0~0.4~3615,3220#@$PAD~ELLIPSE~3585~3220~7.4~7.4~11~TH1-~2~1.77~~180~gge205~0~~Y~0~0~0.4~3585,3220", + "LIB~3900~3280~package`FUSE HOLDER 5X20MM`~180~~gge206~1~ef2785973486407d9676c08af7a6993a~1571579233~0~0164fa531c2672d8#@$TEXT~P~3897.5~3285~0.6~0~0~3~~4.5~F1~M 3897.5 3278.844 L 3897.5 3283.144 M 3897.5 3278.844 L 3900.16 3278.844 M 3897.5 3280.894 L 3899.14 3280.894 M 3901.51 3279.664 L 3901.92 3279.464 L 3902.53 3278.844 L 3902.53 3283.144~~gge207~~0~#@$TEXT~N~3900~3303.144~0.6~180~0~3~~4.5~Fuse Holder 5x20mm~M 3900 3309.3 L 3900 3305 M 3900 3309.3 L 3897.34 3309.3 M 3900 3307.25 L 3898.36 3307.25 M 3895.99 3307.87 L 3895.99 3305.82 L 3895.79 3305.21 L 3895.38 3305 L 3894.76 3305 L 3894.35 3305.21 L 3893.74 3305.82 M 3893.74 3307.87 L 3893.74 3305 M 3890.14 3307.25 L 3890.35 3307.66 L 3890.96 3307.87 L 3891.57 3307.87 L 3892.19 3307.66 L 3892.39 3307.25 L 3892.19 3306.84 L 3891.78 3306.64 L 3890.75 3306.43 L 3890.35 3306.23 L 3890.14 3305.82 L 3890.14 3305.62 L 3890.35 3305.21 L 3890.96 3305 L 3891.57 3305 L 3892.19 3305.21 L 3892.39 3305.62 M 3888.79 3306.64 L 3886.34 3306.64 L 3886.34 3307.05 L 3886.54 3307.46 L 3886.75 3307.66 L 3887.15 3307.87 L 3887.77 3307.87 L 3888.18 3307.66 L 3888.59 3307.25 L 3888.79 3306.64 L 3888.79 3306.23 L 3888.59 3305.62 L 3888.18 3305.21 L 3887.77 3305 L 3887.15 3305 L 3886.75 3305.21 L 3886.34 3305.62 M 3881.84 3309.3 L 3881.84 3305 M 3878.97 3309.3 L 3878.97 3305 M 3881.84 3307.25 L 3878.97 3307.25 M 3876.6 3307.87 L 3877.01 3307.66 L 3877.42 3307.25 L 3877.62 3306.64 L 3877.62 3306.23 L 3877.42 3305.62 L 3877.01 3305.21 L 3876.6 3305 L 3875.99 3305 L 3875.58 3305.21 L 3875.17 3305.62 L 3874.96 3306.23 L 3874.96 3306.64 L 3875.17 3307.25 L 3875.58 3307.66 L 3875.99 3307.87 L 3876.6 3307.87 M 3873.61 3309.3 L 3873.61 3305 M 3869.81 3309.3 L 3869.81 3305 M 3869.81 3307.25 L 3870.22 3307.66 L 3870.63 3307.87 L 3871.24 3307.87 L 3871.65 3307.66 L 3872.06 3307.25 L 3872.26 3306.64 L 3872.26 3306.23 L 3872.06 3305.62 L 3871.65 3305.21 L 3871.24 3305 L 3870.63 3305 L 3870.22 3305.21 L 3869.81 3305.62 M 3868.46 3306.64 L 3866 3306.64 L 3866 3307.05 L 3866.21 3307.46 L 3866.41 3307.66 L 3866.82 3307.87 L 3867.44 3307.87 L 3867.85 3307.66 L 3868.25 3307.25 L 3868.46 3306.64 L 3868.46 3306.23 L 3868.25 3305.62 L 3867.85 3305.21 L 3867.44 3305 L 3866.82 3305 L 3866.41 3305.21 L 3866 3305.62 M 3864.65 3307.87 L 3864.65 3305 M 3864.65 3306.64 L 3864.45 3307.25 L 3864.04 3307.66 L 3863.63 3307.87 L 3863.02 3307.87 M 3856.06 3309.3 L 3858.11 3309.3 L 3858.31 3307.46 L 3858.11 3307.66 L 3857.5 3307.87 L 3856.88 3307.87 L 3856.27 3307.66 L 3855.86 3307.25 L 3855.65 3306.64 L 3855.65 3306.23 L 3855.86 3305.62 L 3856.27 3305.21 L 3856.88 3305 L 3857.5 3305 L 3858.11 3305.21 L 3858.31 3305.41 L 3858.52 3305.82 M 3854.3 3307.87 L 3852.05 3305 M 3852.05 3307.87 L 3854.3 3305 M 3850.5 3308.28 L 3850.5 3308.48 L 3850.3 3308.89 L 3850.09 3309.09 L 3849.68 3309.3 L 3848.86 3309.3 L 3848.45 3309.09 L 3848.25 3308.89 L 3848.05 3308.48 L 3848.05 3308.07 L 3848.25 3307.66 L 3848.66 3307.05 L 3850.7 3305 L 3847.84 3305 M 3845.26 3309.3 L 3845.88 3309.09 L 3846.29 3308.48 L 3846.49 3307.46 L 3846.49 3306.84 L 3846.29 3305.82 L 3845.88 3305.21 L 3845.26 3305 L 3844.85 3305 L 3844.24 3305.21 L 3843.83 3305.82 L 3843.63 3306.84 L 3843.63 3307.46 L 3843.83 3308.48 L 3844.24 3309.09 L 3844.85 3309.3 L 3845.26 3309.3 M 3842.28 3307.87 L 3842.28 3305 M 3842.28 3307.05 L 3841.66 3307.66 L 3841.25 3307.87 L 3840.64 3307.87 L 3840.23 3307.66 L 3840.03 3307.05 L 3840.03 3305 M 3840.03 3307.05 L 3839.41 3307.66 L 3839 3307.87 L 3838.39 3307.87 L 3837.98 3307.66 L 3837.78 3307.05 L 3837.78 3305 M 3836.43 3307.87 L 3836.43 3305 M 3836.43 3307.05 L 3835.81 3307.66 L 3835.4 3307.87 L 3834.79 3307.87 L 3834.38 3307.66 L 3834.18 3307.05 L 3834.18 3305 M 3834.18 3307.05 L 3833.56 3307.66 L 3833.15 3307.87 L 3832.54 3307.87 L 3832.13 3307.66 L 3831.93 3307.05 L 3831.93 3305~none~gge208~~0~#@$TRACK~1~3~~3947.244 3298.504 3947.244 3261.102~gge209~0#@$TRACK~1~3~~3852.756 3298.504 3852.756 3261.102~gge210~0#@$TRACK~1~3~~3947.244 3298.504 3852.756 3298.504~gge211~0#@$TRACK~1~3~~3947.244 3261.102 3852.756 3261.102~gge212~0#@$TRACK~1~3~~3940.551 3294.173 3859.055 3294.173 3859.055 3265.433 3940.551 3265.433 3940.551 3294.173~gge213~0#@$PAD~OVAL~3943.31~3280~11.811~7.874~11~F1_1~1~1.181~3943.31 3278.0315 3943.31 3281.9685~270~gge214~7.086~3943.31 3277.638 3943.31 3282.362~Y~0~0~0.4~3943.31,3280#@$PAD~OVAL~3856.76~3279.98~11.811~7.874~11~F1_2~2~1.181~3856.76 3278.0115 3856.76 3281.9485~270~gge215~7.086~3856.76 3277.618 3856.76 3282.342~Y~0~0~0.4~3856.76,3279.98", + "LIB~3905~3120.039~package`SMT32F103C_GENERIC_BOARD`~90~~gge216~1~12fe6db2e70145f9a998e5633541941d~1490648711~0~a4f2141caf7cfa78#@$TEXT~P~3775.86~3122.039~0.6~90~0~3~~4.5~UP~M 3769.71 3122.039 L 3772.77 3122.039 L 3773.39 3121.839 L 3773.8 3121.429 L 3774 3120.809 L 3774 3120.399 L 3773.8 3119.789 L 3773.39 3119.379 L 3772.77 3119.179 L 3769.71 3119.179 M 3769.71 3117.829 L 3774 3117.829 M 3769.71 3117.829 L 3769.71 3115.989 L 3769.91 3115.369 L 3770.11 3115.169 L 3770.52 3114.959 L 3771.14 3114.959 L 3771.55 3115.169 L 3771.75 3115.369 L 3771.96 3115.989 L 3771.96 3117.829~~gge217~~0~#@$TEXT~N~3770.36~3122.039~0.6~90~0~3~~4.5~STM32F103C~M 3764.82 3119.179 L 3764.41 3119.589 L 3764.21 3120.199 L 3764.21 3121.019 L 3764.41 3121.629 L 3764.82 3122.039 L 3765.23 3122.039 L 3765.64 3121.839 L 3765.84 3121.629 L 3766.05 3121.219 L 3766.46 3119.989 L 3766.66 3119.589 L 3766.86 3119.379 L 3767.27 3119.179 L 3767.89 3119.179 L 3768.3 3119.589 L 3768.5 3120.199 L 3768.5 3121.019 L 3768.3 3121.629 L 3767.89 3122.039 M 3764.21 3116.389 L 3768.5 3116.389 M 3764.21 3117.829 L 3764.21 3114.959 M 3764.21 3113.609 L 3768.5 3113.609 M 3764.21 3113.609 L 3768.5 3111.979 M 3764.21 3110.339 L 3768.5 3111.979 M 3764.21 3110.339 L 3768.5 3110.339 M 3764.21 3108.579 L 3764.21 3106.329 L 3765.84 3107.559 L 3765.84 3106.939 L 3766.05 3106.539 L 3766.25 3106.329 L 3766.86 3106.129 L 3767.27 3106.129 L 3767.89 3106.329 L 3768.3 3106.739 L 3768.5 3107.349 L 3768.5 3107.969 L 3768.3 3108.579 L 3768.09 3108.789 L 3767.68 3108.989 M 3765.23 3104.569 L 3765.02 3104.569 L 3764.61 3104.369 L 3764.41 3104.159 L 3764.21 3103.749 L 3764.21 3102.939 L 3764.41 3102.529 L 3764.61 3102.319 L 3765.02 3102.119 L 3765.43 3102.119 L 3765.84 3102.319 L 3766.46 3102.729 L 3768.5 3104.779 L 3768.5 3101.909 M 3764.21 3100.559 L 3768.5 3100.559 M 3764.21 3100.559 L 3764.21 3097.899 M 3766.25 3100.559 L 3766.25 3098.929 M 3765.02 3096.549 L 3764.82 3096.139 L 3764.21 3095.529 L 3768.5 3095.529 M 3764.21 3092.949 L 3764.41 3093.569 L 3765.02 3093.979 L 3766.05 3094.179 L 3766.66 3094.179 L 3767.68 3093.979 L 3768.3 3093.569 L 3768.5 3092.949 L 3768.5 3092.539 L 3768.3 3091.929 L 3767.68 3091.519 L 3766.66 3091.319 L 3766.05 3091.319 L 3765.02 3091.519 L 3764.41 3091.929 L 3764.21 3092.539 L 3764.21 3092.949 M 3764.21 3089.559 L 3764.21 3087.309 L 3765.84 3088.539 L 3765.84 3087.919 L 3766.05 3087.509 L 3766.25 3087.309 L 3766.86 3087.099 L 3767.27 3087.099 L 3767.89 3087.309 L 3768.3 3087.719 L 3768.5 3088.329 L 3768.5 3088.939 L 3768.3 3089.559 L 3768.09 3089.759 L 3767.68 3089.969 M 3765.23 3082.689 L 3764.82 3082.889 L 3764.41 3083.299 L 3764.21 3083.709 L 3764.21 3084.529 L 3764.41 3084.939 L 3764.82 3085.339 L 3765.23 3085.549 L 3765.84 3085.749 L 3766.86 3085.749 L 3767.48 3085.549 L 3767.89 3085.339 L 3768.3 3084.939 L 3768.5 3084.529 L 3768.5 3083.709 L 3768.3 3083.299 L 3767.89 3082.889 L 3767.48 3082.689~none~gge218~~0~#@$TRACK~1~3~~3990 3162.039 3990 3078.039~gge219~0#@$TRACK~1~3~~3990 3078.039 3775 3078.039~gge220~0#@$TRACK~1~3~~3775 3078.039 3775 3162.039~gge221~0#@$TRACK~1~3~~3775 3162.039 3990 3162.039~gge222~0#@$TRACK~1~3~~3975 3135.039 4005 3135.039 4005 3105.039 3975 3105.039 3975 3135.039~gge223~0#@$TEXT~L~3835~3179.039~0.8~90~0~3~~4~PA1~M 3832.82 3179.039 L 3836.64 3179.039 M 3832.82 3179.039 L 3832.82 3177.399 L 3833 3176.859 L 3833.18 3176.679 L 3833.55 3176.489 L 3834.09 3176.489 L 3834.45 3176.679 L 3834.64 3176.859 L 3834.82 3177.399 L 3834.82 3179.039 M 3832.82 3173.839 L 3836.64 3175.289 M 3832.82 3173.839 L 3836.64 3172.389 M 3835.36 3174.749 L 3835.36 3172.929 M 3833.55 3171.189 L 3833.36 3170.819 L 3832.82 3170.279 L 3836.64 3170.279~~gge224~~0~#@$TEXT~L~3845~3076.039~0.8~90~0~3~~4~PB6~M 3842.82 3076.039 L 3846.64 3076.039 M 3842.82 3076.039 L 3842.82 3074.399 L 3843 3073.859 L 3843.18 3073.679 L 3843.55 3073.489 L 3844.09 3073.489 L 3844.45 3073.679 L 3844.64 3073.859 L 3844.82 3074.399 L 3844.82 3076.039 M 3842.82 3072.289 L 3846.64 3072.289 M 3842.82 3072.289 L 3842.82 3070.659 L 3843 3070.109 L 3843.18 3069.929 L 3843.55 3069.749 L 3843.91 3069.749 L 3844.27 3069.929 L 3844.45 3070.109 L 3844.64 3070.659 M 3844.64 3072.289 L 3844.64 3070.659 L 3844.82 3070.109 L 3845 3069.929 L 3845.36 3069.749 L 3845.91 3069.749 L 3846.27 3069.929 L 3846.45 3070.109 L 3846.64 3070.659 L 3846.64 3072.289 M 3843.36 3066.369 L 3843 3066.549 L 3842.82 3067.089 L 3842.82 3067.459 L 3843 3067.999 L 3843.55 3068.369 L 3844.45 3068.549 L 3845.36 3068.549 L 3846.09 3068.369 L 3846.45 3067.999 L 3846.64 3067.459 L 3846.64 3067.279 L 3846.45 3066.729 L 3846.09 3066.369 L 3845.55 3066.189 L 3845.36 3066.189 L 3844.82 3066.369 L 3844.45 3066.729 L 3844.27 3067.279 L 3844.27 3067.459 L 3844.45 3067.999 L 3844.82 3068.369 L 3845.36 3068.549~~gge225~~0~#@$TEXT~L~3866~3076.039~0.8~90~0~3~~4~PB4~M 3863.82 3076.039 L 3867.64 3076.039 M 3863.82 3076.039 L 3863.82 3074.399 L 3864 3073.859 L 3864.18 3073.679 L 3864.55 3073.489 L 3865.09 3073.489 L 3865.45 3073.679 L 3865.64 3073.859 L 3865.82 3074.399 L 3865.82 3076.039 M 3863.82 3072.289 L 3867.64 3072.289 M 3863.82 3072.289 L 3863.82 3070.659 L 3864 3070.109 L 3864.18 3069.929 L 3864.55 3069.749 L 3864.91 3069.749 L 3865.27 3069.929 L 3865.45 3070.109 L 3865.64 3070.659 M 3865.64 3072.289 L 3865.64 3070.659 L 3865.82 3070.109 L 3866 3069.929 L 3866.36 3069.749 L 3866.91 3069.749 L 3867.27 3069.929 L 3867.45 3070.109 L 3867.64 3070.659 L 3867.64 3072.289 M 3863.82 3066.729 L 3866.36 3068.549 L 3866.36 3065.819 M 3863.82 3066.729 L 3867.64 3066.729~~gge226~~0~#@$TEXT~L~3976~3179.039~0.8~90~0~3~~4~GND~M 3974.73 3176.309 L 3974.36 3176.489 L 3974 3176.859 L 3973.82 3177.219 L 3973.82 3177.949 L 3974 3178.309 L 3974.36 3178.679 L 3974.73 3178.859 L 3975.27 3179.039 L 3976.18 3179.039 L 3976.73 3178.859 L 3977.09 3178.679 L 3977.45 3178.309 L 3977.64 3177.949 L 3977.64 3177.219 L 3977.45 3176.859 L 3977.09 3176.489 L 3976.73 3176.309 L 3976.18 3176.309 M 3976.18 3177.219 L 3976.18 3176.309 M 3973.82 3175.109 L 3977.64 3175.109 M 3973.82 3175.109 L 3977.64 3172.569 M 3973.82 3172.569 L 3977.64 3172.569 M 3973.82 3171.369 L 3977.64 3171.369 M 3973.82 3171.369 L 3973.82 3170.089 L 3974 3169.549 L 3974.36 3169.189 L 3974.73 3168.999 L 3975.27 3168.819 L 3976.18 3168.819 L 3976.73 3168.999 L 3977.09 3169.189 L 3977.45 3169.549 L 3977.64 3170.089 L 3977.64 3171.369~~gge227~~0~#@$TEXT~L~3835~3076.039~0.8~90~0~3~~4~PB7~M 3832.82 3076.039 L 3836.64 3076.039 M 3832.82 3076.039 L 3832.82 3074.399 L 3833 3073.859 L 3833.18 3073.679 L 3833.55 3073.489 L 3834.09 3073.489 L 3834.45 3073.679 L 3834.64 3073.859 L 3834.82 3074.399 L 3834.82 3076.039 M 3832.82 3072.289 L 3836.64 3072.289 M 3832.82 3072.289 L 3832.82 3070.659 L 3833 3070.109 L 3833.18 3069.929 L 3833.55 3069.749 L 3833.91 3069.749 L 3834.27 3069.929 L 3834.45 3070.109 L 3834.64 3070.659 M 3834.64 3072.289 L 3834.64 3070.659 L 3834.82 3070.109 L 3835 3069.929 L 3835.36 3069.749 L 3835.91 3069.749 L 3836.27 3069.929 L 3836.45 3070.109 L 3836.64 3070.659 L 3836.64 3072.289 M 3832.82 3065.999 L 3836.64 3067.819 M 3832.82 3068.549 L 3832.82 3065.999~~gge228~~0~#@$TEXT~L~3976~3076.039~0.8~90~0~3~~4~PB12~M 3973.82 3076.039 L 3977.64 3076.039 M 3973.82 3076.039 L 3973.82 3074.399 L 3974 3073.859 L 3974.18 3073.679 L 3974.55 3073.489 L 3975.09 3073.489 L 3975.45 3073.679 L 3975.64 3073.859 L 3975.82 3074.399 L 3975.82 3076.039 M 3973.82 3072.289 L 3977.64 3072.289 M 3973.82 3072.289 L 3973.82 3070.659 L 3974 3070.109 L 3974.18 3069.929 L 3974.55 3069.749 L 3974.91 3069.749 L 3975.27 3069.929 L 3975.45 3070.109 L 3975.64 3070.659 M 3975.64 3072.289 L 3975.64 3070.659 L 3975.82 3070.109 L 3976 3069.929 L 3976.36 3069.749 L 3976.91 3069.749 L 3977.27 3069.929 L 3977.45 3070.109 L 3977.64 3070.659 L 3977.64 3072.289 M 3974.55 3068.549 L 3974.36 3068.189 L 3973.82 3067.639 L 3977.64 3067.639 M 3974.73 3066.259 L 3974.55 3066.259 L 3974.18 3066.079 L 3974 3065.889 L 3973.82 3065.529 L 3973.82 3064.799 L 3974 3064.439 L 3974.18 3064.259 L 3974.55 3064.079 L 3974.91 3064.079 L 3975.27 3064.259 L 3975.82 3064.619 L 3977.64 3066.439 L 3977.64 3063.889~~gge229~~0~#@$TEXT~L~3866~3179.039~0.8~90~0~3~~4~PA4~M 3863.82 3179.039 L 3867.64 3179.039 M 3863.82 3179.039 L 3863.82 3177.399 L 3864 3176.859 L 3864.18 3176.679 L 3864.55 3176.489 L 3865.09 3176.489 L 3865.45 3176.679 L 3865.64 3176.859 L 3865.82 3177.399 L 3865.82 3179.039 M 3863.82 3173.839 L 3867.64 3175.289 M 3863.82 3173.839 L 3867.64 3172.389 M 3866.36 3174.749 L 3866.36 3172.929 M 3863.82 3169.369 L 3866.36 3171.189 L 3866.36 3168.459 M 3863.82 3169.369 L 3867.64 3169.369~~gge230~~0~#@$TEXT~L~3846~3179.039~0.8~90~0~3~~4~PA2~M 3843.82 3179.039 L 3847.64 3179.039 M 3843.82 3179.039 L 3843.82 3177.399 L 3844 3176.859 L 3844.18 3176.679 L 3844.55 3176.489 L 3845.09 3176.489 L 3845.45 3176.679 L 3845.64 3176.859 L 3845.82 3177.399 L 3845.82 3179.039 M 3843.82 3173.839 L 3847.64 3175.289 M 3843.82 3173.839 L 3847.64 3172.389 M 3846.36 3174.749 L 3846.36 3172.929 M 3844.73 3170.999 L 3844.55 3170.999 L 3844.18 3170.819 L 3844 3170.639 L 3843.82 3170.279 L 3843.82 3169.549 L 3844 3169.189 L 3844.18 3168.999 L 3844.55 3168.819 L 3844.91 3168.819 L 3845.27 3168.999 L 3845.82 3169.369 L 3847.64 3171.189 L 3847.64 3168.639~~gge231~~0~#@$TEXT~L~3856~3179.039~0.8~90~0~3~~4~PA3~M 3853.82 3179.039 L 3857.64 3179.039 M 3853.82 3179.039 L 3853.82 3177.399 L 3854 3176.859 L 3854.18 3176.679 L 3854.55 3176.489 L 3855.09 3176.489 L 3855.45 3176.679 L 3855.64 3176.859 L 3855.82 3177.399 L 3855.82 3179.039 M 3853.82 3173.839 L 3857.64 3175.289 M 3853.82 3173.839 L 3857.64 3172.389 M 3856.36 3174.749 L 3856.36 3172.929 M 3853.82 3170.819 L 3853.82 3168.819 L 3855.27 3169.909 L 3855.27 3169.369 L 3855.45 3168.999 L 3855.64 3168.819 L 3856.18 3168.639 L 3856.55 3168.639 L 3857.09 3168.819 L 3857.45 3169.189 L 3857.64 3169.729 L 3857.64 3170.279 L 3857.45 3170.819 L 3857.27 3170.999 L 3856.91 3171.189~~gge232~~0~#@$TEXT~L~3876~3179.039~0.8~90~0~3~~4~PA5~M 3873.82 3179.039 L 3877.64 3179.039 M 3873.82 3179.039 L 3873.82 3177.399 L 3874 3176.859 L 3874.18 3176.679 L 3874.55 3176.489 L 3875.09 3176.489 L 3875.45 3176.679 L 3875.64 3176.859 L 3875.82 3177.399 L 3875.82 3179.039 M 3873.82 3173.839 L 3877.64 3175.289 M 3873.82 3173.839 L 3877.64 3172.389 M 3876.36 3174.749 L 3876.36 3172.929 M 3873.82 3168.999 L 3873.82 3170.819 L 3875.45 3170.999 L 3875.27 3170.819 L 3875.09 3170.279 L 3875.09 3169.729 L 3875.27 3169.189 L 3875.64 3168.819 L 3876.18 3168.639 L 3876.55 3168.639 L 3877.09 3168.819 L 3877.45 3169.189 L 3877.64 3169.729 L 3877.64 3170.279 L 3877.45 3170.819 L 3877.27 3170.999 L 3876.91 3171.189~~gge233~~0~#@$TEXT~L~3886~3179.039~0.8~90~0~3~~4~PA6~M 3883.82 3179.039 L 3887.64 3179.039 M 3883.82 3179.039 L 3883.82 3177.399 L 3884 3176.859 L 3884.18 3176.679 L 3884.55 3176.489 L 3885.09 3176.489 L 3885.45 3176.679 L 3885.64 3176.859 L 3885.82 3177.399 L 3885.82 3179.039 M 3883.82 3173.839 L 3887.64 3175.289 M 3883.82 3173.839 L 3887.64 3172.389 M 3886.36 3174.749 L 3886.36 3172.929 M 3884.36 3168.999 L 3884 3169.189 L 3883.82 3169.729 L 3883.82 3170.089 L 3884 3170.639 L 3884.55 3170.999 L 3885.45 3171.189 L 3886.36 3171.189 L 3887.09 3170.999 L 3887.45 3170.639 L 3887.64 3170.089 L 3887.64 3169.909 L 3887.45 3169.369 L 3887.09 3168.999 L 3886.55 3168.819 L 3886.36 3168.819 L 3885.82 3168.999 L 3885.45 3169.369 L 3885.27 3169.909 L 3885.27 3170.089 L 3885.45 3170.639 L 3885.82 3170.999 L 3886.36 3171.189~~gge234~~0~#@$TEXT~L~3896~3179.039~0.8~90~0~3~~4~PA7~M 3893.82 3179.039 L 3897.64 3179.039 M 3893.82 3179.039 L 3893.82 3177.399 L 3894 3176.859 L 3894.18 3176.679 L 3894.55 3176.489 L 3895.09 3176.489 L 3895.45 3176.679 L 3895.64 3176.859 L 3895.82 3177.399 L 3895.82 3179.039 M 3893.82 3173.839 L 3897.64 3175.289 M 3893.82 3173.839 L 3897.64 3172.389 M 3896.36 3174.749 L 3896.36 3172.929 M 3893.82 3168.639 L 3897.64 3170.459 M 3893.82 3171.189 L 3893.82 3168.639~~gge235~~0~#@$TEXT~L~3905~3179.039~0.8~90~0~3~~4~PB0~M 3902.82 3179.039 L 3906.64 3179.039 M 3902.82 3179.039 L 3902.82 3177.399 L 3903 3176.859 L 3903.18 3176.679 L 3903.55 3176.489 L 3904.09 3176.489 L 3904.45 3176.679 L 3904.64 3176.859 L 3904.82 3177.399 L 3904.82 3179.039 M 3902.82 3175.289 L 3906.64 3175.289 M 3902.82 3175.289 L 3902.82 3173.659 L 3903 3173.109 L 3903.18 3172.929 L 3903.55 3172.749 L 3903.91 3172.749 L 3904.27 3172.929 L 3904.45 3173.109 L 3904.64 3173.659 M 3904.64 3175.289 L 3904.64 3173.659 L 3904.82 3173.109 L 3905 3172.929 L 3905.36 3172.749 L 3905.91 3172.749 L 3906.27 3172.929 L 3906.45 3173.109 L 3906.64 3173.659 L 3906.64 3175.289 M 3902.82 3170.459 L 3903 3170.999 L 3903.55 3171.369 L 3904.45 3171.549 L 3905 3171.549 L 3905.91 3171.369 L 3906.45 3170.999 L 3906.64 3170.459 L 3906.64 3170.089 L 3906.45 3169.549 L 3905.91 3169.189 L 3905 3168.999 L 3904.45 3168.999 L 3903.55 3169.189 L 3903 3169.549 L 3902.82 3170.089 L 3902.82 3170.459~~gge236~~0~#@$TEXT~L~3915~3179.039~0.8~90~0~3~~4~PB1~M 3912.82 3179.039 L 3916.64 3179.039 M 3912.82 3179.039 L 3912.82 3177.399 L 3913 3176.859 L 3913.18 3176.679 L 3913.55 3176.489 L 3914.09 3176.489 L 3914.45 3176.679 L 3914.64 3176.859 L 3914.82 3177.399 L 3914.82 3179.039 M 3912.82 3175.289 L 3916.64 3175.289 M 3912.82 3175.289 L 3912.82 3173.659 L 3913 3173.109 L 3913.18 3172.929 L 3913.55 3172.749 L 3913.91 3172.749 L 3914.27 3172.929 L 3914.45 3173.109 L 3914.64 3173.659 M 3914.64 3175.289 L 3914.64 3173.659 L 3914.82 3173.109 L 3915 3172.929 L 3915.36 3172.749 L 3915.91 3172.749 L 3916.27 3172.929 L 3916.45 3173.109 L 3916.64 3173.659 L 3916.64 3175.289 M 3913.55 3171.549 L 3913.36 3171.189 L 3912.82 3170.639 L 3916.64 3170.639~~gge237~~0~#@$TEXT~L~3926~3179.039~0.8~90~0~3~~4~PB10~M 3923.82 3179.039 L 3927.64 3179.039 M 3923.82 3179.039 L 3923.82 3177.399 L 3924 3176.859 L 3924.18 3176.679 L 3924.55 3176.489 L 3925.09 3176.489 L 3925.45 3176.679 L 3925.64 3176.859 L 3925.82 3177.399 L 3925.82 3179.039 M 3923.82 3175.289 L 3927.64 3175.289 M 3923.82 3175.289 L 3923.82 3173.659 L 3924 3173.109 L 3924.18 3172.929 L 3924.55 3172.749 L 3924.91 3172.749 L 3925.27 3172.929 L 3925.45 3173.109 L 3925.64 3173.659 M 3925.64 3175.289 L 3925.64 3173.659 L 3925.82 3173.109 L 3926 3172.929 L 3926.36 3172.749 L 3926.91 3172.749 L 3927.27 3172.929 L 3927.45 3173.109 L 3927.64 3173.659 L 3927.64 3175.289 M 3924.55 3171.549 L 3924.36 3171.189 L 3923.82 3170.639 L 3927.64 3170.639 M 3923.82 3168.349 L 3924 3168.889 L 3924.55 3169.259 L 3925.45 3169.439 L 3926 3169.439 L 3926.91 3169.259 L 3927.45 3168.889 L 3927.64 3168.349 L 3927.64 3167.989 L 3927.45 3167.439 L 3926.91 3167.079 L 3926 3166.889 L 3925.45 3166.889 L 3924.55 3167.079 L 3924 3167.439 L 3923.82 3167.989 L 3923.82 3168.349~~gge238~~0~#@$TEXT~L~3935~3179.039~0.8~90~0~3~~4~PB11~M 3932.82 3179.039 L 3936.64 3179.039 M 3932.82 3179.039 L 3932.82 3177.399 L 3933 3176.859 L 3933.18 3176.679 L 3933.55 3176.489 L 3934.09 3176.489 L 3934.45 3176.679 L 3934.64 3176.859 L 3934.82 3177.399 L 3934.82 3179.039 M 3932.82 3175.289 L 3936.64 3175.289 M 3932.82 3175.289 L 3932.82 3173.659 L 3933 3173.109 L 3933.18 3172.929 L 3933.55 3172.749 L 3933.91 3172.749 L 3934.27 3172.929 L 3934.45 3173.109 L 3934.64 3173.659 M 3934.64 3175.289 L 3934.64 3173.659 L 3934.82 3173.109 L 3935 3172.929 L 3935.36 3172.749 L 3935.91 3172.749 L 3936.27 3172.929 L 3936.45 3173.109 L 3936.64 3173.659 L 3936.64 3175.289 M 3933.55 3171.549 L 3933.36 3171.189 L 3932.82 3170.639 L 3936.64 3170.639 M 3933.55 3169.439 L 3933.36 3169.079 L 3932.82 3168.529 L 3936.64 3168.529~~gge239~~0~#@$TEXT~L~3946~3179.039~0.8~90~0~3~~4~RST~M 3943.82 3179.039 L 3947.64 3179.039 M 3943.82 3179.039 L 3943.82 3177.399 L 3944 3176.859 L 3944.18 3176.679 L 3944.55 3176.489 L 3944.91 3176.489 L 3945.27 3176.679 L 3945.45 3176.859 L 3945.64 3177.399 L 3945.64 3179.039 M 3945.64 3177.769 L 3947.64 3176.489 M 3944.36 3172.749 L 3944 3173.109 L 3943.82 3173.659 L 3943.82 3174.389 L 3944 3174.929 L 3944.36 3175.289 L 3944.73 3175.289 L 3945.09 3175.109 L 3945.27 3174.929 L 3945.45 3174.569 L 3945.82 3173.479 L 3946 3173.109 L 3946.18 3172.929 L 3946.55 3172.749 L 3947.09 3172.749 L 3947.45 3173.109 L 3947.64 3173.659 L 3947.64 3174.389 L 3947.45 3174.929 L 3947.09 3175.289 M 3943.82 3170.279 L 3947.64 3170.279 M 3943.82 3171.549 L 3943.82 3168.999~~gge240~~0~#@$TEXT~L~3956~3179.039~0.8~90~0~3~~4~3V3~M 3953.82 3178.679 L 3953.82 3176.679 L 3955.27 3177.769 L 3955.27 3177.219 L 3955.45 3176.859 L 3955.64 3176.679 L 3956.18 3176.489 L 3956.55 3176.489 L 3957.09 3176.679 L 3957.45 3177.039 L 3957.64 3177.589 L 3957.64 3178.129 L 3957.45 3178.679 L 3957.27 3178.859 L 3956.91 3179.039 M 3953.82 3175.289 L 3957.64 3173.839 M 3953.82 3172.389 L 3957.64 3173.839 M 3953.82 3170.819 L 3953.82 3168.819 L 3955.27 3169.909 L 3955.27 3169.369 L 3955.45 3168.999 L 3955.64 3168.819 L 3956.18 3168.639 L 3956.55 3168.639 L 3957.09 3168.819 L 3957.45 3169.189 L 3957.64 3169.729 L 3957.64 3170.279 L 3957.45 3170.819 L 3957.27 3170.999 L 3956.91 3171.189~~gge241~~0~#@$TEXT~L~3965~3179.039~0.8~90~0~3~~4~GND~M 3963.73 3176.309 L 3963.36 3176.489 L 3963 3176.859 L 3962.82 3177.219 L 3962.82 3177.949 L 3963 3178.309 L 3963.36 3178.679 L 3963.73 3178.859 L 3964.27 3179.039 L 3965.18 3179.039 L 3965.73 3178.859 L 3966.09 3178.679 L 3966.45 3178.309 L 3966.64 3177.949 L 3966.64 3177.219 L 3966.45 3176.859 L 3966.09 3176.489 L 3965.73 3176.309 L 3965.18 3176.309 M 3965.18 3177.219 L 3965.18 3176.309 M 3962.82 3175.109 L 3966.64 3175.109 M 3962.82 3175.109 L 3966.64 3172.569 M 3962.82 3172.569 L 3966.64 3172.569 M 3962.82 3171.369 L 3966.64 3171.369 M 3962.82 3171.369 L 3962.82 3170.089 L 3963 3169.549 L 3963.36 3169.189 L 3963.73 3168.999 L 3964.27 3168.819 L 3965.18 3168.819 L 3965.73 3168.999 L 3966.09 3169.189 L 3966.45 3169.549 L 3966.64 3170.089 L 3966.64 3171.369~~gge242~~0~#@$TEXT~L~3966~3076.039~0.8~90~0~3~~4~PB13~M 3963.82 3076.039 L 3967.64 3076.039 M 3963.82 3076.039 L 3963.82 3074.399 L 3964 3073.859 L 3964.18 3073.679 L 3964.55 3073.489 L 3965.09 3073.489 L 3965.45 3073.679 L 3965.64 3073.859 L 3965.82 3074.399 L 3965.82 3076.039 M 3963.82 3072.289 L 3967.64 3072.289 M 3963.82 3072.289 L 3963.82 3070.659 L 3964 3070.109 L 3964.18 3069.929 L 3964.55 3069.749 L 3964.91 3069.749 L 3965.27 3069.929 L 3965.45 3070.109 L 3965.64 3070.659 M 3965.64 3072.289 L 3965.64 3070.659 L 3965.82 3070.109 L 3966 3069.929 L 3966.36 3069.749 L 3966.91 3069.749 L 3967.27 3069.929 L 3967.45 3070.109 L 3967.64 3070.659 L 3967.64 3072.289 M 3964.55 3068.549 L 3964.36 3068.189 L 3963.82 3067.639 L 3967.64 3067.639 M 3963.82 3066.079 L 3963.82 3064.079 L 3965.27 3065.169 L 3965.27 3064.619 L 3965.45 3064.259 L 3965.64 3064.079 L 3966.18 3063.889 L 3966.55 3063.889 L 3967.09 3064.079 L 3967.45 3064.439 L 3967.64 3064.989 L 3967.64 3065.529 L 3967.45 3066.079 L 3967.27 3066.259 L 3966.91 3066.439~~gge243~~0~#@$TEXT~L~3955~3076.039~0.8~90~0~3~~4~PB14~M 3952.82 3076.039 L 3956.64 3076.039 M 3952.82 3076.039 L 3952.82 3074.399 L 3953 3073.859 L 3953.18 3073.679 L 3953.55 3073.489 L 3954.09 3073.489 L 3954.45 3073.679 L 3954.64 3073.859 L 3954.82 3074.399 L 3954.82 3076.039 M 3952.82 3072.289 L 3956.64 3072.289 M 3952.82 3072.289 L 3952.82 3070.659 L 3953 3070.109 L 3953.18 3069.929 L 3953.55 3069.749 L 3953.91 3069.749 L 3954.27 3069.929 L 3954.45 3070.109 L 3954.64 3070.659 M 3954.64 3072.289 L 3954.64 3070.659 L 3954.82 3070.109 L 3955 3069.929 L 3955.36 3069.749 L 3955.91 3069.749 L 3956.27 3069.929 L 3956.45 3070.109 L 3956.64 3070.659 L 3956.64 3072.289 M 3953.55 3068.549 L 3953.36 3068.189 L 3952.82 3067.639 L 3956.64 3067.639 M 3952.82 3064.619 L 3955.36 3066.439 L 3955.36 3063.709 M 3952.82 3064.619 L 3956.64 3064.619~~gge244~~0~#@$TEXT~L~3946~3076.039~0.8~90~0~3~~4~PB15~M 3943.82 3076.039 L 3947.64 3076.039 M 3943.82 3076.039 L 3943.82 3074.399 L 3944 3073.859 L 3944.18 3073.679 L 3944.55 3073.489 L 3945.09 3073.489 L 3945.45 3073.679 L 3945.64 3073.859 L 3945.82 3074.399 L 3945.82 3076.039 M 3943.82 3072.289 L 3947.64 3072.289 M 3943.82 3072.289 L 3943.82 3070.659 L 3944 3070.109 L 3944.18 3069.929 L 3944.55 3069.749 L 3944.91 3069.749 L 3945.27 3069.929 L 3945.45 3070.109 L 3945.64 3070.659 M 3945.64 3072.289 L 3945.64 3070.659 L 3945.82 3070.109 L 3946 3069.929 L 3946.36 3069.749 L 3946.91 3069.749 L 3947.27 3069.929 L 3947.45 3070.109 L 3947.64 3070.659 L 3947.64 3072.289 M 3944.55 3068.549 L 3944.36 3068.189 L 3943.82 3067.639 L 3947.64 3067.639 M 3943.82 3064.259 L 3943.82 3066.079 L 3945.45 3066.259 L 3945.27 3066.079 L 3945.09 3065.529 L 3945.09 3064.989 L 3945.27 3064.439 L 3945.64 3064.079 L 3946.18 3063.889 L 3946.55 3063.889 L 3947.09 3064.079 L 3947.45 3064.439 L 3947.64 3064.989 L 3947.64 3065.529 L 3947.45 3066.079 L 3947.27 3066.259 L 3946.91 3066.439~~gge245~~0~#@$TEXT~L~3935~3076.039~0.8~90~0~3~~4~PA8~M 3932.82 3076.039 L 3936.64 3076.039 M 3932.82 3076.039 L 3932.82 3074.399 L 3933 3073.859 L 3933.18 3073.679 L 3933.55 3073.489 L 3934.09 3073.489 L 3934.45 3073.679 L 3934.64 3073.859 L 3934.82 3074.399 L 3934.82 3076.039 M 3932.82 3070.839 L 3936.64 3072.289 M 3932.82 3070.839 L 3936.64 3069.389 M 3935.36 3071.749 L 3935.36 3069.929 M 3932.82 3067.279 L 3933 3067.819 L 3933.36 3067.999 L 3933.73 3067.999 L 3934.09 3067.819 L 3934.27 3067.459 L 3934.45 3066.729 L 3934.64 3066.189 L 3935 3065.819 L 3935.36 3065.639 L 3935.91 3065.639 L 3936.27 3065.819 L 3936.45 3065.999 L 3936.64 3066.549 L 3936.64 3067.279 L 3936.45 3067.819 L 3936.27 3067.999 L 3935.91 3068.189 L 3935.36 3068.189 L 3935 3067.999 L 3934.64 3067.639 L 3934.45 3067.089 L 3934.27 3066.369 L 3934.09 3065.999 L 3933.73 3065.819 L 3933.36 3065.819 L 3933 3065.999 L 3932.82 3066.549 L 3932.82 3067.279~~gge246~~0~#@$TEXT~L~3926~3076.039~0.8~90~0~3~~4~PA9~M 3923.82 3076.039 L 3927.64 3076.039 M 3923.82 3076.039 L 3923.82 3074.399 L 3924 3073.859 L 3924.18 3073.679 L 3924.55 3073.489 L 3925.09 3073.489 L 3925.45 3073.679 L 3925.64 3073.859 L 3925.82 3074.399 L 3925.82 3076.039 M 3923.82 3070.839 L 3927.64 3072.289 M 3923.82 3070.839 L 3927.64 3069.389 M 3926.36 3071.749 L 3926.36 3069.929 M 3925.09 3065.819 L 3925.64 3065.999 L 3926 3066.369 L 3926.18 3066.909 L 3926.18 3067.089 L 3926 3067.639 L 3925.64 3067.999 L 3925.09 3068.189 L 3924.91 3068.189 L 3924.36 3067.999 L 3924 3067.639 L 3923.82 3067.089 L 3923.82 3066.909 L 3924 3066.369 L 3924.36 3065.999 L 3925.09 3065.819 L 3926 3065.819 L 3926.91 3065.999 L 3927.45 3066.369 L 3927.64 3066.909 L 3927.64 3067.279 L 3927.45 3067.819 L 3927.09 3067.999~~gge247~~0~#@$TEXT~L~3915~3076.039~0.8~90~0~3~~4~PA10~M 3912.82 3076.039 L 3916.64 3076.039 M 3912.82 3076.039 L 3912.82 3074.399 L 3913 3073.859 L 3913.18 3073.679 L 3913.55 3073.489 L 3914.09 3073.489 L 3914.45 3073.679 L 3914.64 3073.859 L 3914.82 3074.399 L 3914.82 3076.039 M 3912.82 3070.839 L 3916.64 3072.289 M 3912.82 3070.839 L 3916.64 3069.389 M 3915.36 3071.749 L 3915.36 3069.929 M 3913.55 3068.189 L 3913.36 3067.819 L 3912.82 3067.279 L 3916.64 3067.279 M 3912.82 3064.989 L 3913 3065.529 L 3913.55 3065.889 L 3914.45 3066.079 L 3915 3066.079 L 3915.91 3065.889 L 3916.45 3065.529 L 3916.64 3064.989 L 3916.64 3064.619 L 3916.45 3064.079 L 3915.91 3063.709 L 3915 3063.529 L 3914.45 3063.529 L 3913.55 3063.709 L 3913 3064.079 L 3912.82 3064.619 L 3912.82 3064.989~~gge248~~0~#@$TEXT~L~3905~3076.039~0.8~90~0~3~~4~PA11~M 3902.82 3076.039 L 3906.64 3076.039 M 3902.82 3076.039 L 3902.82 3074.399 L 3903 3073.859 L 3903.18 3073.679 L 3903.55 3073.489 L 3904.09 3073.489 L 3904.45 3073.679 L 3904.64 3073.859 L 3904.82 3074.399 L 3904.82 3076.039 M 3902.82 3070.839 L 3906.64 3072.289 M 3902.82 3070.839 L 3906.64 3069.389 M 3905.36 3071.749 L 3905.36 3069.929 M 3903.55 3068.189 L 3903.36 3067.819 L 3902.82 3067.279 L 3906.64 3067.279 M 3903.55 3066.079 L 3903.36 3065.709 L 3902.82 3065.169 L 3906.64 3065.169~~gge249~~0~#@$TEXT~L~3895~3076.039~0.8~90~0~3~~4~PA12~M 3892.82 3076.039 L 3896.64 3076.039 M 3892.82 3076.039 L 3892.82 3074.399 L 3893 3073.859 L 3893.18 3073.679 L 3893.55 3073.489 L 3894.09 3073.489 L 3894.45 3073.679 L 3894.64 3073.859 L 3894.82 3074.399 L 3894.82 3076.039 M 3892.82 3070.839 L 3896.64 3072.289 M 3892.82 3070.839 L 3896.64 3069.389 M 3895.36 3071.749 L 3895.36 3069.929 M 3893.55 3068.189 L 3893.36 3067.819 L 3892.82 3067.279 L 3896.64 3067.279 M 3893.73 3065.889 L 3893.55 3065.889 L 3893.18 3065.709 L 3893 3065.529 L 3892.82 3065.169 L 3892.82 3064.439 L 3893 3064.079 L 3893.18 3063.889 L 3893.55 3063.709 L 3893.91 3063.709 L 3894.27 3063.889 L 3894.82 3064.259 L 3896.64 3066.079 L 3896.64 3063.529~~gge250~~0~#@$TEXT~L~3886~3076.039~0.8~90~0~3~~4~PA15~M 3883.82 3076.039 L 3887.64 3076.039 M 3883.82 3076.039 L 3883.82 3074.399 L 3884 3073.859 L 3884.18 3073.679 L 3884.55 3073.489 L 3885.09 3073.489 L 3885.45 3073.679 L 3885.64 3073.859 L 3885.82 3074.399 L 3885.82 3076.039 M 3883.82 3070.839 L 3887.64 3072.289 M 3883.82 3070.839 L 3887.64 3069.389 M 3886.36 3071.749 L 3886.36 3069.929 M 3884.55 3068.189 L 3884.36 3067.819 L 3883.82 3067.279 L 3887.64 3067.279 M 3883.82 3063.889 L 3883.82 3065.709 L 3885.45 3065.889 L 3885.27 3065.709 L 3885.09 3065.169 L 3885.09 3064.619 L 3885.27 3064.079 L 3885.64 3063.709 L 3886.18 3063.529 L 3886.55 3063.529 L 3887.09 3063.709 L 3887.45 3064.079 L 3887.64 3064.619 L 3887.64 3065.169 L 3887.45 3065.709 L 3887.27 3065.889 L 3886.91 3066.079~~gge251~~0~#@$TEXT~L~3875~3076.039~0.8~90~0~3~~4~PB3~M 3872.82 3076.039 L 3876.64 3076.039 M 3872.82 3076.039 L 3872.82 3074.399 L 3873 3073.859 L 3873.18 3073.679 L 3873.55 3073.489 L 3874.09 3073.489 L 3874.45 3073.679 L 3874.64 3073.859 L 3874.82 3074.399 L 3874.82 3076.039 M 3872.82 3072.289 L 3876.64 3072.289 M 3872.82 3072.289 L 3872.82 3070.659 L 3873 3070.109 L 3873.18 3069.929 L 3873.55 3069.749 L 3873.91 3069.749 L 3874.27 3069.929 L 3874.45 3070.109 L 3874.64 3070.659 M 3874.64 3072.289 L 3874.64 3070.659 L 3874.82 3070.109 L 3875 3069.929 L 3875.36 3069.749 L 3875.91 3069.749 L 3876.27 3069.929 L 3876.45 3070.109 L 3876.64 3070.659 L 3876.64 3072.289 M 3872.82 3068.189 L 3872.82 3066.189 L 3874.27 3067.279 L 3874.27 3066.729 L 3874.45 3066.369 L 3874.64 3066.189 L 3875.18 3065.999 L 3875.55 3065.999 L 3876.09 3066.189 L 3876.45 3066.549 L 3876.64 3067.089 L 3876.64 3067.639 L 3876.45 3068.189 L 3876.27 3068.369 L 3875.91 3068.549~~gge252~~0~#@$TEXT~L~3855~3076.039~0.8~90~0~3~~4~PB5~M 3852.82 3076.039 L 3856.64 3076.039 M 3852.82 3076.039 L 3852.82 3074.399 L 3853 3073.859 L 3853.18 3073.679 L 3853.55 3073.489 L 3854.09 3073.489 L 3854.45 3073.679 L 3854.64 3073.859 L 3854.82 3074.399 L 3854.82 3076.039 M 3852.82 3072.289 L 3856.64 3072.289 M 3852.82 3072.289 L 3852.82 3070.659 L 3853 3070.109 L 3853.18 3069.929 L 3853.55 3069.749 L 3853.91 3069.749 L 3854.27 3069.929 L 3854.45 3070.109 L 3854.64 3070.659 M 3854.64 3072.289 L 3854.64 3070.659 L 3854.82 3070.109 L 3855 3069.929 L 3855.36 3069.749 L 3855.91 3069.749 L 3856.27 3069.929 L 3856.45 3070.109 L 3856.64 3070.659 L 3856.64 3072.289 M 3852.82 3066.369 L 3852.82 3068.189 L 3854.45 3068.369 L 3854.27 3068.189 L 3854.09 3067.639 L 3854.09 3067.089 L 3854.27 3066.549 L 3854.64 3066.189 L 3855.18 3065.999 L 3855.55 3065.999 L 3856.09 3066.189 L 3856.45 3066.549 L 3856.64 3067.089 L 3856.64 3067.639 L 3856.45 3068.189 L 3856.27 3068.369 L 3855.91 3068.549~~gge253~~0~#@$TEXT~L~3785~3180.039~0.8~90~0~3~~4~VBAT~M 3782.82 3180.039 L 3786.64 3178.589 M 3782.82 3177.129 L 3786.64 3178.589 M 3782.82 3175.929 L 3786.64 3175.929 M 3782.82 3175.929 L 3782.82 3174.289 L 3783 3173.749 L 3783.18 3173.569 L 3783.55 3173.389 L 3783.91 3173.389 L 3784.27 3173.569 L 3784.45 3173.749 L 3784.64 3174.289 M 3784.64 3175.929 L 3784.64 3174.289 L 3784.82 3173.749 L 3785 3173.569 L 3785.36 3173.389 L 3785.91 3173.389 L 3786.27 3173.569 L 3786.45 3173.749 L 3786.64 3174.289 L 3786.64 3175.929 M 3782.82 3170.729 L 3786.64 3172.189 M 3782.82 3170.729 L 3786.64 3169.279 M 3785.36 3171.639 L 3785.36 3169.819 M 3782.82 3166.799 L 3786.64 3166.799 M 3782.82 3168.079 L 3782.82 3165.529~~gge254~~0~#@$TEXT~L~3816~3179.039~0.8~90~0~3~~4~PC15~M 3813.82 3179.039 L 3817.64 3179.039 M 3813.82 3179.039 L 3813.82 3177.399 L 3814 3176.859 L 3814.18 3176.679 L 3814.55 3176.489 L 3815.09 3176.489 L 3815.45 3176.679 L 3815.64 3176.859 L 3815.82 3177.399 L 3815.82 3179.039 M 3814.73 3172.569 L 3814.36 3172.749 L 3814 3173.109 L 3813.82 3173.479 L 3813.82 3174.199 L 3814 3174.569 L 3814.36 3174.929 L 3814.73 3175.109 L 3815.27 3175.289 L 3816.18 3175.289 L 3816.73 3175.109 L 3817.09 3174.929 L 3817.45 3174.569 L 3817.64 3174.199 L 3817.64 3173.479 L 3817.45 3173.109 L 3817.09 3172.749 L 3816.73 3172.569 M 3814.55 3171.369 L 3814.36 3170.999 L 3813.82 3170.459 L 3817.64 3170.459 M 3813.82 3167.079 L 3813.82 3168.889 L 3815.45 3169.079 L 3815.27 3168.889 L 3815.09 3168.349 L 3815.09 3167.799 L 3815.27 3167.259 L 3815.64 3166.889 L 3816.18 3166.709 L 3816.55 3166.709 L 3817.09 3166.889 L 3817.45 3167.259 L 3817.64 3167.799 L 3817.64 3168.349 L 3817.45 3168.889 L 3817.27 3169.079 L 3816.91 3169.259~~gge255~~0~#@$TEXT~L~3796~3179.039~0.8~90~0~3~~4~PC13~M 3793.82 3179.039 L 3797.64 3179.039 M 3793.82 3179.039 L 3793.82 3177.399 L 3794 3176.859 L 3794.18 3176.679 L 3794.55 3176.489 L 3795.09 3176.489 L 3795.45 3176.679 L 3795.64 3176.859 L 3795.82 3177.399 L 3795.82 3179.039 M 3794.73 3172.569 L 3794.36 3172.749 L 3794 3173.109 L 3793.82 3173.479 L 3793.82 3174.199 L 3794 3174.569 L 3794.36 3174.929 L 3794.73 3175.109 L 3795.27 3175.289 L 3796.18 3175.289 L 3796.73 3175.109 L 3797.09 3174.929 L 3797.45 3174.569 L 3797.64 3174.199 L 3797.64 3173.479 L 3797.45 3173.109 L 3797.09 3172.749 L 3796.73 3172.569 M 3794.55 3171.369 L 3794.36 3170.999 L 3793.82 3170.459 L 3797.64 3170.459 M 3793.82 3168.889 L 3793.82 3166.889 L 3795.27 3167.989 L 3795.27 3167.439 L 3795.45 3167.079 L 3795.64 3166.889 L 3796.18 3166.709 L 3796.55 3166.709 L 3797.09 3166.889 L 3797.45 3167.259 L 3797.64 3167.799 L 3797.64 3168.349 L 3797.45 3168.889 L 3797.27 3169.079 L 3796.91 3169.259~~gge256~~0~#@$TEXT~L~3806~3179.039~0.8~90~0~3~~4~PC14~M 3803.82 3179.039 L 3807.64 3179.039 M 3803.82 3179.039 L 3803.82 3177.399 L 3804 3176.859 L 3804.18 3176.679 L 3804.55 3176.489 L 3805.09 3176.489 L 3805.45 3176.679 L 3805.64 3176.859 L 3805.82 3177.399 L 3805.82 3179.039 M 3804.73 3172.569 L 3804.36 3172.749 L 3804 3173.109 L 3803.82 3173.479 L 3803.82 3174.199 L 3804 3174.569 L 3804.36 3174.929 L 3804.73 3175.109 L 3805.27 3175.289 L 3806.18 3175.289 L 3806.73 3175.109 L 3807.09 3174.929 L 3807.45 3174.569 L 3807.64 3174.199 L 3807.64 3173.479 L 3807.45 3173.109 L 3807.09 3172.749 L 3806.73 3172.569 M 3804.55 3171.369 L 3804.36 3170.999 L 3803.82 3170.459 L 3807.64 3170.459 M 3803.82 3167.439 L 3806.36 3169.259 L 3806.36 3166.529 M 3803.82 3167.439 L 3807.64 3167.439~~gge257~~0~#@$TEXT~L~3826~3179.039~0.8~90~0~3~~4~PA0~M 3823.82 3179.039 L 3827.64 3179.039 M 3823.82 3179.039 L 3823.82 3177.399 L 3824 3176.859 L 3824.18 3176.679 L 3824.55 3176.489 L 3825.09 3176.489 L 3825.45 3176.679 L 3825.64 3176.859 L 3825.82 3177.399 L 3825.82 3179.039 M 3823.82 3173.839 L 3827.64 3175.289 M 3823.82 3173.839 L 3827.64 3172.389 M 3826.36 3174.749 L 3826.36 3172.929 M 3823.82 3170.089 L 3824 3170.639 L 3824.55 3170.999 L 3825.45 3171.189 L 3826 3171.189 L 3826.91 3170.999 L 3827.45 3170.639 L 3827.64 3170.089 L 3827.64 3169.729 L 3827.45 3169.189 L 3826.91 3168.819 L 3826 3168.639 L 3825.45 3168.639 L 3824.55 3168.819 L 3824 3169.189 L 3823.82 3169.729 L 3823.82 3170.089~~gge258~~0~#@$TEXT~L~3795~3076.039~0.8~90~0~3~~4~GND~M 3793.73 3073.309 L 3793.36 3073.489 L 3793 3073.859 L 3792.82 3074.219 L 3792.82 3074.949 L 3793 3075.309 L 3793.36 3075.679 L 3793.73 3075.859 L 3794.27 3076.039 L 3795.18 3076.039 L 3795.73 3075.859 L 3796.09 3075.679 L 3796.45 3075.309 L 3796.64 3074.949 L 3796.64 3074.219 L 3796.45 3073.859 L 3796.09 3073.489 L 3795.73 3073.309 L 3795.18 3073.309 M 3795.18 3074.219 L 3795.18 3073.309 M 3792.82 3072.109 L 3796.64 3072.109 M 3792.82 3072.109 L 3796.64 3069.569 M 3792.82 3069.569 L 3796.64 3069.569 M 3792.82 3068.369 L 3796.64 3068.369 M 3792.82 3068.369 L 3792.82 3067.089 L 3793 3066.549 L 3793.36 3066.189 L 3793.73 3065.999 L 3794.27 3065.819 L 3795.18 3065.819 L 3795.73 3065.999 L 3796.09 3066.189 L 3796.45 3066.549 L 3796.64 3067.089 L 3796.64 3068.369~~gge259~~0~#@$TEXT~L~3816~3076.039~0.8~90~0~3~~4~PB9~M 3813.82 3076.039 L 3817.64 3076.039 M 3813.82 3076.039 L 3813.82 3074.399 L 3814 3073.859 L 3814.18 3073.679 L 3814.55 3073.489 L 3815.09 3073.489 L 3815.45 3073.679 L 3815.64 3073.859 L 3815.82 3074.399 L 3815.82 3076.039 M 3813.82 3072.289 L 3817.64 3072.289 M 3813.82 3072.289 L 3813.82 3070.659 L 3814 3070.109 L 3814.18 3069.929 L 3814.55 3069.749 L 3814.91 3069.749 L 3815.27 3069.929 L 3815.45 3070.109 L 3815.64 3070.659 M 3815.64 3072.289 L 3815.64 3070.659 L 3815.82 3070.109 L 3816 3069.929 L 3816.36 3069.749 L 3816.91 3069.749 L 3817.27 3069.929 L 3817.45 3070.109 L 3817.64 3070.659 L 3817.64 3072.289 M 3815.09 3066.189 L 3815.64 3066.369 L 3816 3066.729 L 3816.18 3067.279 L 3816.18 3067.459 L 3816 3067.999 L 3815.64 3068.369 L 3815.09 3068.549 L 3814.91 3068.549 L 3814.36 3068.369 L 3814 3067.999 L 3813.82 3067.459 L 3813.82 3067.279 L 3814 3066.729 L 3814.36 3066.369 L 3815.09 3066.189 L 3816 3066.189 L 3816.91 3066.369 L 3817.45 3066.729 L 3817.64 3067.279 L 3817.64 3067.639 L 3817.45 3068.189 L 3817.09 3068.369~~gge260~~0~#@$TEXT~L~3785~3076.039~0.8~90~0~3~~4~3V3~M 3782.82 3075.679 L 3782.82 3073.679 L 3784.27 3074.769 L 3784.27 3074.219 L 3784.45 3073.859 L 3784.64 3073.679 L 3785.18 3073.489 L 3785.55 3073.489 L 3786.09 3073.679 L 3786.45 3074.039 L 3786.64 3074.589 L 3786.64 3075.129 L 3786.45 3075.679 L 3786.27 3075.859 L 3785.91 3076.039 M 3782.82 3072.289 L 3786.64 3070.839 M 3782.82 3069.389 L 3786.64 3070.839 M 3782.82 3067.819 L 3782.82 3065.819 L 3784.27 3066.909 L 3784.27 3066.369 L 3784.45 3065.999 L 3784.64 3065.819 L 3785.18 3065.639 L 3785.55 3065.639 L 3786.09 3065.819 L 3786.45 3066.189 L 3786.64 3066.729 L 3786.64 3067.279 L 3786.45 3067.819 L 3786.27 3067.999 L 3785.91 3068.189~~gge261~~0~#@$TEXT~L~3825~3076.039~0.8~90~0~3~~4~PB8~M 3822.82 3076.039 L 3826.64 3076.039 M 3822.82 3076.039 L 3822.82 3074.399 L 3823 3073.859 L 3823.18 3073.679 L 3823.55 3073.489 L 3824.09 3073.489 L 3824.45 3073.679 L 3824.64 3073.859 L 3824.82 3074.399 L 3824.82 3076.039 M 3822.82 3072.289 L 3826.64 3072.289 M 3822.82 3072.289 L 3822.82 3070.659 L 3823 3070.109 L 3823.18 3069.929 L 3823.55 3069.749 L 3823.91 3069.749 L 3824.27 3069.929 L 3824.45 3070.109 L 3824.64 3070.659 M 3824.64 3072.289 L 3824.64 3070.659 L 3824.82 3070.109 L 3825 3069.929 L 3825.36 3069.749 L 3825.91 3069.749 L 3826.27 3069.929 L 3826.45 3070.109 L 3826.64 3070.659 L 3826.64 3072.289 M 3822.82 3067.639 L 3823 3068.189 L 3823.36 3068.369 L 3823.73 3068.369 L 3824.09 3068.189 L 3824.27 3067.819 L 3824.45 3067.089 L 3824.64 3066.549 L 3825 3066.189 L 3825.36 3065.999 L 3825.91 3065.999 L 3826.27 3066.189 L 3826.45 3066.369 L 3826.64 3066.909 L 3826.64 3067.639 L 3826.45 3068.189 L 3826.27 3068.369 L 3825.91 3068.549 L 3825.36 3068.549 L 3825 3068.369 L 3824.64 3067.999 L 3824.45 3067.459 L 3824.27 3066.729 L 3824.09 3066.369 L 3823.73 3066.189 L 3823.36 3066.189 L 3823 3066.369 L 3822.82 3066.909 L 3822.82 3067.639~~gge262~~0~#@$TEXT~L~3805~3076.039~0.8~90~0~3~~4~5V~M 3802.82 3073.859 L 3802.82 3075.679 L 3804.45 3075.859 L 3804.27 3075.679 L 3804.09 3075.129 L 3804.09 3074.589 L 3804.27 3074.039 L 3804.64 3073.679 L 3805.18 3073.489 L 3805.55 3073.489 L 3806.09 3073.679 L 3806.45 3074.039 L 3806.64 3074.589 L 3806.64 3075.129 L 3806.45 3075.679 L 3806.27 3075.859 L 3805.91 3076.039 M 3802.82 3072.289 L 3806.64 3070.839 M 3802.82 3069.389 L 3806.64 3070.839~~gge263~~0~#@$TEXT~L~3810.22~3121.479~0.8~0~0~3~~15.748~STM32F103C~M 3820.24 3115.0389 L 3818.81 3113.6089 L 3816.66 3112.8889 L 3813.8 3112.8889 L 3811.65 3113.6089 L 3810.22 3115.0389 L 3810.22 3116.4689 L 3810.94 3117.8989 L 3811.65 3118.6189 L 3813.08 3119.3289 L 3817.38 3120.7589 L 3818.81 3121.4789 L 3819.53 3122.1989 L 3820.24 3123.6289 L 3820.24 3125.7689 L 3818.81 3127.2089 L 3816.66 3127.9189 L 3813.8 3127.9189 L 3811.65 3127.2089 L 3810.22 3125.7689 M 3829.98 3112.8889 L 3829.98 3127.9189 M 3824.97 3112.8889 L 3834.99 3112.8889 M 3839.71 3112.8889 L 3839.71 3127.9189 M 3839.71 3112.8889 L 3845.44 3127.9189 M 3851.16 3112.8889 L 3845.44 3127.9189 M 3851.16 3112.8889 L 3851.16 3127.9189 M 3857.32 3112.8889 L 3865.19 3112.8889 L 3860.9 3118.6189 L 3863.05 3118.6189 L 3864.48 3119.3289 L 3865.19 3120.0489 L 3865.91 3122.1989 L 3865.91 3123.6289 L 3865.19 3125.7689 L 3863.76 3127.2089 L 3861.62 3127.9189 L 3859.47 3127.9189 L 3857.32 3127.2089 L 3856.61 3126.4889 L 3855.89 3125.0589 M 3871.35 3116.4689 L 3871.35 3115.7489 L 3872.07 3114.3189 L 3872.78 3113.6089 L 3874.21 3112.8889 L 3877.08 3112.8889 L 3878.51 3113.6089 L 3879.22 3114.3189 L 3879.94 3115.7489 L 3879.94 3117.1889 L 3879.22 3118.6189 L 3877.79 3120.7589 L 3870.64 3127.9189 L 3880.66 3127.9189 M 3885.38 3112.8889 L 3885.38 3127.9189 M 3885.38 3112.8889 L 3894.69 3112.8889 M 3885.38 3120.0489 L 3891.11 3120.0489 M 3899.41 3115.7489 L 3900.84 3115.0389 L 3902.99 3112.8889 L 3902.99 3127.9189 M 3912.01 3112.8889 L 3909.86 3113.6089 L 3908.43 3115.7489 L 3907.71 3119.3289 L 3907.71 3121.4789 L 3908.43 3125.0589 L 3909.86 3127.2089 L 3912.01 3127.9189 L 3913.44 3127.9189 L 3915.59 3127.2089 L 3917.02 3125.0589 L 3917.74 3121.4789 L 3917.74 3119.3289 L 3917.02 3115.7489 L 3915.59 3113.6089 L 3913.44 3112.8889 L 3912.01 3112.8889 M 3923.89 3112.8889 L 3931.77 3112.8889 L 3927.47 3118.6189 L 3929.62 3118.6189 L 3931.05 3119.3289 L 3931.77 3120.0489 L 3932.48 3122.1989 L 3932.48 3123.6289 L 3931.77 3125.7689 L 3930.33 3127.2089 L 3928.19 3127.9189 L 3926.04 3127.9189 L 3923.89 3127.2089 L 3923.18 3126.4889 L 3922.46 3125.0589 M 3947.94 3116.4689 L 3947.23 3115.0389 L 3945.8 3113.6089 L 3944.36 3112.8889 L 3941.5 3112.8889 L 3940.07 3113.6089 L 3938.64 3115.0389 L 3937.92 3116.4689 L 3937.21 3118.6189 L 3937.21 3122.1989 L 3937.92 3124.3389 L 3938.64 3125.7689 L 3940.07 3127.2089 L 3941.5 3127.9189 L 3944.36 3127.9189 L 3945.8 3127.2089 L 3947.23 3125.7689 L 3947.94 3124.3389~~gge264~~0~#@$PAD~RECT~3835~3150.039~7.99~12.99~11~TH1+~6~1.8~3831.005 3143.539 3838.995 3143.539 3838.995 3156.539 3831.005 3156.539~0~gge265~0~~Y~0~0~0.4~3835,3150.039#@$PAD~RECT~3845~3150.039~7.99~12.99~11~TH2-~7~1.8~3841.004 3143.544 3848.996 3143.544 3848.996 3156.534 3841.004 3156.534~0~gge266~0~~Y~0~0~0.4~3845,3150.039#@$PAD~RECT~3855~3150.039~7.99~12.99~11~TH2+~8~1.8~3851.004 3143.544 3858.996 3143.544 3858.996 3156.534 3851.004 3156.534~0~gge267~0~~Y~0~0~0.4~3855,3150.039#@$PAD~RECT~3865~3150.039~7.99~12.99~11~TH_EXT-~9~1.8~3861.004 3143.544 3868.996 3143.544 3868.996 3156.534 3861.004 3156.534~0~gge268~0~~Y~0~0~0.4~3865,3150.039#@$PAD~RECT~3875~3150.039~7.99~12.99~11~TH_EXT+~10~1.8~3871.004 3143.544 3878.996 3143.544 3878.996 3156.534 3871.004 3156.534~0~gge269~0~~Y~0~0~0.4~3875,3150.039#@$PAD~RECT~3885~3150.039~7.99~12.99~11~~11~1.8~3881.004 3143.544 3888.996 3143.544 3888.996 3156.534 3881.004 3156.534~0~gge270~0~~Y~0~0~0.4~3885,3150.039#@$PAD~RECT~3895~3150.039~7.99~12.99~11~~12~1.8~3891.004 3143.544 3898.996 3143.544 3898.996 3156.534 3891.004 3156.534~0~gge271~0~~Y~0~0~0.4~3895,3150.039#@$PAD~RECT~3905~3150.039~7.99~12.99~11~~13~1.8~3901.004 3143.544 3908.996 3143.544 3908.996 3156.534 3901.004 3156.534~0~gge272~0~~Y~0~0~0.4~3905,3150.039#@$PAD~RECT~3915~3150.039~7.99~12.99~11~~14~1.8~3911.004 3143.544 3918.996 3143.544 3918.996 3156.534 3911.004 3156.534~0~gge273~0~~Y~0~0~0.4~3915,3150.039#@$PAD~RECT~3925~3150.039~7.99~12.99~11~~15~1.8~3921.004 3143.544 3928.996 3143.544 3928.996 3156.534 3921.004 3156.534~0~gge274~0~~Y~0~0~0.4~3925,3150.039#@$PAD~RECT~3935~3150.039~7.99~12.99~11~~16~1.8~3931.004 3143.544 3938.996 3143.544 3938.996 3156.534 3931.004 3156.534~0~gge275~0~~Y~0~0~0.4~3935,3150.039#@$PAD~RECT~3945~3150.039~7.99~12.99~11~~17~1.8~3941.004 3143.544 3948.996 3143.544 3948.996 3156.534 3941.004 3156.534~0~gge276~0~~Y~0~0~0.4~3945,3150.039#@$PAD~RECT~3955~3150.039~7.99~12.99~11~+3.3V~18~1.8~3951.004 3143.544 3958.996 3143.544 3958.996 3156.534 3951.004 3156.534~0~gge277~0~~Y~0~0~0.4~3955,3150.039#@$PAD~RECT~3965~3150.039~7.99~12.99~11~GND~19~1.8~3961.004 3143.544 3968.996 3143.544 3968.996 3156.534 3961.004 3156.534~0~gge278~0~~Y~0~0~0.4~3965,3150.039#@$PAD~RECT~3976~3150.039~7.99~12.99~11~GND~20~1.8~3972.004 3143.544 3979.996 3143.544 3979.996 3156.534 3972.004 3156.534~0~gge279~0~~Y~0~0~0.4~3976,3150.039#@$PAD~RECT~3835~3090.039~7.99~12.99~11~UP_35~35~1.8~3831.004 3083.544 3838.996 3083.544 3838.996 3096.534 3831.004 3096.534~0~gge280~0~~Y~0~0~0.4~3835,3090.039#@$PAD~RECT~3845~3090.039~7.99~12.99~11~UP_34~34~1.8~3841.004 3083.544 3848.996 3083.544 3848.996 3096.534 3841.004 3096.534~0~gge281~0~~Y~0~0~0.4~3845,3090.039#@$PAD~RECT~3855~3090.039~7.99~12.99~11~~33~1.8~3851.004 3083.544 3858.996 3083.544 3858.996 3096.534 3851.004 3096.534~0~gge282~0~~Y~0~0~0.4~3855,3090.039#@$PAD~RECT~3865~3090.039~7.99~12.99~11~DB7~32~1.8~3861.004 3083.544 3868.996 3083.544 3868.996 3096.534 3861.004 3096.534~0~gge283~0~~Y~0~0~0.4~3865,3090.039#@$PAD~RECT~3875~3090.039~7.99~12.99~11~DB5~31~1.8~3871.004 3083.544 3878.996 3083.544 3878.996 3096.534 3871.004 3096.534~0~gge284~0~~Y~0~0~0.4~3875,3090.039#@$PAD~RECT~3885~3090.039~7.99~12.99~11~DB3~30~1.8~3881.004 3083.544 3888.996 3083.544 3888.996 3096.534 3881.004 3096.534~0~gge285~0~~Y~0~0~0.4~3885,3090.039#@$PAD~RECT~3895~3090.039~7.99~12.99~11~DB1~29~1.8~3891.004 3083.544 3898.996 3083.544 3898.996 3096.534 3891.004 3096.534~0~gge286~0~~Y~0~0~0.4~3895,3090.039#@$PAD~RECT~3905~3090.039~7.99~12.99~11~E~28~1.8~3901.004 3083.544 3908.996 3083.544 3908.996 3096.534 3901.004 3096.534~0~gge287~0~~Y~0~0~0.4~3905,3090.039#@$PAD~RECT~3915~3090.039~7.99~12.99~11~RS~27~1.8~3911.004 3083.544 3918.996 3083.544 3918.996 3096.534 3911.004 3096.534~0~gge288~0~~Y~0~0~0.4~3915,3090.039#@$PAD~RECT~3925~3090.039~7.99~12.99~11~R/W~26~1.8~3921.004 3083.544 3928.996 3083.544 3928.996 3096.534 3921.004 3096.534~0~gge289~0~~Y~0~0~0.4~3925,3090.039#@$PAD~RECT~3935~3090.039~7.99~12.99~11~DB0~25~1.8~3931.004 3083.544 3938.996 3083.544 3938.996 3096.534 3931.004 3096.534~0~gge290~0~~Y~0~0~0.4~3935,3090.039#@$PAD~RECT~3945~3090.039~7.99~12.99~11~DB2~24~1.8~3941.004 3083.544 3948.996 3083.544 3948.996 3096.534 3941.004 3096.534~0~gge291~0~~Y~0~0~0.4~3945,3090.039#@$PAD~RECT~3955~3090.039~7.99~12.99~11~DB4~23~1.8~3951.004 3083.544 3958.996 3083.544 3958.996 3096.534 3951.004 3096.534~0~gge292~0~~Y~0~0~0.4~3955,3090.039#@$PAD~RECT~3965~3090.039~7.99~12.99~11~DB6~22~1.8~3961.004 3083.544 3968.996 3083.544 3968.996 3096.534 3961.004 3096.534~0~gge293~0~~Y~0~0~0.4~3965,3090.039#@$PAD~RECT~3975~3090.039~7.99~12.99~11~UP_21~21~1.8~3971.004 3083.544 3978.996 3083.544 3978.996 3096.534 3971.004 3096.534~0~gge294~0~~Y~0~0~0.4~3975,3090.039#@$PAD~RECT~3785~3090.039~7.99~12.99~11~~40~1.8~3781.004 3083.544 3788.996 3083.544 3788.996 3096.534 3781.004 3096.534~0~gge295~0~~Y~0~0~0.4~3785,3090.039#@$PAD~RECT~3795~3090.039~7.99~12.99~11~GND~39~1.8~3791.004 3083.544 3798.996 3083.544 3798.996 3096.534 3791.004 3096.534~0~gge296~0~~Y~0~0~0.4~3795,3090.039#@$PAD~RECT~3805~3090.039~7.99~12.99~11~+5V~38~1.8~3801.004 3083.544 3808.996 3083.544 3808.996 3096.534 3801.004 3096.534~0~gge297~0~~Y~0~0~0.4~3805,3090.039#@$PAD~RECT~3815~3090.039~7.99~12.99~11~BACK~37~1.8~3811.004 3083.544 3818.996 3083.544 3818.996 3096.534 3811.004 3096.534~0~gge298~0~~Y~0~0~0.4~3815,3090.039#@$PAD~RECT~3825~3090.039~7.99~12.99~11~SW~36~1.8~3821.004 3083.544 3828.996 3083.544 3828.996 3096.534 3821.004 3096.534~0~gge299~0~~Y~0~0~0.4~3825,3090.039#@$PAD~RECT~3785~3150.039~7.99~12.99~11~~1~1.8~3781.004 3143.544 3788.996 3143.544 3788.996 3156.534 3781.004 3156.534~0~gge300~0~~Y~0~0~0.4~3785,3150.039#@$PAD~RECT~3795~3150.039~7.99~12.99~11~~2~1.8~3791.004 3143.544 3798.996 3143.544 3798.996 3156.534 3791.004 3156.534~0~gge301~0~~Y~0~0~0.4~3795,3150.039#@$PAD~RECT~3805~3150.039~7.99~12.99~11~~3~1.8~3801.004 3143.544 3808.996 3143.544 3808.996 3156.534 3801.004 3156.534~0~gge302~0~~Y~0~0~0.4~3805,3150.039#@$PAD~RECT~3815~3150.039~7.99~12.99~11~~4~1.8~3811.004 3143.544 3818.996 3143.544 3818.996 3156.534 3811.004 3156.534~0~gge303~0~~Y~0~0~0.4~3815,3150.039#@$PAD~RECT~3825~3150.039~7.99~12.99~11~TH1-~5~1.8~3821.004 3143.544 3828.996 3143.544 3828.996 3156.534 3821.004 3156.534~0~gge304~0~~Y~0~0~0.4~3825,3150.039", + "LIB~3735~3155~package`AXIAL-0.3`~270~~gge317~1~b9efc06d0fb742f99a478d48de211eb9~1548710936~0~dc7cef580a888d2f#@$TEXT~P~3746.15~3157.28~0.6~90~0~3~~4.5~RC~M 3739.9999 3157.28 L 3744.2899 3157.28 M 3739.9999 3157.28 L 3739.9999 3155.44 L 3740.1999 3154.83 L 3740.3999 3154.62 L 3740.8099 3154.42 L 3741.2199 3154.42 L 3741.6299 3154.62 L 3741.8399 3154.83 L 3742.0399 3155.44 L 3742.0399 3157.28 M 3742.0399 3155.85 L 3744.2899 3154.42 M 3741.0199 3150 L 3740.6099 3150.2 L 3740.1999 3150.61 L 3739.9999 3151.02 L 3739.9999 3151.84 L 3740.1999 3152.25 L 3740.6099 3152.66 L 3741.0199 3152.86 L 3741.6299 3153.07 L 3742.6499 3153.07 L 3743.2699 3152.86 L 3743.6799 3152.66 L 3744.0899 3152.25 L 3744.2899 3151.84 L 3744.2899 3151.02 L 3744.0899 3150.61 L 3743.6799 3150.2 L 3743.2699 3150~~gge318~~0~#@$TEXT~N~3743.74~3155~0.6~270~0~3~~4.5~10k~M 3749.08 3155 L 3749.28 3155.41 L 3749.89 3156.02 L 3745.6 3156.02 M 3749.89 3158.6 L 3749.69 3157.99 L 3749.08 3157.58 L 3748.05 3157.37 L 3747.44 3157.37 L 3746.42 3157.58 L 3745.8 3157.99 L 3745.6 3158.6 L 3745.6 3159.01 L 3745.8 3159.62 L 3746.42 3160.03 L 3747.44 3160.24 L 3748.05 3160.24 L 3749.08 3160.03 L 3749.69 3159.62 L 3749.89 3159.01 L 3749.89 3158.6 M 3749.89 3161.59 L 3745.6 3161.59 M 3748.46 3163.63 L 3746.42 3161.59 M 3747.24 3162.4 L 3745.6 3163.84~none~gge319~~0~#@$TRACK~1~3~~3738 3145 3738 3165~gge320~0#@$TRACK~1~3~~3738 3165 3735 3165~gge321~0#@$TRACK~1~3~~3735 3165 3732 3165~gge322~0#@$TRACK~1~3~~3732 3165 3732 3145~gge323~0#@$TRACK~1~3~~3732 3145 3735 3145~gge324~0#@$TRACK~1~3~~3735 3145 3738 3145~gge325~0#@$TRACK~1~3~~3735 3165 3735 3166~gge326~0#@$TRACK~1~3~~3735 3145 3735 3144~gge327~0#@$PAD~ELLIPSE~3735~3140~7.4~7.4~11~UP_21~1~1.77~~270~gge328~0~~Y~0~0~0.4~3735,3140#@$PAD~ELLIPSE~3735~3170~7.4~7.4~11~RC_2~2~1.77~~270~gge329~0~~Y~0~0~0.4~3735,3170", + "LIB~3637.4999~3139.9999~package`PHOENIX-2PIN-5.08MM`~180~~gge330~1~cee0def10c584f32ac2d8c27339b6535~1571571027~0~048d9e1bb1c218a9#@$TEXT~P~3610~3165~0.6~0~0~3~~4.5~SWITCH_2~M 3612.8601 3162.75 L 3612.4501 3162.34 L 3611.8401 3162.14 L 3611.0201 3162.14 L 3610.4101 3162.34 L 3610.0001 3162.75 L 3610.0001 3163.16 L 3610.2001 3163.57 L 3610.4101 3163.77 L 3610.8201 3163.98 L 3612.0501 3164.39 L 3612.4501 3164.59 L 3612.6601 3164.79 L 3612.8601 3165.2 L 3612.8601 3165.82 L 3612.4501 3166.23 L 3611.8401 3166.43 L 3611.0201 3166.43 L 3610.4101 3166.23 L 3610.0001 3165.82 M 3614.2101 3162.14 L 3615.2401 3166.43 M 3616.2601 3162.14 L 3615.2401 3166.43 M 3616.2601 3162.14 L 3617.2801 3166.43 M 3618.3001 3162.14 L 3617.2801 3166.43 M 3619.6501 3162.14 L 3619.6501 3166.43 M 3622.4401 3162.14 L 3622.4401 3166.43 M 3621.0001 3162.14 L 3623.8701 3162.14 M 3628.2901 3163.16 L 3628.0801 3162.75 L 3627.6701 3162.34 L 3627.2601 3162.14 L 3626.4501 3162.14 L 3626.0401 3162.34 L 3625.6301 3162.75 L 3625.4201 3163.16 L 3625.2201 3163.77 L 3625.2201 3164.79 L 3625.4201 3165.41 L 3625.6301 3165.82 L 3626.0401 3166.23 L 3626.4501 3166.43 L 3627.2601 3166.43 L 3627.6701 3166.23 L 3628.0801 3165.82 L 3628.2901 3165.41 M 3629.6401 3162.14 L 3629.6401 3166.43 M 3632.5001 3162.14 L 3632.5001 3166.43 M 3629.6401 3164.18 L 3632.5001 3164.18 M 3633.8501 3167.86 L 3637.5301 3167.86 M 3639.0901 3163.16 L 3639.0901 3162.95 L 3639.2901 3162.54 L 3639.5001 3162.34 L 3639.9001 3162.14 L 3640.7201 3162.14 L 3641.1301 3162.34 L 3641.3401 3162.54 L 3641.5401 3162.95 L 3641.5401 3163.36 L 3641.3401 3163.77 L 3640.9301 3164.39 L 3638.8801 3166.43 L 3641.7501 3166.43~~gge331~~0~#@$TEXT~N~3627.5~3166.07~0.6~180~0~3~~4.5~Phoenix-2pin-5.08mm~M 3627.4999 3172.2199 L 3627.4999 3167.9299 M 3627.4999 3172.2199 L 3625.6599 3172.2199 L 3625.0499 3172.0199 L 3624.8399 3171.8199 L 3624.6399 3171.4099 L 3624.6399 3170.7899 L 3624.8399 3170.3799 L 3625.0499 3170.1799 L 3625.6599 3169.9699 L 3627.4999 3169.9699 M 3623.2899 3172.2199 L 3623.2899 3167.9299 M 3623.2899 3169.9699 L 3622.6699 3170.5899 L 3622.2599 3170.7899 L 3621.6499 3170.7899 L 3621.2399 3170.5899 L 3621.0399 3169.9699 L 3621.0399 3167.9299 M 3618.6599 3170.7899 L 3619.0699 3170.5899 L 3619.4799 3170.1799 L 3619.6899 3169.5699 L 3619.6899 3169.1599 L 3619.4799 3168.5399 L 3619.0699 3168.1299 L 3618.6599 3167.9299 L 3618.0499 3167.9299 L 3617.6399 3168.1299 L 3617.2299 3168.5399 L 3617.0299 3169.1599 L 3617.0299 3169.5699 L 3617.2299 3170.1799 L 3617.6399 3170.5899 L 3618.0499 3170.7899 L 3618.6599 3170.7899 M 3615.6799 3169.5699 L 3613.2199 3169.5699 L 3613.2199 3169.9699 L 3613.4299 3170.3799 L 3613.6299 3170.5899 L 3614.0399 3170.7899 L 3614.6499 3170.7899 L 3615.0599 3170.5899 L 3615.4699 3170.1799 L 3615.6799 3169.5699 L 3615.6799 3169.1599 L 3615.4699 3168.5399 L 3615.0599 3168.1299 L 3614.6499 3167.9299 L 3614.0399 3167.9299 L 3613.6299 3168.1299 L 3613.2199 3168.5399 M 3611.8699 3170.7899 L 3611.8699 3167.9299 M 3611.8699 3169.9699 L 3611.2599 3170.5899 L 3610.8499 3170.7899 L 3610.2399 3170.7899 L 3609.8299 3170.5899 L 3609.6199 3169.9699 L 3609.6199 3167.9299 M 3608.2699 3172.2199 L 3608.0699 3172.0199 L 3607.8599 3172.2199 L 3608.0699 3172.4299 L 3608.2699 3172.2199 M 3608.0699 3170.7899 L 3608.0699 3167.9299 M 3606.5099 3170.7899 L 3604.2599 3167.9299 M 3604.2599 3170.7899 L 3606.5099 3167.9299 M 3602.9099 3169.7699 L 3599.2299 3169.7699 M 3597.6799 3171.1999 L 3597.6799 3171.4099 L 3597.4699 3171.8199 L 3597.2699 3172.0199 L 3596.8599 3172.2199 L 3596.0399 3172.2199 L 3595.6299 3172.0199 L 3595.4299 3171.8199 L 3595.2199 3171.4099 L 3595.2199 3170.9999 L 3595.4299 3170.5899 L 3595.8399 3169.9699 L 3597.8799 3167.9299 L 3595.0199 3167.9299 M 3593.6699 3170.7899 L 3593.6699 3166.4999 M 3593.6699 3170.1799 L 3593.2599 3170.5899 L 3592.8499 3170.7899 L 3592.2399 3170.7899 L 3591.8299 3170.5899 L 3591.4199 3170.1799 L 3591.2099 3169.5699 L 3591.2099 3169.1599 L 3591.4199 3168.5399 L 3591.8299 3168.1299 L 3592.2399 3167.9299 L 3592.8499 3167.9299 L 3593.2599 3168.1299 L 3593.6699 3168.5399 M 3589.8599 3172.2199 L 3589.6599 3172.0199 L 3589.4499 3172.2199 L 3589.6599 3172.4299 L 3589.8599 3172.2199 M 3589.6599 3170.7899 L 3589.6599 3167.9299 M 3588.0999 3170.7899 L 3588.0999 3167.9299 M 3588.0999 3169.9699 L 3587.4899 3170.5899 L 3587.0799 3170.7899 L 3586.4699 3170.7899 L 3586.0599 3170.5899 L 3585.8499 3169.9699 L 3585.8499 3167.9299 M 3584.4999 3169.7699 L 3580.8199 3169.7699 M 3577.0199 3172.2199 L 3579.0599 3172.2199 L 3579.2699 3170.3799 L 3579.0599 3170.5899 L 3578.4499 3170.7899 L 3577.8399 3170.7899 L 3577.2199 3170.5899 L 3576.8099 3170.1799 L 3576.6099 3169.5699 L 3576.6099 3169.1599 L 3576.8099 3168.5399 L 3577.2199 3168.1299 L 3577.8399 3167.9299 L 3578.4499 3167.9299 L 3579.0599 3168.1299 L 3579.2699 3168.3399 L 3579.4699 3168.7499 M 3575.0499 3168.9499 L 3575.2599 3168.7499 L 3575.0499 3168.5399 L 3574.8499 3168.7499 L 3575.0499 3168.9499 M 3572.2699 3172.2199 L 3572.8899 3172.0199 L 3573.2999 3171.4099 L 3573.4999 3170.3799 L 3573.4999 3169.7699 L 3573.2999 3168.7499 L 3572.8899 3168.1299 L 3572.2699 3167.9299 L 3571.8599 3167.9299 L 3571.2499 3168.1299 L 3570.8399 3168.7499 L 3570.6399 3169.7699 L 3570.6399 3170.3799 L 3570.8399 3171.4099 L 3571.2499 3172.0199 L 3571.8599 3172.2199 L 3572.2699 3172.2199 M 3568.2599 3172.2199 L 3568.8799 3172.0199 L 3569.0799 3171.6099 L 3569.0799 3171.1999 L 3568.8799 3170.7899 L 3568.4699 3170.5899 L 3567.6499 3170.3799 L 3567.0399 3170.1799 L 3566.6299 3169.7699 L 3566.4199 3169.3599 L 3566.4199 3168.7499 L 3566.6299 3168.3399 L 3566.8299 3168.1299 L 3567.4499 3167.9299 L 3568.2599 3167.9299 L 3568.8799 3168.1299 L 3569.0799 3168.3399 L 3569.2899 3168.7499 L 3569.2899 3169.3599 L 3569.0799 3169.7699 L 3568.6699 3170.1799 L 3568.0599 3170.3799 L 3567.2399 3170.5899 L 3566.8299 3170.7899 L 3566.6299 3171.1999 L 3566.6299 3171.6099 L 3566.8299 3172.0199 L 3567.4499 3172.2199 L 3568.2599 3172.2199 M 3565.0699 3170.7899 L 3565.0699 3167.9299 M 3565.0699 3169.9699 L 3564.4599 3170.5899 L 3564.0499 3170.7899 L 3563.4399 3170.7899 L 3563.0299 3170.5899 L 3562.8199 3169.9699 L 3562.8199 3167.9299 M 3562.8199 3169.9699 L 3562.2099 3170.5899 L 3561.7999 3170.7899 L 3561.1899 3170.7899 L 3560.7799 3170.5899 L 3560.5699 3169.9699 L 3560.5699 3167.9299 M 3559.2199 3170.7899 L 3559.2199 3167.9299 M 3559.2199 3169.9699 L 3558.6099 3170.5899 L 3558.1999 3170.7899 L 3557.5899 3170.7899 L 3557.1799 3170.5899 L 3556.9699 3169.9699 L 3556.9699 3167.9299 M 3556.9699 3169.9699 L 3556.3599 3170.5899 L 3555.9499 3170.7899 L 3555.3399 3170.7899 L 3554.9299 3170.5899 L 3554.7199 3169.9699 L 3554.7199 3167.9299~none~gge332~~0~#@$TRACK~1~3~~3647.4999 3159.9999 3607.4999 3159.9999 3607.4999 3119.9999 3647.4999 3119.9999 3647.4999 3159.9999~gge333~0#@$TRACK~1~3~~3627.4999 3124.9999 3607.4999 3124.9999 3607.4999 3119.9999 3627.4999 3119.9999 3627.4999 3124.9999~gge334~0#@$TRACK~1~3~~3647.4999 3124.9999 3627.4999 3124.9999 3627.4999 3119.9999 3647.4999 3119.9999 3647.4999 3124.9999~gge335~0#@$PAD~RECT~3637.5~3140~8.6614~8.6614~11~+5V~1~2.5~3641.8306 3144.3306 3633.1692 3144.3306 3633.1692 3135.6692 3641.8306 3135.6692~180~gge336~0~~Y~0~0~0.4~3637.4999,3139.9999#@$PAD~ELLIPSE~3617.5~3140~8.6614~8.6614~11~~2~2.5~~180~gge337~0~~Y~0~0~0.4~3617.4999,3139.9999", + "LIB~3682.4999~3139.9999~package`PHOENIX-2PIN-5.08MM`~180~~gge338~1~cee0def10c584f32ac2d8c27339b6535~1571571027~0~858d7335844ce2f4#@$TEXT~P~3655~3165~0.6~0~0~3~~4.5~SWITCH_1~M 3657.8599 3162.75 L 3657.4499 3162.34 L 3656.8399 3162.14 L 3656.0199 3162.14 L 3655.4099 3162.34 L 3654.9999 3162.75 L 3654.9999 3163.16 L 3655.1999 3163.57 L 3655.4099 3163.77 L 3655.8199 3163.98 L 3657.0499 3164.39 L 3657.4499 3164.59 L 3657.6599 3164.79 L 3657.8599 3165.2 L 3657.8599 3165.82 L 3657.4499 3166.23 L 3656.8399 3166.43 L 3656.0199 3166.43 L 3655.4099 3166.23 L 3654.9999 3165.82 M 3659.2099 3162.14 L 3660.2399 3166.43 M 3661.2599 3162.14 L 3660.2399 3166.43 M 3661.2599 3162.14 L 3662.2799 3166.43 M 3663.2999 3162.14 L 3662.2799 3166.43 M 3664.6499 3162.14 L 3664.6499 3166.43 M 3667.4399 3162.14 L 3667.4399 3166.43 M 3665.9999 3162.14 L 3668.8699 3162.14 M 3673.2899 3163.16 L 3673.0799 3162.75 L 3672.6699 3162.34 L 3672.2599 3162.14 L 3671.4499 3162.14 L 3671.0399 3162.34 L 3670.6299 3162.75 L 3670.4199 3163.16 L 3670.2199 3163.77 L 3670.2199 3164.79 L 3670.4199 3165.41 L 3670.6299 3165.82 L 3671.0399 3166.23 L 3671.4499 3166.43 L 3672.2599 3166.43 L 3672.6699 3166.23 L 3673.0799 3165.82 L 3673.2899 3165.41 M 3674.6399 3162.14 L 3674.6399 3166.43 M 3677.4999 3162.14 L 3677.4999 3166.43 M 3674.6399 3164.18 L 3677.4999 3164.18 M 3678.8499 3167.86 L 3682.5299 3167.86 M 3683.8799 3162.95 L 3684.2899 3162.75 L 3684.8999 3162.14 L 3684.8999 3166.43~~gge339~~0~#@$TEXT~N~3672.5~3166.07~0.6~180~0~3~~4.5~Phoenix-2pin-5.08mm~M 3672.4999 3172.2199 L 3672.4999 3167.9299 M 3672.4999 3172.2199 L 3670.6599 3172.2199 L 3670.0499 3172.0199 L 3669.8399 3171.8199 L 3669.6399 3171.4099 L 3669.6399 3170.7899 L 3669.8399 3170.3799 L 3670.0499 3170.1799 L 3670.6599 3169.9699 L 3672.4999 3169.9699 M 3668.2899 3172.2199 L 3668.2899 3167.9299 M 3668.2899 3169.9699 L 3667.6699 3170.5899 L 3667.2599 3170.7899 L 3666.6499 3170.7899 L 3666.2399 3170.5899 L 3666.0399 3169.9699 L 3666.0399 3167.9299 M 3663.6599 3170.7899 L 3664.0699 3170.5899 L 3664.4799 3170.1799 L 3664.6899 3169.5699 L 3664.6899 3169.1599 L 3664.4799 3168.5399 L 3664.0699 3168.1299 L 3663.6599 3167.9299 L 3663.0499 3167.9299 L 3662.6399 3168.1299 L 3662.2299 3168.5399 L 3662.0299 3169.1599 L 3662.0299 3169.5699 L 3662.2299 3170.1799 L 3662.6399 3170.5899 L 3663.0499 3170.7899 L 3663.6599 3170.7899 M 3660.6799 3169.5699 L 3658.2199 3169.5699 L 3658.2199 3169.9699 L 3658.4299 3170.3799 L 3658.6299 3170.5899 L 3659.0399 3170.7899 L 3659.6499 3170.7899 L 3660.0599 3170.5899 L 3660.4699 3170.1799 L 3660.6799 3169.5699 L 3660.6799 3169.1599 L 3660.4699 3168.5399 L 3660.0599 3168.1299 L 3659.6499 3167.9299 L 3659.0399 3167.9299 L 3658.6299 3168.1299 L 3658.2199 3168.5399 M 3656.8699 3170.7899 L 3656.8699 3167.9299 M 3656.8699 3169.9699 L 3656.2599 3170.5899 L 3655.8499 3170.7899 L 3655.2399 3170.7899 L 3654.8299 3170.5899 L 3654.6199 3169.9699 L 3654.6199 3167.9299 M 3653.2699 3172.2199 L 3653.0699 3172.0199 L 3652.8599 3172.2199 L 3653.0699 3172.4299 L 3653.2699 3172.2199 M 3653.0699 3170.7899 L 3653.0699 3167.9299 M 3651.5099 3170.7899 L 3649.2599 3167.9299 M 3649.2599 3170.7899 L 3651.5099 3167.9299 M 3647.9099 3169.7699 L 3644.2299 3169.7699 M 3642.6799 3171.1999 L 3642.6799 3171.4099 L 3642.4699 3171.8199 L 3642.2699 3172.0199 L 3641.8599 3172.2199 L 3641.0399 3172.2199 L 3640.6299 3172.0199 L 3640.4299 3171.8199 L 3640.2199 3171.4099 L 3640.2199 3170.9999 L 3640.4299 3170.5899 L 3640.8399 3169.9699 L 3642.8799 3167.9299 L 3640.0199 3167.9299 M 3638.6699 3170.7899 L 3638.6699 3166.4999 M 3638.6699 3170.1799 L 3638.2599 3170.5899 L 3637.8499 3170.7899 L 3637.2399 3170.7899 L 3636.8299 3170.5899 L 3636.4199 3170.1799 L 3636.2099 3169.5699 L 3636.2099 3169.1599 L 3636.4199 3168.5399 L 3636.8299 3168.1299 L 3637.2399 3167.9299 L 3637.8499 3167.9299 L 3638.2599 3168.1299 L 3638.6699 3168.5399 M 3634.8599 3172.2199 L 3634.6599 3172.0199 L 3634.4499 3172.2199 L 3634.6599 3172.4299 L 3634.8599 3172.2199 M 3634.6599 3170.7899 L 3634.6599 3167.9299 M 3633.0999 3170.7899 L 3633.0999 3167.9299 M 3633.0999 3169.9699 L 3632.4899 3170.5899 L 3632.0799 3170.7899 L 3631.4699 3170.7899 L 3631.0599 3170.5899 L 3630.8499 3169.9699 L 3630.8499 3167.9299 M 3629.4999 3169.7699 L 3625.8199 3169.7699 M 3622.0199 3172.2199 L 3624.0599 3172.2199 L 3624.2699 3170.3799 L 3624.0599 3170.5899 L 3623.4499 3170.7899 L 3622.8399 3170.7899 L 3622.2199 3170.5899 L 3621.8099 3170.1799 L 3621.6099 3169.5699 L 3621.6099 3169.1599 L 3621.8099 3168.5399 L 3622.2199 3168.1299 L 3622.8399 3167.9299 L 3623.4499 3167.9299 L 3624.0599 3168.1299 L 3624.2699 3168.3399 L 3624.4699 3168.7499 M 3620.0499 3168.9499 L 3620.2599 3168.7499 L 3620.0499 3168.5399 L 3619.8499 3168.7499 L 3620.0499 3168.9499 M 3617.2699 3172.2199 L 3617.8899 3172.0199 L 3618.2999 3171.4099 L 3618.4999 3170.3799 L 3618.4999 3169.7699 L 3618.2999 3168.7499 L 3617.8899 3168.1299 L 3617.2699 3167.9299 L 3616.8599 3167.9299 L 3616.2499 3168.1299 L 3615.8399 3168.7499 L 3615.6399 3169.7699 L 3615.6399 3170.3799 L 3615.8399 3171.4099 L 3616.2499 3172.0199 L 3616.8599 3172.2199 L 3617.2699 3172.2199 M 3613.2599 3172.2199 L 3613.8799 3172.0199 L 3614.0799 3171.6099 L 3614.0799 3171.1999 L 3613.8799 3170.7899 L 3613.4699 3170.5899 L 3612.6499 3170.3799 L 3612.0399 3170.1799 L 3611.6299 3169.7699 L 3611.4199 3169.3599 L 3611.4199 3168.7499 L 3611.6299 3168.3399 L 3611.8299 3168.1299 L 3612.4499 3167.9299 L 3613.2599 3167.9299 L 3613.8799 3168.1299 L 3614.0799 3168.3399 L 3614.2899 3168.7499 L 3614.2899 3169.3599 L 3614.0799 3169.7699 L 3613.6699 3170.1799 L 3613.0599 3170.3799 L 3612.2399 3170.5899 L 3611.8299 3170.7899 L 3611.6299 3171.1999 L 3611.6299 3171.6099 L 3611.8299 3172.0199 L 3612.4499 3172.2199 L 3613.2599 3172.2199 M 3610.0699 3170.7899 L 3610.0699 3167.9299 M 3610.0699 3169.9699 L 3609.4599 3170.5899 L 3609.0499 3170.7899 L 3608.4399 3170.7899 L 3608.0299 3170.5899 L 3607.8199 3169.9699 L 3607.8199 3167.9299 M 3607.8199 3169.9699 L 3607.2099 3170.5899 L 3606.7999 3170.7899 L 3606.1899 3170.7899 L 3605.7799 3170.5899 L 3605.5699 3169.9699 L 3605.5699 3167.9299 M 3604.2199 3170.7899 L 3604.2199 3167.9299 M 3604.2199 3169.9699 L 3603.6099 3170.5899 L 3603.1999 3170.7899 L 3602.5899 3170.7899 L 3602.1799 3170.5899 L 3601.9699 3169.9699 L 3601.9699 3167.9299 M 3601.9699 3169.9699 L 3601.3599 3170.5899 L 3600.9499 3170.7899 L 3600.3399 3170.7899 L 3599.9299 3170.5899 L 3599.7199 3169.9699 L 3599.7199 3167.9299~none~gge340~~0~#@$TRACK~1~3~~3692.4999 3159.9999 3652.4999 3159.9999 3652.4999 3119.9999 3692.4999 3119.9999 3692.4999 3159.9999~gge341~0#@$TRACK~1~3~~3672.4999 3124.9999 3652.4999 3124.9999 3652.4999 3119.9999 3672.4999 3119.9999 3672.4999 3124.9999~gge342~0#@$TRACK~1~3~~3692.4999 3124.9999 3672.4999 3124.9999 3672.4999 3119.9999 3692.4999 3119.9999 3692.4999 3124.9999~gge343~0#@$PAD~RECT~3682.5~3140~8.6614~8.6614~11~UP_21~1~2.5~3686.8306 3144.3306 3678.1692 3144.3306 3678.1692 3135.6692 3686.8306 3135.6692~180~gge344~0~~Y~0~0~0.4~3682.4999,3139.9999#@$PAD~ELLIPSE~3662.5~3140~8.6614~8.6614~11~SWITCH_1_2~2~2.5~~180~gge345~0~~Y~0~0~0.4~3662.4999,3139.9999", + "LIB~3775~3300.039~package`PHOENIX-2PIN-5.08MM`~~~gge346~1~cee0def10c584f32ac2d8c27339b6535~1571571027~0~516a2746dd554ec1#@$TEXT~P~3772.5~3328.689~0.6~0~0~3~~4.5~TH_EXT~M 3773.93 3322.539 L 3773.93 3326.829 M 3772.5 3322.539 L 3775.36 3322.539 M 3776.71 3322.539 L 3776.71 3326.829 M 3779.58 3322.539 L 3779.58 3326.829 M 3776.71 3324.579 L 3779.58 3324.579 M 3780.93 3328.259 L 3784.61 3328.259 M 3785.96 3322.539 L 3785.96 3326.829 M 3785.96 3322.539 L 3788.62 3322.539 M 3785.96 3324.579 L 3787.6 3324.579 M 3785.96 3326.829 L 3788.62 3326.829 M 3789.97 3322.539 L 3792.83 3326.829 M 3792.83 3322.539 L 3789.97 3326.829 M 3795.61 3322.539 L 3795.61 3326.829 M 3794.18 3322.539 L 3797.05 3322.539~~gge347~~0~#@$TEXT~N~3785~3273.969~0.6~0~0~3~~4.5~Phoenix-2pin-5.08mm~M 3785 3267.819 L 3785 3272.109 M 3785 3267.819 L 3786.84 3267.819 L 3787.45 3268.019 L 3787.66 3268.219 L 3787.86 3268.629 L 3787.86 3269.249 L 3787.66 3269.659 L 3787.45 3269.859 L 3786.84 3270.069 L 3785 3270.069 M 3789.21 3267.819 L 3789.21 3272.109 M 3789.21 3270.069 L 3789.83 3269.449 L 3790.24 3269.249 L 3790.85 3269.249 L 3791.26 3269.449 L 3791.46 3270.069 L 3791.46 3272.109 M 3793.84 3269.249 L 3793.43 3269.449 L 3793.02 3269.859 L 3792.81 3270.469 L 3792.81 3270.879 L 3793.02 3271.499 L 3793.43 3271.909 L 3793.84 3272.109 L 3794.45 3272.109 L 3794.86 3271.909 L 3795.27 3271.499 L 3795.47 3270.879 L 3795.47 3270.469 L 3795.27 3269.859 L 3794.86 3269.449 L 3794.45 3269.249 L 3793.84 3269.249 M 3796.82 3270.469 L 3799.28 3270.469 L 3799.28 3270.069 L 3799.07 3269.659 L 3798.87 3269.449 L 3798.46 3269.249 L 3797.85 3269.249 L 3797.44 3269.449 L 3797.03 3269.859 L 3796.82 3270.469 L 3796.82 3270.879 L 3797.03 3271.499 L 3797.44 3271.909 L 3797.85 3272.109 L 3798.46 3272.109 L 3798.87 3271.909 L 3799.28 3271.499 M 3800.63 3269.249 L 3800.63 3272.109 M 3800.63 3270.069 L 3801.24 3269.449 L 3801.65 3269.249 L 3802.26 3269.249 L 3802.67 3269.449 L 3802.88 3270.069 L 3802.88 3272.109 M 3804.23 3267.819 L 3804.43 3268.019 L 3804.64 3267.819 L 3804.43 3267.609 L 3804.23 3267.819 M 3804.43 3269.249 L 3804.43 3272.109 M 3805.99 3269.249 L 3808.24 3272.109 M 3808.24 3269.249 L 3805.99 3272.109 M 3809.59 3270.269 L 3813.27 3270.269 M 3814.82 3268.839 L 3814.82 3268.629 L 3815.03 3268.219 L 3815.23 3268.019 L 3815.64 3267.819 L 3816.46 3267.819 L 3816.87 3268.019 L 3817.07 3268.219 L 3817.28 3268.629 L 3817.28 3269.039 L 3817.07 3269.449 L 3816.66 3270.069 L 3814.62 3272.109 L 3817.48 3272.109 M 3818.83 3269.249 L 3818.83 3273.539 M 3818.83 3269.859 L 3819.24 3269.449 L 3819.65 3269.249 L 3820.26 3269.249 L 3820.67 3269.449 L 3821.08 3269.859 L 3821.29 3270.469 L 3821.29 3270.879 L 3821.08 3271.499 L 3820.67 3271.909 L 3820.26 3272.109 L 3819.65 3272.109 L 3819.24 3271.909 L 3818.83 3271.499 M 3822.64 3267.819 L 3822.84 3268.019 L 3823.05 3267.819 L 3822.84 3267.609 L 3822.64 3267.819 M 3822.84 3269.249 L 3822.84 3272.109 M 3824.4 3269.249 L 3824.4 3272.109 M 3824.4 3270.069 L 3825.01 3269.449 L 3825.42 3269.249 L 3826.03 3269.249 L 3826.44 3269.449 L 3826.65 3270.069 L 3826.65 3272.109 M 3828 3270.269 L 3831.68 3270.269 M 3835.48 3267.819 L 3833.44 3267.819 L 3833.23 3269.659 L 3833.44 3269.449 L 3834.05 3269.249 L 3834.66 3269.249 L 3835.28 3269.449 L 3835.69 3269.859 L 3835.89 3270.469 L 3835.89 3270.879 L 3835.69 3271.499 L 3835.28 3271.909 L 3834.66 3272.109 L 3834.05 3272.109 L 3833.44 3271.909 L 3833.23 3271.699 L 3833.03 3271.289 M 3837.45 3271.089 L 3837.24 3271.289 L 3837.45 3271.499 L 3837.65 3271.289 L 3837.45 3271.089 M 3840.23 3267.819 L 3839.61 3268.019 L 3839.2 3268.629 L 3839 3269.659 L 3839 3270.269 L 3839.2 3271.289 L 3839.61 3271.909 L 3840.23 3272.109 L 3840.64 3272.109 L 3841.25 3271.909 L 3841.66 3271.289 L 3841.86 3270.269 L 3841.86 3269.659 L 3841.66 3268.629 L 3841.25 3268.019 L 3840.64 3267.819 L 3840.23 3267.819 M 3844.24 3267.819 L 3843.62 3268.019 L 3843.42 3268.429 L 3843.42 3268.839 L 3843.62 3269.249 L 3844.03 3269.449 L 3844.85 3269.659 L 3845.46 3269.859 L 3845.87 3270.269 L 3846.08 3270.679 L 3846.08 3271.289 L 3845.87 3271.699 L 3845.67 3271.909 L 3845.05 3272.109 L 3844.24 3272.109 L 3843.62 3271.909 L 3843.42 3271.699 L 3843.21 3271.289 L 3843.21 3270.679 L 3843.42 3270.269 L 3843.83 3269.859 L 3844.44 3269.659 L 3845.26 3269.449 L 3845.67 3269.249 L 3845.87 3268.839 L 3845.87 3268.429 L 3845.67 3268.019 L 3845.05 3267.819 L 3844.24 3267.819 M 3847.43 3269.249 L 3847.43 3272.109 M 3847.43 3270.069 L 3848.04 3269.449 L 3848.45 3269.249 L 3849.06 3269.249 L 3849.47 3269.449 L 3849.68 3270.069 L 3849.68 3272.109 M 3849.68 3270.069 L 3850.29 3269.449 L 3850.7 3269.249 L 3851.31 3269.249 L 3851.72 3269.449 L 3851.93 3270.069 L 3851.93 3272.109 M 3853.28 3269.249 L 3853.28 3272.109 M 3853.28 3270.069 L 3853.89 3269.449 L 3854.3 3269.249 L 3854.91 3269.249 L 3855.32 3269.449 L 3855.53 3270.069 L 3855.53 3272.109 M 3855.53 3270.069 L 3856.14 3269.449 L 3856.55 3269.249 L 3857.16 3269.249 L 3857.57 3269.449 L 3857.78 3270.069 L 3857.78 3272.109~none~gge348~~0~#@$TRACK~1~3~~3765 3280.039 3805 3280.039 3805 3320.039 3765 3320.039 3765 3280.039~gge349~0#@$TRACK~1~3~~3785 3315.039 3805 3315.039 3805 3320.039 3785 3320.039 3785 3315.039~gge350~0#@$TRACK~1~3~~3765 3315.039 3785 3315.039 3785 3320.039 3765 3320.039 3765 3315.039~gge351~0#@$PAD~RECT~3775~3300.039~8.6614~8.6614~11~GND~1~2.5~3770.6693 3295.7083 3779.3307 3295.7083 3779.3307 3304.3697 3770.6693 3304.3697~0~gge352~0~~Y~0~0~0.4~3775,3300.039#@$PAD~ELLIPSE~3795~3300.039~8.6614~8.6614~11~TH_EXT+~2~2.5~~0~gge353~0~~Y~0~0~0.4~3795,3300.039", + "LIB~3915~3030~package`HE10-16`~~~gge354~1~52f17a1f45614d0582d6d5fed7c9fa64~1572704641~0~721a1ba2e74d2275#@$TEXT~P~3880~3020.86~0.6~0~0~3~~4.5~LCD~M 3880 3014.71 L 3880 3019 M 3880 3019 L 3882.45 3019 M 3886.87 3015.73 L 3886.67 3015.32 L 3886.26 3014.91 L 3885.85 3014.71 L 3885.03 3014.71 L 3884.62 3014.91 L 3884.21 3015.32 L 3884.01 3015.73 L 3883.8 3016.34 L 3883.8 3017.36 L 3884.01 3017.98 L 3884.21 3018.39 L 3884.62 3018.8 L 3885.03 3019 L 3885.85 3019 L 3886.26 3018.8 L 3886.67 3018.39 L 3886.87 3017.98 M 3888.22 3014.71 L 3888.22 3019 M 3888.22 3014.71 L 3889.65 3014.71 L 3890.27 3014.91 L 3890.68 3015.32 L 3890.88 3015.73 L 3891.09 3016.34 L 3891.09 3017.36 L 3890.88 3017.98 L 3890.68 3018.39 L 3890.27 3018.8 L 3889.65 3019 L 3888.22 3019~~gge355~~0~#@$TEXT~N~3880~3015.36~0.6~0~0~3~~4.5~HE10-16-LCD~M 3880 3009.21 L 3880 3013.5 M 3882.86 3009.21 L 3882.86 3013.5 M 3880 3011.25 L 3882.86 3011.25 M 3884.21 3009.21 L 3884.21 3013.5 M 3884.21 3009.21 L 3886.87 3009.21 M 3884.21 3011.25 L 3885.85 3011.25 M 3884.21 3013.5 L 3886.87 3013.5 M 3888.22 3010.02 L 3888.63 3009.82 L 3889.25 3009.21 L 3889.25 3013.5 M 3891.82 3009.21 L 3891.21 3009.41 L 3890.8 3010.02 L 3890.6 3011.05 L 3890.6 3011.66 L 3890.8 3012.68 L 3891.21 3013.3 L 3891.82 3013.5 L 3892.23 3013.5 L 3892.85 3013.3 L 3893.25 3012.68 L 3893.46 3011.66 L 3893.46 3011.05 L 3893.25 3010.02 L 3892.85 3009.41 L 3892.23 3009.21 L 3891.82 3009.21 M 3894.81 3011.66 L 3898.49 3011.66 M 3899.84 3010.02 L 3900.25 3009.82 L 3900.86 3009.21 L 3900.86 3013.5 M 3904.67 3009.82 L 3904.46 3009.41 L 3903.85 3009.21 L 3903.44 3009.21 L 3902.83 3009.41 L 3902.42 3010.02 L 3902.21 3011.05 L 3902.21 3012.07 L 3902.42 3012.89 L 3902.83 3013.3 L 3903.44 3013.5 L 3903.65 3013.5 L 3904.26 3013.3 L 3904.67 3012.89 L 3904.87 3012.27 L 3904.87 3012.07 L 3904.67 3011.46 L 3904.26 3011.05 L 3903.65 3010.84 L 3903.44 3010.84 L 3902.83 3011.05 L 3902.42 3011.46 L 3902.21 3012.07 M 3906.22 3011.66 L 3909.9 3011.66 M 3911.25 3009.21 L 3911.25 3013.5 M 3911.25 3013.5 L 3913.71 3013.5 M 3918.13 3010.23 L 3917.92 3009.82 L 3917.51 3009.41 L 3917.1 3009.21 L 3916.29 3009.21 L 3915.88 3009.41 L 3915.47 3009.82 L 3915.26 3010.23 L 3915.06 3010.84 L 3915.06 3011.86 L 3915.26 3012.48 L 3915.47 3012.89 L 3915.88 3013.3 L 3916.29 3013.5 L 3917.1 3013.5 L 3917.51 3013.3 L 3917.92 3012.89 L 3918.13 3012.48 M 3919.48 3009.21 L 3919.48 3013.5 M 3919.48 3009.21 L 3920.91 3009.21 L 3921.52 3009.41 L 3921.93 3009.82 L 3922.14 3010.23 L 3922.34 3010.84 L 3922.34 3011.86 L 3922.14 3012.48 L 3921.93 3012.89 L 3921.52 3013.3 L 3920.91 3013.5 L 3919.48 3013.5~none~gge356~~0~#@$TRACK~1~3~~3830 3020 3930 3020 3930 3050 3830 3050 3830 3020~gge357~0#@$TRACK~1~3~~3872.5 3020 3887.5 3020 3887.5 3022.5 3872.5 3022.5 3872.5 3020~gge358~0#@$PAD~RECT~3915~3030~6~6~11~GND~1~1.8~3918 3027 3912 3027 3912 3033 3918 3033~0~gge359~0~~Y~0~0~0.4~3915,3030#@$PAD~ELLIPSE~3905~3030~6~6~11~LCD_3~3~1.8~~0~gge360~0~~Y~0~0~0.4~3905,3030#@$PAD~ELLIPSE~3895~3030~6~6~11~R/W~5~1.8~~0~gge361~0~~Y~0~0~0.4~3895,3030#@$PAD~ELLIPSE~3885~3030~6~6~11~DB0~7~1.8~~0~gge362~0~~Y~0~0~0.4~3885,3030#@$PAD~ELLIPSE~3875~3030~6~6~11~DB2~9~1.8~~0~gge363~0~~Y~0~0~0.4~3875,3030#@$PAD~ELLIPSE~3865~3030~6~6~11~DB4~11~1.8~~0~gge364~0~~Y~0~0~0.4~3865,3030#@$PAD~ELLIPSE~3855~3030~6~6~11~DB6~13~1.8~~0~gge365~0~~Y~0~0~0.4~3855,3030#@$PAD~ELLIPSE~3845~3030~6~6~11~LCD_15~15~1.8~~0~gge366~0~~Y~0~0~0.4~3845,3030#@$PAD~ELLIPSE~3915~3040~6~6~11~+5V~2~1.8~~0~gge367~0~~Y~0~0~0.4~3915,3040#@$PAD~ELLIPSE~3895~3040~6~6~11~E~6~1.8~~0~gge368~0~~Y~0~0~0.4~3895,3040#@$PAD~ELLIPSE~3905~3040~6~6~11~RS~4~1.8~~0~gge369~0~~Y~0~0~0.4~3905,3040#@$PAD~ELLIPSE~3885~3040~6~6~11~DB1~8~1.8~~0~gge370~0~~Y~0~0~0.4~3885,3040#@$PAD~ELLIPSE~3875~3040~6~6~11~DB3~10~1.8~~0~gge371~0~~Y~0~0~0.4~3875,3040#@$PAD~ELLIPSE~3865~3040~6~6~11~DB5~12~1.8~~0~gge372~0~~Y~0~0~0.4~3865,3040#@$PAD~ELLIPSE~3855~3040~6~6~11~DB7~14~1.8~~0~gge373~0~~Y~0~0~0.4~3855,3040#@$PAD~ELLIPSE~3845~3040~6~6~11~GND~16~1.8~~0~gge374~0~~Y~0~0~0.4~3845,3040", + "LIB~3985~3250~package`PHOENIX-2PIN-5.08MM`~90~~gge375~1~cee0def10c584f32ac2d8c27339b6535~1571571027~0~9bf2477abcec9738#@$TEXT~P~4009.95~3246.37~0.6~90~0~3~~4.5~FAN1~M 4007.5 3246.3701 L 4011.79 3246.3701 M 4007.5 3246.3701 L 4007.5 3243.7101 M 4009.54 3246.3701 L 4009.54 3244.7301 M 4007.5 3240.7201 L 4011.79 3242.3601 M 4007.5 3240.7201 L 4011.79 3239.0901 M 4010.36 3241.7501 L 4010.36 3239.7001 M 4007.5 3237.7401 L 4011.79 3237.7401 M 4007.5 3237.7401 L 4011.79 3234.8701 M 4007.5 3234.8701 L 4011.79 3234.8701 M 4008.31 3233.5201 L 4008.11 3233.1201 L 4007.5 3232.5001 L 4011.79 3232.5001~~gge376~~0~#@$TEXT~N~3960.36~3240~0.6~90~0~3~~4.5~Phoenix-2pin-5.08mm~M 3957.91 3240 L 3962.2 3240 M 3957.91 3240 L 3957.91 3238.16 L 3958.11 3237.55 L 3958.31 3237.34 L 3958.72 3237.14 L 3959.34 3237.14 L 3959.75 3237.34 L 3959.95 3237.55 L 3960.16 3238.16 L 3960.16 3240 M 3957.91 3235.79 L 3962.2 3235.79 M 3960.16 3235.79 L 3959.54 3235.17 L 3959.34 3234.76 L 3959.34 3234.15 L 3959.54 3233.74 L 3960.16 3233.54 L 3962.2 3233.54 M 3959.34 3231.16 L 3959.54 3231.57 L 3959.95 3231.98 L 3960.56 3232.19 L 3960.97 3232.19 L 3961.59 3231.98 L 3962 3231.57 L 3962.2 3231.16 L 3962.2 3230.55 L 3962 3230.14 L 3961.59 3229.73 L 3960.97 3229.53 L 3960.56 3229.53 L 3959.95 3229.73 L 3959.54 3230.14 L 3959.34 3230.55 L 3959.34 3231.16 M 3960.56 3228.18 L 3960.56 3225.72 L 3960.16 3225.72 L 3959.75 3225.93 L 3959.54 3226.13 L 3959.34 3226.54 L 3959.34 3227.15 L 3959.54 3227.56 L 3959.95 3227.97 L 3960.56 3228.18 L 3960.97 3228.18 L 3961.59 3227.97 L 3962 3227.56 L 3962.2 3227.15 L 3962.2 3226.54 L 3962 3226.13 L 3961.59 3225.72 M 3959.34 3224.37 L 3962.2 3224.37 M 3960.16 3224.37 L 3959.54 3223.76 L 3959.34 3223.35 L 3959.34 3222.74 L 3959.54 3222.33 L 3960.16 3222.12 L 3962.2 3222.12 M 3957.91 3220.77 L 3958.11 3220.57 L 3957.91 3220.36 L 3957.7 3220.57 L 3957.91 3220.77 M 3959.34 3220.57 L 3962.2 3220.57 M 3959.34 3219.01 L 3962.2 3216.76 M 3959.34 3216.76 L 3962.2 3219.01 M 3960.36 3215.41 L 3960.36 3211.73 M 3958.93 3210.18 L 3958.72 3210.18 L 3958.31 3209.97 L 3958.11 3209.77 L 3957.91 3209.36 L 3957.91 3208.54 L 3958.11 3208.13 L 3958.31 3207.93 L 3958.72 3207.72 L 3959.13 3207.72 L 3959.54 3207.93 L 3960.16 3208.34 L 3962.2 3210.38 L 3962.2 3207.52 M 3959.34 3206.17 L 3963.63 3206.17 M 3959.95 3206.17 L 3959.54 3205.76 L 3959.34 3205.35 L 3959.34 3204.74 L 3959.54 3204.33 L 3959.95 3203.92 L 3960.56 3203.71 L 3960.97 3203.71 L 3961.59 3203.92 L 3962 3204.33 L 3962.2 3204.74 L 3962.2 3205.35 L 3962 3205.76 L 3961.59 3206.17 M 3957.91 3202.36 L 3958.11 3202.16 L 3957.91 3201.95 L 3957.7 3202.16 L 3957.91 3202.36 M 3959.34 3202.16 L 3962.2 3202.16 M 3959.34 3200.6 L 3962.2 3200.6 M 3960.16 3200.6 L 3959.54 3199.99 L 3959.34 3199.58 L 3959.34 3198.97 L 3959.54 3198.56 L 3960.16 3198.35 L 3962.2 3198.35 M 3960.36 3197 L 3960.36 3193.32 M 3957.91 3189.52 L 3957.91 3191.56 L 3959.75 3191.77 L 3959.54 3191.56 L 3959.34 3190.95 L 3959.34 3190.34 L 3959.54 3189.72 L 3959.95 3189.31 L 3960.56 3189.11 L 3960.97 3189.11 L 3961.59 3189.31 L 3962 3189.72 L 3962.2 3190.34 L 3962.2 3190.95 L 3962 3191.56 L 3961.79 3191.77 L 3961.38 3191.97 M 3961.18 3187.55 L 3961.38 3187.76 L 3961.59 3187.55 L 3961.38 3187.35 L 3961.18 3187.55 M 3957.91 3184.77 L 3958.11 3185.39 L 3958.72 3185.8 L 3959.75 3186 L 3960.36 3186 L 3961.38 3185.8 L 3962 3185.39 L 3962.2 3184.77 L 3962.2 3184.36 L 3962 3183.75 L 3961.38 3183.34 L 3960.36 3183.14 L 3959.75 3183.14 L 3958.72 3183.34 L 3958.11 3183.75 L 3957.91 3184.36 L 3957.91 3184.77 M 3957.91 3180.76 L 3958.11 3181.38 L 3958.52 3181.58 L 3958.93 3181.58 L 3959.34 3181.38 L 3959.54 3180.97 L 3959.75 3180.15 L 3959.95 3179.54 L 3960.36 3179.13 L 3960.77 3178.92 L 3961.38 3178.92 L 3961.79 3179.13 L 3962 3179.33 L 3962.2 3179.95 L 3962.2 3180.76 L 3962 3181.38 L 3961.79 3181.58 L 3961.38 3181.79 L 3960.77 3181.79 L 3960.36 3181.58 L 3959.95 3181.17 L 3959.75 3180.56 L 3959.54 3179.74 L 3959.34 3179.33 L 3958.93 3179.13 L 3958.52 3179.13 L 3958.11 3179.33 L 3957.91 3179.95 L 3957.91 3180.76 M 3959.34 3177.57 L 3962.2 3177.57 M 3960.16 3177.57 L 3959.54 3176.96 L 3959.34 3176.55 L 3959.34 3175.94 L 3959.54 3175.53 L 3960.16 3175.32 L 3962.2 3175.32 M 3960.16 3175.32 L 3959.54 3174.71 L 3959.34 3174.3 L 3959.34 3173.69 L 3959.54 3173.28 L 3960.16 3173.07 L 3962.2 3173.07 M 3959.34 3171.72 L 3962.2 3171.72 M 3960.16 3171.72 L 3959.54 3171.11 L 3959.34 3170.7 L 3959.34 3170.09 L 3959.54 3169.68 L 3960.16 3169.47 L 3962.2 3169.47 M 3960.16 3169.47 L 3959.54 3168.86 L 3959.34 3168.45 L 3959.34 3167.84 L 3959.54 3167.43 L 3960.16 3167.22 L 3962.2 3167.22~none~gge377~~0~#@$TRACK~1~3~~3965 3260 3965 3220 4005 3220 4005 3260 3965 3260~gge378~0#@$TRACK~1~3~~4000 3240 4000 3220 4005 3220 4005 3240 4000 3240~gge379~0#@$TRACK~1~3~~4000 3260 4000 3240 4005 3240 4005 3260 4000 3260~gge380~0#@$PAD~RECT~3985~3250~8.6614~8.6614~11~F1_1~1~2.5~3980.6693 3254.3307 3980.6693 3245.6693 3989.3307 3245.6693 3989.3307 3254.3307~90~gge381~0~~Y~0~0~0.4~3985,3250#@$PAD~ELLIPSE~3985~3230~8.6614~8.6614~11~FAN1_2~2~2.5~~90~gge384~0~~Y~0~0~0.4~3985,3230", + "CIRCLE~3685~3105~3.536~1.1811~3~gge25~0~~", + "CIRCLE~3660~3105~3.536~1.1811~3~gge26~0~~", + "CIRCLE~3635~3105~3.536~1.1811~3~gge27~0~~" + ], + "layers": [ + "1~TopLayer~#FF0000~true~true~true~", + "2~BottomLayer~#0000FF~true~false~true~", + "3~TopSilkLayer~#FFCC00~true~false~true~", + "4~BottomSilkLayer~#66CC33~true~false~true~", + "5~TopPasteMaskLayer~#808080~true~false~true~", + "6~BottomPasteMaskLayer~#800000~true~false~true~", + "7~TopSolderMaskLayer~#800080~true~false~true~0.3", + "8~BottomSolderMaskLayer~#AA00FF~true~false~true~0.3", + "9~Ratlines~#6464FF~true~false~true~", + "10~BoardOutline~#FF00FF~true~false~true~", + "11~Multi-Layer~#C0C0C0~true~false~true~", + "12~Document~#FFFFFF~true~false~true~", + "13~TopAssembly~#33CC99~false~false~false~", + "14~BottomAssembly~#5555FF~false~false~false~", + "15~Mechanical~#F022F0~false~false~false~", + "19~3DModel~#66CCFF~false~false~false~", + "21~Inner1~#999966~false~false~false~~", + "22~Inner2~#008000~false~false~false~~", + "23~Inner3~#00FF00~false~false~false~~", + "24~Inner4~#BC8E00~false~false~false~~", + "25~Inner5~#70DBFA~false~false~false~~", + "26~Inner6~#00CC66~false~false~false~~", + "27~Inner7~#9966FF~false~false~false~~", + "28~Inner8~#800080~false~false~false~~", + "29~Inner9~#008080~false~false~false~~", + "30~Inner10~#15935F~false~false~false~~", + "31~Inner11~#000080~false~false~false~~", + "32~Inner12~#00B400~false~false~false~~", + "33~Inner13~#2E4756~false~false~false~~", + "34~Inner14~#99842F~false~false~false~~", + "35~Inner15~#FFFFAA~false~false~false~~", + "36~Inner16~#99842F~false~false~false~~", + "37~Inner17~#2E4756~false~false~false~~", + "38~Inner18~#3535FF~false~false~false~~", + "39~Inner19~#8000BC~false~false~false~~", + "40~Inner20~#43AE5F~false~false~false~~", + "41~Inner21~#C3ECCE~false~false~false~~", + "42~Inner22~#728978~false~false~false~~", + "43~Inner23~#39503F~false~false~false~~", + "44~Inner24~#0C715D~false~false~false~~", + "45~Inner25~#5A8A80~false~false~false~~", + "46~Inner26~#2B937E~false~false~false~~", + "47~Inner27~#23999D~false~false~false~~", + "48~Inner28~#45B4E3~false~false~false~~", + "49~Inner29~#215DA1~false~false~false~~", + "50~Inner30~#4564D7~false~false~false~~", + "51~Inner31~#6969E9~false~false~false~~", + "52~Inner32~#9069E9~false~false~false~~", + "99~ComponentShapeLayer~#00CCCC~false~false~false~", + "100~LeadShapeLayer~#CC9999~false~false~false~", + "Hole~Hole~#222222~false~false~true~", + "DRCError~DRCError~#FAD609~false~false~true~" + ], + "objects": [ + "All~true~false", + "Component~true~true", + "Prefix~true~true", + "Name~true~false", + "Track~true~true", + "Pad~true~true", + "Via~true~true", + "Hole~true~true", + "Copper_Area~true~true", + "Circle~true~true", + "Arc~true~true", + "Solid_Region~true~true", + "Text~true~true", + "Image~true~true", + "Rect~true~true", + "Dimension~true~true", + "Protractor~true~true" + ], + "BBox": { + "x": 3505, + "y": 2975, + "width": 515, + "height": 370 + }, + "preference": { + "hideFootprints": "", + "hideNets": "" + }, + "DRCRULE": { + "Default": { + "trackWidth": 0.5984, + "clearance": 0.5984, + "viaHoleDiameter": 2.4016, + "viaHoleD": 1.2008 + }, + "isRealtime": true, + "checkObjectToCopperarea": true, + "showDRCRangeLine": true + }, + "netColors": {} +} \ No newline at end of file diff --git a/cad/main_board.old/main_board_schematic.json b/cad/main_board.old/main_board_schematic.json new file mode 100644 index 0000000..c8e7970 --- /dev/null +++ b/cad/main_board.old/main_board_schematic.json @@ -0,0 +1,15 @@ +{ + "editorVersion": "6.3.22", + "docType": "5", + "title": "FanMonitor", + "description": "", + "colors": {}, + "schematics": [ + { + "docType": "1", + "title": "FanMonitor", + "description": "", + "dataStr": "{\"head\":{\"docType\":\"1\",\"editorVersion\":\"6.3.22\",\"c_para\":{\"Prefix Start\":\"1\"},\"c_spiceCmd\":\"null\",\"hasIdFlag\":true,\"uuid\":\"24ccf7168b3146f69201c3694ab3b0fa\",\"x\":\"360\",\"y\":\"220\",\"importFlag\":0,\"transformList\":\"\"},\"canvas\":\"CA~1000~1000~#FFFFFF~yes~#CCCCCC~10~1000~1000~line~10~pixel~5~360~220\",\"shape\":[\"LIB~0~0~package`NONE`BOM_Manufacturer Part`?`spicePre`.`~~0~frame_lib_1~~~0~0a5a4a678017f085~yes~yes#@$T~N~0~7~0~#000080~Arial~~~~~comment~NO~0~start~gge58~0~pinpart#@$T~P~1149~-15.5~0~#000080~Arial~~~~~comment~NO~0~start~gge57~0~pinpart#@$PT~M206 10L206 0M206 796L206 806M402 10L402 0M402 796L402 806M598 10L598 0M598 796L598 806M794 10L794 0M794 796L794 806M990 10L990 0M990 796L990 806M10 206L0 206M1139 206L1149 206M10 402L0 402M1139 402L1149 402M10 598L0 598M1139 598L1149 598M10 794L0 794M1139 794L1149 794~#880000~1~0~none~gge6~0~frame_tick#@$T~L~1.5~108~0~#880000~~~~~~comment~A~1~start~gge7~0~frame_tick#@$T~L~1140.5~108~0~#880000~~~~~~comment~A~1~start~gge9~0~frame_tick#@$T~L~1.5~304~0~#880000~~~~~~comment~B~1~start~gge11~0~frame_tick#@$T~L~1140.5~304~0~#880000~~~~~~comment~B~1~start~gge13~0~frame_tick#@$T~L~1.5~500~0~#880000~~~~~~comment~C~1~start~gge15~0~frame_tick#@$T~L~1140.5~500~0~#880000~~~~~~comment~C~1~start~gge17~0~frame_tick#@$T~L~1.5~696~0~#880000~~~~~~comment~D~1~start~gge19~0~frame_tick#@$T~L~1140.5~696~0~#880000~~~~~~comment~D~1~start~gge21~0~frame_tick#@$T~L~108~8.5~0~#880000~~~~~~comment~1~1~start~gge23~0~frame_tick#@$T~L~108~804.5~0~#880000~~~~~~comment~1~1~start~gge25~0~frame_tick#@$T~L~304~8.5~0~#880000~~~~~~comment~2~1~start~gge27~0~frame_tick#@$T~L~304~804.5~0~#880000~~~~~~comment~2~1~start~gge29~0~frame_tick#@$T~L~500~8.5~0~#880000~~~~~~comment~3~1~start~gge31~0~frame_tick#@$T~L~500~804.5~0~#880000~~~~~~comment~3~1~start~gge33~0~frame_tick#@$T~L~696~8.5~0~#880000~~~~~~comment~4~1~start~gge35~0~frame_tick#@$T~L~696~804.5~0~#880000~~~~~~comment~4~1~start~gge37~0~frame_tick#@$T~L~892~8.5~0~#880000~~~~~~comment~5~1~start~gge39~0~frame_tick#@$T~L~892~804.5~0~#880000~~~~~~comment~5~1~start~gge?~0~frame_tick#@$R~10~10~~~1129~786~#880000~1~0~none~gge592~0~frame_innerbox#@$R~0~0~~~1149~806~#880000~1~0~none~gge591~0~frame_outbox#@$R~694.99995~716.000025~~~444~80~#880000~1~0~none~gge590~0~frame_hitarea#@$PL~695.1 755.25 1138.63 755.25~#880000~1~0~none~gge792~0#@$PL~799.63 775.25 1138.63 775.25~#880000~1~0~none~gge42~0#@$PL~1059.61 716.07 1059.63 755.25~#880000~1~0~none~gge43~0#@$PL~1059.63 755.25 1059.63 775.25~#880000~1~0~none~gge44~0#@$T~L~699.99995~729.000025~0~#880000~~8pt~~~~comment~TITLE:~1~start~gge796~0~pinpart#@$T~L~757.62495~741.593775~0~#0000FF~~10pt~~~~comment~FanMonitor~1~start~gge795~0~frame_title#@$T~L~1064.62495~742.250025~0~#880000~~8pt~~~~comment~REV:~1~start~gge794~0~pinpart#@$T~L~1102.62495~742.250025~0~#0000FF~~9pt~~~~comment~1.1~1~start~gge793~0~frame_version#@$T~L~804.62495~791.000025~0~#880000~~8pt~~~~comment~Date:~1~start~gge802~0~pinpart#@$T~L~851.62495~791.4844~0~#0000FF~~9pt~~~~comment~2019-10-20~1~start~gge600~0~frame_date#@$T~L~1063.62495~771.000025~0~#880000~~8pt~~~~comment~Sheet:~1~start~gge805~0~pinpart#@$T~L~1108.62495~771.4844~0~#0000FF~~9pt~~~~comment~1/1~1~start~gge599~0~frame_sheet#@$T~L~943.62495~791.250025~0~#880000~~8pt~~~~comment~Drawn By:~1~start~gge808~0~pinpart#@$T~L~1008.63~791.250025~0~#0000FF~~9pt~~~~comment~Steins7~1~start~gge1000~0~frame_drawn#@$T~L~804.62495~769.250025~0~#880000~~8pt~~~~comment~Company:~1~start~gge813~0~pinpart#@$T~L~871.24995~769.363775~0~#0000FF~~9pt~~~~comment~ENIB~1~start~gge1001~0~frame_company#@$PL~799.63 755.25 799.63 795.25~#880000~1~0~none~gge811~0#@$Pimage~L~1~gge1002~0~gge812~694.99995~768.000025~104~20~data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMi4wLjEsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0i5Zu+5bGCXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iNTIwIg0KCSB2aWV3Qm94PSIwIDAgMTY5Mi45IDM0MS41IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxNjkyLjkgMzQxLjU7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLnN0MHtmaWxsOiM1NTg4RkY7fQ0KPC9zdHlsZT4NCjxnPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik05MDEuNywxNjEuMWMyLjMtMS44LDUuMS0yLjcsOC4zLTIuN2M0LjMsMCw4LjksMS42LDEzLjgsNC43YzQuOSwzLjEsOS42LDgsMTQuMSwxNC43bDE3LjQtMjcuOQ0KCQljLTUuNC03LjgtMTIuMS0xMy45LTIwLjItMTguMmMtOC4xLTQuMy0xNi43LTYuNC0yNS43LTYuNGMtMTIuOCwwLTI0LDMuOS0zMy40LDExLjdjLTkuNCw3LjgtMTQuMSwxOC0xNC4xLDMwLjQNCgkJYzAsOC45LDMsMTcuNCw5LDI1LjRjNC4zLDUuNywxMi4xLDEyLjYsMjMuMywyMC42YzkuNyw2LjksMTUuNywxMS43LDE3LjksMTQuNGMyLjIsMi43LDMuMyw1LjMsMy4zLDcuOWMwLDMuMi0xLjQsNS45LTQuMyw4LjMNCgkJYy0yLjksMi4zLTYuNywzLjUtMTEuNSwzLjVjLTEyLjEsMC0yMy4zLTYuNy0zMy41LTIwLjJsLTIyLjUsMjYuMmMxMCwxMC42LDE5LjEsMTgsMjcuMiwyMmM4LjEsNCwxNy4yLDYsMjcuMSw2DQoJCWMxNy4yLDAsMzAuMy00LjksMzkuNC0xNC43YzkuMS05LjgsMTMuNi0yMC4zLDEzLjYtMzEuM2MwLTguNC0yLjItMTYuMS02LjYtMjMuM2MtNC40LTcuMS0xMy42LTE1LjctMjcuNi0yNS43DQoJCWMtOC44LTYuMy0xNC0xMC41LTE1LjctMTIuN2MtMS44LTIuMi0yLjctNC40LTIuNy02LjZDODk4LjIsMTY0LjksODk5LjQsMTYyLjksOTAxLjcsMTYxLjF6Ii8+DQoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxMDM4LjcsMjE3LjIgMTAwOS44LDEyOS4xIDk3NCwxMjkuMSAxMDE1LjgsMjU3LjQgOTczLjYsMzMyIDEwMTIuMSwzMzIgMTEyOC44LDEyOS4xIDEwODkuNSwxMjkuMSAJDQoJCSIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik02NTEuNSwxNTQuMWwtNzAuNCwwbDUuOC00MS43YzAsMCw3NC43LTAuMSw3NS4xLTAuMWM5LjgsMCwxNy44LTgsMTcuOC0xNy44YzAtOS44LTgtMTcuOC0xNy44LTE3LjgNCgkJYy0wLjMsMC0xMDguNCwwLTEwOC40LDBMNTI2LDI3Ny43aDExMy4ydjBjOS41LTAuMiwxNy4yLTgsMTcuMi0xNy41YzAtOS43LTcuOS0xNy42LTE3LjYtMTcuNmMtMC40LDAtNzAuMiwwLjEtNzAuMiwwLjFsNy40LTUzLjMNCgkJYzAsMCw3MS43LDAuMSw3Mi4zLDAuMWM5LjgsMCwxNy44LTgsMTcuOC0xNy44QzY2Ni4zLDE2Mi44LDY1OS45LDE1NS41LDY1MS41LDE1NC4xeiIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMjY4LjQsNzYuOGMtMC4zLDAtMTA4LjQsMC0xMDguNCwwbC0yNy40LDIwMC44aDExMy4zdjBjOS41LTAuMiwxNy4yLTgsMTcuMi0xNy41YzAtOS43LTcuOS0xNy42LTE3LjYtMTcuNg0KCQljLTAuNCwwLTcwLjIsMC4xLTcwLjIsMC4xbDcuNC01My4zYzAsMCw3MS43LDAuMSw3Mi40LDAuMWM5LjgsMCwxNy44LTgsMTcuOC0xNy44YzAtOC44LTYuNC0xNi4xLTE0LjgtMTcuNWwtNzAuNCwwbDUuOC00MS43DQoJCWMwLDAsNzQuNy0wLjEsNzUuMS0wLjFjOS44LDAsMTcuOC04LDE3LjgtMTcuOEMxMjg2LjIsODQuOCwxMjc4LjMsNzYuOCwxMjY4LjQsNzYuOHoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTQ3MC43LDE3M2MwLTE5LjctNC42LTM3LjItMTMuNy01Mi4zYy05LjEtMTUuMS0yMC45LTI2LjItMzUuNS0zMy4yYy0xNC42LTcuMS0zNi43LTEwLjYtNjYuNi0xMC42aC0zMS44DQoJCWwtMjcuNCwyMDAuOGg2Mi40YzI2LjIsMCw0Ni43LTMuOSw2MS40LTExLjdjMTQuNy03LjgsMjctMjAuMiwzNi43LTM3LjFDMTQ2NS45LDIxMS45LDE0NzAuNywxOTMuMywxNDcwLjcsMTczeiBNMTQyMS4zLDIxNC41DQoJCWMtNy4zLDExLTE2LjksMTguOC0yOC45LDIzLjNjLTguNiwzLjItMjIuNCw0LjgtNDEuNSw0LjhoLTEyLjRsMTcuNy0xMzAuNGg5LjVjMTUuNSwwLDI3LjksMi40LDM3LjIsNy4zDQoJCWM5LjMsNC45LDE2LjUsMTEuOCwyMS43LDIwLjhjNS4xLDksNy43LDIwLjEsNy43LDMzLjRDMTQzMi4yLDE4OS44LDE0MjguNiwyMDMuNSwxNDIxLjMsMjE0LjV6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTTE2MTkuMiwxNzAuN2wtMjIuMywxMi4zYy0xLjgsMTYuMi0xNS42LDI4LjctMzIuMiwyOC43Yy0xNy45LDAtMzIuNC0xNC41LTMyLjQtMzIuNA0KCQljMC0xNy45LDE0LjUtMzIuNCwzMi40LTMyLjRjNi45LDAsMTMuMywyLjIsMTguNSw1LjhsMjcuNy0xNS4zbC0xNS02MC4yaC0zMS43bC0xMDgsMjAwaDQwLjRsMjIuOC00Mi42aDc5LjRsMTAuNiw0Mi42aDM2LjQNCgkJTDE2MTkuMiwxNzAuN3oiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTU1Mi44LDE3OC41YzAsNi45LDUuNiwxMi41LDEyLjUsMTIuNWM2LjksMCwxMi41LTUuNiwxMi41LTEyLjVjMC02LjktNS42LTEyLjUtMTIuNS0xMi41DQoJCUMxNTU4LjQsMTY2LDE1NTIuOCwxNzEuNiwxNTUyLjgsMTc4LjV6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTTgxNC44LDE1Mi41QzgxNC44LDE1Mi41LDgxNC44LDE1Mi40LDgxNC44LDE1Mi41bC0xMi41LDBsLTEuMy0yLjRjLTUuMS04LjEtMTEuNS0xNC4yLTE5LjItMTguNA0KCQljLTcuOC00LjItMjAuMS02LjMtMjkuMy02LjNjLTEzLjcsMC0yNi44LDMuNy0zOS4zLDExLjFjLTEyLjUsNy40LTIyLjUsMTcuNy0yOS45LDMxYy03LjQsMTMuMi0xMS4yLDI3LjItMTEuMiw0MS44DQoJCWMwLDE5LjIsNS44LDM2LDE3LjQsNTAuNWMxMS42LDE0LjUsMjcuMywyMS43LDQ3LDIxLjdjOC42LDAsMTYuMy0xLjQsMjMuMi00LjRjNi45LTIuOSwxNC4zLTgsMjIuMi0xNS40YzAsMCw5LjMsOC4xLDkuNCw4DQoJCWM1LjgsNC42LDEzLDcuNSwyMC44LDhoMy42bDAuNS00LjNsMTIuNy0xMDYuOWMtMC4xLDAtMC4xLDAtMC4yLDBDODI4LjcsMTU4LjgsODIyLjUsMTUyLjYsODE0LjgsMTUyLjV6IE03ODUuNiwyMjQuMg0KCQljLTQuNSw4LjUtMTAuMSwxNC44LTE2LjgsMTguOGMtNi43LDQtMTQuNSw2LTIzLjUsNmMtMTAuOCwwLTE5LjYtMy41LTI2LjUtMTAuN2MtNi45LTcuMS0xMC4zLTE2LjUtMTAuMy0yOC4xDQoJCWMwLTE1LjEsNC41LTI3LjQsMTMuNi0zN2M5LjEtOS42LDIwLjEtMTQuMywzMy4xLTE0LjNjMTEuMiwwLDIwLjIsMy42LDI3LDEwLjdjNi44LDcuMiwxMC4yLDE2LjYsMTAuMiwyOC40DQoJCUM3OTIuNCwyMDYuOSw3OTAuMSwyMTUuNyw3ODUuNiwyMjQuMnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDA0LjMsOTYuM2MtNy41LTE5LjktMTkuNy0zNy44LTM1LjgtNTIuM2MtMjQuNy0yMi4yLTU2LjctMzQuNS05MC0zNC41Yy0yOC44LDAtNTYuMyw5LTc5LjUsMjYNCgkJYy0xMS4yLDguMi0yMC45LDE3LjktMjguOSwyOC45Yy01LTAuNy0xMC4xLTEuMS0xNS4zLTEuMWMtMjguNywwLTU1LjgsMTEuMi03Ni4xLDMxLjVjLTIwLjMsMjAuMy0zMS41LDQ3LjMtMzEuNSw3Ni4xDQoJCWMwLDI2LjcsOS45LDUyLjMsMjcuOCw3Mi4xYzE0LjIsMTUuNywzMi42LDI2LjgsNTIuOSwzMmM4LjgsMjYuMiwzMy42LDQ1LjEsNjIuNyw0NS4xYzM2LjUsMCw2Ni4yLTI5LjcsNjYuMi02Ni4yDQoJCWMwLTIuMS0wLjEtNC4zLTAuMy02LjRsOTIuOS00OC44bC0yMC4zLTM1LjJsLTg4LjgsNDYuNmMtMTIuMS0xMy44LTI5LjktMjIuNS00OS43LTIyLjVjLTI4LjcsMC01My4yLDE4LjQtNjIuNCw0NA0KCQljLTIzLjQtMTAuMy0zOS44LTMzLjYtMzkuOC02MC44YzAtMzYuNiwyOS43LTY2LjQsNjYuNC02Ni40YzEyLjksMCwyNSwzLjcsMzUuMiwxMC4xYzEyLjMtMzcuMSw0Ny4zLTYzLjksODguNS02My45DQoJCWM0OCwwLDg3LjQsMzYuMiw5Mi43LDgyLjdjMS43LTAuMiwzLjQtMC4zLDUuMS0wLjNjMjguNywwLDUyLDIzLjMsNTIsNTJjMCwyNy4yLTIwLjksNDkuNS00Ny41LDUxLjhsLTI5LjcsMA0KCQljLTEuMy0wLjMtMi43LTAuNC00LjEtMC40Yy0xMS41LDAtMjAuOCw5LjMtMjAuOCwyMC44YzAsMTAuOSw4LjQsMTkuOCwxOS4xLDIwLjd2MC4ybDM1LjUsMGwxLjgsMGwxLjgtMC4yDQoJCWMyMy4yLTIsNDQuNy0xMi41LDYwLjUtMjkuN2MxNS45LTE3LjMsMjQuNy0zOS43LDI0LjctNjMuMkM0NjkuNiwxNDMuNiw0NDIuMSwxMDguMiw0MDQuMyw5Ni4zeiBNMTkwLjYsMjI4LjMNCgkJYzE0LjEsMCwyNS42LDExLjUsMjUuNiwyNS42YzAsMTQuMS0xMS41LDI1LjYtMjUuNiwyNS42Yy0xNC4xLDAtMjUuNi0xMS41LTI1LjYtMjUuNkMxNjUsMjM5LjgsMTc2LjUsMjI4LjMsMTkwLjYsMjI4LjN6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==\",\"LIB~660~100~package`SMT32F103C_GENERIC_BOARD`spicePre`X`image`http://www.sunspot.co.uk/Projects/Arduino/STM32/Generic_STM32F103C8T6.png`BOM_Manufacturer Part``~~0~gge17341~12fe6db2e70145f9a998e5633541941d~9c1a6f6b41a64e478ff3d2ade1beb51c~0~a4f2141caf7cfa78~~#@$T~N~635~322.14~0~#000080~Arial~5.5pt~~~~comment~STM32F103C~1~start~gge4990~0~pinpart#@$T~P~655~89~0~#000080~Arial~~~~~comment~UP~1~start~gge4992~0~pinpart#@$E~625~103~1.5~1.5~#880000~1~0~#880000~gge17344~0#@$R~620~98~2~2~80~214~#880000~1~0~none~gge17345~0~#@$E~625~103~1.5~1.5~#880000~1~0~#880000~gge17346~0#@$P~show~0~1~610~110~180~gge17347~0^^610~110^^M 610 110 h 10~#880000^^1~623.7~114~0~VBAT~start~~~#0000FF^^1~619.5~109~0~1~end~~~#0000FF^^0~617~110^^0~M 620 113 L 623 110 L 620 107#@$P~show~0~2~610~120~180~gge17354~0^^610~120^^M 610 120 h 10~#880000^^1~623.7~124~0~PC13~start~~~#0000FF^^1~619.5~119~0~2~end~~~#0000FF^^0~617~120^^0~M 620 123 L 623 120 L 620 117#@$P~show~0~3~610~130~180~gge17361~0^^610~130^^M 610 130 h 10~#880000^^1~623.7~134~0~PC14~start~~~#0000FF^^1~619.5~129~0~3~end~~~#0000FF^^0~617~130^^0~M 620 133 L 623 130 L 620 127#@$P~show~0~4~610~140~180~gge17368~0^^610~140^^M 610 140 h 10~#880000^^1~623.7~144~0~PC15~start~~~#0000FF^^1~619.5~139~0~4~end~~~#0000FF^^0~617~140^^0~M 620 143 L 623 140 L 620 137#@$P~show~0~5~610~150~180~gge17375~0^^610~150^^M 610 150 h 10~#880000^^1~623.7~154~0~PA0~start~~~#0000FF^^1~619.5~149~0~5~end~~~#0000FF^^0~617~150^^0~M 620 153 L 623 150 L 620 147#@$P~show~0~6~610~160~180~gge17382~0^^610~160^^M 610 160 h 10~#880000^^1~623.7~164~0~PA1~start~~~#0000FF^^1~619.5~159~0~6~end~~~#0000FF^^0~617~160^^0~M 620 163 L 623 160 L 620 157#@$P~show~0~7~610~170~180~gge17389~0^^610~170^^M 610 170 h 10~#880000^^1~623.7~174~0~PA2~start~~~#0000FF^^1~619.5~169~0~7~end~~~#0000FF^^0~617~170^^0~M 620 173 L 623 170 L 620 167#@$P~show~0~8~610~180~180~gge17396~0^^610~180^^M 610 180 h 10~#880000^^1~623.7~184~0~PA3~start~~~#0000FF^^1~619.5~179~0~8~end~~~#0000FF^^0~617~180^^0~M 620 183 L 623 180 L 620 177#@$P~show~0~9~610~190~180~gge17403~0^^610~190^^M 610 190 h 10~#880000^^1~623.7~194~0~PA4~start~~~#0000FF^^1~619.5~189~0~9~end~~~#0000FF^^0~617~190^^0~M 620 193 L 623 190 L 620 187#@$P~show~0~10~610~200~180~gge17410~0^^610~200^^M 610 200 h 10~#880000^^1~623.7~204~0~PA5~start~~~#0000FF^^1~619.5~199~0~10~end~~~#0000FF^^0~617~200^^0~M 620 203 L 623 200 L 620 197#@$P~show~0~11~610~210~180~gge17417~0^^610~210^^M 610 210 h 10~#880000^^1~623.7~214~0~PA6~start~~~#0000FF^^1~619.5~209~0~11~end~~~#0000FF^^0~617~210^^0~M 620 213 L 623 210 L 620 207#@$P~show~0~12~610~220~180~gge17424~0^^610~220^^M 610 220 h 10~#880000^^1~623.7~224~0~PA7~start~~~#0000FF^^1~619.5~219~0~12~end~~~#0000FF^^0~617~220^^0~M 620 223 L 623 220 L 620 217#@$P~show~0~13~610~230~180~gge17431~0^^610~230^^M 610 230 h 10~#880000^^1~623.7~234~0~PB0~start~~~#0000FF^^1~619.5~229~0~13~end~~~#0000FF^^0~617~230^^0~M 620 233 L 623 230 L 620 227#@$P~show~0~14~610~240~180~gge17438~0^^610~240^^M 610 240 h 10~#880000^^1~623.7~244~0~PB1~start~~~#0000FF^^1~619.5~239~0~14~end~~~#0000FF^^0~617~240^^0~M 620 243 L 623 240 L 620 237#@$P~show~0~15~610~250~180~gge17445~0^^610~250^^M 610 250 h 10~#880000^^1~623.7~254~0~PB10~start~~~#0000FF^^1~619.5~249~0~15~end~~~#0000FF^^0~617~250^^0~M 620 253 L 623 250 L 620 247#@$P~show~0~16~610~260~180~gge17452~0^^610~260^^M 610 260 h 10~#880000^^1~623.7~264~0~PB11~start~~~#0000FF^^1~619.5~259~0~16~end~~~#0000FF^^0~617~260^^0~M 620 263 L 623 260 L 620 257#@$P~show~0~17~610~270~180~gge17459~0^^610~270^^M 610 270 h 10~#880000^^1~623.7~274~0~RESET~start~~~#0000FF^^1~619.5~269~0~17~end~~~#0000FF^^0~617~270^^0~M 620 273 L 623 270 L 620 267#@$P~show~0~18~610~280~180~gge17466~0^^610~280^^M 610 280 h 10~#880000^^1~623.7~284~0~3V3~start~~~#0000FF^^1~619.5~279~0~18~end~~~#0000FF^^0~617~280^^0~M 620 283 L 623 280 L 620 277#@$P~show~0~19~610~290~180~gge17473~0^^610~290^^M 610 290 h 10~#000000^^1~623.7~294~0~GND~start~~~#000000^^1~619.5~289~0~19~end~~~#000000^^0~617~290^^0~M 620 293 L 623 290 L 620 287#@$P~show~0~20~610~300~180~gge17480~0^^610~300^^M 610 300 h 10~#000000^^1~623.7~304~0~GND~start~~~#000000^^1~619.5~299~0~20~end~~~#000000^^0~617~300^^0~M 620 303 L 623 300 L 620 297#@$P~show~0~21~710~300~0~gge17487~0^^710~300^^M 710 300 h -10~#880000^^1~696.3~304~0~PB12~end~~~#0000FF^^1~700.5~299~0~21~start~~~#0000FF^^0~703~300^^0~M 700 297 L 697 300 L 700 303#@$P~show~0~22~710~290~0~gge17494~0^^710~290^^M 710 290 h -10~#880000^^1~696.3~294~0~PB13~end~~~#0000FF^^1~700.5~289~0~22~start~~~#0000FF^^0~703~290^^0~M 700 287 L 697 290 L 700 293#@$P~show~0~23~710~280~0~gge17501~0^^710~280^^M 710 280 h -10~#880000^^1~696.3~284~0~PB14~end~~~#0000FF^^1~700.5~279~0~23~start~~~#0000FF^^0~703~280^^0~M 700 277 L 697 280 L 700 283#@$P~show~0~24~710~270~0~gge17508~0^^710~270^^M 710 270 h -10~#880000^^1~696.3~274~0~PB15~end~~~#0000FF^^1~700.5~269~0~24~start~~~#0000FF^^0~703~270^^0~M 700 267 L 697 270 L 700 273#@$P~show~0~25~710~260~0~gge17515~0^^710~260^^M 710 260 h -10~#880000^^1~696.3~264~0~PA8~end~~~#0000FF^^1~700.5~259~0~25~start~~~#0000FF^^0~703~260^^0~M 700 257 L 697 260 L 700 263#@$P~show~0~26~710~250~0~gge17522~0^^710~250^^M 710 250 h -10~#880000^^1~696.3~254~0~PA9~end~~~#0000FF^^1~700.5~249~0~26~start~~~#0000FF^^0~703~250^^0~M 700 247 L 697 250 L 700 253#@$P~show~0~27~710~240~0~gge17529~0^^710~240^^M 710 240 h -10~#880000^^1~696.3~244~0~PA10~end~~~#0000FF^^1~700.5~239~0~27~start~~~#0000FF^^0~703~240^^0~M 700 237 L 697 240 L 700 243#@$P~show~0~28~710~230~0~gge17536~0^^710~230^^M 710 230 h -10~#880000^^1~696.3~234~0~PA11~end~~~#0000FF^^1~700.5~229~0~28~start~~~#0000FF^^0~703~230^^0~M 700 227 L 697 230 L 700 233#@$P~show~0~29~710~220~0~gge17543~0^^710~220^^M 710 220 h -10~#880000^^1~696.3~224~0~PA12~end~~~#0000FF^^1~700.5~219~0~29~start~~~#0000FF^^0~703~220^^0~M 700 217 L 697 220 L 700 223#@$P~show~0~30~710~210~0~gge17550~0^^710~210^^M 710 210 h -10~#880000^^1~696.3~214~0~PA15~end~~~#0000FF^^1~700.5~209~0~30~start~~~#0000FF^^0~703~210^^0~M 700 207 L 697 210 L 700 213#@$P~show~0~31~710~200~0~gge17557~0^^710~200^^M 710 200 h -10~#880000^^1~696.3~204~0~PB3~end~~~#0000FF^^1~700.5~199~0~31~start~~~#0000FF^^0~703~200^^0~M 700 197 L 697 200 L 700 203#@$P~show~0~32~710~190~0~gge17564~0^^710~190^^M 710 190 h -10~#880000^^1~696.3~194~0~PB4~end~~~#0000FF^^1~700.5~189~0~32~start~~~#0000FF^^0~703~190^^0~M 700 187 L 697 190 L 700 193#@$P~show~0~33~710~180~0~gge17571~0^^710~180^^M 710 180 h -10~#880000^^1~696.3~184~0~PB5~end~~~#0000FF^^1~700.5~179~0~33~start~~~#0000FF^^0~703~180^^0~M 700 177 L 697 180 L 700 183#@$P~show~0~34~710~170~0~gge17578~0^^710~170^^M 710 170 h -10~#880000^^1~696.3~174~0~PB6~end~~~#0000FF^^1~700.5~169~0~34~start~~~#0000FF^^0~703~170^^0~M 700 167 L 697 170 L 700 173#@$P~show~0~35~710~160~0~gge17585~0^^710~160^^M 710 160 h -10~#880000^^1~696.3~164~0~PB7~end~~~#0000FF^^1~700.5~159~0~35~start~~~#0000FF^^0~703~160^^0~M 700 157 L 697 160 L 700 163#@$P~show~0~36~710~150~0~gge17592~0^^710~150^^M 710 150 h -10~#880000^^1~696.3~154~0~PB8~end~~~#0000FF^^1~700.5~149~0~36~start~~~#0000FF^^0~703~150^^0~M 700 147 L 697 150 L 700 153#@$P~show~0~37~710~140~0~gge17599~0^^710~140^^M 710 140 h -10~#880000^^1~696.3~144~0~PB9~end~~~#0000FF^^1~700.5~139~0~37~start~~~#0000FF^^0~703~140^^0~M 700 137 L 697 140 L 700 143#@$P~show~0~38~710~130~0~gge17606~0^^710~130^^M 710 130 h -10~#880000^^1~696.3~134~0~5V~end~~~#0000FF^^1~700.5~129~0~38~start~~~#0000FF^^0~703~130^^0~M 700 127 L 697 130 L 700 133#@$P~show~0~39~710~120~0~gge17613~0^^710~120^^M 710 120 h -10~#000000^^1~696.3~124~0~GND~end~~~#000000^^1~700.5~119~0~39~start~~~#000000^^0~703~120^^0~M 700 117 L 697 120 L 700 123#@$P~show~0~40~710~110~0~gge17620~0^^710~110^^M 710 110 h -10~#880000^^1~696.3~114~0~3V3~end~~~#0000FF^^1~700.5~109~0~40~start~~~#0000FF^^0~703~110^^0~M 700 107 L 697 110 L 700 113\",\"W~700 410 700 400 570 400 570 390 550 390~#008800~1~0~none~gge17629~0\",\"F~part_netLabel_gnD~590~300~0~gge17631~~0^^590~300^^GND~#000000~577~326~0~start~1~Times New Roman~9pt~flag_gge5^^PL~590 310 590 300~#000000~1~0~transparent~gge17635~0^^PL~581 310 599 310~#000000~1~0~transparent~gge17636~0^^PL~584 312 596 312~#000000~1~0~transparent~gge17637~0^^PL~587 314 593 314~#000000~1~0~transparent~gge17638~0^^PL~589 316 591 316~#000000~1~0~transparent~gge17639~0\",\"W~610 300 590 300 590 290 610 290~#008800~1~0~none~gge17649~0\",\"F~part_netLabel_gnD~790~120~0~gge17652~~0^^790~120^^GND~#000000~777~146~0~start~1~Times New Roman~9pt~flag_gge6^^PL~790 130 790 120~#000000~1~0~transparent~gge17656~0^^PL~781 130 799 130~#000000~1~0~transparent~gge17657~0^^PL~784 132 796 132~#000000~1~0~transparent~gge17658~0^^PL~787 134 793 134~#000000~1~0~transparent~gge17659~0^^PL~789 136 791 136~#000000~1~0~transparent~gge17660~0\",\"W~710 120 790 120~#008800~1~0~none~gge17670~0\",\"F~part_netLabel_+5V~730~110~0~gge17671~~0^^730~110^^+5V~#000000~720~98~0~start~1~Times New Roman~9pt~flag_gge7^^PL~730 100 730 110~#000000~1~0~transparent~gge17675~0^^PL~725 100 735 100~#000000~1~0~transparent~gge17676~0\",\"W~730 110 730 130 710 130~#008800~1~0~none~gge17683~0\",\"F~part_netLabel_gnD~220~160~0~gge17685~~0^^220~160^^GND~#000000~207~186~0~start~1~Times New Roman~9pt~flag_gge8^^PL~220 170 220 160~#000000~1~0~transparent~gge17689~0^^PL~211 170 229 170~#000000~1~0~transparent~gge17690~0^^PL~214 172 226 172~#000000~1~0~transparent~gge17691~0^^PL~217 174 223 174~#000000~1~0~transparent~gge17692~0^^PL~219 176 221 176~#000000~1~0~transparent~gge17693~0\",\"F~part_netLabel_+5V~410~150~0~gge17703~~0^^410~150^^+5V~#000000~400~138~0~start~1~Times New Roman~9pt~flag_gge9^^PL~410 140 410 150~#000000~1~0~transparent~gge17707~0^^PL~405 140 415 140~#000000~1~0~transparent~gge17708~0\",\"W~220 160 220 150 330 150~#008800~1~0~none~gge17716~0\",\"W~320 180 330 180~#008800~1~0~none~gge17761~0\",\"W~320 190 330 190~#008800~1~0~none~gge17762~0\",\"W~320 210 330 210~#008800~1~0~none~gge17763~0\",\"W~320 200 330 200~#008800~1~0~none~gge17764~0\",\"W~400 180 390 180~#008800~1~0~none~gge17833~0\",\"W~400 200 390 200~#008800~1~0~none~gge17834~0\",\"W~400 190 390 190~#008800~1~0~none~gge17835~0\",\"W~400 170 390 170~#008800~1~0~none~gge17836~0\",\"W~400 160 390 160~#008800~1~0~none~gge17837~0\",\"W~410 150 390 150~#008800~1~0~none~gge17838~0\",\"F~part_netLabel_gnD~780~380~0~gge17956~~0^^780~380^^GND~#000000~767~406~0~start~1~Times New Roman~9pt~flag_gge10^^PL~780 390 780 380~#000000~1~0~transparent~gge17960~0^^PL~771 390 789 390~#000000~1~0~transparent~gge17961~0^^PL~774 392 786 392~#000000~1~0~transparent~gge17962~0^^PL~777 394 783 394~#000000~1~0~transparent~gge17963~0^^PL~779 396 781 396~#000000~1~0~transparent~gge17964~0\",\"W~780 380 750 380 750 410~#008800~1~0~none~gge17974~0\",\"LIB~950~180~package`ROTARY_ENCODER_ALPS_EC12E`BOM_Manufacturer Part`EC12E2424407`Contributor`ENIgma Robotics`BOM_Supplier`RS-Online`BOM_Supplier Part`623-4237`BOM_Manufacturer`Alps Alpine`link`https://fr.rs-online.com/web/p/encodeurs-rotatifs-mecaniques/6234237/`spicePre`E`~270~0~gge19530~37a986a9869a4e0db122df20aae5e69a~66b2b73719454acf98c6b7253c26cd2f~0~432be3f56af9f417~yes~yes#@$T~N~895~156.84~0~#000080~Arial~5.5pt~~~~comment~Encoder_Alps_24imp_switch~1~start~gge19532~0~pinpart#@$T~P~936.07~147.14~0~#000080~Arial~~~~~comment~ENC~1~start~gge19534~0~pinpart#@$R~920~160~~~60~40~#000000~1~0~none~gge19536~0~#@$P~show~0~1~990~170~0~gge19537~0^^990~170^^M 990 170 h -20~#880000^^0~978~168~0~SW1~end~~~#0000FF^^1~955~169~0~SW1~start~~~#0000FF^^0~973~170^^0~M 970 167 L 967 170 L 970 173#@$P~show~0~2~990~190~0~gge19544~0^^990~190^^M 990 190 h -20~#880000^^0~978~188~0~SW2~end~~~#0000FF^^1~955~189~0~SW2~start~~~#0000FF^^0~973~190^^0~M 970 187 L 967 190 L 970 193#@$P~show~0~3~910~170~180~gge19551~0^^910~170^^M 910 170 h 20~#880000^^0~932~173~0~A~start~~~#0000FF^^1~930~169~0~A~end~~~#0000FF^^0~927~170^^0~M 930 173 L 933 170 L 930 167#@$P~show~0~4~910~180~180~gge19558~0^^910~180^^M 910 180 h 20~#880000^^0~932~183~0~C~start~~~#0000FF^^1~930~179~0~C~end~~~#0000FF^^0~927~180^^0~M 930 183 L 933 180 L 930 177#@$P~show~0~5~910~190~180~gge19565~0^^910~190^^M 910 190 h 20~#880000^^0~932~193~0~B~start~~~#0000FF^^1~930~189~0~B~end~~~#0000FF^^0~927~190^^0~M 930 193 L 933 190 L 930 187#@$E~950~180~10~10~#000000~1~0~none~gge19572~0#@$E~950~180~15~15~#000000~1~0~none~gge19573~0#@$P~show~0~4~950~220~270~gge19574~0^^950~220^^M 950 220 v -20~#880000^^0~953~198~270~Shield~start~~~#0000FF^^1~959~205~270~Shield~end~~~#0000FF^^0~950~203^^0~M 953 200 L 950 197 L 947 200\",\"F~part_netLabel_gnD~950~230~0~gge19684~~0^^950~230^^GND~#000000~937~256~0~start~1~Times New Roman~9pt~flag_gge11^^PL~950 240 950 230~#000000~1~0~transparent~gge19688~0^^PL~941 240 959 240~#000000~1~0~transparent~gge19689~0^^PL~944 242 956 242~#000000~1~0~transparent~gge19690~0^^PL~947 244 953 244~#000000~1~0~transparent~gge19691~0^^PL~949 246 951 246~#000000~1~0~transparent~gge19692~0\",\"W~910 180 900 180 900 220 950 220 950 230~#008800~1~0~none~gge19702~0\",\"W~950 220 1000 220 1000 190 990 190 990 190~#008800~1~0~none~gge19705~0\",\"W~710 170 780 170 780 170 780 170 910 170~#008800~1~0~none~gge19707~0\",\"W~710 160 840 160 840 190 910 190~#008800~1~0~none~gge19708~0\",\"LIB~200~410~package`AXIAL-0.3`nameAlias`Value(Ω)`BOM_Manufacturer Part``spicePre`R`spiceSymbolName`Res_AXIAL-0.3(1/8W)_EU`~270~0~gge19709~b9efc06d0fb742f99a478d48de211eb9~5ba509f895244278a1309c0031b47188~0~c04ea579bd5f85dc~~#@$T~N~207~422.56~0~#000080~Arial~~~~~comment~10k~1~start~gge19711~0~pinpart#@$T~P~207~413.33~0~#000080~Arial~~~~~comment~TH1_R1~1~start~gge19713~0~pinpart#@$R~195~400~~~10~20~#A00000~1~0~none~gge19715~0~#@$P~show~0~2~200~430~270~gge19716~0^^200~430^^M 200 420 v 10~#800^^0~200~416~270~2~start~~~#800^^0~196~424~270~2~end~~~#800^^0~200~443^^0~M 203 440 L 200 437 L 197 440#@$P~show~0~1~200~390~90~gge19723~0^^200~390^^M 200 400 v -10~#800^^0~200~404~270~1~end~~~#800^^0~196~396~270~1~start~~~#800^^0~200~377^^0~M 197 380 L 200 383 L 203 380\",\"LIB~260~410~package`AXIAL-0.3`nameAlias`Value(Ω)`BOM_Manufacturer Part``spicePre`R`spiceSymbolName`Res_AXIAL-0.3(1/8W)_EU`~270~0~gge19840~b9efc06d0fb742f99a478d48de211eb9~5ba509f895244278a1309c0031b47188~0~08499375005bf27f~~#@$T~N~267~422.56~0~#000080~Arial~~~~~comment~10k~1~start~gge19842~0~pinpart#@$T~P~267~413.33~0~#000080~Arial~~~~~comment~TH1_R2~1~start~gge19844~0~pinpart#@$R~255~400~~~10~20~#A00000~1~0~none~gge19846~0~#@$P~show~0~2~260~430~270~gge19847~0^^260~430^^M 260 420 v 10~#800^^0~260~416~270~2~start~~~#800^^0~256~424~270~2~end~~~#800^^0~260~443^^0~M 263 440 L 260 437 L 257 440#@$P~show~0~1~260~390~90~gge19854~0^^260~390^^M 260 400 v -10~#800^^0~260~404~270~1~end~~~#800^^0~256~396~270~1~start~~~#800^^0~260~377^^0~M 257 380 L 260 383 L 263 380\",\"LIB~260~470~package`AXIAL-0.3`nameAlias`Value(Ω)`BOM_Manufacturer Part``spicePre`R`spiceSymbolName`Res_AXIAL-0.3(1/8W)_EU`~270~0~gge19865~b9efc06d0fb742f99a478d48de211eb9~5ba509f895244278a1309c0031b47188~0~e3a4e5e7649585ad~~#@$T~N~267~482.56~0~#000080~Arial~~~~~comment~10k~1~start~gge19867~0~pinpart#@$T~P~267~473.33~0~#000080~Arial~~~~~comment~TH1_R3~1~start~gge19869~0~pinpart#@$R~255~460~~~10~20~#A00000~1~0~none~gge19871~0~#@$P~show~0~2~260~490~270~gge19872~0^^260~490^^M 260 480 v 10~#800^^0~260~476~270~2~start~~~#800^^0~256~484~270~2~end~~~#800^^0~260~503^^0~M 263 500 L 260 497 L 257 500#@$P~show~0~1~260~450~90~gge19879~0^^260~450^^M 260 460 v -10~#800^^0~260~464~270~1~end~~~#800^^0~256~456~270~1~start~~~#800^^0~260~437^^0~M 257 440 L 260 443 L 263 440\",\"W~190 460 200 460 200 430~#008800~1~0~none~gge19892~0\",\"W~190 470 200 470 200 500 260 500 260 490~#008800~1~0~none~gge19893~0\",\"W~260 450 260 430~#008800~1~0~none~gge19894~0\",\"W~260 390 260 380 200 380 200 390~#008800~1~0~none~gge19895~0\",\"F~part_netLabel_+5V~230~380~0~gge19896~~0^^230~380^^+3.3V~#000000~220~368~0~start~1~Times New Roman~9pt~flag_gge12^^PL~230 370 230 380~#000000~1~0~transparent~gge19900~0^^PL~225 370 235 370~#000000~1~0~transparent~gge19901~0\",\"F~part_netLabel_gnD~230~500~0~gge19909~~0^^230~500^^GND~#000000~217~526~0~start~1~Times New Roman~9pt~flag_gge13^^PL~230 510 230 500~#000000~1~0~transparent~gge19913~0^^PL~221 510 239 510~#000000~1~0~transparent~gge19914~0^^PL~224 512 236 512~#000000~1~0~transparent~gge19915~0^^PL~227 514 233 514~#000000~1~0~transparent~gge19916~0^^PL~229 516 231 516~#000000~1~0~transparent~gge19917~0\",\"F~part_netLabel_netPort~200~440~180~gge19928~~0^^200~440^^TH1+~#0000FF~221.5~442.41~0~start~1~Times New Roman~8pt~flag_gge14^^PL~200 440 205 435 220 435 220 445 205 445 200 440~#0000FF~1~0~transparent~gge19932~0\",\"F~part_netLabel_netPort~260~440~0~gge19944~~0^^260~440^^TH1-~#0000FF~281.5~442.41~0~start~1~Times New Roman~8pt~flag_gge15^^PL~260 440 265 435 280 435 280 445 265 445 260 440~#0000FF~1~0~transparent~gge19948~0\",\"F~part_netLabel_netPort~260~650~0~gge19968~~0^^260~650^^TH2-~#0000FF~281.5~652.41~0~start~1~Times New Roman~8pt~flag_gge16^^PL~260 650 265 645 280 645 280 655 265 655 260 650~#0000FF~1~0~transparent~gge19972~0\",\"F~part_netLabel_netPort~200~650~180~gge19973~~0^^200~650^^TH2+~#0000FF~221.5~652.41~0~start~1~Times New Roman~8pt~flag_gge17^^PL~200 650 205 645 220 645 220 655 205 655 200 650~#0000FF~1~0~transparent~gge19977~0\",\"F~part_netLabel_gnD~230~710~0~gge19978~~0^^230~710^^GND~#000000~217~736~0~start~1~Times New Roman~9pt~flag_gge18^^PL~230 720 230 710~#000000~1~0~transparent~gge19982~0^^PL~221 720 239 720~#000000~1~0~transparent~gge19983~0^^PL~224 722 236 722~#000000~1~0~transparent~gge19984~0^^PL~227 724 233 724~#000000~1~0~transparent~gge19985~0^^PL~229 726 231 726~#000000~1~0~transparent~gge19986~0\",\"F~part_netLabel_+5V~230~590~0~gge19987~~0^^230~590^^+3.3V~#000000~220~578~0~start~1~Times New Roman~9pt~flag_gge19^^PL~230 580 230 590~#000000~1~0~transparent~gge19991~0^^PL~225 580 235 580~#000000~1~0~transparent~gge19992~0\",\"W~260 600 260 590 200 590 200 600~#008800~1~0~none~gge19993~0\",\"W~260 660 260 640~#008800~1~0~none~gge19994~0\",\"W~190 680 200 680 200 710 260 710 260 700~#008800~1~0~none~gge19995~0\",\"W~190 670 200 670 200 640~#008800~1~0~none~gge19996~0\",\"LIB~260~680~package`AXIAL-0.3`nameAlias`Value(Ω)`BOM_Manufacturer Part``spicePre`R`spiceSymbolName`Res_AXIAL-0.3(1/8W)_EU`~270~0~gge19997~b9efc06d0fb742f99a478d48de211eb9~5ba509f895244278a1309c0031b47188~0~10c992c37b4406e3~~#@$T~N~267~692.56~0~#000080~Arial~~~~~comment~10k~1~start~gge19999~0~pinpart#@$T~P~267~683.33~0~#000080~Arial~~~~~comment~TH2_R3~1~start~gge20001~0~pinpart#@$R~255~670~~~10~20~#A00000~1~0~none~gge20003~0~#@$P~show~0~2~260~700~270~gge20004~0^^260~700^^M 260 690 v 10~#800^^0~260~686~270~2~start~~~#800^^0~256~694~270~2~end~~~#800^^0~260~713^^0~M 263 710 L 260 707 L 257 710#@$P~show~0~1~260~660~90~gge20011~0^^260~660^^M 260 670 v -10~#800^^0~260~674~270~1~end~~~#800^^0~256~666~270~1~start~~~#800^^0~260~647^^0~M 257 650 L 260 653 L 263 650\",\"LIB~260~620~package`AXIAL-0.3`nameAlias`Value(Ω)`BOM_Manufacturer Part``spicePre`R`spiceSymbolName`Res_AXIAL-0.3(1/8W)_EU`~270~0~gge20021~b9efc06d0fb742f99a478d48de211eb9~5ba509f895244278a1309c0031b47188~0~8b276cccf50706e2~~#@$T~N~267~632.56~0~#000080~Arial~~~~~comment~10k~1~start~gge20023~0~pinpart#@$T~P~267~623.33~0~#000080~Arial~~~~~comment~TH2_R2~1~start~gge20025~0~pinpart#@$R~255~610~~~10~20~#A00000~1~0~none~gge20027~0~#@$P~show~0~2~260~640~270~gge20028~0^^260~640^^M 260 630 v 10~#800^^0~260~626~270~2~start~~~#800^^0~256~634~270~2~end~~~#800^^0~260~653^^0~M 263 650 L 260 647 L 257 650#@$P~show~0~1~260~600~90~gge20035~0^^260~600^^M 260 610 v -10~#800^^0~260~614~270~1~end~~~#800^^0~256~606~270~1~start~~~#800^^0~260~587^^0~M 257 590 L 260 593 L 263 590\",\"LIB~200~620~package`AXIAL-0.3`nameAlias`Value(Ω)`BOM_Manufacturer Part``spicePre`R`spiceSymbolName`Res_AXIAL-0.3(1/8W)_EU`~270~0~gge20045~b9efc06d0fb742f99a478d48de211eb9~5ba509f895244278a1309c0031b47188~0~6de8ed11f5334ab4~~#@$T~N~207~632.56~0~#000080~Arial~~~~~comment~10k~1~start~gge20047~0~pinpart#@$T~P~207~623.33~0~#000080~Arial~~~~~comment~TH2_R1~1~start~gge20049~0~pinpart#@$R~195~610~~~10~20~#A00000~1~0~none~gge20051~0~#@$P~show~0~2~200~640~270~gge20052~0^^200~640^^M 200 630 v 10~#800^^0~200~626~270~2~start~~~#800^^0~196~634~270~2~end~~~#800^^0~200~653^^0~M 203 650 L 200 647 L 197 650#@$P~show~0~1~200~600~90~gge20059~0^^200~600^^M 200 610 v -10~#800^^0~200~614~270~1~end~~~#800^^0~196~606~270~1~start~~~#800^^0~200~587^^0~M 197 590 L 200 593 L 203 590\",\"LIB~470~620~package`AXIAL-0.3`nameAlias`Value(Ω)`BOM_Manufacturer Part``spicePre`R`spiceSymbolName`Res_AXIAL-0.3(1/8W)_EU`~270~0~gge20134~b9efc06d0fb742f99a478d48de211eb9~5ba509f895244278a1309c0031b47188~0~92a6000dabb17af8~~#@$T~N~477~632.56~0~#000080~Arial~~~~~comment~10k~1~start~gge20136~0~pinpart#@$T~P~477~623.33~0~#000080~Arial~~~~~comment~TH_EXT_R1~1~start~gge20138~0~pinpart#@$R~465~610~~~10~20~#A00000~1~0~none~gge20140~0~#@$P~show~0~2~470~640~270~gge20141~0^^470~640^^M 470 630 v 10~#800^^0~470~626~270~2~start~~~#800^^0~466~634~270~2~end~~~#800^^0~470~653^^0~M 473 650 L 470 647 L 467 650#@$P~show~0~1~470~600~90~gge20148~0^^470~600^^M 470 610 v -10~#800^^0~470~614~270~1~end~~~#800^^0~466~606~270~1~start~~~#800^^0~470~587^^0~M 467 590 L 470 593 L 473 590\",\"LIB~550~620~package`AXIAL-0.3`nameAlias`Value(Ω)`BOM_Manufacturer Part``spicePre`R`spiceSymbolName`Res_AXIAL-0.3(1/8W)_EU`~270~0~gge20158~b9efc06d0fb742f99a478d48de211eb9~5ba509f895244278a1309c0031b47188~0~fcd80f936e5f79ac~~#@$T~N~557~632.56~0~#000080~Arial~~~~~comment~10k~1~start~gge20160~0~pinpart#@$T~P~557~623.33~0~#000080~Arial~~~~~comment~TH_EXT_R2~1~start~gge20162~0~pinpart#@$R~545~610~~~10~20~#A00000~1~0~none~gge20164~0~#@$P~show~0~2~550~640~270~gge20165~0^^550~640^^M 550 630 v 10~#800^^0~550~626~270~2~start~~~#800^^0~546~634~270~2~end~~~#800^^0~550~653^^0~M 553 650 L 550 647 L 547 650#@$P~show~0~1~550~600~90~gge20172~0^^550~600^^M 550 610 v -10~#800^^0~550~614~270~1~end~~~#800^^0~546~606~270~1~start~~~#800^^0~550~587^^0~M 547 590 L 550 593 L 553 590\",\"LIB~550~680~package`AXIAL-0.3`nameAlias`Value(Ω)`BOM_Manufacturer Part``spicePre`R`spiceSymbolName`Res_AXIAL-0.3(1/8W)_EU`~270~0~gge20182~b9efc06d0fb742f99a478d48de211eb9~5ba509f895244278a1309c0031b47188~0~f222f07e8c464b76~~#@$T~N~557~692.56~0~#000080~Arial~~~~~comment~10k~1~start~gge20184~0~pinpart#@$T~P~557~683.33~0~#000080~Arial~~~~~comment~TH_EXT_R3~1~start~gge20186~0~pinpart#@$R~545~670~~~10~20~#A00000~1~0~none~gge20188~0~#@$P~show~0~2~550~700~270~gge20189~0^^550~700^^M 550 690 v 10~#800^^0~550~686~270~2~start~~~#800^^0~546~694~270~2~end~~~#800^^0~550~713^^0~M 553 710 L 550 707 L 547 710#@$P~show~0~1~550~660~90~gge20196~0^^550~660^^M 550 670 v -10~#800^^0~550~674~270~1~end~~~#800^^0~546~666~270~1~start~~~#800^^0~550~647^^0~M 547 650 L 550 653 L 553 650\",\"W~460 670 470 670 470 640~#008800~1~0~none~gge20206~0\",\"W~460 680 470 680 470 710 550 710 550 700~#008800~1~0~none~gge20207~0\",\"W~550 660 550 640~#008800~1~0~none~gge20208~0\",\"W~550 600 550 590 470 590 470 600~#008800~1~0~none~gge20209~0\",\"F~part_netLabel_+5V~510~590~0~gge20210~~0^^510~590^^+3.3V~#000000~500~578~0~start~1~Times New Roman~9pt~flag_gge20^^PL~510 580 510 590~#000000~1~0~transparent~gge20214~0^^PL~505 580 515 580~#000000~1~0~transparent~gge20215~0\",\"F~part_netLabel_gnD~510~710~0~gge20216~~0^^510~710^^GND~#000000~497~736~0~start~1~Times New Roman~9pt~flag_gge21^^PL~510 720 510 710~#000000~1~0~transparent~gge20220~0^^PL~501 720 519 720~#000000~1~0~transparent~gge20221~0^^PL~504 722 516 722~#000000~1~0~transparent~gge20222~0^^PL~507 724 513 724~#000000~1~0~transparent~gge20223~0^^PL~509 726 511 726~#000000~1~0~transparent~gge20224~0\",\"F~part_netLabel_netPort~470~650~180~gge20225~~0^^470~650^^TH_EXT+~#0000FF~491.5~652.41~0~start~1~Times New Roman~8pt~flag_gge22^^PL~470 650 475 645 490 645 490 655 475 655 470 650~#0000FF~1~0~transparent~gge20229~0\",\"F~part_netLabel_netPort~550~650~0~gge20230~~0^^550~650^^TH_EXT-~#0000FF~571.5~652.41~0~start~1~Times New Roman~8pt~flag_gge23^^PL~550 650 555 645 570 645 570 655 555 655 550 650~#0000FF~1~0~transparent~gge20234~0\",\"W~720 190 710 190~#008800~1~0~none~gge20304~0\",\"W~720 200 710 200~#008800~1~0~none~gge20305~0\",\"W~720 210 710 210~#008800~1~0~none~gge20306~0\",\"W~720 220 710 220~#008800~1~0~none~gge20307~0\",\"W~720 230 710 230~#008800~1~0~none~gge20308~0\",\"W~720 240 710 240~#008800~1~0~none~gge20309~0\",\"W~720 250 710 250~#008800~1~0~none~gge20310~0\",\"W~720 270 710 270~#008800~1~0~none~gge20311~0\",\"W~720 260 710 260~#008800~1~0~none~gge20312~0\",\"W~720 280 710 280~#008800~1~0~none~gge20313~0\",\"F~part_netLabel_netPort~610~150~180~gge20316~~0^^610~150^^TH1-~#0000FF~561.83~155~0~start~1~Times New Roman~8pt~flag_gge24^^PL~610 150 605 155 590 155 590 145 605 145 610 150~#0000FF~1~0~transparent~gge20320~0\",\"F~part_netLabel_netPort~610~160~180~gge20322~~0^^610~160^^TH1+~#0000FF~555~165~0~start~1~Times New Roman~8pt~flag_gge25^^PL~610 160 605 165 590 165 590 155 605 155 610 160~#0000FF~1~0~transparent~gge20326~0\",\"F~part_netLabel_netPort~610~170~180~gge20328~~0^^610~170^^TH2-~#0000FF~561.83~175~0~start~1~Times New Roman~8pt~flag_gge26^^PL~610 170 605 175 590 175 590 165 605 165 610 170~#0000FF~1~0~transparent~gge20332~0\",\"F~part_netLabel_netPort~610~180~180~gge20334~~0^^610~180^^TH2+~#0000FF~555~185~0~start~1~Times New Roman~8pt~flag_gge27^^PL~610 180 605 185 590 185 590 175 605 175 610 180~#0000FF~1~0~transparent~gge20338~0\",\"F~part_netLabel_netPort~610~190~180~gge20340~~0^^610~190^^TH_EXT-~#0000FF~540~195~0~start~1~Times New Roman~8pt~flag_gge28^^PL~610 190 605 195 590 195 590 185 605 185 610 190~#0000FF~1~0~transparent~gge20344~0\",\"F~part_netLabel_netPort~610~200~180~gge20346~~0^^610~200^^TH_EXT+~#0000FF~535~205~0~start~1~Times New Roman~8pt~flag_gge29^^PL~610 200 605 205 590 205 590 195 605 195 610 200~#0000FF~1~0~transparent~gge20350~0\",\"O~710~180~gge20357~M 706 176 L 714 184 M 714 176 L 706 184~#33cc33~0\",\"F~part_netLabel_+5V~590~280~0~gge20368~~0^^590~280^^+3.3V~#000000~565~266.48~0~start~1~Times New Roman~9pt~flag_gge30^^PL~590 270 590 280~#000000~1~0~transparent~gge20372~0^^PL~585 270 595 270~#000000~1~0~transparent~gge20373~0\",\"W~610 280 590 280~#008800~1~0~none~gge20380~0\",\"F~part_netLabel_netPort~990~170~180~gge20382~~0^^990~170^^SW~#0000FF~1011.5~172.41~0~start~1~Times New Roman~8pt~flag_gge31^^PL~990 170 995 165 1010 165 1010 175 995 175 990 170~#0000FF~1~0~transparent~gge20386~0\",\"F~part_netLabel_netPort~720~150~0~gge20392~~0^^720~150^^SW~#0000FF~741.5~152.41~0~start~1~Times New Roman~8pt~flag_gge32^^PL~720 150 725 145 740 145 740 155 725 155 720 150~#0000FF~1~0~transparent~gge20396~0\",\"W~720 150 710 150~#008800~1~0~none~gge20402~0\",\"O~710~110~gge20405~M 706 106 L 714 114 M 714 106 L 706 114~#33cc33~0\",\"O~610~110~gge20409~M 606 106 L 614 114 M 614 106 L 606 114~#33cc33~0\",\"O~610~120~gge20411~M 606 116 L 614 124 M 614 116 L 606 124~#33cc33~0\",\"O~610~130~gge20413~M 606 126 L 614 134 M 614 126 L 606 134~#33cc33~0\",\"O~610~140~gge20415~M 606 136 L 614 144 M 614 136 L 606 144~#33cc33~0\",\"O~610~210~gge20417~M 606 206 L 614 214 M 614 206 L 606 214~#33cc33~0\",\"O~610~220~gge20419~M 606 216 L 614 224 M 614 216 L 606 224~#33cc33~0\",\"O~610~230~gge20421~M 606 226 L 614 234 M 614 226 L 606 234~#33cc33~0\",\"O~610~240~gge20423~M 606 236 L 614 244 M 614 236 L 606 244~#33cc33~0\",\"O~610~250~gge20425~M 606 246 L 614 254 M 614 246 L 606 254~#33cc33~0\",\"O~610~260~gge20427~M 606 256 L 614 264 M 614 256 L 606 264~#33cc33~0\",\"O~610~270~gge20429~M 606 266 L 614 274 M 614 266 L 606 274~#33cc33~0\",\"F~part_netLabel_+5V~220~100~0~gge20494~~0^^220~100^^+5V~#000000~210~88~0~start~1~Times New Roman~9pt~flag_gge33^^PL~220 90 220 100~#000000~1~0~transparent~gge20498~0^^PL~215 90 225 90~#000000~1~0~transparent~gge20499~0\",\"W~390 220 410 220~#008800~1~0~none~gge20508~0\",\"F~part_netLabel_gnD~410~220~0~gge20510~~0^^410~220^^GND~#000000~397~246~0~start~1~Times New Roman~9pt~flag_gge34^^PL~410 230 410 220~#000000~1~0~transparent~gge20514~0^^PL~401 230 419 230~#000000~1~0~transparent~gge20515~0^^PL~404 232 416 232~#000000~1~0~transparent~gge20516~0^^PL~407 234 413 234~#000000~1~0~transparent~gge20517~0^^PL~409 236 411 236~#000000~1~0~transparent~gge20518~0\",\"LIB~170~470~package`PHOENIX-2PIN-5.08MM`BOM_Manufacturer`Phoenix Contact`BOM_Manufacturer Part`1715721`BOM_Supplier`RS-Online`BOM_Supplier Part`193-0564`link`https://fr.rs-online.com/web/p/borniers-pour-circuits-imprimes/1930564/?relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D626572266C753D656E266D6D3D6D61746368616C6C26706D3D5E2828282872737C5253295B205D3F293F285C647B337D5B5C2D5C735D3F5C647B332C347D5B705061415D3F29297C283235285C647B387D7C5C647B317D5C2D5C647B377D2929292426706F3D3126736E3D592673723D2673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3139332D30353634267374613D3139333035363426&searchHistory=%7B%22enabled%22%3Atrue%7D`Contributor`Steins7`spicePre`P`~180~0~gge20851~cee0def10c584f32ac2d8c27339b6535~8ca42a94833d474aba3da2f7d34b6375~0~79407ed2f7829b77~~#@$T~N~80~489.29~0~#000080~Arial~~~~~comment~Phoenix-2pin-5.08mm~1~start~gge20853~0~pinpart#@$T~P~160~444.09~0~#000080~Arial~~~~~comment~TH1~1~start~gge20855~0~pinpart#@$P~show~0~1~190~470~0~gge20857~0^^190~470^^M 190 470 h -20~#880000^^0~168~473~0~1~end~~~#0000FF^^1~180~469~0~1~start~~~#0000FF^^0~173~470^^0~M 170 467 L 167 470 L 170 473#@$P~show~0~2~190~460~0~gge20864~0^^190~460^^M 190 460 h -20~#880000^^0~168~463~0~2~end~~~#0000FF^^1~180~459~0~2~start~~~#0000FF^^0~173~460^^0~M 170 457 L 167 460 L 170 463#@$R~160~450~~~20~30~#000000~1~0~none~gge20871~0~#@$R~165~465~~~10~10~#000000~1~0~none~gge20872~0~#@$R~165~455~~~10~10~#000000~1~0~none~gge20873~0~\",\"LIB~170~680~package`PHOENIX-2PIN-5.08MM`BOM_Manufacturer`Phoenix Contact`BOM_Manufacturer Part`1715721`BOM_Supplier`RS-Online`BOM_Supplier Part`193-0564`link`https://fr.rs-online.com/web/p/borniers-pour-circuits-imprimes/1930564/?relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D626572266C753D656E266D6D3D6D61746368616C6C26706D3D5E2828282872737C5253295B205D3F293F285C647B337D5B5C2D5C735D3F5C647B332C347D5B705061415D3F29297C283235285C647B387D7C5C647B317D5C2D5C647B377D2929292426706F3D3126736E3D592673723D2673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3139332D30353634267374613D3139333035363426&searchHistory=%7B%22enabled%22%3Atrue%7D`Contributor`Steins7`spicePre`P`~180~0~gge20878~cee0def10c584f32ac2d8c27339b6535~8ca42a94833d474aba3da2f7d34b6375~0~d953ce59ee18cb42~~#@$T~N~80~699.29~0~#000080~Arial~~~~~comment~Phoenix-2pin-5.08mm~1~start~gge20880~0~pinpart#@$T~P~160~654.09~0~#000080~Arial~~~~~comment~TH2~1~start~gge20882~0~pinpart#@$P~show~0~1~190~680~0~gge20884~0^^190~680^^M 190 680 h -20~#880000^^0~168~683~0~1~end~~~#0000FF^^1~180~679~0~1~start~~~#0000FF^^0~173~680^^0~M 170 677 L 167 680 L 170 683#@$P~show~0~2~190~670~0~gge20891~0^^190~670^^M 190 670 h -20~#880000^^0~168~673~0~2~end~~~#0000FF^^1~180~669~0~2~start~~~#0000FF^^0~173~670^^0~M 170 667 L 167 670 L 170 673#@$R~160~660~~~20~30~#000000~1~0~none~gge20898~0~#@$R~165~675~~~10~10~#000000~1~0~none~gge20899~0~#@$R~165~665~~~10~10~#000000~1~0~none~gge20900~0~\",\"LIB~440~680~package`PHOENIX-2PIN-5.08MM`BOM_Manufacturer`Phoenix Contact`BOM_Manufacturer Part`1715721`BOM_Supplier`RS-Online`BOM_Supplier Part`193-0564`link`https://fr.rs-online.com/web/p/borniers-pour-circuits-imprimes/1930564/?relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D626572266C753D656E266D6D3D6D61746368616C6C26706D3D5E2828282872737C5253295B205D3F293F285C647B337D5B5C2D5C735D3F5C647B332C347D5B705061415D3F29297C283235285C647B387D7C5C647B317D5C2D5C647B377D2929292426706F3D3126736E3D592673723D2673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3139332D30353634267374613D3139333035363426&searchHistory=%7B%22enabled%22%3Atrue%7D`Contributor`Steins7`spicePre`P`~180~0~gge20905~cee0def10c584f32ac2d8c27339b6535~8ca42a94833d474aba3da2f7d34b6375~0~516a2746dd554ec1~~#@$T~N~350~699.29~0~#000080~Arial~~~~~comment~Phoenix-2pin-5.08mm~1~start~gge20907~0~pinpart#@$T~P~420~653.89~0~#000080~Arial~~~~~comment~TH_EXT~1~start~gge20909~0~pinpart#@$P~show~0~1~460~680~0~gge20911~0^^460~680^^M 460 680 h -20~#880000^^0~438~683~0~1~end~~~#0000FF^^1~450~679~0~1~start~~~#0000FF^^0~443~680^^0~M 440 677 L 437 680 L 440 683#@$P~show~0~2~460~670~0~gge20918~0^^460~670^^M 460 670 h -20~#880000^^0~438~673~0~2~end~~~#0000FF^^1~450~669~0~2~start~~~#0000FF^^0~443~670^^0~M 440 667 L 437 670 L 440 673#@$R~430~660~~~20~30~#000000~1~0~none~gge20925~0~#@$R~435~675~~~10~10~#000000~1~0~none~gge20926~0~#@$R~435~665~~~10~10~#000000~1~0~none~gge20927~0~\",\"LIB~610~380~package`FUSE HOLDER 5X20MM`BOM_Supplier Part`176-9047`BOM_Supplier`RS-Online`BOM_Manufacturer Part`0031.8201`BOM_Manufacturer`Schurter`Contributor`ENIgma Robotics`spicePre`F`~~0~gge22689~ef2785973486407d9676c08af7a6993a~3e86e4955b7d47d9bed27bba83bd7bda~0~0164fa531c2672d8~~#@$T~N~575~396.85~0~#000080~Arial~5.5pt~~~~comment~Fuse Holder 5x20mm~1~start~gge22691~0~pinpart#@$T~P~610~368.7~0~#000080~Arial~~~~~comment~F1~1~start~gge22693~0~pinpart#@$R~580~370~~~70~20~#000000~1~0~none~gge22695~0~#@$E~590~380~2.5~2.5~#000000~1~0~none~gge22696~0#@$E~640~380~2.5~2.5~#000000~1~0~none~gge22697~0#@$R~585~375~~~60~10~#000000~1~0~none~gge22698~0~#@$P~show~0~1~570~380~180~gge22699~0^^570~380^^M 570 380 h 20~#880000^^0~592~383~0~1~start~~~#0000FF^^1~585~379~0~1~end~~~#0000FF^^0~587~380^^0~M 590 383 L 593 380 L 590 377#@$P~show~0~2~660~380~0~gge22706~0^^660~380^^M 660 380 h -20~#880000^^0~638~383~0~2~end~~~#0000FF^^1~645~379~0~2~start~~~#0000FF^^0~643~380^^0~M 640 377 L 637 380 L 640 383#@$PL~600 375 600 385~#000000~1~0~none~gge22713~0#@$PL~630 375 630 385~#000000~1~0~none~gge22714~0#@$PL~630 375 600 385~#000000~1~0~none~gge22715~0\",\"W~550 380 570 380~#008800~1~0~none~gge22746~0\",\"W~660 380 720 380 720 410~#008800~1~0~none~gge22747~0\",\"LIB~350~150~package`HE10-16`BOM_Manufacturer`RS Pro`BOM_Manufacturer Part`625-7268`BOM_Supplier`RS-Online`BOM_Supplier Part`625-7268`link`https://fr.rs-online.com/web/p/connecteurs-idc/6257268/?relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D626572266C753D656E266D6D3D6D61746368616C6C26706D3D5E2828282872737C5253295B205D3F293F285C647B337D5B5C2D5C735D3F5C647B332C347D5B705061415D3F29297C283235285C647B387D7C5C647B317D5C2D5C647B377D2929292426706F3D3126736E3D592673723D2673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3632352D37323638267374613D3632353732363826&searchHistory=%7B%22enabled%22%3Atrue%7D`Contributor`Steins7`spicePre`L`~~0~gge22868~52f17a1f45614d0582d6d5fed7c9fa64~d7159e299db7468687fc48c04cfb4a7d~0~721a1ba2e74d2275~yes~yes#@$T~N~335~237~0~#000080~Arial~5.5pt~~~~comment~HE10-16-LCD~1~start~gge14846~0~pinpart#@$T~P~350~133.89~0~#000080~Arial~~~~~comment~LCD~1~start~gge14848~0~pinpart#@$R~340~140~~~40~90~#000000~1~0~none~gge22873~0~#@$P~show~0~16~390~220~0~gge22874~0^^390~220^^M 390 220 h -20~#880000^^1~400~218~0~LED-~end~~5.5pt~#0000FF^^1~365~219~0~16~start~~5.5pt~#0000FF^^0~373~220^^0~M 370 217 L 367 220 L 370 223#@$P~show~0~15~330~220~180~gge22881~0^^330~220^^M 330 220 h 20~#880000^^1~317~218~0~LED+~start~~5.5pt~#0000FF^^1~355~219~0~15~end~~5.5pt~#0000FF^^0~347~220^^0~M 350 223 L 353 220 L 350 217#@$P~show~0~14~390~210~0~gge22888~0^^390~210^^M 390 210 h -20~#880000^^1~398~208~0~DB7~end~~5.5pt~#0000FF^^1~365~209~0~14~start~~5.5pt~#0000FF^^0~373~210^^0~M 370 207 L 367 210 L 370 213#@$P~show~0~13~330~210~180~gge22895~0^^330~210^^M 330 210 h 20~#880000^^1~322~208~0~DB6~start~~5.5pt~#0000FF^^1~355~209~0~13~end~~5.5pt~#0000FF^^0~347~210^^0~M 350 213 L 353 210 L 350 207#@$P~show~0~12~390~200~0~gge22902~0^^390~200^^M 390 200 h -20~#880000^^1~398~198~0~DB5~end~~5.5pt~#0000FF^^1~365~199~0~12~start~~5.5pt~#0000FF^^0~373~200^^0~M 370 197 L 367 200 L 370 203#@$P~show~0~11~330~200~180~gge22909~0^^330~200^^M 330 200 h 20~#880000^^1~322~198~0~DB4~start~~5.5pt~#0000FF^^1~355~199~0~11~end~~5.5pt~#0000FF^^0~347~200^^0~M 350 203 L 353 200 L 350 197#@$P~show~0~10~390~190~0~gge22916~0^^390~190^^M 390 190 h -20~#880000^^1~398~188~0~DB3~end~~5.5pt~#0000FF^^1~365~189~0~10~start~~5.5pt~#0000FF^^0~373~190^^0~M 370 187 L 367 190 L 370 193#@$P~show~0~9~330~190~180~gge22923~0^^330~190^^M 330 190 h 20~#880000^^1~322~188~0~DB2~start~~5.5pt~#0000FF^^1~355~189~0~9~end~~5.5pt~#0000FF^^0~347~190^^0~M 350 193 L 353 190 L 350 187#@$P~show~0~8~390~180~0~gge22930~0^^390~180^^M 390 180 h -20~#880000^^1~398~178~0~DB1~end~~5.5pt~#0000FF^^1~370~179~0~8~start~~5.5pt~#0000FF^^0~373~180^^0~M 370 177 L 367 180 L 370 183#@$P~show~0~7~330~180~180~gge22937~0^^330~180^^M 330 180 h 20~#880000^^1~322~178~0~DB0~start~~5.5pt~#0000FF^^1~350~179~0~7~end~~5.5pt~#0000FF^^0~347~180^^0~M 350 183 L 353 180 L 350 177#@$P~show~0~6~390~170~0~gge22944~0^^390~170^^M 390 170 h -20~#880000^^1~388~168~0~E~end~~5.5pt~#0000FF^^1~370~169~0~6~start~~5.5pt~#0000FF^^0~373~170^^0~M 370 167 L 367 170 L 370 173#@$P~show~0~5~330~170~180~gge22951~0^^330~170^^M 330 170 h 20~#880000^^1~322~168~0~R/W~start~~5.5pt~#0000FF^^1~350~169~0~5~end~~5.5pt~#0000FF^^0~347~170^^0~M 350 173 L 353 170 L 350 167#@$P~show~0~3~330~160~180~gge22958~0^^330~160^^M 330 160 h 20~#880000^^1~327~158~0~VO~start~~5.5pt~#0000FF^^1~350~159~0~3~end~~5.5pt~#0000FF^^0~347~160^^0~M 350 163 L 353 160 L 350 157#@$P~show~0~1~330~150~180~gge22965~0^^330~150^^M 330 150 h 20~#880000^^1~321~148~0~GND~start~~5.5pt~#0000FF^^1~350~149~0~1~end~~5.5pt~#0000FF^^0~347~150^^0~M 350 153 L 353 150 L 350 147#@$P~show~0~2~390~150~0~gge22972~0^^390~150^^M 390 150 h -20~#880000^^1~398~148~0~VCC~end~~5.5pt~#0000FF^^1~370~149~0~2~start~~5.5pt~#0000FF^^0~373~150^^0~M 370 147 L 367 150 L 370 153#@$P~show~0~4~390~160~0~gge22979~0^^390~160^^M 390 160 h -20~#880000^^1~393~158~0~RS~end~~5.5pt~#0000FF^^1~370~159~0~4~start~~5.5pt~#0000FF^^0~373~160^^0~M 370 157 L 367 160 L 370 163\",\"F~part_netLabel_netPort~400~180~180~gge22991~~0^^400~180^^DB1~#0000FF~421.5~181.48~0~start~1~Times New Roman~~flag_gge35^^PL~400 180 405 175 420 175 420 185 405 185 400 180~#0000FF~1~0~transparent~gge22995~0\",\"F~part_netLabel_netPort~320~190~0~gge22999~~0^^320~190^^DB2~#0000FF~278.24~193.91~0~start~1~Times New Roman~~flag_gge36^^PL~320 190 315 195 300 195 300 185 315 185 320 190~#0000FF~1~0~transparent~gge23003~0\",\"F~part_netLabel_netPort~400~190~0~gge23005~~0^^400~190^^DB3~#0000FF~421.5~192.41~0~start~1~Times New Roman~~flag_gge37^^PL~400 190 405 185 420 185 420 195 405 195 400 190~#0000FF~1~0~transparent~gge23009~0\",\"F~part_netLabel_netPort~400~160~180~gge23011~~0^^400~160^^RS~#0000FF~421.5~161.32~0~start~1~Times New Roman~~flag_gge38^^PL~400 160 405 155 420 155 420 165 405 165 400 160~#0000FF~1~0~transparent~gge23015~0\",\"F~part_netLabel_netPort~320~200~0~gge23020~~0^^320~200^^DB4~#0000FF~278.24~203.91~0~start~1~Times New Roman~~flag_gge39^^PL~320 200 315 205 300 205 300 195 315 195 320 200~#0000FF~1~0~transparent~gge23024~0\",\"F~part_netLabel_netPort~400~170~180~gge23026~~0^^400~170^^E~#0000FF~421.5~171.32~0~start~1~Times New Roman~~flag_gge40^^PL~400 170 405 165 420 165 420 175 405 175 400 170~#0000FF~1~0~transparent~gge23030~0\",\"F~part_netLabel_netPort~320~180~0~gge23032~~0^^320~180^^DB0~#0000FF~295.43~184.24~0~end~1~Times New Roman~~flag_gge41^^PL~320 180 315 185 300 185 300 175 315 175 320 180~#0000FF~1~0~transparent~gge23036~0\",\"F~part_netLabel_netPort~400~200~0~gge23038~~0^^400~200^^DB5~#0000FF~421.5~202.41~0~start~1~Times New Roman~~flag_gge42^^PL~400 200 405 195 420 195 420 205 405 205 400 200~#0000FF~1~0~transparent~gge23042~0\",\"F~part_netLabel_netPort~400~210~0~gge23044~~0^^400~210^^DB7~#0000FF~421.5~212.41~0~start~1~Times New Roman~~flag_gge43^^PL~400 210 405 205 420 205 420 215 405 215 400 210~#0000FF~1~0~transparent~gge23048~0\",\"W~390 210 400 210~#008800~1~0~none~gge23049~0\",\"F~part_netLabel_netPort~320~210~0~gge23051~~0^^320~210^^DB6~#0000FF~278.24~213.91~0~start~1~Times New Roman~~flag_gge44^^PL~320 210 315 215 300 215 300 205 315 205 320 210~#0000FF~1~0~transparent~gge23055~0\",\"W~320 170 330 170~#008800~1~0~none~gge23062~0\",\"F~part_netLabel_netPort~320~170~0~gge23057~~0^^320~170^^R/W~#0000FF~279~173.7~0~start~1~Times New Roman~~flag_gge45^^PL~320 170 315 165 300 165 300 175 315 175 320 170~#0000FF~1~0~transparent~gge23061~0\",\"F~part_netLabel_netPort~720~290~180~gge23101~~0^^720~290^^DB6~#0000FF~741.63~293.76~0~start~1~Times New Roman~~flag_gge46^^PL~720 290 725 295 740 295 740 285 725 285 720 290~#0000FF~1~0~transparent~gge23105~0\",\"W~720 290 710 290~#008800~1~0~none~gge23131~0\",\"F~part_netLabel_netPort~720~260~180~gge23133~~0^^720~260^^DB0~#0000FF~741.5~265.33~0~start~1~Times New Roman~~flag_gge47^^PL~720 260 725 265 740 265 740 255 725 255 720 260~#0000FF~1~0~transparent~gge23137~0\",\"F~part_netLabel_netPort~720~250~180~gge23138~~0^^720~250^^R/W~#0000FF~741.63~253.76~0~start~1~Times New Roman~~flag_gge48^^PL~720 250 725 255 740 255 740 245 725 245 720 250~#0000FF~1~0~transparent~gge23142~0\",\"F~part_netLabel_netPort~720~280~180~gge23143~~0^^720~280^^DB4~#0000FF~741.63~283.76~0~start~1~Times New Roman~~flag_gge49^^PL~720 280 725 285 740 285 740 275 725 275 720 280~#0000FF~1~0~transparent~gge23147~0\",\"F~part_netLabel_netPort~720~270~180~gge23148~~0^^720~270^^DB2~#0000FF~741.63~273.76~0~start~1~Times New Roman~~flag_gge50^^PL~720 270 725 275 740 275 740 265 725 265 720 270~#0000FF~1~0~transparent~gge23152~0\",\"F~part_netLabel_netPort~720~190~0~gge23153~~0^^720~190^^DB7~#0000FF~741.63~193.76~0~start~1~Times New Roman~~flag_gge51^^PL~720 190 725 195 740 195 740 185 725 185 720 190~#0000FF~1~0~transparent~gge23157~0\",\"F~part_netLabel_netPort~720~210~0~gge23158~~0^^720~210^^DB3~#0000FF~741.63~213.76~0~start~1~Times New Roman~~flag_gge52^^PL~720 210 725 215 740 215 740 205 725 205 720 210~#0000FF~1~0~transparent~gge23162~0\",\"F~part_netLabel_netPort~720~220~180~gge23163~~0^^720~220^^DB1~#0000FF~741.5~225.33~0~start~1~Times New Roman~~flag_gge53^^PL~720 220 725 225 740 225 740 215 725 215 720 220~#0000FF~1~0~transparent~gge23167~0\",\"F~part_netLabel_netPort~720~230~180~gge23168~~0^^720~230^^E~#0000FF~741.5~235.33~0~start~1~Times New Roman~~flag_gge54^^PL~720 230 725 235 740 235 740 225 725 225 720 230~#0000FF~1~0~transparent~gge23172~0\",\"F~part_netLabel_netPort~720~240~180~gge23173~~0^^720~240^^RS~#0000FF~741.5~245.33~0~start~1~Times New Roman~~flag_gge55^^PL~720 240 725 245 740 245 740 235 725 235 720 240~#0000FF~1~0~transparent~gge23177~0\",\"F~part_netLabel_netPort~720~200~0~gge23178~~0^^720~200^^DB5~#0000FF~741.63~203.76~0~start~1~Times New Roman~~flag_gge56^^PL~720 200 725 205 740 205 740 195 725 195 720 200~#0000FF~1~0~transparent~gge23182~0\",\"LIB~990~420~package`PHOENIX-2PIN-5.08MM`BOM_Manufacturer`Phoenix Contact`BOM_Manufacturer Part`1715721`BOM_Supplier`RS-Online`BOM_Supplier Part`193-0564`link`https://fr.rs-online.com/web/p/borniers-pour-circuits-imprimes/1930564/?relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D626572266C753D656E266D6D3D6D61746368616C6C26706D3D5E2828282872737C5253295B205D3F293F285C647B337D5B5C2D5C735D3F5C647B332C347D5B705061415D3F29297C283235285C647B387D7C5C647B317D5C2D5C647B377D2929292426706F3D3126736E3D592673723D2673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3139332D30353634267374613D3139333035363426&searchHistory=%7B%22enabled%22%3Atrue%7D`Contributor`Steins7`spicePre`P`~~0~gge23184~cee0def10c584f32ac2d8c27339b6535~8ca42a94833d474aba3da2f7d34b6375~0~048d9e1bb1c218a9~~#@$T~N~980~446.84~0~#000080~Arial~5.5pt~~~~comment~Phoenix-2pin-5.08mm~1~start~gge23186~0~pinpart#@$T~P~980~403.68~0~#000080~Arial~~~~~comment~SWITCH_2~1~start~gge23188~0~pinpart#@$P~show~0~1~970~420~180~gge23190~0^^970~420^^M 970 420 h 20~#880000^^0~992~423~0~1~start~~~#0000FF^^1~980~419~0~1~end~~~#0000FF^^0~987~420^^0~M 990 423 L 993 420 L 990 417#@$P~show~0~2~970~430~180~gge23197~0^^970~430^^M 970 430 h 20~#880000^^0~992~433~0~2~start~~~#0000FF^^1~980~429~0~2~end~~~#0000FF^^0~987~430^^0~M 990 433 L 993 430 L 990 427#@$R~980~410~~~20~30~#000000~1~0~none~gge23204~0~#@$R~985~415~~~10~10~#000000~1~0~none~gge23205~0~#@$R~985~425~~~10~10~#000000~1~0~none~gge23206~0~\",\"LIB~990~340~package`PHOENIX-2PIN-5.08MM`BOM_Manufacturer`Phoenix Contact`BOM_Manufacturer Part`1715721`BOM_Supplier`RS-Online`BOM_Supplier Part`193-0564`link`https://fr.rs-online.com/web/p/borniers-pour-circuits-imprimes/1930564/?relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D626572266C753D656E266D6D3D6D61746368616C6C26706D3D5E2828282872737C5253295B205D3F293F285C647B337D5B5C2D5C735D3F5C647B332C347D5B705061415D3F29297C283235285C647B387D7C5C647B317D5C2D5C647B377D2929292426706F3D3126736E3D592673723D2673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3139332D30353634267374613D3139333035363426&searchHistory=%7B%22enabled%22%3Atrue%7D`Contributor`Steins7`spicePre`P`~~0~gge23208~cee0def10c584f32ac2d8c27339b6535~8ca42a94833d474aba3da2f7d34b6375~0~858d7335844ce2f4~~#@$T~N~980~366.84~0~#000080~Arial~5.5pt~~~~comment~Phoenix-2pin-5.08mm~1~start~gge23210~0~pinpart#@$T~P~980~323.68~0~#000080~Arial~~~~~comment~SWITCH_1~1~start~gge23212~0~pinpart#@$P~show~0~1~970~340~180~gge23214~0^^970~340^^M 970 340 h 20~#880000^^0~992~343~0~1~start~~~#0000FF^^1~980~339~0~1~end~~~#0000FF^^0~987~340^^0~M 990 343 L 993 340 L 990 337#@$P~show~0~2~970~350~180~gge23221~0^^970~350^^M 970 350 h 20~#880000^^0~992~353~0~2~start~~~#0000FF^^1~980~349~0~2~end~~~#0000FF^^0~987~350^^0~M 990 353 L 993 350 L 990 347#@$R~980~330~~~20~30~#000000~1~0~none~gge23228~0~#@$R~985~335~~~10~10~#000000~1~0~none~gge23229~0~#@$R~985~345~~~10~10~#000000~1~0~none~gge23230~0~\",\"W~910 350 970 350~#008800~1~0~none~gge23243~0\",\"W~970 340 970 310 740 310 740 310~#008800~1~0~none~gge23244~0\",\"W~910 360 940 360~#008800~1~0~none~gge23248~0\",\"F~part_netLabel_gnD~940~360~0~gge23255~~0^^940~360^^GND~#000000~927~386~0~start~1~Times New Roman~9pt~flag_gge57^^PL~940 370 940 360~#000000~1~0~transparent~gge23259~0^^PL~931 370 949 370~#000000~1~0~transparent~gge23260~0^^PL~934 372 946 372~#000000~1~0~transparent~gge23261~0^^PL~937 374 943 374~#000000~1~0~transparent~gge23262~0^^PL~939 376 941 376~#000000~1~0~transparent~gge23263~0\",\"LIB~890~360~package`PHOENIX-2PIN-5.08MM`BOM_Manufacturer`Phoenix Contact`BOM_Manufacturer Part`1715721`BOM_Supplier`RS-Online`BOM_Supplier Part`193-0564`link`https://fr.rs-online.com/web/p/borniers-pour-circuits-imprimes/1930564/?relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D626572266C753D656E266D6D3D6D61746368616C6C26706D3D5E2828282872737C5253295B205D3F293F285C647B337D5B5C2D5C735D3F5C647B332C347D5B705061415D3F29297C283235285C647B387D7C5C647B317D5C2D5C647B377D2929292426706F3D3126736E3D592673723D2673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3139332D30353634267374613D3139333035363426&searchHistory=%7B%22enabled%22%3Atrue%7D`Contributor`Steins7`spicePre`P`~180~0~gge23264~cee0def10c584f32ac2d8c27339b6535~8ca42a94833d474aba3da2f7d34b6375~0~1593fc5a36bf2a31~~#@$T~N~881.75~337~0~#000080~Arial~5.5pt~~~~comment~Phoenix-2pin-5.08mm~1~start~gge23266~0~pinpart#@$T~P~881.75~327.5~0~#000080~Arial~~~~~comment~5V_IN~1~start~gge23268~0~pinpart#@$P~show~0~1~910~360~0~gge23270~0^^910~360^^M 910 360 h -20~#880000^^0~888~363~0~1~end~~~#0000FF^^1~900~359~0~1~start~~~#0000FF^^0~893~360^^0~M 890 357 L 887 360 L 890 363#@$P~show~0~2~910~350~0~gge23277~0^^910~350^^M 910 350 h -20~#880000^^0~888~353~0~2~end~~~#0000FF^^1~900~349~0~2~start~~~#0000FF^^0~893~350^^0~M 890 347 L 887 350 L 890 353#@$R~880~340~~~20~30~#000000~1~0~none~gge23284~0~#@$R~885~355~~~10~10~#000000~1~0~none~gge23285~0~#@$R~885~345~~~10~10~#000000~1~0~none~gge23286~0~\",\"F~part_netLabel_+5V~940~420~0~gge23288~~0^^940~420^^+5V~#000000~930~408~0~start~1~Times New Roman~9pt~flag_gge58^^PL~940 410 940 420~#000000~1~0~transparent~gge23292~0^^PL~935 410 945 410~#000000~1~0~transparent~gge23293~0\",\"W~940 420 970 420~#008800~1~0~none~gge23300~0\",\"O~970~430~gge23301~M 966 426 L 974 434 M 974 426 L 966 434~#33cc33~0\",\"LIB~740~350~package`AXIAL-0.3`nameAlias`Value(Ω)`BOM_Manufacturer Part``spicePre`R`spiceSymbolName`Res_AXIAL-0.3(1/8W)_EU`~270~0~gge23306~b9efc06d0fb742f99a478d48de211eb9~5ba509f895244278a1309c0031b47188~0~dc7cef580a888d2f~~#@$T~N~747~362.56~0~#000080~Arial~~~~~comment~10k~1~start~gge23308~0~pinpart#@$T~P~747~353.33~0~#000080~Arial~~~~~comment~RC~1~start~gge23310~0~pinpart#@$R~735~340~~~10~20~#A00000~1~0~none~gge23312~0~#@$P~show~0~2~740~370~270~gge23313~0^^740~370^^M 740 360 v 10~#800^^0~740~356~270~2~start~~~#800^^0~736~364~270~2~end~~~#800^^0~740~383^^0~M 743 380 L 740 377 L 737 380#@$P~show~0~1~740~330~90~gge23320~0^^740~330^^M 740 340 v -10~#800^^0~740~344~270~1~end~~~#800^^0~736~336~270~1~start~~~#800^^0~740~317^^0~M 737 320 L 740 323 L 743 320\",\"W~740 410 740 370~#008800~1~0~none~gge23329~0\",\"W~740 330 740 310 740 300 710 300~#008800~1~0~none~gge23330~0\",\"LIB~530~380~package`PHOENIX-2PIN-5.08MM`BOM_Manufacturer`Phoenix Contact`BOM_Manufacturer Part`1715721`BOM_Supplier`RS-Online`BOM_Supplier Part`193-0564`link`https://fr.rs-online.com/web/p/borniers-pour-circuits-imprimes/1930564/?relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D626572266C753D656E266D6D3D6D61746368616C6C26706D3D5E2828282872737C5253295B205D3F293F285C647B337D5B5C2D5C735D3F5C647B332C347D5B705061415D3F29297C283235285C647B387D7C5C647B317D5C2D5C647B377D2929292426706F3D3126736E3D592673723D2673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3139332D30353634267374613D3139333035363426&searchHistory=%7B%22enabled%22%3Atrue%7D`Contributor`Steins7`spicePre`P`~180~0~gge23335~cee0def10c584f32ac2d8c27339b6535~8ca42a94833d474aba3da2f7d34b6375~0~9bf2477abcec9738~~#@$T~N~460~368.46~0~#000080~Arial~5.5pt~~~~comment~Phoenix-2pin-5.08mm~1~start~gge23337~0~pinpart#@$T~P~520~413~0~#000080~Arial~~~~~comment~FAN1~1~start~gge23339~0~pinpart#@$P~show~0~1~550~380~0~gge23341~0^^550~380^^M 550 380 h -20~#880000^^0~528~383~0~1~end~~~#0000FF^^1~540~379~0~1~start~~~#0000FF^^0~533~380^^0~M 530 383 L 527 380 L 530 377#@$P~show~0~2~550~390~0~gge23348~0^^550~390^^M 550 390 h -20~#880000^^0~528~393~0~2~end~~~#0000FF^^1~540~389~0~2~start~~~#0000FF^^0~533~390^^0~M 530 393 L 527 390 L 530 387#@$R~520~370~~~20~30~#000000~1~0~none~gge23355~0~#@$R~525~375~~~10~10~#000000~1~0~none~gge23356~0~#@$R~525~385~~~10~10~#000000~1~0~none~gge23357~0~\",\"LIB~860~150~package`AXIAL-0.3`nameAlias`Value(Ω)`BOM_Manufacturer Part``spicePre`R`spiceSymbolName`Res_AXIAL-0.3(1/8W)_EU`~270~0~gge23386~b9efc06d0fb742f99a478d48de211eb9~5ba509f895244278a1309c0031b47188~0~86ef0676550a2e7e~yes~yes#@$T~N~867~162.56~0~#000080~Arial~~~~~comment~10k~1~start~gge23388~0~pinpart#@$T~P~867~153.33~0~#000080~Arial~~~~~comment~RE_B~1~start~gge23390~0~pinpart#@$R~855~140~~~10~20~#A00000~1~0~none~gge23392~0~#@$P~show~0~2~860~170~270~gge23393~0^^860~170^^M 860 160 v 10~#800^^0~860~156~270~2~start~~~#800^^0~856~164~270~2~end~~~#800^^0~860~183^^0~M 863 180 L 860 177 L 857 180#@$P~show~0~1~860~130~90~gge23400~0^^860~130^^M 860 140 v -10~#800^^0~860~144~270~1~end~~~#800^^0~856~136~270~1~start~~~#800^^0~860~117^^0~M 857 120 L 860 123 L 863 120\",\"LIB~820~140~package`AXIAL-0.3`nameAlias`Value(Ω)`BOM_Manufacturer Part``spicePre`R`spiceSymbolName`Res_AXIAL-0.3(1/8W)_EU`~270~0~gge23409~b9efc06d0fb742f99a478d48de211eb9~5ba509f895244278a1309c0031b47188~0~a37e8ce20a012485~yes~yes#@$T~N~827~152.56~0~#000080~Arial~~~~~comment~10k~1~start~gge23411~0~pinpart#@$T~P~827~143.33~0~#000080~Arial~~~~~comment~RC_A~1~start~gge23413~0~pinpart#@$R~815~130~~~10~20~#A00000~1~0~none~gge23415~0~#@$P~show~0~2~820~160~270~gge23416~0^^820~160^^M 820 150 v 10~#800^^0~820~146~270~2~start~~~#800^^0~816~154~270~2~end~~~#800^^0~820~173^^0~M 823 170 L 820 167 L 817 170#@$P~show~0~1~820~120~90~gge23423~0^^820~120^^M 820 130 v -10~#800^^0~820~134~270~1~end~~~#800^^0~816~126~270~1~start~~~#800^^0~820~107^^0~M 817 110 L 820 113 L 823 110\",\"F~part_netLabel_+5V~840~110~0~gge23436~~0^^840~110^^+5V~#000000~830~98~0~start~1~Times New Roman~9pt~flag_gge59^^PL~840 100 840 110~#000000~1~0~none~gge23440~0^^PL~835 100 845 100~#000000~1~0~transparent~gge23441~0\",\"W~860 130 860 110 840 110 820 110 820 120~#008800~1~0~none~gge23448~0\",\"W~235 120 270 120 270 160 330 160~#008800~1~0~none~gge23571~0\",\"LIB~150~190~package`TO-92`BOM_Supplier`LCSC`BOM_Manufacturer`FAIRCHILD`BOM_Manufacturer Part`BS170`BOM_Supplier Part`C111691`spicePre`Q`spiceSymbolName`BS170`~~0~gge25338~6071b6b5f7d04c43b9eeb79578969dae~d081b19e226f4d548eaa76ca7634865b~0~a73cc99978d99a40~yes~yes#@$T~N~175~202.53~0~#000080~Arial~~~~~comment~BS170~1~start~gge25339~0~pinpart#@$T~P~175~193.16~0~#000080~Arial~~~~~comment~Q1~1~start~gge25341~0~pinpart#@$PG~150 190 156 192 156 188~#880000~1~0~#880000~gge25343~0#@$PG~170 187 167 192 173 192~#880000~1~0~#880000~gge25344~0#@$PL~160 200 170 200 170 192~#880000~1~0~none~gge25345~0#@$PL~160 183 160 180 170 180 170 187~#880000~1~0~none~gge25346~0#@$PL~160 183 150 183~#880000~1~0~none~gge25347~0#@$PL~150 190 160 190 160 200~#880000~1~0~none~gge25348~0#@$PL~160 197 150 197~#880000~1~0~none~gge25349~0#@$PL~148 181 148 199~#880000~1~0~none~gge25350~0#@$PL~150 185 150 181~#880000~1~0~none~gge25351~0#@$PL~150 192 150 188~#880000~1~0~none~gge25352~0#@$PL~150 199 150 195~#880000~1~0~none~gge25353~0#@$PL~140 190 148 190~#880000~1~0~none~gge25354~0#@$PL~167 187 168 187 172 187 173 187~#880000~1~0~none~gge25355~0#@$P~show~0~1~160~170~90~gge25356~0^^160~170^^M 160 170 v 10~#880000^^0~163~183~270~D~end~~~#0000FF^^0~159~179~270~1~start~~~#0000FF^^0~160~177^^0~M 157 180 L 160 183 L 163 180#@$P~show~0~2~130~190~180~gge25363~0^^130~190^^M 130 190 h 10~#880000^^0~143~193~0~G~start~~~#0000FF^^0~139~189~0~2~end~~~#0000FF^^0~137~190^^0~M 140 193 L 143 190 L 140 187#@$P~show~0~3~160~210~270~gge25370~0^^160~210^^M 160 210 v -10~#880000^^0~163~197~270~S~start~~~#0000FF^^0~159~201~270~3~end~~~#0000FF^^0~160~203^^0~M 163 200 L 160 197 L 157 200\",\"LIB~160~250~package`AXIAL-0.3`nameAlias`Value(Ω)`BOM_Manufacturer Part``spicePre`R`spiceSymbolName`Res_AXIAL-0.3(1/8W)_EU`~270~0~gge25419~b9efc06d0fb742f99a478d48de211eb9~5ba509f895244278a1309c0031b47188~0~e2249db0f2948866~yes~yes#@$T~N~153~262.56~0~#000080~Arial~~~~~comment~10k~1~end~gge25421~0~pinpart#@$T~P~153~253.33~0~#000080~Arial~~~~~comment~R_BACK~1~end~gge25423~0~pinpart#@$R~155~240~~~10~20~#A00000~1~0~none~gge25425~0~#@$P~show~0~2~160~270~270~gge25426~0^^160~270^^M 160 260 v 10~#800^^0~160~256~270~2~start~~~#800^^0~156~264~270~2~end~~~#800^^0~160~283^^0~M 157 280 L 160 277 L 163 280#@$P~show~0~1~160~230~90~gge25433~0^^160~230^^M 160 240 v -10~#800^^0~160~244~270~1~end~~~#800^^0~156~236~270~1~start~~~#800^^0~160~217^^0~M 163 220 L 160 223 L 157 220\",\"W~160 210 160 230~#008800~1~0~none~gge25440~0\",\"W~220 140 220 150~#008800~1~0~none~gge25450~0\",\"W~330 220 160 220~#008800~1~0~none~gge25452~0\",\"F~part_netLabel_gnD~160~270~0~gge25454~~0^^160~270^^GND~#000000~147~296~0~start~1~Times New Roman~9pt~flag_gge60^^PL~160 280 160 270~#000000~1~0~transparent~gge25458~0^^PL~151 280 169 280~#000000~1~0~transparent~gge25459~0^^PL~154 282 166 282~#000000~1~0~transparent~gge25460~0^^PL~157 284 163 284~#000000~1~0~transparent~gge25461~0^^PL~159 286 161 286~#000000~1~0~transparent~gge25462~0\",\"F~part_netLabel_+5V~160~170~0~gge25472~~0^^160~170^^+5V~#000000~150~158~0~start~1~Times New Roman~9pt~flag_gge61^^PL~160 160 160 170~#000000~1~0~none~gge25476~0^^PL~155 160 165 160~#000000~1~0~transparent~gge25477~0\",\"F~part_netLabel_netPort~720~140~180~gge25484~~0^^720~140^^BACK~#0000FF~766.84~142.68~0~end~1~Times New Roman~8pt~flag_gge62^^PL~720 140 725 135 740 135 740 145 725 145 720 140~#0000FF~1~0~transparent~gge25488~0\",\"W~710 140 720 140~#008800~1~0~none~gge25494~0\",\"F~part_netLabel_netPort~130~190~0~gge25495~~0^^130~190^^BACK~#0000FF~107.84~193.73~0~end~1~Times New Roman~8pt~flag_gge63^^PL~130 190 125 195 110 195 110 185 125 185 130 190~#0000FF~1~0~transparent~gge25499~0\",\"LIB~220~120~package`VISHAY_T73YE`BOM_Manufacturer`Vishay`BOM_Manufacturer Part`T73YE103KT20`BOM_Supplier`RS-Online`BOM_Supplier Part`850-9643`link`https://fr.rs-online.com/web/p/trimmers/8509643/`Contributor`ENIgma Robotics`spicePre`U`spiceSymbolName`Vishay-T73YE`~270~0~gge25557~b3a12e2b4b8f4dd78135d16beb90ae09~f1c4cecf677a48c6adecbaa66413530a~0~80443c68dbd62656~yes~yes#@$T~N~141.29~128.16~0~#000080~Arial~~~~~comment~Vishay-T73YE~1~start~gge25558~0~pinpart#@$T~P~144.38~118.16~0~#000080~Arial~~~~~comment~T_CONT~1~start~gge25560~0~pinpart#@$R~215~110~~~10~20~#000000~1~0~none~gge25562~0~#@$P~show~0~1~220~140~270~gge25563~0^^220~140^^M 220 140 v -10~#880000^^0~223~128~270~1~start~~~#0000FF^^1~219~130~270~1~end~~~#0000FF^^0~220~133^^0~M 223 130 L 220 127 L 217 130#@$P~show~0~3~220~100~90~gge25570~0^^220~100^^M 220 100 v 10~#880000^^0~223~112~270~3~end~~~#0000FF^^1~219~110~270~3~start~~~#0000FF^^0~220~107^^0~M 217 110 L 220 113 L 223 110#@$P~show~0~2~240~120~0~gge25577~0^^240~120^^M 240 120 h -15~#880000^^0~223~123~0~2~end~~~#0000FF^^1~233~119~0~2~start~~~#0000FF^^0~228~120^^0~M 225 117 L 222 120 L 225 123#@$PL~225 120 229 122 229 118 225 120~#880000~1~0~none~gge25584~0\",\"J~240~120~2.5~#CC0000~gge25586~0\",\"J~160~220~2.5~#CC0000~gge25453~0\",\"J~950~220~2.5~#CC0000~gge20353~0\",\"J~470~650~2.5~#CC0000~gge20102~0\",\"J~260~440~2.5~#CC0000~gge19949~0\",\"J~200~440~2.5~#CC0000~gge19933~0\",\"J~230~380~2.5~#CC0000~gge19902~0\",\"J~590~300~2.5~#CC0000~gge17651~0\",\"J~230~500~2.5~#CC0000~gge19918~0\",\"J~230~710~2.5~#CC0000~gge19956~0\",\"J~230~590~2.5~#CC0000~gge19959~0\",\"J~200~650~2.5~#CC0000~gge19962~0\",\"J~260~650~2.5~#CC0000~gge19965~0\",\"J~510~710~2.5~#CC0000~gge20237~0\",\"J~510~590~2.5~#CC0000~gge20238~0\",\"J~550~650~2.5~#CC0000~gge20241~0\",\"J~740~310~2.5~#CC0000~gge23305~0\",\"J~820~160~2.5~#CC0000~gge23434~0\",\"J~860~170~2.5~#CC0000~gge23435~0\",\"J~840~110~2.5~#CC0000~gge23450~0\",\"J~220~150~2.5~#CC0000~gge25451~0\",\"LIB~750~430~package`OMRON G3MC-201PL DC5`BOM_Manufacturer`Omron`BOM_Manufacturer Part`G3MC-201PL DC5`BOM_Supplier`RS-Online`BOM_Supplier Part`807-4649`link`https://fr.rs-online.com/web/p/relais-statiques/8074649/?relevancy-data=636F3D3126696E3D4931384E525353746F636B4E756D626572266C753D656E266D6D3D6D61746368616C6C26706D3D5E2828282872737C5253295B205D3F293F285C647B337D5B5C2D5C735D3F5C647B332C347D5B705061415D3F29297C283235285C647B387D7C5C647B317D5C2D5C647B377D2929292426706F3D3126736E3D592673723D2673743D52535F53544F434B5F4E554D4245522677633D4E4F4E45267573743D3830372D34363439267374613D3830373436343926&searchHistory=%7B%22enabled%22%3Atrue%7D`Contributor`Steins7`spicePre`R`spiceSymbolName`Omron G3MC-201PL DC5`~270~0~gge25658~cd3abf10edb044229bff6476e7bd84bf~8b450d8a1d4742cf9dd162f894b29f69~0~b5b0bfa718994d30~yes~yes#@$T~N~680~457~0~#000080~Arial~5.5pt~~~~comment~Omron G3MC-201PL DC5~1~start~gge16570~0~pinpart#@$T~P~765~439~0~#000080~Arial~~~~~comment~RE~1~start~gge16572~0~pinpart#@$R~690~420~~~70~30~#000000~1~0~none~gge25659~0~#@$PL~700 430 705 430 715 435~#990000~1~0~none~gge25660~0#@$PL~720 430 715 430~#990000~1~0~none~gge25661~0#@$PL~745 435 745 440~#990000~1~0~none~gge25662~0#@$PL~745 445 740 445~#990000~1~0~none~gge25663~0#@$PL~735 445 730 445~#990000~1~0~none~gge25664~0#@$PL~725 445 720 445~#990000~1~0~none~gge25665~0#@$PL~715 445 710 445~#990000~1~0~none~gge25666~0#@$PL~710 440 710 435~#990000~1~0~none~gge25667~0#@$P~show~0~5~700~410~90~gge25668~0^^700~410^^M 700 410 v 20~#880000^^1~698~397~270~Load1~end~~5.5pt~#0000FF^^1~699~430~270~1~start~~5.5pt~#0000FF^^0~700~427^^0~M 697 430 L 700 433 L 703 430#@$P~show~0~6~720~410~90~gge25675~0^^720~410^^M 720 410 v 20~#880000^^1~718~397~270~Load2~end~~5.5pt~#0000FF^^1~719~430~270~2~start~~5.5pt~#0000FF^^0~720~427^^0~M 717 430 L 720 433 L 723 430#@$P~show~0~7~740~410~90~gge25682~0^^740~410^^M 740 410 v 20~#880000^^1~738~412~270~+~end~~5.5pt~#0000FF^^1~739~430~270~3~start~~5.5pt~#0000FF^^0~740~427^^0~M 737 430 L 740 433 L 743 430#@$P~show~0~8~750~410~90~gge25689~0^^750~410^^M 750 410 v 20~#880000^^1~748~412~270~-~end~~5.5pt~#0000FF^^1~749~430~270~4~start~~5.5pt~#0000FF^^0~750~427^^0~M 747 430 L 750 433 L 753 430\"],\"BBox\":{\"x\":0,\"y\":-0.5,\"width\":1149,\"height\":808},\"colors\":{}}" + } + ] +} \ No newline at end of file diff --git a/docs/Graphs.ods b/docs/Graphs.ods new file mode 100644 index 0000000..a2f8294 Binary files /dev/null and b/docs/Graphs.ods differ diff --git a/docs/encoder_accel.py b/docs/encoder_accel.py new file mode 100644 index 0000000..180dc1d --- /dev/null +++ b/docs/encoder_accel.py @@ -0,0 +1,15 @@ +import matplotlib.pyplot as plt +import numpy as np +import seaborn as sns + +sns.set_theme(style="whitegrid") + +a = 0.85 +b = 0.2 + +x = np.arange(-5, 6) +y = np.copysign(a*abs(x) * 10**(b*abs(x)) * 0.1, x) + +sns.lineplot(x=x, y=y, palette="tab10", linewidth=2.5) +plt.show() + diff --git a/include/cmsis/arm_math.h b/include/cmsis/arm_math.h deleted file mode 100644 index f867d49..0000000 --- a/include/cmsis/arm_math.h +++ /dev/null @@ -1,7190 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_math.h - * Description: Public header file for CMSIS DSP Library - * - * $Date: 27. January 2017 - * $Revision: V.1.5.1 - * - * Target Processor: Cortex-M cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2017 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -/** - \mainpage CMSIS DSP Software Library - * - * Introduction - * ------------ - * - * This user manual describes the CMSIS DSP software library, - * a suite of common signal processing functions for use on Cortex-M processor based devices. - * - * The library is divided into a number of functions each covering a specific category: - * - Basic math functions - * - Fast math functions - * - Complex math functions - * - Filters - * - Matrix functions - * - Transforms - * - Motor control functions - * - Statistical functions - * - Support functions - * - Interpolation functions - * - * The library has separate functions for operating on 8-bit integers, 16-bit integers, - * 32-bit integer and 32-bit floating-point values. - * - * Using the Library - * ------------ - * - * The library installer contains prebuilt versions of the libraries in the Lib folder. - * - arm_cortexM7lfdp_math.lib (Cortex-M7, Little endian, Double Precision Floating Point Unit) - * - arm_cortexM7bfdp_math.lib (Cortex-M7, Big endian, Double Precision Floating Point Unit) - * - arm_cortexM7lfsp_math.lib (Cortex-M7, Little endian, Single Precision Floating Point Unit) - * - arm_cortexM7bfsp_math.lib (Cortex-M7, Big endian and Single Precision Floating Point Unit on) - * - arm_cortexM7l_math.lib (Cortex-M7, Little endian) - * - arm_cortexM7b_math.lib (Cortex-M7, Big endian) - * - arm_cortexM4lf_math.lib (Cortex-M4, Little endian, Floating Point Unit) - * - arm_cortexM4bf_math.lib (Cortex-M4, Big endian, Floating Point Unit) - * - arm_cortexM4l_math.lib (Cortex-M4, Little endian) - * - arm_cortexM4b_math.lib (Cortex-M4, Big endian) - * - arm_cortexM3l_math.lib (Cortex-M3, Little endian) - * - arm_cortexM3b_math.lib (Cortex-M3, Big endian) - * - arm_cortexM0l_math.lib (Cortex-M0 / Cortex-M0+, Little endian) - * - arm_cortexM0b_math.lib (Cortex-M0 / Cortex-M0+, Big endian) - * - arm_ARMv8MBLl_math.lib (ARMv8M Baseline, Little endian) - * - arm_ARMv8MMLl_math.lib (ARMv8M Mainline, Little endian) - * - arm_ARMv8MMLlfsp_math.lib (ARMv8M Mainline, Little endian, Single Precision Floating Point Unit) - * - arm_ARMv8MMLld_math.lib (ARMv8M Mainline, Little endian, DSP instructions) - * - arm_ARMv8MMLldfsp_math.lib (ARMv8M Mainline, Little endian, DSP instructions, Single Precision Floating Point Unit) - * - * The library functions are declared in the public file arm_math.h which is placed in the Include folder. - * Simply include this file and link the appropriate library in the application and begin calling the library functions. The Library supports single - * public header file arm_math.h for Cortex-M cores with little endian and big endian. Same header file will be used for floating point unit(FPU) variants. - * Define the appropriate pre processor MACRO ARM_MATH_CM7 or ARM_MATH_CM4 or ARM_MATH_CM3 or - * ARM_MATH_CM0 or ARM_MATH_CM0PLUS depending on the target processor in the application. - * For ARMv8M cores define pre processor MACRO ARM_MATH_ARMV8MBL or ARM_MATH_ARMV8MML. - * Set Pre processor MACRO __DSP_PRESENT if ARMv8M Mainline core supports DSP instructions. - * - * - * Examples - * -------- - * - * The library ships with a number of examples which demonstrate how to use the library functions. - * - * Toolchain Support - * ------------ - * - * The library has been developed and tested with MDK-ARM version 5.14.0.0 - * The library is being tested in GCC and IAR toolchains and updates on this activity will be made available shortly. - * - * Building the Library - * ------------ - * - * The library installer contains a project file to re build libraries on MDK-ARM Tool chain in the CMSIS\\DSP_Lib\\Source\\ARM folder. - * - arm_cortexM_math.uvprojx - * - * - * The libraries can be built by opening the arm_cortexM_math.uvprojx project in MDK-ARM, selecting a specific target, and defining the optional pre processor MACROs detailed above. - * - * Pre-processor Macros - * ------------ - * - * Each library project have differant pre-processor macros. - * - * - UNALIGNED_SUPPORT_DISABLE: - * - * Define macro UNALIGNED_SUPPORT_DISABLE, If the silicon does not support unaligned memory access - * - * - ARM_MATH_BIG_ENDIAN: - * - * Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets. - * - * - ARM_MATH_MATRIX_CHECK: - * - * Define macro ARM_MATH_MATRIX_CHECK for checking on the input and output sizes of matrices - * - * - ARM_MATH_ROUNDING: - * - * Define macro ARM_MATH_ROUNDING for rounding on support functions - * - * - ARM_MATH_CMx: - * - * Define macro ARM_MATH_CM4 for building the library on Cortex-M4 target, ARM_MATH_CM3 for building library on Cortex-M3 target - * and ARM_MATH_CM0 for building library on Cortex-M0 target, ARM_MATH_CM0PLUS for building library on Cortex-M0+ target, and - * ARM_MATH_CM7 for building the library on cortex-M7. - * - * - ARM_MATH_ARMV8MxL: - * - * Define macro ARM_MATH_ARMV8MBL for building the library on ARMv8M Baseline target, ARM_MATH_ARMV8MBL for building library - * on ARMv8M Mainline target. - * - * - __FPU_PRESENT: - * - * Initialize macro __FPU_PRESENT = 1 when building on FPU supported Targets. Enable this macro for floating point libraries. - * - * - __DSP_PRESENT: - * - * Initialize macro __DSP_PRESENT = 1 when ARMv8M Mainline core supports DSP instructions. - * - *
- * CMSIS-DSP in ARM::CMSIS Pack - * ----------------------------- - * - * The following files relevant to CMSIS-DSP are present in the ARM::CMSIS Pack directories: - * |File/Folder |Content | - * |------------------------------|------------------------------------------------------------------------| - * |\b CMSIS\\Documentation\\DSP | This documentation | - * |\b CMSIS\\DSP_Lib | Software license agreement (license.txt) | - * |\b CMSIS\\DSP_Lib\\Examples | Example projects demonstrating the usage of the library functions | - * |\b CMSIS\\DSP_Lib\\Source | Source files for rebuilding the library | - * - *
- * Revision History of CMSIS-DSP - * ------------ - * Please refer to \ref ChangeLog_pg. - * - * Copyright Notice - * ------------ - * - * Copyright (C) 2010-2015 ARM Limited. All rights reserved. - */ - - -/** - * @defgroup groupMath Basic Math Functions - */ - -/** - * @defgroup groupFastMath Fast Math Functions - * This set of functions provides a fast approximation to sine, cosine, and square root. - * As compared to most of the other functions in the CMSIS math library, the fast math functions - * operate on individual values and not arrays. - * There are separate functions for Q15, Q31, and floating-point data. - * - */ - -/** - * @defgroup groupCmplxMath Complex Math Functions - * This set of functions operates on complex data vectors. - * The data in the complex arrays is stored in an interleaved fashion - * (real, imag, real, imag, ...). - * In the API functions, the number of samples in a complex array refers - * to the number of complex values; the array contains twice this number of - * real values. - */ - -/** - * @defgroup groupFilters Filtering Functions - */ - -/** - * @defgroup groupMatrix Matrix Functions - * - * This set of functions provides basic matrix math operations. - * The functions operate on matrix data structures. For example, - * the type - * definition for the floating-point matrix structure is shown - * below: - *
- *     typedef struct
- *     {
- *       uint16_t numRows;     // number of rows of the matrix.
- *       uint16_t numCols;     // number of columns of the matrix.
- *       float32_t *pData;     // points to the data of the matrix.
- *     } arm_matrix_instance_f32;
- * 
- * There are similar definitions for Q15 and Q31 data types. - * - * The structure specifies the size of the matrix and then points to - * an array of data. The array is of size numRows X numCols - * and the values are arranged in row order. That is, the - * matrix element (i, j) is stored at: - *
- *     pData[i*numCols + j]
- * 
- * - * \par Init Functions - * There is an associated initialization function for each type of matrix - * data structure. - * The initialization function sets the values of the internal structure fields. - * Refer to the function arm_mat_init_f32(), arm_mat_init_q31() - * and arm_mat_init_q15() for floating-point, Q31 and Q15 types, respectively. - * - * \par - * Use of the initialization function is optional. However, if initialization function is used - * then the instance structure cannot be placed into a const data section. - * To place the instance structure in a const data - * section, manually initialize the data structure. For example: - *
- * arm_matrix_instance_f32 S = {nRows, nColumns, pData};
- * arm_matrix_instance_q31 S = {nRows, nColumns, pData};
- * arm_matrix_instance_q15 S = {nRows, nColumns, pData};
- * 
- * where nRows specifies the number of rows, nColumns - * specifies the number of columns, and pData points to the - * data array. - * - * \par Size Checking - * By default all of the matrix functions perform size checking on the input and - * output matrices. For example, the matrix addition function verifies that the - * two input matrices and the output matrix all have the same number of rows and - * columns. If the size check fails the functions return: - *
- *     ARM_MATH_SIZE_MISMATCH
- * 
- * Otherwise the functions return - *
- *     ARM_MATH_SUCCESS
- * 
- * There is some overhead associated with this matrix size checking. - * The matrix size checking is enabled via the \#define - *
- *     ARM_MATH_MATRIX_CHECK
- * 
- * within the library project settings. By default this macro is defined - * and size checking is enabled. By changing the project settings and - * undefining this macro size checking is eliminated and the functions - * run a bit faster. With size checking disabled the functions always - * return ARM_MATH_SUCCESS. - */ - -/** - * @defgroup groupTransforms Transform Functions - */ - -/** - * @defgroup groupController Controller Functions - */ - -/** - * @defgroup groupStats Statistics Functions - */ -/** - * @defgroup groupSupport Support Functions - */ - -/** - * @defgroup groupInterpolation Interpolation Functions - * These functions perform 1- and 2-dimensional interpolation of data. - * Linear interpolation is used for 1-dimensional data and - * bilinear interpolation is used for 2-dimensional data. - */ - -/** - * @defgroup groupExamples Examples - */ -#ifndef _ARM_MATH_H -#define _ARM_MATH_H - -/* Compiler specific diagnostic adjustment */ -#if defined ( __CC_ARM ) - -#elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) - -#elif defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wsign-conversion" -#pragma GCC diagnostic ignored "-Wconversion" -#pragma GCC diagnostic ignored "-Wunused-parameter" - -#elif defined ( __ICCARM__ ) - -#elif defined ( __TI_ARM__ ) - -#elif defined ( __CSMC__ ) - -#elif defined ( __TASKING__ ) - -#else - #error Unknown compiler -#endif - - -#define __CMSIS_GENERIC /* disable NVIC and Systick functions */ - -#if defined(ARM_MATH_CM7) - #include "core_cm7.h" - #define ARM_MATH_DSP -#elif defined (ARM_MATH_CM4) - #include "core_cm4.h" - #define ARM_MATH_DSP -#elif defined (ARM_MATH_CM3) - #include "core_cm3.h" -#elif defined (ARM_MATH_CM0) - #include "core_cm0.h" - #define ARM_MATH_CM0_FAMILY -#elif defined (ARM_MATH_CM0PLUS) - #include "core_cm0plus.h" - #define ARM_MATH_CM0_FAMILY -#elif defined (ARM_MATH_ARMV8MBL) - #include "core_armv8mbl.h" - #define ARM_MATH_CM0_FAMILY -#elif defined (ARM_MATH_ARMV8MML) - #include "core_armv8mml.h" - #if (defined (__DSP_PRESENT) && (__DSP_PRESENT == 1)) - #define ARM_MATH_DSP - #endif -#else - #error "Define according the used Cortex core ARM_MATH_CM7, ARM_MATH_CM4, ARM_MATH_CM3, ARM_MATH_CM0PLUS, ARM_MATH_CM0, ARM_MATH_ARMV8MBL, ARM_MATH_ARMV8MML" -#endif - -#undef __CMSIS_GENERIC /* enable NVIC and Systick functions */ -#include "string.h" -#include "math.h" -#ifdef __cplusplus -extern "C" -{ -#endif - - - /** - * @brief Macros required for reciprocal calculation in Normalized LMS - */ - -#define DELTA_Q31 (0x100) -#define DELTA_Q15 0x5 -#define INDEX_MASK 0x0000003F -#ifndef PI - #define PI 3.14159265358979f -#endif - - /** - * @brief Macros required for SINE and COSINE Fast math approximations - */ - -#define FAST_MATH_TABLE_SIZE 512 -#define FAST_MATH_Q31_SHIFT (32 - 10) -#define FAST_MATH_Q15_SHIFT (16 - 10) -#define CONTROLLER_Q31_SHIFT (32 - 9) -#define TABLE_SPACING_Q31 0x400000 -#define TABLE_SPACING_Q15 0x80 - - /** - * @brief Macros required for SINE and COSINE Controller functions - */ - /* 1.31(q31) Fixed value of 2/360 */ - /* -1 to +1 is divided into 360 values so total spacing is (2/360) */ -#define INPUT_SPACING 0xB60B61 - - /** - * @brief Macro for Unaligned Support - */ -#ifndef UNALIGNED_SUPPORT_DISABLE - #define ALIGN4 -#else - #if defined (__GNUC__) - #define ALIGN4 __attribute__((aligned(4))) - #else - #define ALIGN4 __align(4) - #endif -#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */ - - /** - * @brief Error status returned by some functions in the library. - */ - - typedef enum - { - ARM_MATH_SUCCESS = 0, /**< No error */ - ARM_MATH_ARGUMENT_ERROR = -1, /**< One or more arguments are incorrect */ - ARM_MATH_LENGTH_ERROR = -2, /**< Length of data buffer is incorrect */ - ARM_MATH_SIZE_MISMATCH = -3, /**< Size of matrices is not compatible with the operation. */ - ARM_MATH_NANINF = -4, /**< Not-a-number (NaN) or infinity is generated */ - ARM_MATH_SINGULAR = -5, /**< Generated by matrix inversion if the input matrix is singular and cannot be inverted. */ - ARM_MATH_TEST_FAILURE = -6 /**< Test Failed */ - } arm_status; - - /** - * @brief 8-bit fractional data type in 1.7 format. - */ - typedef int8_t q7_t; - - /** - * @brief 16-bit fractional data type in 1.15 format. - */ - typedef int16_t q15_t; - - /** - * @brief 32-bit fractional data type in 1.31 format. - */ - typedef int32_t q31_t; - - /** - * @brief 64-bit fractional data type in 1.63 format. - */ - typedef int64_t q63_t; - - /** - * @brief 32-bit floating-point type definition. - */ - typedef float float32_t; - - /** - * @brief 64-bit floating-point type definition. - */ - typedef double float64_t; - - /** - * @brief definition to read/write two 16 bit values. - */ -#if defined ( __CC_ARM ) - #define __SIMD32_TYPE int32_t __packed - #define CMSIS_UNUSED __attribute__((unused)) - #define CMSIS_INLINE __attribute__((always_inline)) - -#elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) - #define __SIMD32_TYPE int32_t - #define CMSIS_UNUSED __attribute__((unused)) - #define CMSIS_INLINE __attribute__((always_inline)) - -#elif defined ( __GNUC__ ) - #define __SIMD32_TYPE int32_t - #define CMSIS_UNUSED __attribute__((unused)) - #define CMSIS_INLINE __attribute__((always_inline)) - -#elif defined ( __ICCARM__ ) - #define __SIMD32_TYPE int32_t __packed - #define CMSIS_UNUSED - #define CMSIS_INLINE - -#elif defined ( __TI_ARM__ ) - #define __SIMD32_TYPE int32_t - #define CMSIS_UNUSED __attribute__((unused)) - #define CMSIS_INLINE - -#elif defined ( __CSMC__ ) - #define __SIMD32_TYPE int32_t - #define CMSIS_UNUSED - #define CMSIS_INLINE - -#elif defined ( __TASKING__ ) - #define __SIMD32_TYPE __unaligned int32_t - #define CMSIS_UNUSED - #define CMSIS_INLINE - -#else - #error Unknown compiler -#endif - -#define __SIMD32(addr) (*(__SIMD32_TYPE **) & (addr)) -#define __SIMD32_CONST(addr) ((__SIMD32_TYPE *)(addr)) -#define _SIMD32_OFFSET(addr) (*(__SIMD32_TYPE *) (addr)) -#define __SIMD64(addr) (*(int64_t **) & (addr)) - -/* #if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) */ -#if !defined (ARM_MATH_DSP) - /** - * @brief definition to pack two 16 bit values. - */ -#define __PKHBT(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0x0000FFFF) | \ - (((int32_t)(ARG2) << ARG3) & (int32_t)0xFFFF0000) ) -#define __PKHTB(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0xFFFF0000) | \ - (((int32_t)(ARG2) >> ARG3) & (int32_t)0x0000FFFF) ) - -/* #endif // defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) */ -#endif /* !defined (ARM_MATH_DSP) */ - - /** - * @brief definition to pack four 8 bit values. - */ -#ifndef ARM_MATH_BIG_ENDIAN - -#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v0) << 0) & (int32_t)0x000000FF) | \ - (((int32_t)(v1) << 8) & (int32_t)0x0000FF00) | \ - (((int32_t)(v2) << 16) & (int32_t)0x00FF0000) | \ - (((int32_t)(v3) << 24) & (int32_t)0xFF000000) ) -#else - -#define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v3) << 0) & (int32_t)0x000000FF) | \ - (((int32_t)(v2) << 8) & (int32_t)0x0000FF00) | \ - (((int32_t)(v1) << 16) & (int32_t)0x00FF0000) | \ - (((int32_t)(v0) << 24) & (int32_t)0xFF000000) ) - -#endif - - - /** - * @brief Clips Q63 to Q31 values. - */ - CMSIS_INLINE __STATIC_INLINE q31_t clip_q63_to_q31( - q63_t x) - { - return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ? - ((0x7FFFFFFF ^ ((q31_t) (x >> 63)))) : (q31_t) x; - } - - /** - * @brief Clips Q63 to Q15 values. - */ - CMSIS_INLINE __STATIC_INLINE q15_t clip_q63_to_q15( - q63_t x) - { - return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ? - ((0x7FFF ^ ((q15_t) (x >> 63)))) : (q15_t) (x >> 15); - } - - /** - * @brief Clips Q31 to Q7 values. - */ - CMSIS_INLINE __STATIC_INLINE q7_t clip_q31_to_q7( - q31_t x) - { - return ((q31_t) (x >> 24) != ((q31_t) x >> 23)) ? - ((0x7F ^ ((q7_t) (x >> 31)))) : (q7_t) x; - } - - /** - * @brief Clips Q31 to Q15 values. - */ - CMSIS_INLINE __STATIC_INLINE q15_t clip_q31_to_q15( - q31_t x) - { - return ((q31_t) (x >> 16) != ((q31_t) x >> 15)) ? - ((0x7FFF ^ ((q15_t) (x >> 31)))) : (q15_t) x; - } - - /** - * @brief Multiplies 32 X 64 and returns 32 bit result in 2.30 format. - */ - - CMSIS_INLINE __STATIC_INLINE q63_t mult32x64( - q63_t x, - q31_t y) - { - return ((((q63_t) (x & 0x00000000FFFFFFFF) * y) >> 32) + - (((q63_t) (x >> 32) * y))); - } - - /** - * @brief Function to Calculates 1/in (reciprocal) value of Q31 Data type. - */ - - CMSIS_INLINE __STATIC_INLINE uint32_t arm_recip_q31( - q31_t in, - q31_t * dst, - q31_t * pRecipTable) - { - q31_t out; - uint32_t tempVal; - uint32_t index, i; - uint32_t signBits; - - if (in > 0) - { - signBits = ((uint32_t) (__CLZ( in) - 1)); - } - else - { - signBits = ((uint32_t) (__CLZ(-in) - 1)); - } - - /* Convert input sample to 1.31 format */ - in = (in << signBits); - - /* calculation of index for initial approximated Val */ - index = (uint32_t)(in >> 24); - index = (index & INDEX_MASK); - - /* 1.31 with exp 1 */ - out = pRecipTable[index]; - - /* calculation of reciprocal value */ - /* running approximation for two iterations */ - for (i = 0u; i < 2u; i++) - { - tempVal = (uint32_t) (((q63_t) in * out) >> 31); - tempVal = 0x7FFFFFFFu - tempVal; - /* 1.31 with exp 1 */ - /* out = (q31_t) (((q63_t) out * tempVal) >> 30); */ - out = clip_q63_to_q31(((q63_t) out * tempVal) >> 30); - } - - /* write output */ - *dst = out; - - /* return num of signbits of out = 1/in value */ - return (signBits + 1u); - } - - - /** - * @brief Function to Calculates 1/in (reciprocal) value of Q15 Data type. - */ - CMSIS_INLINE __STATIC_INLINE uint32_t arm_recip_q15( - q15_t in, - q15_t * dst, - q15_t * pRecipTable) - { - q15_t out = 0; - uint32_t tempVal = 0; - uint32_t index = 0, i = 0; - uint32_t signBits = 0; - - if (in > 0) - { - signBits = ((uint32_t)(__CLZ( in) - 17)); - } - else - { - signBits = ((uint32_t)(__CLZ(-in) - 17)); - } - - /* Convert input sample to 1.15 format */ - in = (in << signBits); - - /* calculation of index for initial approximated Val */ - index = (uint32_t)(in >> 8); - index = (index & INDEX_MASK); - - /* 1.15 with exp 1 */ - out = pRecipTable[index]; - - /* calculation of reciprocal value */ - /* running approximation for two iterations */ - for (i = 0u; i < 2u; i++) - { - tempVal = (uint32_t) (((q31_t) in * out) >> 15); - tempVal = 0x7FFFu - tempVal; - /* 1.15 with exp 1 */ - out = (q15_t) (((q31_t) out * tempVal) >> 14); - /* out = clip_q31_to_q15(((q31_t) out * tempVal) >> 14); */ - } - - /* write output */ - *dst = out; - - /* return num of signbits of out = 1/in value */ - return (signBits + 1); - } - - /* - * @brief C custom defined intrinsic function for M3 and M0 processors - */ -/* #if defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) */ -#if !defined (ARM_MATH_DSP) - - /* - * @brief C custom defined QADD8 for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __QADD8( - uint32_t x, - uint32_t y) - { - q31_t r, s, t, u; - - r = __SSAT(((((q31_t)x << 24) >> 24) + (((q31_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF; - s = __SSAT(((((q31_t)x << 16) >> 24) + (((q31_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF; - t = __SSAT(((((q31_t)x << 8) >> 24) + (((q31_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF; - u = __SSAT(((((q31_t)x ) >> 24) + (((q31_t)y ) >> 24)), 8) & (int32_t)0x000000FF; - - return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r ))); - } - - - /* - * @brief C custom defined QSUB8 for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __QSUB8( - uint32_t x, - uint32_t y) - { - q31_t r, s, t, u; - - r = __SSAT(((((q31_t)x << 24) >> 24) - (((q31_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF; - s = __SSAT(((((q31_t)x << 16) >> 24) - (((q31_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF; - t = __SSAT(((((q31_t)x << 8) >> 24) - (((q31_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF; - u = __SSAT(((((q31_t)x ) >> 24) - (((q31_t)y ) >> 24)), 8) & (int32_t)0x000000FF; - - return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r ))); - } - - - /* - * @brief C custom defined QADD16 for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __QADD16( - uint32_t x, - uint32_t y) - { -/* q31_t r, s; without initialisation 'arm_offset_q15 test' fails but 'intrinsic' tests pass! for armCC */ - q31_t r = 0, s = 0; - - r = __SSAT(((((q31_t)x << 16) >> 16) + (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; - s = __SSAT(((((q31_t)x ) >> 16) + (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r ))); - } - - - /* - * @brief C custom defined SHADD16 for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __SHADD16( - uint32_t x, - uint32_t y) - { - q31_t r, s; - - r = (((((q31_t)x << 16) >> 16) + (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; - s = (((((q31_t)x ) >> 16) + (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r ))); - } - - - /* - * @brief C custom defined QSUB16 for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __QSUB16( - uint32_t x, - uint32_t y) - { - q31_t r, s; - - r = __SSAT(((((q31_t)x << 16) >> 16) - (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; - s = __SSAT(((((q31_t)x ) >> 16) - (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r ))); - } - - - /* - * @brief C custom defined SHSUB16 for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __SHSUB16( - uint32_t x, - uint32_t y) - { - q31_t r, s; - - r = (((((q31_t)x << 16) >> 16) - (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; - s = (((((q31_t)x ) >> 16) - (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r ))); - } - - - /* - * @brief C custom defined QASX for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __QASX( - uint32_t x, - uint32_t y) - { - q31_t r, s; - - r = __SSAT(((((q31_t)x << 16) >> 16) - (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; - s = __SSAT(((((q31_t)x ) >> 16) + (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r ))); - } - - - /* - * @brief C custom defined SHASX for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __SHASX( - uint32_t x, - uint32_t y) - { - q31_t r, s; - - r = (((((q31_t)x << 16) >> 16) - (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; - s = (((((q31_t)x ) >> 16) + (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r ))); - } - - - /* - * @brief C custom defined QSAX for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __QSAX( - uint32_t x, - uint32_t y) - { - q31_t r, s; - - r = __SSAT(((((q31_t)x << 16) >> 16) + (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; - s = __SSAT(((((q31_t)x ) >> 16) - (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r ))); - } - - - /* - * @brief C custom defined SHSAX for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __SHSAX( - uint32_t x, - uint32_t y) - { - q31_t r, s; - - r = (((((q31_t)x << 16) >> 16) + (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; - s = (((((q31_t)x ) >> 16) - (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r ))); - } - - - /* - * @brief C custom defined SMUSDX for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __SMUSDX( - uint32_t x, - uint32_t y) - { - return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) - - ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) )); - } - - /* - * @brief C custom defined SMUADX for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __SMUADX( - uint32_t x, - uint32_t y) - { - return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) + - ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) )); - } - - - /* - * @brief C custom defined QADD for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE int32_t __QADD( - int32_t x, - int32_t y) - { - return ((int32_t)(clip_q63_to_q31((q63_t)x + (q31_t)y))); - } - - - /* - * @brief C custom defined QSUB for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE int32_t __QSUB( - int32_t x, - int32_t y) - { - return ((int32_t)(clip_q63_to_q31((q63_t)x - (q31_t)y))); - } - - - /* - * @brief C custom defined SMLAD for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __SMLAD( - uint32_t x, - uint32_t y, - uint32_t sum) - { - return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + - ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) + - ( ((q31_t)sum ) ) )); - } - - - /* - * @brief C custom defined SMLADX for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __SMLADX( - uint32_t x, - uint32_t y, - uint32_t sum) - { - return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) + - ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) + - ( ((q31_t)sum ) ) )); - } - - - /* - * @brief C custom defined SMLSDX for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __SMLSDX( - uint32_t x, - uint32_t y, - uint32_t sum) - { - return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) - - ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) + - ( ((q31_t)sum ) ) )); - } - - - /* - * @brief C custom defined SMLALD for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint64_t __SMLALD( - uint32_t x, - uint32_t y, - uint64_t sum) - { -/* return (sum + ((q15_t) (x >> 16) * (q15_t) (y >> 16)) + ((q15_t) x * (q15_t) y)); */ - return ((uint64_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + - ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) + - ( ((q63_t)sum ) ) )); - } - - - /* - * @brief C custom defined SMLALDX for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint64_t __SMLALDX( - uint32_t x, - uint32_t y, - uint64_t sum) - { -/* return (sum + ((q15_t) (x >> 16) * (q15_t) y)) + ((q15_t) x * (q15_t) (y >> 16)); */ - return ((uint64_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) + - ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) + - ( ((q63_t)sum ) ) )); - } - - - /* - * @brief C custom defined SMUAD for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __SMUAD( - uint32_t x, - uint32_t y) - { - return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + - ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) )); - } - - - /* - * @brief C custom defined SMUSD for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __SMUSD( - uint32_t x, - uint32_t y) - { - return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) - - ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) )); - } - - - /* - * @brief C custom defined SXTB16 for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __SXTB16( - uint32_t x) - { - return ((uint32_t)(((((q31_t)x << 24) >> 24) & (q31_t)0x0000FFFF) | - ((((q31_t)x << 8) >> 8) & (q31_t)0xFFFF0000) )); - } - - /* - * @brief C custom defined SMMLA for M3 and M0 processors - */ - CMSIS_INLINE __STATIC_INLINE int32_t __SMMLA( - int32_t x, - int32_t y, - int32_t sum) - { - return (sum + (int32_t) (((int64_t) x * y) >> 32)); - } - -#if 0 - /* - * @brief C custom defined PKHBT for unavailable DSP extension - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __PKHBT( - uint32_t x, - uint32_t y, - uint32_t leftshift) - { - return ( ((x ) & 0x0000FFFFUL) | - ((y << leftshift) & 0xFFFF0000UL) ); - } - - /* - * @brief C custom defined PKHTB for unavailable DSP extension - */ - CMSIS_INLINE __STATIC_INLINE uint32_t __PKHTB( - uint32_t x, - uint32_t y, - uint32_t rightshift) - { - return ( ((x ) & 0xFFFF0000UL) | - ((y >> rightshift) & 0x0000FFFFUL) ); - } -#endif - -/* #endif // defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) */ -#endif /* !defined (ARM_MATH_DSP) */ - - - /** - * @brief Instance structure for the Q7 FIR filter. - */ - typedef struct - { - uint16_t numTaps; /**< number of filter coefficients in the filter. */ - q7_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - } arm_fir_instance_q7; - - /** - * @brief Instance structure for the Q15 FIR filter. - */ - typedef struct - { - uint16_t numTaps; /**< number of filter coefficients in the filter. */ - q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - } arm_fir_instance_q15; - - /** - * @brief Instance structure for the Q31 FIR filter. - */ - typedef struct - { - uint16_t numTaps; /**< number of filter coefficients in the filter. */ - q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ - } arm_fir_instance_q31; - - /** - * @brief Instance structure for the floating-point FIR filter. - */ - typedef struct - { - uint16_t numTaps; /**< number of filter coefficients in the filter. */ - float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ - } arm_fir_instance_f32; - - - /** - * @brief Processing function for the Q7 FIR filter. - * @param[in] S points to an instance of the Q7 FIR filter structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_fir_q7( - const arm_fir_instance_q7 * S, - q7_t * pSrc, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the Q7 FIR filter. - * @param[in,out] S points to an instance of the Q7 FIR structure. - * @param[in] numTaps Number of filter coefficients in the filter. - * @param[in] pCoeffs points to the filter coefficients. - * @param[in] pState points to the state buffer. - * @param[in] blockSize number of samples that are processed. - */ - void arm_fir_init_q7( - arm_fir_instance_q7 * S, - uint16_t numTaps, - q7_t * pCoeffs, - q7_t * pState, - uint32_t blockSize); - - - /** - * @brief Processing function for the Q15 FIR filter. - * @param[in] S points to an instance of the Q15 FIR structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_fir_q15( - const arm_fir_instance_q15 * S, - q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Processing function for the fast Q15 FIR filter for Cortex-M3 and Cortex-M4. - * @param[in] S points to an instance of the Q15 FIR filter structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_fir_fast_q15( - const arm_fir_instance_q15 * S, - q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the Q15 FIR filter. - * @param[in,out] S points to an instance of the Q15 FIR filter structure. - * @param[in] numTaps Number of filter coefficients in the filter. Must be even and greater than or equal to 4. - * @param[in] pCoeffs points to the filter coefficients. - * @param[in] pState points to the state buffer. - * @param[in] blockSize number of samples that are processed at a time. - * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_ARGUMENT_ERROR if - * numTaps is not a supported value. - */ - arm_status arm_fir_init_q15( - arm_fir_instance_q15 * S, - uint16_t numTaps, - q15_t * pCoeffs, - q15_t * pState, - uint32_t blockSize); - - - /** - * @brief Processing function for the Q31 FIR filter. - * @param[in] S points to an instance of the Q31 FIR filter structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_fir_q31( - const arm_fir_instance_q31 * S, - q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Processing function for the fast Q31 FIR filter for Cortex-M3 and Cortex-M4. - * @param[in] S points to an instance of the Q31 FIR structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_fir_fast_q31( - const arm_fir_instance_q31 * S, - q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the Q31 FIR filter. - * @param[in,out] S points to an instance of the Q31 FIR structure. - * @param[in] numTaps Number of filter coefficients in the filter. - * @param[in] pCoeffs points to the filter coefficients. - * @param[in] pState points to the state buffer. - * @param[in] blockSize number of samples that are processed at a time. - */ - void arm_fir_init_q31( - arm_fir_instance_q31 * S, - uint16_t numTaps, - q31_t * pCoeffs, - q31_t * pState, - uint32_t blockSize); - - - /** - * @brief Processing function for the floating-point FIR filter. - * @param[in] S points to an instance of the floating-point FIR structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_fir_f32( - const arm_fir_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the floating-point FIR filter. - * @param[in,out] S points to an instance of the floating-point FIR filter structure. - * @param[in] numTaps Number of filter coefficients in the filter. - * @param[in] pCoeffs points to the filter coefficients. - * @param[in] pState points to the state buffer. - * @param[in] blockSize number of samples that are processed at a time. - */ - void arm_fir_init_f32( - arm_fir_instance_f32 * S, - uint16_t numTaps, - float32_t * pCoeffs, - float32_t * pState, - uint32_t blockSize); - - - /** - * @brief Instance structure for the Q15 Biquad cascade filter. - */ - typedef struct - { - int8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - q15_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ - q15_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ - int8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ - } arm_biquad_casd_df1_inst_q15; - - /** - * @brief Instance structure for the Q31 Biquad cascade filter. - */ - typedef struct - { - uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - q31_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ - q31_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ - uint8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ - } arm_biquad_casd_df1_inst_q31; - - /** - * @brief Instance structure for the floating-point Biquad cascade filter. - */ - typedef struct - { - uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - float32_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ - float32_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ - } arm_biquad_casd_df1_inst_f32; - - - /** - * @brief Processing function for the Q15 Biquad cascade filter. - * @param[in] S points to an instance of the Q15 Biquad cascade structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_biquad_cascade_df1_q15( - const arm_biquad_casd_df1_inst_q15 * S, - q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the Q15 Biquad cascade filter. - * @param[in,out] S points to an instance of the Q15 Biquad cascade structure. - * @param[in] numStages number of 2nd order stages in the filter. - * @param[in] pCoeffs points to the filter coefficients. - * @param[in] pState points to the state buffer. - * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format - */ - void arm_biquad_cascade_df1_init_q15( - arm_biquad_casd_df1_inst_q15 * S, - uint8_t numStages, - q15_t * pCoeffs, - q15_t * pState, - int8_t postShift); - - - /** - * @brief Fast but less precise processing function for the Q15 Biquad cascade filter for Cortex-M3 and Cortex-M4. - * @param[in] S points to an instance of the Q15 Biquad cascade structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_biquad_cascade_df1_fast_q15( - const arm_biquad_casd_df1_inst_q15 * S, - q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Processing function for the Q31 Biquad cascade filter - * @param[in] S points to an instance of the Q31 Biquad cascade structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_biquad_cascade_df1_q31( - const arm_biquad_casd_df1_inst_q31 * S, - q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Fast but less precise processing function for the Q31 Biquad cascade filter for Cortex-M3 and Cortex-M4. - * @param[in] S points to an instance of the Q31 Biquad cascade structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_biquad_cascade_df1_fast_q31( - const arm_biquad_casd_df1_inst_q31 * S, - q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the Q31 Biquad cascade filter. - * @param[in,out] S points to an instance of the Q31 Biquad cascade structure. - * @param[in] numStages number of 2nd order stages in the filter. - * @param[in] pCoeffs points to the filter coefficients. - * @param[in] pState points to the state buffer. - * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format - */ - void arm_biquad_cascade_df1_init_q31( - arm_biquad_casd_df1_inst_q31 * S, - uint8_t numStages, - q31_t * pCoeffs, - q31_t * pState, - int8_t postShift); - - - /** - * @brief Processing function for the floating-point Biquad cascade filter. - * @param[in] S points to an instance of the floating-point Biquad cascade structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_biquad_cascade_df1_f32( - const arm_biquad_casd_df1_inst_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the floating-point Biquad cascade filter. - * @param[in,out] S points to an instance of the floating-point Biquad cascade structure. - * @param[in] numStages number of 2nd order stages in the filter. - * @param[in] pCoeffs points to the filter coefficients. - * @param[in] pState points to the state buffer. - */ - void arm_biquad_cascade_df1_init_f32( - arm_biquad_casd_df1_inst_f32 * S, - uint8_t numStages, - float32_t * pCoeffs, - float32_t * pState); - - - /** - * @brief Instance structure for the floating-point matrix structure. - */ - typedef struct - { - uint16_t numRows; /**< number of rows of the matrix. */ - uint16_t numCols; /**< number of columns of the matrix. */ - float32_t *pData; /**< points to the data of the matrix. */ - } arm_matrix_instance_f32; - - - /** - * @brief Instance structure for the floating-point matrix structure. - */ - typedef struct - { - uint16_t numRows; /**< number of rows of the matrix. */ - uint16_t numCols; /**< number of columns of the matrix. */ - float64_t *pData; /**< points to the data of the matrix. */ - } arm_matrix_instance_f64; - - /** - * @brief Instance structure for the Q15 matrix structure. - */ - typedef struct - { - uint16_t numRows; /**< number of rows of the matrix. */ - uint16_t numCols; /**< number of columns of the matrix. */ - q15_t *pData; /**< points to the data of the matrix. */ - } arm_matrix_instance_q15; - - /** - * @brief Instance structure for the Q31 matrix structure. - */ - typedef struct - { - uint16_t numRows; /**< number of rows of the matrix. */ - uint16_t numCols; /**< number of columns of the matrix. */ - q31_t *pData; /**< points to the data of the matrix. */ - } arm_matrix_instance_q31; - - - /** - * @brief Floating-point matrix addition. - * @param[in] pSrcA points to the first input matrix structure - * @param[in] pSrcB points to the second input matrix structure - * @param[out] pDst points to output matrix structure - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_add_f32( - const arm_matrix_instance_f32 * pSrcA, - const arm_matrix_instance_f32 * pSrcB, - arm_matrix_instance_f32 * pDst); - - - /** - * @brief Q15 matrix addition. - * @param[in] pSrcA points to the first input matrix structure - * @param[in] pSrcB points to the second input matrix structure - * @param[out] pDst points to output matrix structure - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_add_q15( - const arm_matrix_instance_q15 * pSrcA, - const arm_matrix_instance_q15 * pSrcB, - arm_matrix_instance_q15 * pDst); - - - /** - * @brief Q31 matrix addition. - * @param[in] pSrcA points to the first input matrix structure - * @param[in] pSrcB points to the second input matrix structure - * @param[out] pDst points to output matrix structure - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_add_q31( - const arm_matrix_instance_q31 * pSrcA, - const arm_matrix_instance_q31 * pSrcB, - arm_matrix_instance_q31 * pDst); - - - /** - * @brief Floating-point, complex, matrix multiplication. - * @param[in] pSrcA points to the first input matrix structure - * @param[in] pSrcB points to the second input matrix structure - * @param[out] pDst points to output matrix structure - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_cmplx_mult_f32( - const arm_matrix_instance_f32 * pSrcA, - const arm_matrix_instance_f32 * pSrcB, - arm_matrix_instance_f32 * pDst); - - - /** - * @brief Q15, complex, matrix multiplication. - * @param[in] pSrcA points to the first input matrix structure - * @param[in] pSrcB points to the second input matrix structure - * @param[out] pDst points to output matrix structure - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_cmplx_mult_q15( - const arm_matrix_instance_q15 * pSrcA, - const arm_matrix_instance_q15 * pSrcB, - arm_matrix_instance_q15 * pDst, - q15_t * pScratch); - - - /** - * @brief Q31, complex, matrix multiplication. - * @param[in] pSrcA points to the first input matrix structure - * @param[in] pSrcB points to the second input matrix structure - * @param[out] pDst points to output matrix structure - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_cmplx_mult_q31( - const arm_matrix_instance_q31 * pSrcA, - const arm_matrix_instance_q31 * pSrcB, - arm_matrix_instance_q31 * pDst); - - - /** - * @brief Floating-point matrix transpose. - * @param[in] pSrc points to the input matrix - * @param[out] pDst points to the output matrix - * @return The function returns either ARM_MATH_SIZE_MISMATCH - * or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_trans_f32( - const arm_matrix_instance_f32 * pSrc, - arm_matrix_instance_f32 * pDst); - - - /** - * @brief Q15 matrix transpose. - * @param[in] pSrc points to the input matrix - * @param[out] pDst points to the output matrix - * @return The function returns either ARM_MATH_SIZE_MISMATCH - * or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_trans_q15( - const arm_matrix_instance_q15 * pSrc, - arm_matrix_instance_q15 * pDst); - - - /** - * @brief Q31 matrix transpose. - * @param[in] pSrc points to the input matrix - * @param[out] pDst points to the output matrix - * @return The function returns either ARM_MATH_SIZE_MISMATCH - * or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_trans_q31( - const arm_matrix_instance_q31 * pSrc, - arm_matrix_instance_q31 * pDst); - - - /** - * @brief Floating-point matrix multiplication - * @param[in] pSrcA points to the first input matrix structure - * @param[in] pSrcB points to the second input matrix structure - * @param[out] pDst points to output matrix structure - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_mult_f32( - const arm_matrix_instance_f32 * pSrcA, - const arm_matrix_instance_f32 * pSrcB, - arm_matrix_instance_f32 * pDst); - - - /** - * @brief Q15 matrix multiplication - * @param[in] pSrcA points to the first input matrix structure - * @param[in] pSrcB points to the second input matrix structure - * @param[out] pDst points to output matrix structure - * @param[in] pState points to the array for storing intermediate results - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_mult_q15( - const arm_matrix_instance_q15 * pSrcA, - const arm_matrix_instance_q15 * pSrcB, - arm_matrix_instance_q15 * pDst, - q15_t * pState); - - - /** - * @brief Q15 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 - * @param[in] pSrcA points to the first input matrix structure - * @param[in] pSrcB points to the second input matrix structure - * @param[out] pDst points to output matrix structure - * @param[in] pState points to the array for storing intermediate results - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_mult_fast_q15( - const arm_matrix_instance_q15 * pSrcA, - const arm_matrix_instance_q15 * pSrcB, - arm_matrix_instance_q15 * pDst, - q15_t * pState); - - - /** - * @brief Q31 matrix multiplication - * @param[in] pSrcA points to the first input matrix structure - * @param[in] pSrcB points to the second input matrix structure - * @param[out] pDst points to output matrix structure - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_mult_q31( - const arm_matrix_instance_q31 * pSrcA, - const arm_matrix_instance_q31 * pSrcB, - arm_matrix_instance_q31 * pDst); - - - /** - * @brief Q31 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 - * @param[in] pSrcA points to the first input matrix structure - * @param[in] pSrcB points to the second input matrix structure - * @param[out] pDst points to output matrix structure - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_mult_fast_q31( - const arm_matrix_instance_q31 * pSrcA, - const arm_matrix_instance_q31 * pSrcB, - arm_matrix_instance_q31 * pDst); - - - /** - * @brief Floating-point matrix subtraction - * @param[in] pSrcA points to the first input matrix structure - * @param[in] pSrcB points to the second input matrix structure - * @param[out] pDst points to output matrix structure - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_sub_f32( - const arm_matrix_instance_f32 * pSrcA, - const arm_matrix_instance_f32 * pSrcB, - arm_matrix_instance_f32 * pDst); - - - /** - * @brief Q15 matrix subtraction - * @param[in] pSrcA points to the first input matrix structure - * @param[in] pSrcB points to the second input matrix structure - * @param[out] pDst points to output matrix structure - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_sub_q15( - const arm_matrix_instance_q15 * pSrcA, - const arm_matrix_instance_q15 * pSrcB, - arm_matrix_instance_q15 * pDst); - - - /** - * @brief Q31 matrix subtraction - * @param[in] pSrcA points to the first input matrix structure - * @param[in] pSrcB points to the second input matrix structure - * @param[out] pDst points to output matrix structure - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_sub_q31( - const arm_matrix_instance_q31 * pSrcA, - const arm_matrix_instance_q31 * pSrcB, - arm_matrix_instance_q31 * pDst); - - - /** - * @brief Floating-point matrix scaling. - * @param[in] pSrc points to the input matrix - * @param[in] scale scale factor - * @param[out] pDst points to the output matrix - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_scale_f32( - const arm_matrix_instance_f32 * pSrc, - float32_t scale, - arm_matrix_instance_f32 * pDst); - - - /** - * @brief Q15 matrix scaling. - * @param[in] pSrc points to input matrix - * @param[in] scaleFract fractional portion of the scale factor - * @param[in] shift number of bits to shift the result by - * @param[out] pDst points to output matrix - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_scale_q15( - const arm_matrix_instance_q15 * pSrc, - q15_t scaleFract, - int32_t shift, - arm_matrix_instance_q15 * pDst); - - - /** - * @brief Q31 matrix scaling. - * @param[in] pSrc points to input matrix - * @param[in] scaleFract fractional portion of the scale factor - * @param[in] shift number of bits to shift the result by - * @param[out] pDst points to output matrix structure - * @return The function returns either - * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. - */ - arm_status arm_mat_scale_q31( - const arm_matrix_instance_q31 * pSrc, - q31_t scaleFract, - int32_t shift, - arm_matrix_instance_q31 * pDst); - - - /** - * @brief Q31 matrix initialization. - * @param[in,out] S points to an instance of the floating-point matrix structure. - * @param[in] nRows number of rows in the matrix. - * @param[in] nColumns number of columns in the matrix. - * @param[in] pData points to the matrix data array. - */ - void arm_mat_init_q31( - arm_matrix_instance_q31 * S, - uint16_t nRows, - uint16_t nColumns, - q31_t * pData); - - - /** - * @brief Q15 matrix initialization. - * @param[in,out] S points to an instance of the floating-point matrix structure. - * @param[in] nRows number of rows in the matrix. - * @param[in] nColumns number of columns in the matrix. - * @param[in] pData points to the matrix data array. - */ - void arm_mat_init_q15( - arm_matrix_instance_q15 * S, - uint16_t nRows, - uint16_t nColumns, - q15_t * pData); - - - /** - * @brief Floating-point matrix initialization. - * @param[in,out] S points to an instance of the floating-point matrix structure. - * @param[in] nRows number of rows in the matrix. - * @param[in] nColumns number of columns in the matrix. - * @param[in] pData points to the matrix data array. - */ - void arm_mat_init_f32( - arm_matrix_instance_f32 * S, - uint16_t nRows, - uint16_t nColumns, - float32_t * pData); - - - - /** - * @brief Instance structure for the Q15 PID Control. - */ - typedef struct - { - q15_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ -#if !defined (ARM_MATH_DSP) - q15_t A1; - q15_t A2; -#else - q31_t A1; /**< The derived gain A1 = -Kp - 2Kd | Kd.*/ -#endif - q15_t state[3]; /**< The state array of length 3. */ - q15_t Kp; /**< The proportional gain. */ - q15_t Ki; /**< The integral gain. */ - q15_t Kd; /**< The derivative gain. */ - } arm_pid_instance_q15; - - /** - * @brief Instance structure for the Q31 PID Control. - */ - typedef struct - { - q31_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ - q31_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ - q31_t A2; /**< The derived gain, A2 = Kd . */ - q31_t state[3]; /**< The state array of length 3. */ - q31_t Kp; /**< The proportional gain. */ - q31_t Ki; /**< The integral gain. */ - q31_t Kd; /**< The derivative gain. */ - } arm_pid_instance_q31; - - /** - * @brief Instance structure for the floating-point PID Control. - */ - typedef struct - { - float32_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ - float32_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ - float32_t A2; /**< The derived gain, A2 = Kd . */ - float32_t state[3]; /**< The state array of length 3. */ - float32_t Kp; /**< The proportional gain. */ - float32_t Ki; /**< The integral gain. */ - float32_t Kd; /**< The derivative gain. */ - } arm_pid_instance_f32; - - - - /** - * @brief Initialization function for the floating-point PID Control. - * @param[in,out] S points to an instance of the PID structure. - * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. - */ - void arm_pid_init_f32( - arm_pid_instance_f32 * S, - int32_t resetStateFlag); - - - /** - * @brief Reset function for the floating-point PID Control. - * @param[in,out] S is an instance of the floating-point PID Control structure - */ - void arm_pid_reset_f32( - arm_pid_instance_f32 * S); - - - /** - * @brief Initialization function for the Q31 PID Control. - * @param[in,out] S points to an instance of the Q15 PID structure. - * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. - */ - void arm_pid_init_q31( - arm_pid_instance_q31 * S, - int32_t resetStateFlag); - - - /** - * @brief Reset function for the Q31 PID Control. - * @param[in,out] S points to an instance of the Q31 PID Control structure - */ - - void arm_pid_reset_q31( - arm_pid_instance_q31 * S); - - - /** - * @brief Initialization function for the Q15 PID Control. - * @param[in,out] S points to an instance of the Q15 PID structure. - * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. - */ - void arm_pid_init_q15( - arm_pid_instance_q15 * S, - int32_t resetStateFlag); - - - /** - * @brief Reset function for the Q15 PID Control. - * @param[in,out] S points to an instance of the q15 PID Control structure - */ - void arm_pid_reset_q15( - arm_pid_instance_q15 * S); - - - /** - * @brief Instance structure for the floating-point Linear Interpolate function. - */ - typedef struct - { - uint32_t nValues; /**< nValues */ - float32_t x1; /**< x1 */ - float32_t xSpacing; /**< xSpacing */ - float32_t *pYData; /**< pointer to the table of Y values */ - } arm_linear_interp_instance_f32; - - /** - * @brief Instance structure for the floating-point bilinear interpolation function. - */ - typedef struct - { - uint16_t numRows; /**< number of rows in the data table. */ - uint16_t numCols; /**< number of columns in the data table. */ - float32_t *pData; /**< points to the data table. */ - } arm_bilinear_interp_instance_f32; - - /** - * @brief Instance structure for the Q31 bilinear interpolation function. - */ - typedef struct - { - uint16_t numRows; /**< number of rows in the data table. */ - uint16_t numCols; /**< number of columns in the data table. */ - q31_t *pData; /**< points to the data table. */ - } arm_bilinear_interp_instance_q31; - - /** - * @brief Instance structure for the Q15 bilinear interpolation function. - */ - typedef struct - { - uint16_t numRows; /**< number of rows in the data table. */ - uint16_t numCols; /**< number of columns in the data table. */ - q15_t *pData; /**< points to the data table. */ - } arm_bilinear_interp_instance_q15; - - /** - * @brief Instance structure for the Q15 bilinear interpolation function. - */ - typedef struct - { - uint16_t numRows; /**< number of rows in the data table. */ - uint16_t numCols; /**< number of columns in the data table. */ - q7_t *pData; /**< points to the data table. */ - } arm_bilinear_interp_instance_q7; - - - /** - * @brief Q7 vector multiplication. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in each vector - */ - void arm_mult_q7( - q7_t * pSrcA, - q7_t * pSrcB, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @brief Q15 vector multiplication. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in each vector - */ - void arm_mult_q15( - q15_t * pSrcA, - q15_t * pSrcB, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Q31 vector multiplication. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in each vector - */ - void arm_mult_q31( - q31_t * pSrcA, - q31_t * pSrcB, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Floating-point vector multiplication. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in each vector - */ - void arm_mult_f32( - float32_t * pSrcA, - float32_t * pSrcB, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Instance structure for the Q15 CFFT/CIFFT function. - */ - typedef struct - { - uint16_t fftLen; /**< length of the FFT. */ - uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ - uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ - q15_t *pTwiddle; /**< points to the Sin twiddle factor table. */ - uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ - } arm_cfft_radix2_instance_q15; - -/* Deprecated */ - arm_status arm_cfft_radix2_init_q15( - arm_cfft_radix2_instance_q15 * S, - uint16_t fftLen, - uint8_t ifftFlag, - uint8_t bitReverseFlag); - -/* Deprecated */ - void arm_cfft_radix2_q15( - const arm_cfft_radix2_instance_q15 * S, - q15_t * pSrc); - - - /** - * @brief Instance structure for the Q15 CFFT/CIFFT function. - */ - typedef struct - { - uint16_t fftLen; /**< length of the FFT. */ - uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ - uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ - q15_t *pTwiddle; /**< points to the twiddle factor table. */ - uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ - } arm_cfft_radix4_instance_q15; - -/* Deprecated */ - arm_status arm_cfft_radix4_init_q15( - arm_cfft_radix4_instance_q15 * S, - uint16_t fftLen, - uint8_t ifftFlag, - uint8_t bitReverseFlag); - -/* Deprecated */ - void arm_cfft_radix4_q15( - const arm_cfft_radix4_instance_q15 * S, - q15_t * pSrc); - - /** - * @brief Instance structure for the Radix-2 Q31 CFFT/CIFFT function. - */ - typedef struct - { - uint16_t fftLen; /**< length of the FFT. */ - uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ - uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ - q31_t *pTwiddle; /**< points to the Twiddle factor table. */ - uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ - } arm_cfft_radix2_instance_q31; - -/* Deprecated */ - arm_status arm_cfft_radix2_init_q31( - arm_cfft_radix2_instance_q31 * S, - uint16_t fftLen, - uint8_t ifftFlag, - uint8_t bitReverseFlag); - -/* Deprecated */ - void arm_cfft_radix2_q31( - const arm_cfft_radix2_instance_q31 * S, - q31_t * pSrc); - - /** - * @brief Instance structure for the Q31 CFFT/CIFFT function. - */ - typedef struct - { - uint16_t fftLen; /**< length of the FFT. */ - uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ - uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ - q31_t *pTwiddle; /**< points to the twiddle factor table. */ - uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ - } arm_cfft_radix4_instance_q31; - -/* Deprecated */ - void arm_cfft_radix4_q31( - const arm_cfft_radix4_instance_q31 * S, - q31_t * pSrc); - -/* Deprecated */ - arm_status arm_cfft_radix4_init_q31( - arm_cfft_radix4_instance_q31 * S, - uint16_t fftLen, - uint8_t ifftFlag, - uint8_t bitReverseFlag); - - /** - * @brief Instance structure for the floating-point CFFT/CIFFT function. - */ - typedef struct - { - uint16_t fftLen; /**< length of the FFT. */ - uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ - uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ - float32_t *pTwiddle; /**< points to the Twiddle factor table. */ - uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ - float32_t onebyfftLen; /**< value of 1/fftLen. */ - } arm_cfft_radix2_instance_f32; - -/* Deprecated */ - arm_status arm_cfft_radix2_init_f32( - arm_cfft_radix2_instance_f32 * S, - uint16_t fftLen, - uint8_t ifftFlag, - uint8_t bitReverseFlag); - -/* Deprecated */ - void arm_cfft_radix2_f32( - const arm_cfft_radix2_instance_f32 * S, - float32_t * pSrc); - - /** - * @brief Instance structure for the floating-point CFFT/CIFFT function. - */ - typedef struct - { - uint16_t fftLen; /**< length of the FFT. */ - uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ - uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ - float32_t *pTwiddle; /**< points to the Twiddle factor table. */ - uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ - float32_t onebyfftLen; /**< value of 1/fftLen. */ - } arm_cfft_radix4_instance_f32; - -/* Deprecated */ - arm_status arm_cfft_radix4_init_f32( - arm_cfft_radix4_instance_f32 * S, - uint16_t fftLen, - uint8_t ifftFlag, - uint8_t bitReverseFlag); - -/* Deprecated */ - void arm_cfft_radix4_f32( - const arm_cfft_radix4_instance_f32 * S, - float32_t * pSrc); - - /** - * @brief Instance structure for the fixed-point CFFT/CIFFT function. - */ - typedef struct - { - uint16_t fftLen; /**< length of the FFT. */ - const q15_t *pTwiddle; /**< points to the Twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t bitRevLength; /**< bit reversal table length. */ - } arm_cfft_instance_q15; - -void arm_cfft_q15( - const arm_cfft_instance_q15 * S, - q15_t * p1, - uint8_t ifftFlag, - uint8_t bitReverseFlag); - - /** - * @brief Instance structure for the fixed-point CFFT/CIFFT function. - */ - typedef struct - { - uint16_t fftLen; /**< length of the FFT. */ - const q31_t *pTwiddle; /**< points to the Twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t bitRevLength; /**< bit reversal table length. */ - } arm_cfft_instance_q31; - -void arm_cfft_q31( - const arm_cfft_instance_q31 * S, - q31_t * p1, - uint8_t ifftFlag, - uint8_t bitReverseFlag); - - /** - * @brief Instance structure for the floating-point CFFT/CIFFT function. - */ - typedef struct - { - uint16_t fftLen; /**< length of the FFT. */ - const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t bitRevLength; /**< bit reversal table length. */ - } arm_cfft_instance_f32; - - void arm_cfft_f32( - const arm_cfft_instance_f32 * S, - float32_t * p1, - uint8_t ifftFlag, - uint8_t bitReverseFlag); - - /** - * @brief Instance structure for the Q15 RFFT/RIFFT function. - */ - typedef struct - { - uint32_t fftLenReal; /**< length of the real FFT. */ - uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ - uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ - uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - q15_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ - q15_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ - const arm_cfft_instance_q15 *pCfft; /**< points to the complex FFT instance. */ - } arm_rfft_instance_q15; - - arm_status arm_rfft_init_q15( - arm_rfft_instance_q15 * S, - uint32_t fftLenReal, - uint32_t ifftFlagR, - uint32_t bitReverseFlag); - - void arm_rfft_q15( - const arm_rfft_instance_q15 * S, - q15_t * pSrc, - q15_t * pDst); - - /** - * @brief Instance structure for the Q31 RFFT/RIFFT function. - */ - typedef struct - { - uint32_t fftLenReal; /**< length of the real FFT. */ - uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ - uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ - uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - q31_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ - q31_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ - const arm_cfft_instance_q31 *pCfft; /**< points to the complex FFT instance. */ - } arm_rfft_instance_q31; - - arm_status arm_rfft_init_q31( - arm_rfft_instance_q31 * S, - uint32_t fftLenReal, - uint32_t ifftFlagR, - uint32_t bitReverseFlag); - - void arm_rfft_q31( - const arm_rfft_instance_q31 * S, - q31_t * pSrc, - q31_t * pDst); - - /** - * @brief Instance structure for the floating-point RFFT/RIFFT function. - */ - typedef struct - { - uint32_t fftLenReal; /**< length of the real FFT. */ - uint16_t fftLenBy2; /**< length of the complex FFT. */ - uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ - uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ - uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - float32_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ - float32_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ - arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ - } arm_rfft_instance_f32; - - arm_status arm_rfft_init_f32( - arm_rfft_instance_f32 * S, - arm_cfft_radix4_instance_f32 * S_CFFT, - uint32_t fftLenReal, - uint32_t ifftFlagR, - uint32_t bitReverseFlag); - - void arm_rfft_f32( - const arm_rfft_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst); - - /** - * @brief Instance structure for the floating-point RFFT/RIFFT function. - */ -typedef struct - { - arm_cfft_instance_f32 Sint; /**< Internal CFFT structure. */ - uint16_t fftLenRFFT; /**< length of the real sequence */ - float32_t * pTwiddleRFFT; /**< Twiddle factors real stage */ - } arm_rfft_fast_instance_f32 ; - -arm_status arm_rfft_fast_init_f32 ( - arm_rfft_fast_instance_f32 * S, - uint16_t fftLen); - -void arm_rfft_fast_f32( - arm_rfft_fast_instance_f32 * S, - float32_t * p, float32_t * pOut, - uint8_t ifftFlag); - - /** - * @brief Instance structure for the floating-point DCT4/IDCT4 function. - */ - typedef struct - { - uint16_t N; /**< length of the DCT4. */ - uint16_t Nby2; /**< half of the length of the DCT4. */ - float32_t normalize; /**< normalizing factor. */ - float32_t *pTwiddle; /**< points to the twiddle factor table. */ - float32_t *pCosFactor; /**< points to the cosFactor table. */ - arm_rfft_instance_f32 *pRfft; /**< points to the real FFT instance. */ - arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ - } arm_dct4_instance_f32; - - - /** - * @brief Initialization function for the floating-point DCT4/IDCT4. - * @param[in,out] S points to an instance of floating-point DCT4/IDCT4 structure. - * @param[in] S_RFFT points to an instance of floating-point RFFT/RIFFT structure. - * @param[in] S_CFFT points to an instance of floating-point CFFT/CIFFT structure. - * @param[in] N length of the DCT4. - * @param[in] Nby2 half of the length of the DCT4. - * @param[in] normalize normalizing factor. - * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLenReal is not a supported transform length. - */ - arm_status arm_dct4_init_f32( - arm_dct4_instance_f32 * S, - arm_rfft_instance_f32 * S_RFFT, - arm_cfft_radix4_instance_f32 * S_CFFT, - uint16_t N, - uint16_t Nby2, - float32_t normalize); - - - /** - * @brief Processing function for the floating-point DCT4/IDCT4. - * @param[in] S points to an instance of the floating-point DCT4/IDCT4 structure. - * @param[in] pState points to state buffer. - * @param[in,out] pInlineBuffer points to the in-place input and output buffer. - */ - void arm_dct4_f32( - const arm_dct4_instance_f32 * S, - float32_t * pState, - float32_t * pInlineBuffer); - - - /** - * @brief Instance structure for the Q31 DCT4/IDCT4 function. - */ - typedef struct - { - uint16_t N; /**< length of the DCT4. */ - uint16_t Nby2; /**< half of the length of the DCT4. */ - q31_t normalize; /**< normalizing factor. */ - q31_t *pTwiddle; /**< points to the twiddle factor table. */ - q31_t *pCosFactor; /**< points to the cosFactor table. */ - arm_rfft_instance_q31 *pRfft; /**< points to the real FFT instance. */ - arm_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */ - } arm_dct4_instance_q31; - - - /** - * @brief Initialization function for the Q31 DCT4/IDCT4. - * @param[in,out] S points to an instance of Q31 DCT4/IDCT4 structure. - * @param[in] S_RFFT points to an instance of Q31 RFFT/RIFFT structure - * @param[in] S_CFFT points to an instance of Q31 CFFT/CIFFT structure - * @param[in] N length of the DCT4. - * @param[in] Nby2 half of the length of the DCT4. - * @param[in] normalize normalizing factor. - * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. - */ - arm_status arm_dct4_init_q31( - arm_dct4_instance_q31 * S, - arm_rfft_instance_q31 * S_RFFT, - arm_cfft_radix4_instance_q31 * S_CFFT, - uint16_t N, - uint16_t Nby2, - q31_t normalize); - - - /** - * @brief Processing function for the Q31 DCT4/IDCT4. - * @param[in] S points to an instance of the Q31 DCT4 structure. - * @param[in] pState points to state buffer. - * @param[in,out] pInlineBuffer points to the in-place input and output buffer. - */ - void arm_dct4_q31( - const arm_dct4_instance_q31 * S, - q31_t * pState, - q31_t * pInlineBuffer); - - - /** - * @brief Instance structure for the Q15 DCT4/IDCT4 function. - */ - typedef struct - { - uint16_t N; /**< length of the DCT4. */ - uint16_t Nby2; /**< half of the length of the DCT4. */ - q15_t normalize; /**< normalizing factor. */ - q15_t *pTwiddle; /**< points to the twiddle factor table. */ - q15_t *pCosFactor; /**< points to the cosFactor table. */ - arm_rfft_instance_q15 *pRfft; /**< points to the real FFT instance. */ - arm_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */ - } arm_dct4_instance_q15; - - - /** - * @brief Initialization function for the Q15 DCT4/IDCT4. - * @param[in,out] S points to an instance of Q15 DCT4/IDCT4 structure. - * @param[in] S_RFFT points to an instance of Q15 RFFT/RIFFT structure. - * @param[in] S_CFFT points to an instance of Q15 CFFT/CIFFT structure. - * @param[in] N length of the DCT4. - * @param[in] Nby2 half of the length of the DCT4. - * @param[in] normalize normalizing factor. - * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. - */ - arm_status arm_dct4_init_q15( - arm_dct4_instance_q15 * S, - arm_rfft_instance_q15 * S_RFFT, - arm_cfft_radix4_instance_q15 * S_CFFT, - uint16_t N, - uint16_t Nby2, - q15_t normalize); - - - /** - * @brief Processing function for the Q15 DCT4/IDCT4. - * @param[in] S points to an instance of the Q15 DCT4 structure. - * @param[in] pState points to state buffer. - * @param[in,out] pInlineBuffer points to the in-place input and output buffer. - */ - void arm_dct4_q15( - const arm_dct4_instance_q15 * S, - q15_t * pState, - q15_t * pInlineBuffer); - - - /** - * @brief Floating-point vector addition. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in each vector - */ - void arm_add_f32( - float32_t * pSrcA, - float32_t * pSrcB, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Q7 vector addition. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in each vector - */ - void arm_add_q7( - q7_t * pSrcA, - q7_t * pSrcB, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @brief Q15 vector addition. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in each vector - */ - void arm_add_q15( - q15_t * pSrcA, - q15_t * pSrcB, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Q31 vector addition. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in each vector - */ - void arm_add_q31( - q31_t * pSrcA, - q31_t * pSrcB, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Floating-point vector subtraction. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in each vector - */ - void arm_sub_f32( - float32_t * pSrcA, - float32_t * pSrcB, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Q7 vector subtraction. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in each vector - */ - void arm_sub_q7( - q7_t * pSrcA, - q7_t * pSrcB, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @brief Q15 vector subtraction. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in each vector - */ - void arm_sub_q15( - q15_t * pSrcA, - q15_t * pSrcB, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Q31 vector subtraction. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in each vector - */ - void arm_sub_q31( - q31_t * pSrcA, - q31_t * pSrcB, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Multiplies a floating-point vector by a scalar. - * @param[in] pSrc points to the input vector - * @param[in] scale scale factor to be applied - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_scale_f32( - float32_t * pSrc, - float32_t scale, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Multiplies a Q7 vector by a scalar. - * @param[in] pSrc points to the input vector - * @param[in] scaleFract fractional portion of the scale value - * @param[in] shift number of bits to shift the result by - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_scale_q7( - q7_t * pSrc, - q7_t scaleFract, - int8_t shift, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @brief Multiplies a Q15 vector by a scalar. - * @param[in] pSrc points to the input vector - * @param[in] scaleFract fractional portion of the scale value - * @param[in] shift number of bits to shift the result by - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_scale_q15( - q15_t * pSrc, - q15_t scaleFract, - int8_t shift, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Multiplies a Q31 vector by a scalar. - * @param[in] pSrc points to the input vector - * @param[in] scaleFract fractional portion of the scale value - * @param[in] shift number of bits to shift the result by - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_scale_q31( - q31_t * pSrc, - q31_t scaleFract, - int8_t shift, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Q7 vector absolute value. - * @param[in] pSrc points to the input buffer - * @param[out] pDst points to the output buffer - * @param[in] blockSize number of samples in each vector - */ - void arm_abs_q7( - q7_t * pSrc, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @brief Floating-point vector absolute value. - * @param[in] pSrc points to the input buffer - * @param[out] pDst points to the output buffer - * @param[in] blockSize number of samples in each vector - */ - void arm_abs_f32( - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Q15 vector absolute value. - * @param[in] pSrc points to the input buffer - * @param[out] pDst points to the output buffer - * @param[in] blockSize number of samples in each vector - */ - void arm_abs_q15( - q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Q31 vector absolute value. - * @param[in] pSrc points to the input buffer - * @param[out] pDst points to the output buffer - * @param[in] blockSize number of samples in each vector - */ - void arm_abs_q31( - q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Dot product of floating-point vectors. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[in] blockSize number of samples in each vector - * @param[out] result output result returned here - */ - void arm_dot_prod_f32( - float32_t * pSrcA, - float32_t * pSrcB, - uint32_t blockSize, - float32_t * result); - - - /** - * @brief Dot product of Q7 vectors. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[in] blockSize number of samples in each vector - * @param[out] result output result returned here - */ - void arm_dot_prod_q7( - q7_t * pSrcA, - q7_t * pSrcB, - uint32_t blockSize, - q31_t * result); - - - /** - * @brief Dot product of Q15 vectors. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[in] blockSize number of samples in each vector - * @param[out] result output result returned here - */ - void arm_dot_prod_q15( - q15_t * pSrcA, - q15_t * pSrcB, - uint32_t blockSize, - q63_t * result); - - - /** - * @brief Dot product of Q31 vectors. - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[in] blockSize number of samples in each vector - * @param[out] result output result returned here - */ - void arm_dot_prod_q31( - q31_t * pSrcA, - q31_t * pSrcB, - uint32_t blockSize, - q63_t * result); - - - /** - * @brief Shifts the elements of a Q7 vector a specified number of bits. - * @param[in] pSrc points to the input vector - * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_shift_q7( - q7_t * pSrc, - int8_t shiftBits, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @brief Shifts the elements of a Q15 vector a specified number of bits. - * @param[in] pSrc points to the input vector - * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_shift_q15( - q15_t * pSrc, - int8_t shiftBits, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Shifts the elements of a Q31 vector a specified number of bits. - * @param[in] pSrc points to the input vector - * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_shift_q31( - q31_t * pSrc, - int8_t shiftBits, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Adds a constant offset to a floating-point vector. - * @param[in] pSrc points to the input vector - * @param[in] offset is the offset to be added - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_offset_f32( - float32_t * pSrc, - float32_t offset, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Adds a constant offset to a Q7 vector. - * @param[in] pSrc points to the input vector - * @param[in] offset is the offset to be added - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_offset_q7( - q7_t * pSrc, - q7_t offset, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @brief Adds a constant offset to a Q15 vector. - * @param[in] pSrc points to the input vector - * @param[in] offset is the offset to be added - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_offset_q15( - q15_t * pSrc, - q15_t offset, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Adds a constant offset to a Q31 vector. - * @param[in] pSrc points to the input vector - * @param[in] offset is the offset to be added - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_offset_q31( - q31_t * pSrc, - q31_t offset, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Negates the elements of a floating-point vector. - * @param[in] pSrc points to the input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_negate_f32( - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Negates the elements of a Q7 vector. - * @param[in] pSrc points to the input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_negate_q7( - q7_t * pSrc, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @brief Negates the elements of a Q15 vector. - * @param[in] pSrc points to the input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_negate_q15( - q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Negates the elements of a Q31 vector. - * @param[in] pSrc points to the input vector - * @param[out] pDst points to the output vector - * @param[in] blockSize number of samples in the vector - */ - void arm_negate_q31( - q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Copies the elements of a floating-point vector. - * @param[in] pSrc input pointer - * @param[out] pDst output pointer - * @param[in] blockSize number of samples to process - */ - void arm_copy_f32( - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Copies the elements of a Q7 vector. - * @param[in] pSrc input pointer - * @param[out] pDst output pointer - * @param[in] blockSize number of samples to process - */ - void arm_copy_q7( - q7_t * pSrc, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @brief Copies the elements of a Q15 vector. - * @param[in] pSrc input pointer - * @param[out] pDst output pointer - * @param[in] blockSize number of samples to process - */ - void arm_copy_q15( - q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Copies the elements of a Q31 vector. - * @param[in] pSrc input pointer - * @param[out] pDst output pointer - * @param[in] blockSize number of samples to process - */ - void arm_copy_q31( - q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Fills a constant value into a floating-point vector. - * @param[in] value input value to be filled - * @param[out] pDst output pointer - * @param[in] blockSize number of samples to process - */ - void arm_fill_f32( - float32_t value, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Fills a constant value into a Q7 vector. - * @param[in] value input value to be filled - * @param[out] pDst output pointer - * @param[in] blockSize number of samples to process - */ - void arm_fill_q7( - q7_t value, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @brief Fills a constant value into a Q15 vector. - * @param[in] value input value to be filled - * @param[out] pDst output pointer - * @param[in] blockSize number of samples to process - */ - void arm_fill_q15( - q15_t value, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Fills a constant value into a Q31 vector. - * @param[in] value input value to be filled - * @param[out] pDst output pointer - * @param[in] blockSize number of samples to process - */ - void arm_fill_q31( - q31_t value, - q31_t * pDst, - uint32_t blockSize); - - -/** - * @brief Convolution of floating-point sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1. - */ - void arm_conv_f32( - float32_t * pSrcA, - uint32_t srcALen, - float32_t * pSrcB, - uint32_t srcBLen, - float32_t * pDst); - - - /** - * @brief Convolution of Q15 sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. - * @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. - * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). - */ - void arm_conv_opt_q15( - q15_t * pSrcA, - uint32_t srcALen, - q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst, - q15_t * pScratch1, - q15_t * pScratch2); - - -/** - * @brief Convolution of Q15 sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1. - */ - void arm_conv_q15( - q15_t * pSrcA, - uint32_t srcALen, - q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst); - - - /** - * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. - */ - void arm_conv_fast_q15( - q15_t * pSrcA, - uint32_t srcALen, - q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst); - - - /** - * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. - * @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. - * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). - */ - void arm_conv_fast_opt_q15( - q15_t * pSrcA, - uint32_t srcALen, - q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst, - q15_t * pScratch1, - q15_t * pScratch2); - - - /** - * @brief Convolution of Q31 sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. - */ - void arm_conv_q31( - q31_t * pSrcA, - uint32_t srcALen, - q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst); - - - /** - * @brief Convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. - */ - void arm_conv_fast_q31( - q31_t * pSrcA, - uint32_t srcALen, - q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst); - - - /** - * @brief Convolution of Q7 sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. - * @param[in] pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. - * @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). - */ - void arm_conv_opt_q7( - q7_t * pSrcA, - uint32_t srcALen, - q7_t * pSrcB, - uint32_t srcBLen, - q7_t * pDst, - q15_t * pScratch1, - q15_t * pScratch2); - - - /** - * @brief Convolution of Q7 sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. - */ - void arm_conv_q7( - q7_t * pSrcA, - uint32_t srcALen, - q7_t * pSrcB, - uint32_t srcBLen, - q7_t * pDst); - - - /** - * @brief Partial convolution of floating-point sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data - * @param[in] firstIndex is the first output sample to start with. - * @param[in] numPoints is the number of output points to be computed. - * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. - */ - arm_status arm_conv_partial_f32( - float32_t * pSrcA, - uint32_t srcALen, - float32_t * pSrcB, - uint32_t srcBLen, - float32_t * pDst, - uint32_t firstIndex, - uint32_t numPoints); - - - /** - * @brief Partial convolution of Q15 sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data - * @param[in] firstIndex is the first output sample to start with. - * @param[in] numPoints is the number of output points to be computed. - * @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. - * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). - * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. - */ - arm_status arm_conv_partial_opt_q15( - q15_t * pSrcA, - uint32_t srcALen, - q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst, - uint32_t firstIndex, - uint32_t numPoints, - q15_t * pScratch1, - q15_t * pScratch2); - - - /** - * @brief Partial convolution of Q15 sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data - * @param[in] firstIndex is the first output sample to start with. - * @param[in] numPoints is the number of output points to be computed. - * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. - */ - arm_status arm_conv_partial_q15( - q15_t * pSrcA, - uint32_t srcALen, - q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst, - uint32_t firstIndex, - uint32_t numPoints); - - - /** - * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data - * @param[in] firstIndex is the first output sample to start with. - * @param[in] numPoints is the number of output points to be computed. - * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. - */ - arm_status arm_conv_partial_fast_q15( - q15_t * pSrcA, - uint32_t srcALen, - q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst, - uint32_t firstIndex, - uint32_t numPoints); - - - /** - * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data - * @param[in] firstIndex is the first output sample to start with. - * @param[in] numPoints is the number of output points to be computed. - * @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. - * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). - * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. - */ - arm_status arm_conv_partial_fast_opt_q15( - q15_t * pSrcA, - uint32_t srcALen, - q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst, - uint32_t firstIndex, - uint32_t numPoints, - q15_t * pScratch1, - q15_t * pScratch2); - - - /** - * @brief Partial convolution of Q31 sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data - * @param[in] firstIndex is the first output sample to start with. - * @param[in] numPoints is the number of output points to be computed. - * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. - */ - arm_status arm_conv_partial_q31( - q31_t * pSrcA, - uint32_t srcALen, - q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst, - uint32_t firstIndex, - uint32_t numPoints); - - - /** - * @brief Partial convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data - * @param[in] firstIndex is the first output sample to start with. - * @param[in] numPoints is the number of output points to be computed. - * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. - */ - arm_status arm_conv_partial_fast_q31( - q31_t * pSrcA, - uint32_t srcALen, - q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst, - uint32_t firstIndex, - uint32_t numPoints); - - - /** - * @brief Partial convolution of Q7 sequences - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data - * @param[in] firstIndex is the first output sample to start with. - * @param[in] numPoints is the number of output points to be computed. - * @param[in] pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. - * @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). - * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. - */ - arm_status arm_conv_partial_opt_q7( - q7_t * pSrcA, - uint32_t srcALen, - q7_t * pSrcB, - uint32_t srcBLen, - q7_t * pDst, - uint32_t firstIndex, - uint32_t numPoints, - q15_t * pScratch1, - q15_t * pScratch2); - - -/** - * @brief Partial convolution of Q7 sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data - * @param[in] firstIndex is the first output sample to start with. - * @param[in] numPoints is the number of output points to be computed. - * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. - */ - arm_status arm_conv_partial_q7( - q7_t * pSrcA, - uint32_t srcALen, - q7_t * pSrcB, - uint32_t srcBLen, - q7_t * pDst, - uint32_t firstIndex, - uint32_t numPoints); - - - /** - * @brief Instance structure for the Q15 FIR decimator. - */ - typedef struct - { - uint8_t M; /**< decimation factor. */ - uint16_t numTaps; /**< number of coefficients in the filter. */ - q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - } arm_fir_decimate_instance_q15; - - /** - * @brief Instance structure for the Q31 FIR decimator. - */ - typedef struct - { - uint8_t M; /**< decimation factor. */ - uint16_t numTaps; /**< number of coefficients in the filter. */ - q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - } arm_fir_decimate_instance_q31; - - /** - * @brief Instance structure for the floating-point FIR decimator. - */ - typedef struct - { - uint8_t M; /**< decimation factor. */ - uint16_t numTaps; /**< number of coefficients in the filter. */ - float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - } arm_fir_decimate_instance_f32; - - - /** - * @brief Processing function for the floating-point FIR decimator. - * @param[in] S points to an instance of the floating-point FIR decimator structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] blockSize number of input samples to process per call. - */ - void arm_fir_decimate_f32( - const arm_fir_decimate_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the floating-point FIR decimator. - * @param[in,out] S points to an instance of the floating-point FIR decimator structure. - * @param[in] numTaps number of coefficients in the filter. - * @param[in] M decimation factor. - * @param[in] pCoeffs points to the filter coefficients. - * @param[in] pState points to the state buffer. - * @param[in] blockSize number of input samples to process per call. - * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if - * blockSize is not a multiple of M. - */ - arm_status arm_fir_decimate_init_f32( - arm_fir_decimate_instance_f32 * S, - uint16_t numTaps, - uint8_t M, - float32_t * pCoeffs, - float32_t * pState, - uint32_t blockSize); - - - /** - * @brief Processing function for the Q15 FIR decimator. - * @param[in] S points to an instance of the Q15 FIR decimator structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] blockSize number of input samples to process per call. - */ - void arm_fir_decimate_q15( - const arm_fir_decimate_instance_q15 * S, - q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Processing function for the Q15 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. - * @param[in] S points to an instance of the Q15 FIR decimator structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] blockSize number of input samples to process per call. - */ - void arm_fir_decimate_fast_q15( - const arm_fir_decimate_instance_q15 * S, - q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the Q15 FIR decimator. - * @param[in,out] S points to an instance of the Q15 FIR decimator structure. - * @param[in] numTaps number of coefficients in the filter. - * @param[in] M decimation factor. - * @param[in] pCoeffs points to the filter coefficients. - * @param[in] pState points to the state buffer. - * @param[in] blockSize number of input samples to process per call. - * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if - * blockSize is not a multiple of M. - */ - arm_status arm_fir_decimate_init_q15( - arm_fir_decimate_instance_q15 * S, - uint16_t numTaps, - uint8_t M, - q15_t * pCoeffs, - q15_t * pState, - uint32_t blockSize); - - - /** - * @brief Processing function for the Q31 FIR decimator. - * @param[in] S points to an instance of the Q31 FIR decimator structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] blockSize number of input samples to process per call. - */ - void arm_fir_decimate_q31( - const arm_fir_decimate_instance_q31 * S, - q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - /** - * @brief Processing function for the Q31 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. - * @param[in] S points to an instance of the Q31 FIR decimator structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] blockSize number of input samples to process per call. - */ - void arm_fir_decimate_fast_q31( - arm_fir_decimate_instance_q31 * S, - q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the Q31 FIR decimator. - * @param[in,out] S points to an instance of the Q31 FIR decimator structure. - * @param[in] numTaps number of coefficients in the filter. - * @param[in] M decimation factor. - * @param[in] pCoeffs points to the filter coefficients. - * @param[in] pState points to the state buffer. - * @param[in] blockSize number of input samples to process per call. - * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if - * blockSize is not a multiple of M. - */ - arm_status arm_fir_decimate_init_q31( - arm_fir_decimate_instance_q31 * S, - uint16_t numTaps, - uint8_t M, - q31_t * pCoeffs, - q31_t * pState, - uint32_t blockSize); - - - /** - * @brief Instance structure for the Q15 FIR interpolator. - */ - typedef struct - { - uint8_t L; /**< upsample factor. */ - uint16_t phaseLength; /**< length of each polyphase filter component. */ - q15_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ - q15_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ - } arm_fir_interpolate_instance_q15; - - /** - * @brief Instance structure for the Q31 FIR interpolator. - */ - typedef struct - { - uint8_t L; /**< upsample factor. */ - uint16_t phaseLength; /**< length of each polyphase filter component. */ - q31_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ - q31_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ - } arm_fir_interpolate_instance_q31; - - /** - * @brief Instance structure for the floating-point FIR interpolator. - */ - typedef struct - { - uint8_t L; /**< upsample factor. */ - uint16_t phaseLength; /**< length of each polyphase filter component. */ - float32_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ - float32_t *pState; /**< points to the state variable array. The array is of length phaseLength+numTaps-1. */ - } arm_fir_interpolate_instance_f32; - - - /** - * @brief Processing function for the Q15 FIR interpolator. - * @param[in] S points to an instance of the Q15 FIR interpolator structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of input samples to process per call. - */ - void arm_fir_interpolate_q15( - const arm_fir_interpolate_instance_q15 * S, - q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the Q15 FIR interpolator. - * @param[in,out] S points to an instance of the Q15 FIR interpolator structure. - * @param[in] L upsample factor. - * @param[in] numTaps number of filter coefficients in the filter. - * @param[in] pCoeffs points to the filter coefficient buffer. - * @param[in] pState points to the state buffer. - * @param[in] blockSize number of input samples to process per call. - * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if - * the filter length numTaps is not a multiple of the interpolation factor L. - */ - arm_status arm_fir_interpolate_init_q15( - arm_fir_interpolate_instance_q15 * S, - uint8_t L, - uint16_t numTaps, - q15_t * pCoeffs, - q15_t * pState, - uint32_t blockSize); - - - /** - * @brief Processing function for the Q31 FIR interpolator. - * @param[in] S points to an instance of the Q15 FIR interpolator structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of input samples to process per call. - */ - void arm_fir_interpolate_q31( - const arm_fir_interpolate_instance_q31 * S, - q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the Q31 FIR interpolator. - * @param[in,out] S points to an instance of the Q31 FIR interpolator structure. - * @param[in] L upsample factor. - * @param[in] numTaps number of filter coefficients in the filter. - * @param[in] pCoeffs points to the filter coefficient buffer. - * @param[in] pState points to the state buffer. - * @param[in] blockSize number of input samples to process per call. - * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if - * the filter length numTaps is not a multiple of the interpolation factor L. - */ - arm_status arm_fir_interpolate_init_q31( - arm_fir_interpolate_instance_q31 * S, - uint8_t L, - uint16_t numTaps, - q31_t * pCoeffs, - q31_t * pState, - uint32_t blockSize); - - - /** - * @brief Processing function for the floating-point FIR interpolator. - * @param[in] S points to an instance of the floating-point FIR interpolator structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of input samples to process per call. - */ - void arm_fir_interpolate_f32( - const arm_fir_interpolate_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the floating-point FIR interpolator. - * @param[in,out] S points to an instance of the floating-point FIR interpolator structure. - * @param[in] L upsample factor. - * @param[in] numTaps number of filter coefficients in the filter. - * @param[in] pCoeffs points to the filter coefficient buffer. - * @param[in] pState points to the state buffer. - * @param[in] blockSize number of input samples to process per call. - * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if - * the filter length numTaps is not a multiple of the interpolation factor L. - */ - arm_status arm_fir_interpolate_init_f32( - arm_fir_interpolate_instance_f32 * S, - uint8_t L, - uint16_t numTaps, - float32_t * pCoeffs, - float32_t * pState, - uint32_t blockSize); - - - /** - * @brief Instance structure for the high precision Q31 Biquad cascade filter. - */ - typedef struct - { - uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - q63_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ - q31_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ - uint8_t postShift; /**< additional shift, in bits, applied to each output sample. */ - } arm_biquad_cas_df1_32x64_ins_q31; - - - /** - * @param[in] S points to an instance of the high precision Q31 Biquad cascade filter structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] blockSize number of samples to process. - */ - void arm_biquad_cas_df1_32x64_q31( - const arm_biquad_cas_df1_32x64_ins_q31 * S, - q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @param[in,out] S points to an instance of the high precision Q31 Biquad cascade filter structure. - * @param[in] numStages number of 2nd order stages in the filter. - * @param[in] pCoeffs points to the filter coefficients. - * @param[in] pState points to the state buffer. - * @param[in] postShift shift to be applied to the output. Varies according to the coefficients format - */ - void arm_biquad_cas_df1_32x64_init_q31( - arm_biquad_cas_df1_32x64_ins_q31 * S, - uint8_t numStages, - q31_t * pCoeffs, - q63_t * pState, - uint8_t postShift); - - - /** - * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. - */ - typedef struct - { - uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - float32_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ - float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ - } arm_biquad_cascade_df2T_instance_f32; - - /** - * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. - */ - typedef struct - { - uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - float32_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ - float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ - } arm_biquad_cascade_stereo_df2T_instance_f32; - - /** - * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. - */ - typedef struct - { - uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - float64_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ - float64_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ - } arm_biquad_cascade_df2T_instance_f64; - - - /** - * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. - * @param[in] S points to an instance of the filter data structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] blockSize number of samples to process. - */ - void arm_biquad_cascade_df2T_f32( - const arm_biquad_cascade_df2T_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. 2 channels - * @param[in] S points to an instance of the filter data structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] blockSize number of samples to process. - */ - void arm_biquad_cascade_stereo_df2T_f32( - const arm_biquad_cascade_stereo_df2T_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. - * @param[in] S points to an instance of the filter data structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] blockSize number of samples to process. - */ - void arm_biquad_cascade_df2T_f64( - const arm_biquad_cascade_df2T_instance_f64 * S, - float64_t * pSrc, - float64_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. - * @param[in,out] S points to an instance of the filter data structure. - * @param[in] numStages number of 2nd order stages in the filter. - * @param[in] pCoeffs points to the filter coefficients. - * @param[in] pState points to the state buffer. - */ - void arm_biquad_cascade_df2T_init_f32( - arm_biquad_cascade_df2T_instance_f32 * S, - uint8_t numStages, - float32_t * pCoeffs, - float32_t * pState); - - - /** - * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. - * @param[in,out] S points to an instance of the filter data structure. - * @param[in] numStages number of 2nd order stages in the filter. - * @param[in] pCoeffs points to the filter coefficients. - * @param[in] pState points to the state buffer. - */ - void arm_biquad_cascade_stereo_df2T_init_f32( - arm_biquad_cascade_stereo_df2T_instance_f32 * S, - uint8_t numStages, - float32_t * pCoeffs, - float32_t * pState); - - - /** - * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. - * @param[in,out] S points to an instance of the filter data structure. - * @param[in] numStages number of 2nd order stages in the filter. - * @param[in] pCoeffs points to the filter coefficients. - * @param[in] pState points to the state buffer. - */ - void arm_biquad_cascade_df2T_init_f64( - arm_biquad_cascade_df2T_instance_f64 * S, - uint8_t numStages, - float64_t * pCoeffs, - float64_t * pState); - - - /** - * @brief Instance structure for the Q15 FIR lattice filter. - */ - typedef struct - { - uint16_t numStages; /**< number of filter stages. */ - q15_t *pState; /**< points to the state variable array. The array is of length numStages. */ - q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ - } arm_fir_lattice_instance_q15; - - /** - * @brief Instance structure for the Q31 FIR lattice filter. - */ - typedef struct - { - uint16_t numStages; /**< number of filter stages. */ - q31_t *pState; /**< points to the state variable array. The array is of length numStages. */ - q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ - } arm_fir_lattice_instance_q31; - - /** - * @brief Instance structure for the floating-point FIR lattice filter. - */ - typedef struct - { - uint16_t numStages; /**< number of filter stages. */ - float32_t *pState; /**< points to the state variable array. The array is of length numStages. */ - float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ - } arm_fir_lattice_instance_f32; - - - /** - * @brief Initialization function for the Q15 FIR lattice filter. - * @param[in] S points to an instance of the Q15 FIR lattice structure. - * @param[in] numStages number of filter stages. - * @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages. - * @param[in] pState points to the state buffer. The array is of length numStages. - */ - void arm_fir_lattice_init_q15( - arm_fir_lattice_instance_q15 * S, - uint16_t numStages, - q15_t * pCoeffs, - q15_t * pState); - - - /** - * @brief Processing function for the Q15 FIR lattice filter. - * @param[in] S points to an instance of the Q15 FIR lattice structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_fir_lattice_q15( - const arm_fir_lattice_instance_q15 * S, - q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the Q31 FIR lattice filter. - * @param[in] S points to an instance of the Q31 FIR lattice structure. - * @param[in] numStages number of filter stages. - * @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages. - * @param[in] pState points to the state buffer. The array is of length numStages. - */ - void arm_fir_lattice_init_q31( - arm_fir_lattice_instance_q31 * S, - uint16_t numStages, - q31_t * pCoeffs, - q31_t * pState); - - - /** - * @brief Processing function for the Q31 FIR lattice filter. - * @param[in] S points to an instance of the Q31 FIR lattice structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] blockSize number of samples to process. - */ - void arm_fir_lattice_q31( - const arm_fir_lattice_instance_q31 * S, - q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - -/** - * @brief Initialization function for the floating-point FIR lattice filter. - * @param[in] S points to an instance of the floating-point FIR lattice structure. - * @param[in] numStages number of filter stages. - * @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages. - * @param[in] pState points to the state buffer. The array is of length numStages. - */ - void arm_fir_lattice_init_f32( - arm_fir_lattice_instance_f32 * S, - uint16_t numStages, - float32_t * pCoeffs, - float32_t * pState); - - - /** - * @brief Processing function for the floating-point FIR lattice filter. - * @param[in] S points to an instance of the floating-point FIR lattice structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] blockSize number of samples to process. - */ - void arm_fir_lattice_f32( - const arm_fir_lattice_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Instance structure for the Q15 IIR lattice filter. - */ - typedef struct - { - uint16_t numStages; /**< number of stages in the filter. */ - q15_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ - q15_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ - q15_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ - } arm_iir_lattice_instance_q15; - - /** - * @brief Instance structure for the Q31 IIR lattice filter. - */ - typedef struct - { - uint16_t numStages; /**< number of stages in the filter. */ - q31_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ - q31_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ - q31_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ - } arm_iir_lattice_instance_q31; - - /** - * @brief Instance structure for the floating-point IIR lattice filter. - */ - typedef struct - { - uint16_t numStages; /**< number of stages in the filter. */ - float32_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ - float32_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ - float32_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ - } arm_iir_lattice_instance_f32; - - - /** - * @brief Processing function for the floating-point IIR lattice filter. - * @param[in] S points to an instance of the floating-point IIR lattice structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_iir_lattice_f32( - const arm_iir_lattice_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the floating-point IIR lattice filter. - * @param[in] S points to an instance of the floating-point IIR lattice structure. - * @param[in] numStages number of stages in the filter. - * @param[in] pkCoeffs points to the reflection coefficient buffer. The array is of length numStages. - * @param[in] pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1. - * @param[in] pState points to the state buffer. The array is of length numStages+blockSize-1. - * @param[in] blockSize number of samples to process. - */ - void arm_iir_lattice_init_f32( - arm_iir_lattice_instance_f32 * S, - uint16_t numStages, - float32_t * pkCoeffs, - float32_t * pvCoeffs, - float32_t * pState, - uint32_t blockSize); - - - /** - * @brief Processing function for the Q31 IIR lattice filter. - * @param[in] S points to an instance of the Q31 IIR lattice structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_iir_lattice_q31( - const arm_iir_lattice_instance_q31 * S, - q31_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Initialization function for the Q31 IIR lattice filter. - * @param[in] S points to an instance of the Q31 IIR lattice structure. - * @param[in] numStages number of stages in the filter. - * @param[in] pkCoeffs points to the reflection coefficient buffer. The array is of length numStages. - * @param[in] pvCoeffs points to the ladder coefficient buffer. The array is of length numStages+1. - * @param[in] pState points to the state buffer. The array is of length numStages+blockSize. - * @param[in] blockSize number of samples to process. - */ - void arm_iir_lattice_init_q31( - arm_iir_lattice_instance_q31 * S, - uint16_t numStages, - q31_t * pkCoeffs, - q31_t * pvCoeffs, - q31_t * pState, - uint32_t blockSize); - - - /** - * @brief Processing function for the Q15 IIR lattice filter. - * @param[in] S points to an instance of the Q15 IIR lattice structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data. - * @param[in] blockSize number of samples to process. - */ - void arm_iir_lattice_q15( - const arm_iir_lattice_instance_q15 * S, - q15_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - -/** - * @brief Initialization function for the Q15 IIR lattice filter. - * @param[in] S points to an instance of the fixed-point Q15 IIR lattice structure. - * @param[in] numStages number of stages in the filter. - * @param[in] pkCoeffs points to reflection coefficient buffer. The array is of length numStages. - * @param[in] pvCoeffs points to ladder coefficient buffer. The array is of length numStages+1. - * @param[in] pState points to state buffer. The array is of length numStages+blockSize. - * @param[in] blockSize number of samples to process per call. - */ - void arm_iir_lattice_init_q15( - arm_iir_lattice_instance_q15 * S, - uint16_t numStages, - q15_t * pkCoeffs, - q15_t * pvCoeffs, - q15_t * pState, - uint32_t blockSize); - - - /** - * @brief Instance structure for the floating-point LMS filter. - */ - typedef struct - { - uint16_t numTaps; /**< number of coefficients in the filter. */ - float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ - float32_t mu; /**< step size that controls filter coefficient updates. */ - } arm_lms_instance_f32; - - - /** - * @brief Processing function for floating-point LMS filter. - * @param[in] S points to an instance of the floating-point LMS filter structure. - * @param[in] pSrc points to the block of input data. - * @param[in] pRef points to the block of reference data. - * @param[out] pOut points to the block of output data. - * @param[out] pErr points to the block of error data. - * @param[in] blockSize number of samples to process. - */ - void arm_lms_f32( - const arm_lms_instance_f32 * S, - float32_t * pSrc, - float32_t * pRef, - float32_t * pOut, - float32_t * pErr, - uint32_t blockSize); - - - /** - * @brief Initialization function for floating-point LMS filter. - * @param[in] S points to an instance of the floating-point LMS filter structure. - * @param[in] numTaps number of filter coefficients. - * @param[in] pCoeffs points to the coefficient buffer. - * @param[in] pState points to state buffer. - * @param[in] mu step size that controls filter coefficient updates. - * @param[in] blockSize number of samples to process. - */ - void arm_lms_init_f32( - arm_lms_instance_f32 * S, - uint16_t numTaps, - float32_t * pCoeffs, - float32_t * pState, - float32_t mu, - uint32_t blockSize); - - - /** - * @brief Instance structure for the Q15 LMS filter. - */ - typedef struct - { - uint16_t numTaps; /**< number of coefficients in the filter. */ - q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ - q15_t mu; /**< step size that controls filter coefficient updates. */ - uint32_t postShift; /**< bit shift applied to coefficients. */ - } arm_lms_instance_q15; - - - /** - * @brief Initialization function for the Q15 LMS filter. - * @param[in] S points to an instance of the Q15 LMS filter structure. - * @param[in] numTaps number of filter coefficients. - * @param[in] pCoeffs points to the coefficient buffer. - * @param[in] pState points to the state buffer. - * @param[in] mu step size that controls filter coefficient updates. - * @param[in] blockSize number of samples to process. - * @param[in] postShift bit shift applied to coefficients. - */ - void arm_lms_init_q15( - arm_lms_instance_q15 * S, - uint16_t numTaps, - q15_t * pCoeffs, - q15_t * pState, - q15_t mu, - uint32_t blockSize, - uint32_t postShift); - - - /** - * @brief Processing function for Q15 LMS filter. - * @param[in] S points to an instance of the Q15 LMS filter structure. - * @param[in] pSrc points to the block of input data. - * @param[in] pRef points to the block of reference data. - * @param[out] pOut points to the block of output data. - * @param[out] pErr points to the block of error data. - * @param[in] blockSize number of samples to process. - */ - void arm_lms_q15( - const arm_lms_instance_q15 * S, - q15_t * pSrc, - q15_t * pRef, - q15_t * pOut, - q15_t * pErr, - uint32_t blockSize); - - - /** - * @brief Instance structure for the Q31 LMS filter. - */ - typedef struct - { - uint16_t numTaps; /**< number of coefficients in the filter. */ - q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ - q31_t mu; /**< step size that controls filter coefficient updates. */ - uint32_t postShift; /**< bit shift applied to coefficients. */ - } arm_lms_instance_q31; - - - /** - * @brief Processing function for Q31 LMS filter. - * @param[in] S points to an instance of the Q15 LMS filter structure. - * @param[in] pSrc points to the block of input data. - * @param[in] pRef points to the block of reference data. - * @param[out] pOut points to the block of output data. - * @param[out] pErr points to the block of error data. - * @param[in] blockSize number of samples to process. - */ - void arm_lms_q31( - const arm_lms_instance_q31 * S, - q31_t * pSrc, - q31_t * pRef, - q31_t * pOut, - q31_t * pErr, - uint32_t blockSize); - - - /** - * @brief Initialization function for Q31 LMS filter. - * @param[in] S points to an instance of the Q31 LMS filter structure. - * @param[in] numTaps number of filter coefficients. - * @param[in] pCoeffs points to coefficient buffer. - * @param[in] pState points to state buffer. - * @param[in] mu step size that controls filter coefficient updates. - * @param[in] blockSize number of samples to process. - * @param[in] postShift bit shift applied to coefficients. - */ - void arm_lms_init_q31( - arm_lms_instance_q31 * S, - uint16_t numTaps, - q31_t * pCoeffs, - q31_t * pState, - q31_t mu, - uint32_t blockSize, - uint32_t postShift); - - - /** - * @brief Instance structure for the floating-point normalized LMS filter. - */ - typedef struct - { - uint16_t numTaps; /**< number of coefficients in the filter. */ - float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ - float32_t mu; /**< step size that control filter coefficient updates. */ - float32_t energy; /**< saves previous frame energy. */ - float32_t x0; /**< saves previous input sample. */ - } arm_lms_norm_instance_f32; - - - /** - * @brief Processing function for floating-point normalized LMS filter. - * @param[in] S points to an instance of the floating-point normalized LMS filter structure. - * @param[in] pSrc points to the block of input data. - * @param[in] pRef points to the block of reference data. - * @param[out] pOut points to the block of output data. - * @param[out] pErr points to the block of error data. - * @param[in] blockSize number of samples to process. - */ - void arm_lms_norm_f32( - arm_lms_norm_instance_f32 * S, - float32_t * pSrc, - float32_t * pRef, - float32_t * pOut, - float32_t * pErr, - uint32_t blockSize); - - - /** - * @brief Initialization function for floating-point normalized LMS filter. - * @param[in] S points to an instance of the floating-point LMS filter structure. - * @param[in] numTaps number of filter coefficients. - * @param[in] pCoeffs points to coefficient buffer. - * @param[in] pState points to state buffer. - * @param[in] mu step size that controls filter coefficient updates. - * @param[in] blockSize number of samples to process. - */ - void arm_lms_norm_init_f32( - arm_lms_norm_instance_f32 * S, - uint16_t numTaps, - float32_t * pCoeffs, - float32_t * pState, - float32_t mu, - uint32_t blockSize); - - - /** - * @brief Instance structure for the Q31 normalized LMS filter. - */ - typedef struct - { - uint16_t numTaps; /**< number of coefficients in the filter. */ - q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ - q31_t mu; /**< step size that controls filter coefficient updates. */ - uint8_t postShift; /**< bit shift applied to coefficients. */ - q31_t *recipTable; /**< points to the reciprocal initial value table. */ - q31_t energy; /**< saves previous frame energy. */ - q31_t x0; /**< saves previous input sample. */ - } arm_lms_norm_instance_q31; - - - /** - * @brief Processing function for Q31 normalized LMS filter. - * @param[in] S points to an instance of the Q31 normalized LMS filter structure. - * @param[in] pSrc points to the block of input data. - * @param[in] pRef points to the block of reference data. - * @param[out] pOut points to the block of output data. - * @param[out] pErr points to the block of error data. - * @param[in] blockSize number of samples to process. - */ - void arm_lms_norm_q31( - arm_lms_norm_instance_q31 * S, - q31_t * pSrc, - q31_t * pRef, - q31_t * pOut, - q31_t * pErr, - uint32_t blockSize); - - - /** - * @brief Initialization function for Q31 normalized LMS filter. - * @param[in] S points to an instance of the Q31 normalized LMS filter structure. - * @param[in] numTaps number of filter coefficients. - * @param[in] pCoeffs points to coefficient buffer. - * @param[in] pState points to state buffer. - * @param[in] mu step size that controls filter coefficient updates. - * @param[in] blockSize number of samples to process. - * @param[in] postShift bit shift applied to coefficients. - */ - void arm_lms_norm_init_q31( - arm_lms_norm_instance_q31 * S, - uint16_t numTaps, - q31_t * pCoeffs, - q31_t * pState, - q31_t mu, - uint32_t blockSize, - uint8_t postShift); - - - /** - * @brief Instance structure for the Q15 normalized LMS filter. - */ - typedef struct - { - uint16_t numTaps; /**< Number of coefficients in the filter. */ - q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ - q15_t mu; /**< step size that controls filter coefficient updates. */ - uint8_t postShift; /**< bit shift applied to coefficients. */ - q15_t *recipTable; /**< Points to the reciprocal initial value table. */ - q15_t energy; /**< saves previous frame energy. */ - q15_t x0; /**< saves previous input sample. */ - } arm_lms_norm_instance_q15; - - - /** - * @brief Processing function for Q15 normalized LMS filter. - * @param[in] S points to an instance of the Q15 normalized LMS filter structure. - * @param[in] pSrc points to the block of input data. - * @param[in] pRef points to the block of reference data. - * @param[out] pOut points to the block of output data. - * @param[out] pErr points to the block of error data. - * @param[in] blockSize number of samples to process. - */ - void arm_lms_norm_q15( - arm_lms_norm_instance_q15 * S, - q15_t * pSrc, - q15_t * pRef, - q15_t * pOut, - q15_t * pErr, - uint32_t blockSize); - - - /** - * @brief Initialization function for Q15 normalized LMS filter. - * @param[in] S points to an instance of the Q15 normalized LMS filter structure. - * @param[in] numTaps number of filter coefficients. - * @param[in] pCoeffs points to coefficient buffer. - * @param[in] pState points to state buffer. - * @param[in] mu step size that controls filter coefficient updates. - * @param[in] blockSize number of samples to process. - * @param[in] postShift bit shift applied to coefficients. - */ - void arm_lms_norm_init_q15( - arm_lms_norm_instance_q15 * S, - uint16_t numTaps, - q15_t * pCoeffs, - q15_t * pState, - q15_t mu, - uint32_t blockSize, - uint8_t postShift); - - - /** - * @brief Correlation of floating-point sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. - */ - void arm_correlate_f32( - float32_t * pSrcA, - uint32_t srcALen, - float32_t * pSrcB, - uint32_t srcBLen, - float32_t * pDst); - - - /** - * @brief Correlation of Q15 sequences - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. - * @param[in] pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. - */ - void arm_correlate_opt_q15( - q15_t * pSrcA, - uint32_t srcALen, - q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst, - q15_t * pScratch); - - - /** - * @brief Correlation of Q15 sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. - */ - - void arm_correlate_q15( - q15_t * pSrcA, - uint32_t srcALen, - q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst); - - - /** - * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. - */ - - void arm_correlate_fast_q15( - q15_t * pSrcA, - uint32_t srcALen, - q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst); - - - /** - * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. - * @param[in] pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. - */ - void arm_correlate_fast_opt_q15( - q15_t * pSrcA, - uint32_t srcALen, - q15_t * pSrcB, - uint32_t srcBLen, - q15_t * pDst, - q15_t * pScratch); - - - /** - * @brief Correlation of Q31 sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. - */ - void arm_correlate_q31( - q31_t * pSrcA, - uint32_t srcALen, - q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst); - - - /** - * @brief Correlation of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. - */ - void arm_correlate_fast_q31( - q31_t * pSrcA, - uint32_t srcALen, - q31_t * pSrcB, - uint32_t srcBLen, - q31_t * pDst); - - - /** - * @brief Correlation of Q7 sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. - * @param[in] pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. - * @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). - */ - void arm_correlate_opt_q7( - q7_t * pSrcA, - uint32_t srcALen, - q7_t * pSrcB, - uint32_t srcBLen, - q7_t * pDst, - q15_t * pScratch1, - q15_t * pScratch2); - - - /** - * @brief Correlation of Q7 sequences. - * @param[in] pSrcA points to the first input sequence. - * @param[in] srcALen length of the first input sequence. - * @param[in] pSrcB points to the second input sequence. - * @param[in] srcBLen length of the second input sequence. - * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. - */ - void arm_correlate_q7( - q7_t * pSrcA, - uint32_t srcALen, - q7_t * pSrcB, - uint32_t srcBLen, - q7_t * pDst); - - - /** - * @brief Instance structure for the floating-point sparse FIR filter. - */ - typedef struct - { - uint16_t numTaps; /**< number of coefficients in the filter. */ - uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ - float32_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ - float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ - int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ - } arm_fir_sparse_instance_f32; - - /** - * @brief Instance structure for the Q31 sparse FIR filter. - */ - typedef struct - { - uint16_t numTaps; /**< number of coefficients in the filter. */ - uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ - q31_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ - q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ - int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ - } arm_fir_sparse_instance_q31; - - /** - * @brief Instance structure for the Q15 sparse FIR filter. - */ - typedef struct - { - uint16_t numTaps; /**< number of coefficients in the filter. */ - uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ - q15_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ - q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ - int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ - } arm_fir_sparse_instance_q15; - - /** - * @brief Instance structure for the Q7 sparse FIR filter. - */ - typedef struct - { - uint16_t numTaps; /**< number of coefficients in the filter. */ - uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ - q7_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ - q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ - int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ - } arm_fir_sparse_instance_q7; - - - /** - * @brief Processing function for the floating-point sparse FIR filter. - * @param[in] S points to an instance of the floating-point sparse FIR structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] pScratchIn points to a temporary buffer of size blockSize. - * @param[in] blockSize number of input samples to process per call. - */ - void arm_fir_sparse_f32( - arm_fir_sparse_instance_f32 * S, - float32_t * pSrc, - float32_t * pDst, - float32_t * pScratchIn, - uint32_t blockSize); - - - /** - * @brief Initialization function for the floating-point sparse FIR filter. - * @param[in,out] S points to an instance of the floating-point sparse FIR structure. - * @param[in] numTaps number of nonzero coefficients in the filter. - * @param[in] pCoeffs points to the array of filter coefficients. - * @param[in] pState points to the state buffer. - * @param[in] pTapDelay points to the array of offset times. - * @param[in] maxDelay maximum offset time supported. - * @param[in] blockSize number of samples that will be processed per block. - */ - void arm_fir_sparse_init_f32( - arm_fir_sparse_instance_f32 * S, - uint16_t numTaps, - float32_t * pCoeffs, - float32_t * pState, - int32_t * pTapDelay, - uint16_t maxDelay, - uint32_t blockSize); - - - /** - * @brief Processing function for the Q31 sparse FIR filter. - * @param[in] S points to an instance of the Q31 sparse FIR structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] pScratchIn points to a temporary buffer of size blockSize. - * @param[in] blockSize number of input samples to process per call. - */ - void arm_fir_sparse_q31( - arm_fir_sparse_instance_q31 * S, - q31_t * pSrc, - q31_t * pDst, - q31_t * pScratchIn, - uint32_t blockSize); - - - /** - * @brief Initialization function for the Q31 sparse FIR filter. - * @param[in,out] S points to an instance of the Q31 sparse FIR structure. - * @param[in] numTaps number of nonzero coefficients in the filter. - * @param[in] pCoeffs points to the array of filter coefficients. - * @param[in] pState points to the state buffer. - * @param[in] pTapDelay points to the array of offset times. - * @param[in] maxDelay maximum offset time supported. - * @param[in] blockSize number of samples that will be processed per block. - */ - void arm_fir_sparse_init_q31( - arm_fir_sparse_instance_q31 * S, - uint16_t numTaps, - q31_t * pCoeffs, - q31_t * pState, - int32_t * pTapDelay, - uint16_t maxDelay, - uint32_t blockSize); - - - /** - * @brief Processing function for the Q15 sparse FIR filter. - * @param[in] S points to an instance of the Q15 sparse FIR structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] pScratchIn points to a temporary buffer of size blockSize. - * @param[in] pScratchOut points to a temporary buffer of size blockSize. - * @param[in] blockSize number of input samples to process per call. - */ - void arm_fir_sparse_q15( - arm_fir_sparse_instance_q15 * S, - q15_t * pSrc, - q15_t * pDst, - q15_t * pScratchIn, - q31_t * pScratchOut, - uint32_t blockSize); - - - /** - * @brief Initialization function for the Q15 sparse FIR filter. - * @param[in,out] S points to an instance of the Q15 sparse FIR structure. - * @param[in] numTaps number of nonzero coefficients in the filter. - * @param[in] pCoeffs points to the array of filter coefficients. - * @param[in] pState points to the state buffer. - * @param[in] pTapDelay points to the array of offset times. - * @param[in] maxDelay maximum offset time supported. - * @param[in] blockSize number of samples that will be processed per block. - */ - void arm_fir_sparse_init_q15( - arm_fir_sparse_instance_q15 * S, - uint16_t numTaps, - q15_t * pCoeffs, - q15_t * pState, - int32_t * pTapDelay, - uint16_t maxDelay, - uint32_t blockSize); - - - /** - * @brief Processing function for the Q7 sparse FIR filter. - * @param[in] S points to an instance of the Q7 sparse FIR structure. - * @param[in] pSrc points to the block of input data. - * @param[out] pDst points to the block of output data - * @param[in] pScratchIn points to a temporary buffer of size blockSize. - * @param[in] pScratchOut points to a temporary buffer of size blockSize. - * @param[in] blockSize number of input samples to process per call. - */ - void arm_fir_sparse_q7( - arm_fir_sparse_instance_q7 * S, - q7_t * pSrc, - q7_t * pDst, - q7_t * pScratchIn, - q31_t * pScratchOut, - uint32_t blockSize); - - - /** - * @brief Initialization function for the Q7 sparse FIR filter. - * @param[in,out] S points to an instance of the Q7 sparse FIR structure. - * @param[in] numTaps number of nonzero coefficients in the filter. - * @param[in] pCoeffs points to the array of filter coefficients. - * @param[in] pState points to the state buffer. - * @param[in] pTapDelay points to the array of offset times. - * @param[in] maxDelay maximum offset time supported. - * @param[in] blockSize number of samples that will be processed per block. - */ - void arm_fir_sparse_init_q7( - arm_fir_sparse_instance_q7 * S, - uint16_t numTaps, - q7_t * pCoeffs, - q7_t * pState, - int32_t * pTapDelay, - uint16_t maxDelay, - uint32_t blockSize); - - - /** - * @brief Floating-point sin_cos function. - * @param[in] theta input value in degrees - * @param[out] pSinVal points to the processed sine output. - * @param[out] pCosVal points to the processed cos output. - */ - void arm_sin_cos_f32( - float32_t theta, - float32_t * pSinVal, - float32_t * pCosVal); - - - /** - * @brief Q31 sin_cos function. - * @param[in] theta scaled input value in degrees - * @param[out] pSinVal points to the processed sine output. - * @param[out] pCosVal points to the processed cosine output. - */ - void arm_sin_cos_q31( - q31_t theta, - q31_t * pSinVal, - q31_t * pCosVal); - - - /** - * @brief Floating-point complex conjugate. - * @param[in] pSrc points to the input vector - * @param[out] pDst points to the output vector - * @param[in] numSamples number of complex samples in each vector - */ - void arm_cmplx_conj_f32( - float32_t * pSrc, - float32_t * pDst, - uint32_t numSamples); - - /** - * @brief Q31 complex conjugate. - * @param[in] pSrc points to the input vector - * @param[out] pDst points to the output vector - * @param[in] numSamples number of complex samples in each vector - */ - void arm_cmplx_conj_q31( - q31_t * pSrc, - q31_t * pDst, - uint32_t numSamples); - - - /** - * @brief Q15 complex conjugate. - * @param[in] pSrc points to the input vector - * @param[out] pDst points to the output vector - * @param[in] numSamples number of complex samples in each vector - */ - void arm_cmplx_conj_q15( - q15_t * pSrc, - q15_t * pDst, - uint32_t numSamples); - - - /** - * @brief Floating-point complex magnitude squared - * @param[in] pSrc points to the complex input vector - * @param[out] pDst points to the real output vector - * @param[in] numSamples number of complex samples in the input vector - */ - void arm_cmplx_mag_squared_f32( - float32_t * pSrc, - float32_t * pDst, - uint32_t numSamples); - - - /** - * @brief Q31 complex magnitude squared - * @param[in] pSrc points to the complex input vector - * @param[out] pDst points to the real output vector - * @param[in] numSamples number of complex samples in the input vector - */ - void arm_cmplx_mag_squared_q31( - q31_t * pSrc, - q31_t * pDst, - uint32_t numSamples); - - - /** - * @brief Q15 complex magnitude squared - * @param[in] pSrc points to the complex input vector - * @param[out] pDst points to the real output vector - * @param[in] numSamples number of complex samples in the input vector - */ - void arm_cmplx_mag_squared_q15( - q15_t * pSrc, - q15_t * pDst, - uint32_t numSamples); - - - /** - * @ingroup groupController - */ - - /** - * @defgroup PID PID Motor Control - * - * A Proportional Integral Derivative (PID) controller is a generic feedback control - * loop mechanism widely used in industrial control systems. - * A PID controller is the most commonly used type of feedback controller. - * - * This set of functions implements (PID) controllers - * for Q15, Q31, and floating-point data types. The functions operate on a single sample - * of data and each call to the function returns a single processed value. - * S points to an instance of the PID control data structure. in - * is the input sample value. The functions return the output value. - * - * \par Algorithm: - *
-   *    y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]
-   *    A0 = Kp + Ki + Kd
-   *    A1 = (-Kp ) - (2 * Kd )
-   *    A2 = Kd  
- * - * \par - * where \c Kp is proportional constant, \c Ki is Integral constant and \c Kd is Derivative constant - * - * \par - * \image html PID.gif "Proportional Integral Derivative Controller" - * - * \par - * The PID controller calculates an "error" value as the difference between - * the measured output and the reference input. - * The controller attempts to minimize the error by adjusting the process control inputs. - * The proportional value determines the reaction to the current error, - * the integral value determines the reaction based on the sum of recent errors, - * and the derivative value determines the reaction based on the rate at which the error has been changing. - * - * \par Instance Structure - * The Gains A0, A1, A2 and state variables for a PID controller are stored together in an instance data structure. - * A separate instance structure must be defined for each PID Controller. - * There are separate instance structure declarations for each of the 3 supported data types. - * - * \par Reset Functions - * There is also an associated reset function for each data type which clears the state array. - * - * \par Initialization Functions - * There is also an associated initialization function for each data type. - * The initialization function performs the following operations: - * - Initializes the Gains A0, A1, A2 from Kp,Ki, Kd gains. - * - Zeros out the values in the state buffer. - * - * \par - * Instance structure cannot be placed into a const data section and it is recommended to use the initialization function. - * - * \par Fixed-Point Behavior - * Care must be taken when using the fixed-point versions of the PID Controller functions. - * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered. - * Refer to the function specific documentation below for usage guidelines. - */ - - /** - * @addtogroup PID - * @{ - */ - - /** - * @brief Process function for the floating-point PID Control. - * @param[in,out] S is an instance of the floating-point PID Control structure - * @param[in] in input sample to process - * @return out processed output sample. - */ - CMSIS_INLINE __STATIC_INLINE float32_t arm_pid_f32( - arm_pid_instance_f32 * S, - float32_t in) - { - float32_t out; - - /* y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2] */ - out = (S->A0 * in) + - (S->A1 * S->state[0]) + (S->A2 * S->state[1]) + (S->state[2]); - - /* Update state */ - S->state[1] = S->state[0]; - S->state[0] = in; - S->state[2] = out; - - /* return to application */ - return (out); - - } - - /** - * @brief Process function for the Q31 PID Control. - * @param[in,out] S points to an instance of the Q31 PID Control structure - * @param[in] in input sample to process - * @return out processed output sample. - * - * Scaling and Overflow Behavior: - * \par - * The function is implemented using an internal 64-bit accumulator. - * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit. - * Thus, if the accumulator result overflows it wraps around rather than clip. - * In order to avoid overflows completely the input signal must be scaled down by 2 bits as there are four additions. - * After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format. - */ - CMSIS_INLINE __STATIC_INLINE q31_t arm_pid_q31( - arm_pid_instance_q31 * S, - q31_t in) - { - q63_t acc; - q31_t out; - - /* acc = A0 * x[n] */ - acc = (q63_t) S->A0 * in; - - /* acc += A1 * x[n-1] */ - acc += (q63_t) S->A1 * S->state[0]; - - /* acc += A2 * x[n-2] */ - acc += (q63_t) S->A2 * S->state[1]; - - /* convert output to 1.31 format to add y[n-1] */ - out = (q31_t) (acc >> 31u); - - /* out += y[n-1] */ - out += S->state[2]; - - /* Update state */ - S->state[1] = S->state[0]; - S->state[0] = in; - S->state[2] = out; - - /* return to application */ - return (out); - } - - - /** - * @brief Process function for the Q15 PID Control. - * @param[in,out] S points to an instance of the Q15 PID Control structure - * @param[in] in input sample to process - * @return out processed output sample. - * - * Scaling and Overflow Behavior: - * \par - * The function is implemented using a 64-bit internal accumulator. - * Both Gains and state variables are represented in 1.15 format and multiplications yield a 2.30 result. - * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format. - * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved. - * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. - * Lastly, the accumulator is saturated to yield a result in 1.15 format. - */ - CMSIS_INLINE __STATIC_INLINE q15_t arm_pid_q15( - arm_pid_instance_q15 * S, - q15_t in) - { - q63_t acc; - q15_t out; - -#if defined (ARM_MATH_DSP) - __SIMD32_TYPE *vstate; - - /* Implementation of PID controller */ - - /* acc = A0 * x[n] */ - acc = (q31_t) __SMUAD((uint32_t)S->A0, (uint32_t)in); - - /* acc += A1 * x[n-1] + A2 * x[n-2] */ - vstate = __SIMD32_CONST(S->state); - acc = (q63_t)__SMLALD((uint32_t)S->A1, (uint32_t)*vstate, (uint64_t)acc); -#else - /* acc = A0 * x[n] */ - acc = ((q31_t) S->A0) * in; - - /* acc += A1 * x[n-1] + A2 * x[n-2] */ - acc += (q31_t) S->A1 * S->state[0]; - acc += (q31_t) S->A2 * S->state[1]; -#endif - - /* acc += y[n-1] */ - acc += (q31_t) S->state[2] << 15; - - /* saturate the output */ - out = (q15_t) (__SSAT((acc >> 15), 16)); - - /* Update state */ - S->state[1] = S->state[0]; - S->state[0] = in; - S->state[2] = out; - - /* return to application */ - return (out); - } - - /** - * @} end of PID group - */ - - - /** - * @brief Floating-point matrix inverse. - * @param[in] src points to the instance of the input floating-point matrix structure. - * @param[out] dst points to the instance of the output floating-point matrix structure. - * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match. - * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR. - */ - arm_status arm_mat_inverse_f32( - const arm_matrix_instance_f32 * src, - arm_matrix_instance_f32 * dst); - - - /** - * @brief Floating-point matrix inverse. - * @param[in] src points to the instance of the input floating-point matrix structure. - * @param[out] dst points to the instance of the output floating-point matrix structure. - * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match. - * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR. - */ - arm_status arm_mat_inverse_f64( - const arm_matrix_instance_f64 * src, - arm_matrix_instance_f64 * dst); - - - - /** - * @ingroup groupController - */ - - /** - * @defgroup clarke Vector Clarke Transform - * Forward Clarke transform converts the instantaneous stator phases into a two-coordinate time invariant vector. - * Generally the Clarke transform uses three-phase currents Ia, Ib and Ic to calculate currents - * in the two-phase orthogonal stator axis Ialpha and Ibeta. - * When Ialpha is superposed with Ia as shown in the figure below - * \image html clarke.gif Stator current space vector and its components in (a,b). - * and Ia + Ib + Ic = 0, in this condition Ialpha and Ibeta - * can be calculated using only Ia and Ib. - * - * The function operates on a single sample of data and each call to the function returns the processed output. - * The library provides separate functions for Q31 and floating-point data types. - * \par Algorithm - * \image html clarkeFormula.gif - * where Ia and Ib are the instantaneous stator phases and - * pIalpha and pIbeta are the two coordinates of time invariant vector. - * \par Fixed-Point Behavior - * Care must be taken when using the Q31 version of the Clarke transform. - * In particular, the overflow and saturation behavior of the accumulator used must be considered. - * Refer to the function specific documentation below for usage guidelines. - */ - - /** - * @addtogroup clarke - * @{ - */ - - /** - * - * @brief Floating-point Clarke transform - * @param[in] Ia input three-phase coordinate a - * @param[in] Ib input three-phase coordinate b - * @param[out] pIalpha points to output two-phase orthogonal vector axis alpha - * @param[out] pIbeta points to output two-phase orthogonal vector axis beta - */ - CMSIS_INLINE __STATIC_INLINE void arm_clarke_f32( - float32_t Ia, - float32_t Ib, - float32_t * pIalpha, - float32_t * pIbeta) - { - /* Calculate pIalpha using the equation, pIalpha = Ia */ - *pIalpha = Ia; - - /* Calculate pIbeta using the equation, pIbeta = (1/sqrt(3)) * Ia + (2/sqrt(3)) * Ib */ - *pIbeta = ((float32_t) 0.57735026919 * Ia + (float32_t) 1.15470053838 * Ib); - } - - - /** - * @brief Clarke transform for Q31 version - * @param[in] Ia input three-phase coordinate a - * @param[in] Ib input three-phase coordinate b - * @param[out] pIalpha points to output two-phase orthogonal vector axis alpha - * @param[out] pIbeta points to output two-phase orthogonal vector axis beta - * - * Scaling and Overflow Behavior: - * \par - * The function is implemented using an internal 32-bit accumulator. - * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. - * There is saturation on the addition, hence there is no risk of overflow. - */ - CMSIS_INLINE __STATIC_INLINE void arm_clarke_q31( - q31_t Ia, - q31_t Ib, - q31_t * pIalpha, - q31_t * pIbeta) - { - q31_t product1, product2; /* Temporary variables used to store intermediate results */ - - /* Calculating pIalpha from Ia by equation pIalpha = Ia */ - *pIalpha = Ia; - - /* Intermediate product is calculated by (1/(sqrt(3)) * Ia) */ - product1 = (q31_t) (((q63_t) Ia * 0x24F34E8B) >> 30); - - /* Intermediate product is calculated by (2/sqrt(3) * Ib) */ - product2 = (q31_t) (((q63_t) Ib * 0x49E69D16) >> 30); - - /* pIbeta is calculated by adding the intermediate products */ - *pIbeta = __QADD(product1, product2); - } - - /** - * @} end of clarke group - */ - - /** - * @brief Converts the elements of the Q7 vector to Q31 vector. - * @param[in] pSrc input pointer - * @param[out] pDst output pointer - * @param[in] blockSize number of samples to process - */ - void arm_q7_to_q31( - q7_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - - /** - * @ingroup groupController - */ - - /** - * @defgroup inv_clarke Vector Inverse Clarke Transform - * Inverse Clarke transform converts the two-coordinate time invariant vector into instantaneous stator phases. - * - * The function operates on a single sample of data and each call to the function returns the processed output. - * The library provides separate functions for Q31 and floating-point data types. - * \par Algorithm - * \image html clarkeInvFormula.gif - * where pIa and pIb are the instantaneous stator phases and - * Ialpha and Ibeta are the two coordinates of time invariant vector. - * \par Fixed-Point Behavior - * Care must be taken when using the Q31 version of the Clarke transform. - * In particular, the overflow and saturation behavior of the accumulator used must be considered. - * Refer to the function specific documentation below for usage guidelines. - */ - - /** - * @addtogroup inv_clarke - * @{ - */ - - /** - * @brief Floating-point Inverse Clarke transform - * @param[in] Ialpha input two-phase orthogonal vector axis alpha - * @param[in] Ibeta input two-phase orthogonal vector axis beta - * @param[out] pIa points to output three-phase coordinate a - * @param[out] pIb points to output three-phase coordinate b - */ - CMSIS_INLINE __STATIC_INLINE void arm_inv_clarke_f32( - float32_t Ialpha, - float32_t Ibeta, - float32_t * pIa, - float32_t * pIb) - { - /* Calculating pIa from Ialpha by equation pIa = Ialpha */ - *pIa = Ialpha; - - /* Calculating pIb from Ialpha and Ibeta by equation pIb = -(1/2) * Ialpha + (sqrt(3)/2) * Ibeta */ - *pIb = -0.5f * Ialpha + 0.8660254039f * Ibeta; - } - - - /** - * @brief Inverse Clarke transform for Q31 version - * @param[in] Ialpha input two-phase orthogonal vector axis alpha - * @param[in] Ibeta input two-phase orthogonal vector axis beta - * @param[out] pIa points to output three-phase coordinate a - * @param[out] pIb points to output three-phase coordinate b - * - * Scaling and Overflow Behavior: - * \par - * The function is implemented using an internal 32-bit accumulator. - * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. - * There is saturation on the subtraction, hence there is no risk of overflow. - */ - CMSIS_INLINE __STATIC_INLINE void arm_inv_clarke_q31( - q31_t Ialpha, - q31_t Ibeta, - q31_t * pIa, - q31_t * pIb) - { - q31_t product1, product2; /* Temporary variables used to store intermediate results */ - - /* Calculating pIa from Ialpha by equation pIa = Ialpha */ - *pIa = Ialpha; - - /* Intermediate product is calculated by (1/(2*sqrt(3)) * Ia) */ - product1 = (q31_t) (((q63_t) (Ialpha) * (0x40000000)) >> 31); - - /* Intermediate product is calculated by (1/sqrt(3) * pIb) */ - product2 = (q31_t) (((q63_t) (Ibeta) * (0x6ED9EBA1)) >> 31); - - /* pIb is calculated by subtracting the products */ - *pIb = __QSUB(product2, product1); - } - - /** - * @} end of inv_clarke group - */ - - /** - * @brief Converts the elements of the Q7 vector to Q15 vector. - * @param[in] pSrc input pointer - * @param[out] pDst output pointer - * @param[in] blockSize number of samples to process - */ - void arm_q7_to_q15( - q7_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - - - /** - * @ingroup groupController - */ - - /** - * @defgroup park Vector Park Transform - * - * Forward Park transform converts the input two-coordinate vector to flux and torque components. - * The Park transform can be used to realize the transformation of the Ialpha and the Ibeta currents - * from the stationary to the moving reference frame and control the spatial relationship between - * the stator vector current and rotor flux vector. - * If we consider the d axis aligned with the rotor flux, the diagram below shows the - * current vector and the relationship from the two reference frames: - * \image html park.gif "Stator current space vector and its component in (a,b) and in the d,q rotating reference frame" - * - * The function operates on a single sample of data and each call to the function returns the processed output. - * The library provides separate functions for Q31 and floating-point data types. - * \par Algorithm - * \image html parkFormula.gif - * where Ialpha and Ibeta are the stator vector components, - * pId and pIq are rotor vector components and cosVal and sinVal are the - * cosine and sine values of theta (rotor flux position). - * \par Fixed-Point Behavior - * Care must be taken when using the Q31 version of the Park transform. - * In particular, the overflow and saturation behavior of the accumulator used must be considered. - * Refer to the function specific documentation below for usage guidelines. - */ - - /** - * @addtogroup park - * @{ - */ - - /** - * @brief Floating-point Park transform - * @param[in] Ialpha input two-phase vector coordinate alpha - * @param[in] Ibeta input two-phase vector coordinate beta - * @param[out] pId points to output rotor reference frame d - * @param[out] pIq points to output rotor reference frame q - * @param[in] sinVal sine value of rotation angle theta - * @param[in] cosVal cosine value of rotation angle theta - * - * The function implements the forward Park transform. - * - */ - CMSIS_INLINE __STATIC_INLINE void arm_park_f32( - float32_t Ialpha, - float32_t Ibeta, - float32_t * pId, - float32_t * pIq, - float32_t sinVal, - float32_t cosVal) - { - /* Calculate pId using the equation, pId = Ialpha * cosVal + Ibeta * sinVal */ - *pId = Ialpha * cosVal + Ibeta * sinVal; - - /* Calculate pIq using the equation, pIq = - Ialpha * sinVal + Ibeta * cosVal */ - *pIq = -Ialpha * sinVal + Ibeta * cosVal; - } - - - /** - * @brief Park transform for Q31 version - * @param[in] Ialpha input two-phase vector coordinate alpha - * @param[in] Ibeta input two-phase vector coordinate beta - * @param[out] pId points to output rotor reference frame d - * @param[out] pIq points to output rotor reference frame q - * @param[in] sinVal sine value of rotation angle theta - * @param[in] cosVal cosine value of rotation angle theta - * - * Scaling and Overflow Behavior: - * \par - * The function is implemented using an internal 32-bit accumulator. - * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. - * There is saturation on the addition and subtraction, hence there is no risk of overflow. - */ - CMSIS_INLINE __STATIC_INLINE void arm_park_q31( - q31_t Ialpha, - q31_t Ibeta, - q31_t * pId, - q31_t * pIq, - q31_t sinVal, - q31_t cosVal) - { - q31_t product1, product2; /* Temporary variables used to store intermediate results */ - q31_t product3, product4; /* Temporary variables used to store intermediate results */ - - /* Intermediate product is calculated by (Ialpha * cosVal) */ - product1 = (q31_t) (((q63_t) (Ialpha) * (cosVal)) >> 31); - - /* Intermediate product is calculated by (Ibeta * sinVal) */ - product2 = (q31_t) (((q63_t) (Ibeta) * (sinVal)) >> 31); - - - /* Intermediate product is calculated by (Ialpha * sinVal) */ - product3 = (q31_t) (((q63_t) (Ialpha) * (sinVal)) >> 31); - - /* Intermediate product is calculated by (Ibeta * cosVal) */ - product4 = (q31_t) (((q63_t) (Ibeta) * (cosVal)) >> 31); - - /* Calculate pId by adding the two intermediate products 1 and 2 */ - *pId = __QADD(product1, product2); - - /* Calculate pIq by subtracting the two intermediate products 3 from 4 */ - *pIq = __QSUB(product4, product3); - } - - /** - * @} end of park group - */ - - /** - * @brief Converts the elements of the Q7 vector to floating-point vector. - * @param[in] pSrc is input pointer - * @param[out] pDst is output pointer - * @param[in] blockSize is the number of samples to process - */ - void arm_q7_to_float( - q7_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @ingroup groupController - */ - - /** - * @defgroup inv_park Vector Inverse Park transform - * Inverse Park transform converts the input flux and torque components to two-coordinate vector. - * - * The function operates on a single sample of data and each call to the function returns the processed output. - * The library provides separate functions for Q31 and floating-point data types. - * \par Algorithm - * \image html parkInvFormula.gif - * where pIalpha and pIbeta are the stator vector components, - * Id and Iq are rotor vector components and cosVal and sinVal are the - * cosine and sine values of theta (rotor flux position). - * \par Fixed-Point Behavior - * Care must be taken when using the Q31 version of the Park transform. - * In particular, the overflow and saturation behavior of the accumulator used must be considered. - * Refer to the function specific documentation below for usage guidelines. - */ - - /** - * @addtogroup inv_park - * @{ - */ - - /** - * @brief Floating-point Inverse Park transform - * @param[in] Id input coordinate of rotor reference frame d - * @param[in] Iq input coordinate of rotor reference frame q - * @param[out] pIalpha points to output two-phase orthogonal vector axis alpha - * @param[out] pIbeta points to output two-phase orthogonal vector axis beta - * @param[in] sinVal sine value of rotation angle theta - * @param[in] cosVal cosine value of rotation angle theta - */ - CMSIS_INLINE __STATIC_INLINE void arm_inv_park_f32( - float32_t Id, - float32_t Iq, - float32_t * pIalpha, - float32_t * pIbeta, - float32_t sinVal, - float32_t cosVal) - { - /* Calculate pIalpha using the equation, pIalpha = Id * cosVal - Iq * sinVal */ - *pIalpha = Id * cosVal - Iq * sinVal; - - /* Calculate pIbeta using the equation, pIbeta = Id * sinVal + Iq * cosVal */ - *pIbeta = Id * sinVal + Iq * cosVal; - } - - - /** - * @brief Inverse Park transform for Q31 version - * @param[in] Id input coordinate of rotor reference frame d - * @param[in] Iq input coordinate of rotor reference frame q - * @param[out] pIalpha points to output two-phase orthogonal vector axis alpha - * @param[out] pIbeta points to output two-phase orthogonal vector axis beta - * @param[in] sinVal sine value of rotation angle theta - * @param[in] cosVal cosine value of rotation angle theta - * - * Scaling and Overflow Behavior: - * \par - * The function is implemented using an internal 32-bit accumulator. - * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. - * There is saturation on the addition, hence there is no risk of overflow. - */ - CMSIS_INLINE __STATIC_INLINE void arm_inv_park_q31( - q31_t Id, - q31_t Iq, - q31_t * pIalpha, - q31_t * pIbeta, - q31_t sinVal, - q31_t cosVal) - { - q31_t product1, product2; /* Temporary variables used to store intermediate results */ - q31_t product3, product4; /* Temporary variables used to store intermediate results */ - - /* Intermediate product is calculated by (Id * cosVal) */ - product1 = (q31_t) (((q63_t) (Id) * (cosVal)) >> 31); - - /* Intermediate product is calculated by (Iq * sinVal) */ - product2 = (q31_t) (((q63_t) (Iq) * (sinVal)) >> 31); - - - /* Intermediate product is calculated by (Id * sinVal) */ - product3 = (q31_t) (((q63_t) (Id) * (sinVal)) >> 31); - - /* Intermediate product is calculated by (Iq * cosVal) */ - product4 = (q31_t) (((q63_t) (Iq) * (cosVal)) >> 31); - - /* Calculate pIalpha by using the two intermediate products 1 and 2 */ - *pIalpha = __QSUB(product1, product2); - - /* Calculate pIbeta by using the two intermediate products 3 and 4 */ - *pIbeta = __QADD(product4, product3); - } - - /** - * @} end of Inverse park group - */ - - - /** - * @brief Converts the elements of the Q31 vector to floating-point vector. - * @param[in] pSrc is input pointer - * @param[out] pDst is output pointer - * @param[in] blockSize is the number of samples to process - */ - void arm_q31_to_float( - q31_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - /** - * @ingroup groupInterpolation - */ - - /** - * @defgroup LinearInterpolate Linear Interpolation - * - * Linear interpolation is a method of curve fitting using linear polynomials. - * Linear interpolation works by effectively drawing a straight line between two neighboring samples and returning the appropriate point along that line - * - * \par - * \image html LinearInterp.gif "Linear interpolation" - * - * \par - * A Linear Interpolate function calculates an output value(y), for the input(x) - * using linear interpolation of the input values x0, x1( nearest input values) and the output values y0 and y1(nearest output values) - * - * \par Algorithm: - *
-   *       y = y0 + (x - x0) * ((y1 - y0)/(x1-x0))
-   *       where x0, x1 are nearest values of input x
-   *             y0, y1 are nearest values to output y
-   * 
- * - * \par - * This set of functions implements Linear interpolation process - * for Q7, Q15, Q31, and floating-point data types. The functions operate on a single - * sample of data and each call to the function returns a single processed value. - * S points to an instance of the Linear Interpolate function data structure. - * x is the input sample value. The functions returns the output value. - * - * \par - * if x is outside of the table boundary, Linear interpolation returns first value of the table - * if x is below input range and returns last value of table if x is above range. - */ - - /** - * @addtogroup LinearInterpolate - * @{ - */ - - /** - * @brief Process function for the floating-point Linear Interpolation Function. - * @param[in,out] S is an instance of the floating-point Linear Interpolation structure - * @param[in] x input sample to process - * @return y processed output sample. - * - */ - CMSIS_INLINE __STATIC_INLINE float32_t arm_linear_interp_f32( - arm_linear_interp_instance_f32 * S, - float32_t x) - { - float32_t y; - float32_t x0, x1; /* Nearest input values */ - float32_t y0, y1; /* Nearest output values */ - float32_t xSpacing = S->xSpacing; /* spacing between input values */ - int32_t i; /* Index variable */ - float32_t *pYData = S->pYData; /* pointer to output table */ - - /* Calculation of index */ - i = (int32_t) ((x - S->x1) / xSpacing); - - if (i < 0) - { - /* Iniatilize output for below specified range as least output value of table */ - y = pYData[0]; - } - else if ((uint32_t)i >= S->nValues) - { - /* Iniatilize output for above specified range as last output value of table */ - y = pYData[S->nValues - 1]; - } - else - { - /* Calculation of nearest input values */ - x0 = S->x1 + i * xSpacing; - x1 = S->x1 + (i + 1) * xSpacing; - - /* Read of nearest output values */ - y0 = pYData[i]; - y1 = pYData[i + 1]; - - /* Calculation of output */ - y = y0 + (x - x0) * ((y1 - y0) / (x1 - x0)); - - } - - /* returns output value */ - return (y); - } - - - /** - * - * @brief Process function for the Q31 Linear Interpolation Function. - * @param[in] pYData pointer to Q31 Linear Interpolation table - * @param[in] x input sample to process - * @param[in] nValues number of table values - * @return y processed output sample. - * - * \par - * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. - * This function can support maximum of table size 2^12. - * - */ - CMSIS_INLINE __STATIC_INLINE q31_t arm_linear_interp_q31( - q31_t * pYData, - q31_t x, - uint32_t nValues) - { - q31_t y; /* output */ - q31_t y0, y1; /* Nearest output values */ - q31_t fract; /* fractional part */ - int32_t index; /* Index to read nearest output values */ - - /* Input is in 12.20 format */ - /* 12 bits for the table index */ - /* Index value calculation */ - index = ((x & (q31_t)0xFFF00000) >> 20); - - if (index >= (int32_t)(nValues - 1)) - { - return (pYData[nValues - 1]); - } - else if (index < 0) - { - return (pYData[0]); - } - else - { - /* 20 bits for the fractional part */ - /* shift left by 11 to keep fract in 1.31 format */ - fract = (x & 0x000FFFFF) << 11; - - /* Read two nearest output values from the index in 1.31(q31) format */ - y0 = pYData[index]; - y1 = pYData[index + 1]; - - /* Calculation of y0 * (1-fract) and y is in 2.30 format */ - y = ((q31_t) ((q63_t) y0 * (0x7FFFFFFF - fract) >> 32)); - - /* Calculation of y0 * (1-fract) + y1 *fract and y is in 2.30 format */ - y += ((q31_t) (((q63_t) y1 * fract) >> 32)); - - /* Convert y to 1.31 format */ - return (y << 1u); - } - } - - - /** - * - * @brief Process function for the Q15 Linear Interpolation Function. - * @param[in] pYData pointer to Q15 Linear Interpolation table - * @param[in] x input sample to process - * @param[in] nValues number of table values - * @return y processed output sample. - * - * \par - * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. - * This function can support maximum of table size 2^12. - * - */ - CMSIS_INLINE __STATIC_INLINE q15_t arm_linear_interp_q15( - q15_t * pYData, - q31_t x, - uint32_t nValues) - { - q63_t y; /* output */ - q15_t y0, y1; /* Nearest output values */ - q31_t fract; /* fractional part */ - int32_t index; /* Index to read nearest output values */ - - /* Input is in 12.20 format */ - /* 12 bits for the table index */ - /* Index value calculation */ - index = ((x & (int32_t)0xFFF00000) >> 20); - - if (index >= (int32_t)(nValues - 1)) - { - return (pYData[nValues - 1]); - } - else if (index < 0) - { - return (pYData[0]); - } - else - { - /* 20 bits for the fractional part */ - /* fract is in 12.20 format */ - fract = (x & 0x000FFFFF); - - /* Read two nearest output values from the index */ - y0 = pYData[index]; - y1 = pYData[index + 1]; - - /* Calculation of y0 * (1-fract) and y is in 13.35 format */ - y = ((q63_t) y0 * (0xFFFFF - fract)); - - /* Calculation of (y0 * (1-fract) + y1 * fract) and y is in 13.35 format */ - y += ((q63_t) y1 * (fract)); - - /* convert y to 1.15 format */ - return (q15_t) (y >> 20); - } - } - - - /** - * - * @brief Process function for the Q7 Linear Interpolation Function. - * @param[in] pYData pointer to Q7 Linear Interpolation table - * @param[in] x input sample to process - * @param[in] nValues number of table values - * @return y processed output sample. - * - * \par - * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. - * This function can support maximum of table size 2^12. - */ - CMSIS_INLINE __STATIC_INLINE q7_t arm_linear_interp_q7( - q7_t * pYData, - q31_t x, - uint32_t nValues) - { - q31_t y; /* output */ - q7_t y0, y1; /* Nearest output values */ - q31_t fract; /* fractional part */ - uint32_t index; /* Index to read nearest output values */ - - /* Input is in 12.20 format */ - /* 12 bits for the table index */ - /* Index value calculation */ - if (x < 0) - { - return (pYData[0]); - } - index = (x >> 20) & 0xfff; - - if (index >= (nValues - 1)) - { - return (pYData[nValues - 1]); - } - else - { - /* 20 bits for the fractional part */ - /* fract is in 12.20 format */ - fract = (x & 0x000FFFFF); - - /* Read two nearest output values from the index and are in 1.7(q7) format */ - y0 = pYData[index]; - y1 = pYData[index + 1]; - - /* Calculation of y0 * (1-fract ) and y is in 13.27(q27) format */ - y = ((y0 * (0xFFFFF - fract))); - - /* Calculation of y1 * fract + y0 * (1-fract) and y is in 13.27(q27) format */ - y += (y1 * fract); - - /* convert y to 1.7(q7) format */ - return (q7_t) (y >> 20); - } - } - - /** - * @} end of LinearInterpolate group - */ - - /** - * @brief Fast approximation to the trigonometric sine function for floating-point data. - * @param[in] x input value in radians. - * @return sin(x). - */ - float32_t arm_sin_f32( - float32_t x); - - - /** - * @brief Fast approximation to the trigonometric sine function for Q31 data. - * @param[in] x Scaled input value in radians. - * @return sin(x). - */ - q31_t arm_sin_q31( - q31_t x); - - - /** - * @brief Fast approximation to the trigonometric sine function for Q15 data. - * @param[in] x Scaled input value in radians. - * @return sin(x). - */ - q15_t arm_sin_q15( - q15_t x); - - - /** - * @brief Fast approximation to the trigonometric cosine function for floating-point data. - * @param[in] x input value in radians. - * @return cos(x). - */ - float32_t arm_cos_f32( - float32_t x); - - - /** - * @brief Fast approximation to the trigonometric cosine function for Q31 data. - * @param[in] x Scaled input value in radians. - * @return cos(x). - */ - q31_t arm_cos_q31( - q31_t x); - - - /** - * @brief Fast approximation to the trigonometric cosine function for Q15 data. - * @param[in] x Scaled input value in radians. - * @return cos(x). - */ - q15_t arm_cos_q15( - q15_t x); - - - /** - * @ingroup groupFastMath - */ - - - /** - * @defgroup SQRT Square Root - * - * Computes the square root of a number. - * There are separate functions for Q15, Q31, and floating-point data types. - * The square root function is computed using the Newton-Raphson algorithm. - * This is an iterative algorithm of the form: - *
-   *      x1 = x0 - f(x0)/f'(x0)
-   * 
- * where x1 is the current estimate, - * x0 is the previous estimate, and - * f'(x0) is the derivative of f() evaluated at x0. - * For the square root function, the algorithm reduces to: - *
-   *     x0 = in/2                         [initial guess]
-   *     x1 = 1/2 * ( x0 + in / x0)        [each iteration]
-   * 
- */ - - - /** - * @addtogroup SQRT - * @{ - */ - - /** - * @brief Floating-point square root function. - * @param[in] in input value. - * @param[out] pOut square root of input value. - * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if - * in is negative value and returns zero output for negative values. - */ - CMSIS_INLINE __STATIC_INLINE arm_status arm_sqrt_f32( - float32_t in, - float32_t * pOut) - { - if (in >= 0.0f) - { - -#if (__FPU_USED == 1) && defined ( __CC_ARM ) - *pOut = __sqrtf(in); -#elif (__FPU_USED == 1) && (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) - *pOut = __builtin_sqrtf(in); -#elif (__FPU_USED == 1) && defined(__GNUC__) - *pOut = __builtin_sqrtf(in); -#elif (__FPU_USED == 1) && defined ( __ICCARM__ ) && (__VER__ >= 6040000) - __ASM("VSQRT.F32 %0,%1" : "=t"(*pOut) : "t"(in)); -#else - *pOut = sqrtf(in); -#endif - - return (ARM_MATH_SUCCESS); - } - else - { - *pOut = 0.0f; - return (ARM_MATH_ARGUMENT_ERROR); - } - } - - - /** - * @brief Q31 square root function. - * @param[in] in input value. The range of the input value is [0 +1) or 0x00000000 to 0x7FFFFFFF. - * @param[out] pOut square root of input value. - * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if - * in is negative value and returns zero output for negative values. - */ - arm_status arm_sqrt_q31( - q31_t in, - q31_t * pOut); - - - /** - * @brief Q15 square root function. - * @param[in] in input value. The range of the input value is [0 +1) or 0x0000 to 0x7FFF. - * @param[out] pOut square root of input value. - * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if - * in is negative value and returns zero output for negative values. - */ - arm_status arm_sqrt_q15( - q15_t in, - q15_t * pOut); - - /** - * @} end of SQRT group - */ - - - /** - * @brief floating-point Circular write function. - */ - CMSIS_INLINE __STATIC_INLINE void arm_circularWrite_f32( - int32_t * circBuffer, - int32_t L, - uint16_t * writeOffset, - int32_t bufferInc, - const int32_t * src, - int32_t srcInc, - uint32_t blockSize) - { - uint32_t i = 0u; - int32_t wOffset; - - /* Copy the value of Index pointer that points - * to the current location where the input samples to be copied */ - wOffset = *writeOffset; - - /* Loop over the blockSize */ - i = blockSize; - - while (i > 0u) - { - /* copy the input sample to the circular buffer */ - circBuffer[wOffset] = *src; - - /* Update the input pointer */ - src += srcInc; - - /* Circularly update wOffset. Watch out for positive and negative value */ - wOffset += bufferInc; - if (wOffset >= L) - wOffset -= L; - - /* Decrement the loop counter */ - i--; - } - - /* Update the index pointer */ - *writeOffset = (uint16_t)wOffset; - } - - - - /** - * @brief floating-point Circular Read function. - */ - CMSIS_INLINE __STATIC_INLINE void arm_circularRead_f32( - int32_t * circBuffer, - int32_t L, - int32_t * readOffset, - int32_t bufferInc, - int32_t * dst, - int32_t * dst_base, - int32_t dst_length, - int32_t dstInc, - uint32_t blockSize) - { - uint32_t i = 0u; - int32_t rOffset, dst_end; - - /* Copy the value of Index pointer that points - * to the current location from where the input samples to be read */ - rOffset = *readOffset; - dst_end = (int32_t) (dst_base + dst_length); - - /* Loop over the blockSize */ - i = blockSize; - - while (i > 0u) - { - /* copy the sample from the circular buffer to the destination buffer */ - *dst = circBuffer[rOffset]; - - /* Update the input pointer */ - dst += dstInc; - - if (dst == (int32_t *) dst_end) - { - dst = dst_base; - } - - /* Circularly update rOffset. Watch out for positive and negative value */ - rOffset += bufferInc; - - if (rOffset >= L) - { - rOffset -= L; - } - - /* Decrement the loop counter */ - i--; - } - - /* Update the index pointer */ - *readOffset = rOffset; - } - - - /** - * @brief Q15 Circular write function. - */ - CMSIS_INLINE __STATIC_INLINE void arm_circularWrite_q15( - q15_t * circBuffer, - int32_t L, - uint16_t * writeOffset, - int32_t bufferInc, - const q15_t * src, - int32_t srcInc, - uint32_t blockSize) - { - uint32_t i = 0u; - int32_t wOffset; - - /* Copy the value of Index pointer that points - * to the current location where the input samples to be copied */ - wOffset = *writeOffset; - - /* Loop over the blockSize */ - i = blockSize; - - while (i > 0u) - { - /* copy the input sample to the circular buffer */ - circBuffer[wOffset] = *src; - - /* Update the input pointer */ - src += srcInc; - - /* Circularly update wOffset. Watch out for positive and negative value */ - wOffset += bufferInc; - if (wOffset >= L) - wOffset -= L; - - /* Decrement the loop counter */ - i--; - } - - /* Update the index pointer */ - *writeOffset = (uint16_t)wOffset; - } - - - /** - * @brief Q15 Circular Read function. - */ - CMSIS_INLINE __STATIC_INLINE void arm_circularRead_q15( - q15_t * circBuffer, - int32_t L, - int32_t * readOffset, - int32_t bufferInc, - q15_t * dst, - q15_t * dst_base, - int32_t dst_length, - int32_t dstInc, - uint32_t blockSize) - { - uint32_t i = 0; - int32_t rOffset, dst_end; - - /* Copy the value of Index pointer that points - * to the current location from where the input samples to be read */ - rOffset = *readOffset; - - dst_end = (int32_t) (dst_base + dst_length); - - /* Loop over the blockSize */ - i = blockSize; - - while (i > 0u) - { - /* copy the sample from the circular buffer to the destination buffer */ - *dst = circBuffer[rOffset]; - - /* Update the input pointer */ - dst += dstInc; - - if (dst == (q15_t *) dst_end) - { - dst = dst_base; - } - - /* Circularly update wOffset. Watch out for positive and negative value */ - rOffset += bufferInc; - - if (rOffset >= L) - { - rOffset -= L; - } - - /* Decrement the loop counter */ - i--; - } - - /* Update the index pointer */ - *readOffset = rOffset; - } - - - /** - * @brief Q7 Circular write function. - */ - CMSIS_INLINE __STATIC_INLINE void arm_circularWrite_q7( - q7_t * circBuffer, - int32_t L, - uint16_t * writeOffset, - int32_t bufferInc, - const q7_t * src, - int32_t srcInc, - uint32_t blockSize) - { - uint32_t i = 0u; - int32_t wOffset; - - /* Copy the value of Index pointer that points - * to the current location where the input samples to be copied */ - wOffset = *writeOffset; - - /* Loop over the blockSize */ - i = blockSize; - - while (i > 0u) - { - /* copy the input sample to the circular buffer */ - circBuffer[wOffset] = *src; - - /* Update the input pointer */ - src += srcInc; - - /* Circularly update wOffset. Watch out for positive and negative value */ - wOffset += bufferInc; - if (wOffset >= L) - wOffset -= L; - - /* Decrement the loop counter */ - i--; - } - - /* Update the index pointer */ - *writeOffset = (uint16_t)wOffset; - } - - - /** - * @brief Q7 Circular Read function. - */ - CMSIS_INLINE __STATIC_INLINE void arm_circularRead_q7( - q7_t * circBuffer, - int32_t L, - int32_t * readOffset, - int32_t bufferInc, - q7_t * dst, - q7_t * dst_base, - int32_t dst_length, - int32_t dstInc, - uint32_t blockSize) - { - uint32_t i = 0; - int32_t rOffset, dst_end; - - /* Copy the value of Index pointer that points - * to the current location from where the input samples to be read */ - rOffset = *readOffset; - - dst_end = (int32_t) (dst_base + dst_length); - - /* Loop over the blockSize */ - i = blockSize; - - while (i > 0u) - { - /* copy the sample from the circular buffer to the destination buffer */ - *dst = circBuffer[rOffset]; - - /* Update the input pointer */ - dst += dstInc; - - if (dst == (q7_t *) dst_end) - { - dst = dst_base; - } - - /* Circularly update rOffset. Watch out for positive and negative value */ - rOffset += bufferInc; - - if (rOffset >= L) - { - rOffset -= L; - } - - /* Decrement the loop counter */ - i--; - } - - /* Update the index pointer */ - *readOffset = rOffset; - } - - - /** - * @brief Sum of the squares of the elements of a Q31 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_power_q31( - q31_t * pSrc, - uint32_t blockSize, - q63_t * pResult); - - - /** - * @brief Sum of the squares of the elements of a floating-point vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_power_f32( - float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult); - - - /** - * @brief Sum of the squares of the elements of a Q15 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_power_q15( - q15_t * pSrc, - uint32_t blockSize, - q63_t * pResult); - - - /** - * @brief Sum of the squares of the elements of a Q7 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_power_q7( - q7_t * pSrc, - uint32_t blockSize, - q31_t * pResult); - - - /** - * @brief Mean value of a Q7 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_mean_q7( - q7_t * pSrc, - uint32_t blockSize, - q7_t * pResult); - - - /** - * @brief Mean value of a Q15 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_mean_q15( - q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult); - - - /** - * @brief Mean value of a Q31 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_mean_q31( - q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult); - - - /** - * @brief Mean value of a floating-point vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_mean_f32( - float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult); - - - /** - * @brief Variance of the elements of a floating-point vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_var_f32( - float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult); - - - /** - * @brief Variance of the elements of a Q31 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_var_q31( - q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult); - - - /** - * @brief Variance of the elements of a Q15 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_var_q15( - q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult); - - - /** - * @brief Root Mean Square of the elements of a floating-point vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_rms_f32( - float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult); - - - /** - * @brief Root Mean Square of the elements of a Q31 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_rms_q31( - q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult); - - - /** - * @brief Root Mean Square of the elements of a Q15 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_rms_q15( - q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult); - - - /** - * @brief Standard deviation of the elements of a floating-point vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_std_f32( - float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult); - - - /** - * @brief Standard deviation of the elements of a Q31 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_std_q31( - q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult); - - - /** - * @brief Standard deviation of the elements of a Q15 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output value. - */ - void arm_std_q15( - q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult); - - - /** - * @brief Floating-point complex magnitude - * @param[in] pSrc points to the complex input vector - * @param[out] pDst points to the real output vector - * @param[in] numSamples number of complex samples in the input vector - */ - void arm_cmplx_mag_f32( - float32_t * pSrc, - float32_t * pDst, - uint32_t numSamples); - - - /** - * @brief Q31 complex magnitude - * @param[in] pSrc points to the complex input vector - * @param[out] pDst points to the real output vector - * @param[in] numSamples number of complex samples in the input vector - */ - void arm_cmplx_mag_q31( - q31_t * pSrc, - q31_t * pDst, - uint32_t numSamples); - - - /** - * @brief Q15 complex magnitude - * @param[in] pSrc points to the complex input vector - * @param[out] pDst points to the real output vector - * @param[in] numSamples number of complex samples in the input vector - */ - void arm_cmplx_mag_q15( - q15_t * pSrc, - q15_t * pDst, - uint32_t numSamples); - - - /** - * @brief Q15 complex dot product - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[in] numSamples number of complex samples in each vector - * @param[out] realResult real part of the result returned here - * @param[out] imagResult imaginary part of the result returned here - */ - void arm_cmplx_dot_prod_q15( - q15_t * pSrcA, - q15_t * pSrcB, - uint32_t numSamples, - q31_t * realResult, - q31_t * imagResult); - - - /** - * @brief Q31 complex dot product - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[in] numSamples number of complex samples in each vector - * @param[out] realResult real part of the result returned here - * @param[out] imagResult imaginary part of the result returned here - */ - void arm_cmplx_dot_prod_q31( - q31_t * pSrcA, - q31_t * pSrcB, - uint32_t numSamples, - q63_t * realResult, - q63_t * imagResult); - - - /** - * @brief Floating-point complex dot product - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[in] numSamples number of complex samples in each vector - * @param[out] realResult real part of the result returned here - * @param[out] imagResult imaginary part of the result returned here - */ - void arm_cmplx_dot_prod_f32( - float32_t * pSrcA, - float32_t * pSrcB, - uint32_t numSamples, - float32_t * realResult, - float32_t * imagResult); - - - /** - * @brief Q15 complex-by-real multiplication - * @param[in] pSrcCmplx points to the complex input vector - * @param[in] pSrcReal points to the real input vector - * @param[out] pCmplxDst points to the complex output vector - * @param[in] numSamples number of samples in each vector - */ - void arm_cmplx_mult_real_q15( - q15_t * pSrcCmplx, - q15_t * pSrcReal, - q15_t * pCmplxDst, - uint32_t numSamples); - - - /** - * @brief Q31 complex-by-real multiplication - * @param[in] pSrcCmplx points to the complex input vector - * @param[in] pSrcReal points to the real input vector - * @param[out] pCmplxDst points to the complex output vector - * @param[in] numSamples number of samples in each vector - */ - void arm_cmplx_mult_real_q31( - q31_t * pSrcCmplx, - q31_t * pSrcReal, - q31_t * pCmplxDst, - uint32_t numSamples); - - - /** - * @brief Floating-point complex-by-real multiplication - * @param[in] pSrcCmplx points to the complex input vector - * @param[in] pSrcReal points to the real input vector - * @param[out] pCmplxDst points to the complex output vector - * @param[in] numSamples number of samples in each vector - */ - void arm_cmplx_mult_real_f32( - float32_t * pSrcCmplx, - float32_t * pSrcReal, - float32_t * pCmplxDst, - uint32_t numSamples); - - - /** - * @brief Minimum value of a Q7 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] result is output pointer - * @param[in] index is the array index of the minimum value in the input buffer. - */ - void arm_min_q7( - q7_t * pSrc, - uint32_t blockSize, - q7_t * result, - uint32_t * index); - - - /** - * @brief Minimum value of a Q15 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output pointer - * @param[in] pIndex is the array index of the minimum value in the input buffer. - */ - void arm_min_q15( - q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult, - uint32_t * pIndex); - - - /** - * @brief Minimum value of a Q31 vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output pointer - * @param[out] pIndex is the array index of the minimum value in the input buffer. - */ - void arm_min_q31( - q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult, - uint32_t * pIndex); - - - /** - * @brief Minimum value of a floating-point vector. - * @param[in] pSrc is input pointer - * @param[in] blockSize is the number of samples to process - * @param[out] pResult is output pointer - * @param[out] pIndex is the array index of the minimum value in the input buffer. - */ - void arm_min_f32( - float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult, - uint32_t * pIndex); - - -/** - * @brief Maximum value of a Q7 vector. - * @param[in] pSrc points to the input buffer - * @param[in] blockSize length of the input vector - * @param[out] pResult maximum value returned here - * @param[out] pIndex index of maximum value returned here - */ - void arm_max_q7( - q7_t * pSrc, - uint32_t blockSize, - q7_t * pResult, - uint32_t * pIndex); - - -/** - * @brief Maximum value of a Q15 vector. - * @param[in] pSrc points to the input buffer - * @param[in] blockSize length of the input vector - * @param[out] pResult maximum value returned here - * @param[out] pIndex index of maximum value returned here - */ - void arm_max_q15( - q15_t * pSrc, - uint32_t blockSize, - q15_t * pResult, - uint32_t * pIndex); - - -/** - * @brief Maximum value of a Q31 vector. - * @param[in] pSrc points to the input buffer - * @param[in] blockSize length of the input vector - * @param[out] pResult maximum value returned here - * @param[out] pIndex index of maximum value returned here - */ - void arm_max_q31( - q31_t * pSrc, - uint32_t blockSize, - q31_t * pResult, - uint32_t * pIndex); - - -/** - * @brief Maximum value of a floating-point vector. - * @param[in] pSrc points to the input buffer - * @param[in] blockSize length of the input vector - * @param[out] pResult maximum value returned here - * @param[out] pIndex index of maximum value returned here - */ - void arm_max_f32( - float32_t * pSrc, - uint32_t blockSize, - float32_t * pResult, - uint32_t * pIndex); - - - /** - * @brief Q15 complex-by-complex multiplication - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] numSamples number of complex samples in each vector - */ - void arm_cmplx_mult_cmplx_q15( - q15_t * pSrcA, - q15_t * pSrcB, - q15_t * pDst, - uint32_t numSamples); - - - /** - * @brief Q31 complex-by-complex multiplication - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] numSamples number of complex samples in each vector - */ - void arm_cmplx_mult_cmplx_q31( - q31_t * pSrcA, - q31_t * pSrcB, - q31_t * pDst, - uint32_t numSamples); - - - /** - * @brief Floating-point complex-by-complex multiplication - * @param[in] pSrcA points to the first input vector - * @param[in] pSrcB points to the second input vector - * @param[out] pDst points to the output vector - * @param[in] numSamples number of complex samples in each vector - */ - void arm_cmplx_mult_cmplx_f32( - float32_t * pSrcA, - float32_t * pSrcB, - float32_t * pDst, - uint32_t numSamples); - - - /** - * @brief Converts the elements of the floating-point vector to Q31 vector. - * @param[in] pSrc points to the floating-point input vector - * @param[out] pDst points to the Q31 output vector - * @param[in] blockSize length of the input vector - */ - void arm_float_to_q31( - float32_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Converts the elements of the floating-point vector to Q15 vector. - * @param[in] pSrc points to the floating-point input vector - * @param[out] pDst points to the Q15 output vector - * @param[in] blockSize length of the input vector - */ - void arm_float_to_q15( - float32_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Converts the elements of the floating-point vector to Q7 vector. - * @param[in] pSrc points to the floating-point input vector - * @param[out] pDst points to the Q7 output vector - * @param[in] blockSize length of the input vector - */ - void arm_float_to_q7( - float32_t * pSrc, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @brief Converts the elements of the Q31 vector to Q15 vector. - * @param[in] pSrc is input pointer - * @param[out] pDst is output pointer - * @param[in] blockSize is the number of samples to process - */ - void arm_q31_to_q15( - q31_t * pSrc, - q15_t * pDst, - uint32_t blockSize); - - - /** - * @brief Converts the elements of the Q31 vector to Q7 vector. - * @param[in] pSrc is input pointer - * @param[out] pDst is output pointer - * @param[in] blockSize is the number of samples to process - */ - void arm_q31_to_q7( - q31_t * pSrc, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @brief Converts the elements of the Q15 vector to floating-point vector. - * @param[in] pSrc is input pointer - * @param[out] pDst is output pointer - * @param[in] blockSize is the number of samples to process - */ - void arm_q15_to_float( - q15_t * pSrc, - float32_t * pDst, - uint32_t blockSize); - - - /** - * @brief Converts the elements of the Q15 vector to Q31 vector. - * @param[in] pSrc is input pointer - * @param[out] pDst is output pointer - * @param[in] blockSize is the number of samples to process - */ - void arm_q15_to_q31( - q15_t * pSrc, - q31_t * pDst, - uint32_t blockSize); - - - /** - * @brief Converts the elements of the Q15 vector to Q7 vector. - * @param[in] pSrc is input pointer - * @param[out] pDst is output pointer - * @param[in] blockSize is the number of samples to process - */ - void arm_q15_to_q7( - q15_t * pSrc, - q7_t * pDst, - uint32_t blockSize); - - - /** - * @ingroup groupInterpolation - */ - - /** - * @defgroup BilinearInterpolate Bilinear Interpolation - * - * Bilinear interpolation is an extension of linear interpolation applied to a two dimensional grid. - * The underlying function f(x, y) is sampled on a regular grid and the interpolation process - * determines values between the grid points. - * Bilinear interpolation is equivalent to two step linear interpolation, first in the x-dimension and then in the y-dimension. - * Bilinear interpolation is often used in image processing to rescale images. - * The CMSIS DSP library provides bilinear interpolation functions for Q7, Q15, Q31, and floating-point data types. - * - * Algorithm - * \par - * The instance structure used by the bilinear interpolation functions describes a two dimensional data table. - * For floating-point, the instance structure is defined as: - *
-   *   typedef struct
-   *   {
-   *     uint16_t numRows;
-   *     uint16_t numCols;
-   *     float32_t *pData;
-   * } arm_bilinear_interp_instance_f32;
-   * 
- * - * \par - * where numRows specifies the number of rows in the table; - * numCols specifies the number of columns in the table; - * and pData points to an array of size numRows*numCols values. - * The data table pTable is organized in row order and the supplied data values fall on integer indexes. - * That is, table element (x,y) is located at pTable[x + y*numCols] where x and y are integers. - * - * \par - * Let (x, y) specify the desired interpolation point. Then define: - *
-   *     XF = floor(x)
-   *     YF = floor(y)
-   * 
- * \par - * The interpolated output point is computed as: - *
-   *  f(x, y) = f(XF, YF) * (1-(x-XF)) * (1-(y-YF))
-   *           + f(XF+1, YF) * (x-XF)*(1-(y-YF))
-   *           + f(XF, YF+1) * (1-(x-XF))*(y-YF)
-   *           + f(XF+1, YF+1) * (x-XF)*(y-YF)
-   * 
- * Note that the coordinates (x, y) contain integer and fractional components. - * The integer components specify which portion of the table to use while the - * fractional components control the interpolation processor. - * - * \par - * if (x,y) are outside of the table boundary, Bilinear interpolation returns zero output. - */ - - /** - * @addtogroup BilinearInterpolate - * @{ - */ - - - /** - * - * @brief Floating-point bilinear interpolation. - * @param[in,out] S points to an instance of the interpolation structure. - * @param[in] X interpolation coordinate. - * @param[in] Y interpolation coordinate. - * @return out interpolated value. - */ - CMSIS_INLINE __STATIC_INLINE float32_t arm_bilinear_interp_f32( - const arm_bilinear_interp_instance_f32 * S, - float32_t X, - float32_t Y) - { - float32_t out; - float32_t f00, f01, f10, f11; - float32_t *pData = S->pData; - int32_t xIndex, yIndex, index; - float32_t xdiff, ydiff; - float32_t b1, b2, b3, b4; - - xIndex = (int32_t) X; - yIndex = (int32_t) Y; - - /* Care taken for table outside boundary */ - /* Returns zero output when values are outside table boundary */ - if (xIndex < 0 || xIndex > (S->numRows - 1) || yIndex < 0 || yIndex > (S->numCols - 1)) - { - return (0); - } - - /* Calculation of index for two nearest points in X-direction */ - index = (xIndex - 1) + (yIndex - 1) * S->numCols; - - - /* Read two nearest points in X-direction */ - f00 = pData[index]; - f01 = pData[index + 1]; - - /* Calculation of index for two nearest points in Y-direction */ - index = (xIndex - 1) + (yIndex) * S->numCols; - - - /* Read two nearest points in Y-direction */ - f10 = pData[index]; - f11 = pData[index + 1]; - - /* Calculation of intermediate values */ - b1 = f00; - b2 = f01 - f00; - b3 = f10 - f00; - b4 = f00 - f01 - f10 + f11; - - /* Calculation of fractional part in X */ - xdiff = X - xIndex; - - /* Calculation of fractional part in Y */ - ydiff = Y - yIndex; - - /* Calculation of bi-linear interpolated output */ - out = b1 + b2 * xdiff + b3 * ydiff + b4 * xdiff * ydiff; - - /* return to application */ - return (out); - } - - - /** - * - * @brief Q31 bilinear interpolation. - * @param[in,out] S points to an instance of the interpolation structure. - * @param[in] X interpolation coordinate in 12.20 format. - * @param[in] Y interpolation coordinate in 12.20 format. - * @return out interpolated value. - */ - CMSIS_INLINE __STATIC_INLINE q31_t arm_bilinear_interp_q31( - arm_bilinear_interp_instance_q31 * S, - q31_t X, - q31_t Y) - { - q31_t out; /* Temporary output */ - q31_t acc = 0; /* output */ - q31_t xfract, yfract; /* X, Y fractional parts */ - q31_t x1, x2, y1, y2; /* Nearest output values */ - int32_t rI, cI; /* Row and column indices */ - q31_t *pYData = S->pData; /* pointer to output table values */ - uint32_t nCols = S->numCols; /* num of rows */ - - /* Input is in 12.20 format */ - /* 12 bits for the table index */ - /* Index value calculation */ - rI = ((X & (q31_t)0xFFF00000) >> 20); - - /* Input is in 12.20 format */ - /* 12 bits for the table index */ - /* Index value calculation */ - cI = ((Y & (q31_t)0xFFF00000) >> 20); - - /* Care taken for table outside boundary */ - /* Returns zero output when values are outside table boundary */ - if (rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) - { - return (0); - } - - /* 20 bits for the fractional part */ - /* shift left xfract by 11 to keep 1.31 format */ - xfract = (X & 0x000FFFFF) << 11u; - - /* Read two nearest output values from the index */ - x1 = pYData[(rI) + (int32_t)nCols * (cI) ]; - x2 = pYData[(rI) + (int32_t)nCols * (cI) + 1]; - - /* 20 bits for the fractional part */ - /* shift left yfract by 11 to keep 1.31 format */ - yfract = (Y & 0x000FFFFF) << 11u; - - /* Read two nearest output values from the index */ - y1 = pYData[(rI) + (int32_t)nCols * (cI + 1) ]; - y2 = pYData[(rI) + (int32_t)nCols * (cI + 1) + 1]; - - /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 3.29(q29) format */ - out = ((q31_t) (((q63_t) x1 * (0x7FFFFFFF - xfract)) >> 32)); - acc = ((q31_t) (((q63_t) out * (0x7FFFFFFF - yfract)) >> 32)); - - /* x2 * (xfract) * (1-yfract) in 3.29(q29) and adding to acc */ - out = ((q31_t) ((q63_t) x2 * (0x7FFFFFFF - yfract) >> 32)); - acc += ((q31_t) ((q63_t) out * (xfract) >> 32)); - - /* y1 * (1 - xfract) * (yfract) in 3.29(q29) and adding to acc */ - out = ((q31_t) ((q63_t) y1 * (0x7FFFFFFF - xfract) >> 32)); - acc += ((q31_t) ((q63_t) out * (yfract) >> 32)); - - /* y2 * (xfract) * (yfract) in 3.29(q29) and adding to acc */ - out = ((q31_t) ((q63_t) y2 * (xfract) >> 32)); - acc += ((q31_t) ((q63_t) out * (yfract) >> 32)); - - /* Convert acc to 1.31(q31) format */ - return ((q31_t)(acc << 2)); - } - - - /** - * @brief Q15 bilinear interpolation. - * @param[in,out] S points to an instance of the interpolation structure. - * @param[in] X interpolation coordinate in 12.20 format. - * @param[in] Y interpolation coordinate in 12.20 format. - * @return out interpolated value. - */ - CMSIS_INLINE __STATIC_INLINE q15_t arm_bilinear_interp_q15( - arm_bilinear_interp_instance_q15 * S, - q31_t X, - q31_t Y) - { - q63_t acc = 0; /* output */ - q31_t out; /* Temporary output */ - q15_t x1, x2, y1, y2; /* Nearest output values */ - q31_t xfract, yfract; /* X, Y fractional parts */ - int32_t rI, cI; /* Row and column indices */ - q15_t *pYData = S->pData; /* pointer to output table values */ - uint32_t nCols = S->numCols; /* num of rows */ - - /* Input is in 12.20 format */ - /* 12 bits for the table index */ - /* Index value calculation */ - rI = ((X & (q31_t)0xFFF00000) >> 20); - - /* Input is in 12.20 format */ - /* 12 bits for the table index */ - /* Index value calculation */ - cI = ((Y & (q31_t)0xFFF00000) >> 20); - - /* Care taken for table outside boundary */ - /* Returns zero output when values are outside table boundary */ - if (rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) - { - return (0); - } - - /* 20 bits for the fractional part */ - /* xfract should be in 12.20 format */ - xfract = (X & 0x000FFFFF); - - /* Read two nearest output values from the index */ - x1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) ]; - x2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) + 1]; - - /* 20 bits for the fractional part */ - /* yfract should be in 12.20 format */ - yfract = (Y & 0x000FFFFF); - - /* Read two nearest output values from the index */ - y1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) ]; - y2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) + 1]; - - /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 13.51 format */ - - /* x1 is in 1.15(q15), xfract in 12.20 format and out is in 13.35 format */ - /* convert 13.35 to 13.31 by right shifting and out is in 1.31 */ - out = (q31_t) (((q63_t) x1 * (0xFFFFF - xfract)) >> 4u); - acc = ((q63_t) out * (0xFFFFF - yfract)); - - /* x2 * (xfract) * (1-yfract) in 1.51 and adding to acc */ - out = (q31_t) (((q63_t) x2 * (0xFFFFF - yfract)) >> 4u); - acc += ((q63_t) out * (xfract)); - - /* y1 * (1 - xfract) * (yfract) in 1.51 and adding to acc */ - out = (q31_t) (((q63_t) y1 * (0xFFFFF - xfract)) >> 4u); - acc += ((q63_t) out * (yfract)); - - /* y2 * (xfract) * (yfract) in 1.51 and adding to acc */ - out = (q31_t) (((q63_t) y2 * (xfract)) >> 4u); - acc += ((q63_t) out * (yfract)); - - /* acc is in 13.51 format and down shift acc by 36 times */ - /* Convert out to 1.15 format */ - return ((q15_t)(acc >> 36)); - } - - - /** - * @brief Q7 bilinear interpolation. - * @param[in,out] S points to an instance of the interpolation structure. - * @param[in] X interpolation coordinate in 12.20 format. - * @param[in] Y interpolation coordinate in 12.20 format. - * @return out interpolated value. - */ - CMSIS_INLINE __STATIC_INLINE q7_t arm_bilinear_interp_q7( - arm_bilinear_interp_instance_q7 * S, - q31_t X, - q31_t Y) - { - q63_t acc = 0; /* output */ - q31_t out; /* Temporary output */ - q31_t xfract, yfract; /* X, Y fractional parts */ - q7_t x1, x2, y1, y2; /* Nearest output values */ - int32_t rI, cI; /* Row and column indices */ - q7_t *pYData = S->pData; /* pointer to output table values */ - uint32_t nCols = S->numCols; /* num of rows */ - - /* Input is in 12.20 format */ - /* 12 bits for the table index */ - /* Index value calculation */ - rI = ((X & (q31_t)0xFFF00000) >> 20); - - /* Input is in 12.20 format */ - /* 12 bits for the table index */ - /* Index value calculation */ - cI = ((Y & (q31_t)0xFFF00000) >> 20); - - /* Care taken for table outside boundary */ - /* Returns zero output when values are outside table boundary */ - if (rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) - { - return (0); - } - - /* 20 bits for the fractional part */ - /* xfract should be in 12.20 format */ - xfract = (X & (q31_t)0x000FFFFF); - - /* Read two nearest output values from the index */ - x1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) ]; - x2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) + 1]; - - /* 20 bits for the fractional part */ - /* yfract should be in 12.20 format */ - yfract = (Y & (q31_t)0x000FFFFF); - - /* Read two nearest output values from the index */ - y1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) ]; - y2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) + 1]; - - /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 16.47 format */ - out = ((x1 * (0xFFFFF - xfract))); - acc = (((q63_t) out * (0xFFFFF - yfract))); - - /* x2 * (xfract) * (1-yfract) in 2.22 and adding to acc */ - out = ((x2 * (0xFFFFF - yfract))); - acc += (((q63_t) out * (xfract))); - - /* y1 * (1 - xfract) * (yfract) in 2.22 and adding to acc */ - out = ((y1 * (0xFFFFF - xfract))); - acc += (((q63_t) out * (yfract))); - - /* y2 * (xfract) * (yfract) in 2.22 and adding to acc */ - out = ((y2 * (yfract))); - acc += (((q63_t) out * (xfract))); - - /* acc in 16.47 format and down shift by 40 to convert to 1.7 format */ - return ((q7_t)(acc >> 40)); - } - - /** - * @} end of BilinearInterpolate group - */ - - -/* SMMLAR */ -#define multAcc_32x32_keep32_R(a, x, y) \ - a = (q31_t) (((((q63_t) a) << 32) + ((q63_t) x * y) + 0x80000000LL ) >> 32) - -/* SMMLSR */ -#define multSub_32x32_keep32_R(a, x, y) \ - a = (q31_t) (((((q63_t) a) << 32) - ((q63_t) x * y) + 0x80000000LL ) >> 32) - -/* SMMULR */ -#define mult_32x32_keep32_R(a, x, y) \ - a = (q31_t) (((q63_t) x * y + 0x80000000LL ) >> 32) - -/* SMMLA */ -#define multAcc_32x32_keep32(a, x, y) \ - a += (q31_t) (((q63_t) x * y) >> 32) - -/* SMMLS */ -#define multSub_32x32_keep32(a, x, y) \ - a -= (q31_t) (((q63_t) x * y) >> 32) - -/* SMMUL */ -#define mult_32x32_keep32(a, x, y) \ - a = (q31_t) (((q63_t) x * y ) >> 32) - - -#if defined ( __CC_ARM ) - /* Enter low optimization region - place directly above function definition */ - #if defined( ARM_MATH_CM4 ) || defined( ARM_MATH_CM7) - #define LOW_OPTIMIZATION_ENTER \ - _Pragma ("push") \ - _Pragma ("O1") - #else - #define LOW_OPTIMIZATION_ENTER - #endif - - /* Exit low optimization region - place directly after end of function definition */ - #if defined ( ARM_MATH_CM4 ) || defined ( ARM_MATH_CM7 ) - #define LOW_OPTIMIZATION_EXIT \ - _Pragma ("pop") - #else - #define LOW_OPTIMIZATION_EXIT - #endif - - /* Enter low optimization region - place directly above function definition */ - #define IAR_ONLY_LOW_OPTIMIZATION_ENTER - - /* Exit low optimization region - place directly after end of function definition */ - #define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#elif defined (__ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) - #define LOW_OPTIMIZATION_ENTER - #define LOW_OPTIMIZATION_EXIT - #define IAR_ONLY_LOW_OPTIMIZATION_ENTER - #define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#elif defined ( __GNUC__ ) - #define LOW_OPTIMIZATION_ENTER \ - __attribute__(( optimize("-O1") )) - #define LOW_OPTIMIZATION_EXIT - #define IAR_ONLY_LOW_OPTIMIZATION_ENTER - #define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#elif defined ( __ICCARM__ ) - /* Enter low optimization region - place directly above function definition */ - #if defined ( ARM_MATH_CM4 ) || defined ( ARM_MATH_CM7 ) - #define LOW_OPTIMIZATION_ENTER \ - _Pragma ("optimize=low") - #else - #define LOW_OPTIMIZATION_ENTER - #endif - - /* Exit low optimization region - place directly after end of function definition */ - #define LOW_OPTIMIZATION_EXIT - - /* Enter low optimization region - place directly above function definition */ - #if defined ( ARM_MATH_CM4 ) || defined ( ARM_MATH_CM7 ) - #define IAR_ONLY_LOW_OPTIMIZATION_ENTER \ - _Pragma ("optimize=low") - #else - #define IAR_ONLY_LOW_OPTIMIZATION_ENTER - #endif - - /* Exit low optimization region - place directly after end of function definition */ - #define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#elif defined ( __TI_ARM__ ) - #define LOW_OPTIMIZATION_ENTER - #define LOW_OPTIMIZATION_EXIT - #define IAR_ONLY_LOW_OPTIMIZATION_ENTER - #define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#elif defined ( __CSMC__ ) - #define LOW_OPTIMIZATION_ENTER - #define LOW_OPTIMIZATION_EXIT - #define IAR_ONLY_LOW_OPTIMIZATION_ENTER - #define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#elif defined ( __TASKING__ ) - #define LOW_OPTIMIZATION_ENTER - #define LOW_OPTIMIZATION_EXIT - #define IAR_ONLY_LOW_OPTIMIZATION_ENTER - #define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#endif - - -#ifdef __cplusplus -} -#endif - -/* Compiler specific diagnostic adjustment */ -#if defined ( __CC_ARM ) - -#elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) - -#elif defined ( __GNUC__ ) -#pragma GCC diagnostic pop - -#elif defined ( __ICCARM__ ) - -#elif defined ( __TI_ARM__ ) - -#elif defined ( __CSMC__ ) - -#elif defined ( __TASKING__ ) - -#else - #error Unknown compiler -#endif - -#endif /* _ARM_MATH_H */ - -/** - * - * End of file. - */ diff --git a/include/cmsis/cmsis_armcc.h b/include/cmsis/cmsis_armcc.h deleted file mode 100644 index 174d744..0000000 --- a/include/cmsis/cmsis_armcc.h +++ /dev/null @@ -1,869 +0,0 @@ -/**************************************************************************//** - * @file cmsis_armcc.h - * @brief CMSIS compiler ARMCC (Arm Compiler 5) header file - * @version V5.0.5 - * @date 14. December 2018 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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 __CMSIS_ARMCC_H -#define __CMSIS_ARMCC_H - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 400677) - #error "Please use Arm Compiler Toolchain V4.0.677 or later!" -#endif - -/* CMSIS compiler control architecture macros */ -#if ((defined (__TARGET_ARCH_6_M ) && (__TARGET_ARCH_6_M == 1)) || \ - (defined (__TARGET_ARCH_6S_M ) && (__TARGET_ARCH_6S_M == 1)) ) - #define __ARM_ARCH_6M__ 1 -#endif - -#if (defined (__TARGET_ARCH_7_M ) && (__TARGET_ARCH_7_M == 1)) - #define __ARM_ARCH_7M__ 1 -#endif - -#if (defined (__TARGET_ARCH_7E_M) && (__TARGET_ARCH_7E_M == 1)) - #define __ARM_ARCH_7EM__ 1 -#endif - - /* __ARM_ARCH_8M_BASE__ not applicable */ - /* __ARM_ARCH_8M_MAIN__ not applicable */ - -/* CMSIS compiler control DSP macros */ -#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - #define __ARM_FEATURE_DSP 1 -#endif - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE __inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static __inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE static __forceinline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __declspec(noreturn) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed)) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT __packed struct -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION __packed union -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #define __UNALIGNED_UINT32(x) (*((__packed uint32_t *)(x))) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #define __UNALIGNED_UINT16_WRITE(addr, val) ((*((__packed uint16_t *)(addr))) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #define __UNALIGNED_UINT16_READ(addr) (*((const __packed uint16_t *)(addr))) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #define __UNALIGNED_UINT32_WRITE(addr, val) ((*((__packed uint32_t *)(addr))) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #define __UNALIGNED_UINT32_READ(addr) (*((const __packed uint32_t *)(addr))) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif - -/* ########################### Core Function Access ########################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions - @{ - */ - -/** - \brief Enable IRQ Interrupts - \details Enables IRQ interrupts by clearing the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -/* intrinsic void __enable_irq(); */ - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -/* intrinsic void __disable_irq(); */ - -/** - \brief Get Control Register - \details Returns the content of the Control Register. - \return Control Register value - */ -__STATIC_INLINE uint32_t __get_CONTROL(void) -{ - register uint32_t __regControl __ASM("control"); - return(__regControl); -} - - -/** - \brief Set Control Register - \details Writes the given value to the Control Register. - \param [in] control Control Register value to set - */ -__STATIC_INLINE void __set_CONTROL(uint32_t control) -{ - register uint32_t __regControl __ASM("control"); - __regControl = control; -} - - -/** - \brief Get IPSR Register - \details Returns the content of the IPSR Register. - \return IPSR Register value - */ -__STATIC_INLINE uint32_t __get_IPSR(void) -{ - register uint32_t __regIPSR __ASM("ipsr"); - return(__regIPSR); -} - - -/** - \brief Get APSR Register - \details Returns the content of the APSR Register. - \return APSR Register value - */ -__STATIC_INLINE uint32_t __get_APSR(void) -{ - register uint32_t __regAPSR __ASM("apsr"); - return(__regAPSR); -} - - -/** - \brief Get xPSR Register - \details Returns the content of the xPSR Register. - \return xPSR Register value - */ -__STATIC_INLINE uint32_t __get_xPSR(void) -{ - register uint32_t __regXPSR __ASM("xpsr"); - return(__regXPSR); -} - - -/** - \brief Get Process Stack Pointer - \details Returns the current value of the Process Stack Pointer (PSP). - \return PSP Register value - */ -__STATIC_INLINE uint32_t __get_PSP(void) -{ - register uint32_t __regProcessStackPointer __ASM("psp"); - return(__regProcessStackPointer); -} - - -/** - \brief Set Process Stack Pointer - \details Assigns the given value to the Process Stack Pointer (PSP). - \param [in] topOfProcStack Process Stack Pointer value to set - */ -__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) -{ - register uint32_t __regProcessStackPointer __ASM("psp"); - __regProcessStackPointer = topOfProcStack; -} - - -/** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value - */ -__STATIC_INLINE uint32_t __get_MSP(void) -{ - register uint32_t __regMainStackPointer __ASM("msp"); - return(__regMainStackPointer); -} - - -/** - \brief Set Main Stack Pointer - \details Assigns the given value to the Main Stack Pointer (MSP). - \param [in] topOfMainStack Main Stack Pointer value to set - */ -__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) -{ - register uint32_t __regMainStackPointer __ASM("msp"); - __regMainStackPointer = topOfMainStack; -} - - -/** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value - */ -__STATIC_INLINE uint32_t __get_PRIMASK(void) -{ - register uint32_t __regPriMask __ASM("primask"); - return(__regPriMask); -} - - -/** - \brief Set Priority Mask - \details Assigns the given value to the Priority Mask Register. - \param [in] priMask Priority Mask - */ -__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) -{ - register uint32_t __regPriMask __ASM("primask"); - __regPriMask = (priMask); -} - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - -/** - \brief Enable FIQ - \details Enables FIQ interrupts by clearing the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -#define __enable_fault_irq __enable_fiq - - -/** - \brief Disable FIQ - \details Disables FIQ interrupts by setting the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -#define __disable_fault_irq __disable_fiq - - -/** - \brief Get Base Priority - \details Returns the current value of the Base Priority register. - \return Base Priority register value - */ -__STATIC_INLINE uint32_t __get_BASEPRI(void) -{ - register uint32_t __regBasePri __ASM("basepri"); - return(__regBasePri); -} - - -/** - \brief Set Base Priority - \details Assigns the given value to the Base Priority register. - \param [in] basePri Base Priority value to set - */ -__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) -{ - register uint32_t __regBasePri __ASM("basepri"); - __regBasePri = (basePri & 0xFFU); -} - - -/** - \brief Set Base Priority with condition - \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, - or the new value increases the BASEPRI priority level. - \param [in] basePri Base Priority value to set - */ -__STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri) -{ - register uint32_t __regBasePriMax __ASM("basepri_max"); - __regBasePriMax = (basePri & 0xFFU); -} - - -/** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value - */ -__STATIC_INLINE uint32_t __get_FAULTMASK(void) -{ - register uint32_t __regFaultMask __ASM("faultmask"); - return(__regFaultMask); -} - - -/** - \brief Set Fault Mask - \details Assigns the given value to the Fault Mask register. - \param [in] faultMask Fault Mask value to set - */ -__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) -{ - register uint32_t __regFaultMask __ASM("faultmask"); - __regFaultMask = (faultMask & (uint32_t)1U); -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ - - -/** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value - */ -__STATIC_INLINE uint32_t __get_FPSCR(void) -{ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) - register uint32_t __regfpscr __ASM("fpscr"); - return(__regfpscr); -#else - return(0U); -#endif -} - - -/** - \brief Set FPSCR - \details Assigns the given value to the Floating Point Status/Control register. - \param [in] fpscr Floating Point Status/Control value to set - */ -__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) -{ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) - register uint32_t __regfpscr __ASM("fpscr"); - __regfpscr = (fpscr); -#else - (void)fpscr; -#endif -} - - -/*@} end of CMSIS_Core_RegAccFunctions */ - - -/* ########################## Core Instruction Access ######################### */ -/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface - Access to dedicated instructions - @{ -*/ - -/** - \brief No Operation - \details No Operation does nothing. This instruction can be used for code alignment purposes. - */ -#define __NOP __nop - - -/** - \brief Wait For Interrupt - \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. - */ -#define __WFI __wfi - - -/** - \brief Wait For Event - \details Wait For Event is a hint instruction that permits the processor to enter - a low-power state until one of a number of events occurs. - */ -#define __WFE __wfe - - -/** - \brief Send Event - \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. - */ -#define __SEV __sev - - -/** - \brief Instruction Synchronization Barrier - \details Instruction Synchronization Barrier flushes the pipeline in the processor, - so that all instructions following the ISB are fetched from cache or memory, - after the instruction has been completed. - */ -#define __ISB() do {\ - __schedule_barrier();\ - __isb(0xF);\ - __schedule_barrier();\ - } while (0U) - -/** - \brief Data Synchronization Barrier - \details Acts as a special kind of Data Memory Barrier. - It completes when all explicit memory accesses before this instruction complete. - */ -#define __DSB() do {\ - __schedule_barrier();\ - __dsb(0xF);\ - __schedule_barrier();\ - } while (0U) - -/** - \brief Data Memory Barrier - \details Ensures the apparent order of the explicit memory operations before - and after the instruction, without ensuring their completion. - */ -#define __DMB() do {\ - __schedule_barrier();\ - __dmb(0xF);\ - __schedule_barrier();\ - } while (0U) - - -/** - \brief Reverse byte order (32 bit) - \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV __rev - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value - */ -#ifndef __NO_EMBEDDED_ASM -__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) -{ - rev16 r0, r0 - bx lr -} -#endif - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -#ifndef __NO_EMBEDDED_ASM -__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int16_t __REVSH(int16_t value) -{ - revsh r0, r0 - bx lr -} -#endif - - -/** - \brief Rotate Right in unsigned value (32 bit) - \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. - \param [in] op1 Value to rotate - \param [in] op2 Number of Bits to rotate - \return Rotated value - */ -#define __ROR __ror - - -/** - \brief Breakpoint - \details Causes the processor to enter Debug state. - Debug tools can use this to investigate system state when the instruction at a particular address is reached. - \param [in] value is ignored by the processor. - If required, a debugger can use it to store additional information about the breakpoint. - */ -#define __BKPT(value) __breakpoint(value) - - -/** - \brief Reverse bit order of value - \details Reverses the bit order of the given value. - \param [in] value Value to reverse - \return Reversed value - */ -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - #define __RBIT __rbit -#else -__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) -{ - uint32_t result; - uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ - - result = value; /* r will be reversed bits of v; first get LSB of v */ - for (value >>= 1U; value != 0U; value >>= 1U) - { - result <<= 1U; - result |= value & 1U; - s--; - } - result <<= s; /* shift when v's highest bits are zero */ - return result; -} -#endif - - -/** - \brief Count leading zeros - \details Counts the number of leading zeros of a data value. - \param [in] value Value to count the leading zeros - \return number of leading zeros in value - */ -#define __CLZ __clz - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - -/** - \brief LDR Exclusive (8 bit) - \details Executes a exclusive LDR instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) - #define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) -#else - #define __LDREXB(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint8_t ) __ldrex(ptr)) _Pragma("pop") -#endif - - -/** - \brief LDR Exclusive (16 bit) - \details Executes a exclusive LDR instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) - #define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) -#else - #define __LDREXH(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint16_t) __ldrex(ptr)) _Pragma("pop") -#endif - - -/** - \brief LDR Exclusive (32 bit) - \details Executes a exclusive LDR instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) - #define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) -#else - #define __LDREXW(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint32_t ) __ldrex(ptr)) _Pragma("pop") -#endif - - -/** - \brief STR Exclusive (8 bit) - \details Executes a exclusive STR instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) - #define __STREXB(value, ptr) __strex(value, ptr) -#else - #define __STREXB(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") -#endif - - -/** - \brief STR Exclusive (16 bit) - \details Executes a exclusive STR instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) - #define __STREXH(value, ptr) __strex(value, ptr) -#else - #define __STREXH(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") -#endif - - -/** - \brief STR Exclusive (32 bit) - \details Executes a exclusive STR instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) - #define __STREXW(value, ptr) __strex(value, ptr) -#else - #define __STREXW(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") -#endif - - -/** - \brief Remove the exclusive lock - \details Removes the exclusive lock which is created by LDREX. - */ -#define __CLREX __clrex - - -/** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value - */ -#define __SSAT __ssat - - -/** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value - */ -#define __USAT __usat - - -/** - \brief Rotate Right with Extend (32 bit) - \details Moves each bit of a bitstring right by one bit. - The carry input is shifted in at the left end of the bitstring. - \param [in] value Value to rotate - \return Rotated value - */ -#ifndef __NO_EMBEDDED_ASM -__attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value) -{ - rrx r0, r0 - bx lr -} -#endif - - -/** - \brief LDRT Unprivileged (8 bit) - \details Executes a Unprivileged LDRT instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -#define __LDRBT(ptr) ((uint8_t ) __ldrt(ptr)) - - -/** - \brief LDRT Unprivileged (16 bit) - \details Executes a Unprivileged LDRT instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -#define __LDRHT(ptr) ((uint16_t) __ldrt(ptr)) - - -/** - \brief LDRT Unprivileged (32 bit) - \details Executes a Unprivileged LDRT instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -#define __LDRT(ptr) ((uint32_t ) __ldrt(ptr)) - - -/** - \brief STRT Unprivileged (8 bit) - \details Executes a Unprivileged STRT instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -#define __STRBT(value, ptr) __strt(value, ptr) - - -/** - \brief STRT Unprivileged (16 bit) - \details Executes a Unprivileged STRT instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -#define __STRHT(value, ptr) __strt(value, ptr) - - -/** - \brief STRT Unprivileged (32 bit) - \details Executes a Unprivileged STRT instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -#define __STRT(value, ptr) __strt(value, ptr) - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ - -/** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value - */ -__attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value - */ -__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - -#define __SADD8 __sadd8 -#define __QADD8 __qadd8 -#define __SHADD8 __shadd8 -#define __UADD8 __uadd8 -#define __UQADD8 __uqadd8 -#define __UHADD8 __uhadd8 -#define __SSUB8 __ssub8 -#define __QSUB8 __qsub8 -#define __SHSUB8 __shsub8 -#define __USUB8 __usub8 -#define __UQSUB8 __uqsub8 -#define __UHSUB8 __uhsub8 -#define __SADD16 __sadd16 -#define __QADD16 __qadd16 -#define __SHADD16 __shadd16 -#define __UADD16 __uadd16 -#define __UQADD16 __uqadd16 -#define __UHADD16 __uhadd16 -#define __SSUB16 __ssub16 -#define __QSUB16 __qsub16 -#define __SHSUB16 __shsub16 -#define __USUB16 __usub16 -#define __UQSUB16 __uqsub16 -#define __UHSUB16 __uhsub16 -#define __SASX __sasx -#define __QASX __qasx -#define __SHASX __shasx -#define __UASX __uasx -#define __UQASX __uqasx -#define __UHASX __uhasx -#define __SSAX __ssax -#define __QSAX __qsax -#define __SHSAX __shsax -#define __USAX __usax -#define __UQSAX __uqsax -#define __UHSAX __uhsax -#define __USAD8 __usad8 -#define __USADA8 __usada8 -#define __SSAT16 __ssat16 -#define __USAT16 __usat16 -#define __UXTB16 __uxtb16 -#define __UXTAB16 __uxtab16 -#define __SXTB16 __sxtb16 -#define __SXTAB16 __sxtab16 -#define __SMUAD __smuad -#define __SMUADX __smuadx -#define __SMLAD __smlad -#define __SMLADX __smladx -#define __SMLALD __smlald -#define __SMLALDX __smlaldx -#define __SMUSD __smusd -#define __SMUSDX __smusdx -#define __SMLSD __smlsd -#define __SMLSDX __smlsdx -#define __SMLSLD __smlsld -#define __SMLSLDX __smlsldx -#define __SEL __sel -#define __QADD __qadd -#define __QSUB __qsub - -#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ - ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) - -#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ - ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) - -#define __SMMLA(ARG1,ARG2,ARG3) ( (int32_t)((((int64_t)(ARG1) * (ARG2)) + \ - ((int64_t)(ARG3) << 32U) ) >> 32U)) - -#endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#endif /* __CMSIS_ARMCC_H */ diff --git a/include/cmsis/cmsis_armclang.h b/include/cmsis/cmsis_armclang.h deleted file mode 100644 index 6a8867d..0000000 --- a/include/cmsis/cmsis_armclang.h +++ /dev/null @@ -1,1420 +0,0 @@ -/**************************************************************************//** - * @file cmsis_armclang.h - * @brief CMSIS compiler armclang (Arm Compiler 6) header file - * @version V5.1.0 - * @date 14. March 2019 - ******************************************************************************/ -/* - * Copyright (c) 2009-2019 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ - -#ifndef __CMSIS_ARMCLANG_H -#define __CMSIS_ARMCLANG_H - -#pragma clang system_header /* treat file as system include file */ - -#ifndef __ARM_COMPAT_H -#include /* Compatibility header for Arm Compiler 5 intrinsics */ -#endif - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE __inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static __inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __attribute__((__noreturn__)) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed, aligned(1))) -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif - - -/* ########################### Core Function Access ########################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions - @{ - */ - -/** - \brief Enable IRQ Interrupts - \details Enables IRQ interrupts by clearing the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -/* intrinsic void __enable_irq(); see arm_compat.h */ - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -/* intrinsic void __disable_irq(); see arm_compat.h */ - - -/** - \brief Get Control Register - \details Returns the content of the Control Register. - \return Control Register value - */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Control Register (non-secure) - \details Returns the content of the non-secure Control Register when in secure mode. - \return non-secure Control Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Control Register - \details Writes the given value to the Control Register. - \param [in] control Control Register value to set - */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Control Register (non-secure) - \details Writes the given value to the non-secure Control Register when in secure state. - \param [in] control Control Register value to set - */ -__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) -{ - __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); -} -#endif - - -/** - \brief Get IPSR Register - \details Returns the content of the IPSR Register. - \return IPSR Register value - */ -__STATIC_FORCEINLINE uint32_t __get_IPSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); - return(result); -} - - -/** - \brief Get APSR Register - \details Returns the content of the APSR Register. - \return APSR Register value - */ -__STATIC_FORCEINLINE uint32_t __get_APSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, apsr" : "=r" (result) ); - return(result); -} - - -/** - \brief Get xPSR Register - \details Returns the content of the xPSR Register. - \return xPSR Register value - */ -__STATIC_FORCEINLINE uint32_t __get_xPSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); - return(result); -} - - -/** - \brief Get Process Stack Pointer - \details Returns the current value of the Process Stack Pointer (PSP). - \return PSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer (non-secure) - \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. - \return PSP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Process Stack Pointer - \details Assigns the given value to the Process Stack Pointer (PSP). - \param [in] topOfProcStack Process Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. - \param [in] topOfProcStack Process Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif - - -/** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer (non-secure) - \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Main Stack Pointer - \details Assigns the given value to the Main Stack Pointer (MSP). - \param [in] topOfMainStack Main Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. - \param [in] topOfMainStack Main Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} -#endif - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); -} - - -/** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) -{ - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); -} -#endif - - -/** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Priority Mask (non-secure) - \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Priority Mask - \details Assigns the given value to the Priority Mask Register. - \param [in] priMask Priority Mask - */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Priority Mask (non-secure) - \details Assigns the given value to the non-secure Priority Mask Register when in secure state. - \param [in] priMask Priority Mask - */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) -{ - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); -} -#endif - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \brief Enable FIQ - \details Enables FIQ interrupts by clearing the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -#define __enable_fault_irq __enable_fiq /* see arm_compat.h */ - - -/** - \brief Disable FIQ - \details Disables FIQ interrupts by setting the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -#define __disable_fault_irq __disable_fiq /* see arm_compat.h */ - - -/** - \brief Get Base Priority - \details Returns the current value of the Base Priority register. - \return Base Priority register value - */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Base Priority (non-secure) - \details Returns the current value of the non-secure Base Priority register when in secure state. - \return Base Priority register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Base Priority - \details Assigns the given value to the Base Priority register. - \param [in] basePri Base Priority value to set - */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Base Priority (non-secure) - \details Assigns the given value to the non-secure Base Priority register when in secure state. - \param [in] basePri Base Priority value to set - */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); -} -#endif - - -/** - \brief Set Base Priority with condition - \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, - or the new value increases the BASEPRI priority level. - \param [in] basePri Base Priority value to set - */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); -} - - -/** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Fault Mask (non-secure) - \details Returns the current value of the non-secure Fault Mask register when in secure state. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Fault Mask - \details Assigns the given value to the Fault Mask register. - \param [in] faultMask Fault Mask value to set - */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Fault Mask (non-secure) - \details Assigns the given value to the non-secure Fault Mask register when in secure state. - \param [in] faultMask Fault Mask value to set - */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); -} -#endif - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - -/** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif -} - -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif -} -#endif - - -/** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. - \param [in] MainStackPtrLimit Main Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif -} -#endif - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr -#else -#define __get_FPSCR() ((uint32_t)0U) -#endif - -/** - \brief Set FPSCR - \details Assigns the given value to the Floating Point Status/Control register. - \param [in] fpscr Floating Point Status/Control value to set - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __set_FPSCR __builtin_arm_set_fpscr -#else -#define __set_FPSCR(x) ((void)(x)) -#endif - - -/*@} end of CMSIS_Core_RegAccFunctions */ - - -/* ########################## Core Instruction Access ######################### */ -/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface - Access to dedicated instructions - @{ -*/ - -/* Define macros for porting to both thumb1 and thumb2. - * For thumb1, use low register (r0-r7), specified by constraint "l" - * Otherwise, use general registers, specified by constraint "r" */ -#if defined (__thumb__) && !defined (__thumb2__) -#define __CMSIS_GCC_OUT_REG(r) "=l" (r) -#define __CMSIS_GCC_RW_REG(r) "+l" (r) -#define __CMSIS_GCC_USE_REG(r) "l" (r) -#else -#define __CMSIS_GCC_OUT_REG(r) "=r" (r) -#define __CMSIS_GCC_RW_REG(r) "+r" (r) -#define __CMSIS_GCC_USE_REG(r) "r" (r) -#endif - -/** - \brief No Operation - \details No Operation does nothing. This instruction can be used for code alignment purposes. - */ -#define __NOP __builtin_arm_nop - -/** - \brief Wait For Interrupt - \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. - */ -#define __WFI __builtin_arm_wfi - - -/** - \brief Wait For Event - \details Wait For Event is a hint instruction that permits the processor to enter - a low-power state until one of a number of events occurs. - */ -#define __WFE __builtin_arm_wfe - - -/** - \brief Send Event - \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. - */ -#define __SEV __builtin_arm_sev - - -/** - \brief Instruction Synchronization Barrier - \details Instruction Synchronization Barrier flushes the pipeline in the processor, - so that all instructions following the ISB are fetched from cache or memory, - after the instruction has been completed. - */ -#define __ISB() __builtin_arm_isb(0xF) - -/** - \brief Data Synchronization Barrier - \details Acts as a special kind of Data Memory Barrier. - It completes when all explicit memory accesses before this instruction complete. - */ -#define __DSB() __builtin_arm_dsb(0xF) - - -/** - \brief Data Memory Barrier - \details Ensures the apparent order of the explicit memory operations before - and after the instruction, without ensuring their completion. - */ -#define __DMB() __builtin_arm_dmb(0xF) - - -/** - \brief Reverse byte order (32 bit) - \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV(value) __builtin_bswap32(value) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV16(value) __ROR(__REV(value), 16) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REVSH(value) (int16_t)__builtin_bswap16(value) - - -/** - \brief Rotate Right in unsigned value (32 bit) - \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. - \param [in] op1 Value to rotate - \param [in] op2 Number of Bits to rotate - \return Rotated value - */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) -{ - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - return (op1 >> op2) | (op1 << (32U - op2)); -} - - -/** - \brief Breakpoint - \details Causes the processor to enter Debug state. - Debug tools can use this to investigate system state when the instruction at a particular address is reached. - \param [in] value is ignored by the processor. - If required, a debugger can use it to store additional information about the breakpoint. - */ -#define __BKPT(value) __ASM volatile ("bkpt "#value) - - -/** - \brief Reverse bit order of value - \details Reverses the bit order of the given value. - \param [in] value Value to reverse - \return Reversed value - */ -#define __RBIT __builtin_arm_rbit - -/** - \brief Count leading zeros - \details Counts the number of leading zeros of a data value. - \param [in] value Value to count the leading zeros - \return number of leading zeros in value - */ -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) -{ - /* Even though __builtin_clz produces a CLZ instruction on ARM, formally - __builtin_clz(0) is undefined behaviour, so handle this case specially. - This guarantees ARM-compatible results if happening to compile on a non-ARM - target, and ensures the compiler doesn't decide to activate any - optimisations using the logic "value was passed to __builtin_clz, so it - is non-zero". - ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a - single CLZ instruction. - */ - if (value == 0U) - { - return 32U; - } - return __builtin_clz(value); -} - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \brief LDR Exclusive (8 bit) - \details Executes a exclusive LDR instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -#define __LDREXB (uint8_t)__builtin_arm_ldrex - - -/** - \brief LDR Exclusive (16 bit) - \details Executes a exclusive LDR instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -#define __LDREXH (uint16_t)__builtin_arm_ldrex - - -/** - \brief LDR Exclusive (32 bit) - \details Executes a exclusive LDR instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -#define __LDREXW (uint32_t)__builtin_arm_ldrex - - -/** - \brief STR Exclusive (8 bit) - \details Executes a exclusive STR instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STREXB (uint32_t)__builtin_arm_strex - - -/** - \brief STR Exclusive (16 bit) - \details Executes a exclusive STR instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STREXH (uint32_t)__builtin_arm_strex - - -/** - \brief STR Exclusive (32 bit) - \details Executes a exclusive STR instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STREXW (uint32_t)__builtin_arm_strex - - -/** - \brief Remove the exclusive lock - \details Removes the exclusive lock which is created by LDREX. - */ -#define __CLREX __builtin_arm_clrex - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) - -/** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value - */ -#define __SSAT __builtin_arm_ssat - - -/** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value - */ -#define __USAT __builtin_arm_usat - - -/** - \brief Rotate Right with Extend (32 bit) - \details Moves each bit of a bitstring right by one bit. - The carry input is shifted in at the left end of the bitstring. - \param [in] value Value to rotate - \return Rotated value - */ -__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) -{ - uint32_t result; - - __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); - return(result); -} - - -/** - \brief LDRT Unprivileged (8 bit) - \details Executes a Unprivileged LDRT instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint8_t) result); /* Add explicit type cast here */ -} - - -/** - \brief LDRT Unprivileged (16 bit) - \details Executes a Unprivileged LDRT instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint16_t) result); /* Add explicit type cast here */ -} - - -/** - \brief LDRT Unprivileged (32 bit) - \details Executes a Unprivileged LDRT instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); - return(result); -} - - -/** - \brief STRT Unprivileged (8 bit) - \details Executes a Unprivileged STRT instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) -{ - __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief STRT Unprivileged (16 bit) - \details Executes a Unprivileged STRT instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) -{ - __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief STRT Unprivileged (32 bit) - \details Executes a Unprivileged STRT instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); -} - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - -/** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value - */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value - */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \brief Load-Acquire (8 bit) - \details Executes a LDAB instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint8_t) result); -} - - -/** - \brief Load-Acquire (16 bit) - \details Executes a LDAH instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint16_t) result); -} - - -/** - \brief Load-Acquire (32 bit) - \details Executes a LDA instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) ); - return(result); -} - - -/** - \brief Store-Release (8 bit) - \details Executes a STLB instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) -{ - __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief Store-Release (16 bit) - \details Executes a STLH instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) -{ - __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief Store-Release (32 bit) - \details Executes a STL instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief Load-Acquire Exclusive (8 bit) - \details Executes a LDAB exclusive instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -#define __LDAEXB (uint8_t)__builtin_arm_ldaex - - -/** - \brief Load-Acquire Exclusive (16 bit) - \details Executes a LDAH exclusive instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -#define __LDAEXH (uint16_t)__builtin_arm_ldaex - - -/** - \brief Load-Acquire Exclusive (32 bit) - \details Executes a LDA exclusive instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -#define __LDAEX (uint32_t)__builtin_arm_ldaex - - -/** - \brief Store-Release Exclusive (8 bit) - \details Executes a STLB exclusive instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STLEXB (uint32_t)__builtin_arm_stlex - - -/** - \brief Store-Release Exclusive (16 bit) - \details Executes a STLH exclusive instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STLEXH (uint32_t)__builtin_arm_stlex - - -/** - \brief Store-Release Exclusive (32 bit) - \details Executes a STL exclusive instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STLEX (uint32_t)__builtin_arm_stlex - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) - -#define __SADD8 __builtin_arm_sadd8 -#define __QADD8 __builtin_arm_qadd8 -#define __SHADD8 __builtin_arm_shadd8 -#define __UADD8 __builtin_arm_uadd8 -#define __UQADD8 __builtin_arm_uqadd8 -#define __UHADD8 __builtin_arm_uhadd8 -#define __SSUB8 __builtin_arm_ssub8 -#define __QSUB8 __builtin_arm_qsub8 -#define __SHSUB8 __builtin_arm_shsub8 -#define __USUB8 __builtin_arm_usub8 -#define __UQSUB8 __builtin_arm_uqsub8 -#define __UHSUB8 __builtin_arm_uhsub8 -#define __SADD16 __builtin_arm_sadd16 -#define __QADD16 __builtin_arm_qadd16 -#define __SHADD16 __builtin_arm_shadd16 -#define __UADD16 __builtin_arm_uadd16 -#define __UQADD16 __builtin_arm_uqadd16 -#define __UHADD16 __builtin_arm_uhadd16 -#define __SSUB16 __builtin_arm_ssub16 -#define __QSUB16 __builtin_arm_qsub16 -#define __SHSUB16 __builtin_arm_shsub16 -#define __USUB16 __builtin_arm_usub16 -#define __UQSUB16 __builtin_arm_uqsub16 -#define __UHSUB16 __builtin_arm_uhsub16 -#define __SASX __builtin_arm_sasx -#define __QASX __builtin_arm_qasx -#define __SHASX __builtin_arm_shasx -#define __UASX __builtin_arm_uasx -#define __UQASX __builtin_arm_uqasx -#define __UHASX __builtin_arm_uhasx -#define __SSAX __builtin_arm_ssax -#define __QSAX __builtin_arm_qsax -#define __SHSAX __builtin_arm_shsax -#define __USAX __builtin_arm_usax -#define __UQSAX __builtin_arm_uqsax -#define __UHSAX __builtin_arm_uhsax -#define __USAD8 __builtin_arm_usad8 -#define __USADA8 __builtin_arm_usada8 -#define __SSAT16 __builtin_arm_ssat16 -#define __USAT16 __builtin_arm_usat16 -#define __UXTB16 __builtin_arm_uxtb16 -#define __UXTAB16 __builtin_arm_uxtab16 -#define __SXTB16 __builtin_arm_sxtb16 -#define __SXTAB16 __builtin_arm_sxtab16 -#define __SMUAD __builtin_arm_smuad -#define __SMUADX __builtin_arm_smuadx -#define __SMLAD __builtin_arm_smlad -#define __SMLADX __builtin_arm_smladx -#define __SMLALD __builtin_arm_smlald -#define __SMLALDX __builtin_arm_smlaldx -#define __SMUSD __builtin_arm_smusd -#define __SMUSDX __builtin_arm_smusdx -#define __SMLSD __builtin_arm_smlsd -#define __SMLSDX __builtin_arm_smlsdx -#define __SMLSLD __builtin_arm_smlsld -#define __SMLSLDX __builtin_arm_smlsldx -#define __SEL __builtin_arm_sel -#define __QADD __builtin_arm_qadd -#define __QSUB __builtin_arm_qsub - -#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ - ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) - -#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ - ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) - -__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) -{ - int32_t result; - - __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -#endif /* (__ARM_FEATURE_DSP == 1) */ -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#endif /* __CMSIS_ARMCLANG_H */ diff --git a/include/cmsis/cmsis_armclang_ltm.h b/include/cmsis/cmsis_armclang_ltm.h deleted file mode 100644 index e4002a3..0000000 --- a/include/cmsis/cmsis_armclang_ltm.h +++ /dev/null @@ -1,1866 +0,0 @@ -/**************************************************************************//** - * @file cmsis_armclang_ltm.h - * @brief CMSIS compiler armclang (Arm Compiler 6) header file - * @version V1.0.1 - * @date 19. March 2019 - ******************************************************************************/ -/* - * Copyright (c) 2018-2019 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ - -#ifndef __CMSIS_ARMCLANG_H -#define __CMSIS_ARMCLANG_H - -#pragma clang system_header /* treat file as system include file */ - -#ifndef __ARM_COMPAT_H -#include /* Compatibility header for Arm Compiler 5 intrinsics */ -#endif - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE __inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static __inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __attribute__((__noreturn__)) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed, aligned(1))) -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wpacked" -/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #pragma clang diagnostic pop - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif - - -/* ########################### Core Function Access ########################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions - @{ - */ - -/** - \brief Enable IRQ Interrupts - \details Enables IRQ interrupts by clearing the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -/* intrinsic void __enable_irq(); see arm_compat.h */ - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -/* intrinsic void __disable_irq(); see arm_compat.h */ - - -/** - \brief Get Control Register - \details Returns the content of the Control Register. - \return Control Register value - */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Control Register (non-secure) - \details Returns the content of the non-secure Control Register when in secure mode. - \return non-secure Control Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Control Register - \details Writes the given value to the Control Register. - \param [in] control Control Register value to set - */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Control Register (non-secure) - \details Writes the given value to the non-secure Control Register when in secure state. - \param [in] control Control Register value to set - */ -__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) -{ - __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); -} -#endif - - -/** - \brief Get IPSR Register - \details Returns the content of the IPSR Register. - \return IPSR Register value - */ -__STATIC_FORCEINLINE uint32_t __get_IPSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); - return(result); -} - - -/** - \brief Get APSR Register - \details Returns the content of the APSR Register. - \return APSR Register value - */ -__STATIC_FORCEINLINE uint32_t __get_APSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, apsr" : "=r" (result) ); - return(result); -} - - -/** - \brief Get xPSR Register - \details Returns the content of the xPSR Register. - \return xPSR Register value - */ -__STATIC_FORCEINLINE uint32_t __get_xPSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); - return(result); -} - - -/** - \brief Get Process Stack Pointer - \details Returns the current value of the Process Stack Pointer (PSP). - \return PSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer (non-secure) - \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. - \return PSP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Process Stack Pointer - \details Assigns the given value to the Process Stack Pointer (PSP). - \param [in] topOfProcStack Process Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. - \param [in] topOfProcStack Process Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif - - -/** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer (non-secure) - \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Main Stack Pointer - \details Assigns the given value to the Main Stack Pointer (MSP). - \param [in] topOfMainStack Main Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. - \param [in] topOfMainStack Main Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} -#endif - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); -} - - -/** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) -{ - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); -} -#endif - - -/** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Priority Mask (non-secure) - \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Priority Mask - \details Assigns the given value to the Priority Mask Register. - \param [in] priMask Priority Mask - */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Priority Mask (non-secure) - \details Assigns the given value to the non-secure Priority Mask Register when in secure state. - \param [in] priMask Priority Mask - */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) -{ - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); -} -#endif - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \brief Enable FIQ - \details Enables FIQ interrupts by clearing the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -#define __enable_fault_irq __enable_fiq /* see arm_compat.h */ - - -/** - \brief Disable FIQ - \details Disables FIQ interrupts by setting the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -#define __disable_fault_irq __disable_fiq /* see arm_compat.h */ - - -/** - \brief Get Base Priority - \details Returns the current value of the Base Priority register. - \return Base Priority register value - */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Base Priority (non-secure) - \details Returns the current value of the non-secure Base Priority register when in secure state. - \return Base Priority register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Base Priority - \details Assigns the given value to the Base Priority register. - \param [in] basePri Base Priority value to set - */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Base Priority (non-secure) - \details Assigns the given value to the non-secure Base Priority register when in secure state. - \param [in] basePri Base Priority value to set - */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); -} -#endif - - -/** - \brief Set Base Priority with condition - \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, - or the new value increases the BASEPRI priority level. - \param [in] basePri Base Priority value to set - */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); -} - - -/** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Fault Mask (non-secure) - \details Returns the current value of the non-secure Fault Mask register when in secure state. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Fault Mask - \details Assigns the given value to the Fault Mask register. - \param [in] faultMask Fault Mask value to set - */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Fault Mask (non-secure) - \details Assigns the given value to the non-secure Fault Mask register when in secure state. - \param [in] faultMask Fault Mask value to set - */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); -} -#endif - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - -/** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif -} - -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif -} -#endif - - -/** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. - \param [in] MainStackPtrLimit Main Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif -} -#endif - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr -#else -#define __get_FPSCR() ((uint32_t)0U) -#endif - -/** - \brief Set FPSCR - \details Assigns the given value to the Floating Point Status/Control register. - \param [in] fpscr Floating Point Status/Control value to set - */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __set_FPSCR __builtin_arm_set_fpscr -#else -#define __set_FPSCR(x) ((void)(x)) -#endif - - -/*@} end of CMSIS_Core_RegAccFunctions */ - - -/* ########################## Core Instruction Access ######################### */ -/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface - Access to dedicated instructions - @{ -*/ - -/* Define macros for porting to both thumb1 and thumb2. - * For thumb1, use low register (r0-r7), specified by constraint "l" - * Otherwise, use general registers, specified by constraint "r" */ -#if defined (__thumb__) && !defined (__thumb2__) -#define __CMSIS_GCC_OUT_REG(r) "=l" (r) -#define __CMSIS_GCC_USE_REG(r) "l" (r) -#else -#define __CMSIS_GCC_OUT_REG(r) "=r" (r) -#define __CMSIS_GCC_USE_REG(r) "r" (r) -#endif - -/** - \brief No Operation - \details No Operation does nothing. This instruction can be used for code alignment purposes. - */ -#define __NOP __builtin_arm_nop - -/** - \brief Wait For Interrupt - \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. - */ -#define __WFI __builtin_arm_wfi - - -/** - \brief Wait For Event - \details Wait For Event is a hint instruction that permits the processor to enter - a low-power state until one of a number of events occurs. - */ -#define __WFE __builtin_arm_wfe - - -/** - \brief Send Event - \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. - */ -#define __SEV __builtin_arm_sev - - -/** - \brief Instruction Synchronization Barrier - \details Instruction Synchronization Barrier flushes the pipeline in the processor, - so that all instructions following the ISB are fetched from cache or memory, - after the instruction has been completed. - */ -#define __ISB() __builtin_arm_isb(0xF) - -/** - \brief Data Synchronization Barrier - \details Acts as a special kind of Data Memory Barrier. - It completes when all explicit memory accesses before this instruction complete. - */ -#define __DSB() __builtin_arm_dsb(0xF) - - -/** - \brief Data Memory Barrier - \details Ensures the apparent order of the explicit memory operations before - and after the instruction, without ensuring their completion. - */ -#define __DMB() __builtin_arm_dmb(0xF) - - -/** - \brief Reverse byte order (32 bit) - \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV(value) __builtin_bswap32(value) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REV16(value) __ROR(__REV(value), 16) - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -#define __REVSH(value) (int16_t)__builtin_bswap16(value) - - -/** - \brief Rotate Right in unsigned value (32 bit) - \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. - \param [in] op1 Value to rotate - \param [in] op2 Number of Bits to rotate - \return Rotated value - */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) -{ - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - return (op1 >> op2) | (op1 << (32U - op2)); -} - - -/** - \brief Breakpoint - \details Causes the processor to enter Debug state. - Debug tools can use this to investigate system state when the instruction at a particular address is reached. - \param [in] value is ignored by the processor. - If required, a debugger can use it to store additional information about the breakpoint. - */ -#define __BKPT(value) __ASM volatile ("bkpt "#value) - - -/** - \brief Reverse bit order of value - \details Reverses the bit order of the given value. - \param [in] value Value to reverse - \return Reversed value - */ -#define __RBIT __builtin_arm_rbit - -/** - \brief Count leading zeros - \details Counts the number of leading zeros of a data value. - \param [in] value Value to count the leading zeros - \return number of leading zeros in value - */ -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) -{ - /* Even though __builtin_clz produces a CLZ instruction on ARM, formally - __builtin_clz(0) is undefined behaviour, so handle this case specially. - This guarantees ARM-compatible results if happening to compile on a non-ARM - target, and ensures the compiler doesn't decide to activate any - optimisations using the logic "value was passed to __builtin_clz, so it - is non-zero". - ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a - single CLZ instruction. - */ - if (value == 0U) - { - return 32U; - } - return __builtin_clz(value); -} - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \brief LDR Exclusive (8 bit) - \details Executes a exclusive LDR instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -#define __LDREXB (uint8_t)__builtin_arm_ldrex - - -/** - \brief LDR Exclusive (16 bit) - \details Executes a exclusive LDR instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -#define __LDREXH (uint16_t)__builtin_arm_ldrex - - -/** - \brief LDR Exclusive (32 bit) - \details Executes a exclusive LDR instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -#define __LDREXW (uint32_t)__builtin_arm_ldrex - - -/** - \brief STR Exclusive (8 bit) - \details Executes a exclusive STR instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STREXB (uint32_t)__builtin_arm_strex - - -/** - \brief STR Exclusive (16 bit) - \details Executes a exclusive STR instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STREXH (uint32_t)__builtin_arm_strex - - -/** - \brief STR Exclusive (32 bit) - \details Executes a exclusive STR instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STREXW (uint32_t)__builtin_arm_strex - - -/** - \brief Remove the exclusive lock - \details Removes the exclusive lock which is created by LDREX. - */ -#define __CLREX __builtin_arm_clrex - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) - -/** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value - */ -#define __SSAT __builtin_arm_ssat - - -/** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value - */ -#define __USAT __builtin_arm_usat - - -/** - \brief Rotate Right with Extend (32 bit) - \details Moves each bit of a bitstring right by one bit. - The carry input is shifted in at the left end of the bitstring. - \param [in] value Value to rotate - \return Rotated value - */ -__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) -{ - uint32_t result; - - __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); - return(result); -} - - -/** - \brief LDRT Unprivileged (8 bit) - \details Executes a Unprivileged LDRT instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint8_t) result); /* Add explicit type cast here */ -} - - -/** - \brief LDRT Unprivileged (16 bit) - \details Executes a Unprivileged LDRT instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint16_t) result); /* Add explicit type cast here */ -} - - -/** - \brief LDRT Unprivileged (32 bit) - \details Executes a Unprivileged LDRT instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); - return(result); -} - - -/** - \brief STRT Unprivileged (8 bit) - \details Executes a Unprivileged STRT instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) -{ - __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief STRT Unprivileged (16 bit) - \details Executes a Unprivileged STRT instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) -{ - __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief STRT Unprivileged (32 bit) - \details Executes a Unprivileged STRT instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); -} - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - -/** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value - */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value - */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \brief Load-Acquire (8 bit) - \details Executes a LDAB instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint8_t) result); -} - - -/** - \brief Load-Acquire (16 bit) - \details Executes a LDAH instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint16_t) result); -} - - -/** - \brief Load-Acquire (32 bit) - \details Executes a LDA instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) ); - return(result); -} - - -/** - \brief Store-Release (8 bit) - \details Executes a STLB instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) -{ - __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief Store-Release (16 bit) - \details Executes a STLH instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) -{ - __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief Store-Release (32 bit) - \details Executes a STL instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief Load-Acquire Exclusive (8 bit) - \details Executes a LDAB exclusive instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -#define __LDAEXB (uint8_t)__builtin_arm_ldaex - - -/** - \brief Load-Acquire Exclusive (16 bit) - \details Executes a LDAH exclusive instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -#define __LDAEXH (uint16_t)__builtin_arm_ldaex - - -/** - \brief Load-Acquire Exclusive (32 bit) - \details Executes a LDA exclusive instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -#define __LDAEX (uint32_t)__builtin_arm_ldaex - - -/** - \brief Store-Release Exclusive (8 bit) - \details Executes a STLB exclusive instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STLEXB (uint32_t)__builtin_arm_stlex - - -/** - \brief Store-Release Exclusive (16 bit) - \details Executes a STLH exclusive instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STLEXH (uint32_t)__builtin_arm_stlex - - -/** - \brief Store-Release Exclusive (32 bit) - \details Executes a STL exclusive instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -#define __STLEX (uint32_t)__builtin_arm_stlex - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) - -__STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - - -__STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - - -__STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -#define __SSAT16(ARG1,ARG2) \ -({ \ - int32_t __RES, __ARG1 = (ARG1); \ - __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ - __RES; \ - }) - -#define __USAT16(ARG1,ARG2) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1); \ - __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ - __RES; \ - }) - -__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -__STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc) -{ - union llreg_u{ - uint32_t w32[2]; - uint64_t w64; - } llr; - llr.w64 = acc; - -#ifndef __ARMEB__ /* Little endian */ - __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); -#else /* Big endian */ - __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); -#endif - - return(llr.w64); -} - -__STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc) -{ - union llreg_u{ - uint32_t w32[2]; - uint64_t w64; - } llr; - llr.w64 = acc; - -#ifndef __ARMEB__ /* Little endian */ - __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); -#else /* Big endian */ - __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); -#endif - - return(llr.w64); -} - -__STATIC_FORCEINLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -__STATIC_FORCEINLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc) -{ - union llreg_u{ - uint32_t w32[2]; - uint64_t w64; - } llr; - llr.w64 = acc; - -#ifndef __ARMEB__ /* Little endian */ - __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); -#else /* Big endian */ - __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); -#endif - - return(llr.w64); -} - -__STATIC_FORCEINLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc) -{ - union llreg_u{ - uint32_t w32[2]; - uint64_t w64; - } llr; - llr.w64 = acc; - -#ifndef __ARMEB__ /* Little endian */ - __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); -#else /* Big endian */ - __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); -#endif - - return(llr.w64); -} - -__STATIC_FORCEINLINE uint32_t __SEL (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE int32_t __QADD( int32_t op1, int32_t op2) -{ - int32_t result; - - __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) -{ - int32_t result; - - __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ - ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) - -#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ - ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) - -__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) -{ - int32_t result; - - __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -#endif /* (__ARM_FEATURE_DSP == 1) */ -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#endif /* __CMSIS_ARMCLANG_H */ diff --git a/include/cmsis/cmsis_compiler.h b/include/cmsis/cmsis_compiler.h deleted file mode 100644 index fdb1a97..0000000 --- a/include/cmsis/cmsis_compiler.h +++ /dev/null @@ -1,271 +0,0 @@ -/**************************************************************************//** - * @file cmsis_compiler.h - * @brief CMSIS compiler generic header file - * @version V5.1.0 - * @date 09. October 2018 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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 __CMSIS_COMPILER_H -#define __CMSIS_COMPILER_H - -#include - -/* - * Arm Compiler 4/5 - */ -#if defined ( __CC_ARM ) - #include "cmsis_armcc.h" - - -/* - * Arm Compiler 6.6 LTM (armclang) - */ -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) && (__ARMCC_VERSION < 6100100) - #include "cmsis_armclang_ltm.h" - - /* - * Arm Compiler above 6.10.1 (armclang) - */ -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) - #include "cmsis_armclang.h" - - -/* - * GNU Compiler - */ -#elif defined ( __GNUC__ ) - #include "cmsis_gcc.h" - - -/* - * IAR Compiler - */ -#elif defined ( __ICCARM__ ) - #include - - -/* - * TI Arm Compiler - */ -#elif defined ( __TI_ARM__ ) - #include - - #ifndef __ASM - #define __ASM __asm - #endif - #ifndef __INLINE - #define __INLINE inline - #endif - #ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline - #endif - #ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __STATIC_INLINE - #endif - #ifndef __NO_RETURN - #define __NO_RETURN __attribute__((noreturn)) - #endif - #ifndef __USED - #define __USED __attribute__((used)) - #endif - #ifndef __WEAK - #define __WEAK __attribute__((weak)) - #endif - #ifndef __PACKED - #define __PACKED __attribute__((packed)) - #endif - #ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed)) - #endif - #ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed)) - #endif - #ifndef __UNALIGNED_UINT32 /* deprecated */ - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) - #endif - #ifndef __UNALIGNED_UINT16_WRITE - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT16_READ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) - #endif - #ifndef __UNALIGNED_UINT32_WRITE - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT32_READ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) - #endif - #ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) - #endif - #ifndef __RESTRICT - #define __RESTRICT __restrict - #endif - - -/* - * TASKING Compiler - */ -#elif defined ( __TASKING__ ) - /* - * The CMSIS functions have been implemented as intrinsics in the compiler. - * Please use "carm -?i" to get an up to date list of all intrinsics, - * Including the CMSIS ones. - */ - - #ifndef __ASM - #define __ASM __asm - #endif - #ifndef __INLINE - #define __INLINE inline - #endif - #ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline - #endif - #ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __STATIC_INLINE - #endif - #ifndef __NO_RETURN - #define __NO_RETURN __attribute__((noreturn)) - #endif - #ifndef __USED - #define __USED __attribute__((used)) - #endif - #ifndef __WEAK - #define __WEAK __attribute__((weak)) - #endif - #ifndef __PACKED - #define __PACKED __packed__ - #endif - #ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __packed__ - #endif - #ifndef __PACKED_UNION - #define __PACKED_UNION union __packed__ - #endif - #ifndef __UNALIGNED_UINT32 /* deprecated */ - struct __packed__ T_UINT32 { uint32_t v; }; - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) - #endif - #ifndef __UNALIGNED_UINT16_WRITE - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT16_READ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) - #endif - #ifndef __UNALIGNED_UINT32_WRITE - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT32_READ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) - #endif - #ifndef __ALIGNED - #define __ALIGNED(x) __align(x) - #endif - #ifndef __RESTRICT - #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. - #define __RESTRICT - #endif - - -/* - * COSMIC Compiler - */ -#elif defined ( __CSMC__ ) - #include - - #ifndef __ASM - #define __ASM _asm - #endif - #ifndef __INLINE - #define __INLINE inline - #endif - #ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline - #endif - #ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __STATIC_INLINE - #endif - #ifndef __NO_RETURN - // NO RETURN is automatically detected hence no warning here - #define __NO_RETURN - #endif - #ifndef __USED - #warning No compiler specific solution for __USED. __USED is ignored. - #define __USED - #endif - #ifndef __WEAK - #define __WEAK __weak - #endif - #ifndef __PACKED - #define __PACKED @packed - #endif - #ifndef __PACKED_STRUCT - #define __PACKED_STRUCT @packed struct - #endif - #ifndef __PACKED_UNION - #define __PACKED_UNION @packed union - #endif - #ifndef __UNALIGNED_UINT32 /* deprecated */ - @packed struct T_UINT32 { uint32_t v; }; - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) - #endif - #ifndef __UNALIGNED_UINT16_WRITE - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT16_READ - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) - #endif - #ifndef __UNALIGNED_UINT32_WRITE - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) - #endif - #ifndef __UNALIGNED_UINT32_READ - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) - #endif - #ifndef __ALIGNED - #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored. - #define __ALIGNED(x) - #endif - #ifndef __RESTRICT - #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. - #define __RESTRICT - #endif - - -#else - #error Unknown compiler. -#endif - - -#endif /* __CMSIS_COMPILER_H */ - diff --git a/include/cmsis/cmsis_gcc.h b/include/cmsis/cmsis_gcc.h deleted file mode 100644 index d86b0a2..0000000 --- a/include/cmsis/cmsis_gcc.h +++ /dev/null @@ -1,2101 +0,0 @@ -/**************************************************************************//** - * @file cmsis_gcc.h - * @brief CMSIS compiler GCC header file - * @version V5.1.0 - * @date 20. December 2018 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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 __CMSIS_GCC_H -#define __CMSIS_GCC_H - -/* ignore some GCC warnings */ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wsign-conversion" -#pragma GCC diagnostic ignored "-Wconversion" -#pragma GCC diagnostic ignored "-Wunused-parameter" - -/* Fallback for __has_builtin */ -#ifndef __has_builtin - #define __has_builtin(x) (0) -#endif - -/* CMSIS compiler specific defines */ -#ifndef __ASM - #define __ASM __asm -#endif -#ifndef __INLINE - #define __INLINE inline -#endif -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline -#endif -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline -#endif -#ifndef __NO_RETURN - #define __NO_RETURN __attribute__((__noreturn__)) -#endif -#ifndef __USED - #define __USED __attribute__((used)) -#endif -#ifndef __WEAK - #define __WEAK __attribute__((weak)) -#endif -#ifndef __PACKED - #define __PACKED __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_STRUCT - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) -#endif -#ifndef __PACKED_UNION - #define __PACKED_UNION union __attribute__((packed, aligned(1))) -#endif -#ifndef __UNALIGNED_UINT32 /* deprecated */ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - struct __attribute__((packed)) T_UINT32 { uint32_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) -#endif -#ifndef __UNALIGNED_UINT16_WRITE - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT16_READ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) -#endif -#ifndef __UNALIGNED_UINT32_WRITE - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) -#endif -#ifndef __UNALIGNED_UINT32_READ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wpacked" - #pragma GCC diagnostic ignored "-Wattributes" - __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; - #pragma GCC diagnostic pop - #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) -#endif -#ifndef __ALIGNED - #define __ALIGNED(x) __attribute__((aligned(x))) -#endif -#ifndef __RESTRICT - #define __RESTRICT __restrict -#endif - - -/* ########################### Core Function Access ########################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions - @{ - */ - -/** - \brief Enable IRQ Interrupts - \details Enables IRQ interrupts by clearing the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE void __enable_irq(void) -{ - __ASM volatile ("cpsie i" : : : "memory"); -} - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE void __disable_irq(void) -{ - __ASM volatile ("cpsid i" : : : "memory"); -} - - -/** - \brief Get Control Register - \details Returns the content of the Control Register. - \return Control Register value - */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Control Register (non-secure) - \details Returns the content of the non-secure Control Register when in secure mode. - \return non-secure Control Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Control Register - \details Writes the given value to the Control Register. - \param [in] control Control Register value to set - */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Control Register (non-secure) - \details Writes the given value to the non-secure Control Register when in secure state. - \param [in] control Control Register value to set - */ -__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) -{ - __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); -} -#endif - - -/** - \brief Get IPSR Register - \details Returns the content of the IPSR Register. - \return IPSR Register value - */ -__STATIC_FORCEINLINE uint32_t __get_IPSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); - return(result); -} - - -/** - \brief Get APSR Register - \details Returns the content of the APSR Register. - \return APSR Register value - */ -__STATIC_FORCEINLINE uint32_t __get_APSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, apsr" : "=r" (result) ); - return(result); -} - - -/** - \brief Get xPSR Register - \details Returns the content of the xPSR Register. - \return xPSR Register value - */ -__STATIC_FORCEINLINE uint32_t __get_xPSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); - return(result); -} - - -/** - \brief Get Process Stack Pointer - \details Returns the current value of the Process Stack Pointer (PSP). - \return PSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer (non-secure) - \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. - \return PSP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Process Stack Pointer - \details Assigns the given value to the Process Stack Pointer (PSP). - \param [in] topOfProcStack Process Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. - \param [in] topOfProcStack Process Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif - - -/** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer (non-secure) - \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. - \return MSP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Main Stack Pointer - \details Assigns the given value to the Main Stack Pointer (MSP). - \param [in] topOfMainStack Main Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. - \param [in] topOfMainStack Main Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} -#endif - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); -} - - -/** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) -{ - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); -} -#endif - - -/** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Priority Mask (non-secure) - \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. - \return Priority Mask value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask_ns" : "=r" (result) :: "memory"); - return(result); -} -#endif - - -/** - \brief Set Priority Mask - \details Assigns the given value to the Priority Mask Register. - \param [in] priMask Priority Mask - */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) -{ - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Priority Mask (non-secure) - \details Assigns the given value to the non-secure Priority Mask Register when in secure state. - \param [in] priMask Priority Mask - */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) -{ - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); -} -#endif - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \brief Enable FIQ - \details Enables FIQ interrupts by clearing the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE void __enable_fault_irq(void) -{ - __ASM volatile ("cpsie f" : : : "memory"); -} - - -/** - \brief Disable FIQ - \details Disables FIQ interrupts by setting the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE void __disable_fault_irq(void) -{ - __ASM volatile ("cpsid f" : : : "memory"); -} - - -/** - \brief Get Base Priority - \details Returns the current value of the Base Priority register. - \return Base Priority register value - */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Base Priority (non-secure) - \details Returns the current value of the non-secure Base Priority register when in secure state. - \return Base Priority register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Base Priority - \details Assigns the given value to the Base Priority register. - \param [in] basePri Base Priority value to set - */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) -{ - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Base Priority (non-secure) - \details Assigns the given value to the non-secure Base Priority register when in secure state. - \param [in] basePri Base Priority value to set - */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); -} -#endif - - -/** - \brief Set Base Priority with condition - \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, - or the new value increases the BASEPRI priority level. - \param [in] basePri Base Priority value to set - */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) -{ - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); -} - - -/** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Fault Mask (non-secure) - \details Returns the current value of the non-secure Fault Mask register when in secure state. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Fault Mask - \details Assigns the given value to the Fault Mask register. - \param [in] faultMask Fault Mask value to set - */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Fault Mask (non-secure) - \details Assigns the given value to the non-secure Fault Mask register when in secure state. - \param [in] faultMask Fault Mask value to set - */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); -} -#endif - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - -/** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif -} - -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif -} -#endif - - -/** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif - - -/** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set - */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. - \param [in] MainStackPtrLimit Main Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif -} -#endif - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - - -/** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value - */ -__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) -{ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#if __has_builtin(__builtin_arm_get_fpscr) -// Re-enable using built-in when GCC has been fixed -// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) - /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ - return __builtin_arm_get_fpscr(); -#else - uint32_t result; - - __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); - return(result); -#endif -#else - return(0U); -#endif -} - - -/** - \brief Set FPSCR - \details Assigns the given value to the Floating Point Status/Control register. - \param [in] fpscr Floating Point Status/Control value to set - */ -__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr) -{ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#if __has_builtin(__builtin_arm_set_fpscr) -// Re-enable using built-in when GCC has been fixed -// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) - /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ - __builtin_arm_set_fpscr(fpscr); -#else - __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc", "memory"); -#endif -#else - (void)fpscr; -#endif -} - - -/*@} end of CMSIS_Core_RegAccFunctions */ - - -/* ########################## Core Instruction Access ######################### */ -/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface - Access to dedicated instructions - @{ -*/ - -/* Define macros for porting to both thumb1 and thumb2. - * For thumb1, use low register (r0-r7), specified by constraint "l" - * Otherwise, use general registers, specified by constraint "r" */ -#if defined (__thumb__) && !defined (__thumb2__) -#define __CMSIS_GCC_OUT_REG(r) "=l" (r) -#define __CMSIS_GCC_RW_REG(r) "+l" (r) -#define __CMSIS_GCC_USE_REG(r) "l" (r) -#else -#define __CMSIS_GCC_OUT_REG(r) "=r" (r) -#define __CMSIS_GCC_RW_REG(r) "+r" (r) -#define __CMSIS_GCC_USE_REG(r) "r" (r) -#endif - -/** - \brief No Operation - \details No Operation does nothing. This instruction can be used for code alignment purposes. - */ -#define __NOP() __ASM volatile ("nop") - -/** - \brief Wait For Interrupt - \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. - */ -#define __WFI() __ASM volatile ("wfi") - - -/** - \brief Wait For Event - \details Wait For Event is a hint instruction that permits the processor to enter - a low-power state until one of a number of events occurs. - */ -#define __WFE() __ASM volatile ("wfe") - - -/** - \brief Send Event - \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. - */ -#define __SEV() __ASM volatile ("sev") - - -/** - \brief Instruction Synchronization Barrier - \details Instruction Synchronization Barrier flushes the pipeline in the processor, - so that all instructions following the ISB are fetched from cache or memory, - after the instruction has been completed. - */ -__STATIC_FORCEINLINE void __ISB(void) -{ - __ASM volatile ("isb 0xF":::"memory"); -} - - -/** - \brief Data Synchronization Barrier - \details Acts as a special kind of Data Memory Barrier. - It completes when all explicit memory accesses before this instruction complete. - */ -__STATIC_FORCEINLINE void __DSB(void) -{ - __ASM volatile ("dsb 0xF":::"memory"); -} - - -/** - \brief Data Memory Barrier - \details Ensures the apparent order of the explicit memory operations before - and after the instruction, without ensuring their completion. - */ -__STATIC_FORCEINLINE void __DMB(void) -{ - __ASM volatile ("dmb 0xF":::"memory"); -} - - -/** - \brief Reverse byte order (32 bit) - \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value - */ -__STATIC_FORCEINLINE uint32_t __REV(uint32_t value) -{ -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) - return __builtin_bswap32(value); -#else - uint32_t result; - - __ASM volatile ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); - return result; -#endif -} - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value - */ -__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value) -{ - uint32_t result; - - __ASM volatile ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); - return result; -} - - -/** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value - */ -__STATIC_FORCEINLINE int16_t __REVSH(int16_t value) -{ -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - return (int16_t)__builtin_bswap16(value); -#else - int16_t result; - - __ASM volatile ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); - return result; -#endif -} - - -/** - \brief Rotate Right in unsigned value (32 bit) - \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. - \param [in] op1 Value to rotate - \param [in] op2 Number of Bits to rotate - \return Rotated value - */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) -{ - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - return (op1 >> op2) | (op1 << (32U - op2)); -} - - -/** - \brief Breakpoint - \details Causes the processor to enter Debug state. - Debug tools can use this to investigate system state when the instruction at a particular address is reached. - \param [in] value is ignored by the processor. - If required, a debugger can use it to store additional information about the breakpoint. - */ -#define __BKPT(value) __ASM volatile ("bkpt "#value) - - -/** - \brief Reverse bit order of value - \details Reverses the bit order of the given value. - \param [in] value Value to reverse - \return Reversed value - */ -__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) -{ - uint32_t result; - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) - __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); -#else - uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ - - result = value; /* r will be reversed bits of v; first get LSB of v */ - for (value >>= 1U; value != 0U; value >>= 1U) - { - result <<= 1U; - result |= value & 1U; - s--; - } - result <<= s; /* shift when v's highest bits are zero */ -#endif - return result; -} - - -/** - \brief Count leading zeros - \details Counts the number of leading zeros of a data value. - \param [in] value Value to count the leading zeros - \return number of leading zeros in value - */ -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) -{ - /* Even though __builtin_clz produces a CLZ instruction on ARM, formally - __builtin_clz(0) is undefined behaviour, so handle this case specially. - This guarantees ARM-compatible results if happening to compile on a non-ARM - target, and ensures the compiler doesn't decide to activate any - optimisations using the logic "value was passed to __builtin_clz, so it - is non-zero". - ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a - single CLZ instruction. - */ - if (value == 0U) - { - return 32U; - } - return __builtin_clz(value); -} - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \brief LDR Exclusive (8 bit) - \details Executes a exclusive LDR instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -__STATIC_FORCEINLINE uint8_t __LDREXB(volatile uint8_t *addr) -{ - uint32_t result; - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); -#else - /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not - accepted by assembler. So has to use following less efficient pattern. - */ - __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); -#endif - return ((uint8_t) result); /* Add explicit type cast here */ -} - - -/** - \brief LDR Exclusive (16 bit) - \details Executes a exclusive LDR instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -__STATIC_FORCEINLINE uint16_t __LDREXH(volatile uint16_t *addr) -{ - uint32_t result; - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); -#else - /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not - accepted by assembler. So has to use following less efficient pattern. - */ - __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); -#endif - return ((uint16_t) result); /* Add explicit type cast here */ -} - - -/** - \brief LDR Exclusive (32 bit) - \details Executes a exclusive LDR instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -__STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr) -{ - uint32_t result; - - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - return(result); -} - - -/** - \brief STR Exclusive (8 bit) - \details Executes a exclusive STR instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -__STATIC_FORCEINLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) -{ - uint32_t result; - - __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); - return(result); -} - - -/** - \brief STR Exclusive (16 bit) - \details Executes a exclusive STR instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -__STATIC_FORCEINLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) -{ - uint32_t result; - - __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); - return(result); -} - - -/** - \brief STR Exclusive (32 bit) - \details Executes a exclusive STR instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -__STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) -{ - uint32_t result; - - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - return(result); -} - - -/** - \brief Remove the exclusive lock - \details Removes the exclusive lock which is created by LDREX. - */ -__STATIC_FORCEINLINE void __CLREX(void) -{ - __ASM volatile ("clrex" ::: "memory"); -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] ARG1 Value to be saturated - \param [in] ARG2 Bit position to saturate to (1..32) - \return Saturated value - */ -#define __SSAT(ARG1,ARG2) \ -__extension__ \ -({ \ - int32_t __RES, __ARG1 = (ARG1); \ - __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ - __RES; \ - }) - - -/** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] ARG1 Value to be saturated - \param [in] ARG2 Bit position to saturate to (0..31) - \return Saturated value - */ -#define __USAT(ARG1,ARG2) \ - __extension__ \ -({ \ - uint32_t __RES, __ARG1 = (ARG1); \ - __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ - __RES; \ - }) - - -/** - \brief Rotate Right with Extend (32 bit) - \details Moves each bit of a bitstring right by one bit. - The carry input is shifted in at the left end of the bitstring. - \param [in] value Value to rotate - \return Rotated value - */ -__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) -{ - uint32_t result; - - __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); - return(result); -} - - -/** - \brief LDRT Unprivileged (8 bit) - \details Executes a Unprivileged LDRT instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) -{ - uint32_t result; - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); -#else - /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not - accepted by assembler. So has to use following less efficient pattern. - */ - __ASM volatile ("ldrbt %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); -#endif - return ((uint8_t) result); /* Add explicit type cast here */ -} - - -/** - \brief LDRT Unprivileged (16 bit) - \details Executes a Unprivileged LDRT instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) -{ - uint32_t result; - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); -#else - /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not - accepted by assembler. So has to use following less efficient pattern. - */ - __ASM volatile ("ldrht %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); -#endif - return ((uint16_t) result); /* Add explicit type cast here */ -} - - -/** - \brief LDRT Unprivileged (32 bit) - \details Executes a Unprivileged LDRT instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); - return(result); -} - - -/** - \brief STRT Unprivileged (8 bit) - \details Executes a Unprivileged STRT instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) -{ - __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief STRT Unprivileged (16 bit) - \details Executes a Unprivileged STRT instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) -{ - __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief STRT Unprivileged (32 bit) - \details Executes a Unprivileged STRT instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); -} - -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - -/** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value - */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; -} - -/** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value - */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ - - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \brief Load-Acquire (8 bit) - \details Executes a LDAB instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint8_t) result); -} - - -/** - \brief Load-Acquire (16 bit) - \details Executes a LDAH instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint16_t) result); -} - - -/** - \brief Load-Acquire (32 bit) - \details Executes a LDA instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) ); - return(result); -} - - -/** - \brief Store-Release (8 bit) - \details Executes a STLB instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) -{ - __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief Store-Release (16 bit) - \details Executes a STLH instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) -{ - __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief Store-Release (32 bit) - \details Executes a STL instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - */ -__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) -{ - __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); -} - - -/** - \brief Load-Acquire Exclusive (8 bit) - \details Executes a LDAB exclusive instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint8_t) result); -} - - -/** - \brief Load-Acquire Exclusive (16 bit) - \details Executes a LDAH exclusive instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint16_t) result); -} - - -/** - \brief Load-Acquire Exclusive (32 bit) - \details Executes a LDA exclusive instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) ); - return(result); -} - - -/** - \brief Store-Release Exclusive (8 bit) - \details Executes a STLB exclusive instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); - return(result); -} - - -/** - \brief Store-Release Exclusive (16 bit) - \details Executes a STLH exclusive instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); - return(result); -} - - -/** - \brief Store-Release Exclusive (32 bit) - \details Executes a STL exclusive instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed - */ -__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) -{ - uint32_t result; - - __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); - return(result); -} - -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ - - -/* ################### Compiler specific Intrinsics ########################### */ -/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics - Access to dedicated SIMD instructions - @{ -*/ - -#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) - -__STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - - -__STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - - -__STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -#define __SSAT16(ARG1,ARG2) \ -({ \ - int32_t __RES, __ARG1 = (ARG1); \ - __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ - __RES; \ - }) - -#define __USAT16(ARG1,ARG2) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1); \ - __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ - __RES; \ - }) - -__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) -{ - uint32_t result; - - __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -__STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc) -{ - union llreg_u{ - uint32_t w32[2]; - uint64_t w64; - } llr; - llr.w64 = acc; - -#ifndef __ARMEB__ /* Little endian */ - __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); -#else /* Big endian */ - __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); -#endif - - return(llr.w64); -} - -__STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc) -{ - union llreg_u{ - uint32_t w32[2]; - uint64_t w64; - } llr; - llr.w64 = acc; - -#ifndef __ARMEB__ /* Little endian */ - __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); -#else /* Big endian */ - __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); -#endif - - return(llr.w64); -} - -__STATIC_FORCEINLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -__STATIC_FORCEINLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) -{ - uint32_t result; - - __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -__STATIC_FORCEINLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc) -{ - union llreg_u{ - uint32_t w32[2]; - uint64_t w64; - } llr; - llr.w64 = acc; - -#ifndef __ARMEB__ /* Little endian */ - __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); -#else /* Big endian */ - __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); -#endif - - return(llr.w64); -} - -__STATIC_FORCEINLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc) -{ - union llreg_u{ - uint32_t w32[2]; - uint64_t w64; - } llr; - llr.w64 = acc; - -#ifndef __ARMEB__ /* Little endian */ - __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); -#else /* Big endian */ - __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); -#endif - - return(llr.w64); -} - -__STATIC_FORCEINLINE uint32_t __SEL (uint32_t op1, uint32_t op2) -{ - uint32_t result; - - __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE int32_t __QADD( int32_t op1, int32_t op2) -{ - int32_t result; - - __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -__STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) -{ - int32_t result; - - __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); - return(result); -} - -#if 0 -#define __PKHBT(ARG1,ARG2,ARG3) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ - __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ - __RES; \ - }) - -#define __PKHTB(ARG1,ARG2,ARG3) \ -({ \ - uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ - if (ARG3 == 0) \ - __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ - else \ - __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ - __RES; \ - }) -#endif - -#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ - ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) - -#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ - ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) - -__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) -{ - int32_t result; - - __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); - return(result); -} - -#endif /* (__ARM_FEATURE_DSP == 1) */ -/*@} end of group CMSIS_SIMD_intrinsics */ - - -#pragma GCC diagnostic pop - -#endif /* __CMSIS_GCC_H */ diff --git a/include/cmsis/cmsis_iccarm.h b/include/cmsis/cmsis_iccarm.h deleted file mode 100644 index 20b50ce..0000000 --- a/include/cmsis/cmsis_iccarm.h +++ /dev/null @@ -1,940 +0,0 @@ -/**************************************************************************//** - * @file cmsis_iccarm.h - * @brief CMSIS compiler ICCARM (IAR Compiler for Arm) header file - * @version V5.0.8 - * @date 04. September 2018 - ******************************************************************************/ - -//------------------------------------------------------------------------------ -// -// Copyright (c) 2017-2018 IAR Systems -// -// 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 __CMSIS_ICCARM_H__ -#define __CMSIS_ICCARM_H__ - -#ifndef __ICCARM__ - #error This file should only be compiled by ICCARM -#endif - -#pragma system_include - -#define __IAR_FT _Pragma("inline=forced") __intrinsic - -#if (__VER__ >= 8000000) - #define __ICCARM_V8 1 -#else - #define __ICCARM_V8 0 -#endif - -#ifndef __ALIGNED - #if __ICCARM_V8 - #define __ALIGNED(x) __attribute__((aligned(x))) - #elif (__VER__ >= 7080000) - /* Needs IAR language extensions */ - #define __ALIGNED(x) __attribute__((aligned(x))) - #else - #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored. - #define __ALIGNED(x) - #endif -#endif - - -/* Define compiler macros for CPU architecture, used in CMSIS 5. - */ -#if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ || __ARM_ARCH_8M_BASE__ || __ARM_ARCH_8M_MAIN__ -/* Macros already defined */ -#else - #if defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) - #define __ARM_ARCH_8M_MAIN__ 1 - #elif defined(__ARM8M_BASELINE__) - #define __ARM_ARCH_8M_BASE__ 1 - #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M' - #if __ARM_ARCH == 6 - #define __ARM_ARCH_6M__ 1 - #elif __ARM_ARCH == 7 - #if __ARM_FEATURE_DSP - #define __ARM_ARCH_7EM__ 1 - #else - #define __ARM_ARCH_7M__ 1 - #endif - #endif /* __ARM_ARCH */ - #endif /* __ARM_ARCH_PROFILE == 'M' */ -#endif - -/* Alternativ core deduction for older ICCARM's */ -#if !defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7EM__) && \ - !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__) - #if defined(__ARM6M__) && (__CORE__ == __ARM6M__) - #define __ARM_ARCH_6M__ 1 - #elif defined(__ARM7M__) && (__CORE__ == __ARM7M__) - #define __ARM_ARCH_7M__ 1 - #elif defined(__ARM7EM__) && (__CORE__ == __ARM7EM__) - #define __ARM_ARCH_7EM__ 1 - #elif defined(__ARM8M_BASELINE__) && (__CORE == __ARM8M_BASELINE__) - #define __ARM_ARCH_8M_BASE__ 1 - #elif defined(__ARM8M_MAINLINE__) && (__CORE == __ARM8M_MAINLINE__) - #define __ARM_ARCH_8M_MAIN__ 1 - #elif defined(__ARM8EM_MAINLINE__) && (__CORE == __ARM8EM_MAINLINE__) - #define __ARM_ARCH_8M_MAIN__ 1 - #else - #error "Unknown target." - #endif -#endif - - - -#if defined(__ARM_ARCH_6M__) && __ARM_ARCH_6M__==1 - #define __IAR_M0_FAMILY 1 -#elif defined(__ARM_ARCH_8M_BASE__) && __ARM_ARCH_8M_BASE__==1 - #define __IAR_M0_FAMILY 1 -#else - #define __IAR_M0_FAMILY 0 -#endif - - -#ifndef __ASM - #define __ASM __asm -#endif - -#ifndef __INLINE - #define __INLINE inline -#endif - -#ifndef __NO_RETURN - #if __ICCARM_V8 - #define __NO_RETURN __attribute__((__noreturn__)) - #else - #define __NO_RETURN _Pragma("object_attribute=__noreturn") - #endif -#endif - -#ifndef __PACKED - #if __ICCARM_V8 - #define __PACKED __attribute__((packed, aligned(1))) - #else - /* Needs IAR language extensions */ - #define __PACKED __packed - #endif -#endif - -#ifndef __PACKED_STRUCT - #if __ICCARM_V8 - #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) - #else - /* Needs IAR language extensions */ - #define __PACKED_STRUCT __packed struct - #endif -#endif - -#ifndef __PACKED_UNION - #if __ICCARM_V8 - #define __PACKED_UNION union __attribute__((packed, aligned(1))) - #else - /* Needs IAR language extensions */ - #define __PACKED_UNION __packed union - #endif -#endif - -#ifndef __RESTRICT - #if __ICCARM_V8 - #define __RESTRICT __restrict - #else - /* Needs IAR language extensions */ - #define __RESTRICT restrict - #endif -#endif - -#ifndef __STATIC_INLINE - #define __STATIC_INLINE static inline -#endif - -#ifndef __FORCEINLINE - #define __FORCEINLINE _Pragma("inline=forced") -#endif - -#ifndef __STATIC_FORCEINLINE - #define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE -#endif - -#ifndef __UNALIGNED_UINT16_READ -#pragma language=save -#pragma language=extended -__IAR_FT uint16_t __iar_uint16_read(void const *ptr) -{ - return *(__packed uint16_t*)(ptr); -} -#pragma language=restore -#define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR) -#endif - - -#ifndef __UNALIGNED_UINT16_WRITE -#pragma language=save -#pragma language=extended -__IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) -{ - *(__packed uint16_t*)(ptr) = val;; -} -#pragma language=restore -#define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL) -#endif - -#ifndef __UNALIGNED_UINT32_READ -#pragma language=save -#pragma language=extended -__IAR_FT uint32_t __iar_uint32_read(void const *ptr) -{ - return *(__packed uint32_t*)(ptr); -} -#pragma language=restore -#define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR) -#endif - -#ifndef __UNALIGNED_UINT32_WRITE -#pragma language=save -#pragma language=extended -__IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) -{ - *(__packed uint32_t*)(ptr) = val;; -} -#pragma language=restore -#define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL) -#endif - -#ifndef __UNALIGNED_UINT32 /* deprecated */ -#pragma language=save -#pragma language=extended -__packed struct __iar_u32 { uint32_t v; }; -#pragma language=restore -#define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v) -#endif - -#ifndef __USED - #if __ICCARM_V8 - #define __USED __attribute__((used)) - #else - #define __USED _Pragma("__root") - #endif -#endif - -#ifndef __WEAK - #if __ICCARM_V8 - #define __WEAK __attribute__((weak)) - #else - #define __WEAK _Pragma("__weak") - #endif -#endif - - -#ifndef __ICCARM_INTRINSICS_VERSION__ - #define __ICCARM_INTRINSICS_VERSION__ 0 -#endif - -#if __ICCARM_INTRINSICS_VERSION__ == 2 - - #if defined(__CLZ) - #undef __CLZ - #endif - #if defined(__REVSH) - #undef __REVSH - #endif - #if defined(__RBIT) - #undef __RBIT - #endif - #if defined(__SSAT) - #undef __SSAT - #endif - #if defined(__USAT) - #undef __USAT - #endif - - #include "iccarm_builtin.h" - - #define __disable_fault_irq __iar_builtin_disable_fiq - #define __disable_irq __iar_builtin_disable_interrupt - #define __enable_fault_irq __iar_builtin_enable_fiq - #define __enable_irq __iar_builtin_enable_interrupt - #define __arm_rsr __iar_builtin_rsr - #define __arm_wsr __iar_builtin_wsr - - - #define __get_APSR() (__arm_rsr("APSR")) - #define __get_BASEPRI() (__arm_rsr("BASEPRI")) - #define __get_CONTROL() (__arm_rsr("CONTROL")) - #define __get_FAULTMASK() (__arm_rsr("FAULTMASK")) - - #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) - #define __get_FPSCR() (__arm_rsr("FPSCR")) - #define __set_FPSCR(VALUE) (__arm_wsr("FPSCR", (VALUE))) - #else - #define __get_FPSCR() ( 0 ) - #define __set_FPSCR(VALUE) ((void)VALUE) - #endif - - #define __get_IPSR() (__arm_rsr("IPSR")) - #define __get_MSP() (__arm_rsr("MSP")) - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - #define __get_MSPLIM() (0U) - #else - #define __get_MSPLIM() (__arm_rsr("MSPLIM")) - #endif - #define __get_PRIMASK() (__arm_rsr("PRIMASK")) - #define __get_PSP() (__arm_rsr("PSP")) - - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - #define __get_PSPLIM() (0U) - #else - #define __get_PSPLIM() (__arm_rsr("PSPLIM")) - #endif - - #define __get_xPSR() (__arm_rsr("xPSR")) - - #define __set_BASEPRI(VALUE) (__arm_wsr("BASEPRI", (VALUE))) - #define __set_BASEPRI_MAX(VALUE) (__arm_wsr("BASEPRI_MAX", (VALUE))) - #define __set_CONTROL(VALUE) (__arm_wsr("CONTROL", (VALUE))) - #define __set_FAULTMASK(VALUE) (__arm_wsr("FAULTMASK", (VALUE))) - #define __set_MSP(VALUE) (__arm_wsr("MSP", (VALUE))) - - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - #define __set_MSPLIM(VALUE) ((void)(VALUE)) - #else - #define __set_MSPLIM(VALUE) (__arm_wsr("MSPLIM", (VALUE))) - #endif - #define __set_PRIMASK(VALUE) (__arm_wsr("PRIMASK", (VALUE))) - #define __set_PSP(VALUE) (__arm_wsr("PSP", (VALUE))) - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - #define __set_PSPLIM(VALUE) ((void)(VALUE)) - #else - #define __set_PSPLIM(VALUE) (__arm_wsr("PSPLIM", (VALUE))) - #endif - - #define __TZ_get_CONTROL_NS() (__arm_rsr("CONTROL_NS")) - #define __TZ_set_CONTROL_NS(VALUE) (__arm_wsr("CONTROL_NS", (VALUE))) - #define __TZ_get_PSP_NS() (__arm_rsr("PSP_NS")) - #define __TZ_set_PSP_NS(VALUE) (__arm_wsr("PSP_NS", (VALUE))) - #define __TZ_get_MSP_NS() (__arm_rsr("MSP_NS")) - #define __TZ_set_MSP_NS(VALUE) (__arm_wsr("MSP_NS", (VALUE))) - #define __TZ_get_SP_NS() (__arm_rsr("SP_NS")) - #define __TZ_set_SP_NS(VALUE) (__arm_wsr("SP_NS", (VALUE))) - #define __TZ_get_PRIMASK_NS() (__arm_rsr("PRIMASK_NS")) - #define __TZ_set_PRIMASK_NS(VALUE) (__arm_wsr("PRIMASK_NS", (VALUE))) - #define __TZ_get_BASEPRI_NS() (__arm_rsr("BASEPRI_NS")) - #define __TZ_set_BASEPRI_NS(VALUE) (__arm_wsr("BASEPRI_NS", (VALUE))) - #define __TZ_get_FAULTMASK_NS() (__arm_rsr("FAULTMASK_NS")) - #define __TZ_set_FAULTMASK_NS(VALUE)(__arm_wsr("FAULTMASK_NS", (VALUE))) - - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - #define __TZ_get_PSPLIM_NS() (0U) - #define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE)) - #else - #define __TZ_get_PSPLIM_NS() (__arm_rsr("PSPLIM_NS")) - #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE))) - #endif - - #define __TZ_get_MSPLIM_NS() (__arm_rsr("MSPLIM_NS")) - #define __TZ_set_MSPLIM_NS(VALUE) (__arm_wsr("MSPLIM_NS", (VALUE))) - - #define __NOP __iar_builtin_no_operation - - #define __CLZ __iar_builtin_CLZ - #define __CLREX __iar_builtin_CLREX - - #define __DMB __iar_builtin_DMB - #define __DSB __iar_builtin_DSB - #define __ISB __iar_builtin_ISB - - #define __LDREXB __iar_builtin_LDREXB - #define __LDREXH __iar_builtin_LDREXH - #define __LDREXW __iar_builtin_LDREX - - #define __RBIT __iar_builtin_RBIT - #define __REV __iar_builtin_REV - #define __REV16 __iar_builtin_REV16 - - __IAR_FT int16_t __REVSH(int16_t val) - { - return (int16_t) __iar_builtin_REVSH(val); - } - - #define __ROR __iar_builtin_ROR - #define __RRX __iar_builtin_RRX - - #define __SEV __iar_builtin_SEV - - #if !__IAR_M0_FAMILY - #define __SSAT __iar_builtin_SSAT - #endif - - #define __STREXB __iar_builtin_STREXB - #define __STREXH __iar_builtin_STREXH - #define __STREXW __iar_builtin_STREX - - #if !__IAR_M0_FAMILY - #define __USAT __iar_builtin_USAT - #endif - - #define __WFE __iar_builtin_WFE - #define __WFI __iar_builtin_WFI - - #if __ARM_MEDIA__ - #define __SADD8 __iar_builtin_SADD8 - #define __QADD8 __iar_builtin_QADD8 - #define __SHADD8 __iar_builtin_SHADD8 - #define __UADD8 __iar_builtin_UADD8 - #define __UQADD8 __iar_builtin_UQADD8 - #define __UHADD8 __iar_builtin_UHADD8 - #define __SSUB8 __iar_builtin_SSUB8 - #define __QSUB8 __iar_builtin_QSUB8 - #define __SHSUB8 __iar_builtin_SHSUB8 - #define __USUB8 __iar_builtin_USUB8 - #define __UQSUB8 __iar_builtin_UQSUB8 - #define __UHSUB8 __iar_builtin_UHSUB8 - #define __SADD16 __iar_builtin_SADD16 - #define __QADD16 __iar_builtin_QADD16 - #define __SHADD16 __iar_builtin_SHADD16 - #define __UADD16 __iar_builtin_UADD16 - #define __UQADD16 __iar_builtin_UQADD16 - #define __UHADD16 __iar_builtin_UHADD16 - #define __SSUB16 __iar_builtin_SSUB16 - #define __QSUB16 __iar_builtin_QSUB16 - #define __SHSUB16 __iar_builtin_SHSUB16 - #define __USUB16 __iar_builtin_USUB16 - #define __UQSUB16 __iar_builtin_UQSUB16 - #define __UHSUB16 __iar_builtin_UHSUB16 - #define __SASX __iar_builtin_SASX - #define __QASX __iar_builtin_QASX - #define __SHASX __iar_builtin_SHASX - #define __UASX __iar_builtin_UASX - #define __UQASX __iar_builtin_UQASX - #define __UHASX __iar_builtin_UHASX - #define __SSAX __iar_builtin_SSAX - #define __QSAX __iar_builtin_QSAX - #define __SHSAX __iar_builtin_SHSAX - #define __USAX __iar_builtin_USAX - #define __UQSAX __iar_builtin_UQSAX - #define __UHSAX __iar_builtin_UHSAX - #define __USAD8 __iar_builtin_USAD8 - #define __USADA8 __iar_builtin_USADA8 - #define __SSAT16 __iar_builtin_SSAT16 - #define __USAT16 __iar_builtin_USAT16 - #define __UXTB16 __iar_builtin_UXTB16 - #define __UXTAB16 __iar_builtin_UXTAB16 - #define __SXTB16 __iar_builtin_SXTB16 - #define __SXTAB16 __iar_builtin_SXTAB16 - #define __SMUAD __iar_builtin_SMUAD - #define __SMUADX __iar_builtin_SMUADX - #define __SMMLA __iar_builtin_SMMLA - #define __SMLAD __iar_builtin_SMLAD - #define __SMLADX __iar_builtin_SMLADX - #define __SMLALD __iar_builtin_SMLALD - #define __SMLALDX __iar_builtin_SMLALDX - #define __SMUSD __iar_builtin_SMUSD - #define __SMUSDX __iar_builtin_SMUSDX - #define __SMLSD __iar_builtin_SMLSD - #define __SMLSDX __iar_builtin_SMLSDX - #define __SMLSLD __iar_builtin_SMLSLD - #define __SMLSLDX __iar_builtin_SMLSLDX - #define __SEL __iar_builtin_SEL - #define __QADD __iar_builtin_QADD - #define __QSUB __iar_builtin_QSUB - #define __PKHBT __iar_builtin_PKHBT - #define __PKHTB __iar_builtin_PKHTB - #endif - -#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */ - - #if __IAR_M0_FAMILY - /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ - #define __CLZ __cmsis_iar_clz_not_active - #define __SSAT __cmsis_iar_ssat_not_active - #define __USAT __cmsis_iar_usat_not_active - #define __RBIT __cmsis_iar_rbit_not_active - #define __get_APSR __cmsis_iar_get_APSR_not_active - #endif - - - #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) - #define __get_FPSCR __cmsis_iar_get_FPSR_not_active - #define __set_FPSCR __cmsis_iar_set_FPSR_not_active - #endif - - #ifdef __INTRINSICS_INCLUDED - #error intrinsics.h is already included previously! - #endif - - #include - - #if __IAR_M0_FAMILY - /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ - #undef __CLZ - #undef __SSAT - #undef __USAT - #undef __RBIT - #undef __get_APSR - - __STATIC_INLINE uint8_t __CLZ(uint32_t data) - { - if (data == 0U) { return 32U; } - - uint32_t count = 0U; - uint32_t mask = 0x80000000U; - - while ((data & mask) == 0U) - { - count += 1U; - mask = mask >> 1U; - } - return count; - } - - __STATIC_INLINE uint32_t __RBIT(uint32_t v) - { - uint8_t sc = 31U; - uint32_t r = v; - for (v >>= 1U; v; v >>= 1U) - { - r <<= 1U; - r |= v & 1U; - sc--; - } - return (r << sc); - } - - __STATIC_INLINE uint32_t __get_APSR(void) - { - uint32_t res; - __asm("MRS %0,APSR" : "=r" (res)); - return res; - } - - #endif - - #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) - #undef __get_FPSCR - #undef __set_FPSCR - #define __get_FPSCR() (0) - #define __set_FPSCR(VALUE) ((void)VALUE) - #endif - - #pragma diag_suppress=Pe940 - #pragma diag_suppress=Pe177 - - #define __enable_irq __enable_interrupt - #define __disable_irq __disable_interrupt - #define __NOP __no_operation - - #define __get_xPSR __get_PSR - - #if (!defined(__ARM_ARCH_6M__) || __ARM_ARCH_6M__==0) - - __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) - { - return __LDREX((unsigned long *)ptr); - } - - __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) - { - return __STREX(value, (unsigned long *)ptr); - } - #endif - - - /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ - #if (__CORTEX_M >= 0x03) - - __IAR_FT uint32_t __RRX(uint32_t value) - { - uint32_t result; - __ASM("RRX %0, %1" : "=r"(result) : "r" (value) : "cc"); - return(result); - } - - __IAR_FT void __set_BASEPRI_MAX(uint32_t value) - { - __asm volatile("MSR BASEPRI_MAX,%0"::"r" (value)); - } - - - #define __enable_fault_irq __enable_fiq - #define __disable_fault_irq __disable_fiq - - - #endif /* (__CORTEX_M >= 0x03) */ - - __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) - { - return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2)); - } - - #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - - __IAR_FT uint32_t __get_MSPLIM(void) - { - uint32_t res; - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - res = 0U; - #else - __asm volatile("MRS %0,MSPLIM" : "=r" (res)); - #endif - return res; - } - - __IAR_FT void __set_MSPLIM(uint32_t value) - { - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)value; - #else - __asm volatile("MSR MSPLIM,%0" :: "r" (value)); - #endif - } - - __IAR_FT uint32_t __get_PSPLIM(void) - { - uint32_t res; - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - res = 0U; - #else - __asm volatile("MRS %0,PSPLIM" : "=r" (res)); - #endif - return res; - } - - __IAR_FT void __set_PSPLIM(uint32_t value) - { - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)value; - #else - __asm volatile("MSR PSPLIM,%0" :: "r" (value)); - #endif - } - - __IAR_FT uint32_t __TZ_get_CONTROL_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,CONTROL_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_CONTROL_NS(uint32_t value) - { - __asm volatile("MSR CONTROL_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_PSP_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,PSP_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_PSP_NS(uint32_t value) - { - __asm volatile("MSR PSP_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_MSP_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,MSP_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_MSP_NS(uint32_t value) - { - __asm volatile("MSR MSP_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_SP_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,SP_NS" : "=r" (res)); - return res; - } - __IAR_FT void __TZ_set_SP_NS(uint32_t value) - { - __asm volatile("MSR SP_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_PRIMASK_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,PRIMASK_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_PRIMASK_NS(uint32_t value) - { - __asm volatile("MSR PRIMASK_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_BASEPRI_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,BASEPRI_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_BASEPRI_NS(uint32_t value) - { - __asm volatile("MSR BASEPRI_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_FAULTMASK_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,FAULTMASK_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_FAULTMASK_NS(uint32_t value) - { - __asm volatile("MSR FAULTMASK_NS,%0" :: "r" (value)); - } - - __IAR_FT uint32_t __TZ_get_PSPLIM_NS(void) - { - uint32_t res; - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - res = 0U; - #else - __asm volatile("MRS %0,PSPLIM_NS" : "=r" (res)); - #endif - return res; - } - - __IAR_FT void __TZ_set_PSPLIM_NS(uint32_t value) - { - #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)value; - #else - __asm volatile("MSR PSPLIM_NS,%0" :: "r" (value)); - #endif - } - - __IAR_FT uint32_t __TZ_get_MSPLIM_NS(void) - { - uint32_t res; - __asm volatile("MRS %0,MSPLIM_NS" : "=r" (res)); - return res; - } - - __IAR_FT void __TZ_set_MSPLIM_NS(uint32_t value) - { - __asm volatile("MSR MSPLIM_NS,%0" :: "r" (value)); - } - - #endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ - -#endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */ - -#define __BKPT(value) __asm volatile ("BKPT %0" : : "i"(value)) - -#if __IAR_M0_FAMILY - __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) - { - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; - } - - __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) - { - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; - } -#endif - -#if (__CORTEX_M >= 0x03) /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ - - __IAR_FT uint8_t __LDRBT(volatile uint8_t *addr) - { - uint32_t res; - __ASM("LDRBT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); - return ((uint8_t)res); - } - - __IAR_FT uint16_t __LDRHT(volatile uint16_t *addr) - { - uint32_t res; - __ASM("LDRHT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); - return ((uint16_t)res); - } - - __IAR_FT uint32_t __LDRT(volatile uint32_t *addr) - { - uint32_t res; - __ASM("LDRT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); - return res; - } - - __IAR_FT void __STRBT(uint8_t value, volatile uint8_t *addr) - { - __ASM("STRBT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); - } - - __IAR_FT void __STRHT(uint16_t value, volatile uint16_t *addr) - { - __ASM("STRHT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); - } - - __IAR_FT void __STRT(uint32_t value, volatile uint32_t *addr) - { - __ASM("STRT %1, [%0]" : : "r" (addr), "r" (value) : "memory"); - } - -#endif /* (__CORTEX_M >= 0x03) */ - -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - - - __IAR_FT uint8_t __LDAB(volatile uint8_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return ((uint8_t)res); - } - - __IAR_FT uint16_t __LDAH(volatile uint16_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return ((uint16_t)res); - } - - __IAR_FT uint32_t __LDA(volatile uint32_t *ptr) - { - uint32_t res; - __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return res; - } - - __IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr) - { - __ASM volatile ("STLB %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); - } - - __IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr) - { - __ASM volatile ("STLH %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); - } - - __IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr) - { - __ASM volatile ("STL %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); - } - - __IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return ((uint8_t)res); - } - - __IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return ((uint16_t)res); - } - - __IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr) - { - uint32_t res; - __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); - return res; - } - - __IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) - { - uint32_t res; - __ASM volatile ("STLEXB %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); - return res; - } - - __IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) - { - uint32_t res; - __ASM volatile ("STLEXH %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); - return res; - } - - __IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) - { - uint32_t res; - __ASM volatile ("STLEX %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); - return res; - } - -#endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ - -#undef __IAR_FT -#undef __IAR_M0_FAMILY -#undef __ICCARM_V8 - -#pragma diag_default=Pe940 -#pragma diag_default=Pe177 - -#endif /* __CMSIS_ICCARM_H__ */ diff --git a/include/cmsis/cmsis_version.h b/include/cmsis/cmsis_version.h deleted file mode 100644 index 660f612..0000000 --- a/include/cmsis/cmsis_version.h +++ /dev/null @@ -1,39 +0,0 @@ -/**************************************************************************//** - * @file cmsis_version.h - * @brief CMSIS Core(M) Version definitions - * @version V5.0.2 - * @date 19. April 2017 - ******************************************************************************/ -/* - * Copyright (c) 2009-2017 ARM Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CMSIS_VERSION_H -#define __CMSIS_VERSION_H - -/* CMSIS Version definitions */ -#define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */ -#define __CM_CMSIS_VERSION_SUB ( 1U) /*!< [15:0] CMSIS Core(M) sub version */ -#define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \ - __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */ -#endif diff --git a/include/cmsis/core_armv81mml.h b/include/cmsis/core_armv81mml.h deleted file mode 100644 index db6d9f2..0000000 --- a/include/cmsis/core_armv81mml.h +++ /dev/null @@ -1,2967 +0,0 @@ -/**************************************************************************//** - * @file core_armv81mml.h - * @brief CMSIS Armv8.1-M Mainline Core Peripheral Access Layer Header File - * @version V1.0.0 - * @date 15. March 2019 - ******************************************************************************/ -/* - * Copyright (c) 2018-2019 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CORE_ARMV81MML_H_GENERIC -#define __CORE_ARMV81MML_H_GENERIC - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -/** - \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** - \ingroup Cortex_ARMV81MML - @{ - */ - -#include "cmsis_version.h" - -#define __ARM_ARCH_8M_MAIN__ 1 // patching for now -/* CMSIS ARMV81MML definitions */ -#define __ARMv81MML_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __ARMv81MML_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __ARMv81MML_CMSIS_VERSION ((__ARMv81MML_CMSIS_VERSION_MAIN << 16U) | \ - __ARMv81MML_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M (81U) /*!< Cortex-M Core */ - -/** __FPU_USED indicates whether an FPU is used or not. - For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. -*/ -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined(__ARM_FEATURE_DSP) - #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #if defined __ARM_FP - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined(__ARM_FEATURE_DSP) - #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined(__ARM_FEATURE_DSP) - #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined(__ARM_FEATURE_DSP) - #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined ( __TI_ARM__ ) - #if defined __TI_VFP_SUPPORT__ - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __CSMC__ ) - #if ( __CSMC__ & 0x400U) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#endif - -#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_ARMV81MML_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_ARMV81MML_H_DEPENDANT -#define __CORE_ARMV81MML_H_DEPENDANT - -#ifdef __cplusplus - extern "C" { -#endif - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __ARMv81MML_REV - #define __ARMv81MML_REV 0x0000U - #warning "__ARMv81MML_REV not defined in device header file; using default!" - #endif - - #ifndef __FPU_PRESENT - #define __FPU_PRESENT 0U - #warning "__FPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0U - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __SAUREGION_PRESENT - #define __SAUREGION_PRESENT 0U - #warning "__SAUREGION_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __DSP_PRESENT - #define __DSP_PRESENT 0U - #warning "__DSP_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 3U - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0U - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#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 */ - -/*@} end of group ARMv81MML */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core Debug Register - - Core MPU Register - - Core SAU Register - - Core FPU Register - ******************************************************************************/ -/** - \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** - \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { - uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - -/* APSR Register Definitions */ -#define APSR_N_Pos 31U /*!< APSR: N Position */ -#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ - -#define APSR_Z_Pos 30U /*!< APSR: Z Position */ -#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ - -#define APSR_C_Pos 29U /*!< APSR: C Position */ -#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ - -#define APSR_V_Pos 28U /*!< APSR: V Position */ -#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ - -#define APSR_Q_Pos 27U /*!< APSR: Q Position */ -#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ - -#define APSR_GE_Pos 16U /*!< APSR: GE Position */ -#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ - - -/** - \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - -/* IPSR Register Definitions */ -#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ -#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ - - -/** - \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ - uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - -/* xPSR Register Definitions */ -#define xPSR_N_Pos 31U /*!< xPSR: N Position */ -#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ - -#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ -#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ - -#define xPSR_C_Pos 29U /*!< xPSR: C Position */ -#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ - -#define xPSR_V_Pos 28U /*!< xPSR: V Position */ -#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ - -#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ -#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ - -#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ -#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ -#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ - -#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ -#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ - - -/** - \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ - uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ - uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ - uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ - uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/* CONTROL Register Definitions */ -#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ -#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ - -#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ -#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ - -#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ -#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ - -#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ -#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ - -/*@} end of group CMSIS_CORE */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** - \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[16U]; - __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RSERVED1[16U]; - __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[16U]; - __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[16U]; - __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[16U]; - __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ - uint32_t RESERVED5[16U]; - __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ - uint32_t RESERVED6[580U]; - __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ -} NVIC_Type; - -/* Software Triggered Interrupt Register Definitions */ -#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ -#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_NVIC */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ - __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ - __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ - __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ - __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ - __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ - __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ - __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ - __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ - __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ - __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ - __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ - __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ - __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ - __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ - __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ - uint32_t RESERVED3[92U]; - __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ - uint32_t RESERVED4[15U]; - __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ - __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ - __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ - uint32_t RESERVED5[1U]; - __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ - uint32_t RESERVED6[1U]; - __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ - __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ - __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ - __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ - __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ - __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ - __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ - __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ - uint32_t RESERVED7[6U]; - __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ - __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ - __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ - __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ - __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ - uint32_t RESERVED8[1U]; - __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ -#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ - -#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ -#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ - -#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ -#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ -#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Vector Table Offset Register Definitions */ -#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ -#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ - -#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ -#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ - -#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ -#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ - -#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ -#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ -#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ -#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ - -#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ -#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ - -#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ -#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ - -#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ -#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ -#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ - -#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ -#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ -#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ - -#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ -#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ - -#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ -#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ - -#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ -#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ - -#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ -#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ - -#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ -#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ -#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ - -#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ -#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ - -#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ -#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ -#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ -#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ - -#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ -#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ - -#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ -#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ - -#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ -#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ - -#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ -#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ - -#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ -#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ - -/* SCB Configurable Fault Status Register Definitions */ -#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ -#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ - -#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ -#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ - -#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ -#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ - -/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ -#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ - -#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ -#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ - -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ -#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ - -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ -#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ - -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ -#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ - -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ -#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ - -/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ -#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ - -#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ -#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ - -#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ -#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ - -#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ -#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ - -#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ -#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ - -#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ -#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ - -#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ -#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ - -/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ -#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ - -#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ -#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ - -#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ -#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ - -#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ -#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ - -#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ -#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ - -#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ -#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ - -#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ -#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ - -/* SCB Hard Fault Status Register Definitions */ -#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ -#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ - -#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ -#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ - -#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ -#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ - -/* SCB Debug Fault Status Register Definitions */ -#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ -#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ - -/* SCB Non-Secure Access Control Register Definitions */ -#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ -#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ - -#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ -#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ - -#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ -#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ - -/* SCB Cache Level ID Register Definitions */ -#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ -#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ - -#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ -#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ - -/* SCB Cache Type Register Definitions */ -#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ -#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ - -#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ -#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ - -#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ -#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ - -#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ -#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ - -#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ -#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ - -/* SCB Cache Size ID Register Definitions */ -#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ -#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ - -#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ -#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ - -#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ -#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ - -#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ -#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ - -#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ -#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ - -#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ -#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ - -#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ -#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ - -/* SCB Cache Size Selection Register Definitions */ -#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ -#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ - -#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ -#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ - -/* SCB Software Triggered Interrupt Register Definitions */ -#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ -#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ - -/* SCB D-Cache Invalidate by Set-way Register Definitions */ -#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ -#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ - -#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ -#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ - -/* SCB D-Cache Clean by Set-way Register Definitions */ -#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ -#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ - -#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ -#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ - -/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ -#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ -#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ - -#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ -#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ - -/* Instruction Tightly-Coupled Memory Control Register Definitions */ -#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ -#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ - -#define SCB_ITCMCR_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ -#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ - -#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ -#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ - -#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ -#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ - -/* Data Tightly-Coupled Memory Control Register Definitions */ -#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ -#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ - -#define SCB_DTCMCR_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ -#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ - -#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ -#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ - -#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ -#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ - -/* AHBP Control Register Definitions */ -#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ -#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ - -#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ -#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ - -/* L1 Cache Control Register Definitions */ -#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ -#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ - -#define SCB_CACR_ECCEN_Pos 1U /*!< SCB CACR: ECCEN Position */ -#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */ - -#define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ -#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ - -/* AHBS Control Register Definitions */ -#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ -#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ - -#define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ -#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ - -#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ -#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ - -/* Auxiliary Bus Fault Status Register Definitions */ -#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ -#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ - -#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ -#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ - -#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ -#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ - -#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ -#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ - -#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ -#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ - -#define SCB_ABFSR_ITCM_Pos 0U /*!< SCB ABFSR: ITCM Position*/ -#define SCB_ABFSR_ITCM_Msk (1UL /*<< SCB_ABFSR_ITCM_Pos*/) /*!< SCB ABFSR: ITCM Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) - \brief Type definitions for the System Control and ID Register not in the SCB - @{ - */ - -/** - \brief Structure type to access the System Control and ID Register not in the SCB. - */ -typedef struct -{ - uint32_t RESERVED0[1U]; - __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ - __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ - __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ -} SCnSCB_Type; - -/* Interrupt Controller Type Register Definitions */ -#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ -#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_SCnotSCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) - \brief Type definitions for the Instrumentation Trace Macrocell (ITM) - @{ - */ - -/** - \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). - */ -typedef struct -{ - __OM union - { - __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ - __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ - __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ - } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ - uint32_t RESERVED0[864U]; - __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ - uint32_t RESERVED1[15U]; - __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ - uint32_t RESERVED2[15U]; - __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ - uint32_t RESERVED3[29U]; - __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ - __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ - __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ - uint32_t RESERVED4[43U]; - __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ - uint32_t RESERVED5[1U]; - __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ - uint32_t RESERVED6[4U]; - __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ - __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ - __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ - __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ - __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ - __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ - __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ - __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ - __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ - __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ - __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ - __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ -} ITM_Type; - -/* ITM Stimulus Port Register Definitions */ -#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ -#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ - -#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ -#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ - -/* ITM Trace Privilege Register Definitions */ -#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ -#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ - -/* ITM Trace Control Register Definitions */ -#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ -#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ - -#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ -#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ - -#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ -#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ - -#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ -#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ - -#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ -#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ - -#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ - -#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ - -#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ - -#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ -#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ - -#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ -#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ - -/* ITM Integration Write Register Definitions */ -#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ -#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ - -/* ITM Integration Read Register Definitions */ -#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ -#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ - -/* ITM Integration Mode Control Register Definitions */ -#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ -#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ - -/* ITM Lock Status Register Definitions */ -#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ -#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ - -#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ -#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ - -#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ -#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ - -/*@}*/ /* end of group CMSIS_ITM */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) - \brief Type definitions for the Data Watchpoint and Trace (DWT) - @{ - */ - -/** - \brief Structure type to access the Data Watchpoint and Trace Register (DWT). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ - __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ - __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ - __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ - __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ - __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ - __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - uint32_t RESERVED1[1U]; - __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED2[1U]; - __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - uint32_t RESERVED3[1U]; - __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED4[1U]; - __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - uint32_t RESERVED5[1U]; - __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED6[1U]; - __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - uint32_t RESERVED7[1U]; - __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ - uint32_t RESERVED8[1U]; - __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ - uint32_t RESERVED9[1U]; - __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ - uint32_t RESERVED10[1U]; - __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ - uint32_t RESERVED11[1U]; - __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ - uint32_t RESERVED12[1U]; - __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ - uint32_t RESERVED13[1U]; - __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ - uint32_t RESERVED14[1U]; - __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ - uint32_t RESERVED15[1U]; - __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ - uint32_t RESERVED16[1U]; - __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ - uint32_t RESERVED17[1U]; - __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ - uint32_t RESERVED18[1U]; - __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ - uint32_t RESERVED19[1U]; - __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ - uint32_t RESERVED20[1U]; - __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ - uint32_t RESERVED21[1U]; - __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ - uint32_t RESERVED22[1U]; - __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ - uint32_t RESERVED23[1U]; - __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ - uint32_t RESERVED24[1U]; - __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ - uint32_t RESERVED25[1U]; - __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ - uint32_t RESERVED26[1U]; - __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ - uint32_t RESERVED27[1U]; - __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ - uint32_t RESERVED28[1U]; - __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ - uint32_t RESERVED29[1U]; - __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ - uint32_t RESERVED30[1U]; - __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ - uint32_t RESERVED31[1U]; - __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ - uint32_t RESERVED32[934U]; - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ - uint32_t RESERVED33[1U]; - __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ -#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ - -#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ -#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ - -#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ -#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ - -#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ -#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ - -#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ -#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ - -#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ -#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ - -#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ -#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ - -#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ -#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ - -#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ -#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ - -#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ -#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ - -#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ -#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ - -#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ -#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ - -#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ -#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ - -#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ -#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ - -/* DWT CPI Count Register Definitions */ -#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ -#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ - -/* DWT Exception Overhead Count Register Definitions */ -#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ -#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ - -/* DWT Sleep Count Register Definitions */ -#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ -#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ - -/* DWT LSU Count Register Definitions */ -#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ -#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ - -/* DWT Folded-instruction Count Register Definitions */ -#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ -#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ - -/* DWT Comparator Function Register Definitions */ -#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ -#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ - -#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ -#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ - -#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ -#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ - -/*@}*/ /* end of group CMSIS_DWT */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_TPI Trace Port Interface (TPI) - \brief Type definitions for the Trace Port Interface (TPI) - @{ - */ - -/** - \brief Structure type to access the Trace Port Interface Register (TPI). - */ -typedef struct -{ - __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ - __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ - uint32_t RESERVED0[2U]; - __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55U]; - __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131U]; - __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ - uint32_t RESERVED3[759U]; - __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER */ - __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ - __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ - uint32_t RESERVED4[1U]; - __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ - __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ - __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ - uint32_t RESERVED5[39U]; - __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ - __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ - uint32_t RESERVED7[8U]; - __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ - __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ - -/* TPI Selected Pin Protocol Register Definitions */ -#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ -#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ - -/* TPI Formatter and Flush Status Register Definitions */ -#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ -#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ - -/* TPI Formatter and Flush Control Register Definitions */ -#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ -#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ - -/* TPI TRIGGER Register Definitions */ -#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ -#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ - -/* TPI Integration ETM Data Register Definitions (FIFO0) */ -#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ -#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ - -#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ -#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ - -#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ -#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ - -#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ -#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ - -#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ -#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ - -#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ -#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ - -#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ -#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ - -/* TPI ITATBCTR2 Register Definitions */ -#define TPI_ITATBCTR2_ATREADY_Pos 0U /*!< TPI ITATBCTR2: ATREADY Position */ -#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */ - -/* TPI Integration ITM Data Register Definitions (FIFO1) */ -#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ -#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ - -#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ -#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ - -#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ -#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ - -#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ -#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ - -#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ -#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ - -#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ -#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ - -#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ -#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ - -/* TPI ITATBCTR0 Register Definitions */ -#define TPI_ITATBCTR0_ATREADY_Pos 0U /*!< TPI ITATBCTR0: ATREADY Position */ -#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ - -/* TPI DEVID Register Definitions */ -#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ -#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ - -#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ -#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ - -#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ -#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ - -/* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_MajorType_Pos 4U /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -#define TPI_DEVTYPE_SubType_Pos 0U /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** - \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ - __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ - __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ - __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ - __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ - __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ - __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ - uint32_t RESERVED0[1]; - union { - __IOM uint32_t MAIR[2]; - struct { - __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ - __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ - }; - }; -} MPU_Type; - -#define MPU_TYPE_RALIASES 4U - -/* MPU Type Register Definitions */ -#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register Definitions */ -#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register Definitions */ -#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register Definitions */ -#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ -#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ - -#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ -#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ - -#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ -#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ - -#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ -#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ - -/* MPU Region Limit Address Register Definitions */ -#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ -#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ - -#define MPU_RLAR_PXN_Pos 4U /*!< MPU RLAR: PXN Position */ -#define MPU_RLAR_PXN_Msk (0x1UL << MPU_RLAR_PXN_Pos) /*!< MPU RLAR: PXN Mask */ - -#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ -#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ - -#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ -#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ - -/* MPU Memory Attribute Indirection Register 0 Definitions */ -#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ -#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ - -#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ -#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ - -#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ -#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ - -#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ -#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ - -/* MPU Memory Attribute Indirection Register 1 Definitions */ -#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ -#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ - -#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ -#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ - -#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ -#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ - -#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ -#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ - -/*@} end of group CMSIS_MPU */ -#endif - - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SAU Security Attribution Unit (SAU) - \brief Type definitions for the Security Attribution Unit (SAU) - @{ - */ - -/** - \brief Structure type to access the Security Attribution Unit (SAU). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ - __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ - __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ -#else - uint32_t RESERVED0[3]; -#endif - __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ - __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ -} SAU_Type; - -/* SAU Control Register Definitions */ -#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ -#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ - -#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ -#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ - -/* SAU Type Register Definitions */ -#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ -#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ - -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) -/* SAU Region Number Register Definitions */ -#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ -#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ - -/* SAU Region Base Address Register Definitions */ -#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ -#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ - -/* SAU Region Limit Address Register Definitions */ -#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ -#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ - -#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ -#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ - -#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ -#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ - -#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ - -/* Secure Fault Status Register Definitions */ -#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ -#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ - -#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ -#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ - -#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ -#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ - -#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ -#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ - -#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ -#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ - -#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ -#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ - -#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ -#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ - -#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ -#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ - -/*@} end of group CMSIS_SAU */ -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_FPU Floating Point Unit (FPU) - \brief Type definitions for the Floating Point Unit (FPU) - @{ - */ - -/** - \brief Structure type to access the Floating Point Unit (FPU). - */ -typedef struct -{ - uint32_t RESERVED0[1U]; - __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ - __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ - __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ - __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ - __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ -} FPU_Type; - -/* Floating-Point Context Control Register Definitions */ -#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ -#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ - -#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ -#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ - -#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ -#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ - -#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ -#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ - -#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ -#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ - -#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ -#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ - -#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ -#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ - -#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ -#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ - -#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ -#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ - -#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ -#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ - -#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ -#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ - -#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ -#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ - -#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ -#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ - -#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ -#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ - -#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ -#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ - -#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ -#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ - -#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ -#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ - -/* Floating-Point Context Address Register Definitions */ -#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ -#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ - -/* Floating-Point Default Status Control Register Definitions */ -#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ -#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ - -#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ -#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ - -#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ -#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ - -#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ -#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ - -/* Media and FP Feature Register 0 Definitions */ -#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ -#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ - -#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ -#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ - -#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ -#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ - -#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ -#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ - -#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ -#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ - -#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ -#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ - -#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ -#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ - -#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ -#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ - -/* Media and FP Feature Register 1 Definitions */ -#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ -#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ - -#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ -#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ - -#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ -#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ - -#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ -#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ - -/*@} end of group CMSIS_FPU */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Type definitions for the Core Debug Registers - @{ - */ - -/** - \brief Structure type to access the Core Debug Register (CoreDebug). - */ -typedef struct -{ - __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ - uint32_t RESERVED4[1U]; - __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ - __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register Definitions */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ -#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ -#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register Definitions */ -#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register Definitions */ -#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ - -#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ -#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ - -#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ -#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ - -#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ -#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ - -#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ -#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ -#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ - -#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ -#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ - -#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ -#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ - -#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ -#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ - -#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ -#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ - -#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ -#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ - -/* Debug Authentication Control Register Definitions */ -#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ -#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ - -#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ -#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ - -#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ -#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ - -#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ -#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ - -/* Debug Security Control and Status Register Definitions */ -#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ -#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ - -#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ -#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ - -#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ -#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ - -/*@} end of group CMSIS_CoreDebug */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_bitfield Core register bit field macros - \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). - @{ - */ - -/** - \brief Mask and shift a bit field value for use in a register bit range. - \param[in] field Name of the register bit field. - \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) - -/** - \brief Mask and shift a register value to extract a bit filed value. - \param[in] field Name of the register bit field. - \param[in] value Value of register. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) - -/*@} end of group CMSIS_core_bitfield */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Core Hardware */ - #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ - #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ - #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ - #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ - #define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ - #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ - #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ - #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - - #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ - #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ - #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ - #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ - #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ - #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ - #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ - #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< Core Debug configuration struct */ - - #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ - #endif - - #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ - #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ - #endif - - #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ - #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ - #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ - #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ - #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ - #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ - - #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ - #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ - #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ - #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ - #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ - - #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ - #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ - #endif - - #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ - #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ - -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Debug Functions - - Core Register Access Functions - ******************************************************************************/ -/** - \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ - #define NVIC_GetActive __NVIC_GetActive - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - - -/** - \brief Set Priority Grouping - \details Sets the priority grouping field using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ - SCB->AIRCR = reg_value; -} - - -/** - \brief Get Priority Grouping - \details Reads the priority grouping field from the NVIC Interrupt Controller. - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) -{ - return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); -} - - -/** - \brief Enable Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt - \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief Get Interrupt Target State - \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - \return 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Target State - \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Clear Interrupt Target State - \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. - Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); - } -} - - -/** - \brief Encode Priority - \details Encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - return ( - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - ); -} - - -/** - \brief Decode Priority - \details Decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); - *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); -} - - -/** - \brief Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - } -} - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief Set Priority Grouping (non-secure) - \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - - reg_value = SCB_NS->AIRCR; /* read old register configuration */ - reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ - SCB_NS->AIRCR = reg_value; -} - - -/** - \brief Get Priority Grouping (non-secure) - \details Reads the priority grouping field from the non-secure NVIC when in secure state. - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) -{ - return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); -} - - -/** - \brief Enable Interrupt (non-secure) - \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status (non-secure) - \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt (non-secure) - \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Pending Interrupt (non-secure) - \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt (non-secure) - \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt (non-secure) - \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt (non-secure) - \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Priority (non-secure) - \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every non-secure processor exception. - */ -__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority (non-secure) - \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); - } -} -#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ - -/*@} end of CMSIS_Core_NVICFunctions */ - -/* ########################## MPU functions #################################### */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - -#include "mpu_armv8.h" - -#endif - -/* ########################## FPU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_FpuFunctions FPU Functions - \brief Function that provides FPU type. - @{ - */ - -/** - \brief get FPU type - \details returns the FPU type - \returns - - \b 0: No FPU - - \b 1: Single precision FPU - - \b 2: Double + Single precision FPU - */ -__STATIC_INLINE uint32_t SCB_GetFPUType(void) -{ - uint32_t mvfr0; - - mvfr0 = FPU->MVFR0; - if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) - { - return 2U; /* Double + Single precision FPU */ - } - else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) - { - return 1U; /* Single precision FPU */ - } - else - { - return 0U; /* No FPU */ - } -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ########################## SAU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SAUFunctions SAU Functions - \brief Functions that configure the SAU. - @{ - */ - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - -/** - \brief Enable SAU - \details Enables the Security Attribution Unit (SAU). - */ -__STATIC_INLINE void TZ_SAU_Enable(void) -{ - SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); -} - - - -/** - \brief Disable SAU - \details Disables the Security Attribution Unit (SAU). - */ -__STATIC_INLINE void TZ_SAU_Disable(void) -{ - SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); -} - -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - -/*@} end of CMSIS_Core_SAUFunctions */ - - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) - -/** - \brief System Tick Configuration - \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief System Tick Configuration (non-secure) - \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function TZ_SysTick_Config_NS is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - - */ -__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - -/* ##################################### Debug In/Output function ########################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_core_DebugFunctions ITM Functions - \brief Functions that access the ITM debug interface. - @{ - */ - -extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ -#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ - - -/** - \brief ITM Send Character - \details Transmits a character via the ITM channel 0, and - \li Just returns when no debugger is connected that has booked the output. - \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. - \param [in] ch Character to transmit. - \returns Character to transmit. - */ -__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) -{ - if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ - ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ - { - while (ITM->PORT[0U].u32 == 0UL) - { - __NOP(); - } - ITM->PORT[0U].u8 = (uint8_t)ch; - } - return (ch); -} - - -/** - \brief ITM Receive Character - \details Inputs a character via the external variable \ref ITM_RxBuffer. - \return Received character. - \return -1 No character pending. - */ -__STATIC_INLINE int32_t ITM_ReceiveChar (void) -{ - int32_t ch = -1; /* no character available */ - - if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) - { - ch = ITM_RxBuffer; - ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ - } - - return (ch); -} - - -/** - \brief ITM Check Character - \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. - \return 0 No character available. - \return 1 Character available. - */ -__STATIC_INLINE int32_t ITM_CheckChar (void) -{ - - if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) - { - return (0); /* no character available */ - } - else - { - return (1); /* character available */ - } -} - -/*@} end of CMSIS_core_DebugFunctions */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_ARMV81MML_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ diff --git a/include/cmsis/core_armv8mbl.h b/include/cmsis/core_armv8mbl.h deleted file mode 100644 index 57d9f66..0000000 --- a/include/cmsis/core_armv8mbl.h +++ /dev/null @@ -1,1918 +0,0 @@ -/**************************************************************************//** - * @file core_armv8mbl.h - * @brief CMSIS Armv8-M Baseline Core Peripheral Access Layer Header File - * @version V5.0.8 - * @date 12. November 2018 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CORE_ARMV8MBL_H_GENERIC -#define __CORE_ARMV8MBL_H_GENERIC - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -/** - \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** - \ingroup Cortex_ARMv8MBL - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS definitions */ -#define __ARMv8MBL_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __ARMv8MBL_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __ARMv8MBL_CMSIS_VERSION ((__ARMv8MBL_CMSIS_VERSION_MAIN << 16U) | \ - __ARMv8MBL_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M ( 2U) /*!< Cortex-M Core */ - -/** __FPU_USED indicates whether an FPU is used or not. - This core does not support an FPU at all -*/ -#define __FPU_USED 0U - -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #if defined __ARM_FP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TI_ARM__ ) - #if defined __TI_VFP_SUPPORT__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __CSMC__ ) - #if ( __CSMC__ & 0x400U) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#endif - -#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_ARMV8MBL_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_ARMV8MBL_H_DEPENDANT -#define __CORE_ARMV8MBL_H_DEPENDANT - -#ifdef __cplusplus - extern "C" { -#endif - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __ARMv8MBL_REV - #define __ARMv8MBL_REV 0x0000U - #warning "__ARMv8MBL_REV not defined in device header file; using default!" - #endif - - #ifndef __FPU_PRESENT - #define __FPU_PRESENT 0U - #warning "__FPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0U - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __SAUREGION_PRESENT - #define __SAUREGION_PRESENT 0U - #warning "__SAUREGION_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __VTOR_PRESENT - #define __VTOR_PRESENT 0U - #warning "__VTOR_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 2U - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0U - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif - - #ifndef __ETM_PRESENT - #define __ETM_PRESENT 0U - #warning "__ETM_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __MTB_PRESENT - #define __MTB_PRESENT 0U - #warning "__MTB_PRESENT not defined in device header file; using default!" - #endif - -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#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 */ - -/*@} end of group ARMv8MBL */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core Debug Register - - Core MPU Register - - Core SAU Register - ******************************************************************************/ -/** - \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** - \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { - uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - -/* APSR Register Definitions */ -#define APSR_N_Pos 31U /*!< APSR: N Position */ -#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ - -#define APSR_Z_Pos 30U /*!< APSR: Z Position */ -#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ - -#define APSR_C_Pos 29U /*!< APSR: C Position */ -#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ - -#define APSR_V_Pos 28U /*!< APSR: V Position */ -#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ - - -/** - \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - -/* IPSR Register Definitions */ -#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ -#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ - - -/** - \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ - uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - -/* xPSR Register Definitions */ -#define xPSR_N_Pos 31U /*!< xPSR: N Position */ -#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ - -#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ -#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ - -#define xPSR_C_Pos 29U /*!< xPSR: C Position */ -#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ - -#define xPSR_V_Pos 28U /*!< xPSR: V Position */ -#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ -#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ - - -/** - \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ - uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ - uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/* CONTROL Register Definitions */ -#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ -#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ - -#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ -#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ - -/*@} end of group CMSIS_CORE */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** - \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[16U]; - __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RSERVED1[16U]; - __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[16U]; - __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[16U]; - __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[16U]; - __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ - uint32_t RESERVED5[16U]; - __IOM uint32_t IPR[124U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ -} NVIC_Type; - -/*@} end of group CMSIS_NVIC */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ -#else - uint32_t RESERVED0; -#endif - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - uint32_t RESERVED1; - __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ -#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ - -#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ -#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ - -#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ -#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ -#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ - -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) -/* SCB Vector Table Offset Register Definitions */ -#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ -#endif - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ -#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ - -#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ -#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ - -#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ -#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ -#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ -#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ - -#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ -#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ - -#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ -#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ - -#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ -#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ -#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ - -#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ -#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ -#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ -#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ - -#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ -#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) - \brief Type definitions for the Data Watchpoint and Trace (DWT) - @{ - */ - -/** - \brief Structure type to access the Data Watchpoint and Trace Register (DWT). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - uint32_t RESERVED0[6U]; - __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - uint32_t RESERVED1[1U]; - __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED2[1U]; - __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - uint32_t RESERVED3[1U]; - __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED4[1U]; - __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - uint32_t RESERVED5[1U]; - __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED6[1U]; - __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - uint32_t RESERVED7[1U]; - __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ - uint32_t RESERVED8[1U]; - __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ - uint32_t RESERVED9[1U]; - __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ - uint32_t RESERVED10[1U]; - __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ - uint32_t RESERVED11[1U]; - __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ - uint32_t RESERVED12[1U]; - __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ - uint32_t RESERVED13[1U]; - __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ - uint32_t RESERVED14[1U]; - __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ - uint32_t RESERVED15[1U]; - __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ - uint32_t RESERVED16[1U]; - __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ - uint32_t RESERVED17[1U]; - __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ - uint32_t RESERVED18[1U]; - __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ - uint32_t RESERVED19[1U]; - __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ - uint32_t RESERVED20[1U]; - __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ - uint32_t RESERVED21[1U]; - __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ - uint32_t RESERVED22[1U]; - __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ - uint32_t RESERVED23[1U]; - __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ - uint32_t RESERVED24[1U]; - __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ - uint32_t RESERVED25[1U]; - __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ - uint32_t RESERVED26[1U]; - __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ - uint32_t RESERVED27[1U]; - __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ - uint32_t RESERVED28[1U]; - __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ - uint32_t RESERVED29[1U]; - __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ - uint32_t RESERVED30[1U]; - __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ - uint32_t RESERVED31[1U]; - __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -/* DWT Comparator Function Register Definitions */ -#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ -#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ - -#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ -#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ - -#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ -#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ - -/*@}*/ /* end of group CMSIS_DWT */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_TPI Trace Port Interface (TPI) - \brief Type definitions for the Trace Port Interface (TPI) - @{ - */ - -/** - \brief Structure type to access the Trace Port Interface Register (TPI). - */ -typedef struct -{ - __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ - __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ - uint32_t RESERVED0[2U]; - __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55U]; - __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131U]; - __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ - uint32_t RESERVED3[809U]; - __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Software Lock Access Register */ - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Software Lock Status Register */ - uint32_t RESERVED4[4U]; - __IM uint32_t TYPE; /*!< Offset: 0xFC8 (R/ ) Device Identifier Register */ - __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_SWOSCALER_Pos 0U /*!< TPI ACPR: SWOSCALER Position */ -#define TPI_ACPR_SWOSCALER_Msk (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/) /*!< TPI ACPR: SWOSCALER Mask */ - -/* TPI Selected Pin Protocol Register Definitions */ -#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ -#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ - -/* TPI Formatter and Flush Status Register Definitions */ -#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ -#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ - -/* TPI Formatter and Flush Control Register Definitions */ -#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ -#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ - -#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ -#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ - -/* TPI Periodic Synchronization Control Register Definitions */ -#define TPI_PSCR_PSCount_Pos 0U /*!< TPI PSCR: PSCount Position */ -#define TPI_PSCR_PSCount_Msk (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/) /*!< TPI PSCR: TPSCount Mask */ - -/* TPI Software Lock Status Register Definitions */ -#define TPI_LSR_nTT_Pos 1U /*!< TPI LSR: Not thirty-two bit. Position */ -#define TPI_LSR_nTT_Msk (0x1UL << TPI_LSR_nTT_Pos) /*!< TPI LSR: Not thirty-two bit. Mask */ - -#define TPI_LSR_SLK_Pos 1U /*!< TPI LSR: Software Lock status Position */ -#define TPI_LSR_SLK_Msk (0x1UL << TPI_LSR_SLK_Pos) /*!< TPI LSR: Software Lock status Mask */ - -#define TPI_LSR_SLI_Pos 0U /*!< TPI LSR: Software Lock implemented Position */ -#define TPI_LSR_SLI_Msk (0x1UL /*<< TPI_LSR_SLI_Pos*/) /*!< TPI LSR: Software Lock implemented Mask */ - -/* TPI DEVID Register Definitions */ -#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFO depth Position */ -#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFO depth Mask */ - -/* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** - \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ - uint32_t RESERVED0[7U]; - union { - __IOM uint32_t MAIR[2]; - struct { - __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ - __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ - }; - }; -} MPU_Type; - -#define MPU_TYPE_RALIASES 1U - -/* MPU Type Register Definitions */ -#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register Definitions */ -#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register Definitions */ -#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register Definitions */ -#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ -#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ - -#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ -#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ - -#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ -#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ - -#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ -#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ - -/* MPU Region Limit Address Register Definitions */ -#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ -#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ - -#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ -#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ - -#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: EN Position */ -#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: EN Mask */ - -/* MPU Memory Attribute Indirection Register 0 Definitions */ -#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ -#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ - -#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ -#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ - -#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ -#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ - -#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ -#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ - -/* MPU Memory Attribute Indirection Register 1 Definitions */ -#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ -#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ - -#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ -#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ - -#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ -#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ - -#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ -#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ - -/*@} end of group CMSIS_MPU */ -#endif - - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SAU Security Attribution Unit (SAU) - \brief Type definitions for the Security Attribution Unit (SAU) - @{ - */ - -/** - \brief Structure type to access the Security Attribution Unit (SAU). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ - __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ - __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ -#endif -} SAU_Type; - -/* SAU Control Register Definitions */ -#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ -#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ - -#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ -#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ - -/* SAU Type Register Definitions */ -#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ -#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ - -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) -/* SAU Region Number Register Definitions */ -#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ -#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ - -/* SAU Region Base Address Register Definitions */ -#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ -#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ - -/* SAU Region Limit Address Register Definitions */ -#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ -#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ - -#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ -#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ - -#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ -#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ - -#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ - -/*@} end of group CMSIS_SAU */ -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Type definitions for the Core Debug Registers - @{ - */ - -/** - \brief Structure type to access the Core Debug Register (CoreDebug). - */ -typedef struct -{ - __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ - uint32_t RESERVED4[1U]; - __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ - __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register Definitions */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ -#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register Definitions */ -#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register */ -#define CoreDebug_DEMCR_DWTENA_Pos 24U /*!< CoreDebug DEMCR: DWTENA Position */ -#define CoreDebug_DEMCR_DWTENA_Msk (1UL << CoreDebug_DEMCR_DWTENA_Pos) /*!< CoreDebug DEMCR: DWTENA Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ - -/* Debug Authentication Control Register Definitions */ -#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ -#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ - -#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ -#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ - -#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ -#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ - -#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ -#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ - -/* Debug Security Control and Status Register Definitions */ -#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ -#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ - -#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ -#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ - -#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ -#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ - -/*@} end of group CMSIS_CoreDebug */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_bitfield Core register bit field macros - \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). - @{ - */ - -/** - \brief Mask and shift a bit field value for use in a register bit range. - \param[in] field Name of the register bit field. - \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) - -/** - \brief Mask and shift a register value to extract a bit filed value. - \param[in] field Name of the register bit field. - \param[in] value Value of register. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) - -/*@} end of group CMSIS_core_bitfield */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Core Hardware */ - #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ - #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ - #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ - #define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ - #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ - #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ - #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - - - #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ - #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ - #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ - #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ - #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ - #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< Core Debug configuration struct */ - - #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ - #endif - - #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ - #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ - #endif - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ - #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ - #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ - #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ - #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ - - #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ - #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ - #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ - #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ - - #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ - #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ - #endif - -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Register Access Functions - ******************************************************************************/ -/** - \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ - #define NVIC_GetActive __NVIC_GetActive - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* Special LR values for Secure/Non-Secure call handling and exception handling */ - -/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ -#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ - -/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ -#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ -#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ -#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ -#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ -#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ -#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ -#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ - -/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ -#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ -#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ -#else -#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ -#endif - - -/* Interrupt Priorities are WORD accessible only under Armv6-M */ -/* The following MACROS handle generation of the register offset and byte masks */ -#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) -#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) -#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) - -#define __NVIC_SetPriorityGrouping(X) (void)(X) -#define __NVIC_GetPriorityGrouping() (0U) - -/** - \brief Enable Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt - \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief Get Interrupt Target State - \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - \return 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Target State - \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Clear Interrupt Target State - \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } - else - { - SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. - Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } -} - - -/** - \brief Encode Priority - \details Encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - return ( - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - ); -} - - -/** - \brief Decode Priority - \details Decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); - *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); -} - - -/** - \brief Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - If VTOR is not present address 0 must be mapped to SRAM. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - uint32_t *vectors = (uint32_t *)SCB->VTOR; -#else - uint32_t *vectors = (uint32_t *)0x0U; -#endif - vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - uint32_t *vectors = (uint32_t *)SCB->VTOR; -#else - uint32_t *vectors = (uint32_t *)0x0U; -#endif - return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - SCB_AIRCR_SYSRESETREQ_Msk); - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - } -} - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief Enable Interrupt (non-secure) - \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status (non-secure) - \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt (non-secure) - \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Pending Interrupt (non-secure) - \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt (non-secure) - \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt (non-secure) - \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt (non-secure) - \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Priority (non-secure) - \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every non-secure processor exception. - */ -__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC_NS->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } - else - { - SCB_NS->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB_NS->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } -} - - -/** - \brief Get Interrupt Priority (non-secure) - \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return((uint32_t)(((SCB_NS->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } -} -#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ - -/*@} end of CMSIS_Core_NVICFunctions */ - -/* ########################## MPU functions #################################### */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - -#include "mpu_armv8.h" - -#endif - -/* ########################## FPU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_FpuFunctions FPU Functions - \brief Function that provides FPU type. - @{ - */ - -/** - \brief get FPU type - \details returns the FPU type - \returns - - \b 0: No FPU - - \b 1: Single precision FPU - - \b 2: Double + Single precision FPU - */ -__STATIC_INLINE uint32_t SCB_GetFPUType(void) -{ - return 0U; /* No FPU */ -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ########################## SAU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SAUFunctions SAU Functions - \brief Functions that configure the SAU. - @{ - */ - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - -/** - \brief Enable SAU - \details Enables the Security Attribution Unit (SAU). - */ -__STATIC_INLINE void TZ_SAU_Enable(void) -{ - SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); -} - - - -/** - \brief Disable SAU - \details Disables the Security Attribution Unit (SAU). - */ -__STATIC_INLINE void TZ_SAU_Disable(void) -{ - SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); -} - -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - -/*@} end of CMSIS_Core_SAUFunctions */ - - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) - -/** - \brief System Tick Configuration - \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief System Tick Configuration (non-secure) - \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function TZ_SysTick_Config_NS is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - - */ -__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_ARMV8MBL_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ diff --git a/include/cmsis/core_armv8mml.h b/include/cmsis/core_armv8mml.h deleted file mode 100644 index 30aab58..0000000 --- a/include/cmsis/core_armv8mml.h +++ /dev/null @@ -1,2832 +0,0 @@ -/**************************************************************************//** - * @file core_armv8mml.h - * @brief CMSIS Armv8-M Mainline Core Peripheral Access Layer Header File - * @version V5.1.0 - * @date 12. September 2018 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CORE_ARMV8MML_H_GENERIC -#define __CORE_ARMV8MML_H_GENERIC - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -/** - \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** - \ingroup Cortex_ARMv8MML - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS Armv8MML definitions */ -#define __ARMv8MML_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __ARMv8MML_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __ARMv8MML_CMSIS_VERSION ((__ARMv8MML_CMSIS_VERSION_MAIN << 16U) | \ - __ARMv8MML_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M (81U) /*!< Cortex-M Core */ - -/** __FPU_USED indicates whether an FPU is used or not. - For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. -*/ -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined(__ARM_FEATURE_DSP) - #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #if defined __ARM_FP - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined(__ARM_FEATURE_DSP) - #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined(__ARM_FEATURE_DSP) - #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined(__ARM_FEATURE_DSP) - #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined ( __TI_ARM__ ) - #if defined __TI_VFP_SUPPORT__ - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __CSMC__ ) - #if ( __CSMC__ & 0x400U) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#endif - -#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_ARMV8MML_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_ARMV8MML_H_DEPENDANT -#define __CORE_ARMV8MML_H_DEPENDANT - -#ifdef __cplusplus - extern "C" { -#endif - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __ARMv8MML_REV - #define __ARMv8MML_REV 0x0000U - #warning "__ARMv8MML_REV not defined in device header file; using default!" - #endif - - #ifndef __FPU_PRESENT - #define __FPU_PRESENT 0U - #warning "__FPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0U - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __SAUREGION_PRESENT - #define __SAUREGION_PRESENT 0U - #warning "__SAUREGION_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __DSP_PRESENT - #define __DSP_PRESENT 0U - #warning "__DSP_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 3U - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0U - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#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 */ - -/*@} end of group ARMv8MML */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core Debug Register - - Core MPU Register - - Core SAU Register - - Core FPU Register - ******************************************************************************/ -/** - \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** - \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { - uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - -/* APSR Register Definitions */ -#define APSR_N_Pos 31U /*!< APSR: N Position */ -#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ - -#define APSR_Z_Pos 30U /*!< APSR: Z Position */ -#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ - -#define APSR_C_Pos 29U /*!< APSR: C Position */ -#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ - -#define APSR_V_Pos 28U /*!< APSR: V Position */ -#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ - -#define APSR_Q_Pos 27U /*!< APSR: Q Position */ -#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ - -#define APSR_GE_Pos 16U /*!< APSR: GE Position */ -#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ - - -/** - \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - -/* IPSR Register Definitions */ -#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ -#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ - - -/** - \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ - uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - -/* xPSR Register Definitions */ -#define xPSR_N_Pos 31U /*!< xPSR: N Position */ -#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ - -#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ -#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ - -#define xPSR_C_Pos 29U /*!< xPSR: C Position */ -#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ - -#define xPSR_V_Pos 28U /*!< xPSR: V Position */ -#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ - -#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ -#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ - -#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ -#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ -#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ - -#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ -#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ - - -/** - \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ - uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ - uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ - uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ - uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/* CONTROL Register Definitions */ -#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ -#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ - -#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ -#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ - -#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ -#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ - -#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ -#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ - -/*@} end of group CMSIS_CORE */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** - \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[16U]; - __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RSERVED1[16U]; - __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[16U]; - __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[16U]; - __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[16U]; - __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ - uint32_t RESERVED5[16U]; - __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ - uint32_t RESERVED6[580U]; - __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ -} NVIC_Type; - -/* Software Triggered Interrupt Register Definitions */ -#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ -#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_NVIC */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ - __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ - __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ - __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ - __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ - __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ - __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ - __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ - __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ - __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ - __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ - __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ - __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ - __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ - __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ - __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ - uint32_t RESERVED3[92U]; - __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ - uint32_t RESERVED4[15U]; - __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ - __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ - __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ - uint32_t RESERVED5[1U]; - __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ - uint32_t RESERVED6[1U]; - __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ - __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ - __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ - __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ - __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ - __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ - __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ - __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ -#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ - -#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ -#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ - -#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ -#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ -#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Vector Table Offset Register Definitions */ -#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ -#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ - -#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ -#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ - -#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ -#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ - -#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ -#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ -#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ -#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ - -#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ -#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ - -#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ -#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ - -#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ -#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ -#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ - -#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ -#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ -#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ - -#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ -#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ - -#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ -#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ - -#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ -#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ - -#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ -#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ - -#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ -#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ -#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ - -#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ -#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ - -#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ -#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ -#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ -#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ - -#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ -#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ - -#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ -#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ - -#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ -#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ - -#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ -#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ - -#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ -#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ - -/* SCB Configurable Fault Status Register Definitions */ -#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ -#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ - -#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ -#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ - -#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ -#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ - -/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ -#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ - -#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ -#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ - -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ -#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ - -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ -#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ - -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ -#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ - -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ -#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ - -/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ -#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ - -#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ -#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ - -#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ -#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ - -#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ -#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ - -#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ -#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ - -#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ -#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ - -#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ -#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ - -/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ -#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ - -#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ -#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ - -#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ -#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ - -#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ -#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ - -#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ -#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ - -#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ -#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ - -#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ -#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ - -/* SCB Hard Fault Status Register Definitions */ -#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ -#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ - -#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ -#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ - -#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ -#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ - -/* SCB Debug Fault Status Register Definitions */ -#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ -#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ - -/* SCB Non-Secure Access Control Register Definitions */ -#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ -#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ - -#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ -#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ - -#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ -#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ - -/* SCB Cache Level ID Register Definitions */ -#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ -#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ - -#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ -#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ - -/* SCB Cache Type Register Definitions */ -#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ -#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ - -#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ -#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ - -#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ -#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ - -#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ -#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ - -#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ -#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ - -/* SCB Cache Size ID Register Definitions */ -#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ -#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ - -#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ -#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ - -#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ -#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ - -#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ -#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ - -#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ -#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ - -#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ -#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ - -#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ -#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ - -/* SCB Cache Size Selection Register Definitions */ -#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ -#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ - -#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ -#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ - -/* SCB Software Triggered Interrupt Register Definitions */ -#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ -#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ - -/* SCB D-Cache Invalidate by Set-way Register Definitions */ -#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ -#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ - -#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ -#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ - -/* SCB D-Cache Clean by Set-way Register Definitions */ -#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ -#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ - -#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ -#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ - -/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ -#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ -#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ - -#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ -#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) - \brief Type definitions for the System Control and ID Register not in the SCB - @{ - */ - -/** - \brief Structure type to access the System Control and ID Register not in the SCB. - */ -typedef struct -{ - uint32_t RESERVED0[1U]; - __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ - __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ - __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ -} SCnSCB_Type; - -/* Interrupt Controller Type Register Definitions */ -#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ -#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_SCnotSCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) - \brief Type definitions for the Instrumentation Trace Macrocell (ITM) - @{ - */ - -/** - \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). - */ -typedef struct -{ - __OM union - { - __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ - __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ - __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ - } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ - uint32_t RESERVED0[864U]; - __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ - uint32_t RESERVED1[15U]; - __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ - uint32_t RESERVED2[15U]; - __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ - uint32_t RESERVED3[32U]; - uint32_t RESERVED4[43U]; - __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ - uint32_t RESERVED5[1U]; - __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ - uint32_t RESERVED6[4U]; - __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ - __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ - __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ - __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ - __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ - __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ - __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ - __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ - __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ - __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ - __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ - __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ -} ITM_Type; - -/* ITM Stimulus Port Register Definitions */ -#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ -#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ - -#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ -#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ - -/* ITM Trace Privilege Register Definitions */ -#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ -#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ - -/* ITM Trace Control Register Definitions */ -#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ -#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ - -#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ -#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ - -#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ -#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ - -#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ -#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ - -#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ -#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ - -#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ - -#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ - -#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ - -#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ -#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ - -#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ -#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ - -/* ITM Lock Status Register Definitions */ -#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ -#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ - -#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ -#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ - -#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ -#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ - -/*@}*/ /* end of group CMSIS_ITM */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) - \brief Type definitions for the Data Watchpoint and Trace (DWT) - @{ - */ - -/** - \brief Structure type to access the Data Watchpoint and Trace Register (DWT). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ - __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ - __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ - __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ - __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ - __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ - __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - uint32_t RESERVED1[1U]; - __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED2[1U]; - __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - uint32_t RESERVED3[1U]; - __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED4[1U]; - __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - uint32_t RESERVED5[1U]; - __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED6[1U]; - __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - uint32_t RESERVED7[1U]; - __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ - uint32_t RESERVED8[1U]; - __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ - uint32_t RESERVED9[1U]; - __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ - uint32_t RESERVED10[1U]; - __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ - uint32_t RESERVED11[1U]; - __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ - uint32_t RESERVED12[1U]; - __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ - uint32_t RESERVED13[1U]; - __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ - uint32_t RESERVED14[1U]; - __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ - uint32_t RESERVED15[1U]; - __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ - uint32_t RESERVED16[1U]; - __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ - uint32_t RESERVED17[1U]; - __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ - uint32_t RESERVED18[1U]; - __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ - uint32_t RESERVED19[1U]; - __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ - uint32_t RESERVED20[1U]; - __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ - uint32_t RESERVED21[1U]; - __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ - uint32_t RESERVED22[1U]; - __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ - uint32_t RESERVED23[1U]; - __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ - uint32_t RESERVED24[1U]; - __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ - uint32_t RESERVED25[1U]; - __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ - uint32_t RESERVED26[1U]; - __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ - uint32_t RESERVED27[1U]; - __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ - uint32_t RESERVED28[1U]; - __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ - uint32_t RESERVED29[1U]; - __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ - uint32_t RESERVED30[1U]; - __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ - uint32_t RESERVED31[1U]; - __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ - uint32_t RESERVED32[934U]; - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ - uint32_t RESERVED33[1U]; - __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ -#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ - -#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ -#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ - -#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ -#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ - -#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ -#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ - -#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ -#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ - -#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ -#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ - -#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ -#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ - -#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ -#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ - -#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ -#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ - -#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ -#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ - -#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ -#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ - -#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ -#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ - -#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ -#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ - -#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ -#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ - -/* DWT CPI Count Register Definitions */ -#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ -#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ - -/* DWT Exception Overhead Count Register Definitions */ -#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ -#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ - -/* DWT Sleep Count Register Definitions */ -#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ -#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ - -/* DWT LSU Count Register Definitions */ -#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ -#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ - -/* DWT Folded-instruction Count Register Definitions */ -#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ -#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ - -/* DWT Comparator Function Register Definitions */ -#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ -#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ - -#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ -#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ - -#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ -#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ - -/*@}*/ /* end of group CMSIS_DWT */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_TPI Trace Port Interface (TPI) - \brief Type definitions for the Trace Port Interface (TPI) - @{ - */ - -/** - \brief Structure type to access the Trace Port Interface Register (TPI). - */ -typedef struct -{ - __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ - __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ - uint32_t RESERVED0[2U]; - __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55U]; - __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131U]; - __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ - uint32_t RESERVED3[809U]; - __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Software Lock Access Register */ - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Software Lock Status Register */ - uint32_t RESERVED4[4U]; - __IM uint32_t TYPE; /*!< Offset: 0xFC8 (R/ ) Device Identifier Register */ - __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_SWOSCALER_Pos 0U /*!< TPI ACPR: SWOSCALER Position */ -#define TPI_ACPR_SWOSCALER_Msk (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/) /*!< TPI ACPR: SWOSCALER Mask */ - -/* TPI Selected Pin Protocol Register Definitions */ -#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ -#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ - -/* TPI Formatter and Flush Status Register Definitions */ -#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ -#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ - -/* TPI Formatter and Flush Control Register Definitions */ -#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ -#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ - -#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ -#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ - -/* TPI Periodic Synchronization Control Register Definitions */ -#define TPI_PSCR_PSCount_Pos 0U /*!< TPI PSCR: PSCount Position */ -#define TPI_PSCR_PSCount_Msk (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/) /*!< TPI PSCR: TPSCount Mask */ - -/* TPI Software Lock Status Register Definitions */ -#define TPI_LSR_nTT_Pos 1U /*!< TPI LSR: Not thirty-two bit. Position */ -#define TPI_LSR_nTT_Msk (0x1UL << TPI_LSR_nTT_Pos) /*!< TPI LSR: Not thirty-two bit. Mask */ - -#define TPI_LSR_SLK_Pos 1U /*!< TPI LSR: Software Lock status Position */ -#define TPI_LSR_SLK_Msk (0x1UL << TPI_LSR_SLK_Pos) /*!< TPI LSR: Software Lock status Mask */ - -#define TPI_LSR_SLI_Pos 0U /*!< TPI LSR: Software Lock implemented Position */ -#define TPI_LSR_SLI_Msk (0x1UL /*<< TPI_LSR_SLI_Pos*/) /*!< TPI LSR: Software Lock implemented Mask */ - -/* TPI DEVID Register Definitions */ -#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFO depth Position */ -#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFO depth Mask */ - -/* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** - \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ - __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ - __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ - __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ - __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ - __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ - __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ - uint32_t RESERVED0[1]; - union { - __IOM uint32_t MAIR[2]; - struct { - __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ - __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ - }; - }; -} MPU_Type; - -#define MPU_TYPE_RALIASES 4U - -/* MPU Type Register Definitions */ -#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register Definitions */ -#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register Definitions */ -#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register Definitions */ -#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ -#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ - -#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ -#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ - -#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ -#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ - -#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ -#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ - -/* MPU Region Limit Address Register Definitions */ -#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ -#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ - -#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ -#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ - -#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ -#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ - -/* MPU Memory Attribute Indirection Register 0 Definitions */ -#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ -#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ - -#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ -#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ - -#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ -#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ - -#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ -#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ - -/* MPU Memory Attribute Indirection Register 1 Definitions */ -#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ -#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ - -#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ -#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ - -#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ -#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ - -#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ -#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ - -/*@} end of group CMSIS_MPU */ -#endif - - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SAU Security Attribution Unit (SAU) - \brief Type definitions for the Security Attribution Unit (SAU) - @{ - */ - -/** - \brief Structure type to access the Security Attribution Unit (SAU). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ - __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ - __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ -#else - uint32_t RESERVED0[3]; -#endif - __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ - __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ -} SAU_Type; - -/* SAU Control Register Definitions */ -#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ -#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ - -#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ -#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ - -/* SAU Type Register Definitions */ -#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ -#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ - -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) -/* SAU Region Number Register Definitions */ -#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ -#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ - -/* SAU Region Base Address Register Definitions */ -#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ -#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ - -/* SAU Region Limit Address Register Definitions */ -#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ -#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ - -#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ -#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ - -#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ -#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ - -#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ - -/* Secure Fault Status Register Definitions */ -#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ -#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ - -#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ -#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ - -#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ -#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ - -#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ -#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ - -#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ -#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ - -#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ -#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ - -#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ -#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ - -#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ -#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ - -/*@} end of group CMSIS_SAU */ -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_FPU Floating Point Unit (FPU) - \brief Type definitions for the Floating Point Unit (FPU) - @{ - */ - -/** - \brief Structure type to access the Floating Point Unit (FPU). - */ -typedef struct -{ - uint32_t RESERVED0[1U]; - __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ - __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ - __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ - __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ - __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ -} FPU_Type; - -/* Floating-Point Context Control Register Definitions */ -#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ -#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ - -#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ -#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ - -#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ -#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ - -#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ -#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ - -#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ -#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ - -#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ -#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ - -#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ -#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ - -#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ -#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ - -#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ -#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ - -#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ -#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ - -#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ -#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ - -#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ -#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ - -#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ -#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ - -#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ -#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ - -#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ -#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ - -#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ -#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ - -#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ -#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ - -/* Floating-Point Context Address Register Definitions */ -#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ -#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ - -/* Floating-Point Default Status Control Register Definitions */ -#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ -#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ - -#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ -#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ - -#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ -#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ - -#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ -#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ - -/* Media and FP Feature Register 0 Definitions */ -#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ -#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ - -#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ -#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ - -#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ -#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ - -#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ -#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ - -#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ -#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ - -#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ -#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ - -#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ -#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ - -#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ -#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ - -/* Media and FP Feature Register 1 Definitions */ -#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ -#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ - -#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ -#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ - -#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ -#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ - -#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ -#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ - -/*@} end of group CMSIS_FPU */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Type definitions for the Core Debug Registers - @{ - */ - -/** - \brief Structure type to access the Core Debug Register (CoreDebug). - */ -typedef struct -{ - __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ - uint32_t RESERVED4[1U]; - __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ - __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register Definitions */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ -#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ -#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register Definitions */ -#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register Definitions */ -#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ - -#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ -#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ - -#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ -#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ - -#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ -#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ - -#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ -#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ -#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ - -#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ -#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ - -#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ -#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ - -#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ -#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ - -#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ -#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ - -#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ -#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ - -/* Debug Authentication Control Register Definitions */ -#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ -#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ - -#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ -#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ - -#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ -#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ - -#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ -#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ - -/* Debug Security Control and Status Register Definitions */ -#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ -#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ - -#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ -#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ - -#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ -#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ - -/*@} end of group CMSIS_CoreDebug */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_bitfield Core register bit field macros - \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). - @{ - */ - -/** - \brief Mask and shift a bit field value for use in a register bit range. - \param[in] field Name of the register bit field. - \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) - -/** - \brief Mask and shift a register value to extract a bit filed value. - \param[in] field Name of the register bit field. - \param[in] value Value of register. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) - -/*@} end of group CMSIS_core_bitfield */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Core Hardware */ - #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ - #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ - #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ - #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ - #define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ - #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ - #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ - #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - - #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ - #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ - #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ - #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ - #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ - #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ - #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ - #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< Core Debug configuration struct */ - - #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ - #endif - - #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ - #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ - #endif - - #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ - #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ - #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ - #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ - #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ - #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ - - #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ - #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ - #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ - #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ - #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ - - #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ - #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ - #endif - - #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ - #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ - -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Debug Functions - - Core Register Access Functions - ******************************************************************************/ -/** - \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ - #define NVIC_GetActive __NVIC_GetActive - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* Special LR values for Secure/Non-Secure call handling and exception handling */ - -/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ -#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ - -/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ -#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ -#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ -#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ -#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ -#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ -#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ -#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ - -/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ -#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ -#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ -#else -#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ -#endif - - -/** - \brief Set Priority Grouping - \details Sets the priority grouping field using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ - SCB->AIRCR = reg_value; -} - - -/** - \brief Get Priority Grouping - \details Reads the priority grouping field from the NVIC Interrupt Controller. - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) -{ - return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); -} - - -/** - \brief Enable Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt - \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief Get Interrupt Target State - \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - \return 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Target State - \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Clear Interrupt Target State - \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. - Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); - } -} - - -/** - \brief Encode Priority - \details Encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - return ( - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - ); -} - - -/** - \brief Decode Priority - \details Decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); - *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); -} - - -/** - \brief Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - } -} - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief Set Priority Grouping (non-secure) - \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - - reg_value = SCB_NS->AIRCR; /* read old register configuration */ - reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ - SCB_NS->AIRCR = reg_value; -} - - -/** - \brief Get Priority Grouping (non-secure) - \details Reads the priority grouping field from the non-secure NVIC when in secure state. - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) -{ - return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); -} - - -/** - \brief Enable Interrupt (non-secure) - \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status (non-secure) - \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt (non-secure) - \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Pending Interrupt (non-secure) - \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt (non-secure) - \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt (non-secure) - \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt (non-secure) - \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Priority (non-secure) - \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every non-secure processor exception. - */ -__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority (non-secure) - \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); - } -} -#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ - -/*@} end of CMSIS_Core_NVICFunctions */ - -/* ########################## MPU functions #################################### */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - -#include "mpu_armv8.h" - -#endif - -/* ########################## FPU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_FpuFunctions FPU Functions - \brief Function that provides FPU type. - @{ - */ - -/** - \brief get FPU type - \details returns the FPU type - \returns - - \b 0: No FPU - - \b 1: Single precision FPU - - \b 2: Double + Single precision FPU - */ -__STATIC_INLINE uint32_t SCB_GetFPUType(void) -{ - uint32_t mvfr0; - - mvfr0 = FPU->MVFR0; - if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) - { - return 2U; /* Double + Single precision FPU */ - } - else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) - { - return 1U; /* Single precision FPU */ - } - else - { - return 0U; /* No FPU */ - } -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ########################## SAU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SAUFunctions SAU Functions - \brief Functions that configure the SAU. - @{ - */ - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - -/** - \brief Enable SAU - \details Enables the Security Attribution Unit (SAU). - */ -__STATIC_INLINE void TZ_SAU_Enable(void) -{ - SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); -} - - - -/** - \brief Disable SAU - \details Disables the Security Attribution Unit (SAU). - */ -__STATIC_INLINE void TZ_SAU_Disable(void) -{ - SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); -} - -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - -/*@} end of CMSIS_Core_SAUFunctions */ - - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) - -/** - \brief System Tick Configuration - \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief System Tick Configuration (non-secure) - \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function TZ_SysTick_Config_NS is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - - */ -__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - -/* ##################################### Debug In/Output function ########################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_core_DebugFunctions ITM Functions - \brief Functions that access the ITM debug interface. - @{ - */ - -extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ -#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ - - -/** - \brief ITM Send Character - \details Transmits a character via the ITM channel 0, and - \li Just returns when no debugger is connected that has booked the output. - \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. - \param [in] ch Character to transmit. - \returns Character to transmit. - */ -__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) -{ - if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ - ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ - { - while (ITM->PORT[0U].u32 == 0UL) - { - __NOP(); - } - ITM->PORT[0U].u8 = (uint8_t)ch; - } - return (ch); -} - - -/** - \brief ITM Receive Character - \details Inputs a character via the external variable \ref ITM_RxBuffer. - \return Received character. - \return -1 No character pending. - */ -__STATIC_INLINE int32_t ITM_ReceiveChar (void) -{ - int32_t ch = -1; /* no character available */ - - if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) - { - ch = ITM_RxBuffer; - ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ - } - - return (ch); -} - - -/** - \brief ITM Check Character - \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. - \return 0 No character available. - \return 1 Character available. - */ -__STATIC_INLINE int32_t ITM_CheckChar (void) -{ - - if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) - { - return (0); /* no character available */ - } - else - { - return (1); /* character available */ - } -} - -/*@} end of CMSIS_core_DebugFunctions */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_ARMV8MML_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ diff --git a/include/cmsis/core_cm0.h b/include/cmsis/core_cm0.h deleted file mode 100644 index fcf2757..0000000 --- a/include/cmsis/core_cm0.h +++ /dev/null @@ -1,949 +0,0 @@ -/**************************************************************************//** - * @file core_cm0.h - * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File - * @version V5.0.6 - * @date 13. March 2019 - ******************************************************************************/ -/* - * Copyright (c) 2009-2019 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CORE_CM0_H_GENERIC -#define __CORE_CM0_H_GENERIC - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -/** - \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** - \ingroup Cortex_M0 - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS CM0 definitions */ -#define __CM0_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __CM0_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __CM0_CMSIS_VERSION ((__CM0_CMSIS_VERSION_MAIN << 16U) | \ - __CM0_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M (0U) /*!< Cortex-M Core */ - -/** __FPU_USED indicates whether an FPU is used or not. - This core does not support an FPU at all -*/ -#define __FPU_USED 0U - -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #if defined __ARM_FP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TI_ARM__ ) - #if defined __TI_VFP_SUPPORT__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __CSMC__ ) - #if ( __CSMC__ & 0x400U) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#endif - -#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM0_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_CM0_H_DEPENDANT -#define __CORE_CM0_H_DEPENDANT - -#ifdef __cplusplus - extern "C" { -#endif - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __CM0_REV - #define __CM0_REV 0x0000U - #warning "__CM0_REV not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 2U - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0U - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#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 */ - -/*@} end of group Cortex_M0 */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - ******************************************************************************/ -/** - \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** - \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { - uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - -/* APSR Register Definitions */ -#define APSR_N_Pos 31U /*!< APSR: N Position */ -#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ - -#define APSR_Z_Pos 30U /*!< APSR: Z Position */ -#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ - -#define APSR_C_Pos 29U /*!< APSR: C Position */ -#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ - -#define APSR_V_Pos 28U /*!< APSR: V Position */ -#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ - - -/** - \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - -/* IPSR Register Definitions */ -#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ -#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ - - -/** - \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ - uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - -/* xPSR Register Definitions */ -#define xPSR_N_Pos 31U /*!< xPSR: N Position */ -#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ - -#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ -#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ - -#define xPSR_C_Pos 29U /*!< xPSR: C Position */ -#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ - -#define xPSR_V_Pos 28U /*!< xPSR: V Position */ -#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ -#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ - - -/** - \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t _reserved0:1; /*!< bit: 0 Reserved */ - uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ - uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/* CONTROL Register Definitions */ -#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ -#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ - -/*@} end of group CMSIS_CORE */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** - \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[31U]; - __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RESERVED1[31U]; - __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[31U]; - __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[31U]; - uint32_t RESERVED4[64U]; - __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ -} NVIC_Type; - -/*@} end of group CMSIS_NVIC */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - uint32_t RESERVED0; - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - uint32_t RESERVED1; - __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. - Therefore they are not covered by the Cortex-M0 header file. - @{ - */ -/*@} end of group CMSIS_CoreDebug */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_bitfield Core register bit field macros - \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). - @{ - */ - -/** - \brief Mask and shift a bit field value for use in a register bit range. - \param[in] field Name of the register bit field. - \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) - -/** - \brief Mask and shift a register value to extract a bit filed value. - \param[in] field Name of the register bit field. - \param[in] value Value of register. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) - -/*@} end of group CMSIS_core_bitfield */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Core Hardware */ -#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ -#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - -#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ -#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ -#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ - - -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Register Access Functions - ******************************************************************************/ -/** - \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ -/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0 */ - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* The following EXC_RETURN values are saved the LR on exception entry */ -#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ -#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ -#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ - - -/* Interrupt Priorities are WORD accessible only under Armv6-M */ -/* The following MACROS handle generation of the register offset and byte masks */ -#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) -#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) -#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) - -#define __NVIC_SetPriorityGrouping(X) (void)(X) -#define __NVIC_GetPriorityGrouping() (0U) - -/** - \brief Enable Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } - else - { - SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. - Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } -} - - -/** - \brief Encode Priority - \details Encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - return ( - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - ); -} - - -/** - \brief Decode Priority - \details Decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); - *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); -} - - - -/** - \brief Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - Address 0 must be mapped to SRAM. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ - uint32_t vectors = 0x0U; - (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector; -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ - uint32_t vectors = 0x0U; - return (uint32_t)(* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)); -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - SCB_AIRCR_SYSRESETREQ_Msk); - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - } -} - -/*@} end of CMSIS_Core_NVICFunctions */ - - -/* ########################## FPU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_FpuFunctions FPU Functions - \brief Function that provides FPU type. - @{ - */ - -/** - \brief get FPU type - \details returns the FPU type - \returns - - \b 0: No FPU - - \b 1: Single precision FPU - - \b 2: Double + Single precision FPU - */ -__STATIC_INLINE uint32_t SCB_GetFPUType(void) -{ - return 0U; /* No FPU */ -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) - -/** - \brief System Tick Configuration - \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM0_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ diff --git a/include/cmsis/core_cm0plus.h b/include/cmsis/core_cm0plus.h deleted file mode 100644 index 65ea443..0000000 --- a/include/cmsis/core_cm0plus.h +++ /dev/null @@ -1,1082 +0,0 @@ -/**************************************************************************//** - * @file core_cm0plus.h - * @brief CMSIS Cortex-M0+ Core Peripheral Access Layer Header File - * @version V5.0.7 - * @date 13. March 2019 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CORE_CM0PLUS_H_GENERIC -#define __CORE_CM0PLUS_H_GENERIC - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -/** - \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** - \ingroup Cortex-M0+ - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS CM0+ definitions */ -#define __CM0PLUS_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __CM0PLUS_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __CM0PLUS_CMSIS_VERSION ((__CM0PLUS_CMSIS_VERSION_MAIN << 16U) | \ - __CM0PLUS_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M (0U) /*!< Cortex-M Core */ - -/** __FPU_USED indicates whether an FPU is used or not. - This core does not support an FPU at all -*/ -#define __FPU_USED 0U - -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #if defined __ARM_FP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TI_ARM__ ) - #if defined __TI_VFP_SUPPORT__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __CSMC__ ) - #if ( __CSMC__ & 0x400U) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#endif - -#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM0PLUS_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_CM0PLUS_H_DEPENDANT -#define __CORE_CM0PLUS_H_DEPENDANT - -#ifdef __cplusplus - extern "C" { -#endif - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __CM0PLUS_REV - #define __CM0PLUS_REV 0x0000U - #warning "__CM0PLUS_REV not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0U - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __VTOR_PRESENT - #define __VTOR_PRESENT 0U - #warning "__VTOR_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 2U - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0U - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#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 */ - -/*@} end of group Cortex-M0+ */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core MPU Register - ******************************************************************************/ -/** - \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** - \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { - uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - -/* APSR Register Definitions */ -#define APSR_N_Pos 31U /*!< APSR: N Position */ -#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ - -#define APSR_Z_Pos 30U /*!< APSR: Z Position */ -#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ - -#define APSR_C_Pos 29U /*!< APSR: C Position */ -#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ - -#define APSR_V_Pos 28U /*!< APSR: V Position */ -#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ - - -/** - \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - -/* IPSR Register Definitions */ -#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ -#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ - - -/** - \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ - uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - -/* xPSR Register Definitions */ -#define xPSR_N_Pos 31U /*!< xPSR: N Position */ -#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ - -#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ -#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ - -#define xPSR_C_Pos 29U /*!< xPSR: C Position */ -#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ - -#define xPSR_V_Pos 28U /*!< xPSR: V Position */ -#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ -#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ - - -/** - \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ - uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ - uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/* CONTROL Register Definitions */ -#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ -#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ - -#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ -#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ - -/*@} end of group CMSIS_CORE */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** - \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[31U]; - __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RESERVED1[31U]; - __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[31U]; - __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[31U]; - uint32_t RESERVED4[64U]; - __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ -} NVIC_Type; - -/*@} end of group CMSIS_NVIC */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ -#else - uint32_t RESERVED0; -#endif - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - uint32_t RESERVED1; - __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ - -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) -/* SCB Interrupt Control State Register Definitions */ -#define SCB_VTOR_TBLOFF_Pos 8U /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0xFFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ -#endif - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** - \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ -} MPU_Type; - -#define MPU_TYPE_RALIASES 1U - -/* MPU Type Register Definitions */ -#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register Definitions */ -#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register Definitions */ -#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register Definitions */ -#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ -#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ - -#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ -#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ - -#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ -#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ - -/* MPU Region Attribute and Size Register Definitions */ -#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ -#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ - -#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ -#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ - -#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ -#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ - -#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ -#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ - -#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ -#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ - -#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ -#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ - -#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ -#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ - -#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ -#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ - -#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ -#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ - -#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ -#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ - -/*@} end of group CMSIS_MPU */ -#endif - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. - Therefore they are not covered by the Cortex-M0+ header file. - @{ - */ -/*@} end of group CMSIS_CoreDebug */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_bitfield Core register bit field macros - \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). - @{ - */ - -/** - \brief Mask and shift a bit field value for use in a register bit range. - \param[in] field Name of the register bit field. - \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) - -/** - \brief Mask and shift a register value to extract a bit filed value. - \param[in] field Name of the register bit field. - \param[in] value Value of register. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) - -/*@} end of group CMSIS_core_bitfield */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Core Hardware */ -#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ -#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - -#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ -#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ -#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ -#endif - -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Register Access Functions - ******************************************************************************/ -/** - \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ -/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0+ */ - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* The following EXC_RETURN values are saved the LR on exception entry */ -#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ -#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ -#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ - - -/* Interrupt Priorities are WORD accessible only under Armv6-M */ -/* The following MACROS handle generation of the register offset and byte masks */ -#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) -#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) -#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) - -#define __NVIC_SetPriorityGrouping(X) (void)(X) -#define __NVIC_GetPriorityGrouping() (0U) - -/** - \brief Enable Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } - else - { - SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. - Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } -} - - -/** - \brief Encode Priority - \details Encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - return ( - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - ); -} - - -/** - \brief Decode Priority - \details Decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); - *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); -} - - -/** - \brief Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - If VTOR is not present address 0 must be mapped to SRAM. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - uint32_t vectors = SCB->VTOR; -#else - uint32_t vectors = 0x0U; -#endif - (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector; -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - uint32_t vectors = SCB->VTOR; -#else - uint32_t vectors = 0x0U; -#endif - return (uint32_t)(* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)); -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - SCB_AIRCR_SYSRESETREQ_Msk); - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - } -} - -/*@} end of CMSIS_Core_NVICFunctions */ - -/* ########################## MPU functions #################################### */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - -#include "mpu_armv7.h" - -#endif - -/* ########################## FPU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_FpuFunctions FPU Functions - \brief Function that provides FPU type. - @{ - */ - -/** - \brief get FPU type - \details returns the FPU type - \returns - - \b 0: No FPU - - \b 1: Single precision FPU - - \b 2: Double + Single precision FPU - */ -__STATIC_INLINE uint32_t SCB_GetFPUType(void) -{ - return 0U; /* No FPU */ -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) - -/** - \brief System Tick Configuration - \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM0PLUS_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ diff --git a/include/cmsis/core_cm1.h b/include/cmsis/core_cm1.h deleted file mode 100644 index 72c515c..0000000 --- a/include/cmsis/core_cm1.h +++ /dev/null @@ -1,976 +0,0 @@ -/**************************************************************************//** - * @file core_cm1.h - * @brief CMSIS Cortex-M1 Core Peripheral Access Layer Header File - * @version V1.0.1 - * @date 12. November 2018 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CORE_CM1_H_GENERIC -#define __CORE_CM1_H_GENERIC - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -/** - \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** - \ingroup Cortex_M1 - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS CM1 definitions */ -#define __CM1_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __CM1_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __CM1_CMSIS_VERSION ((__CM1_CMSIS_VERSION_MAIN << 16U) | \ - __CM1_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M (1U) /*!< Cortex-M Core */ - -/** __FPU_USED indicates whether an FPU is used or not. - This core does not support an FPU at all -*/ -#define __FPU_USED 0U - -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #if defined __ARM_FP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TI_ARM__ ) - #if defined __TI_VFP_SUPPORT__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __CSMC__ ) - #if ( __CSMC__ & 0x400U) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#endif - -#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM1_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_CM1_H_DEPENDANT -#define __CORE_CM1_H_DEPENDANT - -#ifdef __cplusplus - extern "C" { -#endif - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __CM1_REV - #define __CM1_REV 0x0100U - #warning "__CM1_REV not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 2U - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0U - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#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 */ - -/*@} end of group Cortex_M1 */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - ******************************************************************************/ -/** - \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** - \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { - uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - -/* APSR Register Definitions */ -#define APSR_N_Pos 31U /*!< APSR: N Position */ -#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ - -#define APSR_Z_Pos 30U /*!< APSR: Z Position */ -#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ - -#define APSR_C_Pos 29U /*!< APSR: C Position */ -#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ - -#define APSR_V_Pos 28U /*!< APSR: V Position */ -#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ - - -/** - \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - -/* IPSR Register Definitions */ -#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ -#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ - - -/** - \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ - uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - -/* xPSR Register Definitions */ -#define xPSR_N_Pos 31U /*!< xPSR: N Position */ -#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ - -#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ -#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ - -#define xPSR_C_Pos 29U /*!< xPSR: C Position */ -#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ - -#define xPSR_V_Pos 28U /*!< xPSR: V Position */ -#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ -#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ - - -/** - \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t _reserved0:1; /*!< bit: 0 Reserved */ - uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ - uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/* CONTROL Register Definitions */ -#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ -#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ - -/*@} end of group CMSIS_CORE */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** - \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[31U]; - __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RSERVED1[31U]; - __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[31U]; - __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[31U]; - uint32_t RESERVED4[64U]; - __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ -} NVIC_Type; - -/*@} end of group CMSIS_NVIC */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - uint32_t RESERVED0; - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - uint32_t RESERVED1; - __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) - \brief Type definitions for the System Control and ID Register not in the SCB - @{ - */ - -/** - \brief Structure type to access the System Control and ID Register not in the SCB. - */ -typedef struct -{ - uint32_t RESERVED0[2U]; - __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ -} SCnSCB_Type; - -/* Auxiliary Control Register Definitions */ -#define SCnSCB_ACTLR_ITCMUAEN_Pos 4U /*!< ACTLR: Instruction TCM Upper Alias Enable Position */ -#define SCnSCB_ACTLR_ITCMUAEN_Msk (1UL << SCnSCB_ACTLR_ITCMUAEN_Pos) /*!< ACTLR: Instruction TCM Upper Alias Enable Mask */ - -#define SCnSCB_ACTLR_ITCMLAEN_Pos 3U /*!< ACTLR: Instruction TCM Lower Alias Enable Position */ -#define SCnSCB_ACTLR_ITCMLAEN_Msk (1UL << SCnSCB_ACTLR_ITCMLAEN_Pos) /*!< ACTLR: Instruction TCM Lower Alias Enable Mask */ - -/*@} end of group CMSIS_SCnotSCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Cortex-M1 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. - Therefore they are not covered by the Cortex-M1 header file. - @{ - */ -/*@} end of group CMSIS_CoreDebug */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_bitfield Core register bit field macros - \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). - @{ - */ - -/** - \brief Mask and shift a bit field value for use in a register bit range. - \param[in] field Name of the register bit field. - \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) - -/** - \brief Mask and shift a register value to extract a bit filed value. - \param[in] field Name of the register bit field. - \param[in] value Value of register. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) - -/*@} end of group CMSIS_core_bitfield */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Core Hardware */ -#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ -#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - -#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ -#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ -#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ -#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ - - -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Register Access Functions - ******************************************************************************/ -/** - \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ -/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M1 */ - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* The following EXC_RETURN values are saved the LR on exception entry */ -#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ -#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ -#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ - - -/* Interrupt Priorities are WORD accessible only under Armv6-M */ -/* The following MACROS handle generation of the register offset and byte masks */ -#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) -#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) -#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) - -#define __NVIC_SetPriorityGrouping(X) (void)(X) -#define __NVIC_GetPriorityGrouping() (0U) - -/** - \brief Enable Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } - else - { - SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. - Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } -} - - -/** - \brief Encode Priority - \details Encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - return ( - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - ); -} - - -/** - \brief Decode Priority - \details Decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); - *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); -} - - - -/** - \brief Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - Address 0 must be mapped to SRAM. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ - uint32_t *vectors = (uint32_t *)0x0U; - vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ - uint32_t *vectors = (uint32_t *)0x0U; - return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - SCB_AIRCR_SYSRESETREQ_Msk); - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - } -} - -/*@} end of CMSIS_Core_NVICFunctions */ - - -/* ########################## FPU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_FpuFunctions FPU Functions - \brief Function that provides FPU type. - @{ - */ - -/** - \brief get FPU type - \details returns the FPU type - \returns - - \b 0: No FPU - - \b 1: Single precision FPU - - \b 2: Double + Single precision FPU - */ -__STATIC_INLINE uint32_t SCB_GetFPUType(void) -{ - return 0U; /* No FPU */ -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) - -/** - \brief System Tick Configuration - \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM1_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ diff --git a/include/cmsis/core_cm23.h b/include/cmsis/core_cm23.h deleted file mode 100644 index 26fe163..0000000 --- a/include/cmsis/core_cm23.h +++ /dev/null @@ -1,1993 +0,0 @@ -/**************************************************************************//** - * @file core_cm23.h - * @brief CMSIS Cortex-M23 Core Peripheral Access Layer Header File - * @version V5.0.8 - * @date 12. November 2018 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CORE_CM23_H_GENERIC -#define __CORE_CM23_H_GENERIC - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -/** - \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** - \ingroup Cortex_M23 - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS definitions */ -#define __CM23_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __CM23_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __CM23_CMSIS_VERSION ((__CM23_CMSIS_VERSION_MAIN << 16U) | \ - __CM23_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M (23U) /*!< Cortex-M Core */ - -/** __FPU_USED indicates whether an FPU is used or not. - This core does not support an FPU at all -*/ -#define __FPU_USED 0U - -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #if defined __ARM_FP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TI_ARM__ ) - #if defined __TI_VFP_SUPPORT__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __CSMC__ ) - #if ( __CSMC__ & 0x400U) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#endif - -#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM23_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_CM23_H_DEPENDANT -#define __CORE_CM23_H_DEPENDANT - -#ifdef __cplusplus - extern "C" { -#endif - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __CM23_REV - #define __CM23_REV 0x0000U - #warning "__CM23_REV not defined in device header file; using default!" - #endif - - #ifndef __FPU_PRESENT - #define __FPU_PRESENT 0U - #warning "__FPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0U - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __SAUREGION_PRESENT - #define __SAUREGION_PRESENT 0U - #warning "__SAUREGION_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __VTOR_PRESENT - #define __VTOR_PRESENT 0U - #warning "__VTOR_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 2U - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0U - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif - - #ifndef __ETM_PRESENT - #define __ETM_PRESENT 0U - #warning "__ETM_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __MTB_PRESENT - #define __MTB_PRESENT 0U - #warning "__MTB_PRESENT not defined in device header file; using default!" - #endif - -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#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 */ - -/*@} end of group Cortex_M23 */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core Debug Register - - Core MPU Register - - Core SAU Register - ******************************************************************************/ -/** - \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** - \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { - uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - -/* APSR Register Definitions */ -#define APSR_N_Pos 31U /*!< APSR: N Position */ -#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ - -#define APSR_Z_Pos 30U /*!< APSR: Z Position */ -#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ - -#define APSR_C_Pos 29U /*!< APSR: C Position */ -#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ - -#define APSR_V_Pos 28U /*!< APSR: V Position */ -#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ - - -/** - \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - -/* IPSR Register Definitions */ -#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ -#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ - - -/** - \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ - uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - -/* xPSR Register Definitions */ -#define xPSR_N_Pos 31U /*!< xPSR: N Position */ -#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ - -#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ -#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ - -#define xPSR_C_Pos 29U /*!< xPSR: C Position */ -#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ - -#define xPSR_V_Pos 28U /*!< xPSR: V Position */ -#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ -#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ - - -/** - \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ - uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ - uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/* CONTROL Register Definitions */ -#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ -#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ - -#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ -#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ - -/*@} end of group CMSIS_CORE */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** - \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[16U]; - __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RSERVED1[16U]; - __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[16U]; - __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[16U]; - __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[16U]; - __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ - uint32_t RESERVED5[16U]; - __IOM uint32_t IPR[124U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ -} NVIC_Type; - -/*@} end of group CMSIS_NVIC */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ -#else - uint32_t RESERVED0; -#endif - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - uint32_t RESERVED1; - __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ -#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ - -#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ -#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ - -#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ -#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ -#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ - -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) -/* SCB Vector Table Offset Register Definitions */ -#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ -#endif - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ -#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ - -#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ -#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ - -#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ -#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ -#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ -#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ - -#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ -#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ - -#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ -#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ - -#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ -#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ -#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ - -#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ -#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ -#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ -#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ - -#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ -#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) - \brief Type definitions for the Data Watchpoint and Trace (DWT) - @{ - */ - -/** - \brief Structure type to access the Data Watchpoint and Trace Register (DWT). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - uint32_t RESERVED0[6U]; - __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - uint32_t RESERVED1[1U]; - __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED2[1U]; - __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - uint32_t RESERVED3[1U]; - __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED4[1U]; - __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - uint32_t RESERVED5[1U]; - __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED6[1U]; - __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - uint32_t RESERVED7[1U]; - __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ - uint32_t RESERVED8[1U]; - __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ - uint32_t RESERVED9[1U]; - __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ - uint32_t RESERVED10[1U]; - __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ - uint32_t RESERVED11[1U]; - __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ - uint32_t RESERVED12[1U]; - __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ - uint32_t RESERVED13[1U]; - __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ - uint32_t RESERVED14[1U]; - __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ - uint32_t RESERVED15[1U]; - __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ - uint32_t RESERVED16[1U]; - __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ - uint32_t RESERVED17[1U]; - __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ - uint32_t RESERVED18[1U]; - __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ - uint32_t RESERVED19[1U]; - __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ - uint32_t RESERVED20[1U]; - __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ - uint32_t RESERVED21[1U]; - __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ - uint32_t RESERVED22[1U]; - __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ - uint32_t RESERVED23[1U]; - __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ - uint32_t RESERVED24[1U]; - __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ - uint32_t RESERVED25[1U]; - __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ - uint32_t RESERVED26[1U]; - __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ - uint32_t RESERVED27[1U]; - __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ - uint32_t RESERVED28[1U]; - __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ - uint32_t RESERVED29[1U]; - __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ - uint32_t RESERVED30[1U]; - __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ - uint32_t RESERVED31[1U]; - __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -/* DWT Comparator Function Register Definitions */ -#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ -#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ - -#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ -#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ - -#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ -#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ - -/*@}*/ /* end of group CMSIS_DWT */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_TPI Trace Port Interface (TPI) - \brief Type definitions for the Trace Port Interface (TPI) - @{ - */ - -/** - \brief Structure type to access the Trace Port Interface Register (TPI). - */ -typedef struct -{ - __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ - __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ - uint32_t RESERVED0[2U]; - __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55U]; - __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131U]; - __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ - uint32_t RESERVED3[759U]; - __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ - __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ - __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ - uint32_t RESERVED4[1U]; - __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ - __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ - __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ - uint32_t RESERVED5[39U]; - __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ - __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ - uint32_t RESERVED7[8U]; - __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ - __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ - -/* TPI Selected Pin Protocol Register Definitions */ -#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ -#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ - -/* TPI Formatter and Flush Status Register Definitions */ -#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ -#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ - -/* TPI Formatter and Flush Control Register Definitions */ -#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ -#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ - -#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ -#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ - -/* TPI TRIGGER Register Definitions */ -#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ -#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ - -/* TPI Integration Test FIFO Test Data 0 Register Definitions */ -#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */ -#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */ - -#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */ -#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */ - -#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */ -#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */ - -#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */ -#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */ - -#define TPI_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */ -#define TPI_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */ - -#define TPI_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */ -#define TPI_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */ - -#define TPI_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */ -#define TPI_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */ - -/* TPI Integration Test ATB Control Register 2 Register Definitions */ -#define TPI_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPI ITATBCTR2: AFVALID2S Position */ -#define TPI_ITATBCTR2_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos) /*!< TPI ITATBCTR2: AFVALID2SS Mask */ - -#define TPI_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPI ITATBCTR2: AFVALID1S Position */ -#define TPI_ITATBCTR2_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos) /*!< TPI ITATBCTR2: AFVALID1SS Mask */ - -#define TPI_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPI ITATBCTR2: ATREADY2S Position */ -#define TPI_ITATBCTR2_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPI ITATBCTR2: ATREADY2S Mask */ - -#define TPI_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPI ITATBCTR2: ATREADY1S Position */ -#define TPI_ITATBCTR2_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPI ITATBCTR2: ATREADY1S Mask */ - -/* TPI Integration Test FIFO Test Data 1 Register Definitions */ -#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */ -#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */ - -#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */ -#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */ - -#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */ -#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */ - -#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */ -#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */ - -#define TPI_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */ -#define TPI_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */ - -#define TPI_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */ -#define TPI_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */ - -#define TPI_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */ -#define TPI_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */ - -/* TPI Integration Test ATB Control Register 0 Definitions */ -#define TPI_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPI ITATBCTR0: AFVALID2S Position */ -#define TPI_ITATBCTR0_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos) /*!< TPI ITATBCTR0: AFVALID2SS Mask */ - -#define TPI_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPI ITATBCTR0: AFVALID1S Position */ -#define TPI_ITATBCTR0_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos) /*!< TPI ITATBCTR0: AFVALID1SS Mask */ - -#define TPI_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPI ITATBCTR0: ATREADY2S Position */ -#define TPI_ITATBCTR0_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPI ITATBCTR0: ATREADY2S Mask */ - -#define TPI_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPI ITATBCTR0: ATREADY1S Position */ -#define TPI_ITATBCTR0_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPI ITATBCTR0: ATREADY1S Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ - -/* TPI DEVID Register Definitions */ -#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFOSZ Position */ -#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFOSZ Mask */ - -#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ -#define TPI_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ - -/* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** - \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ - uint32_t RESERVED0[7U]; - union { - __IOM uint32_t MAIR[2]; - struct { - __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ - __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ - }; - }; -} MPU_Type; - -#define MPU_TYPE_RALIASES 1U - -/* MPU Type Register Definitions */ -#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register Definitions */ -#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register Definitions */ -#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register Definitions */ -#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ -#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ - -#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ -#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ - -#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ -#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ - -#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ -#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ - -/* MPU Region Limit Address Register Definitions */ -#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ -#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ - -#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ -#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ - -#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: EN Position */ -#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: EN Mask */ - -/* MPU Memory Attribute Indirection Register 0 Definitions */ -#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ -#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ - -#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ -#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ - -#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ -#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ - -#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ -#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ - -/* MPU Memory Attribute Indirection Register 1 Definitions */ -#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ -#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ - -#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ -#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ - -#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ -#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ - -#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ -#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ - -/*@} end of group CMSIS_MPU */ -#endif - - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SAU Security Attribution Unit (SAU) - \brief Type definitions for the Security Attribution Unit (SAU) - @{ - */ - -/** - \brief Structure type to access the Security Attribution Unit (SAU). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ - __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ - __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ -#endif -} SAU_Type; - -/* SAU Control Register Definitions */ -#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ -#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ - -#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ -#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ - -/* SAU Type Register Definitions */ -#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ -#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ - -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) -/* SAU Region Number Register Definitions */ -#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ -#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ - -/* SAU Region Base Address Register Definitions */ -#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ -#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ - -/* SAU Region Limit Address Register Definitions */ -#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ -#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ - -#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ -#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ - -#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ -#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ - -#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ - -/*@} end of group CMSIS_SAU */ -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Type definitions for the Core Debug Registers - @{ - */ - -/** - \brief Structure type to access the Core Debug Register (CoreDebug). - */ -typedef struct -{ - __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ - uint32_t RESERVED4[1U]; - __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ - __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register Definitions */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ -#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register Definitions */ -#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register */ -#define CoreDebug_DEMCR_DWTENA_Pos 24U /*!< CoreDebug DEMCR: DWTENA Position */ -#define CoreDebug_DEMCR_DWTENA_Msk (1UL << CoreDebug_DEMCR_DWTENA_Pos) /*!< CoreDebug DEMCR: DWTENA Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ - -/* Debug Authentication Control Register Definitions */ -#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ -#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ - -#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ -#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ - -#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ -#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ - -#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ -#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ - -/* Debug Security Control and Status Register Definitions */ -#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ -#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ - -#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ -#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ - -#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ -#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ - -/*@} end of group CMSIS_CoreDebug */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_bitfield Core register bit field macros - \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). - @{ - */ - -/** - \brief Mask and shift a bit field value for use in a register bit range. - \param[in] field Name of the register bit field. - \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) - -/** - \brief Mask and shift a register value to extract a bit filed value. - \param[in] field Name of the register bit field. - \param[in] value Value of register. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) - -/*@} end of group CMSIS_core_bitfield */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Core Hardware */ - #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ - #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ - #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ - #define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ - #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ - #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ - #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - - - #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ - #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ - #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ - #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ - #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ - #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< Core Debug configuration struct */ - - #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ - #endif - - #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ - #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ - #endif - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ - #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ - #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ - #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ - #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ - - #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ - #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ - #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ - #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ - - #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ - #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ - #endif - -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Register Access Functions - ******************************************************************************/ -/** - \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else -/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for Cortex-M23 */ -/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for Cortex-M23 */ - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ - #define NVIC_GetActive __NVIC_GetActive - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* Special LR values for Secure/Non-Secure call handling and exception handling */ - -/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ -#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ - -/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ -#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ -#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ -#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ -#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ -#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ -#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ -#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ - -/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ -#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ -#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ -#else -#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ -#endif - - -/* Interrupt Priorities are WORD accessible only under Armv6-M */ -/* The following MACROS handle generation of the register offset and byte masks */ -#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) -#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) -#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) - -#define __NVIC_SetPriorityGrouping(X) (void)(X) -#define __NVIC_GetPriorityGrouping() (0U) - -/** - \brief Enable Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt - \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief Get Interrupt Target State - \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - \return 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Target State - \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Clear Interrupt Target State - \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } - else - { - SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. - Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } -} - - -/** - \brief Encode Priority - \details Encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - return ( - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - ); -} - - -/** - \brief Decode Priority - \details Decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); - *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); -} - - -/** - \brief Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - If VTOR is not present address 0 must be mapped to SRAM. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - uint32_t *vectors = (uint32_t *)SCB->VTOR; -#else - uint32_t *vectors = (uint32_t *)0x0U; -#endif - vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - uint32_t *vectors = (uint32_t *)SCB->VTOR; -#else - uint32_t *vectors = (uint32_t *)0x0U; -#endif - return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - SCB_AIRCR_SYSRESETREQ_Msk); - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - } -} - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief Enable Interrupt (non-secure) - \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status (non-secure) - \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt (non-secure) - \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Pending Interrupt (non-secure) - \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt (non-secure) - \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt (non-secure) - \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt (non-secure) - \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Priority (non-secure) - \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every non-secure processor exception. - */ -__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC_NS->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } - else - { - SCB_NS->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB_NS->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } -} - - -/** - \brief Get Interrupt Priority (non-secure) - \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return((uint32_t)(((SCB_NS->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } -} -#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ - -/*@} end of CMSIS_Core_NVICFunctions */ - -/* ########################## MPU functions #################################### */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - -#include "mpu_armv8.h" - -#endif - -/* ########################## FPU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_FpuFunctions FPU Functions - \brief Function that provides FPU type. - @{ - */ - -/** - \brief get FPU type - \details returns the FPU type - \returns - - \b 0: No FPU - - \b 1: Single precision FPU - - \b 2: Double + Single precision FPU - */ -__STATIC_INLINE uint32_t SCB_GetFPUType(void) -{ - return 0U; /* No FPU */ -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ########################## SAU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SAUFunctions SAU Functions - \brief Functions that configure the SAU. - @{ - */ - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - -/** - \brief Enable SAU - \details Enables the Security Attribution Unit (SAU). - */ -__STATIC_INLINE void TZ_SAU_Enable(void) -{ - SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); -} - - - -/** - \brief Disable SAU - \details Disables the Security Attribution Unit (SAU). - */ -__STATIC_INLINE void TZ_SAU_Disable(void) -{ - SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); -} - -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - -/*@} end of CMSIS_Core_SAUFunctions */ - - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) - -/** - \brief System Tick Configuration - \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief System Tick Configuration (non-secure) - \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function TZ_SysTick_Config_NS is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - - */ -__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM23_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ diff --git a/include/cmsis/core_cm3.h b/include/cmsis/core_cm3.h deleted file mode 100644 index ea54050..0000000 --- a/include/cmsis/core_cm3.h +++ /dev/null @@ -1,1934 +0,0 @@ -/**************************************************************************//** - * @file core_cm3.h - * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File - * @version V5.1.0 - * @date 13. March 2019 - ******************************************************************************/ -/* - * Copyright (c) 2009-2019 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CORE_CM3_H_GENERIC -#define __CORE_CM3_H_GENERIC - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -/** - \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** - \ingroup Cortex_M3 - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS CM3 definitions */ -#define __CM3_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __CM3_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16U) | \ - __CM3_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M (3U) /*!< Cortex-M Core */ - -/** __FPU_USED indicates whether an FPU is used or not. - This core does not support an FPU at all -*/ -#define __FPU_USED 0U - -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #if defined __ARM_FP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TI_ARM__ ) - #if defined __TI_VFP_SUPPORT__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __CSMC__ ) - #if ( __CSMC__ & 0x400U) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#endif - -#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM3_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_CM3_H_DEPENDANT -#define __CORE_CM3_H_DEPENDANT - -#ifdef __cplusplus - extern "C" { -#endif - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __CM3_REV - #define __CM3_REV 0x0200U - #warning "__CM3_REV not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0U - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 3U - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0U - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#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 */ - -/*@} end of group Cortex_M3 */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core Debug Register - - Core MPU Register - ******************************************************************************/ -/** - \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** - \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { - uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - -/* APSR Register Definitions */ -#define APSR_N_Pos 31U /*!< APSR: N Position */ -#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ - -#define APSR_Z_Pos 30U /*!< APSR: Z Position */ -#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ - -#define APSR_C_Pos 29U /*!< APSR: C Position */ -#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ - -#define APSR_V_Pos 28U /*!< APSR: V Position */ -#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ - -#define APSR_Q_Pos 27U /*!< APSR: Q Position */ -#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ - - -/** - \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - -/* IPSR Register Definitions */ -#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ -#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ - - -/** - \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:1; /*!< bit: 9 Reserved */ - uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ - uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit */ - uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - -/* xPSR Register Definitions */ -#define xPSR_N_Pos 31U /*!< xPSR: N Position */ -#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ - -#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ -#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ - -#define xPSR_C_Pos 29U /*!< xPSR: C Position */ -#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ - -#define xPSR_V_Pos 28U /*!< xPSR: V Position */ -#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ - -#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ -#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ - -#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ -#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ -#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ - -#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ -#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ - - -/** - \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ - uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ - uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/* CONTROL Register Definitions */ -#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ -#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ - -#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ -#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ - -/*@} end of group CMSIS_CORE */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** - \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[24U]; - __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RESERVED1[24U]; - __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[24U]; - __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[24U]; - __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[56U]; - __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ - uint32_t RESERVED5[644U]; - __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ -} NVIC_Type; - -/* Software Triggered Interrupt Register Definitions */ -#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ -#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_NVIC */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ - __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ - __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ - __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ - __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ - __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ - __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ - __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ - __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ - __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ - uint32_t RESERVED0[5U]; - __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Vector Table Offset Register Definitions */ -#if defined (__CM3_REV) && (__CM3_REV < 0x0201U) /* core r2p1 */ -#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ -#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ - -#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ -#else -#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ -#endif - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ -#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ -#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ -#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ - -#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ -#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ -#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ -#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ - -#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ -#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ - -#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ -#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ -#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ - -#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ -#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ - -#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ -#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ -#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ -#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ - -#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ -#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ - -#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ -#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ - -/* SCB Configurable Fault Status Register Definitions */ -#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ -#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ - -#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ -#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ - -#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ -#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ - -/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ -#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ - -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ -#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ - -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ -#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ - -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ -#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ - -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ -#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ - -/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ -#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ - -#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ -#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ - -#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ -#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ - -#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ -#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ - -#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ -#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ - -#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ -#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ - -/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ -#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ - -#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ -#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ - -#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ -#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ - -#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ -#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ - -#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ -#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ - -#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ -#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ - -/* SCB Hard Fault Status Register Definitions */ -#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ -#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ - -#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ -#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ - -#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ -#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ - -/* SCB Debug Fault Status Register Definitions */ -#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ -#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) - \brief Type definitions for the System Control and ID Register not in the SCB - @{ - */ - -/** - \brief Structure type to access the System Control and ID Register not in the SCB. - */ -typedef struct -{ - uint32_t RESERVED0[1U]; - __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ -#if defined (__CM3_REV) && (__CM3_REV >= 0x200U) - __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ -#else - uint32_t RESERVED1[1U]; -#endif -} SCnSCB_Type; - -/* Interrupt Controller Type Register Definitions */ -#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ -#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ - -/* Auxiliary Control Register Definitions */ -#if defined (__CM3_REV) && (__CM3_REV >= 0x200U) -#define SCnSCB_ACTLR_DISOOFP_Pos 9U /*!< ACTLR: DISOOFP Position */ -#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ - -#define SCnSCB_ACTLR_DISFPCA_Pos 8U /*!< ACTLR: DISFPCA Position */ -#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ - -#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ -#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ - -#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ -#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ - -#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ -#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ -#endif - -/*@} end of group CMSIS_SCnotSCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) - \brief Type definitions for the Instrumentation Trace Macrocell (ITM) - @{ - */ - -/** - \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). - */ -typedef struct -{ - __OM union - { - __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ - __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ - __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ - } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ - uint32_t RESERVED0[864U]; - __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ - uint32_t RESERVED1[15U]; - __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ - uint32_t RESERVED2[15U]; - __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ - uint32_t RESERVED3[32U]; - uint32_t RESERVED4[43U]; - __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ - uint32_t RESERVED5[6U]; - __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ - __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ - __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ - __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ - __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ - __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ - __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ - __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ - __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ - __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ - __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ - __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ -} ITM_Type; - -/* ITM Trace Privilege Register Definitions */ -#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ -#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ - -/* ITM Trace Control Register Definitions */ -#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ -#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ - -#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ -#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ - -#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ -#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ - -#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ -#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ - -#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ - -#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ - -#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ - -#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ -#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ - -#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ -#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ - -/* ITM Lock Status Register Definitions */ -#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ -#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ - -#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ -#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ - -#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ -#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ - -/*@}*/ /* end of group CMSIS_ITM */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) - \brief Type definitions for the Data Watchpoint and Trace (DWT) - @{ - */ - -/** - \brief Structure type to access the Data Watchpoint and Trace Register (DWT). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ - __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ - __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ - __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ - __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ - __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ - __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ - __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED0[1U]; - __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ - __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED1[1U]; - __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ - __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED2[1U]; - __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ - __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ -#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ - -#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ -#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ - -#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ -#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ - -#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ -#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ - -#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ -#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ - -#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ -#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ - -#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ -#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ - -#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ -#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ - -#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ -#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ - -#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ -#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ - -#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ -#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ - -#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ -#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ - -#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ -#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ - -/* DWT CPI Count Register Definitions */ -#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ -#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ - -/* DWT Exception Overhead Count Register Definitions */ -#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ -#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ - -/* DWT Sleep Count Register Definitions */ -#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ -#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ - -/* DWT LSU Count Register Definitions */ -#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ -#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ - -/* DWT Folded-instruction Count Register Definitions */ -#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ -#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ - -/* DWT Comparator Mask Register Definitions */ -#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ -#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ - -/* DWT Comparator Function Register Definitions */ -#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ -#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ - -#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ -#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ -#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ - -#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ -#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ - -#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ -#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ - -#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ -#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ - -#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ -#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ - -/*@}*/ /* end of group CMSIS_DWT */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_TPI Trace Port Interface (TPI) - \brief Type definitions for the Trace Port Interface (TPI) - @{ - */ - -/** - \brief Structure type to access the Trace Port Interface Register (TPI). - */ -typedef struct -{ - __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ - __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ - uint32_t RESERVED0[2U]; - __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55U]; - __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131U]; - __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ - uint32_t RESERVED3[759U]; - __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ - __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ - __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ - uint32_t RESERVED4[1U]; - __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ - __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ - __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ - uint32_t RESERVED5[39U]; - __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ - __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ - uint32_t RESERVED7[8U]; - __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ - __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ - -/* TPI Selected Pin Protocol Register Definitions */ -#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ -#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ - -/* TPI Formatter and Flush Status Register Definitions */ -#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ -#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ - -/* TPI Formatter and Flush Control Register Definitions */ -#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ -#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ - -/* TPI TRIGGER Register Definitions */ -#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ -#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ - -/* TPI Integration ETM Data Register Definitions (FIFO0) */ -#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ -#define TPI_FIFO0_ITM_ATVALID_Msk (0x1UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ - -#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ -#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ - -#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ -#define TPI_FIFO0_ETM_ATVALID_Msk (0x1UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ - -#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ -#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ - -#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ -#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ - -#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ -#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ - -#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ -#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ - -/* TPI ITATBCTR2 Register Definitions */ -#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ -#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ - -#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ -#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ - -/* TPI Integration ITM Data Register Definitions (FIFO1) */ -#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ -#define TPI_FIFO1_ITM_ATVALID_Msk (0x1UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ - -#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ -#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ - -#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ -#define TPI_FIFO1_ETM_ATVALID_Msk (0x1UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ - -#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ -#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ - -#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ -#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ - -#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ -#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ - -#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ -#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ - -/* TPI ITATBCTR0 Register Definitions */ -#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ -#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ - -#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ -#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ - -/* TPI DEVID Register Definitions */ -#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ -#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ - -#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ -#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ - -#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ -#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ - -/* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** - \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ - __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ - __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ - __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ - __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ - __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ - __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ -} MPU_Type; - -#define MPU_TYPE_RALIASES 4U - -/* MPU Type Register Definitions */ -#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register Definitions */ -#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register Definitions */ -#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register Definitions */ -#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ -#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ - -#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ -#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ - -#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ -#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ - -/* MPU Region Attribute and Size Register Definitions */ -#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ -#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ - -#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ -#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ - -#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ -#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ - -#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ -#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ - -#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ -#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ - -#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ -#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ - -#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ -#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ - -#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ -#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ - -#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ -#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ - -#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ -#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ - -/*@} end of group CMSIS_MPU */ -#endif - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Type definitions for the Core Debug Registers - @{ - */ - -/** - \brief Structure type to access the Core Debug Register (CoreDebug). - */ -typedef struct -{ - __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register Definitions */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ -#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register Definitions */ -#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register Definitions */ -#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ - -#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ -#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ - -#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ -#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ - -#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ -#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ - -#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ -#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ -#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ - -#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ -#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ - -#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ -#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ - -#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ -#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ - -#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ -#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ - -#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ -#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ - -/*@} end of group CMSIS_CoreDebug */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_bitfield Core register bit field macros - \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). - @{ - */ - -/** - \brief Mask and shift a bit field value for use in a register bit range. - \param[in] field Name of the register bit field. - \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) - -/** - \brief Mask and shift a register value to extract a bit filed value. - \param[in] field Name of the register bit field. - \param[in] value Value of register. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) - -/*@} end of group CMSIS_core_bitfield */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Core Hardware */ -#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ -#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ -#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ -#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ -#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ -#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - -#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ -#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ -#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ -#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ -#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ -#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ -#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ -#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ -#endif - -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Debug Functions - - Core Register Access Functions - ******************************************************************************/ -/** - \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ - #define NVIC_GetActive __NVIC_GetActive - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* The following EXC_RETURN values are saved the LR on exception entry */ -#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ -#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ -#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ - - -/** - \brief Set Priority Grouping - \details Sets the priority grouping field using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ - SCB->AIRCR = reg_value; -} - - -/** - \brief Get Priority Grouping - \details Reads the priority grouping field from the NVIC Interrupt Controller. - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) -{ - return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); -} - - -/** - \brief Enable Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt - \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. - Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); - } -} - - -/** - \brief Encode Priority - \details Encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - return ( - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - ); -} - - -/** - \brief Decode Priority - \details Decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); - *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); -} - - -/** - \brief Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ - uint32_t vectors = (uint32_t )SCB->VTOR; - (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector; -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ - uint32_t vectors = (uint32_t )SCB->VTOR; - return (uint32_t)(* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)); -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - } -} - -/*@} end of CMSIS_Core_NVICFunctions */ - -/* ########################## MPU functions #################################### */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - -#include "mpu_armv7.h" - -#endif - - -/* ########################## FPU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_FpuFunctions FPU Functions - \brief Function that provides FPU type. - @{ - */ - -/** - \brief get FPU type - \details returns the FPU type - \returns - - \b 0: No FPU - - \b 1: Single precision FPU - - \b 2: Double + Single precision FPU - */ -__STATIC_INLINE uint32_t SCB_GetFPUType(void) -{ - return 0U; /* No FPU */ -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) - -/** - \brief System Tick Configuration - \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - -/* ##################################### Debug In/Output function ########################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_core_DebugFunctions ITM Functions - \brief Functions that access the ITM debug interface. - @{ - */ - -extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ -#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ - - -/** - \brief ITM Send Character - \details Transmits a character via the ITM channel 0, and - \li Just returns when no debugger is connected that has booked the output. - \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. - \param [in] ch Character to transmit. - \returns Character to transmit. - */ -__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) -{ - if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ - ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ - { - while (ITM->PORT[0U].u32 == 0UL) - { - __NOP(); - } - ITM->PORT[0U].u8 = (uint8_t)ch; - } - return (ch); -} - - -/** - \brief ITM Receive Character - \details Inputs a character via the external variable \ref ITM_RxBuffer. - \return Received character. - \return -1 No character pending. - */ -__STATIC_INLINE int32_t ITM_ReceiveChar (void) -{ - int32_t ch = -1; /* no character available */ - - if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) - { - ch = ITM_RxBuffer; - ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ - } - - return (ch); -} - - -/** - \brief ITM Check Character - \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. - \return 0 No character available. - \return 1 Character available. - */ -__STATIC_INLINE int32_t ITM_CheckChar (void) -{ - - if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) - { - return (0); /* no character available */ - } - else - { - return (1); /* character available */ - } -} - -/*@} end of CMSIS_core_DebugFunctions */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM3_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ diff --git a/include/cmsis/core_cm33.h b/include/cmsis/core_cm33.h deleted file mode 100644 index d5d97a9..0000000 --- a/include/cmsis/core_cm33.h +++ /dev/null @@ -1,2907 +0,0 @@ -/**************************************************************************//** - * @file core_cm33.h - * @brief CMSIS Cortex-M33 Core Peripheral Access Layer Header File - * @version V5.1.0 - * @date 12. November 2018 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CORE_CM33_H_GENERIC -#define __CORE_CM33_H_GENERIC - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -/** - \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** - \ingroup Cortex_M33 - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS CM33 definitions */ -#define __CM33_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __CM33_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __CM33_CMSIS_VERSION ((__CM33_CMSIS_VERSION_MAIN << 16U) | \ - __CM33_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M (33U) /*!< Cortex-M Core */ - -/** __FPU_USED indicates whether an FPU is used or not. - For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. -*/ -#if defined ( __CC_ARM ) - #if defined (__TARGET_FPU_VFP) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) - #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #if defined (__ARM_FP) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) - #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) - #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined ( __ICCARM__ ) - #if defined (__ARMVFP__) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) - #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined ( __TI_ARM__ ) - #if defined (__TI_VFP_SUPPORT__) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __TASKING__ ) - #if defined (__FPU_VFP__) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __CSMC__ ) - #if ( __CSMC__ & 0x400U) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#endif - -#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM33_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_CM33_H_DEPENDANT -#define __CORE_CM33_H_DEPENDANT - -#ifdef __cplusplus - extern "C" { -#endif - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __CM33_REV - #define __CM33_REV 0x0000U - #warning "__CM33_REV not defined in device header file; using default!" - #endif - - #ifndef __FPU_PRESENT - #define __FPU_PRESENT 0U - #warning "__FPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0U - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __SAUREGION_PRESENT - #define __SAUREGION_PRESENT 0U - #warning "__SAUREGION_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __DSP_PRESENT - #define __DSP_PRESENT 0U - #warning "__DSP_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 3U - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0U - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#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 */ - -/*@} end of group Cortex_M33 */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core Debug Register - - Core MPU Register - - Core SAU Register - - Core FPU Register - ******************************************************************************/ -/** - \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** - \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { - uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - -/* APSR Register Definitions */ -#define APSR_N_Pos 31U /*!< APSR: N Position */ -#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ - -#define APSR_Z_Pos 30U /*!< APSR: Z Position */ -#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ - -#define APSR_C_Pos 29U /*!< APSR: C Position */ -#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ - -#define APSR_V_Pos 28U /*!< APSR: V Position */ -#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ - -#define APSR_Q_Pos 27U /*!< APSR: Q Position */ -#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ - -#define APSR_GE_Pos 16U /*!< APSR: GE Position */ -#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ - - -/** - \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - -/* IPSR Register Definitions */ -#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ -#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ - - -/** - \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ - uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - -/* xPSR Register Definitions */ -#define xPSR_N_Pos 31U /*!< xPSR: N Position */ -#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ - -#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ -#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ - -#define xPSR_C_Pos 29U /*!< xPSR: C Position */ -#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ - -#define xPSR_V_Pos 28U /*!< xPSR: V Position */ -#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ - -#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ -#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ - -#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ -#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ -#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ - -#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ -#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ - - -/** - \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ - uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ - uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ - uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ - uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/* CONTROL Register Definitions */ -#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ -#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ - -#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ -#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ - -#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ -#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ - -#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ -#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ - -/*@} end of group CMSIS_CORE */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** - \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[16U]; - __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RSERVED1[16U]; - __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[16U]; - __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[16U]; - __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[16U]; - __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ - uint32_t RESERVED5[16U]; - __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ - uint32_t RESERVED6[580U]; - __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ -} NVIC_Type; - -/* Software Triggered Interrupt Register Definitions */ -#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ -#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_NVIC */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ - __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ - __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ - __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ - __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ - __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ - __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ - __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ - __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ - __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ - __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ - __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ - __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ - __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ - __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ - __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ - uint32_t RESERVED3[92U]; - __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ - uint32_t RESERVED4[15U]; - __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ - __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ - __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ - uint32_t RESERVED5[1U]; - __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ - uint32_t RESERVED6[1U]; - __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ - __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ - __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ - __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ - __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ - __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ - __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ - __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ -#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ - -#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ -#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ - -#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ -#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ -#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Vector Table Offset Register Definitions */ -#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ -#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ - -#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ -#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ - -#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ -#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ - -#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ -#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ -#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ -#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ - -#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ -#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ - -#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ -#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ - -#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ -#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ -#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ - -#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ -#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ -#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ - -#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ -#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ - -#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ -#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ - -#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ -#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ - -#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ -#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ - -#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ -#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ -#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ - -#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ -#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ - -#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ -#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ -#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ -#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ - -#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ -#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ - -#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ -#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ - -#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ -#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ - -#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ -#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ - -#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ -#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ - -/* SCB Configurable Fault Status Register Definitions */ -#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ -#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ - -#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ -#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ - -#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ -#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ - -/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ -#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ - -#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ -#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ - -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ -#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ - -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ -#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ - -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ -#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ - -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ -#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ - -/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ -#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ - -#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ -#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ - -#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ -#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ - -#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ -#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ - -#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ -#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ - -#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ -#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ - -#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ -#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ - -/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ -#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ - -#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ -#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ - -#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ -#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ - -#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ -#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ - -#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ -#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ - -#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ -#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ - -#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ -#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ - -/* SCB Hard Fault Status Register Definitions */ -#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ -#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ - -#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ -#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ - -#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ -#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ - -/* SCB Debug Fault Status Register Definitions */ -#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ -#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ - -/* SCB Non-Secure Access Control Register Definitions */ -#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ -#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ - -#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ -#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ - -#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ -#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ - -/* SCB Cache Level ID Register Definitions */ -#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ -#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ - -#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ -#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ - -/* SCB Cache Type Register Definitions */ -#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ -#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ - -#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ -#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ - -#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ -#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ - -#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ -#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ - -#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ -#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ - -/* SCB Cache Size ID Register Definitions */ -#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ -#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ - -#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ -#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ - -#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ -#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ - -#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ -#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ - -#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ -#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ - -#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ -#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ - -#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ -#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ - -/* SCB Cache Size Selection Register Definitions */ -#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ -#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ - -#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ -#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ - -/* SCB Software Triggered Interrupt Register Definitions */ -#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ -#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ - -/* SCB D-Cache Invalidate by Set-way Register Definitions */ -#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ -#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ - -#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ -#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ - -/* SCB D-Cache Clean by Set-way Register Definitions */ -#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ -#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ - -#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ -#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ - -/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ -#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ -#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ - -#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ -#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) - \brief Type definitions for the System Control and ID Register not in the SCB - @{ - */ - -/** - \brief Structure type to access the System Control and ID Register not in the SCB. - */ -typedef struct -{ - uint32_t RESERVED0[1U]; - __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ - __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ - __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ -} SCnSCB_Type; - -/* Interrupt Controller Type Register Definitions */ -#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ -#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_SCnotSCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) - \brief Type definitions for the Instrumentation Trace Macrocell (ITM) - @{ - */ - -/** - \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). - */ -typedef struct -{ - __OM union - { - __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ - __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ - __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ - } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ - uint32_t RESERVED0[864U]; - __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ - uint32_t RESERVED1[15U]; - __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ - uint32_t RESERVED2[15U]; - __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ - uint32_t RESERVED3[32U]; - uint32_t RESERVED4[43U]; - __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ - uint32_t RESERVED5[1U]; - __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ - uint32_t RESERVED6[4U]; - __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ - __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ - __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ - __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ - __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ - __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ - __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ - __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ - __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ - __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ - __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ - __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ -} ITM_Type; - -/* ITM Stimulus Port Register Definitions */ -#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ -#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ - -#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ -#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ - -/* ITM Trace Privilege Register Definitions */ -#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ -#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ - -/* ITM Trace Control Register Definitions */ -#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ -#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ - -#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ -#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ - -#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ -#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ - -#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ -#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ - -#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ -#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ - -#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ - -#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ - -#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ - -#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ -#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ - -#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ -#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ - -/* ITM Lock Status Register Definitions */ -#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ -#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ - -#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ -#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ - -#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ -#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ - -/*@}*/ /* end of group CMSIS_ITM */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) - \brief Type definitions for the Data Watchpoint and Trace (DWT) - @{ - */ - -/** - \brief Structure type to access the Data Watchpoint and Trace Register (DWT). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ - __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ - __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ - __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ - __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ - __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ - __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - uint32_t RESERVED1[1U]; - __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED2[1U]; - __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - uint32_t RESERVED3[1U]; - __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED4[1U]; - __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - uint32_t RESERVED5[1U]; - __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED6[1U]; - __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - uint32_t RESERVED7[1U]; - __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ - uint32_t RESERVED8[1U]; - __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ - uint32_t RESERVED9[1U]; - __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ - uint32_t RESERVED10[1U]; - __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ - uint32_t RESERVED11[1U]; - __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ - uint32_t RESERVED12[1U]; - __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ - uint32_t RESERVED13[1U]; - __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ - uint32_t RESERVED14[1U]; - __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ - uint32_t RESERVED15[1U]; - __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ - uint32_t RESERVED16[1U]; - __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ - uint32_t RESERVED17[1U]; - __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ - uint32_t RESERVED18[1U]; - __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ - uint32_t RESERVED19[1U]; - __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ - uint32_t RESERVED20[1U]; - __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ - uint32_t RESERVED21[1U]; - __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ - uint32_t RESERVED22[1U]; - __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ - uint32_t RESERVED23[1U]; - __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ - uint32_t RESERVED24[1U]; - __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ - uint32_t RESERVED25[1U]; - __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ - uint32_t RESERVED26[1U]; - __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ - uint32_t RESERVED27[1U]; - __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ - uint32_t RESERVED28[1U]; - __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ - uint32_t RESERVED29[1U]; - __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ - uint32_t RESERVED30[1U]; - __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ - uint32_t RESERVED31[1U]; - __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ - uint32_t RESERVED32[934U]; - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ - uint32_t RESERVED33[1U]; - __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ -#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ - -#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ -#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ - -#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ -#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ - -#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ -#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ - -#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ -#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ - -#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ -#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ - -#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ -#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ - -#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ -#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ - -#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ -#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ - -#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ -#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ - -#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ -#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ - -#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ -#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ - -#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ -#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ - -#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ -#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ - -/* DWT CPI Count Register Definitions */ -#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ -#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ - -/* DWT Exception Overhead Count Register Definitions */ -#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ -#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ - -/* DWT Sleep Count Register Definitions */ -#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ -#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ - -/* DWT LSU Count Register Definitions */ -#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ -#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ - -/* DWT Folded-instruction Count Register Definitions */ -#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ -#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ - -/* DWT Comparator Function Register Definitions */ -#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ -#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ - -#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ -#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ - -#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ -#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ - -/*@}*/ /* end of group CMSIS_DWT */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_TPI Trace Port Interface (TPI) - \brief Type definitions for the Trace Port Interface (TPI) - @{ - */ - -/** - \brief Structure type to access the Trace Port Interface Register (TPI). - */ -typedef struct -{ - __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ - __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ - uint32_t RESERVED0[2U]; - __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55U]; - __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131U]; - __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ - uint32_t RESERVED3[759U]; - __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ - __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ - __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ - uint32_t RESERVED4[1U]; - __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ - __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ - __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ - uint32_t RESERVED5[39U]; - __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ - __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ - uint32_t RESERVED7[8U]; - __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ - __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ - -/* TPI Selected Pin Protocol Register Definitions */ -#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ -#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ - -/* TPI Formatter and Flush Status Register Definitions */ -#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ -#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ - -/* TPI Formatter and Flush Control Register Definitions */ -#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ -#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ - -#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ -#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ - -/* TPI TRIGGER Register Definitions */ -#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ -#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ - -/* TPI Integration Test FIFO Test Data 0 Register Definitions */ -#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */ -#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */ - -#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */ -#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */ - -#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */ -#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */ - -#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */ -#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */ - -#define TPI_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */ -#define TPI_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */ - -#define TPI_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */ -#define TPI_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */ - -#define TPI_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */ -#define TPI_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */ - -/* TPI Integration Test ATB Control Register 2 Register Definitions */ -#define TPI_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPI ITATBCTR2: AFVALID2S Position */ -#define TPI_ITATBCTR2_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos) /*!< TPI ITATBCTR2: AFVALID2SS Mask */ - -#define TPI_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPI ITATBCTR2: AFVALID1S Position */ -#define TPI_ITATBCTR2_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos) /*!< TPI ITATBCTR2: AFVALID1SS Mask */ - -#define TPI_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPI ITATBCTR2: ATREADY2S Position */ -#define TPI_ITATBCTR2_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPI ITATBCTR2: ATREADY2S Mask */ - -#define TPI_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPI ITATBCTR2: ATREADY1S Position */ -#define TPI_ITATBCTR2_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPI ITATBCTR2: ATREADY1S Mask */ - -/* TPI Integration Test FIFO Test Data 1 Register Definitions */ -#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */ -#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */ - -#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */ -#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */ - -#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */ -#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */ - -#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */ -#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */ - -#define TPI_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */ -#define TPI_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */ - -#define TPI_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */ -#define TPI_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */ - -#define TPI_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */ -#define TPI_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */ - -/* TPI Integration Test ATB Control Register 0 Definitions */ -#define TPI_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPI ITATBCTR0: AFVALID2S Position */ -#define TPI_ITATBCTR0_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos) /*!< TPI ITATBCTR0: AFVALID2SS Mask */ - -#define TPI_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPI ITATBCTR0: AFVALID1S Position */ -#define TPI_ITATBCTR0_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos) /*!< TPI ITATBCTR0: AFVALID1SS Mask */ - -#define TPI_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPI ITATBCTR0: ATREADY2S Position */ -#define TPI_ITATBCTR0_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPI ITATBCTR0: ATREADY2S Mask */ - -#define TPI_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPI ITATBCTR0: ATREADY1S Position */ -#define TPI_ITATBCTR0_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPI ITATBCTR0: ATREADY1S Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ - -/* TPI DEVID Register Definitions */ -#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFOSZ Position */ -#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFOSZ Mask */ - -#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ -#define TPI_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ - -/* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** - \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ - __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ - __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ - __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ - __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ - __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ - __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ - uint32_t RESERVED0[1]; - union { - __IOM uint32_t MAIR[2]; - struct { - __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ - __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ - }; - }; -} MPU_Type; - -#define MPU_TYPE_RALIASES 4U - -/* MPU Type Register Definitions */ -#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register Definitions */ -#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register Definitions */ -#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register Definitions */ -#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ -#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ - -#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ -#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ - -#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ -#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ - -#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ -#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ - -/* MPU Region Limit Address Register Definitions */ -#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ -#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ - -#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ -#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ - -#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ -#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ - -/* MPU Memory Attribute Indirection Register 0 Definitions */ -#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ -#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ - -#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ -#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ - -#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ -#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ - -#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ -#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ - -/* MPU Memory Attribute Indirection Register 1 Definitions */ -#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ -#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ - -#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ -#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ - -#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ -#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ - -#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ -#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ - -/*@} end of group CMSIS_MPU */ -#endif - - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SAU Security Attribution Unit (SAU) - \brief Type definitions for the Security Attribution Unit (SAU) - @{ - */ - -/** - \brief Structure type to access the Security Attribution Unit (SAU). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ - __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ - __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ -#else - uint32_t RESERVED0[3]; -#endif - __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ - __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ -} SAU_Type; - -/* SAU Control Register Definitions */ -#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ -#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ - -#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ -#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ - -/* SAU Type Register Definitions */ -#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ -#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ - -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) -/* SAU Region Number Register Definitions */ -#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ -#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ - -/* SAU Region Base Address Register Definitions */ -#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ -#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ - -/* SAU Region Limit Address Register Definitions */ -#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ -#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ - -#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ -#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ - -#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ -#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ - -#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ - -/* Secure Fault Status Register Definitions */ -#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ -#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ - -#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ -#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ - -#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ -#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ - -#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ -#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ - -#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ -#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ - -#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ -#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ - -#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ -#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ - -#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ -#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ - -/*@} end of group CMSIS_SAU */ -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_FPU Floating Point Unit (FPU) - \brief Type definitions for the Floating Point Unit (FPU) - @{ - */ - -/** - \brief Structure type to access the Floating Point Unit (FPU). - */ -typedef struct -{ - uint32_t RESERVED0[1U]; - __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ - __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ - __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ - __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ - __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ -} FPU_Type; - -/* Floating-Point Context Control Register Definitions */ -#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ -#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ - -#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ -#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ - -#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ -#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ - -#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ -#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ - -#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ -#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ - -#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ -#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ - -#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ -#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ - -#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ -#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ - -#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ -#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ - -#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ -#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ - -#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ -#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ - -#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ -#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ - -#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ -#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ - -#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ -#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ - -#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ -#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ - -#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ -#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ - -#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ -#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ - -/* Floating-Point Context Address Register Definitions */ -#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ -#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ - -/* Floating-Point Default Status Control Register Definitions */ -#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ -#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ - -#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ -#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ - -#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ -#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ - -#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ -#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ - -/* Media and FP Feature Register 0 Definitions */ -#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ -#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ - -#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ -#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ - -#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ -#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ - -#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ -#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ - -#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ -#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ - -#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ -#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ - -#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ -#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ - -#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ -#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ - -/* Media and FP Feature Register 1 Definitions */ -#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ -#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ - -#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ -#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ - -#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ -#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ - -#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ -#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ - -/*@} end of group CMSIS_FPU */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Type definitions for the Core Debug Registers - @{ - */ - -/** - \brief Structure type to access the Core Debug Register (CoreDebug). - */ -typedef struct -{ - __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ - uint32_t RESERVED4[1U]; - __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ - __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register Definitions */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ -#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ -#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register Definitions */ -#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register Definitions */ -#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ - -#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ -#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ - -#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ -#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ - -#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ -#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ - -#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ -#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ -#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ - -#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ -#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ - -#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ -#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ - -#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ -#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ - -#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ -#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ - -#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ -#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ - -/* Debug Authentication Control Register Definitions */ -#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ -#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ - -#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ -#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ - -#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ -#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ - -#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ -#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ - -/* Debug Security Control and Status Register Definitions */ -#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ -#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ - -#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ -#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ - -#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ -#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ - -/*@} end of group CMSIS_CoreDebug */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_bitfield Core register bit field macros - \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). - @{ - */ - -/** - \brief Mask and shift a bit field value for use in a register bit range. - \param[in] field Name of the register bit field. - \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) - -/** - \brief Mask and shift a register value to extract a bit filed value. - \param[in] field Name of the register bit field. - \param[in] value Value of register. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) - -/*@} end of group CMSIS_core_bitfield */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Core Hardware */ - #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ - #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ - #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ - #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ - #define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ - #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ - #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ - #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - - #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ - #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ - #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ - #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ - #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ - #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ - #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ - #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< Core Debug configuration struct */ - - #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ - #endif - - #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ - #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ - #endif - - #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ - #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ - #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ - #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ - #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ - #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ - - #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ - #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ - #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ - #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ - #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ - - #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ - #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ - #endif - - #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ - #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ - -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Debug Functions - - Core Register Access Functions - ******************************************************************************/ -/** - \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ - #define NVIC_GetActive __NVIC_GetActive - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* Special LR values for Secure/Non-Secure call handling and exception handling */ - -/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ -#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ - -/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ -#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ -#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ -#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ -#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ -#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ -#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ -#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ - -/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ -#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ -#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ -#else -#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ -#endif - - -/** - \brief Set Priority Grouping - \details Sets the priority grouping field using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ - SCB->AIRCR = reg_value; -} - - -/** - \brief Get Priority Grouping - \details Reads the priority grouping field from the NVIC Interrupt Controller. - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) -{ - return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); -} - - -/** - \brief Enable Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt - \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief Get Interrupt Target State - \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - \return 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Target State - \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Clear Interrupt Target State - \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. - Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); - } -} - - -/** - \brief Encode Priority - \details Encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - return ( - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - ); -} - - -/** - \brief Decode Priority - \details Decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); - *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); -} - - -/** - \brief Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - } -} - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief Set Priority Grouping (non-secure) - \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - - reg_value = SCB_NS->AIRCR; /* read old register configuration */ - reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ - SCB_NS->AIRCR = reg_value; -} - - -/** - \brief Get Priority Grouping (non-secure) - \details Reads the priority grouping field from the non-secure NVIC when in secure state. - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) -{ - return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); -} - - -/** - \brief Enable Interrupt (non-secure) - \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status (non-secure) - \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt (non-secure) - \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Pending Interrupt (non-secure) - \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt (non-secure) - \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt (non-secure) - \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt (non-secure) - \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Priority (non-secure) - \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every non-secure processor exception. - */ -__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority (non-secure) - \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); - } -} -#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ - -/*@} end of CMSIS_Core_NVICFunctions */ - -/* ########################## MPU functions #################################### */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - -#include "mpu_armv8.h" - -#endif - -/* ########################## FPU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_FpuFunctions FPU Functions - \brief Function that provides FPU type. - @{ - */ - -/** - \brief get FPU type - \details returns the FPU type - \returns - - \b 0: No FPU - - \b 1: Single precision FPU - - \b 2: Double + Single precision FPU - */ -__STATIC_INLINE uint32_t SCB_GetFPUType(void) -{ - uint32_t mvfr0; - - mvfr0 = FPU->MVFR0; - if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) - { - return 2U; /* Double + Single precision FPU */ - } - else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) - { - return 1U; /* Single precision FPU */ - } - else - { - return 0U; /* No FPU */ - } -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ########################## SAU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SAUFunctions SAU Functions - \brief Functions that configure the SAU. - @{ - */ - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - -/** - \brief Enable SAU - \details Enables the Security Attribution Unit (SAU). - */ -__STATIC_INLINE void TZ_SAU_Enable(void) -{ - SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); -} - - - -/** - \brief Disable SAU - \details Disables the Security Attribution Unit (SAU). - */ -__STATIC_INLINE void TZ_SAU_Disable(void) -{ - SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); -} - -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - -/*@} end of CMSIS_Core_SAUFunctions */ - - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) - -/** - \brief System Tick Configuration - \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief System Tick Configuration (non-secure) - \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function TZ_SysTick_Config_NS is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - - */ -__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - -/* ##################################### Debug In/Output function ########################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_core_DebugFunctions ITM Functions - \brief Functions that access the ITM debug interface. - @{ - */ - -extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ -#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ - - -/** - \brief ITM Send Character - \details Transmits a character via the ITM channel 0, and - \li Just returns when no debugger is connected that has booked the output. - \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. - \param [in] ch Character to transmit. - \returns Character to transmit. - */ -__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) -{ - if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ - ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ - { - while (ITM->PORT[0U].u32 == 0UL) - { - __NOP(); - } - ITM->PORT[0U].u8 = (uint8_t)ch; - } - return (ch); -} - - -/** - \brief ITM Receive Character - \details Inputs a character via the external variable \ref ITM_RxBuffer. - \return Received character. - \return -1 No character pending. - */ -__STATIC_INLINE int32_t ITM_ReceiveChar (void) -{ - int32_t ch = -1; /* no character available */ - - if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) - { - ch = ITM_RxBuffer; - ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ - } - - return (ch); -} - - -/** - \brief ITM Check Character - \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. - \return 0 No character available. - \return 1 Character available. - */ -__STATIC_INLINE int32_t ITM_CheckChar (void) -{ - - if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) - { - return (0); /* no character available */ - } - else - { - return (1); /* character available */ - } -} - -/*@} end of CMSIS_core_DebugFunctions */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM33_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ diff --git a/include/cmsis/core_cm35p.h b/include/cmsis/core_cm35p.h deleted file mode 100644 index c00e54c..0000000 --- a/include/cmsis/core_cm35p.h +++ /dev/null @@ -1,2907 +0,0 @@ -/**************************************************************************//** - * @file core_cm35p.h - * @brief CMSIS Cortex-M35P Core Peripheral Access Layer Header File - * @version V1.0.0 - * @date 12. November 2018 - ******************************************************************************/ -/* - * Copyright (c) 2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CORE_CM35P_H_GENERIC -#define __CORE_CM35P_H_GENERIC - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -/** - \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** - \ingroup Cortex_M35P - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS CM35P definitions */ -#define __CM35P_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __CM35P_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __CM35P_CMSIS_VERSION ((__CM35P_CMSIS_VERSION_MAIN << 16U) | \ - __CM35P_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M (35U) /*!< Cortex-M Core */ - -/** __FPU_USED indicates whether an FPU is used or not. - For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. -*/ -#if defined ( __CC_ARM ) - #if defined (__TARGET_FPU_VFP) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) - #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #if defined (__ARM_FP) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) - #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) - #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined ( __ICCARM__ ) - #if defined (__ARMVFP__) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - - #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) - #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) - #define __DSP_USED 1U - #else - #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" - #define __DSP_USED 0U - #endif - #else - #define __DSP_USED 0U - #endif - -#elif defined ( __TI_ARM__ ) - #if defined (__TI_VFP_SUPPORT__) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __TASKING__ ) - #if defined (__FPU_VFP__) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __CSMC__ ) - #if ( __CSMC__ & 0x400U) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#endif - -#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM35P_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_CM35P_H_DEPENDANT -#define __CORE_CM35P_H_DEPENDANT - -#ifdef __cplusplus - extern "C" { -#endif - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __CM35P_REV - #define __CM35P_REV 0x0000U - #warning "__CM35P_REV not defined in device header file; using default!" - #endif - - #ifndef __FPU_PRESENT - #define __FPU_PRESENT 0U - #warning "__FPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0U - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __SAUREGION_PRESENT - #define __SAUREGION_PRESENT 0U - #warning "__SAUREGION_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __DSP_PRESENT - #define __DSP_PRESENT 0U - #warning "__DSP_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 3U - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0U - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#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 */ - -/*@} end of group Cortex_M35P */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core Debug Register - - Core MPU Register - - Core SAU Register - - Core FPU Register - ******************************************************************************/ -/** - \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** - \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { - uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - -/* APSR Register Definitions */ -#define APSR_N_Pos 31U /*!< APSR: N Position */ -#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ - -#define APSR_Z_Pos 30U /*!< APSR: Z Position */ -#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ - -#define APSR_C_Pos 29U /*!< APSR: C Position */ -#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ - -#define APSR_V_Pos 28U /*!< APSR: V Position */ -#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ - -#define APSR_Q_Pos 27U /*!< APSR: Q Position */ -#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ - -#define APSR_GE_Pos 16U /*!< APSR: GE Position */ -#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ - - -/** - \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - -/* IPSR Register Definitions */ -#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ -#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ - - -/** - \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ - uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - -/* xPSR Register Definitions */ -#define xPSR_N_Pos 31U /*!< xPSR: N Position */ -#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ - -#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ -#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ - -#define xPSR_C_Pos 29U /*!< xPSR: C Position */ -#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ - -#define xPSR_V_Pos 28U /*!< xPSR: V Position */ -#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ - -#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ -#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ - -#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ -#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ -#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ - -#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ -#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ - - -/** - \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ - uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ - uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ - uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ - uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/* CONTROL Register Definitions */ -#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ -#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ - -#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ -#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ - -#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ -#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ - -#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ -#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ - -/*@} end of group CMSIS_CORE */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** - \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[16U]; - __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RSERVED1[16U]; - __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[16U]; - __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[16U]; - __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[16U]; - __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ - uint32_t RESERVED5[16U]; - __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ - uint32_t RESERVED6[580U]; - __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ -} NVIC_Type; - -/* Software Triggered Interrupt Register Definitions */ -#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ -#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_NVIC */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ - __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ - __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ - __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ - __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ - __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ - __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ - __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ - __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ - __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ - __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ - __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ - __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ - __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ - __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ - __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ - uint32_t RESERVED3[92U]; - __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ - uint32_t RESERVED4[15U]; - __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ - __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ - __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ - uint32_t RESERVED5[1U]; - __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ - uint32_t RESERVED6[1U]; - __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ - __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ - __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ - __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ - __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ - __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ - __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ - __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ -#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ - -#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ -#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ - -#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ -#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ -#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Vector Table Offset Register Definitions */ -#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ -#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ - -#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ -#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ - -#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ -#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ - -#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ -#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ -#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ -#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ - -#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ -#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ - -#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ -#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ - -#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ -#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ -#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ - -#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ -#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ -#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ - -#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ -#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ - -#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ -#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ - -#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ -#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ - -#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ -#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ - -#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ -#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ -#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ - -#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ -#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ - -#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ -#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ -#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ -#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ - -#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ -#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ - -#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ -#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ - -#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ -#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ - -#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ -#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ - -#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ -#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ - -/* SCB Configurable Fault Status Register Definitions */ -#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ -#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ - -#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ -#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ - -#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ -#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ - -/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ -#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ - -#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ -#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ - -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ -#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ - -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ -#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ - -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ -#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ - -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ -#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ - -/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ -#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ - -#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ -#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ - -#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ -#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ - -#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ -#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ - -#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ -#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ - -#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ -#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ - -#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ -#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ - -/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ -#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ - -#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ -#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ - -#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ -#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ - -#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ -#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ - -#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ -#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ - -#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ -#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ - -#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ -#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ - -/* SCB Hard Fault Status Register Definitions */ -#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ -#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ - -#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ -#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ - -#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ -#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ - -/* SCB Debug Fault Status Register Definitions */ -#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ -#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ - -/* SCB Non-Secure Access Control Register Definitions */ -#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ -#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ - -#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ -#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ - -#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ -#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ - -/* SCB Cache Level ID Register Definitions */ -#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ -#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ - -#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ -#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ - -/* SCB Cache Type Register Definitions */ -#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ -#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ - -#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ -#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ - -#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ -#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ - -#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ -#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ - -#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ -#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ - -/* SCB Cache Size ID Register Definitions */ -#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ -#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ - -#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ -#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ - -#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ -#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ - -#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ -#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ - -#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ -#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ - -#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ -#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ - -#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ -#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ - -/* SCB Cache Size Selection Register Definitions */ -#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ -#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ - -#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ -#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ - -/* SCB Software Triggered Interrupt Register Definitions */ -#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ -#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ - -/* SCB D-Cache Invalidate by Set-way Register Definitions */ -#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ -#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ - -#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ -#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ - -/* SCB D-Cache Clean by Set-way Register Definitions */ -#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ -#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ - -#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ -#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ - -/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ -#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ -#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ - -#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ -#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) - \brief Type definitions for the System Control and ID Register not in the SCB - @{ - */ - -/** - \brief Structure type to access the System Control and ID Register not in the SCB. - */ -typedef struct -{ - uint32_t RESERVED0[1U]; - __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ - __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ - __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ -} SCnSCB_Type; - -/* Interrupt Controller Type Register Definitions */ -#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ -#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_SCnotSCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) - \brief Type definitions for the Instrumentation Trace Macrocell (ITM) - @{ - */ - -/** - \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). - */ -typedef struct -{ - __OM union - { - __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ - __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ - __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ - } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ - uint32_t RESERVED0[864U]; - __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ - uint32_t RESERVED1[15U]; - __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ - uint32_t RESERVED2[15U]; - __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ - uint32_t RESERVED3[32U]; - uint32_t RESERVED4[43U]; - __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ - uint32_t RESERVED5[1U]; - __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ - uint32_t RESERVED6[4U]; - __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ - __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ - __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ - __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ - __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ - __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ - __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ - __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ - __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ - __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ - __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ - __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ -} ITM_Type; - -/* ITM Stimulus Port Register Definitions */ -#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ -#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ - -#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ -#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ - -/* ITM Trace Privilege Register Definitions */ -#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ -#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ - -/* ITM Trace Control Register Definitions */ -#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ -#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ - -#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ -#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ - -#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ -#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ - -#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ -#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ - -#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ -#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ - -#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ - -#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ - -#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ - -#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ -#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ - -#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ -#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ - -/* ITM Lock Status Register Definitions */ -#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ -#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ - -#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ -#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ - -#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ -#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ - -/*@}*/ /* end of group CMSIS_ITM */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) - \brief Type definitions for the Data Watchpoint and Trace (DWT) - @{ - */ - -/** - \brief Structure type to access the Data Watchpoint and Trace Register (DWT). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ - __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ - __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ - __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ - __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ - __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ - __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - uint32_t RESERVED1[1U]; - __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED2[1U]; - __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - uint32_t RESERVED3[1U]; - __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED4[1U]; - __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - uint32_t RESERVED5[1U]; - __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED6[1U]; - __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - uint32_t RESERVED7[1U]; - __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ - uint32_t RESERVED8[1U]; - __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ - uint32_t RESERVED9[1U]; - __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ - uint32_t RESERVED10[1U]; - __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ - uint32_t RESERVED11[1U]; - __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ - uint32_t RESERVED12[1U]; - __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ - uint32_t RESERVED13[1U]; - __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ - uint32_t RESERVED14[1U]; - __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ - uint32_t RESERVED15[1U]; - __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ - uint32_t RESERVED16[1U]; - __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ - uint32_t RESERVED17[1U]; - __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ - uint32_t RESERVED18[1U]; - __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ - uint32_t RESERVED19[1U]; - __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ - uint32_t RESERVED20[1U]; - __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ - uint32_t RESERVED21[1U]; - __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ - uint32_t RESERVED22[1U]; - __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ - uint32_t RESERVED23[1U]; - __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ - uint32_t RESERVED24[1U]; - __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ - uint32_t RESERVED25[1U]; - __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ - uint32_t RESERVED26[1U]; - __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ - uint32_t RESERVED27[1U]; - __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ - uint32_t RESERVED28[1U]; - __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ - uint32_t RESERVED29[1U]; - __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ - uint32_t RESERVED30[1U]; - __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ - uint32_t RESERVED31[1U]; - __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ - uint32_t RESERVED32[934U]; - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ - uint32_t RESERVED33[1U]; - __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ -#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ - -#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ -#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ - -#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ -#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ - -#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ -#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ - -#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ -#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ - -#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ -#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ - -#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ -#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ - -#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ -#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ - -#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ -#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ - -#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ -#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ - -#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ -#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ - -#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ -#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ - -#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ -#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ - -#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ -#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ - -/* DWT CPI Count Register Definitions */ -#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ -#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ - -/* DWT Exception Overhead Count Register Definitions */ -#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ -#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ - -/* DWT Sleep Count Register Definitions */ -#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ -#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ - -/* DWT LSU Count Register Definitions */ -#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ -#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ - -/* DWT Folded-instruction Count Register Definitions */ -#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ -#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ - -/* DWT Comparator Function Register Definitions */ -#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ -#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ - -#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ -#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ - -#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ -#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ - -/*@}*/ /* end of group CMSIS_DWT */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_TPI Trace Port Interface (TPI) - \brief Type definitions for the Trace Port Interface (TPI) - @{ - */ - -/** - \brief Structure type to access the Trace Port Interface Register (TPI). - */ -typedef struct -{ - __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ - __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ - uint32_t RESERVED0[2U]; - __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55U]; - __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131U]; - __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ - uint32_t RESERVED3[759U]; - __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ - __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ - __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ - uint32_t RESERVED4[1U]; - __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ - __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ - __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ - uint32_t RESERVED5[39U]; - __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ - __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ - uint32_t RESERVED7[8U]; - __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ - __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ - -/* TPI Selected Pin Protocol Register Definitions */ -#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ -#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ - -/* TPI Formatter and Flush Status Register Definitions */ -#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ -#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ - -/* TPI Formatter and Flush Control Register Definitions */ -#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ -#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ - -#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ -#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ - -/* TPI TRIGGER Register Definitions */ -#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ -#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ - -/* TPI Integration Test FIFO Test Data 0 Register Definitions */ -#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */ -#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */ - -#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */ -#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */ - -#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */ -#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */ - -#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */ -#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */ - -#define TPI_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */ -#define TPI_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */ - -#define TPI_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */ -#define TPI_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */ - -#define TPI_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */ -#define TPI_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */ - -/* TPI Integration Test ATB Control Register 2 Register Definitions */ -#define TPI_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPI ITATBCTR2: AFVALID2S Position */ -#define TPI_ITATBCTR2_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos) /*!< TPI ITATBCTR2: AFVALID2SS Mask */ - -#define TPI_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPI ITATBCTR2: AFVALID1S Position */ -#define TPI_ITATBCTR2_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos) /*!< TPI ITATBCTR2: AFVALID1SS Mask */ - -#define TPI_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPI ITATBCTR2: ATREADY2S Position */ -#define TPI_ITATBCTR2_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPI ITATBCTR2: ATREADY2S Mask */ - -#define TPI_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPI ITATBCTR2: ATREADY1S Position */ -#define TPI_ITATBCTR2_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPI ITATBCTR2: ATREADY1S Mask */ - -/* TPI Integration Test FIFO Test Data 1 Register Definitions */ -#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */ -#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */ - -#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */ -#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */ - -#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */ -#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */ - -#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */ -#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */ - -#define TPI_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */ -#define TPI_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */ - -#define TPI_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */ -#define TPI_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */ - -#define TPI_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */ -#define TPI_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */ - -/* TPI Integration Test ATB Control Register 0 Definitions */ -#define TPI_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPI ITATBCTR0: AFVALID2S Position */ -#define TPI_ITATBCTR0_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos) /*!< TPI ITATBCTR0: AFVALID2SS Mask */ - -#define TPI_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPI ITATBCTR0: AFVALID1S Position */ -#define TPI_ITATBCTR0_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos) /*!< TPI ITATBCTR0: AFVALID1SS Mask */ - -#define TPI_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPI ITATBCTR0: ATREADY2S Position */ -#define TPI_ITATBCTR0_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPI ITATBCTR0: ATREADY2S Mask */ - -#define TPI_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPI ITATBCTR0: ATREADY1S Position */ -#define TPI_ITATBCTR0_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPI ITATBCTR0: ATREADY1S Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ - -/* TPI DEVID Register Definitions */ -#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFOSZ Position */ -#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFOSZ Mask */ - -#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ -#define TPI_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ - -/* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** - \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ - __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ - __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ - __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ - __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ - __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ - __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ - uint32_t RESERVED0[1]; - union { - __IOM uint32_t MAIR[2]; - struct { - __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ - __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ - }; - }; -} MPU_Type; - -#define MPU_TYPE_RALIASES 4U - -/* MPU Type Register Definitions */ -#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register Definitions */ -#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register Definitions */ -#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register Definitions */ -#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ -#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ - -#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ -#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ - -#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ -#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ - -#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ -#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ - -/* MPU Region Limit Address Register Definitions */ -#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ -#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ - -#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ -#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ - -#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ -#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ - -/* MPU Memory Attribute Indirection Register 0 Definitions */ -#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ -#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ - -#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ -#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ - -#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ -#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ - -#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ -#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ - -/* MPU Memory Attribute Indirection Register 1 Definitions */ -#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ -#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ - -#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ -#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ - -#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ -#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ - -#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ -#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ - -/*@} end of group CMSIS_MPU */ -#endif - - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SAU Security Attribution Unit (SAU) - \brief Type definitions for the Security Attribution Unit (SAU) - @{ - */ - -/** - \brief Structure type to access the Security Attribution Unit (SAU). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ - __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ - __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ -#else - uint32_t RESERVED0[3]; -#endif - __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ - __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ -} SAU_Type; - -/* SAU Control Register Definitions */ -#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ -#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ - -#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ -#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ - -/* SAU Type Register Definitions */ -#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ -#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ - -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) -/* SAU Region Number Register Definitions */ -#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ -#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ - -/* SAU Region Base Address Register Definitions */ -#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ -#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ - -/* SAU Region Limit Address Register Definitions */ -#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ -#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ - -#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ -#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ - -#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ -#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ - -#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ - -/* Secure Fault Status Register Definitions */ -#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ -#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ - -#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ -#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ - -#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ -#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ - -#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ -#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ - -#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ -#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ - -#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ -#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ - -#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ -#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ - -#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ -#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ - -/*@} end of group CMSIS_SAU */ -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_FPU Floating Point Unit (FPU) - \brief Type definitions for the Floating Point Unit (FPU) - @{ - */ - -/** - \brief Structure type to access the Floating Point Unit (FPU). - */ -typedef struct -{ - uint32_t RESERVED0[1U]; - __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ - __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ - __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ - __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ - __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ -} FPU_Type; - -/* Floating-Point Context Control Register Definitions */ -#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ -#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ - -#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ -#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ - -#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ -#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ - -#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ -#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ - -#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ -#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ - -#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ -#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ - -#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ -#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ - -#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ -#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ - -#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ -#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ - -#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ -#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ - -#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ -#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ - -#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ -#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ - -#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ -#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ - -#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ -#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ - -#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ -#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ - -#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ -#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ - -#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ -#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ - -/* Floating-Point Context Address Register Definitions */ -#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ -#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ - -/* Floating-Point Default Status Control Register Definitions */ -#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ -#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ - -#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ -#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ - -#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ -#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ - -#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ -#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ - -/* Media and FP Feature Register 0 Definitions */ -#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ -#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ - -#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ -#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ - -#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ -#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ - -#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ -#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ - -#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ -#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ - -#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ -#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ - -#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ -#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ - -#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ -#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ - -/* Media and FP Feature Register 1 Definitions */ -#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ -#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ - -#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ -#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ - -#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ -#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ - -#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ -#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ - -/*@} end of group CMSIS_FPU */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Type definitions for the Core Debug Registers - @{ - */ - -/** - \brief Structure type to access the Core Debug Register (CoreDebug). - */ -typedef struct -{ - __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ - uint32_t RESERVED4[1U]; - __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ - __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register Definitions */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ -#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ -#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register Definitions */ -#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register Definitions */ -#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ - -#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ -#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ - -#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ -#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ - -#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ -#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ - -#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ -#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ -#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ - -#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ -#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ - -#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ -#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ - -#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ -#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ - -#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ -#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ - -#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ -#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ - -/* Debug Authentication Control Register Definitions */ -#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ -#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ - -#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ -#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ - -#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ -#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ - -#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ -#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ - -/* Debug Security Control and Status Register Definitions */ -#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ -#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ - -#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ -#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ - -#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ -#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ - -/*@} end of group CMSIS_CoreDebug */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_bitfield Core register bit field macros - \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). - @{ - */ - -/** - \brief Mask and shift a bit field value for use in a register bit range. - \param[in] field Name of the register bit field. - \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) - -/** - \brief Mask and shift a register value to extract a bit filed value. - \param[in] field Name of the register bit field. - \param[in] value Value of register. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) - -/*@} end of group CMSIS_core_bitfield */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Core Hardware */ - #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ - #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ - #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ - #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ - #define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ - #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ - #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ - #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - - #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ - #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ - #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ - #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ - #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ - #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ - #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ - #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< Core Debug configuration struct */ - - #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ - #endif - - #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ - #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ - #endif - - #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ - #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ - #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ - #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ - #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ - #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ - - #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ - #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ - #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ - #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ - #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ - - #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ - #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ - #endif - - #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ - #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ - -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Debug Functions - - Core Register Access Functions - ******************************************************************************/ -/** - \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ - #define NVIC_GetActive __NVIC_GetActive - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* Special LR values for Secure/Non-Secure call handling and exception handling */ - -/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ -#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ - -/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ -#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ -#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ -#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ -#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ -#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ -#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ -#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ - -/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ -#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ -#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ -#else -#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ -#endif - - -/** - \brief Set Priority Grouping - \details Sets the priority grouping field using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ - SCB->AIRCR = reg_value; -} - - -/** - \brief Get Priority Grouping - \details Reads the priority grouping field from the NVIC Interrupt Controller. - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) -{ - return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); -} - - -/** - \brief Enable Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt - \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief Get Interrupt Target State - \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - \return 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Target State - \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Clear Interrupt Target State - \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 if interrupt is assigned to Secure - 1 if interrupt is assigned to Non Secure - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); - return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. - Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); - } -} - - -/** - \brief Encode Priority - \details Encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - return ( - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - ); -} - - -/** - \brief Decode Priority - \details Decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); - *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); -} - - -/** - \brief Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - } -} - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief Set Priority Grouping (non-secure) - \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - - reg_value = SCB_NS->AIRCR; /* read old register configuration */ - reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ - SCB_NS->AIRCR = reg_value; -} - - -/** - \brief Get Priority Grouping (non-secure) - \details Reads the priority grouping field from the non-secure NVIC when in secure state. - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) -{ - return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); -} - - -/** - \brief Enable Interrupt (non-secure) - \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status (non-secure) - \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt (non-secure) - \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Pending Interrupt (non-secure) - \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt (non-secure) - \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt (non-secure) - \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt (non-secure) - \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Priority (non-secure) - \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every non-secure processor exception. - */ -__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority (non-secure) - \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); - } -} -#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ - -/*@} end of CMSIS_Core_NVICFunctions */ - -/* ########################## MPU functions #################################### */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - -#include "mpu_armv8.h" - -#endif - -/* ########################## FPU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_FpuFunctions FPU Functions - \brief Function that provides FPU type. - @{ - */ - -/** - \brief get FPU type - \details returns the FPU type - \returns - - \b 0: No FPU - - \b 1: Single precision FPU - - \b 2: Double + Single precision FPU - */ -__STATIC_INLINE uint32_t SCB_GetFPUType(void) -{ - uint32_t mvfr0; - - mvfr0 = FPU->MVFR0; - if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) - { - return 2U; /* Double + Single precision FPU */ - } - else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) - { - return 1U; /* Single precision FPU */ - } - else - { - return 0U; /* No FPU */ - } -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ########################## SAU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SAUFunctions SAU Functions - \brief Functions that configure the SAU. - @{ - */ - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - -/** - \brief Enable SAU - \details Enables the Security Attribution Unit (SAU). - */ -__STATIC_INLINE void TZ_SAU_Enable(void) -{ - SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); -} - - - -/** - \brief Disable SAU - \details Disables the Security Attribution Unit (SAU). - */ -__STATIC_INLINE void TZ_SAU_Disable(void) -{ - SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); -} - -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - -/*@} end of CMSIS_Core_SAUFunctions */ - - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) - -/** - \brief System Tick Configuration - \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/** - \brief System Tick Configuration (non-secure) - \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function TZ_SysTick_Config_NS is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - - */ -__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} -#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - -/* ##################################### Debug In/Output function ########################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_core_DebugFunctions ITM Functions - \brief Functions that access the ITM debug interface. - @{ - */ - -extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ -#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ - - -/** - \brief ITM Send Character - \details Transmits a character via the ITM channel 0, and - \li Just returns when no debugger is connected that has booked the output. - \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. - \param [in] ch Character to transmit. - \returns Character to transmit. - */ -__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) -{ - if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ - ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ - { - while (ITM->PORT[0U].u32 == 0UL) - { - __NOP(); - } - ITM->PORT[0U].u8 = (uint8_t)ch; - } - return (ch); -} - - -/** - \brief ITM Receive Character - \details Inputs a character via the external variable \ref ITM_RxBuffer. - \return Received character. - \return -1 No character pending. - */ -__STATIC_INLINE int32_t ITM_ReceiveChar (void) -{ - int32_t ch = -1; /* no character available */ - - if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) - { - ch = ITM_RxBuffer; - ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ - } - - return (ch); -} - - -/** - \brief ITM Check Character - \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. - \return 0 No character available. - \return 1 Character available. - */ -__STATIC_INLINE int32_t ITM_CheckChar (void) -{ - - if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) - { - return (0); /* no character available */ - } - else - { - return (1); /* character available */ - } -} - -/*@} end of CMSIS_core_DebugFunctions */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM35P_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ diff --git a/include/cmsis/core_cm4.h b/include/cmsis/core_cm4.h deleted file mode 100644 index f205b33..0000000 --- a/include/cmsis/core_cm4.h +++ /dev/null @@ -1,2121 +0,0 @@ -/**************************************************************************//** - * @file core_cm4.h - * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File - * @version V5.1.0 - * @date 13. March 2019 - ******************************************************************************/ -/* - * Copyright (c) 2009-2019 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CORE_CM4_H_GENERIC -#define __CORE_CM4_H_GENERIC - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -/** - \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** - \ingroup Cortex_M4 - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS CM4 definitions */ -#define __CM4_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __CM4_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16U) | \ - __CM4_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M (4U) /*!< Cortex-M Core */ - -/** __FPU_USED indicates whether an FPU is used or not. - For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. -*/ -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #if defined __ARM_FP - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __TI_ARM__ ) - #if defined __TI_VFP_SUPPORT__ - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __CSMC__ ) - #if ( __CSMC__ & 0x400U) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#endif - -#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM4_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_CM4_H_DEPENDANT -#define __CORE_CM4_H_DEPENDANT - -#ifdef __cplusplus - extern "C" { -#endif - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __CM4_REV - #define __CM4_REV 0x0000U - #warning "__CM4_REV not defined in device header file; using default!" - #endif - - #ifndef __FPU_PRESENT - #define __FPU_PRESENT 0U - #warning "__FPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0U - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 3U - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0U - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#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 */ - -/*@} end of group Cortex_M4 */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core Debug Register - - Core MPU Register - - Core FPU Register - ******************************************************************************/ -/** - \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** - \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { - uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - -/* APSR Register Definitions */ -#define APSR_N_Pos 31U /*!< APSR: N Position */ -#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ - -#define APSR_Z_Pos 30U /*!< APSR: Z Position */ -#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ - -#define APSR_C_Pos 29U /*!< APSR: C Position */ -#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ - -#define APSR_V_Pos 28U /*!< APSR: V Position */ -#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ - -#define APSR_Q_Pos 27U /*!< APSR: Q Position */ -#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ - -#define APSR_GE_Pos 16U /*!< APSR: GE Position */ -#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ - - -/** - \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - -/* IPSR Register Definitions */ -#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ -#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ - - -/** - \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:1; /*!< bit: 9 Reserved */ - uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit */ - uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - -/* xPSR Register Definitions */ -#define xPSR_N_Pos 31U /*!< xPSR: N Position */ -#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ - -#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ -#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ - -#define xPSR_C_Pos 29U /*!< xPSR: C Position */ -#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ - -#define xPSR_V_Pos 28U /*!< xPSR: V Position */ -#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ - -#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ -#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ - -#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ -#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ -#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ - -#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ -#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ - -#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ -#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ - - -/** - \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ - uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ - uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ - uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/* CONTROL Register Definitions */ -#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ -#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ - -#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ -#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ - -#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ -#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ - -/*@} end of group CMSIS_CORE */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** - \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[24U]; - __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RESERVED1[24U]; - __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[24U]; - __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[24U]; - __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[56U]; - __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ - uint32_t RESERVED5[644U]; - __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ -} NVIC_Type; - -/* Software Triggered Interrupt Register Definitions */ -#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ -#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_NVIC */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ - __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ - __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ - __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ - __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ - __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ - __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ - __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ - __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ - __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ - uint32_t RESERVED0[5U]; - __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Vector Table Offset Register Definitions */ -#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ -#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ -#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ -#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ - -#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ -#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ -#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ -#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ - -#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ -#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ - -#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ -#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ -#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ - -#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ -#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ - -#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ -#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ -#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ -#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ - -#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ -#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ - -#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ -#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ - -/* SCB Configurable Fault Status Register Definitions */ -#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ -#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ - -#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ -#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ - -#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ -#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ - -/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ -#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ - -#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ -#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ - -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ -#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ - -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ -#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ - -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ -#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ - -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ -#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ - -/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ -#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ - -#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ -#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ - -#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ -#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ - -#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ -#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ - -#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ -#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ - -#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ -#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ - -#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ -#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ - -/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ -#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ - -#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ -#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ - -#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ -#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ - -#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ -#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ - -#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ -#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ - -#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ -#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ - -/* SCB Hard Fault Status Register Definitions */ -#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ -#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ - -#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ -#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ - -#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ -#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ - -/* SCB Debug Fault Status Register Definitions */ -#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ -#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) - \brief Type definitions for the System Control and ID Register not in the SCB - @{ - */ - -/** - \brief Structure type to access the System Control and ID Register not in the SCB. - */ -typedef struct -{ - uint32_t RESERVED0[1U]; - __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ - __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ -} SCnSCB_Type; - -/* Interrupt Controller Type Register Definitions */ -#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ -#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ - -/* Auxiliary Control Register Definitions */ -#define SCnSCB_ACTLR_DISOOFP_Pos 9U /*!< ACTLR: DISOOFP Position */ -#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ - -#define SCnSCB_ACTLR_DISFPCA_Pos 8U /*!< ACTLR: DISFPCA Position */ -#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ - -#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ -#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ - -#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ -#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ - -#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ -#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ - -/*@} end of group CMSIS_SCnotSCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) - \brief Type definitions for the Instrumentation Trace Macrocell (ITM) - @{ - */ - -/** - \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). - */ -typedef struct -{ - __OM union - { - __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ - __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ - __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ - } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ - uint32_t RESERVED0[864U]; - __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ - uint32_t RESERVED1[15U]; - __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ - uint32_t RESERVED2[15U]; - __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ - uint32_t RESERVED3[32U]; - uint32_t RESERVED4[43U]; - __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ - uint32_t RESERVED5[6U]; - __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ - __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ - __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ - __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ - __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ - __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ - __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ - __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ - __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ - __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ - __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ - __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ -} ITM_Type; - -/* ITM Trace Privilege Register Definitions */ -#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ -#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ - -/* ITM Trace Control Register Definitions */ -#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ -#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ - -#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ -#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ - -#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ -#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ - -#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ -#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ - -#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ - -#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ - -#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ - -#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ -#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ - -#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ -#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ - -/* ITM Lock Status Register Definitions */ -#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ -#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ - -#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ -#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ - -#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ -#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ - -/*@}*/ /* end of group CMSIS_ITM */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) - \brief Type definitions for the Data Watchpoint and Trace (DWT) - @{ - */ - -/** - \brief Structure type to access the Data Watchpoint and Trace Register (DWT). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ - __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ - __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ - __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ - __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ - __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ - __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ - __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED0[1U]; - __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ - __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED1[1U]; - __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ - __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED2[1U]; - __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ - __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ -#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ - -#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ -#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ - -#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ -#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ - -#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ -#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ - -#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ -#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ - -#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ -#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ - -#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ -#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ - -#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ -#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ - -#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ -#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ - -#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ -#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ - -#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ -#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ - -#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ -#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ - -#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ -#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ - -/* DWT CPI Count Register Definitions */ -#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ -#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ - -/* DWT Exception Overhead Count Register Definitions */ -#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ -#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ - -/* DWT Sleep Count Register Definitions */ -#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ -#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ - -/* DWT LSU Count Register Definitions */ -#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ -#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ - -/* DWT Folded-instruction Count Register Definitions */ -#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ -#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ - -/* DWT Comparator Mask Register Definitions */ -#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ -#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ - -/* DWT Comparator Function Register Definitions */ -#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ -#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ - -#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ -#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ -#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ - -#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ -#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ - -#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ -#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ - -#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ -#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ - -#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ -#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ - -/*@}*/ /* end of group CMSIS_DWT */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_TPI Trace Port Interface (TPI) - \brief Type definitions for the Trace Port Interface (TPI) - @{ - */ - -/** - \brief Structure type to access the Trace Port Interface Register (TPI). - */ -typedef struct -{ - __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ - __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ - uint32_t RESERVED0[2U]; - __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55U]; - __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131U]; - __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ - uint32_t RESERVED3[759U]; - __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ - __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ - __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ - uint32_t RESERVED4[1U]; - __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ - __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ - __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ - uint32_t RESERVED5[39U]; - __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ - __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ - uint32_t RESERVED7[8U]; - __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ - __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ - -/* TPI Selected Pin Protocol Register Definitions */ -#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ -#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ - -/* TPI Formatter and Flush Status Register Definitions */ -#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ -#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ - -/* TPI Formatter and Flush Control Register Definitions */ -#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ -#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ - -/* TPI TRIGGER Register Definitions */ -#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ -#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ - -/* TPI Integration ETM Data Register Definitions (FIFO0) */ -#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ -#define TPI_FIFO0_ITM_ATVALID_Msk (0x1UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ - -#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ -#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ - -#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ -#define TPI_FIFO0_ETM_ATVALID_Msk (0x1UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ - -#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ -#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ - -#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ -#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ - -#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ -#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ - -#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ -#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ - -/* TPI ITATBCTR2 Register Definitions */ -#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ -#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ - -#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ -#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ - -/* TPI Integration ITM Data Register Definitions (FIFO1) */ -#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ -#define TPI_FIFO1_ITM_ATVALID_Msk (0x1UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ - -#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ -#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ - -#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ -#define TPI_FIFO1_ETM_ATVALID_Msk (0x1UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ - -#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ -#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ - -#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ -#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ - -#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ -#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ - -#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ -#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ - -/* TPI ITATBCTR0 Register Definitions */ -#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ -#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ - -#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ -#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ - -/* TPI DEVID Register Definitions */ -#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ -#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ - -#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ -#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ - -#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ -#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ - -/* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** - \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ - __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ - __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ - __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ - __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ - __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ - __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ -} MPU_Type; - -#define MPU_TYPE_RALIASES 4U - -/* MPU Type Register Definitions */ -#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register Definitions */ -#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register Definitions */ -#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register Definitions */ -#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ -#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ - -#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ -#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ - -#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ -#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ - -/* MPU Region Attribute and Size Register Definitions */ -#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ -#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ - -#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ -#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ - -#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ -#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ - -#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ -#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ - -#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ -#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ - -#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ -#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ - -#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ -#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ - -#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ -#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ - -#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ -#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ - -#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ -#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ - -/*@} end of group CMSIS_MPU */ -#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_FPU Floating Point Unit (FPU) - \brief Type definitions for the Floating Point Unit (FPU) - @{ - */ - -/** - \brief Structure type to access the Floating Point Unit (FPU). - */ -typedef struct -{ - uint32_t RESERVED0[1U]; - __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ - __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ - __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ - __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ - __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ - __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and FP Feature Register 2 */ -} FPU_Type; - -/* Floating-Point Context Control Register Definitions */ -#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ -#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ - -#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ -#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ - -#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ -#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ - -#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ -#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ - -#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ -#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ - -#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ -#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ - -#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ -#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ - -#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ -#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ - -#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ -#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ - -/* Floating-Point Context Address Register Definitions */ -#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ -#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ - -/* Floating-Point Default Status Control Register Definitions */ -#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ -#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ - -#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ -#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ - -#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ -#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ - -#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ -#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ - -/* Media and FP Feature Register 0 Definitions */ -#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ -#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ - -#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ -#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ - -#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ -#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ - -#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ -#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ - -#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ -#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ - -#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ -#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ - -#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ -#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ - -#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ -#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ - -/* Media and FP Feature Register 1 Definitions */ -#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ -#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ - -#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ -#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ - -#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ -#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ - -#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ -#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ - -/* Media and FP Feature Register 2 Definitions */ - -#define FPU_MVFR2_VFP_Misc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ -#define FPU_MVFR2_VFP_Misc_Msk (0xFUL << FPU_MVFR2_VFP_Misc_Pos) /*!< MVFR2: VFP Misc bits Mask */ - -/*@} end of group CMSIS_FPU */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Type definitions for the Core Debug Registers - @{ - */ - -/** - \brief Structure type to access the Core Debug Register (CoreDebug). - */ -typedef struct -{ - __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register Definitions */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ -#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register Definitions */ -#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register Definitions */ -#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ - -#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ -#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ - -#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ -#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ - -#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ -#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ - -#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ -#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ -#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ - -#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ -#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ - -#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ -#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ - -#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ -#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ - -#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ -#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ - -#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ -#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ - -/*@} end of group CMSIS_CoreDebug */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_bitfield Core register bit field macros - \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). - @{ - */ - -/** - \brief Mask and shift a bit field value for use in a register bit range. - \param[in] field Name of the register bit field. - \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) - -/** - \brief Mask and shift a register value to extract a bit filed value. - \param[in] field Name of the register bit field. - \param[in] value Value of register. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) - -/*@} end of group CMSIS_core_bitfield */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Core Hardware */ -#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ -#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ -#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ -#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ -#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ -#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - -#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ -#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ -#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ -#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ -#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ -#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ -#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ -#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ -#endif - -#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ -#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ - -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Debug Functions - - Core Register Access Functions - ******************************************************************************/ -/** - \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ - #define NVIC_GetActive __NVIC_GetActive - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* The following EXC_RETURN values are saved the LR on exception entry */ -#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ -#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ -#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ -#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ -#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ -#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ - - -/** - \brief Set Priority Grouping - \details Sets the priority grouping field using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ - SCB->AIRCR = reg_value; -} - - -/** - \brief Get Priority Grouping - \details Reads the priority grouping field from the NVIC Interrupt Controller. - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) -{ - return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); -} - - -/** - \brief Enable Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt - \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. - Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); - } -} - - -/** - \brief Encode Priority - \details Encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - return ( - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - ); -} - - -/** - \brief Decode Priority - \details Decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); - *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); -} - - -/** - \brief Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ - uint32_t vectors = (uint32_t )SCB->VTOR; - (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector; -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ - uint32_t vectors = (uint32_t )SCB->VTOR; - return (uint32_t)(* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)); -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - } -} - -/*@} end of CMSIS_Core_NVICFunctions */ - - -/* ########################## MPU functions #################################### */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - -#include "mpu_armv7.h" - -#endif - - -/* ########################## FPU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_FpuFunctions FPU Functions - \brief Function that provides FPU type. - @{ - */ - -/** - \brief get FPU type - \details returns the FPU type - \returns - - \b 0: No FPU - - \b 1: Single precision FPU - - \b 2: Double + Single precision FPU - */ -__STATIC_INLINE uint32_t SCB_GetFPUType(void) -{ - uint32_t mvfr0; - - mvfr0 = FPU->MVFR0; - if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) - { - return 1U; /* Single precision FPU */ - } - else - { - return 0U; /* No FPU */ - } -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) - -/** - \brief System Tick Configuration - \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - -/* ##################################### Debug In/Output function ########################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_core_DebugFunctions ITM Functions - \brief Functions that access the ITM debug interface. - @{ - */ - -extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ -#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ - - -/** - \brief ITM Send Character - \details Transmits a character via the ITM channel 0, and - \li Just returns when no debugger is connected that has booked the output. - \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. - \param [in] ch Character to transmit. - \returns Character to transmit. - */ -__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) -{ - if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ - ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ - { - while (ITM->PORT[0U].u32 == 0UL) - { - __NOP(); - } - ITM->PORT[0U].u8 = (uint8_t)ch; - } - return (ch); -} - - -/** - \brief ITM Receive Character - \details Inputs a character via the external variable \ref ITM_RxBuffer. - \return Received character. - \return -1 No character pending. - */ -__STATIC_INLINE int32_t ITM_ReceiveChar (void) -{ - int32_t ch = -1; /* no character available */ - - if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) - { - ch = ITM_RxBuffer; - ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ - } - - return (ch); -} - - -/** - \brief ITM Check Character - \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. - \return 0 No character available. - \return 1 Character available. - */ -__STATIC_INLINE int32_t ITM_CheckChar (void) -{ - - if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) - { - return (0); /* no character available */ - } - else - { - return (1); /* character available */ - } -} - -/*@} end of CMSIS_core_DebugFunctions */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM4_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ diff --git a/include/cmsis/core_cm7.h b/include/cmsis/core_cm7.h deleted file mode 100644 index 41f9afb..0000000 --- a/include/cmsis/core_cm7.h +++ /dev/null @@ -1,2691 +0,0 @@ -/**************************************************************************//** - * @file core_cm7.h - * @brief CMSIS Cortex-M7 Core Peripheral Access Layer Header File - * @version V5.1.0 - * @date 13. March 2019 - ******************************************************************************/ -/* - * Copyright (c) 2009-2019 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CORE_CM7_H_GENERIC -#define __CORE_CM7_H_GENERIC - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -/** - \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** - \ingroup Cortex_M7 - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS CM7 definitions */ -#define __CM7_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __CM7_CMSIS_VERSION_SUB ( __CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __CM7_CMSIS_VERSION ((__CM7_CMSIS_VERSION_MAIN << 16U) | \ - __CM7_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_M (7U) /*!< Cortex-M Core */ - -/** __FPU_USED indicates whether an FPU is used or not. - For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. -*/ -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #if defined __ARM_FP - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __TI_ARM__ ) - #if defined __TI_VFP_SUPPORT__ - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#elif defined ( __CSMC__ ) - #if ( __CSMC__ & 0x400U) - #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) - #define __FPU_USED 1U - #else - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #define __FPU_USED 0U - #endif - #else - #define __FPU_USED 0U - #endif - -#endif - -#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM7_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_CM7_H_DEPENDANT -#define __CORE_CM7_H_DEPENDANT - -#ifdef __cplusplus - extern "C" { -#endif - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __CM7_REV - #define __CM7_REV 0x0000U - #warning "__CM7_REV not defined in device header file; using default!" - #endif - - #ifndef __FPU_PRESENT - #define __FPU_PRESENT 0U - #warning "__FPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0U - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __ICACHE_PRESENT - #define __ICACHE_PRESENT 0U - #warning "__ICACHE_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __DCACHE_PRESENT - #define __DCACHE_PRESENT 0U - #warning "__DCACHE_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __DTCM_PRESENT - #define __DTCM_PRESENT 0U - #warning "__DTCM_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 3U - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0U - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#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 */ - -/*@} end of group Cortex_M7 */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core Debug Register - - Core MPU Register - - Core FPU Register - ******************************************************************************/ -/** - \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** - \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { - uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - -/* APSR Register Definitions */ -#define APSR_N_Pos 31U /*!< APSR: N Position */ -#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ - -#define APSR_Z_Pos 30U /*!< APSR: Z Position */ -#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ - -#define APSR_C_Pos 29U /*!< APSR: C Position */ -#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ - -#define APSR_V_Pos 28U /*!< APSR: V Position */ -#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ - -#define APSR_Q_Pos 27U /*!< APSR: Q Position */ -#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ - -#define APSR_GE_Pos 16U /*!< APSR: GE Position */ -#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ - - -/** - \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - -/* IPSR Register Definitions */ -#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ -#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ - - -/** - \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:1; /*!< bit: 9 Reserved */ - uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ - uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ - uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit */ - uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - -/* xPSR Register Definitions */ -#define xPSR_N_Pos 31U /*!< xPSR: N Position */ -#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ - -#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ -#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ - -#define xPSR_C_Pos 29U /*!< xPSR: C Position */ -#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ - -#define xPSR_V_Pos 28U /*!< xPSR: V Position */ -#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ - -#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ -#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ - -#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ -#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ -#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ - -#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ -#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ - -#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ -#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ - - -/** - \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ - uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ - uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ - uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/* CONTROL Register Definitions */ -#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ -#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ - -#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ -#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ - -#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ -#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ - -/*@} end of group CMSIS_CORE */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** - \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[24U]; - __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RESERVED1[24U]; - __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[24U]; - __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[24U]; - __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[56U]; - __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ - uint32_t RESERVED5[644U]; - __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ -} NVIC_Type; - -/* Software Triggered Interrupt Register Definitions */ -#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ -#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_NVIC */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ - __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ - __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ - __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ - __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ - __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ - __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ - __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ - __IM uint32_t ID_MFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ - __IM uint32_t ID_ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ - uint32_t RESERVED0[1U]; - __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ - __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ - __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ - __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ - __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ - uint32_t RESERVED3[93U]; - __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ - uint32_t RESERVED4[15U]; - __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ - __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ - __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ - uint32_t RESERVED5[1U]; - __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ - uint32_t RESERVED6[1U]; - __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ - __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ - __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ - __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ - __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ - __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ - __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ - __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ - uint32_t RESERVED7[6U]; - __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ - __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ - __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ - __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ - __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ - uint32_t RESERVED8[1U]; - __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Vector Table Offset Register Definitions */ -#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ -#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ -#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: Branch prediction enable bit Position */ -#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: Branch prediction enable bit Mask */ - -#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: Instruction cache enable bit Position */ -#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: Instruction cache enable bit Mask */ - -#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: Cache enable bit Position */ -#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: Cache enable bit Mask */ - -#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ -#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ - -#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ -#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ -#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ -#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ - -#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ -#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ - -#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ -#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ -#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ - -#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ -#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ - -#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ -#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ -#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ -#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ - -#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ -#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ - -#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ -#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ - -/* SCB Configurable Fault Status Register Definitions */ -#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ -#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ - -#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ -#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ - -#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ -#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ - -/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ -#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ - -#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ -#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ - -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ -#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ - -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ -#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ - -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ -#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ - -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ -#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ - -/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ -#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ - -#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ -#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ - -#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ -#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ - -#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ -#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ - -#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ -#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ - -#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ -#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ - -#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ -#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ - -/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ -#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ - -#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ -#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ - -#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ -#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ - -#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ -#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ - -#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ -#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ - -#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ -#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ - -/* SCB Hard Fault Status Register Definitions */ -#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ -#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ - -#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ -#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ - -#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ -#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ - -/* SCB Debug Fault Status Register Definitions */ -#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ -#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ - -/* SCB Cache Level ID Register Definitions */ -#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ -#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ - -#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ -#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ - -/* SCB Cache Type Register Definitions */ -#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ -#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ - -#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ -#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ - -#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ -#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ - -#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ -#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ - -#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ -#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ - -/* SCB Cache Size ID Register Definitions */ -#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ -#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ - -#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ -#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ - -#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ -#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ - -#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ -#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ - -#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ -#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ - -#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ -#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ - -#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ -#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ - -/* SCB Cache Size Selection Register Definitions */ -#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ -#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ - -#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ -#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ - -/* SCB Software Triggered Interrupt Register Definitions */ -#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ -#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ - -/* SCB D-Cache Invalidate by Set-way Register Definitions */ -#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ -#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ - -#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ -#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ - -/* SCB D-Cache Clean by Set-way Register Definitions */ -#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ -#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ - -#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ -#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ - -/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ -#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ -#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ - -#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ -#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ - -/* Instruction Tightly-Coupled Memory Control Register Definitions */ -#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ -#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ - -#define SCB_ITCMCR_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ -#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ - -#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ -#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ - -#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ -#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ - -/* Data Tightly-Coupled Memory Control Register Definitions */ -#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ -#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ - -#define SCB_DTCMCR_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ -#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ - -#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ -#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ - -#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ -#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ - -/* AHBP Control Register Definitions */ -#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ -#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ - -#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ -#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ - -/* L1 Cache Control Register Definitions */ -#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ -#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ - -#define SCB_CACR_ECCEN_Pos 1U /*!< SCB CACR: ECCEN Position */ -#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */ - -#define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ -#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ - -/* AHBS Control Register Definitions */ -#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ -#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ - -#define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ -#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ - -#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ -#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ - -/* Auxiliary Bus Fault Status Register Definitions */ -#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ -#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ - -#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ -#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ - -#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ -#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ - -#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ -#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ - -#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ -#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ - -#define SCB_ABFSR_ITCM_Pos 0U /*!< SCB ABFSR: ITCM Position*/ -#define SCB_ABFSR_ITCM_Msk (1UL /*<< SCB_ABFSR_ITCM_Pos*/) /*!< SCB ABFSR: ITCM Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) - \brief Type definitions for the System Control and ID Register not in the SCB - @{ - */ - -/** - \brief Structure type to access the System Control and ID Register not in the SCB. - */ -typedef struct -{ - uint32_t RESERVED0[1U]; - __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ - __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ -} SCnSCB_Type; - -/* Interrupt Controller Type Register Definitions */ -#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ -#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ - -/* Auxiliary Control Register Definitions */ -#define SCnSCB_ACTLR_DISDYNADD_Pos 26U /*!< ACTLR: DISDYNADD Position */ -#define SCnSCB_ACTLR_DISDYNADD_Msk (1UL << SCnSCB_ACTLR_DISDYNADD_Pos) /*!< ACTLR: DISDYNADD Mask */ - -#define SCnSCB_ACTLR_DISISSCH1_Pos 21U /*!< ACTLR: DISISSCH1 Position */ -#define SCnSCB_ACTLR_DISISSCH1_Msk (0x1FUL << SCnSCB_ACTLR_DISISSCH1_Pos) /*!< ACTLR: DISISSCH1 Mask */ - -#define SCnSCB_ACTLR_DISDI_Pos 16U /*!< ACTLR: DISDI Position */ -#define SCnSCB_ACTLR_DISDI_Msk (0x1FUL << SCnSCB_ACTLR_DISDI_Pos) /*!< ACTLR: DISDI Mask */ - -#define SCnSCB_ACTLR_DISCRITAXIRUR_Pos 15U /*!< ACTLR: DISCRITAXIRUR Position */ -#define SCnSCB_ACTLR_DISCRITAXIRUR_Msk (1UL << SCnSCB_ACTLR_DISCRITAXIRUR_Pos) /*!< ACTLR: DISCRITAXIRUR Mask */ - -#define SCnSCB_ACTLR_DISBTACALLOC_Pos 14U /*!< ACTLR: DISBTACALLOC Position */ -#define SCnSCB_ACTLR_DISBTACALLOC_Msk (1UL << SCnSCB_ACTLR_DISBTACALLOC_Pos) /*!< ACTLR: DISBTACALLOC Mask */ - -#define SCnSCB_ACTLR_DISBTACREAD_Pos 13U /*!< ACTLR: DISBTACREAD Position */ -#define SCnSCB_ACTLR_DISBTACREAD_Msk (1UL << SCnSCB_ACTLR_DISBTACREAD_Pos) /*!< ACTLR: DISBTACREAD Mask */ - -#define SCnSCB_ACTLR_DISITMATBFLUSH_Pos 12U /*!< ACTLR: DISITMATBFLUSH Position */ -#define SCnSCB_ACTLR_DISITMATBFLUSH_Msk (1UL << SCnSCB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ - -#define SCnSCB_ACTLR_DISRAMODE_Pos 11U /*!< ACTLR: DISRAMODE Position */ -#define SCnSCB_ACTLR_DISRAMODE_Msk (1UL << SCnSCB_ACTLR_DISRAMODE_Pos) /*!< ACTLR: DISRAMODE Mask */ - -#define SCnSCB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ -#define SCnSCB_ACTLR_FPEXCODIS_Msk (1UL << SCnSCB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ - -#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ -#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ - -#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ -#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ - -/*@} end of group CMSIS_SCnotSCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) - \brief Type definitions for the Instrumentation Trace Macrocell (ITM) - @{ - */ - -/** - \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). - */ -typedef struct -{ - __OM union - { - __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ - __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ - __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ - } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ - uint32_t RESERVED0[864U]; - __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ - uint32_t RESERVED1[15U]; - __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ - uint32_t RESERVED2[15U]; - __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ - uint32_t RESERVED3[32U]; - uint32_t RESERVED4[43U]; - __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ - uint32_t RESERVED5[6U]; - __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ - __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ - __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ - __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ - __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ - __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ - __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ - __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ - __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ - __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ - __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ - __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ -} ITM_Type; - -/* ITM Trace Privilege Register Definitions */ -#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ -#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ - -/* ITM Trace Control Register Definitions */ -#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ -#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ - -#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ -#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ - -#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ -#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ - -#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ -#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ - -#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ - -#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ - -#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ - -#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ -#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ - -#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ -#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ - -/* ITM Lock Status Register Definitions */ -#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ -#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ - -#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ -#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ - -#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ -#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ - -/*@}*/ /* end of group CMSIS_ITM */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) - \brief Type definitions for the Data Watchpoint and Trace (DWT) - @{ - */ - -/** - \brief Structure type to access the Data Watchpoint and Trace Register (DWT). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ - __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ - __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ - __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ - __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ - __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ - __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ - __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED0[1U]; - __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ - __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED1[1U]; - __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ - __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED2[1U]; - __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ - __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ - uint32_t RESERVED3[981U]; - __OM uint32_t LAR; /*!< Offset: 0xFB0 ( W) Lock Access Register */ - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ -#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ - -#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ -#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ - -#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ -#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ - -#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ -#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ - -#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ -#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ - -#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ -#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ - -#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ -#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ - -#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ -#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ - -#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ -#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ - -#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ -#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ - -#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ -#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ - -#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ -#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ - -#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ -#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ - -/* DWT CPI Count Register Definitions */ -#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ -#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ - -/* DWT Exception Overhead Count Register Definitions */ -#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ -#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ - -/* DWT Sleep Count Register Definitions */ -#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ -#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ - -/* DWT LSU Count Register Definitions */ -#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ -#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ - -/* DWT Folded-instruction Count Register Definitions */ -#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ -#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ - -/* DWT Comparator Mask Register Definitions */ -#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ -#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ - -/* DWT Comparator Function Register Definitions */ -#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ -#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ - -#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ -#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ -#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ - -#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ -#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ - -#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ -#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ - -#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ -#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ - -#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ -#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ - -/*@}*/ /* end of group CMSIS_DWT */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_TPI Trace Port Interface (TPI) - \brief Type definitions for the Trace Port Interface (TPI) - @{ - */ - -/** - \brief Structure type to access the Trace Port Interface Register (TPI). - */ -typedef struct -{ - __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ - __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ - uint32_t RESERVED0[2U]; - __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55U]; - __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131U]; - __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ - uint32_t RESERVED3[759U]; - __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ - __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ - __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ - uint32_t RESERVED4[1U]; - __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ - __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ - __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ - uint32_t RESERVED5[39U]; - __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ - __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ - uint32_t RESERVED7[8U]; - __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ - __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ - -/* TPI Selected Pin Protocol Register Definitions */ -#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ -#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ - -/* TPI Formatter and Flush Status Register Definitions */ -#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ -#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ - -/* TPI Formatter and Flush Control Register Definitions */ -#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ -#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ - -/* TPI TRIGGER Register Definitions */ -#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ -#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ - -/* TPI Integration ETM Data Register Definitions (FIFO0) */ -#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ -#define TPI_FIFO0_ITM_ATVALID_Msk (0x1UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ - -#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ -#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ - -#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ -#define TPI_FIFO0_ETM_ATVALID_Msk (0x1UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ - -#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ -#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ - -#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ -#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ - -#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ -#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ - -#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ -#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ - -/* TPI ITATBCTR2 Register Definitions */ -#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ -#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ - -#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ -#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ - -/* TPI Integration ITM Data Register Definitions (FIFO1) */ -#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ -#define TPI_FIFO1_ITM_ATVALID_Msk (0x1UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ - -#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ -#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ - -#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ -#define TPI_FIFO1_ETM_ATVALID_Msk (0x1UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ - -#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ -#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ - -#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ -#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ - -#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ -#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ - -#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ -#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ - -/* TPI ITATBCTR0 Register Definitions */ -#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ -#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ - -#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ -#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ - -/* TPI DEVID Register Definitions */ -#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ -#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ - -#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ -#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ - -#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ -#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ - -/* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** - \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ - __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ - __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ - __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ - __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ - __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ - __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ -} MPU_Type; - -#define MPU_TYPE_RALIASES 4U - -/* MPU Type Register Definitions */ -#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register Definitions */ -#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register Definitions */ -#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register Definitions */ -#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ -#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ - -#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ -#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ - -#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ -#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ - -/* MPU Region Attribute and Size Register Definitions */ -#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ -#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ - -#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ -#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ - -#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ -#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ - -#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ -#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ - -#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ -#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ - -#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ -#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ - -#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ -#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ - -#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ -#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ - -#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ -#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ - -#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ -#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ - -/*@} end of group CMSIS_MPU */ -#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_FPU Floating Point Unit (FPU) - \brief Type definitions for the Floating Point Unit (FPU) - @{ - */ - -/** - \brief Structure type to access the Floating Point Unit (FPU). - */ -typedef struct -{ - uint32_t RESERVED0[1U]; - __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ - __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ - __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ - __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ - __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ - __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and FP Feature Register 2 */ -} FPU_Type; - -/* Floating-Point Context Control Register Definitions */ -#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ -#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ - -#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ -#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ - -#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ -#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ - -#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ -#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ - -#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ -#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ - -#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ -#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ - -#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ -#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ - -#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ -#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ - -#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ -#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ - -/* Floating-Point Context Address Register Definitions */ -#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ -#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ - -/* Floating-Point Default Status Control Register Definitions */ -#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ -#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ - -#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ -#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ - -#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ -#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ - -#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ -#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ - -/* Media and FP Feature Register 0 Definitions */ -#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ -#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ - -#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ -#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ - -#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ -#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ - -#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ -#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ - -#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ -#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ - -#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ -#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ - -#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ -#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ - -#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ -#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ - -/* Media and FP Feature Register 1 Definitions */ -#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ -#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ - -#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ -#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ - -#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ -#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ - -#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ -#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ - -/* Media and FP Feature Register 2 Definitions */ - -#define FPU_MVFR2_VFP_Misc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ -#define FPU_MVFR2_VFP_Misc_Msk (0xFUL << FPU_MVFR2_VFP_Misc_Pos) /*!< MVFR2: VFP Misc bits Mask */ - -/*@} end of group CMSIS_FPU */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Type definitions for the Core Debug Registers - @{ - */ - -/** - \brief Structure type to access the Core Debug Register (CoreDebug). - */ -typedef struct -{ - __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register Definitions */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ -#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register Definitions */ -#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register Definitions */ -#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ - -#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ -#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ - -#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ -#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ - -#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ -#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ - -#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ -#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ -#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ - -#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ -#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ - -#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ -#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ - -#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ -#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ - -#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ -#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ - -#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ -#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ - -/*@} end of group CMSIS_CoreDebug */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_bitfield Core register bit field macros - \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). - @{ - */ - -/** - \brief Mask and shift a bit field value for use in a register bit range. - \param[in] field Name of the register bit field. - \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) - -/** - \brief Mask and shift a register value to extract a bit filed value. - \param[in] field Name of the register bit field. - \param[in] value Value of register. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) - -/*@} end of group CMSIS_core_bitfield */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Core Hardware */ -#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ -#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ -#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ -#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ -#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ -#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - -#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ -#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ -#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ -#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ -#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ -#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ -#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ -#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ -#endif - -#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ -#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ - -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Debug Functions - - Core Register Access Functions - ******************************************************************************/ -/** - \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ - #define NVIC_GetActive __NVIC_GetActive - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* The following EXC_RETURN values are saved the LR on exception entry */ -#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ -#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ -#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ -#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ -#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ -#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ - - -/** - \brief Set Priority Grouping - \details Sets the priority grouping field using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ - SCB->AIRCR = reg_value; -} - - -/** - \brief Get Priority Grouping - \details Reads the priority grouping field from the NVIC Interrupt Controller. - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) -{ - return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); -} - - -/** - \brief Enable Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt - \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. - Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); - } -} - - -/** - \brief Encode Priority - \details Encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - return ( - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - ); -} - - -/** - \brief Decode Priority - \details Decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); - *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); -} - - -/** - \brief Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ - uint32_t vectors = (uint32_t )SCB->VTOR; - (* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)) = vector; -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ - uint32_t vectors = (uint32_t )SCB->VTOR; - return (uint32_t)(* (int *) (vectors + ((int32_t)IRQn + NVIC_USER_IRQ_OFFSET) * 4)); -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - } -} - -/*@} end of CMSIS_Core_NVICFunctions */ - - -/* ########################## MPU functions #################################### */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - -#include "mpu_armv7.h" - -#endif - - -/* ########################## FPU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_FpuFunctions FPU Functions - \brief Function that provides FPU type. - @{ - */ - -/** - \brief get FPU type - \details returns the FPU type - \returns - - \b 0: No FPU - - \b 1: Single precision FPU - - \b 2: Double + Single precision FPU - */ -__STATIC_INLINE uint32_t SCB_GetFPUType(void) -{ - uint32_t mvfr0; - - mvfr0 = SCB->MVFR0; - if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) - { - return 2U; /* Double + Single precision FPU */ - } - else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) - { - return 1U; /* Single precision FPU */ - } - else - { - return 0U; /* No FPU */ - } -} - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ########################## Cache functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_CacheFunctions Cache Functions - \brief Functions that configure Instruction and Data cache. - @{ - */ - -/* Cache Size ID Register Macros */ -#define CCSIDR_WAYS(x) (((x) & SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos) -#define CCSIDR_SETS(x) (((x) & SCB_CCSIDR_NUMSETS_Msk ) >> SCB_CCSIDR_NUMSETS_Pos ) - -#define __SCB_DCACHE_LINE_SIZE 32U /*!< Cortex-M7 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ - -/** - \brief Enable I-Cache - \details Turns on I-Cache - */ -__STATIC_FORCEINLINE void SCB_EnableICache (void) -{ - #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) - if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */ - - __DSB(); - __ISB(); - SCB->ICIALLU = 0UL; /* invalidate I-Cache */ - __DSB(); - __ISB(); - SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */ - __DSB(); - __ISB(); - #endif -} - - -/** - \brief Disable I-Cache - \details Turns off I-Cache - */ -__STATIC_FORCEINLINE void SCB_DisableICache (void) -{ - #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) - __DSB(); - __ISB(); - SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk; /* disable I-Cache */ - SCB->ICIALLU = 0UL; /* invalidate I-Cache */ - __DSB(); - __ISB(); - #endif -} - - -/** - \brief Invalidate I-Cache - \details Invalidates I-Cache - */ -__STATIC_FORCEINLINE void SCB_InvalidateICache (void) -{ - #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) - __DSB(); - __ISB(); - SCB->ICIALLU = 0UL; - __DSB(); - __ISB(); - #endif -} - - -/** - \brief Enable D-Cache - \details Turns on D-Cache - */ -__STATIC_FORCEINLINE void SCB_EnableDCache (void) -{ - #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) - uint32_t ccsidr; - uint32_t sets; - uint32_t ways; - - if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */ - - SCB->CSSELR = 0U; /* select Level 1 data cache */ - __DSB(); - - ccsidr = SCB->CCSIDR; - - /* invalidate D-Cache */ - sets = (uint32_t)(CCSIDR_SETS(ccsidr)); - do { - ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); - do { - SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | - ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); - #if defined ( __CC_ARM ) - __schedule_barrier(); - #endif - } while (ways-- != 0U); - } while(sets-- != 0U); - __DSB(); - - SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */ - - __DSB(); - __ISB(); - #endif -} - - -/** - \brief Disable D-Cache - \details Turns off D-Cache - */ -__STATIC_FORCEINLINE void SCB_DisableDCache (void) -{ - #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) - uint32_t ccsidr; - uint32_t sets; - uint32_t ways; - - SCB->CSSELR = 0U; /* select Level 1 data cache */ - __DSB(); - - SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk; /* disable D-Cache */ - __DSB(); - - ccsidr = SCB->CCSIDR; - - /* clean & invalidate D-Cache */ - sets = (uint32_t)(CCSIDR_SETS(ccsidr)); - do { - ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); - do { - SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | - ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); - #if defined ( __CC_ARM ) - __schedule_barrier(); - #endif - } while (ways-- != 0U); - } while(sets-- != 0U); - - __DSB(); - __ISB(); - #endif -} - - -/** - \brief Invalidate D-Cache - \details Invalidates D-Cache - */ -__STATIC_FORCEINLINE void SCB_InvalidateDCache (void) -{ - #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) - uint32_t ccsidr; - uint32_t sets; - uint32_t ways; - - SCB->CSSELR = 0U; /* select Level 1 data cache */ - __DSB(); - - ccsidr = SCB->CCSIDR; - - /* invalidate D-Cache */ - sets = (uint32_t)(CCSIDR_SETS(ccsidr)); - do { - ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); - do { - SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | - ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); - #if defined ( __CC_ARM ) - __schedule_barrier(); - #endif - } while (ways-- != 0U); - } while(sets-- != 0U); - - __DSB(); - __ISB(); - #endif -} - - -/** - \brief Clean D-Cache - \details Cleans D-Cache - */ -__STATIC_FORCEINLINE void SCB_CleanDCache (void) -{ - #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) - uint32_t ccsidr; - uint32_t sets; - uint32_t ways; - - SCB->CSSELR = 0U; /* select Level 1 data cache */ - __DSB(); - - ccsidr = SCB->CCSIDR; - - /* clean D-Cache */ - sets = (uint32_t)(CCSIDR_SETS(ccsidr)); - do { - ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); - do { - SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) | - ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk) ); - #if defined ( __CC_ARM ) - __schedule_barrier(); - #endif - } while (ways-- != 0U); - } while(sets-- != 0U); - - __DSB(); - __ISB(); - #endif -} - - -/** - \brief Clean & Invalidate D-Cache - \details Cleans and Invalidates D-Cache - */ -__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache (void) -{ - #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) - uint32_t ccsidr; - uint32_t sets; - uint32_t ways; - - SCB->CSSELR = 0U; /* select Level 1 data cache */ - __DSB(); - - ccsidr = SCB->CCSIDR; - - /* clean & invalidate D-Cache */ - sets = (uint32_t)(CCSIDR_SETS(ccsidr)); - do { - ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); - do { - SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | - ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); - #if defined ( __CC_ARM ) - __schedule_barrier(); - #endif - } while (ways-- != 0U); - } while(sets-- != 0U); - - __DSB(); - __ISB(); - #endif -} - - -/** - \brief D-Cache Invalidate by address - \details Invalidates D-Cache for the given address. - D-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity. - D-Cache memory blocks which are part of given address + given size are invalidated. - \param[in] addr address - \param[in] dsize size of memory block (in number of bytes) -*/ -__STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr (void *addr, int32_t dsize) -{ - #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) - if ( dsize > 0 ) { - int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); - uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; - - __DSB(); - - do { - SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ - op_addr += __SCB_DCACHE_LINE_SIZE; - op_size -= __SCB_DCACHE_LINE_SIZE; - } while ( op_size > 0 ); - - __DSB(); - __ISB(); - } - #endif -} - - -/** - \brief D-Cache Clean by address - \details Cleans D-Cache for the given address - D-Cache is cleaned starting from a 32 byte aligned address in 32 byte granularity. - D-Cache memory blocks which are part of given address + given size are cleaned. - \param[in] addr address - \param[in] dsize size of memory block (in number of bytes) -*/ -__STATIC_FORCEINLINE void SCB_CleanDCache_by_Addr (uint32_t *addr, int32_t dsize) -{ - #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) - if ( dsize > 0 ) { - int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); - uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; - - __DSB(); - - do { - SCB->DCCMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ - op_addr += __SCB_DCACHE_LINE_SIZE; - op_size -= __SCB_DCACHE_LINE_SIZE; - } while ( op_size > 0 ); - - __DSB(); - __ISB(); - } - #endif -} - - -/** - \brief D-Cache Clean and Invalidate by address - \details Cleans and invalidates D_Cache for the given address - D-Cache is cleaned and invalidated starting from a 32 byte aligned address in 32 byte granularity. - D-Cache memory blocks which are part of given address + given size are cleaned and invalidated. - \param[in] addr address (aligned to 32-byte boundary) - \param[in] dsize size of memory block (in number of bytes) -*/ -__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize) -{ - #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) - if ( dsize > 0 ) { - int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); - uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; - - __DSB(); - - do { - SCB->DCCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ - op_addr += __SCB_DCACHE_LINE_SIZE; - op_size -= __SCB_DCACHE_LINE_SIZE; - } while ( op_size > 0 ); - - __DSB(); - __ISB(); - } - #endif -} - -/*@} end of CMSIS_Core_CacheFunctions */ - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) - -/** - \brief System Tick Configuration - \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - -/* ##################################### Debug In/Output function ########################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_core_DebugFunctions ITM Functions - \brief Functions that access the ITM debug interface. - @{ - */ - -extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ -#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ - - -/** - \brief ITM Send Character - \details Transmits a character via the ITM channel 0, and - \li Just returns when no debugger is connected that has booked the output. - \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. - \param [in] ch Character to transmit. - \returns Character to transmit. - */ -__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) -{ - if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ - ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ - { - while (ITM->PORT[0U].u32 == 0UL) - { - __NOP(); - } - ITM->PORT[0U].u8 = (uint8_t)ch; - } - return (ch); -} - - -/** - \brief ITM Receive Character - \details Inputs a character via the external variable \ref ITM_RxBuffer. - \return Received character. - \return -1 No character pending. - */ -__STATIC_INLINE int32_t ITM_ReceiveChar (void) -{ - int32_t ch = -1; /* no character available */ - - if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) - { - ch = ITM_RxBuffer; - ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ - } - - return (ch); -} - - -/** - \brief ITM Check Character - \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. - \return 0 No character available. - \return 1 Character available. - */ -__STATIC_INLINE int32_t ITM_CheckChar (void) -{ - - if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) - { - return (0); /* no character available */ - } - else - { - return (1); /* character available */ - } -} - -/*@} end of CMSIS_core_DebugFunctions */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_CM7_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ diff --git a/include/cmsis/core_sc000.h b/include/cmsis/core_sc000.h deleted file mode 100644 index 389535a..0000000 --- a/include/cmsis/core_sc000.h +++ /dev/null @@ -1,1022 +0,0 @@ -/**************************************************************************//** - * @file core_sc000.h - * @brief CMSIS SC000 Core Peripheral Access Layer Header File - * @version V5.0.6 - * @date 12. November 2018 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CORE_SC000_H_GENERIC -#define __CORE_SC000_H_GENERIC - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -/** - \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** - \ingroup SC000 - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS SC000 definitions */ -#define __SC000_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __SC000_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __SC000_CMSIS_VERSION ((__SC000_CMSIS_VERSION_MAIN << 16U) | \ - __SC000_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_SC (000U) /*!< Cortex secure core */ - -/** __FPU_USED indicates whether an FPU is used or not. - This core does not support an FPU at all -*/ -#define __FPU_USED 0U - -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #if defined __ARM_FP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TI_ARM__ ) - #if defined __TI_VFP_SUPPORT__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __CSMC__ ) - #if ( __CSMC__ & 0x400U) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#endif - -#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_SC000_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_SC000_H_DEPENDANT -#define __CORE_SC000_H_DEPENDANT - -#ifdef __cplusplus - extern "C" { -#endif - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __SC000_REV - #define __SC000_REV 0x0000U - #warning "__SC000_REV not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0U - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 2U - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0U - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#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 */ - -/*@} end of group SC000 */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core MPU Register - ******************************************************************************/ -/** - \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** - \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { - uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - -/* APSR Register Definitions */ -#define APSR_N_Pos 31U /*!< APSR: N Position */ -#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ - -#define APSR_Z_Pos 30U /*!< APSR: Z Position */ -#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ - -#define APSR_C_Pos 29U /*!< APSR: C Position */ -#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ - -#define APSR_V_Pos 28U /*!< APSR: V Position */ -#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ - - -/** - \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - -/* IPSR Register Definitions */ -#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ -#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ - - -/** - \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ - uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - -/* xPSR Register Definitions */ -#define xPSR_N_Pos 31U /*!< xPSR: N Position */ -#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ - -#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ -#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ - -#define xPSR_C_Pos 29U /*!< xPSR: C Position */ -#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ - -#define xPSR_V_Pos 28U /*!< xPSR: V Position */ -#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ -#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ - - -/** - \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t _reserved0:1; /*!< bit: 0 Reserved */ - uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ - uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/* CONTROL Register Definitions */ -#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ -#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ - -/*@} end of group CMSIS_CORE */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** - \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[31U]; - __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RSERVED1[31U]; - __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[31U]; - __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[31U]; - uint32_t RESERVED4[64U]; - __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ -} NVIC_Type; - -/*@} end of group CMSIS_NVIC */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - uint32_t RESERVED0[1U]; - __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - uint32_t RESERVED1[154U]; - __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) - \brief Type definitions for the System Control and ID Register not in the SCB - @{ - */ - -/** - \brief Structure type to access the System Control and ID Register not in the SCB. - */ -typedef struct -{ - uint32_t RESERVED0[2U]; - __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ -} SCnSCB_Type; - -/* Auxiliary Control Register Definitions */ -#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ -#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ - -/*@} end of group CMSIS_SCnotSCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** - \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ -} MPU_Type; - -/* MPU Type Register Definitions */ -#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register Definitions */ -#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register Definitions */ -#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register Definitions */ -#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ -#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ - -#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ -#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ - -#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ -#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ - -/* MPU Region Attribute and Size Register Definitions */ -#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ -#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ - -#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ -#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ - -#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ -#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ - -#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ -#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ - -#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ -#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ - -#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ -#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ - -#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ -#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ - -#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ -#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ - -#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ -#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ - -#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ -#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ - -/*@} end of group CMSIS_MPU */ -#endif - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief SC000 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. - Therefore they are not covered by the SC000 header file. - @{ - */ -/*@} end of group CMSIS_CoreDebug */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_bitfield Core register bit field macros - \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). - @{ - */ - -/** - \brief Mask and shift a bit field value for use in a register bit range. - \param[in] field Name of the register bit field. - \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) - -/** - \brief Mask and shift a register value to extract a bit filed value. - \param[in] field Name of the register bit field. - \param[in] value Value of register. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) - -/*@} end of group CMSIS_core_bitfield */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Core Hardware */ -#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ -#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - -#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ -#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ -#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ -#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ -#endif - -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Register Access Functions - ******************************************************************************/ -/** - \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else -/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for SC000 */ -/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for SC000 */ - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ -/*#define NVIC_GetActive __NVIC_GetActive not available for SC000 */ - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* The following EXC_RETURN values are saved the LR on exception entry */ -#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ -#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ -#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ - - -/* Interrupt Priorities are WORD accessible only under Armv6-M */ -/* The following MACROS handle generation of the register offset and byte masks */ -#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) -#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) -#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) - - -/** - \brief Enable Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } - else - { - SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | - (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. - Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); - } -} - - -/** - \brief Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - SCB_AIRCR_SYSRESETREQ_Msk); - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - } -} - -/*@} end of CMSIS_Core_NVICFunctions */ - - -/* ########################## FPU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_FpuFunctions FPU Functions - \brief Function that provides FPU type. - @{ - */ - -/** - \brief get FPU type - \details returns the FPU type - \returns - - \b 0: No FPU - - \b 1: Single precision FPU - - \b 2: Double + Single precision FPU - */ -__STATIC_INLINE uint32_t SCB_GetFPUType(void) -{ - return 0U; /* No FPU */ -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) - -/** - \brief System Tick Configuration - \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_SC000_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ diff --git a/include/cmsis/core_sc300.h b/include/cmsis/core_sc300.h deleted file mode 100644 index 5478ea7..0000000 --- a/include/cmsis/core_sc300.h +++ /dev/null @@ -1,1915 +0,0 @@ -/**************************************************************************//** - * @file core_sc300.h - * @brief CMSIS SC300 Core Peripheral Access Layer Header File - * @version V5.0.7 - * @date 12. November 2018 - ******************************************************************************/ -/* - * Copyright (c) 2009-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef __CORE_SC300_H_GENERIC -#define __CORE_SC300_H_GENERIC - -#include - -#ifdef __cplusplus - extern "C" { -#endif - -/** - \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions - CMSIS violates the following MISRA-C:2004 rules: - - \li Required Rule 8.5, object/function definition in header file.
- Function definitions in header files are used to allow 'inlining'. - - \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
- Unions are used for effective representation of core registers. - - \li Advisory Rule 19.7, Function-like macro defined.
- Function-like macros are used to allow more efficient code. - */ - - -/******************************************************************************* - * CMSIS definitions - ******************************************************************************/ -/** - \ingroup SC3000 - @{ - */ - -#include "cmsis_version.h" - -/* CMSIS SC300 definitions */ -#define __SC300_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ -#define __SC300_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ -#define __SC300_CMSIS_VERSION ((__SC300_CMSIS_VERSION_MAIN << 16U) | \ - __SC300_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ - -#define __CORTEX_SC (300U) /*!< Cortex secure core */ - -/** __FPU_USED indicates whether an FPU is used or not. - This core does not support an FPU at all -*/ -#define __FPU_USED 0U - -#if defined ( __CC_ARM ) - #if defined __TARGET_FPU_VFP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #if defined __ARM_FP - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __GNUC__ ) - #if defined (__VFP_FP__) && !defined(__SOFTFP__) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __ICCARM__ ) - #if defined __ARMVFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TI_ARM__ ) - #if defined __TI_VFP_SUPPORT__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __TASKING__ ) - #if defined __FPU_VFP__ - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#elif defined ( __CSMC__ ) - #if ( __CSMC__ & 0x400U) - #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" - #endif - -#endif - -#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_SC300_H_GENERIC */ - -#ifndef __CMSIS_GENERIC - -#ifndef __CORE_SC300_H_DEPENDANT -#define __CORE_SC300_H_DEPENDANT - -#ifdef __cplusplus - extern "C" { -#endif - -/* check device defines and use defaults */ -#if defined __CHECK_DEVICE_DEFINES - #ifndef __SC300_REV - #define __SC300_REV 0x0000U - #warning "__SC300_REV not defined in device header file; using default!" - #endif - - #ifndef __MPU_PRESENT - #define __MPU_PRESENT 0U - #warning "__MPU_PRESENT not defined in device header file; using default!" - #endif - - #ifndef __NVIC_PRIO_BITS - #define __NVIC_PRIO_BITS 3U - #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" - #endif - - #ifndef __Vendor_SysTickConfig - #define __Vendor_SysTickConfig 0U - #warning "__Vendor_SysTickConfig not defined in device header file; using default!" - #endif -#endif - -/* IO definitions (access restrictions to peripheral registers) */ -/** - \defgroup CMSIS_glob_defs CMSIS Global Defines - - IO Type Qualifiers are used - \li to specify the access to peripheral variables. - \li for automatic generation of peripheral register debug information. -*/ -#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 */ - -/*@} end of group SC300 */ - - - -/******************************************************************************* - * Register Abstraction - Core Register contain: - - Core Register - - Core NVIC Register - - Core SCB Register - - Core SysTick Register - - Core Debug Register - - Core MPU Register - ******************************************************************************/ -/** - \defgroup CMSIS_core_register Defines and Type Definitions - \brief Type definitions and defines for Cortex-M processor based devices. -*/ - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CORE Status and Control Registers - \brief Core Register type definitions. - @{ - */ - -/** - \brief Union type to access the Application Program Status Register (APSR). - */ -typedef union -{ - struct - { - uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} APSR_Type; - -/* APSR Register Definitions */ -#define APSR_N_Pos 31U /*!< APSR: N Position */ -#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ - -#define APSR_Z_Pos 30U /*!< APSR: Z Position */ -#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ - -#define APSR_C_Pos 29U /*!< APSR: C Position */ -#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ - -#define APSR_V_Pos 28U /*!< APSR: V Position */ -#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ - -#define APSR_Q_Pos 27U /*!< APSR: Q Position */ -#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ - - -/** - \brief Union type to access the Interrupt Program Status Register (IPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} IPSR_Type; - -/* IPSR Register Definitions */ -#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ -#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ - - -/** - \brief Union type to access the Special-Purpose Program Status Registers (xPSR). - */ -typedef union -{ - struct - { - uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ - uint32_t _reserved0:1; /*!< bit: 9 Reserved */ - uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ - uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ - uint32_t T:1; /*!< bit: 24 Thumb bit */ - uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ - uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ - uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ - uint32_t C:1; /*!< bit: 29 Carry condition code flag */ - uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ - uint32_t N:1; /*!< bit: 31 Negative condition code flag */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} xPSR_Type; - -/* xPSR Register Definitions */ -#define xPSR_N_Pos 31U /*!< xPSR: N Position */ -#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ - -#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ -#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ - -#define xPSR_C_Pos 29U /*!< xPSR: C Position */ -#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ - -#define xPSR_V_Pos 28U /*!< xPSR: V Position */ -#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ - -#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ -#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ - -#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ -#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ - -#define xPSR_T_Pos 24U /*!< xPSR: T Position */ -#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ - -#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ -#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ - -#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ -#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ - - -/** - \brief Union type to access the Control Registers (CONTROL). - */ -typedef union -{ - struct - { - uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ - uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ - uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ - } b; /*!< Structure used for bit access */ - uint32_t w; /*!< Type used for word access */ -} CONTROL_Type; - -/* CONTROL Register Definitions */ -#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ -#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ - -#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ -#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ - -/*@} end of group CMSIS_CORE */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) - \brief Type definitions for the NVIC Registers - @{ - */ - -/** - \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). - */ -typedef struct -{ - __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ - uint32_t RESERVED0[24U]; - __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ - uint32_t RSERVED1[24U]; - __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ - uint32_t RESERVED2[24U]; - __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ - uint32_t RESERVED3[24U]; - __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ - uint32_t RESERVED4[56U]; - __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ - uint32_t RESERVED5[644U]; - __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ -} NVIC_Type; - -/* Software Triggered Interrupt Register Definitions */ -#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ -#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_NVIC */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCB System Control Block (SCB) - \brief Type definitions for the System Control Block Registers - @{ - */ - -/** - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ - __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ - __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ - __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ - __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ - __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ - __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ - __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ - __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ - __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ - uint32_t RESERVED0[5U]; - __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ - uint32_t RESERVED1[129U]; - __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ -} SCB_Type; - -/* SCB CPUID Register Definitions */ -#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ -#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ - -#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ -#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ - -#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ -#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ - -#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ -#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ - -#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ -#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ - -/* SCB Interrupt Control State Register Definitions */ -#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ -#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ - -#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ -#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ - -#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ -#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ -#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ - -#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ -#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ - -#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ -#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ - -#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ -#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ - -#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ -#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ - -/* SCB Vector Table Offset Register Definitions */ -#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ -#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ - -#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ -#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ - -/* SCB Application Interrupt and Reset Control Register Definitions */ -#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ -#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ - -#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ -#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ - -#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ -#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ - -#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ -#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ - -#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ -#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ - -#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ -#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ - -#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ -#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ - -/* SCB System Control Register Definitions */ -#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ -#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ - -#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ -#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ - -#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ -#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ - -/* SCB Configuration Control Register Definitions */ -#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ -#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ - -#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ -#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ - -#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ -#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ - -#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ -#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ - -#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ -#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ - -#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ -#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ - -/* SCB System Handler Control and State Register Definitions */ -#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ -#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ - -#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ -#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ - -#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ -#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ - -#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ -#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ - -#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ -#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ - -#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ -#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ - -#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ -#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ - -#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ -#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ - -#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ -#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ - -#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ -#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ - -#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ -#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ - -#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ -#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ - -#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ -#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ - -#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ -#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ - -/* SCB Configurable Fault Status Register Definitions */ -#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ -#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ - -#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ -#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ - -#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ -#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ - -/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ -#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ - -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ -#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ - -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ -#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ - -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ -#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ - -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ -#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ - -/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ -#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ - -#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ -#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ - -#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ -#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ - -#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ -#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ - -#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ -#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ - -#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ -#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ - -/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ -#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ - -#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ -#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ - -#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ -#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ - -#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ -#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ - -#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ -#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ - -#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ -#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ - -/* SCB Hard Fault Status Register Definitions */ -#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ -#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ - -#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ -#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ - -#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ -#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ - -/* SCB Debug Fault Status Register Definitions */ -#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ -#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ - -#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ -#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ - -#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ -#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ - -#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ -#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ - -#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ -#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ - -/*@} end of group CMSIS_SCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) - \brief Type definitions for the System Control and ID Register not in the SCB - @{ - */ - -/** - \brief Structure type to access the System Control and ID Register not in the SCB. - */ -typedef struct -{ - uint32_t RESERVED0[1U]; - __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ - uint32_t RESERVED1[1U]; -} SCnSCB_Type; - -/* Interrupt Controller Type Register Definitions */ -#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ -#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ - -/*@} end of group CMSIS_SCnotSCB */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_SysTick System Tick Timer (SysTick) - \brief Type definitions for the System Timer Registers. - @{ - */ - -/** - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) - \brief Type definitions for the Instrumentation Trace Macrocell (ITM) - @{ - */ - -/** - \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). - */ -typedef struct -{ - __OM union - { - __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ - __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ - __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ - } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ - uint32_t RESERVED0[864U]; - __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ - uint32_t RESERVED1[15U]; - __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ - uint32_t RESERVED2[15U]; - __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ - uint32_t RESERVED3[29U]; - __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ - __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ - __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ - uint32_t RESERVED4[43U]; - __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ - __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ - uint32_t RESERVED5[6U]; - __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ - __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ - __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ - __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ - __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ - __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ - __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ - __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ - __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ - __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ - __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ - __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ -} ITM_Type; - -/* ITM Trace Privilege Register Definitions */ -#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ -#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ - -/* ITM Trace Control Register Definitions */ -#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ -#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ - -#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ -#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ - -#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ -#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ - -#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ -#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ - -#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ -#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ - -#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ -#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ - -#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ -#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ - -#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ -#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ - -#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ -#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ - -/* ITM Integration Write Register Definitions */ -#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ -#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ - -/* ITM Integration Read Register Definitions */ -#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ -#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ - -/* ITM Integration Mode Control Register Definitions */ -#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ -#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ - -/* ITM Lock Status Register Definitions */ -#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ -#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ - -#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ -#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ - -#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ -#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ - -/*@}*/ /* end of group CMSIS_ITM */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) - \brief Type definitions for the Data Watchpoint and Trace (DWT) - @{ - */ - -/** - \brief Structure type to access the Data Watchpoint and Trace Register (DWT). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ - __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ - __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ - __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ - __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ - __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ - __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ - __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ - __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ - __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ - __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ - uint32_t RESERVED0[1U]; - __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ - __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ - __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ - uint32_t RESERVED1[1U]; - __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ - __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ - __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ - uint32_t RESERVED2[1U]; - __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ - __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ - __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ -} DWT_Type; - -/* DWT Control Register Definitions */ -#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ -#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ - -#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ -#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ - -#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ -#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ - -#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ -#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ - -#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ -#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ - -#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ -#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ - -#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ -#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ - -#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ -#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ - -#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ -#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ - -#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ -#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ - -#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ -#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ - -#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ -#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ - -#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ -#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ - -#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ -#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ - -#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ -#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ - -#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ -#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ - -#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ -#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ - -#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ -#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ - -/* DWT CPI Count Register Definitions */ -#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ -#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ - -/* DWT Exception Overhead Count Register Definitions */ -#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ -#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ - -/* DWT Sleep Count Register Definitions */ -#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ -#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ - -/* DWT LSU Count Register Definitions */ -#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ -#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ - -/* DWT Folded-instruction Count Register Definitions */ -#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ -#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ - -/* DWT Comparator Mask Register Definitions */ -#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ -#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ - -/* DWT Comparator Function Register Definitions */ -#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ -#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ - -#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ -#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ - -#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ -#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ - -#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ -#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ - -#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ -#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ - -#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ -#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ - -#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ -#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ - -#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ -#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ - -#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ -#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ - -/*@}*/ /* end of group CMSIS_DWT */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_TPI Trace Port Interface (TPI) - \brief Type definitions for the Trace Port Interface (TPI) - @{ - */ - -/** - \brief Structure type to access the Trace Port Interface Register (TPI). - */ -typedef struct -{ - __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ - __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ - uint32_t RESERVED0[2U]; - __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ - uint32_t RESERVED1[55U]; - __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ - uint32_t RESERVED2[131U]; - __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ - __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ - __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ - uint32_t RESERVED3[759U]; - __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ - __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ - __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ - uint32_t RESERVED4[1U]; - __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ - __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ - __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ - uint32_t RESERVED5[39U]; - __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ - __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ - uint32_t RESERVED7[8U]; - __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ - __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ -} TPI_Type; - -/* TPI Asynchronous Clock Prescaler Register Definitions */ -#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ -#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ - -/* TPI Selected Pin Protocol Register Definitions */ -#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ -#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ - -/* TPI Formatter and Flush Status Register Definitions */ -#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ -#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ - -#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ -#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ - -#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ -#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ - -#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ -#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ - -/* TPI Formatter and Flush Control Register Definitions */ -#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ -#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ - -#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ -#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ - -/* TPI TRIGGER Register Definitions */ -#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ -#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ - -/* TPI Integration ETM Data Register Definitions (FIFO0) */ -#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ -#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ - -#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ -#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ - -#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ -#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ - -#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ -#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ - -#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ -#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ - -#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ -#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ - -#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ -#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ - -/* TPI ITATBCTR2 Register Definitions */ -#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ -#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ - -#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ -#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ - -/* TPI Integration ITM Data Register Definitions (FIFO1) */ -#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ -#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ - -#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ -#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ - -#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ -#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ - -#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ -#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ - -#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ -#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ - -#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ -#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ - -#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ -#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ - -/* TPI ITATBCTR0 Register Definitions */ -#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ -#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ - -#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ -#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ - -/* TPI Integration Mode Control Register Definitions */ -#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ -#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ - -/* TPI DEVID Register Definitions */ -#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ -#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ - -#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ -#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ - -#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ -#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ - -#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ -#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ - -#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ -#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ - -#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ -#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ - -/* TPI DEVTYPE Register Definitions */ -#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ -#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ - -#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ -#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ - -/*@}*/ /* end of group CMSIS_TPI */ - - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_MPU Memory Protection Unit (MPU) - \brief Type definitions for the Memory Protection Unit (MPU) - @{ - */ - -/** - \brief Structure type to access the Memory Protection Unit (MPU). - */ -typedef struct -{ - __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ - __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ - __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ - __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ - __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ - __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ - __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ - __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ - __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ - __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ - __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ -} MPU_Type; - -/* MPU Type Register Definitions */ -#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ -#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ - -#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ -#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ - -#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ -#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ - -/* MPU Control Register Definitions */ -#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ -#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ - -#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ -#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ - -#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ -#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ - -/* MPU Region Number Register Definitions */ -#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ -#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ - -/* MPU Region Base Address Register Definitions */ -#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ -#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ - -#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ -#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ - -#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ -#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ - -/* MPU Region Attribute and Size Register Definitions */ -#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ -#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ - -#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ -#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ - -#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ -#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ - -#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ -#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ - -#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ -#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ - -#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ -#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ - -#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ -#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ - -#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ -#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ - -#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ -#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ - -#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ -#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ - -/*@} end of group CMSIS_MPU */ -#endif - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) - \brief Type definitions for the Core Debug Registers - @{ - */ - -/** - \brief Structure type to access the Core Debug Register (CoreDebug). - */ -typedef struct -{ - __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ - __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ - __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ - __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ -} CoreDebug_Type; - -/* Debug Halting Control and Status Register Definitions */ -#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ -#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ - -#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ -#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ - -#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ -#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ - -#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ -#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ - -#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ -#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ - -#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ -#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ - -#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ -#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ - -#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ -#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ - -#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ -#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ - -#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ -#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ - -#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ -#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ - -#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ -#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ - -/* Debug Core Register Selector Register Definitions */ -#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ -#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ - -#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ -#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ - -/* Debug Exception and Monitor Control Register Definitions */ -#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ -#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ - -#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ -#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ - -#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ -#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ - -#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ -#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ - -#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ -#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ - -#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ -#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ - -#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ -#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ - -#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ -#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ - -#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ -#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ - -#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ -#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ - -#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ -#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ - -#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ -#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ - -#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ -#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ - -/*@} end of group CMSIS_CoreDebug */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_bitfield Core register bit field macros - \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). - @{ - */ - -/** - \brief Mask and shift a bit field value for use in a register bit range. - \param[in] field Name of the register bit field. - \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. - \return Masked and shifted value. -*/ -#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) - -/** - \brief Mask and shift a register value to extract a bit filed value. - \param[in] field Name of the register bit field. - \param[in] value Value of register. This parameter is interpreted as an uint32_t type. - \return Masked and shifted bit field value. -*/ -#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) - -/*@} end of group CMSIS_core_bitfield */ - - -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_core_base Core Definitions - \brief Definitions for base addresses, unions, and structures. - @{ - */ - -/* Memory mapping of Core Hardware */ -#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ -#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ -#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ -#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ -#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ -#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - -#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ -#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ -#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ -#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ -#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ -#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ -#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ -#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ - -#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) - #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ - #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ -#endif - -/*@} */ - - - -/******************************************************************************* - * Hardware Abstraction Layer - Core Function Interface contains: - - Core NVIC Functions - - Core SysTick Functions - - Core Debug Functions - - Core Register Access Functions - ******************************************************************************/ -/** - \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference -*/ - - - -/* ########################## NVIC functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_NVICFunctions NVIC Functions - \brief Functions that manage interrupts and exceptions via the NVIC. - @{ - */ - -#ifdef CMSIS_NVIC_VIRTUAL - #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE - #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" - #endif - #include CMSIS_NVIC_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping - #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping - #define NVIC_EnableIRQ __NVIC_EnableIRQ - #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ - #define NVIC_DisableIRQ __NVIC_DisableIRQ - #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ - #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ - #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ - #define NVIC_GetActive __NVIC_GetActive - #define NVIC_SetPriority __NVIC_SetPriority - #define NVIC_GetPriority __NVIC_GetPriority - #define NVIC_SystemReset __NVIC_SystemReset -#endif /* CMSIS_NVIC_VIRTUAL */ - -#ifdef CMSIS_VECTAB_VIRTUAL - #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE - #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" - #endif - #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE -#else - #define NVIC_SetVector __NVIC_SetVector - #define NVIC_GetVector __NVIC_GetVector -#endif /* (CMSIS_VECTAB_VIRTUAL) */ - -#define NVIC_USER_IRQ_OFFSET 16 - - -/* The following EXC_RETURN values are saved the LR on exception entry */ -#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ -#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ -#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ - - - -/** - \brief Set Priority Grouping - \details Sets the priority grouping field using the required unlock sequence. - The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. - Only values from 0..7 are used. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Priority grouping field. - */ -__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) -{ - uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - reg_value = (reg_value | - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ - SCB->AIRCR = reg_value; -} - - -/** - \brief Get Priority Grouping - \details Reads the priority grouping field from the NVIC Interrupt Controller. - \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). - */ -__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) -{ - return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); -} - - -/** - \brief Enable Interrupt - \details Enables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Interrupt Enable status - \details Returns a device specific interrupt enable status from the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt is not enabled. - \return 1 Interrupt is enabled. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Disable Interrupt - \details Disables a device specific interrupt in the NVIC interrupt controller. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - __DSB(); - __ISB(); - } -} - - -/** - \brief Get Pending Interrupt - \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not pending. - \return 1 Interrupt status is pending. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Pending Interrupt - \details Sets the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Clear Pending Interrupt - \details Clears the pending bit of a device specific interrupt in the NVIC pending register. - \param [in] IRQn Device specific interrupt number. - \note IRQn must not be negative. - */ -__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - } -} - - -/** - \brief Get Active Interrupt - \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. - \param [in] IRQn Device specific interrupt number. - \return 0 Interrupt status is not active. - \return 1 Interrupt status is active. - \note IRQn must not be negative. - */ -__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) -{ - if ((int32_t)(IRQn) >= 0) - { - return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); - } - else - { - return(0U); - } -} - - -/** - \brief Set Interrupt Priority - \details Sets the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \param [in] priority Priority to set. - \note The priority cannot be set for every processor exception. - */ -__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) -{ - if ((int32_t)(IRQn) >= 0) - { - NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } - else - { - SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - } -} - - -/** - \brief Get Interrupt Priority - \details Reads the priority of a device specific interrupt or a processor exception. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Interrupt Priority. - Value is aligned automatically to the implemented priority bits of the microcontroller. - */ -__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) -{ - - if ((int32_t)(IRQn) >= 0) - { - return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); - } - else - { - return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); - } -} - - -/** - \brief Encode Priority - \details Encodes the priority for an interrupt with the given priority group, - preemptive priority value, and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. - \param [in] PriorityGroup Used priority group. - \param [in] PreemptPriority Preemptive priority value (starting from 0). - \param [in] SubPriority Subpriority value (starting from 0). - \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). - */ -__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - return ( - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - ); -} - - -/** - \brief Decode Priority - \details Decodes an interrupt priority value with a given priority group to - preemptive priority value and subpriority value. - In case of a conflict between priority grouping and available - priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. - \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). - \param [in] PriorityGroup Used priority group. - \param [out] pPreemptPriority Preemptive priority value (starting from 0). - \param [out] pSubPriority Subpriority value (starting from 0). - */ -__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) -{ - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - uint32_t PreemptPriorityBits; - uint32_t SubPriorityBits; - - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - - *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); - *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); -} - - -/** - \brief Set Interrupt Vector - \details Sets an interrupt vector in SRAM based interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - VTOR must been relocated to SRAM before. - \param [in] IRQn Interrupt number - \param [in] vector Address of interrupt handler function - */ -__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; -} - - -/** - \brief Get Interrupt Vector - \details Reads an interrupt vector from interrupt vector table. - The interrupt number can be positive to specify a device specific interrupt, - or negative to specify a processor exception. - \param [in] IRQn Interrupt number. - \return Address of interrupt handler function - */ -__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) -{ - uint32_t *vectors = (uint32_t *)SCB->VTOR; - return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; -} - - -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - } -} - -/*@} end of CMSIS_Core_NVICFunctions */ - - -/* ########################## FPU functions #################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_FpuFunctions FPU Functions - \brief Function that provides FPU type. - @{ - */ - -/** - \brief get FPU type - \details returns the FPU type - \returns - - \b 0: No FPU - - \b 1: Single precision FPU - - \b 2: Double + Single precision FPU - */ -__STATIC_INLINE uint32_t SCB_GetFPUType(void) -{ - return 0U; /* No FPU */ -} - - -/*@} end of CMSIS_Core_FpuFunctions */ - - - -/* ################################## SysTick function ############################################ */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_SysTickFunctions SysTick Functions - \brief Functions that configure the System. - @{ - */ - -#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) - -/** - \brief System Tick Configuration - \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. - Counter is in free running mode to generate periodic interrupts. - \param [in] ticks Number of ticks between two interrupts. - \return 0 Function succeeded. - \return 1 Function failed. - \note When the variable __Vendor_SysTickConfig is set to 1, then the - function SysTick_Config is not included. In this case, the file device.h - must contain a vendor-specific implementation of this function. - */ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ -} - -#endif - -/*@} end of CMSIS_Core_SysTickFunctions */ - - - -/* ##################################### Debug In/Output function ########################################### */ -/** - \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_core_DebugFunctions ITM Functions - \brief Functions that access the ITM debug interface. - @{ - */ - -extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ -#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ - - -/** - \brief ITM Send Character - \details Transmits a character via the ITM channel 0, and - \li Just returns when no debugger is connected that has booked the output. - \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. - \param [in] ch Character to transmit. - \returns Character to transmit. - */ -__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) -{ - if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ - ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ - { - while (ITM->PORT[0U].u32 == 0UL) - { - __NOP(); - } - ITM->PORT[0U].u8 = (uint8_t)ch; - } - return (ch); -} - - -/** - \brief ITM Receive Character - \details Inputs a character via the external variable \ref ITM_RxBuffer. - \return Received character. - \return -1 No character pending. - */ -__STATIC_INLINE int32_t ITM_ReceiveChar (void) -{ - int32_t ch = -1; /* no character available */ - - if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) - { - ch = ITM_RxBuffer; - ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ - } - - return (ch); -} - - -/** - \brief ITM Check Character - \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. - \return 0 No character available. - \return 1 Character available. - */ -__STATIC_INLINE int32_t ITM_CheckChar (void) -{ - - if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) - { - return (0); /* no character available */ - } - else - { - return (1); /* character available */ - } -} - -/*@} end of CMSIS_core_DebugFunctions */ - - - - -#ifdef __cplusplus -} -#endif - -#endif /* __CORE_SC300_H_DEPENDANT */ - -#endif /* __CMSIS_GENERIC */ diff --git a/include/cmsis/mbed_tz_context.c b/include/cmsis/mbed_tz_context.c deleted file mode 100644 index 17bf625..0000000 --- a/include/cmsis/mbed_tz_context.c +++ /dev/null @@ -1,207 +0,0 @@ -/****************************************************************************** - * @file tz_context.c - * @brief Context Management for Armv8-M TrustZone - Sample implementation - * @version V1.1.1 - * @date 10. January 2018 - ******************************************************************************/ -/* - * Copyright (c) 2016-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if !TARGET_TFM - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - -#include "RTE_Components.h" -#include CMSIS_device_header -#include "tz_context.h" - -/// Number of process slots (threads may call secure library code) -#ifndef TZ_PROCESS_STACK_SLOTS -#define TZ_PROCESS_STACK_SLOTS 8U -#endif - -/// Stack size of the secure library code -#ifndef TZ_PROCESS_STACK_SIZE -#define TZ_PROCESS_STACK_SIZE 256U -#endif - -typedef struct { - uint32_t sp_top; // stack space top - uint32_t sp_limit; // stack space limit - uint32_t sp; // current stack pointer -} stack_info_t; - -static stack_info_t ProcessStackInfo [TZ_PROCESS_STACK_SLOTS]; -static uint64_t ProcessStackMemory[TZ_PROCESS_STACK_SLOTS][TZ_PROCESS_STACK_SIZE/8U]; -static uint32_t ProcessStackFreeSlot = 0xFFFFFFFFU; - - -/// Initialize secure context memory system -/// \return execution status (1: success, 0: error) -__attribute__((cmse_nonsecure_entry)) -uint32_t TZ_InitContextSystem_S (void) { - uint32_t n; - - if (__get_IPSR() == 0U) { - return 0U; // Thread Mode - } - - for (n = 0U; n < TZ_PROCESS_STACK_SLOTS; n++) { - ProcessStackInfo[n].sp = 0U; - ProcessStackInfo[n].sp_limit = (uint32_t)&ProcessStackMemory[n]; - ProcessStackInfo[n].sp_top = (uint32_t)&ProcessStackMemory[n] + TZ_PROCESS_STACK_SIZE; - *((uint32_t *)ProcessStackMemory[n]) = n + 1U; - } - *((uint32_t *)ProcessStackMemory[--n]) = 0xFFFFFFFFU; - - ProcessStackFreeSlot = 0U; - - // Default process stack pointer and stack limit - __set_PSPLIM((uint32_t)ProcessStackMemory); - __set_PSP ((uint32_t)ProcessStackMemory); - - // Privileged Thread Mode using PSP - __set_CONTROL(0x02U); - - return 1U; // Success -} - - -/// Allocate context memory for calling secure software modules in TrustZone -/// \param[in] module identifies software modules called from non-secure mode -/// \return value != 0 id TrustZone memory slot identifier -/// \return value 0 no memory available or internal error -__attribute__((cmse_nonsecure_entry)) -TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module) { - uint32_t slot; - - (void)module; // Ignore (fixed Stack size) - - if (__get_IPSR() == 0U) { - return 0U; // Thread Mode - } - - if (ProcessStackFreeSlot == 0xFFFFFFFFU) { - return 0U; // No slot available - } - - slot = ProcessStackFreeSlot; - ProcessStackFreeSlot = *((uint32_t *)ProcessStackMemory[slot]); - - ProcessStackInfo[slot].sp = ProcessStackInfo[slot].sp_top; - - return (slot + 1U); -} - - -/// Free context memory that was previously allocated with \ref TZ_AllocModuleContext_S -/// \param[in] id TrustZone memory slot identifier -/// \return execution status (1: success, 0: error) -__attribute__((cmse_nonsecure_entry)) -uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id) { - uint32_t slot; - - if (__get_IPSR() == 0U) { - return 0U; // Thread Mode - } - - if ((id == 0U) || (id > TZ_PROCESS_STACK_SLOTS)) { - return 0U; // Invalid ID - } - - slot = id - 1U; - - if (ProcessStackInfo[slot].sp == 0U) { - return 0U; // Inactive slot - } - ProcessStackInfo[slot].sp = 0U; - - *((uint32_t *)ProcessStackMemory[slot]) = ProcessStackFreeSlot; - ProcessStackFreeSlot = slot; - - return 1U; // Success -} - - -/// Load secure context (called on RTOS thread context switch) -/// \param[in] id TrustZone memory slot identifier -/// \return execution status (1: success, 0: error) -__attribute__((cmse_nonsecure_entry)) -uint32_t TZ_LoadContext_S (TZ_MemoryId_t id) { - uint32_t slot; - - if ((__get_IPSR() == 0U) || ((__get_CONTROL() & 2U) == 0U)) { - return 0U; // Thread Mode or using Main Stack for threads - } - - if ((id == 0U) || (id > TZ_PROCESS_STACK_SLOTS)) { - return 0U; // Invalid ID - } - - slot = id - 1U; - - if (ProcessStackInfo[slot].sp == 0U) { - return 0U; // Inactive slot - } - - // Setup process stack pointer and stack limit - __set_PSPLIM(ProcessStackInfo[slot].sp_limit); - __set_PSP (ProcessStackInfo[slot].sp); - - return 1U; // Success -} - - -/// Store secure context (called on RTOS thread context switch) -/// \param[in] id TrustZone memory slot identifier -/// \return execution status (1: success, 0: error) -__attribute__((cmse_nonsecure_entry)) -uint32_t TZ_StoreContext_S (TZ_MemoryId_t id) { - uint32_t slot; - uint32_t sp; - - if ((__get_IPSR() == 0U) || ((__get_CONTROL() & 2U) == 0U)) { - return 0U; // Thread Mode or using Main Stack for threads - } - - if ((id == 0U) || (id > TZ_PROCESS_STACK_SLOTS)) { - return 0U; // Invalid ID - } - - slot = id - 1U; - - if (ProcessStackInfo[slot].sp == 0U) { - return 0U; // Inactive slot - } - - sp = __get_PSP(); - if ((sp < ProcessStackInfo[slot].sp_limit) || - (sp > ProcessStackInfo[slot].sp_top)) { - return 0U; // SP out of range - } - ProcessStackInfo[slot].sp = sp; - - // Default process stack pointer and stack limit - __set_PSPLIM((uint32_t)ProcessStackMemory); - __set_PSP ((uint32_t)ProcessStackMemory); - - return 1U; // Success -} -#endif - -#endif // !TARGET_TFM diff --git a/include/cmsis/mpu_armv7.h b/include/cmsis/mpu_armv7.h deleted file mode 100644 index 66ef59b..0000000 --- a/include/cmsis/mpu_armv7.h +++ /dev/null @@ -1,272 +0,0 @@ -/****************************************************************************** - * @file mpu_armv7.h - * @brief CMSIS MPU API for Armv7-M MPU - * @version V5.1.0 - * @date 08. March 2019 - ******************************************************************************/ -/* - * Copyright (c) 2017-2019 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef ARM_MPU_ARMV7_H -#define ARM_MPU_ARMV7_H - -#define ARM_MPU_REGION_SIZE_32B ((uint8_t)0x04U) ///!< MPU Region Size 32 Bytes -#define ARM_MPU_REGION_SIZE_64B ((uint8_t)0x05U) ///!< MPU Region Size 64 Bytes -#define ARM_MPU_REGION_SIZE_128B ((uint8_t)0x06U) ///!< MPU Region Size 128 Bytes -#define ARM_MPU_REGION_SIZE_256B ((uint8_t)0x07U) ///!< MPU Region Size 256 Bytes -#define ARM_MPU_REGION_SIZE_512B ((uint8_t)0x08U) ///!< MPU Region Size 512 Bytes -#define ARM_MPU_REGION_SIZE_1KB ((uint8_t)0x09U) ///!< MPU Region Size 1 KByte -#define ARM_MPU_REGION_SIZE_2KB ((uint8_t)0x0AU) ///!< MPU Region Size 2 KBytes -#define ARM_MPU_REGION_SIZE_4KB ((uint8_t)0x0BU) ///!< MPU Region Size 4 KBytes -#define ARM_MPU_REGION_SIZE_8KB ((uint8_t)0x0CU) ///!< MPU Region Size 8 KBytes -#define ARM_MPU_REGION_SIZE_16KB ((uint8_t)0x0DU) ///!< MPU Region Size 16 KBytes -#define ARM_MPU_REGION_SIZE_32KB ((uint8_t)0x0EU) ///!< MPU Region Size 32 KBytes -#define ARM_MPU_REGION_SIZE_64KB ((uint8_t)0x0FU) ///!< MPU Region Size 64 KBytes -#define ARM_MPU_REGION_SIZE_128KB ((uint8_t)0x10U) ///!< MPU Region Size 128 KBytes -#define ARM_MPU_REGION_SIZE_256KB ((uint8_t)0x11U) ///!< MPU Region Size 256 KBytes -#define ARM_MPU_REGION_SIZE_512KB ((uint8_t)0x12U) ///!< MPU Region Size 512 KBytes -#define ARM_MPU_REGION_SIZE_1MB ((uint8_t)0x13U) ///!< MPU Region Size 1 MByte -#define ARM_MPU_REGION_SIZE_2MB ((uint8_t)0x14U) ///!< MPU Region Size 2 MBytes -#define ARM_MPU_REGION_SIZE_4MB ((uint8_t)0x15U) ///!< MPU Region Size 4 MBytes -#define ARM_MPU_REGION_SIZE_8MB ((uint8_t)0x16U) ///!< MPU Region Size 8 MBytes -#define ARM_MPU_REGION_SIZE_16MB ((uint8_t)0x17U) ///!< MPU Region Size 16 MBytes -#define ARM_MPU_REGION_SIZE_32MB ((uint8_t)0x18U) ///!< MPU Region Size 32 MBytes -#define ARM_MPU_REGION_SIZE_64MB ((uint8_t)0x19U) ///!< MPU Region Size 64 MBytes -#define ARM_MPU_REGION_SIZE_128MB ((uint8_t)0x1AU) ///!< MPU Region Size 128 MBytes -#define ARM_MPU_REGION_SIZE_256MB ((uint8_t)0x1BU) ///!< MPU Region Size 256 MBytes -#define ARM_MPU_REGION_SIZE_512MB ((uint8_t)0x1CU) ///!< MPU Region Size 512 MBytes -#define ARM_MPU_REGION_SIZE_1GB ((uint8_t)0x1DU) ///!< MPU Region Size 1 GByte -#define ARM_MPU_REGION_SIZE_2GB ((uint8_t)0x1EU) ///!< MPU Region Size 2 GBytes -#define ARM_MPU_REGION_SIZE_4GB ((uint8_t)0x1FU) ///!< MPU Region Size 4 GBytes - -#define ARM_MPU_AP_NONE 0U ///!< MPU Access Permission no access -#define ARM_MPU_AP_PRIV 1U ///!< MPU Access Permission privileged access only -#define ARM_MPU_AP_URO 2U ///!< MPU Access Permission unprivileged access read-only -#define ARM_MPU_AP_FULL 3U ///!< MPU Access Permission full access -#define ARM_MPU_AP_PRO 5U ///!< MPU Access Permission privileged access read-only -#define ARM_MPU_AP_RO 6U ///!< MPU Access Permission read-only access - -/** MPU Region Base Address Register Value -* -* \param Region The region to be configured, number 0 to 15. -* \param BaseAddress The base address for the region. -*/ -#define ARM_MPU_RBAR(Region, BaseAddress) \ - (((BaseAddress) & MPU_RBAR_ADDR_Msk) | \ - ((Region) & MPU_RBAR_REGION_Msk) | \ - (MPU_RBAR_VALID_Msk)) - -/** -* MPU Memory Access Attributes -* -* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. -* \param IsShareable Region is shareable between multiple bus masters. -* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. -* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. -*/ -#define ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable) \ - ((((TypeExtField) << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) | \ - (((IsShareable) << MPU_RASR_S_Pos) & MPU_RASR_S_Msk) | \ - (((IsCacheable) << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) | \ - (((IsBufferable) << MPU_RASR_B_Pos) & MPU_RASR_B_Msk)) - -/** -* MPU Region Attribute and Size Register Value -* -* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. -* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. -* \param AccessAttributes Memory access attribution, see \ref ARM_MPU_ACCESS_. -* \param SubRegionDisable Sub-region disable field. -* \param Size Region size of the region to be configured, for example 4K, 8K. -*/ -#define ARM_MPU_RASR_EX(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size) \ - ((((DisableExec) << MPU_RASR_XN_Pos) & MPU_RASR_XN_Msk) | \ - (((AccessPermission) << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) | \ - (((AccessAttributes) & (MPU_RASR_TEX_Msk | MPU_RASR_S_Msk | MPU_RASR_C_Msk | MPU_RASR_B_Msk))) | \ - (((SubRegionDisable) << MPU_RASR_SRD_Pos) & MPU_RASR_SRD_Msk) | \ - (((Size) << MPU_RASR_SIZE_Pos) & MPU_RASR_SIZE_Msk) | \ - (((MPU_RASR_ENABLE_Msk)))) - -/** -* MPU Region Attribute and Size Register Value -* -* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. -* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. -* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. -* \param IsShareable Region is shareable between multiple bus masters. -* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. -* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. -* \param SubRegionDisable Sub-region disable field. -* \param Size Region size of the region to be configured, for example 4K, 8K. -*/ -#define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size) \ - ARM_MPU_RASR_EX(DisableExec, AccessPermission, ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable), SubRegionDisable, Size) - -/** -* MPU Memory Access Attribute for strongly ordered memory. -* - TEX: 000b -* - Shareable -* - Non-cacheable -* - Non-bufferable -*/ -#define ARM_MPU_ACCESS_ORDERED ARM_MPU_ACCESS_(0U, 1U, 0U, 0U) - -/** -* MPU Memory Access Attribute for device memory. -* - TEX: 000b (if shareable) or 010b (if non-shareable) -* - Shareable or non-shareable -* - Non-cacheable -* - Bufferable (if shareable) or non-bufferable (if non-shareable) -* -* \param IsShareable Configures the device memory as shareable or non-shareable. -*/ -#define ARM_MPU_ACCESS_DEVICE(IsShareable) ((IsShareable) ? ARM_MPU_ACCESS_(0U, 1U, 0U, 1U) : ARM_MPU_ACCESS_(2U, 0U, 0U, 0U)) - -/** -* MPU Memory Access Attribute for normal memory. -* - TEX: 1BBb (reflecting outer cacheability rules) -* - Shareable or non-shareable -* - Cacheable or non-cacheable (reflecting inner cacheability rules) -* - Bufferable or non-bufferable (reflecting inner cacheability rules) -* -* \param OuterCp Configures the outer cache policy. -* \param InnerCp Configures the inner cache policy. -* \param IsShareable Configures the memory as shareable or non-shareable. -*/ -#define ARM_MPU_ACCESS_NORMAL(OuterCp, InnerCp, IsShareable) ARM_MPU_ACCESS_((4U | (OuterCp)), IsShareable, ((InnerCp) & 2U), ((InnerCp) & 1U)) - -/** -* MPU Memory Access Attribute non-cacheable policy. -*/ -#define ARM_MPU_CACHEP_NOCACHE 0U - -/** -* MPU Memory Access Attribute write-back, write and read allocate policy. -*/ -#define ARM_MPU_CACHEP_WB_WRA 1U - -/** -* MPU Memory Access Attribute write-through, no write allocate policy. -*/ -#define ARM_MPU_CACHEP_WT_NWA 2U - -/** -* MPU Memory Access Attribute write-back, no write allocate policy. -*/ -#define ARM_MPU_CACHEP_WB_NWA 3U - - -/** -* Struct for a single MPU Region -*/ -typedef struct { - uint32_t RBAR; //!< The region base address register value (RBAR) - uint32_t RASR; //!< The region attribute and size register value (RASR) \ref MPU_RASR -} ARM_MPU_Region_t; - -/** Enable the MPU. -* \param MPU_Control Default access permissions for unconfigured regions. -*/ -__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) -{ - MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; -#ifdef SCB_SHCSR_MEMFAULTENA_Msk - SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; -#endif - __DSB(); - __ISB(); -} - -/** Disable the MPU. -*/ -__STATIC_INLINE void ARM_MPU_Disable(void) -{ - __DMB(); -#ifdef SCB_SHCSR_MEMFAULTENA_Msk - SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; -#endif - MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; -} - -/** Clear and disable the given MPU region. -* \param rnr Region number to be cleared. -*/ -__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) -{ - MPU->RNR = rnr; - MPU->RASR = 0U; -} - -/** Configure an MPU region. -* \param rbar Value for RBAR register. -* \param rsar Value for RSAR register. -*/ -__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr) -{ - MPU->RBAR = rbar; - MPU->RASR = rasr; -} - -/** Configure the given MPU region. -* \param rnr Region number to be configured. -* \param rbar Value for RBAR register. -* \param rsar Value for RSAR register. -*/ -__STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr) -{ - MPU->RNR = rnr; - MPU->RBAR = rbar; - MPU->RASR = rasr; -} - -/** Memcopy with strictly ordered memory access, e.g. for register targets. -* \param dst Destination data is copied to. -* \param src Source data is copied from. -* \param len Amount of data words to be copied. -*/ -__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) -{ - uint32_t i; - for (i = 0U; i < len; ++i) - { - dst[i] = src[i]; - } -} - -/** Load the given number of MPU regions from a table. -* \param table Pointer to the MPU configuration table. -* \param cnt Amount of regions to be configured. -*/ -__STATIC_INLINE void ARM_MPU_Load(ARM_MPU_Region_t const* table, uint32_t cnt) -{ - const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; - while (cnt > MPU_TYPE_RALIASES) { - ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), MPU_TYPE_RALIASES*rowWordSize); - table += MPU_TYPE_RALIASES; - cnt -= MPU_TYPE_RALIASES; - } - ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), cnt*rowWordSize); -} - -#endif diff --git a/include/cmsis/mpu_armv8.h b/include/cmsis/mpu_armv8.h deleted file mode 100644 index 0041d4d..0000000 --- a/include/cmsis/mpu_armv8.h +++ /dev/null @@ -1,346 +0,0 @@ -/****************************************************************************** - * @file mpu_armv8.h - * @brief CMSIS MPU API for Armv8-M and Armv8.1-M MPU - * @version V5.1.0 - * @date 08. March 2019 - ******************************************************************************/ -/* - * Copyright (c) 2017-2019 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef ARM_MPU_ARMV8_H -#define ARM_MPU_ARMV8_H - -/** \brief Attribute for device memory (outer only) */ -#define ARM_MPU_ATTR_DEVICE ( 0U ) - -/** \brief Attribute for non-cacheable, normal memory */ -#define ARM_MPU_ATTR_NON_CACHEABLE ( 4U ) - -/** \brief Attribute for normal memory (outer and inner) -* \param NT Non-Transient: Set to 1 for non-transient data. -* \param WB Write-Back: Set to 1 to use write-back update policy. -* \param RA Read Allocation: Set to 1 to use cache allocation on read miss. -* \param WA Write Allocation: Set to 1 to use cache allocation on write miss. -*/ -#define ARM_MPU_ATTR_MEMORY_(NT, WB, RA, WA) \ - (((NT & 1U) << 3U) | ((WB & 1U) << 2U) | ((RA & 1U) << 1U) | (WA & 1U)) - -/** \brief Device memory type non Gathering, non Re-ordering, non Early Write Acknowledgement */ -#define ARM_MPU_ATTR_DEVICE_nGnRnE (0U) - -/** \brief Device memory type non Gathering, non Re-ordering, Early Write Acknowledgement */ -#define ARM_MPU_ATTR_DEVICE_nGnRE (1U) - -/** \brief Device memory type non Gathering, Re-ordering, Early Write Acknowledgement */ -#define ARM_MPU_ATTR_DEVICE_nGRE (2U) - -/** \brief Device memory type Gathering, Re-ordering, Early Write Acknowledgement */ -#define ARM_MPU_ATTR_DEVICE_GRE (3U) - -/** \brief Memory Attribute -* \param O Outer memory attributes -* \param I O == ARM_MPU_ATTR_DEVICE: Device memory attributes, else: Inner memory attributes -*/ -#define ARM_MPU_ATTR(O, I) (((O & 0xFU) << 4U) | (((O & 0xFU) != 0U) ? (I & 0xFU) : ((I & 0x3U) << 2U))) - -/** \brief Normal memory non-shareable */ -#define ARM_MPU_SH_NON (0U) - -/** \brief Normal memory outer shareable */ -#define ARM_MPU_SH_OUTER (2U) - -/** \brief Normal memory inner shareable */ -#define ARM_MPU_SH_INNER (3U) - -/** \brief Memory access permissions -* \param RO Read-Only: Set to 1 for read-only memory. -* \param NP Non-Privileged: Set to 1 for non-privileged memory. -*/ -#define ARM_MPU_AP_(RO, NP) (((RO & 1U) << 1U) | (NP & 1U)) - -/** \brief Region Base Address Register value -* \param BASE The base address bits [31:5] of a memory region. The value is zero extended. Effective address gets 32 byte aligned. -* \param SH Defines the Shareability domain for this memory region. -* \param RO Read-Only: Set to 1 for a read-only memory region. -* \param NP Non-Privileged: Set to 1 for a non-privileged memory region. -* \oaram XN eXecute Never: Set to 1 for a non-executable memory region. -*/ -#define ARM_MPU_RBAR(BASE, SH, RO, NP, XN) \ - ((BASE & MPU_RBAR_BASE_Msk) | \ - ((SH << MPU_RBAR_SH_Pos) & MPU_RBAR_SH_Msk) | \ - ((ARM_MPU_AP_(RO, NP) << MPU_RBAR_AP_Pos) & MPU_RBAR_AP_Msk) | \ - ((XN << MPU_RBAR_XN_Pos) & MPU_RBAR_XN_Msk)) - -/** \brief Region Limit Address Register value -* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended. -* \param IDX The attribute index to be associated with this memory region. -*/ -#define ARM_MPU_RLAR(LIMIT, IDX) \ - ((LIMIT & MPU_RLAR_LIMIT_Msk) | \ - ((IDX << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \ - (MPU_RLAR_EN_Msk)) - -#if defined(MPU_RLAR_PXN_Pos) - -/** \brief Region Limit Address Register with PXN value -* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended. -* \param PXN Privileged execute never. Defines whether code can be executed from this privileged region. -* \param IDX The attribute index to be associated with this memory region. -*/ -#define ARM_MPU_RLAR_PXN(LIMIT, PXN, IDX) \ - ((LIMIT & MPU_RLAR_LIMIT_Msk) | \ - ((PXN << MPU_RLAR_PXN_Pos) & MPU_RLAR_PXN_Msk) | \ - ((IDX << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \ - (MPU_RLAR_EN_Msk)) - -#endif - -/** -* Struct for a single MPU Region -*/ -typedef struct { - uint32_t RBAR; /*!< Region Base Address Register value */ - uint32_t RLAR; /*!< Region Limit Address Register value */ -} ARM_MPU_Region_t; - -/** Enable the MPU. -* \param MPU_Control Default access permissions for unconfigured regions. -*/ -__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) -{ - MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; -#ifdef SCB_SHCSR_MEMFAULTENA_Msk - SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; -#endif - __DSB(); - __ISB(); -} - -/** Disable the MPU. -*/ -__STATIC_INLINE void ARM_MPU_Disable(void) -{ - __DMB(); -#ifdef SCB_SHCSR_MEMFAULTENA_Msk - SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; -#endif - MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; -} - -#ifdef MPU_NS -/** Enable the Non-secure MPU. -* \param MPU_Control Default access permissions for unconfigured regions. -*/ -__STATIC_INLINE void ARM_MPU_Enable_NS(uint32_t MPU_Control) -{ - MPU_NS->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; -#ifdef SCB_SHCSR_MEMFAULTENA_Msk - SCB_NS->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; -#endif - __DSB(); - __ISB(); -} - -/** Disable the Non-secure MPU. -*/ -__STATIC_INLINE void ARM_MPU_Disable_NS(void) -{ - __DMB(); -#ifdef SCB_SHCSR_MEMFAULTENA_Msk - SCB_NS->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; -#endif - MPU_NS->CTRL &= ~MPU_CTRL_ENABLE_Msk; -} -#endif - -/** Set the memory attribute encoding to the given MPU. -* \param mpu Pointer to the MPU to be configured. -* \param idx The attribute index to be set [0-7] -* \param attr The attribute value to be set. -*/ -__STATIC_INLINE void ARM_MPU_SetMemAttrEx(MPU_Type* mpu, uint8_t idx, uint8_t attr) -{ - const uint8_t reg = idx / 4U; - const uint32_t pos = ((idx % 4U) * 8U); - const uint32_t mask = 0xFFU << pos; - - if (reg >= (sizeof(mpu->MAIR) / sizeof(mpu->MAIR[0]))) { - return; // invalid index - } - - mpu->MAIR[reg] = ((mpu->MAIR[reg] & ~mask) | ((attr << pos) & mask)); -} - -/** Set the memory attribute encoding. -* \param idx The attribute index to be set [0-7] -* \param attr The attribute value to be set. -*/ -__STATIC_INLINE void ARM_MPU_SetMemAttr(uint8_t idx, uint8_t attr) -{ - ARM_MPU_SetMemAttrEx(MPU, idx, attr); -} - -#ifdef MPU_NS -/** Set the memory attribute encoding to the Non-secure MPU. -* \param idx The attribute index to be set [0-7] -* \param attr The attribute value to be set. -*/ -__STATIC_INLINE void ARM_MPU_SetMemAttr_NS(uint8_t idx, uint8_t attr) -{ - ARM_MPU_SetMemAttrEx(MPU_NS, idx, attr); -} -#endif - -/** Clear and disable the given MPU region of the given MPU. -* \param mpu Pointer to MPU to be used. -* \param rnr Region number to be cleared. -*/ -__STATIC_INLINE void ARM_MPU_ClrRegionEx(MPU_Type* mpu, uint32_t rnr) -{ - mpu->RNR = rnr; - mpu->RLAR = 0U; -} - -/** Clear and disable the given MPU region. -* \param rnr Region number to be cleared. -*/ -__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) -{ - ARM_MPU_ClrRegionEx(MPU, rnr); -} - -#ifdef MPU_NS -/** Clear and disable the given Non-secure MPU region. -* \param rnr Region number to be cleared. -*/ -__STATIC_INLINE void ARM_MPU_ClrRegion_NS(uint32_t rnr) -{ - ARM_MPU_ClrRegionEx(MPU_NS, rnr); -} -#endif - -/** Configure the given MPU region of the given MPU. -* \param mpu Pointer to MPU to be used. -* \param rnr Region number to be configured. -* \param rbar Value for RBAR register. -* \param rlar Value for RLAR register. -*/ -__STATIC_INLINE void ARM_MPU_SetRegionEx(MPU_Type* mpu, uint32_t rnr, uint32_t rbar, uint32_t rlar) -{ - mpu->RNR = rnr; - mpu->RBAR = rbar; - mpu->RLAR = rlar; -} - -/** Configure the given MPU region. -* \param rnr Region number to be configured. -* \param rbar Value for RBAR register. -* \param rlar Value for RLAR register. -*/ -__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rnr, uint32_t rbar, uint32_t rlar) -{ - ARM_MPU_SetRegionEx(MPU, rnr, rbar, rlar); -} - -#ifdef MPU_NS -/** Configure the given Non-secure MPU region. -* \param rnr Region number to be configured. -* \param rbar Value for RBAR register. -* \param rlar Value for RLAR register. -*/ -__STATIC_INLINE void ARM_MPU_SetRegion_NS(uint32_t rnr, uint32_t rbar, uint32_t rlar) -{ - ARM_MPU_SetRegionEx(MPU_NS, rnr, rbar, rlar); -} -#endif - -/** Memcopy with strictly ordered memory access, e.g. for register targets. -* \param dst Destination data is copied to. -* \param src Source data is copied from. -* \param len Amount of data words to be copied. -*/ -__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) -{ - uint32_t i; - for (i = 0U; i < len; ++i) - { - dst[i] = src[i]; - } -} - -/** Load the given number of MPU regions from a table to the given MPU. -* \param mpu Pointer to the MPU registers to be used. -* \param rnr First region number to be configured. -* \param table Pointer to the MPU configuration table. -* \param cnt Amount of regions to be configured. -*/ -__STATIC_INLINE void ARM_MPU_LoadEx(MPU_Type* mpu, uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) -{ - const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; - if (cnt == 1U) { - mpu->RNR = rnr; - ARM_MPU_OrderedMemcpy(&(mpu->RBAR), &(table->RBAR), rowWordSize); - } else { - uint32_t rnrBase = rnr & ~(MPU_TYPE_RALIASES-1U); - uint32_t rnrOffset = rnr % MPU_TYPE_RALIASES; - - mpu->RNR = rnrBase; - while ((rnrOffset + cnt) > MPU_TYPE_RALIASES) { - uint32_t c = MPU_TYPE_RALIASES - rnrOffset; - ARM_MPU_OrderedMemcpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), c*rowWordSize); - table += c; - cnt -= c; - rnrOffset = 0U; - rnrBase += MPU_TYPE_RALIASES; - mpu->RNR = rnrBase; - } - - ARM_MPU_OrderedMemcpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), cnt*rowWordSize); - } -} - -/** Load the given number of MPU regions from a table. -* \param rnr First region number to be configured. -* \param table Pointer to the MPU configuration table. -* \param cnt Amount of regions to be configured. -*/ -__STATIC_INLINE void ARM_MPU_Load(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) -{ - ARM_MPU_LoadEx(MPU, rnr, table, cnt); -} - -#ifdef MPU_NS -/** Load the given number of MPU regions from a table to the Non-secure MPU. -* \param rnr First region number to be configured. -* \param table Pointer to the MPU configuration table. -* \param cnt Amount of regions to be configured. -*/ -__STATIC_INLINE void ARM_MPU_Load_NS(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) -{ - ARM_MPU_LoadEx(MPU_NS, rnr, table, cnt); -} -#endif - -#endif - diff --git a/include/cmsis/tz_context.h b/include/cmsis/tz_context.h deleted file mode 100644 index 0d09749..0000000 --- a/include/cmsis/tz_context.h +++ /dev/null @@ -1,70 +0,0 @@ -/****************************************************************************** - * @file tz_context.h - * @brief Context Management for Armv8-M TrustZone - * @version V1.0.1 - * @date 10. January 2018 - ******************************************************************************/ -/* - * Copyright (c) 2017-2018 Arm Limited. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * 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 - * - * 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. - */ - -#if defined ( __ICCARM__ ) - #pragma system_include /* treat file as system include file for MISRA check */ -#elif defined (__clang__) - #pragma clang system_header /* treat file as system include file */ -#endif - -#ifndef TZ_CONTEXT_H -#define TZ_CONTEXT_H - -#include - -#ifndef TZ_MODULEID_T -#define TZ_MODULEID_T -/// \details Data type that identifies secure software modules called by a process. -typedef uint32_t TZ_ModuleId_t; -#endif - -/// \details TZ Memory ID identifies an allocated memory slot. -typedef uint32_t TZ_MemoryId_t; - -/// Initialize secure context memory system -/// \return execution status (1: success, 0: error) -uint32_t TZ_InitContextSystem_S (void); - -/// Allocate context memory for calling secure software modules in TrustZone -/// \param[in] module identifies software modules called from non-secure mode -/// \return value != 0 id TrustZone memory slot identifier -/// \return value 0 no memory available or internal error -TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module); - -/// Free context memory that was previously allocated with \ref TZ_AllocModuleContext_S -/// \param[in] id TrustZone memory slot identifier -/// \return execution status (1: success, 0: error) -uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id); - -/// Load secure context (called on RTOS thread context switch) -/// \param[in] id TrustZone memory slot identifier -/// \return execution status (1: success, 0: error) -uint32_t TZ_LoadContext_S (TZ_MemoryId_t id); - -/// Store secure context (called on RTOS thread context switch) -/// \param[in] id TrustZone memory slot identifier -/// \return execution status (1: success, 0: error) -uint32_t TZ_StoreContext_S (TZ_MemoryId_t id); - -#endif // TZ_CONTEXT_H diff --git a/memory.x b/memory.x new file mode 100644 index 0000000..6a7b3b2 --- /dev/null +++ b/memory.x @@ -0,0 +1,32 @@ +MEMORY +{ + /* NOTE 1 K = 1 KiBi = 1024 bytes */ + FLASH : ORIGIN = 0x08000000, LENGTH = 64K + RAM : ORIGIN = 0x20000000, LENGTH = 20K +} + +/* This is where the call stack will be allocated. */ +/* The stack is of the full descending type. */ +/* You may want to use this variable to locate the call stack and static + variables in different memory regions. Below is shown the default value */ +/* _stack_start = ORIGIN(RAM) + LENGTH(RAM); */ + +/* You can use this symbol to customize the location of the .text section */ +/* If omitted the .text section will be placed right after the .vector_table + section */ +/* This is required only on microcontrollers that store some configuration right + after the vector table */ +/* _stext = ORIGIN(FLASH) + 0x400; */ + +/* Example of putting non-initialized variables into custom RAM locations. */ +/* This assumes you have defined a region RAM2 above, and in the Rust + sources added the attribute `#[link_section = ".ram2bss"]` to the data + you want to place there. */ +/* Note that the section will not be zero-initialized by the runtime! */ +/* SECTIONS { + .ram2bss (NOLOAD) : ALIGN(4) { + *(.ram2bss); + . = ALIGN(4); + } > RAM2 + } INSERT AFTER .bss; +*/ diff --git a/openocd b/openocd deleted file mode 100755 index d7055aa..0000000 --- a/openocd +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -openocd -f interface/stlink-v2.cfg -f target/cs32f1x.cfg - diff --git a/openocd.cfg b/openocd.cfg new file mode 100644 index 0000000..17569bf --- /dev/null +++ b/openocd.cfg @@ -0,0 +1,12 @@ +# Sample OpenOCD configuration for the CS32F103 development board + +# Depending on the hardware revision you got you'll have to pick ONE of these +# interfaces. At any time only one interface should be commented out. + +# Revision C (newer revision) +source [find interface/stlink-v2.cfg] + +# Revision A and B (older revisions) +# source [find interface/stlink-v2.cfg] + +source [find target/cs32f1x.cfg] diff --git a/openocd.gdb b/openocd.gdb new file mode 100644 index 0000000..7795319 --- /dev/null +++ b/openocd.gdb @@ -0,0 +1,40 @@ +target extended-remote :3333 + +# print demangled symbols +set print asm-demangle on + +# set backtrace limit to not have infinite backtrace loops +set backtrace limit 32 + +# detect unhandled exceptions, hard faults and panics +break DefaultHandler +break HardFault +break rust_begin_unwind +# # run the next few lines so the panic message is printed immediately +# # the number needs to be adjusted for your panic handler +# commands $bpnum +# next 4 +# end + +# *try* to stop at the user entry point (it might be gone due to inlining) +break main + +monitor arm semihosting enable + +# # send captured ITM to the file itm.fifo +# # (the microcontroller SWO pin must be connected to the programmer SWO pin) +# # 8000000 must match the core clock frequency +# monitor tpiu config internal itm.txt uart off 8000000 + +# # OR: make the microcontroller SWO pin output compatible with UART (8N1) +# # 8000000 must match the core clock frequency +# # 2000000 is the frequency of the SWO pin +# monitor tpiu config external uart off 8000000 2000000 + +# # enable ITM port 0 +# monitor itm port 0 on + +load + +# start the process but immediately halt the processor +stepi diff --git a/src/config.h b/src/config.h deleted file mode 100644 index 5bd4f41..0000000 --- a/src/config.h +++ /dev/null @@ -1,29 +0,0 @@ -//------------------------------------------------------------------------------ -/* priorities */ -#define EXTI0_IRQ_PRIORITY 8 -#define EXTI1_IRQ_PRIORITY 8 -#define EXTI2_IRQ_PRIORITY 8 -#define EXTI3_IRQ_PRIORITY 8 -#define EXTI4_IRQ_PRIORITY 8 -#define EXTI9_5_IRQ_PRIORITY 8 -#define EXTI15_10_IRQ_PRIORITY 8 - -#define TIM1_IRQ_PRIORITY 4 -#define TIM2_IRQ_PRIORITY 4 -#define TIM3_IRQ_PRIORITY 4 -#define TIM4_IRQ_PRIORITY 4 - -#define USART1_IRQ_PRIORITY 3 -#define USART2_IRQ_PRIORITY 3 -#define USART3_IRQ_PRIORITY 3 - -#define I2C1_IRQ_PRIORITY 2 -#define I2C1_IRQERR_PRIORITY 1 -#define I2C2_IRQ_PRIORITY 2 -#define I2C2_IRQERR_PRIORITY 1 - -#define SPI1_IRQ_PRIORITY 4 -#define SPI2_IRQ_PRIORITY 4 - -#define ADC1_2_IRQ_PRIORITY 5 - diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..4f27f9e --- /dev/null +++ b/src/config.rs @@ -0,0 +1,318 @@ +use core::fmt; + +use crate::lcd_gui::LCDScreen; + +//---Config struct---------------------------------------------------------------------------------- + +#[derive(Copy, Clone)] +pub enum FanOutput { + P1, + P2, +} + +impl FanOutput { + + pub fn from_bits(bits: u16) -> FanOutput { + if bits == 0 { return Self::P1 } + return Self::P2; + } + + pub fn to_bits(&self) -> u16 { + match self { + Self::P1 => 0, + Self::P2 => 1, + } + } +} + +#[derive(Copy, Clone)] +pub struct CalData { + pub offset: f32, + pub raw_value: Option, +} + +impl CalData { + pub fn new(offset: f32) -> CalData { + CalData { + offset, + raw_value: None, + } + } +} + +#[derive(Copy, Clone)] +pub struct SystemConfig { + pub max_temp_diff: f32, + pub min_temp_diff: f32, + pub ext_offset: CalData, + pub p1_offset: CalData, + pub p2_offset: CalData, + pub fan_output: FanOutput, +} + +impl SystemConfig { + + pub fn new() -> SystemConfig { + SystemConfig { + max_temp_diff: 8.0, + min_temp_diff: 4.0, + ext_offset: CalData::new(0.0), + p1_offset: CalData::new(0.0), + p2_offset: CalData::new(0.0), + fan_output: FanOutput::P1, + } + } +} + +//---Menu struct------------------------------------------------------------------------------------ +const MENU_ENTRY_NB: usize = 6; + +pub enum MenuState { + Scroll, + Entry, +} + +pub struct Menu { + entries: [Entry; MENU_ENTRY_NB], + state: MenuState, + should_refresh: bool, + entry_index: usize, +} + +impl Menu { + + pub fn new(config: &SystemConfig) -> Menu { + + Menu { + entries: [ + Entry::new("fan out", EntryValue::FanOut (FanOutput::P1), config), + Entry::new("max diff", EntryValue::MaxTempDiff (0.0), config), + Entry::new("min diff", EntryValue::MinTempDiff (0.0), config), + Entry::new("ex", EntryValue::ExtOffset (CalData::new(0.0)), config), + Entry::new("s1", EntryValue::P1Offset (CalData::new(0.0)), config), + Entry::new("s2", EntryValue::P2Offset (CalData::new(0.0)), config), + ], + state: MenuState::Scroll, + should_refresh: true, + entry_index: 0, + } + } + + pub fn button_update(&mut self, config: &mut SystemConfig) -> bool { + + self.should_refresh = true; + + // update state machine + match self.state { + MenuState::Scroll => { + if self.entry_index == 0 { return true } + // read desired value from config + self.state = MenuState::Entry; + self.entries[self.entry_index - 1].select(config); + }, + MenuState::Entry => { + // write modified value to config + self.state = MenuState::Scroll; + self.entries[self.entry_index - 1].deselect(config); + } + } + + false + } + + pub fn movement_update(&mut self, movement: i32) { + + if movement != 0 { + match self.state { + MenuState::Scroll => { + + // convert movement to entry index + let mut index = self.entry_index as i32 + movement; + if index > MENU_ENTRY_NB as i32 { + index = MENU_ENTRY_NB as i32; + } else if index < 0 { + index = 0; + } + self.entry_index = index as usize; + }, + MenuState::Entry => { + + // update entry + self.entries[self.entry_index - 1].update(-movement); + //note : "-" sign is just to revert encoder direction, feels better when using + //the interface + }, + } + + self.should_refresh = true; + } + } + + pub fn reset(&mut self) { + + match self.state { + MenuState::Entry => { + // if an entry is selected, disguard all modifications + self.entries[self.entry_index - 1].disgard(); + self.state = MenuState::Scroll; + }, + _ => (), + } + + self.entry_index = 0; + } + + pub fn display(&mut self, screen: &mut L) { + + if self.should_refresh { + + // first line + screen.clear(); + screen.set_cursor_pos(0); + let _ = write!(screen, "\u{007e}"); + if self.entry_index == 0 { + let _ = write!(screen, "retour"); + } else { + self.entries[self.entry_index - 1].display(screen); + } + + // second line (if any) + if self.entry_index < MENU_ENTRY_NB { + screen.set_cursor_pos(0x40); + let _ = write!(screen, " "); + self.entries[self.entry_index].display(screen); + } + + self.should_refresh = false; + } + } +} + +pub enum EntryValue { + MaxTempDiff (f32), + MinTempDiff (f32), + ExtOffset (CalData), + P1Offset (CalData), + P2Offset (CalData), + FanOut (FanOutput), +} + +impl EntryValue { + + fn modify(&mut self, n: i32) { + use libm::{powf, copysignf, fabsf}; + + use crate::utils::TEMP_RANGE; + + match self { + Self::MaxTempDiff (val) | Self::MinTempDiff (val) => { + *val += copysignf(fabsf(n as f32) * 0.85 * powf(10.0, 0.15 * fabsf(n as f32)) + * 0.1, n as f32); + // avoid display issues by limiting value range + if *val > 99.9 { *val = 99.9; } + else if *val < -99.9 { *val = -99.9; } + }, + Self::ExtOffset (data) | Self::P1Offset (data) | Self::P2Offset (data) => { + data.offset += copysignf(fabsf(n as f32) * 0.85 + * powf(10.0, 0.15 * fabsf(n as f32)) * 0.1, n as f32); + // avoid limiting issues like before, taking probe bounds into account + if data.offset + TEMP_RANGE.end > 99.9 { + data.offset = 99.9 - TEMP_RANGE.end; + } + else if data.offset + TEMP_RANGE.start < -99.9 { + data.offset = -99.9 - TEMP_RANGE.start; + } + }, + Self::FanOut (output) => { + if n%2 != 0 { + match output { + FanOutput::P1 => *output = FanOutput::P2, + FanOutput::P2 => *output = FanOutput::P1, + }}}} + } + + fn load(&mut self, config: &SystemConfig) { + match self { + Self::MaxTempDiff (val) => *val = config.max_temp_diff, + Self::MinTempDiff (val) => *val = config.min_temp_diff, + Self::ExtOffset (data) => *data = config.ext_offset, + Self::P1Offset (data) => *data = config.p1_offset, + Self::P2Offset (data) => *data = config.p2_offset, + Self::FanOut (val) => *val = config.fan_output, + }; + } + + fn store(&mut self, config: &mut SystemConfig) { + match self { + Self::MaxTempDiff (val) => config.max_temp_diff = *val, + Self::MinTempDiff (val) => config.min_temp_diff = *val, + Self::ExtOffset (data) => config.ext_offset = *data, + Self::P1Offset (data) => config.p1_offset = *data, + Self::P2Offset (data) => config.p2_offset = *data, + Self::FanOut (val) => config.fan_output = *val, + }; + } +} + +impl fmt::Display for EntryValue { + fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + use crate::lcd_gui::Temp; + + match self { + Self::MaxTempDiff (val) | Self::MinTempDiff (val) => + formatter.write_fmt(format_args!("{:.1}", val)), + Self::ExtOffset (data) | Self::P1Offset (data) | Self::P2Offset (data) => { + let temp: Temp = data.raw_value.map(|val| val + data.offset).into(); + formatter.write_fmt(format_args!("{:.1}({:.1})", data.offset, temp)) + }, + Self::FanOut (output) => { + match output { + FanOutput::P1 => formatter.write_fmt(format_args!("1")), + FanOutput::P2 => formatter.write_fmt(format_args!("2")), + }}} + } +} + + +pub struct Entry { + text: &'static str, + value: EntryValue, + is_selected: bool, +} + +impl Entry { + + pub fn new(text: &'static str, mut value: EntryValue, config: &SystemConfig) -> Entry { + + value.load(config); + Entry { + text, + value, + is_selected: false, + } + } + + pub fn display(&self, buffer: &mut B) { + let _ = match self.is_selected { + true => write!(buffer, "{}:{}", self.text, self.value), + false => write!(buffer, "{} {}", self.text, self.value), + }; + } + + pub fn select(&mut self, config: &SystemConfig) { + self.is_selected = true; + self.value.load(config); + } + pub fn deselect(&mut self, config: &mut SystemConfig) { + self.is_selected = false; + self.value.store(config); + } + + pub fn disgard(&mut self) { + self.is_selected = false; + } + + pub fn update(&mut self, n: i32) { + self.value.modify(n); + } +} diff --git a/src/drivers/adc.c b/src/drivers/adc.c deleted file mode 100644 index c5382ce..0000000 --- a/src/drivers/adc.c +++ /dev/null @@ -1,42 +0,0 @@ -#include "adc.h" - -extern Clock_t sysclks; - -int adc_init(ADC_TypeDef* adc) { - // enable adc clock - if(adc == ADC1) RCC->APB2ENR |= 0x1 << 9; - else if(adc == ADC2) RCC->APB2ENR |= 0x1 << 10; - else return -1; //no such adc - - // enable adc - adc->CR2 |= 0x1; - - // configure regular channels - adc->CR1 = 0; //reset value - adc->CR1 |= 0x1 << 23; //enable analog watchdog - adc->CR1 |= 0x1 << 11; //discontinuous mode - - // set trigger to manual - adc->CR1 |= 0x7 << 3; - - adc->SMPR2 |= 0x3FFFFFFF; - - // calibrate - adc->CR2 |= 0x1 << 2; - while((adc->CR2 >> 2) & 0x1); - - return 0; -} - -uint16_t adc_read(ADC_TypeDef* adc, uint8_t channel) { - - adc->SQR1 &= ~(0xF << 20); //one conversion only - adc->SQR3 = (adc->SQR3 & ~(0x1F)) | channel; //set channel - - //adc->CR2 |= 0x1 << 22; //start convertion - adc->CR2 |= 0x1; - while(!((adc->SR >> 1) & 0x1)); //waiting for convertion - - return adc->DR & 0xFFF; - -} diff --git a/src/drivers/adc.h b/src/drivers/adc.h deleted file mode 100644 index 64fe6b4..0000000 --- a/src/drivers/adc.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef ADC_H -#define ADC_H - -#include "../target/stm32f103xb.h" -#include "../config.h" -#include "rcc.h" - - -int adc_init(ADC_TypeDef* adc); - -uint16_t adc_read(ADC_TypeDef* adc, uint8_t channel); - - -#endif - diff --git a/src/drivers/io.c b/src/drivers/io.c deleted file mode 100644 index 88ba5db..0000000 --- a/src/drivers/io.c +++ /dev/null @@ -1,232 +0,0 @@ -//target header -#include "../target/stm32f103xb.h" - -//custom header -#include "../config.h" - -//std headers -#include - -//driver header -#include "io.h" - -static OnIO io_cb[16]={ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; - -void EXTI0_IRQHandler() { - if (io_cb[0]) (io_cb[0])(); - EXTI->PR = 1<<0; -} - -void EXTI1_IRQHandler() { - if (io_cb[1]) (io_cb[1])(); - EXTI->PR = 1<<1; -} - -void EXTI2_IRQHandler() { - if (io_cb[2]) (io_cb[2])(); - EXTI->PR = 1<<2; -} - -void EXTI3_IRQHandler() { - if (io_cb[3]) (io_cb[3])(); - EXTI->PR = 1<<3; -} - -void EXTI4_IRQHandler() { - if (io_cb[4]) (io_cb[4])(); - EXTI->PR = 1<<4; -} - -void EXTI9_5_IRQHandler() { - if (EXTI->PR & (1<<5)) { - if (io_cb[5]) (io_cb[5])(); - EXTI->PR = 1<<5; - } else if (EXTI->PR & (1<<6)) { - if (io_cb[6]) (io_cb[6])(); - EXTI->PR = 1<<6; - } else if (EXTI->PR & (1<<7)) { - if (io_cb[7]) (io_cb[7])(); - EXTI->PR = 1<<7; - } else if (EXTI->PR & (1<<8)) { - if (io_cb[8]) (io_cb[8])(); - EXTI->PR = 1<<8; - } else if (EXTI->PR & (1<<9)) { - if (io_cb[9]) (io_cb[9])(); - EXTI->PR = 1<<9; - } -} - -void EXTI15_10_IRQHandler() { - if (EXTI->PR & (1<<10)) { - if (io_cb[10]) (io_cb[10])(); - EXTI->PR = 1<<10; - } else if (EXTI->PR & (1<<11)) { - if (io_cb[11]) (io_cb[11])(); - EXTI->PR = 1<<11; - } else if (EXTI->PR & (1<<12)) { - if (io_cb[12]) (io_cb[12])(); - EXTI->PR = 1<<12; - } else if (EXTI->PR & (1<<13)) { - if (io_cb[13]) (io_cb[13])(); - EXTI->PR = 1<<13; - } else if (EXTI->PR & (1<<14)) { - if (io_cb[14]) (io_cb[14])(); - EXTI->PR = 1<<14; - } else if (EXTI->PR & (1<<15)) { - if (io_cb[15]) (io_cb[15])(); - EXTI->PR = 1<<15; - } -} - -/* Definitions for EXTI configuration */ -enum io_exti_mask { - SYSCFG_EXTI_PA_MASK = 0x0, - SYSCFG_EXTI_PB_MASK = 0x1, - SYSCFG_EXTI_PC_MASK = 0x2, - SYSCFG_EXTI_PD_MASK = 0x3, - SYSCFG_EXTI_PE_MASK = 0x4 -}; - -int io_configure(GPIO_TypeDef *gpio, uint16_t pin, uint16_t pin_cfg, OnIO cb) { - - // enable GPIOx subsystem clocking - if (gpio == GPIOA) RCC->APB2ENR |= 1<<2; - else if (gpio == GPIOB) RCC->APB2ENR |= 1<<3; - else if (gpio == GPIOC) RCC->APB2ENR |= 1<<4; - else if (gpio == GPIOD) RCC->APB2ENR |= 1<<5; - else if (gpio == GPIOE) RCC->APB2ENR |= 1<<6; - - // setup pin mask for crx registers - uint64_t pin_mask = 0; - for(int i=0; i<16; ++i) { - if((pin >> i) & 0x1) pin_mask |= 0x1ll << 4*i; - } - - // clear previous data - uint64_t crx = pin_mask * 0x4; //reset value is 0x4 - uint16_t odr = pin; - gpio->CRH &= ~(crx >> 32); - gpio->CRL &= ~(crx & 0xFFFFFFFF); - gpio->BSRR |= odr << 16; - - // set up the new configuration - crx = pin_mask * (pin_cfg & 0xF); - odr = pin * ((pin_cfg & 0x10) >> 4); - gpio->CRH |= crx >> 32; - gpio->CRL |= crx & 0xFFFFFFFF; - gpio->BSRR |= odr; - - //TODO manage alternate functions - - // manage IRQs //TODO allow IRQ reset - if (!cb) return 0; //no callback attached - - if (pin_cfg & 0x7) return -1; //callback set, but not in input mode - - RCC->APB2ENR |= 0x1; //enable AFIO clocking - - // prepare mask - uint8_t port_mask = 0; - // uint32_t pin_mask = 0; - if (gpio == GPIOA) port_mask = SYSCFG_EXTI_PA_MASK; - else if (gpio == GPIOB) port_mask = SYSCFG_EXTI_PB_MASK; - else if (gpio == GPIOC) port_mask = SYSCFG_EXTI_PC_MASK; - else if (gpio == GPIOD) port_mask = SYSCFG_EXTI_PD_MASK; - else if (gpio == GPIOE) port_mask = SYSCFG_EXTI_PE_MASK; - - // setup external IRQ lines - uint64_t afio_mask; - for(int i=0; i<4; ++i) { - afio_mask = ((pin_mask & (0xFFFFll << (i*16))) >> (i*16)) * port_mask; - if(afio_mask) AFIO->EXTICR[i] |= afio_mask; - } - - // clear pending IRQs on concerned lines - EXTI->PR |= pin; - - // configure IRQ options and masks - EXTI->IMR |= pin; - if(pin_cfg & 0x100) EXTI->RTSR |= pin; - if(pin_cfg & 0x200) EXTI->FTSR |= pin; //in case both falling and rising - //are set, both will be a trigger - - // register IRQ callbacks - for(int i=0; i<16; ++i) { - if((pin >> i) & 0x1) { - io_cb[i] = cb; - - // Setup NVIC - switch (i) { - case 0: - NVIC_SetPriority(EXTI0_IRQn, EXTI0_IRQ_PRIORITY); - NVIC_EnableIRQ(EXTI0_IRQn); - break; - case 1: - NVIC_SetPriority(EXTI1_IRQn, EXTI1_IRQ_PRIORITY); - NVIC_EnableIRQ(EXTI1_IRQn); - break; - case 2: - NVIC_SetPriority(EXTI2_IRQn, EXTI2_IRQ_PRIORITY); - NVIC_EnableIRQ(EXTI2_IRQn); - break; - case 3: - NVIC_SetPriority(EXTI3_IRQn, EXTI3_IRQ_PRIORITY); - NVIC_EnableIRQ(EXTI3_IRQn); - break; - case 4: - NVIC_SetPriority(EXTI4_IRQn, EXTI4_IRQ_PRIORITY); - NVIC_EnableIRQ(EXTI4_IRQn); - break; - case 5: - case 6: - case 7: - case 8: - case 9: - NVIC_SetPriority(EXTI9_5_IRQn, EXTI9_5_IRQ_PRIORITY); - NVIC_EnableIRQ(EXTI9_5_IRQn); - break; - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - NVIC_SetPriority(EXTI15_10_IRQn, EXTI15_10_IRQ_PRIORITY); - NVIC_EnableIRQ(EXTI15_10_IRQn); - break; - default: - return -1; //impossible to get there - } - } - } - return 0; -} - - -uint32_t io_read(GPIO_TypeDef *gpio, uint16_t mask) -{ - return gpio->IDR & mask; -} - -void io_write(GPIO_TypeDef *gpio, uint16_t val, uint16_t mask) -{ - gpio->BSRR = (uint32_t)(mask) << (val ? 0 : 16); -} - -void io_write_n(GPIO_TypeDef *gpio, uint16_t val, uint16_t mask) -{ - gpio->BSRR = (uint32_t)(mask) << (val ? 16 : 0); -} - -void io_set(GPIO_TypeDef *gpio, uint16_t mask) -{ - gpio->BSRR = mask; -} - -void io_clear(GPIO_TypeDef *gpio, uint16_t mask) -{ - gpio->BSRR = (uint32_t)(mask) << 16; -} diff --git a/src/drivers/io.h b/src/drivers/io.h deleted file mode 100644 index cad5be2..0000000 --- a/src/drivers/io.h +++ /dev/null @@ -1,122 +0,0 @@ -#ifndef _IO_H_ -#define _IO_H_ - -//------------------------------------------------------------------------------ -/* GPIO pin mask definitions */ -enum io_pin { - PIN_0 = (1 << 0), - PIN_1 = (1 << 1), - PIN_2 = (1 << 2), - PIN_3 = (1 << 3), - PIN_4 = (1 << 4), - PIN_5 = (1 << 5), - PIN_6 = (1 << 6), - PIN_7 = (1 << 7), - PIN_8 = (1 << 8), - PIN_9 = (1 << 9), - PIN_10 = (1 << 10), - PIN_11 = (1 << 11), - PIN_12 = (1 << 12), - PIN_13 = (1 << 13), - PIN_14 = (1 << 14), - PIN_15 = (1 << 15), - PIN_ALL = 0xFFFF -}; - -//------------------------------------------------------------------------------ -/* GPIO pin mode definitions */ -enum io_mode { - IO_MODE_INPUT = (0x0), - IO_MODE_OUTPUT = (0x1), // 10Mhz max - IO_MODE_OUTPUT_SLOW = (0x3), // 2MHz max - IO_MODE_OUTPUT_FAST = (0x4) // 50 MHz max -}; - -//------------------------------------------------------------------------------ -/* GPIO pin conf definitions */ -enum io_conf { - IO_IN_ANALOG = (0b0 << 2), - IO_IN_FLOATING = (0b1 << 2), - IO_IN_PULL_UP = (0b110 << 2), - IO_IN_PULL_DOWN = (0b010 << 2), - IO_OUT_ALT_FNCT = (0b10 << 2), - IO_OUT_PUSH_PULL = (0b0 << 2), - IO_OUT_OPEN_DRAIN = (0b1 << 2) -}; - -//------------------------------------------------------------------------------ -/* GPIO pin clear */ -#define IO_CLEAR (0) - -//------------------------------------------------------------------------------ -/* alternate function selection option */ -//TODO not supported for now -//enum io_alt_fnct { -// PIN_OPT_AF0 0x0, -// PIN_OPT_AF1 0x1, -// PIN_OPT_AF2 0x2, -// PIN_OPT_AF3 0x3, -// PIN_OPT_AF4 0x4, -// PIN_OPT_AF5 0x5, -// PIN_OPT_AF6 0x6, -// PIN_OPT_AF7 0x7, -// PIN_OPT_AF8 0x8, -// PIN_OPT_AF9 0x9, -// PIN_OPT_AF10 0xA, -// PIN_OPT_AF11 0xB, -// PIN_OPT_AF12 0xC, -// PIN_OPT_AF13 0xD, -// PIN_OPT_AF14 0xE, -// PIN_OPT_AF15 0xF -//}; - -//------------------------------------------------------------------------------ -/* GPIO IRQ conf definitons */ -enum io_irq_conf { - IO_IRQ_EDGE_RISE = (0x1 << 8), - IO_IRQ_EDGE_FALL = (0x2 << 8), - IO_IRQ_EDGE_BOTH = (0x3 << 8) -}; - -typedef void (*OnIO)(); - -//------------------------------------------------------------------------------ -/* io_configure - * - * configure pins referenced in 'pin_mask' of specified port - * 'gpio' according to 'pin_cfg' and associate a callback - * function 'cb' if not NULL. - * returns 0 if success - */ -int io_configure(GPIO_TypeDef *gpio, uint16_t pin_mask, uint16_t pin_cfg, - OnIO cb); - -/* io_read - * - * read 32 bit data from port 'gpio', filter the result with mask - */ -uint32_t io_read(GPIO_TypeDef *gpio, uint16_t mask); - -/* io_write - * - * write 16 bit data filtered by mask to port 'gpio' - * '1' in val are written as HIGH level on port pins - */ -void io_write(GPIO_TypeDef *gpio, uint16_t val, uint16_t mask); - -/* io_write_n - * - * write 16 bit data filtered by mask to port 'gpio' - * '1' in val are written as LOW level on port pins - */ -void io_write_n(GPIO_TypeDef *gpio, uint16_t val, uint16_t mask); - -/* io_set/clear - * - * set or clear outputs according to bit mask - */ -void io_set(GPIO_TypeDef *gpio, uint16_t mask); -void io_clear(GPIO_TypeDef *gpio, uint16_t mask); - -#endif - diff --git a/src/drivers/lcd.c b/src/drivers/lcd.c deleted file mode 100644 index 35754fc..0000000 --- a/src/drivers/lcd.c +++ /dev/null @@ -1,186 +0,0 @@ -#include "lcd.h" - -enum mode { - WRITE, - READ, - UNDEFINED -}; - -//TODO make the driver dynamic ? -static TIM_TypeDef* timer = 0; -static uint8_t mode = UNDEFINED; -static uint8_t rows = 0; -static uint8_t columns = 0; -static uint8_t rows_offset[4] = {}; - -//------------------------------------------------------------------------------ -// internal functions -int set_mode_read(void) { - // configure pins - if(io_configure(GPIOA, PIN_8 | PIN_12 | PIN_15, IO_MODE_INPUT | - IO_IN_FLOATING, 0)) return -1; - if(io_configure(GPIOB, PIN_3 | PIN_4 | PIN_13 | PIN_14 | PIN_15, - IO_MODE_INPUT | IO_IN_FLOATING, 0)) return -1; - - // put lcd in read mode - io_set(GPIOA, PIN_9); // after the pins are ready to recieve voltage - mode = READ; - - return 0; -} - -int set_mode_write(void) { - // put lcd in write mode - io_clear(GPIOA, PIN_9); //before the pin can send voltage - - // configure pins - if(io_configure(GPIOA, PIN_8 | PIN_12 | PIN_15, IO_MODE_OUTPUT | - IO_OUT_PUSH_PULL, 0)) return -1; - if(io_configure(GPIOB, PIN_3 | PIN_4 | PIN_13 | PIN_14 | PIN_15, - IO_MODE_OUTPUT | IO_OUT_PUSH_PULL, 0)) return -1; - mode = WRITE; - - return 0; -} - -void wait_for_ready(void) { - //TODO debug that -// // configure the lcd -// if(mode != READ) if(set_mode_read()) return; -// -// // read D7 pin -// for(;;) { -// io_set(GPIOA, PIN_11); -// for(int i=0; i<1000; ++i); //timer_wait is overkill here -// if(!io_read(GPIOB, PIN_4)) break; -// io_clear(GPIOA, PIN_11); -// for(int i=0; i<1000; ++i); //same -// } - timer_wait_ms(timer, 2, 0); //wait max delay -} - -void write_byte(uint8_t byte) { - // put the lcd bus in write mode - if(mode != WRITE) if(set_mode_write()) return; - - // start tranfert - io_set(GPIOA, PIN_11); - timer_wait_us(timer, 1, 0); - - // send the data - io_write(GPIOA, (byte >> 0) & 0x1, PIN_8); - io_write(GPIOA, (byte >> 1) & 0x1, PIN_12); - io_write(GPIOB, (byte >> 2) & 0x1, PIN_15); - io_write(GPIOA, (byte >> 3) & 0x1, PIN_15); - io_write(GPIOB, (byte >> 4) & 0x1, PIN_14); - io_write(GPIOB, (byte >> 5) & 0x1, PIN_3); - io_write(GPIOB, (byte >> 6) & 0x1, PIN_13); - io_write(GPIOB, (byte >> 7) & 0x1, PIN_4); - - // validate data - io_clear(GPIOA, PIN_11); -} - -//------------------------------------------------------------------------------ -int lcd_init(TIM_TypeDef* tim, uint8_t col, uint8_t row) { - - timer = tim; - columns = col; - rows = row; - rows_offset[0] = 0x00; - rows_offset[1] = 0x40; - rows_offset[2] = 0x00 + columns; - rows_offset[3] = 0x40 + columns; - - // disable JTAG, as it utilise needed pins, SWD remains usable in - // synchronous mode - RCC->APB2ENR |= 0x1; //enable AFIO clocking - AFIO->MAPR = (AFIO->MAPR & ~(0x8 << 24)) | 0x2 << 24; - - // configure the lcd control pins - if(io_configure(GPIOA, PIN_9 | PIN_10 | PIN_11, IO_MODE_OUTPUT | - IO_OUT_PUSH_PULL, 0)) return -1; - - // put the lcd bus in write mode - if(set_mode_write()) return -1; //no check in case the pins were used - //somewhere else - - // select instruction register - io_write(GPIOA, LCD_MODE_CMD, PIN_10); - - // begin initialisation sequence - timer_wait_ms(timer, 15, 0); - write_byte(LCD_FUNC_SET | LCD_FUNC_8BIT | LCD_FUNC_2LINE | - LCD_FUNC_5x8DOTS); - timer_wait_ms(timer, 5, 0); - write_byte(LCD_FUNC_SET | LCD_FUNC_8BIT | LCD_FUNC_2LINE | - LCD_FUNC_5x8DOTS); - timer_wait_us(timer, 150, 0); - write_byte(LCD_FUNC_SET | LCD_FUNC_8BIT | LCD_FUNC_2LINE | - LCD_FUNC_5x8DOTS); - wait_for_ready(); - write_byte(LCD_FUNC_SET | LCD_FUNC_8BIT | LCD_FUNC_2LINE | - LCD_FUNC_5x8DOTS); - wait_for_ready(); - write_byte(LCD_DISP_CTRL | LCD_CTRL_DISP_OFF | LCD_CTRL_CUR_OFF | - LCD_CTRL_BLINK_OFF); - wait_for_ready(); - write_byte(LCD_CLEAR); - wait_for_ready(); - write_byte(LCD_ENTRY | LCD_ENTRY_LEFT | LCD_ENTRY_SHIFT_DEC); - wait_for_ready(); - - // post initialisation setup - write_byte(LCD_DISP_CTRL | LCD_CTRL_DISP_ON | LCD_CTRL_CUR_ON | - LCD_CTRL_BLINK_ON); - wait_for_ready(); - write_byte(LCD_CLEAR); - - return 0; -} - -void lcd_send_cmd(uint8_t cmd) { - // wait for the screen - wait_for_ready(); - - // select instruction register - io_write(GPIOA, LCD_MODE_CMD, PIN_10); - - // send the command - write_byte(cmd); -} - -void lcd_print(const char* txt) { - // prepare data - const char* c = txt; - - // wait for the screen - wait_for_ready(); - - // select data register - io_write(GPIOA, LCD_MODE_DATA, PIN_10); - - // send the caracters until end of string - // TODO implement '\n' - while(*c != '\0') { - wait_for_ready(); - write_byte(*c); - c++; - } -} - -void lcd_print_c(char c) { - // wait for the screen - wait_for_ready(); - - // select data register - io_write(GPIOA, LCD_MODE_DATA, PIN_10); - - // send the caracter - write_byte(c); -} - -void lcd_set_cursor(uint8_t col, uint8_t row) { - lcd_send_cmd(LCD_DDRAM_ADDR | (col + rows_offset[row])); -} - diff --git a/src/drivers/lcd.h b/src/drivers/lcd.h deleted file mode 100644 index 00fb737..0000000 --- a/src/drivers/lcd.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef LCD_H -#define LCD_H - -#include "../target/stm32f103xb.h" -#include "../config.h" -#include "timer.h" -#include "io.h" -#include - -//------------------------------------------------------------------------------ -/* LCD mode selection */ -enum lcd_register { - LCD_MODE_CMD = 0, - LCD_MODE_DATA = 1 -}; - -//------------------------------------------------------------------------------ -/* LCD commands */ -enum lcd_command { - LCD_CLEAR = 0x01, - LCD_CUR_HOME = 0x02, - LCD_ENTRY = 0x04, - LCD_DISP_CTRL = 0x08, - LCD_SHIFT = 0x10, - LCD_FUNC_SET = 0x20, - LCD_CGRAM_ADDR = 0x40, - LCD_DDRAM_ADDR = 0x80 -}; - -//------------------------------------------------------------------------------ -/* LCD_ENTRY command options */ -enum lcd_entry_option { - LCD_ENTRY_RIGHT = 0x00, - LCD_ENTRY_LEFT = 0x02, - LCD_ENTRY_SHIFT_INC = 0x01, - LCD_ENTRY_SHIFT_DEC = 0x00 -}; - -//------------------------------------------------------------------------------ -/* LCD_DISP_CTRL command options */ -enum lcd_ctrl_option { - LCD_CTRL_DISP_ON = 0x04, - LCD_CTRL_DISP_OFF = 0x00, - LCD_CTRL_CUR_ON = 0x02, - LCD_CTRL_CUR_OFF = 0x00, - LCD_CTRL_BLINK_ON = 0x01, - LCD_CTRL_BLINK_OFF = 0x00 -}; - -//------------------------------------------------------------------------------ -/* LCD_SHIFT command options */ -enum lcd_shift_option { - LCD_SHIFT_DISP = 0x08, - LCD_SHIFT_CUR = 0x00, - LCD_SHIFT_RIGHT = 0x04, - LCD_SHIFT_LEFT = 0x00 -}; - -//------------------------------------------------------------------------------ -/* LCD_FUNC_SET command options */ -enum lcd_func_option { - LCD_FUNC_8BIT = 0x10, - LCD_FUNC_4BIT = 0x00, - LCD_FUNC_2LINE = 0x08, - LCD_FUNC_1LINE = 0x00, - LCD_FUNC_5x10DOTS = 0x04, - LCD_FUNC_5x8DOTS = 0x00 -}; - -//------------------------------------------------------------------------------ -/** lcd_init - * initialise the lcd, needed before anything else can be done - * the timer is used for delays and can't be in use when lcd functions are - * called - */ -int lcd_init(TIM_TypeDef* tim, uint8_t col, uint8_t row); - -/** lcd_send_cmd - * send the specified command to the lcd - */ -void lcd_send_cmd(uint8_t cmd); - -/** lcd_print - * print a null-terminated string on the lcd - */ -void lcd_print(const char* txt); - -void lcd_print_c(char c); - -void lcd_set_cursor(uint8_t col, uint8_t row); - -#endif - diff --git a/src/drivers/rcc.c b/src/drivers/rcc.c deleted file mode 100644 index 5f4cacb..0000000 --- a/src/drivers/rcc.c +++ /dev/null @@ -1,258 +0,0 @@ -/* -============================================================================== -##### RCC specific features ##### -============================================================================== -[..] -After reset the device is running from Internal High Speed oscillator -(HSI 16MHz) with Flash 0 wait state, Flash prefetch buffer, D-Cache -and I-Cache are disabled, and all peripherals are off except internal -SRAM, Flash and JTAG. -(+) There is no prescaler on High speed (AHB) and Low speed (APB) busses; -all peripherals mapped on these busses are running at HSI speed. -(+) The clock for all peripherals is switched off, except the SRAM and FLASH. -(+) All GPIOs are in input floating state, except the JTAG pins which -are assigned to be used for debug purpose. - -[..] -Once the device started from reset, the user application has to: -(+) Configure the clock source to be used to drive the System clock -(if the application needs higher frequency/performance) -(+) Configure the System clock frequency and Flash settings -(+) Configure the AHB and APB busses prescalers -(+) Enable the clock for the peripheral(s) to be used -(+) Configure the clock source(s) for peripherals which clocks are not -derived from the System clock (I2S, RTC, ADC, USB OTG FS/SDIO/RNG) - -##### RCC Limitations ##### -============================================================================== -[..] -A delay between an RCC peripheral clock enable and the effective peripheral -enabling should be taken into account in order to manage the peripheral -read/write from/to registers. -(+) This delay depends on the peripheral mapping. -(+) If peripheral is mapped on AHB: the delay is 2 AHB clock cycle -after the clock enable bit is set on the hardware register -(+) If peripheral is mapped on APB: the delay is 2 APB clock cycle -after the clock enable bit is set on the hardware register - -[..] -Possible Workarounds: -(#) Enable the peripheral clock sometimes before the peripheral read/write -register is required. -(#) For AHB peripheral, insert two dummy read to the peripheral register. -(#) For APB peripheral, insert a dummy read to the peripheral register. -*/ - -#include "rcc.h" - -/* HPRE: AHB high-speed prescaler */ -#define RCC_CFGR_HPRE_DIV_NONE 0x0 -#define RCC_CFGR_HPRE_DIV_2 (0x8 + 0) -#define RCC_CFGR_HPRE_DIV_4 (0x8 + 1) -#define RCC_CFGR_HPRE_DIV_8 (0x8 + 2) -#define RCC_CFGR_HPRE_DIV_16 (0x8 + 3) -#define RCC_CFGR_HPRE_DIV_64 (0x8 + 4) -#define RCC_CFGR_HPRE_DIV_128 (0x8 + 5) -#define RCC_CFGR_HPRE_DIV_256 (0x8 + 6) -#define RCC_CFGR_HPRE_DIV_512 (0x8 + 7) - -/* PPRE1/2: APB high-speed prescalers */ -#define RCC_CFGR_PPRE_DIV_NONE 0x0 -#define RCC_CFGR_PPRE_DIV_2 0x4 -#define RCC_CFGR_PPRE_DIV_4 0x5 -#define RCC_CFGR_PPRE_DIV_8 0x6 -#define RCC_CFGR_PPRE_DIV_16 0x7 - -/* PPLMUL: PPL multiplier */ -#define RCC_CFGR_PLLMUL(fac) (fac + 2) - -/* ADC: ADCPRE prescalers */ -#define RCC_CFGR_ADCPRE_DIV_2 0x0 -#define RCC_CFGR_ADCPRE_DIV_4 0x1 -#define RCC_CFGR_ADCPRE_DIV_6 0x2 -#define RCC_CFGR_ADCPRE_DIV_8 0x3 - -enum rcc_osc { - RCC_HSI, - RCC_HSE, - RCC_PLL, - RCC_LSI, - RCC_LSE -}; - -struct ClockConfig_t { - uint8_t type; - uint8_t pll_src; - uint8_t pllmul; - uint8_t hpre; - uint8_t ppre1; - uint8_t ppre2; - uint8_t adcpre; - uint32_t flash_cfg; - uint32_t ahb_freq; - uint32_t apb1_freq; - uint32_t apb2_freq; -}; - -static struct ClockConfig_t _clock_config[] = { - {/* Performance Mode */ - .type = RCC_PLL, - .pll_src = RCC_HSE, //8MHz - .pllmul = RCC_CFGR_PLLMUL(9), //freq should noot exceed 72MHz - .hpre = RCC_CFGR_HPRE_DIV_NONE, - .ppre1 = RCC_CFGR_PPRE_DIV_2, //freq should not exceed 36MHz - .ppre2 = RCC_CFGR_PPRE_DIV_NONE, - .adcpre = RCC_CFGR_ADCPRE_DIV_6, //freq should not exceed 14MHz - .flash_cfg = FLASH_ACR_LATENCY_2, - .ahb_freq = 72000000, - .apb1_freq = 36000000, - .apb2_freq = 72000000 - }, - - {/* Powersave Mode */ - .type = RCC_HSE, - .hpre = RCC_CFGR_HPRE_DIV_16, - .ppre1 = RCC_CFGR_PPRE_DIV_16, - .ppre2 = RCC_CFGR_PPRE_DIV_16, - .adcpre = RCC_CFGR_ADCPRE_DIV_2, - .flash_cfg = FLASH_ACR_LATENCY_0, - .ahb_freq = 500000, - .apb1_freq = 500000, - .apb2_freq = 500000 - } -}; - -static void rcc_osc_on(enum rcc_osc osc) -{ - switch (osc) { - case RCC_HSI: - if (!(RCC->CR & RCC_CR_HSION)) { - RCC->CR |= RCC_CR_HSION; - while ((RCC->CR & RCC_CR_HSIRDY)==0); - } - break; - case RCC_HSE: - if (!(RCC->CR & RCC_CR_HSEON)) { - RCC->CR |= RCC_CR_HSEON; - while ((RCC->CR & RCC_CR_HSERDY)==0); - } - break; - case RCC_PLL: - if (!(RCC->CR & RCC_CR_PLLON)) { - RCC->CR |= RCC_CR_PLLON; - while ((RCC->CR & RCC_CR_PLLRDY)==0); - } - break; - case RCC_LSI: - if (!(RCC->CSR & RCC_CSR_LSION)) { - RCC->CSR |= RCC_CSR_LSION; - while ((RCC->CSR & RCC_CSR_LSIRDY)==0); - } - break; - case RCC_LSE: - if (!(RCC->BDCR & RCC_BDCR_LSEON)) { - RCC->BDCR |= RCC_BDCR_LSEON; - while ((RCC->BDCR & RCC_BDCR_LSERDY)==0); - } - break; - } -} - -static void rcc_osc_off(enum rcc_osc osc) -{ - switch (osc) { - case RCC_HSI: - RCC->CR &= ~RCC_CR_HSION; - break; - case RCC_HSE: - RCC->CR &= ~(RCC_CR_HSEON | RCC_CR_HSEBYP | RCC_CR_CSSON); - break; - case RCC_PLL: - RCC->CR &= ~RCC_CR_PLLON; - break; - case RCC_LSI: - RCC->CSR &= ~RCC_CSR_LSION; - break; - case RCC_LSE: - RCC->BDCR &= ~RCC_BDCR_LSEON; - break; - } -} - -static void rcc_set_sysclk(enum rcc_osc osc) -{ - RCC->CFGR = (RCC->CFGR & ~0x3) | (osc & 3); - while (((RCC->CFGR & 0xC)>>2) != osc); -} - -void rcc_config_clock(uint32_t config, Clock_t *sysclks) -{ - struct ClockConfig_t *clk; - - if (config < CLOCK_CONFIG_END) { - clk=&(_clock_config[config]); - } else { - clk=&(_clock_config[CLOCK_CONFIG_PERFORMANCE]); - } - - if (clk->type == RCC_HSE) { // HSE Clock - rcc_osc_on(RCC_HSE); - rcc_set_sysclk(RCC_HSE); - rcc_osc_off(RCC_PLL); - rcc_osc_off(RCC_HSI); - - } else if (clk->type == RCC_PLL) { - // enable PWR module clocking - RCC->APB1ENR |= 1<<28; - - if (clk->pll_src == RCC_HSE) { // HSE Clock src - rcc_osc_on(RCC_HSE); - } else { // Default: HSI Clock src - rcc_osc_on(RCC_HSI); - } - - // configure prescalers for - // AHB: AHBCLK > 25MHz - // APB1: APB1CLK <= 36MHz - // APB2: APB2CLK <= 72MHz - RCC->CFGR = ( RCC->CFGR & ~((0x3F<<8) | (0xF<<4) | (0x3<<14)) ) | - ((clk->hpre & 0xF) << 4) | - ((clk->ppre1 & 0x7) << 8) | - ((clk->ppre2 & 0x7) << 11)| - (clk->adcpre << 14); - - // configure PLL - RCC->CFGR &= !(0xF<<18); - RCC->CFGR |= clk->pllmul<<18; - - // enable PLL oscillator - rcc_osc_on(RCC_PLL); - - // set Flash timings - FLASH->ACR &= !0x8; - FLASH->ACR |= clk->flash_cfg; - //TODO set buffer bits - - // connect to PLL - rcc_set_sysclk(RCC_PLL); - - // stop unused clock - if ((clk->pll_src == RCC_HSE) && (RCC->CR & RCC_CR_HSION)) - rcc_osc_off(RCC_HSI); - else - rcc_osc_off(RCC_HSE); - - } else { // Default: HSI Clock - rcc_osc_on(RCC_HSI); - rcc_set_sysclk(RCC_HSI); - rcc_osc_off(RCC_PLL); - rcc_osc_off(RCC_HSE); - } - sysclks->ahb_freq = clk->ahb_freq; - sysclks->apb1_freq = clk->apb1_freq; - sysclks->apb2_freq = clk->apb2_freq; - sysclks->apb1_timer_freq = - clk->ppre1==RCC_CFGR_PPRE_DIV_NONE ? clk->apb1_freq : 2*clk->apb1_freq; - sysclks->apb2_timer_freq = - clk->ppre2==RCC_CFGR_PPRE_DIV_NONE ? clk->apb2_freq : 2*clk->apb2_freq; -} diff --git a/src/drivers/rcc.h b/src/drivers/rcc.h deleted file mode 100644 index 8996c09..0000000 --- a/src/drivers/rcc.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef _RCC_H_ -#define _RCC_H_ - -#include "../target/stm32f103xb.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct _Clock_t { - uint32_t ahb_freq; - uint32_t apb1_freq; - uint32_t apb1_timer_freq; - uint32_t apb2_freq; - uint32_t apb2_timer_freq; -} Clock_t; - -enum Clock_config { - CLOCK_CONFIG_PERFORMANCE, - CLOCK_CONFIG_POWERSAVE, - CLOCK_CONFIG_END -}; - -//void SystemInit(void); - -void rcc_config_clock(uint32_t config, Clock_t *sysclks); - -# -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/drivers/timer.c b/src/drivers/timer.c deleted file mode 100644 index 58d8900..0000000 --- a/src/drivers/timer.c +++ /dev/null @@ -1,311 +0,0 @@ -#include "timer.h" - -extern Clock_t sysclks; - -//------------------------------------------------------------------------------ -static OnTick callback1 = 0; -static OnTick callback2 = 0; -static OnTick callback3 = 0; -static OnTick callback4 = 0; - -void TIM1_UP_IRQHandler(void) { - if (callback1) callback1(); - TIM1->SR &= ~0x1F; -} - -void TIM2_IRQHandler(void) { - if (callback2) callback2(); - TIM2->SR &= ~0x1F; -} - -void TIM3_IRQHandler(void) { - if (callback3) callback3(); - TIM3->SR &= ~0x1F; -} - -void TIM4_IRQHandler(void) { - if (callback4) callback4(); - TIM4->SR &= ~0x1F; -} - -//------------------------------------------------------------------------------ -int timer_config_cb(TIM_TypeDef* tmr, uint32_t* clk, OnTick cb) { - IRQn_Type irqn; - uint32_t irq_priority; - - // get clocks config - if (tmr == TIM1) { - *clk = sysclks.apb2_timer_freq; - - // register callback function - callback1 = cb; - irqn = TIM1_UP_IRQn; //every update - irq_priority = TIM1_IRQ_PRIORITY; - - // enable timer clocking - RCC->APB2ENR |= 1<<11; - - } else if (tmr == TIM2) { - *clk = sysclks.apb1_timer_freq; - - // register callback function - callback2 = cb; - irqn = TIM2_IRQn; - irq_priority = TIM2_IRQ_PRIORITY; - - // enable timer clocking - RCC->APB1ENR |= 1<<0; - - } else if (tmr == TIM3) { - *clk = sysclks.apb1_timer_freq; - - // register callback function - callback3 = cb; - irqn = TIM3_IRQn; - irq_priority = TIM3_IRQ_PRIORITY; - - // enable timer clocking - RCC->APB1ENR |= 1<<1; - - } else if (tmr == TIM4) { - *clk = sysclks.apb1_timer_freq; - - // register callback function - callback4 = cb; - irqn = TIM4_IRQn; - irq_priority = TIM4_IRQ_PRIORITY; - - // enable timer clocking - RCC->APB1ENR |= 1<<2; - - } else return -1; - - // clear pending interrupts - tmr->SR &= !1; - - // Enable interrupts - tmr->DIER = (1<<0); - NVIC_SetPriority(irqn,irq_priority); - NVIC_EnableIRQ(irqn); - - return 0; -} - -//------------------------------------------------------------------------------ -int timer_wait_ms(TIM_TypeDef* tmr, uint16_t ms, OnTick cb) { - uint32_t clk = 0; - - if(!cb) { //blocking - //get clocks config - if (tmr == TIM1) { - clk = sysclks.apb2_timer_freq; - RCC->APB2ENR |= 1<<11; - } - else { - clk = sysclks.apb1_timer_freq; - if (tmr == TIM2) RCC->APB1ENR |= 1<<0; - else if (tmr == TIM3) RCC->APB1ENR |= 1<<1; - else if (tmr == TIM4) RCC->APB1ENR |= 1<<2; - else return -1; // no such timer - } - - // set period - tmr->ARR = 0xFFFFFFFF; - - } else { //non-blocking - if(timer_config_cb(tmr, &clk, cb)) return -1; - - // set period - tmr->ARR = ms-1; - } - - // set mode - tmr->CR1 = (1<<7) | (1<<2); //buffering and update settings - tmr->CR1 |= (1<<3); //one pulse mode - - // set prescaler 1ms - tmr->PSC = 8*(clk/1000)-1; //PSC = clk/f - 1 | don't know why 8 times.. - - timer_start(tmr); - - if(!cb) { - while(tmr->CNT < ms); //waiting for end of delay - } - - return 0; -} - -int timer_wait_us(TIM_TypeDef* tmr, uint16_t us, OnTick cb) { - uint32_t clk = 0; - - if(!cb) { //blocking - //get clocks config - if (tmr == TIM1) { - clk = sysclks.apb2_timer_freq; - RCC->APB2ENR |= 1<<11; - } - else { - clk = sysclks.apb1_timer_freq; - if (tmr == TIM2) RCC->APB1ENR |= 1<<0; - else if (tmr == TIM3) RCC->APB1ENR |= 1<<1; - else if (tmr == TIM4) RCC->APB1ENR |= 1<<2; - else return -1; // no such timer - } - - // set period - tmr->ARR = 0xFFFFFFFF; - - } else { //non-blocking - if(timer_config_cb(tmr, &clk, cb)) return -1; - - // set period - tmr->ARR = us-1; - } - - // set mode - tmr->CR1 = (1<<7) | (1<<2); //buffering and update settings - tmr->CR1 |= (1<<3); //one pulse mode - - // set prescaler 1us - tmr->PSC = 8*(clk/1000000)-1; //PSC = clk/f - 1 | don't know why 8 times.. - - timer_start(tmr); - - if(!cb) { - while(tmr->CNT < us); //waiting for end of delay - } - - return 0; -} - - -//------------------------------------------------------------------------------ -int timer_tick_init(TIM_TypeDef *tmr, uint16_t tick_ms, OnTick cb) { - IRQn_Type irqn; - uint32_t irq_priority, clk; - - // get back the clock frequency - if (tmr == TIM1) { - clk = sysclks.apb2_timer_freq; - - // register callback function - callback1 = cb; - irqn = TIM1_UP_IRQn; //every update - irq_priority = TIM1_IRQ_PRIORITY; - - // enable timer clocking - RCC->APB2ENR |= 1<<11; - - } else if (tmr == TIM2) { - clk = sysclks.apb1_timer_freq; - - // register callback function - callback2 = cb; - irqn = TIM2_IRQn; - irq_priority = TIM2_IRQ_PRIORITY; - - // enable timer clocking - RCC->APB1ENR |= 1<<0; - - } else if (tmr == TIM3) { - clk = sysclks.apb1_timer_freq; - - // register callback function - callback3 = cb; - irqn = TIM3_IRQn; - irq_priority = TIM3_IRQ_PRIORITY; - - // enable timer clocking - RCC->APB1ENR |= 1<<1; - - } else if (tmr == TIM4) { - clk = sysclks.apb1_timer_freq; - - // register callback function - callback4 = cb; - irqn = TIM4_IRQn; - irq_priority = TIM4_IRQ_PRIORITY; - - // enable timer clocking - RCC->APB1ENR |= 1<<2; - - } else return -1; - - // clear pending interrupts - tmr->SR &= !1; - - // set mode - tmr->CR1 = (1<<7) | (1<<2); //buffering and update settings - tmr->DIER = (1<<0); //Enable interrupts - - // set prescaler 1ms - tmr->PSC = 8*(clk/1000)-1; //PSC = clk/f - 1 | don't know why 8 times... - - // set period - if(timer_set_period(tmr,tick_ms)) return -1; - - if (cb) { - NVIC_SetPriority(irqn,irq_priority); - NVIC_EnableIRQ(irqn); //unmask IRQ - } - - return 0; -} - -int timer_set_period(TIM_TypeDef *tmr, uint16_t tick) { - // set period - tmr->ARR = tick-1; //tickms = (ARR+1)Tpsc - - // force update to reset counter and apply prescaler - tmr->EGR |= 1; - return 0; -} - -void timer_start(TIM_TypeDef *tmr) { - // force update to reset counter and prescaler - tmr->EGR |= 1; - - // enable counting - tmr->CR1 |= 1; -} - -void timer_stop(TIM_TypeDef *tmr) { - // disable counting - tmr->CR1 &= !1; -} - -//------------------------------------------------------------------------------ -int timer_enc_init(TIM_TypeDef* tmr) { - // enable timer - if (tmr == TIM1) { - RCC->APB2ENR |= 1<<11; - - } else if (tmr == TIM2) { - RCC->APB1ENR |= 1<<0; - - } else if (tmr == TIM3) { - RCC->APB1ENR |= 1<<1; - - } else if (tmr == TIM4) { - RCC->APB1ENR |= 1<<2; - - } else return -1; //no such timer - - //TODO set registers at reset value - - tmr->SMCR |= 0x1; //count on only one edge - tmr->ARR = (1 << 16)-1; - - // map inputs - tmr->CCMR1 |= 0x9; - tmr->CCMR1 |= 0x9 << 8; - - // enable input channels and invert them //TODO add an otpion for that - tmr->CCER |= 0x3; - tmr->CCER |= 0x3 << 4; - - tmr->CR1 |= 0x1; //enable timer - - return 0; -} - diff --git a/src/drivers/timer.h b/src/drivers/timer.h deleted file mode 100644 index b6cde97..0000000 --- a/src/drivers/timer.h +++ /dev/null @@ -1,88 +0,0 @@ -#ifndef TIMER_H -#define TIMER_H - -#include "../target/stm32f103xb.h" -#include "../config.h" -#include "rcc.h" - -typedef void (*OnTick)(void); - -//------------------------------------------------------------------------------ -/** timer_wait_ms - * wait for ms milliseconds function - */ -int timer_wait_ms(TIM_TypeDef *tmr, uint16_t ms, OnTick cb); - -/** timer_wait_us - * wait for us microseconds function - */ -int timer_wait_us(TIM_TypeDef *tmr, uint16_t us, OnTick cb); - -//------------------------------------------------------------------------------ -/** timer_tick_init - * setup timer to call cb function periodically, each tick_ms - */ -int timer_tick_init(TIM_TypeDef *tmr, uint16_t tick_ms, OnTick cb); - -/** timer_set_period - * change the period, in ms when called after tick_init, - * otherwise in whatever unit the timer is configured - * reset count when used - */ -int timer_set_period(TIM_TypeDef *tmr, uint16_t tick); - -/** timer_start - * reset count and start counting - */ -void timer_start(TIM_TypeDef *tmr); - -/** timer_stop - * stop counting - */ -void timer_stop(TIM_TypeDef *tmr); - -//------------------------------------------------------------------------------ -/** timer_enc_init - * setup timer to read encoder output and keep track of it's position in the - * CNT register whithout using CPU time - */ -int timer_enc_init(TIM_TypeDef* tmr); - -//------------------------------------------------------------------------------ -//#define PWM_CHANNEL_1 0 -//#define PWM_CHANNEL_2 1 -//#define PWM_CHANNEL_3 2 -//#define PWM_CHANNEL_4 3 -// -///** pwm_init -// * setup pwm timer period, each tick_ms -// */ -//int pwm_init(TIM_TypeDef *pwm, uint32_t period_ms, OnTick cb); -// -///** pwm_channel_enable -// * set up pwm channel -// */ -//int pwm_channel_enable(TIM_TypeDef *pwm, uint32_t channel, uint32_t dutycycle, uint32_t oe); -// -///** pwm_channel_disable -// * disable pwm channel -// */ -//int pwm_channel_disable(TIM_TypeDef *pwm, uint32_t channel); -// -///** pwm_channel_set -// * set up dutycycle for pwm channel -// */ -//int pwm_channel_set(TIM_TypeDef *pwm, uint32_t channel, uint32_t dutycycle); -// -///** pwm_start -// * start counting -// */ -//#define pwm_start(pwm) timer_start(pwm) -// -///** pwm_stop -// * stop and reset counting -// */ -//#define pwm_stop(pwm) timer_stop(pwm) - -#endif - diff --git a/src/lcd_gui.rs b/src/lcd_gui.rs new file mode 100644 index 0000000..27e44ba --- /dev/null +++ b/src/lcd_gui.rs @@ -0,0 +1,328 @@ +use core::{ + sync::atomic::{AtomicBool, Ordering}, + fmt, +}; + +use embedded_hal::{ + //digital::v1_compat::OldOutputPin, + digital::v2::OutputPin, + Qei, + blocking::delay::{DelayUs, DelayMs}, +}; + +use hd44780_driver::{ + HD44780, + display_mode::DisplayMode, + bus::DataBus, +}; + +use crate::{ + state::SystemState, + config::{Menu, SystemConfig, FanOutput}, +}; + +//-------------------------------------------------------------------------------------------------- +/* GUI config */ + +pub const GUI_TICK_SEC: f32 = 0.2; +const GUI_ERROR_SEC: f32 = 0.8; + +//---Temp Enum-------------------------------------------------------------------------------------- +/// A simple enum to handle displaying temps on the GUI. Temperatures can be valid or not. An +/// invalid temperature is displayed as "inval°C" whereas a valid temperature is displayed as +/// XX.XX°C +pub enum Temp { + Valid (f32), + Invalid, +} + +impl fmt::Display for Temp { + fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + match self { + Temp::Valid (deg) => formatter.write_fmt(format_args!("{:.1}", deg)), + Temp::Invalid => formatter.write_str("inval"), + } + } +} + +impl core::convert::From> for Temp { + fn from(val: Option) -> Self { + match val { + Some(deg) => Temp::Valid(deg), + None => Temp::Invalid, + } + } +} + +impl core::convert::From for Temp { + fn from(val: f32) -> Self { + Temp::Valid(val) + } +} + +impl core::cmp::PartialEq for Temp { + fn eq(&self, other: &Self) -> bool { + match self { + Self::Valid (val) => match other { + Self::Invalid => false, + Self::Valid (other_val) => val == other_val, + }, + Self::Invalid => match other { + Self::Invalid => true, + _ => false, + }, + } + } +} + +//---LCDGui Struct---------------------------------------------------------------------------------- + +pub enum GUIState { + Off, + Idle, + Menu, + Error (&'static str), +} + +/// Manages the lcd screen and inputs (encoder + button) and display relevant information. Can also +/// be used to configure the system. The update() function should be called frequently to refresh +/// the GUI (every 0.2s is enough). +pub struct LCDGui +where + L: LCDScreen, + Q: Qei, + B: OutputPin, +{ + lcd: L, + qei: Q, + button: &'static AtomicBool, + backlight: Option, + count: i32, + state: GUIState, + menu: Menu, + ext_deg: Temp, + p1_deg: Temp, + p2_deg: Temp, + should_refresh: bool, + blink_counter: i32, +} + +impl LCDGui +where + L: LCDScreen, + Q: Qei, + B: OutputPin, +{ + + /// Create and configure a new GUI. By default the screen will display the idle screen. + pub fn new(lcd: L, qei: Q, button: &'static AtomicBool, backlight: Option, + config: &SystemConfig) + -> LCDGui { + + use hd44780_driver::{Cursor, CursorBlink, Display}; + + let count = qei.count() as i32; + let mut gui = LCDGui { + lcd, + qei, + button, + backlight, + count, + state: GUIState::Idle, + menu: Menu::new(config), + ext_deg: Temp::Invalid, + p1_deg: Temp::Invalid, + p2_deg: Temp::Invalid, + should_refresh: true, + blink_counter: 0, + }; + + if let Some(bl) = &mut gui.backlight { let _ = bl.set_high(); }; + + gui.lcd.reset(); + gui.lcd.clear(); + gui.lcd.set_display_mode( + DisplayMode { + display: Display::On, + cursor_visibility: Cursor::Invisible, + cursor_blink: CursorBlink::Off, + }); + + gui + } + + /// Perform the necessary operations after an action on the button or the encoder. This + /// function should be called frequently (every 0.2s is enough) to keep track of the state of + /// the encoder. For added reactivness, it can also be called on a button press. The function + /// can modifify the system's config through the system state and will take care of updating + /// the latter. Return true when something has been updated during the function call, usefull + /// for implementing powersaving features. + pub fn update(&mut self, state: &mut SystemState) -> bool { + + let mut input_update = false; + + // manage button press + if self.button.swap(false, Ordering::AcqRel) { + input_update = true; + + // update state machine + match self.state { + GUIState::Off => { + self.state = GUIState::Idle; + self.lcd.clear(); + if let Some(bl) = &mut self.backlight { let _ = bl.set_high(); }; + self.should_refresh = true; + }, + GUIState::Idle => { + self.state = GUIState::Menu; + self.menu.display(&mut self.lcd); + }, + GUIState::Menu => { + + //TODO improve that + let mut config: SystemConfig = *state.config(); + if self.menu.button_update(&mut config) { + self.state = GUIState::Idle; + self.update_temps(state); + } else { + state.update_config(config); + self.menu.display(&mut self.lcd); + } + }, + GUIState::Error (_) => { + self.state = GUIState::Idle; + self.lcd.clear(); + self.should_refresh = true; + }}} + + // manage encoder movement + let count = self.qei.count() as i32 / 2; + let diff1 = count - self.count; + let diff2 = 511 - i32::abs(diff1); + let diff = if i32::abs(diff1) < diff2 { + diff1 + } else { + diff2 * -i32::signum(diff1) + }; + + if diff != 0 { + input_update = true; + self.count = count; + } + + // display relevant screen + match self.state { + GUIState::Off => {}, + GUIState::Idle => { + if self.should_refresh { + display_idle_screen(&mut self.lcd, &self.ext_deg, &self.p1_deg, &self.p2_deg, + &state.config().fan_output); + self.should_refresh = false; + } + }, + GUIState::Menu => { + if diff != 0 { + self.menu.movement_update(diff); + self.menu.display(&mut self.lcd); + } + }, + GUIState::Error (err)=> { + self.blink_counter += 1; + + if self.blink_counter as f32 * GUI_TICK_SEC >= 2.0*GUI_ERROR_SEC { + let _ = write!(self.lcd, "Erreur: "); + self.lcd.set_cursor_pos(0x40); + let _ = write!(self.lcd, "{}", err); + self.blink_counter = 0; + } else if self.blink_counter as f32 * GUI_TICK_SEC >= GUI_ERROR_SEC { + self.lcd.clear(); + } + }} + + input_update + } + + /// Update the temperatures to display on the idle screen. Should be called whenever the + /// temperatures are modified. + pub fn update_temps(&mut self, state: &SystemState) { + + self.ext_deg = state.ext_temp().into(); + self.p1_deg = state.p1_temp().into(); + self.p2_deg = state.p2_temp().into(); + + self.should_refresh = true; + } + + pub fn sleep(&mut self) { + + self.state = GUIState::Off; + + // reset menu in case the user was in-menu + self.menu.reset(); + + // manage lcd + self.lcd.clear(); + //TODO set display off ? + if let Some(bl) = &mut self.backlight { let _ = bl.set_low(); }; + } + + pub fn display_error(&mut self, error: &'static str) { + self.state = GUIState::Error (error); + self.blink_counter = 0; + } +} + +fn display_idle_screen(screen: &mut L, ext_deg: &Temp, p1_deg: &Temp, p2_deg: &Temp, + fan_output: &FanOutput) { + + // display temperatures + screen.clear(); + screen.set_cursor_pos(0); + let _ = write!(screen, "Ext:{}", ext_deg); + screen.set_cursor_pos(0x41); + let _ = write!(screen, "1:{}", p1_deg); + screen.set_cursor_pos(0x49); + let _ = write!(screen, "2:{}", p2_deg); + + // display probe selection + match fan_output { + FanOutput::P1 => screen.set_cursor_pos(0x40), + FanOutput::P2 => screen.set_cursor_pos(0x48), + } + let _ = write!(screen, "*"); +} + +//---LCDScreen trait-------------------------------------------------------------------------------- +/// A wrapper trait to complement the write trait by adding the extra functions provided by a lcd +/// screen, such as cursor position. +pub trait LCDScreen: core::fmt::Write { + + fn reset(&mut self); + fn clear(&mut self); + fn set_display_mode(&mut self, mode: DisplayMode); + fn set_cursor_pos(&mut self, positions: u8); +} + +impl LCDScreen for HD44780 +where + D: DelayUs + DelayMs, + DB: DataBus, +{ + + fn reset(&mut self) { + self.reset() + } + + fn clear(&mut self) { + self.clear() + } + + fn set_display_mode(&mut self, mode: DisplayMode) { + self.set_display_mode(mode) + } + + fn set_cursor_pos(&mut self, position: u8) { + self.set_cursor_pos(position); + } +} + diff --git a/src/main.c b/src/main.c deleted file mode 100644 index fffa31b..0000000 --- a/src/main.c +++ /dev/null @@ -1,52 +0,0 @@ -// standard headers -#include -#include - -// driver includes -#include "drivers/rcc.h" -#include "drivers/io.h" - -Clock_t sysclks; -#include "drivers/timer.h" - -extern uint32_t end; - -//------------------------------------------------------------------------------ -/* static variables */; -int val = 0; //debug led - -//------------------------------------------------------------------------------ -/* Timer IRQ */ -static void timeout_cb(void) { - io_write(GPIOC, val, PIN_13); - val = !val; -} - -//------------------------------------------------------------------------------ -/* main function */ -int main(void) { - - // configure clocks (necessary before using timers) - rcc_config_clock(CLOCK_CONFIG_PERFORMANCE, &sysclks); - - // configure GPIO for LED - if(io_configure(GPIOC, PIN_13, IO_MODE_OUTPUT | IO_OUT_PUSH_PULL, 0)) - return -1; - io_write(GPIOC, 1, PIN_13); - - // start timed interruption - timer_tick_init(TIM2, 1000, timeout_cb); - timer_start(TIM2); - - uint32_t test = (uint32_t)(&end); - test++; - int* tab = (int*)malloc(10*sizeof(int)); - for(int i=0; i<10; ++i) { - tab[i] = i; - } - - // main loop - for(;;); - - return 0; -} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..ec208b9 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,371 @@ +#![no_std] +#![no_main] + +extern crate panic_halt; + +use core::{ + cell::RefCell, + sync::atomic::{AtomicBool, Ordering}, +}; + +use cortex_m::interrupt::Mutex; +use cortex_m_rt::entry; + +use embedded_hal::digital::{ + v1_compat::OldOutputPin, +}; + +use stm32f1xx_hal::{ + gpio::*, + adc::{Adc, SampleTime}, + pac, + pac::{interrupt, Interrupt, EXTI}, + prelude::*, + timer::{Timer, CountDownTimer, Event}, + qei::{QeiOptions, SlaveMode}, + rtc::{Rtc, RtcClkLsi}, +}; + +mod lcd_gui; +use lcd_gui::{LCDGui, GUI_TICK_SEC}; + +mod utils; +use utils::{ + TemperatureProbe, + ConfigStorage, +}; + +mod config; +use config::SystemConfig; + +mod state; +use state::SystemState; + +//-------------------------------------------------------------------------------------------------- +/* system config */ + +const AWAKE_TIMEOUT_SEC: f32 = 20.0; +const HEARTBEAT_SEC: f32 = 1.0; + +const TEMPS_TICK_SEC: u32 = 30; + +//-------------------------------------------------------------------------------------------------- +/* interrupt variables */ + +// tick/heartbeat timer +static PCB_LED: Mutex>>>> + = Mutex::new(RefCell::new(None)); +static TICK_TIMER: Mutex>>> + = Mutex::new(RefCell::new(None)); + +// button interrupt +static BUTTON_PIN: Mutex>>>> + = Mutex::new(RefCell::new(None)); +static BUTTON_FLAG: AtomicBool = AtomicBool::new(false); + +// temps interrupt +static RTC: Mutex>>> = Mutex::new(RefCell::new(None)); +static G_EXTI: Mutex>> = Mutex::new(RefCell::new(None)); +static TEMP_FLAG: AtomicBool = AtomicBool::new(false); + +//-------------------------------------------------------------------------------------------------- +/* power management */ +enum PowerState { + Awake, + Sleeping, +} + +//-------------------------------------------------------------------------------------------------- +/* error management */ +enum ErrorState { + NoError, + NewError (&'static str), + HandlingError, +} + +//-------------------------------------------------------------------------------------------------- +/* interrupt service routines */ +#[interrupt] +fn TIM2() { + + static mut TICK_DIVIDER: u32 = 0; + + cortex_m::interrupt::free(|cs| { + let _ = TICK_TIMER.borrow(cs).borrow_mut().as_mut().unwrap().clear_update_interrupt_flag(); + }); + + *TICK_DIVIDER += 1; + if *TICK_DIVIDER >= (HEARTBEAT_SEC / GUI_TICK_SEC) as u32 { + *TICK_DIVIDER = 0; + cortex_m::interrupt::free(|cs| { + let _ = PCB_LED.borrow(cs).borrow_mut().as_mut().unwrap().toggle(); + }); + } +} + +#[interrupt] +fn EXTI9_5() { + + cortex_m::interrupt::free(|cs| { + let _ = BUTTON_PIN.borrow(cs).borrow_mut().as_mut().unwrap().clear_interrupt_pending_bit(); + }); + + BUTTON_FLAG.store(true, Ordering::Release); +} + +#[interrupt] +fn RTCALARM() { + + cortex_m::interrupt::free(|cs| { + let _ = G_EXTI.borrow(cs).borrow_mut().as_mut().unwrap().pr.write(|w| w.pr17().set_bit()); + }); + + cortex_m::interrupt::free(|cs| { + let mut rtc = RTC.borrow(cs).borrow_mut(); + let time = rtc.as_mut().unwrap().current_time(); + rtc.as_mut().unwrap().set_alarm(time + TEMPS_TICK_SEC); //also clears the flag + }); + + TEMP_FLAG.store(true, Ordering::Release); +} + +//-------------------------------------------------------------------------------------------------- +/* main function */ +#[entry] +fn main() -> ! { + + /* setup */ + + // basic setup + let mut cp = cortex_m::Peripherals::take().unwrap(); + let mut dp = pac::Peripherals::take().unwrap(); + + // clocks config + let rcc = dp.RCC.constrain(); + let mut flash = dp.FLASH.constrain(); + let clocks = rcc.cfgr + .use_hse(8.mhz()) + .freeze(&mut flash.acr); + + // GPIOs + let mut gpioa = dp.GPIOA.split(); + let mut gpiob = dp.GPIOB.split(); + let mut gpioc = dp.GPIOC.split(); + + // setup LED + let mut led = gpioc.pc13.into_push_pull_output(&mut gpioc.crh); + let _ = led.set_high(); + + cortex_m::interrupt::free(|cs| { + PCB_LED.borrow(cs).borrow_mut().replace(led) + }); + + // Configure the timer 2 as tick timer + let mut timer = Timer::tim2(dp.TIM2, &clocks) + .start_count_down(((1.0/GUI_TICK_SEC) as u32).hz()); + timer.listen(Event::Update); + + cortex_m::interrupt::free(|cs| { + TICK_TIMER.borrow(cs).borrow_mut().replace(timer) + }); + + // set EXTI 17 (see note in 18.4.2, in short : needed for rtc ISR to trigger) + dp.EXTI.ftsr.write(|w| w.tr17().set_bit()); + dp.EXTI.imr.write(|w| w.mr17().set_bit()); + + // setup RTC + let mut backup_domain = rcc.bkp.constrain(dp.BKP, &mut dp.PWR); + let mut rtc = Rtc::::rtc(dp.RTC, &mut backup_domain); + rtc.set_alarm(rtc.current_time() + TEMPS_TICK_SEC); + rtc.listen_alarm(); + + cortex_m::interrupt::free(|cs| { + RTC.borrow(cs).borrow_mut().replace(rtc) + }); + + let mut afio = dp.AFIO.constrain(); + + // initialize system state + let mut config_storage = ConfigStorage::new(backup_domain, dp.CRC.new()); + let mut error_state = ErrorState::NoError; + let config = match config_storage.load_config() { + Ok(conf) => conf, + Err(_) => { + error_state = ErrorState::NewError("config invalide"); + let conf = SystemConfig::new(); + config_storage.save_config(&conf); + conf + }}; + let mut state = SystemState::new(config, config_storage, + gpiob.pb12.into_push_pull_output(&mut gpiob.crh)); + + // Setup display + let mut gui = { + use stm32f1xx_hal::{gpio::*, delay::Delay}; + + use hd44780_driver::HD44780; + + // Disable JTAG to free pins + let (d3_pin, d5_pin, d7_pin) = afio.mapr.disable_jtag(gpioa.pa15, gpiob.pb3, gpiob.pb4); + + // Setup pins + let rs_pin = gpioa.pa10.into_push_pull_output(&mut gpioa.crh); + let en_pin = gpioa.pa11.into_push_pull_output(&mut gpioa.crh); + let d0_pin = gpioa.pa8.into_push_pull_output(&mut gpioa.crh); + let d1_pin = gpioa.pa12.into_push_pull_output(&mut gpioa.crh); + let d2_pin = gpiob.pb15.into_push_pull_output(&mut gpiob.crh); + let d3_pin = d3_pin.into_push_pull_output(&mut gpioa.crh); + let d4_pin = gpiob.pb14.into_push_pull_output(&mut gpiob.crh); + let d5_pin = d5_pin.into_push_pull_output(&mut gpiob.crl); + let d6_pin = gpiob.pb13.into_push_pull_output(&mut gpiob.crh); + let d7_pin = d7_pin.into_push_pull_output(&mut gpiob.crl); + + // Force write mode + let mut rw_pin = gpioa.pa9.into_push_pull_output(&mut gpioa.crh); + rw_pin.set_low(); + + let lcd = HD44780::new_8bit( + OldOutputPin::new(rs_pin), + OldOutputPin::new(en_pin), + OldOutputPin::new(d0_pin), + OldOutputPin::new(d1_pin), + OldOutputPin::new(d2_pin), + OldOutputPin::new(d3_pin), + OldOutputPin::new(d4_pin), + OldOutputPin::new(d5_pin), + OldOutputPin::new(d6_pin), + OldOutputPin::new(d7_pin), + Delay::new(cp.SYST, clocks) + ); + + // setup button (interrupt) + let mut but_pin = gpiob.pb8.into_floating_input(&mut gpiob.crh); + but_pin.make_interrupt_source(&mut afio); + but_pin.trigger_on_edge(&dp.EXTI, Edge::Rising); + but_pin.enable_interrupt(&dp.EXTI); + + cortex_m::interrupt::free(|cs| { + BUTTON_PIN.borrow(cs).borrow_mut().replace(but_pin); + }); + + // Set backlight + let backlight_pin = gpiob.pb9.into_push_pull_output(&mut gpiob.crh); + + // setup encoder + let enc = Timer::tim4(dp.TIM4, &clocks) + .qei((gpiob.pb6, gpiob.pb7), &mut afio.mapr, + QeiOptions { + slave_mode:SlaveMode::EncoderMode1, + auto_reload_value: 1022, + }); + + LCDGui::new(lcd, enc, &BUTTON_FLAG, Some(backlight_pin), state.config()) + }; + + let exti = dp.EXTI; + cortex_m::interrupt::free(|cs| { + G_EXTI.borrow(cs).borrow_mut().replace(exti); + }); + + // Enable interrupts + unsafe { + cortex_m::peripheral::NVIC::unmask(Interrupt::TIM2); + cortex_m::peripheral::NVIC::unmask(Interrupt::EXTI9_5); + cortex_m::peripheral::NVIC::unmask(Interrupt::RTCALARM); + } + + // allow the debugging to continue in sleep and stop modes + #[cfg(debug_assertions)] + dp.DBGMCU.cr.write(|w| w.dbg_sleep().set_bit()); + #[cfg(debug_assertions)] + dp.DBGMCU.cr.write(|w| w.dbg_stop().set_bit()); + + // configure stop mode (not working yet, probably due to fake chip) + //dp.PWR.cr.write(|w| w.pdds().stop_mode()); + //dp.PWR.cr.write(|w| w.lpds().set_bit()); + + // setup adc + let mut adc = Adc::adc1(dp.ADC1, clocks); + adc.set_sample_time(SampleTime::T_71); + let adc = RefCell::new(adc); + let ext1 = gpioa.pa4.into_analog(&mut gpioa.crl); + let ext2 = gpioa.pa5.into_analog(&mut gpioa.crl); + let p2_1 = gpioa.pa2.into_analog(&mut gpioa.crl); + let p2_2 = gpioa.pa3.into_analog(&mut gpioa.crl); + let p1_1 = gpioa.pa0.into_analog(&mut gpioa.crl); + let p1_2 = gpioa.pa1.into_analog(&mut gpioa.crl); + + let mut ext_probe = TemperatureProbe::new(&adc, ext1, ext2).unwrap(); + let mut p1_probe = TemperatureProbe::new(&adc, p1_1, p1_2).unwrap(); + let mut p2_probe = TemperatureProbe::new(&adc, p2_1, p2_2).unwrap(); + + let mut power_state = PowerState::Awake; + let mut timeout = 0; + + /* run */ + let _ = TEMP_FLAG.swap(true, Ordering::Release); + + // fix some weird bug caused by the debouncing capacitor of the button + for _ in 0..10 { + cortex_m::asm::wfi(); + } + BUTTON_FLAG.store(false, Ordering::Release); + + loop { + + match error_state { + ErrorState::NoError => { + if TEMP_FLAG.swap(false, Ordering::AcqRel) { + + // compute temps + let ext_temp = ext_probe.read().ok(); + let p1_temp = p1_probe.read().ok(); + let p2_temp = p2_probe.read().ok(); + + state.update(ext_temp, p1_temp, p2_temp); + gui.update_temps(&mut state); + + } else { + + match gui.update(&mut state) { + true => timeout = 0, + false => timeout += 1, + } + + // manage power state + match power_state { + PowerState::Awake => { // normal gui update + if timeout as f32 * GUI_TICK_SEC >= AWAKE_TIMEOUT_SEC { + // go to sleep + power_state = PowerState::Sleeping; + gui.sleep(); + cp.SCB.set_sleepdeep(); + } + }, + PowerState::Sleeping => { // button was pressed during sleep + // wake up + power_state = PowerState::Awake; + cp.SCB.clear_sleepdeep(); + }}} + }, + ErrorState::NewError (err) => { + gui.display_error(err); + state.stop(); + error_state = ErrorState::HandlingError; + }, + ErrorState::HandlingError => { + if gui.update(&mut state) { + error_state = ErrorState::NoError; + state.reset(); + ext_probe.reset().unwrap(); + p1_probe.reset().unwrap(); + p2_probe.reset().unwrap(); + timeout = 0; + } + }} + + // put device in sleep mode until next interrupt (button or timer) + cortex_m::asm::wfi(); + } +} + diff --git a/src/state.rs b/src/state.rs new file mode 100644 index 0000000..b89ce4d --- /dev/null +++ b/src/state.rs @@ -0,0 +1,148 @@ + +use embedded_hal::digital::v2::OutputPin; + +use crate::config::{ + SystemConfig, + FanOutput, +}; + +use crate::utils::ConfigStorage; + +pub enum FanState { + On, + Off, +} + +pub struct Fan { + state: FanState, + pin: O, +} + +impl Fan { + + pub fn new(mut pin: O) -> Fan { + + // erroring here means the pin is wrongly configured, there is nothing else to do... + pin.set_low().map_err(|_| "fan pin configuration").unwrap(); + Fan { + state: FanState::Off, + pin, + } + } + + pub fn on(&mut self) { + self.pin.set_high().map_err(|_| "fan pin configuration").unwrap(); + self.state = FanState::On; + } + + pub fn off(&mut self) { + self.pin.set_low().map_err(|_| "fan pin configuration").unwrap(); + self.state = FanState::Off; + } + + pub fn state(&self) -> &FanState { &self.state } +} + +pub struct SystemState { + config: SystemConfig, + config_storage: ConfigStorage, + ext_temp: Option, + p1_temp: Option, + p2_temp: Option, + fan: Fan, +} + +impl SystemState { + + pub fn new(config: SystemConfig, config_storage: ConfigStorage, fan_control_pin: O) + -> SystemState { + + SystemState { + config, + config_storage, + ext_temp: None, + p1_temp: None, + p2_temp: None, + fan: Fan::new(fan_control_pin), + } + } + + pub fn config(&self) -> &SystemConfig { &self.config } + pub fn ext_temp(&self) -> Option { self.ext_temp } + pub fn p1_temp(&self) -> Option { self.p1_temp } + pub fn p2_temp(&self) -> Option { self.p2_temp } + + pub fn update_config(&mut self, config: SystemConfig) { + + // remove offsets + let ext_temp = self.ext_temp.map(|temp| temp - self.config.ext_offset.offset); + let p1_temp = self.p1_temp.map(|temp| temp - self.config.p1_offset.offset); + let p2_temp = self.p2_temp.map(|temp| temp - self.config.p2_offset.offset); + + // replace config + self.config = config; + self.config_storage.save_config(&self.config); + + // reset fan state before recomputing fan state + self.fan.off(); + + // recompute offsets and fan state + self.update(ext_temp, p1_temp, p2_temp); + } + + pub fn update(&mut self, ext_temp: Option, p1_temp: Option, p2_temp: Option) { + + // apply offsets + self.ext_temp = ext_temp.map(|temp| temp + self.config.ext_offset.offset); + self.p1_temp = p1_temp.map(|temp| temp + self.config.p1_offset.offset); + self.p2_temp = p2_temp.map(|temp| temp + self.config.p2_offset.offset); + + // update cal values + self.config.ext_offset.raw_value = ext_temp; + self.config.p1_offset.raw_value = p1_temp; + self.config.p2_offset.raw_value = p2_temp; + + // select right probe and check if data is available + let p = match match self.config.fan_output { + FanOutput::P1 => self.p1_temp, + FanOutput::P2 => self.p2_temp, + } { + Some(temp) => temp, + None => { + self.fan.off(); + return; + }, + }; + let ext = match self.ext_temp { + Some(temp) => temp, + None => { + self.fan.off(); + return; + }, + }; + + // compute fan state + match self.fan.state() { + FanState::On => { + if (p - ext) < self.config.min_temp_diff { + self.fan.off(); + } + }, + FanState::Off => { + if (p - ext) > self.config.max_temp_diff { + self.fan.on(); + } + }} + } + + pub fn stop(&mut self) { + self.fan.off(); + } + + pub fn reset(&mut self) { + self.ext_temp = None; + self.p1_temp = None; + self.p2_temp = None; + self.fan.off(); + } +} diff --git a/src/target/STM32F103XB.ld b/src/target/STM32F103XB.ld deleted file mode 100644 index 9c1cb1f..0000000 --- a/src/target/STM32F103XB.ld +++ /dev/null @@ -1,177 +0,0 @@ -/** - ****************************************************************************** - * @file LinkerScript.ld - * @author Auto-generated by STM32CubeIDE - * @brief Linker script for STM32F103C8Tx Device from STM32F1 series - * 64Kbytes FLASH - * 20Kbytes RAM - * - * Set heap size, stack size and stack location according - * to application requirements. - * - * Set memory bank area and size if external memory is used - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Entry Point */ -ENTRY(Reset_Handler) - -/* Highest address of the user mode stack */ -_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ - -_Min_Heap_Size = 0x200; /* required amount of heap */ -_Min_Stack_Size = 0x400; /* required amount of stack */ - -/* Memories definition */ -MEMORY -{ - RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K - FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 64K -} - -/* Sections */ -SECTIONS -{ - /* The startup code into "FLASH" Rom type memory */ - .isr_vector : - { - . = ALIGN(4); - KEEP(*(.isr_vector)) /* Startup code */ - . = ALIGN(4); - } >FLASH - - /* The program code and other data into "FLASH" Rom type memory */ - .text : - { - . = ALIGN(4); - *(.text) /* .text sections (code) */ - *(.text*) /* .text* sections (code) */ - *(.glue_7) /* glue arm to thumb code */ - *(.glue_7t) /* glue thumb to arm code */ - *(.eh_frame) - - KEEP (*(.init)) - KEEP (*(.fini)) - - . = ALIGN(4); - _etext = .; /* define a global symbols at end of code */ - } >FLASH - - /* Constant data into "FLASH" Rom type memory */ - .rodata : - { - . = ALIGN(4); - *(.rodata) /* .rodata sections (constants, strings, etc.) */ - *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ - . = ALIGN(4); - } >FLASH - - .ARM.extab : { - . = ALIGN(4); - *(.ARM.extab* .gnu.linkonce.armextab.*) - . = ALIGN(4); - } >FLASH - - .ARM : { - . = ALIGN(4); - __exidx_start = .; - *(.ARM.exidx*) - __exidx_end = .; - . = ALIGN(4); - } >FLASH - - .preinit_array : - { - . = ALIGN(4); - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array*)) - PROVIDE_HIDDEN (__preinit_array_end = .); - . = ALIGN(4); - } >FLASH - - .init_array : - { - . = ALIGN(4); - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT(.init_array.*))) - KEEP (*(.init_array*)) - PROVIDE_HIDDEN (__init_array_end = .); - . = ALIGN(4); - } >FLASH - - .fini_array : - { - . = ALIGN(4); - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT(.fini_array.*))) - KEEP (*(.fini_array*)) - PROVIDE_HIDDEN (__fini_array_end = .); - . = ALIGN(4); - } >FLASH - - /* Used by the startup to initialize data */ - _sidata = LOADADDR(.data); - - /* Initialized data sections into "RAM" Ram type memory */ - .data : - { - . = ALIGN(4); - _sdata = .; /* create a global symbol at data start */ - *(.data) /* .data sections */ - *(.data*) /* .data* sections */ - - . = ALIGN(4); - _edata = .; /* define a global symbol at data end */ - - } >RAM AT> FLASH - - /* Uninitialized data section into "RAM" Ram type memory */ - . = ALIGN(4); - .bss : - { - /* This is used by the startup in order to initialize the .bss section */ - _sbss = .; /* define a global symbol at bss start */ - __bss_start__ = _sbss; - *(.bss) - *(.bss*) - *(COMMON) - - . = ALIGN(4); - _ebss = .; /* define a global symbol at bss end */ - __bss_end__ = _ebss; - } >RAM - - /* User_heap_stack section, used to check that there is enough "RAM" Ram type - * memory left */ - ._user_heap_stack : - { - . = ALIGN(8); - PROVIDE ( end = . ); - PROVIDE ( _end = . ); - . = . + _Min_Heap_Size; - . = . + _Min_Stack_Size; - . = ALIGN(8); - } >RAM - - /* Remove information from the compiler libraries */ - /DISCARD/ : - { - libc.a ( * ) - libm.a ( * ) - libgcc.a ( * ) - } - - .ARM.attributes 0 : { *(.ARM.attributes) } -} - diff --git a/src/target/startup_stm32f103xb.s b/src/target/startup_stm32f103xb.s deleted file mode 100644 index e429ded..0000000 --- a/src/target/startup_stm32f103xb.s +++ /dev/null @@ -1,371 +0,0 @@ -/** - *************** (C) COPYRIGHT 2016 STMicroelectronics ************************ - * @file startup_stm32f103xb.s - * @author MCD Application Team - * @version V4.1.0 - * @date 29-April-2016 - * @brief STM32F103xB Devices vector table for Atollic toolchain. - * This module performs: - * - Set the initial SP - * - Set the initial PC == Reset_Handler, - * - Set the vector table entries with the exceptions ISR address - * - Configure the clock system - * - Branches to main in the C library (which eventually - * calls main()). - * After Reset the Cortex-M3 processor is in Thread mode, - * priority is Privileged, and the Stack is set to Main. - ****************************************************************************** - * - *

© COPYRIGHT(c) 2016 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - - .syntax unified - .cpu cortex-m3 - .fpu softvfp - .thumb - -.global g_pfnVectors -.global Default_Handler - -/* start address for the initialization values of the .data section. -defined in linker script */ -.word _sidata -/* start address for the .data section. defined in linker script */ -.word _sdata -/* end address for the .data section. defined in linker script */ -.word _edata - -.equ BootRAM, 0xF108F85F -/** - * @brief This is the code that gets called when the processor first - * starts execution following a reset event. Only the absolutely - * necessary set is performed, after which the application - * supplied main() routine is called. - * @param None - * @retval : None -*/ - - .section .text.Reset_Handler - .weak Reset_Handler - .type Reset_Handler, %function -Reset_Handler: - ldr r0, =_estack - mov sp, r0 /* set stack pointer */ - -/* Copy the data segment initializers from flash to SRAM */ - movs r1, #0 - b LoopCopyDataInit - -CopyDataInit: - ldr r3, =_sidata - ldr r3, [r3, r1] - str r3, [r0, r1] - adds r1, r1, #4 - -LoopCopyDataInit: - ldr r0, =_sdata - ldr r3, =_edata - adds r2, r0, r1 - cmp r2, r3 - bcc CopyDataInit - -/* Call the clock system intitialization function.*/ -// bl SystemInit -/* Call static constructors */ - //bl __libc_init_array -/* Call the application's entry point.*/ - bl main - //bl _start - -LoopForever: - b LoopForever - - -.size Reset_Handler, .-Reset_Handler - -/** - * @brief This is the code that gets called when the processor receives an - * unexpected interrupt. This simply enters an infinite loop, preserving - * the system state for examination by a debugger. - * - * @param None - * @retval : None -*/ - .section .text.Default_Handler,"ax",%progbits -Default_Handler: -Infinite_Loop: - b Infinite_Loop - .size Default_Handler, .-Default_Handler -/****************************************************************************** -* -* The minimal vector table for a Cortex M3. Note that the proper constructs -* must be placed on this to ensure that it ends up at physical address -* 0x0000.0000. -* -******************************************************************************/ - .section .isr_vector,"a",%progbits - .type g_pfnVectors, %object - .size g_pfnVectors, .-g_pfnVectors - - -g_pfnVectors: - - .word _estack - .word Reset_Handler - .word NMI_Handler - .word HardFault_Handler - .word MemManage_Handler - .word BusFault_Handler - .word UsageFault_Handler - .word 0 - .word 0 - .word 0 - .word 0 - .word SVC_Handler - .word DebugMon_Handler - .word 0 - .word PendSV_Handler - .word SysTick_Handler - .word WWDG_IRQHandler - .word PVD_IRQHandler - .word TAMPER_IRQHandler - .word RTC_IRQHandler - .word FLASH_IRQHandler - .word RCC_IRQHandler - .word EXTI0_IRQHandler - .word EXTI1_IRQHandler - .word EXTI2_IRQHandler - .word EXTI3_IRQHandler - .word EXTI4_IRQHandler - .word DMA1_Channel1_IRQHandler - .word DMA1_Channel2_IRQHandler - .word DMA1_Channel3_IRQHandler - .word DMA1_Channel4_IRQHandler - .word DMA1_Channel5_IRQHandler - .word DMA1_Channel6_IRQHandler - .word DMA1_Channel7_IRQHandler - .word ADC1_2_IRQHandler - .word USB_HP_CAN1_TX_IRQHandler - .word USB_LP_CAN1_RX0_IRQHandler - .word CAN1_RX1_IRQHandler - .word CAN1_SCE_IRQHandler - .word EXTI9_5_IRQHandler - .word TIM1_BRK_IRQHandler - .word TIM1_UP_IRQHandler - .word TIM1_TRG_COM_IRQHandler - .word TIM1_CC_IRQHandler - .word TIM2_IRQHandler - .word TIM3_IRQHandler - .word TIM4_IRQHandler - .word I2C1_EV_IRQHandler - .word I2C1_ER_IRQHandler - .word I2C2_EV_IRQHandler - .word I2C2_ER_IRQHandler - .word SPI1_IRQHandler - .word SPI2_IRQHandler - .word USART1_IRQHandler - .word USART2_IRQHandler - .word USART3_IRQHandler - .word EXTI15_10_IRQHandler - .word RTC_Alarm_IRQHandler - .word USBWakeUp_IRQHandler - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word 0 - .word BootRAM /* @0x108. This is for boot in RAM mode for - STM32F10x Medium Density devices. */ - -/******************************************************************************* -* -* Provide weak aliases for each Exception handler to the Default_Handler. -* As they are weak aliases, any function with the same name will override -* this definition. -* -*******************************************************************************/ - - .weak NMI_Handler - .thumb_set NMI_Handler,Default_Handler - - .weak HardFault_Handler - .thumb_set HardFault_Handler,Default_Handler - - .weak MemManage_Handler - .thumb_set MemManage_Handler,Default_Handler - - .weak BusFault_Handler - .thumb_set BusFault_Handler,Default_Handler - - .weak UsageFault_Handler - .thumb_set UsageFault_Handler,Default_Handler - - .weak SVC_Handler - .thumb_set SVC_Handler,Default_Handler - - .weak DebugMon_Handler - .thumb_set DebugMon_Handler,Default_Handler - - .weak PendSV_Handler - .thumb_set PendSV_Handler,Default_Handler - - .weak SysTick_Handler - .thumb_set SysTick_Handler,Default_Handler - - .weak WWDG_IRQHandler - .thumb_set WWDG_IRQHandler,Default_Handler - - .weak PVD_IRQHandler - .thumb_set PVD_IRQHandler,Default_Handler - - .weak TAMPER_IRQHandler - .thumb_set TAMPER_IRQHandler,Default_Handler - - .weak RTC_IRQHandler - .thumb_set RTC_IRQHandler,Default_Handler - - .weak FLASH_IRQHandler - .thumb_set FLASH_IRQHandler,Default_Handler - - .weak RCC_IRQHandler - .thumb_set RCC_IRQHandler,Default_Handler - - .weak EXTI0_IRQHandler - .thumb_set EXTI0_IRQHandler,Default_Handler - - .weak EXTI1_IRQHandler - .thumb_set EXTI1_IRQHandler,Default_Handler - - .weak EXTI2_IRQHandler - .thumb_set EXTI2_IRQHandler,Default_Handler - - .weak EXTI3_IRQHandler - .thumb_set EXTI3_IRQHandler,Default_Handler - - .weak EXTI4_IRQHandler - .thumb_set EXTI4_IRQHandler,Default_Handler - - .weak DMA1_Channel1_IRQHandler - .thumb_set DMA1_Channel1_IRQHandler,Default_Handler - - .weak DMA1_Channel2_IRQHandler - .thumb_set DMA1_Channel2_IRQHandler,Default_Handler - - .weak DMA1_Channel3_IRQHandler - .thumb_set DMA1_Channel3_IRQHandler,Default_Handler - - .weak DMA1_Channel4_IRQHandler - .thumb_set DMA1_Channel4_IRQHandler,Default_Handler - - .weak DMA1_Channel5_IRQHandler - .thumb_set DMA1_Channel5_IRQHandler,Default_Handler - - .weak DMA1_Channel6_IRQHandler - .thumb_set DMA1_Channel6_IRQHandler,Default_Handler - - .weak DMA1_Channel7_IRQHandler - .thumb_set DMA1_Channel7_IRQHandler,Default_Handler - - .weak ADC1_2_IRQHandler - .thumb_set ADC1_2_IRQHandler,Default_Handler - - .weak USB_HP_CAN1_TX_IRQHandler - .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler - - .weak USB_LP_CAN1_RX0_IRQHandler - .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler - - .weak CAN1_RX1_IRQHandler - .thumb_set CAN1_RX1_IRQHandler,Default_Handler - - .weak CAN1_SCE_IRQHandler - .thumb_set CAN1_SCE_IRQHandler,Default_Handler - - .weak EXTI9_5_IRQHandler - .thumb_set EXTI9_5_IRQHandler,Default_Handler - - .weak TIM1_BRK_IRQHandler - .thumb_set TIM1_BRK_IRQHandler,Default_Handler - - .weak TIM1_UP_IRQHandler - .thumb_set TIM1_UP_IRQHandler,Default_Handler - - .weak TIM1_TRG_COM_IRQHandler - .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler - - .weak TIM1_CC_IRQHandler - .thumb_set TIM1_CC_IRQHandler,Default_Handler - - .weak TIM2_IRQHandler - .thumb_set TIM2_IRQHandler,Default_Handler - - .weak TIM3_IRQHandler - .thumb_set TIM3_IRQHandler,Default_Handler - - .weak TIM4_IRQHandler - .thumb_set TIM4_IRQHandler,Default_Handler - - .weak I2C1_EV_IRQHandler - .thumb_set I2C1_EV_IRQHandler,Default_Handler - - .weak I2C1_ER_IRQHandler - .thumb_set I2C1_ER_IRQHandler,Default_Handler - - .weak I2C2_EV_IRQHandler - .thumb_set I2C2_EV_IRQHandler,Default_Handler - - .weak I2C2_ER_IRQHandler - .thumb_set I2C2_ER_IRQHandler,Default_Handler - - .weak SPI1_IRQHandler - .thumb_set SPI1_IRQHandler,Default_Handler - - .weak SPI2_IRQHandler - .thumb_set SPI2_IRQHandler,Default_Handler - - .weak USART1_IRQHandler - .thumb_set USART1_IRQHandler,Default_Handler - - .weak USART2_IRQHandler - .thumb_set USART2_IRQHandler,Default_Handler - - .weak USART3_IRQHandler - .thumb_set USART3_IRQHandler,Default_Handler - - .weak EXTI15_10_IRQHandler - .thumb_set EXTI15_10_IRQHandler,Default_Handler - - .weak RTC_Alarm_IRQHandler - .thumb_set RTC_Alarm_IRQHandler,Default_Handler - - .weak USBWakeUp_IRQHandler - .thumb_set USBWakeUp_IRQHandler,Default_Handler - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/src/target/stm32f103xb.h b/src/target/stm32f103xb.h deleted file mode 100644 index 5d98ae4..0000000 --- a/src/target/stm32f103xb.h +++ /dev/null @@ -1,10642 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f103xb.h - * @author MCD Application Team - * @version V4.2.0 - * @date 31-March-2017 - * @brief CMSIS Cortex-M3 Device Peripheral Access Layer Header File. - * This file contains all the peripheral register's definitions, bits - * definitions and memory mapping for STM32F1xx devices. - * - * This file contains: - * - Data structures and the address mapping for all peripherals - * - Peripheral's registers declarations and bits definition - * - Macros to access peripheral’s registers hardware - * - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2017 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32f103xb - * @{ - */ - -#ifndef __STM32F103xB_H -#define __STM32F103xB_H - -#ifdef __cplusplus - extern "C" { -#endif - -/** @addtogroup Configuration_section_for_CMSIS - * @{ - */ -/** - * @brief Configuration of the Cortex-M3 Processor and Core Peripherals - */ -#define __CM3_REV 0x0200U /*!< Core Revision r2p0 */ -#define __MPU_PRESENT 0U /*!< Other STM32 devices does not provide an MPU */ -#define __NVIC_PRIO_BITS 4U /*!< STM32 uses 4 Bits for the Priority Levels */ -#define __Vendor_SysTickConfig 0U /*!< Set to 1 if different SysTick Config is used */ - -/** - * @} - */ - -/** @addtogroup Peripheral_interrupt_number_definition - * @{ - */ - -/** - * @brief STM32F10x Interrupt Number Definition, according to the selected device - * in @ref Library_configuration_section - */ - - /*!< Interrupt Number Definition */ -typedef enum -{ -/****** Cortex-M3 Processor Exceptions Numbers ***************************************************/ - NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ - HardFault_IRQn = -13, /*!< 3 Cortex-M3 Hard Fault Interrupt */ - MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt */ - BusFault_IRQn = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt */ - UsageFault_IRQn = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt */ - SVCall_IRQn = -5, /*!< 11 Cortex-M3 SV Call Interrupt */ - DebugMonitor_IRQn = -4, /*!< 12 Cortex-M3 Debug Monitor Interrupt */ - PendSV_IRQn = -2, /*!< 14 Cortex-M3 Pend SV Interrupt */ - SysTick_IRQn = -1, /*!< 15 Cortex-M3 System Tick Interrupt */ - -/****** STM32 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 */ - FLASH_IRQn = 4, /*!< FLASH 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 */ - DMA1_Channel1_IRQn = 11, /*!< DMA1 Channel 1 global Interrupt */ - DMA1_Channel2_IRQn = 12, /*!< DMA1 Channel 2 global Interrupt */ - DMA1_Channel3_IRQn = 13, /*!< DMA1 Channel 3 global Interrupt */ - DMA1_Channel4_IRQn = 14, /*!< DMA1 Channel 4 global Interrupt */ - DMA1_Channel5_IRQn = 15, /*!< DMA1 Channel 5 global Interrupt */ - DMA1_Channel6_IRQn = 16, /*!< DMA1 Channel 6 global Interrupt */ - DMA1_Channel7_IRQn = 17, /*!< DMA1 Channel 7 global Interrupt */ - ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt */ - USB_HP_CAN1_TX_IRQn = 19, /*!< USB Device High Priority or CAN1 TX Interrupts */ - USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts */ - CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ - CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ - EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ - TIM1_BRK_IRQn = 24, /*!< TIM1 Break Interrupt */ - TIM1_UP_IRQn = 25, /*!< TIM1 Update Interrupt */ - TIM1_TRG_COM_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt */ - TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ - TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ - TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ - TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ - I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ - I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ - I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ - I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ - SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ - SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ - USART1_IRQn = 37, /*!< USART1 global Interrupt */ - USART2_IRQn = 38, /*!< USART2 global Interrupt */ - USART3_IRQn = 39, /*!< USART3 global Interrupt */ - EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ - RTC_Alarm_IRQn = 41, /*!< RTC Alarm through EXTI Line Interrupt */ - USBWakeUp_IRQn = 42, /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */ -} IRQn_Type; - -/** - * @} - */ - -#include "cmsis/core_cm3.h" -#include "system_stm32f1xx.h" -#include - -/** @addtogroup Peripheral_registers_structures - * @{ - */ - -/** - * @brief Analog to Digital Converter - */ - -typedef struct -{ - __IO uint32_t SR; - __IO uint32_t CR1; - __IO uint32_t CR2; - __IO uint32_t SMPR1; - __IO uint32_t SMPR2; - __IO uint32_t JOFR1; - __IO uint32_t JOFR2; - __IO uint32_t JOFR3; - __IO uint32_t JOFR4; - __IO uint32_t HTR; - __IO uint32_t LTR; - __IO uint32_t SQR1; - __IO uint32_t SQR2; - __IO uint32_t SQR3; - __IO uint32_t JSQR; - __IO uint32_t JDR1; - __IO uint32_t JDR2; - __IO uint32_t JDR3; - __IO uint32_t JDR4; - __IO uint32_t DR; -} ADC_TypeDef; - -typedef struct -{ - __IO uint32_t SR; /*!< ADC status register, used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address */ - __IO uint32_t CR1; /*!< ADC control register 1, used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x04 */ - __IO uint32_t CR2; /*!< ADC control register 2, used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x08 */ - uint32_t RESERVED[16]; - __IO uint32_t DR; /*!< ADC data register, used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x4C */ -} ADC_Common_TypeDef; - -/** - * @brief Backup Registers - */ - -typedef struct -{ - uint32_t RESERVED0; - __IO uint32_t DR1; - __IO uint32_t DR2; - __IO uint32_t DR3; - __IO uint32_t DR4; - __IO uint32_t DR5; - __IO uint32_t DR6; - __IO uint32_t DR7; - __IO uint32_t DR8; - __IO uint32_t DR9; - __IO uint32_t DR10; - __IO uint32_t RTCCR; - __IO uint32_t CR; - __IO uint32_t CSR; -} BKP_TypeDef; - -/** - * @brief Controller Area Network TxMailBox - */ - -typedef struct -{ - __IO uint32_t TIR; - __IO uint32_t TDTR; - __IO uint32_t TDLR; - __IO uint32_t TDHR; -} CAN_TxMailBox_TypeDef; - -/** - * @brief Controller Area Network FIFOMailBox - */ - -typedef struct -{ - __IO uint32_t RIR; - __IO uint32_t RDTR; - __IO uint32_t RDLR; - __IO uint32_t RDHR; -} CAN_FIFOMailBox_TypeDef; - -/** - * @brief Controller Area Network FilterRegister - */ - -typedef struct -{ - __IO uint32_t FR1; - __IO uint32_t FR2; -} CAN_FilterRegister_TypeDef; - -/** - * @brief Controller Area Network - */ - -typedef struct -{ - __IO uint32_t MCR; - __IO uint32_t MSR; - __IO uint32_t TSR; - __IO uint32_t RF0R; - __IO uint32_t RF1R; - __IO uint32_t IER; - __IO uint32_t ESR; - __IO uint32_t BTR; - uint32_t RESERVED0[88]; - CAN_TxMailBox_TypeDef sTxMailBox[3]; - CAN_FIFOMailBox_TypeDef sFIFOMailBox[2]; - uint32_t RESERVED1[12]; - __IO uint32_t FMR; - __IO uint32_t FM1R; - uint32_t RESERVED2; - __IO uint32_t FS1R; - uint32_t RESERVED3; - __IO uint32_t FFA1R; - uint32_t RESERVED4; - __IO uint32_t FA1R; - uint32_t RESERVED5[8]; - CAN_FilterRegister_TypeDef sFilterRegister[14]; -} CAN_TypeDef; - -/** - * @brief CRC calculation unit - */ - -typedef struct -{ - __IO uint32_t DR; /*!< CRC Data register, Address offset: 0x00 */ - __IO uint8_t IDR; /*!< CRC Independent data register, Address offset: 0x04 */ - uint8_t RESERVED0; /*!< Reserved, Address offset: 0x05 */ - uint16_t RESERVED1; /*!< Reserved, Address offset: 0x06 */ - __IO uint32_t CR; /*!< CRC Control register, Address offset: 0x08 */ -} CRC_TypeDef; - - -/** - * @brief Debug MCU - */ - -typedef struct -{ - __IO uint32_t IDCODE; - __IO uint32_t CR; -}DBGMCU_TypeDef; - -/** - * @brief DMA Controller - */ - -typedef struct -{ - __IO uint32_t CCR; - __IO uint32_t CNDTR; - __IO uint32_t CPAR; - __IO uint32_t CMAR; -} DMA_Channel_TypeDef; - -typedef struct -{ - __IO uint32_t ISR; - __IO uint32_t IFCR; -} DMA_TypeDef; - - - -/** - * @brief External Interrupt/Event Controller - */ - -typedef struct -{ - __IO uint32_t IMR; - __IO uint32_t EMR; - __IO uint32_t RTSR; - __IO uint32_t FTSR; - __IO uint32_t SWIER; - __IO uint32_t PR; -} EXTI_TypeDef; - -/** - * @brief FLASH Registers - */ - -typedef struct -{ - __IO uint32_t ACR; - __IO uint32_t KEYR; - __IO uint32_t OPTKEYR; - __IO uint32_t SR; - __IO uint32_t CR; - __IO uint32_t AR; - __IO uint32_t RESERVED; - __IO uint32_t OBR; - __IO uint32_t WRPR; -} FLASH_TypeDef; - -/** - * @brief Option Bytes Registers - */ - -typedef struct -{ - __IO uint16_t RDP; - __IO uint16_t USER; - __IO uint16_t Data0; - __IO uint16_t Data1; - __IO uint16_t WRP0; - __IO uint16_t WRP1; - __IO uint16_t WRP2; - __IO uint16_t WRP3; -} OB_TypeDef; - -/** - * @brief General Purpose I/O - */ - -typedef struct -{ - __IO uint32_t CRL; - __IO uint32_t CRH; - __IO uint32_t IDR; - __IO uint32_t ODR; - __IO uint32_t BSRR; - __IO uint32_t BRR; - __IO uint32_t LCKR; -} GPIO_TypeDef; - -/** - * @brief Alternate Function I/O - */ - -typedef struct -{ - __IO uint32_t EVCR; - __IO uint32_t MAPR; - __IO uint32_t EXTICR[4]; - uint32_t RESERVED0; - __IO uint32_t MAPR2; -} AFIO_TypeDef; -/** - * @brief Inter Integrated Circuit Interface - */ - -typedef struct -{ - __IO uint32_t CR1; - __IO uint32_t CR2; - __IO uint32_t OAR1; - __IO uint32_t OAR2; - __IO uint32_t DR; - __IO uint32_t SR1; - __IO uint32_t SR2; - __IO uint32_t CCR; - __IO uint32_t TRISE; -} I2C_TypeDef; - -/** - * @brief Independent WATCHDOG - */ - -typedef struct -{ - __IO uint32_t KR; /*!< Key register, Address offset: 0x00 */ - __IO uint32_t PR; /*!< Prescaler register, Address offset: 0x04 */ - __IO uint32_t RLR; /*!< Reload register, Address offset: 0x08 */ - __IO uint32_t SR; /*!< Status register, Address offset: 0x0C */ -} IWDG_TypeDef; - -/** - * @brief Power Control - */ - -typedef struct -{ - __IO uint32_t CR; - __IO uint32_t CSR; -} PWR_TypeDef; - -/** - * @brief Reset and Clock Control - */ - -typedef struct -{ - __IO uint32_t CR; - __IO uint32_t CFGR; - __IO uint32_t CIR; - __IO uint32_t APB2RSTR; - __IO uint32_t APB1RSTR; - __IO uint32_t AHBENR; - __IO uint32_t APB2ENR; - __IO uint32_t APB1ENR; - __IO uint32_t BDCR; - __IO uint32_t CSR; - - -} RCC_TypeDef; - -/** - * @brief Real-Time Clock - */ - -typedef struct -{ - __IO uint32_t CRH; - __IO uint32_t CRL; - __IO uint32_t PRLH; - __IO uint32_t PRLL; - __IO uint32_t DIVH; - __IO uint32_t DIVL; - __IO uint32_t CNTH; - __IO uint32_t CNTL; - __IO uint32_t ALRH; - __IO uint32_t ALRL; -} RTC_TypeDef; - -/** - * @brief SD host Interface - */ - -typedef struct -{ - __IO uint32_t POWER; - __IO uint32_t CLKCR; - __IO uint32_t ARG; - __IO uint32_t CMD; - __I uint32_t RESPCMD; - __I uint32_t RESP1; - __I uint32_t RESP2; - __I uint32_t RESP3; - __I uint32_t RESP4; - __IO uint32_t DTIMER; - __IO uint32_t DLEN; - __IO uint32_t DCTRL; - __I uint32_t DCOUNT; - __I uint32_t STA; - __IO uint32_t ICR; - __IO uint32_t MASK; - uint32_t RESERVED0[2]; - __I uint32_t FIFOCNT; - uint32_t RESERVED1[13]; - __IO uint32_t FIFO; -} SDIO_TypeDef; - -/** - * @brief Serial Peripheral Interface - */ - -typedef struct -{ - __IO uint32_t CR1; - __IO uint32_t CR2; - __IO uint32_t SR; - __IO uint32_t DR; - __IO uint32_t CRCPR; - __IO uint32_t RXCRCR; - __IO uint32_t TXCRCR; - __IO uint32_t I2SCFGR; -} SPI_TypeDef; - -/** - * @brief TIM Timers - */ -typedef struct -{ - __IO uint32_t CR1; /*!< TIM control register 1, Address offset: 0x00 */ - __IO uint32_t CR2; /*!< TIM control register 2, Address offset: 0x04 */ - __IO uint32_t SMCR; /*!< TIM slave Mode Control register, Address offset: 0x08 */ - __IO uint32_t DIER; /*!< TIM DMA/interrupt enable register, Address offset: 0x0C */ - __IO uint32_t SR; /*!< TIM status register, Address offset: 0x10 */ - __IO uint32_t EGR; /*!< TIM event generation register, Address offset: 0x14 */ - __IO uint32_t CCMR1; /*!< TIM capture/compare mode register 1, Address offset: 0x18 */ - __IO uint32_t CCMR2; /*!< TIM capture/compare mode register 2, Address offset: 0x1C */ - __IO uint32_t CCER; /*!< TIM capture/compare enable register, Address offset: 0x20 */ - __IO uint32_t CNT; /*!< TIM counter register, Address offset: 0x24 */ - __IO uint32_t PSC; /*!< TIM prescaler register, Address offset: 0x28 */ - __IO uint32_t ARR; /*!< TIM auto-reload register, Address offset: 0x2C */ - __IO uint32_t RCR; /*!< TIM repetition counter register, Address offset: 0x30 */ - __IO uint32_t CCR1; /*!< TIM capture/compare register 1, Address offset: 0x34 */ - __IO uint32_t CCR2; /*!< TIM capture/compare register 2, Address offset: 0x38 */ - __IO uint32_t CCR3; /*!< TIM capture/compare register 3, Address offset: 0x3C */ - __IO uint32_t CCR4; /*!< TIM capture/compare register 4, Address offset: 0x40 */ - __IO uint32_t BDTR; /*!< TIM break and dead-time register, Address offset: 0x44 */ - __IO uint32_t DCR; /*!< TIM DMA control register, Address offset: 0x48 */ - __IO uint32_t DMAR; /*!< TIM DMA address for full transfer register, Address offset: 0x4C */ - __IO uint32_t OR; /*!< TIM option register, Address offset: 0x50 */ -} TIM_TypeDef; - - -/** - * @brief Universal Synchronous Asynchronous Receiver Transmitter - */ - -typedef struct -{ - __IO uint32_t SR; /*!< USART Status register, Address offset: 0x00 */ - __IO uint32_t DR; /*!< USART Data register, Address offset: 0x04 */ - __IO uint32_t BRR; /*!< USART Baud rate register, Address offset: 0x08 */ - __IO uint32_t CR1; /*!< USART Control register 1, Address offset: 0x0C */ - __IO uint32_t CR2; /*!< USART Control register 2, Address offset: 0x10 */ - __IO uint32_t CR3; /*!< USART Control register 3, Address offset: 0x14 */ - __IO uint32_t GTPR; /*!< USART Guard time and prescaler register, Address offset: 0x18 */ -} USART_TypeDef; - -/** - * @brief Universal Serial Bus Full Speed Device - */ - -typedef struct -{ - __IO uint16_t EP0R; /*!< USB Endpoint 0 register, Address offset: 0x00 */ - __IO uint16_t RESERVED0; /*!< Reserved */ - __IO uint16_t EP1R; /*!< USB Endpoint 1 register, Address offset: 0x04 */ - __IO uint16_t RESERVED1; /*!< Reserved */ - __IO uint16_t EP2R; /*!< USB Endpoint 2 register, Address offset: 0x08 */ - __IO uint16_t RESERVED2; /*!< Reserved */ - __IO uint16_t EP3R; /*!< USB Endpoint 3 register, Address offset: 0x0C */ - __IO uint16_t RESERVED3; /*!< Reserved */ - __IO uint16_t EP4R; /*!< USB Endpoint 4 register, Address offset: 0x10 */ - __IO uint16_t RESERVED4; /*!< Reserved */ - __IO uint16_t EP5R; /*!< USB Endpoint 5 register, Address offset: 0x14 */ - __IO uint16_t RESERVED5; /*!< Reserved */ - __IO uint16_t EP6R; /*!< USB Endpoint 6 register, Address offset: 0x18 */ - __IO uint16_t RESERVED6; /*!< Reserved */ - __IO uint16_t EP7R; /*!< USB Endpoint 7 register, Address offset: 0x1C */ - __IO uint16_t RESERVED7[17]; /*!< Reserved */ - __IO uint16_t CNTR; /*!< Control register, Address offset: 0x40 */ - __IO uint16_t RESERVED8; /*!< Reserved */ - __IO uint16_t ISTR; /*!< Interrupt status register, Address offset: 0x44 */ - __IO uint16_t RESERVED9; /*!< Reserved */ - __IO uint16_t FNR; /*!< Frame number register, Address offset: 0x48 */ - __IO uint16_t RESERVEDA; /*!< Reserved */ - __IO uint16_t DADDR; /*!< Device address register, Address offset: 0x4C */ - __IO uint16_t RESERVEDB; /*!< Reserved */ - __IO uint16_t BTABLE; /*!< Buffer Table address register, Address offset: 0x50 */ - __IO uint16_t RESERVEDC; /*!< Reserved */ -} USB_TypeDef; - - -/** - * @brief Window WATCHDOG - */ - -typedef struct -{ - __IO uint32_t CR; /*!< WWDG Control register, Address offset: 0x00 */ - __IO uint32_t CFR; /*!< WWDG Configuration register, Address offset: 0x04 */ - __IO uint32_t SR; /*!< WWDG Status register, Address offset: 0x08 */ -} WWDG_TypeDef; - -/** - * @} - */ - -/** @addtogroup Peripheral_memory_map - * @{ - */ - - -#define FLASH_BASE 0x08000000U /*!< FLASH base address in the alias region */ -#define FLASH_BANK1_END 0x0801FFFFU /*!< FLASH END address of bank1 */ -#define SRAM_BASE 0x20000000U /*!< SRAM base address in the alias region */ -#define PERIPH_BASE 0x40000000U /*!< Peripheral base address in the alias region */ - -#define SRAM_BB_BASE 0x22000000U /*!< SRAM base address in the bit-band region */ -#define PERIPH_BB_BASE 0x42000000U /*!< Peripheral base address in the bit-band region */ - - -/*!< Peripheral memory map */ -#define APB1PERIPH_BASE PERIPH_BASE -#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000U) -#define AHBPERIPH_BASE (PERIPH_BASE + 0x00020000U) - -#define TIM2_BASE (APB1PERIPH_BASE + 0x00000000U) -#define TIM3_BASE (APB1PERIPH_BASE + 0x00000400U) -#define TIM4_BASE (APB1PERIPH_BASE + 0x00000800U) -#define RTC_BASE (APB1PERIPH_BASE + 0x00002800U) -#define WWDG_BASE (APB1PERIPH_BASE + 0x00002C00U) -#define IWDG_BASE (APB1PERIPH_BASE + 0x00003000U) -#define SPI2_BASE (APB1PERIPH_BASE + 0x00003800U) -#define USART2_BASE (APB1PERIPH_BASE + 0x00004400U) -#define USART3_BASE (APB1PERIPH_BASE + 0x00004800U) -#define I2C1_BASE (APB1PERIPH_BASE + 0x00005400U) -#define I2C2_BASE (APB1PERIPH_BASE + 0x5800) -#define CAN1_BASE (APB1PERIPH_BASE + 0x00006400U) -#define BKP_BASE (APB1PERIPH_BASE + 0x00006C00U) -#define PWR_BASE (APB1PERIPH_BASE + 0x00007000U) -#define AFIO_BASE (APB2PERIPH_BASE + 0x00000000U) -#define EXTI_BASE (APB2PERIPH_BASE + 0x00000400U) -#define GPIOA_BASE (APB2PERIPH_BASE + 0x00000800U) -#define GPIOB_BASE (APB2PERIPH_BASE + 0x00000C00U) -#define GPIOC_BASE (APB2PERIPH_BASE + 0x00001000U) -#define GPIOD_BASE (APB2PERIPH_BASE + 0x00001400U) -#define GPIOE_BASE (APB2PERIPH_BASE + 0x00001800U) -#define ADC1_BASE (APB2PERIPH_BASE + 0x00002400U) -#define ADC2_BASE (APB2PERIPH_BASE + 0x00002800U) -#define TIM1_BASE (APB2PERIPH_BASE + 0x00002C00U) -#define SPI1_BASE (APB2PERIPH_BASE + 0x00003000U) -#define USART1_BASE (APB2PERIPH_BASE + 0x00003800U) - -#define SDIO_BASE (PERIPH_BASE + 0x00018000U) - -#define DMA1_BASE (AHBPERIPH_BASE + 0x00000000U) -#define DMA1_Channel1_BASE (AHBPERIPH_BASE + 0x00000008U) -#define DMA1_Channel2_BASE (AHBPERIPH_BASE + 0x0000001CU) -#define DMA1_Channel3_BASE (AHBPERIPH_BASE + 0x00000030U) -#define DMA1_Channel4_BASE (AHBPERIPH_BASE + 0x00000044U) -#define DMA1_Channel5_BASE (AHBPERIPH_BASE + 0x00000058U) -#define DMA1_Channel6_BASE (AHBPERIPH_BASE + 0x0000006CU) -#define DMA1_Channel7_BASE (AHBPERIPH_BASE + 0x00000080U) -#define RCC_BASE (AHBPERIPH_BASE + 0x00001000U) -#define CRC_BASE (AHBPERIPH_BASE + 0x00003000U) - -#define FLASH_R_BASE (AHBPERIPH_BASE + 0x00002000U) /*!< Flash registers base address */ -#define FLASHSIZE_BASE 0x1FFFF7E0U /*!< FLASH Size register base address */ -#define UID_BASE 0x1FFFF7E8U /*!< Unique device ID register base address */ -#define OB_BASE 0x1FFFF800U /*!< Flash Option Bytes base address */ - - - -#define DBGMCU_BASE 0xE0042000U /*!< Debug MCU registers base address */ - -/* USB device FS */ -#define USB_BASE (APB1PERIPH_BASE + 0x00005C00U) /*!< USB_IP Peripheral Registers base address */ -#define USB_PMAADDR (APB1PERIPH_BASE + 0x00006000U) /*!< USB_IP Packet Memory Area base address */ - - -/** - * @} - */ - -/** @addtogroup Peripheral_declaration - * @{ - */ - -#define TIM2 ((TIM_TypeDef *)TIM2_BASE) -#define TIM3 ((TIM_TypeDef *)TIM3_BASE) -#define TIM4 ((TIM_TypeDef *)TIM4_BASE) -#define RTC ((RTC_TypeDef *)RTC_BASE) -#define WWDG ((WWDG_TypeDef *)WWDG_BASE) -#define IWDG ((IWDG_TypeDef *)IWDG_BASE) -#define SPI2 ((SPI_TypeDef *)SPI2_BASE) -#define USART2 ((USART_TypeDef *)USART2_BASE) -#define USART3 ((USART_TypeDef *)USART3_BASE) -#define I2C1 ((I2C_TypeDef *)I2C1_BASE) -#define I2C2 ((I2C_TypeDef *)I2C2_BASE) -#define USB ((USB_TypeDef *)USB_BASE) -#define CAN1 ((CAN_TypeDef *)CAN1_BASE) -#define BKP ((BKP_TypeDef *)BKP_BASE) -#define PWR ((PWR_TypeDef *)PWR_BASE) -#define AFIO ((AFIO_TypeDef *)AFIO_BASE) -#define EXTI ((EXTI_TypeDef *)EXTI_BASE) -#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE) -#define GPIOB ((GPIO_TypeDef *)GPIOB_BASE) -#define GPIOC ((GPIO_TypeDef *)GPIOC_BASE) -#define GPIOD ((GPIO_TypeDef *)GPIOD_BASE) -#define GPIOE ((GPIO_TypeDef *)GPIOE_BASE) -#define ADC1 ((ADC_TypeDef *)ADC1_BASE) -#define ADC2 ((ADC_TypeDef *)ADC2_BASE) -#define ADC12_COMMON ((ADC_Common_TypeDef *)ADC1_BASE) -#define TIM1 ((TIM_TypeDef *)TIM1_BASE) -#define SPI1 ((SPI_TypeDef *)SPI1_BASE) -#define USART1 ((USART_TypeDef *)USART1_BASE) -#define SDIO ((SDIO_TypeDef *)SDIO_BASE) -#define DMA1 ((DMA_TypeDef *)DMA1_BASE) -#define DMA1_Channel1 ((DMA_Channel_TypeDef *)DMA1_Channel1_BASE) -#define DMA1_Channel2 ((DMA_Channel_TypeDef *)DMA1_Channel2_BASE) -#define DMA1_Channel3 ((DMA_Channel_TypeDef *)DMA1_Channel3_BASE) -#define DMA1_Channel4 ((DMA_Channel_TypeDef *)DMA1_Channel4_BASE) -#define DMA1_Channel5 ((DMA_Channel_TypeDef *)DMA1_Channel5_BASE) -#define DMA1_Channel6 ((DMA_Channel_TypeDef *)DMA1_Channel6_BASE) -#define DMA1_Channel7 ((DMA_Channel_TypeDef *)DMA1_Channel7_BASE) -#define RCC ((RCC_TypeDef *)RCC_BASE) -#define CRC ((CRC_TypeDef *)CRC_BASE) -#define FLASH ((FLASH_TypeDef *)FLASH_R_BASE) -#define OB ((OB_TypeDef *)OB_BASE) -#define DBGMCU ((DBGMCU_TypeDef *)DBGMCU_BASE) - - -/** - * @} - */ - -/** @addtogroup Exported_constants - * @{ - */ - - /** @addtogroup Peripheral_Registers_Bits_Definition - * @{ - */ - -/******************************************************************************/ -/* Peripheral Registers_Bits_Definition */ -/******************************************************************************/ - -/******************************************************************************/ -/* */ -/* CRC calculation unit (CRC) */ -/* */ -/******************************************************************************/ - -/******************* Bit definition for CRC_DR register *********************/ -#define CRC_DR_DR_Pos (0U) -#define CRC_DR_DR_Msk (0xFFFFFFFFU << CRC_DR_DR_Pos) /*!< 0xFFFFFFFF */ -#define CRC_DR_DR CRC_DR_DR_Msk /*!< Data register bits */ - -/******************* Bit definition for CRC_IDR register ********************/ -#define CRC_IDR_IDR_Pos (0U) -#define CRC_IDR_IDR_Msk (0xFFU << CRC_IDR_IDR_Pos) /*!< 0x000000FF */ -#define CRC_IDR_IDR CRC_IDR_IDR_Msk /*!< General-purpose 8-bit data register bits */ - -/******************** Bit definition for CRC_CR register ********************/ -#define CRC_CR_RESET_Pos (0U) -#define CRC_CR_RESET_Msk (0x1U << CRC_CR_RESET_Pos) /*!< 0x00000001 */ -#define CRC_CR_RESET CRC_CR_RESET_Msk /*!< RESET bit */ - -/******************************************************************************/ -/* */ -/* Power Control */ -/* */ -/******************************************************************************/ - -/******************** Bit definition for PWR_CR register ********************/ -#define PWR_CR_LPDS_Pos (0U) -#define PWR_CR_LPDS_Msk (0x1U << PWR_CR_LPDS_Pos) /*!< 0x00000001 */ -#define PWR_CR_LPDS PWR_CR_LPDS_Msk /*!< Low-Power Deepsleep */ -#define PWR_CR_PDDS_Pos (1U) -#define PWR_CR_PDDS_Msk (0x1U << PWR_CR_PDDS_Pos) /*!< 0x00000002 */ -#define PWR_CR_PDDS PWR_CR_PDDS_Msk /*!< Power Down Deepsleep */ -#define PWR_CR_CWUF_Pos (2U) -#define PWR_CR_CWUF_Msk (0x1U << PWR_CR_CWUF_Pos) /*!< 0x00000004 */ -#define PWR_CR_CWUF PWR_CR_CWUF_Msk /*!< Clear Wakeup Flag */ -#define PWR_CR_CSBF_Pos (3U) -#define PWR_CR_CSBF_Msk (0x1U << PWR_CR_CSBF_Pos) /*!< 0x00000008 */ -#define PWR_CR_CSBF PWR_CR_CSBF_Msk /*!< Clear Standby Flag */ -#define PWR_CR_PVDE_Pos (4U) -#define PWR_CR_PVDE_Msk (0x1U << PWR_CR_PVDE_Pos) /*!< 0x00000010 */ -#define PWR_CR_PVDE PWR_CR_PVDE_Msk /*!< Power Voltage Detector Enable */ - -#define PWR_CR_PLS_Pos (5U) -#define PWR_CR_PLS_Msk (0x7U << PWR_CR_PLS_Pos) /*!< 0x000000E0 */ -#define PWR_CR_PLS PWR_CR_PLS_Msk /*!< PLS[2:0] bits (PVD Level Selection) */ -#define PWR_CR_PLS_0 (0x1U << PWR_CR_PLS_Pos) /*!< 0x00000020 */ -#define PWR_CR_PLS_1 (0x2U << PWR_CR_PLS_Pos) /*!< 0x00000040 */ -#define PWR_CR_PLS_2 (0x4U << PWR_CR_PLS_Pos) /*!< 0x00000080 */ - -/*!< PVD level configuration */ -#define PWR_CR_PLS_LEV0 0x00000000U /*!< PVD level 2.2V */ -#define PWR_CR_PLS_LEV1 0x00000020U /*!< PVD level 2.3V */ -#define PWR_CR_PLS_LEV2 0x00000040U /*!< PVD level 2.4V */ -#define PWR_CR_PLS_LEV3 0x00000060U /*!< PVD level 2.5V */ -#define PWR_CR_PLS_LEV4 0x00000080U /*!< PVD level 2.6V */ -#define PWR_CR_PLS_LEV5 0x000000A0U /*!< PVD level 2.7V */ -#define PWR_CR_PLS_LEV6 0x000000C0U /*!< PVD level 2.8V */ -#define PWR_CR_PLS_LEV7 0x000000E0U /*!< PVD level 2.9V */ - -/* Legacy defines */ -#define PWR_CR_PLS_2V2 PWR_CR_PLS_LEV0 -#define PWR_CR_PLS_2V3 PWR_CR_PLS_LEV1 -#define PWR_CR_PLS_2V4 PWR_CR_PLS_LEV2 -#define PWR_CR_PLS_2V5 PWR_CR_PLS_LEV3 -#define PWR_CR_PLS_2V6 PWR_CR_PLS_LEV4 -#define PWR_CR_PLS_2V7 PWR_CR_PLS_LEV5 -#define PWR_CR_PLS_2V8 PWR_CR_PLS_LEV6 -#define PWR_CR_PLS_2V9 PWR_CR_PLS_LEV7 - -#define PWR_CR_DBP_Pos (8U) -#define PWR_CR_DBP_Msk (0x1U << PWR_CR_DBP_Pos) /*!< 0x00000100 */ -#define PWR_CR_DBP PWR_CR_DBP_Msk /*!< Disable Backup Domain write protection */ - - -/******************* Bit definition for PWR_CSR register ********************/ -#define PWR_CSR_WUF_Pos (0U) -#define PWR_CSR_WUF_Msk (0x1U << PWR_CSR_WUF_Pos) /*!< 0x00000001 */ -#define PWR_CSR_WUF PWR_CSR_WUF_Msk /*!< Wakeup Flag */ -#define PWR_CSR_SBF_Pos (1U) -#define PWR_CSR_SBF_Msk (0x1U << PWR_CSR_SBF_Pos) /*!< 0x00000002 */ -#define PWR_CSR_SBF PWR_CSR_SBF_Msk /*!< Standby Flag */ -#define PWR_CSR_PVDO_Pos (2U) -#define PWR_CSR_PVDO_Msk (0x1U << PWR_CSR_PVDO_Pos) /*!< 0x00000004 */ -#define PWR_CSR_PVDO PWR_CSR_PVDO_Msk /*!< PVD Output */ -#define PWR_CSR_EWUP_Pos (8U) -#define PWR_CSR_EWUP_Msk (0x1U << PWR_CSR_EWUP_Pos) /*!< 0x00000100 */ -#define PWR_CSR_EWUP PWR_CSR_EWUP_Msk /*!< Enable WKUP pin */ - -/******************************************************************************/ -/* */ -/* Backup registers */ -/* */ -/******************************************************************************/ - -/******************* Bit definition for BKP_DR1 register ********************/ -#define BKP_DR1_D_Pos (0U) -#define BKP_DR1_D_Msk (0xFFFFU << BKP_DR1_D_Pos) /*!< 0x0000FFFF */ -#define BKP_DR1_D BKP_DR1_D_Msk /*!< Backup data */ - -/******************* Bit definition for BKP_DR2 register ********************/ -#define BKP_DR2_D_Pos (0U) -#define BKP_DR2_D_Msk (0xFFFFU << BKP_DR2_D_Pos) /*!< 0x0000FFFF */ -#define BKP_DR2_D BKP_DR2_D_Msk /*!< Backup data */ - -/******************* Bit definition for BKP_DR3 register ********************/ -#define BKP_DR3_D_Pos (0U) -#define BKP_DR3_D_Msk (0xFFFFU << BKP_DR3_D_Pos) /*!< 0x0000FFFF */ -#define BKP_DR3_D BKP_DR3_D_Msk /*!< Backup data */ - -/******************* Bit definition for BKP_DR4 register ********************/ -#define BKP_DR4_D_Pos (0U) -#define BKP_DR4_D_Msk (0xFFFFU << BKP_DR4_D_Pos) /*!< 0x0000FFFF */ -#define BKP_DR4_D BKP_DR4_D_Msk /*!< Backup data */ - -/******************* Bit definition for BKP_DR5 register ********************/ -#define BKP_DR5_D_Pos (0U) -#define BKP_DR5_D_Msk (0xFFFFU << BKP_DR5_D_Pos) /*!< 0x0000FFFF */ -#define BKP_DR5_D BKP_DR5_D_Msk /*!< Backup data */ - -/******************* Bit definition for BKP_DR6 register ********************/ -#define BKP_DR6_D_Pos (0U) -#define BKP_DR6_D_Msk (0xFFFFU << BKP_DR6_D_Pos) /*!< 0x0000FFFF */ -#define BKP_DR6_D BKP_DR6_D_Msk /*!< Backup data */ - -/******************* Bit definition for BKP_DR7 register ********************/ -#define BKP_DR7_D_Pos (0U) -#define BKP_DR7_D_Msk (0xFFFFU << BKP_DR7_D_Pos) /*!< 0x0000FFFF */ -#define BKP_DR7_D BKP_DR7_D_Msk /*!< Backup data */ - -/******************* Bit definition for BKP_DR8 register ********************/ -#define BKP_DR8_D_Pos (0U) -#define BKP_DR8_D_Msk (0xFFFFU << BKP_DR8_D_Pos) /*!< 0x0000FFFF */ -#define BKP_DR8_D BKP_DR8_D_Msk /*!< Backup data */ - -/******************* Bit definition for BKP_DR9 register ********************/ -#define BKP_DR9_D_Pos (0U) -#define BKP_DR9_D_Msk (0xFFFFU << BKP_DR9_D_Pos) /*!< 0x0000FFFF */ -#define BKP_DR9_D BKP_DR9_D_Msk /*!< Backup data */ - -/******************* Bit definition for BKP_DR10 register *******************/ -#define BKP_DR10_D_Pos (0U) -#define BKP_DR10_D_Msk (0xFFFFU << BKP_DR10_D_Pos) /*!< 0x0000FFFF */ -#define BKP_DR10_D BKP_DR10_D_Msk /*!< Backup data */ - -#define RTC_BKP_NUMBER 10 - -/****************** Bit definition for BKP_RTCCR register *******************/ -#define BKP_RTCCR_CAL_Pos (0U) -#define BKP_RTCCR_CAL_Msk (0x7FU << BKP_RTCCR_CAL_Pos) /*!< 0x0000007F */ -#define BKP_RTCCR_CAL BKP_RTCCR_CAL_Msk /*!< Calibration value */ -#define BKP_RTCCR_CCO_Pos (7U) -#define BKP_RTCCR_CCO_Msk (0x1U << BKP_RTCCR_CCO_Pos) /*!< 0x00000080 */ -#define BKP_RTCCR_CCO BKP_RTCCR_CCO_Msk /*!< Calibration Clock Output */ -#define BKP_RTCCR_ASOE_Pos (8U) -#define BKP_RTCCR_ASOE_Msk (0x1U << BKP_RTCCR_ASOE_Pos) /*!< 0x00000100 */ -#define BKP_RTCCR_ASOE BKP_RTCCR_ASOE_Msk /*!< Alarm or Second Output Enable */ -#define BKP_RTCCR_ASOS_Pos (9U) -#define BKP_RTCCR_ASOS_Msk (0x1U << BKP_RTCCR_ASOS_Pos) /*!< 0x00000200 */ -#define BKP_RTCCR_ASOS BKP_RTCCR_ASOS_Msk /*!< Alarm or Second Output Selection */ - -/******************** Bit definition for BKP_CR register ********************/ -#define BKP_CR_TPE_Pos (0U) -#define BKP_CR_TPE_Msk (0x1U << BKP_CR_TPE_Pos) /*!< 0x00000001 */ -#define BKP_CR_TPE BKP_CR_TPE_Msk /*!< TAMPER pin enable */ -#define BKP_CR_TPAL_Pos (1U) -#define BKP_CR_TPAL_Msk (0x1U << BKP_CR_TPAL_Pos) /*!< 0x00000002 */ -#define BKP_CR_TPAL BKP_CR_TPAL_Msk /*!< TAMPER pin active level */ - -/******************* Bit definition for BKP_CSR register ********************/ -#define BKP_CSR_CTE_Pos (0U) -#define BKP_CSR_CTE_Msk (0x1U << BKP_CSR_CTE_Pos) /*!< 0x00000001 */ -#define BKP_CSR_CTE BKP_CSR_CTE_Msk /*!< Clear Tamper event */ -#define BKP_CSR_CTI_Pos (1U) -#define BKP_CSR_CTI_Msk (0x1U << BKP_CSR_CTI_Pos) /*!< 0x00000002 */ -#define BKP_CSR_CTI BKP_CSR_CTI_Msk /*!< Clear Tamper Interrupt */ -#define BKP_CSR_TPIE_Pos (2U) -#define BKP_CSR_TPIE_Msk (0x1U << BKP_CSR_TPIE_Pos) /*!< 0x00000004 */ -#define BKP_CSR_TPIE BKP_CSR_TPIE_Msk /*!< TAMPER Pin interrupt enable */ -#define BKP_CSR_TEF_Pos (8U) -#define BKP_CSR_TEF_Msk (0x1U << BKP_CSR_TEF_Pos) /*!< 0x00000100 */ -#define BKP_CSR_TEF BKP_CSR_TEF_Msk /*!< Tamper Event Flag */ -#define BKP_CSR_TIF_Pos (9U) -#define BKP_CSR_TIF_Msk (0x1U << BKP_CSR_TIF_Pos) /*!< 0x00000200 */ -#define BKP_CSR_TIF BKP_CSR_TIF_Msk /*!< Tamper Interrupt Flag */ - -/******************************************************************************/ -/* */ -/* Reset and Clock Control */ -/* */ -/******************************************************************************/ - -/******************** Bit definition for RCC_CR register ********************/ -#define RCC_CR_HSION_Pos (0U) -#define RCC_CR_HSION_Msk (0x1U << RCC_CR_HSION_Pos) /*!< 0x00000001 */ -#define RCC_CR_HSION RCC_CR_HSION_Msk /*!< Internal High Speed clock enable */ -#define RCC_CR_HSIRDY_Pos (1U) -#define RCC_CR_HSIRDY_Msk (0x1U << RCC_CR_HSIRDY_Pos) /*!< 0x00000002 */ -#define RCC_CR_HSIRDY RCC_CR_HSIRDY_Msk /*!< Internal High Speed clock ready flag */ -#define RCC_CR_HSITRIM_Pos (3U) -#define RCC_CR_HSITRIM_Msk (0x1FU << RCC_CR_HSITRIM_Pos) /*!< 0x000000F8 */ -#define RCC_CR_HSITRIM RCC_CR_HSITRIM_Msk /*!< Internal High Speed clock trimming */ -#define RCC_CR_HSICAL_Pos (8U) -#define RCC_CR_HSICAL_Msk (0xFFU << RCC_CR_HSICAL_Pos) /*!< 0x0000FF00 */ -#define RCC_CR_HSICAL RCC_CR_HSICAL_Msk /*!< Internal High Speed clock Calibration */ -#define RCC_CR_HSEON_Pos (16U) -#define RCC_CR_HSEON_Msk (0x1U << RCC_CR_HSEON_Pos) /*!< 0x00010000 */ -#define RCC_CR_HSEON RCC_CR_HSEON_Msk /*!< External High Speed clock enable */ -#define RCC_CR_HSERDY_Pos (17U) -#define RCC_CR_HSERDY_Msk (0x1U << RCC_CR_HSERDY_Pos) /*!< 0x00020000 */ -#define RCC_CR_HSERDY RCC_CR_HSERDY_Msk /*!< External High Speed clock ready flag */ -#define RCC_CR_HSEBYP_Pos (18U) -#define RCC_CR_HSEBYP_Msk (0x1U << RCC_CR_HSEBYP_Pos) /*!< 0x00040000 */ -#define RCC_CR_HSEBYP RCC_CR_HSEBYP_Msk /*!< External High Speed clock Bypass */ -#define RCC_CR_CSSON_Pos (19U) -#define RCC_CR_CSSON_Msk (0x1U << RCC_CR_CSSON_Pos) /*!< 0x00080000 */ -#define RCC_CR_CSSON RCC_CR_CSSON_Msk /*!< Clock Security System enable */ -#define RCC_CR_PLLON_Pos (24U) -#define RCC_CR_PLLON_Msk (0x1U << RCC_CR_PLLON_Pos) /*!< 0x01000000 */ -#define RCC_CR_PLLON RCC_CR_PLLON_Msk /*!< PLL enable */ -#define RCC_CR_PLLRDY_Pos (25U) -#define RCC_CR_PLLRDY_Msk (0x1U << RCC_CR_PLLRDY_Pos) /*!< 0x02000000 */ -#define RCC_CR_PLLRDY RCC_CR_PLLRDY_Msk /*!< PLL clock ready flag */ - - -/******************* Bit definition for RCC_CFGR register *******************/ -/*!< SW configuration */ -#define RCC_CFGR_SW_Pos (0U) -#define RCC_CFGR_SW_Msk (0x3U << RCC_CFGR_SW_Pos) /*!< 0x00000003 */ -#define RCC_CFGR_SW RCC_CFGR_SW_Msk /*!< SW[1:0] bits (System clock Switch) */ -#define RCC_CFGR_SW_0 (0x1U << RCC_CFGR_SW_Pos) /*!< 0x00000001 */ -#define RCC_CFGR_SW_1 (0x2U << RCC_CFGR_SW_Pos) /*!< 0x00000002 */ - -#define RCC_CFGR_SW_HSI 0x00000000U /*!< HSI selected as system clock */ -#define RCC_CFGR_SW_HSE 0x00000001U /*!< HSE selected as system clock */ -#define RCC_CFGR_SW_PLL 0x00000002U /*!< PLL selected as system clock */ - -/*!< SWS configuration */ -#define RCC_CFGR_SWS_Pos (2U) -#define RCC_CFGR_SWS_Msk (0x3U << RCC_CFGR_SWS_Pos) /*!< 0x0000000C */ -#define RCC_CFGR_SWS RCC_CFGR_SWS_Msk /*!< SWS[1:0] bits (System Clock Switch Status) */ -#define RCC_CFGR_SWS_0 (0x1U << RCC_CFGR_SWS_Pos) /*!< 0x00000004 */ -#define RCC_CFGR_SWS_1 (0x2U << RCC_CFGR_SWS_Pos) /*!< 0x00000008 */ - -#define RCC_CFGR_SWS_HSI 0x00000000U /*!< HSI oscillator used as system clock */ -#define RCC_CFGR_SWS_HSE 0x00000004U /*!< HSE oscillator used as system clock */ -#define RCC_CFGR_SWS_PLL 0x00000008U /*!< PLL used as system clock */ - -/*!< HPRE configuration */ -#define RCC_CFGR_HPRE_Pos (4U) -#define RCC_CFGR_HPRE_Msk (0xFU << RCC_CFGR_HPRE_Pos) /*!< 0x000000F0 */ -#define RCC_CFGR_HPRE RCC_CFGR_HPRE_Msk /*!< HPRE[3:0] bits (AHB prescaler) */ -#define RCC_CFGR_HPRE_0 (0x1U << RCC_CFGR_HPRE_Pos) /*!< 0x00000010 */ -#define RCC_CFGR_HPRE_1 (0x2U << RCC_CFGR_HPRE_Pos) /*!< 0x00000020 */ -#define RCC_CFGR_HPRE_2 (0x4U << RCC_CFGR_HPRE_Pos) /*!< 0x00000040 */ -#define RCC_CFGR_HPRE_3 (0x8U << RCC_CFGR_HPRE_Pos) /*!< 0x00000080 */ - -#define RCC_CFGR_HPRE_DIV1 0x00000000U /*!< SYSCLK not divided */ -#define RCC_CFGR_HPRE_DIV2 0x00000080U /*!< SYSCLK divided by 2 */ -#define RCC_CFGR_HPRE_DIV4 0x00000090U /*!< SYSCLK divided by 4 */ -#define RCC_CFGR_HPRE_DIV8 0x000000A0U /*!< SYSCLK divided by 8 */ -#define RCC_CFGR_HPRE_DIV16 0x000000B0U /*!< SYSCLK divided by 16 */ -#define RCC_CFGR_HPRE_DIV64 0x000000C0U /*!< SYSCLK divided by 64 */ -#define RCC_CFGR_HPRE_DIV128 0x000000D0U /*!< SYSCLK divided by 128 */ -#define RCC_CFGR_HPRE_DIV256 0x000000E0U /*!< SYSCLK divided by 256 */ -#define RCC_CFGR_HPRE_DIV512 0x000000F0U /*!< SYSCLK divided by 512 */ - -/*!< PPRE1 configuration */ -#define RCC_CFGR_PPRE1_Pos (8U) -#define RCC_CFGR_PPRE1_Msk (0x7U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000700 */ -#define RCC_CFGR_PPRE1 RCC_CFGR_PPRE1_Msk /*!< PRE1[2:0] bits (APB1 prescaler) */ -#define RCC_CFGR_PPRE1_0 (0x1U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000100 */ -#define RCC_CFGR_PPRE1_1 (0x2U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000200 */ -#define RCC_CFGR_PPRE1_2 (0x4U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000400 */ - -#define RCC_CFGR_PPRE1_DIV1 0x00000000U /*!< HCLK not divided */ -#define RCC_CFGR_PPRE1_DIV2 0x00000400U /*!< HCLK divided by 2 */ -#define RCC_CFGR_PPRE1_DIV4 0x00000500U /*!< HCLK divided by 4 */ -#define RCC_CFGR_PPRE1_DIV8 0x00000600U /*!< HCLK divided by 8 */ -#define RCC_CFGR_PPRE1_DIV16 0x00000700U /*!< HCLK divided by 16 */ - -/*!< PPRE2 configuration */ -#define RCC_CFGR_PPRE2_Pos (11U) -#define RCC_CFGR_PPRE2_Msk (0x7U << RCC_CFGR_PPRE2_Pos) /*!< 0x00003800 */ -#define RCC_CFGR_PPRE2 RCC_CFGR_PPRE2_Msk /*!< PRE2[2:0] bits (APB2 prescaler) */ -#define RCC_CFGR_PPRE2_0 (0x1U << RCC_CFGR_PPRE2_Pos) /*!< 0x00000800 */ -#define RCC_CFGR_PPRE2_1 (0x2U << RCC_CFGR_PPRE2_Pos) /*!< 0x00001000 */ -#define RCC_CFGR_PPRE2_2 (0x4U << RCC_CFGR_PPRE2_Pos) /*!< 0x00002000 */ - -#define RCC_CFGR_PPRE2_DIV1 0x00000000U /*!< HCLK not divided */ -#define RCC_CFGR_PPRE2_DIV2 0x00002000U /*!< HCLK divided by 2 */ -#define RCC_CFGR_PPRE2_DIV4 0x00002800U /*!< HCLK divided by 4 */ -#define RCC_CFGR_PPRE2_DIV8 0x00003000U /*!< HCLK divided by 8 */ -#define RCC_CFGR_PPRE2_DIV16 0x00003800U /*!< HCLK divided by 16 */ - -/*!< ADCPPRE configuration */ -#define RCC_CFGR_ADCPRE_Pos (14U) -#define RCC_CFGR_ADCPRE_Msk (0x3U << RCC_CFGR_ADCPRE_Pos) /*!< 0x0000C000 */ -#define RCC_CFGR_ADCPRE RCC_CFGR_ADCPRE_Msk /*!< ADCPRE[1:0] bits (ADC prescaler) */ -#define RCC_CFGR_ADCPRE_0 (0x1U << RCC_CFGR_ADCPRE_Pos) /*!< 0x00004000 */ -#define RCC_CFGR_ADCPRE_1 (0x2U << RCC_CFGR_ADCPRE_Pos) /*!< 0x00008000 */ - -#define RCC_CFGR_ADCPRE_DIV2 0x00000000U /*!< PCLK2 divided by 2 */ -#define RCC_CFGR_ADCPRE_DIV4 0x00004000U /*!< PCLK2 divided by 4 */ -#define RCC_CFGR_ADCPRE_DIV6 0x00008000U /*!< PCLK2 divided by 6 */ -#define RCC_CFGR_ADCPRE_DIV8 0x0000C000U /*!< PCLK2 divided by 8 */ - -#define RCC_CFGR_PLLSRC_Pos (16U) -#define RCC_CFGR_PLLSRC_Msk (0x1U << RCC_CFGR_PLLSRC_Pos) /*!< 0x00010000 */ -#define RCC_CFGR_PLLSRC RCC_CFGR_PLLSRC_Msk /*!< PLL entry clock source */ - -#define RCC_CFGR_PLLXTPRE_Pos (17U) -#define RCC_CFGR_PLLXTPRE_Msk (0x1U << RCC_CFGR_PLLXTPRE_Pos) /*!< 0x00020000 */ -#define RCC_CFGR_PLLXTPRE RCC_CFGR_PLLXTPRE_Msk /*!< HSE divider for PLL entry */ - -/*!< PLLMUL configuration */ -#define RCC_CFGR_PLLMULL_Pos (18U) -#define RCC_CFGR_PLLMULL_Msk (0xFU << RCC_CFGR_PLLMULL_Pos) /*!< 0x003C0000 */ -#define RCC_CFGR_PLLMULL RCC_CFGR_PLLMULL_Msk /*!< PLLMUL[3:0] bits (PLL multiplication factor) */ -#define RCC_CFGR_PLLMULL_0 (0x1U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00040000 */ -#define RCC_CFGR_PLLMULL_1 (0x2U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00080000 */ -#define RCC_CFGR_PLLMULL_2 (0x4U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00100000 */ -#define RCC_CFGR_PLLMULL_3 (0x8U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00200000 */ - -#define RCC_CFGR_PLLXTPRE_HSE 0x00000000U /*!< HSE clock not divided for PLL entry */ -#define RCC_CFGR_PLLXTPRE_HSE_DIV2 0x00020000U /*!< HSE clock divided by 2 for PLL entry */ - -#define RCC_CFGR_PLLMULL2 0x00000000U /*!< PLL input clock*2 */ -#define RCC_CFGR_PLLMULL3_Pos (18U) -#define RCC_CFGR_PLLMULL3_Msk (0x1U << RCC_CFGR_PLLMULL3_Pos) /*!< 0x00040000 */ -#define RCC_CFGR_PLLMULL3 RCC_CFGR_PLLMULL3_Msk /*!< PLL input clock*3 */ -#define RCC_CFGR_PLLMULL4_Pos (19U) -#define RCC_CFGR_PLLMULL4_Msk (0x1U << RCC_CFGR_PLLMULL4_Pos) /*!< 0x00080000 */ -#define RCC_CFGR_PLLMULL4 RCC_CFGR_PLLMULL4_Msk /*!< PLL input clock*4 */ -#define RCC_CFGR_PLLMULL5_Pos (18U) -#define RCC_CFGR_PLLMULL5_Msk (0x3U << RCC_CFGR_PLLMULL5_Pos) /*!< 0x000C0000 */ -#define RCC_CFGR_PLLMULL5 RCC_CFGR_PLLMULL5_Msk /*!< PLL input clock*5 */ -#define RCC_CFGR_PLLMULL6_Pos (20U) -#define RCC_CFGR_PLLMULL6_Msk (0x1U << RCC_CFGR_PLLMULL6_Pos) /*!< 0x00100000 */ -#define RCC_CFGR_PLLMULL6 RCC_CFGR_PLLMULL6_Msk /*!< PLL input clock*6 */ -#define RCC_CFGR_PLLMULL7_Pos (18U) -#define RCC_CFGR_PLLMULL7_Msk (0x5U << RCC_CFGR_PLLMULL7_Pos) /*!< 0x00140000 */ -#define RCC_CFGR_PLLMULL7 RCC_CFGR_PLLMULL7_Msk /*!< PLL input clock*7 */ -#define RCC_CFGR_PLLMULL8_Pos (19U) -#define RCC_CFGR_PLLMULL8_Msk (0x3U << RCC_CFGR_PLLMULL8_Pos) /*!< 0x00180000 */ -#define RCC_CFGR_PLLMULL8 RCC_CFGR_PLLMULL8_Msk /*!< PLL input clock*8 */ -#define RCC_CFGR_PLLMULL9_Pos (18U) -#define RCC_CFGR_PLLMULL9_Msk (0x7U << RCC_CFGR_PLLMULL9_Pos) /*!< 0x001C0000 */ -#define RCC_CFGR_PLLMULL9 RCC_CFGR_PLLMULL9_Msk /*!< PLL input clock*9 */ -#define RCC_CFGR_PLLMULL10_Pos (21U) -#define RCC_CFGR_PLLMULL10_Msk (0x1U << RCC_CFGR_PLLMULL10_Pos) /*!< 0x00200000 */ -#define RCC_CFGR_PLLMULL10 RCC_CFGR_PLLMULL10_Msk /*!< PLL input clock10 */ -#define RCC_CFGR_PLLMULL11_Pos (18U) -#define RCC_CFGR_PLLMULL11_Msk (0x9U << RCC_CFGR_PLLMULL11_Pos) /*!< 0x00240000 */ -#define RCC_CFGR_PLLMULL11 RCC_CFGR_PLLMULL11_Msk /*!< PLL input clock*11 */ -#define RCC_CFGR_PLLMULL12_Pos (19U) -#define RCC_CFGR_PLLMULL12_Msk (0x5U << RCC_CFGR_PLLMULL12_Pos) /*!< 0x00280000 */ -#define RCC_CFGR_PLLMULL12 RCC_CFGR_PLLMULL12_Msk /*!< PLL input clock*12 */ -#define RCC_CFGR_PLLMULL13_Pos (18U) -#define RCC_CFGR_PLLMULL13_Msk (0xBU << RCC_CFGR_PLLMULL13_Pos) /*!< 0x002C0000 */ -#define RCC_CFGR_PLLMULL13 RCC_CFGR_PLLMULL13_Msk /*!< PLL input clock*13 */ -#define RCC_CFGR_PLLMULL14_Pos (20U) -#define RCC_CFGR_PLLMULL14_Msk (0x3U << RCC_CFGR_PLLMULL14_Pos) /*!< 0x00300000 */ -#define RCC_CFGR_PLLMULL14 RCC_CFGR_PLLMULL14_Msk /*!< PLL input clock*14 */ -#define RCC_CFGR_PLLMULL15_Pos (18U) -#define RCC_CFGR_PLLMULL15_Msk (0xDU << RCC_CFGR_PLLMULL15_Pos) /*!< 0x00340000 */ -#define RCC_CFGR_PLLMULL15 RCC_CFGR_PLLMULL15_Msk /*!< PLL input clock*15 */ -#define RCC_CFGR_PLLMULL16_Pos (19U) -#define RCC_CFGR_PLLMULL16_Msk (0x7U << RCC_CFGR_PLLMULL16_Pos) /*!< 0x00380000 */ -#define RCC_CFGR_PLLMULL16 RCC_CFGR_PLLMULL16_Msk /*!< PLL input clock*16 */ -#define RCC_CFGR_USBPRE_Pos (22U) -#define RCC_CFGR_USBPRE_Msk (0x1U << RCC_CFGR_USBPRE_Pos) /*!< 0x00400000 */ -#define RCC_CFGR_USBPRE RCC_CFGR_USBPRE_Msk /*!< USB Device prescaler */ - -/*!< MCO configuration */ -#define RCC_CFGR_MCO_Pos (24U) -#define RCC_CFGR_MCO_Msk (0x7U << RCC_CFGR_MCO_Pos) /*!< 0x07000000 */ -#define RCC_CFGR_MCO RCC_CFGR_MCO_Msk /*!< MCO[2:0] bits (Microcontroller Clock Output) */ -#define RCC_CFGR_MCO_0 (0x1U << RCC_CFGR_MCO_Pos) /*!< 0x01000000 */ -#define RCC_CFGR_MCO_1 (0x2U << RCC_CFGR_MCO_Pos) /*!< 0x02000000 */ -#define RCC_CFGR_MCO_2 (0x4U << RCC_CFGR_MCO_Pos) /*!< 0x04000000 */ - -#define RCC_CFGR_MCO_NOCLOCK 0x00000000U /*!< No clock */ -#define RCC_CFGR_MCO_SYSCLK 0x04000000U /*!< System clock selected as MCO source */ -#define RCC_CFGR_MCO_HSI 0x05000000U /*!< HSI clock selected as MCO source */ -#define RCC_CFGR_MCO_HSE 0x06000000U /*!< HSE clock selected as MCO source */ -#define RCC_CFGR_MCO_PLLCLK_DIV2 0x07000000U /*!< PLL clock divided by 2 selected as MCO source */ - - /* Reference defines */ - #define RCC_CFGR_MCOSEL RCC_CFGR_MCO - #define RCC_CFGR_MCOSEL_0 RCC_CFGR_MCO_0 - #define RCC_CFGR_MCOSEL_1 RCC_CFGR_MCO_1 - #define RCC_CFGR_MCOSEL_2 RCC_CFGR_MCO_2 - #define RCC_CFGR_MCOSEL_NOCLOCK RCC_CFGR_MCO_NOCLOCK - #define RCC_CFGR_MCOSEL_SYSCLK RCC_CFGR_MCO_SYSCLK - #define RCC_CFGR_MCOSEL_HSI RCC_CFGR_MCO_HSI - #define RCC_CFGR_MCOSEL_HSE RCC_CFGR_MCO_HSE - #define RCC_CFGR_MCOSEL_PLL_DIV2 RCC_CFGR_MCO_PLLCLK_DIV2 - -/*!<****************** Bit definition for RCC_CIR register ********************/ -#define RCC_CIR_LSIRDYF_Pos (0U) -#define RCC_CIR_LSIRDYF_Msk (0x1U << RCC_CIR_LSIRDYF_Pos) /*!< 0x00000001 */ -#define RCC_CIR_LSIRDYF RCC_CIR_LSIRDYF_Msk /*!< LSI Ready Interrupt flag */ -#define RCC_CIR_LSERDYF_Pos (1U) -#define RCC_CIR_LSERDYF_Msk (0x1U << RCC_CIR_LSERDYF_Pos) /*!< 0x00000002 */ -#define RCC_CIR_LSERDYF RCC_CIR_LSERDYF_Msk /*!< LSE Ready Interrupt flag */ -#define RCC_CIR_HSIRDYF_Pos (2U) -#define RCC_CIR_HSIRDYF_Msk (0x1U << RCC_CIR_HSIRDYF_Pos) /*!< 0x00000004 */ -#define RCC_CIR_HSIRDYF RCC_CIR_HSIRDYF_Msk /*!< HSI Ready Interrupt flag */ -#define RCC_CIR_HSERDYF_Pos (3U) -#define RCC_CIR_HSERDYF_Msk (0x1U << RCC_CIR_HSERDYF_Pos) /*!< 0x00000008 */ -#define RCC_CIR_HSERDYF RCC_CIR_HSERDYF_Msk /*!< HSE Ready Interrupt flag */ -#define RCC_CIR_PLLRDYF_Pos (4U) -#define RCC_CIR_PLLRDYF_Msk (0x1U << RCC_CIR_PLLRDYF_Pos) /*!< 0x00000010 */ -#define RCC_CIR_PLLRDYF RCC_CIR_PLLRDYF_Msk /*!< PLL Ready Interrupt flag */ -#define RCC_CIR_CSSF_Pos (7U) -#define RCC_CIR_CSSF_Msk (0x1U << RCC_CIR_CSSF_Pos) /*!< 0x00000080 */ -#define RCC_CIR_CSSF RCC_CIR_CSSF_Msk /*!< Clock Security System Interrupt flag */ -#define RCC_CIR_LSIRDYIE_Pos (8U) -#define RCC_CIR_LSIRDYIE_Msk (0x1U << RCC_CIR_LSIRDYIE_Pos) /*!< 0x00000100 */ -#define RCC_CIR_LSIRDYIE RCC_CIR_LSIRDYIE_Msk /*!< LSI Ready Interrupt Enable */ -#define RCC_CIR_LSERDYIE_Pos (9U) -#define RCC_CIR_LSERDYIE_Msk (0x1U << RCC_CIR_LSERDYIE_Pos) /*!< 0x00000200 */ -#define RCC_CIR_LSERDYIE RCC_CIR_LSERDYIE_Msk /*!< LSE Ready Interrupt Enable */ -#define RCC_CIR_HSIRDYIE_Pos (10U) -#define RCC_CIR_HSIRDYIE_Msk (0x1U << RCC_CIR_HSIRDYIE_Pos) /*!< 0x00000400 */ -#define RCC_CIR_HSIRDYIE RCC_CIR_HSIRDYIE_Msk /*!< HSI Ready Interrupt Enable */ -#define RCC_CIR_HSERDYIE_Pos (11U) -#define RCC_CIR_HSERDYIE_Msk (0x1U << RCC_CIR_HSERDYIE_Pos) /*!< 0x00000800 */ -#define RCC_CIR_HSERDYIE RCC_CIR_HSERDYIE_Msk /*!< HSE Ready Interrupt Enable */ -#define RCC_CIR_PLLRDYIE_Pos (12U) -#define RCC_CIR_PLLRDYIE_Msk (0x1U << RCC_CIR_PLLRDYIE_Pos) /*!< 0x00001000 */ -#define RCC_CIR_PLLRDYIE RCC_CIR_PLLRDYIE_Msk /*!< PLL Ready Interrupt Enable */ -#define RCC_CIR_LSIRDYC_Pos (16U) -#define RCC_CIR_LSIRDYC_Msk (0x1U << RCC_CIR_LSIRDYC_Pos) /*!< 0x00010000 */ -#define RCC_CIR_LSIRDYC RCC_CIR_LSIRDYC_Msk /*!< LSI Ready Interrupt Clear */ -#define RCC_CIR_LSERDYC_Pos (17U) -#define RCC_CIR_LSERDYC_Msk (0x1U << RCC_CIR_LSERDYC_Pos) /*!< 0x00020000 */ -#define RCC_CIR_LSERDYC RCC_CIR_LSERDYC_Msk /*!< LSE Ready Interrupt Clear */ -#define RCC_CIR_HSIRDYC_Pos (18U) -#define RCC_CIR_HSIRDYC_Msk (0x1U << RCC_CIR_HSIRDYC_Pos) /*!< 0x00040000 */ -#define RCC_CIR_HSIRDYC RCC_CIR_HSIRDYC_Msk /*!< HSI Ready Interrupt Clear */ -#define RCC_CIR_HSERDYC_Pos (19U) -#define RCC_CIR_HSERDYC_Msk (0x1U << RCC_CIR_HSERDYC_Pos) /*!< 0x00080000 */ -#define RCC_CIR_HSERDYC RCC_CIR_HSERDYC_Msk /*!< HSE Ready Interrupt Clear */ -#define RCC_CIR_PLLRDYC_Pos (20U) -#define RCC_CIR_PLLRDYC_Msk (0x1U << RCC_CIR_PLLRDYC_Pos) /*!< 0x00100000 */ -#define RCC_CIR_PLLRDYC RCC_CIR_PLLRDYC_Msk /*!< PLL Ready Interrupt Clear */ -#define RCC_CIR_CSSC_Pos (23U) -#define RCC_CIR_CSSC_Msk (0x1U << RCC_CIR_CSSC_Pos) /*!< 0x00800000 */ -#define RCC_CIR_CSSC RCC_CIR_CSSC_Msk /*!< Clock Security System Interrupt Clear */ - - -/***************** Bit definition for RCC_APB2RSTR register *****************/ -#define RCC_APB2RSTR_AFIORST_Pos (0U) -#define RCC_APB2RSTR_AFIORST_Msk (0x1U << RCC_APB2RSTR_AFIORST_Pos) /*!< 0x00000001 */ -#define RCC_APB2RSTR_AFIORST RCC_APB2RSTR_AFIORST_Msk /*!< Alternate Function I/O reset */ -#define RCC_APB2RSTR_IOPARST_Pos (2U) -#define RCC_APB2RSTR_IOPARST_Msk (0x1U << RCC_APB2RSTR_IOPARST_Pos) /*!< 0x00000004 */ -#define RCC_APB2RSTR_IOPARST RCC_APB2RSTR_IOPARST_Msk /*!< I/O port A reset */ -#define RCC_APB2RSTR_IOPBRST_Pos (3U) -#define RCC_APB2RSTR_IOPBRST_Msk (0x1U << RCC_APB2RSTR_IOPBRST_Pos) /*!< 0x00000008 */ -#define RCC_APB2RSTR_IOPBRST RCC_APB2RSTR_IOPBRST_Msk /*!< I/O port B reset */ -#define RCC_APB2RSTR_IOPCRST_Pos (4U) -#define RCC_APB2RSTR_IOPCRST_Msk (0x1U << RCC_APB2RSTR_IOPCRST_Pos) /*!< 0x00000010 */ -#define RCC_APB2RSTR_IOPCRST RCC_APB2RSTR_IOPCRST_Msk /*!< I/O port C reset */ -#define RCC_APB2RSTR_IOPDRST_Pos (5U) -#define RCC_APB2RSTR_IOPDRST_Msk (0x1U << RCC_APB2RSTR_IOPDRST_Pos) /*!< 0x00000020 */ -#define RCC_APB2RSTR_IOPDRST RCC_APB2RSTR_IOPDRST_Msk /*!< I/O port D reset */ -#define RCC_APB2RSTR_ADC1RST_Pos (9U) -#define RCC_APB2RSTR_ADC1RST_Msk (0x1U << RCC_APB2RSTR_ADC1RST_Pos) /*!< 0x00000200 */ -#define RCC_APB2RSTR_ADC1RST RCC_APB2RSTR_ADC1RST_Msk /*!< ADC 1 interface reset */ - -#define RCC_APB2RSTR_ADC2RST_Pos (10U) -#define RCC_APB2RSTR_ADC2RST_Msk (0x1U << RCC_APB2RSTR_ADC2RST_Pos) /*!< 0x00000400 */ -#define RCC_APB2RSTR_ADC2RST RCC_APB2RSTR_ADC2RST_Msk /*!< ADC 2 interface reset */ - -#define RCC_APB2RSTR_TIM1RST_Pos (11U) -#define RCC_APB2RSTR_TIM1RST_Msk (0x1U << RCC_APB2RSTR_TIM1RST_Pos) /*!< 0x00000800 */ -#define RCC_APB2RSTR_TIM1RST RCC_APB2RSTR_TIM1RST_Msk /*!< TIM1 Timer reset */ -#define RCC_APB2RSTR_SPI1RST_Pos (12U) -#define RCC_APB2RSTR_SPI1RST_Msk (0x1U << RCC_APB2RSTR_SPI1RST_Pos) /*!< 0x00001000 */ -#define RCC_APB2RSTR_SPI1RST RCC_APB2RSTR_SPI1RST_Msk /*!< SPI 1 reset */ -#define RCC_APB2RSTR_USART1RST_Pos (14U) -#define RCC_APB2RSTR_USART1RST_Msk (0x1U << RCC_APB2RSTR_USART1RST_Pos) /*!< 0x00004000 */ -#define RCC_APB2RSTR_USART1RST RCC_APB2RSTR_USART1RST_Msk /*!< USART1 reset */ - - -#define RCC_APB2RSTR_IOPERST_Pos (6U) -#define RCC_APB2RSTR_IOPERST_Msk (0x1U << RCC_APB2RSTR_IOPERST_Pos) /*!< 0x00000040 */ -#define RCC_APB2RSTR_IOPERST RCC_APB2RSTR_IOPERST_Msk /*!< I/O port E reset */ - - - - -/***************** Bit definition for RCC_APB1RSTR register *****************/ -#define RCC_APB1RSTR_TIM2RST_Pos (0U) -#define RCC_APB1RSTR_TIM2RST_Msk (0x1U << RCC_APB1RSTR_TIM2RST_Pos) /*!< 0x00000001 */ -#define RCC_APB1RSTR_TIM2RST RCC_APB1RSTR_TIM2RST_Msk /*!< Timer 2 reset */ -#define RCC_APB1RSTR_TIM3RST_Pos (1U) -#define RCC_APB1RSTR_TIM3RST_Msk (0x1U << RCC_APB1RSTR_TIM3RST_Pos) /*!< 0x00000002 */ -#define RCC_APB1RSTR_TIM3RST RCC_APB1RSTR_TIM3RST_Msk /*!< Timer 3 reset */ -#define RCC_APB1RSTR_WWDGRST_Pos (11U) -#define RCC_APB1RSTR_WWDGRST_Msk (0x1U << RCC_APB1RSTR_WWDGRST_Pos) /*!< 0x00000800 */ -#define RCC_APB1RSTR_WWDGRST RCC_APB1RSTR_WWDGRST_Msk /*!< Window Watchdog reset */ -#define RCC_APB1RSTR_USART2RST_Pos (17U) -#define RCC_APB1RSTR_USART2RST_Msk (0x1U << RCC_APB1RSTR_USART2RST_Pos) /*!< 0x00020000 */ -#define RCC_APB1RSTR_USART2RST RCC_APB1RSTR_USART2RST_Msk /*!< USART 2 reset */ -#define RCC_APB1RSTR_I2C1RST_Pos (21U) -#define RCC_APB1RSTR_I2C1RST_Msk (0x1U << RCC_APB1RSTR_I2C1RST_Pos) /*!< 0x00200000 */ -#define RCC_APB1RSTR_I2C1RST RCC_APB1RSTR_I2C1RST_Msk /*!< I2C 1 reset */ - -#define RCC_APB1RSTR_CAN1RST_Pos (25U) -#define RCC_APB1RSTR_CAN1RST_Msk (0x1U << RCC_APB1RSTR_CAN1RST_Pos) /*!< 0x02000000 */ -#define RCC_APB1RSTR_CAN1RST RCC_APB1RSTR_CAN1RST_Msk /*!< CAN1 reset */ - -#define RCC_APB1RSTR_BKPRST_Pos (27U) -#define RCC_APB1RSTR_BKPRST_Msk (0x1U << RCC_APB1RSTR_BKPRST_Pos) /*!< 0x08000000 */ -#define RCC_APB1RSTR_BKPRST RCC_APB1RSTR_BKPRST_Msk /*!< Backup interface reset */ -#define RCC_APB1RSTR_PWRRST_Pos (28U) -#define RCC_APB1RSTR_PWRRST_Msk (0x1U << RCC_APB1RSTR_PWRRST_Pos) /*!< 0x10000000 */ -#define RCC_APB1RSTR_PWRRST RCC_APB1RSTR_PWRRST_Msk /*!< Power interface reset */ - -#define RCC_APB1RSTR_TIM4RST_Pos (2U) -#define RCC_APB1RSTR_TIM4RST_Msk (0x1U << RCC_APB1RSTR_TIM4RST_Pos) /*!< 0x00000004 */ -#define RCC_APB1RSTR_TIM4RST RCC_APB1RSTR_TIM4RST_Msk /*!< Timer 4 reset */ -#define RCC_APB1RSTR_SPI2RST_Pos (14U) -#define RCC_APB1RSTR_SPI2RST_Msk (0x1U << RCC_APB1RSTR_SPI2RST_Pos) /*!< 0x00004000 */ -#define RCC_APB1RSTR_SPI2RST RCC_APB1RSTR_SPI2RST_Msk /*!< SPI 2 reset */ -#define RCC_APB1RSTR_USART3RST_Pos (18U) -#define RCC_APB1RSTR_USART3RST_Msk (0x1U << RCC_APB1RSTR_USART3RST_Pos) /*!< 0x00040000 */ -#define RCC_APB1RSTR_USART3RST RCC_APB1RSTR_USART3RST_Msk /*!< USART 3 reset */ -#define RCC_APB1RSTR_I2C2RST_Pos (22U) -#define RCC_APB1RSTR_I2C2RST_Msk (0x1U << RCC_APB1RSTR_I2C2RST_Pos) /*!< 0x00400000 */ -#define RCC_APB1RSTR_I2C2RST RCC_APB1RSTR_I2C2RST_Msk /*!< I2C 2 reset */ - -#define RCC_APB1RSTR_USBRST_Pos (23U) -#define RCC_APB1RSTR_USBRST_Msk (0x1U << RCC_APB1RSTR_USBRST_Pos) /*!< 0x00800000 */ -#define RCC_APB1RSTR_USBRST RCC_APB1RSTR_USBRST_Msk /*!< USB Device reset */ - - - - - - -/****************** Bit definition for RCC_AHBENR register ******************/ -#define RCC_AHBENR_DMA1EN_Pos (0U) -#define RCC_AHBENR_DMA1EN_Msk (0x1U << RCC_AHBENR_DMA1EN_Pos) /*!< 0x00000001 */ -#define RCC_AHBENR_DMA1EN RCC_AHBENR_DMA1EN_Msk /*!< DMA1 clock enable */ -#define RCC_AHBENR_SRAMEN_Pos (2U) -#define RCC_AHBENR_SRAMEN_Msk (0x1U << RCC_AHBENR_SRAMEN_Pos) /*!< 0x00000004 */ -#define RCC_AHBENR_SRAMEN RCC_AHBENR_SRAMEN_Msk /*!< SRAM interface clock enable */ -#define RCC_AHBENR_FLITFEN_Pos (4U) -#define RCC_AHBENR_FLITFEN_Msk (0x1U << RCC_AHBENR_FLITFEN_Pos) /*!< 0x00000010 */ -#define RCC_AHBENR_FLITFEN RCC_AHBENR_FLITFEN_Msk /*!< FLITF clock enable */ -#define RCC_AHBENR_CRCEN_Pos (6U) -#define RCC_AHBENR_CRCEN_Msk (0x1U << RCC_AHBENR_CRCEN_Pos) /*!< 0x00000040 */ -#define RCC_AHBENR_CRCEN RCC_AHBENR_CRCEN_Msk /*!< CRC clock enable */ - - - - -/****************** Bit definition for RCC_APB2ENR register *****************/ -#define RCC_APB2ENR_AFIOEN_Pos (0U) -#define RCC_APB2ENR_AFIOEN_Msk (0x1U << RCC_APB2ENR_AFIOEN_Pos) /*!< 0x00000001 */ -#define RCC_APB2ENR_AFIOEN RCC_APB2ENR_AFIOEN_Msk /*!< Alternate Function I/O clock enable */ -#define RCC_APB2ENR_IOPAEN_Pos (2U) -#define RCC_APB2ENR_IOPAEN_Msk (0x1U << RCC_APB2ENR_IOPAEN_Pos) /*!< 0x00000004 */ -#define RCC_APB2ENR_IOPAEN RCC_APB2ENR_IOPAEN_Msk /*!< I/O port A clock enable */ -#define RCC_APB2ENR_IOPBEN_Pos (3U) -#define RCC_APB2ENR_IOPBEN_Msk (0x1U << RCC_APB2ENR_IOPBEN_Pos) /*!< 0x00000008 */ -#define RCC_APB2ENR_IOPBEN RCC_APB2ENR_IOPBEN_Msk /*!< I/O port B clock enable */ -#define RCC_APB2ENR_IOPCEN_Pos (4U) -#define RCC_APB2ENR_IOPCEN_Msk (0x1U << RCC_APB2ENR_IOPCEN_Pos) /*!< 0x00000010 */ -#define RCC_APB2ENR_IOPCEN RCC_APB2ENR_IOPCEN_Msk /*!< I/O port C clock enable */ -#define RCC_APB2ENR_IOPDEN_Pos (5U) -#define RCC_APB2ENR_IOPDEN_Msk (0x1U << RCC_APB2ENR_IOPDEN_Pos) /*!< 0x00000020 */ -#define RCC_APB2ENR_IOPDEN RCC_APB2ENR_IOPDEN_Msk /*!< I/O port D clock enable */ -#define RCC_APB2ENR_ADC1EN_Pos (9U) -#define RCC_APB2ENR_ADC1EN_Msk (0x1U << RCC_APB2ENR_ADC1EN_Pos) /*!< 0x00000200 */ -#define RCC_APB2ENR_ADC1EN RCC_APB2ENR_ADC1EN_Msk /*!< ADC 1 interface clock enable */ - -#define RCC_APB2ENR_ADC2EN_Pos (10U) -#define RCC_APB2ENR_ADC2EN_Msk (0x1U << RCC_APB2ENR_ADC2EN_Pos) /*!< 0x00000400 */ -#define RCC_APB2ENR_ADC2EN RCC_APB2ENR_ADC2EN_Msk /*!< ADC 2 interface clock enable */ - -#define RCC_APB2ENR_TIM1EN_Pos (11U) -#define RCC_APB2ENR_TIM1EN_Msk (0x1U << RCC_APB2ENR_TIM1EN_Pos) /*!< 0x00000800 */ -#define RCC_APB2ENR_TIM1EN RCC_APB2ENR_TIM1EN_Msk /*!< TIM1 Timer clock enable */ -#define RCC_APB2ENR_SPI1EN_Pos (12U) -#define RCC_APB2ENR_SPI1EN_Msk (0x1U << RCC_APB2ENR_SPI1EN_Pos) /*!< 0x00001000 */ -#define RCC_APB2ENR_SPI1EN RCC_APB2ENR_SPI1EN_Msk /*!< SPI 1 clock enable */ -#define RCC_APB2ENR_USART1EN_Pos (14U) -#define RCC_APB2ENR_USART1EN_Msk (0x1U << RCC_APB2ENR_USART1EN_Pos) /*!< 0x00004000 */ -#define RCC_APB2ENR_USART1EN RCC_APB2ENR_USART1EN_Msk /*!< USART1 clock enable */ - - -#define RCC_APB2ENR_IOPEEN_Pos (6U) -#define RCC_APB2ENR_IOPEEN_Msk (0x1U << RCC_APB2ENR_IOPEEN_Pos) /*!< 0x00000040 */ -#define RCC_APB2ENR_IOPEEN RCC_APB2ENR_IOPEEN_Msk /*!< I/O port E clock enable */ - - - - -/***************** Bit definition for RCC_APB1ENR register ******************/ -#define RCC_APB1ENR_TIM2EN_Pos (0U) -#define RCC_APB1ENR_TIM2EN_Msk (0x1U << RCC_APB1ENR_TIM2EN_Pos) /*!< 0x00000001 */ -#define RCC_APB1ENR_TIM2EN RCC_APB1ENR_TIM2EN_Msk /*!< Timer 2 clock enabled*/ -#define RCC_APB1ENR_TIM3EN_Pos (1U) -#define RCC_APB1ENR_TIM3EN_Msk (0x1U << RCC_APB1ENR_TIM3EN_Pos) /*!< 0x00000002 */ -#define RCC_APB1ENR_TIM3EN RCC_APB1ENR_TIM3EN_Msk /*!< Timer 3 clock enable */ -#define RCC_APB1ENR_WWDGEN_Pos (11U) -#define RCC_APB1ENR_WWDGEN_Msk (0x1U << RCC_APB1ENR_WWDGEN_Pos) /*!< 0x00000800 */ -#define RCC_APB1ENR_WWDGEN RCC_APB1ENR_WWDGEN_Msk /*!< Window Watchdog clock enable */ -#define RCC_APB1ENR_USART2EN_Pos (17U) -#define RCC_APB1ENR_USART2EN_Msk (0x1U << RCC_APB1ENR_USART2EN_Pos) /*!< 0x00020000 */ -#define RCC_APB1ENR_USART2EN RCC_APB1ENR_USART2EN_Msk /*!< USART 2 clock enable */ -#define RCC_APB1ENR_I2C1EN_Pos (21U) -#define RCC_APB1ENR_I2C1EN_Msk (0x1U << RCC_APB1ENR_I2C1EN_Pos) /*!< 0x00200000 */ -#define RCC_APB1ENR_I2C1EN RCC_APB1ENR_I2C1EN_Msk /*!< I2C 1 clock enable */ - -#define RCC_APB1ENR_CAN1EN_Pos (25U) -#define RCC_APB1ENR_CAN1EN_Msk (0x1U << RCC_APB1ENR_CAN1EN_Pos) /*!< 0x02000000 */ -#define RCC_APB1ENR_CAN1EN RCC_APB1ENR_CAN1EN_Msk /*!< CAN1 clock enable */ - -#define RCC_APB1ENR_BKPEN_Pos (27U) -#define RCC_APB1ENR_BKPEN_Msk (0x1U << RCC_APB1ENR_BKPEN_Pos) /*!< 0x08000000 */ -#define RCC_APB1ENR_BKPEN RCC_APB1ENR_BKPEN_Msk /*!< Backup interface clock enable */ -#define RCC_APB1ENR_PWREN_Pos (28U) -#define RCC_APB1ENR_PWREN_Msk (0x1U << RCC_APB1ENR_PWREN_Pos) /*!< 0x10000000 */ -#define RCC_APB1ENR_PWREN RCC_APB1ENR_PWREN_Msk /*!< Power interface clock enable */ - -#define RCC_APB1ENR_TIM4EN_Pos (2U) -#define RCC_APB1ENR_TIM4EN_Msk (0x1U << RCC_APB1ENR_TIM4EN_Pos) /*!< 0x00000004 */ -#define RCC_APB1ENR_TIM4EN RCC_APB1ENR_TIM4EN_Msk /*!< Timer 4 clock enable */ -#define RCC_APB1ENR_SPI2EN_Pos (14U) -#define RCC_APB1ENR_SPI2EN_Msk (0x1U << RCC_APB1ENR_SPI2EN_Pos) /*!< 0x00004000 */ -#define RCC_APB1ENR_SPI2EN RCC_APB1ENR_SPI2EN_Msk /*!< SPI 2 clock enable */ -#define RCC_APB1ENR_USART3EN_Pos (18U) -#define RCC_APB1ENR_USART3EN_Msk (0x1U << RCC_APB1ENR_USART3EN_Pos) /*!< 0x00040000 */ -#define RCC_APB1ENR_USART3EN RCC_APB1ENR_USART3EN_Msk /*!< USART 3 clock enable */ -#define RCC_APB1ENR_I2C2EN_Pos (22U) -#define RCC_APB1ENR_I2C2EN_Msk (0x1U << RCC_APB1ENR_I2C2EN_Pos) /*!< 0x00400000 */ -#define RCC_APB1ENR_I2C2EN RCC_APB1ENR_I2C2EN_Msk /*!< I2C 2 clock enable */ - -#define RCC_APB1ENR_USBEN_Pos (23U) -#define RCC_APB1ENR_USBEN_Msk (0x1U << RCC_APB1ENR_USBEN_Pos) /*!< 0x00800000 */ -#define RCC_APB1ENR_USBEN RCC_APB1ENR_USBEN_Msk /*!< USB Device clock enable */ - - - - - - -/******************* Bit definition for RCC_BDCR register *******************/ -#define RCC_BDCR_LSEON_Pos (0U) -#define RCC_BDCR_LSEON_Msk (0x1U << RCC_BDCR_LSEON_Pos) /*!< 0x00000001 */ -#define RCC_BDCR_LSEON RCC_BDCR_LSEON_Msk /*!< External Low Speed oscillator enable */ -#define RCC_BDCR_LSERDY_Pos (1U) -#define RCC_BDCR_LSERDY_Msk (0x1U << RCC_BDCR_LSERDY_Pos) /*!< 0x00000002 */ -#define RCC_BDCR_LSERDY RCC_BDCR_LSERDY_Msk /*!< External Low Speed oscillator Ready */ -#define RCC_BDCR_LSEBYP_Pos (2U) -#define RCC_BDCR_LSEBYP_Msk (0x1U << RCC_BDCR_LSEBYP_Pos) /*!< 0x00000004 */ -#define RCC_BDCR_LSEBYP RCC_BDCR_LSEBYP_Msk /*!< External Low Speed oscillator Bypass */ - -#define RCC_BDCR_RTCSEL_Pos (8U) -#define RCC_BDCR_RTCSEL_Msk (0x3U << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000300 */ -#define RCC_BDCR_RTCSEL RCC_BDCR_RTCSEL_Msk /*!< RTCSEL[1:0] bits (RTC clock source selection) */ -#define RCC_BDCR_RTCSEL_0 (0x1U << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000100 */ -#define RCC_BDCR_RTCSEL_1 (0x2U << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000200 */ - -/*!< RTC congiguration */ -#define RCC_BDCR_RTCSEL_NOCLOCK 0x00000000U /*!< No clock */ -#define RCC_BDCR_RTCSEL_LSE 0x00000100U /*!< LSE oscillator clock used as RTC clock */ -#define RCC_BDCR_RTCSEL_LSI 0x00000200U /*!< LSI oscillator clock used as RTC clock */ -#define RCC_BDCR_RTCSEL_HSE 0x00000300U /*!< HSE oscillator clock divided by 128 used as RTC clock */ - -#define RCC_BDCR_RTCEN_Pos (15U) -#define RCC_BDCR_RTCEN_Msk (0x1U << RCC_BDCR_RTCEN_Pos) /*!< 0x00008000 */ -#define RCC_BDCR_RTCEN RCC_BDCR_RTCEN_Msk /*!< RTC clock enable */ -#define RCC_BDCR_BDRST_Pos (16U) -#define RCC_BDCR_BDRST_Msk (0x1U << RCC_BDCR_BDRST_Pos) /*!< 0x00010000 */ -#define RCC_BDCR_BDRST RCC_BDCR_BDRST_Msk /*!< Backup domain software reset */ - -/******************* Bit definition for RCC_CSR register ********************/ -#define RCC_CSR_LSION_Pos (0U) -#define RCC_CSR_LSION_Msk (0x1U << RCC_CSR_LSION_Pos) /*!< 0x00000001 */ -#define RCC_CSR_LSION RCC_CSR_LSION_Msk /*!< Internal Low Speed oscillator enable */ -#define RCC_CSR_LSIRDY_Pos (1U) -#define RCC_CSR_LSIRDY_Msk (0x1U << RCC_CSR_LSIRDY_Pos) /*!< 0x00000002 */ -#define RCC_CSR_LSIRDY RCC_CSR_LSIRDY_Msk /*!< Internal Low Speed oscillator Ready */ -#define RCC_CSR_RMVF_Pos (24U) -#define RCC_CSR_RMVF_Msk (0x1U << RCC_CSR_RMVF_Pos) /*!< 0x01000000 */ -#define RCC_CSR_RMVF RCC_CSR_RMVF_Msk /*!< Remove reset flag */ -#define RCC_CSR_PINRSTF_Pos (26U) -#define RCC_CSR_PINRSTF_Msk (0x1U << RCC_CSR_PINRSTF_Pos) /*!< 0x04000000 */ -#define RCC_CSR_PINRSTF RCC_CSR_PINRSTF_Msk /*!< PIN reset flag */ -#define RCC_CSR_PORRSTF_Pos (27U) -#define RCC_CSR_PORRSTF_Msk (0x1U << RCC_CSR_PORRSTF_Pos) /*!< 0x08000000 */ -#define RCC_CSR_PORRSTF RCC_CSR_PORRSTF_Msk /*!< POR/PDR reset flag */ -#define RCC_CSR_SFTRSTF_Pos (28U) -#define RCC_CSR_SFTRSTF_Msk (0x1U << RCC_CSR_SFTRSTF_Pos) /*!< 0x10000000 */ -#define RCC_CSR_SFTRSTF RCC_CSR_SFTRSTF_Msk /*!< Software Reset flag */ -#define RCC_CSR_IWDGRSTF_Pos (29U) -#define RCC_CSR_IWDGRSTF_Msk (0x1U << RCC_CSR_IWDGRSTF_Pos) /*!< 0x20000000 */ -#define RCC_CSR_IWDGRSTF RCC_CSR_IWDGRSTF_Msk /*!< Independent Watchdog reset flag */ -#define RCC_CSR_WWDGRSTF_Pos (30U) -#define RCC_CSR_WWDGRSTF_Msk (0x1U << RCC_CSR_WWDGRSTF_Pos) /*!< 0x40000000 */ -#define RCC_CSR_WWDGRSTF RCC_CSR_WWDGRSTF_Msk /*!< Window watchdog reset flag */ -#define RCC_CSR_LPWRRSTF_Pos (31U) -#define RCC_CSR_LPWRRSTF_Msk (0x1U << RCC_CSR_LPWRRSTF_Pos) /*!< 0x80000000 */ -#define RCC_CSR_LPWRRSTF RCC_CSR_LPWRRSTF_Msk /*!< Low-Power reset flag */ - - - -/******************************************************************************/ -/* */ -/* General Purpose and Alternate Function I/O */ -/* */ -/******************************************************************************/ - -/******************* Bit definition for GPIO_CRL register *******************/ -#define GPIO_CRL_MODE_Pos (0U) -#define GPIO_CRL_MODE_Msk (0x33333333U << GPIO_CRL_MODE_Pos) /*!< 0x33333333 */ -#define GPIO_CRL_MODE GPIO_CRL_MODE_Msk /*!< Port x mode bits */ - -#define GPIO_CRL_MODE0_Pos (0U) -#define GPIO_CRL_MODE0_Msk (0x3U << GPIO_CRL_MODE0_Pos) /*!< 0x00000003 */ -#define GPIO_CRL_MODE0 GPIO_CRL_MODE0_Msk /*!< MODE0[1:0] bits (Port x mode bits, pin 0) */ -#define GPIO_CRL_MODE0_0 (0x1U << GPIO_CRL_MODE0_Pos) /*!< 0x00000001 */ -#define GPIO_CRL_MODE0_1 (0x2U << GPIO_CRL_MODE0_Pos) /*!< 0x00000002 */ - -#define GPIO_CRL_MODE1_Pos (4U) -#define GPIO_CRL_MODE1_Msk (0x3U << GPIO_CRL_MODE1_Pos) /*!< 0x00000030 */ -#define GPIO_CRL_MODE1 GPIO_CRL_MODE1_Msk /*!< MODE1[1:0] bits (Port x mode bits, pin 1) */ -#define GPIO_CRL_MODE1_0 (0x1U << GPIO_CRL_MODE1_Pos) /*!< 0x00000010 */ -#define GPIO_CRL_MODE1_1 (0x2U << GPIO_CRL_MODE1_Pos) /*!< 0x00000020 */ - -#define GPIO_CRL_MODE2_Pos (8U) -#define GPIO_CRL_MODE2_Msk (0x3U << GPIO_CRL_MODE2_Pos) /*!< 0x00000300 */ -#define GPIO_CRL_MODE2 GPIO_CRL_MODE2_Msk /*!< MODE2[1:0] bits (Port x mode bits, pin 2) */ -#define GPIO_CRL_MODE2_0 (0x1U << GPIO_CRL_MODE2_Pos) /*!< 0x00000100 */ -#define GPIO_CRL_MODE2_1 (0x2U << GPIO_CRL_MODE2_Pos) /*!< 0x00000200 */ - -#define GPIO_CRL_MODE3_Pos (12U) -#define GPIO_CRL_MODE3_Msk (0x3U << GPIO_CRL_MODE3_Pos) /*!< 0x00003000 */ -#define GPIO_CRL_MODE3 GPIO_CRL_MODE3_Msk /*!< MODE3[1:0] bits (Port x mode bits, pin 3) */ -#define GPIO_CRL_MODE3_0 (0x1U << GPIO_CRL_MODE3_Pos) /*!< 0x00001000 */ -#define GPIO_CRL_MODE3_1 (0x2U << GPIO_CRL_MODE3_Pos) /*!< 0x00002000 */ - -#define GPIO_CRL_MODE4_Pos (16U) -#define GPIO_CRL_MODE4_Msk (0x3U << GPIO_CRL_MODE4_Pos) /*!< 0x00030000 */ -#define GPIO_CRL_MODE4 GPIO_CRL_MODE4_Msk /*!< MODE4[1:0] bits (Port x mode bits, pin 4) */ -#define GPIO_CRL_MODE4_0 (0x1U << GPIO_CRL_MODE4_Pos) /*!< 0x00010000 */ -#define GPIO_CRL_MODE4_1 (0x2U << GPIO_CRL_MODE4_Pos) /*!< 0x00020000 */ - -#define GPIO_CRL_MODE5_Pos (20U) -#define GPIO_CRL_MODE5_Msk (0x3U << GPIO_CRL_MODE5_Pos) /*!< 0x00300000 */ -#define GPIO_CRL_MODE5 GPIO_CRL_MODE5_Msk /*!< MODE5[1:0] bits (Port x mode bits, pin 5) */ -#define GPIO_CRL_MODE5_0 (0x1U << GPIO_CRL_MODE5_Pos) /*!< 0x00100000 */ -#define GPIO_CRL_MODE5_1 (0x2U << GPIO_CRL_MODE5_Pos) /*!< 0x00200000 */ - -#define GPIO_CRL_MODE6_Pos (24U) -#define GPIO_CRL_MODE6_Msk (0x3U << GPIO_CRL_MODE6_Pos) /*!< 0x03000000 */ -#define GPIO_CRL_MODE6 GPIO_CRL_MODE6_Msk /*!< MODE6[1:0] bits (Port x mode bits, pin 6) */ -#define GPIO_CRL_MODE6_0 (0x1U << GPIO_CRL_MODE6_Pos) /*!< 0x01000000 */ -#define GPIO_CRL_MODE6_1 (0x2U << GPIO_CRL_MODE6_Pos) /*!< 0x02000000 */ - -#define GPIO_CRL_MODE7_Pos (28U) -#define GPIO_CRL_MODE7_Msk (0x3U << GPIO_CRL_MODE7_Pos) /*!< 0x30000000 */ -#define GPIO_CRL_MODE7 GPIO_CRL_MODE7_Msk /*!< MODE7[1:0] bits (Port x mode bits, pin 7) */ -#define GPIO_CRL_MODE7_0 (0x1U << GPIO_CRL_MODE7_Pos) /*!< 0x10000000 */ -#define GPIO_CRL_MODE7_1 (0x2U << GPIO_CRL_MODE7_Pos) /*!< 0x20000000 */ - -#define GPIO_CRL_CNF_Pos (2U) -#define GPIO_CRL_CNF_Msk (0x33333333U << GPIO_CRL_CNF_Pos) /*!< 0xCCCCCCCC */ -#define GPIO_CRL_CNF GPIO_CRL_CNF_Msk /*!< Port x configuration bits */ - -#define GPIO_CRL_CNF0_Pos (2U) -#define GPIO_CRL_CNF0_Msk (0x3U << GPIO_CRL_CNF0_Pos) /*!< 0x0000000C */ -#define GPIO_CRL_CNF0 GPIO_CRL_CNF0_Msk /*!< CNF0[1:0] bits (Port x configuration bits, pin 0) */ -#define GPIO_CRL_CNF0_0 (0x1U << GPIO_CRL_CNF0_Pos) /*!< 0x00000004 */ -#define GPIO_CRL_CNF0_1 (0x2U << GPIO_CRL_CNF0_Pos) /*!< 0x00000008 */ - -#define GPIO_CRL_CNF1_Pos (6U) -#define GPIO_CRL_CNF1_Msk (0x3U << GPIO_CRL_CNF1_Pos) /*!< 0x000000C0 */ -#define GPIO_CRL_CNF1 GPIO_CRL_CNF1_Msk /*!< CNF1[1:0] bits (Port x configuration bits, pin 1) */ -#define GPIO_CRL_CNF1_0 (0x1U << GPIO_CRL_CNF1_Pos) /*!< 0x00000040 */ -#define GPIO_CRL_CNF1_1 (0x2U << GPIO_CRL_CNF1_Pos) /*!< 0x00000080 */ - -#define GPIO_CRL_CNF2_Pos (10U) -#define GPIO_CRL_CNF2_Msk (0x3U << GPIO_CRL_CNF2_Pos) /*!< 0x00000C00 */ -#define GPIO_CRL_CNF2 GPIO_CRL_CNF2_Msk /*!< CNF2[1:0] bits (Port x configuration bits, pin 2) */ -#define GPIO_CRL_CNF2_0 (0x1U << GPIO_CRL_CNF2_Pos) /*!< 0x00000400 */ -#define GPIO_CRL_CNF2_1 (0x2U << GPIO_CRL_CNF2_Pos) /*!< 0x00000800 */ - -#define GPIO_CRL_CNF3_Pos (14U) -#define GPIO_CRL_CNF3_Msk (0x3U << GPIO_CRL_CNF3_Pos) /*!< 0x0000C000 */ -#define GPIO_CRL_CNF3 GPIO_CRL_CNF3_Msk /*!< CNF3[1:0] bits (Port x configuration bits, pin 3) */ -#define GPIO_CRL_CNF3_0 (0x1U << GPIO_CRL_CNF3_Pos) /*!< 0x00004000 */ -#define GPIO_CRL_CNF3_1 (0x2U << GPIO_CRL_CNF3_Pos) /*!< 0x00008000 */ - -#define GPIO_CRL_CNF4_Pos (18U) -#define GPIO_CRL_CNF4_Msk (0x3U << GPIO_CRL_CNF4_Pos) /*!< 0x000C0000 */ -#define GPIO_CRL_CNF4 GPIO_CRL_CNF4_Msk /*!< CNF4[1:0] bits (Port x configuration bits, pin 4) */ -#define GPIO_CRL_CNF4_0 (0x1U << GPIO_CRL_CNF4_Pos) /*!< 0x00040000 */ -#define GPIO_CRL_CNF4_1 (0x2U << GPIO_CRL_CNF4_Pos) /*!< 0x00080000 */ - -#define GPIO_CRL_CNF5_Pos (22U) -#define GPIO_CRL_CNF5_Msk (0x3U << GPIO_CRL_CNF5_Pos) /*!< 0x00C00000 */ -#define GPIO_CRL_CNF5 GPIO_CRL_CNF5_Msk /*!< CNF5[1:0] bits (Port x configuration bits, pin 5) */ -#define GPIO_CRL_CNF5_0 (0x1U << GPIO_CRL_CNF5_Pos) /*!< 0x00400000 */ -#define GPIO_CRL_CNF5_1 (0x2U << GPIO_CRL_CNF5_Pos) /*!< 0x00800000 */ - -#define GPIO_CRL_CNF6_Pos (26U) -#define GPIO_CRL_CNF6_Msk (0x3U << GPIO_CRL_CNF6_Pos) /*!< 0x0C000000 */ -#define GPIO_CRL_CNF6 GPIO_CRL_CNF6_Msk /*!< CNF6[1:0] bits (Port x configuration bits, pin 6) */ -#define GPIO_CRL_CNF6_0 (0x1U << GPIO_CRL_CNF6_Pos) /*!< 0x04000000 */ -#define GPIO_CRL_CNF6_1 (0x2U << GPIO_CRL_CNF6_Pos) /*!< 0x08000000 */ - -#define GPIO_CRL_CNF7_Pos (30U) -#define GPIO_CRL_CNF7_Msk (0x3U << GPIO_CRL_CNF7_Pos) /*!< 0xC0000000 */ -#define GPIO_CRL_CNF7 GPIO_CRL_CNF7_Msk /*!< CNF7[1:0] bits (Port x configuration bits, pin 7) */ -#define GPIO_CRL_CNF7_0 (0x1U << GPIO_CRL_CNF7_Pos) /*!< 0x40000000 */ -#define GPIO_CRL_CNF7_1 (0x2U << GPIO_CRL_CNF7_Pos) /*!< 0x80000000 */ - -/******************* Bit definition for GPIO_CRH register *******************/ -#define GPIO_CRH_MODE_Pos (0U) -#define GPIO_CRH_MODE_Msk (0x33333333U << GPIO_CRH_MODE_Pos) /*!< 0x33333333 */ -#define GPIO_CRH_MODE GPIO_CRH_MODE_Msk /*!< Port x mode bits */ - -#define GPIO_CRH_MODE8_Pos (0U) -#define GPIO_CRH_MODE8_Msk (0x3U << GPIO_CRH_MODE8_Pos) /*!< 0x00000003 */ -#define GPIO_CRH_MODE8 GPIO_CRH_MODE8_Msk /*!< MODE8[1:0] bits (Port x mode bits, pin 8) */ -#define GPIO_CRH_MODE8_0 (0x1U << GPIO_CRH_MODE8_Pos) /*!< 0x00000001 */ -#define GPIO_CRH_MODE8_1 (0x2U << GPIO_CRH_MODE8_Pos) /*!< 0x00000002 */ - -#define GPIO_CRH_MODE9_Pos (4U) -#define GPIO_CRH_MODE9_Msk (0x3U << GPIO_CRH_MODE9_Pos) /*!< 0x00000030 */ -#define GPIO_CRH_MODE9 GPIO_CRH_MODE9_Msk /*!< MODE9[1:0] bits (Port x mode bits, pin 9) */ -#define GPIO_CRH_MODE9_0 (0x1U << GPIO_CRH_MODE9_Pos) /*!< 0x00000010 */ -#define GPIO_CRH_MODE9_1 (0x2U << GPIO_CRH_MODE9_Pos) /*!< 0x00000020 */ - -#define GPIO_CRH_MODE10_Pos (8U) -#define GPIO_CRH_MODE10_Msk (0x3U << GPIO_CRH_MODE10_Pos) /*!< 0x00000300 */ -#define GPIO_CRH_MODE10 GPIO_CRH_MODE10_Msk /*!< MODE10[1:0] bits (Port x mode bits, pin 10) */ -#define GPIO_CRH_MODE10_0 (0x1U << GPIO_CRH_MODE10_Pos) /*!< 0x00000100 */ -#define GPIO_CRH_MODE10_1 (0x2U << GPIO_CRH_MODE10_Pos) /*!< 0x00000200 */ - -#define GPIO_CRH_MODE11_Pos (12U) -#define GPIO_CRH_MODE11_Msk (0x3U << GPIO_CRH_MODE11_Pos) /*!< 0x00003000 */ -#define GPIO_CRH_MODE11 GPIO_CRH_MODE11_Msk /*!< MODE11[1:0] bits (Port x mode bits, pin 11) */ -#define GPIO_CRH_MODE11_0 (0x1U << GPIO_CRH_MODE11_Pos) /*!< 0x00001000 */ -#define GPIO_CRH_MODE11_1 (0x2U << GPIO_CRH_MODE11_Pos) /*!< 0x00002000 */ - -#define GPIO_CRH_MODE12_Pos (16U) -#define GPIO_CRH_MODE12_Msk (0x3U << GPIO_CRH_MODE12_Pos) /*!< 0x00030000 */ -#define GPIO_CRH_MODE12 GPIO_CRH_MODE12_Msk /*!< MODE12[1:0] bits (Port x mode bits, pin 12) */ -#define GPIO_CRH_MODE12_0 (0x1U << GPIO_CRH_MODE12_Pos) /*!< 0x00010000 */ -#define GPIO_CRH_MODE12_1 (0x2U << GPIO_CRH_MODE12_Pos) /*!< 0x00020000 */ - -#define GPIO_CRH_MODE13_Pos (20U) -#define GPIO_CRH_MODE13_Msk (0x3U << GPIO_CRH_MODE13_Pos) /*!< 0x00300000 */ -#define GPIO_CRH_MODE13 GPIO_CRH_MODE13_Msk /*!< MODE13[1:0] bits (Port x mode bits, pin 13) */ -#define GPIO_CRH_MODE13_0 (0x1U << GPIO_CRH_MODE13_Pos) /*!< 0x00100000 */ -#define GPIO_CRH_MODE13_1 (0x2U << GPIO_CRH_MODE13_Pos) /*!< 0x00200000 */ - -#define GPIO_CRH_MODE14_Pos (24U) -#define GPIO_CRH_MODE14_Msk (0x3U << GPIO_CRH_MODE14_Pos) /*!< 0x03000000 */ -#define GPIO_CRH_MODE14 GPIO_CRH_MODE14_Msk /*!< MODE14[1:0] bits (Port x mode bits, pin 14) */ -#define GPIO_CRH_MODE14_0 (0x1U << GPIO_CRH_MODE14_Pos) /*!< 0x01000000 */ -#define GPIO_CRH_MODE14_1 (0x2U << GPIO_CRH_MODE14_Pos) /*!< 0x02000000 */ - -#define GPIO_CRH_MODE15_Pos (28U) -#define GPIO_CRH_MODE15_Msk (0x3U << GPIO_CRH_MODE15_Pos) /*!< 0x30000000 */ -#define GPIO_CRH_MODE15 GPIO_CRH_MODE15_Msk /*!< MODE15[1:0] bits (Port x mode bits, pin 15) */ -#define GPIO_CRH_MODE15_0 (0x1U << GPIO_CRH_MODE15_Pos) /*!< 0x10000000 */ -#define GPIO_CRH_MODE15_1 (0x2U << GPIO_CRH_MODE15_Pos) /*!< 0x20000000 */ - -#define GPIO_CRH_CNF_Pos (2U) -#define GPIO_CRH_CNF_Msk (0x33333333U << GPIO_CRH_CNF_Pos) /*!< 0xCCCCCCCC */ -#define GPIO_CRH_CNF GPIO_CRH_CNF_Msk /*!< Port x configuration bits */ - -#define GPIO_CRH_CNF8_Pos (2U) -#define GPIO_CRH_CNF8_Msk (0x3U << GPIO_CRH_CNF8_Pos) /*!< 0x0000000C */ -#define GPIO_CRH_CNF8 GPIO_CRH_CNF8_Msk /*!< CNF8[1:0] bits (Port x configuration bits, pin 8) */ -#define GPIO_CRH_CNF8_0 (0x1U << GPIO_CRH_CNF8_Pos) /*!< 0x00000004 */ -#define GPIO_CRH_CNF8_1 (0x2U << GPIO_CRH_CNF8_Pos) /*!< 0x00000008 */ - -#define GPIO_CRH_CNF9_Pos (6U) -#define GPIO_CRH_CNF9_Msk (0x3U << GPIO_CRH_CNF9_Pos) /*!< 0x000000C0 */ -#define GPIO_CRH_CNF9 GPIO_CRH_CNF9_Msk /*!< CNF9[1:0] bits (Port x configuration bits, pin 9) */ -#define GPIO_CRH_CNF9_0 (0x1U << GPIO_CRH_CNF9_Pos) /*!< 0x00000040 */ -#define GPIO_CRH_CNF9_1 (0x2U << GPIO_CRH_CNF9_Pos) /*!< 0x00000080 */ - -#define GPIO_CRH_CNF10_Pos (10U) -#define GPIO_CRH_CNF10_Msk (0x3U << GPIO_CRH_CNF10_Pos) /*!< 0x00000C00 */ -#define GPIO_CRH_CNF10 GPIO_CRH_CNF10_Msk /*!< CNF10[1:0] bits (Port x configuration bits, pin 10) */ -#define GPIO_CRH_CNF10_0 (0x1U << GPIO_CRH_CNF10_Pos) /*!< 0x00000400 */ -#define GPIO_CRH_CNF10_1 (0x2U << GPIO_CRH_CNF10_Pos) /*!< 0x00000800 */ - -#define GPIO_CRH_CNF11_Pos (14U) -#define GPIO_CRH_CNF11_Msk (0x3U << GPIO_CRH_CNF11_Pos) /*!< 0x0000C000 */ -#define GPIO_CRH_CNF11 GPIO_CRH_CNF11_Msk /*!< CNF11[1:0] bits (Port x configuration bits, pin 11) */ -#define GPIO_CRH_CNF11_0 (0x1U << GPIO_CRH_CNF11_Pos) /*!< 0x00004000 */ -#define GPIO_CRH_CNF11_1 (0x2U << GPIO_CRH_CNF11_Pos) /*!< 0x00008000 */ - -#define GPIO_CRH_CNF12_Pos (18U) -#define GPIO_CRH_CNF12_Msk (0x3U << GPIO_CRH_CNF12_Pos) /*!< 0x000C0000 */ -#define GPIO_CRH_CNF12 GPIO_CRH_CNF12_Msk /*!< CNF12[1:0] bits (Port x configuration bits, pin 12) */ -#define GPIO_CRH_CNF12_0 (0x1U << GPIO_CRH_CNF12_Pos) /*!< 0x00040000 */ -#define GPIO_CRH_CNF12_1 (0x2U << GPIO_CRH_CNF12_Pos) /*!< 0x00080000 */ - -#define GPIO_CRH_CNF13_Pos (22U) -#define GPIO_CRH_CNF13_Msk (0x3U << GPIO_CRH_CNF13_Pos) /*!< 0x00C00000 */ -#define GPIO_CRH_CNF13 GPIO_CRH_CNF13_Msk /*!< CNF13[1:0] bits (Port x configuration bits, pin 13) */ -#define GPIO_CRH_CNF13_0 (0x1U << GPIO_CRH_CNF13_Pos) /*!< 0x00400000 */ -#define GPIO_CRH_CNF13_1 (0x2U << GPIO_CRH_CNF13_Pos) /*!< 0x00800000 */ - -#define GPIO_CRH_CNF14_Pos (26U) -#define GPIO_CRH_CNF14_Msk (0x3U << GPIO_CRH_CNF14_Pos) /*!< 0x0C000000 */ -#define GPIO_CRH_CNF14 GPIO_CRH_CNF14_Msk /*!< CNF14[1:0] bits (Port x configuration bits, pin 14) */ -#define GPIO_CRH_CNF14_0 (0x1U << GPIO_CRH_CNF14_Pos) /*!< 0x04000000 */ -#define GPIO_CRH_CNF14_1 (0x2U << GPIO_CRH_CNF14_Pos) /*!< 0x08000000 */ - -#define GPIO_CRH_CNF15_Pos (30U) -#define GPIO_CRH_CNF15_Msk (0x3U << GPIO_CRH_CNF15_Pos) /*!< 0xC0000000 */ -#define GPIO_CRH_CNF15 GPIO_CRH_CNF15_Msk /*!< CNF15[1:0] bits (Port x configuration bits, pin 15) */ -#define GPIO_CRH_CNF15_0 (0x1U << GPIO_CRH_CNF15_Pos) /*!< 0x40000000 */ -#define GPIO_CRH_CNF15_1 (0x2U << GPIO_CRH_CNF15_Pos) /*!< 0x80000000 */ - -/*!<****************** Bit definition for GPIO_IDR register *******************/ -#define GPIO_IDR_IDR0_Pos (0U) -#define GPIO_IDR_IDR0_Msk (0x1U << GPIO_IDR_IDR0_Pos) /*!< 0x00000001 */ -#define GPIO_IDR_IDR0 GPIO_IDR_IDR0_Msk /*!< Port input data, bit 0 */ -#define GPIO_IDR_IDR1_Pos (1U) -#define GPIO_IDR_IDR1_Msk (0x1U << GPIO_IDR_IDR1_Pos) /*!< 0x00000002 */ -#define GPIO_IDR_IDR1 GPIO_IDR_IDR1_Msk /*!< Port input data, bit 1 */ -#define GPIO_IDR_IDR2_Pos (2U) -#define GPIO_IDR_IDR2_Msk (0x1U << GPIO_IDR_IDR2_Pos) /*!< 0x00000004 */ -#define GPIO_IDR_IDR2 GPIO_IDR_IDR2_Msk /*!< Port input data, bit 2 */ -#define GPIO_IDR_IDR3_Pos (3U) -#define GPIO_IDR_IDR3_Msk (0x1U << GPIO_IDR_IDR3_Pos) /*!< 0x00000008 */ -#define GPIO_IDR_IDR3 GPIO_IDR_IDR3_Msk /*!< Port input data, bit 3 */ -#define GPIO_IDR_IDR4_Pos (4U) -#define GPIO_IDR_IDR4_Msk (0x1U << GPIO_IDR_IDR4_Pos) /*!< 0x00000010 */ -#define GPIO_IDR_IDR4 GPIO_IDR_IDR4_Msk /*!< Port input data, bit 4 */ -#define GPIO_IDR_IDR5_Pos (5U) -#define GPIO_IDR_IDR5_Msk (0x1U << GPIO_IDR_IDR5_Pos) /*!< 0x00000020 */ -#define GPIO_IDR_IDR5 GPIO_IDR_IDR5_Msk /*!< Port input data, bit 5 */ -#define GPIO_IDR_IDR6_Pos (6U) -#define GPIO_IDR_IDR6_Msk (0x1U << GPIO_IDR_IDR6_Pos) /*!< 0x00000040 */ -#define GPIO_IDR_IDR6 GPIO_IDR_IDR6_Msk /*!< Port input data, bit 6 */ -#define GPIO_IDR_IDR7_Pos (7U) -#define GPIO_IDR_IDR7_Msk (0x1U << GPIO_IDR_IDR7_Pos) /*!< 0x00000080 */ -#define GPIO_IDR_IDR7 GPIO_IDR_IDR7_Msk /*!< Port input data, bit 7 */ -#define GPIO_IDR_IDR8_Pos (8U) -#define GPIO_IDR_IDR8_Msk (0x1U << GPIO_IDR_IDR8_Pos) /*!< 0x00000100 */ -#define GPIO_IDR_IDR8 GPIO_IDR_IDR8_Msk /*!< Port input data, bit 8 */ -#define GPIO_IDR_IDR9_Pos (9U) -#define GPIO_IDR_IDR9_Msk (0x1U << GPIO_IDR_IDR9_Pos) /*!< 0x00000200 */ -#define GPIO_IDR_IDR9 GPIO_IDR_IDR9_Msk /*!< Port input data, bit 9 */ -#define GPIO_IDR_IDR10_Pos (10U) -#define GPIO_IDR_IDR10_Msk (0x1U << GPIO_IDR_IDR10_Pos) /*!< 0x00000400 */ -#define GPIO_IDR_IDR10 GPIO_IDR_IDR10_Msk /*!< Port input data, bit 10 */ -#define GPIO_IDR_IDR11_Pos (11U) -#define GPIO_IDR_IDR11_Msk (0x1U << GPIO_IDR_IDR11_Pos) /*!< 0x00000800 */ -#define GPIO_IDR_IDR11 GPIO_IDR_IDR11_Msk /*!< Port input data, bit 11 */ -#define GPIO_IDR_IDR12_Pos (12U) -#define GPIO_IDR_IDR12_Msk (0x1U << GPIO_IDR_IDR12_Pos) /*!< 0x00001000 */ -#define GPIO_IDR_IDR12 GPIO_IDR_IDR12_Msk /*!< Port input data, bit 12 */ -#define GPIO_IDR_IDR13_Pos (13U) -#define GPIO_IDR_IDR13_Msk (0x1U << GPIO_IDR_IDR13_Pos) /*!< 0x00002000 */ -#define GPIO_IDR_IDR13 GPIO_IDR_IDR13_Msk /*!< Port input data, bit 13 */ -#define GPIO_IDR_IDR14_Pos (14U) -#define GPIO_IDR_IDR14_Msk (0x1U << GPIO_IDR_IDR14_Pos) /*!< 0x00004000 */ -#define GPIO_IDR_IDR14 GPIO_IDR_IDR14_Msk /*!< Port input data, bit 14 */ -#define GPIO_IDR_IDR15_Pos (15U) -#define GPIO_IDR_IDR15_Msk (0x1U << GPIO_IDR_IDR15_Pos) /*!< 0x00008000 */ -#define GPIO_IDR_IDR15 GPIO_IDR_IDR15_Msk /*!< Port input data, bit 15 */ - -/******************* Bit definition for GPIO_ODR register *******************/ -#define GPIO_ODR_ODR0_Pos (0U) -#define GPIO_ODR_ODR0_Msk (0x1U << GPIO_ODR_ODR0_Pos) /*!< 0x00000001 */ -#define GPIO_ODR_ODR0 GPIO_ODR_ODR0_Msk /*!< Port output data, bit 0 */ -#define GPIO_ODR_ODR1_Pos (1U) -#define GPIO_ODR_ODR1_Msk (0x1U << GPIO_ODR_ODR1_Pos) /*!< 0x00000002 */ -#define GPIO_ODR_ODR1 GPIO_ODR_ODR1_Msk /*!< Port output data, bit 1 */ -#define GPIO_ODR_ODR2_Pos (2U) -#define GPIO_ODR_ODR2_Msk (0x1U << GPIO_ODR_ODR2_Pos) /*!< 0x00000004 */ -#define GPIO_ODR_ODR2 GPIO_ODR_ODR2_Msk /*!< Port output data, bit 2 */ -#define GPIO_ODR_ODR3_Pos (3U) -#define GPIO_ODR_ODR3_Msk (0x1U << GPIO_ODR_ODR3_Pos) /*!< 0x00000008 */ -#define GPIO_ODR_ODR3 GPIO_ODR_ODR3_Msk /*!< Port output data, bit 3 */ -#define GPIO_ODR_ODR4_Pos (4U) -#define GPIO_ODR_ODR4_Msk (0x1U << GPIO_ODR_ODR4_Pos) /*!< 0x00000010 */ -#define GPIO_ODR_ODR4 GPIO_ODR_ODR4_Msk /*!< Port output data, bit 4 */ -#define GPIO_ODR_ODR5_Pos (5U) -#define GPIO_ODR_ODR5_Msk (0x1U << GPIO_ODR_ODR5_Pos) /*!< 0x00000020 */ -#define GPIO_ODR_ODR5 GPIO_ODR_ODR5_Msk /*!< Port output data, bit 5 */ -#define GPIO_ODR_ODR6_Pos (6U) -#define GPIO_ODR_ODR6_Msk (0x1U << GPIO_ODR_ODR6_Pos) /*!< 0x00000040 */ -#define GPIO_ODR_ODR6 GPIO_ODR_ODR6_Msk /*!< Port output data, bit 6 */ -#define GPIO_ODR_ODR7_Pos (7U) -#define GPIO_ODR_ODR7_Msk (0x1U << GPIO_ODR_ODR7_Pos) /*!< 0x00000080 */ -#define GPIO_ODR_ODR7 GPIO_ODR_ODR7_Msk /*!< Port output data, bit 7 */ -#define GPIO_ODR_ODR8_Pos (8U) -#define GPIO_ODR_ODR8_Msk (0x1U << GPIO_ODR_ODR8_Pos) /*!< 0x00000100 */ -#define GPIO_ODR_ODR8 GPIO_ODR_ODR8_Msk /*!< Port output data, bit 8 */ -#define GPIO_ODR_ODR9_Pos (9U) -#define GPIO_ODR_ODR9_Msk (0x1U << GPIO_ODR_ODR9_Pos) /*!< 0x00000200 */ -#define GPIO_ODR_ODR9 GPIO_ODR_ODR9_Msk /*!< Port output data, bit 9 */ -#define GPIO_ODR_ODR10_Pos (10U) -#define GPIO_ODR_ODR10_Msk (0x1U << GPIO_ODR_ODR10_Pos) /*!< 0x00000400 */ -#define GPIO_ODR_ODR10 GPIO_ODR_ODR10_Msk /*!< Port output data, bit 10 */ -#define GPIO_ODR_ODR11_Pos (11U) -#define GPIO_ODR_ODR11_Msk (0x1U << GPIO_ODR_ODR11_Pos) /*!< 0x00000800 */ -#define GPIO_ODR_ODR11 GPIO_ODR_ODR11_Msk /*!< Port output data, bit 11 */ -#define GPIO_ODR_ODR12_Pos (12U) -#define GPIO_ODR_ODR12_Msk (0x1U << GPIO_ODR_ODR12_Pos) /*!< 0x00001000 */ -#define GPIO_ODR_ODR12 GPIO_ODR_ODR12_Msk /*!< Port output data, bit 12 */ -#define GPIO_ODR_ODR13_Pos (13U) -#define GPIO_ODR_ODR13_Msk (0x1U << GPIO_ODR_ODR13_Pos) /*!< 0x00002000 */ -#define GPIO_ODR_ODR13 GPIO_ODR_ODR13_Msk /*!< Port output data, bit 13 */ -#define GPIO_ODR_ODR14_Pos (14U) -#define GPIO_ODR_ODR14_Msk (0x1U << GPIO_ODR_ODR14_Pos) /*!< 0x00004000 */ -#define GPIO_ODR_ODR14 GPIO_ODR_ODR14_Msk /*!< Port output data, bit 14 */ -#define GPIO_ODR_ODR15_Pos (15U) -#define GPIO_ODR_ODR15_Msk (0x1U << GPIO_ODR_ODR15_Pos) /*!< 0x00008000 */ -#define GPIO_ODR_ODR15 GPIO_ODR_ODR15_Msk /*!< Port output data, bit 15 */ - -/****************** Bit definition for GPIO_BSRR register *******************/ -#define GPIO_BSRR_BS0_Pos (0U) -#define GPIO_BSRR_BS0_Msk (0x1U << GPIO_BSRR_BS0_Pos) /*!< 0x00000001 */ -#define GPIO_BSRR_BS0 GPIO_BSRR_BS0_Msk /*!< Port x Set bit 0 */ -#define GPIO_BSRR_BS1_Pos (1U) -#define GPIO_BSRR_BS1_Msk (0x1U << GPIO_BSRR_BS1_Pos) /*!< 0x00000002 */ -#define GPIO_BSRR_BS1 GPIO_BSRR_BS1_Msk /*!< Port x Set bit 1 */ -#define GPIO_BSRR_BS2_Pos (2U) -#define GPIO_BSRR_BS2_Msk (0x1U << GPIO_BSRR_BS2_Pos) /*!< 0x00000004 */ -#define GPIO_BSRR_BS2 GPIO_BSRR_BS2_Msk /*!< Port x Set bit 2 */ -#define GPIO_BSRR_BS3_Pos (3U) -#define GPIO_BSRR_BS3_Msk (0x1U << GPIO_BSRR_BS3_Pos) /*!< 0x00000008 */ -#define GPIO_BSRR_BS3 GPIO_BSRR_BS3_Msk /*!< Port x Set bit 3 */ -#define GPIO_BSRR_BS4_Pos (4U) -#define GPIO_BSRR_BS4_Msk (0x1U << GPIO_BSRR_BS4_Pos) /*!< 0x00000010 */ -#define GPIO_BSRR_BS4 GPIO_BSRR_BS4_Msk /*!< Port x Set bit 4 */ -#define GPIO_BSRR_BS5_Pos (5U) -#define GPIO_BSRR_BS5_Msk (0x1U << GPIO_BSRR_BS5_Pos) /*!< 0x00000020 */ -#define GPIO_BSRR_BS5 GPIO_BSRR_BS5_Msk /*!< Port x Set bit 5 */ -#define GPIO_BSRR_BS6_Pos (6U) -#define GPIO_BSRR_BS6_Msk (0x1U << GPIO_BSRR_BS6_Pos) /*!< 0x00000040 */ -#define GPIO_BSRR_BS6 GPIO_BSRR_BS6_Msk /*!< Port x Set bit 6 */ -#define GPIO_BSRR_BS7_Pos (7U) -#define GPIO_BSRR_BS7_Msk (0x1U << GPIO_BSRR_BS7_Pos) /*!< 0x00000080 */ -#define GPIO_BSRR_BS7 GPIO_BSRR_BS7_Msk /*!< Port x Set bit 7 */ -#define GPIO_BSRR_BS8_Pos (8U) -#define GPIO_BSRR_BS8_Msk (0x1U << GPIO_BSRR_BS8_Pos) /*!< 0x00000100 */ -#define GPIO_BSRR_BS8 GPIO_BSRR_BS8_Msk /*!< Port x Set bit 8 */ -#define GPIO_BSRR_BS9_Pos (9U) -#define GPIO_BSRR_BS9_Msk (0x1U << GPIO_BSRR_BS9_Pos) /*!< 0x00000200 */ -#define GPIO_BSRR_BS9 GPIO_BSRR_BS9_Msk /*!< Port x Set bit 9 */ -#define GPIO_BSRR_BS10_Pos (10U) -#define GPIO_BSRR_BS10_Msk (0x1U << GPIO_BSRR_BS10_Pos) /*!< 0x00000400 */ -#define GPIO_BSRR_BS10 GPIO_BSRR_BS10_Msk /*!< Port x Set bit 10 */ -#define GPIO_BSRR_BS11_Pos (11U) -#define GPIO_BSRR_BS11_Msk (0x1U << GPIO_BSRR_BS11_Pos) /*!< 0x00000800 */ -#define GPIO_BSRR_BS11 GPIO_BSRR_BS11_Msk /*!< Port x Set bit 11 */ -#define GPIO_BSRR_BS12_Pos (12U) -#define GPIO_BSRR_BS12_Msk (0x1U << GPIO_BSRR_BS12_Pos) /*!< 0x00001000 */ -#define GPIO_BSRR_BS12 GPIO_BSRR_BS12_Msk /*!< Port x Set bit 12 */ -#define GPIO_BSRR_BS13_Pos (13U) -#define GPIO_BSRR_BS13_Msk (0x1U << GPIO_BSRR_BS13_Pos) /*!< 0x00002000 */ -#define GPIO_BSRR_BS13 GPIO_BSRR_BS13_Msk /*!< Port x Set bit 13 */ -#define GPIO_BSRR_BS14_Pos (14U) -#define GPIO_BSRR_BS14_Msk (0x1U << GPIO_BSRR_BS14_Pos) /*!< 0x00004000 */ -#define GPIO_BSRR_BS14 GPIO_BSRR_BS14_Msk /*!< Port x Set bit 14 */ -#define GPIO_BSRR_BS15_Pos (15U) -#define GPIO_BSRR_BS15_Msk (0x1U << GPIO_BSRR_BS15_Pos) /*!< 0x00008000 */ -#define GPIO_BSRR_BS15 GPIO_BSRR_BS15_Msk /*!< Port x Set bit 15 */ - -#define GPIO_BSRR_BR0_Pos (16U) -#define GPIO_BSRR_BR0_Msk (0x1U << GPIO_BSRR_BR0_Pos) /*!< 0x00010000 */ -#define GPIO_BSRR_BR0 GPIO_BSRR_BR0_Msk /*!< Port x Reset bit 0 */ -#define GPIO_BSRR_BR1_Pos (17U) -#define GPIO_BSRR_BR1_Msk (0x1U << GPIO_BSRR_BR1_Pos) /*!< 0x00020000 */ -#define GPIO_BSRR_BR1 GPIO_BSRR_BR1_Msk /*!< Port x Reset bit 1 */ -#define GPIO_BSRR_BR2_Pos (18U) -#define GPIO_BSRR_BR2_Msk (0x1U << GPIO_BSRR_BR2_Pos) /*!< 0x00040000 */ -#define GPIO_BSRR_BR2 GPIO_BSRR_BR2_Msk /*!< Port x Reset bit 2 */ -#define GPIO_BSRR_BR3_Pos (19U) -#define GPIO_BSRR_BR3_Msk (0x1U << GPIO_BSRR_BR3_Pos) /*!< 0x00080000 */ -#define GPIO_BSRR_BR3 GPIO_BSRR_BR3_Msk /*!< Port x Reset bit 3 */ -#define GPIO_BSRR_BR4_Pos (20U) -#define GPIO_BSRR_BR4_Msk (0x1U << GPIO_BSRR_BR4_Pos) /*!< 0x00100000 */ -#define GPIO_BSRR_BR4 GPIO_BSRR_BR4_Msk /*!< Port x Reset bit 4 */ -#define GPIO_BSRR_BR5_Pos (21U) -#define GPIO_BSRR_BR5_Msk (0x1U << GPIO_BSRR_BR5_Pos) /*!< 0x00200000 */ -#define GPIO_BSRR_BR5 GPIO_BSRR_BR5_Msk /*!< Port x Reset bit 5 */ -#define GPIO_BSRR_BR6_Pos (22U) -#define GPIO_BSRR_BR6_Msk (0x1U << GPIO_BSRR_BR6_Pos) /*!< 0x00400000 */ -#define GPIO_BSRR_BR6 GPIO_BSRR_BR6_Msk /*!< Port x Reset bit 6 */ -#define GPIO_BSRR_BR7_Pos (23U) -#define GPIO_BSRR_BR7_Msk (0x1U << GPIO_BSRR_BR7_Pos) /*!< 0x00800000 */ -#define GPIO_BSRR_BR7 GPIO_BSRR_BR7_Msk /*!< Port x Reset bit 7 */ -#define GPIO_BSRR_BR8_Pos (24U) -#define GPIO_BSRR_BR8_Msk (0x1U << GPIO_BSRR_BR8_Pos) /*!< 0x01000000 */ -#define GPIO_BSRR_BR8 GPIO_BSRR_BR8_Msk /*!< Port x Reset bit 8 */ -#define GPIO_BSRR_BR9_Pos (25U) -#define GPIO_BSRR_BR9_Msk (0x1U << GPIO_BSRR_BR9_Pos) /*!< 0x02000000 */ -#define GPIO_BSRR_BR9 GPIO_BSRR_BR9_Msk /*!< Port x Reset bit 9 */ -#define GPIO_BSRR_BR10_Pos (26U) -#define GPIO_BSRR_BR10_Msk (0x1U << GPIO_BSRR_BR10_Pos) /*!< 0x04000000 */ -#define GPIO_BSRR_BR10 GPIO_BSRR_BR10_Msk /*!< Port x Reset bit 10 */ -#define GPIO_BSRR_BR11_Pos (27U) -#define GPIO_BSRR_BR11_Msk (0x1U << GPIO_BSRR_BR11_Pos) /*!< 0x08000000 */ -#define GPIO_BSRR_BR11 GPIO_BSRR_BR11_Msk /*!< Port x Reset bit 11 */ -#define GPIO_BSRR_BR12_Pos (28U) -#define GPIO_BSRR_BR12_Msk (0x1U << GPIO_BSRR_BR12_Pos) /*!< 0x10000000 */ -#define GPIO_BSRR_BR12 GPIO_BSRR_BR12_Msk /*!< Port x Reset bit 12 */ -#define GPIO_BSRR_BR13_Pos (29U) -#define GPIO_BSRR_BR13_Msk (0x1U << GPIO_BSRR_BR13_Pos) /*!< 0x20000000 */ -#define GPIO_BSRR_BR13 GPIO_BSRR_BR13_Msk /*!< Port x Reset bit 13 */ -#define GPIO_BSRR_BR14_Pos (30U) -#define GPIO_BSRR_BR14_Msk (0x1U << GPIO_BSRR_BR14_Pos) /*!< 0x40000000 */ -#define GPIO_BSRR_BR14 GPIO_BSRR_BR14_Msk /*!< Port x Reset bit 14 */ -#define GPIO_BSRR_BR15_Pos (31U) -#define GPIO_BSRR_BR15_Msk (0x1U << GPIO_BSRR_BR15_Pos) /*!< 0x80000000 */ -#define GPIO_BSRR_BR15 GPIO_BSRR_BR15_Msk /*!< Port x Reset bit 15 */ - -/******************* Bit definition for GPIO_BRR register *******************/ -#define GPIO_BRR_BR0_Pos (0U) -#define GPIO_BRR_BR0_Msk (0x1U << GPIO_BRR_BR0_Pos) /*!< 0x00000001 */ -#define GPIO_BRR_BR0 GPIO_BRR_BR0_Msk /*!< Port x Reset bit 0 */ -#define GPIO_BRR_BR1_Pos (1U) -#define GPIO_BRR_BR1_Msk (0x1U << GPIO_BRR_BR1_Pos) /*!< 0x00000002 */ -#define GPIO_BRR_BR1 GPIO_BRR_BR1_Msk /*!< Port x Reset bit 1 */ -#define GPIO_BRR_BR2_Pos (2U) -#define GPIO_BRR_BR2_Msk (0x1U << GPIO_BRR_BR2_Pos) /*!< 0x00000004 */ -#define GPIO_BRR_BR2 GPIO_BRR_BR2_Msk /*!< Port x Reset bit 2 */ -#define GPIO_BRR_BR3_Pos (3U) -#define GPIO_BRR_BR3_Msk (0x1U << GPIO_BRR_BR3_Pos) /*!< 0x00000008 */ -#define GPIO_BRR_BR3 GPIO_BRR_BR3_Msk /*!< Port x Reset bit 3 */ -#define GPIO_BRR_BR4_Pos (4U) -#define GPIO_BRR_BR4_Msk (0x1U << GPIO_BRR_BR4_Pos) /*!< 0x00000010 */ -#define GPIO_BRR_BR4 GPIO_BRR_BR4_Msk /*!< Port x Reset bit 4 */ -#define GPIO_BRR_BR5_Pos (5U) -#define GPIO_BRR_BR5_Msk (0x1U << GPIO_BRR_BR5_Pos) /*!< 0x00000020 */ -#define GPIO_BRR_BR5 GPIO_BRR_BR5_Msk /*!< Port x Reset bit 5 */ -#define GPIO_BRR_BR6_Pos (6U) -#define GPIO_BRR_BR6_Msk (0x1U << GPIO_BRR_BR6_Pos) /*!< 0x00000040 */ -#define GPIO_BRR_BR6 GPIO_BRR_BR6_Msk /*!< Port x Reset bit 6 */ -#define GPIO_BRR_BR7_Pos (7U) -#define GPIO_BRR_BR7_Msk (0x1U << GPIO_BRR_BR7_Pos) /*!< 0x00000080 */ -#define GPIO_BRR_BR7 GPIO_BRR_BR7_Msk /*!< Port x Reset bit 7 */ -#define GPIO_BRR_BR8_Pos (8U) -#define GPIO_BRR_BR8_Msk (0x1U << GPIO_BRR_BR8_Pos) /*!< 0x00000100 */ -#define GPIO_BRR_BR8 GPIO_BRR_BR8_Msk /*!< Port x Reset bit 8 */ -#define GPIO_BRR_BR9_Pos (9U) -#define GPIO_BRR_BR9_Msk (0x1U << GPIO_BRR_BR9_Pos) /*!< 0x00000200 */ -#define GPIO_BRR_BR9 GPIO_BRR_BR9_Msk /*!< Port x Reset bit 9 */ -#define GPIO_BRR_BR10_Pos (10U) -#define GPIO_BRR_BR10_Msk (0x1U << GPIO_BRR_BR10_Pos) /*!< 0x00000400 */ -#define GPIO_BRR_BR10 GPIO_BRR_BR10_Msk /*!< Port x Reset bit 10 */ -#define GPIO_BRR_BR11_Pos (11U) -#define GPIO_BRR_BR11_Msk (0x1U << GPIO_BRR_BR11_Pos) /*!< 0x00000800 */ -#define GPIO_BRR_BR11 GPIO_BRR_BR11_Msk /*!< Port x Reset bit 11 */ -#define GPIO_BRR_BR12_Pos (12U) -#define GPIO_BRR_BR12_Msk (0x1U << GPIO_BRR_BR12_Pos) /*!< 0x00001000 */ -#define GPIO_BRR_BR12 GPIO_BRR_BR12_Msk /*!< Port x Reset bit 12 */ -#define GPIO_BRR_BR13_Pos (13U) -#define GPIO_BRR_BR13_Msk (0x1U << GPIO_BRR_BR13_Pos) /*!< 0x00002000 */ -#define GPIO_BRR_BR13 GPIO_BRR_BR13_Msk /*!< Port x Reset bit 13 */ -#define GPIO_BRR_BR14_Pos (14U) -#define GPIO_BRR_BR14_Msk (0x1U << GPIO_BRR_BR14_Pos) /*!< 0x00004000 */ -#define GPIO_BRR_BR14 GPIO_BRR_BR14_Msk /*!< Port x Reset bit 14 */ -#define GPIO_BRR_BR15_Pos (15U) -#define GPIO_BRR_BR15_Msk (0x1U << GPIO_BRR_BR15_Pos) /*!< 0x00008000 */ -#define GPIO_BRR_BR15 GPIO_BRR_BR15_Msk /*!< Port x Reset bit 15 */ - -/****************** Bit definition for GPIO_LCKR register *******************/ -#define GPIO_LCKR_LCK0_Pos (0U) -#define GPIO_LCKR_LCK0_Msk (0x1U << GPIO_LCKR_LCK0_Pos) /*!< 0x00000001 */ -#define GPIO_LCKR_LCK0 GPIO_LCKR_LCK0_Msk /*!< Port x Lock bit 0 */ -#define GPIO_LCKR_LCK1_Pos (1U) -#define GPIO_LCKR_LCK1_Msk (0x1U << GPIO_LCKR_LCK1_Pos) /*!< 0x00000002 */ -#define GPIO_LCKR_LCK1 GPIO_LCKR_LCK1_Msk /*!< Port x Lock bit 1 */ -#define GPIO_LCKR_LCK2_Pos (2U) -#define GPIO_LCKR_LCK2_Msk (0x1U << GPIO_LCKR_LCK2_Pos) /*!< 0x00000004 */ -#define GPIO_LCKR_LCK2 GPIO_LCKR_LCK2_Msk /*!< Port x Lock bit 2 */ -#define GPIO_LCKR_LCK3_Pos (3U) -#define GPIO_LCKR_LCK3_Msk (0x1U << GPIO_LCKR_LCK3_Pos) /*!< 0x00000008 */ -#define GPIO_LCKR_LCK3 GPIO_LCKR_LCK3_Msk /*!< Port x Lock bit 3 */ -#define GPIO_LCKR_LCK4_Pos (4U) -#define GPIO_LCKR_LCK4_Msk (0x1U << GPIO_LCKR_LCK4_Pos) /*!< 0x00000010 */ -#define GPIO_LCKR_LCK4 GPIO_LCKR_LCK4_Msk /*!< Port x Lock bit 4 */ -#define GPIO_LCKR_LCK5_Pos (5U) -#define GPIO_LCKR_LCK5_Msk (0x1U << GPIO_LCKR_LCK5_Pos) /*!< 0x00000020 */ -#define GPIO_LCKR_LCK5 GPIO_LCKR_LCK5_Msk /*!< Port x Lock bit 5 */ -#define GPIO_LCKR_LCK6_Pos (6U) -#define GPIO_LCKR_LCK6_Msk (0x1U << GPIO_LCKR_LCK6_Pos) /*!< 0x00000040 */ -#define GPIO_LCKR_LCK6 GPIO_LCKR_LCK6_Msk /*!< Port x Lock bit 6 */ -#define GPIO_LCKR_LCK7_Pos (7U) -#define GPIO_LCKR_LCK7_Msk (0x1U << GPIO_LCKR_LCK7_Pos) /*!< 0x00000080 */ -#define GPIO_LCKR_LCK7 GPIO_LCKR_LCK7_Msk /*!< Port x Lock bit 7 */ -#define GPIO_LCKR_LCK8_Pos (8U) -#define GPIO_LCKR_LCK8_Msk (0x1U << GPIO_LCKR_LCK8_Pos) /*!< 0x00000100 */ -#define GPIO_LCKR_LCK8 GPIO_LCKR_LCK8_Msk /*!< Port x Lock bit 8 */ -#define GPIO_LCKR_LCK9_Pos (9U) -#define GPIO_LCKR_LCK9_Msk (0x1U << GPIO_LCKR_LCK9_Pos) /*!< 0x00000200 */ -#define GPIO_LCKR_LCK9 GPIO_LCKR_LCK9_Msk /*!< Port x Lock bit 9 */ -#define GPIO_LCKR_LCK10_Pos (10U) -#define GPIO_LCKR_LCK10_Msk (0x1U << GPIO_LCKR_LCK10_Pos) /*!< 0x00000400 */ -#define GPIO_LCKR_LCK10 GPIO_LCKR_LCK10_Msk /*!< Port x Lock bit 10 */ -#define GPIO_LCKR_LCK11_Pos (11U) -#define GPIO_LCKR_LCK11_Msk (0x1U << GPIO_LCKR_LCK11_Pos) /*!< 0x00000800 */ -#define GPIO_LCKR_LCK11 GPIO_LCKR_LCK11_Msk /*!< Port x Lock bit 11 */ -#define GPIO_LCKR_LCK12_Pos (12U) -#define GPIO_LCKR_LCK12_Msk (0x1U << GPIO_LCKR_LCK12_Pos) /*!< 0x00001000 */ -#define GPIO_LCKR_LCK12 GPIO_LCKR_LCK12_Msk /*!< Port x Lock bit 12 */ -#define GPIO_LCKR_LCK13_Pos (13U) -#define GPIO_LCKR_LCK13_Msk (0x1U << GPIO_LCKR_LCK13_Pos) /*!< 0x00002000 */ -#define GPIO_LCKR_LCK13 GPIO_LCKR_LCK13_Msk /*!< Port x Lock bit 13 */ -#define GPIO_LCKR_LCK14_Pos (14U) -#define GPIO_LCKR_LCK14_Msk (0x1U << GPIO_LCKR_LCK14_Pos) /*!< 0x00004000 */ -#define GPIO_LCKR_LCK14 GPIO_LCKR_LCK14_Msk /*!< Port x Lock bit 14 */ -#define GPIO_LCKR_LCK15_Pos (15U) -#define GPIO_LCKR_LCK15_Msk (0x1U << GPIO_LCKR_LCK15_Pos) /*!< 0x00008000 */ -#define GPIO_LCKR_LCK15 GPIO_LCKR_LCK15_Msk /*!< Port x Lock bit 15 */ -#define GPIO_LCKR_LCKK_Pos (16U) -#define GPIO_LCKR_LCKK_Msk (0x1U << GPIO_LCKR_LCKK_Pos) /*!< 0x00010000 */ -#define GPIO_LCKR_LCKK GPIO_LCKR_LCKK_Msk /*!< Lock key */ - -/*----------------------------------------------------------------------------*/ - -/****************** Bit definition for AFIO_EVCR register *******************/ -#define AFIO_EVCR_PIN_Pos (0U) -#define AFIO_EVCR_PIN_Msk (0xFU << AFIO_EVCR_PIN_Pos) /*!< 0x0000000F */ -#define AFIO_EVCR_PIN AFIO_EVCR_PIN_Msk /*!< PIN[3:0] bits (Pin selection) */ -#define AFIO_EVCR_PIN_0 (0x1U << AFIO_EVCR_PIN_Pos) /*!< 0x00000001 */ -#define AFIO_EVCR_PIN_1 (0x2U << AFIO_EVCR_PIN_Pos) /*!< 0x00000002 */ -#define AFIO_EVCR_PIN_2 (0x4U << AFIO_EVCR_PIN_Pos) /*!< 0x00000004 */ -#define AFIO_EVCR_PIN_3 (0x8U << AFIO_EVCR_PIN_Pos) /*!< 0x00000008 */ - -/*!< PIN configuration */ -#define AFIO_EVCR_PIN_PX0 0x00000000U /*!< Pin 0 selected */ -#define AFIO_EVCR_PIN_PX1_Pos (0U) -#define AFIO_EVCR_PIN_PX1_Msk (0x1U << AFIO_EVCR_PIN_PX1_Pos) /*!< 0x00000001 */ -#define AFIO_EVCR_PIN_PX1 AFIO_EVCR_PIN_PX1_Msk /*!< Pin 1 selected */ -#define AFIO_EVCR_PIN_PX2_Pos (1U) -#define AFIO_EVCR_PIN_PX2_Msk (0x1U << AFIO_EVCR_PIN_PX2_Pos) /*!< 0x00000002 */ -#define AFIO_EVCR_PIN_PX2 AFIO_EVCR_PIN_PX2_Msk /*!< Pin 2 selected */ -#define AFIO_EVCR_PIN_PX3_Pos (0U) -#define AFIO_EVCR_PIN_PX3_Msk (0x3U << AFIO_EVCR_PIN_PX3_Pos) /*!< 0x00000003 */ -#define AFIO_EVCR_PIN_PX3 AFIO_EVCR_PIN_PX3_Msk /*!< Pin 3 selected */ -#define AFIO_EVCR_PIN_PX4_Pos (2U) -#define AFIO_EVCR_PIN_PX4_Msk (0x1U << AFIO_EVCR_PIN_PX4_Pos) /*!< 0x00000004 */ -#define AFIO_EVCR_PIN_PX4 AFIO_EVCR_PIN_PX4_Msk /*!< Pin 4 selected */ -#define AFIO_EVCR_PIN_PX5_Pos (0U) -#define AFIO_EVCR_PIN_PX5_Msk (0x5U << AFIO_EVCR_PIN_PX5_Pos) /*!< 0x00000005 */ -#define AFIO_EVCR_PIN_PX5 AFIO_EVCR_PIN_PX5_Msk /*!< Pin 5 selected */ -#define AFIO_EVCR_PIN_PX6_Pos (1U) -#define AFIO_EVCR_PIN_PX6_Msk (0x3U << AFIO_EVCR_PIN_PX6_Pos) /*!< 0x00000006 */ -#define AFIO_EVCR_PIN_PX6 AFIO_EVCR_PIN_PX6_Msk /*!< Pin 6 selected */ -#define AFIO_EVCR_PIN_PX7_Pos (0U) -#define AFIO_EVCR_PIN_PX7_Msk (0x7U << AFIO_EVCR_PIN_PX7_Pos) /*!< 0x00000007 */ -#define AFIO_EVCR_PIN_PX7 AFIO_EVCR_PIN_PX7_Msk /*!< Pin 7 selected */ -#define AFIO_EVCR_PIN_PX8_Pos (3U) -#define AFIO_EVCR_PIN_PX8_Msk (0x1U << AFIO_EVCR_PIN_PX8_Pos) /*!< 0x00000008 */ -#define AFIO_EVCR_PIN_PX8 AFIO_EVCR_PIN_PX8_Msk /*!< Pin 8 selected */ -#define AFIO_EVCR_PIN_PX9_Pos (0U) -#define AFIO_EVCR_PIN_PX9_Msk (0x9U << AFIO_EVCR_PIN_PX9_Pos) /*!< 0x00000009 */ -#define AFIO_EVCR_PIN_PX9 AFIO_EVCR_PIN_PX9_Msk /*!< Pin 9 selected */ -#define AFIO_EVCR_PIN_PX10_Pos (1U) -#define AFIO_EVCR_PIN_PX10_Msk (0x5U << AFIO_EVCR_PIN_PX10_Pos) /*!< 0x0000000A */ -#define AFIO_EVCR_PIN_PX10 AFIO_EVCR_PIN_PX10_Msk /*!< Pin 10 selected */ -#define AFIO_EVCR_PIN_PX11_Pos (0U) -#define AFIO_EVCR_PIN_PX11_Msk (0xBU << AFIO_EVCR_PIN_PX11_Pos) /*!< 0x0000000B */ -#define AFIO_EVCR_PIN_PX11 AFIO_EVCR_PIN_PX11_Msk /*!< Pin 11 selected */ -#define AFIO_EVCR_PIN_PX12_Pos (2U) -#define AFIO_EVCR_PIN_PX12_Msk (0x3U << AFIO_EVCR_PIN_PX12_Pos) /*!< 0x0000000C */ -#define AFIO_EVCR_PIN_PX12 AFIO_EVCR_PIN_PX12_Msk /*!< Pin 12 selected */ -#define AFIO_EVCR_PIN_PX13_Pos (0U) -#define AFIO_EVCR_PIN_PX13_Msk (0xDU << AFIO_EVCR_PIN_PX13_Pos) /*!< 0x0000000D */ -#define AFIO_EVCR_PIN_PX13 AFIO_EVCR_PIN_PX13_Msk /*!< Pin 13 selected */ -#define AFIO_EVCR_PIN_PX14_Pos (1U) -#define AFIO_EVCR_PIN_PX14_Msk (0x7U << AFIO_EVCR_PIN_PX14_Pos) /*!< 0x0000000E */ -#define AFIO_EVCR_PIN_PX14 AFIO_EVCR_PIN_PX14_Msk /*!< Pin 14 selected */ -#define AFIO_EVCR_PIN_PX15_Pos (0U) -#define AFIO_EVCR_PIN_PX15_Msk (0xFU << AFIO_EVCR_PIN_PX15_Pos) /*!< 0x0000000F */ -#define AFIO_EVCR_PIN_PX15 AFIO_EVCR_PIN_PX15_Msk /*!< Pin 15 selected */ - -#define AFIO_EVCR_PORT_Pos (4U) -#define AFIO_EVCR_PORT_Msk (0x7U << AFIO_EVCR_PORT_Pos) /*!< 0x00000070 */ -#define AFIO_EVCR_PORT AFIO_EVCR_PORT_Msk /*!< PORT[2:0] bits (Port selection) */ -#define AFIO_EVCR_PORT_0 (0x1U << AFIO_EVCR_PORT_Pos) /*!< 0x00000010 */ -#define AFIO_EVCR_PORT_1 (0x2U << AFIO_EVCR_PORT_Pos) /*!< 0x00000020 */ -#define AFIO_EVCR_PORT_2 (0x4U << AFIO_EVCR_PORT_Pos) /*!< 0x00000040 */ - -/*!< PORT configuration */ -#define AFIO_EVCR_PORT_PA 0x00000000 /*!< Port A selected */ -#define AFIO_EVCR_PORT_PB_Pos (4U) -#define AFIO_EVCR_PORT_PB_Msk (0x1U << AFIO_EVCR_PORT_PB_Pos) /*!< 0x00000010 */ -#define AFIO_EVCR_PORT_PB AFIO_EVCR_PORT_PB_Msk /*!< Port B selected */ -#define AFIO_EVCR_PORT_PC_Pos (5U) -#define AFIO_EVCR_PORT_PC_Msk (0x1U << AFIO_EVCR_PORT_PC_Pos) /*!< 0x00000020 */ -#define AFIO_EVCR_PORT_PC AFIO_EVCR_PORT_PC_Msk /*!< Port C selected */ -#define AFIO_EVCR_PORT_PD_Pos (4U) -#define AFIO_EVCR_PORT_PD_Msk (0x3U << AFIO_EVCR_PORT_PD_Pos) /*!< 0x00000030 */ -#define AFIO_EVCR_PORT_PD AFIO_EVCR_PORT_PD_Msk /*!< Port D selected */ -#define AFIO_EVCR_PORT_PE_Pos (6U) -#define AFIO_EVCR_PORT_PE_Msk (0x1U << AFIO_EVCR_PORT_PE_Pos) /*!< 0x00000040 */ -#define AFIO_EVCR_PORT_PE AFIO_EVCR_PORT_PE_Msk /*!< Port E selected */ - -#define AFIO_EVCR_EVOE_Pos (7U) -#define AFIO_EVCR_EVOE_Msk (0x1U << AFIO_EVCR_EVOE_Pos) /*!< 0x00000080 */ -#define AFIO_EVCR_EVOE AFIO_EVCR_EVOE_Msk /*!< Event Output Enable */ - -/****************** Bit definition for AFIO_MAPR register *******************/ -#define AFIO_MAPR_SPI1_REMAP_Pos (0U) -#define AFIO_MAPR_SPI1_REMAP_Msk (0x1U << AFIO_MAPR_SPI1_REMAP_Pos) /*!< 0x00000001 */ -#define AFIO_MAPR_SPI1_REMAP AFIO_MAPR_SPI1_REMAP_Msk /*!< SPI1 remapping */ -#define AFIO_MAPR_I2C1_REMAP_Pos (1U) -#define AFIO_MAPR_I2C1_REMAP_Msk (0x1U << AFIO_MAPR_I2C1_REMAP_Pos) /*!< 0x00000002 */ -#define AFIO_MAPR_I2C1_REMAP AFIO_MAPR_I2C1_REMAP_Msk /*!< I2C1 remapping */ -#define AFIO_MAPR_USART1_REMAP_Pos (2U) -#define AFIO_MAPR_USART1_REMAP_Msk (0x1U << AFIO_MAPR_USART1_REMAP_Pos) /*!< 0x00000004 */ -#define AFIO_MAPR_USART1_REMAP AFIO_MAPR_USART1_REMAP_Msk /*!< USART1 remapping */ -#define AFIO_MAPR_USART2_REMAP_Pos (3U) -#define AFIO_MAPR_USART2_REMAP_Msk (0x1U << AFIO_MAPR_USART2_REMAP_Pos) /*!< 0x00000008 */ -#define AFIO_MAPR_USART2_REMAP AFIO_MAPR_USART2_REMAP_Msk /*!< USART2 remapping */ - -#define AFIO_MAPR_USART3_REMAP_Pos (4U) -#define AFIO_MAPR_USART3_REMAP_Msk (0x3U << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000030 */ -#define AFIO_MAPR_USART3_REMAP AFIO_MAPR_USART3_REMAP_Msk /*!< USART3_REMAP[1:0] bits (USART3 remapping) */ -#define AFIO_MAPR_USART3_REMAP_0 (0x1U << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000010 */ -#define AFIO_MAPR_USART3_REMAP_1 (0x2U << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000020 */ - -/* USART3_REMAP configuration */ -#define AFIO_MAPR_USART3_REMAP_NOREMAP 0x00000000U /*!< No remap (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14) */ -#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Pos (4U) -#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Msk (0x1U << AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Pos) /*!< 0x00000010 */ -#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Msk /*!< Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14) */ -#define AFIO_MAPR_USART3_REMAP_FULLREMAP_Pos (4U) -#define AFIO_MAPR_USART3_REMAP_FULLREMAP_Msk (0x3U << AFIO_MAPR_USART3_REMAP_FULLREMAP_Pos) /*!< 0x00000030 */ -#define AFIO_MAPR_USART3_REMAP_FULLREMAP AFIO_MAPR_USART3_REMAP_FULLREMAP_Msk /*!< Full remap (TX/PD8, RX/PD9, CK/PD10, CTS/PD11, RTS/PD12) */ - -#define AFIO_MAPR_TIM1_REMAP_Pos (6U) -#define AFIO_MAPR_TIM1_REMAP_Msk (0x3U << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x000000C0 */ -#define AFIO_MAPR_TIM1_REMAP AFIO_MAPR_TIM1_REMAP_Msk /*!< TIM1_REMAP[1:0] bits (TIM1 remapping) */ -#define AFIO_MAPR_TIM1_REMAP_0 (0x1U << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x00000040 */ -#define AFIO_MAPR_TIM1_REMAP_1 (0x2U << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x00000080 */ - -/*!< TIM1_REMAP configuration */ -#define AFIO_MAPR_TIM1_REMAP_NOREMAP 0x00000000U /*!< No remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15) */ -#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Pos (6U) -#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Msk (0x1U << AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Pos) /*!< 0x00000040 */ -#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Msk /*!< Partial remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PA6, CH1N/PA7, CH2N/PB0, CH3N/PB1) */ -#define AFIO_MAPR_TIM1_REMAP_FULLREMAP_Pos (6U) -#define AFIO_MAPR_TIM1_REMAP_FULLREMAP_Msk (0x3U << AFIO_MAPR_TIM1_REMAP_FULLREMAP_Pos) /*!< 0x000000C0 */ -#define AFIO_MAPR_TIM1_REMAP_FULLREMAP AFIO_MAPR_TIM1_REMAP_FULLREMAP_Msk /*!< Full remap (ETR/PE7, CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8, CH2N/PE10, CH3N/PE12) */ - -#define AFIO_MAPR_TIM2_REMAP_Pos (8U) -#define AFIO_MAPR_TIM2_REMAP_Msk (0x3U << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000300 */ -#define AFIO_MAPR_TIM2_REMAP AFIO_MAPR_TIM2_REMAP_Msk /*!< TIM2_REMAP[1:0] bits (TIM2 remapping) */ -#define AFIO_MAPR_TIM2_REMAP_0 (0x1U << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000100 */ -#define AFIO_MAPR_TIM2_REMAP_1 (0x2U << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000200 */ - -/*!< TIM2_REMAP configuration */ -#define AFIO_MAPR_TIM2_REMAP_NOREMAP 0x00000000U /*!< No remap (CH1/ETR/PA0, CH2/PA1, CH3/PA2, CH4/PA3) */ -#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Pos (8U) -#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Msk (0x1U << AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Pos) /*!< 0x00000100 */ -#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1 AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Msk /*!< Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2, CH4/PA3) */ -#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Pos (9U) -#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Msk (0x1U << AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Pos) /*!< 0x00000200 */ -#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2 AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Msk /*!< Partial remap (CH1/ETR/PA0, CH2/PA1, CH3/PB10, CH4/PB11) */ -#define AFIO_MAPR_TIM2_REMAP_FULLREMAP_Pos (8U) -#define AFIO_MAPR_TIM2_REMAP_FULLREMAP_Msk (0x3U << AFIO_MAPR_TIM2_REMAP_FULLREMAP_Pos) /*!< 0x00000300 */ -#define AFIO_MAPR_TIM2_REMAP_FULLREMAP AFIO_MAPR_TIM2_REMAP_FULLREMAP_Msk /*!< Full remap (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11) */ - -#define AFIO_MAPR_TIM3_REMAP_Pos (10U) -#define AFIO_MAPR_TIM3_REMAP_Msk (0x3U << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000C00 */ -#define AFIO_MAPR_TIM3_REMAP AFIO_MAPR_TIM3_REMAP_Msk /*!< TIM3_REMAP[1:0] bits (TIM3 remapping) */ -#define AFIO_MAPR_TIM3_REMAP_0 (0x1U << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000400 */ -#define AFIO_MAPR_TIM3_REMAP_1 (0x2U << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000800 */ - -/*!< TIM3_REMAP configuration */ -#define AFIO_MAPR_TIM3_REMAP_NOREMAP 0x00000000U /*!< No remap (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1) */ -#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Pos (11U) -#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Msk (0x1U << AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Pos) /*!< 0x00000800 */ -#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Msk /*!< Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1) */ -#define AFIO_MAPR_TIM3_REMAP_FULLREMAP_Pos (10U) -#define AFIO_MAPR_TIM3_REMAP_FULLREMAP_Msk (0x3U << AFIO_MAPR_TIM3_REMAP_FULLREMAP_Pos) /*!< 0x00000C00 */ -#define AFIO_MAPR_TIM3_REMAP_FULLREMAP AFIO_MAPR_TIM3_REMAP_FULLREMAP_Msk /*!< Full remap (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9) */ - -#define AFIO_MAPR_TIM4_REMAP_Pos (12U) -#define AFIO_MAPR_TIM4_REMAP_Msk (0x1U << AFIO_MAPR_TIM4_REMAP_Pos) /*!< 0x00001000 */ -#define AFIO_MAPR_TIM4_REMAP AFIO_MAPR_TIM4_REMAP_Msk /*!< TIM4_REMAP bit (TIM4 remapping) */ - -#define AFIO_MAPR_CAN_REMAP_Pos (13U) -#define AFIO_MAPR_CAN_REMAP_Msk (0x3U << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00006000 */ -#define AFIO_MAPR_CAN_REMAP AFIO_MAPR_CAN_REMAP_Msk /*!< CAN_REMAP[1:0] bits (CAN Alternate function remapping) */ -#define AFIO_MAPR_CAN_REMAP_0 (0x1U << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00002000 */ -#define AFIO_MAPR_CAN_REMAP_1 (0x2U << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00004000 */ - -/*!< CAN_REMAP configuration */ -#define AFIO_MAPR_CAN_REMAP_REMAP1 0x00000000U /*!< CANRX mapped to PA11, CANTX mapped to PA12 */ -#define AFIO_MAPR_CAN_REMAP_REMAP2_Pos (14U) -#define AFIO_MAPR_CAN_REMAP_REMAP2_Msk (0x1U << AFIO_MAPR_CAN_REMAP_REMAP2_Pos) /*!< 0x00004000 */ -#define AFIO_MAPR_CAN_REMAP_REMAP2 AFIO_MAPR_CAN_REMAP_REMAP2_Msk /*!< CANRX mapped to PB8, CANTX mapped to PB9 */ -#define AFIO_MAPR_CAN_REMAP_REMAP3_Pos (13U) -#define AFIO_MAPR_CAN_REMAP_REMAP3_Msk (0x3U << AFIO_MAPR_CAN_REMAP_REMAP3_Pos) /*!< 0x00006000 */ -#define AFIO_MAPR_CAN_REMAP_REMAP3 AFIO_MAPR_CAN_REMAP_REMAP3_Msk /*!< CANRX mapped to PD0, CANTX mapped to PD1 */ - -#define AFIO_MAPR_PD01_REMAP_Pos (15U) -#define AFIO_MAPR_PD01_REMAP_Msk (0x1U << AFIO_MAPR_PD01_REMAP_Pos) /*!< 0x00008000 */ -#define AFIO_MAPR_PD01_REMAP AFIO_MAPR_PD01_REMAP_Msk /*!< Port D0/Port D1 mapping on OSC_IN/OSC_OUT */ - -/*!< SWJ_CFG configuration */ -#define AFIO_MAPR_SWJ_CFG_Pos (24U) -#define AFIO_MAPR_SWJ_CFG_Msk (0x7U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x07000000 */ -#define AFIO_MAPR_SWJ_CFG AFIO_MAPR_SWJ_CFG_Msk /*!< SWJ_CFG[2:0] bits (Serial Wire JTAG configuration) */ -#define AFIO_MAPR_SWJ_CFG_0 (0x1U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x01000000 */ -#define AFIO_MAPR_SWJ_CFG_1 (0x2U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x02000000 */ -#define AFIO_MAPR_SWJ_CFG_2 (0x4U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x04000000 */ - -#define AFIO_MAPR_SWJ_CFG_RESET 0x00000000U /*!< Full SWJ (JTAG-DP + SW-DP) : Reset State */ -#define AFIO_MAPR_SWJ_CFG_NOJNTRST_Pos (24U) -#define AFIO_MAPR_SWJ_CFG_NOJNTRST_Msk (0x1U << AFIO_MAPR_SWJ_CFG_NOJNTRST_Pos) /*!< 0x01000000 */ -#define AFIO_MAPR_SWJ_CFG_NOJNTRST AFIO_MAPR_SWJ_CFG_NOJNTRST_Msk /*!< Full SWJ (JTAG-DP + SW-DP) but without JNTRST */ -#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Pos (25U) -#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Msk (0x1U << AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Pos) /*!< 0x02000000 */ -#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Msk /*!< JTAG-DP Disabled and SW-DP Enabled */ -#define AFIO_MAPR_SWJ_CFG_DISABLE_Pos (26U) -#define AFIO_MAPR_SWJ_CFG_DISABLE_Msk (0x1U << AFIO_MAPR_SWJ_CFG_DISABLE_Pos) /*!< 0x04000000 */ -#define AFIO_MAPR_SWJ_CFG_DISABLE AFIO_MAPR_SWJ_CFG_DISABLE_Msk /*!< JTAG-DP Disabled and SW-DP Disabled */ - - -/***************** Bit definition for AFIO_EXTICR1 register *****************/ -#define AFIO_EXTICR1_EXTI0_Pos (0U) -#define AFIO_EXTICR1_EXTI0_Msk (0xFU << AFIO_EXTICR1_EXTI0_Pos) /*!< 0x0000000F */ -#define AFIO_EXTICR1_EXTI0 AFIO_EXTICR1_EXTI0_Msk /*!< EXTI 0 configuration */ -#define AFIO_EXTICR1_EXTI1_Pos (4U) -#define AFIO_EXTICR1_EXTI1_Msk (0xFU << AFIO_EXTICR1_EXTI1_Pos) /*!< 0x000000F0 */ -#define AFIO_EXTICR1_EXTI1 AFIO_EXTICR1_EXTI1_Msk /*!< EXTI 1 configuration */ -#define AFIO_EXTICR1_EXTI2_Pos (8U) -#define AFIO_EXTICR1_EXTI2_Msk (0xFU << AFIO_EXTICR1_EXTI2_Pos) /*!< 0x00000F00 */ -#define AFIO_EXTICR1_EXTI2 AFIO_EXTICR1_EXTI2_Msk /*!< EXTI 2 configuration */ -#define AFIO_EXTICR1_EXTI3_Pos (12U) -#define AFIO_EXTICR1_EXTI3_Msk (0xFU << AFIO_EXTICR1_EXTI3_Pos) /*!< 0x0000F000 */ -#define AFIO_EXTICR1_EXTI3 AFIO_EXTICR1_EXTI3_Msk /*!< EXTI 3 configuration */ - -/*!< EXTI0 configuration */ -#define AFIO_EXTICR1_EXTI0_PA 0x00000000U /*!< PA[0] pin */ -#define AFIO_EXTICR1_EXTI0_PB_Pos (0U) -#define AFIO_EXTICR1_EXTI0_PB_Msk (0x1U << AFIO_EXTICR1_EXTI0_PB_Pos) /*!< 0x00000001 */ -#define AFIO_EXTICR1_EXTI0_PB AFIO_EXTICR1_EXTI0_PB_Msk /*!< PB[0] pin */ -#define AFIO_EXTICR1_EXTI0_PC_Pos (1U) -#define AFIO_EXTICR1_EXTI0_PC_Msk (0x1U << AFIO_EXTICR1_EXTI0_PC_Pos) /*!< 0x00000002 */ -#define AFIO_EXTICR1_EXTI0_PC AFIO_EXTICR1_EXTI0_PC_Msk /*!< PC[0] pin */ -#define AFIO_EXTICR1_EXTI0_PD_Pos (0U) -#define AFIO_EXTICR1_EXTI0_PD_Msk (0x3U << AFIO_EXTICR1_EXTI0_PD_Pos) /*!< 0x00000003 */ -#define AFIO_EXTICR1_EXTI0_PD AFIO_EXTICR1_EXTI0_PD_Msk /*!< PD[0] pin */ -#define AFIO_EXTICR1_EXTI0_PE_Pos (2U) -#define AFIO_EXTICR1_EXTI0_PE_Msk (0x1U << AFIO_EXTICR1_EXTI0_PE_Pos) /*!< 0x00000004 */ -#define AFIO_EXTICR1_EXTI0_PE AFIO_EXTICR1_EXTI0_PE_Msk /*!< PE[0] pin */ -#define AFIO_EXTICR1_EXTI0_PF_Pos (0U) -#define AFIO_EXTICR1_EXTI0_PF_Msk (0x5U << AFIO_EXTICR1_EXTI0_PF_Pos) /*!< 0x00000005 */ -#define AFIO_EXTICR1_EXTI0_PF AFIO_EXTICR1_EXTI0_PF_Msk /*!< PF[0] pin */ -#define AFIO_EXTICR1_EXTI0_PG_Pos (1U) -#define AFIO_EXTICR1_EXTI0_PG_Msk (0x3U << AFIO_EXTICR1_EXTI0_PG_Pos) /*!< 0x00000006 */ -#define AFIO_EXTICR1_EXTI0_PG AFIO_EXTICR1_EXTI0_PG_Msk /*!< PG[0] pin */ - -/*!< EXTI1 configuration */ -#define AFIO_EXTICR1_EXTI1_PA 0x00000000U /*!< PA[1] pin */ -#define AFIO_EXTICR1_EXTI1_PB_Pos (4U) -#define AFIO_EXTICR1_EXTI1_PB_Msk (0x1U << AFIO_EXTICR1_EXTI1_PB_Pos) /*!< 0x00000010 */ -#define AFIO_EXTICR1_EXTI1_PB AFIO_EXTICR1_EXTI1_PB_Msk /*!< PB[1] pin */ -#define AFIO_EXTICR1_EXTI1_PC_Pos (5U) -#define AFIO_EXTICR1_EXTI1_PC_Msk (0x1U << AFIO_EXTICR1_EXTI1_PC_Pos) /*!< 0x00000020 */ -#define AFIO_EXTICR1_EXTI1_PC AFIO_EXTICR1_EXTI1_PC_Msk /*!< PC[1] pin */ -#define AFIO_EXTICR1_EXTI1_PD_Pos (4U) -#define AFIO_EXTICR1_EXTI1_PD_Msk (0x3U << AFIO_EXTICR1_EXTI1_PD_Pos) /*!< 0x00000030 */ -#define AFIO_EXTICR1_EXTI1_PD AFIO_EXTICR1_EXTI1_PD_Msk /*!< PD[1] pin */ -#define AFIO_EXTICR1_EXTI1_PE_Pos (6U) -#define AFIO_EXTICR1_EXTI1_PE_Msk (0x1U << AFIO_EXTICR1_EXTI1_PE_Pos) /*!< 0x00000040 */ -#define AFIO_EXTICR1_EXTI1_PE AFIO_EXTICR1_EXTI1_PE_Msk /*!< PE[1] pin */ -#define AFIO_EXTICR1_EXTI1_PF_Pos (4U) -#define AFIO_EXTICR1_EXTI1_PF_Msk (0x5U << AFIO_EXTICR1_EXTI1_PF_Pos) /*!< 0x00000050 */ -#define AFIO_EXTICR1_EXTI1_PF AFIO_EXTICR1_EXTI1_PF_Msk /*!< PF[1] pin */ -#define AFIO_EXTICR1_EXTI1_PG_Pos (5U) -#define AFIO_EXTICR1_EXTI1_PG_Msk (0x3U << AFIO_EXTICR1_EXTI1_PG_Pos) /*!< 0x00000060 */ -#define AFIO_EXTICR1_EXTI1_PG AFIO_EXTICR1_EXTI1_PG_Msk /*!< PG[1] pin */ - -/*!< EXTI2 configuration */ -#define AFIO_EXTICR1_EXTI2_PA 0x00000000U /*!< PA[2] pin */ -#define AFIO_EXTICR1_EXTI2_PB_Pos (8U) -#define AFIO_EXTICR1_EXTI2_PB_Msk (0x1U << AFIO_EXTICR1_EXTI2_PB_Pos) /*!< 0x00000100 */ -#define AFIO_EXTICR1_EXTI2_PB AFIO_EXTICR1_EXTI2_PB_Msk /*!< PB[2] pin */ -#define AFIO_EXTICR1_EXTI2_PC_Pos (9U) -#define AFIO_EXTICR1_EXTI2_PC_Msk (0x1U << AFIO_EXTICR1_EXTI2_PC_Pos) /*!< 0x00000200 */ -#define AFIO_EXTICR1_EXTI2_PC AFIO_EXTICR1_EXTI2_PC_Msk /*!< PC[2] pin */ -#define AFIO_EXTICR1_EXTI2_PD_Pos (8U) -#define AFIO_EXTICR1_EXTI2_PD_Msk (0x3U << AFIO_EXTICR1_EXTI2_PD_Pos) /*!< 0x00000300 */ -#define AFIO_EXTICR1_EXTI2_PD AFIO_EXTICR1_EXTI2_PD_Msk /*!< PD[2] pin */ -#define AFIO_EXTICR1_EXTI2_PE_Pos (10U) -#define AFIO_EXTICR1_EXTI2_PE_Msk (0x1U << AFIO_EXTICR1_EXTI2_PE_Pos) /*!< 0x00000400 */ -#define AFIO_EXTICR1_EXTI2_PE AFIO_EXTICR1_EXTI2_PE_Msk /*!< PE[2] pin */ -#define AFIO_EXTICR1_EXTI2_PF_Pos (8U) -#define AFIO_EXTICR1_EXTI2_PF_Msk (0x5U << AFIO_EXTICR1_EXTI2_PF_Pos) /*!< 0x00000500 */ -#define AFIO_EXTICR1_EXTI2_PF AFIO_EXTICR1_EXTI2_PF_Msk /*!< PF[2] pin */ -#define AFIO_EXTICR1_EXTI2_PG_Pos (9U) -#define AFIO_EXTICR1_EXTI2_PG_Msk (0x3U << AFIO_EXTICR1_EXTI2_PG_Pos) /*!< 0x00000600 */ -#define AFIO_EXTICR1_EXTI2_PG AFIO_EXTICR1_EXTI2_PG_Msk /*!< PG[2] pin */ - -/*!< EXTI3 configuration */ -#define AFIO_EXTICR1_EXTI3_PA 0x00000000U /*!< PA[3] pin */ -#define AFIO_EXTICR1_EXTI3_PB_Pos (12U) -#define AFIO_EXTICR1_EXTI3_PB_Msk (0x1U << AFIO_EXTICR1_EXTI3_PB_Pos) /*!< 0x00001000 */ -#define AFIO_EXTICR1_EXTI3_PB AFIO_EXTICR1_EXTI3_PB_Msk /*!< PB[3] pin */ -#define AFIO_EXTICR1_EXTI3_PC_Pos (13U) -#define AFIO_EXTICR1_EXTI3_PC_Msk (0x1U << AFIO_EXTICR1_EXTI3_PC_Pos) /*!< 0x00002000 */ -#define AFIO_EXTICR1_EXTI3_PC AFIO_EXTICR1_EXTI3_PC_Msk /*!< PC[3] pin */ -#define AFIO_EXTICR1_EXTI3_PD_Pos (12U) -#define AFIO_EXTICR1_EXTI3_PD_Msk (0x3U << AFIO_EXTICR1_EXTI3_PD_Pos) /*!< 0x00003000 */ -#define AFIO_EXTICR1_EXTI3_PD AFIO_EXTICR1_EXTI3_PD_Msk /*!< PD[3] pin */ -#define AFIO_EXTICR1_EXTI3_PE_Pos (14U) -#define AFIO_EXTICR1_EXTI3_PE_Msk (0x1U << AFIO_EXTICR1_EXTI3_PE_Pos) /*!< 0x00004000 */ -#define AFIO_EXTICR1_EXTI3_PE AFIO_EXTICR1_EXTI3_PE_Msk /*!< PE[3] pin */ -#define AFIO_EXTICR1_EXTI3_PF_Pos (12U) -#define AFIO_EXTICR1_EXTI3_PF_Msk (0x5U << AFIO_EXTICR1_EXTI3_PF_Pos) /*!< 0x00005000 */ -#define AFIO_EXTICR1_EXTI3_PF AFIO_EXTICR1_EXTI3_PF_Msk /*!< PF[3] pin */ -#define AFIO_EXTICR1_EXTI3_PG_Pos (13U) -#define AFIO_EXTICR1_EXTI3_PG_Msk (0x3U << AFIO_EXTICR1_EXTI3_PG_Pos) /*!< 0x00006000 */ -#define AFIO_EXTICR1_EXTI3_PG AFIO_EXTICR1_EXTI3_PG_Msk /*!< PG[3] pin */ - -/***************** Bit definition for AFIO_EXTICR2 register *****************/ -#define AFIO_EXTICR2_EXTI4_Pos (0U) -#define AFIO_EXTICR2_EXTI4_Msk (0xFU << AFIO_EXTICR2_EXTI4_Pos) /*!< 0x0000000F */ -#define AFIO_EXTICR2_EXTI4 AFIO_EXTICR2_EXTI4_Msk /*!< EXTI 4 configuration */ -#define AFIO_EXTICR2_EXTI5_Pos (4U) -#define AFIO_EXTICR2_EXTI5_Msk (0xFU << AFIO_EXTICR2_EXTI5_Pos) /*!< 0x000000F0 */ -#define AFIO_EXTICR2_EXTI5 AFIO_EXTICR2_EXTI5_Msk /*!< EXTI 5 configuration */ -#define AFIO_EXTICR2_EXTI6_Pos (8U) -#define AFIO_EXTICR2_EXTI6_Msk (0xFU << AFIO_EXTICR2_EXTI6_Pos) /*!< 0x00000F00 */ -#define AFIO_EXTICR2_EXTI6 AFIO_EXTICR2_EXTI6_Msk /*!< EXTI 6 configuration */ -#define AFIO_EXTICR2_EXTI7_Pos (12U) -#define AFIO_EXTICR2_EXTI7_Msk (0xFU << AFIO_EXTICR2_EXTI7_Pos) /*!< 0x0000F000 */ -#define AFIO_EXTICR2_EXTI7 AFIO_EXTICR2_EXTI7_Msk /*!< EXTI 7 configuration */ - -/*!< EXTI4 configuration */ -#define AFIO_EXTICR2_EXTI4_PA 0x00000000U /*!< PA[4] pin */ -#define AFIO_EXTICR2_EXTI4_PB_Pos (0U) -#define AFIO_EXTICR2_EXTI4_PB_Msk (0x1U << AFIO_EXTICR2_EXTI4_PB_Pos) /*!< 0x00000001 */ -#define AFIO_EXTICR2_EXTI4_PB AFIO_EXTICR2_EXTI4_PB_Msk /*!< PB[4] pin */ -#define AFIO_EXTICR2_EXTI4_PC_Pos (1U) -#define AFIO_EXTICR2_EXTI4_PC_Msk (0x1U << AFIO_EXTICR2_EXTI4_PC_Pos) /*!< 0x00000002 */ -#define AFIO_EXTICR2_EXTI4_PC AFIO_EXTICR2_EXTI4_PC_Msk /*!< PC[4] pin */ -#define AFIO_EXTICR2_EXTI4_PD_Pos (0U) -#define AFIO_EXTICR2_EXTI4_PD_Msk (0x3U << AFIO_EXTICR2_EXTI4_PD_Pos) /*!< 0x00000003 */ -#define AFIO_EXTICR2_EXTI4_PD AFIO_EXTICR2_EXTI4_PD_Msk /*!< PD[4] pin */ -#define AFIO_EXTICR2_EXTI4_PE_Pos (2U) -#define AFIO_EXTICR2_EXTI4_PE_Msk (0x1U << AFIO_EXTICR2_EXTI4_PE_Pos) /*!< 0x00000004 */ -#define AFIO_EXTICR2_EXTI4_PE AFIO_EXTICR2_EXTI4_PE_Msk /*!< PE[4] pin */ -#define AFIO_EXTICR2_EXTI4_PF_Pos (0U) -#define AFIO_EXTICR2_EXTI4_PF_Msk (0x5U << AFIO_EXTICR2_EXTI4_PF_Pos) /*!< 0x00000005 */ -#define AFIO_EXTICR2_EXTI4_PF AFIO_EXTICR2_EXTI4_PF_Msk /*!< PF[4] pin */ -#define AFIO_EXTICR2_EXTI4_PG_Pos (1U) -#define AFIO_EXTICR2_EXTI4_PG_Msk (0x3U << AFIO_EXTICR2_EXTI4_PG_Pos) /*!< 0x00000006 */ -#define AFIO_EXTICR2_EXTI4_PG AFIO_EXTICR2_EXTI4_PG_Msk /*!< PG[4] pin */ - -/* EXTI5 configuration */ -#define AFIO_EXTICR2_EXTI5_PA 0x00000000U /*!< PA[5] pin */ -#define AFIO_EXTICR2_EXTI5_PB_Pos (4U) -#define AFIO_EXTICR2_EXTI5_PB_Msk (0x1U << AFIO_EXTICR2_EXTI5_PB_Pos) /*!< 0x00000010 */ -#define AFIO_EXTICR2_EXTI5_PB AFIO_EXTICR2_EXTI5_PB_Msk /*!< PB[5] pin */ -#define AFIO_EXTICR2_EXTI5_PC_Pos (5U) -#define AFIO_EXTICR2_EXTI5_PC_Msk (0x1U << AFIO_EXTICR2_EXTI5_PC_Pos) /*!< 0x00000020 */ -#define AFIO_EXTICR2_EXTI5_PC AFIO_EXTICR2_EXTI5_PC_Msk /*!< PC[5] pin */ -#define AFIO_EXTICR2_EXTI5_PD_Pos (4U) -#define AFIO_EXTICR2_EXTI5_PD_Msk (0x3U << AFIO_EXTICR2_EXTI5_PD_Pos) /*!< 0x00000030 */ -#define AFIO_EXTICR2_EXTI5_PD AFIO_EXTICR2_EXTI5_PD_Msk /*!< PD[5] pin */ -#define AFIO_EXTICR2_EXTI5_PE_Pos (6U) -#define AFIO_EXTICR2_EXTI5_PE_Msk (0x1U << AFIO_EXTICR2_EXTI5_PE_Pos) /*!< 0x00000040 */ -#define AFIO_EXTICR2_EXTI5_PE AFIO_EXTICR2_EXTI5_PE_Msk /*!< PE[5] pin */ -#define AFIO_EXTICR2_EXTI5_PF_Pos (4U) -#define AFIO_EXTICR2_EXTI5_PF_Msk (0x5U << AFIO_EXTICR2_EXTI5_PF_Pos) /*!< 0x00000050 */ -#define AFIO_EXTICR2_EXTI5_PF AFIO_EXTICR2_EXTI5_PF_Msk /*!< PF[5] pin */ -#define AFIO_EXTICR2_EXTI5_PG_Pos (5U) -#define AFIO_EXTICR2_EXTI5_PG_Msk (0x3U << AFIO_EXTICR2_EXTI5_PG_Pos) /*!< 0x00000060 */ -#define AFIO_EXTICR2_EXTI5_PG AFIO_EXTICR2_EXTI5_PG_Msk /*!< PG[5] pin */ - -/*!< EXTI6 configuration */ -#define AFIO_EXTICR2_EXTI6_PA 0x00000000U /*!< PA[6] pin */ -#define AFIO_EXTICR2_EXTI6_PB_Pos (8U) -#define AFIO_EXTICR2_EXTI6_PB_Msk (0x1U << AFIO_EXTICR2_EXTI6_PB_Pos) /*!< 0x00000100 */ -#define AFIO_EXTICR2_EXTI6_PB AFIO_EXTICR2_EXTI6_PB_Msk /*!< PB[6] pin */ -#define AFIO_EXTICR2_EXTI6_PC_Pos (9U) -#define AFIO_EXTICR2_EXTI6_PC_Msk (0x1U << AFIO_EXTICR2_EXTI6_PC_Pos) /*!< 0x00000200 */ -#define AFIO_EXTICR2_EXTI6_PC AFIO_EXTICR2_EXTI6_PC_Msk /*!< PC[6] pin */ -#define AFIO_EXTICR2_EXTI6_PD_Pos (8U) -#define AFIO_EXTICR2_EXTI6_PD_Msk (0x3U << AFIO_EXTICR2_EXTI6_PD_Pos) /*!< 0x00000300 */ -#define AFIO_EXTICR2_EXTI6_PD AFIO_EXTICR2_EXTI6_PD_Msk /*!< PD[6] pin */ -#define AFIO_EXTICR2_EXTI6_PE_Pos (10U) -#define AFIO_EXTICR2_EXTI6_PE_Msk (0x1U << AFIO_EXTICR2_EXTI6_PE_Pos) /*!< 0x00000400 */ -#define AFIO_EXTICR2_EXTI6_PE AFIO_EXTICR2_EXTI6_PE_Msk /*!< PE[6] pin */ -#define AFIO_EXTICR2_EXTI6_PF_Pos (8U) -#define AFIO_EXTICR2_EXTI6_PF_Msk (0x5U << AFIO_EXTICR2_EXTI6_PF_Pos) /*!< 0x00000500 */ -#define AFIO_EXTICR2_EXTI6_PF AFIO_EXTICR2_EXTI6_PF_Msk /*!< PF[6] pin */ -#define AFIO_EXTICR2_EXTI6_PG_Pos (9U) -#define AFIO_EXTICR2_EXTI6_PG_Msk (0x3U << AFIO_EXTICR2_EXTI6_PG_Pos) /*!< 0x00000600 */ -#define AFIO_EXTICR2_EXTI6_PG AFIO_EXTICR2_EXTI6_PG_Msk /*!< PG[6] pin */ - -/*!< EXTI7 configuration */ -#define AFIO_EXTICR2_EXTI7_PA 0x00000000U /*!< PA[7] pin */ -#define AFIO_EXTICR2_EXTI7_PB_Pos (12U) -#define AFIO_EXTICR2_EXTI7_PB_Msk (0x1U << AFIO_EXTICR2_EXTI7_PB_Pos) /*!< 0x00001000 */ -#define AFIO_EXTICR2_EXTI7_PB AFIO_EXTICR2_EXTI7_PB_Msk /*!< PB[7] pin */ -#define AFIO_EXTICR2_EXTI7_PC_Pos (13U) -#define AFIO_EXTICR2_EXTI7_PC_Msk (0x1U << AFIO_EXTICR2_EXTI7_PC_Pos) /*!< 0x00002000 */ -#define AFIO_EXTICR2_EXTI7_PC AFIO_EXTICR2_EXTI7_PC_Msk /*!< PC[7] pin */ -#define AFIO_EXTICR2_EXTI7_PD_Pos (12U) -#define AFIO_EXTICR2_EXTI7_PD_Msk (0x3U << AFIO_EXTICR2_EXTI7_PD_Pos) /*!< 0x00003000 */ -#define AFIO_EXTICR2_EXTI7_PD AFIO_EXTICR2_EXTI7_PD_Msk /*!< PD[7] pin */ -#define AFIO_EXTICR2_EXTI7_PE_Pos (14U) -#define AFIO_EXTICR2_EXTI7_PE_Msk (0x1U << AFIO_EXTICR2_EXTI7_PE_Pos) /*!< 0x00004000 */ -#define AFIO_EXTICR2_EXTI7_PE AFIO_EXTICR2_EXTI7_PE_Msk /*!< PE[7] pin */ -#define AFIO_EXTICR2_EXTI7_PF_Pos (12U) -#define AFIO_EXTICR2_EXTI7_PF_Msk (0x5U << AFIO_EXTICR2_EXTI7_PF_Pos) /*!< 0x00005000 */ -#define AFIO_EXTICR2_EXTI7_PF AFIO_EXTICR2_EXTI7_PF_Msk /*!< PF[7] pin */ -#define AFIO_EXTICR2_EXTI7_PG_Pos (13U) -#define AFIO_EXTICR2_EXTI7_PG_Msk (0x3U << AFIO_EXTICR2_EXTI7_PG_Pos) /*!< 0x00006000 */ -#define AFIO_EXTICR2_EXTI7_PG AFIO_EXTICR2_EXTI7_PG_Msk /*!< PG[7] pin */ - -/***************** Bit definition for AFIO_EXTICR3 register *****************/ -#define AFIO_EXTICR3_EXTI8_Pos (0U) -#define AFIO_EXTICR3_EXTI8_Msk (0xFU << AFIO_EXTICR3_EXTI8_Pos) /*!< 0x0000000F */ -#define AFIO_EXTICR3_EXTI8 AFIO_EXTICR3_EXTI8_Msk /*!< EXTI 8 configuration */ -#define AFIO_EXTICR3_EXTI9_Pos (4U) -#define AFIO_EXTICR3_EXTI9_Msk (0xFU << AFIO_EXTICR3_EXTI9_Pos) /*!< 0x000000F0 */ -#define AFIO_EXTICR3_EXTI9 AFIO_EXTICR3_EXTI9_Msk /*!< EXTI 9 configuration */ -#define AFIO_EXTICR3_EXTI10_Pos (8U) -#define AFIO_EXTICR3_EXTI10_Msk (0xFU << AFIO_EXTICR3_EXTI10_Pos) /*!< 0x00000F00 */ -#define AFIO_EXTICR3_EXTI10 AFIO_EXTICR3_EXTI10_Msk /*!< EXTI 10 configuration */ -#define AFIO_EXTICR3_EXTI11_Pos (12U) -#define AFIO_EXTICR3_EXTI11_Msk (0xFU << AFIO_EXTICR3_EXTI11_Pos) /*!< 0x0000F000 */ -#define AFIO_EXTICR3_EXTI11 AFIO_EXTICR3_EXTI11_Msk /*!< EXTI 11 configuration */ - -/*!< EXTI8 configuration */ -#define AFIO_EXTICR3_EXTI8_PA 0x00000000U /*!< PA[8] pin */ -#define AFIO_EXTICR3_EXTI8_PB_Pos (0U) -#define AFIO_EXTICR3_EXTI8_PB_Msk (0x1U << AFIO_EXTICR3_EXTI8_PB_Pos) /*!< 0x00000001 */ -#define AFIO_EXTICR3_EXTI8_PB AFIO_EXTICR3_EXTI8_PB_Msk /*!< PB[8] pin */ -#define AFIO_EXTICR3_EXTI8_PC_Pos (1U) -#define AFIO_EXTICR3_EXTI8_PC_Msk (0x1U << AFIO_EXTICR3_EXTI8_PC_Pos) /*!< 0x00000002 */ -#define AFIO_EXTICR3_EXTI8_PC AFIO_EXTICR3_EXTI8_PC_Msk /*!< PC[8] pin */ -#define AFIO_EXTICR3_EXTI8_PD_Pos (0U) -#define AFIO_EXTICR3_EXTI8_PD_Msk (0x3U << AFIO_EXTICR3_EXTI8_PD_Pos) /*!< 0x00000003 */ -#define AFIO_EXTICR3_EXTI8_PD AFIO_EXTICR3_EXTI8_PD_Msk /*!< PD[8] pin */ -#define AFIO_EXTICR3_EXTI8_PE_Pos (2U) -#define AFIO_EXTICR3_EXTI8_PE_Msk (0x1U << AFIO_EXTICR3_EXTI8_PE_Pos) /*!< 0x00000004 */ -#define AFIO_EXTICR3_EXTI8_PE AFIO_EXTICR3_EXTI8_PE_Msk /*!< PE[8] pin */ -#define AFIO_EXTICR3_EXTI8_PF_Pos (0U) -#define AFIO_EXTICR3_EXTI8_PF_Msk (0x5U << AFIO_EXTICR3_EXTI8_PF_Pos) /*!< 0x00000005 */ -#define AFIO_EXTICR3_EXTI8_PF AFIO_EXTICR3_EXTI8_PF_Msk /*!< PF[8] pin */ -#define AFIO_EXTICR3_EXTI8_PG_Pos (1U) -#define AFIO_EXTICR3_EXTI8_PG_Msk (0x3U << AFIO_EXTICR3_EXTI8_PG_Pos) /*!< 0x00000006 */ -#define AFIO_EXTICR3_EXTI8_PG AFIO_EXTICR3_EXTI8_PG_Msk /*!< PG[8] pin */ - -/*!< EXTI9 configuration */ -#define AFIO_EXTICR3_EXTI9_PA 0x00000000U /*!< PA[9] pin */ -#define AFIO_EXTICR3_EXTI9_PB_Pos (4U) -#define AFIO_EXTICR3_EXTI9_PB_Msk (0x1U << AFIO_EXTICR3_EXTI9_PB_Pos) /*!< 0x00000010 */ -#define AFIO_EXTICR3_EXTI9_PB AFIO_EXTICR3_EXTI9_PB_Msk /*!< PB[9] pin */ -#define AFIO_EXTICR3_EXTI9_PC_Pos (5U) -#define AFIO_EXTICR3_EXTI9_PC_Msk (0x1U << AFIO_EXTICR3_EXTI9_PC_Pos) /*!< 0x00000020 */ -#define AFIO_EXTICR3_EXTI9_PC AFIO_EXTICR3_EXTI9_PC_Msk /*!< PC[9] pin */ -#define AFIO_EXTICR3_EXTI9_PD_Pos (4U) -#define AFIO_EXTICR3_EXTI9_PD_Msk (0x3U << AFIO_EXTICR3_EXTI9_PD_Pos) /*!< 0x00000030 */ -#define AFIO_EXTICR3_EXTI9_PD AFIO_EXTICR3_EXTI9_PD_Msk /*!< PD[9] pin */ -#define AFIO_EXTICR3_EXTI9_PE_Pos (6U) -#define AFIO_EXTICR3_EXTI9_PE_Msk (0x1U << AFIO_EXTICR3_EXTI9_PE_Pos) /*!< 0x00000040 */ -#define AFIO_EXTICR3_EXTI9_PE AFIO_EXTICR3_EXTI9_PE_Msk /*!< PE[9] pin */ -#define AFIO_EXTICR3_EXTI9_PF_Pos (4U) -#define AFIO_EXTICR3_EXTI9_PF_Msk (0x5U << AFIO_EXTICR3_EXTI9_PF_Pos) /*!< 0x00000050 */ -#define AFIO_EXTICR3_EXTI9_PF AFIO_EXTICR3_EXTI9_PF_Msk /*!< PF[9] pin */ -#define AFIO_EXTICR3_EXTI9_PG_Pos (5U) -#define AFIO_EXTICR3_EXTI9_PG_Msk (0x3U << AFIO_EXTICR3_EXTI9_PG_Pos) /*!< 0x00000060 */ -#define AFIO_EXTICR3_EXTI9_PG AFIO_EXTICR3_EXTI9_PG_Msk /*!< PG[9] pin */ - -/*!< EXTI10 configuration */ -#define AFIO_EXTICR3_EXTI10_PA 0x00000000U /*!< PA[10] pin */ -#define AFIO_EXTICR3_EXTI10_PB_Pos (8U) -#define AFIO_EXTICR3_EXTI10_PB_Msk (0x1U << AFIO_EXTICR3_EXTI10_PB_Pos) /*!< 0x00000100 */ -#define AFIO_EXTICR3_EXTI10_PB AFIO_EXTICR3_EXTI10_PB_Msk /*!< PB[10] pin */ -#define AFIO_EXTICR3_EXTI10_PC_Pos (9U) -#define AFIO_EXTICR3_EXTI10_PC_Msk (0x1U << AFIO_EXTICR3_EXTI10_PC_Pos) /*!< 0x00000200 */ -#define AFIO_EXTICR3_EXTI10_PC AFIO_EXTICR3_EXTI10_PC_Msk /*!< PC[10] pin */ -#define AFIO_EXTICR3_EXTI10_PD_Pos (8U) -#define AFIO_EXTICR3_EXTI10_PD_Msk (0x3U << AFIO_EXTICR3_EXTI10_PD_Pos) /*!< 0x00000300 */ -#define AFIO_EXTICR3_EXTI10_PD AFIO_EXTICR3_EXTI10_PD_Msk /*!< PD[10] pin */ -#define AFIO_EXTICR3_EXTI10_PE_Pos (10U) -#define AFIO_EXTICR3_EXTI10_PE_Msk (0x1U << AFIO_EXTICR3_EXTI10_PE_Pos) /*!< 0x00000400 */ -#define AFIO_EXTICR3_EXTI10_PE AFIO_EXTICR3_EXTI10_PE_Msk /*!< PE[10] pin */ -#define AFIO_EXTICR3_EXTI10_PF_Pos (8U) -#define AFIO_EXTICR3_EXTI10_PF_Msk (0x5U << AFIO_EXTICR3_EXTI10_PF_Pos) /*!< 0x00000500 */ -#define AFIO_EXTICR3_EXTI10_PF AFIO_EXTICR3_EXTI10_PF_Msk /*!< PF[10] pin */ -#define AFIO_EXTICR3_EXTI10_PG_Pos (9U) -#define AFIO_EXTICR3_EXTI10_PG_Msk (0x3U << AFIO_EXTICR3_EXTI10_PG_Pos) /*!< 0x00000600 */ -#define AFIO_EXTICR3_EXTI10_PG AFIO_EXTICR3_EXTI10_PG_Msk /*!< PG[10] pin */ - -/*!< EXTI11 configuration */ -#define AFIO_EXTICR3_EXTI11_PA 0x00000000U /*!< PA[11] pin */ -#define AFIO_EXTICR3_EXTI11_PB_Pos (12U) -#define AFIO_EXTICR3_EXTI11_PB_Msk (0x1U << AFIO_EXTICR3_EXTI11_PB_Pos) /*!< 0x00001000 */ -#define AFIO_EXTICR3_EXTI11_PB AFIO_EXTICR3_EXTI11_PB_Msk /*!< PB[11] pin */ -#define AFIO_EXTICR3_EXTI11_PC_Pos (13U) -#define AFIO_EXTICR3_EXTI11_PC_Msk (0x1U << AFIO_EXTICR3_EXTI11_PC_Pos) /*!< 0x00002000 */ -#define AFIO_EXTICR3_EXTI11_PC AFIO_EXTICR3_EXTI11_PC_Msk /*!< PC[11] pin */ -#define AFIO_EXTICR3_EXTI11_PD_Pos (12U) -#define AFIO_EXTICR3_EXTI11_PD_Msk (0x3U << AFIO_EXTICR3_EXTI11_PD_Pos) /*!< 0x00003000 */ -#define AFIO_EXTICR3_EXTI11_PD AFIO_EXTICR3_EXTI11_PD_Msk /*!< PD[11] pin */ -#define AFIO_EXTICR3_EXTI11_PE_Pos (14U) -#define AFIO_EXTICR3_EXTI11_PE_Msk (0x1U << AFIO_EXTICR3_EXTI11_PE_Pos) /*!< 0x00004000 */ -#define AFIO_EXTICR3_EXTI11_PE AFIO_EXTICR3_EXTI11_PE_Msk /*!< PE[11] pin */ -#define AFIO_EXTICR3_EXTI11_PF_Pos (12U) -#define AFIO_EXTICR3_EXTI11_PF_Msk (0x5U << AFIO_EXTICR3_EXTI11_PF_Pos) /*!< 0x00005000 */ -#define AFIO_EXTICR3_EXTI11_PF AFIO_EXTICR3_EXTI11_PF_Msk /*!< PF[11] pin */ -#define AFIO_EXTICR3_EXTI11_PG_Pos (13U) -#define AFIO_EXTICR3_EXTI11_PG_Msk (0x3U << AFIO_EXTICR3_EXTI11_PG_Pos) /*!< 0x00006000 */ -#define AFIO_EXTICR3_EXTI11_PG AFIO_EXTICR3_EXTI11_PG_Msk /*!< PG[11] pin */ - -/***************** Bit definition for AFIO_EXTICR4 register *****************/ -#define AFIO_EXTICR4_EXTI12_Pos (0U) -#define AFIO_EXTICR4_EXTI12_Msk (0xFU << AFIO_EXTICR4_EXTI12_Pos) /*!< 0x0000000F */ -#define AFIO_EXTICR4_EXTI12 AFIO_EXTICR4_EXTI12_Msk /*!< EXTI 12 configuration */ -#define AFIO_EXTICR4_EXTI13_Pos (4U) -#define AFIO_EXTICR4_EXTI13_Msk (0xFU << AFIO_EXTICR4_EXTI13_Pos) /*!< 0x000000F0 */ -#define AFIO_EXTICR4_EXTI13 AFIO_EXTICR4_EXTI13_Msk /*!< EXTI 13 configuration */ -#define AFIO_EXTICR4_EXTI14_Pos (8U) -#define AFIO_EXTICR4_EXTI14_Msk (0xFU << AFIO_EXTICR4_EXTI14_Pos) /*!< 0x00000F00 */ -#define AFIO_EXTICR4_EXTI14 AFIO_EXTICR4_EXTI14_Msk /*!< EXTI 14 configuration */ -#define AFIO_EXTICR4_EXTI15_Pos (12U) -#define AFIO_EXTICR4_EXTI15_Msk (0xFU << AFIO_EXTICR4_EXTI15_Pos) /*!< 0x0000F000 */ -#define AFIO_EXTICR4_EXTI15 AFIO_EXTICR4_EXTI15_Msk /*!< EXTI 15 configuration */ - -/* EXTI12 configuration */ -#define AFIO_EXTICR4_EXTI12_PA 0x00000000U /*!< PA[12] pin */ -#define AFIO_EXTICR4_EXTI12_PB_Pos (0U) -#define AFIO_EXTICR4_EXTI12_PB_Msk (0x1U << AFIO_EXTICR4_EXTI12_PB_Pos) /*!< 0x00000001 */ -#define AFIO_EXTICR4_EXTI12_PB AFIO_EXTICR4_EXTI12_PB_Msk /*!< PB[12] pin */ -#define AFIO_EXTICR4_EXTI12_PC_Pos (1U) -#define AFIO_EXTICR4_EXTI12_PC_Msk (0x1U << AFIO_EXTICR4_EXTI12_PC_Pos) /*!< 0x00000002 */ -#define AFIO_EXTICR4_EXTI12_PC AFIO_EXTICR4_EXTI12_PC_Msk /*!< PC[12] pin */ -#define AFIO_EXTICR4_EXTI12_PD_Pos (0U) -#define AFIO_EXTICR4_EXTI12_PD_Msk (0x3U << AFIO_EXTICR4_EXTI12_PD_Pos) /*!< 0x00000003 */ -#define AFIO_EXTICR4_EXTI12_PD AFIO_EXTICR4_EXTI12_PD_Msk /*!< PD[12] pin */ -#define AFIO_EXTICR4_EXTI12_PE_Pos (2U) -#define AFIO_EXTICR4_EXTI12_PE_Msk (0x1U << AFIO_EXTICR4_EXTI12_PE_Pos) /*!< 0x00000004 */ -#define AFIO_EXTICR4_EXTI12_PE AFIO_EXTICR4_EXTI12_PE_Msk /*!< PE[12] pin */ -#define AFIO_EXTICR4_EXTI12_PF_Pos (0U) -#define AFIO_EXTICR4_EXTI12_PF_Msk (0x5U << AFIO_EXTICR4_EXTI12_PF_Pos) /*!< 0x00000005 */ -#define AFIO_EXTICR4_EXTI12_PF AFIO_EXTICR4_EXTI12_PF_Msk /*!< PF[12] pin */ -#define AFIO_EXTICR4_EXTI12_PG_Pos (1U) -#define AFIO_EXTICR4_EXTI12_PG_Msk (0x3U << AFIO_EXTICR4_EXTI12_PG_Pos) /*!< 0x00000006 */ -#define AFIO_EXTICR4_EXTI12_PG AFIO_EXTICR4_EXTI12_PG_Msk /*!< PG[12] pin */ - -/* EXTI13 configuration */ -#define AFIO_EXTICR4_EXTI13_PA 0x00000000U /*!< PA[13] pin */ -#define AFIO_EXTICR4_EXTI13_PB_Pos (4U) -#define AFIO_EXTICR4_EXTI13_PB_Msk (0x1U << AFIO_EXTICR4_EXTI13_PB_Pos) /*!< 0x00000010 */ -#define AFIO_EXTICR4_EXTI13_PB AFIO_EXTICR4_EXTI13_PB_Msk /*!< PB[13] pin */ -#define AFIO_EXTICR4_EXTI13_PC_Pos (5U) -#define AFIO_EXTICR4_EXTI13_PC_Msk (0x1U << AFIO_EXTICR4_EXTI13_PC_Pos) /*!< 0x00000020 */ -#define AFIO_EXTICR4_EXTI13_PC AFIO_EXTICR4_EXTI13_PC_Msk /*!< PC[13] pin */ -#define AFIO_EXTICR4_EXTI13_PD_Pos (4U) -#define AFIO_EXTICR4_EXTI13_PD_Msk (0x3U << AFIO_EXTICR4_EXTI13_PD_Pos) /*!< 0x00000030 */ -#define AFIO_EXTICR4_EXTI13_PD AFIO_EXTICR4_EXTI13_PD_Msk /*!< PD[13] pin */ -#define AFIO_EXTICR4_EXTI13_PE_Pos (6U) -#define AFIO_EXTICR4_EXTI13_PE_Msk (0x1U << AFIO_EXTICR4_EXTI13_PE_Pos) /*!< 0x00000040 */ -#define AFIO_EXTICR4_EXTI13_PE AFIO_EXTICR4_EXTI13_PE_Msk /*!< PE[13] pin */ -#define AFIO_EXTICR4_EXTI13_PF_Pos (4U) -#define AFIO_EXTICR4_EXTI13_PF_Msk (0x5U << AFIO_EXTICR4_EXTI13_PF_Pos) /*!< 0x00000050 */ -#define AFIO_EXTICR4_EXTI13_PF AFIO_EXTICR4_EXTI13_PF_Msk /*!< PF[13] pin */ -#define AFIO_EXTICR4_EXTI13_PG_Pos (5U) -#define AFIO_EXTICR4_EXTI13_PG_Msk (0x3U << AFIO_EXTICR4_EXTI13_PG_Pos) /*!< 0x00000060 */ -#define AFIO_EXTICR4_EXTI13_PG AFIO_EXTICR4_EXTI13_PG_Msk /*!< PG[13] pin */ - -/*!< EXTI14 configuration */ -#define AFIO_EXTICR4_EXTI14_PA 0x00000000U /*!< PA[14] pin */ -#define AFIO_EXTICR4_EXTI14_PB_Pos (8U) -#define AFIO_EXTICR4_EXTI14_PB_Msk (0x1U << AFIO_EXTICR4_EXTI14_PB_Pos) /*!< 0x00000100 */ -#define AFIO_EXTICR4_EXTI14_PB AFIO_EXTICR4_EXTI14_PB_Msk /*!< PB[14] pin */ -#define AFIO_EXTICR4_EXTI14_PC_Pos (9U) -#define AFIO_EXTICR4_EXTI14_PC_Msk (0x1U << AFIO_EXTICR4_EXTI14_PC_Pos) /*!< 0x00000200 */ -#define AFIO_EXTICR4_EXTI14_PC AFIO_EXTICR4_EXTI14_PC_Msk /*!< PC[14] pin */ -#define AFIO_EXTICR4_EXTI14_PD_Pos (8U) -#define AFIO_EXTICR4_EXTI14_PD_Msk (0x3U << AFIO_EXTICR4_EXTI14_PD_Pos) /*!< 0x00000300 */ -#define AFIO_EXTICR4_EXTI14_PD AFIO_EXTICR4_EXTI14_PD_Msk /*!< PD[14] pin */ -#define AFIO_EXTICR4_EXTI14_PE_Pos (10U) -#define AFIO_EXTICR4_EXTI14_PE_Msk (0x1U << AFIO_EXTICR4_EXTI14_PE_Pos) /*!< 0x00000400 */ -#define AFIO_EXTICR4_EXTI14_PE AFIO_EXTICR4_EXTI14_PE_Msk /*!< PE[14] pin */ -#define AFIO_EXTICR4_EXTI14_PF_Pos (8U) -#define AFIO_EXTICR4_EXTI14_PF_Msk (0x5U << AFIO_EXTICR4_EXTI14_PF_Pos) /*!< 0x00000500 */ -#define AFIO_EXTICR4_EXTI14_PF AFIO_EXTICR4_EXTI14_PF_Msk /*!< PF[14] pin */ -#define AFIO_EXTICR4_EXTI14_PG_Pos (9U) -#define AFIO_EXTICR4_EXTI14_PG_Msk (0x3U << AFIO_EXTICR4_EXTI14_PG_Pos) /*!< 0x00000600 */ -#define AFIO_EXTICR4_EXTI14_PG AFIO_EXTICR4_EXTI14_PG_Msk /*!< PG[14] pin */ - -/*!< EXTI15 configuration */ -#define AFIO_EXTICR4_EXTI15_PA 0x00000000U /*!< PA[15] pin */ -#define AFIO_EXTICR4_EXTI15_PB_Pos (12U) -#define AFIO_EXTICR4_EXTI15_PB_Msk (0x1U << AFIO_EXTICR4_EXTI15_PB_Pos) /*!< 0x00001000 */ -#define AFIO_EXTICR4_EXTI15_PB AFIO_EXTICR4_EXTI15_PB_Msk /*!< PB[15] pin */ -#define AFIO_EXTICR4_EXTI15_PC_Pos (13U) -#define AFIO_EXTICR4_EXTI15_PC_Msk (0x1U << AFIO_EXTICR4_EXTI15_PC_Pos) /*!< 0x00002000 */ -#define AFIO_EXTICR4_EXTI15_PC AFIO_EXTICR4_EXTI15_PC_Msk /*!< PC[15] pin */ -#define AFIO_EXTICR4_EXTI15_PD_Pos (12U) -#define AFIO_EXTICR4_EXTI15_PD_Msk (0x3U << AFIO_EXTICR4_EXTI15_PD_Pos) /*!< 0x00003000 */ -#define AFIO_EXTICR4_EXTI15_PD AFIO_EXTICR4_EXTI15_PD_Msk /*!< PD[15] pin */ -#define AFIO_EXTICR4_EXTI15_PE_Pos (14U) -#define AFIO_EXTICR4_EXTI15_PE_Msk (0x1U << AFIO_EXTICR4_EXTI15_PE_Pos) /*!< 0x00004000 */ -#define AFIO_EXTICR4_EXTI15_PE AFIO_EXTICR4_EXTI15_PE_Msk /*!< PE[15] pin */ -#define AFIO_EXTICR4_EXTI15_PF_Pos (12U) -#define AFIO_EXTICR4_EXTI15_PF_Msk (0x5U << AFIO_EXTICR4_EXTI15_PF_Pos) /*!< 0x00005000 */ -#define AFIO_EXTICR4_EXTI15_PF AFIO_EXTICR4_EXTI15_PF_Msk /*!< PF[15] pin */ -#define AFIO_EXTICR4_EXTI15_PG_Pos (13U) -#define AFIO_EXTICR4_EXTI15_PG_Msk (0x3U << AFIO_EXTICR4_EXTI15_PG_Pos) /*!< 0x00006000 */ -#define AFIO_EXTICR4_EXTI15_PG AFIO_EXTICR4_EXTI15_PG_Msk /*!< PG[15] pin */ - -/****************** Bit definition for AFIO_MAPR2 register ******************/ - - - -/******************************************************************************/ -/* */ -/* External Interrupt/Event Controller */ -/* */ -/******************************************************************************/ - -/******************* Bit definition for EXTI_IMR register *******************/ -#define EXTI_IMR_MR0_Pos (0U) -#define EXTI_IMR_MR0_Msk (0x1U << EXTI_IMR_MR0_Pos) /*!< 0x00000001 */ -#define EXTI_IMR_MR0 EXTI_IMR_MR0_Msk /*!< Interrupt Mask on line 0 */ -#define EXTI_IMR_MR1_Pos (1U) -#define EXTI_IMR_MR1_Msk (0x1U << EXTI_IMR_MR1_Pos) /*!< 0x00000002 */ -#define EXTI_IMR_MR1 EXTI_IMR_MR1_Msk /*!< Interrupt Mask on line 1 */ -#define EXTI_IMR_MR2_Pos (2U) -#define EXTI_IMR_MR2_Msk (0x1U << EXTI_IMR_MR2_Pos) /*!< 0x00000004 */ -#define EXTI_IMR_MR2 EXTI_IMR_MR2_Msk /*!< Interrupt Mask on line 2 */ -#define EXTI_IMR_MR3_Pos (3U) -#define EXTI_IMR_MR3_Msk (0x1U << EXTI_IMR_MR3_Pos) /*!< 0x00000008 */ -#define EXTI_IMR_MR3 EXTI_IMR_MR3_Msk /*!< Interrupt Mask on line 3 */ -#define EXTI_IMR_MR4_Pos (4U) -#define EXTI_IMR_MR4_Msk (0x1U << EXTI_IMR_MR4_Pos) /*!< 0x00000010 */ -#define EXTI_IMR_MR4 EXTI_IMR_MR4_Msk /*!< Interrupt Mask on line 4 */ -#define EXTI_IMR_MR5_Pos (5U) -#define EXTI_IMR_MR5_Msk (0x1U << EXTI_IMR_MR5_Pos) /*!< 0x00000020 */ -#define EXTI_IMR_MR5 EXTI_IMR_MR5_Msk /*!< Interrupt Mask on line 5 */ -#define EXTI_IMR_MR6_Pos (6U) -#define EXTI_IMR_MR6_Msk (0x1U << EXTI_IMR_MR6_Pos) /*!< 0x00000040 */ -#define EXTI_IMR_MR6 EXTI_IMR_MR6_Msk /*!< Interrupt Mask on line 6 */ -#define EXTI_IMR_MR7_Pos (7U) -#define EXTI_IMR_MR7_Msk (0x1U << EXTI_IMR_MR7_Pos) /*!< 0x00000080 */ -#define EXTI_IMR_MR7 EXTI_IMR_MR7_Msk /*!< Interrupt Mask on line 7 */ -#define EXTI_IMR_MR8_Pos (8U) -#define EXTI_IMR_MR8_Msk (0x1U << EXTI_IMR_MR8_Pos) /*!< 0x00000100 */ -#define EXTI_IMR_MR8 EXTI_IMR_MR8_Msk /*!< Interrupt Mask on line 8 */ -#define EXTI_IMR_MR9_Pos (9U) -#define EXTI_IMR_MR9_Msk (0x1U << EXTI_IMR_MR9_Pos) /*!< 0x00000200 */ -#define EXTI_IMR_MR9 EXTI_IMR_MR9_Msk /*!< Interrupt Mask on line 9 */ -#define EXTI_IMR_MR10_Pos (10U) -#define EXTI_IMR_MR10_Msk (0x1U << EXTI_IMR_MR10_Pos) /*!< 0x00000400 */ -#define EXTI_IMR_MR10 EXTI_IMR_MR10_Msk /*!< Interrupt Mask on line 10 */ -#define EXTI_IMR_MR11_Pos (11U) -#define EXTI_IMR_MR11_Msk (0x1U << EXTI_IMR_MR11_Pos) /*!< 0x00000800 */ -#define EXTI_IMR_MR11 EXTI_IMR_MR11_Msk /*!< Interrupt Mask on line 11 */ -#define EXTI_IMR_MR12_Pos (12U) -#define EXTI_IMR_MR12_Msk (0x1U << EXTI_IMR_MR12_Pos) /*!< 0x00001000 */ -#define EXTI_IMR_MR12 EXTI_IMR_MR12_Msk /*!< Interrupt Mask on line 12 */ -#define EXTI_IMR_MR13_Pos (13U) -#define EXTI_IMR_MR13_Msk (0x1U << EXTI_IMR_MR13_Pos) /*!< 0x00002000 */ -#define EXTI_IMR_MR13 EXTI_IMR_MR13_Msk /*!< Interrupt Mask on line 13 */ -#define EXTI_IMR_MR14_Pos (14U) -#define EXTI_IMR_MR14_Msk (0x1U << EXTI_IMR_MR14_Pos) /*!< 0x00004000 */ -#define EXTI_IMR_MR14 EXTI_IMR_MR14_Msk /*!< Interrupt Mask on line 14 */ -#define EXTI_IMR_MR15_Pos (15U) -#define EXTI_IMR_MR15_Msk (0x1U << EXTI_IMR_MR15_Pos) /*!< 0x00008000 */ -#define EXTI_IMR_MR15 EXTI_IMR_MR15_Msk /*!< Interrupt Mask on line 15 */ -#define EXTI_IMR_MR16_Pos (16U) -#define EXTI_IMR_MR16_Msk (0x1U << EXTI_IMR_MR16_Pos) /*!< 0x00010000 */ -#define EXTI_IMR_MR16 EXTI_IMR_MR16_Msk /*!< Interrupt Mask on line 16 */ -#define EXTI_IMR_MR17_Pos (17U) -#define EXTI_IMR_MR17_Msk (0x1U << EXTI_IMR_MR17_Pos) /*!< 0x00020000 */ -#define EXTI_IMR_MR17 EXTI_IMR_MR17_Msk /*!< Interrupt Mask on line 17 */ -#define EXTI_IMR_MR18_Pos (18U) -#define EXTI_IMR_MR18_Msk (0x1U << EXTI_IMR_MR18_Pos) /*!< 0x00040000 */ -#define EXTI_IMR_MR18 EXTI_IMR_MR18_Msk /*!< Interrupt Mask on line 18 */ - -/* References Defines */ -#define EXTI_IMR_IM0 EXTI_IMR_MR0 -#define EXTI_IMR_IM1 EXTI_IMR_MR1 -#define EXTI_IMR_IM2 EXTI_IMR_MR2 -#define EXTI_IMR_IM3 EXTI_IMR_MR3 -#define EXTI_IMR_IM4 EXTI_IMR_MR4 -#define EXTI_IMR_IM5 EXTI_IMR_MR5 -#define EXTI_IMR_IM6 EXTI_IMR_MR6 -#define EXTI_IMR_IM7 EXTI_IMR_MR7 -#define EXTI_IMR_IM8 EXTI_IMR_MR8 -#define EXTI_IMR_IM9 EXTI_IMR_MR9 -#define EXTI_IMR_IM10 EXTI_IMR_MR10 -#define EXTI_IMR_IM11 EXTI_IMR_MR11 -#define EXTI_IMR_IM12 EXTI_IMR_MR12 -#define EXTI_IMR_IM13 EXTI_IMR_MR13 -#define EXTI_IMR_IM14 EXTI_IMR_MR14 -#define EXTI_IMR_IM15 EXTI_IMR_MR15 -#define EXTI_IMR_IM16 EXTI_IMR_MR16 -#define EXTI_IMR_IM17 EXTI_IMR_MR17 -#define EXTI_IMR_IM18 EXTI_IMR_MR18 -#define EXTI_IMR_IM 0x0007FFFFU /*!< Interrupt Mask All */ - -/******************* Bit definition for EXTI_EMR register *******************/ -#define EXTI_EMR_MR0_Pos (0U) -#define EXTI_EMR_MR0_Msk (0x1U << EXTI_EMR_MR0_Pos) /*!< 0x00000001 */ -#define EXTI_EMR_MR0 EXTI_EMR_MR0_Msk /*!< Event Mask on line 0 */ -#define EXTI_EMR_MR1_Pos (1U) -#define EXTI_EMR_MR1_Msk (0x1U << EXTI_EMR_MR1_Pos) /*!< 0x00000002 */ -#define EXTI_EMR_MR1 EXTI_EMR_MR1_Msk /*!< Event Mask on line 1 */ -#define EXTI_EMR_MR2_Pos (2U) -#define EXTI_EMR_MR2_Msk (0x1U << EXTI_EMR_MR2_Pos) /*!< 0x00000004 */ -#define EXTI_EMR_MR2 EXTI_EMR_MR2_Msk /*!< Event Mask on line 2 */ -#define EXTI_EMR_MR3_Pos (3U) -#define EXTI_EMR_MR3_Msk (0x1U << EXTI_EMR_MR3_Pos) /*!< 0x00000008 */ -#define EXTI_EMR_MR3 EXTI_EMR_MR3_Msk /*!< Event Mask on line 3 */ -#define EXTI_EMR_MR4_Pos (4U) -#define EXTI_EMR_MR4_Msk (0x1U << EXTI_EMR_MR4_Pos) /*!< 0x00000010 */ -#define EXTI_EMR_MR4 EXTI_EMR_MR4_Msk /*!< Event Mask on line 4 */ -#define EXTI_EMR_MR5_Pos (5U) -#define EXTI_EMR_MR5_Msk (0x1U << EXTI_EMR_MR5_Pos) /*!< 0x00000020 */ -#define EXTI_EMR_MR5 EXTI_EMR_MR5_Msk /*!< Event Mask on line 5 */ -#define EXTI_EMR_MR6_Pos (6U) -#define EXTI_EMR_MR6_Msk (0x1U << EXTI_EMR_MR6_Pos) /*!< 0x00000040 */ -#define EXTI_EMR_MR6 EXTI_EMR_MR6_Msk /*!< Event Mask on line 6 */ -#define EXTI_EMR_MR7_Pos (7U) -#define EXTI_EMR_MR7_Msk (0x1U << EXTI_EMR_MR7_Pos) /*!< 0x00000080 */ -#define EXTI_EMR_MR7 EXTI_EMR_MR7_Msk /*!< Event Mask on line 7 */ -#define EXTI_EMR_MR8_Pos (8U) -#define EXTI_EMR_MR8_Msk (0x1U << EXTI_EMR_MR8_Pos) /*!< 0x00000100 */ -#define EXTI_EMR_MR8 EXTI_EMR_MR8_Msk /*!< Event Mask on line 8 */ -#define EXTI_EMR_MR9_Pos (9U) -#define EXTI_EMR_MR9_Msk (0x1U << EXTI_EMR_MR9_Pos) /*!< 0x00000200 */ -#define EXTI_EMR_MR9 EXTI_EMR_MR9_Msk /*!< Event Mask on line 9 */ -#define EXTI_EMR_MR10_Pos (10U) -#define EXTI_EMR_MR10_Msk (0x1U << EXTI_EMR_MR10_Pos) /*!< 0x00000400 */ -#define EXTI_EMR_MR10 EXTI_EMR_MR10_Msk /*!< Event Mask on line 10 */ -#define EXTI_EMR_MR11_Pos (11U) -#define EXTI_EMR_MR11_Msk (0x1U << EXTI_EMR_MR11_Pos) /*!< 0x00000800 */ -#define EXTI_EMR_MR11 EXTI_EMR_MR11_Msk /*!< Event Mask on line 11 */ -#define EXTI_EMR_MR12_Pos (12U) -#define EXTI_EMR_MR12_Msk (0x1U << EXTI_EMR_MR12_Pos) /*!< 0x00001000 */ -#define EXTI_EMR_MR12 EXTI_EMR_MR12_Msk /*!< Event Mask on line 12 */ -#define EXTI_EMR_MR13_Pos (13U) -#define EXTI_EMR_MR13_Msk (0x1U << EXTI_EMR_MR13_Pos) /*!< 0x00002000 */ -#define EXTI_EMR_MR13 EXTI_EMR_MR13_Msk /*!< Event Mask on line 13 */ -#define EXTI_EMR_MR14_Pos (14U) -#define EXTI_EMR_MR14_Msk (0x1U << EXTI_EMR_MR14_Pos) /*!< 0x00004000 */ -#define EXTI_EMR_MR14 EXTI_EMR_MR14_Msk /*!< Event Mask on line 14 */ -#define EXTI_EMR_MR15_Pos (15U) -#define EXTI_EMR_MR15_Msk (0x1U << EXTI_EMR_MR15_Pos) /*!< 0x00008000 */ -#define EXTI_EMR_MR15 EXTI_EMR_MR15_Msk /*!< Event Mask on line 15 */ -#define EXTI_EMR_MR16_Pos (16U) -#define EXTI_EMR_MR16_Msk (0x1U << EXTI_EMR_MR16_Pos) /*!< 0x00010000 */ -#define EXTI_EMR_MR16 EXTI_EMR_MR16_Msk /*!< Event Mask on line 16 */ -#define EXTI_EMR_MR17_Pos (17U) -#define EXTI_EMR_MR17_Msk (0x1U << EXTI_EMR_MR17_Pos) /*!< 0x00020000 */ -#define EXTI_EMR_MR17 EXTI_EMR_MR17_Msk /*!< Event Mask on line 17 */ -#define EXTI_EMR_MR18_Pos (18U) -#define EXTI_EMR_MR18_Msk (0x1U << EXTI_EMR_MR18_Pos) /*!< 0x00040000 */ -#define EXTI_EMR_MR18 EXTI_EMR_MR18_Msk /*!< Event Mask on line 18 */ - -/* References Defines */ -#define EXTI_EMR_EM0 EXTI_EMR_MR0 -#define EXTI_EMR_EM1 EXTI_EMR_MR1 -#define EXTI_EMR_EM2 EXTI_EMR_MR2 -#define EXTI_EMR_EM3 EXTI_EMR_MR3 -#define EXTI_EMR_EM4 EXTI_EMR_MR4 -#define EXTI_EMR_EM5 EXTI_EMR_MR5 -#define EXTI_EMR_EM6 EXTI_EMR_MR6 -#define EXTI_EMR_EM7 EXTI_EMR_MR7 -#define EXTI_EMR_EM8 EXTI_EMR_MR8 -#define EXTI_EMR_EM9 EXTI_EMR_MR9 -#define EXTI_EMR_EM10 EXTI_EMR_MR10 -#define EXTI_EMR_EM11 EXTI_EMR_MR11 -#define EXTI_EMR_EM12 EXTI_EMR_MR12 -#define EXTI_EMR_EM13 EXTI_EMR_MR13 -#define EXTI_EMR_EM14 EXTI_EMR_MR14 -#define EXTI_EMR_EM15 EXTI_EMR_MR15 -#define EXTI_EMR_EM16 EXTI_EMR_MR16 -#define EXTI_EMR_EM17 EXTI_EMR_MR17 -#define EXTI_EMR_EM18 EXTI_EMR_MR18 - -/****************** Bit definition for EXTI_RTSR register *******************/ -#define EXTI_RTSR_TR0_Pos (0U) -#define EXTI_RTSR_TR0_Msk (0x1U << EXTI_RTSR_TR0_Pos) /*!< 0x00000001 */ -#define EXTI_RTSR_TR0 EXTI_RTSR_TR0_Msk /*!< Rising trigger event configuration bit of line 0 */ -#define EXTI_RTSR_TR1_Pos (1U) -#define EXTI_RTSR_TR1_Msk (0x1U << EXTI_RTSR_TR1_Pos) /*!< 0x00000002 */ -#define EXTI_RTSR_TR1 EXTI_RTSR_TR1_Msk /*!< Rising trigger event configuration bit of line 1 */ -#define EXTI_RTSR_TR2_Pos (2U) -#define EXTI_RTSR_TR2_Msk (0x1U << EXTI_RTSR_TR2_Pos) /*!< 0x00000004 */ -#define EXTI_RTSR_TR2 EXTI_RTSR_TR2_Msk /*!< Rising trigger event configuration bit of line 2 */ -#define EXTI_RTSR_TR3_Pos (3U) -#define EXTI_RTSR_TR3_Msk (0x1U << EXTI_RTSR_TR3_Pos) /*!< 0x00000008 */ -#define EXTI_RTSR_TR3 EXTI_RTSR_TR3_Msk /*!< Rising trigger event configuration bit of line 3 */ -#define EXTI_RTSR_TR4_Pos (4U) -#define EXTI_RTSR_TR4_Msk (0x1U << EXTI_RTSR_TR4_Pos) /*!< 0x00000010 */ -#define EXTI_RTSR_TR4 EXTI_RTSR_TR4_Msk /*!< Rising trigger event configuration bit of line 4 */ -#define EXTI_RTSR_TR5_Pos (5U) -#define EXTI_RTSR_TR5_Msk (0x1U << EXTI_RTSR_TR5_Pos) /*!< 0x00000020 */ -#define EXTI_RTSR_TR5 EXTI_RTSR_TR5_Msk /*!< Rising trigger event configuration bit of line 5 */ -#define EXTI_RTSR_TR6_Pos (6U) -#define EXTI_RTSR_TR6_Msk (0x1U << EXTI_RTSR_TR6_Pos) /*!< 0x00000040 */ -#define EXTI_RTSR_TR6 EXTI_RTSR_TR6_Msk /*!< Rising trigger event configuration bit of line 6 */ -#define EXTI_RTSR_TR7_Pos (7U) -#define EXTI_RTSR_TR7_Msk (0x1U << EXTI_RTSR_TR7_Pos) /*!< 0x00000080 */ -#define EXTI_RTSR_TR7 EXTI_RTSR_TR7_Msk /*!< Rising trigger event configuration bit of line 7 */ -#define EXTI_RTSR_TR8_Pos (8U) -#define EXTI_RTSR_TR8_Msk (0x1U << EXTI_RTSR_TR8_Pos) /*!< 0x00000100 */ -#define EXTI_RTSR_TR8 EXTI_RTSR_TR8_Msk /*!< Rising trigger event configuration bit of line 8 */ -#define EXTI_RTSR_TR9_Pos (9U) -#define EXTI_RTSR_TR9_Msk (0x1U << EXTI_RTSR_TR9_Pos) /*!< 0x00000200 */ -#define EXTI_RTSR_TR9 EXTI_RTSR_TR9_Msk /*!< Rising trigger event configuration bit of line 9 */ -#define EXTI_RTSR_TR10_Pos (10U) -#define EXTI_RTSR_TR10_Msk (0x1U << EXTI_RTSR_TR10_Pos) /*!< 0x00000400 */ -#define EXTI_RTSR_TR10 EXTI_RTSR_TR10_Msk /*!< Rising trigger event configuration bit of line 10 */ -#define EXTI_RTSR_TR11_Pos (11U) -#define EXTI_RTSR_TR11_Msk (0x1U << EXTI_RTSR_TR11_Pos) /*!< 0x00000800 */ -#define EXTI_RTSR_TR11 EXTI_RTSR_TR11_Msk /*!< Rising trigger event configuration bit of line 11 */ -#define EXTI_RTSR_TR12_Pos (12U) -#define EXTI_RTSR_TR12_Msk (0x1U << EXTI_RTSR_TR12_Pos) /*!< 0x00001000 */ -#define EXTI_RTSR_TR12 EXTI_RTSR_TR12_Msk /*!< Rising trigger event configuration bit of line 12 */ -#define EXTI_RTSR_TR13_Pos (13U) -#define EXTI_RTSR_TR13_Msk (0x1U << EXTI_RTSR_TR13_Pos) /*!< 0x00002000 */ -#define EXTI_RTSR_TR13 EXTI_RTSR_TR13_Msk /*!< Rising trigger event configuration bit of line 13 */ -#define EXTI_RTSR_TR14_Pos (14U) -#define EXTI_RTSR_TR14_Msk (0x1U << EXTI_RTSR_TR14_Pos) /*!< 0x00004000 */ -#define EXTI_RTSR_TR14 EXTI_RTSR_TR14_Msk /*!< Rising trigger event configuration bit of line 14 */ -#define EXTI_RTSR_TR15_Pos (15U) -#define EXTI_RTSR_TR15_Msk (0x1U << EXTI_RTSR_TR15_Pos) /*!< 0x00008000 */ -#define EXTI_RTSR_TR15 EXTI_RTSR_TR15_Msk /*!< Rising trigger event configuration bit of line 15 */ -#define EXTI_RTSR_TR16_Pos (16U) -#define EXTI_RTSR_TR16_Msk (0x1U << EXTI_RTSR_TR16_Pos) /*!< 0x00010000 */ -#define EXTI_RTSR_TR16 EXTI_RTSR_TR16_Msk /*!< Rising trigger event configuration bit of line 16 */ -#define EXTI_RTSR_TR17_Pos (17U) -#define EXTI_RTSR_TR17_Msk (0x1U << EXTI_RTSR_TR17_Pos) /*!< 0x00020000 */ -#define EXTI_RTSR_TR17 EXTI_RTSR_TR17_Msk /*!< Rising trigger event configuration bit of line 17 */ -#define EXTI_RTSR_TR18_Pos (18U) -#define EXTI_RTSR_TR18_Msk (0x1U << EXTI_RTSR_TR18_Pos) /*!< 0x00040000 */ -#define EXTI_RTSR_TR18 EXTI_RTSR_TR18_Msk /*!< Rising trigger event configuration bit of line 18 */ - -/* References Defines */ -#define EXTI_RTSR_RT0 EXTI_RTSR_TR0 -#define EXTI_RTSR_RT1 EXTI_RTSR_TR1 -#define EXTI_RTSR_RT2 EXTI_RTSR_TR2 -#define EXTI_RTSR_RT3 EXTI_RTSR_TR3 -#define EXTI_RTSR_RT4 EXTI_RTSR_TR4 -#define EXTI_RTSR_RT5 EXTI_RTSR_TR5 -#define EXTI_RTSR_RT6 EXTI_RTSR_TR6 -#define EXTI_RTSR_RT7 EXTI_RTSR_TR7 -#define EXTI_RTSR_RT8 EXTI_RTSR_TR8 -#define EXTI_RTSR_RT9 EXTI_RTSR_TR9 -#define EXTI_RTSR_RT10 EXTI_RTSR_TR10 -#define EXTI_RTSR_RT11 EXTI_RTSR_TR11 -#define EXTI_RTSR_RT12 EXTI_RTSR_TR12 -#define EXTI_RTSR_RT13 EXTI_RTSR_TR13 -#define EXTI_RTSR_RT14 EXTI_RTSR_TR14 -#define EXTI_RTSR_RT15 EXTI_RTSR_TR15 -#define EXTI_RTSR_RT16 EXTI_RTSR_TR16 -#define EXTI_RTSR_RT17 EXTI_RTSR_TR17 -#define EXTI_RTSR_RT18 EXTI_RTSR_TR18 - -/****************** Bit definition for EXTI_FTSR register *******************/ -#define EXTI_FTSR_TR0_Pos (0U) -#define EXTI_FTSR_TR0_Msk (0x1U << EXTI_FTSR_TR0_Pos) /*!< 0x00000001 */ -#define EXTI_FTSR_TR0 EXTI_FTSR_TR0_Msk /*!< Falling trigger event configuration bit of line 0 */ -#define EXTI_FTSR_TR1_Pos (1U) -#define EXTI_FTSR_TR1_Msk (0x1U << EXTI_FTSR_TR1_Pos) /*!< 0x00000002 */ -#define EXTI_FTSR_TR1 EXTI_FTSR_TR1_Msk /*!< Falling trigger event configuration bit of line 1 */ -#define EXTI_FTSR_TR2_Pos (2U) -#define EXTI_FTSR_TR2_Msk (0x1U << EXTI_FTSR_TR2_Pos) /*!< 0x00000004 */ -#define EXTI_FTSR_TR2 EXTI_FTSR_TR2_Msk /*!< Falling trigger event configuration bit of line 2 */ -#define EXTI_FTSR_TR3_Pos (3U) -#define EXTI_FTSR_TR3_Msk (0x1U << EXTI_FTSR_TR3_Pos) /*!< 0x00000008 */ -#define EXTI_FTSR_TR3 EXTI_FTSR_TR3_Msk /*!< Falling trigger event configuration bit of line 3 */ -#define EXTI_FTSR_TR4_Pos (4U) -#define EXTI_FTSR_TR4_Msk (0x1U << EXTI_FTSR_TR4_Pos) /*!< 0x00000010 */ -#define EXTI_FTSR_TR4 EXTI_FTSR_TR4_Msk /*!< Falling trigger event configuration bit of line 4 */ -#define EXTI_FTSR_TR5_Pos (5U) -#define EXTI_FTSR_TR5_Msk (0x1U << EXTI_FTSR_TR5_Pos) /*!< 0x00000020 */ -#define EXTI_FTSR_TR5 EXTI_FTSR_TR5_Msk /*!< Falling trigger event configuration bit of line 5 */ -#define EXTI_FTSR_TR6_Pos (6U) -#define EXTI_FTSR_TR6_Msk (0x1U << EXTI_FTSR_TR6_Pos) /*!< 0x00000040 */ -#define EXTI_FTSR_TR6 EXTI_FTSR_TR6_Msk /*!< Falling trigger event configuration bit of line 6 */ -#define EXTI_FTSR_TR7_Pos (7U) -#define EXTI_FTSR_TR7_Msk (0x1U << EXTI_FTSR_TR7_Pos) /*!< 0x00000080 */ -#define EXTI_FTSR_TR7 EXTI_FTSR_TR7_Msk /*!< Falling trigger event configuration bit of line 7 */ -#define EXTI_FTSR_TR8_Pos (8U) -#define EXTI_FTSR_TR8_Msk (0x1U << EXTI_FTSR_TR8_Pos) /*!< 0x00000100 */ -#define EXTI_FTSR_TR8 EXTI_FTSR_TR8_Msk /*!< Falling trigger event configuration bit of line 8 */ -#define EXTI_FTSR_TR9_Pos (9U) -#define EXTI_FTSR_TR9_Msk (0x1U << EXTI_FTSR_TR9_Pos) /*!< 0x00000200 */ -#define EXTI_FTSR_TR9 EXTI_FTSR_TR9_Msk /*!< Falling trigger event configuration bit of line 9 */ -#define EXTI_FTSR_TR10_Pos (10U) -#define EXTI_FTSR_TR10_Msk (0x1U << EXTI_FTSR_TR10_Pos) /*!< 0x00000400 */ -#define EXTI_FTSR_TR10 EXTI_FTSR_TR10_Msk /*!< Falling trigger event configuration bit of line 10 */ -#define EXTI_FTSR_TR11_Pos (11U) -#define EXTI_FTSR_TR11_Msk (0x1U << EXTI_FTSR_TR11_Pos) /*!< 0x00000800 */ -#define EXTI_FTSR_TR11 EXTI_FTSR_TR11_Msk /*!< Falling trigger event configuration bit of line 11 */ -#define EXTI_FTSR_TR12_Pos (12U) -#define EXTI_FTSR_TR12_Msk (0x1U << EXTI_FTSR_TR12_Pos) /*!< 0x00001000 */ -#define EXTI_FTSR_TR12 EXTI_FTSR_TR12_Msk /*!< Falling trigger event configuration bit of line 12 */ -#define EXTI_FTSR_TR13_Pos (13U) -#define EXTI_FTSR_TR13_Msk (0x1U << EXTI_FTSR_TR13_Pos) /*!< 0x00002000 */ -#define EXTI_FTSR_TR13 EXTI_FTSR_TR13_Msk /*!< Falling trigger event configuration bit of line 13 */ -#define EXTI_FTSR_TR14_Pos (14U) -#define EXTI_FTSR_TR14_Msk (0x1U << EXTI_FTSR_TR14_Pos) /*!< 0x00004000 */ -#define EXTI_FTSR_TR14 EXTI_FTSR_TR14_Msk /*!< Falling trigger event configuration bit of line 14 */ -#define EXTI_FTSR_TR15_Pos (15U) -#define EXTI_FTSR_TR15_Msk (0x1U << EXTI_FTSR_TR15_Pos) /*!< 0x00008000 */ -#define EXTI_FTSR_TR15 EXTI_FTSR_TR15_Msk /*!< Falling trigger event configuration bit of line 15 */ -#define EXTI_FTSR_TR16_Pos (16U) -#define EXTI_FTSR_TR16_Msk (0x1U << EXTI_FTSR_TR16_Pos) /*!< 0x00010000 */ -#define EXTI_FTSR_TR16 EXTI_FTSR_TR16_Msk /*!< Falling trigger event configuration bit of line 16 */ -#define EXTI_FTSR_TR17_Pos (17U) -#define EXTI_FTSR_TR17_Msk (0x1U << EXTI_FTSR_TR17_Pos) /*!< 0x00020000 */ -#define EXTI_FTSR_TR17 EXTI_FTSR_TR17_Msk /*!< Falling trigger event configuration bit of line 17 */ -#define EXTI_FTSR_TR18_Pos (18U) -#define EXTI_FTSR_TR18_Msk (0x1U << EXTI_FTSR_TR18_Pos) /*!< 0x00040000 */ -#define EXTI_FTSR_TR18 EXTI_FTSR_TR18_Msk /*!< Falling trigger event configuration bit of line 18 */ - -/* References Defines */ -#define EXTI_FTSR_FT0 EXTI_FTSR_TR0 -#define EXTI_FTSR_FT1 EXTI_FTSR_TR1 -#define EXTI_FTSR_FT2 EXTI_FTSR_TR2 -#define EXTI_FTSR_FT3 EXTI_FTSR_TR3 -#define EXTI_FTSR_FT4 EXTI_FTSR_TR4 -#define EXTI_FTSR_FT5 EXTI_FTSR_TR5 -#define EXTI_FTSR_FT6 EXTI_FTSR_TR6 -#define EXTI_FTSR_FT7 EXTI_FTSR_TR7 -#define EXTI_FTSR_FT8 EXTI_FTSR_TR8 -#define EXTI_FTSR_FT9 EXTI_FTSR_TR9 -#define EXTI_FTSR_FT10 EXTI_FTSR_TR10 -#define EXTI_FTSR_FT11 EXTI_FTSR_TR11 -#define EXTI_FTSR_FT12 EXTI_FTSR_TR12 -#define EXTI_FTSR_FT13 EXTI_FTSR_TR13 -#define EXTI_FTSR_FT14 EXTI_FTSR_TR14 -#define EXTI_FTSR_FT15 EXTI_FTSR_TR15 -#define EXTI_FTSR_FT16 EXTI_FTSR_TR16 -#define EXTI_FTSR_FT17 EXTI_FTSR_TR17 -#define EXTI_FTSR_FT18 EXTI_FTSR_TR18 - -/****************** Bit definition for EXTI_SWIER register ******************/ -#define EXTI_SWIER_SWIER0_Pos (0U) -#define EXTI_SWIER_SWIER0_Msk (0x1U << EXTI_SWIER_SWIER0_Pos) /*!< 0x00000001 */ -#define EXTI_SWIER_SWIER0 EXTI_SWIER_SWIER0_Msk /*!< Software Interrupt on line 0 */ -#define EXTI_SWIER_SWIER1_Pos (1U) -#define EXTI_SWIER_SWIER1_Msk (0x1U << EXTI_SWIER_SWIER1_Pos) /*!< 0x00000002 */ -#define EXTI_SWIER_SWIER1 EXTI_SWIER_SWIER1_Msk /*!< Software Interrupt on line 1 */ -#define EXTI_SWIER_SWIER2_Pos (2U) -#define EXTI_SWIER_SWIER2_Msk (0x1U << EXTI_SWIER_SWIER2_Pos) /*!< 0x00000004 */ -#define EXTI_SWIER_SWIER2 EXTI_SWIER_SWIER2_Msk /*!< Software Interrupt on line 2 */ -#define EXTI_SWIER_SWIER3_Pos (3U) -#define EXTI_SWIER_SWIER3_Msk (0x1U << EXTI_SWIER_SWIER3_Pos) /*!< 0x00000008 */ -#define EXTI_SWIER_SWIER3 EXTI_SWIER_SWIER3_Msk /*!< Software Interrupt on line 3 */ -#define EXTI_SWIER_SWIER4_Pos (4U) -#define EXTI_SWIER_SWIER4_Msk (0x1U << EXTI_SWIER_SWIER4_Pos) /*!< 0x00000010 */ -#define EXTI_SWIER_SWIER4 EXTI_SWIER_SWIER4_Msk /*!< Software Interrupt on line 4 */ -#define EXTI_SWIER_SWIER5_Pos (5U) -#define EXTI_SWIER_SWIER5_Msk (0x1U << EXTI_SWIER_SWIER5_Pos) /*!< 0x00000020 */ -#define EXTI_SWIER_SWIER5 EXTI_SWIER_SWIER5_Msk /*!< Software Interrupt on line 5 */ -#define EXTI_SWIER_SWIER6_Pos (6U) -#define EXTI_SWIER_SWIER6_Msk (0x1U << EXTI_SWIER_SWIER6_Pos) /*!< 0x00000040 */ -#define EXTI_SWIER_SWIER6 EXTI_SWIER_SWIER6_Msk /*!< Software Interrupt on line 6 */ -#define EXTI_SWIER_SWIER7_Pos (7U) -#define EXTI_SWIER_SWIER7_Msk (0x1U << EXTI_SWIER_SWIER7_Pos) /*!< 0x00000080 */ -#define EXTI_SWIER_SWIER7 EXTI_SWIER_SWIER7_Msk /*!< Software Interrupt on line 7 */ -#define EXTI_SWIER_SWIER8_Pos (8U) -#define EXTI_SWIER_SWIER8_Msk (0x1U << EXTI_SWIER_SWIER8_Pos) /*!< 0x00000100 */ -#define EXTI_SWIER_SWIER8 EXTI_SWIER_SWIER8_Msk /*!< Software Interrupt on line 8 */ -#define EXTI_SWIER_SWIER9_Pos (9U) -#define EXTI_SWIER_SWIER9_Msk (0x1U << EXTI_SWIER_SWIER9_Pos) /*!< 0x00000200 */ -#define EXTI_SWIER_SWIER9 EXTI_SWIER_SWIER9_Msk /*!< Software Interrupt on line 9 */ -#define EXTI_SWIER_SWIER10_Pos (10U) -#define EXTI_SWIER_SWIER10_Msk (0x1U << EXTI_SWIER_SWIER10_Pos) /*!< 0x00000400 */ -#define EXTI_SWIER_SWIER10 EXTI_SWIER_SWIER10_Msk /*!< Software Interrupt on line 10 */ -#define EXTI_SWIER_SWIER11_Pos (11U) -#define EXTI_SWIER_SWIER11_Msk (0x1U << EXTI_SWIER_SWIER11_Pos) /*!< 0x00000800 */ -#define EXTI_SWIER_SWIER11 EXTI_SWIER_SWIER11_Msk /*!< Software Interrupt on line 11 */ -#define EXTI_SWIER_SWIER12_Pos (12U) -#define EXTI_SWIER_SWIER12_Msk (0x1U << EXTI_SWIER_SWIER12_Pos) /*!< 0x00001000 */ -#define EXTI_SWIER_SWIER12 EXTI_SWIER_SWIER12_Msk /*!< Software Interrupt on line 12 */ -#define EXTI_SWIER_SWIER13_Pos (13U) -#define EXTI_SWIER_SWIER13_Msk (0x1U << EXTI_SWIER_SWIER13_Pos) /*!< 0x00002000 */ -#define EXTI_SWIER_SWIER13 EXTI_SWIER_SWIER13_Msk /*!< Software Interrupt on line 13 */ -#define EXTI_SWIER_SWIER14_Pos (14U) -#define EXTI_SWIER_SWIER14_Msk (0x1U << EXTI_SWIER_SWIER14_Pos) /*!< 0x00004000 */ -#define EXTI_SWIER_SWIER14 EXTI_SWIER_SWIER14_Msk /*!< Software Interrupt on line 14 */ -#define EXTI_SWIER_SWIER15_Pos (15U) -#define EXTI_SWIER_SWIER15_Msk (0x1U << EXTI_SWIER_SWIER15_Pos) /*!< 0x00008000 */ -#define EXTI_SWIER_SWIER15 EXTI_SWIER_SWIER15_Msk /*!< Software Interrupt on line 15 */ -#define EXTI_SWIER_SWIER16_Pos (16U) -#define EXTI_SWIER_SWIER16_Msk (0x1U << EXTI_SWIER_SWIER16_Pos) /*!< 0x00010000 */ -#define EXTI_SWIER_SWIER16 EXTI_SWIER_SWIER16_Msk /*!< Software Interrupt on line 16 */ -#define EXTI_SWIER_SWIER17_Pos (17U) -#define EXTI_SWIER_SWIER17_Msk (0x1U << EXTI_SWIER_SWIER17_Pos) /*!< 0x00020000 */ -#define EXTI_SWIER_SWIER17 EXTI_SWIER_SWIER17_Msk /*!< Software Interrupt on line 17 */ -#define EXTI_SWIER_SWIER18_Pos (18U) -#define EXTI_SWIER_SWIER18_Msk (0x1U << EXTI_SWIER_SWIER18_Pos) /*!< 0x00040000 */ -#define EXTI_SWIER_SWIER18 EXTI_SWIER_SWIER18_Msk /*!< Software Interrupt on line 18 */ - -/* References Defines */ -#define EXTI_SWIER_SWI0 EXTI_SWIER_SWIER0 -#define EXTI_SWIER_SWI1 EXTI_SWIER_SWIER1 -#define EXTI_SWIER_SWI2 EXTI_SWIER_SWIER2 -#define EXTI_SWIER_SWI3 EXTI_SWIER_SWIER3 -#define EXTI_SWIER_SWI4 EXTI_SWIER_SWIER4 -#define EXTI_SWIER_SWI5 EXTI_SWIER_SWIER5 -#define EXTI_SWIER_SWI6 EXTI_SWIER_SWIER6 -#define EXTI_SWIER_SWI7 EXTI_SWIER_SWIER7 -#define EXTI_SWIER_SWI8 EXTI_SWIER_SWIER8 -#define EXTI_SWIER_SWI9 EXTI_SWIER_SWIER9 -#define EXTI_SWIER_SWI10 EXTI_SWIER_SWIER10 -#define EXTI_SWIER_SWI11 EXTI_SWIER_SWIER11 -#define EXTI_SWIER_SWI12 EXTI_SWIER_SWIER12 -#define EXTI_SWIER_SWI13 EXTI_SWIER_SWIER13 -#define EXTI_SWIER_SWI14 EXTI_SWIER_SWIER14 -#define EXTI_SWIER_SWI15 EXTI_SWIER_SWIER15 -#define EXTI_SWIER_SWI16 EXTI_SWIER_SWIER16 -#define EXTI_SWIER_SWI17 EXTI_SWIER_SWIER17 -#define EXTI_SWIER_SWI18 EXTI_SWIER_SWIER18 - -/******************* Bit definition for EXTI_PR register ********************/ -#define EXTI_PR_PR0_Pos (0U) -#define EXTI_PR_PR0_Msk (0x1U << EXTI_PR_PR0_Pos) /*!< 0x00000001 */ -#define EXTI_PR_PR0 EXTI_PR_PR0_Msk /*!< Pending bit for line 0 */ -#define EXTI_PR_PR1_Pos (1U) -#define EXTI_PR_PR1_Msk (0x1U << EXTI_PR_PR1_Pos) /*!< 0x00000002 */ -#define EXTI_PR_PR1 EXTI_PR_PR1_Msk /*!< Pending bit for line 1 */ -#define EXTI_PR_PR2_Pos (2U) -#define EXTI_PR_PR2_Msk (0x1U << EXTI_PR_PR2_Pos) /*!< 0x00000004 */ -#define EXTI_PR_PR2 EXTI_PR_PR2_Msk /*!< Pending bit for line 2 */ -#define EXTI_PR_PR3_Pos (3U) -#define EXTI_PR_PR3_Msk (0x1U << EXTI_PR_PR3_Pos) /*!< 0x00000008 */ -#define EXTI_PR_PR3 EXTI_PR_PR3_Msk /*!< Pending bit for line 3 */ -#define EXTI_PR_PR4_Pos (4U) -#define EXTI_PR_PR4_Msk (0x1U << EXTI_PR_PR4_Pos) /*!< 0x00000010 */ -#define EXTI_PR_PR4 EXTI_PR_PR4_Msk /*!< Pending bit for line 4 */ -#define EXTI_PR_PR5_Pos (5U) -#define EXTI_PR_PR5_Msk (0x1U << EXTI_PR_PR5_Pos) /*!< 0x00000020 */ -#define EXTI_PR_PR5 EXTI_PR_PR5_Msk /*!< Pending bit for line 5 */ -#define EXTI_PR_PR6_Pos (6U) -#define EXTI_PR_PR6_Msk (0x1U << EXTI_PR_PR6_Pos) /*!< 0x00000040 */ -#define EXTI_PR_PR6 EXTI_PR_PR6_Msk /*!< Pending bit for line 6 */ -#define EXTI_PR_PR7_Pos (7U) -#define EXTI_PR_PR7_Msk (0x1U << EXTI_PR_PR7_Pos) /*!< 0x00000080 */ -#define EXTI_PR_PR7 EXTI_PR_PR7_Msk /*!< Pending bit for line 7 */ -#define EXTI_PR_PR8_Pos (8U) -#define EXTI_PR_PR8_Msk (0x1U << EXTI_PR_PR8_Pos) /*!< 0x00000100 */ -#define EXTI_PR_PR8 EXTI_PR_PR8_Msk /*!< Pending bit for line 8 */ -#define EXTI_PR_PR9_Pos (9U) -#define EXTI_PR_PR9_Msk (0x1U << EXTI_PR_PR9_Pos) /*!< 0x00000200 */ -#define EXTI_PR_PR9 EXTI_PR_PR9_Msk /*!< Pending bit for line 9 */ -#define EXTI_PR_PR10_Pos (10U) -#define EXTI_PR_PR10_Msk (0x1U << EXTI_PR_PR10_Pos) /*!< 0x00000400 */ -#define EXTI_PR_PR10 EXTI_PR_PR10_Msk /*!< Pending bit for line 10 */ -#define EXTI_PR_PR11_Pos (11U) -#define EXTI_PR_PR11_Msk (0x1U << EXTI_PR_PR11_Pos) /*!< 0x00000800 */ -#define EXTI_PR_PR11 EXTI_PR_PR11_Msk /*!< Pending bit for line 11 */ -#define EXTI_PR_PR12_Pos (12U) -#define EXTI_PR_PR12_Msk (0x1U << EXTI_PR_PR12_Pos) /*!< 0x00001000 */ -#define EXTI_PR_PR12 EXTI_PR_PR12_Msk /*!< Pending bit for line 12 */ -#define EXTI_PR_PR13_Pos (13U) -#define EXTI_PR_PR13_Msk (0x1U << EXTI_PR_PR13_Pos) /*!< 0x00002000 */ -#define EXTI_PR_PR13 EXTI_PR_PR13_Msk /*!< Pending bit for line 13 */ -#define EXTI_PR_PR14_Pos (14U) -#define EXTI_PR_PR14_Msk (0x1U << EXTI_PR_PR14_Pos) /*!< 0x00004000 */ -#define EXTI_PR_PR14 EXTI_PR_PR14_Msk /*!< Pending bit for line 14 */ -#define EXTI_PR_PR15_Pos (15U) -#define EXTI_PR_PR15_Msk (0x1U << EXTI_PR_PR15_Pos) /*!< 0x00008000 */ -#define EXTI_PR_PR15 EXTI_PR_PR15_Msk /*!< Pending bit for line 15 */ -#define EXTI_PR_PR16_Pos (16U) -#define EXTI_PR_PR16_Msk (0x1U << EXTI_PR_PR16_Pos) /*!< 0x00010000 */ -#define EXTI_PR_PR16 EXTI_PR_PR16_Msk /*!< Pending bit for line 16 */ -#define EXTI_PR_PR17_Pos (17U) -#define EXTI_PR_PR17_Msk (0x1U << EXTI_PR_PR17_Pos) /*!< 0x00020000 */ -#define EXTI_PR_PR17 EXTI_PR_PR17_Msk /*!< Pending bit for line 17 */ -#define EXTI_PR_PR18_Pos (18U) -#define EXTI_PR_PR18_Msk (0x1U << EXTI_PR_PR18_Pos) /*!< 0x00040000 */ -#define EXTI_PR_PR18 EXTI_PR_PR18_Msk /*!< Pending bit for line 18 */ - -/* References Defines */ -#define EXTI_PR_PIF0 EXTI_PR_PR0 -#define EXTI_PR_PIF1 EXTI_PR_PR1 -#define EXTI_PR_PIF2 EXTI_PR_PR2 -#define EXTI_PR_PIF3 EXTI_PR_PR3 -#define EXTI_PR_PIF4 EXTI_PR_PR4 -#define EXTI_PR_PIF5 EXTI_PR_PR5 -#define EXTI_PR_PIF6 EXTI_PR_PR6 -#define EXTI_PR_PIF7 EXTI_PR_PR7 -#define EXTI_PR_PIF8 EXTI_PR_PR8 -#define EXTI_PR_PIF9 EXTI_PR_PR9 -#define EXTI_PR_PIF10 EXTI_PR_PR10 -#define EXTI_PR_PIF11 EXTI_PR_PR11 -#define EXTI_PR_PIF12 EXTI_PR_PR12 -#define EXTI_PR_PIF13 EXTI_PR_PR13 -#define EXTI_PR_PIF14 EXTI_PR_PR14 -#define EXTI_PR_PIF15 EXTI_PR_PR15 -#define EXTI_PR_PIF16 EXTI_PR_PR16 -#define EXTI_PR_PIF17 EXTI_PR_PR17 -#define EXTI_PR_PIF18 EXTI_PR_PR18 - -/******************************************************************************/ -/* */ -/* DMA Controller */ -/* */ -/******************************************************************************/ - -/******************* Bit definition for DMA_ISR register ********************/ -#define DMA_ISR_GIF1_Pos (0U) -#define DMA_ISR_GIF1_Msk (0x1U << DMA_ISR_GIF1_Pos) /*!< 0x00000001 */ -#define DMA_ISR_GIF1 DMA_ISR_GIF1_Msk /*!< Channel 1 Global interrupt flag */ -#define DMA_ISR_TCIF1_Pos (1U) -#define DMA_ISR_TCIF1_Msk (0x1U << DMA_ISR_TCIF1_Pos) /*!< 0x00000002 */ -#define DMA_ISR_TCIF1 DMA_ISR_TCIF1_Msk /*!< Channel 1 Transfer Complete flag */ -#define DMA_ISR_HTIF1_Pos (2U) -#define DMA_ISR_HTIF1_Msk (0x1U << DMA_ISR_HTIF1_Pos) /*!< 0x00000004 */ -#define DMA_ISR_HTIF1 DMA_ISR_HTIF1_Msk /*!< Channel 1 Half Transfer flag */ -#define DMA_ISR_TEIF1_Pos (3U) -#define DMA_ISR_TEIF1_Msk (0x1U << DMA_ISR_TEIF1_Pos) /*!< 0x00000008 */ -#define DMA_ISR_TEIF1 DMA_ISR_TEIF1_Msk /*!< Channel 1 Transfer Error flag */ -#define DMA_ISR_GIF2_Pos (4U) -#define DMA_ISR_GIF2_Msk (0x1U << DMA_ISR_GIF2_Pos) /*!< 0x00000010 */ -#define DMA_ISR_GIF2 DMA_ISR_GIF2_Msk /*!< Channel 2 Global interrupt flag */ -#define DMA_ISR_TCIF2_Pos (5U) -#define DMA_ISR_TCIF2_Msk (0x1U << DMA_ISR_TCIF2_Pos) /*!< 0x00000020 */ -#define DMA_ISR_TCIF2 DMA_ISR_TCIF2_Msk /*!< Channel 2 Transfer Complete flag */ -#define DMA_ISR_HTIF2_Pos (6U) -#define DMA_ISR_HTIF2_Msk (0x1U << DMA_ISR_HTIF2_Pos) /*!< 0x00000040 */ -#define DMA_ISR_HTIF2 DMA_ISR_HTIF2_Msk /*!< Channel 2 Half Transfer flag */ -#define DMA_ISR_TEIF2_Pos (7U) -#define DMA_ISR_TEIF2_Msk (0x1U << DMA_ISR_TEIF2_Pos) /*!< 0x00000080 */ -#define DMA_ISR_TEIF2 DMA_ISR_TEIF2_Msk /*!< Channel 2 Transfer Error flag */ -#define DMA_ISR_GIF3_Pos (8U) -#define DMA_ISR_GIF3_Msk (0x1U << DMA_ISR_GIF3_Pos) /*!< 0x00000100 */ -#define DMA_ISR_GIF3 DMA_ISR_GIF3_Msk /*!< Channel 3 Global interrupt flag */ -#define DMA_ISR_TCIF3_Pos (9U) -#define DMA_ISR_TCIF3_Msk (0x1U << DMA_ISR_TCIF3_Pos) /*!< 0x00000200 */ -#define DMA_ISR_TCIF3 DMA_ISR_TCIF3_Msk /*!< Channel 3 Transfer Complete flag */ -#define DMA_ISR_HTIF3_Pos (10U) -#define DMA_ISR_HTIF3_Msk (0x1U << DMA_ISR_HTIF3_Pos) /*!< 0x00000400 */ -#define DMA_ISR_HTIF3 DMA_ISR_HTIF3_Msk /*!< Channel 3 Half Transfer flag */ -#define DMA_ISR_TEIF3_Pos (11U) -#define DMA_ISR_TEIF3_Msk (0x1U << DMA_ISR_TEIF3_Pos) /*!< 0x00000800 */ -#define DMA_ISR_TEIF3 DMA_ISR_TEIF3_Msk /*!< Channel 3 Transfer Error flag */ -#define DMA_ISR_GIF4_Pos (12U) -#define DMA_ISR_GIF4_Msk (0x1U << DMA_ISR_GIF4_Pos) /*!< 0x00001000 */ -#define DMA_ISR_GIF4 DMA_ISR_GIF4_Msk /*!< Channel 4 Global interrupt flag */ -#define DMA_ISR_TCIF4_Pos (13U) -#define DMA_ISR_TCIF4_Msk (0x1U << DMA_ISR_TCIF4_Pos) /*!< 0x00002000 */ -#define DMA_ISR_TCIF4 DMA_ISR_TCIF4_Msk /*!< Channel 4 Transfer Complete flag */ -#define DMA_ISR_HTIF4_Pos (14U) -#define DMA_ISR_HTIF4_Msk (0x1U << DMA_ISR_HTIF4_Pos) /*!< 0x00004000 */ -#define DMA_ISR_HTIF4 DMA_ISR_HTIF4_Msk /*!< Channel 4 Half Transfer flag */ -#define DMA_ISR_TEIF4_Pos (15U) -#define DMA_ISR_TEIF4_Msk (0x1U << DMA_ISR_TEIF4_Pos) /*!< 0x00008000 */ -#define DMA_ISR_TEIF4 DMA_ISR_TEIF4_Msk /*!< Channel 4 Transfer Error flag */ -#define DMA_ISR_GIF5_Pos (16U) -#define DMA_ISR_GIF5_Msk (0x1U << DMA_ISR_GIF5_Pos) /*!< 0x00010000 */ -#define DMA_ISR_GIF5 DMA_ISR_GIF5_Msk /*!< Channel 5 Global interrupt flag */ -#define DMA_ISR_TCIF5_Pos (17U) -#define DMA_ISR_TCIF5_Msk (0x1U << DMA_ISR_TCIF5_Pos) /*!< 0x00020000 */ -#define DMA_ISR_TCIF5 DMA_ISR_TCIF5_Msk /*!< Channel 5 Transfer Complete flag */ -#define DMA_ISR_HTIF5_Pos (18U) -#define DMA_ISR_HTIF5_Msk (0x1U << DMA_ISR_HTIF5_Pos) /*!< 0x00040000 */ -#define DMA_ISR_HTIF5 DMA_ISR_HTIF5_Msk /*!< Channel 5 Half Transfer flag */ -#define DMA_ISR_TEIF5_Pos (19U) -#define DMA_ISR_TEIF5_Msk (0x1U << DMA_ISR_TEIF5_Pos) /*!< 0x00080000 */ -#define DMA_ISR_TEIF5 DMA_ISR_TEIF5_Msk /*!< Channel 5 Transfer Error flag */ -#define DMA_ISR_GIF6_Pos (20U) -#define DMA_ISR_GIF6_Msk (0x1U << DMA_ISR_GIF6_Pos) /*!< 0x00100000 */ -#define DMA_ISR_GIF6 DMA_ISR_GIF6_Msk /*!< Channel 6 Global interrupt flag */ -#define DMA_ISR_TCIF6_Pos (21U) -#define DMA_ISR_TCIF6_Msk (0x1U << DMA_ISR_TCIF6_Pos) /*!< 0x00200000 */ -#define DMA_ISR_TCIF6 DMA_ISR_TCIF6_Msk /*!< Channel 6 Transfer Complete flag */ -#define DMA_ISR_HTIF6_Pos (22U) -#define DMA_ISR_HTIF6_Msk (0x1U << DMA_ISR_HTIF6_Pos) /*!< 0x00400000 */ -#define DMA_ISR_HTIF6 DMA_ISR_HTIF6_Msk /*!< Channel 6 Half Transfer flag */ -#define DMA_ISR_TEIF6_Pos (23U) -#define DMA_ISR_TEIF6_Msk (0x1U << DMA_ISR_TEIF6_Pos) /*!< 0x00800000 */ -#define DMA_ISR_TEIF6 DMA_ISR_TEIF6_Msk /*!< Channel 6 Transfer Error flag */ -#define DMA_ISR_GIF7_Pos (24U) -#define DMA_ISR_GIF7_Msk (0x1U << DMA_ISR_GIF7_Pos) /*!< 0x01000000 */ -#define DMA_ISR_GIF7 DMA_ISR_GIF7_Msk /*!< Channel 7 Global interrupt flag */ -#define DMA_ISR_TCIF7_Pos (25U) -#define DMA_ISR_TCIF7_Msk (0x1U << DMA_ISR_TCIF7_Pos) /*!< 0x02000000 */ -#define DMA_ISR_TCIF7 DMA_ISR_TCIF7_Msk /*!< Channel 7 Transfer Complete flag */ -#define DMA_ISR_HTIF7_Pos (26U) -#define DMA_ISR_HTIF7_Msk (0x1U << DMA_ISR_HTIF7_Pos) /*!< 0x04000000 */ -#define DMA_ISR_HTIF7 DMA_ISR_HTIF7_Msk /*!< Channel 7 Half Transfer flag */ -#define DMA_ISR_TEIF7_Pos (27U) -#define DMA_ISR_TEIF7_Msk (0x1U << DMA_ISR_TEIF7_Pos) /*!< 0x08000000 */ -#define DMA_ISR_TEIF7 DMA_ISR_TEIF7_Msk /*!< Channel 7 Transfer Error flag */ - -/******************* Bit definition for DMA_IFCR register *******************/ -#define DMA_IFCR_CGIF1_Pos (0U) -#define DMA_IFCR_CGIF1_Msk (0x1U << DMA_IFCR_CGIF1_Pos) /*!< 0x00000001 */ -#define DMA_IFCR_CGIF1 DMA_IFCR_CGIF1_Msk /*!< Channel 1 Global interrupt clear */ -#define DMA_IFCR_CTCIF1_Pos (1U) -#define DMA_IFCR_CTCIF1_Msk (0x1U << DMA_IFCR_CTCIF1_Pos) /*!< 0x00000002 */ -#define DMA_IFCR_CTCIF1 DMA_IFCR_CTCIF1_Msk /*!< Channel 1 Transfer Complete clear */ -#define DMA_IFCR_CHTIF1_Pos (2U) -#define DMA_IFCR_CHTIF1_Msk (0x1U << DMA_IFCR_CHTIF1_Pos) /*!< 0x00000004 */ -#define DMA_IFCR_CHTIF1 DMA_IFCR_CHTIF1_Msk /*!< Channel 1 Half Transfer clear */ -#define DMA_IFCR_CTEIF1_Pos (3U) -#define DMA_IFCR_CTEIF1_Msk (0x1U << DMA_IFCR_CTEIF1_Pos) /*!< 0x00000008 */ -#define DMA_IFCR_CTEIF1 DMA_IFCR_CTEIF1_Msk /*!< Channel 1 Transfer Error clear */ -#define DMA_IFCR_CGIF2_Pos (4U) -#define DMA_IFCR_CGIF2_Msk (0x1U << DMA_IFCR_CGIF2_Pos) /*!< 0x00000010 */ -#define DMA_IFCR_CGIF2 DMA_IFCR_CGIF2_Msk /*!< Channel 2 Global interrupt clear */ -#define DMA_IFCR_CTCIF2_Pos (5U) -#define DMA_IFCR_CTCIF2_Msk (0x1U << DMA_IFCR_CTCIF2_Pos) /*!< 0x00000020 */ -#define DMA_IFCR_CTCIF2 DMA_IFCR_CTCIF2_Msk /*!< Channel 2 Transfer Complete clear */ -#define DMA_IFCR_CHTIF2_Pos (6U) -#define DMA_IFCR_CHTIF2_Msk (0x1U << DMA_IFCR_CHTIF2_Pos) /*!< 0x00000040 */ -#define DMA_IFCR_CHTIF2 DMA_IFCR_CHTIF2_Msk /*!< Channel 2 Half Transfer clear */ -#define DMA_IFCR_CTEIF2_Pos (7U) -#define DMA_IFCR_CTEIF2_Msk (0x1U << DMA_IFCR_CTEIF2_Pos) /*!< 0x00000080 */ -#define DMA_IFCR_CTEIF2 DMA_IFCR_CTEIF2_Msk /*!< Channel 2 Transfer Error clear */ -#define DMA_IFCR_CGIF3_Pos (8U) -#define DMA_IFCR_CGIF3_Msk (0x1U << DMA_IFCR_CGIF3_Pos) /*!< 0x00000100 */ -#define DMA_IFCR_CGIF3 DMA_IFCR_CGIF3_Msk /*!< Channel 3 Global interrupt clear */ -#define DMA_IFCR_CTCIF3_Pos (9U) -#define DMA_IFCR_CTCIF3_Msk (0x1U << DMA_IFCR_CTCIF3_Pos) /*!< 0x00000200 */ -#define DMA_IFCR_CTCIF3 DMA_IFCR_CTCIF3_Msk /*!< Channel 3 Transfer Complete clear */ -#define DMA_IFCR_CHTIF3_Pos (10U) -#define DMA_IFCR_CHTIF3_Msk (0x1U << DMA_IFCR_CHTIF3_Pos) /*!< 0x00000400 */ -#define DMA_IFCR_CHTIF3 DMA_IFCR_CHTIF3_Msk /*!< Channel 3 Half Transfer clear */ -#define DMA_IFCR_CTEIF3_Pos (11U) -#define DMA_IFCR_CTEIF3_Msk (0x1U << DMA_IFCR_CTEIF3_Pos) /*!< 0x00000800 */ -#define DMA_IFCR_CTEIF3 DMA_IFCR_CTEIF3_Msk /*!< Channel 3 Transfer Error clear */ -#define DMA_IFCR_CGIF4_Pos (12U) -#define DMA_IFCR_CGIF4_Msk (0x1U << DMA_IFCR_CGIF4_Pos) /*!< 0x00001000 */ -#define DMA_IFCR_CGIF4 DMA_IFCR_CGIF4_Msk /*!< Channel 4 Global interrupt clear */ -#define DMA_IFCR_CTCIF4_Pos (13U) -#define DMA_IFCR_CTCIF4_Msk (0x1U << DMA_IFCR_CTCIF4_Pos) /*!< 0x00002000 */ -#define DMA_IFCR_CTCIF4 DMA_IFCR_CTCIF4_Msk /*!< Channel 4 Transfer Complete clear */ -#define DMA_IFCR_CHTIF4_Pos (14U) -#define DMA_IFCR_CHTIF4_Msk (0x1U << DMA_IFCR_CHTIF4_Pos) /*!< 0x00004000 */ -#define DMA_IFCR_CHTIF4 DMA_IFCR_CHTIF4_Msk /*!< Channel 4 Half Transfer clear */ -#define DMA_IFCR_CTEIF4_Pos (15U) -#define DMA_IFCR_CTEIF4_Msk (0x1U << DMA_IFCR_CTEIF4_Pos) /*!< 0x00008000 */ -#define DMA_IFCR_CTEIF4 DMA_IFCR_CTEIF4_Msk /*!< Channel 4 Transfer Error clear */ -#define DMA_IFCR_CGIF5_Pos (16U) -#define DMA_IFCR_CGIF5_Msk (0x1U << DMA_IFCR_CGIF5_Pos) /*!< 0x00010000 */ -#define DMA_IFCR_CGIF5 DMA_IFCR_CGIF5_Msk /*!< Channel 5 Global interrupt clear */ -#define DMA_IFCR_CTCIF5_Pos (17U) -#define DMA_IFCR_CTCIF5_Msk (0x1U << DMA_IFCR_CTCIF5_Pos) /*!< 0x00020000 */ -#define DMA_IFCR_CTCIF5 DMA_IFCR_CTCIF5_Msk /*!< Channel 5 Transfer Complete clear */ -#define DMA_IFCR_CHTIF5_Pos (18U) -#define DMA_IFCR_CHTIF5_Msk (0x1U << DMA_IFCR_CHTIF5_Pos) /*!< 0x00040000 */ -#define DMA_IFCR_CHTIF5 DMA_IFCR_CHTIF5_Msk /*!< Channel 5 Half Transfer clear */ -#define DMA_IFCR_CTEIF5_Pos (19U) -#define DMA_IFCR_CTEIF5_Msk (0x1U << DMA_IFCR_CTEIF5_Pos) /*!< 0x00080000 */ -#define DMA_IFCR_CTEIF5 DMA_IFCR_CTEIF5_Msk /*!< Channel 5 Transfer Error clear */ -#define DMA_IFCR_CGIF6_Pos (20U) -#define DMA_IFCR_CGIF6_Msk (0x1U << DMA_IFCR_CGIF6_Pos) /*!< 0x00100000 */ -#define DMA_IFCR_CGIF6 DMA_IFCR_CGIF6_Msk /*!< Channel 6 Global interrupt clear */ -#define DMA_IFCR_CTCIF6_Pos (21U) -#define DMA_IFCR_CTCIF6_Msk (0x1U << DMA_IFCR_CTCIF6_Pos) /*!< 0x00200000 */ -#define DMA_IFCR_CTCIF6 DMA_IFCR_CTCIF6_Msk /*!< Channel 6 Transfer Complete clear */ -#define DMA_IFCR_CHTIF6_Pos (22U) -#define DMA_IFCR_CHTIF6_Msk (0x1U << DMA_IFCR_CHTIF6_Pos) /*!< 0x00400000 */ -#define DMA_IFCR_CHTIF6 DMA_IFCR_CHTIF6_Msk /*!< Channel 6 Half Transfer clear */ -#define DMA_IFCR_CTEIF6_Pos (23U) -#define DMA_IFCR_CTEIF6_Msk (0x1U << DMA_IFCR_CTEIF6_Pos) /*!< 0x00800000 */ -#define DMA_IFCR_CTEIF6 DMA_IFCR_CTEIF6_Msk /*!< Channel 6 Transfer Error clear */ -#define DMA_IFCR_CGIF7_Pos (24U) -#define DMA_IFCR_CGIF7_Msk (0x1U << DMA_IFCR_CGIF7_Pos) /*!< 0x01000000 */ -#define DMA_IFCR_CGIF7 DMA_IFCR_CGIF7_Msk /*!< Channel 7 Global interrupt clear */ -#define DMA_IFCR_CTCIF7_Pos (25U) -#define DMA_IFCR_CTCIF7_Msk (0x1U << DMA_IFCR_CTCIF7_Pos) /*!< 0x02000000 */ -#define DMA_IFCR_CTCIF7 DMA_IFCR_CTCIF7_Msk /*!< Channel 7 Transfer Complete clear */ -#define DMA_IFCR_CHTIF7_Pos (26U) -#define DMA_IFCR_CHTIF7_Msk (0x1U << DMA_IFCR_CHTIF7_Pos) /*!< 0x04000000 */ -#define DMA_IFCR_CHTIF7 DMA_IFCR_CHTIF7_Msk /*!< Channel 7 Half Transfer clear */ -#define DMA_IFCR_CTEIF7_Pos (27U) -#define DMA_IFCR_CTEIF7_Msk (0x1U << DMA_IFCR_CTEIF7_Pos) /*!< 0x08000000 */ -#define DMA_IFCR_CTEIF7 DMA_IFCR_CTEIF7_Msk /*!< Channel 7 Transfer Error clear */ - -/******************* Bit definition for DMA_CCR register *******************/ -#define DMA_CCR_EN_Pos (0U) -#define DMA_CCR_EN_Msk (0x1U << DMA_CCR_EN_Pos) /*!< 0x00000001 */ -#define DMA_CCR_EN DMA_CCR_EN_Msk /*!< Channel enable */ -#define DMA_CCR_TCIE_Pos (1U) -#define DMA_CCR_TCIE_Msk (0x1U << DMA_CCR_TCIE_Pos) /*!< 0x00000002 */ -#define DMA_CCR_TCIE DMA_CCR_TCIE_Msk /*!< Transfer complete interrupt enable */ -#define DMA_CCR_HTIE_Pos (2U) -#define DMA_CCR_HTIE_Msk (0x1U << DMA_CCR_HTIE_Pos) /*!< 0x00000004 */ -#define DMA_CCR_HTIE DMA_CCR_HTIE_Msk /*!< Half Transfer interrupt enable */ -#define DMA_CCR_TEIE_Pos (3U) -#define DMA_CCR_TEIE_Msk (0x1U << DMA_CCR_TEIE_Pos) /*!< 0x00000008 */ -#define DMA_CCR_TEIE DMA_CCR_TEIE_Msk /*!< Transfer error interrupt enable */ -#define DMA_CCR_DIR_Pos (4U) -#define DMA_CCR_DIR_Msk (0x1U << DMA_CCR_DIR_Pos) /*!< 0x00000010 */ -#define DMA_CCR_DIR DMA_CCR_DIR_Msk /*!< Data transfer direction */ -#define DMA_CCR_CIRC_Pos (5U) -#define DMA_CCR_CIRC_Msk (0x1U << DMA_CCR_CIRC_Pos) /*!< 0x00000020 */ -#define DMA_CCR_CIRC DMA_CCR_CIRC_Msk /*!< Circular mode */ -#define DMA_CCR_PINC_Pos (6U) -#define DMA_CCR_PINC_Msk (0x1U << DMA_CCR_PINC_Pos) /*!< 0x00000040 */ -#define DMA_CCR_PINC DMA_CCR_PINC_Msk /*!< Peripheral increment mode */ -#define DMA_CCR_MINC_Pos (7U) -#define DMA_CCR_MINC_Msk (0x1U << DMA_CCR_MINC_Pos) /*!< 0x00000080 */ -#define DMA_CCR_MINC DMA_CCR_MINC_Msk /*!< Memory increment mode */ - -#define DMA_CCR_PSIZE_Pos (8U) -#define DMA_CCR_PSIZE_Msk (0x3U << DMA_CCR_PSIZE_Pos) /*!< 0x00000300 */ -#define DMA_CCR_PSIZE DMA_CCR_PSIZE_Msk /*!< PSIZE[1:0] bits (Peripheral size) */ -#define DMA_CCR_PSIZE_0 (0x1U << DMA_CCR_PSIZE_Pos) /*!< 0x00000100 */ -#define DMA_CCR_PSIZE_1 (0x2U << DMA_CCR_PSIZE_Pos) /*!< 0x00000200 */ - -#define DMA_CCR_MSIZE_Pos (10U) -#define DMA_CCR_MSIZE_Msk (0x3U << DMA_CCR_MSIZE_Pos) /*!< 0x00000C00 */ -#define DMA_CCR_MSIZE DMA_CCR_MSIZE_Msk /*!< MSIZE[1:0] bits (Memory size) */ -#define DMA_CCR_MSIZE_0 (0x1U << DMA_CCR_MSIZE_Pos) /*!< 0x00000400 */ -#define DMA_CCR_MSIZE_1 (0x2U << DMA_CCR_MSIZE_Pos) /*!< 0x00000800 */ - -#define DMA_CCR_PL_Pos (12U) -#define DMA_CCR_PL_Msk (0x3U << DMA_CCR_PL_Pos) /*!< 0x00003000 */ -#define DMA_CCR_PL DMA_CCR_PL_Msk /*!< PL[1:0] bits(Channel Priority level) */ -#define DMA_CCR_PL_0 (0x1U << DMA_CCR_PL_Pos) /*!< 0x00001000 */ -#define DMA_CCR_PL_1 (0x2U << DMA_CCR_PL_Pos) /*!< 0x00002000 */ - -#define DMA_CCR_MEM2MEM_Pos (14U) -#define DMA_CCR_MEM2MEM_Msk (0x1U << DMA_CCR_MEM2MEM_Pos) /*!< 0x00004000 */ -#define DMA_CCR_MEM2MEM DMA_CCR_MEM2MEM_Msk /*!< Memory to memory mode */ - -/****************** Bit definition for DMA_CNDTR register ******************/ -#define DMA_CNDTR_NDT_Pos (0U) -#define DMA_CNDTR_NDT_Msk (0xFFFFU << DMA_CNDTR_NDT_Pos) /*!< 0x0000FFFF */ -#define DMA_CNDTR_NDT DMA_CNDTR_NDT_Msk /*!< Number of data to Transfer */ - -/****************** Bit definition for DMA_CPAR register *******************/ -#define DMA_CPAR_PA_Pos (0U) -#define DMA_CPAR_PA_Msk (0xFFFFFFFFU << DMA_CPAR_PA_Pos) /*!< 0xFFFFFFFF */ -#define DMA_CPAR_PA DMA_CPAR_PA_Msk /*!< Peripheral Address */ - -/****************** Bit definition for DMA_CMAR register *******************/ -#define DMA_CMAR_MA_Pos (0U) -#define DMA_CMAR_MA_Msk (0xFFFFFFFFU << DMA_CMAR_MA_Pos) /*!< 0xFFFFFFFF */ -#define DMA_CMAR_MA DMA_CMAR_MA_Msk /*!< Memory Address */ - -/******************************************************************************/ -/* */ -/* Analog to Digital Converter (ADC) */ -/* */ -/******************************************************************************/ - -/* - * @brief Specific device feature definitions (not present on all devices in the STM32F1 family) - */ -#define ADC_MULTIMODE_SUPPORT /*!< ADC feature available only on specific devices: multimode available on devices with several ADC instances */ - -/******************** Bit definition for ADC_SR register ********************/ -#define ADC_SR_AWD_Pos (0U) -#define ADC_SR_AWD_Msk (0x1U << ADC_SR_AWD_Pos) /*!< 0x00000001 */ -#define ADC_SR_AWD ADC_SR_AWD_Msk /*!< ADC analog watchdog 1 flag */ -#define ADC_SR_EOS_Pos (1U) -#define ADC_SR_EOS_Msk (0x1U << ADC_SR_EOS_Pos) /*!< 0x00000002 */ -#define ADC_SR_EOS ADC_SR_EOS_Msk /*!< ADC group regular end of sequence conversions flag */ -#define ADC_SR_JEOS_Pos (2U) -#define ADC_SR_JEOS_Msk (0x1U << ADC_SR_JEOS_Pos) /*!< 0x00000004 */ -#define ADC_SR_JEOS ADC_SR_JEOS_Msk /*!< ADC group injected end of sequence conversions flag */ -#define ADC_SR_JSTRT_Pos (3U) -#define ADC_SR_JSTRT_Msk (0x1U << ADC_SR_JSTRT_Pos) /*!< 0x00000008 */ -#define ADC_SR_JSTRT ADC_SR_JSTRT_Msk /*!< ADC group injected conversion start flag */ -#define ADC_SR_STRT_Pos (4U) -#define ADC_SR_STRT_Msk (0x1U << ADC_SR_STRT_Pos) /*!< 0x00000010 */ -#define ADC_SR_STRT ADC_SR_STRT_Msk /*!< ADC group regular conversion start flag */ - -/* Legacy defines */ -#define ADC_SR_EOC (ADC_SR_EOS) -#define ADC_SR_JEOC (ADC_SR_JEOS) - -/******************* Bit definition for ADC_CR1 register ********************/ -#define ADC_CR1_AWDCH_Pos (0U) -#define ADC_CR1_AWDCH_Msk (0x1FU << ADC_CR1_AWDCH_Pos) /*!< 0x0000001F */ -#define ADC_CR1_AWDCH ADC_CR1_AWDCH_Msk /*!< ADC analog watchdog 1 monitored channel selection */ -#define ADC_CR1_AWDCH_0 (0x01U << ADC_CR1_AWDCH_Pos) /*!< 0x00000001 */ -#define ADC_CR1_AWDCH_1 (0x02U << ADC_CR1_AWDCH_Pos) /*!< 0x00000002 */ -#define ADC_CR1_AWDCH_2 (0x04U << ADC_CR1_AWDCH_Pos) /*!< 0x00000004 */ -#define ADC_CR1_AWDCH_3 (0x08U << ADC_CR1_AWDCH_Pos) /*!< 0x00000008 */ -#define ADC_CR1_AWDCH_4 (0x10U << ADC_CR1_AWDCH_Pos) /*!< 0x00000010 */ - -#define ADC_CR1_EOSIE_Pos (5U) -#define ADC_CR1_EOSIE_Msk (0x1U << ADC_CR1_EOSIE_Pos) /*!< 0x00000020 */ -#define ADC_CR1_EOSIE ADC_CR1_EOSIE_Msk /*!< ADC group regular end of sequence conversions interrupt */ -#define ADC_CR1_AWDIE_Pos (6U) -#define ADC_CR1_AWDIE_Msk (0x1U << ADC_CR1_AWDIE_Pos) /*!< 0x00000040 */ -#define ADC_CR1_AWDIE ADC_CR1_AWDIE_Msk /*!< ADC analog watchdog 1 interrupt */ -#define ADC_CR1_JEOSIE_Pos (7U) -#define ADC_CR1_JEOSIE_Msk (0x1U << ADC_CR1_JEOSIE_Pos) /*!< 0x00000080 */ -#define ADC_CR1_JEOSIE ADC_CR1_JEOSIE_Msk /*!< ADC group injected end of sequence conversions interrupt */ -#define ADC_CR1_SCAN_Pos (8U) -#define ADC_CR1_SCAN_Msk (0x1U << ADC_CR1_SCAN_Pos) /*!< 0x00000100 */ -#define ADC_CR1_SCAN ADC_CR1_SCAN_Msk /*!< ADC scan mode */ -#define ADC_CR1_AWDSGL_Pos (9U) -#define ADC_CR1_AWDSGL_Msk (0x1U << ADC_CR1_AWDSGL_Pos) /*!< 0x00000200 */ -#define ADC_CR1_AWDSGL ADC_CR1_AWDSGL_Msk /*!< ADC analog watchdog 1 monitoring a single channel or all channels */ -#define ADC_CR1_JAUTO_Pos (10U) -#define ADC_CR1_JAUTO_Msk (0x1U << ADC_CR1_JAUTO_Pos) /*!< 0x00000400 */ -#define ADC_CR1_JAUTO ADC_CR1_JAUTO_Msk /*!< ADC group injected automatic trigger mode */ -#define ADC_CR1_DISCEN_Pos (11U) -#define ADC_CR1_DISCEN_Msk (0x1U << ADC_CR1_DISCEN_Pos) /*!< 0x00000800 */ -#define ADC_CR1_DISCEN ADC_CR1_DISCEN_Msk /*!< ADC group regular sequencer discontinuous mode */ -#define ADC_CR1_JDISCEN_Pos (12U) -#define ADC_CR1_JDISCEN_Msk (0x1U << ADC_CR1_JDISCEN_Pos) /*!< 0x00001000 */ -#define ADC_CR1_JDISCEN ADC_CR1_JDISCEN_Msk /*!< ADC group injected sequencer discontinuous mode */ - -#define ADC_CR1_DISCNUM_Pos (13U) -#define ADC_CR1_DISCNUM_Msk (0x7U << ADC_CR1_DISCNUM_Pos) /*!< 0x0000E000 */ -#define ADC_CR1_DISCNUM ADC_CR1_DISCNUM_Msk /*!< ADC group regular sequencer discontinuous number of ranks */ -#define ADC_CR1_DISCNUM_0 (0x1U << ADC_CR1_DISCNUM_Pos) /*!< 0x00002000 */ -#define ADC_CR1_DISCNUM_1 (0x2U << ADC_CR1_DISCNUM_Pos) /*!< 0x00004000 */ -#define ADC_CR1_DISCNUM_2 (0x4U << ADC_CR1_DISCNUM_Pos) /*!< 0x00008000 */ - -#define ADC_CR1_DUALMOD_Pos (16U) -#define ADC_CR1_DUALMOD_Msk (0xFU << ADC_CR1_DUALMOD_Pos) /*!< 0x000F0000 */ -#define ADC_CR1_DUALMOD ADC_CR1_DUALMOD_Msk /*!< ADC multimode mode selection */ -#define ADC_CR1_DUALMOD_0 (0x1U << ADC_CR1_DUALMOD_Pos) /*!< 0x00010000 */ -#define ADC_CR1_DUALMOD_1 (0x2U << ADC_CR1_DUALMOD_Pos) /*!< 0x00020000 */ -#define ADC_CR1_DUALMOD_2 (0x4U << ADC_CR1_DUALMOD_Pos) /*!< 0x00040000 */ -#define ADC_CR1_DUALMOD_3 (0x8U << ADC_CR1_DUALMOD_Pos) /*!< 0x00080000 */ - -#define ADC_CR1_JAWDEN_Pos (22U) -#define ADC_CR1_JAWDEN_Msk (0x1U << ADC_CR1_JAWDEN_Pos) /*!< 0x00400000 */ -#define ADC_CR1_JAWDEN ADC_CR1_JAWDEN_Msk /*!< ADC analog watchdog 1 enable on scope ADC group injected */ -#define ADC_CR1_AWDEN_Pos (23U) -#define ADC_CR1_AWDEN_Msk (0x1U << ADC_CR1_AWDEN_Pos) /*!< 0x00800000 */ -#define ADC_CR1_AWDEN ADC_CR1_AWDEN_Msk /*!< ADC analog watchdog 1 enable on scope ADC group regular */ - -/* Legacy defines */ -#define ADC_CR1_EOCIE (ADC_CR1_EOSIE) -#define ADC_CR1_JEOCIE (ADC_CR1_JEOSIE) - -/******************* Bit definition for ADC_CR2 register ********************/ -#define ADC_CR2_ADON_Pos (0U) -#define ADC_CR2_ADON_Msk (0x1U << ADC_CR2_ADON_Pos) /*!< 0x00000001 */ -#define ADC_CR2_ADON ADC_CR2_ADON_Msk /*!< ADC enable */ -#define ADC_CR2_CONT_Pos (1U) -#define ADC_CR2_CONT_Msk (0x1U << ADC_CR2_CONT_Pos) /*!< 0x00000002 */ -#define ADC_CR2_CONT ADC_CR2_CONT_Msk /*!< ADC group regular continuous conversion mode */ -#define ADC_CR2_CAL_Pos (2U) -#define ADC_CR2_CAL_Msk (0x1U << ADC_CR2_CAL_Pos) /*!< 0x00000004 */ -#define ADC_CR2_CAL ADC_CR2_CAL_Msk /*!< ADC calibration start */ -#define ADC_CR2_RSTCAL_Pos (3U) -#define ADC_CR2_RSTCAL_Msk (0x1U << ADC_CR2_RSTCAL_Pos) /*!< 0x00000008 */ -#define ADC_CR2_RSTCAL ADC_CR2_RSTCAL_Msk /*!< ADC calibration reset */ -#define ADC_CR2_DMA_Pos (8U) -#define ADC_CR2_DMA_Msk (0x1U << ADC_CR2_DMA_Pos) /*!< 0x00000100 */ -#define ADC_CR2_DMA ADC_CR2_DMA_Msk /*!< ADC DMA transfer enable */ -#define ADC_CR2_ALIGN_Pos (11U) -#define ADC_CR2_ALIGN_Msk (0x1U << ADC_CR2_ALIGN_Pos) /*!< 0x00000800 */ -#define ADC_CR2_ALIGN ADC_CR2_ALIGN_Msk /*!< ADC data alignement */ - -#define ADC_CR2_JEXTSEL_Pos (12U) -#define ADC_CR2_JEXTSEL_Msk (0x7U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00007000 */ -#define ADC_CR2_JEXTSEL ADC_CR2_JEXTSEL_Msk /*!< ADC group injected external trigger source */ -#define ADC_CR2_JEXTSEL_0 (0x1U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00001000 */ -#define ADC_CR2_JEXTSEL_1 (0x2U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00002000 */ -#define ADC_CR2_JEXTSEL_2 (0x4U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00004000 */ - -#define ADC_CR2_JEXTTRIG_Pos (15U) -#define ADC_CR2_JEXTTRIG_Msk (0x1U << ADC_CR2_JEXTTRIG_Pos) /*!< 0x00008000 */ -#define ADC_CR2_JEXTTRIG ADC_CR2_JEXTTRIG_Msk /*!< ADC group injected external trigger enable */ - -#define ADC_CR2_EXTSEL_Pos (17U) -#define ADC_CR2_EXTSEL_Msk (0x7U << ADC_CR2_EXTSEL_Pos) /*!< 0x000E0000 */ -#define ADC_CR2_EXTSEL ADC_CR2_EXTSEL_Msk /*!< ADC group regular external trigger source */ -#define ADC_CR2_EXTSEL_0 (0x1U << ADC_CR2_EXTSEL_Pos) /*!< 0x00020000 */ -#define ADC_CR2_EXTSEL_1 (0x2U << ADC_CR2_EXTSEL_Pos) /*!< 0x00040000 */ -#define ADC_CR2_EXTSEL_2 (0x4U << ADC_CR2_EXTSEL_Pos) /*!< 0x00080000 */ - -#define ADC_CR2_EXTTRIG_Pos (20U) -#define ADC_CR2_EXTTRIG_Msk (0x1U << ADC_CR2_EXTTRIG_Pos) /*!< 0x00100000 */ -#define ADC_CR2_EXTTRIG ADC_CR2_EXTTRIG_Msk /*!< ADC group regular external trigger enable */ -#define ADC_CR2_JSWSTART_Pos (21U) -#define ADC_CR2_JSWSTART_Msk (0x1U << ADC_CR2_JSWSTART_Pos) /*!< 0x00200000 */ -#define ADC_CR2_JSWSTART ADC_CR2_JSWSTART_Msk /*!< ADC group injected conversion start */ -#define ADC_CR2_SWSTART_Pos (22U) -#define ADC_CR2_SWSTART_Msk (0x1U << ADC_CR2_SWSTART_Pos) /*!< 0x00400000 */ -#define ADC_CR2_SWSTART ADC_CR2_SWSTART_Msk /*!< ADC group regular conversion start */ -#define ADC_CR2_TSVREFE_Pos (23U) -#define ADC_CR2_TSVREFE_Msk (0x1U << ADC_CR2_TSVREFE_Pos) /*!< 0x00800000 */ -#define ADC_CR2_TSVREFE ADC_CR2_TSVREFE_Msk /*!< ADC internal path to VrefInt and temperature sensor enable */ - -/****************** Bit definition for ADC_SMPR1 register *******************/ -#define ADC_SMPR1_SMP10_Pos (0U) -#define ADC_SMPR1_SMP10_Msk (0x7U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000007 */ -#define ADC_SMPR1_SMP10 ADC_SMPR1_SMP10_Msk /*!< ADC channel 10 sampling time selection */ -#define ADC_SMPR1_SMP10_0 (0x1U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000001 */ -#define ADC_SMPR1_SMP10_1 (0x2U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000002 */ -#define ADC_SMPR1_SMP10_2 (0x4U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000004 */ - -#define ADC_SMPR1_SMP11_Pos (3U) -#define ADC_SMPR1_SMP11_Msk (0x7U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000038 */ -#define ADC_SMPR1_SMP11 ADC_SMPR1_SMP11_Msk /*!< ADC channel 11 sampling time selection */ -#define ADC_SMPR1_SMP11_0 (0x1U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000008 */ -#define ADC_SMPR1_SMP11_1 (0x2U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000010 */ -#define ADC_SMPR1_SMP11_2 (0x4U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000020 */ - -#define ADC_SMPR1_SMP12_Pos (6U) -#define ADC_SMPR1_SMP12_Msk (0x7U << ADC_SMPR1_SMP12_Pos) /*!< 0x000001C0 */ -#define ADC_SMPR1_SMP12 ADC_SMPR1_SMP12_Msk /*!< ADC channel 12 sampling time selection */ -#define ADC_SMPR1_SMP12_0 (0x1U << ADC_SMPR1_SMP12_Pos) /*!< 0x00000040 */ -#define ADC_SMPR1_SMP12_1 (0x2U << ADC_SMPR1_SMP12_Pos) /*!< 0x00000080 */ -#define ADC_SMPR1_SMP12_2 (0x4U << ADC_SMPR1_SMP12_Pos) /*!< 0x00000100 */ - -#define ADC_SMPR1_SMP13_Pos (9U) -#define ADC_SMPR1_SMP13_Msk (0x7U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000E00 */ -#define ADC_SMPR1_SMP13 ADC_SMPR1_SMP13_Msk /*!< ADC channel 13 sampling time selection */ -#define ADC_SMPR1_SMP13_0 (0x1U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000200 */ -#define ADC_SMPR1_SMP13_1 (0x2U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000400 */ -#define ADC_SMPR1_SMP13_2 (0x4U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000800 */ - -#define ADC_SMPR1_SMP14_Pos (12U) -#define ADC_SMPR1_SMP14_Msk (0x7U << ADC_SMPR1_SMP14_Pos) /*!< 0x00007000 */ -#define ADC_SMPR1_SMP14 ADC_SMPR1_SMP14_Msk /*!< ADC channel 14 sampling time selection */ -#define ADC_SMPR1_SMP14_0 (0x1U << ADC_SMPR1_SMP14_Pos) /*!< 0x00001000 */ -#define ADC_SMPR1_SMP14_1 (0x2U << ADC_SMPR1_SMP14_Pos) /*!< 0x00002000 */ -#define ADC_SMPR1_SMP14_2 (0x4U << ADC_SMPR1_SMP14_Pos) /*!< 0x00004000 */ - -#define ADC_SMPR1_SMP15_Pos (15U) -#define ADC_SMPR1_SMP15_Msk (0x7U << ADC_SMPR1_SMP15_Pos) /*!< 0x00038000 */ -#define ADC_SMPR1_SMP15 ADC_SMPR1_SMP15_Msk /*!< ADC channel 15 sampling time selection */ -#define ADC_SMPR1_SMP15_0 (0x1U << ADC_SMPR1_SMP15_Pos) /*!< 0x00008000 */ -#define ADC_SMPR1_SMP15_1 (0x2U << ADC_SMPR1_SMP15_Pos) /*!< 0x00010000 */ -#define ADC_SMPR1_SMP15_2 (0x4U << ADC_SMPR1_SMP15_Pos) /*!< 0x00020000 */ - -#define ADC_SMPR1_SMP16_Pos (18U) -#define ADC_SMPR1_SMP16_Msk (0x7U << ADC_SMPR1_SMP16_Pos) /*!< 0x001C0000 */ -#define ADC_SMPR1_SMP16 ADC_SMPR1_SMP16_Msk /*!< ADC channel 16 sampling time selection */ -#define ADC_SMPR1_SMP16_0 (0x1U << ADC_SMPR1_SMP16_Pos) /*!< 0x00040000 */ -#define ADC_SMPR1_SMP16_1 (0x2U << ADC_SMPR1_SMP16_Pos) /*!< 0x00080000 */ -#define ADC_SMPR1_SMP16_2 (0x4U << ADC_SMPR1_SMP16_Pos) /*!< 0x00100000 */ - -#define ADC_SMPR1_SMP17_Pos (21U) -#define ADC_SMPR1_SMP17_Msk (0x7U << ADC_SMPR1_SMP17_Pos) /*!< 0x00E00000 */ -#define ADC_SMPR1_SMP17 ADC_SMPR1_SMP17_Msk /*!< ADC channel 17 sampling time selection */ -#define ADC_SMPR1_SMP17_0 (0x1U << ADC_SMPR1_SMP17_Pos) /*!< 0x00200000 */ -#define ADC_SMPR1_SMP17_1 (0x2U << ADC_SMPR1_SMP17_Pos) /*!< 0x00400000 */ -#define ADC_SMPR1_SMP17_2 (0x4U << ADC_SMPR1_SMP17_Pos) /*!< 0x00800000 */ - -/****************** Bit definition for ADC_SMPR2 register *******************/ -#define ADC_SMPR2_SMP0_Pos (0U) -#define ADC_SMPR2_SMP0_Msk (0x7U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000007 */ -#define ADC_SMPR2_SMP0 ADC_SMPR2_SMP0_Msk /*!< ADC channel 0 sampling time selection */ -#define ADC_SMPR2_SMP0_0 (0x1U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000001 */ -#define ADC_SMPR2_SMP0_1 (0x2U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000002 */ -#define ADC_SMPR2_SMP0_2 (0x4U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000004 */ - -#define ADC_SMPR2_SMP1_Pos (3U) -#define ADC_SMPR2_SMP1_Msk (0x7U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000038 */ -#define ADC_SMPR2_SMP1 ADC_SMPR2_SMP1_Msk /*!< ADC channel 1 sampling time selection */ -#define ADC_SMPR2_SMP1_0 (0x1U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000008 */ -#define ADC_SMPR2_SMP1_1 (0x2U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000010 */ -#define ADC_SMPR2_SMP1_2 (0x4U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000020 */ - -#define ADC_SMPR2_SMP2_Pos (6U) -#define ADC_SMPR2_SMP2_Msk (0x7U << ADC_SMPR2_SMP2_Pos) /*!< 0x000001C0 */ -#define ADC_SMPR2_SMP2 ADC_SMPR2_SMP2_Msk /*!< ADC channel 2 sampling time selection */ -#define ADC_SMPR2_SMP2_0 (0x1U << ADC_SMPR2_SMP2_Pos) /*!< 0x00000040 */ -#define ADC_SMPR2_SMP2_1 (0x2U << ADC_SMPR2_SMP2_Pos) /*!< 0x00000080 */ -#define ADC_SMPR2_SMP2_2 (0x4U << ADC_SMPR2_SMP2_Pos) /*!< 0x00000100 */ - -#define ADC_SMPR2_SMP3_Pos (9U) -#define ADC_SMPR2_SMP3_Msk (0x7U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000E00 */ -#define ADC_SMPR2_SMP3 ADC_SMPR2_SMP3_Msk /*!< ADC channel 3 sampling time selection */ -#define ADC_SMPR2_SMP3_0 (0x1U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000200 */ -#define ADC_SMPR2_SMP3_1 (0x2U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000400 */ -#define ADC_SMPR2_SMP3_2 (0x4U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000800 */ - -#define ADC_SMPR2_SMP4_Pos (12U) -#define ADC_SMPR2_SMP4_Msk (0x7U << ADC_SMPR2_SMP4_Pos) /*!< 0x00007000 */ -#define ADC_SMPR2_SMP4 ADC_SMPR2_SMP4_Msk /*!< ADC channel 4 sampling time selection */ -#define ADC_SMPR2_SMP4_0 (0x1U << ADC_SMPR2_SMP4_Pos) /*!< 0x00001000 */ -#define ADC_SMPR2_SMP4_1 (0x2U << ADC_SMPR2_SMP4_Pos) /*!< 0x00002000 */ -#define ADC_SMPR2_SMP4_2 (0x4U << ADC_SMPR2_SMP4_Pos) /*!< 0x00004000 */ - -#define ADC_SMPR2_SMP5_Pos (15U) -#define ADC_SMPR2_SMP5_Msk (0x7U << ADC_SMPR2_SMP5_Pos) /*!< 0x00038000 */ -#define ADC_SMPR2_SMP5 ADC_SMPR2_SMP5_Msk /*!< ADC channel 5 sampling time selection */ -#define ADC_SMPR2_SMP5_0 (0x1U << ADC_SMPR2_SMP5_Pos) /*!< 0x00008000 */ -#define ADC_SMPR2_SMP5_1 (0x2U << ADC_SMPR2_SMP5_Pos) /*!< 0x00010000 */ -#define ADC_SMPR2_SMP5_2 (0x4U << ADC_SMPR2_SMP5_Pos) /*!< 0x00020000 */ - -#define ADC_SMPR2_SMP6_Pos (18U) -#define ADC_SMPR2_SMP6_Msk (0x7U << ADC_SMPR2_SMP6_Pos) /*!< 0x001C0000 */ -#define ADC_SMPR2_SMP6 ADC_SMPR2_SMP6_Msk /*!< ADC channel 6 sampling time selection */ -#define ADC_SMPR2_SMP6_0 (0x1U << ADC_SMPR2_SMP6_Pos) /*!< 0x00040000 */ -#define ADC_SMPR2_SMP6_1 (0x2U << ADC_SMPR2_SMP6_Pos) /*!< 0x00080000 */ -#define ADC_SMPR2_SMP6_2 (0x4U << ADC_SMPR2_SMP6_Pos) /*!< 0x00100000 */ - -#define ADC_SMPR2_SMP7_Pos (21U) -#define ADC_SMPR2_SMP7_Msk (0x7U << ADC_SMPR2_SMP7_Pos) /*!< 0x00E00000 */ -#define ADC_SMPR2_SMP7 ADC_SMPR2_SMP7_Msk /*!< ADC channel 7 sampling time selection */ -#define ADC_SMPR2_SMP7_0 (0x1U << ADC_SMPR2_SMP7_Pos) /*!< 0x00200000 */ -#define ADC_SMPR2_SMP7_1 (0x2U << ADC_SMPR2_SMP7_Pos) /*!< 0x00400000 */ -#define ADC_SMPR2_SMP7_2 (0x4U << ADC_SMPR2_SMP7_Pos) /*!< 0x00800000 */ - -#define ADC_SMPR2_SMP8_Pos (24U) -#define ADC_SMPR2_SMP8_Msk (0x7U << ADC_SMPR2_SMP8_Pos) /*!< 0x07000000 */ -#define ADC_SMPR2_SMP8 ADC_SMPR2_SMP8_Msk /*!< ADC channel 8 sampling time selection */ -#define ADC_SMPR2_SMP8_0 (0x1U << ADC_SMPR2_SMP8_Pos) /*!< 0x01000000 */ -#define ADC_SMPR2_SMP8_1 (0x2U << ADC_SMPR2_SMP8_Pos) /*!< 0x02000000 */ -#define ADC_SMPR2_SMP8_2 (0x4U << ADC_SMPR2_SMP8_Pos) /*!< 0x04000000 */ - -#define ADC_SMPR2_SMP9_Pos (27U) -#define ADC_SMPR2_SMP9_Msk (0x7U << ADC_SMPR2_SMP9_Pos) /*!< 0x38000000 */ -#define ADC_SMPR2_SMP9 ADC_SMPR2_SMP9_Msk /*!< ADC channel 9 sampling time selection */ -#define ADC_SMPR2_SMP9_0 (0x1U << ADC_SMPR2_SMP9_Pos) /*!< 0x08000000 */ -#define ADC_SMPR2_SMP9_1 (0x2U << ADC_SMPR2_SMP9_Pos) /*!< 0x10000000 */ -#define ADC_SMPR2_SMP9_2 (0x4U << ADC_SMPR2_SMP9_Pos) /*!< 0x20000000 */ - -/****************** Bit definition for ADC_JOFR1 register *******************/ -#define ADC_JOFR1_JOFFSET1_Pos (0U) -#define ADC_JOFR1_JOFFSET1_Msk (0xFFFU << ADC_JOFR1_JOFFSET1_Pos) /*!< 0x00000FFF */ -#define ADC_JOFR1_JOFFSET1 ADC_JOFR1_JOFFSET1_Msk /*!< ADC group injected sequencer rank 1 offset value */ - -/****************** Bit definition for ADC_JOFR2 register *******************/ -#define ADC_JOFR2_JOFFSET2_Pos (0U) -#define ADC_JOFR2_JOFFSET2_Msk (0xFFFU << ADC_JOFR2_JOFFSET2_Pos) /*!< 0x00000FFF */ -#define ADC_JOFR2_JOFFSET2 ADC_JOFR2_JOFFSET2_Msk /*!< ADC group injected sequencer rank 2 offset value */ - -/****************** Bit definition for ADC_JOFR3 register *******************/ -#define ADC_JOFR3_JOFFSET3_Pos (0U) -#define ADC_JOFR3_JOFFSET3_Msk (0xFFFU << ADC_JOFR3_JOFFSET3_Pos) /*!< 0x00000FFF */ -#define ADC_JOFR3_JOFFSET3 ADC_JOFR3_JOFFSET3_Msk /*!< ADC group injected sequencer rank 3 offset value */ - -/****************** Bit definition for ADC_JOFR4 register *******************/ -#define ADC_JOFR4_JOFFSET4_Pos (0U) -#define ADC_JOFR4_JOFFSET4_Msk (0xFFFU << ADC_JOFR4_JOFFSET4_Pos) /*!< 0x00000FFF */ -#define ADC_JOFR4_JOFFSET4 ADC_JOFR4_JOFFSET4_Msk /*!< ADC group injected sequencer rank 4 offset value */ - -/******************* Bit definition for ADC_HTR register ********************/ -#define ADC_HTR_HT_Pos (0U) -#define ADC_HTR_HT_Msk (0xFFFU << ADC_HTR_HT_Pos) /*!< 0x00000FFF */ -#define ADC_HTR_HT ADC_HTR_HT_Msk /*!< ADC analog watchdog 1 threshold high */ - -/******************* Bit definition for ADC_LTR register ********************/ -#define ADC_LTR_LT_Pos (0U) -#define ADC_LTR_LT_Msk (0xFFFU << ADC_LTR_LT_Pos) /*!< 0x00000FFF */ -#define ADC_LTR_LT ADC_LTR_LT_Msk /*!< ADC analog watchdog 1 threshold low */ - -/******************* Bit definition for ADC_SQR1 register *******************/ -#define ADC_SQR1_SQ13_Pos (0U) -#define ADC_SQR1_SQ13_Msk (0x1FU << ADC_SQR1_SQ13_Pos) /*!< 0x0000001F */ -#define ADC_SQR1_SQ13 ADC_SQR1_SQ13_Msk /*!< ADC group regular sequencer rank 13 */ -#define ADC_SQR1_SQ13_0 (0x01U << ADC_SQR1_SQ13_Pos) /*!< 0x00000001 */ -#define ADC_SQR1_SQ13_1 (0x02U << ADC_SQR1_SQ13_Pos) /*!< 0x00000002 */ -#define ADC_SQR1_SQ13_2 (0x04U << ADC_SQR1_SQ13_Pos) /*!< 0x00000004 */ -#define ADC_SQR1_SQ13_3 (0x08U << ADC_SQR1_SQ13_Pos) /*!< 0x00000008 */ -#define ADC_SQR1_SQ13_4 (0x10U << ADC_SQR1_SQ13_Pos) /*!< 0x00000010 */ - -#define ADC_SQR1_SQ14_Pos (5U) -#define ADC_SQR1_SQ14_Msk (0x1FU << ADC_SQR1_SQ14_Pos) /*!< 0x000003E0 */ -#define ADC_SQR1_SQ14 ADC_SQR1_SQ14_Msk /*!< ADC group regular sequencer rank 14 */ -#define ADC_SQR1_SQ14_0 (0x01U << ADC_SQR1_SQ14_Pos) /*!< 0x00000020 */ -#define ADC_SQR1_SQ14_1 (0x02U << ADC_SQR1_SQ14_Pos) /*!< 0x00000040 */ -#define ADC_SQR1_SQ14_2 (0x04U << ADC_SQR1_SQ14_Pos) /*!< 0x00000080 */ -#define ADC_SQR1_SQ14_3 (0x08U << ADC_SQR1_SQ14_Pos) /*!< 0x00000100 */ -#define ADC_SQR1_SQ14_4 (0x10U << ADC_SQR1_SQ14_Pos) /*!< 0x00000200 */ - -#define ADC_SQR1_SQ15_Pos (10U) -#define ADC_SQR1_SQ15_Msk (0x1FU << ADC_SQR1_SQ15_Pos) /*!< 0x00007C00 */ -#define ADC_SQR1_SQ15 ADC_SQR1_SQ15_Msk /*!< ADC group regular sequencer rank 15 */ -#define ADC_SQR1_SQ15_0 (0x01U << ADC_SQR1_SQ15_Pos) /*!< 0x00000400 */ -#define ADC_SQR1_SQ15_1 (0x02U << ADC_SQR1_SQ15_Pos) /*!< 0x00000800 */ -#define ADC_SQR1_SQ15_2 (0x04U << ADC_SQR1_SQ15_Pos) /*!< 0x00001000 */ -#define ADC_SQR1_SQ15_3 (0x08U << ADC_SQR1_SQ15_Pos) /*!< 0x00002000 */ -#define ADC_SQR1_SQ15_4 (0x10U << ADC_SQR1_SQ15_Pos) /*!< 0x00004000 */ - -#define ADC_SQR1_SQ16_Pos (15U) -#define ADC_SQR1_SQ16_Msk (0x1FU << ADC_SQR1_SQ16_Pos) /*!< 0x000F8000 */ -#define ADC_SQR1_SQ16 ADC_SQR1_SQ16_Msk /*!< ADC group regular sequencer rank 16 */ -#define ADC_SQR1_SQ16_0 (0x01U << ADC_SQR1_SQ16_Pos) /*!< 0x00008000 */ -#define ADC_SQR1_SQ16_1 (0x02U << ADC_SQR1_SQ16_Pos) /*!< 0x00010000 */ -#define ADC_SQR1_SQ16_2 (0x04U << ADC_SQR1_SQ16_Pos) /*!< 0x00020000 */ -#define ADC_SQR1_SQ16_3 (0x08U << ADC_SQR1_SQ16_Pos) /*!< 0x00040000 */ -#define ADC_SQR1_SQ16_4 (0x10U << ADC_SQR1_SQ16_Pos) /*!< 0x00080000 */ - -#define ADC_SQR1_L_Pos (20U) -#define ADC_SQR1_L_Msk (0xFU << ADC_SQR1_L_Pos) /*!< 0x00F00000 */ -#define ADC_SQR1_L ADC_SQR1_L_Msk /*!< ADC group regular sequencer scan length */ -#define ADC_SQR1_L_0 (0x1U << ADC_SQR1_L_Pos) /*!< 0x00100000 */ -#define ADC_SQR1_L_1 (0x2U << ADC_SQR1_L_Pos) /*!< 0x00200000 */ -#define ADC_SQR1_L_2 (0x4U << ADC_SQR1_L_Pos) /*!< 0x00400000 */ -#define ADC_SQR1_L_3 (0x8U << ADC_SQR1_L_Pos) /*!< 0x00800000 */ - -/******************* Bit definition for ADC_SQR2 register *******************/ -#define ADC_SQR2_SQ7_Pos (0U) -#define ADC_SQR2_SQ7_Msk (0x1FU << ADC_SQR2_SQ7_Pos) /*!< 0x0000001F */ -#define ADC_SQR2_SQ7 ADC_SQR2_SQ7_Msk /*!< ADC group regular sequencer rank 7 */ -#define ADC_SQR2_SQ7_0 (0x01U << ADC_SQR2_SQ7_Pos) /*!< 0x00000001 */ -#define ADC_SQR2_SQ7_1 (0x02U << ADC_SQR2_SQ7_Pos) /*!< 0x00000002 */ -#define ADC_SQR2_SQ7_2 (0x04U << ADC_SQR2_SQ7_Pos) /*!< 0x00000004 */ -#define ADC_SQR2_SQ7_3 (0x08U << ADC_SQR2_SQ7_Pos) /*!< 0x00000008 */ -#define ADC_SQR2_SQ7_4 (0x10U << ADC_SQR2_SQ7_Pos) /*!< 0x00000010 */ - -#define ADC_SQR2_SQ8_Pos (5U) -#define ADC_SQR2_SQ8_Msk (0x1FU << ADC_SQR2_SQ8_Pos) /*!< 0x000003E0 */ -#define ADC_SQR2_SQ8 ADC_SQR2_SQ8_Msk /*!< ADC group regular sequencer rank 8 */ -#define ADC_SQR2_SQ8_0 (0x01U << ADC_SQR2_SQ8_Pos) /*!< 0x00000020 */ -#define ADC_SQR2_SQ8_1 (0x02U << ADC_SQR2_SQ8_Pos) /*!< 0x00000040 */ -#define ADC_SQR2_SQ8_2 (0x04U << ADC_SQR2_SQ8_Pos) /*!< 0x00000080 */ -#define ADC_SQR2_SQ8_3 (0x08U << ADC_SQR2_SQ8_Pos) /*!< 0x00000100 */ -#define ADC_SQR2_SQ8_4 (0x10U << ADC_SQR2_SQ8_Pos) /*!< 0x00000200 */ - -#define ADC_SQR2_SQ9_Pos (10U) -#define ADC_SQR2_SQ9_Msk (0x1FU << ADC_SQR2_SQ9_Pos) /*!< 0x00007C00 */ -#define ADC_SQR2_SQ9 ADC_SQR2_SQ9_Msk /*!< ADC group regular sequencer rank 9 */ -#define ADC_SQR2_SQ9_0 (0x01U << ADC_SQR2_SQ9_Pos) /*!< 0x00000400 */ -#define ADC_SQR2_SQ9_1 (0x02U << ADC_SQR2_SQ9_Pos) /*!< 0x00000800 */ -#define ADC_SQR2_SQ9_2 (0x04U << ADC_SQR2_SQ9_Pos) /*!< 0x00001000 */ -#define ADC_SQR2_SQ9_3 (0x08U << ADC_SQR2_SQ9_Pos) /*!< 0x00002000 */ -#define ADC_SQR2_SQ9_4 (0x10U << ADC_SQR2_SQ9_Pos) /*!< 0x00004000 */ - -#define ADC_SQR2_SQ10_Pos (15U) -#define ADC_SQR2_SQ10_Msk (0x1FU << ADC_SQR2_SQ10_Pos) /*!< 0x000F8000 */ -#define ADC_SQR2_SQ10 ADC_SQR2_SQ10_Msk /*!< ADC group regular sequencer rank 10 */ -#define ADC_SQR2_SQ10_0 (0x01U << ADC_SQR2_SQ10_Pos) /*!< 0x00008000 */ -#define ADC_SQR2_SQ10_1 (0x02U << ADC_SQR2_SQ10_Pos) /*!< 0x00010000 */ -#define ADC_SQR2_SQ10_2 (0x04U << ADC_SQR2_SQ10_Pos) /*!< 0x00020000 */ -#define ADC_SQR2_SQ10_3 (0x08U << ADC_SQR2_SQ10_Pos) /*!< 0x00040000 */ -#define ADC_SQR2_SQ10_4 (0x10U << ADC_SQR2_SQ10_Pos) /*!< 0x00080000 */ - -#define ADC_SQR2_SQ11_Pos (20U) -#define ADC_SQR2_SQ11_Msk (0x1FU << ADC_SQR2_SQ11_Pos) /*!< 0x01F00000 */ -#define ADC_SQR2_SQ11 ADC_SQR2_SQ11_Msk /*!< ADC group regular sequencer rank 1 */ -#define ADC_SQR2_SQ11_0 (0x01U << ADC_SQR2_SQ11_Pos) /*!< 0x00100000 */ -#define ADC_SQR2_SQ11_1 (0x02U << ADC_SQR2_SQ11_Pos) /*!< 0x00200000 */ -#define ADC_SQR2_SQ11_2 (0x04U << ADC_SQR2_SQ11_Pos) /*!< 0x00400000 */ -#define ADC_SQR2_SQ11_3 (0x08U << ADC_SQR2_SQ11_Pos) /*!< 0x00800000 */ -#define ADC_SQR2_SQ11_4 (0x10U << ADC_SQR2_SQ11_Pos) /*!< 0x01000000 */ - -#define ADC_SQR2_SQ12_Pos (25U) -#define ADC_SQR2_SQ12_Msk (0x1FU << ADC_SQR2_SQ12_Pos) /*!< 0x3E000000 */ -#define ADC_SQR2_SQ12 ADC_SQR2_SQ12_Msk /*!< ADC group regular sequencer rank 12 */ -#define ADC_SQR2_SQ12_0 (0x01U << ADC_SQR2_SQ12_Pos) /*!< 0x02000000 */ -#define ADC_SQR2_SQ12_1 (0x02U << ADC_SQR2_SQ12_Pos) /*!< 0x04000000 */ -#define ADC_SQR2_SQ12_2 (0x04U << ADC_SQR2_SQ12_Pos) /*!< 0x08000000 */ -#define ADC_SQR2_SQ12_3 (0x08U << ADC_SQR2_SQ12_Pos) /*!< 0x10000000 */ -#define ADC_SQR2_SQ12_4 (0x10U << ADC_SQR2_SQ12_Pos) /*!< 0x20000000 */ - -/******************* Bit definition for ADC_SQR3 register *******************/ -#define ADC_SQR3_SQ1_Pos (0U) -#define ADC_SQR3_SQ1_Msk (0x1FU << ADC_SQR3_SQ1_Pos) /*!< 0x0000001F */ -#define ADC_SQR3_SQ1 ADC_SQR3_SQ1_Msk /*!< ADC group regular sequencer rank 1 */ -#define ADC_SQR3_SQ1_0 (0x01U << ADC_SQR3_SQ1_Pos) /*!< 0x00000001 */ -#define ADC_SQR3_SQ1_1 (0x02U << ADC_SQR3_SQ1_Pos) /*!< 0x00000002 */ -#define ADC_SQR3_SQ1_2 (0x04U << ADC_SQR3_SQ1_Pos) /*!< 0x00000004 */ -#define ADC_SQR3_SQ1_3 (0x08U << ADC_SQR3_SQ1_Pos) /*!< 0x00000008 */ -#define ADC_SQR3_SQ1_4 (0x10U << ADC_SQR3_SQ1_Pos) /*!< 0x00000010 */ - -#define ADC_SQR3_SQ2_Pos (5U) -#define ADC_SQR3_SQ2_Msk (0x1FU << ADC_SQR3_SQ2_Pos) /*!< 0x000003E0 */ -#define ADC_SQR3_SQ2 ADC_SQR3_SQ2_Msk /*!< ADC group regular sequencer rank 2 */ -#define ADC_SQR3_SQ2_0 (0x01U << ADC_SQR3_SQ2_Pos) /*!< 0x00000020 */ -#define ADC_SQR3_SQ2_1 (0x02U << ADC_SQR3_SQ2_Pos) /*!< 0x00000040 */ -#define ADC_SQR3_SQ2_2 (0x04U << ADC_SQR3_SQ2_Pos) /*!< 0x00000080 */ -#define ADC_SQR3_SQ2_3 (0x08U << ADC_SQR3_SQ2_Pos) /*!< 0x00000100 */ -#define ADC_SQR3_SQ2_4 (0x10U << ADC_SQR3_SQ2_Pos) /*!< 0x00000200 */ - -#define ADC_SQR3_SQ3_Pos (10U) -#define ADC_SQR3_SQ3_Msk (0x1FU << ADC_SQR3_SQ3_Pos) /*!< 0x00007C00 */ -#define ADC_SQR3_SQ3 ADC_SQR3_SQ3_Msk /*!< ADC group regular sequencer rank 3 */ -#define ADC_SQR3_SQ3_0 (0x01U << ADC_SQR3_SQ3_Pos) /*!< 0x00000400 */ -#define ADC_SQR3_SQ3_1 (0x02U << ADC_SQR3_SQ3_Pos) /*!< 0x00000800 */ -#define ADC_SQR3_SQ3_2 (0x04U << ADC_SQR3_SQ3_Pos) /*!< 0x00001000 */ -#define ADC_SQR3_SQ3_3 (0x08U << ADC_SQR3_SQ3_Pos) /*!< 0x00002000 */ -#define ADC_SQR3_SQ3_4 (0x10U << ADC_SQR3_SQ3_Pos) /*!< 0x00004000 */ - -#define ADC_SQR3_SQ4_Pos (15U) -#define ADC_SQR3_SQ4_Msk (0x1FU << ADC_SQR3_SQ4_Pos) /*!< 0x000F8000 */ -#define ADC_SQR3_SQ4 ADC_SQR3_SQ4_Msk /*!< ADC group regular sequencer rank 4 */ -#define ADC_SQR3_SQ4_0 (0x01U << ADC_SQR3_SQ4_Pos) /*!< 0x00008000 */ -#define ADC_SQR3_SQ4_1 (0x02U << ADC_SQR3_SQ4_Pos) /*!< 0x00010000 */ -#define ADC_SQR3_SQ4_2 (0x04U << ADC_SQR3_SQ4_Pos) /*!< 0x00020000 */ -#define ADC_SQR3_SQ4_3 (0x08U << ADC_SQR3_SQ4_Pos) /*!< 0x00040000 */ -#define ADC_SQR3_SQ4_4 (0x10U << ADC_SQR3_SQ4_Pos) /*!< 0x00080000 */ - -#define ADC_SQR3_SQ5_Pos (20U) -#define ADC_SQR3_SQ5_Msk (0x1FU << ADC_SQR3_SQ5_Pos) /*!< 0x01F00000 */ -#define ADC_SQR3_SQ5 ADC_SQR3_SQ5_Msk /*!< ADC group regular sequencer rank 5 */ -#define ADC_SQR3_SQ5_0 (0x01U << ADC_SQR3_SQ5_Pos) /*!< 0x00100000 */ -#define ADC_SQR3_SQ5_1 (0x02U << ADC_SQR3_SQ5_Pos) /*!< 0x00200000 */ -#define ADC_SQR3_SQ5_2 (0x04U << ADC_SQR3_SQ5_Pos) /*!< 0x00400000 */ -#define ADC_SQR3_SQ5_3 (0x08U << ADC_SQR3_SQ5_Pos) /*!< 0x00800000 */ -#define ADC_SQR3_SQ5_4 (0x10U << ADC_SQR3_SQ5_Pos) /*!< 0x01000000 */ - -#define ADC_SQR3_SQ6_Pos (25U) -#define ADC_SQR3_SQ6_Msk (0x1FU << ADC_SQR3_SQ6_Pos) /*!< 0x3E000000 */ -#define ADC_SQR3_SQ6 ADC_SQR3_SQ6_Msk /*!< ADC group regular sequencer rank 6 */ -#define ADC_SQR3_SQ6_0 (0x01U << ADC_SQR3_SQ6_Pos) /*!< 0x02000000 */ -#define ADC_SQR3_SQ6_1 (0x02U << ADC_SQR3_SQ6_Pos) /*!< 0x04000000 */ -#define ADC_SQR3_SQ6_2 (0x04U << ADC_SQR3_SQ6_Pos) /*!< 0x08000000 */ -#define ADC_SQR3_SQ6_3 (0x08U << ADC_SQR3_SQ6_Pos) /*!< 0x10000000 */ -#define ADC_SQR3_SQ6_4 (0x10U << ADC_SQR3_SQ6_Pos) /*!< 0x20000000 */ - -/******************* Bit definition for ADC_JSQR register *******************/ -#define ADC_JSQR_JSQ1_Pos (0U) -#define ADC_JSQR_JSQ1_Msk (0x1FU << ADC_JSQR_JSQ1_Pos) /*!< 0x0000001F */ -#define ADC_JSQR_JSQ1 ADC_JSQR_JSQ1_Msk /*!< ADC group injected sequencer rank 1 */ -#define ADC_JSQR_JSQ1_0 (0x01U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000001 */ -#define ADC_JSQR_JSQ1_1 (0x02U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000002 */ -#define ADC_JSQR_JSQ1_2 (0x04U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000004 */ -#define ADC_JSQR_JSQ1_3 (0x08U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000008 */ -#define ADC_JSQR_JSQ1_4 (0x10U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000010 */ - -#define ADC_JSQR_JSQ2_Pos (5U) -#define ADC_JSQR_JSQ2_Msk (0x1FU << ADC_JSQR_JSQ2_Pos) /*!< 0x000003E0 */ -#define ADC_JSQR_JSQ2 ADC_JSQR_JSQ2_Msk /*!< ADC group injected sequencer rank 2 */ -#define ADC_JSQR_JSQ2_0 (0x01U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000020 */ -#define ADC_JSQR_JSQ2_1 (0x02U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000040 */ -#define ADC_JSQR_JSQ2_2 (0x04U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000080 */ -#define ADC_JSQR_JSQ2_3 (0x08U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000100 */ -#define ADC_JSQR_JSQ2_4 (0x10U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000200 */ - -#define ADC_JSQR_JSQ3_Pos (10U) -#define ADC_JSQR_JSQ3_Msk (0x1FU << ADC_JSQR_JSQ3_Pos) /*!< 0x00007C00 */ -#define ADC_JSQR_JSQ3 ADC_JSQR_JSQ3_Msk /*!< ADC group injected sequencer rank 3 */ -#define ADC_JSQR_JSQ3_0 (0x01U << ADC_JSQR_JSQ3_Pos) /*!< 0x00000400 */ -#define ADC_JSQR_JSQ3_1 (0x02U << ADC_JSQR_JSQ3_Pos) /*!< 0x00000800 */ -#define ADC_JSQR_JSQ3_2 (0x04U << ADC_JSQR_JSQ3_Pos) /*!< 0x00001000 */ -#define ADC_JSQR_JSQ3_3 (0x08U << ADC_JSQR_JSQ3_Pos) /*!< 0x00002000 */ -#define ADC_JSQR_JSQ3_4 (0x10U << ADC_JSQR_JSQ3_Pos) /*!< 0x00004000 */ - -#define ADC_JSQR_JSQ4_Pos (15U) -#define ADC_JSQR_JSQ4_Msk (0x1FU << ADC_JSQR_JSQ4_Pos) /*!< 0x000F8000 */ -#define ADC_JSQR_JSQ4 ADC_JSQR_JSQ4_Msk /*!< ADC group injected sequencer rank 4 */ -#define ADC_JSQR_JSQ4_0 (0x01U << ADC_JSQR_JSQ4_Pos) /*!< 0x00008000 */ -#define ADC_JSQR_JSQ4_1 (0x02U << ADC_JSQR_JSQ4_Pos) /*!< 0x00010000 */ -#define ADC_JSQR_JSQ4_2 (0x04U << ADC_JSQR_JSQ4_Pos) /*!< 0x00020000 */ -#define ADC_JSQR_JSQ4_3 (0x08U << ADC_JSQR_JSQ4_Pos) /*!< 0x00040000 */ -#define ADC_JSQR_JSQ4_4 (0x10U << ADC_JSQR_JSQ4_Pos) /*!< 0x00080000 */ - -#define ADC_JSQR_JL_Pos (20U) -#define ADC_JSQR_JL_Msk (0x3U << ADC_JSQR_JL_Pos) /*!< 0x00300000 */ -#define ADC_JSQR_JL ADC_JSQR_JL_Msk /*!< ADC group injected sequencer scan length */ -#define ADC_JSQR_JL_0 (0x1U << ADC_JSQR_JL_Pos) /*!< 0x00100000 */ -#define ADC_JSQR_JL_1 (0x2U << ADC_JSQR_JL_Pos) /*!< 0x00200000 */ - -/******************* Bit definition for ADC_JDR1 register *******************/ -#define ADC_JDR1_JDATA_Pos (0U) -#define ADC_JDR1_JDATA_Msk (0xFFFFU << ADC_JDR1_JDATA_Pos) /*!< 0x0000FFFF */ -#define ADC_JDR1_JDATA ADC_JDR1_JDATA_Msk /*!< ADC group injected sequencer rank 1 conversion data */ - -/******************* Bit definition for ADC_JDR2 register *******************/ -#define ADC_JDR2_JDATA_Pos (0U) -#define ADC_JDR2_JDATA_Msk (0xFFFFU << ADC_JDR2_JDATA_Pos) /*!< 0x0000FFFF */ -#define ADC_JDR2_JDATA ADC_JDR2_JDATA_Msk /*!< ADC group injected sequencer rank 2 conversion data */ - -/******************* Bit definition for ADC_JDR3 register *******************/ -#define ADC_JDR3_JDATA_Pos (0U) -#define ADC_JDR3_JDATA_Msk (0xFFFFU << ADC_JDR3_JDATA_Pos) /*!< 0x0000FFFF */ -#define ADC_JDR3_JDATA ADC_JDR3_JDATA_Msk /*!< ADC group injected sequencer rank 3 conversion data */ - -/******************* Bit definition for ADC_JDR4 register *******************/ -#define ADC_JDR4_JDATA_Pos (0U) -#define ADC_JDR4_JDATA_Msk (0xFFFFU << ADC_JDR4_JDATA_Pos) /*!< 0x0000FFFF */ -#define ADC_JDR4_JDATA ADC_JDR4_JDATA_Msk /*!< ADC group injected sequencer rank 4 conversion data */ - -/******************** Bit definition for ADC_DR register ********************/ -#define ADC_DR_DATA_Pos (0U) -#define ADC_DR_DATA_Msk (0xFFFFU << ADC_DR_DATA_Pos) /*!< 0x0000FFFF */ -#define ADC_DR_DATA ADC_DR_DATA_Msk /*!< ADC group regular conversion data */ -#define ADC_DR_ADC2DATA_Pos (16U) -#define ADC_DR_ADC2DATA_Msk (0xFFFFU << ADC_DR_ADC2DATA_Pos) /*!< 0xFFFF0000 */ -#define ADC_DR_ADC2DATA ADC_DR_ADC2DATA_Msk /*!< ADC group regular conversion data for ADC slave, in multimode */ - - -/*****************************************************************************/ -/* */ -/* Timers (TIM) */ -/* */ -/*****************************************************************************/ -/******************* Bit definition for TIM_CR1 register *******************/ -#define TIM_CR1_CEN_Pos (0U) -#define TIM_CR1_CEN_Msk (0x1U << TIM_CR1_CEN_Pos) /*!< 0x00000001 */ -#define TIM_CR1_CEN TIM_CR1_CEN_Msk /*!
© COPYRIGHT(c) 2017 STMicroelectronics
- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32f1xx - * @{ - */ - -#ifndef __STM32F1XX_H -#define __STM32F1XX_H - -#ifdef __cplusplus - extern "C" { -#endif /* __cplusplus */ - -/** @addtogroup Library_configuration_section - * @{ - */ - -/** - * @brief STM32 Family - */ -#if !defined (STM32F1) -#define STM32F1 -#endif /* STM32F1 */ - -/* Uncomment the line below according to the target STM32L device used in your - application - */ - -#if !defined (STM32F100xB) && !defined (STM32F100xE) && !defined (STM32F101x6) && \ - !defined (STM32F101xB) && !defined (STM32F101xE) && !defined (STM32F101xG) && !defined (STM32F102x6) && !defined (STM32F102xB) && !defined (STM32F103x6) && \ - !defined (STM32F103xB) && !defined (STM32F103xE) && !defined (STM32F103xG) && !defined (STM32F105xC) && !defined (STM32F107xC) - /* #define STM32F100xB */ /*!< STM32F100C4, STM32F100R4, STM32F100C6, STM32F100R6, STM32F100C8, STM32F100R8, STM32F100V8, STM32F100CB, STM32F100RB and STM32F100VB */ - /* #define STM32F100xE */ /*!< STM32F100RC, STM32F100VC, STM32F100ZC, STM32F100RD, STM32F100VD, STM32F100ZD, STM32F100RE, STM32F100VE and STM32F100ZE */ - /* #define STM32F101x6 */ /*!< STM32F101C4, STM32F101R4, STM32F101T4, STM32F101C6, STM32F101R6 and STM32F101T6 Devices */ - /* #define STM32F101xB */ /*!< STM32F101C8, STM32F101R8, STM32F101T8, STM32F101V8, STM32F101CB, STM32F101RB, STM32F101TB and STM32F101VB */ - /* #define STM32F101xE */ /*!< STM32F101RC, STM32F101VC, STM32F101ZC, STM32F101RD, STM32F101VD, STM32F101ZD, STM32F101RE, STM32F101VE and STM32F101ZE */ - /* #define STM32F101xG */ /*!< STM32F101RF, STM32F101VF, STM32F101ZF, STM32F101RG, STM32F101VG and STM32F101ZG */ - /* #define STM32F102x6 */ /*!< STM32F102C4, STM32F102R4, STM32F102C6 and STM32F102R6 */ - /* #define STM32F102xB */ /*!< STM32F102C8, STM32F102R8, STM32F102CB and STM32F102RB */ - /* #define STM32F103x6 */ /*!< STM32F103C4, STM32F103R4, STM32F103T4, STM32F103C6, STM32F103R6 and STM32F103T6 */ -#define STM32F103xB /*!< STM32F103C8, STM32F103R8, STM32F103T8, STM32F103V8, STM32F103CB, STM32F103RB, STM32F103TB and STM32F103VB */ - /* #define STM32F103xE */ /*!< STM32F103RC, STM32F103VC, STM32F103ZC, STM32F103RD, STM32F103VD, STM32F103ZD, STM32F103RE, STM32F103VE and STM32F103ZE */ - /* #define STM32F103xG */ /*!< STM32F103RF, STM32F103VF, STM32F103ZF, STM32F103RG, STM32F103VG and STM32F103ZG */ - /* #define STM32F105xC */ /*!< STM32F105R8, STM32F105V8, STM32F105RB, STM32F105VB, STM32F105RC and STM32F105VC */ - /* #define STM32F107xC */ /*!< STM32F107RB, STM32F107VB, STM32F107RC and STM32F107VC */ -#endif - -/* Tip: To avoid modifying this file each time you need to switch between these - devices, you can define the device in your toolchain compiler preprocessor. - */ - -#if !defined (USE_HAL_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_HAL_DRIVER -#endif /* USE_HAL_DRIVER */ - -/** - * @brief CMSIS Device version number V4.2.0 - */ -#define __STM32F1_CMSIS_VERSION_MAIN (0x04) /*!< [31:24] main version */ -#define __STM32F1_CMSIS_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */ -#define __STM32F1_CMSIS_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ -#define __STM32F1_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */ -#define __STM32F1_CMSIS_VERSION ((__STM32F1_CMSIS_VERSION_MAIN << 24)\ - |(__STM32F1_CMSIS_VERSION_SUB1 << 16)\ - |(__STM32F1_CMSIS_VERSION_SUB2 << 8 )\ - |(__STM32F1_CMSIS_VERSION_RC)) - -/** - * @} - */ - -/** @addtogroup Device_Included - * @{ - */ - -#if defined(STM32F100xB) - #include "stm32f100xb.h" -#elif defined(STM32F100xE) - #include "stm32f100xe.h" -#elif defined(STM32F101x6) - #include "stm32f101x6.h" -#elif defined(STM32F101xB) - #include "stm32f101xb.h" -#elif defined(STM32F101xE) - #include "stm32f101xe.h" -#elif defined(STM32F101xG) - #include "stm32f101xg.h" -#elif defined(STM32F102x6) - #include "stm32f102x6.h" -#elif defined(STM32F102xB) - #include "stm32f102xb.h" -#elif defined(STM32F103x6) - #include "stm32f103x6.h" -#elif defined(STM32F103xB) - #include "stm32f103xb.h" -#elif defined(STM32F103xE) - #include "stm32f103xe.h" -#elif defined(STM32F103xG) - #include "stm32f103xg.h" -#elif defined(STM32F105xC) - #include "stm32f105xc.h" -#elif defined(STM32F107xC) - #include "stm32f107xc.h" -#else - #error "Please select first the target STM32F1xx device used in your application (in stm32f1xx.h file)" -#endif - -/** - * @} - */ - -/** @addtogroup Exported_types - * @{ - */ -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 -{ - ERROR = 0, - SUCCESS = !ERROR -} ErrorStatus; - -/** - * @} - */ - - -/** @addtogroup Exported_macros - * @{ - */ -#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))) - -#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL))) - - -/** - * @} - */ - -#if defined (USE_HAL_DRIVER) - #include "stm32f1xx_hal.h" -#endif /* USE_HAL_DRIVER */ - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __STM32F1xx_H */ -/** - * @} - */ - -/** - * @} - */ - - - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/target/system_clock.c b/src/target/system_clock.c deleted file mode 100644 index cb0916b..0000000 --- a/src/target/system_clock.c +++ /dev/null @@ -1,109 +0,0 @@ -/* mbed Microcontroller Library -* Copyright (c) 2006-2017 ARM Limited -* -* 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 configures the system clock as follows: - *----------------------------------------------------------------------------- - * System clock source | 1- PLL_HSE_EXTC | 3- PLL_HSI - * | (external 8 MHz clock) | (internal 8 MHz) - * | 2- PLL_HSE_XTAL | - * | (external 8 MHz xtal) | - *----------------------------------------------------------------------------- - * SYSCLK(MHz) | 72 | 64 - *----------------------------------------------------------------------------- - * AHBCLK (MHz) | 72 | 64 - *----------------------------------------------------------------------------- - * APB1CLK (MHz) | 36 | 32 - *----------------------------------------------------------------------------- - * APB2CLK (MHz) | 72 | 64 - *----------------------------------------------------------------------------- - * USB capable (48 MHz precise clock) | NO | NO - *----------------------------------------------------------------------------- - ****************************************************************************** - */ - -#include "stm32f1xx.h" - -/*!< Uncomment the following line if you need to relocate your vector Table in - Internal SRAM. */ -/* #define VECT_TAB_SRAM */ -#define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. - This value must be a multiple of 0x200. */ - -/** - * @brief Setup the microcontroller system - * Initialize the Embedded Flash Interface, the PLL and update the - * SystemCoreClock variable. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -void SystemInit (void) -{ - /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ - /* Set HSION bit */ - RCC->CR |= 0x00000001U; - - /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */ -#if !defined(STM32F105xC) && !defined(STM32F107xC) - RCC->CFGR &= 0xF8FF0000U; -#else - RCC->CFGR &= 0xF0FF0000U; -#endif /* STM32F105xC */ - - /* Reset HSEON, CSSON and PLLON bits */ - RCC->CR &= 0xFEF6FFFFU; - - /* Reset HSEBYP bit */ - RCC->CR &= 0xFFFBFFFFU; - - /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */ - RCC->CFGR &= 0xFF80FFFFU; - -#if defined(STM32F105xC) || defined(STM32F107xC) - /* Reset PLL2ON and PLL3ON bits */ - RCC->CR &= 0xEBFFFFFFU; - - /* Disable all interrupts and clear pending bits */ - RCC->CIR = 0x00FF0000U; - - /* Reset CFGR2 register */ - RCC->CFGR2 = 0x00000000U; -#elif defined(STM32F100xB) || defined(STM32F100xE) - /* Disable all interrupts and clear pending bits */ - RCC->CIR = 0x009F0000U; - - /* Reset CFGR2 register */ - RCC->CFGR2 = 0x00000000U; -#else - /* Disable all interrupts and clear pending bits */ - RCC->CIR = 0x009F0000U; -#endif /* STM32F105xC */ - -#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) -#ifdef DATA_IN_ExtSRAM - SystemInit_ExtMemCtl(); -#endif /* DATA_IN_ExtSRAM */ -#endif - -#ifdef VECT_TAB_SRAM - SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ -#else - SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ -#endif - -} - diff --git a/src/target/system_stm32f1xx.h b/src/target/system_stm32f1xx.h deleted file mode 100644 index f2557fa..0000000 --- a/src/target/system_stm32f1xx.h +++ /dev/null @@ -1,118 +0,0 @@ -/** - ****************************************************************************** - * @file system_stm32f10x.h - * @author MCD Application Team - * @version V4.2.0 - * @date 31-March-2017 - * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Header File. - ****************************************************************************** - * @attention - * - *

© COPYRIGHT(c) 2017 STMicroelectronics

- * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32f10x_system - * @{ - */ - -/** - * @brief Define to prevent recursive inclusion - */ -#ifndef __SYSTEM_STM32F10X_H -#define __SYSTEM_STM32F10X_H - -#ifdef __cplusplus - extern "C" { -#endif - -/** @addtogroup STM32F10x_System_Includes - * @{ - */ - -/** - * @} - */ - - -/** @addtogroup STM32F10x_System_Exported_types - * @{ - */ - -extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ -extern const uint8_t AHBPrescTable[16U]; /*!< AHB prescalers table values */ -extern const uint8_t APBPrescTable[8U]; /*!< APB prescalers table values */ - -/** - * @} - */ - -/** @addtogroup STM32F10x_System_Exported_Constants - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F10x_System_Exported_Macros - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F10x_System_Exported_Functions - * @{ - */ - -extern void SystemInit(void); -extern void SystemCoreClockUpdate(void); -extern void SetSysClock(void); - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /*__SYSTEM_STM32F10X_H */ - -/** - * @} - */ - -/** - * @} - */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/src/utils.rs b/src/utils.rs new file mode 100644 index 0000000..822b9ac --- /dev/null +++ b/src/utils.rs @@ -0,0 +1,226 @@ +use core::{ + marker::PhantomData, + cell::RefCell, + ops::Range, +}; + +use embedded_hal::adc::*; + +use stm32f1xx_hal::{ + backup_domain::BackupDomain, + crc::Crc, +}; + +use libm::*; + +use half::f16; + +use crate::config::SystemConfig; + +//-------------------------------------------------------------------------------------------------- +/* 2nd order linearisation factor for the temperature probe */ +const A: f32 = -0.000574; +const B: f32 = 0.0676; +const C: f32 = -0.07; + +//-------------------------------------------------------------------------------------------------- +/* valid temperature range */ +pub const TEMP_RANGE: Range = -10.0..45.0; + +//-------------------------------------------------------------------------------------------------- +/* error management */ +#[derive(Debug)] +pub enum ProbeError { + ReadError, + Initializing, + OutOfRange, +} + +//-------------------------------------------------------------------------------------------------- +/* TemperatureProbe */ +const FILTER_TIME_CONSTANT: f32 = 100.0; + +pub struct TemperatureProbe<'a, ADC, O, PINP, PINN> +where + PINP: Channel, + PINN: Channel, + O: OneShot + OneShot, +{ + adc: &'a RefCell, + pos_pin: PINP, + neg_pin: PINN, + phantom: PhantomData, + + filtered_temp: f32, + stabilized: bool, +} + +fn read_temp<'a, ADC, O, PINP, PINN>(adc: &'a RefCell, pos: &mut PINP, neg: &mut PINN) + -> Result +where + PINP: Channel, + PINN: Channel, + O: OneShot + OneShot, +{ + //first read is bugged, may be due to fake chip + let _ = adc.borrow_mut().read(pos); + let pos = adc.borrow_mut().read(pos) + .map_err(|_| ProbeError::ReadError)? as f32; + + //first read is bugged, may be due to fake chip + let _ = adc.borrow_mut().read(neg); + let neg = adc.borrow_mut().read(neg) + .map_err(|_| ProbeError::ReadError)? as f32; + + // compute back voltage, then reverse linearisation to compute temperature + let volt = (pos - neg) * 3.3 / 4095.0; + Ok((-B + sqrtf(B*B - 4.0*(C - volt)*A)) / (2.0*A)) +} + +impl<'a, ADC, O, PINP, PINN> TemperatureProbe<'a, ADC, O, PINP, PINN> +where + PINP: Channel, + PINN: Channel, + O: OneShot + OneShot, +{ + pub fn new(adc: &'a RefCell, pos: PINP, neg: PINN) + -> Result, ProbeError> { + + let mut pos_pin = pos; + let mut neg_pin = neg; + // compute first temp approximation to speed up stabilization + let mut temp = 0.0; + for _ in 0..10 { + temp += read_temp(adc, &mut pos_pin, &mut neg_pin)?; + } + temp /= 10.0; + + Ok(TemperatureProbe { + adc, + pos_pin, + neg_pin, + phantom: PhantomData, + filtered_temp: temp, + stabilized: false, + }) + } + + pub fn read(&mut self) -> Result { + + let temp = read_temp(self.adc, &mut self.pos_pin, &mut self.neg_pin)?; + + match self.stabilized { + true => { + self.filtered_temp += (temp - self.filtered_temp)/FILTER_TIME_CONSTANT; + match TEMP_RANGE.contains(&self.filtered_temp) { + true => Ok(self.filtered_temp), + false => Err(ProbeError::OutOfRange), + } + }, + false => { // filter is not yet stabilized + let old_temp = self.filtered_temp; + self.filtered_temp += (temp - self.filtered_temp)/FILTER_TIME_CONSTANT; + + match fabsf(old_temp - self.filtered_temp) < 0.01 { + true => self.stabilized = true, + false => (), + } + + Err(ProbeError::Initializing) + }, + } + } + + pub fn reset(&mut self) -> Result<(), ProbeError>{ + + // re-compute first temp approximation to speed up stabilization + let mut temp = 0.0; + for _ in 0..10 { + temp += read_temp(self.adc, &mut self.pos_pin, &mut self.neg_pin)?; + } + temp /= 10.0; + + self.filtered_temp = temp; + self.stabilized = false; + + Ok(()) + } +} + +//-------------------------------------------------------------------------------------------------- +/* ConfigStorage */ + +pub struct ConfigStorage { + backup_domain: BackupDomain, + crc: Crc, +} + +impl ConfigStorage { + + pub fn new(backup_domain: BackupDomain, crc: Crc) -> ConfigStorage { + + ConfigStorage { + backup_domain, + crc, + } + } + + pub fn load_config(&mut self) -> Result { + use crate::config::{CalData, FanOutput}; + + // read from persistent memory + let mut values: [u16; 10] = [0; 10]; + for (i, val) in values.iter_mut().enumerate() { + *val = self.backup_domain.read_data_register_low(i); + } + + // compute CRC + self.crc.reset(); + for i in (2..8).step_by(2) { + self.crc.write((values[i] as u32) << 16 | values[i+1] as u32); + } + let crc = (values[0] as u32) << 16 | values[1] as u32; + + // parse config if CRC is valid + match crc != 0 && crc == self.crc.read() { + true => { + Ok(SystemConfig { + max_temp_diff: f16::from_bits(values[2]).to_f32(), + min_temp_diff: f16::from_bits(values[3]).to_f32(), + ext_offset: CalData::new(f16::from_bits(values[4]).to_f32()), + p1_offset: CalData::new(f16::from_bits(values[5]).to_f32()), + p2_offset: CalData::new(f16::from_bits(values[6]).to_f32()), + fan_output: FanOutput::from_bits(values[7]), + }) + }, + false => Err(()), + } + } + + pub fn save_config(&mut self, config: &SystemConfig) { + + // prepare buffer for later storage + let mut values: [u16; 10] = [0; 10]; + values[2] = f16::from_f32(config.max_temp_diff).to_bits(); + values[3] = f16::from_f32(config.min_temp_diff).to_bits(); + values[4] = f16::from_f32(config.ext_offset.offset).to_bits(); + values[5] = f16::from_f32(config.p1_offset.offset).to_bits(); + values[6] = f16::from_f32(config.p2_offset.offset).to_bits(); + values[7] = config.fan_output.to_bits(); + + // compute CRC + self.crc.reset(); + for i in (2..8).step_by(2) { + self.crc.write((values[i] as u32) << 16 | values[i+1] as u32); + } + let crc = self.crc.read(); + values[0] = ((crc >> 16) & 0xFFFF) as u16; + values[1] = (crc & 0xFFFF) as u16; + + // write to persistent memory + for (i, val) in values.iter().enumerate() { + self.backup_domain.write_data_register_low(i, *val); + } + } +} +