From 74d40fa453ba1e3ef4507f88e4b08ee296025edd Mon Sep 17 00:00:00 2001 From: a74589669 <290198252@qq.com> Date: Sat, 1 Jun 2019 23:18:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=AD=A5=E8=BF=9B=E7=94=B5?= =?UTF-8?q?=E6=9C=BA=E9=A9=B1=E5=8A=A8=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvoptx | 308 +++++ .../KEIL/PWM_DeadZone.uvproj.saved_uv4 | 479 +++++++ 9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvprojx | 515 ++++++++ .../KEIL/RTE/Device/M453VG6AE/retarget.c | 678 ++++++++++ .../RTE/Device/M453VG6AE/startup_M451Series.s | 376 ++++++ .../RTE/Device/M453VG6AE/system_M451Series.c | 109 ++ .../KEIL/RTE/_PWM_DeadZone/RTE_Components.h | 29 + OLED/M451/OLED_TEST/Listings/OLED.map | 238 ++-- .../OLED_TEST/Listings/startup_m451series.lst | 11 +- OLED/M451/OLED_TEST/OLED.uvguix.29019 | 538 ++++---- OLED/M451/OLED_TEST/OLED.uvoptx | 4 +- OLED/M451/OLED_TEST/OLED.uvprojx | 1 + OLED/M451/OLED_TEST/Objects/OLED.axf | Bin 309676 -> 310272 bytes OLED/M451/OLED_TEST/Objects/OLED.lnp | 6 +- .../M451/OLED_TEST/RTE/_oled/RTE_Components.h | 9 +- mpu6050/m451/mpu.c | 11 +- stepper/EventRecorderStub.scvd | 9 + stepper/Listings/stepper.map | 1096 +++++++++++++++++ stepper/Objects/stepper.axf | Bin 0 -> 619268 bytes stepper/Objects/stepper.lnp | 18 + stepper/RTE/Device/M451MRE6AE/retarget.c | 679 ++++++++++ .../Device/M451MRE6AE/startup_M451Series.s | 376 ++++++ .../RTE/Device/M451MRE6AE/system_M451Series.c | 109 ++ stepper/RTE/Device/M453VG6AE/retarget.c | 678 ++++++++++ .../RTE/Device/M453VG6AE/startup_M451Series.s | 376 ++++++ .../RTE/Device/M453VG6AE/system_M451Series.c | 109 ++ stepper/RTE/_Target_1/RTE_Components.h | 39 + stepper/codetab.h | 380 ++++++ stepper/hal_i2c.c | 228 ++++ stepper/main.cpp | 334 +++++ stepper/ssd1306.c | 171 +++ stepper/ssd1306.h | 22 + stepper/stepper.uvoptx | 476 +++++++ stepper/stepper.uvprojx | 523 ++++++++ 34 files changed, 8527 insertions(+), 408 deletions(-) create mode 100644 9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvoptx create mode 100644 9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvproj.saved_uv4 create mode 100644 9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvprojx create mode 100644 9G/PWM_DeadZone/KEIL/RTE/Device/M453VG6AE/retarget.c create mode 100644 9G/PWM_DeadZone/KEIL/RTE/Device/M453VG6AE/startup_M451Series.s create mode 100644 9G/PWM_DeadZone/KEIL/RTE/Device/M453VG6AE/system_M451Series.c create mode 100644 9G/PWM_DeadZone/KEIL/RTE/_PWM_DeadZone/RTE_Components.h create mode 100644 stepper/EventRecorderStub.scvd create mode 100644 stepper/Listings/stepper.map create mode 100644 stepper/Objects/stepper.axf create mode 100644 stepper/Objects/stepper.lnp create mode 100644 stepper/RTE/Device/M451MRE6AE/retarget.c create mode 100644 stepper/RTE/Device/M451MRE6AE/startup_M451Series.s create mode 100644 stepper/RTE/Device/M451MRE6AE/system_M451Series.c create mode 100644 stepper/RTE/Device/M453VG6AE/retarget.c create mode 100644 stepper/RTE/Device/M453VG6AE/startup_M451Series.s create mode 100644 stepper/RTE/Device/M453VG6AE/system_M451Series.c create mode 100644 stepper/RTE/_Target_1/RTE_Components.h create mode 100644 stepper/codetab.h create mode 100644 stepper/hal_i2c.c create mode 100644 stepper/main.cpp create mode 100644 stepper/ssd1306.c create mode 100644 stepper/ssd1306.h create mode 100644 stepper/stepper.uvoptx create mode 100644 stepper/stepper.uvprojx diff --git a/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvoptx b/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvoptx new file mode 100644 index 0000000..a69f6e4 --- /dev/null +++ b/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvoptx @@ -0,0 +1,308 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + PWM_DeadZone + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\lst\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 6 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 7 + + + + + + + + + + + NULink\Nu_Link.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0M451_AP_256 -FS00 -FL040000 -FP0($$Device:M453VG6AE$Flash\M451_AP_256.FLM)) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + CMSIS + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\..\..\Library\Device\Nuvoton\M451Series\Source\system_M451Series.c + system_M451Series.c + 0 + 0 + + + 1 + 2 + 2 + 0 + 0 + 0 + ..\..\..\..\Library\Device\Nuvoton\M451Series\Source\ARM\startup_M451Series.s + startup_M451Series.s + 0 + 0 + + + + + User + 1 + 0 + 0 + 0 + + 2 + 3 + 1 + 1 + 0 + 0 + ..\main.c + main.c + 0 + 0 + + + + + Library + 1 + 0 + 0 + 0 + + 3 + 4 + 1 + 0 + 0 + 0 + ..\..\..\..\Library\StdDriver\src\retarget.c + retarget.c + 0 + 0 + + + 3 + 5 + 1 + 0 + 0 + 0 + ..\..\..\..\Library\StdDriver\src\clk.c + clk.c + 0 + 0 + + + 3 + 6 + 1 + 0 + 0 + 0 + ..\..\..\..\Library\StdDriver\src\pwm.c + pwm.c + 0 + 0 + + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\..\Library\StdDriver\src\sys.c + sys.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\..\Library\StdDriver\src\uart.c + uart.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvproj.saved_uv4 b/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvproj.saved_uv4 new file mode 100644 index 0000000..6a6bb67 --- /dev/null +++ b/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvproj.saved_uv4 @@ -0,0 +1,479 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + PWM_DeadZone + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + M453VG6AE + Nuvoton + IRAM(0x20000000-0x20007FFF) IROM(0-0x3FFFF) CLOCK(50000000) CPUTYPE("Cortex-M4") FPU2 + + undefined + + 0 + + + + + + + + + + + SFD\Nuvoton\M451_v1.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\obj\ + PWM_DeadZone + 1 + 0 + 0 + 1 + 1 + .\lst\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 1 + fromelf --bin ".\obj\@L.axf" --output ".\obj\@L.bin" + fromelf --text -c ".\obj\@L.axf" --output ".\obj\@L.txt" + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + + SARMCM3.DLL + + TARMCM1.DLL + + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 20 + + + + + + + + + + + + + + Bin\Nu_Link.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4102 + + 0 + Bin\Nu_Link.dll + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 0 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + ..\..\..\..\Library\Device\Nuvoton\M451Series\Include;..\..\..\..\Library\StdDriver\inc;..\..\..\..\Library\CMSIS\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + --map --first='startup_M451series.o(RESET)' --datacompressor=off --info=inline --entry Reset_Handler + + + + + + + + CMSIS + + + system_M451Series.c + 1 + ..\..\..\..\Library\Device\Nuvoton\M451Series\Source\system_M451Series.c + + + startup_M451Series.s + 2 + ..\..\..\..\Library\Device\Nuvoton\M451Series\Source\ARM\startup_M451Series.s + + + + + User + + + main.c + 1 + ..\main.c + + + + + Library + + + retarget.c + 1 + ..\..\..\..\Library\StdDriver\src\retarget.c + + + clk.c + 1 + ..\..\..\..\Library\StdDriver\src\clk.c + + + pwm.c + 1 + ..\..\..\..\Library\StdDriver\src\pwm.c + + + sys.c + 1 + ..\..\..\..\Library\StdDriver\src\sys.c + + + uart.c + 1 + ..\..\..\..\Library\StdDriver\src\uart.c + + + + + + + +
diff --git a/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvprojx b/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvprojx new file mode 100644 index 0000000..b378367 --- /dev/null +++ b/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvprojx @@ -0,0 +1,515 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + PWM_DeadZone + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + M453VG6AE + Nuvoton + Nuvoton.NuMicro_DFP.1.2.0 + http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack + IRAM(0x20000000,0x8000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0M451_AP_256 -FS00 -FL040000 -FP0($$Device:M453VG6AE$Flash\M451_AP_256.FLM)) + 8196 + $$Device:M453VG6AE$Device\M451\Include\M451Series.h + + + + + + + + + + $$Device:M453VG6AE$SVD\Nuvoton\M451_v1.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\obj\ + PWM_DeadZone + 1 + 0 + 0 + 1 + 1 + .\lst\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 1 + fromelf --bin ".\obj\@L.axf" --output ".\obj\@L.bin" + fromelf --text -c ".\obj\@L.axf" --output ".\obj\@L.txt" + 0 + 0 + 0 + 0 + + 1 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + + SARMCM3.DLL + + TARMCM1.DLL + + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + ..\..\..\..\Library\Device\Nuvoton\M451Series\Include;..\..\..\..\Library\StdDriver\inc;..\..\..\..\Library\CMSIS\Include + + + + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + --map --first='startup_M451series.o(RESET)' --datacompressor=off --info=inline --entry Reset_Handler + + + + + + + + CMSIS + + + system_M451Series.c + 1 + ..\..\..\..\Library\Device\Nuvoton\M451Series\Source\system_M451Series.c + + + startup_M451Series.s + 2 + ..\..\..\..\Library\Device\Nuvoton\M451Series\Source\ARM\startup_M451Series.s + + + + + User + + + main.c + 1 + ..\main.c + + + + + Library + + + retarget.c + 1 + ..\..\..\..\Library\StdDriver\src\retarget.c + + + clk.c + 1 + ..\..\..\..\Library\StdDriver\src\clk.c + + + pwm.c + 1 + ..\..\..\..\Library\StdDriver\src\pwm.c + + + sys.c + 1 + ..\..\..\..\Library\StdDriver\src\sys.c + + + uart.c + 1 + ..\..\..\..\Library\StdDriver\src\uart.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\M453VG6AE\retarget.c + + + + + + + + RTE\Device\M453VG6AE\startup_M451Series.s + + + + + + + + RTE\Device\M453VG6AE\system_M451Series.c + + + + + + + + + +
diff --git a/9G/PWM_DeadZone/KEIL/RTE/Device/M453VG6AE/retarget.c b/9G/PWM_DeadZone/KEIL/RTE/Device/M453VG6AE/retarget.c new file mode 100644 index 0000000..3aeb8aa --- /dev/null +++ b/9G/PWM_DeadZone/KEIL/RTE/Device/M453VG6AE/retarget.c @@ -0,0 +1,678 @@ +/**************************************************************************//** + * @file retarget.c + * @version V3.00 + * $Revision: 13 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 Series Debug Port and Semihost Setting Source File + * + * @note + * Copyright (C) 2011~2015 Nuvoton Technology Corp. All rights reserved. + * + ******************************************************************************/ + + +#include +#include "M451Series.h" + +#if defined ( __CC_ARM ) +#if (__ARMCC_VERSION < 400000) +#else +/* Insist on keeping widthprec, to avoid X propagation by benign code in C-lib */ +#pragma import _printf_widthprec +#endif +#endif + +/*---------------------------------------------------------------------------------------------------------*/ +/* Global variables */ +/*---------------------------------------------------------------------------------------------------------*/ +#if !(defined(__ICCARM__) && (__VER__ >= 6010000)) +struct __FILE +{ + int handle; /* Add whatever you need here */ +}; +#endif +FILE __stdout; +FILE __stdin; + +enum { r0, r1, r2, r3, r12, lr, pc, psr}; + +/** + * @brief Helper function to dump register while hard fault occurred + * @param[in] stack pointer points to the dumped registers in SRAM + * @return None + * @details This function is implement to print r0, r1, r2, r3, r12, lr, pc, psr + */ +static void stackDump(uint32_t stack[]) +{ + printf("r0 = 0x%x\n", stack[r0]); + printf("r1 = 0x%x\n", stack[r1]); + printf("r2 = 0x%x\n", stack[r2]); + printf("r3 = 0x%x\n", stack[r3]); + printf("r12 = 0x%x\n", stack[r12]); + printf("lr = 0x%x\n", stack[lr]); + printf("pc = 0x%x\n", stack[pc]); + printf("psr = 0x%x\n", stack[psr]); +} + +/** + * @brief Hard fault handler + * @param[in] stack pointer points to the dumped registers in SRAM + * @return None + * @details Replace while(1) at the end of this function with chip reset if WDT is not enabled for end product + */ +void Hard_Fault_Handler(uint32_t stack[]) +{ + printf("In Hard Fault Handler\n"); + + stackDump(stack); + // Replace while(1) with chip reset if WDT is not enabled for end product + while(1); + //SYS->IPRST0 = SYS_IPRST0_CHIPRST_Msk; +} + + + +/*---------------------------------------------------------------------------------------------------------*/ +/* Routine to write a char */ +/*---------------------------------------------------------------------------------------------------------*/ + +#if defined(DEBUG_ENABLE_SEMIHOST) +/* The static buffer is used to speed up the semihost */ +static char g_buf[16]; +static char g_buf_len = 0; + +# if defined(__ICCARM__) + +void SH_End(void) +{ + asm("MOVS R0,#1 \n" //; Set return value to 1 + "BX lr \n" //; Return + ); +} + +void SH_ICE(void) +{ + asm("CMP R2,#0 \n" + "BEQ SH_End \n" + "STR R0,[R2] \n" //; Save the return value to *pn32Out_R0 + ); +} + +/** + * + * @brief The function to process semihosted command + * @param[in] n32In_R0 : semihost register 0 + * @param[in] n32In_R1 : semihost register 1 + * @param[out] pn32Out_R0: semihost register 0 + * @retval 0: No ICE debug + * @retval 1: ICE debug + * + */ +int32_t SH_DoCommand(int32_t n32In_R0, int32_t n32In_R1, int32_t *pn32Out_R0) +{ + asm("BKPT 0xAB \n" //; This instruction will cause ICE trap or system HardFault + "B SH_ICE \n" + "SH_HardFault: \n" //; Captured by HardFault + "MOVS R0,#0 \n" //; Set return value to 0 + "BX lr \n" //; Return + ); + + return 1; //; Return 1 when it is trap by ICE +} + +/** + * @brief Get LR value and branch to Hard_Fault_Handler function + * @param None + * @return None + * @details This function is use to get LR value and branch to Hard_Fault_Handler function. + */ +void Get_LR_and_Branch(void) +{ + asm("MOV R1, LR \n" //; LR current value + "B Hard_Fault_Handler \n" + ); +} + +/** + * @brief Get MSP value and branch to Get_LR_and_Branch function + * @param None + * @return None + * @details This function is use to get stack pointer value and branch to Get_LR_and_Branch function. + */ +void Stack_Use_MSP(void) +{ + asm("MRS R0, MSP \n" //; read MSP + "B Get_LR_and_Branch \n" + ); +} + +/** + * @brief Get stack pointer value and branch to Get_LR_and_Branch function + * @param None + * @return None + * @details This function is use to get stack pointer value and branch to Get_LR_and_Branch function. + */ +void HardFault_Handler_Ret(void) +{ + asm("MOVS r0, #4 \n" + "MOV r1, LR \n" + "TST r0, r1 \n" //; check LR bit 2 + "BEQ Stack_Use_MSP \n" //; stack use MSP + "MRS R0, PSP \n" //; stack use PSP, read PSP + "B Get_LR_and_Branch \n" + ); +} + +/** + * @brief This function is implemented to support semihost + * @param None + * @returns None + * @details This function is implement to support semihost message print. + * + */ +void SP_Read_Ready(void) +{ + asm("LDR R1, [R0, #24] \n" //; Get previous PC + "LDRH R3, [R1] \n" //; Get instruction + "LDR R2, [pc, #8] \n" //; The special BKPT instruction + "CMP R3, R2 \n" //; Test if the instruction at previous PC is BKPT + "BNE HardFault_Handler_Ret \n" //; Not BKPT + "ADDS R1, #4 \n" //; Skip BKPT and next line + "STR R1, [R0, #24] \n" //; Save previous PC + "BX lr \n" //; Return + "DCD 0xBEAB \n" //; BKPT instruction code + "B HardFault_Handler_Ret \n" + ); +} + +/** + * @brief Get stack pointer value and branch to Get_LR_and_Branch function + * @param None + * @return None + * @details This function is use to get stack pointer value and branch to Get_LR_and_Branch function. + */ +void SP_is_PSP(void) +{ + asm( + "MRS R0, PSP \n" //; stack use PSP, read PSP + "B Get_LR_and_Branch \n" + + ); +} + +/** + * @brief This HardFault handler is implemented to support semihost + * + * @param None + * + * @returns None + * + * @details This function is implement to support semihost message print. + * + */ +void HardFault_Handler (void) +{ + asm("MOV R0, lr \n" + "LSLS R0, #29 \n" //; Check bit 2 + "BMI SP_is_PSP \n" //; previous stack is PSP + "MRS R0, MSP \n" //; previous stack is MSP, read MSP + "B SP_Read_Ready \n" + ); + + while(1); +} + +# else + +/** + * @brief This HardFault handler is implemented to support semihost + * @param None + * @returns None + * @details This function is implement to support semihost message print. + * + */ +__asm int32_t HardFault_Handler(void) +{ + MOV R0, LR + LSLS R0, #29 //; Check bit 2 + BMI SP_is_PSP //; previous stack is PSP + MRS R0, MSP //; previous stack is MSP, read MSP + B SP_Read_Ready +SP_is_PSP + MRS R0, PSP //; Read PSP + +SP_Read_Ready + LDR R1, [R0, #24] //; Get previous PC + LDRH R3, [R1] //; Get instruction + LDR R2, =0xBEAB //; The special BKPT instruction + CMP R3, R2 //; Test if the instruction at previous PC is BKPT + BNE HardFault_Handler_Ret //; Not BKPT + + ADDS R1, #4 //; Skip BKPT and next line + STR R1, [R0, #24] //; Save previous PC + + BX LR //; Return +HardFault_Handler_Ret + + /* TODO: Implement your own hard fault handler here. */ + MOVS r0, #4 + MOV r1, LR + TST r0, r1 //; check LR bit 2 + BEQ Stack_Use_MSP //; stack use MSP + MRS R0, PSP ;stack use PSP //; stack use PSP, read PSP + B Get_LR_and_Branch +Stack_Use_MSP + MRS R0, MSP ; stack use MSP //; read MSP +Get_LR_and_Branch + MOV R1, LR ; LR current value //; LR current value + LDR R2,=__cpp(Hard_Fault_Handler) //; branch to Hard_Fault_Handler + BX R2 + + B . + + ALIGN +} + +/** + * + * @brief The function to process semihosted command + * @param[in] n32In_R0 : semihost register 0 + * @param[in] n32In_R1 : semihost register 1 + * @param[out] pn32Out_R0: semihost register 0 + * @retval 0: No ICE debug + * @retval 1: ICE debug + * + */ +__asm int32_t SH_DoCommand(int32_t n32In_R0, int32_t n32In_R1, int32_t *pn32Out_R0) +{ + BKPT 0xAB //; Wait ICE or HardFault + //; ICE will step over BKPT directly + //; HardFault will step BKPT and the next line + B SH_ICE + +SH_HardFault //; Captured by HardFault + MOVS R0, #0 //; Set return value to 0 + BX lr //; Return + +SH_ICE //; Captured by ICE + //; Save return value + CMP R2, #0 + BEQ SH_End + STR R0, [R2] //; Save the return value to *pn32Out_R0 + +SH_End + MOVS R0, #1 //; Set return value to 1 + BX lr //; Return +} +#endif + +#else + +# if defined(__ICCARM__) + +void Get_LR_and_Branch(void) +{ + asm("MOV R1, LR \n" //; LR current value + "B Hard_Fault_Handler \n" + ); +} + +void Stack_Use_MSP(void) +{ + asm("MRS R0, MSP \n" //; read MSP + "B Get_LR_and_Branch \n" + ); +} + +/** + * @brief This HardFault handler is implemented to show r0, r1, r2, r3, r12, lr, pc, psr + * + * @param None + * + * @returns None + * + * @details This function is implement to print r0, r1, r2, r3, r12, lr, pc, psr. + * + */ +void HardFault_Handler(void) +{ + asm("MOVS r0, #4 \n" + "MOV r1, LR \n" + "TST r0, r1 \n" //; check LR bit 2 + "BEQ Stack_Use_MSP \n" //; stack use MSP + "MRS R0, PSP \n" //; stack use PSP, read PSP + "B Get_LR_and_Branch \n" + ); + + while(1); +} + +# else + +/** + * @brief This HardFault handler is implemented to show r0, r1, r2, r3, r12, lr, pc, psr + * + * @param None + * + * @return None + * + * @details The function extracts the location of stack frame and passes it to Hard_Fault_Handler function as a pointer + * + */ +__asm int32_t HardFault_Handler(void) +{ + MOVS r0, #4 + MOV r1, LR + TST r0, r1 //; check LR bit 2 + BEQ Stack_Use_MSP //; stack use MSP + MRS R0, PSP //; stack use PSP, read PSP + B Get_LR_and_Branch +Stack_Use_MSP + MRS R0, MSP //; read MSP +Get_LR_and_Branch + MOV R1, LR //; LR current value + LDR R2,=__cpp(Hard_Fault_Handler) //; branch to Hard_Fault_Handler + BX R2 +} + +#endif + +#endif + + +/** + * @brief Routine to send a char + * + * @param[in] ch Character to send to debug port. + * + * @returns Send value from UART debug port + * + * @details Send a target char to UART debug port . + */ +#ifndef NONBLOCK_PRINTF +void SendChar_ToUART(int ch) +{ + while(DEBUG_PORT->FIFOSTS & UART_FIFOSTS_TXFULL_Msk); + + DEBUG_PORT->DAT = ch; + if(ch == '\n') + { + while(DEBUG_PORT->FIFOSTS & UART_FIFOSTS_TXFULL_Msk); + DEBUG_PORT->DAT = '\r'; + } +} + +#else +/* Non-block implement of send char */ +#define BUF_SIZE 2048 +void SendChar_ToUART(int ch) +{ + static uint8_t u8Buf[BUF_SIZE] = {0}; + static int32_t i32Head = 0; + static int32_t i32Tail = 0; + int32_t i32Tmp; + + /* Only flush the data in buffer to UART when ch == 0 */ + if(ch) + { + // Push char + i32Tmp = i32Head+1; + if(i32Tmp > BUF_SIZE) i32Tmp = 0; + if(i32Tmp != i32Tail) + { + u8Buf[i32Head] = ch; + i32Head = i32Tmp; + } + + if(ch == '\n') + { + i32Tmp = i32Head+1; + if(i32Tmp > BUF_SIZE) i32Tmp = 0; + if(i32Tmp != i32Tail) + { + u8Buf[i32Head] = '\r'; + i32Head = i32Tmp; + } + } + } + else + { + if(i32Tail == i32Head) + return; + } + + // pop char + do + { + i32Tmp = i32Tail + 1; + if(i32Tmp > BUF_SIZE) i32Tmp = 0; + + if((DEBUG_PORT->FIFOSTS & UART_FIFOSTS_TXFULL_Msk) == 0) + { + DEBUG_PORT->DAT = u8Buf[i32Tail]; + i32Tail = i32Tmp; + } + else + break; // FIFO full + }while(i32Tail != i32Head); +} +#endif + +/** + * @brief Routine to send a char + * + * @param[in] ch Character to send to debug port. + * + * @returns Send value from UART debug port or semihost + * + * @details Send a target char to UART debug port or semihost. + */ +void SendChar(int ch) +{ +#if defined(DEBUG_ENABLE_SEMIHOST) + g_buf[g_buf_len++] = ch; + g_buf[g_buf_len] = '\0'; + if(g_buf_len + 1 >= sizeof(g_buf) || ch == '\n' || ch == '\0') + { + /* Send the char */ + if(SH_DoCommand(0x04, (int)g_buf, NULL) != 0) + { + g_buf_len = 0; + return; + } + else + { + int i; + + for(i = 0; i < g_buf_len; i++) + SendChar_ToUART(g_buf[i]); + g_buf_len = 0; + } + } +#else + SendChar_ToUART(ch); +#endif +} + +/** + * @brief Routine to get a char + * + * @param None + * + * @returns Get value from UART debug port or semihost + * + * @details Wait UART debug port or semihost to input a char. + */ +char GetChar(void) +{ +#ifdef DEBUG_ENABLE_SEMIHOST +# if defined (__CC_ARM) + int nRet; + while(SH_DoCommand(0x101, 0, &nRet) != 0) + { + if(nRet != 0) + { + SH_DoCommand(0x07, 0, &nRet); + return (char)nRet; + } + } +# else + int nRet; + while(SH_DoCommand(0x7, 0, &nRet) != 0) + { + if(nRet != 0) + return (char)nRet; + } +# endif + return (0); +#else + + while(1) + { + if((DEBUG_PORT->FIFOSTS & UART_FIFOSTS_RXEMPTY_Msk) == 0) + { + return (DEBUG_PORT->DAT); + } + } + +#endif +} + +/** + * @brief Check any char input from UART + * + * @param None + * + * @retval 1: No any char input + * @retval 0: Have some char input + * + * @details Check UART RSR RX EMPTY or not to determine if any char input from UART + */ + +int kbhit(void) +{ + return !((DEBUG_PORT->FIFOSTS & UART_FIFOSTS_RXEMPTY_Msk) == 0); +} +/** + * @brief Check if debug message finished + * + * @param None + * + * @retval 1: Message is finished + * @retval 0: Message is transmitting. + * + * @details Check if message finished (FIFO empty of debug port) + */ + +int IsDebugFifoEmpty(void) +{ + return ((DEBUG_PORT->FIFOSTS & UART_FIFOSTS_TXEMPTYF_Msk) != 0); +} + +/** + * @brief C library retargetting + * + * @param[in] ch Character to send to debug port. + * + * @returns None + * + * @details Check if message finished (FIFO empty of debug port) + */ + +void _ttywrch(int ch) +{ + SendChar(ch); + return; +} + + +/** + * @brief Write character to stream + * + * @param[in] ch Character to be written. The character is passed as its int promotion. + * @param[in] stream Pointer to a FILE object that identifies the stream where the character is to be written. + * + * @returns If there are no errors, the same character that has been written is returned. + * If an error occurs, EOF is returned and the error indicator is set (see ferror). + * + * @details Writes a character to the stream and advances the position indicator.\n + * The character is written at the current position of the stream as indicated \n + * by the internal position indicator, which is then advanced one character. + * + * @note The above descriptions are copied from http://www.cplusplus.com/reference/clibrary/cstdio/fputc/. + * + * + */ + +int fputc(int ch, FILE *stream) +{ + SendChar(ch); + return ch; +} + + +/** + * @brief Get character from UART debug port or semihosting input + * + * @param[in] stream Pointer to a FILE object that identifies the stream on which the operation is to be performed. + * + * @returns The character read from UART debug port or semihosting + * + * @details For get message from debug port or semihosting. + * + */ + +int fgetc(FILE *stream) +{ + return (GetChar()); +} + +/** + * @brief Check error indicator + * + * @param[in] stream Pointer to a FILE object that identifies the stream. + * + * @returns If the error indicator associated with the stream was set, the function returns a nonzero value. + * Otherwise, it returns a zero value. + * + * @details Checks if the error indicator associated with stream is set, returning a value different + * from zero if it is. This indicator is generally set by a previous operation on the stream that failed. + * + * @note The above descriptions are copied from http://www.cplusplus.com/reference/clibrary/cstdio/ferror/. + * + */ + +int ferror(FILE *stream) +{ + return EOF; +} + +#ifdef DEBUG_ENABLE_SEMIHOST +# ifdef __ICCARM__ +void __exit(int return_code) +{ + + /* Check if link with ICE */ + if(SH_DoCommand(0x18, 0x20026, NULL) == 0) + { + /* Make sure all message is print out */ + while(IsDebugFifoEmpty() == 0); + } +label: + goto label; /* endless loop */ +} +# else +void _sys_exit(int return_code) +{ + + /* Check if link with ICE */ + if(SH_DoCommand(0x18, 0x20026, NULL) == 0) + { + /* Make sure all message is print out */ + while(IsDebugFifoEmpty() == 0); + } +label: + goto label; /* endless loop */ +} +# endif +#endif diff --git a/9G/PWM_DeadZone/KEIL/RTE/Device/M453VG6AE/startup_M451Series.s b/9G/PWM_DeadZone/KEIL/RTE/Device/M453VG6AE/startup_M451Series.s new file mode 100644 index 0000000..c083f20 --- /dev/null +++ b/9G/PWM_DeadZone/KEIL/RTE/Device/M453VG6AE/startup_M451Series.s @@ -0,0 +1,376 @@ +;/****************************************************************************** +; * @file startup_M451Series.s +; * @version V0.10 +; * $Revision: 5 $ +; * $Date: 14/12/24 10:20a $ +; * @brief CMSIS Cortex-M4 Core Device Startup File for M451 Series MCU +; * +; * @note +; * Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved. +;*****************************************************************************/ +;/* +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ +;*/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + + ; User may overwrite stack size setting by pre-defined symbol + IF :LNOT: :DEF: Stack_Size +Stack_Size EQU 0x00000400 + ENDIF + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + + IF :LNOT: :DEF: Heap_Size +Heap_Size EQU 0x00000000 + ENDIF + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD BOD_IRQHandler ; 0: Brown Out detection + DCD IRC_IRQHandler ; 1: Internal RC + DCD PWRWU_IRQHandler ; 2: Power down wake up + DCD RAMPE_IRQHandler ; 3: RAM parity error + DCD CLKFAIL_IRQHandler ; 4: Clock detection fail + DCD Default_Handler ; 5: Reserved + DCD RTC_IRQHandler ; 6: Real Time Clock + DCD TAMPER_IRQHandler ; 7: Tamper detection + DCD WDT_IRQHandler ; 8: Watchdog timer + DCD WWDT_IRQHandler ; 9: Window watchdog timer + DCD EINT0_IRQHandler ; 10: External Input 0 + DCD EINT1_IRQHandler ; 11: External Input 1 + DCD EINT2_IRQHandler ; 12: External Input 2 + DCD EINT3_IRQHandler ; 13: External Input 3 + DCD EINT4_IRQHandler ; 14: External Input 4 + DCD EINT5_IRQHandler ; 15: External Input 5 + DCD GPA_IRQHandler ; 16: GPIO Port A + DCD GPB_IRQHandler ; 17: GPIO Port B + DCD GPC_IRQHandler ; 18: GPIO Port C + DCD GPD_IRQHandler ; 19: GPIO Port D + DCD GPE_IRQHandler ; 20: GPIO Port E + DCD GPF_IRQHandler ; 21: GPIO Port F + DCD SPI0_IRQHandler ; 22: SPI0 + DCD SPI1_IRQHandler ; 23: SPI1 + DCD BRAKE0_IRQHandler ; 24: + DCD PWM0P0_IRQHandler ; 25: + DCD PWM0P1_IRQHandler ; 26: + DCD PWM0P2_IRQHandler ; 27: + DCD BRAKE1_IRQHandler ; 28: + DCD PWM1P0_IRQHandler ; 29: + DCD PWM1P1_IRQHandler ; 30: + DCD PWM1P2_IRQHandler ; 31: + DCD TMR0_IRQHandler ; 32: Timer 0 + DCD TMR1_IRQHandler ; 33: Timer 1 + DCD TMR2_IRQHandler ; 34: Timer 2 + DCD TMR3_IRQHandler ; 35: Timer 3 + DCD UART0_IRQHandler ; 36: UART0 + DCD UART1_IRQHandler ; 37: UART1 + DCD I2C0_IRQHandler ; 38: I2C0 + DCD I2C1_IRQHandler ; 39: I2C1 + DCD PDMA_IRQHandler ; 40: Peripheral DMA + DCD DAC_IRQHandler ; 41: DAC + DCD ADC00_IRQHandler ; 42: ADC0 interrupt source 0 + DCD ADC01_IRQHandler ; 43: ADC0 interrupt source 1 + DCD ACMP01_IRQHandler ; 44: ACMP0 and ACMP1 + DCD Default_Handler ; 45: Reserved + DCD ADC02_IRQHandler ; 46: ADC0 interrupt source 2 + DCD ADC03_IRQHandler ; 47: ADC0 interrupt source 3 + DCD UART2_IRQHandler ; 48: UART2 + DCD UART3_IRQHandler ; 49: UART3 + DCD Default_Handler ; 50: Reserved + DCD SPI2_IRQHandler ; 51: SPI2 + DCD Default_Handler ; 52: Reserved + DCD USBD_IRQHandler ; 53: USB device + DCD USBH_IRQHandler ; 54: USB host + DCD USBOTG_IRQHandler ; 55: USB OTG + DCD CAN0_IRQHandler ; 56: CAN0 + DCD Default_Handler ; 57: Reserved + DCD SC0_IRQHandler ; 58: + DCD Default_Handler ; 59: Reserved. + DCD Default_Handler ; 60: + DCD Default_Handler ; 61: + DCD Default_Handler ; 62: + DCD TK_IRQHandler ; 63: + +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =0x40000100 + ; Unlock Register + LDR R1, =0x59 + STR R1, [R0] + LDR R1, =0x16 + STR R1, [R0] + LDR R1, =0x88 + STR R1, [R0] + + ; Init POR + LDR R2, =0x40000024 + LDR R1, =0x00005AA5 + STR R1, [R2] + + ; Select INV Type + LDR R2, =0x40000200 + LDR R1, [R2] + BIC R1, R1, #0x1000 + STR R1, [R2] + + ; Lock register + MOVS R1, #0 + STR R1, [R0] + + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler\ + PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler\ + PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT BOD_IRQHandler [WEAK] + EXPORT IRC_IRQHandler [WEAK] + EXPORT PWRWU_IRQHandler [WEAK] + EXPORT RAMPE_IRQHandler [WEAK] + EXPORT CLKFAIL_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT WDT_IRQHandler [WEAK] + EXPORT WWDT_IRQHandler [WEAK] + EXPORT EINT0_IRQHandler [WEAK] + EXPORT EINT1_IRQHandler [WEAK] + EXPORT EINT2_IRQHandler [WEAK] + EXPORT EINT3_IRQHandler [WEAK] + EXPORT EINT4_IRQHandler [WEAK] + EXPORT EINT5_IRQHandler [WEAK] + EXPORT GPA_IRQHandler [WEAK] + EXPORT GPB_IRQHandler [WEAK] + EXPORT GPC_IRQHandler [WEAK] + EXPORT GPD_IRQHandler [WEAK] + EXPORT GPE_IRQHandler [WEAK] + EXPORT GPF_IRQHandler [WEAK] + EXPORT SPI0_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT BRAKE0_IRQHandler [WEAK] + EXPORT PWM0P0_IRQHandler [WEAK] + EXPORT PWM0P1_IRQHandler [WEAK] + EXPORT PWM0P2_IRQHandler [WEAK] + EXPORT BRAKE1_IRQHandler [WEAK] + EXPORT PWM1P0_IRQHandler [WEAK] + EXPORT PWM1P1_IRQHandler [WEAK] + EXPORT PWM1P2_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT I2C0_IRQHandler [WEAK] + EXPORT I2C1_IRQHandler [WEAK] + EXPORT PDMA_IRQHandler [WEAK] + EXPORT DAC_IRQHandler [WEAK] + EXPORT ADC00_IRQHandler [WEAK] + EXPORT ADC01_IRQHandler [WEAK] + EXPORT ACMP01_IRQHandler [WEAK] + EXPORT ADC02_IRQHandler [WEAK] + EXPORT ADC03_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USBD_IRQHandler [WEAK] + EXPORT USBH_IRQHandler [WEAK] + EXPORT USBOTG_IRQHandler [WEAK] + EXPORT CAN0_IRQHandler [WEAK] + EXPORT SC0_IRQHandler [WEAK] + EXPORT TK_IRQHandler [WEAK] + +BOD_IRQHandler +IRC_IRQHandler +PWRWU_IRQHandler +RAMPE_IRQHandler +CLKFAIL_IRQHandler +RTC_IRQHandler +TAMPER_IRQHandler +WDT_IRQHandler +WWDT_IRQHandler +EINT0_IRQHandler +EINT1_IRQHandler +EINT2_IRQHandler +EINT3_IRQHandler +EINT4_IRQHandler +EINT5_IRQHandler +GPA_IRQHandler +GPB_IRQHandler +GPC_IRQHandler +GPD_IRQHandler +GPE_IRQHandler +GPF_IRQHandler +SPI0_IRQHandler +SPI1_IRQHandler +BRAKE0_IRQHandler +PWM0P0_IRQHandler +PWM0P1_IRQHandler +PWM0P2_IRQHandler +BRAKE1_IRQHandler +PWM1P0_IRQHandler +PWM1P1_IRQHandler +PWM1P2_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +I2C0_IRQHandler +I2C1_IRQHandler +PDMA_IRQHandler +DAC_IRQHandler +ADC00_IRQHandler +ADC01_IRQHandler +ACMP01_IRQHandler +ADC02_IRQHandler +ADC03_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +SPI2_IRQHandler +USBD_IRQHandler +USBH_IRQHandler +USBOTG_IRQHandler +CAN0_IRQHandler +SC0_IRQHandler +TK_IRQHandler + B . + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + + END +;/*** (C) COPYRIGHT 2014 Nuvoton Technology Corp. ***/ diff --git a/9G/PWM_DeadZone/KEIL/RTE/Device/M453VG6AE/system_M451Series.c b/9G/PWM_DeadZone/KEIL/RTE/Device/M453VG6AE/system_M451Series.c new file mode 100644 index 0000000..daf91b9 --- /dev/null +++ b/9G/PWM_DeadZone/KEIL/RTE/Device/M453VG6AE/system_M451Series.c @@ -0,0 +1,109 @@ +/****************************************************************************** + * @file system_M451Series.c + * @version V0.10 + * $Revision: 11 $ + * $Date: 15/09/02 10:02a $ + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Source File for M451 Series MCU + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ + +#include "M451Series.h" + + +/*---------------------------------------------------------------------------- + DEFINES + *----------------------------------------------------------------------------*/ + + +/*---------------------------------------------------------------------------- + Clock Variable definitions + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = __SYSTEM_CLOCK; /*!< System Clock Frequency (Core Clock)*/ +uint32_t CyclesPerUs = (__HSI / 1000000); /* Cycles per micro second */ +uint32_t PllClock = __HSI; /*!< PLL Output Clock Frequency */ +uint32_t gau32ClkSrcTbl[] = {__HXT, __LXT, 0, __LIRC, 0, 0, 0, __HIRC}; + +/*---------------------------------------------------------------------------- + Clock functions + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate(void) /* Get Core Clock Frequency */ +{ +#if 1 + uint32_t u32Freq, u32ClkSrc; + uint32_t u32HclkDiv; + + /* Update PLL Clock */ + PllClock = CLK_GetPLLClockFreq(); + + u32ClkSrc = CLK->CLKSEL0 & CLK_CLKSEL0_HCLKSEL_Msk; + + if(u32ClkSrc == CLK_CLKSEL0_HCLKSEL_PLL) + { + /* Use PLL clock */ + u32Freq = PllClock; + } + else + { + /* Use the clock sources directly */ + u32Freq = gau32ClkSrcTbl[u32ClkSrc]; + } + + u32HclkDiv = (CLK->CLKDIV0 & CLK_CLKDIV0_HCLKDIV_Msk) + 1; + + /* Update System Core Clock */ + SystemCoreClock = u32Freq / u32HclkDiv; + + + //if(SystemCoreClock == 0) + // __BKPT(0); + + CyclesPerUs = (SystemCoreClock + 500000) / 1000000; +#endif +} + +/** + * Initialize the system + * + * @param None + * @return None + * + * @brief Setup the microcontroller system. + * Initialize the System. + */ +void SystemInit(void) +{ + /* ToDo: add code to initialize the system + do not use global variables because this function is called before + reaching pre-main. RW section maybe overwritten afterwards. */ + + SYS_UnlockReg(); + /* One-time POR18 */ + if((SYS->PDID >> 12) == 0x945) + { + M32(GCR_BASE+0x14) |= BIT7; + } + /* Force to use INV type with HXT */ + CLK->PWRCTL &= ~CLK_PWRCTL_HXTSELTYP_Msk; + SYS_LockReg(); + + +#ifdef EBI_INIT + extern void SYS_Init(); + extern void EBI_Init(); + + SYS_UnlockReg(); + SYS_Init(); + EBI_Init(); + SYS_LockReg(); +#endif + + /* FPU settings ------------------------------------------------------------*/ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10 * 2) | /* set CP10 Full Access */ + (3UL << 11 * 2)); /* set CP11 Full Access */ +#endif + +} +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/9G/PWM_DeadZone/KEIL/RTE/_PWM_DeadZone/RTE_Components.h b/9G/PWM_DeadZone/KEIL/RTE/_PWM_DeadZone/RTE_Components.h new file mode 100644 index 0000000..c6ca16c --- /dev/null +++ b/9G/PWM_DeadZone/KEIL/RTE/_PWM_DeadZone/RTE_Components.h @@ -0,0 +1,29 @@ + +/* + * Auto generated Run-Time-Environment Configuration File + * *** Do not modify ! *** + * + * Project: 'PWM_DeadZone' + * Target: 'PWM_DeadZone' + */ + +#ifndef RTE_COMPONENTS_H +#define RTE_COMPONENTS_H + + +/* + * Define the Device Header File: + */ +#define CMSIS_device_header "M451Series.h" + +/* Nuvoton::Device:Driver:CLK:3.01.001 */ +#define RTE_Drivers_CLK /* Driver CLK */ +/* Nuvoton::Device:Driver:PWM:3.01.001 */ +#define RTE_Drivers_PWM /* Driver PWM */ +/* Nuvoton::Device:Driver:SYS:3.01.001 */ +#define RTE_Drivers_SYS /* Driver SYS */ +/* Nuvoton::Device:Driver:UART:3.01.001 */ +#define RTE_Drivers_UART /* Driver UART */ + + +#endif /* RTE_COMPONENTS_H */ diff --git a/OLED/M451/OLED_TEST/Listings/OLED.map b/OLED/M451/OLED_TEST/Listings/OLED.map index 965388d..cf53d28 100644 --- a/OLED/M451/OLED_TEST/Listings/OLED.map +++ b/OLED/M451/OLED_TEST/Listings/OLED.map @@ -41,6 +41,31 @@ Section Cross References ssd1306.o(i.print_C) refers to ssd1306.o(.data) for F8X16 ssd1306.o(i.print_Line) refers to ssd1306.o(i.print_C) for print_C ssd1306.o(i.print_Line) refers to strlen.o(.text) for strlen + retarget.o(.emb_text) refers to retarget.o(i.Hard_Fault_Handler) for Hard_Fault_Handler + retarget.o(i.Hard_Fault_Handler) refers to noretval__2printf.o(.text) for __2printf + retarget.o(i.Hard_Fault_Handler) refers to retarget.o(i.stackDump) for stackDump + retarget.o(i.SendChar) refers to retarget.o(i.SendChar_ToUART) for SendChar_ToUART + retarget.o(i._ttywrch) refers to retarget.o(i.SendChar) for SendChar + retarget.o(i.fgetc) refers to retarget.o(i.GetChar) for GetChar + retarget.o(i.fputc) refers to retarget.o(i.SendChar) for SendChar + retarget.o(i.stackDump) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + retarget.o(i.stackDump) refers to _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) for _printf_x + retarget.o(i.stackDump) refers to _printf_hex_int.o(.text) for _printf_longlong_hex + retarget.o(i.stackDump) refers to noretval__2printf.o(.text) for __2printf + startup_m451series.o(STACK) refers (Special) to heapauxi.o(.text) for __use_two_region_memory + startup_m451series.o(HEAP) refers (Special) to heapauxi.o(.text) for __use_two_region_memory + startup_m451series.o(RESET) refers (Special) to heapauxi.o(.text) for __use_two_region_memory + startup_m451series.o(RESET) refers to startup_m451series.o(STACK) for __initial_sp + startup_m451series.o(RESET) refers to startup_m451series.o(.text) for Reset_Handler + startup_m451series.o(RESET) refers to retarget.o(.emb_text) for HardFault_Handler + startup_m451series.o(RESET) refers to main.o(i.I2C0_IRQHandler) for I2C0_IRQHandler + startup_m451series.o(.text) refers (Special) to heapauxi.o(.text) for __use_two_region_memory + startup_m451series.o(.text) refers to system_m451series.o(i.SystemInit) for SystemInit + startup_m451series.o(.text) refers to __main.o(!!!main) for __main + startup_m451series.o(.text) refers to startup_m451series.o(HEAP) for Heap_Mem + startup_m451series.o(.text) refers to startup_m451series.o(STACK) for Stack_Mem + system_m451series.o(i.SystemCoreClockUpdate) refers to system_m451series.o(i.CLK_GetPLLClockFreq) for CLK_GetPLLClockFreq + system_m451series.o(i.SystemCoreClockUpdate) refers to system_m451series.o(.data) for PllClock clk.o(i.CLK_DisableCKO) refers to clk.o(i.CLK_DisableModuleClock) for CLK_DisableModuleClock clk.o(i.CLK_EnableCKO) refers to clk.o(i.CLK_EnableModuleClock) for CLK_EnableModuleClock clk.o(i.CLK_EnableCKO) refers to clk.o(i.CLK_SetModuleClock) for CLK_SetModuleClock @@ -74,31 +99,6 @@ Section Cross References uart.o(i.UART_SelectIrDAMode) refers to uart.o(.constdata) for .constdata uart.o(i.UART_SetLine_Config) refers to uart.o(i.CLK_GetPLLClockFreq) for CLK_GetPLLClockFreq uart.o(i.UART_SetLine_Config) refers to uart.o(.constdata) for .constdata - retarget.o(.emb_text) refers to retarget.o(i.Hard_Fault_Handler) for Hard_Fault_Handler - retarget.o(i.Hard_Fault_Handler) refers to noretval__2printf.o(.text) for __2printf - retarget.o(i.Hard_Fault_Handler) refers to retarget.o(i.stackDump) for stackDump - retarget.o(i.SendChar) refers to retarget.o(i.SendChar_ToUART) for SendChar_ToUART - retarget.o(i._ttywrch) refers to retarget.o(i.SendChar) for SendChar - retarget.o(i.fgetc) refers to retarget.o(i.GetChar) for GetChar - retarget.o(i.fputc) refers to retarget.o(i.SendChar) for SendChar - retarget.o(i.stackDump) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent - retarget.o(i.stackDump) refers to _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) for _printf_x - retarget.o(i.stackDump) refers to _printf_hex_int.o(.text) for _printf_longlong_hex - retarget.o(i.stackDump) refers to noretval__2printf.o(.text) for __2printf - startup_m451series.o(STACK) refers (Special) to heapauxi.o(.text) for __use_two_region_memory - startup_m451series.o(HEAP) refers (Special) to heapauxi.o(.text) for __use_two_region_memory - startup_m451series.o(RESET) refers (Special) to heapauxi.o(.text) for __use_two_region_memory - startup_m451series.o(RESET) refers to startup_m451series.o(STACK) for __initial_sp - startup_m451series.o(RESET) refers to startup_m451series.o(.text) for Reset_Handler - startup_m451series.o(RESET) refers to retarget.o(.emb_text) for HardFault_Handler - startup_m451series.o(RESET) refers to main.o(i.I2C0_IRQHandler) for I2C0_IRQHandler - startup_m451series.o(.text) refers (Special) to heapauxi.o(.text) for __use_two_region_memory - startup_m451series.o(.text) refers to system_m451series.o(i.SystemInit) for SystemInit - startup_m451series.o(.text) refers to __main.o(!!!main) for __main - startup_m451series.o(.text) refers to startup_m451series.o(HEAP) for Heap_Mem - startup_m451series.o(.text) refers to startup_m451series.o(STACK) for Stack_Mem - system_m451series.o(i.SystemCoreClockUpdate) refers to system_m451series.o(i.CLK_GetPLLClockFreq) for CLK_GetPLLClockFreq - system_m451series.o(i.SystemCoreClockUpdate) refers to system_m451series.o(.data) for PllClock __2printf.o(.text) refers to _printf_char_file.o(.text) for _printf_char_file __2printf.o(.text) refers to retarget.o(.data) for __stdout noretval__2printf.o(.text) refers to _printf_char_file.o(.text) for _printf_char_file @@ -253,6 +253,17 @@ Removing Unused input sections from the image. Removing ssd1306.o(.rrx_text), (6 bytes). Removing ssd1306.o(i.OLED_SingleRead), (220 bytes). Removing ssd1306.o(i.draw_LCD), (48 bytes). + Removing retarget.o(.rev16_text), (4 bytes). + Removing retarget.o(.revsh_text), (4 bytes). + Removing retarget.o(.rrx_text), (6 bytes). + Removing retarget.o(i.GetChar), (28 bytes). + Removing retarget.o(i.IsDebugFifoEmpty), (16 bytes). + Removing retarget.o(i._ttywrch), (12 bytes). + Removing retarget.o(i.fgetc), (10 bytes). + Removing retarget.o(i.kbhit), (16 bytes). + Removing system_m451series.o(.rev16_text), (4 bytes). + Removing system_m451series.o(.revsh_text), (4 bytes). + Removing system_m451series.o(.rrx_text), (6 bytes). Removing clk.o(.rev16_text), (4 bytes). Removing clk.o(.revsh_text), (4 bytes). Removing clk.o(.rrx_text), (6 bytes). @@ -353,17 +364,6 @@ Removing Unused input sections from the image. Removing uart.o(i.__NVIC_DisableIRQ), (60 bytes). Removing uart.o(i.__NVIC_EnableIRQ), (26 bytes). Removing uart.o(.constdata), (48 bytes). - Removing retarget.o(.rev16_text), (4 bytes). - Removing retarget.o(.revsh_text), (4 bytes). - Removing retarget.o(.rrx_text), (6 bytes). - Removing retarget.o(i.GetChar), (28 bytes). - Removing retarget.o(i.IsDebugFifoEmpty), (16 bytes). - Removing retarget.o(i._ttywrch), (12 bytes). - Removing retarget.o(i.fgetc), (10 bytes). - Removing retarget.o(i.kbhit), (16 bytes). - Removing system_m451series.o(.rev16_text), (4 bytes). - Removing system_m451series.o(.revsh_text), (4 bytes). - Removing system_m451series.o(.rrx_text), (6 bytes). 120 unused section(s) (total 3782 bytes) removed from the image. @@ -377,92 +377,92 @@ Image Symbol Table RESET 0x00000000 Section 320 startup_m451series.o(RESET) ../clib/angel/boardlib.s 0x00000000 Number 0 boardshut.o ABSOLUTE - ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit1.o ABSOLUTE ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit2.o ABSOLUTE ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit3.o ABSOLUTE + ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit1.o ABSOLUTE ../clib/angel/dczerorl2.s 0x00000000 Number 0 __dczerorl2.o ABSOLUTE ../clib/angel/handlers.s 0x00000000 Number 0 __scatter_zi.o ABSOLUTE - ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry.o ABSOLUTE - ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry4.o ABSOLUTE ../clib/angel/kernel.s 0x00000000 Number 0 rtexit2.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry.o ABSOLUTE ../clib/angel/kernel.s 0x00000000 Number 0 rtexit.o ABSOLUTE ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry2.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry4.o ABSOLUTE ../clib/angel/rt.s 0x00000000 Number 0 rt_raise.o ABSOLUTE ../clib/angel/scatter.s 0x00000000 Number 0 __scatter.o ABSOLUTE ../clib/angel/startup.s 0x00000000 Number 0 __main.o ABSOLUTE ../clib/angel/sys.s 0x00000000 Number 0 sys_stackheap_outer.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 libspace.o ABSOLUTE ../clib/angel/sys.s 0x00000000 Number 0 indicate_semi.o ABSOLUTE ../clib/angel/sys.s 0x00000000 Number 0 use_no_semi.o ABSOLUTE - ../clib/angel/sys.s 0x00000000 Number 0 libspace.o ABSOLUTE ../clib/angel/sysapp.c 0x00000000 Number 0 sys_exit.o ABSOLUTE ../clib/angel/sysapp.c 0x00000000 Number 0 sys_command.o ABSOLUTE - ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE - ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE - ../clib/armsys.c 0x00000000 Number 0 _get_argv_nomalloc.o ABSOLUTE ../clib/armsys.c 0x00000000 Number 0 no_argv.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 _get_argv_nomalloc.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE ../clib/heapalloc.c 0x00000000 Number 0 hrguard.o ABSOLUTE ../clib/heapaux.c 0x00000000 Number 0 heapauxi.o ABSOLUTE - ../clib/libinit.s 0x00000000 Number 0 libshutdown2.o ABSOLUTE - ../clib/libinit.s 0x00000000 Number 0 libinit2.o ABSOLUTE ../clib/libinit.s 0x00000000 Number 0 libinit.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libinit2.o ABSOLUTE ../clib/libinit.s 0x00000000 Number 0 libshutdown.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libshutdown2.o ABSOLUTE ../clib/misc.s 0x00000000 Number 0 printf_stubs.o ABSOLUTE - ../clib/printf.c 0x00000000 Number 0 _printf_hex_int_ptr.o ABSOLUTE ../clib/printf.c 0x00000000 Number 0 __printf.o ABSOLUTE - ../clib/printf.c 0x00000000 Number 0 _printf_hex_int.o ABSOLUTE - ../clib/printf.c 0x00000000 Number 0 _printf_dec.o ABSOLUTE - ../clib/printf.c 0x00000000 Number 0 __printf_flags.o ABSOLUTE - ../clib/printf.c 0x00000000 Number 0 __printf_nopercent.o ABSOLUTE - ../clib/printf.c 0x00000000 Number 0 _printf_hex_ll.o ABSOLUTE ../clib/printf.c 0x00000000 Number 0 _printf_char_file.o ABSOLUTE ../clib/printf.c 0x00000000 Number 0 _printf_intcommon.o ABSOLUTE - ../clib/printf.c 0x00000000 Number 0 _printf_hex_int_ll_ptr.o ABSOLUTE - ../clib/printf.c 0x00000000 Number 0 _printf_char_common.o ABSOLUTE - ../clib/printf.c 0x00000000 Number 0 _printf_hex_ll_ptr.o ABSOLUTE - ../clib/printf.c 0x00000000 Number 0 _printf_hex_ptr.o ABSOLUTE - ../clib/printf.c 0x00000000 Number 0 _printf_hex_int_ll.o ABSOLUTE ../clib/printf.c 0x00000000 Number 0 noretval__2printf.o ABSOLUTE ../clib/printf.c 0x00000000 Number 0 __2printf.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_dec.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_nopercent.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_ll.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_int.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_char_common.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_int_ptr.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_int_ll.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_ptr.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_ll_ptr.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_int_ll_ptr.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_ss.o ABSOLUTE ../clib/printf.c 0x00000000 Number 0 __printf_flags_ss.o ABSOLUTE ../clib/printf.c 0x00000000 Number 0 __printf_wp.o ABSOLUTE - ../clib/printf.c 0x00000000 Number 0 __printf_ss.o ABSOLUTE ../clib/printf.c 0x00000000 Number 0 __printf_flags_wp.o ABSOLUTE ../clib/printf.c 0x00000000 Number 0 __printf_ss_wp.o ABSOLUTE ../clib/printf.c 0x00000000 Number 0 __printf_flags_ss_wp.o ABSOLUTE ../clib/printf_percent.s 0x00000000 Number 0 _printf_percent_end.o ABSOLUTE - ../clib/printf_percent.s 0x00000000 Number 0 _printf_d.o ABSOLUTE ../clib/printf_percent.s 0x00000000 Number 0 _printf_percent.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_d.o ABSOLUTE ../clib/printf_percent.s 0x00000000 Number 0 _printf_x.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_abrt_inner.o ABSOLUTE ../clib/signal.c 0x00000000 Number 0 defsig_general.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_inner.o ABSOLUTE ../clib/signal.c 0x00000000 Number 0 __raise.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_exit.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_formal.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_outer.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_stak_inner.o ABSOLUTE ../clib/signal.c 0x00000000 Number 0 defsig_other.o ABSOLUTE ../clib/signal.c 0x00000000 Number 0 defsig_segv_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_pvfn_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_abrt_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_fpe_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_rtred_inner.o ABSOLUTE ../clib/signal.c 0x00000000 Number 0 defsig_cppl_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_stak_inner.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_outer.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_formal.o ABSOLUTE - ../clib/signal.c 0x00000000 Number 0 defsig_exit.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_pvfn_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtred_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_fpe_inner.o ABSOLUTE ../clib/signal.s 0x00000000 Number 0 defsig.o ABSOLUTE ../clib/stdlib.c 0x00000000 Number 0 exit.o ABSOLUTE ../clib/string.c 0x00000000 Number 0 strlen.o ABSOLUTE ../fplib/fpinit.s 0x00000000 Number 0 fpinit.o ABSOLUTE - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\clk.c 0x00000000 Number 0 clk.o ABSOLUTE - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\gpio.c 0x00000000 Number 0 gpio.o ABSOLUTE - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\i2c.c 0x00000000 Number 0 i2c.o ABSOLUTE - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\sc.c 0x00000000 Number 0 sc.o ABSOLUTE - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\sys.c 0x00000000 Number 0 sys.o ABSOLUTE - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\uart.c 0x00000000 Number 0 uart.o ABSOLUTE - C:\\Keil_v5\\ARM\\PACK\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\clk.c 0x00000000 Number 0 clk.o ABSOLUTE - C:\\Keil_v5\\ARM\\PACK\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\gpio.c 0x00000000 Number 0 gpio.o ABSOLUTE - C:\\Keil_v5\\ARM\\PACK\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\i2c.c 0x00000000 Number 0 i2c.o ABSOLUTE - C:\\Keil_v5\\ARM\\PACK\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\sc.c 0x00000000 Number 0 sc.o ABSOLUTE - C:\\Keil_v5\\ARM\\PACK\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\sys.c 0x00000000 Number 0 sys.o ABSOLUTE - C:\\Keil_v5\\ARM\\PACK\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\uart.c 0x00000000 Number 0 uart.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\clk.c 0x00000000 Number 0 clk.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\gpio.c 0x00000000 Number 0 gpio.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\i2c.c 0x00000000 Number 0 i2c.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\sc.c 0x00000000 Number 0 sc.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\sys.c 0x00000000 Number 0 sys.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\uart.c 0x00000000 Number 0 uart.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\clk.c 0x00000000 Number 0 clk.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\gpio.c 0x00000000 Number 0 gpio.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\i2c.c 0x00000000 Number 0 i2c.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\sc.c 0x00000000 Number 0 sc.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\sys.c 0x00000000 Number 0 sys.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\uart.c 0x00000000 Number 0 uart.o ABSOLUTE RTE\Device\M451VG6AE\retarget.c 0x00000000 Number 0 retarget.o ABSOLUTE RTE\Device\M451VG6AE\startup_M451Series.s 0x00000000 Number 0 startup_m451series.o ABSOLUTE RTE\Device\M451VG6AE\system_M451Series.c 0x00000000 Number 0 system_m451series.o ABSOLUTE @@ -547,10 +547,10 @@ Image Symbol Table i.CLK_EnableModuleClock 0x0000068c Section 0 clk.o(i.CLK_EnableModuleClock) i.CLK_EnablePLL 0x000006b8 Section 0 clk.o(i.CLK_EnablePLL) i.CLK_EnableXtalRC 0x00000830 Section 0 clk.o(i.CLK_EnableXtalRC) - i.CLK_GetPLLClockFreq 0x00000844 Section 0 clk.o(i.CLK_GetPLLClockFreq) - CLK_GetPLLClockFreq 0x00000845 Thumb Code 84 clk.o(i.CLK_GetPLLClockFreq) - i.CLK_GetPLLClockFreq 0x000008a8 Section 0 system_m451series.o(i.CLK_GetPLLClockFreq) - CLK_GetPLLClockFreq 0x000008a9 Thumb Code 84 system_m451series.o(i.CLK_GetPLLClockFreq) + i.CLK_GetPLLClockFreq 0x00000844 Section 0 system_m451series.o(i.CLK_GetPLLClockFreq) + CLK_GetPLLClockFreq 0x00000845 Thumb Code 84 system_m451series.o(i.CLK_GetPLLClockFreq) + i.CLK_GetPLLClockFreq 0x000008a8 Section 0 clk.o(i.CLK_GetPLLClockFreq) + CLK_GetPLLClockFreq 0x000008a9 Thumb Code 84 clk.o(i.CLK_GetPLLClockFreq) i.CLK_SetCoreClock 0x0000090c Section 0 clk.o(i.CLK_SetCoreClock) i.CLK_SetHCLK 0x000009bc Section 0 clk.o(i.CLK_SetHCLK) i.CLK_WaitClockReady 0x00000a38 Section 0 clk.o(i.CLK_WaitClockReady) @@ -848,7 +848,7 @@ Memory Map of the image Exec Addr Load Addr Size Type Attr Idx E Section Name Object - 0x00000000 0x00000000 0x00000140 Data RO 1039 RESET startup_m451series.o + 0x00000000 0x00000000 0x00000140 Data RO 363 RESET startup_m451series.o 0x00000140 0x00000140 0x00000008 Code RO 1143 * !!!main c_w.l(__main.o) 0x00000148 0x00000148 0x00000034 Code RO 1309 !!!scatter c_w.l(__scatter.o) 0x0000017c 0x0000017c 0x0000005a Code RO 1307 !!dczerorl2 c_w.l(__dczerorl2.o) @@ -900,8 +900,8 @@ Memory Map of the image 0x00000224 0x00000224 0x00000004 Code RO 1232 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o) 0x00000228 0x00000228 0x00000006 Code RO 1233 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o) 0x0000022e 0x0000022e 0x00000002 PAD - 0x00000230 0x00000230 0x0000001c Code RO 946 .emb_text retarget.o - 0x0000024c 0x0000024c 0x00000074 Code RO 1040 * .text startup_m451series.o + 0x00000230 0x00000230 0x0000001c Code RO 270 .emb_text retarget.o + 0x0000024c 0x0000024c 0x00000074 Code RO 364 * .text startup_m451series.o 0x000002c0 0x000002c0 0x00000018 Code RO 1089 .text c_w.l(noretval__2printf.o) 0x000002d8 0x000002d8 0x00000078 Code RO 1093 .text c_w.l(_printf_dec.o) 0x00000350 0x00000350 0x00000058 Code RO 1098 .text c_w.l(_printf_hex_int.o) @@ -918,40 +918,40 @@ Memory Map of the image 0x00000670 0x00000670 0x00000002 Code RO 1252 .text c_w.l(use_no_semi.o) 0x00000672 0x00000672 0x00000000 Code RO 1254 .text c_w.l(indicate_semi.o) 0x00000672 0x00000672 0x00000002 PAD - 0x00000674 0x00000674 0x00000018 Code RO 272 i.CLK_DisablePLL clk.o - 0x0000068c 0x0000068c 0x0000002c Code RO 276 i.CLK_EnableModuleClock clk.o - 0x000006b8 0x000006b8 0x00000178 Code RO 277 i.CLK_EnablePLL clk.o - 0x00000830 0x00000830 0x00000014 Code RO 279 i.CLK_EnableXtalRC clk.o - 0x00000844 0x00000844 0x00000064 Code RO 286 i.CLK_GetPLLClockFreq clk.o - 0x000008a8 0x000008a8 0x00000064 Code RO 1047 i.CLK_GetPLLClockFreq system_m451series.o - 0x0000090c 0x0000090c 0x000000b0 Code RO 289 i.CLK_SetCoreClock clk.o - 0x000009bc 0x000009bc 0x0000007c Code RO 290 i.CLK_SetHCLK clk.o - 0x00000a38 0x00000a38 0x00000028 Code RO 293 i.CLK_WaitClockReady clk.o + 0x00000674 0x00000674 0x00000018 Code RO 420 i.CLK_DisablePLL clk.o + 0x0000068c 0x0000068c 0x0000002c Code RO 424 i.CLK_EnableModuleClock clk.o + 0x000006b8 0x000006b8 0x00000178 Code RO 425 i.CLK_EnablePLL clk.o + 0x00000830 0x00000830 0x00000014 Code RO 427 i.CLK_EnableXtalRC clk.o + 0x00000844 0x00000844 0x00000064 Code RO 371 i.CLK_GetPLLClockFreq system_m451series.o + 0x000008a8 0x000008a8 0x00000064 Code RO 434 i.CLK_GetPLLClockFreq clk.o + 0x0000090c 0x0000090c 0x000000b0 Code RO 437 i.CLK_SetCoreClock clk.o + 0x000009bc 0x000009bc 0x0000007c Code RO 438 i.CLK_SetHCLK clk.o + 0x00000a38 0x00000a38 0x00000028 Code RO 441 i.CLK_WaitClockReady clk.o 0x00000a60 0x00000a60 0x000000d8 Code RO 4 i.HalInit main.o - 0x00000b38 0x00000b38 0x0000002c Code RO 948 i.Hard_Fault_Handler retarget.o + 0x00000b38 0x00000b38 0x0000002c Code RO 272 i.Hard_Fault_Handler retarget.o 0x00000b64 0x00000b64 0x00000030 Code RO 5 i.I2C0_IRQHandler main.o - 0x00000b94 0x00000b94 0x0000000a Code RO 473 i.I2C_ClearTimeoutFlag i2c.o + 0x00000b94 0x00000b94 0x0000000a Code RO 615 i.I2C_ClearTimeoutFlag i2c.o 0x00000b9e 0x00000b9e 0x00000002 PAD - 0x00000ba0 0x00000ba0 0x00000018 Code RO 481 i.I2C_GetBusClockFreq i2c.o - 0x00000bb8 0x00000bb8 0x0000003c Code RO 485 i.I2C_Open i2c.o - 0x00000bf4 0x00000bf4 0x00000038 Code RO 498 i.I2C_SetSlaveAddr i2c.o + 0x00000ba0 0x00000ba0 0x00000018 Code RO 623 i.I2C_GetBusClockFreq i2c.o + 0x00000bb8 0x00000bb8 0x0000003c Code RO 627 i.I2C_Open i2c.o + 0x00000bf4 0x00000bf4 0x00000038 Code RO 640 i.I2C_SetSlaveAddr i2c.o 0x00000c2c 0x00000c2c 0x000000ac Code RO 154 i.Init_LCD ssd1306.o 0x00000cd8 0x00000cd8 0x00000098 Code RO 156 i.OLED_SingleWrite ssd1306.o - 0x00000d70 0x00000d70 0x0000000c Code RO 950 i.SendChar retarget.o - 0x00000d7c 0x00000d7c 0x00000030 Code RO 951 i.SendChar_ToUART retarget.o - 0x00000dac 0x00000dac 0x00000064 Code RO 1048 i.SystemCoreClockUpdate system_m451series.o - 0x00000e10 0x00000e10 0x00000074 Code RO 1049 i.SystemInit system_m451series.o + 0x00000d70 0x00000d70 0x0000000c Code RO 274 i.SendChar retarget.o + 0x00000d7c 0x00000d7c 0x00000030 Code RO 275 i.SendChar_ToUART retarget.o + 0x00000dac 0x00000dac 0x00000064 Code RO 372 i.SystemCoreClockUpdate system_m451series.o + 0x00000e10 0x00000e10 0x00000074 Code RO 373 i.SystemInit system_m451series.o 0x00000e84 0x00000e84 0x0000000e Code RO 1126 i._is_digit c_w.l(__printf_wp.o) 0x00000e92 0x00000e92 0x0000002a Code RO 157 i.clear_LCD ssd1306.o - 0x00000ebc 0x00000ebc 0x00000008 Code RO 953 i.ferror retarget.o - 0x00000ec4 0x00000ec4 0x00000010 Code RO 955 i.fputc retarget.o + 0x00000ebc 0x00000ebc 0x00000008 Code RO 277 i.ferror retarget.o + 0x00000ec4 0x00000ec4 0x00000010 Code RO 279 i.fputc retarget.o 0x00000ed4 0x00000ed4 0x000000b4 Code RO 7 i.main main.o 0x00000f88 0x00000f88 0x0000000e Code RO 159 i.oledWriteCommand ssd1306.o 0x00000f96 0x00000f96 0x0000000e Code RO 160 i.oledWriteData ssd1306.o 0x00000fa4 0x00000fa4 0x00000024 Code RO 161 i.oled_address ssd1306.o 0x00000fc8 0x00000fc8 0x00000050 Code RO 162 i.print_C ssd1306.o 0x00001018 0x00001018 0x00000024 Code RO 163 i.print_Line ssd1306.o - 0x0000103c 0x0000103c 0x000000a8 Code RO 957 i.stackDump retarget.o + 0x0000103c 0x0000103c 0x000000a8 Code RO 281 i.stackDump retarget.o 0x000010e4 0x000010e4 0x0000000a Code RO 1239 x$fpl$fpinit fz_wm.l(fpinit.o) 0x000010ee 0x000010ee 0x00000028 Data RO 1099 .constdata c_w.l(_printf_hex_int.o) 0x00001116 0x00001116 0x00000002 PAD @@ -965,8 +965,8 @@ Memory Map of the image 0x20000000 COMPRESSED 0x0000000e Data RW 8 .data main.o 0x2000000e COMPRESSED 0x00001018 Data RW 164 .data ssd1306.o 0x20001026 COMPRESSED 0x00000002 PAD - 0x20001028 COMPRESSED 0x00000008 Data RW 958 .data retarget.o - 0x20001030 COMPRESSED 0x0000002c Data RW 1050 .data system_m451series.o + 0x20001028 COMPRESSED 0x00000008 Data RW 282 .data retarget.o + 0x20001030 COMPRESSED 0x0000002c Data RW 374 .data system_m451series.o Execution Region ER_ZI (Exec base: 0x2000105c, Load base: 0x00001a90, Size: 0x00000464, Max: 0xffffffff, ABSOLUTE) @@ -975,8 +975,8 @@ Memory Map of the image 0x2000105c - 0x00000060 Zero RW 1181 .bss c_w.l(libspace.o) 0x200010bc 0x00001a90 0x00000004 PAD - 0x200010c0 - 0x00000000 Zero RW 1038 HEAP startup_m451series.o - 0x200010c0 - 0x00000400 Zero RW 1037 STACK startup_m451series.o + 0x200010c0 - 0x00000000 Zero RW 362 HEAP startup_m451series.o + 0x200010c0 - 0x00000400 Zero RW 361 STACK startup_m451series.o ============================================================================== @@ -986,16 +986,16 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug Object Name - 904 100 0 0 0 20294 clk.o - 150 12 0 0 0 3055 i2c.o - 444 128 0 14 0 239119 main.o - 324 132 0 8 0 5761 retarget.o + 904 100 0 0 0 6054 clk.o + 150 12 0 0 0 3127 i2c.o + 444 128 0 14 0 239179 main.o + 324 132 0 8 0 5785 retarget.o 546 10 0 4120 0 5080 ssd1306.o 116 36 320 0 1024 936 startup_m451series.o - 316 54 0 44 0 2931 system_m451series.o + 316 54 0 44 0 17295 system_m451series.o ---------------------------------------------------------------------- - 2802 472 352 4188 1024 277176 Object Totals + 2802 472 352 4188 1024 277456 Object Totals 0 0 32 0 0 0 (incl. Generated) 2 0 0 2 0 0 (incl. Padding) @@ -1058,8 +1058,8 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug - 4014 522 394 4188 1124 275112 Grand Totals - 4014 522 394 2392 1124 275112 ELF Image Totals (compressed) + 4014 522 394 4188 1124 275392 Grand Totals + 4014 522 394 2392 1124 275392 ELF Image Totals (compressed) 4014 522 394 2392 0 0 ROM Totals ============================================================================== diff --git a/OLED/M451/OLED_TEST/Listings/startup_m451series.lst b/OLED/M451/OLED_TEST/Listings/startup_m451series.lst index 4c7463c..7e4cada 100644 --- a/OLED/M451/OLED_TEST/Listings/startup_m451series.lst +++ b/OLED/M451/OLED_TEST/Listings/startup_m451series.lst @@ -554,11 +554,12 @@ ARM Macro Assembler Page 9 00000000 Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M4.fp --apcs=int erwork --depend=.\objects\startup_m451series.d -o.\objects\startup_m451series.o - -I.\RTE\_oled -IC:\Keil_v5\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include -IC:\Keil_v5 -\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver -IC:\Keil_v5\ARM\PACK\Nu -voton\NuMicro_DFP\1.2.0\Device\M451\Include --predefine="__EVAL SETA 1" --prede -fine="__UVISION_VERSION SETA 525" --predefine="_RTE_ SETA 1" --list=.\listings\ -startup_m451series.lst RTE\Device\M451VG6AE\startup_M451Series.s + -I.\RTE\_oled -ID:\programs\mdk\Arm\Packs\ARM\CMSIS\5.3.0\CMSIS\Include -ID:\p +rograms\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver -ID:\program +s\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Include --predefine="__EV +AL SETA 1" --predefine="__UVISION_VERSION SETA 528" --predefine="_RTE_ SETA 1" +--list=.\listings\startup_m451series.lst RTE\Device\M451VG6AE\startup_M451Serie +s.s diff --git a/OLED/M451/OLED_TEST/OLED.uvguix.29019 b/OLED/M451/OLED_TEST/OLED.uvguix.29019 index b3e5f84..9d41042 100644 --- a/OLED/M451/OLED_TEST/OLED.uvguix.29019 +++ b/OLED/M451/OLED_TEST/OLED.uvguix.29019 @@ -5,6 +5,10 @@
### uVision Project, (C) Keil Software
+ + + + System Viewer\CLK @@ -63,6 +67,12 @@ + + 35141 + Event Statistics + + 200 50 700 + 1506 Symbols @@ -117,8 +127,8 @@ 44 - 0 - 1 + 2 + 3 -32000 -32040 @@ -137,8 +147,8 @@ 0 - 1630 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000010000000010000000100000034463A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C6D61696E2E6300000000066D61696E2E6300000000FFDC7800FFFFFFFF37463A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C737364313330362E630000000009737364313330362E6300000000BECEA100FFFFFFFF37463A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C737364313330362E680000000009737364313330362E6800000000F0A0A100FFFFFFFF4D433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4E55433130305C4472697665725C72657461726765742E63000000000A72657461726765742E6300000000BCA8E100FFFFFFFF2B463A5C70726F6A6563745C63266D63755C6E75633132305C4F4C45445F544553545C68616C5F6932632E63000000000968616C5F6932632E63000000009CC1B600FFFFFFFF37463A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C636F64657461622E680000000009636F64657461622E6800000000F7B88600FFFFFFFF48433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4E55433130305C4472697665725C4932432E6800000000054932432E6800000000D9ADC200FFFFFFFF25433A5C4B65696C5F76355C41524D5C41524D43435C696E636C7564655C737464696E742E680000000008737464696E742E6800000000A5C2D700FFFFFFFF4E433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C496E636C7564655C4D3435315365726965732E68000000000C4D3435315365726965732E6800000000B3A6BE00FFFFFFFF57463A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C5254455C4465766963655C4D34353156473641455C737461727475705F4D3435315365726965732E730000000014737461727475705F4D3435315365726965732E7300000000EAD6A300FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C6932632E6300000000056932632E6300000000F6FA7D00FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C6932632E6800000000056932632E6800000000B5E99D00FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C7379732E6800000000057379732E68000000005FC3CF00FFFFFFFF4D463A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C5254455C4465766963655C4D34353156473641455C72657461726765742E63000000000A72657461726765742E6300000000C1838300FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C7379732E6300000000057379732E6300000000CACAD500FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C636C6B2E680000000005636C6B2E6800000000C5D4F200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000004506000096000000FF090000E5020000 + 1497 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000E000000000000000100000034443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF37443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C737364313330362E630000000009737364313330362E6300000000FFDC7800FFFFFFFF37443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C737364313330362E680000000009737364313330362E6800000000BECEA100FFFFFFFF4D433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4E55433130305C4472697665725C72657461726765742E63000000000A72657461726765742E6300000000F0A0A100FFFFFFFF37443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C636F64657461622E680000000009636F64657461622E6800000000BCA8E100FFFFFFFF48433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4E55433130305C4472697665725C4932432E6800000000054932432E68000000009CC1B600FFFFFFFF4E433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C496E636C7564655C4D3435315365726965732E68000000000C4D3435315365726965732E6800000000F7B88600FFFFFFFF57443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C5254455C4465766963655C4D34353156473641455C737461727475705F4D3435315365726965732E730000000014737461727475705F4D3435315365726965732E7300000000D9ADC200FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C6932632E6300000000056932632E6300000000A5C2D700FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C6932632E6800000000056932632E6800000000B3A6BE00FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C7379732E6800000000057379732E6800000000EAD6A300FFFFFFFF4D443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C5254455C4465766963655C4D34353156473641455C72657461726765742E63000000000A72657461726765742E6300000000F6FA7D00FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C7379732E6300000000057379732E6300000000B5E99D00FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C636C6B2E680000000005636C6B2E68000000005FC3CF00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000440100008E000000000A0000E6020000 @@ -161,7 +171,7 @@ 16 - 4506000096000000710C000026010000 + 440100008E000000700700001E010000 @@ -177,7 +187,7 @@ 0 16 - 03000000660000003D01000085020000 + 03000000660000003D0100008E020000 16 @@ -197,7 +207,7 @@ 0 16 - 03000000660000003D01000085020000 + 03000000660000003D0100008E020000 16 @@ -477,7 +487,7 @@ 0 16 - 03000000660000003D01000085020000 + 03000000660000003D0100008E020000 16 @@ -497,7 +507,7 @@ 0 16 - 03000000660000003D01000085020000 + 03000000660000003D0100008E020000 16 @@ -517,7 +527,7 @@ 0 16 - 03000000B9020000FB040000C4030000 + 03000000C2020000FD090000CD030000 16 @@ -557,7 +567,7 @@ 0 16 - 03000000B9020000FD090000C4030000 + 03000000C2020000FD090000CD030000 16 @@ -1197,7 +1207,7 @@ 0 16 - 03000000B9020000FB040000C4030000 + 03000000C2020000FD090000CD030000 16 @@ -1217,7 +1227,7 @@ 0 16 - 03000000B9020000FD090000C4030000 + 03000000C2020000FD090000CD030000 16 @@ -1277,7 +1287,7 @@ 0 16 - 03000000B9020000FD090000C4030000 + 03000000C2020000FD090000CD030000 16 @@ -1297,7 +1307,7 @@ 0 16 - 03000000B9020000FD090000C4030000 + 03000000C2020000FD090000CD030000 16 @@ -1731,13 +1741,13 @@ 0 0 0 - 953 + 494 0 8192 0 16 - 0000000000000000C40300001C000000 + 0000000000000000D10300001C000000 16 @@ -1757,7 +1767,7 @@ 0 16 - 00000000DD030000FE040000F0030000 + 00000000E6030000000A0000F9030000 16 @@ -1826,14 +1836,14 @@ 3337 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF44010000DF00000070070000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000004506000096000000710C000026010000440100004F00000070070000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2C0600004F0000003006000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000310B000096000000710C000070020000300600004F000000700700002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F000000440100009E02000001000000020000100400000001000000C2FEFFFFB7080000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000010500009600000041060000EE020000000000004F000000400100009E0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000700700001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000000105000060020000710C000004030000000000001902000070070000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB803000019020000BC030000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000009E020000FE040000A20200000100000001000010040000000100000084FDFFFF1001000000000000000000000000000001000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000001050000F2020000010F00002D04000000000000A2020000FE040000DD0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF1346696E6420416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF44010000DF00000070070000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000440100008E000000700700001E010000440100004F00000070070000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2C0600004F0000003006000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000300600008E0000007007000068020000300600004F000000700700002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F00000044010000A702000001000000020000100400000001000000C2FEFFFFB7080000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000008E00000040010000E6020000000000004F00000040010000A70200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000700700001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000005802000070070000FC020000000000001902000070070000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB803000019020000BC030000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000A7020000000A0000AB0200000100000001000010040000000100000084FDFFFF1001000000000000000000000000000001000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000000000000EA020000000A00002504000000000000AB020000000A0000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF1346696E6420416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File - 2245 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000A4D505552656164526567960000000000000002000A4D5055526561645265670261640000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65B9030000 + 2574 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001041444330305F49525148616E646C6572960000000000000001001041444330305F49525148616E646C657200000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65EE010000 1423 @@ -1865,7 +1875,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -1898,11 +1908,11 @@ 0 16 - 440100004F000000000A0000DF000000 + 440100004F000000E0060000DF000000 16 - 440100008E000000FE0400001E010000 + 440100008E000000E00600001E010000 @@ -1918,11 +1928,11 @@ 0 16 - 03000000660000003D01000045020000 + 03000000660000003D01000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -1938,11 +1948,11 @@ 0 16 - 03000000660000003D0100003C020000 + 03000000660000003D01000049020000 16 - 22000000610000009E010000A1020000 + 70000000AF000000EC010000EF020000 @@ -1958,11 +1968,11 @@ 0 16 - 0705000079020000FD09000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -1978,11 +1988,11 @@ 0 16 - 07050000790200007C07000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -1998,11 +2008,11 @@ 0 16 - 07050000790200007C07000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -2018,11 +2028,11 @@ 0 16 - 07050000790200007C07000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -2038,11 +2048,11 @@ 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2058,11 +2068,11 @@ 0 16 - 4701000066000000FB040000C6000000 + 4701000066000000DD060000C6000000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -2078,11 +2088,11 @@ 0 16 - 0705000079020000FD09000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2098,11 +2108,11 @@ 0 16 - 0705000079020000FD09000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2118,11 +2128,11 @@ 0 16 - 07050000790200007C07000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2138,11 +2148,11 @@ 0 16 - 07050000790200007C07000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -2158,11 +2168,11 @@ 0 16 - 07050000790200007C07000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -2178,17 +2188,17 @@ 0 16 - 07050000790200007C07000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 1942 1942 - 0 + 1 0 0 0 @@ -2198,11 +2208,11 @@ 0 16 - 07050000790200007C07000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -2218,11 +2228,11 @@ 0 16 - 03000000660000003D0100003C020000 + 03000000660000003D01000049020000 16 - 22000000610000009E010000A1020000 + 70000000AF000000EC010000EF020000 @@ -2238,11 +2248,11 @@ 0 16 - 03000000660000003D0100003C020000 + 03000000660000003D01000049020000 16 - 22000000610000009E010000A1020000 + 70000000AF000000EC010000EF020000 @@ -2258,11 +2268,11 @@ 0 16 - 030000006D030000FB040000CD030000 + 0300000091030000FD090000CD030000 16 - 2200000061000000DA030000F1000000 + B9020000FE030000B90C00008E040000 @@ -2278,11 +2288,11 @@ 0 16 - 00000000620200000005000052030000 + 00000000660200000005000076030000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -2294,15 +2304,15 @@ 0 32767 0 - 4096 + 32768 0 16 - 030000006D030000FB040000CD030000 + 0300000091030000FD090000CD030000 16 - 2200000061000000DA030000F1000000 + B9020000FE030000B90C00008E040000 @@ -2318,11 +2328,11 @@ 0 16 - 4401000063000000000A0000DF000000 + 4401000063000000E0060000DF000000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -2338,11 +2348,11 @@ 0 16 - 4701000066000000FB040000C6000000 + 4701000066000000DD060000C6000000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -2374,15 +2384,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2398,11 +2408,11 @@ 0 16 - 07050000790200007C07000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -2418,11 +2428,11 @@ 0 16 - 4701000066000000FB040000C6000000 + 4701000066000000DD060000C6000000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -2438,11 +2448,11 @@ 0 16 - 4701000066000000FB040000C6000000 + 4701000066000000DD060000C6000000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -2458,11 +2468,11 @@ 0 16 - 4701000066000000FB040000C6000000 + 4701000066000000DD060000C6000000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2478,11 +2488,11 @@ 0 16 - 4701000066000000FB040000C6000000 + 4701000066000000DD060000C6000000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -2494,15 +2504,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2514,15 +2524,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2534,15 +2544,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2554,15 +2564,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2574,15 +2584,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2594,15 +2604,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2614,15 +2624,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2634,15 +2644,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2654,15 +2664,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2674,15 +2684,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2694,15 +2704,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2714,15 +2724,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2734,15 +2744,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2754,15 +2764,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2774,15 +2784,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2794,115 +2804,115 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 35901 35901 - 0 + 1 0 0 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 35902 35902 - 0 + 1 0 0 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 35903 35903 - 0 + 1 0 0 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 35904 35904 - 0 + 1 0 0 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 35905 35905 - 0 + 1 0 0 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2918,11 +2928,11 @@ 0 16 - 03000000660000003D01000045020000 + 03000000660000003D01000049020000 16 - 22000000610000009E010000A1020000 + 70000000AF000000EC010000EF020000 @@ -2934,15 +2944,15 @@ 0 32767 0 - 4096 + 32768 0 16 - 000000006A030000000A0000E6030000 + 000000008E030000000A0000E6030000 16 - 2200000061000000DA030000F1000000 + B9020000FE030000B90C00008E040000 @@ -2954,15 +2964,15 @@ 0 32767 0 - 4096 + 32768 0 16 - 030000006D030000FB040000CD030000 + 0300000091030000FD090000CD030000 16 - 22000000610000009E010000A1020000 + B9020000FE030000B90C00008E040000 @@ -2978,11 +2988,11 @@ 0 16 - 07050000790200007C07000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -2998,11 +3008,11 @@ 0 16 - 07050000790200007C07000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3014,15 +3024,15 @@ 0 32767 0 - 4096 + 32768 0 16 - 030000006D030000FB040000CD030000 + 0300000091030000FD090000CD030000 16 - 22000000610000009E010000A1020000 + B9020000FE030000B90C00008E040000 @@ -3034,15 +3044,15 @@ 0 32767 0 - 4096 + 32768 0 16 - 030000006D030000FB040000CD030000 + 0300000091030000FD090000CD030000 16 - 22000000610000009E010000A1020000 + B9020000FE030000B90C00008E040000 @@ -3058,11 +3068,11 @@ 0 16 - 4701000066000000FB040000C6000000 + 4701000066000000DD060000C6000000 16 - 2200000061000000DA030000F1000000 + 70000000AF000000280400003F010000 @@ -3074,15 +3084,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3094,15 +3104,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3114,15 +3124,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3134,15 +3144,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3154,15 +3164,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3174,15 +3184,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3194,15 +3204,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3214,15 +3224,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3234,15 +3244,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3254,15 +3264,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3274,15 +3284,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3294,15 +3304,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3314,15 +3324,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3334,15 +3344,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3354,15 +3364,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3374,15 +3384,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3394,15 +3404,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3414,15 +3424,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3434,15 +3444,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3454,15 +3464,15 @@ 0 32767 0 - 4096 + 16384 0 16 - 33060000660000006D07000010020000 + E706000066000000FD09000049020000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 @@ -3472,13 +3482,13 @@ 0 0 0 - 953 + 494 0 8192 0 16 - 0000000000000000C40300001C000000 + 0000000000000000D10300001C000000 16 @@ -3532,17 +3542,17 @@ 0 0 0 - 113 + 612 0 8192 2 16 - 8F0200001C000000FE04000038000000 + 020000001C0000007102000038000000 16 - 510600005E010000CA06000027020000 + 0A0000000A0000006E0000006E000000 @@ -3558,23 +3568,23 @@ 0 16 - 07050000790200007C07000039030000 + 070500007D020000FD0900005D030000 16 - 2200000061000000620100002C010000 + 70000000AF000000B00100007A010000 - 3316 - 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFF44010000DF000000000A0000E3000000010000000100001004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000440100008E000000FE0400001E010000440100004F000000000A0000DF0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2C0600004F0000003006000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000300600008E0000007007000068020000300600004F000000700700002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F000000440100005E020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000008E0000004001000094020000000000004F000000400100005E0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF000000005E020000000A000062020000010000000100001004000000010000003EFEFFFF3F00000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000010000008302000098020000FE040000880300000405000062020000000A00005203000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF050000000000000001000000000000000100000001000000FFFFFFFF000500006202000004050000520300000100000002000010040000000000000064FBFFFFFA04000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000052030000000A000056030000010000000100001004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000008C030000FE0400001C0400000000000056030000000A0000E60300000000000040820056060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF1346696E6420416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365010000007794000001000000FFFFFFFFFFFFFFFF05000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 3355 + 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFF44010000DF000000E0060000E3000000010000000100001004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000440100008E000000E00600001E010000440100004F000000E0060000DF0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000001000000FFFFFFFFFFFFFFFFE00600004F000000E406000062020000010000000200001004000000010000008DF8FFFF3E010000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000001000000E40600008E000000000A0000A1020000E40600004F000000000A00006202000000000000404100562B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF0449324330010000003D8C000001000000FFFFFFFFFFFFFFFF044E564943010000003E8C000001000000FFFFFFFFFFFFFFFF03535953010000003F8C000001000000FFFFFFFFFFFFFFFF03434C4B01000000408C000001000000FFFFFFFFFFFFFFFF044541444301000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFF16000000000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F000000440100006202000001000000020000100400000001000000C2FEFFFFB7080000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000008E00000040010000A1020000000000004F00000040010000620200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF0000000062020000000A00006602000001000000010000100400000001000000F2FEFFFF1701000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000100000004050000A5020000000A0000B50300000405000066020000000A00007603000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572010000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF050000000000000001000000000000000100000001000000FFFFFFFF0005000066020000040500007603000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000076030000000A00007A03000001000000010000100400000001000000CCFDFFFFC400000000000000000000000000000001000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000000000000B9030000000A000025040000000000007A030000000A0000E60300000000000040820056060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF1346696E6420416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF0500000000000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File - 2456 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000A4D505552656164526567960000000000000013000A4D5055526561645265670261640009555345525F4354524C0F414B383936335F4932435F414444520430786430043078313804307830430B4D505557726974655265670A5057525F4D474D545F3104307830300752656164526567043078303108493243305F4C434B04646174610B494E545F50494E5F43464704307833370C494E545F50494E5F434647200F4D5055363035305F4144445245535300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000000180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65B9030000 + 2645 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000008496E69745F4C43449600000000000000070008496E69745F4C434400057072696E740A7072696E745F4C696E65134932435F5345545F434F4E54524F4C5F5245470775696E74385F741041444330305F49525148616E646C657200000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65EE010000 1423 @@ -3589,8 +3599,8 @@ 59399 Build - 955 - 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 976 + 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -3606,7 +3616,7 @@ Debug 2362 - 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000004002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756771000000 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000004002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -3630,21 +3640,21 @@ 0 100 - 1 + 0 .\main.c - 23 - 112 - 143 + 0 + 120 + 131 1 0 .\ssd1306.c - 51 - 134 - 78 + 0 + 124 + 131 1 0 @@ -3667,20 +3677,11 @@ 0 - - F:\project\c&mcu\nuc120\OLED_TEST\hal_i2c.c - 0 - 3 - 4 - 1 - - 0 - .\codetab.h - 19 - 196 - 214 + 2 + 181 + 212 1 0 @@ -3694,15 +3695,6 @@ 0 - - C:\Keil_v5\ARM\ARMCC\include\stdint.h - 40 - 32 - 63 - 1 - - 0 - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Include\M451Series.h 0 diff --git a/OLED/M451/OLED_TEST/OLED.uvoptx b/OLED/M451/OLED_TEST/OLED.uvoptx index c17633c..bfc794e 100644 --- a/OLED/M451/OLED_TEST/OLED.uvoptx +++ b/OLED/M451/OLED_TEST/OLED.uvoptx @@ -77,7 +77,7 @@ 0 1 - 255 + 6 0 1 @@ -103,7 +103,7 @@ 1 0 0 - 8 + 7 diff --git a/OLED/M451/OLED_TEST/OLED.uvprojx b/OLED/M451/OLED_TEST/OLED.uvprojx index 42bad52..bba153a 100644 --- a/OLED/M451/OLED_TEST/OLED.uvprojx +++ b/OLED/M451/OLED_TEST/OLED.uvprojx @@ -184,6 +184,7 @@ 0 0 2 + 0 0 0 8 diff --git a/OLED/M451/OLED_TEST/Objects/OLED.axf b/OLED/M451/OLED_TEST/Objects/OLED.axf index 5235013738d8f295157ca4074a3f6acd7b91386d..130a6b758dde58b8d61a4a3c7ee5f99986b6de66 100644 GIT binary patch delta 23710 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 A3IG5A delta 22929 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 diff --git a/OLED/M451/OLED_TEST/Objects/OLED.lnp b/OLED/M451/OLED_TEST/Objects/OLED.lnp index 88e9c28..66d7815 100644 --- a/OLED/M451/OLED_TEST/Objects/OLED.lnp +++ b/OLED/M451/OLED_TEST/Objects/OLED.lnp @@ -1,15 +1,15 @@ --cpu=Cortex-M4.fp ".\objects\main.o" ".\objects\ssd1306.o" +".\objects\retarget.o" +".\objects\startup_m451series.o" +".\objects\system_m451series.o" ".\objects\clk.o" ".\objects\gpio.o" ".\objects\i2c.o" ".\objects\sc.o" ".\objects\sys.o" ".\objects\uart.o" -".\objects\retarget.o" -".\objects\startup_m451series.o" -".\objects\system_m451series.o" --ro-base 0x00000000 --entry 0x00000000 --rw-base 0x20000000 --entry Reset_Handler --first __Vectors --strict --summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols --info sizes --info totals --info unused --info veneers --list ".\Listings\OLED.map" -o .\Objects\OLED.axf \ No newline at end of file diff --git a/OLED/M451/OLED_TEST/RTE/_oled/RTE_Components.h b/OLED/M451/OLED_TEST/RTE/_oled/RTE_Components.h index 30639e8..7c80aa7 100644 --- a/OLED/M451/OLED_TEST/RTE/_oled/RTE_Components.h +++ b/OLED/M451/OLED_TEST/RTE/_oled/RTE_Components.h @@ -1,6 +1,6 @@ /* - * Auto generated Run-Time-Environment Component Configuration File + * Auto generated Run-Time-Environment Configuration File * *** Do not modify ! *** * * Project: 'OLED' @@ -16,11 +16,18 @@ */ #define CMSIS_device_header "M451Series.h" +/* Nuvoton::Device:Driver:CLK:3.01.001 */ #define RTE_Drivers_CLK /* Driver CLK */ +/* Nuvoton::Device:Driver:GPIO:3.01.001 */ #define RTE_Drivers_GPIO /* Driver GPIO */ +/* Nuvoton::Device:Driver:I2C:3.01.001 */ #define RTE_Drivers_I2C /* Driver I2C */ +/* Nuvoton::Device:Driver:SC:3.01.001 */ #define RTE_Drivers_SC /* Driver SC */ +/* Nuvoton::Device:Driver:SYS:3.01.001 */ #define RTE_Drivers_SYS /* Driver SYS */ +/* Nuvoton::Device:Driver:UART:3.01.001 */ #define RTE_Drivers_UART /* Driver UART */ + #endif /* RTE_COMPONENTS_H */ diff --git a/mpu6050/m451/mpu.c b/mpu6050/m451/mpu.c index 7001d8d..7142522 100644 --- a/mpu6050/m451/mpu.c +++ b/mpu6050/m451/mpu.c @@ -27,11 +27,12 @@ void delay_ms(int x){ } } } -void I2C0_LCK (){ - if (i2c0Lock == 0){ + +void I2C0_LCK () { + if (i2c0Lock == 0) { i2c0Lock = 1; }else{ - while(i2c0Lock == 0){ + while(i2c0Lock == 0) { i2c0Lock = 1; } } @@ -158,8 +159,8 @@ void MpuGetData(void) //读取陀螺仪数据加滤 MpuAngle(); for(i = 0; i < 9;i++) { - pMpu[i] = (((int16_t)buffer[2*i] *256)| buffer[2*i + 1]&0xff)-MpuOffset[i]; - pMpuUnFilter[i] = (((int16_t)buffer[2*i] *256)| buffer[2*i + 1]&0xff)-MpuOffset[i]; + pMpu[i] = (((int16_t)buffer[2*i] *256)| (int16_t)buffer[2*i + 1]&0x00ff)-MpuOffset[i]; + pMpuUnFilter[i] = (((int16_t)buffer[2*i] *256)| (int16_t)buffer[2*i + 1]&0x00ff)-MpuOffset[i]; /* if(i < 3) { diff --git a/stepper/EventRecorderStub.scvd b/stepper/EventRecorderStub.scvd new file mode 100644 index 0000000..2956b29 --- /dev/null +++ b/stepper/EventRecorderStub.scvd @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/stepper/Listings/stepper.map b/stepper/Listings/stepper.map new file mode 100644 index 0000000..29c482e --- /dev/null +++ b/stepper/Listings/stepper.map @@ -0,0 +1,1096 @@ +Component: ARM Compiler 5.06 update 6 (build 750) Tool: armlink [4d35ed] + +============================================================================== + +Section Cross References + + main.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + main.o(.text) refers to _printf_d.o(.ARM.Collect$$_printf_percent$$00000009) for _printf_d + main.o(.text) refers to _printf_dec.o(.text) for _printf_int_dec + main.o(.text) refers to _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) for _printf_x + main.o(.text) refers to _printf_hex_int.o(.text) for _printf_longlong_hex + main.o(.text) refers to clk.o(.text) for CLK_EnableModuleClock + main.o(.text) refers to sys.o(.text) for SYS_ResetModule + main.o(.text) refers to pwm.o(.text) for PWM_ConfigOutputChannel + main.o(.text) refers to i2c.o(.text) for I2C_Open + main.o(.text) refers to noretval__2printf.o(.text) for __2printf + main.o(.text) refers to uart.o(.text) for UART_Open + main.o(.text) refers to rt_memclr_w.o(.text) for __aeabi_memclr4 + main.o(.text) refers to eadc.o(.text) for EADC_Open + main.o(.text) refers to noretval__2sprintf.o(.text) for __2sprintf + main.o(.text) refers to ssd1306.o(.text) for print_Line + main.o(.text) refers to main.o(.conststring) for .conststring + main.o(.text) refers to main.o(.data) for .data + main.o(.text) refers to system_m451series.o(.data) for SystemCoreClock + main.o(.ARM.exidx) refers to main.o(.text) for .text + ssd1306.o(.text) refers to strlen.o(.text) for strlen + ssd1306.o(.text) refers to ssd1306.o(.data) for .data + can.o(.text) refers to system_m451series.o(.text) for SystemCoreClockUpdate + can.o(.text) refers to can.o(.data) for .data + can.o(.text) refers to system_m451series.o(.data) for SystemCoreClock + clk.o(.text) refers to system_m451series.o(.text) for SystemCoreClockUpdate + clk.o(.text) refers to system_m451series.o(.data) for SystemCoreClock + sc.o(.text) refers to sc.o(.data) for .data + uart.o(.text) refers to uart.o(.constdata) for .constdata + retarget.o(.emb_text) refers to retarget.o(.text) for Hard_Fault_Handler + retarget.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + retarget.o(.text) refers to _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) for _printf_x + retarget.o(.text) refers to _printf_hex_int.o(.text) for _printf_longlong_hex + retarget.o(.text) refers to noretval__2printf.o(.text) for __2printf + startup_m451series.o(STACK) refers (Special) to heapauxi.o(.text) for __use_two_region_memory + startup_m451series.o(HEAP) refers (Special) to heapauxi.o(.text) for __use_two_region_memory + startup_m451series.o(RESET) refers (Special) to heapauxi.o(.text) for __use_two_region_memory + startup_m451series.o(RESET) refers to startup_m451series.o(STACK) for __initial_sp + startup_m451series.o(RESET) refers to startup_m451series.o(.text) for Reset_Handler + startup_m451series.o(RESET) refers to retarget.o(.emb_text) for HardFault_Handler + startup_m451series.o(.text) refers (Special) to heapauxi.o(.text) for __use_two_region_memory + startup_m451series.o(.text) refers to system_m451series.o(.text) for SystemInit + startup_m451series.o(.text) refers to __main.o(!!!main) for __main + startup_m451series.o(.text) refers to startup_m451series.o(HEAP) for Heap_Mem + startup_m451series.o(.text) refers to startup_m451series.o(STACK) for Stack_Mem + system_m451series.o(.text) refers to system_m451series.o(.data) for .data + i2c.o(.text) refers to system_m451series.o(.data) for SystemCoreClock + pwm.o(.text) refers to system_m451series.o(.text) for SystemCoreClockUpdate + pwm.o(.text) refers to system_m451series.o(.data) for SystemCoreClock + __2printf.o(.text) refers to _printf_char_file.o(.text) for _printf_char_file + __2printf.o(.text) refers to retarget.o(.data) for __stdout + __2sprintf.o(.text) refers to _printf_char_common.o(.text) for _printf_char_common + __2sprintf.o(.text) refers to _sputc.o(.text) for _sputc + noretval__2printf.o(.text) refers to _printf_char_file.o(.text) for _printf_char_file + noretval__2printf.o(.text) refers to retarget.o(.data) for __stdout + noretval__2sprintf.o(.text) refers to _printf_char_common.o(.text) for _printf_char_common + noretval__2sprintf.o(.text) refers to _sputc.o(.text) for _sputc + __printf.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + _printf_dec.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_ll.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_ll.o(.text) refers to _printf_hex_ll.o(.constdata) for .constdata + _printf_hex_int.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_int.o(.text) refers to _printf_hex_int.o(.constdata) for .constdata + _printf_hex_int_ll.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_int_ll.o(.text) refers to _printf_hex_int_ll.o(.constdata) for .constdata + _printf_hex_ptr.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_ptr.o(.text) refers to _printf_hex_ptr.o(.constdata) for .constdata + _printf_hex_int_ptr.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_int_ptr.o(.text) refers to _printf_hex_int_ptr.o(.constdata) for .constdata + _printf_hex_ll_ptr.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_ll_ptr.o(.text) refers to _printf_hex_ll_ptr.o(.constdata) for .constdata + _printf_hex_int_ll_ptr.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_int_ll_ptr.o(.text) refers to _printf_hex_int_ll_ptr.o(.constdata) for .constdata + __printf_flags.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags.o(.text) refers to __printf_flags.o(.constdata) for .constdata + __printf_ss.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss.o(.text) refers to __printf_flags_ss.o(.constdata) for .constdata + __printf_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_flags_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_wp.o(.text) refers to __printf_flags_wp.o(.constdata) for .constdata + __printf_ss_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_ss_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_flags_ss_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss_wp.o(.text) refers to __printf_flags_ss_wp.o(.constdata) for .constdata + _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) refers (Weak) to _printf_hex_int.o(.text) for _printf_int_hex + _printf_d.o(.ARM.Collect$$_printf_percent$$00000009) refers (Weak) to _printf_dec.o(.text) for _printf_int_dec + _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) refers (Special) to _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017) for _printf_percent_end + __main.o(!!!main) refers to __rtentry.o(.ARM.Collect$$rtentry$$00000000) for __rt_entry + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) for __rt_entry_li + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) for __rt_entry_main + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000C) for __rt_entry_postli_1 + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$00000009) for __rt_entry_postsh_1 + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$00000002) for __rt_entry_presh_1 + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry4.o(.ARM.Collect$$rtentry$$00000004) for __rt_entry_sh + _printf_char_common.o(.text) refers to __printf_wp.o(.text) for __printf + _printf_char_file.o(.text) refers to _printf_char_common.o(.text) for _printf_char_common + _printf_char_file.o(.text) refers to retarget.o(.text) for ferror + __rtentry2.o(.ARM.Collect$$rtentry$$00000008) refers to boardinit2.o(.text) for _platform_post_stackheap_init + __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) refers to libinit.o(.ARM.Collect$$libinit$$00000000) for __rt_lib_init + __rtentry2.o(.ARM.Collect$$rtentry$$0000000B) refers to boardinit3.o(.text) for _platform_post_lib_init + __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) refers to main.o(.text) for main + __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) refers to exit.o(.text) for exit + __rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$00000001) for .ARM.Collect$$rtentry$$00000001 + __rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$00000008) for .ARM.Collect$$rtentry$$00000008 + __rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) for .ARM.Collect$$rtentry$$0000000A + __rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$0000000B) for .ARM.Collect$$rtentry$$0000000B + __rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) for .ARM.Collect$$rtentry$$0000000D + __rtentry4.o(.ARM.Collect$$rtentry$$00000004) refers to sys_stackheap_outer.o(.text) for __user_setup_stackheap + __rtentry4.o(.ARM.exidx) refers to __rtentry4.o(.ARM.Collect$$rtentry$$00000004) for .ARM.Collect$$rtentry$$00000004 + sys_stackheap_outer.o(.text) refers to libspace.o(.text) for __user_perproc_libspace + sys_stackheap_outer.o(.text) refers to startup_m451series.o(.text) for __user_initial_stackheap + exit.o(.text) refers to rtexit.o(.ARM.Collect$$rtexit$$00000000) for __rt_exit + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000002E) for __rt_lib_init_alloca_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000002C) for __rt_lib_init_argv_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000001B) for __rt_lib_init_atexit_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000021) for __rt_lib_init_clock_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000032) for __rt_lib_init_cpp_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000030) for __rt_lib_init_exceptions_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000001) for __rt_lib_init_fp_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000001F) for __rt_lib_init_fp_trap_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000023) for __rt_lib_init_getenv_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000000A) for __rt_lib_init_heap_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000011) for __rt_lib_init_lc_collate_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000013) for __rt_lib_init_lc_ctype_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000015) for __rt_lib_init_lc_monetary_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000017) for __rt_lib_init_lc_numeric_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000019) for __rt_lib_init_lc_time_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000004) for __rt_lib_init_preinit_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000000E) for __rt_lib_init_rand_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000033) for __rt_lib_init_return + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000001D) for __rt_lib_init_signal_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000025) for __rt_lib_init_stdio_1 + libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000000C) for __rt_lib_init_user_alloc_1 + libspace.o(.text) refers to libspace.o(.bss) for __libspace_start + rtexit.o(.ARM.Collect$$rtexit$$00000000) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000004) for __rt_exit_exit + rtexit.o(.ARM.Collect$$rtexit$$00000000) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000003) for __rt_exit_ls + rtexit.o(.ARM.Collect$$rtexit$$00000000) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000002) for __rt_exit_prels_1 + rtexit.o(.ARM.exidx) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000004) for __rt_exit_exit + rtexit.o(.ARM.exidx) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000003) for __rt_exit_ls + rtexit.o(.ARM.exidx) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000002) for __rt_exit_prels_1 + rtexit.o(.ARM.exidx) refers to rtexit.o(.ARM.Collect$$rtexit$$00000000) for .ARM.Collect$$rtexit$$00000000 + libinit2.o(.ARM.Collect$$libinit$$00000001) refers to fpinit.o(x$fpl$fpinit) for _fp_init + libinit2.o(.ARM.Collect$$libinit$$00000010) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F + libinit2.o(.ARM.Collect$$libinit$$00000012) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F + libinit2.o(.ARM.Collect$$libinit$$00000014) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F + libinit2.o(.ARM.Collect$$libinit$$00000016) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F + libinit2.o(.ARM.Collect$$libinit$$00000018) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F + libinit2.o(.ARM.Collect$$libinit$$00000026) refers to argv_veneer.o(.emb_text) for __ARM_argv_veneer + libinit2.o(.ARM.Collect$$libinit$$00000027) refers to argv_veneer.o(.emb_text) for __ARM_argv_veneer + rtexit2.o(.ARM.Collect$$rtexit$$00000003) refers to libshutdown.o(.ARM.Collect$$libshutdown$$00000000) for __rt_lib_shutdown + rtexit2.o(.ARM.Collect$$rtexit$$00000004) refers to sys_exit.o(.text) for _sys_exit + rtexit2.o(.ARM.exidx) refers to rtexit2.o(.ARM.Collect$$rtexit$$00000001) for .ARM.Collect$$rtexit$$00000001 + rtexit2.o(.ARM.exidx) refers to rtexit2.o(.ARM.Collect$$rtexit$$00000003) for .ARM.Collect$$rtexit$$00000003 + rtexit2.o(.ARM.exidx) refers to rtexit2.o(.ARM.Collect$$rtexit$$00000004) for .ARM.Collect$$rtexit$$00000004 + argv_veneer.o(.emb_text) refers to no_argv.o(.text) for __ARM_get_argv + sys_exit.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting + sys_exit.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function + _get_argv_nomalloc.o(.text) refers (Special) to hrguard.o(.text) for __heap_region$guard + _get_argv_nomalloc.o(.text) refers to defsig_rtmem_outer.o(.text) for __rt_SIGRTMEM + _get_argv_nomalloc.o(.text) refers to sys_command.o(.text) for _sys_command_string + libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000002) for __rt_lib_shutdown_cpp_1 + libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000007) for __rt_lib_shutdown_fp_trap_1 + libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F) for __rt_lib_shutdown_heap_1 + libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000010) for __rt_lib_shutdown_return + libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A) for __rt_lib_shutdown_signal_1 + libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000004) for __rt_lib_shutdown_stdio_1 + libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C) for __rt_lib_shutdown_user_alloc_1 + sys_command.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting + sys_command.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function + defsig_rtmem_outer.o(.text) refers to defsig_rtmem_inner.o(.text) for __rt_SIGRTMEM_inner + defsig_rtmem_outer.o(.text) refers to defsig_exit.o(.text) for __sig_exit + defsig_rtmem_formal.o(.text) refers to rt_raise.o(.text) for __rt_raise + rt_raise.o(.text) refers to __raise.o(.text) for __raise + rt_raise.o(.text) refers to sys_exit.o(.text) for _sys_exit + defsig_exit.o(.text) refers to sys_exit.o(.text) for _sys_exit + defsig_rtmem_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + __raise.o(.text) refers to defsig.o(CL$$defsig) for __default_signal_handler + defsig_general.o(.text) refers to retarget.o(.text) for _ttywrch + defsig.o(CL$$defsig) refers to defsig_rtmem_inner.o(.text) for __rt_SIGRTMEM_inner + defsig_abrt_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + defsig_fpe_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + defsig_rtred_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + defsig_stak_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + defsig_pvfn_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + defsig_cppl_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + defsig_segv_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + defsig_other.o(.text) refers to defsig_general.o(.text) for __default_signal_display + + +============================================================================== + +Removing Unused input sections from the image. + + Removing main.o(.rev16_text), (4 bytes). + Removing main.o(.revsh_text), (4 bytes). + Removing main.o(.rrx_text), (6 bytes). + Removing main.o(.ARM.exidx), (8 bytes). + Removing ssd1306.o(.rev16_text), (4 bytes). + Removing ssd1306.o(.revsh_text), (4 bytes). + Removing ssd1306.o(.rrx_text), (6 bytes). + Removing ssd1306.o(.data), (1024 bytes). + Removing ssd1306.o(.data), (552 bytes). + Removing ssd1306.o(.data), (1024 bytes). + Removing can.o(.rev16_text), (4 bytes). + Removing can.o(.revsh_text), (4 bytes). + Removing can.o(.rrx_text), (6 bytes). + Removing can.o(.text), (1740 bytes). + Removing can.o(.data), (2 bytes). + Removing clk.o(.rev16_text), (4 bytes). + Removing clk.o(.revsh_text), (4 bytes). + Removing clk.o(.rrx_text), (6 bytes). + Removing eadc.o(.rev16_text), (4 bytes). + Removing eadc.o(.revsh_text), (4 bytes). + Removing eadc.o(.rrx_text), (6 bytes). + Removing gpio.o(.rev16_text), (4 bytes). + Removing gpio.o(.revsh_text), (4 bytes). + Removing gpio.o(.rrx_text), (6 bytes). + Removing gpio.o(.text), (94 bytes). + Removing sc.o(.rev16_text), (4 bytes). + Removing sc.o(.revsh_text), (4 bytes). + Removing sc.o(.rrx_text), (6 bytes). + Removing sc.o(.text), (336 bytes). + Removing sc.o(.data), (4 bytes). + Removing sys.o(.rev16_text), (4 bytes). + Removing sys.o(.revsh_text), (4 bytes). + Removing sys.o(.rrx_text), (6 bytes). + Removing uart.o(.rev16_text), (4 bytes). + Removing uart.o(.revsh_text), (4 bytes). + Removing uart.o(.rrx_text), (6 bytes). + Removing retarget.o(.rev16_text), (4 bytes). + Removing retarget.o(.revsh_text), (4 bytes). + Removing retarget.o(.rrx_text), (6 bytes). + Removing retarget.o(.data), (4 bytes). + Removing system_m451series.o(.rev16_text), (4 bytes). + Removing system_m451series.o(.revsh_text), (4 bytes). + Removing system_m451series.o(.rrx_text), (6 bytes). + Removing i2c.o(.rev16_text), (4 bytes). + Removing i2c.o(.revsh_text), (4 bytes). + Removing i2c.o(.rrx_text), (6 bytes). + Removing pwm.o(.rev16_text), (4 bytes). + Removing pwm.o(.revsh_text), (4 bytes). + Removing pwm.o(.rrx_text), (6 bytes). + +49 unused section(s) (total 4970 bytes) removed from the image. + +============================================================================== + +Image Symbol Table + + Local Symbols + + Symbol Name Value Ov Type Size Object(Section) + + RESET 0x00000000 Section 320 startup_m451series.o(RESET) + ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit2.o ABSOLUTE + ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit1.o ABSOLUTE + ../clib/angel/boardlib.s 0x00000000 Number 0 boardinit3.o ABSOLUTE + ../clib/angel/boardlib.s 0x00000000 Number 0 boardshut.o ABSOLUTE + ../clib/angel/dczerorl2.s 0x00000000 Number 0 __dczerorl2.o ABSOLUTE + ../clib/angel/handlers.s 0x00000000 Number 0 __scatter_zi.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry2.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry4.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 rtexit.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 rtexit2.o ABSOLUTE + ../clib/angel/rt.s 0x00000000 Number 0 rt_raise.o ABSOLUTE + ../clib/angel/scatter.s 0x00000000 Number 0 __scatter.o ABSOLUTE + ../clib/angel/startup.s 0x00000000 Number 0 __main.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 sys_stackheap_outer.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 indicate_semi.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 use_no_semi.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 libspace.o ABSOLUTE + ../clib/angel/sysapp.c 0x00000000 Number 0 sys_exit.o ABSOLUTE + ../clib/angel/sysapp.c 0x00000000 Number 0 sys_command.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 no_argv.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 _get_argv_nomalloc.o ABSOLUTE + ../clib/heapalloc.c 0x00000000 Number 0 hrguard.o ABSOLUTE + ../clib/heapaux.c 0x00000000 Number 0 heapauxi.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libshutdown2.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libinit.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libinit2.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libshutdown.o ABSOLUTE + ../clib/memcpset.s 0x00000000 Number 0 rt_memclr_w.o ABSOLUTE + ../clib/misc.s 0x00000000 Number 0 printf_stubs.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_char_common.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __2printf.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_ll_ptr.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 noretval__2printf.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_dec.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_ll.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 noretval__2sprintf.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_int_ll.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_ptr.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_int_ptr.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_int.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_int_ll_ptr.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_ss.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags_ss.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __2sprintf.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_nopercent.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_ss_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags_ss_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_intcommon.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_char_file.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _sputc.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_x.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_percent.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_percent_end.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_d.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 __raise.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_exit.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_outer.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_formal.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtred_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_other.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_segv_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_cppl_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_pvfn_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_stak_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_fpe_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_abrt_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_general.o ABSOLUTE + ../clib/signal.s 0x00000000 Number 0 defsig.o ABSOLUTE + ../clib/stdlib.c 0x00000000 Number 0 exit.o ABSOLUTE + ../clib/string.c 0x00000000 Number 0 strlen.o ABSOLUTE + ../fplib/fpinit.s 0x00000000 Number 0 fpinit.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\can.c 0x00000000 Number 0 can.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\clk.c 0x00000000 Number 0 clk.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\eadc.c 0x00000000 Number 0 eadc.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\gpio.c 0x00000000 Number 0 gpio.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\i2c.c 0x00000000 Number 0 i2c.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\pwm.c 0x00000000 Number 0 pwm.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\sc.c 0x00000000 Number 0 sc.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\sys.c 0x00000000 Number 0 sys.o ABSOLUTE + D:\\programs\\mdk\\Arm\\Packs\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\uart.c 0x00000000 Number 0 uart.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\can.c 0x00000000 Number 0 can.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\clk.c 0x00000000 Number 0 clk.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\eadc.c 0x00000000 Number 0 eadc.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\gpio.c 0x00000000 Number 0 gpio.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\i2c.c 0x00000000 Number 0 i2c.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\pwm.c 0x00000000 Number 0 pwm.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\sc.c 0x00000000 Number 0 sc.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\sys.c 0x00000000 Number 0 sys.o ABSOLUTE + D:\programs\mdk\Arm\Packs\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\uart.c 0x00000000 Number 0 uart.o ABSOLUTE + RTE\Device\M453VG6AE\retarget.c 0x00000000 Number 0 retarget.o ABSOLUTE + RTE\Device\M453VG6AE\startup_M451Series.s 0x00000000 Number 0 startup_m451series.o ABSOLUTE + RTE\Device\M453VG6AE\system_M451Series.c 0x00000000 Number 0 system_m451series.o ABSOLUTE + RTE\\Device\\M453VG6AE\\retarget.c 0x00000000 Number 0 retarget.o ABSOLUTE + RTE\\Device\\M453VG6AE\\system_M451Series.c 0x00000000 Number 0 system_m451series.o ABSOLUTE + dc.s 0x00000000 Number 0 dc.o ABSOLUTE + main.cpp 0x00000000 Number 0 main.o ABSOLUTE + main.cpp 0x00000000 Number 0 main.o ABSOLUTE + ssd1306.c 0x00000000 Number 0 ssd1306.o ABSOLUTE + ssd1306.c 0x00000000 Number 0 ssd1306.o ABSOLUTE + !!!main 0x00000140 Section 8 __main.o(!!!main) + !!!scatter 0x00000148 Section 52 __scatter.o(!!!scatter) + !!dczerorl2 0x0000017c Section 90 __dczerorl2.o(!!dczerorl2) + !!handler_zi 0x000001d8 Section 28 __scatter_zi.o(!!handler_zi) + .ARM.Collect$$_printf_percent$$00000000 0x000001f4 Section 0 _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) + .ARM.Collect$$_printf_percent$$00000009 0x000001f4 Section 6 _printf_d.o(.ARM.Collect$$_printf_percent$$00000009) + .ARM.Collect$$_printf_percent$$0000000C 0x000001fa Section 6 _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) + .ARM.Collect$$_printf_percent$$00000017 0x00000200 Section 4 _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017) + .ARM.Collect$$libinit$$00000000 0x00000204 Section 2 libinit.o(.ARM.Collect$$libinit$$00000000) + .ARM.Collect$$libinit$$00000001 0x00000206 Section 4 libinit2.o(.ARM.Collect$$libinit$$00000001) + .ARM.Collect$$libinit$$00000004 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$00000004) + .ARM.Collect$$libinit$$0000000A 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000A) + .ARM.Collect$$libinit$$0000000C 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000C) + .ARM.Collect$$libinit$$0000000E 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000E) + .ARM.Collect$$libinit$$00000011 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$00000011) + .ARM.Collect$$libinit$$00000013 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$00000013) + .ARM.Collect$$libinit$$00000015 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$00000015) + .ARM.Collect$$libinit$$00000017 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$00000017) + .ARM.Collect$$libinit$$00000019 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$00000019) + .ARM.Collect$$libinit$$0000001B 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001B) + .ARM.Collect$$libinit$$0000001D 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001D) + .ARM.Collect$$libinit$$0000001F 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001F) + .ARM.Collect$$libinit$$00000021 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$00000021) + .ARM.Collect$$libinit$$00000023 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$00000023) + .ARM.Collect$$libinit$$00000025 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$00000025) + .ARM.Collect$$libinit$$0000002C 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$0000002C) + .ARM.Collect$$libinit$$0000002E 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$0000002E) + .ARM.Collect$$libinit$$00000030 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$00000030) + .ARM.Collect$$libinit$$00000032 0x0000020a Section 0 libinit2.o(.ARM.Collect$$libinit$$00000032) + .ARM.Collect$$libinit$$00000033 0x0000020a Section 2 libinit2.o(.ARM.Collect$$libinit$$00000033) + .ARM.Collect$$libshutdown$$00000000 0x0000020c Section 2 libshutdown.o(.ARM.Collect$$libshutdown$$00000000) + .ARM.Collect$$libshutdown$$00000002 0x0000020e Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000002) + .ARM.Collect$$libshutdown$$00000004 0x0000020e Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000004) + .ARM.Collect$$libshutdown$$00000007 0x0000020e Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000007) + .ARM.Collect$$libshutdown$$0000000A 0x0000020e Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A) + .ARM.Collect$$libshutdown$$0000000C 0x0000020e Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C) + .ARM.Collect$$libshutdown$$0000000F 0x0000020e Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F) + .ARM.Collect$$libshutdown$$00000010 0x0000020e Section 2 libshutdown2.o(.ARM.Collect$$libshutdown$$00000010) + .ARM.Collect$$rtentry$$00000000 0x00000210 Section 0 __rtentry.o(.ARM.Collect$$rtentry$$00000000) + .ARM.Collect$$rtentry$$00000002 0x00000210 Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000002) + .ARM.Collect$$rtentry$$00000004 0x00000210 Section 6 __rtentry4.o(.ARM.Collect$$rtentry$$00000004) + .ARM.Collect$$rtentry$$00000009 0x00000216 Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000009) + .ARM.Collect$$rtentry$$0000000A 0x00000216 Section 4 __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) + .ARM.Collect$$rtentry$$0000000C 0x0000021a Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000C) + .ARM.Collect$$rtentry$$0000000D 0x0000021a Section 8 __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) + .ARM.Collect$$rtexit$$00000000 0x00000222 Section 2 rtexit.o(.ARM.Collect$$rtexit$$00000000) + .ARM.Collect$$rtexit$$00000002 0x00000224 Section 0 rtexit2.o(.ARM.Collect$$rtexit$$00000002) + .ARM.Collect$$rtexit$$00000003 0x00000224 Section 4 rtexit2.o(.ARM.Collect$$rtexit$$00000003) + .ARM.Collect$$rtexit$$00000004 0x00000228 Section 6 rtexit2.o(.ARM.Collect$$rtexit$$00000004) + .emb_text 0x00000230 Section 28 retarget.o(.emb_text) + $v0 0x00000230 Number 0 retarget.o(.emb_text) + .text 0x0000024c Section 0 main.o(.text) + SYS_UnlockReg() 0x000005e7 Thumb Code 32 main.o(.text) + .text 0x000006b8 Section 0 ssd1306.o(.text) + .text 0x00000940 Section 0 clk.o(.text) + .text 0x00000de4 Section 0 eadc.o(.text) + .text 0x00000e70 Section 0 sys.o(.text) + .text 0x00000f0c Section 0 uart.o(.text) + CLK_GetPLLClockFreq 0x00000f0d Thumb Code 76 uart.o(.text) + __NVIC_EnableIRQ 0x00001237 Thumb Code 26 uart.o(.text) + __NVIC_DisableIRQ 0x00001251 Thumb Code 34 uart.o(.text) + .text 0x0000129c Section 0 retarget.o(.text) + __tagsym$$used 0x0000129d Number 0 retarget.o(.text) + stackDump 0x00001301 Thumb Code 72 retarget.o(.text) + .text 0x000013c4 Section 116 startup_m451series.o(.text) + $v0 0x000013c4 Number 0 startup_m451series.o(.text) + Default_Handler 0x00001409 Thumb Code 2 startup_m451series.o(.text) + .text 0x00001438 Section 0 system_m451series.o(.text) + .text 0x00001520 Section 0 i2c.o(.text) + .text 0x00001790 Section 0 pwm.o(.text) + CLK_GetPLLClockFreq 0x00001791 Thumb Code 76 pwm.o(.text) + .text 0x00001f00 Section 0 noretval__2printf.o(.text) + .text 0x00001f18 Section 0 noretval__2sprintf.o(.text) + .text 0x00001f40 Section 0 _printf_dec.o(.text) + .text 0x00001fb8 Section 0 _printf_hex_int.o(.text) + .text 0x00002010 Section 0 __printf_wp.o(.text) + .text 0x0000211e Section 0 strlen.o(.text) + .text 0x0000215c Section 78 rt_memclr_w.o(.text) + .text 0x000021aa Section 0 heapauxi.o(.text) + .text 0x000021b0 Section 0 _printf_intcommon.o(.text) + .text 0x00002264 Section 0 _printf_char_common.o(.text) + _printf_input_char 0x00002265 Thumb Code 10 _printf_char_common.o(.text) + .text 0x00002294 Section 0 _sputc.o(.text) + .text 0x000022a0 Section 0 _printf_char_file.o(.text) + .text 0x000022c4 Section 74 sys_stackheap_outer.o(.text) + .text 0x0000230e Section 0 exit.o(.text) + .text 0x00002320 Section 8 libspace.o(.text) + .text 0x00002328 Section 0 sys_exit.o(.text) + .text 0x00002334 Section 2 use_no_semi.o(.text) + .text 0x00002336 Section 0 indicate_semi.o(.text) + i._is_digit 0x00002336 Section 0 __printf_wp.o(i._is_digit) + x$fpl$fpinit 0x00002344 Section 10 fpinit.o(x$fpl$fpinit) + $v0 0x00002344 Number 0 fpinit.o(x$fpl$fpinit) + .constdata 0x00002350 Section 48 uart.o(.constdata) + .constdata 0x00002380 Section 40 _printf_hex_int.o(.constdata) + uc_hextab 0x00002380 Data 20 _printf_hex_int.o(.constdata) + lc_hextab 0x00002394 Data 20 _printf_hex_int.o(.constdata) + .conststring 0x000023a8 Section 246 main.o(.conststring) + .data 0x20000000 Section 20 main.o(.data) + cnt 0x20000004 Data 4 main.o(.data) + out 0x20000008 Data 4 main.o(.data) + .data 0x20000014 Section 1520 ssd1306.o(.data) + .data 0x20000604 Section 4 retarget.o(.data) + .data 0x20000608 Section 44 system_m451series.o(.data) + .bss 0x20000634 Section 96 libspace.o(.bss) + HEAP 0x20000698 Section 0 startup_m451series.o(HEAP) + STACK 0x20000698 Section 1024 startup_m451series.o(STACK) + Heap_Mem 0x20000698 Data 0 startup_m451series.o(HEAP) + Stack_Mem 0x20000698 Data 1024 startup_m451series.o(STACK) + __initial_sp 0x20000a98 Data 0 startup_m451series.o(STACK) + + Global Symbols + + Symbol Name Value Ov Type Size Object(Section) + + BuildAttributes$$THM_ISAv4$E$P$D$K$B$S$7EM$VFPi3$EXTD16$VFPS$VFMA$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$ROPI$EBA8$UX$STANDARDLIB$REQ8$PRES8$EABIv2 0x00000000 Number 0 anon$$obj.o ABSOLUTE + __ARM_use_no_argv 0x00000000 Number 0 main.o ABSOLUTE + __Vectors 0x00000000 Data 4 startup_m451series.o(RESET) + _printf_flags 0x00000000 Number 0 printf_stubs.o ABSOLUTE + _printf_return_value 0x00000000 Number 0 printf_stubs.o ABSOLUTE + _printf_sizespec 0x00000000 Number 0 printf_stubs.o ABSOLUTE + _printf_widthprec 0x00000000 Number 0 printf_stubs.o ABSOLUTE + __ARM_exceptions_init - Undefined Weak Reference + __alloca_initialize - Undefined Weak Reference + __arm_preinit_ - Undefined Weak Reference + __cpp_initialize__aeabi_ - Undefined Weak Reference + __cxa_finalize - Undefined Weak Reference + __rt_locale - Undefined Weak Reference + __sigvec_lookup - Undefined Weak Reference + _atexit_init - Undefined Weak Reference + _call_atexit_fns - Undefined Weak Reference + _clock_init - Undefined Weak Reference + _fp_trap_init - Undefined Weak Reference + _fp_trap_shutdown - Undefined Weak Reference + _get_lc_collate - Undefined Weak Reference + _get_lc_ctype - Undefined Weak Reference + _get_lc_monetary - Undefined Weak Reference + _get_lc_numeric - Undefined Weak Reference + _get_lc_time - Undefined Weak Reference + _getenv_init - Undefined Weak Reference + _handle_redirection - Undefined Weak Reference + _init_alloc - Undefined Weak Reference + _init_user_alloc - Undefined Weak Reference + _initio - Undefined Weak Reference + _printf_post_padding - Undefined Weak Reference + _printf_pre_padding - Undefined Weak Reference + _printf_truncate_signed - Undefined Weak Reference + _printf_truncate_unsigned - Undefined Weak Reference + _rand_init - Undefined Weak Reference + _signal_finish - Undefined Weak Reference + _signal_init - Undefined Weak Reference + _terminate_alloc - Undefined Weak Reference + _terminate_user_alloc - Undefined Weak Reference + _terminateio - Undefined Weak Reference + __Vectors_End 0x00000140 Data 0 startup_m451series.o(RESET) + __Vectors_Size 0x00000140 Number 0 startup_m451series.o ABSOLUTE + __main 0x00000141 Thumb Code 8 __main.o(!!!main) + __scatterload 0x00000149 Thumb Code 0 __scatter.o(!!!scatter) + __scatterload_rt2 0x00000149 Thumb Code 44 __scatter.o(!!!scatter) + __scatterload_rt2_thumb_only 0x00000149 Thumb Code 0 __scatter.o(!!!scatter) + __scatterload_null 0x00000157 Thumb Code 0 __scatter.o(!!!scatter) + __decompress 0x0000017d Thumb Code 90 __dczerorl2.o(!!dczerorl2) + __decompress1 0x0000017d Thumb Code 0 __dczerorl2.o(!!dczerorl2) + __scatterload_zeroinit 0x000001d9 Thumb Code 28 __scatter_zi.o(!!handler_zi) + _printf_d 0x000001f5 Thumb Code 0 _printf_d.o(.ARM.Collect$$_printf_percent$$00000009) + _printf_percent 0x000001f5 Thumb Code 0 _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) + _printf_x 0x000001fb Thumb Code 0 _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) + _printf_percent_end 0x00000201 Thumb Code 0 _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017) + __rt_lib_init 0x00000205 Thumb Code 0 libinit.o(.ARM.Collect$$libinit$$00000000) + __rt_lib_init_fp_1 0x00000207 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000001) + __rt_lib_init_alloca_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000002E) + __rt_lib_init_argv_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000002C) + __rt_lib_init_atexit_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001B) + __rt_lib_init_clock_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000021) + __rt_lib_init_cpp_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000032) + __rt_lib_init_exceptions_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000030) + __rt_lib_init_fp_trap_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001F) + __rt_lib_init_getenv_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000023) + __rt_lib_init_heap_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000A) + __rt_lib_init_lc_collate_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000011) + __rt_lib_init_lc_ctype_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000013) + __rt_lib_init_lc_monetary_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000015) + __rt_lib_init_lc_numeric_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000017) + __rt_lib_init_lc_time_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000019) + __rt_lib_init_preinit_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000004) + __rt_lib_init_rand_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000E) + __rt_lib_init_return 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000033) + __rt_lib_init_signal_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001D) + __rt_lib_init_stdio_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000025) + __rt_lib_init_user_alloc_1 0x0000020b Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000C) + __rt_lib_shutdown 0x0000020d Thumb Code 0 libshutdown.o(.ARM.Collect$$libshutdown$$00000000) + __rt_lib_shutdown_cpp_1 0x0000020f Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000002) + __rt_lib_shutdown_fp_trap_1 0x0000020f Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000007) + __rt_lib_shutdown_heap_1 0x0000020f Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F) + __rt_lib_shutdown_return 0x0000020f Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000010) + __rt_lib_shutdown_signal_1 0x0000020f Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A) + __rt_lib_shutdown_stdio_1 0x0000020f Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000004) + __rt_lib_shutdown_user_alloc_1 0x0000020f Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C) + __rt_entry 0x00000211 Thumb Code 0 __rtentry.o(.ARM.Collect$$rtentry$$00000000) + __rt_entry_presh_1 0x00000211 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000002) + __rt_entry_sh 0x00000211 Thumb Code 0 __rtentry4.o(.ARM.Collect$$rtentry$$00000004) + __rt_entry_li 0x00000217 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) + __rt_entry_postsh_1 0x00000217 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000009) + __rt_entry_main 0x0000021b Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) + __rt_entry_postli_1 0x0000021b Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000C) + __rt_exit 0x00000223 Thumb Code 0 rtexit.o(.ARM.Collect$$rtexit$$00000000) + __rt_exit_ls 0x00000225 Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000003) + __rt_exit_prels_1 0x00000225 Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000002) + __rt_exit_exit 0x00000229 Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000004) + HardFault_Handler 0x00000231 Thumb Code 24 retarget.o(.emb_text) + PWMInit() 0x0000024d Thumb Code 204 main.o(.text) + I2CInit() 0x00000319 Thumb Code 88 main.o(.text) + SYS_Init() 0x00000371 Thumb Code 142 main.o(.text) + UART0_Init() 0x000003ff Thumb Code 22 main.o(.text) + EADC_FunctionTest() 0x00000415 Thumb Code 346 main.o(.text) + PWM0P0_IRQHandler() 0x0000056f Thumb Code 62 main.o(.text) + ADC00_IRQHandler() 0x000005ad Thumb Code 14 main.o(.text) + main 0x000005bb Thumb Code 44 main.o(.text) + OLED_SingleWrite 0x000006b9 Thumb Code 96 ssd1306.o(.text) + OLED_SingleRead 0x00000719 Thumb Code 138 ssd1306.o(.text) + oledWriteCommand 0x000007a3 Thumb Code 6 ssd1306.o(.text) + oledWriteData 0x000007a9 Thumb Code 6 ssd1306.o(.text) + Init_LCD 0x000007af Thumb Code 172 ssd1306.o(.text) + oled_address 0x0000085b Thumb Code 32 ssd1306.o(.text) + clear_LCD 0x0000087b Thumb Code 38 ssd1306.o(.text) + draw_LCD 0x000008a1 Thumb Code 44 ssd1306.o(.text) + print_C 0x000008cd Thumb Code 70 ssd1306.o(.text) + print_Line 0x00000913 Thumb Code 36 ssd1306.o(.text) + CLK_DisableModuleClock 0x00000941 Thumb Code 28 clk.o(.text) + CLK_DisableCKO 0x0000095d Thumb Code 4 clk.o(.text) + CLK_SetModuleClock 0x00000961 Thumb Code 74 clk.o(.text) + CLK_EnableModuleClock 0x000009ab Thumb Code 28 clk.o(.text) + CLK_EnableCKO 0x000009c7 Thumb Code 40 clk.o(.text) + CLK_PowerDown 0x000009ef Thumb Code 28 clk.o(.text) + CLK_Idle 0x00000a0b Thumb Code 28 clk.o(.text) + CLK_GetHXTFreq 0x00000a27 Thumb Code 16 clk.o(.text) + CLK_GetLXTFreq 0x00000a37 Thumb Code 22 clk.o(.text) + CLK_GetPCLK0Freq 0x00000a4d Thumb Code 26 clk.o(.text) + CLK_GetPCLK1Freq 0x00000a67 Thumb Code 26 clk.o(.text) + CLK_GetHCLKFreq 0x00000a81 Thumb Code 12 clk.o(.text) + CLK_GetCPUFreq 0x00000a8d Thumb Code 12 clk.o(.text) + CLK_WaitClockReady 0x00000a99 Thumb Code 38 clk.o(.text) + CLK_SetHCLK 0x00000abf Thumb Code 98 clk.o(.text) + CLK_DisablePLL 0x00000b21 Thumb Code 18 clk.o(.text) + CLK_EnablePLL 0x00000b33 Thumb Code 344 clk.o(.text) + CLK_SetCoreClock 0x00000c8b Thumb Code 136 clk.o(.text) + CLK_SetSysTickClockSrc 0x00000d13 Thumb Code 20 clk.o(.text) + CLK_EnableXtalRC 0x00000d27 Thumb Code 16 clk.o(.text) + CLK_DisableXtalRC 0x00000d37 Thumb Code 106 clk.o(.text) + CLK_EnableSysTick 0x00000da1 Thumb Code 56 clk.o(.text) + CLK_DisableSysTick 0x00000dd9 Thumb Code 10 clk.o(.text) + EADC_Open 0x00000de5 Thumb Code 20 eadc.o(.text) + EADC_Close 0x00000df9 Thumb Code 10 eadc.o(.text) + EADC_ConfigSampleModule 0x00000e03 Thumb Code 26 eadc.o(.text) + EADC_SetTriggerDelayTime 0x00000e1d Thumb Code 30 eadc.o(.text) + EADC_SetInternalSampleTime 0x00000e3b Thumb Code 22 eadc.o(.text) + EADC_SetExtendSampleTime 0x00000e51 Thumb Code 24 eadc.o(.text) + SYS_ClearResetSrc 0x00000e71 Thumb Code 12 sys.o(.text) + SYS_GetBODStatus 0x00000e7d Thumb Code 12 sys.o(.text) + SYS_GetResetSrc 0x00000e89 Thumb Code 8 sys.o(.text) + SYS_IsRegLocked 0x00000e91 Thumb Code 16 sys.o(.text) + SYS_ReadPDID 0x00000ea1 Thumb Code 8 sys.o(.text) + SYS_ResetChip 0x00000ea9 Thumb Code 14 sys.o(.text) + SYS_ResetCPU 0x00000eb7 Thumb Code 14 sys.o(.text) + SYS_ResetModule 0x00000ec5 Thumb Code 24 sys.o(.text) + SYS_EnableBOD 0x00000edd Thumb Code 34 sys.o(.text) + SYS_DisableBOD 0x00000eff Thumb Code 14 sys.o(.text) + UART_ClearIntFlag 0x00000f59 Thumb Code 68 uart.o(.text) + UART_Close 0x00000f9d Thumb Code 6 uart.o(.text) + UART_DisableFlowCtrl 0x00000fa3 Thumb Code 10 uart.o(.text) + UART_DisableInt 0x00000fad Thumb Code 42 uart.o(.text) + UART_EnableFlowCtrl 0x00000fd7 Thumb Code 26 uart.o(.text) + UART_EnableInt 0x00000ff1 Thumb Code 42 uart.o(.text) + UART_Open 0x0000101b Thumb Code 126 uart.o(.text) + UART_Read 0x00001099 Thumb Code 44 uart.o(.text) + UART_SetLine_Config 0x000010c5 Thumb Code 128 uart.o(.text) + UART_SetTimeoutCnt 0x00001145 Thumb Code 20 uart.o(.text) + UART_SelectIrDAMode 0x00001159 Thumb Code 130 uart.o(.text) + UART_SelectRS485Mode 0x000011db Thumb Code 26 uart.o(.text) + UART_SelectLINMode 0x000011f5 Thumb Code 22 uart.o(.text) + UART_Write 0x0000120b Thumb Code 44 uart.o(.text) + Hard_Fault_Handler 0x0000129d Thumb Code 16 retarget.o(.text) + SendChar_ToUART 0x000012ad Thumb Code 26 retarget.o(.text) + SendChar 0x000012c7 Thumb Code 2 retarget.o(.text) + GetChar 0x000012c9 Thumb Code 14 retarget.o(.text) + kbhit 0x000012d7 Thumb Code 10 retarget.o(.text) + IsDebugFifoEmpty 0x000012e1 Thumb Code 10 retarget.o(.text) + _ttywrch 0x000012eb Thumb Code 2 retarget.o(.text) + fputc 0x000012ed Thumb Code 12 retarget.o(.text) + fgetc 0x000012f9 Thumb Code 2 retarget.o(.text) + ferror 0x000012fb Thumb Code 6 retarget.o(.text) + Reset_Handler 0x000013c5 Thumb Code 50 startup_m451series.o(.text) + NMI_Handler 0x000013f7 Thumb Code 2 startup_m451series.o(.text) + MemManage_Handler 0x000013fb Thumb Code 2 startup_m451series.o(.text) + BusFault_Handler 0x000013fd Thumb Code 2 startup_m451series.o(.text) + UsageFault_Handler 0x000013ff Thumb Code 2 startup_m451series.o(.text) + SVC_Handler 0x00001401 Thumb Code 2 startup_m451series.o(.text) + DebugMon_Handler 0x00001403 Thumb Code 2 startup_m451series.o(.text) + PendSV_Handler 0x00001405 Thumb Code 2 startup_m451series.o(.text) + SysTick_Handler 0x00001407 Thumb Code 2 startup_m451series.o(.text) + ACMP01_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + ADC00_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + ADC01_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + ADC02_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + ADC03_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + BOD_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + BRAKE0_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + BRAKE1_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + CAN0_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + CLKFAIL_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + DAC_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + EINT0_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + EINT1_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + EINT2_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + EINT3_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + EINT4_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + EINT5_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + GPA_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + GPB_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + GPC_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + GPD_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + GPE_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + GPF_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + I2C0_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + I2C1_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + IRC_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + PDMA_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + PWM0P0_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + PWM0P1_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + PWM0P2_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + PWM1P0_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + PWM1P1_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + PWM1P2_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + PWRWU_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + RAMPE_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + RTC_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + SC0_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + SPI0_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + SPI1_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + SPI2_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + TAMPER_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + TK_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + TMR0_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + TMR1_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + TMR2_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + TMR3_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + UART0_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + UART1_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + UART2_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + UART3_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + USBD_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + USBH_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + USBOTG_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + WDT_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + WWDT_IRQHandler 0x00001409 Thumb Code 0 startup_m451series.o(.text) + __user_initial_stackheap 0x0000140d Thumb Code 10 startup_m451series.o(.text) + SystemCoreClockUpdate 0x00001439 Thumb Code 128 system_m451series.o(.text) + SystemInit 0x000014b9 Thumb Code 80 system_m451series.o(.text) + I2C_Open 0x00001521 Thumb Code 46 i2c.o(.text) + I2C_Close 0x0000154f Thumb Code 56 i2c.o(.text) + I2C_ClearTimeoutFlag 0x00001587 Thumb Code 10 i2c.o(.text) + I2C_Trigger 0x00001591 Thumb Code 40 i2c.o(.text) + I2C_DisableInt 0x000015b9 Thumb Code 10 i2c.o(.text) + I2C_EnableInt 0x000015c3 Thumb Code 10 i2c.o(.text) + I2C_GetBusClockFreq 0x000015cd Thumb Code 16 i2c.o(.text) + I2C_SetBusClockFreq 0x000015dd Thumb Code 36 i2c.o(.text) + I2C_GetIntFlag 0x00001601 Thumb Code 8 i2c.o(.text) + I2C_GetStatus 0x00001609 Thumb Code 4 i2c.o(.text) + I2C_GetData 0x0000160d Thumb Code 6 i2c.o(.text) + I2C_SetData 0x00001613 Thumb Code 4 i2c.o(.text) + I2C_SetSlaveAddr 0x00001617 Thumb Code 32 i2c.o(.text) + I2C_SetSlaveAddrMask 0x00001637 Thumb Code 30 i2c.o(.text) + I2C_EnableTimeout 0x00001655 Thumb Code 28 i2c.o(.text) + I2C_DisableTimeout 0x00001671 Thumb Code 10 i2c.o(.text) + I2C_EnableWakeup 0x0000167b Thumb Code 10 i2c.o(.text) + I2C_DisableWakeup 0x00001685 Thumb Code 10 i2c.o(.text) + I2C_SMBusGetStatus 0x0000168f Thumb Code 4 i2c.o(.text) + I2C_SMBusClearInterruptFlag 0x00001693 Thumb Code 8 i2c.o(.text) + I2C_SMBusSetPacketByteCount 0x0000169b Thumb Code 4 i2c.o(.text) + I2C_SMBusOpen 0x0000169f Thumb Code 28 i2c.o(.text) + I2C_SMBusClose 0x000016bb Thumb Code 6 i2c.o(.text) + I2C_SMBusPECTxEnable 0x000016c1 Thumb Code 28 i2c.o(.text) + I2C_SMBusGetPECValue 0x000016dd Thumb Code 6 i2c.o(.text) + I2C_SMBusIdleTimeout 0x000016e3 Thumb Code 40 i2c.o(.text) + I2C_SMBusTimeout 0x0000170b Thumb Code 60 i2c.o(.text) + I2C_SMBusClockLoTimeout 0x00001747 Thumb Code 60 i2c.o(.text) + PWM_ConfigCaptureChannel 0x000017dd Thumb Code 162 pwm.o(.text) + PWM_ConfigOutputChannel 0x0000187f Thumb Code 252 pwm.o(.text) + PWM_Start 0x0000197b Thumb Code 8 pwm.o(.text) + PWM_Stop 0x00001983 Thumb Code 30 pwm.o(.text) + PWM_ForceStop 0x000019a1 Thumb Code 8 pwm.o(.text) + PWM_EnableADCTrigger 0x000019a9 Thumb Code 44 pwm.o(.text) + PWM_DisableADCTrigger 0x000019d5 Thumb Code 30 pwm.o(.text) + PWM_ClearADCTriggerFlag 0x000019f3 Thumb Code 12 pwm.o(.text) + PWM_GetADCTriggerFlag 0x000019ff Thumb Code 18 pwm.o(.text) + PWM_EnableDACTrigger 0x00001a11 Thumb Code 12 pwm.o(.text) + PWM_DisableDACTrigger 0x00001a1d Thumb Code 16 pwm.o(.text) + PWM_ClearDACTriggerFlag 0x00001a2d Thumb Code 10 pwm.o(.text) + PWM_GetDACTriggerFlag 0x00001a37 Thumb Code 10 pwm.o(.text) + PWM_EnableFaultBrake 0x00001a41 Thumb Code 228 pwm.o(.text) + PWM_EnableCapture 0x00001b25 Thumb Code 22 pwm.o(.text) + PWM_DisableCapture 0x00001b3b Thumb Code 22 pwm.o(.text) + PWM_EnableOutput 0x00001b51 Thumb Code 10 pwm.o(.text) + PWM_DisableOutput 0x00001b5b Thumb Code 10 pwm.o(.text) + PWM_EnablePDMA 0x00001b65 Thumb Code 64 pwm.o(.text) + PWM_DisablePDMA 0x00001ba5 Thumb Code 20 pwm.o(.text) + PWM_EnableDeadZone 0x00001bb9 Thumb Code 26 pwm.o(.text) + PWM_DisableDeadZone 0x00001bd3 Thumb Code 16 pwm.o(.text) + PWM_EnableCaptureInt 0x00001be3 Thumb Code 14 pwm.o(.text) + PWM_DisableCaptureInt 0x00001bf1 Thumb Code 14 pwm.o(.text) + PWM_ClearCaptureIntFlag 0x00001bff Thumb Code 8 pwm.o(.text) + PWM_GetCaptureIntFlag 0x00001c07 Thumb Code 36 pwm.o(.text) + PWM_EnableDutyInt 0x00001c2b Thumb Code 12 pwm.o(.text) + PWM_DisableDutyInt 0x00001c37 Thumb Code 14 pwm.o(.text) + PWM_ClearDutyIntFlag 0x00001c45 Thumb Code 10 pwm.o(.text) + PWM_GetDutyIntFlag 0x00001c4f Thumb Code 16 pwm.o(.text) + PWM_EnableFaultBrakeInt 0x00001c5f Thumb Code 14 pwm.o(.text) + PWM_DisableFaultBrakeInt 0x00001c6d Thumb Code 14 pwm.o(.text) + PWM_ClearFaultBrakeIntFlag 0x00001c7b Thumb Code 10 pwm.o(.text) + PWM_GetFaultBrakeIntFlag 0x00001c85 Thumb Code 16 pwm.o(.text) + PWM_EnablePeriodInt 0x00001c95 Thumb Code 16 pwm.o(.text) + PWM_DisablePeriodInt 0x00001ca5 Thumb Code 16 pwm.o(.text) + PWM_ClearPeriodIntFlag 0x00001cb5 Thumb Code 12 pwm.o(.text) + PWM_GetPeriodIntFlag 0x00001cc1 Thumb Code 18 pwm.o(.text) + PWM_EnableZeroInt 0x00001cd3 Thumb Code 14 pwm.o(.text) + PWM_DisableZeroInt 0x00001ce1 Thumb Code 14 pwm.o(.text) + PWM_ClearZeroIntFlag 0x00001cef Thumb Code 10 pwm.o(.text) + PWM_GetZeroIntFlag 0x00001cf9 Thumb Code 16 pwm.o(.text) + PWM_EnableAcc 0x00001d09 Thumb Code 32 pwm.o(.text) + PWM_DisableAcc 0x00001d29 Thumb Code 18 pwm.o(.text) + PWM_EnableAccInt 0x00001d3b Thumb Code 18 pwm.o(.text) + PWM_DisableAccInt 0x00001d4d Thumb Code 18 pwm.o(.text) + PWM_ClearAccInt 0x00001d5f Thumb Code 14 pwm.o(.text) + PWM_GetAccInt 0x00001d6d Thumb Code 20 pwm.o(.text) + PWM_ClearFTDutyIntFlag 0x00001d81 Thumb Code 14 pwm.o(.text) + PWM_GetFTDutyIntFlag 0x00001d8f Thumb Code 20 pwm.o(.text) + PWM_EnableLoadMode 0x00001da3 Thumb Code 10 pwm.o(.text) + PWM_DisableLoadMode 0x00001dad Thumb Code 10 pwm.o(.text) + PWM_ConfigSyncPhase 0x00001db7 Thumb Code 50 pwm.o(.text) + PWM_EnableSyncPhase 0x00001de9 Thumb Code 34 pwm.o(.text) + PWM_DisableSyncPhase 0x00001e0b Thumb Code 34 pwm.o(.text) + PWM_EnableSyncNoiseFilter 0x00001e2d Thumb Code 22 pwm.o(.text) + PWM_DisableSyncNoiseFilter 0x00001e43 Thumb Code 10 pwm.o(.text) + PWM_EnableSyncPinInverse 0x00001e4d Thumb Code 10 pwm.o(.text) + PWM_DisableSyncPinInverse 0x00001e57 Thumb Code 10 pwm.o(.text) + PWM_SetClockSource 0x00001e61 Thumb Code 22 pwm.o(.text) + PWM_EnableBrakeNoiseFilter 0x00001e77 Thumb Code 30 pwm.o(.text) + PWM_DisableBrakeNoiseFilter 0x00001e95 Thumb Code 16 pwm.o(.text) + PWM_EnableBrakePinInverse 0x00001ea5 Thumb Code 16 pwm.o(.text) + PWM_DisableBrakePinInverse 0x00001eb5 Thumb Code 16 pwm.o(.text) + PWM_SetBrakePinSource 0x00001ec5 Thumb Code 30 pwm.o(.text) + PWM_GetWrapAroundFlag 0x00001ee3 Thumb Code 16 pwm.o(.text) + PWM_ClearWrapAroundFlag 0x00001ef3 Thumb Code 10 pwm.o(.text) + __2printf 0x00001f01 Thumb Code 20 noretval__2printf.o(.text) + __2sprintf 0x00001f19 Thumb Code 34 noretval__2sprintf.o(.text) + _printf_int_dec 0x00001f41 Thumb Code 104 _printf_dec.o(.text) + _printf_int_hex 0x00001fb9 Thumb Code 84 _printf_hex_int.o(.text) + _printf_longlong_hex 0x00001fb9 Thumb Code 0 _printf_hex_int.o(.text) + __printf 0x00002011 Thumb Code 270 __printf_wp.o(.text) + strlen 0x0000211f Thumb Code 62 strlen.o(.text) + __aeabi_memclr4 0x0000215d Thumb Code 0 rt_memclr_w.o(.text) + __aeabi_memclr8 0x0000215d Thumb Code 0 rt_memclr_w.o(.text) + __rt_memclr_w 0x0000215d Thumb Code 78 rt_memclr_w.o(.text) + _memset_w 0x00002161 Thumb Code 0 rt_memclr_w.o(.text) + __use_two_region_memory 0x000021ab Thumb Code 2 heapauxi.o(.text) + __rt_heap_escrow$2region 0x000021ad Thumb Code 2 heapauxi.o(.text) + __rt_heap_expand$2region 0x000021af Thumb Code 2 heapauxi.o(.text) + _printf_int_common 0x000021b1 Thumb Code 178 _printf_intcommon.o(.text) + _printf_char_common 0x0000226f Thumb Code 32 _printf_char_common.o(.text) + _sputc 0x00002295 Thumb Code 10 _sputc.o(.text) + _printf_char_file 0x000022a1 Thumb Code 32 _printf_char_file.o(.text) + __user_setup_stackheap 0x000022c5 Thumb Code 74 sys_stackheap_outer.o(.text) + exit 0x0000230f Thumb Code 18 exit.o(.text) + __user_libspace 0x00002321 Thumb Code 8 libspace.o(.text) + __user_perproc_libspace 0x00002321 Thumb Code 0 libspace.o(.text) + __user_perthread_libspace 0x00002321 Thumb Code 0 libspace.o(.text) + _sys_exit 0x00002329 Thumb Code 8 sys_exit.o(.text) + __I$use$semihosting 0x00002335 Thumb Code 0 use_no_semi.o(.text) + __use_no_semihosting_swi 0x00002335 Thumb Code 2 use_no_semi.o(.text) + __semihosting_library_function 0x00002337 Thumb Code 0 indicate_semi.o(.text) + _is_digit 0x00002337 Thumb Code 14 __printf_wp.o(i._is_digit) + _fp_init 0x00002345 Thumb Code 10 fpinit.o(x$fpl$fpinit) + __fplib_config_fpu_vfp 0x0000234d Thumb Code 0 fpinit.o(x$fpl$fpinit) + __fplib_config_pureend_doubles 0x0000234d Thumb Code 0 fpinit.o(x$fpl$fpinit) + Region$$Table$$Base 0x000024a0 Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x000024c0 Number 0 anon$$obj.o(Region$$Table) + g_u32COVNUMFlag 0x20000000 Data 4 main.o(.data) + g_u32AdcIntFlag 0x2000000c Data 4 main.o(.data) + x 0x20000010 Data 4 main.o(.data) + F8X16 0x20000014 Data 1520 ssd1306.o(.data) + __stdout 0x20000604 Data 4 retarget.o(.data) + SystemCoreClock 0x20000608 Data 4 system_m451series.o(.data) + CyclesPerUs 0x2000060c Data 4 system_m451series.o(.data) + PllClock 0x20000610 Data 4 system_m451series.o(.data) + gau32ClkSrcTbl 0x20000614 Data 32 system_m451series.o(.data) + __libspace_start 0x20000634 Data 96 libspace.o(.bss) + __temporary_stack_top$libspace 0x20000694 Data 0 libspace.o(.bss) + + + +============================================================================== + +Memory Map of the image + + Image Entry point : 0x000013c5 + + Load Region LR_1 (Base: 0x00000000, Size: 0x00002af4, Max: 0xffffffff, ABSOLUTE, COMPRESSED[0x00002848]) + + Execution Region ER_RO (Exec base: 0x00000000, Load base: 0x00000000, Size: 0x000024c0, Max: 0xffffffff, ABSOLUTE) + + Exec Addr Load Addr Size Type Attr Idx E Section Name Object + + 0x00000000 0x00000000 0x00000140 Data RO 533 RESET startup_m451series.o + 0x00000140 0x00000140 0x00000008 Code RO 683 * !!!main c_w.l(__main.o) + 0x00000148 0x00000148 0x00000034 Code RO 851 !!!scatter c_w.l(__scatter.o) + 0x0000017c 0x0000017c 0x0000005a Code RO 849 !!dczerorl2 c_w.l(__dczerorl2.o) + 0x000001d6 0x000001d6 0x00000002 PAD + 0x000001d8 0x000001d8 0x0000001c Code RO 853 !!handler_zi c_w.l(__scatter_zi.o) + 0x000001f4 0x000001f4 0x00000000 Code RO 676 .ARM.Collect$$_printf_percent$$00000000 c_w.l(_printf_percent.o) + 0x000001f4 0x000001f4 0x00000006 Code RO 675 .ARM.Collect$$_printf_percent$$00000009 c_w.l(_printf_d.o) + 0x000001fa 0x000001fa 0x00000006 Code RO 674 .ARM.Collect$$_printf_percent$$0000000C c_w.l(_printf_x.o) + 0x00000200 0x00000200 0x00000004 Code RO 694 .ARM.Collect$$_printf_percent$$00000017 c_w.l(_printf_percent_end.o) + 0x00000204 0x00000204 0x00000002 Code RO 721 .ARM.Collect$$libinit$$00000000 c_w.l(libinit.o) + 0x00000206 0x00000206 0x00000004 Code RO 727 .ARM.Collect$$libinit$$00000001 c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 730 .ARM.Collect$$libinit$$00000004 c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 733 .ARM.Collect$$libinit$$0000000A c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 735 .ARM.Collect$$libinit$$0000000C c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 737 .ARM.Collect$$libinit$$0000000E c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 740 .ARM.Collect$$libinit$$00000011 c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 742 .ARM.Collect$$libinit$$00000013 c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 744 .ARM.Collect$$libinit$$00000015 c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 746 .ARM.Collect$$libinit$$00000017 c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 748 .ARM.Collect$$libinit$$00000019 c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 750 .ARM.Collect$$libinit$$0000001B c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 752 .ARM.Collect$$libinit$$0000001D c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 754 .ARM.Collect$$libinit$$0000001F c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 756 .ARM.Collect$$libinit$$00000021 c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 758 .ARM.Collect$$libinit$$00000023 c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 760 .ARM.Collect$$libinit$$00000025 c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 764 .ARM.Collect$$libinit$$0000002C c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 766 .ARM.Collect$$libinit$$0000002E c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 768 .ARM.Collect$$libinit$$00000030 c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000000 Code RO 770 .ARM.Collect$$libinit$$00000032 c_w.l(libinit2.o) + 0x0000020a 0x0000020a 0x00000002 Code RO 771 .ARM.Collect$$libinit$$00000033 c_w.l(libinit2.o) + 0x0000020c 0x0000020c 0x00000002 Code RO 791 .ARM.Collect$$libshutdown$$00000000 c_w.l(libshutdown.o) + 0x0000020e 0x0000020e 0x00000000 Code RO 804 .ARM.Collect$$libshutdown$$00000002 c_w.l(libshutdown2.o) + 0x0000020e 0x0000020e 0x00000000 Code RO 806 .ARM.Collect$$libshutdown$$00000004 c_w.l(libshutdown2.o) + 0x0000020e 0x0000020e 0x00000000 Code RO 809 .ARM.Collect$$libshutdown$$00000007 c_w.l(libshutdown2.o) + 0x0000020e 0x0000020e 0x00000000 Code RO 812 .ARM.Collect$$libshutdown$$0000000A c_w.l(libshutdown2.o) + 0x0000020e 0x0000020e 0x00000000 Code RO 814 .ARM.Collect$$libshutdown$$0000000C c_w.l(libshutdown2.o) + 0x0000020e 0x0000020e 0x00000000 Code RO 817 .ARM.Collect$$libshutdown$$0000000F c_w.l(libshutdown2.o) + 0x0000020e 0x0000020e 0x00000002 Code RO 818 .ARM.Collect$$libshutdown$$00000010 c_w.l(libshutdown2.o) + 0x00000210 0x00000210 0x00000000 Code RO 685 .ARM.Collect$$rtentry$$00000000 c_w.l(__rtentry.o) + 0x00000210 0x00000210 0x00000000 Code RO 696 .ARM.Collect$$rtentry$$00000002 c_w.l(__rtentry2.o) + 0x00000210 0x00000210 0x00000006 Code RO 708 .ARM.Collect$$rtentry$$00000004 c_w.l(__rtentry4.o) + 0x00000216 0x00000216 0x00000000 Code RO 698 .ARM.Collect$$rtentry$$00000009 c_w.l(__rtentry2.o) + 0x00000216 0x00000216 0x00000004 Code RO 699 .ARM.Collect$$rtentry$$0000000A c_w.l(__rtentry2.o) + 0x0000021a 0x0000021a 0x00000000 Code RO 701 .ARM.Collect$$rtentry$$0000000C c_w.l(__rtentry2.o) + 0x0000021a 0x0000021a 0x00000008 Code RO 702 .ARM.Collect$$rtentry$$0000000D c_w.l(__rtentry2.o) + 0x00000222 0x00000222 0x00000002 Code RO 725 .ARM.Collect$$rtexit$$00000000 c_w.l(rtexit.o) + 0x00000224 0x00000224 0x00000000 Code RO 773 .ARM.Collect$$rtexit$$00000002 c_w.l(rtexit2.o) + 0x00000224 0x00000224 0x00000004 Code RO 774 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o) + 0x00000228 0x00000228 0x00000006 Code RO 775 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o) + 0x0000022e 0x0000022e 0x00000002 PAD + 0x00000230 0x00000230 0x0000001c Code RO 497 .emb_text retarget.o + 0x0000024c 0x0000024c 0x0000046c Code RO 4 .text main.o + 0x000006b8 0x000006b8 0x00000288 Code RO 142 .text ssd1306.o + 0x00000940 0x00000940 0x000004a2 Code RO 335 .text clk.o + 0x00000de2 0x00000de2 0x00000002 PAD + 0x00000de4 0x00000de4 0x0000008c Code RO 363 .text eadc.o + 0x00000e70 0x00000e70 0x0000009c Code RO 437 .text sys.o + 0x00000f0c 0x00000f0c 0x00000390 Code RO 461 .text uart.o + 0x0000129c 0x0000129c 0x00000128 Code RO 498 .text retarget.o + 0x000013c4 0x000013c4 0x00000074 Code RO 534 * .text startup_m451series.o + 0x00001438 0x00001438 0x000000e8 Code RO 541 .text system_m451series.o + 0x00001520 0x00001520 0x00000270 Code RO 574 .text i2c.o + 0x00001790 0x00001790 0x00000770 Code RO 598 .text pwm.o + 0x00001f00 0x00001f00 0x00000018 Code RO 625 .text c_w.l(noretval__2printf.o) + 0x00001f18 0x00001f18 0x00000028 Code RO 627 .text c_w.l(noretval__2sprintf.o) + 0x00001f40 0x00001f40 0x00000078 Code RO 631 .text c_w.l(_printf_dec.o) + 0x00001fb8 0x00001fb8 0x00000058 Code RO 636 .text c_w.l(_printf_hex_int.o) + 0x00002010 0x00002010 0x0000010e Code RO 662 .text c_w.l(__printf_wp.o) + 0x0000211e 0x0000211e 0x0000003e Code RO 677 .text c_w.l(strlen.o) + 0x0000215c 0x0000215c 0x0000004e Code RO 679 .text c_w.l(rt_memclr_w.o) + 0x000021aa 0x000021aa 0x00000006 Code RO 681 .text c_w.l(heapauxi.o) + 0x000021b0 0x000021b0 0x000000b2 Code RO 686 .text c_w.l(_printf_intcommon.o) + 0x00002262 0x00002262 0x00000002 PAD + 0x00002264 0x00002264 0x00000030 Code RO 688 .text c_w.l(_printf_char_common.o) + 0x00002294 0x00002294 0x0000000a Code RO 690 .text c_w.l(_sputc.o) + 0x0000229e 0x0000229e 0x00000002 PAD + 0x000022a0 0x000022a0 0x00000024 Code RO 692 .text c_w.l(_printf_char_file.o) + 0x000022c4 0x000022c4 0x0000004a Code RO 712 .text c_w.l(sys_stackheap_outer.o) + 0x0000230e 0x0000230e 0x00000012 Code RO 714 .text c_w.l(exit.o) + 0x00002320 0x00002320 0x00000008 Code RO 722 .text c_w.l(libspace.o) + 0x00002328 0x00002328 0x0000000c Code RO 783 .text c_w.l(sys_exit.o) + 0x00002334 0x00002334 0x00000002 Code RO 794 .text c_w.l(use_no_semi.o) + 0x00002336 0x00002336 0x00000000 Code RO 796 .text c_w.l(indicate_semi.o) + 0x00002336 0x00002336 0x0000000e Code RO 664 i._is_digit c_w.l(__printf_wp.o) + 0x00002344 0x00002344 0x0000000a Code RO 781 x$fpl$fpinit fz_wm.l(fpinit.o) + 0x0000234e 0x0000234e 0x00000002 PAD + 0x00002350 0x00002350 0x00000030 Data RO 462 .constdata uart.o + 0x00002380 0x00002380 0x00000028 Data RO 637 .constdata c_w.l(_printf_hex_int.o) + 0x000023a8 0x000023a8 0x000000f6 Data RO 6 .conststring main.o + 0x0000249e 0x0000249e 0x00000002 PAD + 0x000024a0 0x000024a0 0x00000020 Data RO 847 Region$$Table anon$$obj.o + + + Execution Region ER_RW (Exec base: 0x20000000, Load base: 0x000024c0, Size: 0x00000634, Max: 0xffffffff, ABSOLUTE, COMPRESSED[0x00000388]) + + Exec Addr Load Addr Size Type Attr Idx E Section Name Object + + 0x20000000 COMPRESSED 0x00000014 Data RW 7 .data main.o + 0x20000014 COMPRESSED 0x000005f0 Data RW 145 .data ssd1306.o + 0x20000604 COMPRESSED 0x00000004 Data RW 499 .data retarget.o + 0x20000608 COMPRESSED 0x0000002c Data RW 542 .data system_m451series.o + + + Execution Region ER_ZI (Exec base: 0x20000634, Load base: 0x00002848, Size: 0x00000464, Max: 0xffffffff, ABSOLUTE) + + Exec Addr Load Addr Size Type Attr Idx E Section Name Object + + 0x20000634 - 0x00000060 Zero RW 723 .bss c_w.l(libspace.o) + 0x20000694 0x00002848 0x00000004 PAD + 0x20000698 - 0x00000000 Zero RW 532 HEAP startup_m451series.o + 0x20000698 - 0x00000400 Zero RW 531 STACK startup_m451series.o + + +============================================================================== + +Image component sizes + + + Code (inc. data) RO Data RW Data ZI Data Debug Object Name + + 0 0 0 0 0 201740 can.o + 1186 90 0 0 0 21331 clk.o + 140 8 0 0 0 2520 eadc.o + 624 14 0 0 0 6870 i2c.o + 1132 178 246 20 0 37894 main.o + 1904 28 0 0 0 17731 pwm.o + 324 128 0 4 0 4889 retarget.o + 648 10 0 1520 0 210301 ssd1306.o + 116 36 320 0 1024 924 startup_m451series.o + 156 0 0 0 0 2026 sys.o + 232 24 0 44 0 32333 system_m451series.o + 912 42 48 0 0 36556 uart.o + + ---------------------------------------------------------------------- + 7376 558 648 1588 1024 575115 Object Totals + 0 0 32 0 0 0 (incl. Generated) + 2 0 2 0 0 0 (incl. Padding) + + ---------------------------------------------------------------------- + + Code (inc. data) RO Data RW Data ZI Data Debug Library Member Name + + 90 0 0 0 0 0 __dczerorl2.o + 8 0 0 0 0 68 __main.o + 284 0 0 0 0 156 __printf_wp.o + 0 0 0 0 0 0 __rtentry.o + 12 0 0 0 0 0 __rtentry2.o + 6 0 0 0 0 0 __rtentry4.o + 52 8 0 0 0 0 __scatter.o + 28 0 0 0 0 0 __scatter_zi.o + 48 6 0 0 0 96 _printf_char_common.o + 36 4 0 0 0 80 _printf_char_file.o + 6 0 0 0 0 0 _printf_d.o + 120 16 0 0 0 92 _printf_dec.o + 88 4 40 0 0 88 _printf_hex_int.o + 178 0 0 0 0 88 _printf_intcommon.o + 0 0 0 0 0 0 _printf_percent.o + 4 0 0 0 0 0 _printf_percent_end.o + 6 0 0 0 0 0 _printf_x.o + 10 0 0 0 0 68 _sputc.o + 18 0 0 0 0 80 exit.o + 6 0 0 0 0 152 heapauxi.o + 0 0 0 0 0 0 indicate_semi.o + 2 0 0 0 0 0 libinit.o + 6 0 0 0 0 0 libinit2.o + 2 0 0 0 0 0 libshutdown.o + 2 0 0 0 0 0 libshutdown2.o + 8 4 0 0 96 68 libspace.o + 24 4 0 0 0 84 noretval__2printf.o + 40 6 0 0 0 84 noretval__2sprintf.o + 78 0 0 0 0 80 rt_memclr_w.o + 2 0 0 0 0 0 rtexit.o + 10 0 0 0 0 0 rtexit2.o + 62 0 0 0 0 76 strlen.o + 12 4 0 0 0 68 sys_exit.o + 74 0 0 0 0 80 sys_stackheap_outer.o + 2 0 0 0 0 68 use_no_semi.o + 10 0 0 0 0 116 fpinit.o + + ---------------------------------------------------------------------- + 1344 56 40 0 100 1692 Library Totals + 10 0 0 0 4 0 (incl. Padding) + + ---------------------------------------------------------------------- + + Code (inc. data) RO Data RW Data ZI Data Debug Library Name + + 1324 56 40 0 96 1576 c_w.l + 10 0 0 0 0 116 fz_wm.l + + ---------------------------------------------------------------------- + 1344 56 40 0 100 1692 Library Totals + + ---------------------------------------------------------------------- + +============================================================================== + + + Code (inc. data) RO Data RW Data ZI Data Debug + + 8720 614 688 1588 1124 572727 Grand Totals + 8720 614 688 904 1124 572727 ELF Image Totals (compressed) + 8720 614 688 904 0 0 ROM Totals + +============================================================================== + + Total RO Size (Code + RO Data) 9408 ( 9.19kB) + Total RW Size (RW Data + ZI Data) 2712 ( 2.65kB) + Total ROM Size (Code + RO Data + RW Data) 10312 ( 10.07kB) + +============================================================================== + diff --git a/stepper/Objects/stepper.axf b/stepper/Objects/stepper.axf new file mode 100644 index 0000000000000000000000000000000000000000..ab32a00b8c302585a5b605148a836daf739a91ee GIT binary patch literal 619268 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

