From 7aea7e6b247afb43cbde3b03ba733cfc3c62e909 Mon Sep 17 00:00:00 2001 From: a74589669 <290198252@qq.com> Date: Sun, 4 Aug 2019 00:00:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8E=A5=E6=94=B6=E6=9D=BF?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=20=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvoptx | 4 +- 9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvprojx | 1 - .../KEIL/RTE/_PWM_DeadZone/RTE_Components.h | 7 +- OLED/M451/OLED_TEST/OLED.uvguix.29019 | 108 +- OLED/M451/OLED_TEST/OLED.uvoptx | 4 +- OLED/M451/OLED_TEST/OLED.uvprojx | 1 - .../M451/OLED_TEST/RTE/_oled/RTE_Components.h | 9 +- roboticarm_controller/24l01.c | 267 ++++ roboticarm_controller/24l01.h | 64 + roboticarm_controller/EventRecorderStub.scvd | 9 + .../Listings/roboticarm_controller.map | 1206 +++++++++++++++++ .../Objects/roboticarm_controller.axf | Bin 0 -> 348968 bytes .../Objects/roboticarm_controller.lnp | 17 + .../Objects/roboticarm_controller.sct | 15 + .../RTE/Device/M453VG6AE/retarget.c | 678 +++++++++ .../RTE/Device/M453VG6AE/startup_M451Series.s | 376 +++++ .../RTE/Device/M453VG6AE/system_M451Series.c | 109 ++ .../RTE/_Target_1/RTE_Components.h | 25 + roboticarm_controller/global.h | 14 + roboticarm_controller/interrupt.c | 50 + roboticarm_controller/main.c | 124 ++ .../roboticarm_controller.uvoptx | 338 +++++ .../roboticarm_controller.uvprojx | 505 +++++++ roboticarm_controller/spi_hal.c | 135 ++ roboticarm_controller/spi_hal.h | 19 + stepper/Objects/stepper.axf | Bin 842968 -> 842968 bytes steppernew/Listings/steper.map | 285 ++-- steppernew/Objects/steper.axf | Bin 789420 -> 789416 bytes steppernew/main.cpp | 33 +- steppernew/steper.uvoptx | 51 +- 30 files changed, 4165 insertions(+), 289 deletions(-) create mode 100644 roboticarm_controller/24l01.c create mode 100644 roboticarm_controller/24l01.h create mode 100644 roboticarm_controller/EventRecorderStub.scvd create mode 100644 roboticarm_controller/Listings/roboticarm_controller.map create mode 100644 roboticarm_controller/Objects/roboticarm_controller.axf create mode 100644 roboticarm_controller/Objects/roboticarm_controller.lnp create mode 100644 roboticarm_controller/Objects/roboticarm_controller.sct create mode 100644 roboticarm_controller/RTE/Device/M453VG6AE/retarget.c create mode 100644 roboticarm_controller/RTE/Device/M453VG6AE/startup_M451Series.s create mode 100644 roboticarm_controller/RTE/Device/M453VG6AE/system_M451Series.c create mode 100644 roboticarm_controller/RTE/_Target_1/RTE_Components.h create mode 100644 roboticarm_controller/global.h create mode 100644 roboticarm_controller/interrupt.c create mode 100644 roboticarm_controller/main.c create mode 100644 roboticarm_controller/roboticarm_controller.uvoptx create mode 100644 roboticarm_controller/roboticarm_controller.uvprojx create mode 100644 roboticarm_controller/spi_hal.c create mode 100644 roboticarm_controller/spi_hal.h diff --git a/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvoptx b/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvoptx index a69f6e4..e95647b 100644 --- a/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvoptx +++ b/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvoptx @@ -77,7 +77,7 @@ 0 1 - 6 + 255 0 1 @@ -103,7 +103,7 @@ 1 0 0 - 7 + 8 diff --git a/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvprojx b/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvprojx index b378367..469e905 100644 --- a/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvprojx +++ b/9G/PWM_DeadZone/KEIL/PWM_DeadZone.uvprojx @@ -184,7 +184,6 @@ 0 0 2 - 0 0 0 8 diff --git a/9G/PWM_DeadZone/KEIL/RTE/_PWM_DeadZone/RTE_Components.h b/9G/PWM_DeadZone/KEIL/RTE/_PWM_DeadZone/RTE_Components.h index c6ca16c..0b0ed7c 100644 --- a/9G/PWM_DeadZone/KEIL/RTE/_PWM_DeadZone/RTE_Components.h +++ b/9G/PWM_DeadZone/KEIL/RTE/_PWM_DeadZone/RTE_Components.h @@ -1,6 +1,6 @@ /* - * Auto generated Run-Time-Environment Configuration File + * Auto generated Run-Time-Environment Component Configuration File * *** Do not modify ! *** * * Project: 'PWM_DeadZone' @@ -16,14 +16,9 @@ */ #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/OLED.uvguix.29019 b/OLED/M451/OLED_TEST/OLED.uvguix.29019 index 9d41042..0e14a5d 100644 --- a/OLED/M451/OLED_TEST/OLED.uvguix.29019 +++ b/OLED/M451/OLED_TEST/OLED.uvguix.29019 @@ -5,10 +5,6 @@
### uVision Project, (C) Keil Software
- - - - System Viewer\CLK @@ -52,7 +48,7 @@ 38003 Registers - 188 122 + 155 155 346 @@ -67,17 +63,11 @@ - - 35141 - Event Statistics - - 200 50 700 - 1506 Symbols - 106 106 106 + 85 85 85 1936 @@ -130,8 +120,8 @@ 2 3 - -32000 - -32040 + -1 + -1 -1 @@ -139,16 +129,16 @@ 0 - 1273 - 2567 - 1047 + 1266 + 2560 + 884 0 - 1497 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000E000000000000000100000034443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF37443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C737364313330362E630000000009737364313330362E6300000000FFDC7800FFFFFFFF37443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C737364313330362E680000000009737364313330362E6800000000BECEA100FFFFFFFF4D433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4E55433130305C4472697665725C72657461726765742E63000000000A72657461726765742E6300000000F0A0A100FFFFFFFF37443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C636F64657461622E680000000009636F64657461622E6800000000BCA8E100FFFFFFFF48433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4E55433130305C4472697665725C4932432E6800000000054932432E68000000009CC1B600FFFFFFFF4E433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C496E636C7564655C4D3435315365726965732E68000000000C4D3435315365726965732E6800000000F7B88600FFFFFFFF57443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C5254455C4465766963655C4D34353156473641455C737461727475705F4D3435315365726965732E730000000014737461727475705F4D3435315365726965732E7300000000D9ADC200FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C6932632E6300000000056932632E6300000000A5C2D700FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C6932632E6800000000056932632E6800000000B3A6BE00FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C7379732E6800000000057379732E6800000000EAD6A300FFFFFFFF4D443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C5254455C4465766963655C4D34353156473641455C72657461726765742E63000000000A72657461726765742E6300000000F6FA7D00FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C7379732E6300000000057379732E6300000000B5E99D00FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C636C6B2E680000000005636C6B2E68000000005FC3CF00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000440100008E000000000A0000E6020000 + 1327 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000C000000000000000100000034443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C6D61696E2E6300000000066D61696E2E6300000000FFDC7800FFFFFFFF37443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C737364313330362E630000000009737364313330362E6300000000BECEA100FFFFFFFF37443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C737364313330362E680000000009737364313330362E6800000000F0A0A100FFFFFFFF4D443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C5254455C4465766963655C4D34353156473641455C72657461726765742E63000000000A72657461726765742E6300000000BCA8E100FFFFFFFF37443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C636F64657461622E680000000009636F64657461622E68000000009CC1B600FFFFFFFF4B443A5C70726F6772616D735C6D646B5C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C4932432E6800000000054932432E6800000000F7B88600FFFFFFFF53443A5C70726F6772616D735C6D646B5C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C496E636C7564655C4D3435315365726965732E68000000000C4D3435315365726965732E6800000000D9ADC200FFFFFFFF57443A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C5254455C4465766963655C4D34353156473641455C737461727475705F4D3435315365726965732E730000000014737461727475705F4D3435315365726965732E7300000000A5C2D700FFFFFFFF4B443A5C70726F6772616D735C6D646B5C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C6932632E6300000000056932632E6300000000B3A6BE00FFFFFFFF4B443A5C70726F6772616D735C6D646B5C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C7379732E6800000000057379732E6800000000EAD6A300FFFFFFFF4B443A5C70726F6772616D735C6D646B5C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C7379732E6300000000057379732E6300000000F6FA7D00FFFFFFFF4B443A5C70726F6772616D735C6D646B5C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C636C6B2E680000000005636C6B2E6800000000B5E99D00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000440100008E000000000800000E020000 @@ -187,7 +177,7 @@ 0 16 - 03000000660000003D0100008E020000 + 03000000660000003D010000B6010000 16 @@ -207,7 +197,7 @@ 0 16 - 03000000660000003D0100008E020000 + 03000000660000003D010000B6010000 16 @@ -487,7 +477,7 @@ 0 16 - 03000000660000003D0100008E020000 + 03000000660000003D010000B6010000 16 @@ -507,7 +497,7 @@ 0 16 - 03000000660000003D0100008E020000 + 03000000660000003D010000B6010000 16 @@ -527,7 +517,7 @@ 0 16 - 03000000C2020000FD090000CD030000 + 03000000EA010000FD070000F5020000 16 @@ -567,7 +557,7 @@ 0 16 - 03000000C2020000FD090000CD030000 + 03000000EA010000FD090000F5020000 16 @@ -1207,7 +1197,7 @@ 0 16 - 03000000C2020000FD090000CD030000 + 03000000EA010000FD070000F5020000 16 @@ -1227,7 +1217,7 @@ 0 16 - 03000000C2020000FD090000CD030000 + 03000000EA010000FD090000F5020000 16 @@ -1287,7 +1277,7 @@ 0 16 - 03000000C2020000FD090000CD030000 + 03000000EA010000FD090000F5020000 16 @@ -1307,7 +1297,7 @@ 0 16 - 03000000C2020000FD090000CD030000 + 03000000EA010000FD090000F5020000 16 @@ -1767,7 +1757,7 @@ 0 16 - 00000000E6030000000A0000F9030000 + 000000000E0300000008000021030000 16 @@ -1836,14 +1826,14 @@ 3337 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF44010000DF00000070070000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000440100008E000000700700001E010000440100004F00000070070000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2C0600004F0000003006000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000300600008E0000007007000068020000300600004F000000700700002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F00000044010000A702000001000000020000100400000001000000C2FEFFFFB7080000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000008E00000040010000E6020000000000004F00000040010000A70200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000700700001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000005802000070070000FC020000000000001902000070070000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB803000019020000BC030000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000A7020000000A0000AB0200000100000001000010040000000100000084FDFFFF1001000000000000000000000000000001000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000000000000EA020000000A00002504000000000000AB020000000A0000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF1346696E6420416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF44010000DF00000070070000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000440100008E000000700700001E010000440100004F00000070070000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2C0600004F0000003006000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000300600008E0000007007000068020000300600004F000000700700002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F00000044010000CF01000001000000020000100400000001000000C2FEFFFFB7080000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000008E00000040010000E6020000000000004F00000040010000CF0100000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000700700001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000005802000070070000FC020000000000001902000070070000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB803000019020000BC030000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000CF01000000080000D30100000100000001000010040000000100000084FDFFFF1001000000000000000000000000000001000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000000000000EA020000000A00002504000000000000D3010000000800000E0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF1346696E6420416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File - 2574 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001041444330305F49525148616E646C6572960000000000000001001041444330305F49525148616E646C657200000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65EE010000 + 2782 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000350423996000000000000001300035042390573686F7274046D6F64650272780852435F416E616C790B5F675F496E69745F7379730853454D49484F53541544454255475F454E41424C455F53454D49484F535404415558310774785F646174610550422C20320A436F6D70617261746F720F675F753332416463496E74466C61670465787465036578740265780249501150574D3050305F49525148616E646C65721041444330305F49525148616E646C657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65EE010000 1423 @@ -1875,7 +1865,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -1888,8 +1878,8 @@ 0 - 2560 - 1080 + 2048 + 864 @@ -3644,7 +3634,7 @@ .\main.c 0 - 120 + 51 131 1 @@ -3669,10 +3659,10 @@ 0 - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\NUC100\Driver\retarget.c + RTE\Device\M451VG6AE\retarget.c 0 - 1 - 1 + 487 + 493 1 0 @@ -3680,23 +3670,23 @@ .\codetab.h 2 - 181 + 194 212 1 0 - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\NUC100\Driver\I2C.h + D:\programs\mdk\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\I2C.h 0 - 65 - 76 + 61 + 77 1 0 - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Include\M451Series.h + D:\programs\mdk\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Include\M451Series.h 0 5016 5027 @@ -3714,7 +3704,7 @@ 0 - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\i2c.c + D:\programs\mdk\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\i2c.c 16 100 110 @@ -3723,16 +3713,7 @@ 0 - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\i2c.h - 0 - 61 - 77 - 1 - - 0 - - - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\sys.h + D:\programs\mdk\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\sys.h 16 38 47 @@ -3741,25 +3722,16 @@ 0 - RTE\Device\M451VG6AE\retarget.c + D:\programs\mdk\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\sys.c 0 - 487 - 493 - 1 - - 0 - - - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\sys.c - 0 - 123 + 136 154 1 0 - C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\clk.h + D:\programs\mdk\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\clk.h 0 258 269 diff --git a/OLED/M451/OLED_TEST/OLED.uvoptx b/OLED/M451/OLED_TEST/OLED.uvoptx index bfc794e..c17633c 100644 --- a/OLED/M451/OLED_TEST/OLED.uvoptx +++ b/OLED/M451/OLED_TEST/OLED.uvoptx @@ -77,7 +77,7 @@ 0 1 - 6 + 255 0 1 @@ -103,7 +103,7 @@ 1 0 0 - 7 + 8 diff --git a/OLED/M451/OLED_TEST/OLED.uvprojx b/OLED/M451/OLED_TEST/OLED.uvprojx index bba153a..42bad52 100644 --- a/OLED/M451/OLED_TEST/OLED.uvprojx +++ b/OLED/M451/OLED_TEST/OLED.uvprojx @@ -184,7 +184,6 @@ 0 0 2 - 0 0 0 8 diff --git a/OLED/M451/OLED_TEST/RTE/_oled/RTE_Components.h b/OLED/M451/OLED_TEST/RTE/_oled/RTE_Components.h index 7c80aa7..30639e8 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 Configuration File + * Auto generated Run-Time-Environment Component Configuration File * *** Do not modify ! *** * * Project: 'OLED' @@ -16,18 +16,11 @@ */ #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/roboticarm_controller/24l01.c b/roboticarm_controller/24l01.c new file mode 100644 index 0000000..c9111f7 --- /dev/null +++ b/roboticarm_controller/24l01.c @@ -0,0 +1,267 @@ +#include "M451Series.h" +#include "24l01.h" +#include "spi_hal.h" + + +uchar Recv_Buf[32] = {0}; +uchar Send_Buf[32] = {0}; +char rfch = 45; +unsigned short RxCnt = 0; +unsigned char TxAddr[]={0x11,0x22,0x33,0x44,0x55};//???? +unsigned char RxAddr[]={0x11,0x22,0x33,0x44,0x55};//???? + + + +enum NRF_Mode Curr_Mode = NRF_RX_Mode; +void delay_s() +{ + int z=0; + for(z=0;z<250;z++) + {} +} + +void delay_mss() +{ + int z = 0; + for(z=0;z<5;z++) + { + delay_s(); + } +} +void NRF_Init(void) +{ + +} + +void NRF_SetUpInterrupt(void) +{ + GPIO_SetMode(PB,BIT15,GPIO_MODE_INPUT); + GPIO_EnableInt(PB,15,GPIO_INT_FALLING); + NVIC->ISER[0]|=(0X01<<2); + +} +int gRecvPkg = 0; + + +//½ÓÊÕ»òÕß·¢ËÍÖÐ¶Ï +void EINT0_IRQHandler() +{ + char trycnt = 5; + gRecvPkg ++; + delay_s(); + switch(Curr_Mode){ + //if now in rx mode mean data been receieved + case NRF_RX_Mode: + //PB9 = 0; + while(trycnt > 0) + { + if(NRF24L01_RxPacket(Recv_Buf) == 0) + { + NRFSetTxMode(); + break; + } + trycnt --; + } + //nrf_write(FLUSH_RX,0xff);//Çå³ýRX FIFO¼Ä´æÆ÷ + //PB9 = 1; + + //read the buffer + break; + //if now in tx mode mean data been sent + case NRF_TX_Mode: + break; + + } + PB->INTSRC |= BIT14; + +} + +void RX_Mode(void) +{ + char sta; + sta = nrf_read(STATUS); + nrf_write(W_REGISTER + STATUS,sta); + + nrf_write(FLUSH_TX,0xff); + nrf_write(FLUSH_RX,0xff); + PB13=0; + Curr_Mode = NRF_RX_Mode; + delay_s(); + nrf_writebuf(W_REGISTER + TX_ADDR,(uchar*)TxAddr,5);//дTX½ÚµãµØÖ· + nrf_writebuf(W_REGISTER + RX_ADDR_P0,(uchar*)RxAddr,5); //ÉèÖÃTX½ÚµãµØÖ·,Ö÷ҪΪÁËʹÄÜACK + nrf_write(W_REGISTER + SETUP_RETR,0x11);//ÉèÖÃ×Ô¶¯ÖØ·¢¼ä¸ôʱ¼ä:500us + 86us;×î´ó×Ô¶¯ÖØ·¢´ÎÊý:10´Î + + nrf_write(W_REGISTER + EN_AA, 0x01); // Enable Auto.Ack:Pipe0 + nrf_write(W_REGISTER + EN_RXADDR, 0x01); // Enable Pipe0 + nrf_write(W_REGISTER + RF_CH, rfch); // Select RF channel 40 + nrf_write(W_REGISTER + RX_PW_P0,RX_DATA_WITDH); + //nrf_write(W_REGISTER+FEATURE, 0x20); + nrf_write(W_REGISTER + RF_SETUP, 0x0f); + nrf_write(W_REGISTER + CONFIG, 0x2f); // Set PWR_UP bit, enable CRC(2 bytes) + + delay_s(); + + PB13=1; + +} +void NRFSwitchMode(char mode) +{ + static char ifinit = 0; + + //TX Mode + if(mode == 1) + { + if (0 == ifinit) + { + NRFSetTxMode(); + ifinit = 1; + return; + } + PB9 = 0; + nrf_write(W_REGISTER + STATUS,0xff); //ʹÄÜͨµÀ0µÄ×Ô¶¯Ó¦´ð + nrf_write(FLUSH_TX,0); //ʹÄÜͨµÀ0µÄ×Ô¶¯Ó¦´ð + nrf_write(W_REGISTER + CONFIG,0xfe); //ʹÄÜͨµÀ0µÄ×Ô¶¯Ó¦´ð + delay_s(); + + PB9 = 1; + } + else + { + PB9 = 0; + nrf_write(W_REGISTER+STATUS,0xff); //ʹÄÜͨµÀ0µÄ×Ô¶¯Ó¦´ð + nrf_write(FLUSH_TX,0); //ʹÄÜͨµÀ0µÄ×Ô¶¯Ó¦´ð + nrf_write(W_REGISTER + CONFIG,0xff); //ʹÄÜͨµÀ0µÄ×Ô¶¯Ó¦´ð + delay_s(); + + PB9 = 1; + } +} +void NRFSetTxMode() +{ + char sta; + sta = nrf_read(STATUS); + nrf_write(W_REGISTER + STATUS,sta); + + nrf_write(FLUSH_TX,0xff); + nrf_write(FLUSH_RX,0xff); + PB14 = 0; + Curr_Mode = NRF_TX_Mode; + delay_s(); + nrf_writebuf(W_REGISTER+TX_ADDR,(uchar*)TxAddr,5);//дTX½ÚµãµØÖ· + nrf_writebuf(W_REGISTER+RX_ADDR_P0,(uchar*)RxAddr,5); //ÉèÖÃTX½ÚµãµØÖ·,Ö÷ҪΪÁËʹÄÜACK + + nrf_write(W_REGISTER+EN_AA,0x01); //ʹÄÜͨµÀ0µÄ×Ô¶¯Ó¦´ð + nrf_write(W_REGISTER+EN_RXADDR,0x01); //ʹÄÜͨµÀ0µÄ½ÓÊÕµØÖ· + nrf_write(W_REGISTER+SETUP_RETR,0x1a);//ÉèÖÃ×Ô¶¯ÖØ·¢¼ä¸ôʱ¼ä:500us + 86us;×î´ó×Ô¶¯ÖØ·¢´ÎÊý:10´Î + nrf_write(W_REGISTER+RF_CH,rfch); //ÉèÖÃRFͨµÀΪ40 + nrf_write(W_REGISTER+RF_SETUP,0x0f); //ÉèÖÃTX·¢Éä²ÎÊý,0dbÔöÒæ,2Mbps,µÍÔëÉùÔöÒ濪Æô + nrf_write(W_REGISTER+CONFIG,0x0e); //ÅäÖûù±¾¹¤×÷ģʽµÄ²ÎÊý;PWR_UP,EN_CRC,16BIT_CRC,½ÓÊÕģʽ,¿ªÆôËùÓÐÖÐ¶Ï + delay_s(); + PB14 = 1; +} + +//Æô¶¯NRF24L01·¢ËÍÒ»´ÎÊý¾Ý +//txbuf:´ý·¢ËÍÊý¾ÝÊ×µØÖ· +//·µ»ØÖµ:·¢ËÍÍê³É×´¿ö + +unsigned char NRF24L01_TxPacket(unsigned char *txbuf) +{ + unsigned char sta; + PB9=0; + delay_s(); + nrf_writebuf(W_TX_PAYLOAD,txbuf,TX_DATA_WITDH);//дÊý¾Ýµ½TX BUF 32¸ö×Ö½Ú + PB9=1; + sta=nrf_read(STATUS); //¶Áȡ״̬¼Ä´æÆ÷µÄÖµ + nrf_write(W_REGISTER+STATUS,sta); //Çå³ýTX_DS»òMAX_RTÖжϱêÖ¾ + if(sta&0x10)//´ïµ½×î´óÖØ·¢´ÎÊý + { + nrf_wf(FLUSH_TX);//Çå³ýTX FIFO¼Ä´æÆ÷ + nrf_write(W_REGISTER+STATUS,sta); //Çå³ýTX_DS»òMAX_RTÖжϱêÖ¾ + sta=nrf_read(STATUS); //¶Áȡ״̬¼Ä´æÆ÷µÄÖµ + + return 0x10; + } + if(sta&0x20)//·¢ËÍÍê³É + { + return 0; + } + return 0xff;//ÆäËûÔ­Òò·¢ËÍʧ°Ü +} + +unsigned char NrfDump() +{ + char ret = 0; + ret=nrf_read(EN_AA); + delay_s(); + ret=nrf_read(EN_RXADDR); + delay_s(); + ret=nrf_read(RF_CH); + delay_s(); + ret=nrf_read(RX_PW_P0); + delay_s(); + ret=nrf_read(RF_SETUP); + delay_s(); + ret=nrf_read(CONFIG); + delay_s(); + ret=nrf_read(CD); + delay_s(); + ret=nrf_read(STATUS); + delay_s(); + return ret; +} + +unsigned char NRF24L01_Read_Buf(unsigned char reg,unsigned char *pBuf,unsigned char len) +{ + unsigned char status,u8_ctr; + spi_enable(); + status=spi_send(reg); + for(u8_ctr=0;u8_ctr + + + + + + + + diff --git a/roboticarm_controller/Listings/roboticarm_controller.map b/roboticarm_controller/Listings/roboticarm_controller.map new file mode 100644 index 0000000..28f1d6d --- /dev/null +++ b/roboticarm_controller/Listings/roboticarm_controller.map @@ -0,0 +1,1206 @@ +Component: ARM Compiler 5.06 update 6 (build 750) Tool: armlink [4d35ed] + +============================================================================== + +Section Cross References + + main.o(i.NRF24L01Init) refers to clk.o(i.CLK_EnableModuleClock) for CLK_EnableModuleClock + main.o(i.NRF24L01Init) refers to sys.o(i.SYS_ResetModule) for SYS_ResetModule + main.o(i.NRF24L01Init) refers to clk.o(i.CLK_SetModuleClock) for CLK_SetModuleClock + main.o(i.PWMInit) refers to clk.o(i.CLK_EnableModuleClock) for CLK_EnableModuleClock + main.o(i.PWMInit) refers to sys.o(i.SYS_ResetModule) for SYS_ResetModule + main.o(i.PWMInit) refers to clk.o(i.CLK_SetModuleClock) for CLK_SetModuleClock + main.o(i.PWMInit) refers to pwm.o(i.PWM_ConfigOutputChannel) for PWM_ConfigOutputChannel + main.o(i.PWMInit) refers to pwm.o(i.PWM_EnableOutput) for PWM_EnableOutput + main.o(i.PWMInit) refers to pwm.o(i.PWM_EnablePeriodInt) for PWM_EnablePeriodInt + main.o(i.PWMInit) refers to main.o(i.__NVIC_EnableIRQ) for __NVIC_EnableIRQ + main.o(i.PWMInit) refers to pwm.o(i.PWM_Start) for PWM_Start + main.o(i.ParsePackage) refers to main.o(.data) for Axis1 + main.o(i.main) refers to rt_memclr_w.o(.text) for __aeabi_memclr4 + main.o(i.main) refers to gpio.o(i.GPIO_SetMode) for GPIO_SetMode + main.o(i.main) refers to spi_hal.o(i.Spi_init) for Spi_init + main.o(i.main) refers to 24l01.o(i.RX_Mode) for RX_Mode + main.o(i.main) refers to main.o(i.PWMInit) for PWMInit + main.o(i.main) refers to 24l01.o(i.NRF24L01_RxPacket) for NRF24L01_RxPacket + main.o(i.main) refers to main.o(i.ParsePackage) for ParsePackage + 24l01.o(i.EINT0_IRQHandler) refers to 24l01.o(i.delay_s) for delay_s + 24l01.o(i.EINT0_IRQHandler) refers to 24l01.o(i.NRF24L01_RxPacket) for NRF24L01_RxPacket + 24l01.o(i.EINT0_IRQHandler) refers to 24l01.o(i.NRFSetTxMode) for NRFSetTxMode + 24l01.o(i.EINT0_IRQHandler) refers to 24l01.o(.data) for gRecvPkg + 24l01.o(i.EINT0_IRQHandler) refers to 24l01.o(.bss) for Recv_Buf + 24l01.o(i.NRF24L01_CD_Detect) refers to spi_hal.o(i.nrf_read) for nrf_read + 24l01.o(i.NRF24L01_Monitor) refers to spi_hal.o(i.nrf_read) for nrf_read + 24l01.o(i.NRF24L01_Monitor) refers to spi_hal.o(i.nrf_write) for nrf_write + 24l01.o(i.NRF24L01_Read_Buf) refers to spi_hal.o(i.spi_enable) for spi_enable + 24l01.o(i.NRF24L01_Read_Buf) refers to spi_hal.o(i.spi_send) for spi_send + 24l01.o(i.NRF24L01_Read_Buf) refers to spi_hal.o(i.spi_read) for spi_read + 24l01.o(i.NRF24L01_Read_Buf) refers to spi_hal.o(i.spi_disable) for spi_disable + 24l01.o(i.NRF24L01_RxPacket) refers to spi_hal.o(i.nrf_read) for nrf_read + 24l01.o(i.NRF24L01_RxPacket) refers to 24l01.o(i.NRF24L01_Read_Buf) for NRF24L01_Read_Buf + 24l01.o(i.NRF24L01_RxPacket) refers to spi_hal.o(i.nrf_write) for nrf_write + 24l01.o(i.NRF24L01_RxPacket) refers to 24l01.o(.data) for RxCnt + 24l01.o(i.NRF24L01_TxPacket) refers to 24l01.o(i.delay_s) for delay_s + 24l01.o(i.NRF24L01_TxPacket) refers to spi_hal.o(i.nrf_writebuf) for nrf_writebuf + 24l01.o(i.NRF24L01_TxPacket) refers to spi_hal.o(i.nrf_read) for nrf_read + 24l01.o(i.NRF24L01_TxPacket) refers to spi_hal.o(i.nrf_write) for nrf_write + 24l01.o(i.NRF24L01_TxPacket) refers to spi_hal.o(i.nrf_wf) for nrf_wf + 24l01.o(i.NRFSetTxMode) refers to spi_hal.o(i.nrf_read) for nrf_read + 24l01.o(i.NRFSetTxMode) refers to spi_hal.o(i.nrf_write) for nrf_write + 24l01.o(i.NRFSetTxMode) refers to 24l01.o(i.delay_s) for delay_s + 24l01.o(i.NRFSetTxMode) refers to spi_hal.o(i.nrf_writebuf) for nrf_writebuf + 24l01.o(i.NRFSetTxMode) refers to 24l01.o(.data) for Curr_Mode + 24l01.o(i.NRFSwitchMode) refers to 24l01.o(i.NRFSetTxMode) for NRFSetTxMode + 24l01.o(i.NRFSwitchMode) refers to spi_hal.o(i.nrf_write) for nrf_write + 24l01.o(i.NRFSwitchMode) refers to 24l01.o(i.delay_s) for delay_s + 24l01.o(i.NRFSwitchMode) refers to 24l01.o(.data) for ifinit + 24l01.o(i.NRF_SetUpInterrupt) refers to gpio.o(i.GPIO_SetMode) for GPIO_SetMode + 24l01.o(i.NRF_SetUpInterrupt) refers to gpio.o(i.GPIO_EnableInt) for GPIO_EnableInt + 24l01.o(i.NrfDump) refers to spi_hal.o(i.nrf_read) for nrf_read + 24l01.o(i.NrfDump) refers to 24l01.o(i.delay_s) for delay_s + 24l01.o(i.RX_Mode) refers to spi_hal.o(i.nrf_read) for nrf_read + 24l01.o(i.RX_Mode) refers to spi_hal.o(i.nrf_write) for nrf_write + 24l01.o(i.RX_Mode) refers to 24l01.o(i.delay_s) for delay_s + 24l01.o(i.RX_Mode) refers to spi_hal.o(i.nrf_writebuf) for nrf_writebuf + 24l01.o(i.RX_Mode) refers to 24l01.o(.data) for Curr_Mode + 24l01.o(i.delay_mss) refers to 24l01.o(i.delay_s) for delay_s + spi_hal.o(i.NRFWriteTxDate) refers to spi_hal.o(i.spi_send) for spi_send + spi_hal.o(i.Spi_init) refers to gpio.o(i.GPIO_SetMode) for GPIO_SetMode + spi_hal.o(i.Spi_init) refers to clk.o(i.CLK_EnableModuleClock) for CLK_EnableModuleClock + spi_hal.o(i.Spi_init) refers to sys.o(i.SYS_ResetModule) for SYS_ResetModule + spi_hal.o(i.Spi_init) refers to clk.o(i.CLK_SetModuleClock) for CLK_SetModuleClock + spi_hal.o(i.Spi_init) refers to spi.o(i.SPI_Open) for SPI_Open + spi_hal.o(i.Spi_init) refers to spi.o(i.SPI_DisableAutoSS) for SPI_DisableAutoSS + spi_hal.o(i.nrf_read) refers to spi_hal.o(i.spi_enable) for spi_enable + spi_hal.o(i.nrf_read) refers to spi_hal.o(i.spi_send) for spi_send + spi_hal.o(i.nrf_read) refers to spi_hal.o(i.spi_read) for spi_read + spi_hal.o(i.nrf_read) refers to spi_hal.o(i.spi_disable) for spi_disable + spi_hal.o(i.nrf_wf) refers to spi_hal.o(i.spi_enable) for spi_enable + spi_hal.o(i.nrf_wf) refers to spi_hal.o(i.spi_send) for spi_send + spi_hal.o(i.nrf_wf) refers to spi_hal.o(i.spi_disable) for spi_disable + spi_hal.o(i.nrf_write) refers to spi_hal.o(i.spi_enable) for spi_enable + spi_hal.o(i.nrf_write) refers to spi_hal.o(i.spi_send) for spi_send + spi_hal.o(i.nrf_write) refers to spi_hal.o(i.spi_disable) for spi_disable + spi_hal.o(i.nrf_writebuf) refers to spi_hal.o(i.spi_enable) for spi_enable + spi_hal.o(i.nrf_writebuf) refers to spi_hal.o(i.spi_send) for spi_send + spi_hal.o(i.nrf_writebuf) refers to spi_hal.o(i.spi_disable) for spi_disable + spi_hal.o(i.spi_disable) refers to spi_hal.o(i.delayAny) for delayAny + spi_hal.o(i.spi_enable) refers to spi_hal.o(i.delayAny) for delayAny + interrupt.o(i.PWM0P0_IRQHandler) refers to pwm.o(i.PWM_EnableOutput) for PWM_EnableOutput + interrupt.o(i.PWM0P0_IRQHandler) refers to pwm.o(i.PWM_DisableOutput) for PWM_DisableOutput + interrupt.o(i.PWM0P0_IRQHandler) refers to pwm.o(i.PWM_ClearPeriodIntFlag) for PWM_ClearPeriodIntFlag + interrupt.o(i.PWM0P0_IRQHandler) refers to main.o(.data) for Axis1 + interrupt.o(i.PWM1P0_IRQHandler) refers to pwm.o(i.PWM_EnableOutput) for PWM_EnableOutput + interrupt.o(i.PWM1P0_IRQHandler) refers to pwm.o(i.PWM_DisableOutput) for PWM_DisableOutput + interrupt.o(i.PWM1P0_IRQHandler) refers to pwm.o(i.PWM_ClearPeriodIntFlag) for PWM_ClearPeriodIntFlag + interrupt.o(i.PWM1P0_IRQHandler) refers to main.o(.data) for Axis5 + 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 + clk.o(i.CLK_EnablePLL) refers to clk.o(i.CLK_DisablePLL) for CLK_DisablePLL + clk.o(i.CLK_EnablePLL) refers to clk.o(i.CLK_WaitClockReady) for CLK_WaitClockReady + clk.o(i.CLK_EnablePLL) refers to clk.o(i.CLK_GetPLLClockFreq) for CLK_GetPLLClockFreq + clk.o(i.CLK_GetCPUFreq) refers to system_m451series.o(i.SystemCoreClockUpdate) for SystemCoreClockUpdate + clk.o(i.CLK_GetCPUFreq) refers to system_m451series.o(.data) for SystemCoreClock + clk.o(i.CLK_GetHCLKFreq) refers to system_m451series.o(i.SystemCoreClockUpdate) for SystemCoreClockUpdate + clk.o(i.CLK_GetHCLKFreq) refers to system_m451series.o(.data) for SystemCoreClock + clk.o(i.CLK_GetPCLK0Freq) refers to system_m451series.o(i.SystemCoreClockUpdate) for SystemCoreClockUpdate + clk.o(i.CLK_GetPCLK0Freq) refers to system_m451series.o(.data) for SystemCoreClock + clk.o(i.CLK_GetPCLK1Freq) refers to system_m451series.o(i.SystemCoreClockUpdate) for SystemCoreClockUpdate + clk.o(i.CLK_GetPCLK1Freq) refers to system_m451series.o(.data) for SystemCoreClock + clk.o(i.CLK_SetCoreClock) refers to clk.o(i.CLK_WaitClockReady) for CLK_WaitClockReady + clk.o(i.CLK_SetCoreClock) refers to clk.o(i.CLK_EnablePLL) for CLK_EnablePLL + clk.o(i.CLK_SetCoreClock) refers to clk.o(i.CLK_SetHCLK) for CLK_SetHCLK + clk.o(i.CLK_SetHCLK) refers to clk.o(i.CLK_WaitClockReady) for CLK_WaitClockReady + clk.o(i.CLK_SetHCLK) refers to system_m451series.o(i.SystemCoreClockUpdate) for SystemCoreClockUpdate + pwm.o(i.PWM_ConfigCaptureChannel) refers to pwm.o(i.CLK_GetPLLClockFreq) for CLK_GetPLLClockFreq + pwm.o(i.PWM_ConfigCaptureChannel) refers to system_m451series.o(i.SystemCoreClockUpdate) for SystemCoreClockUpdate + pwm.o(i.PWM_ConfigCaptureChannel) refers to system_m451series.o(.data) for SystemCoreClock + pwm.o(i.PWM_ConfigOutputChannel) refers to pwm.o(i.CLK_GetPLLClockFreq) for CLK_GetPLLClockFreq + pwm.o(i.PWM_ConfigOutputChannel) refers to system_m451series.o(i.SystemCoreClockUpdate) for SystemCoreClockUpdate + pwm.o(i.PWM_ConfigOutputChannel) refers to system_m451series.o(.data) for SystemCoreClock + spi.o(i.I2S_EnableMCLK) refers to spi.o(i.I2S_GetSourceClockFreq) for I2S_GetSourceClockFreq + spi.o(i.I2S_GetSourceClockFreq) refers to spi.o(i.CLK_GetPLLClockFreq) for CLK_GetPLLClockFreq + spi.o(i.I2S_GetSourceClockFreq) refers to clk.o(i.CLK_GetHCLKFreq) for CLK_GetHCLKFreq + spi.o(i.I2S_Open) refers to spi.o(i.I2S_GetSourceClockFreq) for I2S_GetSourceClockFreq + spi.o(i.I2S_Open) refers to clk.o(i.CLK_GetHCLKFreq) for CLK_GetHCLKFreq + spi.o(i.SPI_GetBusClock) refers to clk.o(i.CLK_GetHCLKFreq) for CLK_GetHCLKFreq + spi.o(i.SPI_GetBusClock) refers to spi.o(i.CLK_GetPLLClockFreq) for CLK_GetPLLClockFreq + spi.o(i.SPI_Open) refers to clk.o(i.CLK_GetHCLKFreq) for CLK_GetHCLKFreq + spi.o(i.SPI_Open) refers to spi.o(i.CLK_GetPLLClockFreq) for CLK_GetPLLClockFreq + spi.o(i.SPI_SetBusClock) refers to clk.o(i.CLK_GetHCLKFreq) for CLK_GetHCLKFreq + spi.o(i.SPI_SetBusClock) refers to spi.o(i.CLK_GetPLLClockFreq) for CLK_GetPLLClockFreq + 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 24l01.o(i.EINT0_IRQHandler) for EINT0_IRQHandler + startup_m451series.o(RESET) refers to interrupt.o(i.PWM0P0_IRQHandler) for PWM0P0_IRQHandler + startup_m451series.o(RESET) refers to interrupt.o(i.PWM1P0_IRQHandler) for PWM1P0_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 + noretval__2printf.o(.text) refers to retarget.o(.data) for __stdout + __printf.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + _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_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_file.o(.text) refers to _printf_char_common.o(.text) for _printf_char_common + _printf_char_file.o(.text) refers to retarget.o(i.ferror) for ferror + _printf_char_file.o(.text) refers to retarget.o(i.fputc) for fputc + __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(i.main) 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 + _printf_char_common.o(.text) refers to __printf_wp.o(.text) for __printf + 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(i._ttywrch) 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(i.NRF24L01Init), (84 bytes). + Removing main.o(i.delay_1s), (44 bytes). + Removing 24l01.o(.rev16_text), (4 bytes). + Removing 24l01.o(.revsh_text), (4 bytes). + Removing 24l01.o(.rrx_text), (6 bytes). + Removing 24l01.o(i.NRF24L01_CD_Detect), (40 bytes). + Removing 24l01.o(i.NRF24L01_Monitor), (42 bytes). + Removing 24l01.o(i.NRF24L01_TxPacket), (96 bytes). + Removing 24l01.o(i.NRFSwitchMode), (120 bytes). + Removing 24l01.o(i.NRF_Init), (2 bytes). + Removing 24l01.o(i.NRF_SetUpInterrupt), (52 bytes). + Removing 24l01.o(i.NrfDump), (104 bytes). + Removing 24l01.o(i.delay_mss), (20 bytes). + Removing spi_hal.o(.rev16_text), (4 bytes). + Removing spi_hal.o(.revsh_text), (4 bytes). + Removing spi_hal.o(.rrx_text), (6 bytes). + Removing spi_hal.o(i.NRFWriteTxDate), (38 bytes). + Removing spi_hal.o(i.nrf_wf), (22 bytes). + Removing interrupt.o(.rev16_text), (4 bytes). + Removing interrupt.o(.revsh_text), (4 bytes). + Removing interrupt.o(.rrx_text), (6 bytes). + Removing interrupt.o(.data), (4 bytes). + Removing clk.o(.rev16_text), (4 bytes). + Removing clk.o(.revsh_text), (4 bytes). + Removing clk.o(.rrx_text), (6 bytes). + Removing clk.o(i.CLK_DisableCKO), (16 bytes). + Removing clk.o(i.CLK_DisableModuleClock), (44 bytes). + Removing clk.o(i.CLK_DisablePLL), (24 bytes). + Removing clk.o(i.CLK_DisableSysTick), (10 bytes). + Removing clk.o(i.CLK_DisableXtalRC), (20 bytes). + Removing clk.o(i.CLK_EnableCKO), (48 bytes). + Removing clk.o(i.CLK_EnablePLL), (376 bytes). + Removing clk.o(i.CLK_EnableSysTick), (72 bytes). + Removing clk.o(i.CLK_EnableXtalRC), (20 bytes). + Removing clk.o(i.CLK_GetCPUFreq), (16 bytes). + Removing clk.o(i.CLK_GetHXTFreq), (28 bytes). + Removing clk.o(i.CLK_GetLXTFreq), (24 bytes). + Removing clk.o(i.CLK_GetPCLK0Freq), (40 bytes). + Removing clk.o(i.CLK_GetPCLK1Freq), (40 bytes). + Removing clk.o(i.CLK_GetPLLClockFreq), (100 bytes). + Removing clk.o(i.CLK_Idle), (40 bytes). + Removing clk.o(i.CLK_PowerDown), (40 bytes). + Removing clk.o(i.CLK_SetCoreClock), (176 bytes). + Removing clk.o(i.CLK_SetHCLK), (124 bytes). + Removing clk.o(i.CLK_SetSysTickClockSrc), (24 bytes). + Removing clk.o(i.CLK_WaitClockReady), (40 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(i.GPIO_DisableInt), (24 bytes). + Removing gpio.o(i.GPIO_EnableInt), (26 bytes). + Removing pwm.o(.rev16_text), (4 bytes). + Removing pwm.o(.revsh_text), (4 bytes). + Removing pwm.o(.rrx_text), (6 bytes). + Removing pwm.o(i.PWM_ClearADCTriggerFlag), (12 bytes). + Removing pwm.o(i.PWM_ClearAccInt), (14 bytes). + Removing pwm.o(i.PWM_ClearCaptureIntFlag), (10 bytes). + Removing pwm.o(i.PWM_ClearDACTriggerFlag), (10 bytes). + Removing pwm.o(i.PWM_ClearDutyIntFlag), (16 bytes). + Removing pwm.o(i.PWM_ClearFTDutyIntFlag), (14 bytes). + Removing pwm.o(i.PWM_ClearFaultBrakeIntFlag), (10 bytes). + Removing pwm.o(i.PWM_ClearWrapAroundFlag), (10 bytes). + Removing pwm.o(i.PWM_ClearZeroIntFlag), (10 bytes). + Removing pwm.o(i.PWM_ConfigCaptureChannel), (204 bytes). + Removing pwm.o(i.PWM_ConfigSyncPhase), (54 bytes). + Removing pwm.o(i.PWM_DisableADCTrigger), (44 bytes). + Removing pwm.o(i.PWM_DisableAcc), (22 bytes). + Removing pwm.o(i.PWM_DisableAccInt), (22 bytes). + Removing pwm.o(i.PWM_DisableBrakeNoiseFilter), (20 bytes). + Removing pwm.o(i.PWM_DisableBrakePinInverse), (20 bytes). + Removing pwm.o(i.PWM_DisableCapture), (22 bytes). + Removing pwm.o(i.PWM_DisableCaptureInt), (18 bytes). + Removing pwm.o(i.PWM_DisableDACTrigger), (18 bytes). + Removing pwm.o(i.PWM_DisableDeadZone), (28 bytes). + Removing pwm.o(i.PWM_DisableDutyInt), (20 bytes). + Removing pwm.o(i.PWM_DisableFaultBrakeInt), (16 bytes). + Removing pwm.o(i.PWM_DisableLoadMode), (14 bytes). + Removing pwm.o(i.PWM_DisablePDMA), (22 bytes). + Removing pwm.o(i.PWM_DisablePeriodInt), (18 bytes). + Removing pwm.o(i.PWM_DisableSyncNoiseFilter), (10 bytes). + Removing pwm.o(i.PWM_DisableSyncPhase), (36 bytes). + Removing pwm.o(i.PWM_DisableSyncPinInverse), (10 bytes). + Removing pwm.o(i.PWM_DisableZeroInt), (16 bytes). + Removing pwm.o(i.PWM_EnableADCTrigger), (74 bytes). + Removing pwm.o(i.PWM_EnableAcc), (38 bytes). + Removing pwm.o(i.PWM_EnableAccInt), (22 bytes). + Removing pwm.o(i.PWM_EnableBrakeNoiseFilter), (34 bytes). + Removing pwm.o(i.PWM_EnableBrakePinInverse), (20 bytes). + Removing pwm.o(i.PWM_EnableCapture), (22 bytes). + Removing pwm.o(i.PWM_EnableCaptureInt), (18 bytes). + Removing pwm.o(i.PWM_EnableDACTrigger), (18 bytes). + Removing pwm.o(i.PWM_EnableDeadZone), (50 bytes). + Removing pwm.o(i.PWM_EnableDutyInt), (18 bytes). + Removing pwm.o(i.PWM_EnableFaultBrake), (338 bytes). + Removing pwm.o(i.PWM_EnableFaultBrakeInt), (16 bytes). + Removing pwm.o(i.PWM_EnableLoadMode), (14 bytes). + Removing pwm.o(i.PWM_EnablePDMA), (46 bytes). + Removing pwm.o(i.PWM_EnableSyncNoiseFilter), (24 bytes). + Removing pwm.o(i.PWM_EnableSyncPhase), (36 bytes). + Removing pwm.o(i.PWM_EnableSyncPinInverse), (10 bytes). + Removing pwm.o(i.PWM_EnableZeroInt), (16 bytes). + Removing pwm.o(i.PWM_ForceStop), (8 bytes). + Removing pwm.o(i.PWM_GetADCTriggerFlag), (24 bytes). + Removing pwm.o(i.PWM_GetAccInt), (28 bytes). + Removing pwm.o(i.PWM_GetCaptureIntFlag), (48 bytes). + Removing pwm.o(i.PWM_GetDACTriggerFlag), (12 bytes). + Removing pwm.o(i.PWM_GetDutyIntFlag), (28 bytes). + Removing pwm.o(i.PWM_GetFTDutyIntFlag), (28 bytes). + Removing pwm.o(i.PWM_GetFaultBrakeIntFlag), (22 bytes). + Removing pwm.o(i.PWM_GetPeriodIntFlag), (24 bytes). + Removing pwm.o(i.PWM_GetWrapAroundFlag), (22 bytes). + Removing pwm.o(i.PWM_GetZeroIntFlag), (22 bytes). + Removing pwm.o(i.PWM_SetBrakePinSource), (34 bytes). + Removing pwm.o(i.PWM_SetClockSource), (28 bytes). + Removing pwm.o(i.PWM_Stop), (34 bytes). + Removing spi.o(.rev16_text), (4 bytes). + Removing spi.o(.revsh_text), (4 bytes). + Removing spi.o(.rrx_text), (6 bytes). + Removing spi.o(i.I2S_Close), (10 bytes). + Removing spi.o(i.I2S_DisableInt), (112 bytes). + Removing spi.o(i.I2S_DisableMCLK), (10 bytes). + Removing spi.o(i.I2S_EnableInt), (112 bytes). + Removing spi.o(i.I2S_EnableMCLK), (70 bytes). + Removing spi.o(i.I2S_GetSourceClockFreq), (184 bytes). + Removing spi.o(i.I2S_Open), (296 bytes). + Removing spi.o(i.I2S_SetFIFO), (18 bytes). + Removing spi.o(i.SPI_ClearIntFlag), (98 bytes). + Removing spi.o(i.SPI_ClearRxFIFO), (10 bytes). + Removing spi.o(i.SPI_ClearTxFIFO), (10 bytes). + Removing spi.o(i.SPI_Close), (100 bytes). + Removing spi.o(i.SPI_DisableInt), (182 bytes). + Removing spi.o(i.SPI_EnableAutoSS), (22 bytes). + Removing spi.o(i.SPI_EnableInt), (182 bytes). + Removing spi.o(i.SPI_GetBusClock), (272 bytes). + Removing spi.o(i.SPI_GetIntFlag), (204 bytes). + Removing spi.o(i.SPI_GetStatus), (150 bytes). + Removing spi.o(i.SPI_SetBusClock), (444 bytes). + Removing spi.o(i.SPI_SetFIFO), (18 bytes). + Removing sys.o(.rev16_text), (4 bytes). + Removing sys.o(.revsh_text), (4 bytes). + Removing sys.o(.rrx_text), (6 bytes). + Removing sys.o(i.SYS_ClearResetSrc), (16 bytes). + Removing sys.o(i.SYS_DisableBOD), (18 bytes). + Removing sys.o(i.SYS_EnableBOD), (42 bytes). + Removing sys.o(i.SYS_GetBODStatus), (12 bytes). + Removing sys.o(i.SYS_GetResetSrc), (8 bytes). + Removing sys.o(i.SYS_IsRegLocked), (20 bytes). + Removing sys.o(i.SYS_ReadPDID), (8 bytes). + Removing sys.o(i.SYS_ResetCPU), (18 bytes). + Removing sys.o(i.SYS_ResetChip), (18 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). + +164 unused section(s) (total 6856 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 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 boardshut.o ABSOLUTE + ../clib/angel/handlers.s 0x00000000 Number 0 __scatter_copy.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 __rtentry2.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry4.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 libspace.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 use_no_semi.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 indicate_semi.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 _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/armsys.c 0x00000000 Number 0 no_argv.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 libshutdown.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 libshutdown2.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_flags.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_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_ss.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_ss.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_ll.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.c 0x00000000 Number 0 __2printf.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_char_common.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_int.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_nopercent.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_percent.s 0x00000000 Number 0 _printf_percent_end.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_percent.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_x.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_segv_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_formal.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_cppl_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtred_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_outer.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_abrt_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_other.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_general.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_exit.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_fpe_inner.o ABSOLUTE + ../clib/signal.s 0x00000000 Number 0 defsig.o ABSOLUTE + ../clib/stdlib.c 0x00000000 Number 0 exit.o ABSOLUTE + ../fplib/fpinit.s 0x00000000 Number 0 fpinit.o ABSOLUTE + 24l01.c 0x00000000 Number 0 24l01.o ABSOLUTE + 24l01.c 0x00000000 Number 0 24l01.o ABSOLUTE + D:\\programs\\mdk\\ARM\\PACK\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\clk.c 0x00000000 Number 0 clk.o ABSOLUTE + D:\\programs\\mdk\\ARM\\PACK\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\gpio.c 0x00000000 Number 0 gpio.o ABSOLUTE + D:\\programs\\mdk\\ARM\\PACK\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\pwm.c 0x00000000 Number 0 pwm.o ABSOLUTE + D:\\programs\\mdk\\ARM\\PACK\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\spi.c 0x00000000 Number 0 spi.o ABSOLUTE + D:\\programs\\mdk\\ARM\\PACK\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\sys.c 0x00000000 Number 0 sys.o ABSOLUTE + D:\programs\mdk\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\clk.c 0x00000000 Number 0 clk.o ABSOLUTE + D:\programs\mdk\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\gpio.c 0x00000000 Number 0 gpio.o ABSOLUTE + D:\programs\mdk\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\pwm.c 0x00000000 Number 0 pwm.o ABSOLUTE + D:\programs\mdk\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\spi.c 0x00000000 Number 0 spi.o ABSOLUTE + D:\programs\mdk\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\sys.c 0x00000000 Number 0 sys.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 + interrupt.c 0x00000000 Number 0 interrupt.o ABSOLUTE + interrupt.c 0x00000000 Number 0 interrupt.o ABSOLUTE + main.c 0x00000000 Number 0 main.o ABSOLUTE + main.c 0x00000000 Number 0 main.o ABSOLUTE + spi_hal.c 0x00000000 Number 0 spi_hal.o ABSOLUTE + spi_hal.c 0x00000000 Number 0 spi_hal.o ABSOLUTE + !!!main 0x00000140 Section 8 __main.o(!!!main) + !!!scatter 0x00000148 Section 52 __scatter.o(!!!scatter) + !!handler_copy 0x0000017c Section 26 __scatter_copy.o(!!handler_copy) + !!handler_zi 0x00000198 Section 28 __scatter_zi.o(!!handler_zi) + .ARM.Collect$$_printf_percent$$00000000 0x000001b4 Section 0 _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) + .ARM.Collect$$_printf_percent$$0000000C 0x000001b4 Section 6 _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) + .ARM.Collect$$_printf_percent$$00000017 0x000001ba Section 4 _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017) + .ARM.Collect$$libinit$$00000000 0x000001be Section 2 libinit.o(.ARM.Collect$$libinit$$00000000) + .ARM.Collect$$libinit$$00000001 0x000001c0 Section 4 libinit2.o(.ARM.Collect$$libinit$$00000001) + .ARM.Collect$$libinit$$00000004 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000004) + .ARM.Collect$$libinit$$0000000A 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000A) + .ARM.Collect$$libinit$$0000000C 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000C) + .ARM.Collect$$libinit$$0000000E 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000E) + .ARM.Collect$$libinit$$00000011 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000011) + .ARM.Collect$$libinit$$00000013 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000013) + .ARM.Collect$$libinit$$00000015 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000015) + .ARM.Collect$$libinit$$00000017 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000017) + .ARM.Collect$$libinit$$00000019 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000019) + .ARM.Collect$$libinit$$0000001B 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001B) + .ARM.Collect$$libinit$$0000001D 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001D) + .ARM.Collect$$libinit$$0000001F 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001F) + .ARM.Collect$$libinit$$00000021 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000021) + .ARM.Collect$$libinit$$00000023 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000023) + .ARM.Collect$$libinit$$00000025 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000025) + .ARM.Collect$$libinit$$0000002C 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000002C) + .ARM.Collect$$libinit$$0000002E 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000002E) + .ARM.Collect$$libinit$$00000030 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000030) + .ARM.Collect$$libinit$$00000032 0x000001c4 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000032) + .ARM.Collect$$libinit$$00000033 0x000001c4 Section 2 libinit2.o(.ARM.Collect$$libinit$$00000033) + .ARM.Collect$$libshutdown$$00000000 0x000001c6 Section 2 libshutdown.o(.ARM.Collect$$libshutdown$$00000000) + .ARM.Collect$$libshutdown$$00000002 0x000001c8 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000002) + .ARM.Collect$$libshutdown$$00000004 0x000001c8 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000004) + .ARM.Collect$$libshutdown$$00000007 0x000001c8 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000007) + .ARM.Collect$$libshutdown$$0000000A 0x000001c8 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A) + .ARM.Collect$$libshutdown$$0000000C 0x000001c8 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C) + .ARM.Collect$$libshutdown$$0000000F 0x000001c8 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F) + .ARM.Collect$$libshutdown$$00000010 0x000001c8 Section 2 libshutdown2.o(.ARM.Collect$$libshutdown$$00000010) + .ARM.Collect$$rtentry$$00000000 0x000001ca Section 0 __rtentry.o(.ARM.Collect$$rtentry$$00000000) + .ARM.Collect$$rtentry$$00000002 0x000001ca Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000002) + .ARM.Collect$$rtentry$$00000004 0x000001ca Section 6 __rtentry4.o(.ARM.Collect$$rtentry$$00000004) + .ARM.Collect$$rtentry$$00000009 0x000001d0 Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000009) + .ARM.Collect$$rtentry$$0000000A 0x000001d0 Section 4 __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) + .ARM.Collect$$rtentry$$0000000C 0x000001d4 Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000C) + .ARM.Collect$$rtentry$$0000000D 0x000001d4 Section 8 __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) + .ARM.Collect$$rtexit$$00000000 0x000001dc Section 2 rtexit.o(.ARM.Collect$$rtexit$$00000000) + .ARM.Collect$$rtexit$$00000002 0x000001de Section 0 rtexit2.o(.ARM.Collect$$rtexit$$00000002) + .ARM.Collect$$rtexit$$00000003 0x000001de Section 4 rtexit2.o(.ARM.Collect$$rtexit$$00000003) + .ARM.Collect$$rtexit$$00000004 0x000001e2 Section 6 rtexit2.o(.ARM.Collect$$rtexit$$00000004) + .emb_text 0x000001e8 Section 28 retarget.o(.emb_text) + $v0 0x000001e8 Number 0 retarget.o(.emb_text) + .text 0x00000204 Section 116 startup_m451series.o(.text) + $v0 0x00000204 Number 0 startup_m451series.o(.text) + Default_Handler 0x00000249 Thumb Code 2 startup_m451series.o(.text) + .text 0x00000278 Section 0 noretval__2printf.o(.text) + .text 0x00000290 Section 0 _printf_hex_int.o(.text) + .text 0x000002e8 Section 0 __printf_wp.o(.text) + .text 0x000003f6 Section 78 rt_memclr_w.o(.text) + .text 0x00000444 Section 0 heapauxi.o(.text) + .text 0x0000044a Section 0 _printf_intcommon.o(.text) + .text 0x000004fc Section 0 _printf_char_file.o(.text) + .text 0x00000520 Section 0 _printf_char_common.o(.text) + _printf_input_char 0x00000521 Thumb Code 10 _printf_char_common.o(.text) + .text 0x00000550 Section 74 sys_stackheap_outer.o(.text) + .text 0x0000059a Section 0 exit.o(.text) + .text 0x000005ac Section 8 libspace.o(.text) + .text 0x000005b4 Section 0 sys_exit.o(.text) + .text 0x000005c0 Section 2 use_no_semi.o(.text) + .text 0x000005c2 Section 0 indicate_semi.o(.text) + i.CLK_EnableModuleClock 0x000005c2 Section 0 clk.o(i.CLK_EnableModuleClock) + i.CLK_GetHCLKFreq 0x000005f0 Section 0 clk.o(i.CLK_GetHCLKFreq) + i.CLK_GetPLLClockFreq 0x00000600 Section 0 pwm.o(i.CLK_GetPLLClockFreq) + CLK_GetPLLClockFreq 0x00000601 Thumb Code 84 pwm.o(i.CLK_GetPLLClockFreq) + i.CLK_GetPLLClockFreq 0x00000664 Section 0 spi.o(i.CLK_GetPLLClockFreq) + CLK_GetPLLClockFreq 0x00000665 Thumb Code 84 spi.o(i.CLK_GetPLLClockFreq) + i.CLK_GetPLLClockFreq 0x000006c8 Section 0 system_m451series.o(i.CLK_GetPLLClockFreq) + CLK_GetPLLClockFreq 0x000006c9 Thumb Code 84 system_m451series.o(i.CLK_GetPLLClockFreq) + i.CLK_SetModuleClock 0x0000072c Section 0 clk.o(i.CLK_SetModuleClock) + i.EINT0_IRQHandler 0x00000780 Section 0 24l01.o(i.EINT0_IRQHandler) + i.GPIO_SetMode 0x000007e0 Section 0 gpio.o(i.GPIO_SetMode) + i.Hard_Fault_Handler 0x0000080c Section 0 retarget.o(i.Hard_Fault_Handler) + __tagsym$$used 0x0000080d Number 0 retarget.o(i.Hard_Fault_Handler) + i.NRF24L01_Read_Buf 0x00000838 Section 0 24l01.o(i.NRF24L01_Read_Buf) + i.NRF24L01_RxPacket 0x0000086c Section 0 24l01.o(i.NRF24L01_RxPacket) + i.NRFSetTxMode 0x000008b4 Section 0 24l01.o(i.NRFSetTxMode) + i.PWM0P0_IRQHandler 0x0000094c Section 0 interrupt.o(i.PWM0P0_IRQHandler) + i.PWM1P0_IRQHandler 0x000009cc Section 0 interrupt.o(i.PWM1P0_IRQHandler) + i.PWMInit 0x00000a14 Section 0 main.o(i.PWMInit) + i.PWM_ClearPeriodIntFlag 0x00000b60 Section 0 pwm.o(i.PWM_ClearPeriodIntFlag) + i.PWM_ConfigOutputChannel 0x00000b6c Section 0 pwm.o(i.PWM_ConfigOutputChannel) + i.PWM_DisableOutput 0x00000cdc Section 0 pwm.o(i.PWM_DisableOutput) + i.PWM_EnableOutput 0x00000ce8 Section 0 pwm.o(i.PWM_EnableOutput) + i.PWM_EnablePeriodInt 0x00000cf4 Section 0 pwm.o(i.PWM_EnablePeriodInt) + i.PWM_Start 0x00000d08 Section 0 pwm.o(i.PWM_Start) + i.ParsePackage 0x00000d10 Section 0 main.o(i.ParsePackage) + i.RX_Mode 0x00000d98 Section 0 24l01.o(i.RX_Mode) + i.SPI_DisableAutoSS 0x00000e38 Section 0 spi.o(i.SPI_DisableAutoSS) + i.SPI_Open 0x00000e44 Section 0 spi.o(i.SPI_Open) + i.SYS_ResetModule 0x000010e4 Section 0 sys.o(i.SYS_ResetModule) + i.SendChar 0x00001114 Section 0 retarget.o(i.SendChar) + i.SendChar_ToUART 0x00001120 Section 0 retarget.o(i.SendChar_ToUART) + i.Spi_init 0x00001150 Section 0 spi_hal.o(i.Spi_init) + i.SystemCoreClockUpdate 0x000011f4 Section 0 system_m451series.o(i.SystemCoreClockUpdate) + i.SystemInit 0x00001258 Section 0 system_m451series.o(i.SystemInit) + i.__NVIC_EnableIRQ 0x000012cc Section 0 main.o(i.__NVIC_EnableIRQ) + __NVIC_EnableIRQ 0x000012cd Thumb Code 26 main.o(i.__NVIC_EnableIRQ) + i._is_digit 0x000012e6 Section 0 __printf_wp.o(i._is_digit) + i.delayAny 0x000012f4 Section 0 spi_hal.o(i.delayAny) + i.delay_s 0x00001302 Section 0 24l01.o(i.delay_s) + i.ferror 0x00001310 Section 0 retarget.o(i.ferror) + i.fputc 0x00001318 Section 0 retarget.o(i.fputc) + i.main 0x00001328 Section 0 main.o(i.main) + i.nrf_read 0x00001360 Section 0 spi_hal.o(i.nrf_read) + i.nrf_write 0x0000137c Section 0 spi_hal.o(i.nrf_write) + i.nrf_writebuf 0x0000139a Section 0 spi_hal.o(i.nrf_writebuf) + i.spi_disable 0x000013c8 Section 0 spi_hal.o(i.spi_disable) + i.spi_enable 0x000013dc Section 0 spi_hal.o(i.spi_enable) + i.spi_read 0x000013f0 Section 0 spi_hal.o(i.spi_read) + i.spi_send 0x00001410 Section 0 spi_hal.o(i.spi_send) + i.stackDump 0x00001430 Section 0 retarget.o(i.stackDump) + stackDump 0x00001431 Thumb Code 70 retarget.o(i.stackDump) + x$fpl$fpinit 0x000014d8 Section 10 fpinit.o(x$fpl$fpinit) + $v0 0x000014d8 Number 0 fpinit.o(x$fpl$fpinit) + .constdata 0x000014e2 Section 40 _printf_hex_int.o(.constdata) + uc_hextab 0x000014e2 Data 20 _printf_hex_int.o(.constdata) + lc_hextab 0x000014f6 Data 20 _printf_hex_int.o(.constdata) + .data 0x20000000 Section 12 main.o(.data) + .data 0x2000000c Section 21 24l01.o(.data) + ifinit 0x20000020 Data 1 24l01.o(.data) + .data 0x20000024 Section 8 retarget.o(.data) + .data 0x2000002c Section 44 system_m451series.o(.data) + .bss 0x20000058 Section 64 24l01.o(.bss) + .bss 0x20000098 Section 96 libspace.o(.bss) + HEAP 0x200000f8 Section 0 startup_m451series.o(HEAP) + STACK 0x200000f8 Section 1024 startup_m451series.o(STACK) + Heap_Mem 0x200000f8 Data 0 startup_m451series.o(HEAP) + Stack_Mem 0x200000f8 Data 1024 startup_m451series.o(STACK) + __initial_sp 0x200004f8 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_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) + __scatterload_copy 0x0000017d Thumb Code 26 __scatter_copy.o(!!handler_copy) + __scatterload_zeroinit 0x00000199 Thumb Code 28 __scatter_zi.o(!!handler_zi) + _printf_percent 0x000001b5 Thumb Code 0 _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) + _printf_x 0x000001b5 Thumb Code 0 _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) + _printf_percent_end 0x000001bb Thumb Code 0 _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017) + __rt_lib_init 0x000001bf Thumb Code 0 libinit.o(.ARM.Collect$$libinit$$00000000) + __rt_lib_init_fp_1 0x000001c1 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000001) + __rt_lib_init_alloca_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000002E) + __rt_lib_init_argv_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000002C) + __rt_lib_init_atexit_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001B) + __rt_lib_init_clock_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000021) + __rt_lib_init_cpp_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000032) + __rt_lib_init_exceptions_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000030) + __rt_lib_init_fp_trap_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001F) + __rt_lib_init_getenv_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000023) + __rt_lib_init_heap_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000A) + __rt_lib_init_lc_collate_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000011) + __rt_lib_init_lc_ctype_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000013) + __rt_lib_init_lc_monetary_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000015) + __rt_lib_init_lc_numeric_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000017) + __rt_lib_init_lc_time_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000019) + __rt_lib_init_preinit_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000004) + __rt_lib_init_rand_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000E) + __rt_lib_init_return 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000033) + __rt_lib_init_signal_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001D) + __rt_lib_init_stdio_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000025) + __rt_lib_init_user_alloc_1 0x000001c5 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000C) + __rt_lib_shutdown 0x000001c7 Thumb Code 0 libshutdown.o(.ARM.Collect$$libshutdown$$00000000) + __rt_lib_shutdown_cpp_1 0x000001c9 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000002) + __rt_lib_shutdown_fp_trap_1 0x000001c9 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000007) + __rt_lib_shutdown_heap_1 0x000001c9 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F) + __rt_lib_shutdown_return 0x000001c9 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000010) + __rt_lib_shutdown_signal_1 0x000001c9 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A) + __rt_lib_shutdown_stdio_1 0x000001c9 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000004) + __rt_lib_shutdown_user_alloc_1 0x000001c9 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C) + __rt_entry 0x000001cb Thumb Code 0 __rtentry.o(.ARM.Collect$$rtentry$$00000000) + __rt_entry_presh_1 0x000001cb Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000002) + __rt_entry_sh 0x000001cb Thumb Code 0 __rtentry4.o(.ARM.Collect$$rtentry$$00000004) + __rt_entry_li 0x000001d1 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) + __rt_entry_postsh_1 0x000001d1 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000009) + __rt_entry_main 0x000001d5 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) + __rt_entry_postli_1 0x000001d5 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000C) + __rt_exit 0x000001dd Thumb Code 0 rtexit.o(.ARM.Collect$$rtexit$$00000000) + __rt_exit_ls 0x000001df Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000003) + __rt_exit_prels_1 0x000001df Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000002) + __rt_exit_exit 0x000001e3 Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000004) + HardFault_Handler 0x000001e9 Thumb Code 24 retarget.o(.emb_text) + Reset_Handler 0x00000205 Thumb Code 50 startup_m451series.o(.text) + NMI_Handler 0x00000237 Thumb Code 2 startup_m451series.o(.text) + MemManage_Handler 0x0000023b Thumb Code 2 startup_m451series.o(.text) + BusFault_Handler 0x0000023d Thumb Code 2 startup_m451series.o(.text) + UsageFault_Handler 0x0000023f Thumb Code 2 startup_m451series.o(.text) + SVC_Handler 0x00000241 Thumb Code 2 startup_m451series.o(.text) + DebugMon_Handler 0x00000243 Thumb Code 2 startup_m451series.o(.text) + PendSV_Handler 0x00000245 Thumb Code 2 startup_m451series.o(.text) + SysTick_Handler 0x00000247 Thumb Code 2 startup_m451series.o(.text) + ACMP01_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + ADC00_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + ADC01_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + ADC02_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + ADC03_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + BOD_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + BRAKE0_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + BRAKE1_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + CAN0_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + CLKFAIL_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + DAC_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + EINT1_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + EINT2_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + EINT3_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + EINT4_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + EINT5_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + GPA_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + GPB_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + GPC_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + GPD_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + GPE_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + GPF_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + I2C0_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + I2C1_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + IRC_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + PDMA_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + PWM0P1_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + PWM0P2_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + PWM1P1_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + PWM1P2_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + PWRWU_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + RAMPE_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + RTC_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + SC0_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + SPI0_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + SPI1_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + SPI2_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + TAMPER_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + TK_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + TMR0_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + TMR1_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + TMR2_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + TMR3_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + UART0_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + UART1_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + UART2_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + UART3_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + USBD_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + USBH_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + USBOTG_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + WDT_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + WWDT_IRQHandler 0x00000249 Thumb Code 0 startup_m451series.o(.text) + __user_initial_stackheap 0x0000024d Thumb Code 10 startup_m451series.o(.text) + __2printf 0x00000279 Thumb Code 20 noretval__2printf.o(.text) + _printf_int_hex 0x00000291 Thumb Code 84 _printf_hex_int.o(.text) + _printf_longlong_hex 0x00000291 Thumb Code 0 _printf_hex_int.o(.text) + __printf 0x000002e9 Thumb Code 270 __printf_wp.o(.text) + __aeabi_memclr4 0x000003f7 Thumb Code 0 rt_memclr_w.o(.text) + __aeabi_memclr8 0x000003f7 Thumb Code 0 rt_memclr_w.o(.text) + __rt_memclr_w 0x000003f7 Thumb Code 78 rt_memclr_w.o(.text) + _memset_w 0x000003fb Thumb Code 0 rt_memclr_w.o(.text) + __use_two_region_memory 0x00000445 Thumb Code 2 heapauxi.o(.text) + __rt_heap_escrow$2region 0x00000447 Thumb Code 2 heapauxi.o(.text) + __rt_heap_expand$2region 0x00000449 Thumb Code 2 heapauxi.o(.text) + _printf_int_common 0x0000044b Thumb Code 178 _printf_intcommon.o(.text) + _printf_char_file 0x000004fd Thumb Code 32 _printf_char_file.o(.text) + _printf_char_common 0x0000052b Thumb Code 32 _printf_char_common.o(.text) + __user_setup_stackheap 0x00000551 Thumb Code 74 sys_stackheap_outer.o(.text) + exit 0x0000059b Thumb Code 18 exit.o(.text) + __user_libspace 0x000005ad Thumb Code 8 libspace.o(.text) + __user_perproc_libspace 0x000005ad Thumb Code 0 libspace.o(.text) + __user_perthread_libspace 0x000005ad Thumb Code 0 libspace.o(.text) + _sys_exit 0x000005b5 Thumb Code 8 sys_exit.o(.text) + __I$use$semihosting 0x000005c1 Thumb Code 0 use_no_semi.o(.text) + __use_no_semihosting_swi 0x000005c1 Thumb Code 2 use_no_semi.o(.text) + CLK_EnableModuleClock 0x000005c3 Thumb Code 44 clk.o(i.CLK_EnableModuleClock) + __semihosting_library_function 0x000005c3 Thumb Code 0 indicate_semi.o(.text) + CLK_GetHCLKFreq 0x000005f1 Thumb Code 12 clk.o(i.CLK_GetHCLKFreq) + CLK_SetModuleClock 0x0000072d Thumb Code 78 clk.o(i.CLK_SetModuleClock) + EINT0_IRQHandler 0x00000781 Thumb Code 82 24l01.o(i.EINT0_IRQHandler) + GPIO_SetMode 0x000007e1 Thumb Code 44 gpio.o(i.GPIO_SetMode) + Hard_Fault_Handler 0x0000080d Thumb Code 18 retarget.o(i.Hard_Fault_Handler) + NRF24L01_Read_Buf 0x00000839 Thumb Code 50 24l01.o(i.NRF24L01_Read_Buf) + NRF24L01_RxPacket 0x0000086d Thumb Code 68 24l01.o(i.NRF24L01_RxPacket) + NRFSetTxMode 0x000008b5 Thumb Code 132 24l01.o(i.NRFSetTxMode) + PWM0P0_IRQHandler 0x0000094d Thumb Code 108 interrupt.o(i.PWM0P0_IRQHandler) + PWM1P0_IRQHandler 0x000009cd Thumb Code 60 interrupt.o(i.PWM1P0_IRQHandler) + PWMInit 0x00000a15 Thumb Code 312 main.o(i.PWMInit) + PWM_ClearPeriodIntFlag 0x00000b61 Thumb Code 12 pwm.o(i.PWM_ClearPeriodIntFlag) + PWM_ConfigOutputChannel 0x00000b6d Thumb Code 354 pwm.o(i.PWM_ConfigOutputChannel) + PWM_DisableOutput 0x00000cdd Thumb Code 12 pwm.o(i.PWM_DisableOutput) + PWM_EnableOutput 0x00000ce9 Thumb Code 12 pwm.o(i.PWM_EnableOutput) + PWM_EnablePeriodInt 0x00000cf5 Thumb Code 20 pwm.o(i.PWM_EnablePeriodInt) + PWM_Start 0x00000d09 Thumb Code 8 pwm.o(i.PWM_Start) + ParsePackage 0x00000d11 Thumb Code 112 main.o(i.ParsePackage) + RX_Mode 0x00000d99 Thumb Code 140 24l01.o(i.RX_Mode) + SPI_DisableAutoSS 0x00000e39 Thumb Code 10 spi.o(i.SPI_DisableAutoSS) + SPI_Open 0x00000e45 Thumb Code 646 spi.o(i.SPI_Open) + SYS_ResetModule 0x000010e5 Thumb Code 48 sys.o(i.SYS_ResetModule) + SendChar 0x00001115 Thumb Code 12 retarget.o(i.SendChar) + SendChar_ToUART 0x00001121 Thumb Code 44 retarget.o(i.SendChar_ToUART) + Spi_init 0x00001151 Thumb Code 138 spi_hal.o(i.Spi_init) + SystemCoreClockUpdate 0x000011f5 Thumb Code 74 system_m451series.o(i.SystemCoreClockUpdate) + SystemInit 0x00001259 Thumb Code 104 system_m451series.o(i.SystemInit) + _is_digit 0x000012e7 Thumb Code 14 __printf_wp.o(i._is_digit) + delayAny 0x000012f5 Thumb Code 14 spi_hal.o(i.delayAny) + delay_s 0x00001303 Thumb Code 14 24l01.o(i.delay_s) + ferror 0x00001311 Thumb Code 8 retarget.o(i.ferror) + fputc 0x00001319 Thumb Code 16 retarget.o(i.fputc) + main 0x00001329 Thumb Code 52 main.o(i.main) + nrf_read 0x00001361 Thumb Code 28 spi_hal.o(i.nrf_read) + nrf_write 0x0000137d Thumb Code 30 spi_hal.o(i.nrf_write) + nrf_writebuf 0x0000139b Thumb Code 46 spi_hal.o(i.nrf_writebuf) + spi_disable 0x000013c9 Thumb Code 14 spi_hal.o(i.spi_disable) + spi_enable 0x000013dd Thumb Code 14 spi_hal.o(i.spi_enable) + spi_read 0x000013f1 Thumb Code 28 spi_hal.o(i.spi_read) + spi_send 0x00001411 Thumb Code 28 spi_hal.o(i.spi_send) + _fp_init 0x000014d9 Thumb Code 10 fpinit.o(x$fpl$fpinit) + __fplib_config_fpu_vfp 0x000014e1 Thumb Code 0 fpinit.o(x$fpl$fpinit) + __fplib_config_pureend_doubles 0x000014e1 Thumb Code 0 fpinit.o(x$fpl$fpinit) + Region$$Table$$Base 0x0000150c Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x0000152c Number 0 anon$$obj.o(Region$$Table) + Axis1 0x20000000 Data 2 main.o(.data) + Axis2 0x20000002 Data 2 main.o(.data) + Axis3 0x20000004 Data 2 main.o(.data) + Axis4 0x20000006 Data 2 main.o(.data) + Axis5 0x20000008 Data 2 main.o(.data) + Axis6 0x2000000a Data 2 main.o(.data) + rfch 0x2000000c Data 1 24l01.o(.data) + RxCnt 0x2000000e Data 2 24l01.o(.data) + TxAddr 0x20000010 Data 5 24l01.o(.data) + RxAddr 0x20000015 Data 5 24l01.o(.data) + Curr_Mode 0x2000001a Data 1 24l01.o(.data) + gRecvPkg 0x2000001c Data 4 24l01.o(.data) + __stdout 0x20000024 Data 4 retarget.o(.data) + __stdin 0x20000028 Data 4 retarget.o(.data) + SystemCoreClock 0x2000002c Data 4 system_m451series.o(.data) + CyclesPerUs 0x20000030 Data 4 system_m451series.o(.data) + PllClock 0x20000034 Data 4 system_m451series.o(.data) + gau32ClkSrcTbl 0x20000038 Data 32 system_m451series.o(.data) + Recv_Buf 0x20000058 Data 32 24l01.o(.bss) + Send_Buf 0x20000078 Data 32 24l01.o(.bss) + __libspace_start 0x20000098 Data 96 libspace.o(.bss) + __temporary_stack_top$libspace 0x200000f8 Data 0 libspace.o(.bss) + + + +============================================================================== + +Memory Map of the image + + Image Entry point : 0x00000141 + + Load Region LR_IROM1 (Base: 0x00000000, Size: 0x00001584, Max: 0x00040000, ABSOLUTE) + + Execution Region ER_IROM1 (Exec base: 0x00000000, Load base: 0x00000000, Size: 0x0000152c, Max: 0x00040000, ABSOLUTE) + + Exec Addr Load Addr Size Type Attr Idx E Section Name Object + + 0x00000000 0x00000000 0x00000140 Data RO 1380 RESET startup_m451series.o + 0x00000140 0x00000140 0x00000008 Code RO 1484 * !!!main c_w.l(__main.o) + 0x00000148 0x00000148 0x00000034 Code RO 1648 !!!scatter c_w.l(__scatter.o) + 0x0000017c 0x0000017c 0x0000001a Code RO 1650 !!handler_copy c_w.l(__scatter_copy.o) + 0x00000196 0x00000196 0x00000002 PAD + 0x00000198 0x00000198 0x0000001c Code RO 1652 !!handler_zi c_w.l(__scatter_zi.o) + 0x000001b4 0x000001b4 0x00000000 Code RO 1479 .ARM.Collect$$_printf_percent$$00000000 c_w.l(_printf_percent.o) + 0x000001b4 0x000001b4 0x00000006 Code RO 1478 .ARM.Collect$$_printf_percent$$0000000C c_w.l(_printf_x.o) + 0x000001ba 0x000001ba 0x00000004 Code RO 1491 .ARM.Collect$$_printf_percent$$00000017 c_w.l(_printf_percent_end.o) + 0x000001be 0x000001be 0x00000002 Code RO 1520 .ARM.Collect$$libinit$$00000000 c_w.l(libinit.o) + 0x000001c0 0x000001c0 0x00000004 Code RO 1526 .ARM.Collect$$libinit$$00000001 c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1529 .ARM.Collect$$libinit$$00000004 c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1532 .ARM.Collect$$libinit$$0000000A c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1534 .ARM.Collect$$libinit$$0000000C c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1536 .ARM.Collect$$libinit$$0000000E c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1539 .ARM.Collect$$libinit$$00000011 c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1541 .ARM.Collect$$libinit$$00000013 c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1543 .ARM.Collect$$libinit$$00000015 c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1545 .ARM.Collect$$libinit$$00000017 c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1547 .ARM.Collect$$libinit$$00000019 c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1549 .ARM.Collect$$libinit$$0000001B c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1551 .ARM.Collect$$libinit$$0000001D c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1553 .ARM.Collect$$libinit$$0000001F c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1555 .ARM.Collect$$libinit$$00000021 c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1557 .ARM.Collect$$libinit$$00000023 c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1559 .ARM.Collect$$libinit$$00000025 c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1563 .ARM.Collect$$libinit$$0000002C c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1565 .ARM.Collect$$libinit$$0000002E c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1567 .ARM.Collect$$libinit$$00000030 c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000000 Code RO 1569 .ARM.Collect$$libinit$$00000032 c_w.l(libinit2.o) + 0x000001c4 0x000001c4 0x00000002 Code RO 1570 .ARM.Collect$$libinit$$00000033 c_w.l(libinit2.o) + 0x000001c6 0x000001c6 0x00000002 Code RO 1590 .ARM.Collect$$libshutdown$$00000000 c_w.l(libshutdown.o) + 0x000001c8 0x000001c8 0x00000000 Code RO 1603 .ARM.Collect$$libshutdown$$00000002 c_w.l(libshutdown2.o) + 0x000001c8 0x000001c8 0x00000000 Code RO 1605 .ARM.Collect$$libshutdown$$00000004 c_w.l(libshutdown2.o) + 0x000001c8 0x000001c8 0x00000000 Code RO 1608 .ARM.Collect$$libshutdown$$00000007 c_w.l(libshutdown2.o) + 0x000001c8 0x000001c8 0x00000000 Code RO 1611 .ARM.Collect$$libshutdown$$0000000A c_w.l(libshutdown2.o) + 0x000001c8 0x000001c8 0x00000000 Code RO 1613 .ARM.Collect$$libshutdown$$0000000C c_w.l(libshutdown2.o) + 0x000001c8 0x000001c8 0x00000000 Code RO 1616 .ARM.Collect$$libshutdown$$0000000F c_w.l(libshutdown2.o) + 0x000001c8 0x000001c8 0x00000002 Code RO 1617 .ARM.Collect$$libshutdown$$00000010 c_w.l(libshutdown2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 1486 .ARM.Collect$$rtentry$$00000000 c_w.l(__rtentry.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 1493 .ARM.Collect$$rtentry$$00000002 c_w.l(__rtentry2.o) + 0x000001ca 0x000001ca 0x00000006 Code RO 1505 .ARM.Collect$$rtentry$$00000004 c_w.l(__rtentry4.o) + 0x000001d0 0x000001d0 0x00000000 Code RO 1495 .ARM.Collect$$rtentry$$00000009 c_w.l(__rtentry2.o) + 0x000001d0 0x000001d0 0x00000004 Code RO 1496 .ARM.Collect$$rtentry$$0000000A c_w.l(__rtentry2.o) + 0x000001d4 0x000001d4 0x00000000 Code RO 1498 .ARM.Collect$$rtentry$$0000000C c_w.l(__rtentry2.o) + 0x000001d4 0x000001d4 0x00000008 Code RO 1499 .ARM.Collect$$rtentry$$0000000D c_w.l(__rtentry2.o) + 0x000001dc 0x000001dc 0x00000002 Code RO 1524 .ARM.Collect$$rtexit$$00000000 c_w.l(rtexit.o) + 0x000001de 0x000001de 0x00000000 Code RO 1572 .ARM.Collect$$rtexit$$00000002 c_w.l(rtexit2.o) + 0x000001de 0x000001de 0x00000004 Code RO 1573 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o) + 0x000001e2 0x000001e2 0x00000006 Code RO 1574 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o) + 0x000001e8 0x000001e8 0x0000001c Code RO 1265 .emb_text retarget.o + 0x00000204 0x00000204 0x00000074 Code RO 1381 .text startup_m451series.o + 0x00000278 0x00000278 0x00000018 Code RO 1433 .text c_w.l(noretval__2printf.o) + 0x00000290 0x00000290 0x00000058 Code RO 1440 .text c_w.l(_printf_hex_int.o) + 0x000002e8 0x000002e8 0x0000010e Code RO 1466 .text c_w.l(__printf_wp.o) + 0x000003f6 0x000003f6 0x0000004e Code RO 1480 .text c_w.l(rt_memclr_w.o) + 0x00000444 0x00000444 0x00000006 Code RO 1482 .text c_w.l(heapauxi.o) + 0x0000044a 0x0000044a 0x000000b2 Code RO 1487 .text c_w.l(_printf_intcommon.o) + 0x000004fc 0x000004fc 0x00000024 Code RO 1489 .text c_w.l(_printf_char_file.o) + 0x00000520 0x00000520 0x00000030 Code RO 1507 .text c_w.l(_printf_char_common.o) + 0x00000550 0x00000550 0x0000004a Code RO 1509 .text c_w.l(sys_stackheap_outer.o) + 0x0000059a 0x0000059a 0x00000012 Code RO 1513 .text c_w.l(exit.o) + 0x000005ac 0x000005ac 0x00000008 Code RO 1521 .text c_w.l(libspace.o) + 0x000005b4 0x000005b4 0x0000000c Code RO 1582 .text c_w.l(sys_exit.o) + 0x000005c0 0x000005c0 0x00000002 Code RO 1593 .text c_w.l(use_no_semi.o) + 0x000005c2 0x000005c2 0x00000000 Code RO 1595 .text c_w.l(indicate_semi.o) + 0x000005c2 0x000005c2 0x0000002c Code RO 411 i.CLK_EnableModuleClock clk.o + 0x000005ee 0x000005ee 0x00000002 PAD + 0x000005f0 0x000005f0 0x00000010 Code RO 416 i.CLK_GetHCLKFreq clk.o + 0x00000600 0x00000600 0x00000064 Code RO 605 i.CLK_GetPLLClockFreq pwm.o + 0x00000664 0x00000664 0x00000064 Code RO 1033 i.CLK_GetPLLClockFreq spi.o + 0x000006c8 0x000006c8 0x00000064 Code RO 1388 i.CLK_GetPLLClockFreq system_m451series.o + 0x0000072c 0x0000072c 0x00000054 Code RO 426 i.CLK_SetModuleClock clk.o + 0x00000780 0x00000780 0x00000060 Code RO 169 i.EINT0_IRQHandler 24l01.o + 0x000007e0 0x000007e0 0x0000002c Code RO 571 i.GPIO_SetMode gpio.o + 0x0000080c 0x0000080c 0x0000002c Code RO 1267 i.Hard_Fault_Handler retarget.o + 0x00000838 0x00000838 0x00000032 Code RO 172 i.NRF24L01_Read_Buf 24l01.o + 0x0000086a 0x0000086a 0x00000002 PAD + 0x0000086c 0x0000086c 0x00000048 Code RO 173 i.NRF24L01_RxPacket 24l01.o + 0x000008b4 0x000008b4 0x00000098 Code RO 175 i.NRFSetTxMode 24l01.o + 0x0000094c 0x0000094c 0x00000080 Code RO 366 i.PWM0P0_IRQHandler interrupt.o + 0x000009cc 0x000009cc 0x00000048 Code RO 367 i.PWM1P0_IRQHandler interrupt.o + 0x00000a14 0x00000a14 0x0000014c Code RO 5 i.PWMInit main.o + 0x00000b60 0x00000b60 0x0000000c Code RO 613 i.PWM_ClearPeriodIntFlag pwm.o + 0x00000b6c 0x00000b6c 0x00000170 Code RO 617 i.PWM_ConfigOutputChannel pwm.o + 0x00000cdc 0x00000cdc 0x0000000c Code RO 631 i.PWM_DisableOutput pwm.o + 0x00000ce8 0x00000ce8 0x0000000c Code RO 651 i.PWM_EnableOutput pwm.o + 0x00000cf4 0x00000cf4 0x00000014 Code RO 653 i.PWM_EnablePeriodInt pwm.o + 0x00000d08 0x00000d08 0x00000008 Code RO 671 i.PWM_Start pwm.o + 0x00000d10 0x00000d10 0x00000088 Code RO 6 i.ParsePackage main.o + 0x00000d98 0x00000d98 0x000000a0 Code RO 180 i.RX_Mode 24l01.o + 0x00000e38 0x00000e38 0x0000000a Code RO 1046 i.SPI_DisableAutoSS spi.o + 0x00000e42 0x00000e42 0x00000002 PAD + 0x00000e44 0x00000e44 0x000002a0 Code RO 1053 i.SPI_Open spi.o + 0x000010e4 0x000010e4 0x00000030 Code RO 1196 i.SYS_ResetModule sys.o + 0x00001114 0x00001114 0x0000000c Code RO 1269 i.SendChar retarget.o + 0x00001120 0x00001120 0x00000030 Code RO 1270 i.SendChar_ToUART retarget.o + 0x00001150 0x00001150 0x000000a4 Code RO 283 i.Spi_init spi_hal.o + 0x000011f4 0x000011f4 0x00000064 Code RO 1389 i.SystemCoreClockUpdate system_m451series.o + 0x00001258 0x00001258 0x00000074 Code RO 1390 i.SystemInit system_m451series.o + 0x000012cc 0x000012cc 0x0000001a Code RO 7 i.__NVIC_EnableIRQ main.o + 0x000012e6 0x000012e6 0x0000000e Code RO 1468 i._is_digit c_w.l(__printf_wp.o) + 0x000012f4 0x000012f4 0x0000000e Code RO 284 i.delayAny spi_hal.o + 0x00001302 0x00001302 0x0000000e Code RO 182 i.delay_s 24l01.o + 0x00001310 0x00001310 0x00000008 Code RO 1272 i.ferror retarget.o + 0x00001318 0x00001318 0x00000010 Code RO 1274 i.fputc retarget.o + 0x00001328 0x00001328 0x00000038 Code RO 9 i.main main.o + 0x00001360 0x00001360 0x0000001c Code RO 285 i.nrf_read spi_hal.o + 0x0000137c 0x0000137c 0x0000001e Code RO 287 i.nrf_write spi_hal.o + 0x0000139a 0x0000139a 0x0000002e Code RO 288 i.nrf_writebuf spi_hal.o + 0x000013c8 0x000013c8 0x00000014 Code RO 289 i.spi_disable spi_hal.o + 0x000013dc 0x000013dc 0x00000014 Code RO 290 i.spi_enable spi_hal.o + 0x000013f0 0x000013f0 0x00000020 Code RO 291 i.spi_read spi_hal.o + 0x00001410 0x00001410 0x00000020 Code RO 292 i.spi_send spi_hal.o + 0x00001430 0x00001430 0x000000a8 Code RO 1276 i.stackDump retarget.o + 0x000014d8 0x000014d8 0x0000000a Code RO 1580 x$fpl$fpinit fz_wm.l(fpinit.o) + 0x000014e2 0x000014e2 0x00000028 Data RO 1441 .constdata c_w.l(_printf_hex_int.o) + 0x0000150a 0x0000150a 0x00000002 PAD + 0x0000150c 0x0000150c 0x00000020 Data RO 1646 Region$$Table anon$$obj.o + + + Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x0000152c, Size: 0x000004f8, Max: 0x00008000, ABSOLUTE) + + Exec Addr Load Addr Size Type Attr Idx E Section Name Object + + 0x20000000 0x0000152c 0x0000000c Data RW 10 .data main.o + 0x2000000c 0x00001538 0x00000015 Data RW 184 .data 24l01.o + 0x20000021 0x0000154d 0x00000003 PAD + 0x20000024 0x00001550 0x00000008 Data RW 1277 .data retarget.o + 0x2000002c 0x00001558 0x0000002c Data RW 1391 .data system_m451series.o + 0x20000058 - 0x00000040 Zero RW 183 .bss 24l01.o + 0x20000098 - 0x00000060 Zero RW 1522 .bss c_w.l(libspace.o) + 0x200000f8 - 0x00000000 Zero RW 1379 HEAP startup_m451series.o + 0x200000f8 - 0x00000400 Zero RW 1378 STACK startup_m451series.o + + +============================================================================== + +Image component sizes + + + Code (inc. data) RO Data RW Data ZI Data Debug Object Name + + 544 58 0 21 64 5758 24l01.o + 144 10 0 0 0 16279 clk.o + 44 0 0 0 0 1223 gpio.o + 200 32 0 0 0 1048 interrupt.o + 550 48 0 12 0 238565 main.o + 532 30 0 0 0 5564 pwm.o + 324 132 0 8 0 5801 retarget.o + 782 42 0 0 0 3315 spi.o + 386 46 0 0 0 4745 spi_hal.o + 116 36 320 0 1024 936 startup_m451series.o + 48 0 0 0 0 574 sys.o + 316 54 0 44 0 33267 system_m451series.o + + ---------------------------------------------------------------------- + 3992 488 352 88 1088 317075 Object Totals + 0 0 32 0 0 0 (incl. Generated) + 6 0 0 3 0 0 (incl. Padding) + + ---------------------------------------------------------------------- + + Code (inc. data) RO Data RW Data ZI Data Debug Library Member Name + + 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 + 26 0 0 0 0 0 __scatter_copy.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 + 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 + 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 + 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 + 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 + + ---------------------------------------------------------------------- + 1034 34 42 0 96 1372 Library Totals + 2 0 2 0 0 0 (incl. Padding) + + ---------------------------------------------------------------------- + + Code (inc. data) RO Data RW Data ZI Data Debug Library Name + + 1022 34 40 0 96 1256 c_w.l + 10 0 0 0 0 116 fz_wm.l + + ---------------------------------------------------------------------- + 1034 34 42 0 96 1372 Library Totals + + ---------------------------------------------------------------------- + +============================================================================== + + + Code (inc. data) RO Data RW Data ZI Data Debug + + 5026 522 394 88 1184 313675 Grand Totals + 5026 522 394 88 1184 313675 ELF Image Totals + 5026 522 394 88 0 0 ROM Totals + +============================================================================== + + Total RO Size (Code + RO Data) 5420 ( 5.29kB) + Total RW Size (RW Data + ZI Data) 1272 ( 1.24kB) + Total ROM Size (Code + RO Data + RW Data) 5508 ( 5.38kB) + +============================================================================== + diff --git a/roboticarm_controller/Objects/roboticarm_controller.axf b/roboticarm_controller/Objects/roboticarm_controller.axf new file mode 100644 index 0000000000000000000000000000000000000000..5f358b75011e66df3f3559279820061b8b72b2db GIT binary patch literal 348968 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

#9 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 literal 0 HcmV?d00001 diff --git a/roboticarm_controller/Objects/roboticarm_controller.lnp b/roboticarm_controller/Objects/roboticarm_controller.lnp new file mode 100644 index 0000000..910aa18 --- /dev/null +++ b/roboticarm_controller/Objects/roboticarm_controller.lnp @@ -0,0 +1,17 @@ +--cpu=Cortex-M4.fp +".\objects\main.o" +".\objects\24l01.o" +".\objects\spi_hal.o" +".\objects\interrupt.o" +".\objects\clk.o" +".\objects\gpio.o" +".\objects\pwm.o" +".\objects\spi.o" +".\objects\sys.o" +".\objects\retarget.o" +".\objects\startup_m451series.o" +".\objects\system_m451series.o" +--strict --scatter ".\Objects\roboticarm_controller.sct" +--summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols +--info sizes --info totals --info unused --info veneers +--list ".\Listings\roboticarm_controller.map" -o .\Objects\roboticarm_controller.axf \ No newline at end of file diff --git a/roboticarm_controller/Objects/roboticarm_controller.sct b/roboticarm_controller/Objects/roboticarm_controller.sct new file mode 100644 index 0000000..9af005d --- /dev/null +++ b/roboticarm_controller/Objects/roboticarm_controller.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x00000000 0x00040000 { ; load region size_region + ER_IROM1 0x00000000 0x00040000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20000000 0x00008000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/roboticarm_controller/RTE/Device/M453VG6AE/retarget.c b/roboticarm_controller/RTE/Device/M453VG6AE/retarget.c new file mode 100644 index 0000000..3aeb8aa --- /dev/null +++ b/roboticarm_controller/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/roboticarm_controller/RTE/Device/M453VG6AE/startup_M451Series.s b/roboticarm_controller/RTE/Device/M453VG6AE/startup_M451Series.s new file mode 100644 index 0000000..c083f20 --- /dev/null +++ b/roboticarm_controller/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/roboticarm_controller/RTE/Device/M453VG6AE/system_M451Series.c b/roboticarm_controller/RTE/Device/M453VG6AE/system_M451Series.c new file mode 100644 index 0000000..daf91b9 --- /dev/null +++ b/roboticarm_controller/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/roboticarm_controller/RTE/_Target_1/RTE_Components.h b/roboticarm_controller/RTE/_Target_1/RTE_Components.h new file mode 100644 index 0000000..d082d1e --- /dev/null +++ b/roboticarm_controller/RTE/_Target_1/RTE_Components.h @@ -0,0 +1,25 @@ + +/* + * Auto generated Run-Time-Environment Component Configuration File + * *** Do not modify ! *** + * + * Project: 'roboticarm_controller' + * Target: 'Target 1' + */ + +#ifndef RTE_COMPONENTS_H +#define RTE_COMPONENTS_H + + +/* + * Define the Device Header File: + */ +#define CMSIS_device_header "M451Series.h" + +#define RTE_Drivers_CLK /* Driver CLK */ +#define RTE_Drivers_GPIO /* Driver GPIO */ +#define RTE_Drivers_PWM /* Driver PWM */ +#define RTE_Drivers_SPI /* Driver SPI */ +#define RTE_Drivers_SYS /* Driver SYS */ + +#endif /* RTE_COMPONENTS_H */ diff --git a/roboticarm_controller/global.h b/roboticarm_controller/global.h new file mode 100644 index 0000000..0f771c1 --- /dev/null +++ b/roboticarm_controller/global.h @@ -0,0 +1,14 @@ +#ifndef __GLOBAL__ +#define __GLOBAL__ + +#include "stdio.h" +#include "stdint.h" + +extern short Axis1; +extern short Axis2; +extern short Axis3; +extern short Axis4; +extern short Axis5; +extern short Axis6; + +#endif \ No newline at end of file diff --git a/roboticarm_controller/interrupt.c b/roboticarm_controller/interrupt.c new file mode 100644 index 0000000..4ebde1e --- /dev/null +++ b/roboticarm_controller/interrupt.c @@ -0,0 +1,50 @@ +#include "M451Series.h" +#include "global.h" + + +void PWM0P0_IRQHandler(void) +{ + static uint32_t lastStep = 0; + + if(Axis1 != 0){ + PWM_EnableOutput(PWM0, PWM_CH_0_MASK); + } + else{ + PWM_DisableOutput(PWM0, PWM_CH_0_MASK); + } + if(Axis2 != 0){ + PWM_EnableOutput(PWM0, PWM_CH_1_MASK); + } + else{ + PWM_DisableOutput(PWM0, PWM_CH_1_MASK); + } + if(Axis3 != 0){ + PWM_EnableOutput(PWM0, PWM_CH_3_MASK); + } + else{ + PWM_DisableOutput(PWM0, PWM_CH_3_MASK); + } + if(Axis4 != 0){ + PWM_EnableOutput(PWM0, PWM_CH_4_MASK); + }else{ + PWM_DisableOutput(PWM0, PWM_CH_4_MASK); + } + + // Clear channel 0 period interrupt flag + PWM_ClearPeriodIntFlag(PWM0, 0); +} + +void PWM1P0_IRQHandler(void){ + if(Axis5 != 0){ + PWM_EnableOutput(PWM1, PWM_CH_0_MASK); + }else{ + PWM_DisableOutput(PWM1, PWM_CH_0_MASK); + } + if(Axis6 != 0){ + PWM_EnableOutput(PWM1, PWM_CH_1_MASK); + }else{ + PWM_DisableOutput(PWM1, PWM_CH_1_MASK); + } + PWM_ClearPeriodIntFlag(PWM1, 0); + +} diff --git a/roboticarm_controller/main.c b/roboticarm_controller/main.c new file mode 100644 index 0000000..e419caf --- /dev/null +++ b/roboticarm_controller/main.c @@ -0,0 +1,124 @@ +#include "M451Series.h" +#include "spi_hal.h" +#include "24l01.h" + + +short Axis1 = 0; +short Axis2 = 0; +short Axis3 = 0; +short Axis4 = 0; +short Axis5 = 0; +short Axis6 = 0; + +void NRF24L01Init(){ + + + CLK_EnableModuleClock(SPI0_MODULE); + + SYS_ResetModule(SPI0_RST); + + /* PWM clock frequency can be set equal or double to HCLK by choosing case 1 or case 2 */ + /* case 1.PWM clock frequency is set equal to HCLK: select PWM module clock source as PCLK */ + CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL2_PWM0SEL_PCLK0, NULL); + + /* Set PB multi-function pins for spi */ + SYS->GPB_MFPL &= ~(SYS_GPB_MFPL_PB5MFP_Msk | SYS_GPB_MFPL_PB6MFP_Msk | SYS_GPB_MFPL_PB7MFP_Msk); + SYS->GPB_MFPL |= (SYS_GPB_MFPL_PB5MFP_SPI0_MOSI0 | SYS_GPB_MFPL_PB6MFP_SPI0_MISO0|SYS_GPB_MFPL_PB7MFP_SPI0_CLK); + + SYS->GPB_MFPH &= ~(SYS_GPB_MFPH_PB13MFP_Msk | SYS_GPB_MFPH_PB14MFP_Msk | SYS_GPB_MFPH_PB15MFP_Msk); + SYS->GPB_MFPL |= (SYS_GPB_MFPH_PB13MFP_GPIO | SYS_GPB_MFPH_PB14MFP_GPIO|SYS_GPB_MFPH_PB15MFP_GPIO); + +} + +void PWMInit (){ + + CLK_EnableModuleClock(PWM0_MODULE); + + SYS_ResetModule(PWM0_RST); + + CLK_EnableModuleClock(PWM1_MODULE); + + SYS_ResetModule(PWM1_RST); + /* PWM clock frequency can be set equal or double to HCLK by choosing case 1 or case 2 */ + /* case 1.PWM clock frequency is set equal to HCLK: select PWM module clock source as PCLK */ + CLK_SetModuleClock(PWM0_MODULE, CLK_CLKSEL2_PWM0SEL_PCLK0, NULL); + CLK_SetModuleClock(PWM1_MODULE, CLK_CLKSEL2_PWM1SEL_PCLK1, NULL); + + /* Set PC multi-function pins for PWM0 Channel0~3 */ + SYS->GPC_MFPH = (SYS->GPC_MFPH & (~SYS_GPC_MFPH_PC9MFP_Msk)); + SYS->GPC_MFPH |= SYS_GPC_MFPH_PC9MFP_PWM1_CH0; + + SYS->GPC_MFPH = (SYS->GPC_MFPH & (~SYS_GPC_MFPH_PC10MFP_Msk)); + SYS->GPC_MFPH |= SYS_GPC_MFPH_PC10MFP_PWM1_CH1; + + 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_PC3MFP_Msk)); + SYS->GPC_MFPL |= SYS_GPC_MFPL_PC3MFP_PWM0_CH3; + SYS->GPC_MFPL = (SYS->GPC_MFPL & (~SYS_GPC_MFPL_PC4MFP_Msk)); + SYS->GPC_MFPL |= SYS_GPC_MFPL_PC4MFP_PWM0_CH4; + + // PWM0 channel 0 frequency is 100Hz, duty 30%, + PWM_ConfigOutputChannel(PWM0, 0, 20, 50); + // PWM0 channel 2 frequency is 300Hz, duty 50% + PWM_ConfigOutputChannel(PWM0, 1, 20, 50); + // PWM0 channel 0 frequency is 100Hz, duty 30%, + PWM_ConfigOutputChannel(PWM0, 3, 20, 30); + // PWM0 channel 2 frequency is 300Hz, duty 50% + PWM_ConfigOutputChannel(PWM0, 4, 20, 50); + + // PWM0 channel 0 frequency is 100Hz, duty 30%, + PWM_ConfigOutputChannel(PWM1, 0, 20, 50); + // PWM0 channel 2 frequency is 300Hz, duty 50% + PWM_ConfigOutputChannel(PWM1, 1, 20, 50); + + // 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(PWM1, 0x3); + PWM_EnablePeriodInt(PWM1, 0, 0); + NVIC_EnableIRQ(PWM1P0_IRQn); + // Start + PWM_Start(PWM0, 0x1F); + PWM_Start(PWM1, 0x1F); +} + + +void delay_1s(){ + for(volatile unsigned int x = 0;x < 100; x++){ + for(volatile unsigned int z = 0; z <100; z++){ + z = z; + } + } +} + +int ParsePackage(unsigned char *dat){ + if( (dat[0] == 0xAA) && (dat[1] == 0xAF) && (dat[2] == 0x03) && (dat[3] == 0x1b)){ + Axis1 = (*(dat + 4)*256 + (*(dat + 5))); + Axis2 = (*(dat + 6)*256 + (*(dat + 7))); + Axis3 = (*(dat + 8)*256 + (*(dat + 9))); + Axis4 = (*(dat + 10)*256 + (*(dat + 11))); + Axis5 = (*(dat + 12)*256 + (*(dat + 13))); + Axis6 = (*(dat + 14)*256 + (*(dat + 15))); + } +} +int main(){ + unsigned char recv[32] = {0}; + GPIO_SetMode(PC,BIT9,GPIO_MODE_INPUT); //IRQ + + Spi_init(); + RX_Mode(); + PWMInit (); + while(1){ + if(NRF24L01_RxPacket(recv) == 0) { + ParsePackage(recv); + } + } +} diff --git a/roboticarm_controller/roboticarm_controller.uvoptx b/roboticarm_controller/roboticarm_controller.uvoptx new file mode 100644 index 0000000..09842b3 --- /dev/null +++ b/roboticarm_controller/roboticarm_controller.uvoptx @@ -0,0 +1,338 @@ + + + + 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 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 8 + + + + + + + + + + + NULink\Nu_Link.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + Nu_Link + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0M451_AP_256 -FS00 -FL040000 -FP0($$Device:M453VG6AE$Flash\M451_AP_256.FLM)) + + + + + + 0 + 1 + Axis1 + + + 1 + 1 + Axis2 + + + 2 + 1 + Axis3 + + + 3 + 1 + Axis4 + + + 4 + 1 + Axis5 + + + 5 + 1 + Axis6 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + System Viewer\SPI0 + 35905 + + + + + + + Source Group 1 + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\24l01.c + 24l01.c + 0 + 0 + + + 1 + 3 + 5 + 0 + 0 + 0 + .\24l01.h + 24l01.h + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + .\spi_hal.h + spi_hal.h + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + .\spi_hal.c + spi_hal.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 0 + 0 + .\interrupt.c + interrupt.c + 0 + 0 + + + 1 + 7 + 5 + 0 + 0 + 0 + .\global.h + global.h + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 1 + 0 + 0 + 1 + + + diff --git a/roboticarm_controller/roboticarm_controller.uvprojx b/roboticarm_controller/roboticarm_controller.uvprojx new file mode 100644 index 0000000..595839f --- /dev/null +++ b/roboticarm_controller/roboticarm_controller.uvprojx @@ -0,0 +1,505 @@ + + + + 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\ + roboticarm_controller + 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 + 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 + 1 + 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 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + .\Objects\roboticarm_controller.sct + + + + + + + + + + + Source Group 1 + + + main.c + 1 + .\main.c + + + 24l01.c + 1 + .\24l01.c + + + 24l01.h + 5 + .\24l01.h + + + spi_hal.h + 5 + .\spi_hal.h + + + spi_hal.c + 1 + .\spi_hal.c + + + interrupt.c + 1 + .\interrupt.c + + + global.h + 5 + .\global.h + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\M453VG6AE\retarget.c + + + + + + + + RTE\Device\M453VG6AE\startup_M451Series.s + + + + + + + + RTE\Device\M453VG6AE\system_M451Series.c + + + + + + + + + +
diff --git a/roboticarm_controller/spi_hal.c b/roboticarm_controller/spi_hal.c new file mode 100644 index 0000000..b6560e7 --- /dev/null +++ b/roboticarm_controller/spi_hal.c @@ -0,0 +1,135 @@ +#include "M451Series.h" +#include "spi_hal.h" + +void Spi_init() +{ + /* Set PB multi-function pins for spi */ + SYS->GPB_MFPL &= ~(SYS_GPB_MFPL_PB5MFP_Msk | SYS_GPB_MFPL_PB6MFP_Msk | SYS_GPB_MFPL_PB7MFP_Msk); + SYS->GPB_MFPL |= (SYS_GPB_MFPL_PB5MFP_SPI0_MOSI0 | SYS_GPB_MFPL_PB6MFP_SPI0_MISO0|SYS_GPB_MFPL_PB7MFP_SPI0_CLK); + + SYS->GPB_MFPH &= ~(SYS_GPB_MFPH_PB13MFP_Msk | SYS_GPB_MFPH_PB14MFP_Msk | SYS_GPB_MFPH_PB15MFP_Msk); + SYS->GPB_MFPL |= (SYS_GPB_MFPH_PB13MFP_GPIO | SYS_GPB_MFPH_PB14MFP_GPIO|SYS_GPB_MFPH_PB15MFP_GPIO); + + //SYS->GPC_MFP|=((0x01<<0)|(0x01<<1)|(0x01<<2)|(0x01<<3)); + GPIO_SetMode(PB,BIT14,GPIO_MODE_OUTPUT); // CSN + GPIO_SetMode(PB,BIT13,GPIO_MODE_OUTPUT); // CE + GPIO_SetMode(PB,BIT15,GPIO_MODE_INPUT); //IRQ + + PB14 = 1; + PB13= 0; + + CLK_EnableModuleClock(SPI0_MODULE); + + SYS_ResetModule(SPI0_RST); + + /* PWM clock frequency can be set equal or double to HCLK by choosing case 1 or case 2 */ + /* case 1.PWM clock frequency is set equal to HCLK: select PWM module clock source as PCLK */ + CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL2_SPI0SEL_PCLK0, NULL); + + SPI_Open(SPI0,SPI_MASTER,SPI_MODE_0,8,40000); + + SPI_DisableAutoSS(SPI0); +} + +void delayAny(){ + for(int x = 0;x < 15;x++){ + x = x;; + } +} +void spi_enable() +{ + PB14= 0; + delayAny(); + + //SPI_SET_SS_LOW(SPI0); +} +void spi_disable() +{ + delayAny(); + + PB14 = 1; +//SPI_SET_SS_HIGH(SPI0); +} + +/* + +*/ +uchar spi_send(unsigned char data) +{ + SPI_WRITE_TX(SPI0,data); + while(SPI_IS_BUSY(SPI0) == 1) ; + return SPI_READ_RX(SPI0); +} +/* + +*/ +uchar spi_read() +{ + uchar ret; + SPI_WRITE_TX(SPI0, 0x0); + while(SPI_IS_BUSY(SPI0) == 1) ; + ret= SPI_READ_RX(SPI0); + //SPI0->CNTRL.IF=1; + return ret; +} + +uchar nrf_read(uchar adress) +{ + uchar ret; + spi_enable(); + spi_send(adress); + + ret= spi_read(); + spi_disable(); + return ret; +} + + + +uchar nrf_wf(unsigned char dat) +{ + uchar ret; + spi_enable(); + spi_send(dat); + spi_disable(); + return ret; +} + +uchar nrf_write(uchar adress,uchar data) +{ + uchar ret; + spi_enable(); + spi_send(adress); + spi_send(data); + spi_disable(); + return ret; +} + +/*****************SPI??TXFIFO?????**********************************/ +uchar NRFWriteTxDate(uchar RegAddr,uchar *TxDate,uchar DateLen) +{ + uchar BackDate,i; + BackDate=spi_send(RegAddr); + for(i=0;iP>2Fi-Qh|pp#3*;*d14RH&nis8|;V zMO^Gb%-|vltvZ$G(l{!#DgFV9hzJoX=n&{2=y^nkA3wf(?)~mrW&48d!>mgAp;KJS zujO$ac+72J16%Qei~aCF793~hHPGSvgq5IpP~uBq34GF%`Rbzv?(k<1DgR9}S^=)` zPY=)i!kEPOzyv>47{eUDQ)t79TN+OaXfH=7VT8*Os@URsgjrYTxDz3h-KR5Zx4xkK zy*i_3bXuk9mOdbd!+Mtc5zeZ-GSuQzB^;N%ZkKS*m3_J;JV1{xm2nSM?v=4P)D6<| z9D2%wQnYrrIS#=UNbm$DXknL-5_}oT7h$fnL5YK!uhl!5P zHTf;VjrhbjQzSHa9bq@FeK#4R+ObLQAl!^|Kg=k3)#=N2aChjJsgPTn92D*8n=HAF z#vtwNm?`pV75lIE&u_Et(Y&>>eA6Sc|4Xjv@GGIk7lUvVANXbv9)jg(iMF|$sL1_9 Y3!F2eI-gE-gRhFzVk&gnTv;~hzufbY^#A|> delta 517 zcmXwzPe>F|9LMK7zxSRy^F|_8ios2hH4|snc6I-Wm!w-kmr$b)rYmCP!Hz|Ub;v_f zdZ^za4|z&(sZ)#xJD1ogItnG~AtG?WAgF_Ha5{YWyzl${-j}z=`8wy9GSYKAD}2=P zz5@?{MP326u@Oz%Xod5=)3Qe10c*TSSa-tnCf0$wJS5O+TlE*?c+B4fQqE>PS_iK4 zp}-rbyUWB+Ks&#d=)yJrD6s+&O)9+V#PgQ{LS#4>pbr~-JHSmrP0HuZ0DjvU<;!L@ zDxDVPs}Yr!X_`~*=JGV9)G#*!T#;F+=@wrKF=+nwFvL~+r^Q<#p5Y7M$l)p4ct3}k zQ@d{36hKu4q@>k_v0fN#0~v%t8kC{QkTN(1HyZ2J7vEC3Qj3;%^d5S2q z>K>v>zIGA^4|F$Cp;SGIg&*1{D);yE(vJQd`M-3QM5#QLZ0m+DnDIc;<^I+gqJjU9 zkN)T?iDIdeZ2$eIKM0zbNV=cc-Z`RDF`3>|-X39^hg~m=uYBM2E}+P(u?~4FR>+N5 VGwf@lNgj$d&v#GPC_MFPL &= ~(SYS_GPB_MFPL_PB5MFP_Msk | SYS_GPB_MFPL_PB6MFP_Msk | SYS_GPB_MFPL_PB7MFP_Msk); + SYS->GPD_MFPL |= (SYS_GPB_MFPL_PB5MFP_SPI0_MOSI0 | SYS_GPB_MFPL_PB6MFP_SPI0_MISO0|SYS_GPB_MFPL_PB7MFP_SPI0_CLK); + + SYS->GPC_MFPH &= ~(SYS_GPB_MFPH_PB13MFP_Msk | SYS_GPB_MFPH_PB14MFP_Msk | SYS_GPB_MFPH_PB15MFP_Msk); + SYS->GPD_MFPL |= (SYS_GPB_MFPH_PB13MFP_GPIO | SYS_GPB_MFPL_PB6MFP_SPI0_MISO0|SYS_GPB_MFPL_PB7MFP_SPI0_CLK); + + /* 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; + + +} void PWMInit (){ CLK_EnableModuleClock(PWM0_MODULE); @@ -80,6 +100,8 @@ void PWMInit (){ // Start PWM_Start(PWM0, 0xF); } + + void I2CInit(){ /* Enable I2C0 module clock */ @@ -219,24 +241,17 @@ void EADC_FunctionTest() 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); @@ -247,8 +262,6 @@ void EADC_FunctionTest() 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]); - - } } diff --git a/steppernew/steper.uvoptx b/steppernew/steper.uvoptx index b32ab58..b72543f 100644 --- a/steppernew/steper.uvoptx +++ b/steppernew/steper.uvoptx @@ -143,56 +143,7 @@ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0M451_AP_256 -FS00 -FL040000 -FP0($$Device:M451VG6AE$Flash\M451_AP_256.FLM)) - - - 0 - 0 - 81 - 1 -
5792
- 0 - 0 - 0 - 0 - 0 - 1 - .\main.cpp - - \\steper\main.cpp\81 -
- - 1 - 0 - 78 - 1 -
5772
- 0 - 0 - 0 - 0 - 0 - 1 - .\main.cpp - - \\steper\main.cpp\78 -
- - 2 - 0 - 77 - 1 -
5762
- 0 - 0 - 0 - 0 - 0 - 1 - .\main.cpp - - \\steper\main.cpp\77 -
-
+ 0