I@CyIY(t=-4W>U%1GG-@y~iq4;B^k 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 ay5Ewq^kH}(1LpbOk((_pGKuhO()~9UUiv%$ literal 0 HcmV?d00001 diff --git a/stepper/Objects/stepper.lnp b/stepper/Objects/stepper.lnp new file mode 100644 index 0000000..39273a4 --- /dev/null +++ b/stepper/Objects/stepper.lnp @@ -0,0 +1,18 @@ +--cpu=Cortex-M4.fp +".\objects\main.o" +".\objects\ssd1306.o" +".\objects\can.o" +".\objects\clk.o" +".\objects\eadc.o" +".\objects\gpio.o" +".\objects\sc.o" +".\objects\sys.o" +".\objects\uart.o" +".\objects\retarget.o" +".\objects\startup_m451series.o" +".\objects\system_m451series.o" +".\objects\i2c.o" +".\objects\pwm.o" +--ro-base 0x00000000 --entry 0x00000000 --rw-base 0x20000000 --entry Reset_Handler --first __Vectors --strict --summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols +--info sizes --info totals --info unused --info veneers +--list ".\Listings\stepper.map" -o .\Objects\stepper.axf \ No newline at end of file diff --git a/stepper/RTE/Device/M451MRE6AE/retarget.c b/stepper/RTE/Device/M451MRE6AE/retarget.c new file mode 100644 index 0000000..391adfb --- /dev/null +++ b/stepper/RTE/Device/M451MRE6AE/retarget.c @@ -0,0 +1,679 @@ +/**************************************************************************//** + * @file retarget.c + * @version V3.00 + * $Revision: 13 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 Series Debug Port and Semihost Setting Source File + * + * @note + * Copyright (C) 2011~2015 Nuvoton Technology Corp. All rights reserved. + * + ******************************************************************************/ + + +#include +#include "M451Series.h" + +#define DEBUG_ENABLE_SEMIHOST true +#if defined ( __CC_ARM ) +#if (__ARMCC_VERSION < 400000) +#else +/* Insist on keeping widthprec, to avoid X propagation by benign code in C-lib */ +#pragma import _printf_widthprec +#endif +#endif + +/*---------------------------------------------------------------------------------------------------------*/ +/* Global variables */ +/*---------------------------------------------------------------------------------------------------------*/ +#if !(defined(__ICCARM__) && (__VER__ >= 6010000)) +struct __FILE +{ + int handle; /* Add whatever you need here */ +}; +#endif +FILE __stdout; +FILE __stdin; + +enum { r0, r1, r2, r3, r12, lr, pc, psr}; + +/** + * @brief Helper function to dump register while hard fault occurred + * @param[in] stack pointer points to the dumped registers in SRAM + * @return None + * @details This function is implement to print r0, r1, r2, r3, r12, lr, pc, psr + */ +static void stackDump(uint32_t stack[]) +{ + printf("r0 = 0x%x\n", stack[r0]); + printf("r1 = 0x%x\n", stack[r1]); + printf("r2 = 0x%x\n", stack[r2]); + printf("r3 = 0x%x\n", stack[r3]); + printf("r12 = 0x%x\n", stack[r12]); + printf("lr = 0x%x\n", stack[lr]); + printf("pc = 0x%x\n", stack[pc]); + printf("psr = 0x%x\n", stack[psr]); +} + +/** + * @brief Hard fault handler + * @param[in] stack pointer points to the dumped registers in SRAM + * @return None + * @details Replace while(1) at the end of this function with chip reset if WDT is not enabled for end product + */ +void Hard_Fault_Handler(uint32_t stack[]) +{ + printf("In Hard Fault Handler\n"); + + stackDump(stack); + // Replace while(1) with chip reset if WDT is not enabled for end product + while(1); + //SYS->IPRST0 = SYS_IPRST0_CHIPRST_Msk; +} + + + +/*---------------------------------------------------------------------------------------------------------*/ +/* Routine to write a char */ +/*---------------------------------------------------------------------------------------------------------*/ + +#if defined(DEBUG_ENABLE_SEMIHOST) +/* The static buffer is used to speed up the semihost */ +static char g_buf[16]; +static char g_buf_len = 0; + +# if defined(__ICCARM__) + +void SH_End(void) +{ + asm("MOVS R0,#1 \n" //; Set return value to 1 + "BX lr \n" //; Return + ); +} + +void SH_ICE(void) +{ + asm("CMP R2,#0 \n" + "BEQ SH_End \n" + "STR R0,[R2] \n" //; Save the return value to *pn32Out_R0 + ); +} + +/** + * + * @brief The function to process semihosted command + * @param[in] n32In_R0 : semihost register 0 + * @param[in] n32In_R1 : semihost register 1 + * @param[out] pn32Out_R0: semihost register 0 + * @retval 0: No ICE debug + * @retval 1: ICE debug + * + */ +int32_t SH_DoCommand(int32_t n32In_R0, int32_t n32In_R1, int32_t *pn32Out_R0) +{ + asm("BKPT 0xAB \n" //; This instruction will cause ICE trap or system HardFault + "B SH_ICE \n" + "SH_HardFault: \n" //; Captured by HardFault + "MOVS R0,#0 \n" //; Set return value to 0 + "BX lr \n" //; Return + ); + + return 1; //; Return 1 when it is trap by ICE +} + +/** + * @brief Get LR value and branch to Hard_Fault_Handler function + * @param None + * @return None + * @details This function is use to get LR value and branch to Hard_Fault_Handler function. + */ +void Get_LR_and_Branch(void) +{ + asm("MOV R1, LR \n" //; LR current value + "B Hard_Fault_Handler \n" + ); +} + +/** + * @brief Get MSP value and branch to Get_LR_and_Branch function + * @param None + * @return None + * @details This function is use to get stack pointer value and branch to Get_LR_and_Branch function. + */ +void Stack_Use_MSP(void) +{ + asm("MRS R0, MSP \n" //; read MSP + "B Get_LR_and_Branch \n" + ); +} + +/** + * @brief Get stack pointer value and branch to Get_LR_and_Branch function + * @param None + * @return None + * @details This function is use to get stack pointer value and branch to Get_LR_and_Branch function. + */ +void HardFault_Handler_Ret(void) +{ + asm("MOVS r0, #4 \n" + "MOV r1, LR \n" + "TST r0, r1 \n" //; check LR bit 2 + "BEQ Stack_Use_MSP \n" //; stack use MSP + "MRS R0, PSP \n" //; stack use PSP, read PSP + "B Get_LR_and_Branch \n" + ); +} + +/** + * @brief This function is implemented to support semihost + * @param None + * @returns None + * @details This function is implement to support semihost message print. + * + */ +void SP_Read_Ready(void) +{ + asm("LDR R1, [R0, #24] \n" //; Get previous PC + "LDRH R3, [R1] \n" //; Get instruction + "LDR R2, [pc, #8] \n" //; The special BKPT instruction + "CMP R3, R2 \n" //; Test if the instruction at previous PC is BKPT + "BNE HardFault_Handler_Ret \n" //; Not BKPT + "ADDS R1, #4 \n" //; Skip BKPT and next line + "STR R1, [R0, #24] \n" //; Save previous PC + "BX lr \n" //; Return + "DCD 0xBEAB \n" //; BKPT instruction code + "B HardFault_Handler_Ret \n" + ); +} + +/** + * @brief Get stack pointer value and branch to Get_LR_and_Branch function + * @param None + * @return None + * @details This function is use to get stack pointer value and branch to Get_LR_and_Branch function. + */ +void SP_is_PSP(void) +{ + asm( + "MRS R0, PSP \n" //; stack use PSP, read PSP + "B Get_LR_and_Branch \n" + + ); +} + +/** + * @brief This HardFault handler is implemented to support semihost + * + * @param None + * + * @returns None + * + * @details This function is implement to support semihost message print. + * + */ +void HardFault_Handler (void) +{ + asm("MOV R0, lr \n" + "LSLS R0, #29 \n" //; Check bit 2 + "BMI SP_is_PSP \n" //; previous stack is PSP + "MRS R0, MSP \n" //; previous stack is MSP, read MSP + "B SP_Read_Ready \n" + ); + + while(1); +} + +# else + +/** + * @brief This HardFault handler is implemented to support semihost + * @param None + * @returns None + * @details This function is implement to support semihost message print. + * + */ +__asm int32_t HardFault_Handler(void) +{ + MOV R0, LR + LSLS R0, #29 //; Check bit 2 + BMI SP_is_PSP //; previous stack is PSP + MRS R0, MSP //; previous stack is MSP, read MSP + B SP_Read_Ready +SP_is_PSP + MRS R0, PSP //; Read PSP + +SP_Read_Ready + LDR R1, [R0, #24] //; Get previous PC + LDRH R3, [R1] //; Get instruction + LDR R2, =0xBEAB //; The special BKPT instruction + CMP R3, R2 //; Test if the instruction at previous PC is BKPT + BNE HardFault_Handler_Ret //; Not BKPT + + ADDS R1, #4 //; Skip BKPT and next line + STR R1, [R0, #24] //; Save previous PC + + BX LR //; Return +HardFault_Handler_Ret + + /* TODO: Implement your own hard fault handler here. */ + MOVS r0, #4 + MOV r1, LR + TST r0, r1 //; check LR bit 2 + BEQ Stack_Use_MSP //; stack use MSP + MRS R0, PSP ;stack use PSP //; stack use PSP, read PSP + B Get_LR_and_Branch +Stack_Use_MSP + MRS R0, MSP ; stack use MSP //; read MSP +Get_LR_and_Branch + MOV R1, LR ; LR current value //; LR current value + LDR R2,=__cpp(Hard_Fault_Handler) //; branch to Hard_Fault_Handler + BX R2 + + B . + + ALIGN +} + +/** + * + * @brief The function to process semihosted command + * @param[in] n32In_R0 : semihost register 0 + * @param[in] n32In_R1 : semihost register 1 + * @param[out] pn32Out_R0: semihost register 0 + * @retval 0: No ICE debug + * @retval 1: ICE debug + * + */ +__asm int32_t SH_DoCommand(int32_t n32In_R0, int32_t n32In_R1, int32_t *pn32Out_R0) +{ + BKPT 0xAB //; Wait ICE or HardFault + //; ICE will step over BKPT directly + //; HardFault will step BKPT and the next line + B SH_ICE + +SH_HardFault //; Captured by HardFault + MOVS R0, #0 //; Set return value to 0 + BX lr //; Return + +SH_ICE //; Captured by ICE + //; Save return value + CMP R2, #0 + BEQ SH_End + STR R0, [R2] //; Save the return value to *pn32Out_R0 + +SH_End + MOVS R0, #1 //; Set return value to 1 + BX lr //; Return +} +#endif + +#else + +# if defined(__ICCARM__) + +void Get_LR_and_Branch(void) +{ + asm("MOV R1, LR \n" //; LR current value + "B Hard_Fault_Handler \n" + ); +} + +void Stack_Use_MSP(void) +{ + asm("MRS R0, MSP \n" //; read MSP + "B Get_LR_and_Branch \n" + ); +} + +/** + * @brief This HardFault handler is implemented to show r0, r1, r2, r3, r12, lr, pc, psr + * + * @param None + * + * @returns None + * + * @details This function is implement to print r0, r1, r2, r3, r12, lr, pc, psr. + * + */ +void HardFault_Handler(void) +{ + asm("MOVS r0, #4 \n" + "MOV r1, LR \n" + "TST r0, r1 \n" //; check LR bit 2 + "BEQ Stack_Use_MSP \n" //; stack use MSP + "MRS R0, PSP \n" //; stack use PSP, read PSP + "B Get_LR_and_Branch \n" + ); + + while(1); +} + +# else + +/** + * @brief This HardFault handler is implemented to show r0, r1, r2, r3, r12, lr, pc, psr + * + * @param None + * + * @return None + * + * @details The function extracts the location of stack frame and passes it to Hard_Fault_Handler function as a pointer + * + */ +__asm int32_t HardFault_Handler(void) +{ + MOVS r0, #4 + MOV r1, LR + TST r0, r1 //; check LR bit 2 + BEQ Stack_Use_MSP //; stack use MSP + MRS R0, PSP //; stack use PSP, read PSP + B Get_LR_and_Branch +Stack_Use_MSP + MRS R0, MSP //; read MSP +Get_LR_and_Branch + MOV R1, LR //; LR current value + LDR R2,=__cpp(Hard_Fault_Handler) //; branch to Hard_Fault_Handler + BX R2 +} + +#endif + +#endif + + +/** + * @brief Routine to send a char + * + * @param[in] ch Character to send to debug port. + * + * @returns Send value from UART debug port + * + * @details Send a target char to UART debug port . + */ +#ifndef NONBLOCK_PRINTF +void SendChar_ToUART(int ch) +{ + while(DEBUG_PORT->FIFOSTS & UART_FIFOSTS_TXFULL_Msk); + + DEBUG_PORT->DAT = ch; + if(ch == '\n') + { + while(DEBUG_PORT->FIFOSTS & UART_FIFOSTS_TXFULL_Msk); + DEBUG_PORT->DAT = '\r'; + } +} + +#else +/* Non-block implement of send char */ +#define BUF_SIZE 2048 +void SendChar_ToUART(int ch) +{ + static uint8_t u8Buf[BUF_SIZE] = {0}; + static int32_t i32Head = 0; + static int32_t i32Tail = 0; + int32_t i32Tmp; + + /* Only flush the data in buffer to UART when ch == 0 */ + if(ch) + { + // Push char + i32Tmp = i32Head+1; + if(i32Tmp > BUF_SIZE) i32Tmp = 0; + if(i32Tmp != i32Tail) + { + u8Buf[i32Head] = ch; + i32Head = i32Tmp; + } + + if(ch == '\n') + { + i32Tmp = i32Head+1; + if(i32Tmp > BUF_SIZE) i32Tmp = 0; + if(i32Tmp != i32Tail) + { + u8Buf[i32Head] = '\r'; + i32Head = i32Tmp; + } + } + } + else + { + if(i32Tail == i32Head) + return; + } + + // pop char + do + { + i32Tmp = i32Tail + 1; + if(i32Tmp > BUF_SIZE) i32Tmp = 0; + + if((DEBUG_PORT->FIFOSTS & UART_FIFOSTS_TXFULL_Msk) == 0) + { + DEBUG_PORT->DAT = u8Buf[i32Tail]; + i32Tail = i32Tmp; + } + else + break; // FIFO full + }while(i32Tail != i32Head); +} +#endif + +/** + * @brief Routine to send a char + * + * @param[in] ch Character to send to debug port. + * + * @returns Send value from UART debug port or semihost + * + * @details Send a target char to UART debug port or semihost. + */ +void SendChar(int ch) +{ +#if defined(DEBUG_ENABLE_SEMIHOST) + g_buf[g_buf_len++] = ch; + g_buf[g_buf_len] = '\0'; + if(g_buf_len + 1 >= sizeof(g_buf) || ch == '\n' || ch == '\0') + { + /* Send the char */ + if(SH_DoCommand(0x04, (int)g_buf, NULL) != 0) + { + g_buf_len = 0; + return; + } + else + { + int i; + + for(i = 0; i < g_buf_len; i++) + SendChar_ToUART(g_buf[i]); + g_buf_len = 0; + } + } +#else + SendChar_ToUART(ch); +#endif +} + +/** + * @brief Routine to get a char + * + * @param None + * + * @returns Get value from UART debug port or semihost + * + * @details Wait UART debug port or semihost to input a char. + */ +char GetChar(void) +{ +#ifdef DEBUG_ENABLE_SEMIHOST +# if defined (__CC_ARM) + int nRet; + while(SH_DoCommand(0x101, 0, &nRet) != 0) + { + if(nRet != 0) + { + SH_DoCommand(0x07, 0, &nRet); + return (char)nRet; + } + } +# else + int nRet; + while(SH_DoCommand(0x7, 0, &nRet) != 0) + { + if(nRet != 0) + return (char)nRet; + } +# endif + return (0); +#else + + while(1) + { + if((DEBUG_PORT->FIFOSTS & UART_FIFOSTS_RXEMPTY_Msk) == 0) + { + return (DEBUG_PORT->DAT); + } + } + +#endif +} + +/** + * @brief Check any char input from UART + * + * @param None + * + * @retval 1: No any char input + * @retval 0: Have some char input + * + * @details Check UART RSR RX EMPTY or not to determine if any char input from UART + */ + +int kbhit(void) +{ + return !((DEBUG_PORT->FIFOSTS & UART_FIFOSTS_RXEMPTY_Msk) == 0); +} +/** + * @brief Check if debug message finished + * + * @param None + * + * @retval 1: Message is finished + * @retval 0: Message is transmitting. + * + * @details Check if message finished (FIFO empty of debug port) + */ + +int IsDebugFifoEmpty(void) +{ + return ((DEBUG_PORT->FIFOSTS & UART_FIFOSTS_TXEMPTYF_Msk) != 0); +} + +/** + * @brief C library retargetting + * + * @param[in] ch Character to send to debug port. + * + * @returns None + * + * @details Check if message finished (FIFO empty of debug port) + */ + +void _ttywrch(int ch) +{ + SendChar(ch); + return; +} + + +/** + * @brief Write character to stream + * + * @param[in] ch Character to be written. The character is passed as its int promotion. + * @param[in] stream Pointer to a FILE object that identifies the stream where the character is to be written. + * + * @returns If there are no errors, the same character that has been written is returned. + * If an error occurs, EOF is returned and the error indicator is set (see ferror). + * + * @details Writes a character to the stream and advances the position indicator.\n + * The character is written at the current position of the stream as indicated \n + * by the internal position indicator, which is then advanced one character. + * + * @note The above descriptions are copied from http://www.cplusplus.com/reference/clibrary/cstdio/fputc/. + * + * + */ + +int fputc(int ch, FILE *stream) +{ + SendChar(ch); + return ch; +} + + +/** + * @brief Get character from UART debug port or semihosting input + * + * @param[in] stream Pointer to a FILE object that identifies the stream on which the operation is to be performed. + * + * @returns The character read from UART debug port or semihosting + * + * @details For get message from debug port or semihosting. + * + */ + +int fgetc(FILE *stream) +{ + return (GetChar()); +} + +/** + * @brief Check error indicator + * + * @param[in] stream Pointer to a FILE object that identifies the stream. + * + * @returns If the error indicator associated with the stream was set, the function returns a nonzero value. + * Otherwise, it returns a zero value. + * + * @details Checks if the error indicator associated with stream is set, returning a value different + * from zero if it is. This indicator is generally set by a previous operation on the stream that failed. + * + * @note The above descriptions are copied from http://www.cplusplus.com/reference/clibrary/cstdio/ferror/. + * + */ + +int ferror(FILE *stream) +{ + return EOF; +} + +#ifdef DEBUG_ENABLE_SEMIHOST +# ifdef __ICCARM__ +void __exit(int return_code) +{ + + /* Check if link with ICE */ + if(SH_DoCommand(0x18, 0x20026, NULL) == 0) + { + /* Make sure all message is print out */ + while(IsDebugFifoEmpty() == 0); + } +label: + goto label; /* endless loop */ +} +# else +void _sys_exit(int return_code) +{ + + /* Check if link with ICE */ + if(SH_DoCommand(0x18, 0x20026, NULL) == 0) + { + /* Make sure all message is print out */ + while(IsDebugFifoEmpty() == 0); + } +label: + goto label; /* endless loop */ +} +# endif +#endif diff --git a/stepper/RTE/Device/M451MRE6AE/startup_M451Series.s b/stepper/RTE/Device/M451MRE6AE/startup_M451Series.s new file mode 100644 index 0000000..c083f20 --- /dev/null +++ b/stepper/RTE/Device/M451MRE6AE/startup_M451Series.s @@ -0,0 +1,376 @@ +;/****************************************************************************** +; * @file startup_M451Series.s +; * @version V0.10 +; * $Revision: 5 $ +; * $Date: 14/12/24 10:20a $ +; * @brief CMSIS Cortex-M4 Core Device Startup File for M451 Series MCU +; * +; * @note +; * Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved. +;*****************************************************************************/ +;/* +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ +;*/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + + ; User may overwrite stack size setting by pre-defined symbol + IF :LNOT: :DEF: Stack_Size +Stack_Size EQU 0x00000400 + ENDIF + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + + IF :LNOT: :DEF: Heap_Size +Heap_Size EQU 0x00000000 + ENDIF + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD BOD_IRQHandler ; 0: Brown Out detection + DCD IRC_IRQHandler ; 1: Internal RC + DCD PWRWU_IRQHandler ; 2: Power down wake up + DCD RAMPE_IRQHandler ; 3: RAM parity error + DCD CLKFAIL_IRQHandler ; 4: Clock detection fail + DCD Default_Handler ; 5: Reserved + DCD RTC_IRQHandler ; 6: Real Time Clock + DCD TAMPER_IRQHandler ; 7: Tamper detection + DCD WDT_IRQHandler ; 8: Watchdog timer + DCD WWDT_IRQHandler ; 9: Window watchdog timer + DCD EINT0_IRQHandler ; 10: External Input 0 + DCD EINT1_IRQHandler ; 11: External Input 1 + DCD EINT2_IRQHandler ; 12: External Input 2 + DCD EINT3_IRQHandler ; 13: External Input 3 + DCD EINT4_IRQHandler ; 14: External Input 4 + DCD EINT5_IRQHandler ; 15: External Input 5 + DCD GPA_IRQHandler ; 16: GPIO Port A + DCD GPB_IRQHandler ; 17: GPIO Port B + DCD GPC_IRQHandler ; 18: GPIO Port C + DCD GPD_IRQHandler ; 19: GPIO Port D + DCD GPE_IRQHandler ; 20: GPIO Port E + DCD GPF_IRQHandler ; 21: GPIO Port F + DCD SPI0_IRQHandler ; 22: SPI0 + DCD SPI1_IRQHandler ; 23: SPI1 + DCD BRAKE0_IRQHandler ; 24: + DCD PWM0P0_IRQHandler ; 25: + DCD PWM0P1_IRQHandler ; 26: + DCD PWM0P2_IRQHandler ; 27: + DCD BRAKE1_IRQHandler ; 28: + DCD PWM1P0_IRQHandler ; 29: + DCD PWM1P1_IRQHandler ; 30: + DCD PWM1P2_IRQHandler ; 31: + DCD TMR0_IRQHandler ; 32: Timer 0 + DCD TMR1_IRQHandler ; 33: Timer 1 + DCD TMR2_IRQHandler ; 34: Timer 2 + DCD TMR3_IRQHandler ; 35: Timer 3 + DCD UART0_IRQHandler ; 36: UART0 + DCD UART1_IRQHandler ; 37: UART1 + DCD I2C0_IRQHandler ; 38: I2C0 + DCD I2C1_IRQHandler ; 39: I2C1 + DCD PDMA_IRQHandler ; 40: Peripheral DMA + DCD DAC_IRQHandler ; 41: DAC + DCD ADC00_IRQHandler ; 42: ADC0 interrupt source 0 + DCD ADC01_IRQHandler ; 43: ADC0 interrupt source 1 + DCD ACMP01_IRQHandler ; 44: ACMP0 and ACMP1 + DCD Default_Handler ; 45: Reserved + DCD ADC02_IRQHandler ; 46: ADC0 interrupt source 2 + DCD ADC03_IRQHandler ; 47: ADC0 interrupt source 3 + DCD UART2_IRQHandler ; 48: UART2 + DCD UART3_IRQHandler ; 49: UART3 + DCD Default_Handler ; 50: Reserved + DCD SPI2_IRQHandler ; 51: SPI2 + DCD Default_Handler ; 52: Reserved + DCD USBD_IRQHandler ; 53: USB device + DCD USBH_IRQHandler ; 54: USB host + DCD USBOTG_IRQHandler ; 55: USB OTG + DCD CAN0_IRQHandler ; 56: CAN0 + DCD Default_Handler ; 57: Reserved + DCD SC0_IRQHandler ; 58: + DCD Default_Handler ; 59: Reserved. + DCD Default_Handler ; 60: + DCD Default_Handler ; 61: + DCD Default_Handler ; 62: + DCD TK_IRQHandler ; 63: + +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =0x40000100 + ; Unlock Register + LDR R1, =0x59 + STR R1, [R0] + LDR R1, =0x16 + STR R1, [R0] + LDR R1, =0x88 + STR R1, [R0] + + ; Init POR + LDR R2, =0x40000024 + LDR R1, =0x00005AA5 + STR R1, [R2] + + ; Select INV Type + LDR R2, =0x40000200 + LDR R1, [R2] + BIC R1, R1, #0x1000 + STR R1, [R2] + + ; Lock register + MOVS R1, #0 + STR R1, [R0] + + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler\ + PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler\ + PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT BOD_IRQHandler [WEAK] + EXPORT IRC_IRQHandler [WEAK] + EXPORT PWRWU_IRQHandler [WEAK] + EXPORT RAMPE_IRQHandler [WEAK] + EXPORT CLKFAIL_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT WDT_IRQHandler [WEAK] + EXPORT WWDT_IRQHandler [WEAK] + EXPORT EINT0_IRQHandler [WEAK] + EXPORT EINT1_IRQHandler [WEAK] + EXPORT EINT2_IRQHandler [WEAK] + EXPORT EINT3_IRQHandler [WEAK] + EXPORT EINT4_IRQHandler [WEAK] + EXPORT EINT5_IRQHandler [WEAK] + EXPORT GPA_IRQHandler [WEAK] + EXPORT GPB_IRQHandler [WEAK] + EXPORT GPC_IRQHandler [WEAK] + EXPORT GPD_IRQHandler [WEAK] + EXPORT GPE_IRQHandler [WEAK] + EXPORT GPF_IRQHandler [WEAK] + EXPORT SPI0_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT BRAKE0_IRQHandler [WEAK] + EXPORT PWM0P0_IRQHandler [WEAK] + EXPORT PWM0P1_IRQHandler [WEAK] + EXPORT PWM0P2_IRQHandler [WEAK] + EXPORT BRAKE1_IRQHandler [WEAK] + EXPORT PWM1P0_IRQHandler [WEAK] + EXPORT PWM1P1_IRQHandler [WEAK] + EXPORT PWM1P2_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT I2C0_IRQHandler [WEAK] + EXPORT I2C1_IRQHandler [WEAK] + EXPORT PDMA_IRQHandler [WEAK] + EXPORT DAC_IRQHandler [WEAK] + EXPORT ADC00_IRQHandler [WEAK] + EXPORT ADC01_IRQHandler [WEAK] + EXPORT ACMP01_IRQHandler [WEAK] + EXPORT ADC02_IRQHandler [WEAK] + EXPORT ADC03_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USBD_IRQHandler [WEAK] + EXPORT USBH_IRQHandler [WEAK] + EXPORT USBOTG_IRQHandler [WEAK] + EXPORT CAN0_IRQHandler [WEAK] + EXPORT SC0_IRQHandler [WEAK] + EXPORT TK_IRQHandler [WEAK] + +BOD_IRQHandler +IRC_IRQHandler +PWRWU_IRQHandler +RAMPE_IRQHandler +CLKFAIL_IRQHandler +RTC_IRQHandler +TAMPER_IRQHandler +WDT_IRQHandler +WWDT_IRQHandler +EINT0_IRQHandler +EINT1_IRQHandler +EINT2_IRQHandler +EINT3_IRQHandler +EINT4_IRQHandler +EINT5_IRQHandler +GPA_IRQHandler +GPB_IRQHandler +GPC_IRQHandler +GPD_IRQHandler +GPE_IRQHandler +GPF_IRQHandler +SPI0_IRQHandler +SPI1_IRQHandler +BRAKE0_IRQHandler +PWM0P0_IRQHandler +PWM0P1_IRQHandler +PWM0P2_IRQHandler +BRAKE1_IRQHandler +PWM1P0_IRQHandler +PWM1P1_IRQHandler +PWM1P2_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +I2C0_IRQHandler +I2C1_IRQHandler +PDMA_IRQHandler +DAC_IRQHandler +ADC00_IRQHandler +ADC01_IRQHandler +ACMP01_IRQHandler +ADC02_IRQHandler +ADC03_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +SPI2_IRQHandler +USBD_IRQHandler +USBH_IRQHandler +USBOTG_IRQHandler +CAN0_IRQHandler +SC0_IRQHandler +TK_IRQHandler + B . + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + + END +;/*** (C) COPYRIGHT 2014 Nuvoton Technology Corp. ***/ diff --git a/stepper/RTE/Device/M451MRE6AE/system_M451Series.c b/stepper/RTE/Device/M451MRE6AE/system_M451Series.c new file mode 100644 index 0000000..daf91b9 --- /dev/null +++ b/stepper/RTE/Device/M451MRE6AE/system_M451Series.c @@ -0,0 +1,109 @@ +/****************************************************************************** + * @file system_M451Series.c + * @version V0.10 + * $Revision: 11 $ + * $Date: 15/09/02 10:02a $ + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Source File for M451 Series MCU + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ + +#include "M451Series.h" + + +/*---------------------------------------------------------------------------- + DEFINES + *----------------------------------------------------------------------------*/ + + +/*---------------------------------------------------------------------------- + Clock Variable definitions + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = __SYSTEM_CLOCK; /*!< System Clock Frequency (Core Clock)*/ +uint32_t CyclesPerUs = (__HSI / 1000000); /* Cycles per micro second */ +uint32_t PllClock = __HSI; /*!< PLL Output Clock Frequency */ +uint32_t gau32ClkSrcTbl[] = {__HXT, __LXT, 0, __LIRC, 0, 0, 0, __HIRC}; + +/*---------------------------------------------------------------------------- + Clock functions + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate(void) /* Get Core Clock Frequency */ +{ +#if 1 + uint32_t u32Freq, u32ClkSrc; + uint32_t u32HclkDiv; + + /* Update PLL Clock */ + PllClock = CLK_GetPLLClockFreq(); + + u32ClkSrc = CLK->CLKSEL0 & CLK_CLKSEL0_HCLKSEL_Msk; + + if(u32ClkSrc == CLK_CLKSEL0_HCLKSEL_PLL) + { + /* Use PLL clock */ + u32Freq = PllClock; + } + else + { + /* Use the clock sources directly */ + u32Freq = gau32ClkSrcTbl[u32ClkSrc]; + } + + u32HclkDiv = (CLK->CLKDIV0 & CLK_CLKDIV0_HCLKDIV_Msk) + 1; + + /* Update System Core Clock */ + SystemCoreClock = u32Freq / u32HclkDiv; + + + //if(SystemCoreClock == 0) + // __BKPT(0); + + CyclesPerUs = (SystemCoreClock + 500000) / 1000000; +#endif +} + +/** + * Initialize the system + * + * @param None + * @return None + * + * @brief Setup the microcontroller system. + * Initialize the System. + */ +void SystemInit(void) +{ + /* ToDo: add code to initialize the system + do not use global variables because this function is called before + reaching pre-main. RW section maybe overwritten afterwards. */ + + SYS_UnlockReg(); + /* One-time POR18 */ + if((SYS->PDID >> 12) == 0x945) + { + M32(GCR_BASE+0x14) |= BIT7; + } + /* Force to use INV type with HXT */ + CLK->PWRCTL &= ~CLK_PWRCTL_HXTSELTYP_Msk; + SYS_LockReg(); + + +#ifdef EBI_INIT + extern void SYS_Init(); + extern void EBI_Init(); + + SYS_UnlockReg(); + SYS_Init(); + EBI_Init(); + SYS_LockReg(); +#endif + + /* FPU settings ------------------------------------------------------------*/ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10 * 2) | /* set CP10 Full Access */ + (3UL << 11 * 2)); /* set CP11 Full Access */ +#endif + +} +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/stepper/RTE/Device/M453VG6AE/retarget.c b/stepper/RTE/Device/M453VG6AE/retarget.c new file mode 100644 index 0000000..3aeb8aa --- /dev/null +++ b/stepper/RTE/Device/M453VG6AE/retarget.c @@ -0,0 +1,678 @@ +/**************************************************************************//** + * @file retarget.c + * @version V3.00 + * $Revision: 13 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 Series Debug Port and Semihost Setting Source File + * + * @note + * Copyright (C) 2011~2015 Nuvoton Technology Corp. All rights reserved. + * + ******************************************************************************/ + + +#include +#include "M451Series.h" + +#if defined ( __CC_ARM ) +#if (__ARMCC_VERSION < 400000) +#else +/* Insist on keeping widthprec, to avoid X propagation by benign code in C-lib */ +#pragma import _printf_widthprec +#endif +#endif + +/*---------------------------------------------------------------------------------------------------------*/ +/* Global variables */ +/*---------------------------------------------------------------------------------------------------------*/ +#if !(defined(__ICCARM__) && (__VER__ >= 6010000)) +struct __FILE +{ + int handle; /* Add whatever you need here */ +}; +#endif +FILE __stdout; +FILE __stdin; + +enum { r0, r1, r2, r3, r12, lr, pc, psr}; + +/** + * @brief Helper function to dump register while hard fault occurred + * @param[in] stack pointer points to the dumped registers in SRAM + * @return None + * @details This function is implement to print r0, r1, r2, r3, r12, lr, pc, psr + */ +static void stackDump(uint32_t stack[]) +{ + printf("r0 = 0x%x\n", stack[r0]); + printf("r1 = 0x%x\n", stack[r1]); + printf("r2 = 0x%x\n", stack[r2]); + printf("r3 = 0x%x\n", stack[r3]); + printf("r12 = 0x%x\n", stack[r12]); + printf("lr = 0x%x\n", stack[lr]); + printf("pc = 0x%x\n", stack[pc]); + printf("psr = 0x%x\n", stack[psr]); +} + +/** + * @brief Hard fault handler + * @param[in] stack pointer points to the dumped registers in SRAM + * @return None + * @details Replace while(1) at the end of this function with chip reset if WDT is not enabled for end product + */ +void Hard_Fault_Handler(uint32_t stack[]) +{ + printf("In Hard Fault Handler\n"); + + stackDump(stack); + // Replace while(1) with chip reset if WDT is not enabled for end product + while(1); + //SYS->IPRST0 = SYS_IPRST0_CHIPRST_Msk; +} + + + +/*---------------------------------------------------------------------------------------------------------*/ +/* Routine to write a char */ +/*---------------------------------------------------------------------------------------------------------*/ + +#if defined(DEBUG_ENABLE_SEMIHOST) +/* The static buffer is used to speed up the semihost */ +static char g_buf[16]; +static char g_buf_len = 0; + +# if defined(__ICCARM__) + +void SH_End(void) +{ + asm("MOVS R0,#1 \n" //; Set return value to 1 + "BX lr \n" //; Return + ); +} + +void SH_ICE(void) +{ + asm("CMP R2,#0 \n" + "BEQ SH_End \n" + "STR R0,[R2] \n" //; Save the return value to *pn32Out_R0 + ); +} + +/** + * + * @brief The function to process semihosted command + * @param[in] n32In_R0 : semihost register 0 + * @param[in] n32In_R1 : semihost register 1 + * @param[out] pn32Out_R0: semihost register 0 + * @retval 0: No ICE debug + * @retval 1: ICE debug + * + */ +int32_t SH_DoCommand(int32_t n32In_R0, int32_t n32In_R1, int32_t *pn32Out_R0) +{ + asm("BKPT 0xAB \n" //; This instruction will cause ICE trap or system HardFault + "B SH_ICE \n" + "SH_HardFault: \n" //; Captured by HardFault + "MOVS R0,#0 \n" //; Set return value to 0 + "BX lr \n" //; Return + ); + + return 1; //; Return 1 when it is trap by ICE +} + +/** + * @brief Get LR value and branch to Hard_Fault_Handler function + * @param None + * @return None + * @details This function is use to get LR value and branch to Hard_Fault_Handler function. + */ +void Get_LR_and_Branch(void) +{ + asm("MOV R1, LR \n" //; LR current value + "B Hard_Fault_Handler \n" + ); +} + +/** + * @brief Get MSP value and branch to Get_LR_and_Branch function + * @param None + * @return None + * @details This function is use to get stack pointer value and branch to Get_LR_and_Branch function. + */ +void Stack_Use_MSP(void) +{ + asm("MRS R0, MSP \n" //; read MSP + "B Get_LR_and_Branch \n" + ); +} + +/** + * @brief Get stack pointer value and branch to Get_LR_and_Branch function + * @param None + * @return None + * @details This function is use to get stack pointer value and branch to Get_LR_and_Branch function. + */ +void HardFault_Handler_Ret(void) +{ + asm("MOVS r0, #4 \n" + "MOV r1, LR \n" + "TST r0, r1 \n" //; check LR bit 2 + "BEQ Stack_Use_MSP \n" //; stack use MSP + "MRS R0, PSP \n" //; stack use PSP, read PSP + "B Get_LR_and_Branch \n" + ); +} + +/** + * @brief This function is implemented to support semihost + * @param None + * @returns None + * @details This function is implement to support semihost message print. + * + */ +void SP_Read_Ready(void) +{ + asm("LDR R1, [R0, #24] \n" //; Get previous PC + "LDRH R3, [R1] \n" //; Get instruction + "LDR R2, [pc, #8] \n" //; The special BKPT instruction + "CMP R3, R2 \n" //; Test if the instruction at previous PC is BKPT + "BNE HardFault_Handler_Ret \n" //; Not BKPT + "ADDS R1, #4 \n" //; Skip BKPT and next line + "STR R1, [R0, #24] \n" //; Save previous PC + "BX lr \n" //; Return + "DCD 0xBEAB \n" //; BKPT instruction code + "B HardFault_Handler_Ret \n" + ); +} + +/** + * @brief Get stack pointer value and branch to Get_LR_and_Branch function + * @param None + * @return None + * @details This function is use to get stack pointer value and branch to Get_LR_and_Branch function. + */ +void SP_is_PSP(void) +{ + asm( + "MRS R0, PSP \n" //; stack use PSP, read PSP + "B Get_LR_and_Branch \n" + + ); +} + +/** + * @brief This HardFault handler is implemented to support semihost + * + * @param None + * + * @returns None + * + * @details This function is implement to support semihost message print. + * + */ +void HardFault_Handler (void) +{ + asm("MOV R0, lr \n" + "LSLS R0, #29 \n" //; Check bit 2 + "BMI SP_is_PSP \n" //; previous stack is PSP + "MRS R0, MSP \n" //; previous stack is MSP, read MSP + "B SP_Read_Ready \n" + ); + + while(1); +} + +# else + +/** + * @brief This HardFault handler is implemented to support semihost + * @param None + * @returns None + * @details This function is implement to support semihost message print. + * + */ +__asm int32_t HardFault_Handler(void) +{ + MOV R0, LR + LSLS R0, #29 //; Check bit 2 + BMI SP_is_PSP //; previous stack is PSP + MRS R0, MSP //; previous stack is MSP, read MSP + B SP_Read_Ready +SP_is_PSP + MRS R0, PSP //; Read PSP + +SP_Read_Ready + LDR R1, [R0, #24] //; Get previous PC + LDRH R3, [R1] //; Get instruction + LDR R2, =0xBEAB //; The special BKPT instruction + CMP R3, R2 //; Test if the instruction at previous PC is BKPT + BNE HardFault_Handler_Ret //; Not BKPT + + ADDS R1, #4 //; Skip BKPT and next line + STR R1, [R0, #24] //; Save previous PC + + BX LR //; Return +HardFault_Handler_Ret + + /* TODO: Implement your own hard fault handler here. */ + MOVS r0, #4 + MOV r1, LR + TST r0, r1 //; check LR bit 2 + BEQ Stack_Use_MSP //; stack use MSP + MRS R0, PSP ;stack use PSP //; stack use PSP, read PSP + B Get_LR_and_Branch +Stack_Use_MSP + MRS R0, MSP ; stack use MSP //; read MSP +Get_LR_and_Branch + MOV R1, LR ; LR current value //; LR current value + LDR R2,=__cpp(Hard_Fault_Handler) //; branch to Hard_Fault_Handler + BX R2 + + B . + + ALIGN +} + +/** + * + * @brief The function to process semihosted command + * @param[in] n32In_R0 : semihost register 0 + * @param[in] n32In_R1 : semihost register 1 + * @param[out] pn32Out_R0: semihost register 0 + * @retval 0: No ICE debug + * @retval 1: ICE debug + * + */ +__asm int32_t SH_DoCommand(int32_t n32In_R0, int32_t n32In_R1, int32_t *pn32Out_R0) +{ + BKPT 0xAB //; Wait ICE or HardFault + //; ICE will step over BKPT directly + //; HardFault will step BKPT and the next line + B SH_ICE + +SH_HardFault //; Captured by HardFault + MOVS R0, #0 //; Set return value to 0 + BX lr //; Return + +SH_ICE //; Captured by ICE + //; Save return value + CMP R2, #0 + BEQ SH_End + STR R0, [R2] //; Save the return value to *pn32Out_R0 + +SH_End + MOVS R0, #1 //; Set return value to 1 + BX lr //; Return +} +#endif + +#else + +# if defined(__ICCARM__) + +void Get_LR_and_Branch(void) +{ + asm("MOV R1, LR \n" //; LR current value + "B Hard_Fault_Handler \n" + ); +} + +void Stack_Use_MSP(void) +{ + asm("MRS R0, MSP \n" //; read MSP + "B Get_LR_and_Branch \n" + ); +} + +/** + * @brief This HardFault handler is implemented to show r0, r1, r2, r3, r12, lr, pc, psr + * + * @param None + * + * @returns None + * + * @details This function is implement to print r0, r1, r2, r3, r12, lr, pc, psr. + * + */ +void HardFault_Handler(void) +{ + asm("MOVS r0, #4 \n" + "MOV r1, LR \n" + "TST r0, r1 \n" //; check LR bit 2 + "BEQ Stack_Use_MSP \n" //; stack use MSP + "MRS R0, PSP \n" //; stack use PSP, read PSP + "B Get_LR_and_Branch \n" + ); + + while(1); +} + +# else + +/** + * @brief This HardFault handler is implemented to show r0, r1, r2, r3, r12, lr, pc, psr + * + * @param None + * + * @return None + * + * @details The function extracts the location of stack frame and passes it to Hard_Fault_Handler function as a pointer + * + */ +__asm int32_t HardFault_Handler(void) +{ + MOVS r0, #4 + MOV r1, LR + TST r0, r1 //; check LR bit 2 + BEQ Stack_Use_MSP //; stack use MSP + MRS R0, PSP //; stack use PSP, read PSP + B Get_LR_and_Branch +Stack_Use_MSP + MRS R0, MSP //; read MSP +Get_LR_and_Branch + MOV R1, LR //; LR current value + LDR R2,=__cpp(Hard_Fault_Handler) //; branch to Hard_Fault_Handler + BX R2 +} + +#endif + +#endif + + +/** + * @brief Routine to send a char + * + * @param[in] ch Character to send to debug port. + * + * @returns Send value from UART debug port + * + * @details Send a target char to UART debug port . + */ +#ifndef NONBLOCK_PRINTF +void SendChar_ToUART(int ch) +{ + while(DEBUG_PORT->FIFOSTS & UART_FIFOSTS_TXFULL_Msk); + + DEBUG_PORT->DAT = ch; + if(ch == '\n') + { + while(DEBUG_PORT->FIFOSTS & UART_FIFOSTS_TXFULL_Msk); + DEBUG_PORT->DAT = '\r'; + } +} + +#else +/* Non-block implement of send char */ +#define BUF_SIZE 2048 +void SendChar_ToUART(int ch) +{ + static uint8_t u8Buf[BUF_SIZE] = {0}; + static int32_t i32Head = 0; + static int32_t i32Tail = 0; + int32_t i32Tmp; + + /* Only flush the data in buffer to UART when ch == 0 */ + if(ch) + { + // Push char + i32Tmp = i32Head+1; + if(i32Tmp > BUF_SIZE) i32Tmp = 0; + if(i32Tmp != i32Tail) + { + u8Buf[i32Head] = ch; + i32Head = i32Tmp; + } + + if(ch == '\n') + { + i32Tmp = i32Head+1; + if(i32Tmp > BUF_SIZE) i32Tmp = 0; + if(i32Tmp != i32Tail) + { + u8Buf[i32Head] = '\r'; + i32Head = i32Tmp; + } + } + } + else + { + if(i32Tail == i32Head) + return; + } + + // pop char + do + { + i32Tmp = i32Tail + 1; + if(i32Tmp > BUF_SIZE) i32Tmp = 0; + + if((DEBUG_PORT->FIFOSTS & UART_FIFOSTS_TXFULL_Msk) == 0) + { + DEBUG_PORT->DAT = u8Buf[i32Tail]; + i32Tail = i32Tmp; + } + else + break; // FIFO full + }while(i32Tail != i32Head); +} +#endif + +/** + * @brief Routine to send a char + * + * @param[in] ch Character to send to debug port. + * + * @returns Send value from UART debug port or semihost + * + * @details Send a target char to UART debug port or semihost. + */ +void SendChar(int ch) +{ +#if defined(DEBUG_ENABLE_SEMIHOST) + g_buf[g_buf_len++] = ch; + g_buf[g_buf_len] = '\0'; + if(g_buf_len + 1 >= sizeof(g_buf) || ch == '\n' || ch == '\0') + { + /* Send the char */ + if(SH_DoCommand(0x04, (int)g_buf, NULL) != 0) + { + g_buf_len = 0; + return; + } + else + { + int i; + + for(i = 0; i < g_buf_len; i++) + SendChar_ToUART(g_buf[i]); + g_buf_len = 0; + } + } +#else + SendChar_ToUART(ch); +#endif +} + +/** + * @brief Routine to get a char + * + * @param None + * + * @returns Get value from UART debug port or semihost + * + * @details Wait UART debug port or semihost to input a char. + */ +char GetChar(void) +{ +#ifdef DEBUG_ENABLE_SEMIHOST +# if defined (__CC_ARM) + int nRet; + while(SH_DoCommand(0x101, 0, &nRet) != 0) + { + if(nRet != 0) + { + SH_DoCommand(0x07, 0, &nRet); + return (char)nRet; + } + } +# else + int nRet; + while(SH_DoCommand(0x7, 0, &nRet) != 0) + { + if(nRet != 0) + return (char)nRet; + } +# endif + return (0); +#else + + while(1) + { + if((DEBUG_PORT->FIFOSTS & UART_FIFOSTS_RXEMPTY_Msk) == 0) + { + return (DEBUG_PORT->DAT); + } + } + +#endif +} + +/** + * @brief Check any char input from UART + * + * @param None + * + * @retval 1: No any char input + * @retval 0: Have some char input + * + * @details Check UART RSR RX EMPTY or not to determine if any char input from UART + */ + +int kbhit(void) +{ + return !((DEBUG_PORT->FIFOSTS & UART_FIFOSTS_RXEMPTY_Msk) == 0); +} +/** + * @brief Check if debug message finished + * + * @param None + * + * @retval 1: Message is finished + * @retval 0: Message is transmitting. + * + * @details Check if message finished (FIFO empty of debug port) + */ + +int IsDebugFifoEmpty(void) +{ + return ((DEBUG_PORT->FIFOSTS & UART_FIFOSTS_TXEMPTYF_Msk) != 0); +} + +/** + * @brief C library retargetting + * + * @param[in] ch Character to send to debug port. + * + * @returns None + * + * @details Check if message finished (FIFO empty of debug port) + */ + +void _ttywrch(int ch) +{ + SendChar(ch); + return; +} + + +/** + * @brief Write character to stream + * + * @param[in] ch Character to be written. The character is passed as its int promotion. + * @param[in] stream Pointer to a FILE object that identifies the stream where the character is to be written. + * + * @returns If there are no errors, the same character that has been written is returned. + * If an error occurs, EOF is returned and the error indicator is set (see ferror). + * + * @details Writes a character to the stream and advances the position indicator.\n + * The character is written at the current position of the stream as indicated \n + * by the internal position indicator, which is then advanced one character. + * + * @note The above descriptions are copied from http://www.cplusplus.com/reference/clibrary/cstdio/fputc/. + * + * + */ + +int fputc(int ch, FILE *stream) +{ + SendChar(ch); + return ch; +} + + +/** + * @brief Get character from UART debug port or semihosting input + * + * @param[in] stream Pointer to a FILE object that identifies the stream on which the operation is to be performed. + * + * @returns The character read from UART debug port or semihosting + * + * @details For get message from debug port or semihosting. + * + */ + +int fgetc(FILE *stream) +{ + return (GetChar()); +} + +/** + * @brief Check error indicator + * + * @param[in] stream Pointer to a FILE object that identifies the stream. + * + * @returns If the error indicator associated with the stream was set, the function returns a nonzero value. + * Otherwise, it returns a zero value. + * + * @details Checks if the error indicator associated with stream is set, returning a value different + * from zero if it is. This indicator is generally set by a previous operation on the stream that failed. + * + * @note The above descriptions are copied from http://www.cplusplus.com/reference/clibrary/cstdio/ferror/. + * + */ + +int ferror(FILE *stream) +{ + return EOF; +} + +#ifdef DEBUG_ENABLE_SEMIHOST +# ifdef __ICCARM__ +void __exit(int return_code) +{ + + /* Check if link with ICE */ + if(SH_DoCommand(0x18, 0x20026, NULL) == 0) + { + /* Make sure all message is print out */ + while(IsDebugFifoEmpty() == 0); + } +label: + goto label; /* endless loop */ +} +# else +void _sys_exit(int return_code) +{ + + /* Check if link with ICE */ + if(SH_DoCommand(0x18, 0x20026, NULL) == 0) + { + /* Make sure all message is print out */ + while(IsDebugFifoEmpty() == 0); + } +label: + goto label; /* endless loop */ +} +# endif +#endif diff --git a/stepper/RTE/Device/M453VG6AE/startup_M451Series.s b/stepper/RTE/Device/M453VG6AE/startup_M451Series.s new file mode 100644 index 0000000..c083f20 --- /dev/null +++ b/stepper/RTE/Device/M453VG6AE/startup_M451Series.s @@ -0,0 +1,376 @@ +;/****************************************************************************** +; * @file startup_M451Series.s +; * @version V0.10 +; * $Revision: 5 $ +; * $Date: 14/12/24 10:20a $ +; * @brief CMSIS Cortex-M4 Core Device Startup File for M451 Series MCU +; * +; * @note +; * Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved. +;*****************************************************************************/ +;/* +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ +;*/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + + ; User may overwrite stack size setting by pre-defined symbol + IF :LNOT: :DEF: Stack_Size +Stack_Size EQU 0x00000400 + ENDIF + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + + IF :LNOT: :DEF: Heap_Size +Heap_Size EQU 0x00000000 + ENDIF + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD BOD_IRQHandler ; 0: Brown Out detection + DCD IRC_IRQHandler ; 1: Internal RC + DCD PWRWU_IRQHandler ; 2: Power down wake up + DCD RAMPE_IRQHandler ; 3: RAM parity error + DCD CLKFAIL_IRQHandler ; 4: Clock detection fail + DCD Default_Handler ; 5: Reserved + DCD RTC_IRQHandler ; 6: Real Time Clock + DCD TAMPER_IRQHandler ; 7: Tamper detection + DCD WDT_IRQHandler ; 8: Watchdog timer + DCD WWDT_IRQHandler ; 9: Window watchdog timer + DCD EINT0_IRQHandler ; 10: External Input 0 + DCD EINT1_IRQHandler ; 11: External Input 1 + DCD EINT2_IRQHandler ; 12: External Input 2 + DCD EINT3_IRQHandler ; 13: External Input 3 + DCD EINT4_IRQHandler ; 14: External Input 4 + DCD EINT5_IRQHandler ; 15: External Input 5 + DCD GPA_IRQHandler ; 16: GPIO Port A + DCD GPB_IRQHandler ; 17: GPIO Port B + DCD GPC_IRQHandler ; 18: GPIO Port C + DCD GPD_IRQHandler ; 19: GPIO Port D + DCD GPE_IRQHandler ; 20: GPIO Port E + DCD GPF_IRQHandler ; 21: GPIO Port F + DCD SPI0_IRQHandler ; 22: SPI0 + DCD SPI1_IRQHandler ; 23: SPI1 + DCD BRAKE0_IRQHandler ; 24: + DCD PWM0P0_IRQHandler ; 25: + DCD PWM0P1_IRQHandler ; 26: + DCD PWM0P2_IRQHandler ; 27: + DCD BRAKE1_IRQHandler ; 28: + DCD PWM1P0_IRQHandler ; 29: + DCD PWM1P1_IRQHandler ; 30: + DCD PWM1P2_IRQHandler ; 31: + DCD TMR0_IRQHandler ; 32: Timer 0 + DCD TMR1_IRQHandler ; 33: Timer 1 + DCD TMR2_IRQHandler ; 34: Timer 2 + DCD TMR3_IRQHandler ; 35: Timer 3 + DCD UART0_IRQHandler ; 36: UART0 + DCD UART1_IRQHandler ; 37: UART1 + DCD I2C0_IRQHandler ; 38: I2C0 + DCD I2C1_IRQHandler ; 39: I2C1 + DCD PDMA_IRQHandler ; 40: Peripheral DMA + DCD DAC_IRQHandler ; 41: DAC + DCD ADC00_IRQHandler ; 42: ADC0 interrupt source 0 + DCD ADC01_IRQHandler ; 43: ADC0 interrupt source 1 + DCD ACMP01_IRQHandler ; 44: ACMP0 and ACMP1 + DCD Default_Handler ; 45: Reserved + DCD ADC02_IRQHandler ; 46: ADC0 interrupt source 2 + DCD ADC03_IRQHandler ; 47: ADC0 interrupt source 3 + DCD UART2_IRQHandler ; 48: UART2 + DCD UART3_IRQHandler ; 49: UART3 + DCD Default_Handler ; 50: Reserved + DCD SPI2_IRQHandler ; 51: SPI2 + DCD Default_Handler ; 52: Reserved + DCD USBD_IRQHandler ; 53: USB device + DCD USBH_IRQHandler ; 54: USB host + DCD USBOTG_IRQHandler ; 55: USB OTG + DCD CAN0_IRQHandler ; 56: CAN0 + DCD Default_Handler ; 57: Reserved + DCD SC0_IRQHandler ; 58: + DCD Default_Handler ; 59: Reserved. + DCD Default_Handler ; 60: + DCD Default_Handler ; 61: + DCD Default_Handler ; 62: + DCD TK_IRQHandler ; 63: + +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =0x40000100 + ; Unlock Register + LDR R1, =0x59 + STR R1, [R0] + LDR R1, =0x16 + STR R1, [R0] + LDR R1, =0x88 + STR R1, [R0] + + ; Init POR + LDR R2, =0x40000024 + LDR R1, =0x00005AA5 + STR R1, [R2] + + ; Select INV Type + LDR R2, =0x40000200 + LDR R1, [R2] + BIC R1, R1, #0x1000 + STR R1, [R2] + + ; Lock register + MOVS R1, #0 + STR R1, [R0] + + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler\ + PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler\ + PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT BOD_IRQHandler [WEAK] + EXPORT IRC_IRQHandler [WEAK] + EXPORT PWRWU_IRQHandler [WEAK] + EXPORT RAMPE_IRQHandler [WEAK] + EXPORT CLKFAIL_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT WDT_IRQHandler [WEAK] + EXPORT WWDT_IRQHandler [WEAK] + EXPORT EINT0_IRQHandler [WEAK] + EXPORT EINT1_IRQHandler [WEAK] + EXPORT EINT2_IRQHandler [WEAK] + EXPORT EINT3_IRQHandler [WEAK] + EXPORT EINT4_IRQHandler [WEAK] + EXPORT EINT5_IRQHandler [WEAK] + EXPORT GPA_IRQHandler [WEAK] + EXPORT GPB_IRQHandler [WEAK] + EXPORT GPC_IRQHandler [WEAK] + EXPORT GPD_IRQHandler [WEAK] + EXPORT GPE_IRQHandler [WEAK] + EXPORT GPF_IRQHandler [WEAK] + EXPORT SPI0_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT BRAKE0_IRQHandler [WEAK] + EXPORT PWM0P0_IRQHandler [WEAK] + EXPORT PWM0P1_IRQHandler [WEAK] + EXPORT PWM0P2_IRQHandler [WEAK] + EXPORT BRAKE1_IRQHandler [WEAK] + EXPORT PWM1P0_IRQHandler [WEAK] + EXPORT PWM1P1_IRQHandler [WEAK] + EXPORT PWM1P2_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT I2C0_IRQHandler [WEAK] + EXPORT I2C1_IRQHandler [WEAK] + EXPORT PDMA_IRQHandler [WEAK] + EXPORT DAC_IRQHandler [WEAK] + EXPORT ADC00_IRQHandler [WEAK] + EXPORT ADC01_IRQHandler [WEAK] + EXPORT ACMP01_IRQHandler [WEAK] + EXPORT ADC02_IRQHandler [WEAK] + EXPORT ADC03_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USBD_IRQHandler [WEAK] + EXPORT USBH_IRQHandler [WEAK] + EXPORT USBOTG_IRQHandler [WEAK] + EXPORT CAN0_IRQHandler [WEAK] + EXPORT SC0_IRQHandler [WEAK] + EXPORT TK_IRQHandler [WEAK] + +BOD_IRQHandler +IRC_IRQHandler +PWRWU_IRQHandler +RAMPE_IRQHandler +CLKFAIL_IRQHandler +RTC_IRQHandler +TAMPER_IRQHandler +WDT_IRQHandler +WWDT_IRQHandler +EINT0_IRQHandler +EINT1_IRQHandler +EINT2_IRQHandler +EINT3_IRQHandler +EINT4_IRQHandler +EINT5_IRQHandler +GPA_IRQHandler +GPB_IRQHandler +GPC_IRQHandler +GPD_IRQHandler +GPE_IRQHandler +GPF_IRQHandler +SPI0_IRQHandler +SPI1_IRQHandler +BRAKE0_IRQHandler +PWM0P0_IRQHandler +PWM0P1_IRQHandler +PWM0P2_IRQHandler +BRAKE1_IRQHandler +PWM1P0_IRQHandler +PWM1P1_IRQHandler +PWM1P2_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +I2C0_IRQHandler +I2C1_IRQHandler +PDMA_IRQHandler +DAC_IRQHandler +ADC00_IRQHandler +ADC01_IRQHandler +ACMP01_IRQHandler +ADC02_IRQHandler +ADC03_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +SPI2_IRQHandler +USBD_IRQHandler +USBH_IRQHandler +USBOTG_IRQHandler +CAN0_IRQHandler +SC0_IRQHandler +TK_IRQHandler + B . + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + + END +;/*** (C) COPYRIGHT 2014 Nuvoton Technology Corp. ***/ diff --git a/stepper/RTE/Device/M453VG6AE/system_M451Series.c b/stepper/RTE/Device/M453VG6AE/system_M451Series.c new file mode 100644 index 0000000..daf91b9 --- /dev/null +++ b/stepper/RTE/Device/M453VG6AE/system_M451Series.c @@ -0,0 +1,109 @@ +/****************************************************************************** + * @file system_M451Series.c + * @version V0.10 + * $Revision: 11 $ + * $Date: 15/09/02 10:02a $ + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Source File for M451 Series MCU + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ + +#include "M451Series.h" + + +/*---------------------------------------------------------------------------- + DEFINES + *----------------------------------------------------------------------------*/ + + +/*---------------------------------------------------------------------------- + Clock Variable definitions + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = __SYSTEM_CLOCK; /*!< System Clock Frequency (Core Clock)*/ +uint32_t CyclesPerUs = (__HSI / 1000000); /* Cycles per micro second */ +uint32_t PllClock = __HSI; /*!< PLL Output Clock Frequency */ +uint32_t gau32ClkSrcTbl[] = {__HXT, __LXT, 0, __LIRC, 0, 0, 0, __HIRC}; + +/*---------------------------------------------------------------------------- + Clock functions + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate(void) /* Get Core Clock Frequency */ +{ +#if 1 + uint32_t u32Freq, u32ClkSrc; + uint32_t u32HclkDiv; + + /* Update PLL Clock */ + PllClock = CLK_GetPLLClockFreq(); + + u32ClkSrc = CLK->CLKSEL0 & CLK_CLKSEL0_HCLKSEL_Msk; + + if(u32ClkSrc == CLK_CLKSEL0_HCLKSEL_PLL) + { + /* Use PLL clock */ + u32Freq = PllClock; + } + else + { + /* Use the clock sources directly */ + u32Freq = gau32ClkSrcTbl[u32ClkSrc]; + } + + u32HclkDiv = (CLK->CLKDIV0 & CLK_CLKDIV0_HCLKDIV_Msk) + 1; + + /* Update System Core Clock */ + SystemCoreClock = u32Freq / u32HclkDiv; + + + //if(SystemCoreClock == 0) + // __BKPT(0); + + CyclesPerUs = (SystemCoreClock + 500000) / 1000000; +#endif +} + +/** + * Initialize the system + * + * @param None + * @return None + * + * @brief Setup the microcontroller system. + * Initialize the System. + */ +void SystemInit(void) +{ + /* ToDo: add code to initialize the system + do not use global variables because this function is called before + reaching pre-main. RW section maybe overwritten afterwards. */ + + SYS_UnlockReg(); + /* One-time POR18 */ + if((SYS->PDID >> 12) == 0x945) + { + M32(GCR_BASE+0x14) |= BIT7; + } + /* Force to use INV type with HXT */ + CLK->PWRCTL &= ~CLK_PWRCTL_HXTSELTYP_Msk; + SYS_LockReg(); + + +#ifdef EBI_INIT + extern void SYS_Init(); + extern void EBI_Init(); + + SYS_UnlockReg(); + SYS_Init(); + EBI_Init(); + SYS_LockReg(); +#endif + + /* FPU settings ------------------------------------------------------------*/ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10 * 2) | /* set CP10 Full Access */ + (3UL << 11 * 2)); /* set CP11 Full Access */ +#endif + +} +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/stepper/RTE/_Target_1/RTE_Components.h b/stepper/RTE/_Target_1/RTE_Components.h new file mode 100644 index 0000000..7aebab2 --- /dev/null +++ b/stepper/RTE/_Target_1/RTE_Components.h @@ -0,0 +1,39 @@ + +/* + * Auto generated Run-Time-Environment Configuration File + * *** Do not modify ! *** + * + * Project: 'stepper' + * Target: 'Target 1' + */ + +#ifndef RTE_COMPONENTS_H +#define RTE_COMPONENTS_H + + +/* + * Define the Device Header File: + */ +#define CMSIS_device_header "M451Series.h" + +/* Nuvoton::Device:Driver:CAN:3.01.001 */ +#define RTE_Drivers_CAN /* Driver CAN */ +/* Nuvoton::Device:Driver:CLK:3.01.001 */ +#define RTE_Drivers_CLK /* Driver CLK */ +/* Nuvoton::Device:Driver:EADC:3.01.001 */ +#define RTE_Drivers_EADC /* Driver EADC */ +/* Nuvoton::Device:Driver:GPIO:3.01.001 */ +#define RTE_Drivers_GPIO /* Driver GPIO */ +/* Nuvoton::Device:Driver:I2C:3.01.001 */ +#define RTE_Drivers_I2C /* Driver I2C */ +/* Nuvoton::Device:Driver:PWM:3.01.001 */ +#define RTE_Drivers_PWM /* Driver PWM */ +/* Nuvoton::Device:Driver:SC:3.01.001 */ +#define RTE_Drivers_SC /* Driver SC */ +/* Nuvoton::Device:Driver:SYS:3.01.001 */ +#define RTE_Drivers_SYS /* Driver SYS */ +/* Nuvoton::Device:Driver:UART:3.01.001 */ +#define RTE_Drivers_UART /* Driver UART */ + + +#endif /* RTE_COMPONENTS_H */ diff --git a/stepper/codetab.h b/stepper/codetab.h new file mode 100644 index 0000000..051936a --- /dev/null +++ b/stepper/codetab.h @@ -0,0 +1,380 @@ +/************************************************************************************ +* Copyright (c), 2014, HelTec Automatic Technology co.,LTD. +* All rights reserved. +* +* Http: www.heltec.cn +* Email: cn.heltec@gmail.com +* WebShop: heltec.taobao.com +* +* File name: OLED.c +* Project : HelTec.uvprij +* Processor: STM32F103C8T6 +* Compiler : MDK fo ARM +* +* Author : С– +* Version: 1.00 +* Date : 2014.2.20 +* Email : hello14blog@gmail.com +* Modification: none +* +* Description: +* 1. 128*64ֻ֣OLEDģࠩ٦ŜҝʾԌѲքؖҭì޶ˊԃheltec.taobao.com̹˛ӺƷ; +* 2. ؖҭԉղѼ؊אքpȡؖɭݾq݆̣փԶ; +* 3. ȡؖ׽ʽ -- ٲӵbѐʽbŦвˤԶ +* +* Others: none; +* +* Function List: node; +* +* History: none; +* +*************************************************************************************/ + +/***************************16*16քֳ֣ؖͥȡģ׽ʽúٲӵjjѐʽjjŦвˤԶ*********/ +#ifndef __CODETAB_H_ +#define __CODETAB_H_ + +unsigned char F16x16[] = +{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/ + +0x00,0x02,0x02,0xFA,0xFA,0xAA,0xAA,0xFF,0xFF,0xAA,0xAA,0xFA,0xFA,0x02,0x02,0x00, +0x00,0x42,0x72,0x72,0x3A,0x7A,0x42,0x4B,0x5B,0x52,0x62,0x62,0x13,0x77,0x66,0x00,/*"ܝ",1*/ + +0x20,0x3C,0x1C,0xFF,0xFF,0xB0,0xB4,0x24,0x24,0x3F,0x3F,0xE4,0xE4,0x24,0x24,0x20, +0x02,0x02,0x03,0xFF,0xFF,0x00,0x01,0x05,0x1D,0x59,0xC1,0xFF,0x7F,0x01,0x01,0x01,/*"͘",2*/ + +0x00,0x00,0x00,0xF8,0xF8,0x48,0x4C,0x4F,0x4B,0x4A,0x48,0x48,0xF8,0xF8,0x00,0x00, +0x00,0x00,0x00,0xFF,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0xFF,0x00,0x00,/*"ؔ",3*/ + +0x20,0x24,0x24,0xE4,0xE4,0x24,0x24,0x24,0x30,0x10,0xFF,0xFF,0x10,0xF0,0xF0,0x00, +0x08,0x1C,0x1F,0x0B,0x0C,0x0D,0x4F,0x6E,0x34,0x1C,0x0F,0x23,0x60,0x7F,0x3F,0x00,/*"֯",4*/ + +0x80,0xC0,0x60,0xF8,0xFF,0x07,0x02,0x00,0xFF,0xFF,0xE0,0x70,0x3C,0x1C,0x08,0x00, +0x00,0x00,0x00,0x7F,0x7F,0x04,0x06,0x03,0x3F,0x7F,0x40,0x40,0x40,0x78,0x78,0x00,/*"ۯ",5*/ + +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",6*/ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",6*/ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",7*/ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",7*/ + + +0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00, +0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00,/*"ς",8*/ +0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00, +0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,/*"׈",9*/ +0x08,0x08,0x08,0xFF,0x88,0x48,0x00,0x98,0x48,0x28,0x0A,0x2C,0x48,0xD8,0x08,0x00, +0x02,0x42,0x81,0x7F,0x00,0x00,0x40,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x40,0x00,/*"࠘",10*/ +0x00,0x50,0x4F,0x4A,0x48,0xFF,0x48,0x48,0x48,0x00,0xFC,0x00,0x00,0xFF,0x00,0x00, +0x00,0x00,0x3F,0x01,0x01,0xFF,0x21,0x61,0x3F,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,/*"׆",11*/ +0x00,0x90,0x8C,0xA4,0xA4,0xA4,0xA5,0xA6,0xA4,0xA4,0xA4,0xA4,0x94,0x8C,0x04,0x00, +0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x70,0x00,0x00,/*"Ϊ",12*/ +0x00,0x04,0x74,0xD4,0xFF,0xD4,0x74,0x04,0x10,0x0C,0xB7,0x44,0xB4,0x0C,0x04,0x00, +0x00,0x42,0x43,0x7A,0x43,0x42,0x43,0x7E,0x4B,0x4B,0x4A,0x4A,0x42,0x43,0x01,0x00,/*"ֻ",13*/ +0x08,0x08,0x08,0x08,0x08,0x08,0xF9,0x4A,0x4C,0x48,0x48,0xC8,0x08,0x08,0x08,0x00, +0x40,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x20,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,/*"׽",14*/ +0x00,0x20,0x2C,0x24,0x64,0x74,0xAD,0xA6,0xE4,0x34,0x24,0x24,0x2C,0x24,0x00,0x00, +0x00,0x24,0x24,0x25,0x15,0x15,0x0D,0xFE,0x04,0x0D,0x17,0x14,0x24,0x64,0x24,0x00,/*"и",15*/ + + +0x00,0x00,0x00,0xF8,0x48,0x48,0x4C,0x4B,0x4A,0x48,0x48,0x48,0xF8,0x00,0x00,0x00, +0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,/*"ؔ",16*/ +0x20,0x24,0x24,0xE4,0x24,0x24,0x24,0x20,0x10,0x10,0xFF,0x10,0x10,0xF0,0x00,0x00, +0x08,0x1C,0x0B,0x08,0x0C,0x05,0x4E,0x24,0x10,0x0C,0x03,0x20,0x40,0x3F,0x00,0x00,/*"֯",17*/ +0x08,0x08,0x08,0xFF,0x88,0x48,0x00,0x98,0x48,0x28,0x0A,0x2C,0x48,0xD8,0x08,0x00, +0x02,0x42,0x81,0x7F,0x00,0x00,0x40,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x40,0x00,/*"࠘",18*/ +0x00,0x50,0x4F,0x4A,0x48,0xFF,0x48,0x48,0x48,0x00,0xFC,0x00,0x00,0xFF,0x00,0x00, +0x00,0x00,0x3F,0x01,0x01,0xFF,0x21,0x61,0x3F,0x00,0x0F,0x40,0x80,0x7F,0x00,0x00,/*"׆",19*/ +0x08,0x07,0xFA,0xAA,0xAE,0xAA,0xAA,0xA8,0xAC,0xAB,0xAA,0xFE,0x0A,0x02,0x02,0x00, +0x08,0x08,0x8B,0x6A,0x1E,0x0A,0x0A,0x0A,0x0A,0xFE,0x0A,0x0B,0x08,0x08,0x08,0x00,/*"̣",20*/ +0x10,0x60,0x01,0xC6,0x30,0x00,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x00,0x00, +0x04,0x04,0xFE,0x01,0x00,0x41,0x61,0x51,0x4D,0x43,0x41,0x41,0x51,0xE1,0x01,0x00,/*"ר",21*/ +0x40,0x41,0xCE,0x04,0x00,0x80,0x40,0xBE,0x82,0x82,0x82,0xBE,0xC0,0x40,0x40,0x00, +0x00,0x00,0x7F,0x20,0x90,0x80,0x40,0x43,0x2C,0x10,0x10,0x2C,0x43,0xC0,0x40,0x00,/*"ʨ",22*/ +0x20,0x21,0x2E,0xE4,0x00,0x00,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x00, +0x00,0x00,0x00,0x7F,0x20,0x10,0x08,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,/*"݆",23*/ + + +0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00, +0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,/*"֧",24*/ +0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xE2,0x12,0x0A,0x06,0x02,0x00,0x80,0x00,0x00, +0x01,0x01,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,/*"ؓ",25*/ +0x00,0x20,0x20,0x22,0x22,0xE2,0x22,0x22,0x22,0xE2,0x22,0x22,0x22,0x20,0x20,0x00, +0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x70,0x00,/*"Ԫ",26*/ +0x40,0x20,0xF8,0x0F,0x82,0x60,0x1E,0x14,0x10,0xFF,0x10,0x10,0x10,0x10,0x00,0x00, +0x00,0x00,0xFF,0x00,0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,0x00,/*"ݾ",27*/ +0x00,0x00,0x00,0x00,0x7E,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xCC,0x08,0x00, +0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x24,0x46,0x44,0x20,0x1F,0x00,0x00,/*"ԫ",28*/ +0x84,0x94,0x94,0xFF,0x94,0x94,0x80,0x24,0x24,0x24,0xFC,0x12,0x13,0x12,0x00,0x00, +0x20,0x18,0x06,0xFF,0x02,0x1C,0x0A,0x02,0x02,0x02,0x3F,0x41,0x41,0x41,0x71,0x00,/*"ۄ",29*/ +0x10,0x10,0xD0,0xFE,0x50,0x90,0x00,0x10,0x10,0x10,0xD0,0xFE,0x10,0x10,0x10,0x00, +0x08,0x06,0x01,0xFF,0x00,0x01,0x10,0x08,0x04,0x43,0x80,0x7F,0x00,0x00,0x00,0x00,/*"ӄ",30*/ +0x90,0x88,0xA7,0xA2,0xA6,0xBA,0xA2,0xF8,0xA7,0xA2,0xA6,0xBA,0xA2,0x82,0x80,0x00, +0x00,0x04,0x04,0x04,0x04,0x0C,0x34,0x04,0x44,0x84,0x7F,0x04,0x04,0x04,0x00,0x00,/*"ֈ",31*/ +}; + +/************************************6*8քֳ֣************************************/ +unsigned char F6x8[][6] = +{ +0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp +0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// ! +0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// " +0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// # +0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $ +0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// % +0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// & +0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// ' +0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// ( +0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// ) +0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// * +0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// + +0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// , +0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// - +0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// . +0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// / +0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0 +0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1 +0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2 +0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3 +0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4 +0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5 +0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6 +0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7 +0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8 +0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9 +0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// : +0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ; +0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// < +0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// = +0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// > +0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ? +0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @ +0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A +0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B +0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C +0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D +0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E +0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F +0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G +0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H +0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I +0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J +0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K +0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L +0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M +0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N +0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O +0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P +0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q +0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R +0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S +0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T +0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U +0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V +0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W +0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X +0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y +0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z +0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [ +0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55 +0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ] +0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^ +0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _ +0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// ' +0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a +0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b +0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c +0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d +0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e +0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f +0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g +0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h +0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i +0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j +0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k +0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l +0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m +0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n +0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o +0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p +0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q +0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r +0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s +0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t +0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u +0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v +0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w +0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x +0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y +0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z +0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines +}; +/****************************************8*16քֳ֣************************************/ +unsigned char F8X16[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0 + 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1 + 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2 + 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3 + 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4 + 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5 + 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6 + 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7 + 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8 + 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9 + 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10 + 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14 + 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15 + 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16 + 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17 + 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18 + 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19 + 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20 + 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21 + 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22 + 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23 + 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24 + 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25 + 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26 + 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27 + 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28 + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29 + 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30 + 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31 + 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32 + 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33 + 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34 + 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35 + 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36 + 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37 + 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38 + 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39 + 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40 + 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41 + 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42 + 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43 + 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44 + 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45 + 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46 + 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47 + 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48 + 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49 + 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50 + 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51 + 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52 + 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53 + 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54 + 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55 + 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56 + 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57 + 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58 + 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59 + 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60 + 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61 + 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63 + 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65 + 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66 + 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67 + 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69 + 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70 + 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71 + 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72 + 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73 + 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74 + 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75 + 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76 + 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77 + 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78 + 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79 + 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80 + 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81 + 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82 + 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83 + 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84 + 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85 + 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86 + 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87 + 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88 + 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89 + 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90 + 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91 + 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92 + 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93 + 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94 +}; + +unsigned char BMP1[] = { + 0x00,0x03,0x05,0x09,0x11,0xFF,0x11,0x89,0x05,0xC3,0x00,0xE0,0x00,0xF0,0x00,0xF8, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x28,0xFF,0x11,0xAA,0x44,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x01,0x38,0x44,0x82,0x92, + 0x92,0x74,0x01,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x44,0xFF,0x01,0x7D, + 0x7D,0x7D,0x01,0x7D,0x7D,0x7D,0x7D,0x01,0x7D,0x7D,0x7D,0x7D,0x7D,0x01,0xFF,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x03,0x03, + 0xF3,0x13,0x11,0x11,0x11,0x11,0x11,0x11,0x01,0xF1,0x11,0x61,0x81,0x01,0x01,0x01, + 0x81,0x61,0x11,0xF1,0x01,0x01,0x01,0x01,0x41,0x41,0xF1,0x01,0x01,0x01,0x01,0x01, + 0xC1,0x21,0x11,0x11,0x11,0x11,0x21,0xC1,0x01,0x01,0x01,0x01,0x41,0x41,0xF1,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x11,0x11,0x11,0x11,0x11,0xD3,0x33, + 0x03,0x03,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0x00,0x00, + 0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x7F,0x00,0x00,0x01,0x06,0x18,0x06, + 0x01,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x40,0x40,0x7F,0x40,0x40,0x00,0x00,0x00, + 0x1F,0x20,0x40,0x40,0x40,0x40,0x20,0x1F,0x00,0x00,0x00,0x00,0x40,0x40,0x7F,0x40, + 0x40,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x40,0x30,0x0C,0x03,0x00,0x00, + 0x00,0x00,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x06,0x06, + 0x06,0x06,0x04,0x04,0x04,0x84,0x44,0x44,0x44,0x84,0x04,0x04,0x84,0x44,0x44,0x44, + 0x84,0x04,0x04,0x04,0x84,0xC4,0x04,0x04,0x04,0x04,0x84,0x44,0x44,0x44,0x84,0x04, + 0x04,0x04,0x04,0x04,0x84,0x44,0x44,0x44,0x84,0x04,0x04,0x04,0x04,0x04,0x84,0x44, + 0x44,0x44,0x84,0x04,0x04,0x84,0x44,0x44,0x44,0x84,0x04,0x04,0x04,0x04,0x06,0x06, + 0x06,0x06,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x10,0x18,0x14,0x12,0x11,0x00,0x00,0x0F,0x10,0x10,0x10, + 0x0F,0x00,0x00,0x00,0x10,0x1F,0x10,0x00,0x00,0x00,0x08,0x10,0x12,0x12,0x0D,0x00, + 0x00,0x18,0x00,0x00,0x0D,0x12,0x12,0x12,0x0D,0x00,0x00,0x18,0x00,0x00,0x10,0x18, + 0x14,0x12,0x11,0x00,0x00,0x10,0x18,0x14,0x12,0x11,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80, + 0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x7F,0x03,0x0C,0x30,0x0C,0x03,0x7F,0x00,0x00,0x38,0x54,0x54,0x58,0x00,0x00, + 0x7C,0x04,0x04,0x78,0x00,0x00,0x3C,0x40,0x40,0x7C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xAA,0xAA,0xAA, + 0x28,0x08,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x03,0x0C,0x30,0x0C,0x03,0x7F, + 0x00,0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00,0x7F,0x02,0x04,0x08,0x10,0x7F,0x00,/*"D:\ٲЭ\show1.bmp",0*/ +}; + +#endif + diff --git a/stepper/hal_i2c.c b/stepper/hal_i2c.c new file mode 100644 index 0000000..6cebd16 --- /dev/null +++ b/stepper/hal_i2c.c @@ -0,0 +1,228 @@ + +#include "NUC100Series.h" +#include + +int OLED_WriteReg( char RegAddr, char pucDATD_AA) +{ + int i=0; + + while(i<32) i++; + + I2C_START(I2C0); //Æô¶¯ + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x08) + { + printf("I2CD_STArt write fail,I2D_STATUS %02X\r\n",I2C_GET_STATUS(I2C0)); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + //½øÈë¶Áд¿ØÖƲÙ×÷ + I2C_SET_DATA(I2C0,0xd0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0)!= 0x18) + { + printf("I2C write ADW fail\r\n"); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + //дÈë¶ÁµØÖ· + I2C_SET_DATA(I2C0,RegAddr); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x28) + { + printf("I2C write reg addr fail\r\n"); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + //дÈëÊý¾Ý + I2C_SET_DATA(I2C0,pucDATD_AA); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x28) + { + printf("I2C write control fail\r\n"); + while (1); + } + + //Í£Ö¹ + I2C_Trigger(I2C0,0,1,1,0); + + + //printf("I2C write ok\r\n"); + return 0; + +} + +int OLED_WriteAddr() +{ + if (I2C_GET_STATUS(I2C0) != 0x08) + { + printf("I2CD_STArt write add fail,I2D_STATUS %02X\r\n",I2C_GET_STATUS(I2C0)); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + //½øÈë¶Áд¿ØÖƲÙ×÷ + I2C_SET_DATA(I2C0,0xd0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0)!= 0x18) + { + printf("I2C write ADW fail\r\n"); + return FALSE; + } + return 1; +} + + +int OLED_WriteACK(char cDat) +{ + if((I2C_GET_STATUS(I2C0) != 0x18)&&(I2C_GET_STATUS(I2C0) != 0x28)) + { + printf("I2C OLED_WriteAddrAck STATUS error \r\n"); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + //дÈë¶ÁµØÖ· + I2C_SET_DATA(I2C0,cDat); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0)!= 0x28) + { + printf("OLED_WriteAddrAck fail ACK no recv\r\n"); + return FALSE; + } + return 1; +} +char OLED_ReadReg( int unAddr/*, int unLength*/) +{ + char ret; + int i=0; + + while(i<32) i++; + I2C_Trigger(I2C0,0,0,1,0); + + I2C_START(I2C0); //Æô¶¯ + //Æô¶¯ + I2C_WAIT_READY(I2C0); + if(I2C_GET_STATUS(I2C0) != 0x08) + { + printf("I2CD_STArt read reg fail,I2D_STATUS %02X\r\n",I2C_GET_STATUS(I2C0)); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + + //½øÈë¶Áд¿ØÖƲÙ×÷ + I2C_SET_DATA(I2C0,0xd0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x018) + { + printf("status fault shoube be 0x018 ,I2D_STATUS %02X\r\n",I2C_GET_STATUS(I2C0)); + return FALSE; + } + //дÈë¶ÁµØÖ· + I2C_SET_DATA(I2C0,unAddr); + I2C_Trigger(I2C0,0,0,1,0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0)!= 0x28) + { + printf("I2C write reg addr fail\r\n"); + return FALSE; + } + // ÖØÐÂÆô¶¯ + + + I2C_Trigger(I2C0,0,0,1,0); + I2C_Trigger(I2C0,1,0,0,0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x10) + { + printf("I2C repeated D_STArt fail\r\n"); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + + //½øÈë¶Á²Ù×÷ + I2C_SET_DATA(I2C0,0xd0 | 1); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x40) + { + printf("I2C write control fail\r\n"); + while (1); + } + //¶ÁÈ¡Êý¾Ý + I2C_Trigger(I2C0,0,0,1,0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x58) + { + printf("I2C read fail\r\n"); + return FALSE; + } + ret = I2C_GET_DATA(I2C0); + I2C_Trigger(I2C0,0,1,1,0); + +// I2C_WAIT_READY(I2C0); + return ret; +} + +int OLED_ReadBuf( int unAddr, char *pucDATD_AA, int unLength) +{ + char ret; + int i=0; + while(i<32) i++; + I2C_Trigger(I2C0,0,0,1,0); + I2C_START(I2C0); + I2C_WAIT_READY(I2C0); + if(I2C_GET_STATUS(I2C0) != 0x08) + { + printf("I2CD_STArt fail,I2D_STATUS %02X\r\n",I2C_GET_STATUS(I2C0)); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + + I2C_SET_DATA(I2C0,0xd0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x18) + { + printf("I2CD_STArt fail,I2D_STATUS %02X\r\n",I2C_GET_STATUS(I2C0)); + return FALSE; + } + I2C_SET_DATA(I2C0,unAddr); + I2C_Trigger(I2C0,0,0,1,0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0)!= 0x28) + { + printf("I2C write reg addr fail\r\n"); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + I2C_Trigger(I2C0,1,0,0,0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x10) + { + printf("I2C repeated D_STArt fail\r\n"); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + I2C_SET_DATA(I2C0,0xd0 | 1); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x40) + { + printf("I2C write control fail\r\n"); + while (1); + } + for(i=0;iGPD_MFPL &= ~(SYS_GPD_MFPL_PD0MFP_Msk | SYS_GPD_MFPL_PD1MFP_Msk); + SYS->GPD_MFPL |= (SYS_GPD_MFPL_PD0MFP_UART0_RXD | SYS_GPD_MFPL_PD1MFP_UART0_TXD); + + /* Set PC multi-function pins for PWM0 Channel0~3 */ + SYS->GPC_MFPL = (SYS->GPC_MFPL & (~SYS_GPC_MFPL_PC0MFP_Msk)); + SYS->GPC_MFPL |= SYS_GPC_MFPL_PC0MFP_PWM0_CH0; + SYS->GPC_MFPL = (SYS->GPC_MFPL & (~SYS_GPC_MFPL_PC1MFP_Msk)); + SYS->GPC_MFPL |= SYS_GPC_MFPL_PC1MFP_PWM0_CH1; + SYS->GPC_MFPL = (SYS->GPC_MFPL & (~SYS_GPC_MFPL_PC2MFP_Msk)); + SYS->GPC_MFPL |= SYS_GPC_MFPL_PC2MFP_PWM0_CH2; + SYS->GPC_MFPL = (SYS->GPC_MFPL & (~SYS_GPC_MFPL_PC3MFP_Msk)); + SYS->GPC_MFPL |= SYS_GPC_MFPL_PC3MFP_PWM0_CH3; + + /*Set Pwm mode as complementary mode*/ + PWM_ENABLE_COMPLEMENTARY_MODE(PWM0); + + // PWM0 channel 0 frequency is 100Hz, duty 30%, + PWM_ConfigOutputChannel(PWM0, 0, 100, 30); + SYS_UnlockReg(); + PWM_EnableDeadZone(PWM0, 0, 400); + SYS_LockReg(); + + // PWM0 channel 2 frequency is 300Hz, duty 50% + PWM_ConfigOutputChannel(PWM0, 2, 300, 50); + SYS_UnlockReg(); + PWM_EnableDeadZone(PWM0, 2, 200); + SYS_LockReg(); + + // Enable output of PWM0 channel 0~3 + PWM_EnableOutput(PWM0, 0xF); + + // Enable PWM0 channel 0 period interrupt, use channel 0 to measure time. + //PWM_EnablePeriodInt(PWM0, 0, 0); + //NVIC_EnableIRQ(PWM0P0_IRQn); + + // Start + PWM_Start(PWM0, 0xF); +} +void I2CInit(){ + + /* Enable I2C0 module clock */ + CLK_EnableModuleClock(I2C0_MODULE); + + + /*---------------------------------------------------------------------------------------------------------*/ + /* Init I/O Multi-function */ + /*---------------------------------------------------------------------------------------------------------*/ + + SYS->GPD_MFPL &= ~SYS_GPD_MFPL_PD4MFP_Msk; + SYS->GPD_MFPL |= SYS_GPD_MFPL_PD4MFP_I2C0_SDA; + + SYS->GPD_MFPL &= ~SYS_GPD_MFPL_PD5MFP_Msk; + SYS->GPD_MFPL |= SYS_GPD_MFPL_PD5MFP_I2C0_SCL; + I2C_Open(I2C0,100000); + + printf("I2C clock %d Hz\n", I2C_GetBusClockFreq(I2C0)); + + I2C_SetSlaveAddr(I2C0, 0, 0x78, 0); /* Slave Address : 0x15 */ + + SYS_LockReg(); +} + +void SYS_Init(void) +{ + + /*---------------------------------------------------------------------------------------------------------*/ + /* Init System Clock */ + /*---------------------------------------------------------------------------------------------------------*/ + + /* Enable HIRC clock (Internal RC 22.1184MHz) */ + CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk); + + /* Wait for HIRC clock ready */ + CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk); + + /* Select HCLK clock source as HIRC and and HCLK source divider as 1 */ + CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1)); + + /* Set PLL to Power-down mode and PLLSTB bit in CLK_STATUS register will be cleared by hardware.*/ + CLK_DisablePLL(); + + /* Enable HXT clock (external XTAL 12MHz) */ + CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk); + + /* Wait for HXT clock ready */ + CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk); + + /* Set core clock as PLL_CLOCK from PLL */ + CLK_SetCoreClock(PLL_CLOCK); + + /* Enable UART module clock */ + CLK_EnableModuleClock(UART0_MODULE); + + /* Select UART module clock source as HXT and UART module clock divider as 1 */ + CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UARTSEL_HXT, CLK_CLKDIV0_UART(1)); + + /* Enable EADC module clock */ + CLK_EnableModuleClock(EADC_MODULE); + + /* EADC clock source is 72MHz, set divider to 8, ADC clock is 72/8 MHz */ + CLK_SetModuleClock(EADC_MODULE, 0, CLK_CLKDIV0_EADC(8)); + + /*---------------------------------------------------------------------------------------------------------*/ + /* Init I/O Multi-function */ + /*---------------------------------------------------------------------------------------------------------*/ + + /* Set PD multi-function pins for UART0 RXD and TXD */ + SYS->GPD_MFPL &= ~(SYS_GPD_MFPL_PD0MFP_Msk | SYS_GPD_MFPL_PD1MFP_Msk); + SYS->GPD_MFPL |= (SYS_GPD_MFPL_PD0MFP_UART0_RXD | SYS_GPD_MFPL_PD1MFP_UART0_TXD); + + /* Configure the GPB0 - GPB3 ADC analog input pins. */ + SYS->GPB_MFPL &= ~(SYS_GPB_MFPL_PB0MFP_Msk | SYS_GPB_MFPL_PB1MFP_Msk | + SYS_GPB_MFPL_PB2MFP_Msk | SYS_GPB_MFPL_PB3MFP_Msk); + SYS->GPB_MFPL |= (SYS_GPB_MFPL_PB0MFP_EADC_CH0 | SYS_GPB_MFPL_PB1MFP_EADC_CH1 | + SYS_GPB_MFPL_PB2MFP_EADC_CH2 | SYS_GPB_MFPL_PB3MFP_EADC_CH3); + + /* Disable the GPB0 - GPB3 digital input path to avoid the leakage current. */ + GPIO_DISABLE_DIGITAL_PATH(PB, 0xF); + I2CInit(); + PWMInit(); + +} + +void UART0_Init() +{ + /*---------------------------------------------------------------------------------------------------------*/ + /* Init UART */ + /*---------------------------------------------------------------------------------------------------------*/ + /* Reset UART module */ + SYS_ResetModule(UART0_RST); + + /* Configure UART0 and set UART0 baud rate */ + UART_Open(UART0, 115200); +} +unsigned int x ; + +/*---------------------------------------------------------------------------------------------------------*/ +/* EADC function test */ +/*---------------------------------------------------------------------------------------------------------*/ +void EADC_FunctionTest() +{ + uint8_t u8Option, u32SAMPLECount = 0; + int32_t i32ConversionData[8] = {0}; + printf("\n"); + printf("+----------------------------------------------------------------------+\n"); + printf("| ADINT trigger mode test |\n"); + printf("+----------------------------------------------------------------------+\n"); + + printf("\nIn this test, software will get 2 cycles of conversion result from the specified channels.\n"); + /* Set the ADC internal sampling time, input mode as single-end and enable the A/D converter */ + EADC_Open(EADC, EADC_CTL_DIFFEN_SINGLE_END); + EADC_SetInternalSampleTime(EADC, 6); + + /* Configure the sample 4 module for analog input channel 0 and enable ADINT0 trigger source */ + EADC_ConfigSampleModule(EADC, 4, EADC_ADINT0_TRIGGER, 0); + /* Configure the sample 5 module for analog input channel 1 and enable ADINT0 trigger source */ + EADC_ConfigSampleModule(EADC, 5, EADC_ADINT0_TRIGGER, 1); + /* Configure the sample 6 module for analog input channel 2 and enable ADINT0 trigger source */ + EADC_ConfigSampleModule(EADC, 6, EADC_ADINT0_TRIGGER, 2); + /* Configure the sample 7 module for analog input channel 3 and enable ADINT0 trigger source */ + EADC_ConfigSampleModule(EADC, 7, EADC_ADINT0_TRIGGER, 3); + + /* Clear the A/D ADINT0 interrupt flag for safe */ + EADC_CLR_INT_FLAG(EADC, 0x1); + + /* Enable the sample module 7 interrupt */ + EADC_ENABLE_INT(EADC, 0x1);//Enable sample module A/D ADINT0 interrupt. + EADC_ENABLE_SAMPLE_MODULE_INT(EADC, 0, (0x1 << 7));//Enable sample module 7 interrupt. + //NVIC_EnableIRQ(ADC00_IRQn); + + while(1) + { + + /* Reset the ADC indicator and trigger sample module 7 to start A/D conversion */ + g_u32AdcIntFlag = 0; + g_u32COVNUMFlag = 0; + EADC_START_CONV(EADC, (0x1 << 7)); + + + /* Disable the sample module 7 interrupt */ + //EADC_DISABLE_SAMPLE_MODULE_INT(EADC, 0, (0x1 << 7)); + + /* Get the conversion result of the sample module */ + for(u32SAMPLECount = 0; u32SAMPLECount < 4; u32SAMPLECount++) + i32ConversionData[u32SAMPLECount] = EADC_GET_CONV_DATA(EADC, (u32SAMPLECount + 4)); + + x = EADC_GET_DATA_VALID_FLAG(EADC, 0xF0); + /* Wait conversion done */ + while(EADC_GET_DATA_VALID_FLAG(EADC, 0xF0) != 0xF0){ + x = EADC_GET_DATA_VALID_FLAG(EADC, 0xF0); + x++; + } + + + + /* Get the conversion result of the sample module */ + for(u32SAMPLECount = 4; u32SAMPLECount < 8; u32SAMPLECount++) + i32ConversionData[u32SAMPLECount] = EADC_GET_CONV_DATA(EADC, u32SAMPLECount); + char dat[36] = {0}; + sprintf(dat,"pwm freq:%d",EADC_GET_CONV_DATA(EADC, 4)/41); + PWM_ConfigOutputChannel(PWM0, 2, EADC_GET_CONV_DATA(EADC, 4)/41, 50); + + print_Line(0, dat); + for(g_u32COVNUMFlag = 0; (g_u32COVNUMFlag) < 8; g_u32COVNUMFlag++) + printf("Conversion result of channel %d: 0x%X (%d)\n", (g_u32COVNUMFlag % 4), i32ConversionData[g_u32COVNUMFlag], i32ConversionData[g_u32COVNUMFlag]); + + + } +} + + + +/** + * @brief PWM0 IRQ Handler + * + * @param None + * + * @return None + * + * @details ISR to handle PWM0 interrupt event + */ +void PWM0P0_IRQHandler(void) +{ + static uint32_t cnt; + static uint32_t out; + + // Channel 0 frequency is 100Hz, every 1 second enter this IRQ handler 100 times. + if(++cnt == 100) + { + if(out) + PWM_EnableOutput(PWM0, PWM_CH_0_MASK | PWM_CH_1_MASK | PWM_CH_2_MASK | PWM_CH_3_MASK); + else + PWM_DisableOutput(PWM0, PWM_CH_0_MASK | PWM_CH_1_MASK | PWM_CH_2_MASK | PWM_CH_3_MASK); + out ^= 1; + cnt = 0; + } + // Clear channel 0 period interrupt flag + PWM_ClearPeriodIntFlag(PWM0, 0); +} + +/*---------------------------------------------------------------------------------------------------------*/ +/* EADC interrupt handler */ +/*---------------------------------------------------------------------------------------------------------*/ +void ADC00_IRQHandler(void) +{ + g_u32AdcIntFlag = 1; + EADC_CLR_INT_FLAG(EADC, 0x1); /* Clear the A/D ADINT0 interrupt flag */ +} + +/*---------------------------------------------------------------------------------------------------------*/ +/* Main Function */ +/*---------------------------------------------------------------------------------------------------------*/ +int32_t main(void) +{ + + /* Unlock protected registers */ + SYS_UnlockReg(); + + /* Init System, IP clock and multi-function I/O */ + SYS_Init(); + + /* Lock protected registers */ + SYS_LockReg(); + + /* Init UART0 for printf */ + UART0_Init(); + + /*---------------------------------------------------------------------------------------------------------*/ + /* SAMPLE CODE */ + /*---------------------------------------------------------------------------------------------------------*/ + clear_LCD(); + Init_LCD(); + printf("\nSystem clock rate: %d Hz", SystemCoreClock); + + /* EADC function test */ + EADC_FunctionTest(); + + /* Reset EADC module */ + SYS_ResetModule(EADC_RST); + + /* Disable EADC IP clock */ + CLK_DisableModuleClock(EADC_MODULE); + + /* Disable External Interrupt */ + NVIC_DisableIRQ(ADC00_IRQn); + + printf("Exit EADC sample code\n"); + + while(1); + +} + diff --git a/stepper/ssd1306.c b/stepper/ssd1306.c new file mode 100644 index 0000000..2babf00 --- /dev/null +++ b/stepper/ssd1306.c @@ -0,0 +1,171 @@ +// +// LCD Driver: 0.96" OLED +// +// Interface: I2C +// pin1: Gnd +// pin2: Vcc +// pin3: SCL +// pin4: SDA +// pin5: OUT +// pin6: IN +// pin7: SCK +// pin8: CS + +#include +#include +#include +#include +#include "sys.h" +#include "gpio.h" +#include "i2c.h" +#include "ssd1306.h" +#include "codetab.h" + +void OLED_SingleWrite(unsigned char index, unsigned char data) +{ + I2C_START(LCD_I2C_PORT); //Start + I2C_WAIT_READY(LCD_I2C_PORT); + //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag + + I2C_SET_DATA(LCD_I2C_PORT, LCD_I2C_SLA); //send slave address + I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); + I2C_WAIT_READY(LCD_I2C_PORT); + //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag + + I2C_SET_DATA(LCD_I2C_PORT, index); //send index + I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); + I2C_WAIT_READY(LCD_I2C_PORT); + + //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag + + I2C_SET_DATA(LCD_I2C_PORT, data); //send Data + I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); + I2C_WAIT_READY(LCD_I2C_PORT); + //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag + + I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI|I2C_CTL_STO);//Stop +} + +unsigned char OLED_SingleRead(unsigned char index) +{ + unsigned char tmp; + I2C_START(LCD_I2C_PORT); //Start + I2C_WAIT_READY(LCD_I2C_PORT); + //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag + + I2C_SET_DATA(LCD_I2C_PORT, LCD_I2C_SLA); //send slave address+W + I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); + I2C_WAIT_READY(LCD_I2C_PORT); + + I2C_SET_DATA(LCD_I2C_PORT, index); //send index + I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); + I2C_WAIT_READY(LCD_I2C_PORT); + + + I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_STA | I2C_CTL_SI); //Start + I2C_WAIT_READY(LCD_I2C_PORT); + + + I2C_SET_DATA(LCD_I2C_PORT, (LCD_I2C_SLA+1)); //send slave address+R + I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); + I2C_WAIT_READY(LCD_I2C_PORT); + + I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); + I2C_WAIT_READY(LCD_I2C_PORT); + + tmp = I2C_GET_DATA(LCD_I2C_PORT); //read data + + I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI|I2C_CTL_STO);//Stop + return tmp; +} + +void oledWriteCommand(unsigned char OLED_Command) +{ + OLED_SingleWrite(0x00, OLED_Command); +} + +void oledWriteData(unsigned char OLED_Data) +{ + OLED_SingleWrite(0x40, OLED_Data); +} + +void Init_LCD(void) +{ + oledWriteCommand(0xae); //display off + oledWriteCommand(0x20); //Set Memory Addressing Mode + oledWriteCommand(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid + oledWriteCommand(0xb0); //Set Page Start Address for Page Addressing Mode,0-7 + oledWriteCommand(0xc8); //Set COM Output Scan Direction + oledWriteCommand(0x00);//---set low column address + oledWriteCommand(0x10);//---set high column address + oledWriteCommand(0x40);//--set start line address + oledWriteCommand(0x81);//--set contrast control register + oledWriteCommand(0x7f); + oledWriteCommand(0xa1);//--set segment re-map 0 to 127 + oledWriteCommand(0xa6);//--set normal display + oledWriteCommand(0xa8);//--set multiplex ratio(1 to 64) + oledWriteCommand(0x3F);// + oledWriteCommand(0xa4);//0xa4,Output follows RAM content;0xa5,Output ignores RAM content + oledWriteCommand(0xd3);//-set display offset + oledWriteCommand(0x00);//-not offset + oledWriteCommand(0xd5);//--set display clock divide ratio/oscillator frequency + oledWriteCommand(0xf0);//--set divide ratio + oledWriteCommand(0xd9);//--set pre-charge period + oledWriteCommand(0x22); // + oledWriteCommand(0xda);//--set com pins hardware configuration + oledWriteCommand(0x12); + oledWriteCommand(0xdb);//--set vcomh + oledWriteCommand(0x20);//0x20,0.77xVcc + oledWriteCommand(0x8d);//--set DC-DC enable + oledWriteCommand(0x14);// + oledWriteCommand(0xaf);//--turn on oled panel +} + +void oled_address(unsigned char column, unsigned char page) +{ + oledWriteCommand(0xb0+page); // set page address + oledWriteCommand(0x10 | ((column & 0xf0) >> 4)); // set column address MSB + oledWriteCommand(0x00 | (column & 0x0f) ); // set column address LSB +} + +void clear_LCD(void) +{ + int16_t x, Y; + for (Y=0;Y + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + Target 1 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 6 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 7 + + + + + + + + + + + NULink\Nu_Link.dll + + + + 0 + Nu_Link + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0M451_AP_256 -FL040000 -FS00 -FP0($$Device:M453VG6AE$Flash\M451_AP_256.FLM) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + + + 0 + 0 + 226 + 1 +
5146
+ 0 + 0 + 0 + 0 + 0 + 1 + RTE\Device\M453VG6AE\startup_M451Series.s + + \\stepper\RTE/Device/M453VG6AE/startup_M451Series.s\226 +
+ + 1 + 0 + 221 + 1 +
5144
+ 0 + 0 + 0 + 0 + 0 + 1 + RTE\Device\M453VG6AE\startup_M451Series.s + + \\stepper\RTE/Device/M453VG6AE/startup_M451Series.s\221 +
+ + 2 + 0 + 216 + 1 +
5142
+ 0 + 0 + 0 + 0 + 0 + 1 + RTE\Device\M453VG6AE\startup_M451Series.s + + \\stepper\RTE/Device/M453VG6AE/startup_M451Series.s\216 +
+ + 3 + 0 + 211 + 1 +
5140
+ 0 + 0 + 0 + 0 + 0 + 1 + RTE\Device\M453VG6AE\startup_M451Series.s + + \\stepper\RTE/Device/M453VG6AE/startup_M451Series.s\211 +
+ + 4 + 0 + 207 + 1 +
5138
+ 0 + 0 + 0 + 0 + 0 + 1 + RTE\Device\M453VG6AE\startup_M451Series.s + + \\stepper\RTE/Device/M453VG6AE/startup_M451Series.s\207 +
+ + 5 + 0 + 202 + 1 +
5136
+ 0 + 0 + 0 + 0 + 0 + 1 + RTE\Device\M453VG6AE\startup_M451Series.s + + \\stepper\RTE/Device/M453VG6AE/startup_M451Series.s\202 +
+ + 6 + 0 + 197 + 1 +
5134
+ 0 + 0 + 0 + 0 + 0 + 1 + RTE\Device\M453VG6AE\startup_M451Series.s + + \\stepper\RTE/Device/M453VG6AE/startup_M451Series.s\197 +
+ + 7 + 0 + 192 + 1 +
5132
+ 0 + 0 + 0 + 0 + 0 + 1 + RTE\Device\M453VG6AE\startup_M451Series.s + + \\stepper\RTE/Device/M453VG6AE/startup_M451Series.s\192 +
+ + 8 + 0 + 187 + 1 +
5130
+ 0 + 0 + 0 + 0 + 0 + 1 + RTE\Device\M453VG6AE\startup_M451Series.s + + \\stepper\RTE/Device/M453VG6AE/startup_M451Series.s\187 +
+ + 9 + 0 + 218 + 1 +
1212
+ 0 + 0 + 0 + 0 + 0 + 1 + .\main.cpp + + \\stepper\main.cpp\218 +
+ + 10 + 0 + 342 + 1 +
5148
+ 0 + 0 + 0 + 0 + 0 + 1 + RTE\Device\M453VG6AE\startup_M451Series.s + + \\stepper\RTE/Device/M453VG6AE/startup_M451Series.s\342 +
+ + 11 + 0 + 270 + 1 +
1412
+ 0 + 0 + 0 + 0 + 0 + 1 + .\main.cpp + + \\stepper\main.cpp\270 +
+
+ + + 0 + 1 + g_u32AdcIntFlag + + + 1 + 1 + x + + + 2 + 1 + i32ConversionData + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + System Viewer\CLK + 35904 + + + System Viewer\EADC + 35905 + + + System Viewer\I2C0 + 35901 + + + System Viewer\NVIC + 35902 + + + System Viewer\PWM0 + 35900 + + + System Viewer\SYS + 35903 + + +
+
+ + + Source Group 1 + 1 + 0 + 0 + 0 + + 1 + 1 + 8 + 0 + 0 + 0 + .\main.cpp + main.cpp + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\ssd1306.c + ssd1306.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + + diff --git a/stepper/stepper.uvprojx b/stepper/stepper.uvprojx new file mode 100644 index 0000000..bc583c4 --- /dev/null +++ b/stepper/stepper.uvprojx @@ -0,0 +1,523 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + M453VG6AE + Nuvoton + Nuvoton.NuMicro_DFP.1.2.0 + http://www.nuvoton.com/hq/enu/Documents/KEILSoftwarePack + IRAM(0x20000000,0x8000) IROM(0x00000000,0x40000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0M451_AP_256 -FS00 -FL040000 -FP0($$Device:M453VG6AE$Flash\M451_AP_256.FLM)) + 0 + $$Device:M453VG6AE$Device\M451\Include\M451Series.h + + + + + + + + + + $$Device:M453VG6AE$SVD\Nuvoton\M451_v1.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + stepper + 1 + 0 + 0 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DCM.DLL + -pCM4 + SARMCM3.DLL + + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x8000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Group 1 + + + main.cpp + 8 + .\main.cpp + + + ssd1306.c + 1 + .\ssd1306.c + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\M451MRE6AE\retarget.c + + + + + + RTE\Device\M451MRE6AE\startup_M451Series.s + + + + + + RTE\Device\M451MRE6AE\system_M451Series.c + + + + + + RTE\Device\M453VG6AE\retarget.c + + + + + + + + RTE\Device\M453VG6AE\startup_M451Series.s + + + + + + + + RTE\Device\M453VG6AE\system_M451Series.c + + + + + + + + + +