From 29a35471f72e1cbaed22bfee5f29f9302c2c47a3 Mon Sep 17 00:00:00 2001 From: "DESKTOP-4RNDQIC\\29019" <290198252@qq.com> Date: Fri, 5 Apr 2019 00:11:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0mpu9250?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + OLED/M451/OLED_TEST/Listings/OLED.map | 16 +- OLED/M451/OLED_TEST/OLED.uvguix.29019 | 53 +- OLED/M451/OLED_TEST/Objects/OLED.axf | Bin 0 -> 309676 bytes OLED/M451/OLED_TEST/Objects/OLED.lnp | 15 + OLED/M451/OLED_TEST/ssd1306.c | 7 +- mpu6050/m451/EventRecorderStub.scvd | 9 + mpu6050/m451/Listings/mpu9250.map | 987 ++++++++++++++++++ mpu6050/m451/Objects/mpu9250.axf | Bin 0 -> 300048 bytes mpu6050/m451/Objects/mpu9250.lnp | 12 + mpu6050/m451/RTE/Device/M451RG6AE/retarget.c | 674 ++++++++++++ .../RTE/Device/M451RG6AE/startup_M451Series.s | 376 +++++++ .../RTE/Device/M451RG6AE/system_M451Series.c | 78 ++ mpu6050/m451/RTE/_Target_1/RTE_Components.h | 22 + mpu6050/m451/data.h | 115 ++ mpu6050/m451/hal.c | 229 ++++ mpu6050/m451/hal.h | 10 + mpu6050/m451/main.c | 64 ++ mpu6050/m451/mpu.c | 133 +++ mpu6050/m451/mpu9250.uvoptx | 244 +++++ mpu6050/m451/mpu9250.uvprojx | 497 +++++++++ 21 files changed, 3507 insertions(+), 36 deletions(-) create mode 100644 OLED/M451/OLED_TEST/Objects/OLED.axf create mode 100644 OLED/M451/OLED_TEST/Objects/OLED.lnp create mode 100644 mpu6050/m451/EventRecorderStub.scvd create mode 100644 mpu6050/m451/Listings/mpu9250.map create mode 100644 mpu6050/m451/Objects/mpu9250.axf create mode 100644 mpu6050/m451/Objects/mpu9250.lnp create mode 100644 mpu6050/m451/RTE/Device/M451RG6AE/retarget.c create mode 100644 mpu6050/m451/RTE/Device/M451RG6AE/startup_M451Series.s create mode 100644 mpu6050/m451/RTE/Device/M451RG6AE/system_M451Series.c create mode 100644 mpu6050/m451/RTE/_Target_1/RTE_Components.h create mode 100644 mpu6050/m451/data.h create mode 100644 mpu6050/m451/hal.c create mode 100644 mpu6050/m451/hal.h create mode 100644 mpu6050/m451/main.c create mode 100644 mpu6050/m451/mpu.c create mode 100644 mpu6050/m451/mpu9250.uvoptx create mode 100644 mpu6050/m451/mpu9250.uvprojx diff --git a/.gitignore b/.gitignore index ac34fff..be171b1 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ *.uvopt *.htm *.dep +*.o +*.crf diff --git a/OLED/M451/OLED_TEST/Listings/OLED.map b/OLED/M451/OLED_TEST/Listings/OLED.map index 1a8fa22..965388d 100644 --- a/OLED/M451/OLED_TEST/Listings/OLED.map +++ b/OLED/M451/OLED_TEST/Listings/OLED.map @@ -988,14 +988,14 @@ Image component sizes 904 100 0 0 0 20294 clk.o 150 12 0 0 0 3055 i2c.o - 444 128 0 14 0 239059 main.o - 324 132 0 8 0 5653 retarget.o - 546 10 0 4120 0 4964 ssd1306.o - 116 36 320 0 1024 924 startup_m451series.o - 316 54 0 44 0 2871 system_m451series.o + 444 128 0 14 0 239119 main.o + 324 132 0 8 0 5761 retarget.o + 546 10 0 4120 0 5080 ssd1306.o + 116 36 320 0 1024 936 startup_m451series.o + 316 54 0 44 0 2931 system_m451series.o ---------------------------------------------------------------------- - 2802 472 352 4188 1024 276820 Object Totals + 2802 472 352 4188 1024 277176 Object Totals 0 0 32 0 0 0 (incl. Generated) 2 0 0 2 0 0 (incl. Padding) @@ -1058,8 +1058,8 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug - 4014 522 394 4188 1124 274756 Grand Totals - 4014 522 394 2392 1124 274756 ELF Image Totals (compressed) + 4014 522 394 4188 1124 275112 Grand Totals + 4014 522 394 2392 1124 275112 ELF Image Totals (compressed) 4014 522 394 2392 0 0 ROM Totals ============================================================================== diff --git a/OLED/M451/OLED_TEST/OLED.uvguix.29019 b/OLED/M451/OLED_TEST/OLED.uvguix.29019 index ce71160..a2e6919 100644 --- a/OLED/M451/OLED_TEST/OLED.uvguix.29019 +++ b/OLED/M451/OLED_TEST/OLED.uvguix.29019 @@ -53,12 +53,12 @@ 346 Code Coverage - 498 1728 + 1410 160 204 Performance Analyzer - 72 235 235 1684 + 1570 @@ -97,7 +97,7 @@ 466 Source Browser 500 - 166 + 300 @@ -137,8 +137,8 @@ 0 - 1465 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000F000000000000000100000028463A5C70726F6A6563745C63266D63755C6E75633132305C4F4C45445F544553545C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF2B463A5C70726F6A6563745C63266D63755C6E75633132305C4F4C45445F544553545C737364313330362E630000000009737364313330362E6300000000FFDC7800FFFFFFFF2B463A5C70726F6A6563745C63266D63755C6E75633132305C4F4C45445F544553545C737364313330362E680000000009737364313330362E6800000000BECEA100FFFFFFFF4D433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4E55433130305C4472697665725C72657461726765742E63000000000A72657461726765742E6300000000F0A0A100FFFFFFFF2B463A5C70726F6A6563745C63266D63755C6E75633132305C4F4C45445F544553545C68616C5F6932632E63000000000968616C5F6932632E6300000000BCA8E100FFFFFFFF2B463A5C70726F6A6563745C63266D63755C6E75633132305C4F4C45445F544553545C636F64657461622E680000000009636F64657461622E68000000009CC1B600FFFFFFFF48433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4E55433130305C4472697665725C4932432E6800000000054932432E6800000000F7B88600FFFFFFFF25433A5C4B65696C5F76355C41524D5C41524D43435C696E636C7564655C737464696E742E680000000008737464696E742E6800000000D9ADC200FFFFFFFF4E433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C496E636C7564655C4D3435315365726965732E68000000000C4D3435315365726965732E6800000000A5C2D700FFFFFFFF4B463A5C70726F6A6563745C63266D63755C6E75633132305C4F4C45445F544553545C5254455C4465766963655C4D34353156473641455C737461727475705F4D3435315365726965732E730000000014737461727475705F4D3435315365726965732E7300000000B3A6BE00FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C6932632E6300000000056932632E6300000000EAD6A300FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C6932632E6800000000056932632E6800000000F6FA7D00FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C7379732E6800000000057379732E6800000000B5E99D00FFFFFFFF41463A5C70726F6A6563745C63266D63755C6E75633132305C4F4C45445F544553545C5254455C4465766963655C4D34353156473641455C72657461726765742E63000000000A72657461726765742E63000000005FC3CF00FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C7379732E6300000000057379732E6300000000C1838300FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000440100008E000000000A0000E6020000 + 1630 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000010000000000000000100000034463A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF37463A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C737364313330362E630000000009737364313330362E6300000000FFDC7800FFFFFFFF37463A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C737364313330362E680000000009737364313330362E6800000000BECEA100FFFFFFFF4D433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4E55433130305C4472697665725C72657461726765742E63000000000A72657461726765742E6300000000F0A0A100FFFFFFFF2B463A5C70726F6A6563745C63266D63755C6E75633132305C4F4C45445F544553545C68616C5F6932632E63000000000968616C5F6932632E6300000000BCA8E100FFFFFFFF37463A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C636F64657461622E680000000009636F64657461622E68000000009CC1B600FFFFFFFF48433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4E55433130305C4472697665725C4932432E6800000000054932432E6800000000F7B88600FFFFFFFF25433A5C4B65696C5F76355C41524D5C41524D43435C696E636C7564655C737464696E742E680000000008737464696E742E6800000000D9ADC200FFFFFFFF4E433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C496E636C7564655C4D3435315365726965732E68000000000C4D3435315365726965732E6800000000A5C2D700FFFFFFFF57463A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C5254455C4465766963655C4D34353156473641455C737461727475705F4D3435315365726965732E730000000014737461727475705F4D3435315365726965732E7300000000B3A6BE00FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C6932632E6300000000056932632E6300000000EAD6A300FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C6932632E6800000000056932632E6800000000F6FA7D00FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C7379732E6800000000057379732E6800000000B5E99D00FFFFFFFF4D463A5C70726F6A6563745C48617264776172654472697665725C4F4C45445C4D3435315C4F4C45445F544553545C5254455C4465766963655C4D34353156473641455C72657461726765742E63000000000A72657461726765742E63000000005FC3CF00FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C7379732E6300000000057379732E6300000000C1838300FFFFFFFF46433A5C4B65696C5F76355C41524D5C5041434B5C4E75766F746F6E5C4E754D6963726F5F4446505C312E322E305C4465766963655C4D3435315C4472697665725C636C6B2E680000000005636C6B2E6800000000CACAD500FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000440100008E000000000A0000E6020000 @@ -1826,14 +1826,14 @@ 3337 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF44010000DF00000070070000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000440100008E000000700700001E010000440100004F00000070070000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2C0600004F0000003006000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000300600008E0000007007000068020000300600004F000000700700002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F00000044010000A702000001000000020000100400000001000000C2FEFFFFB7080000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000008E00000040010000E6020000000000004F00000040010000A70200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000700700001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000005802000070070000FC020000000000001902000070070000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB803000019020000BC030000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000A7020000000A0000AB0200000100000001000010040000000100000084FDFFFF1001000000000000000000000000000001000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000000000000EA020000000A00002504000000000000AB020000000A0000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF1346696E6420416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF0500000000000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF44010000DF00000070070000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000440100008E000000700700001E010000440100004F00000070070000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2C0600004F0000003006000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000300600008E0000007007000068020000300600004F000000700700002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F00000044010000A702000001000000020000100400000001000000C2FEFFFFB7080000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000000000008E00000040010000E6020000000000004F00000040010000A70200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000700700001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000005802000070070000FC020000000000001902000070070000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB803000019020000BC030000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000A7020000000A0000AB0200000100000001000010040000000100000084FDFFFF1001000000000000000000000000000001000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000000000000EA020000000A00002504000000000000AB020000000A0000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF1346696E6420416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File - 2267 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000000960000000000000006000004382A313606463136783136034D736B07436F6E74726F6C0430783830000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65B9030000 + 2213 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65B9030000 1423 @@ -1849,7 +1849,7 @@ Build 968 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000046F6C656496000000000000000100046F6C6564000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000046F6C656496000000000000000100046F6C6564000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -3633,27 +3633,27 @@ 0 .\main.c - 0 - 94 - 127 + 23 + 1 + 143 1 0 .\ssd1306.c - 3 - 156 - 144 + 37 + 36 + 46 1 0 .\ssd1306.h - 21 + 19 1 - 14 + 10 1 0 @@ -3688,8 +3688,8 @@ C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\NUC100\Driver\I2C.h 0 - 99 - 110 + 65 + 76 1 0 @@ -3732,9 +3732,9 @@ C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\i2c.h - 16 - 31 - 42 + 0 + 61 + 77 1 0 @@ -3766,6 +3766,15 @@ 0 + + C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\clk.h + 0 + 258 + 269 + 1 + + 0 + diff --git a/OLED/M451/OLED_TEST/Objects/OLED.axf b/OLED/M451/OLED_TEST/Objects/OLED.axf new file mode 100644 index 0000000000000000000000000000000000000000..5235013738d8f295157ca4074a3f6acd7b91386d GIT binary patch literal 309676 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 z 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 literal 0 HcmV?d00001 diff --git a/OLED/M451/OLED_TEST/Objects/OLED.lnp b/OLED/M451/OLED_TEST/Objects/OLED.lnp new file mode 100644 index 0000000..88e9c28 --- /dev/null +++ b/OLED/M451/OLED_TEST/Objects/OLED.lnp @@ -0,0 +1,15 @@ +--cpu=Cortex-M4.fp +".\objects\main.o" +".\objects\ssd1306.o" +".\objects\clk.o" +".\objects\gpio.o" +".\objects\i2c.o" +".\objects\sc.o" +".\objects\sys.o" +".\objects\uart.o" +".\objects\retarget.o" +".\objects\startup_m451series.o" +".\objects\system_m451series.o" +--ro-base 0x00000000 --entry 0x00000000 --rw-base 0x20000000 --entry Reset_Handler --first __Vectors --strict --summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols +--info sizes --info totals --info unused --info veneers +--list ".\Listings\OLED.map" -o .\Objects\OLED.axf \ No newline at end of file diff --git a/OLED/M451/OLED_TEST/ssd1306.c b/OLED/M451/OLED_TEST/ssd1306.c index 317bbed..b9e1822 100644 --- a/OLED/M451/OLED_TEST/ssd1306.c +++ b/OLED/M451/OLED_TEST/ssd1306.c @@ -57,27 +57,22 @@ uint8_t OLED_SingleRead(uint8_t index) I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); I2C_WAIT_READY(LCD_I2C_PORT); - //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag - I2C_SET_DATA(LCD_I2C_PORT, index); //send index I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); I2C_WAIT_READY(LCD_I2C_PORT); - //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_STA | I2C_CTL_SI); //Start I2C_WAIT_READY(LCD_I2C_PORT); - //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag I2C_SET_DATA(LCD_I2C_PORT, (LCD_I2C_SLA+1)); //send slave address+R I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); I2C_WAIT_READY(LCD_I2C_PORT); - //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI); I2C_WAIT_READY(LCD_I2C_PORT); - //LCD_I2C_PORT->INTSTS |= I2C_INTSTS_INTSTS_Msk; //clear flag + tmp = I2C_GET_DATA(LCD_I2C_PORT); //read data I2C_SET_CONTROL_REG(LCD_I2C_PORT, I2C_CTL_SI|I2C_CTL_STO);//Stop diff --git a/mpu6050/m451/EventRecorderStub.scvd b/mpu6050/m451/EventRecorderStub.scvd new file mode 100644 index 0000000..2956b29 --- /dev/null +++ b/mpu6050/m451/EventRecorderStub.scvd @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/mpu6050/m451/Listings/mpu9250.map b/mpu6050/m451/Listings/mpu9250.map new file mode 100644 index 0000000..03573ae --- /dev/null +++ b/mpu6050/m451/Listings/mpu9250.map @@ -0,0 +1,987 @@ +Component: ARM Compiler 5.06 update 6 (build 750) Tool: armlink [4d35ed] + +============================================================================== + +Section Cross References + + main.o(i.HalInit) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + main.o(i.HalInit) refers to _printf_d.o(.ARM.Collect$$_printf_percent$$00000009) for _printf_d + main.o(i.HalInit) refers to _printf_dec.o(.text) for _printf_int_dec + main.o(i.HalInit) refers to clk.o(i.CLK_EnableXtalRC) for CLK_EnableXtalRC + main.o(i.HalInit) refers to clk.o(i.CLK_WaitClockReady) for CLK_WaitClockReady + main.o(i.HalInit) refers to clk.o(i.CLK_SetHCLK) for CLK_SetHCLK + main.o(i.HalInit) refers to clk.o(i.CLK_SetCoreClock) for CLK_SetCoreClock + main.o(i.HalInit) refers to clk.o(i.CLK_EnableModuleClock) for CLK_EnableModuleClock + main.o(i.HalInit) refers to i2c.o(i.I2C_Open) for I2C_Open + main.o(i.HalInit) refers to i2c.o(i.I2C_GetBusClockFreq) for I2C_GetBusClockFreq + main.o(i.HalInit) refers to noretval__2printf.o(.text) for __2printf + main.o(i.HalInit) refers to i2c.o(i.I2C_SetSlaveAddr) for I2C_SetSlaveAddr + main.o(i.main) refers to main.o(i.HalInit) for HalInit + main.o(i.main) refers to mpu.o(i.MpuInit) for MpuInit + hal.o(i.MPUReadBuf) refers to _printf_pad.o(.text) for _printf_pre_padding + hal.o(i.MPUReadBuf) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + hal.o(i.MPUReadBuf) refers to _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) for _printf_x + hal.o(i.MPUReadBuf) refers to _printf_hex_int.o(.text) for _printf_longlong_hex + hal.o(i.MPUReadBuf) refers to i2c.o(i.I2C_Trigger) for I2C_Trigger + hal.o(i.MPUReadBuf) refers to noretval__2printf.o(.text) for __2printf + hal.o(i.MPUReadReg) refers to _printf_pad.o(.text) for _printf_pre_padding + hal.o(i.MPUReadReg) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + hal.o(i.MPUReadReg) refers to _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) for _printf_x + hal.o(i.MPUReadReg) refers to _printf_hex_int.o(.text) for _printf_longlong_hex + hal.o(i.MPUReadReg) refers to i2c.o(i.I2C_Trigger) for I2C_Trigger + hal.o(i.MPUReadReg) refers to noretval__2printf.o(.text) for __2printf + hal.o(i.MPUWriteACK) refers to noretval__2printf.o(.text) for __2printf + hal.o(i.MPUWriteACK) refers to i2c.o(i.I2C_Trigger) for I2C_Trigger + hal.o(i.MPUWriteAddr) refers to _printf_pad.o(.text) for _printf_pre_padding + hal.o(i.MPUWriteAddr) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + hal.o(i.MPUWriteAddr) refers to _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) for _printf_x + hal.o(i.MPUWriteAddr) refers to _printf_hex_int.o(.text) for _printf_longlong_hex + hal.o(i.MPUWriteAddr) refers to noretval__2printf.o(.text) for __2printf + hal.o(i.MPUWriteAddr) refers to i2c.o(i.I2C_Trigger) for I2C_Trigger + hal.o(i.MPUWriteReg) refers to _printf_pad.o(.text) for _printf_pre_padding + hal.o(i.MPUWriteReg) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + hal.o(i.MPUWriteReg) refers to _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) for _printf_x + hal.o(i.MPUWriteReg) refers to _printf_hex_int.o(.text) for _printf_longlong_hex + hal.o(i.MPUWriteReg) refers to noretval__2printf.o(.text) for __2printf + hal.o(i.MPUWriteReg) refers to i2c.o(i.I2C_Trigger) for I2C_Trigger + mpu.o(i.MpuGetData) refers to hal.o(i.MPUReadBuf) for MPUReadBuf + mpu.o(i.MpuGetData) refers to mpu.o(.bss) for MpuOffset + mpu.o(i.MpuGetData) refers to mpu.o(.data) for pMpu + mpu.o(i.MpuInit) refers to hal.o(i.MPUWriteReg) for MPUWriteReg + mpu.o(i.MpuInit) refers to mpu.o(i.delay_ms) for delay_ms + mpu.o(i.MpuInit) refers to hal.o(i.MPUReadReg) for MPUReadReg + mpu.o(i.mpu6050_rest) refers to hal.o(i.MPUWriteReg) for MPUWriteReg + mpu.o(.data) refers to mpu.o(.bss) for MPU6050 + 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(.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 + 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 + i2c.o(i.I2C_GetBusClockFreq) refers to system_m451series.o(.data) for SystemCoreClock + i2c.o(i.I2C_Open) refers to system_m451series.o(.data) for SystemCoreClock + i2c.o(i.I2C_SetBusClockFreq) refers to system_m451series.o(.data) for SystemCoreClock + __2printf.o(.text) refers to _printf_char_file.o(.text) for _printf_char_file + __2printf.o(.text) refers to retarget.o(.data) for __stdout + 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_dec.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_ll.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_ll.o(.text) refers to _printf_hex_ll.o(.constdata) for .constdata + _printf_hex_int.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_int.o(.text) refers to _printf_hex_int.o(.constdata) for .constdata + _printf_hex_int_ll.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_int_ll.o(.text) refers to _printf_hex_int_ll.o(.constdata) for .constdata + _printf_hex_ptr.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_ptr.o(.text) refers to _printf_hex_ptr.o(.constdata) for .constdata + _printf_hex_int_ptr.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_int_ptr.o(.text) refers to _printf_hex_int_ptr.o(.constdata) for .constdata + _printf_hex_ll_ptr.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_ll_ptr.o(.text) refers to _printf_hex_ll_ptr.o(.constdata) for .constdata + _printf_hex_int_ll_ptr.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common + _printf_hex_int_ll_ptr.o(.text) refers to _printf_hex_int_ll_ptr.o(.constdata) for .constdata + __printf_flags.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags.o(.text) refers to __printf_flags.o(.constdata) for .constdata + __printf_ss.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss.o(.text) refers to __printf_flags_ss.o(.constdata) for .constdata + __printf_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_flags_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_wp.o(.text) refers to __printf_flags_wp.o(.constdata) for .constdata + __printf_ss_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_ss_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit + __printf_flags_ss_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent + __printf_flags_ss_wp.o(.text) refers to __printf_flags_ss_wp.o(.constdata) for .constdata + _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) refers (Weak) to _printf_hex_int.o(.text) for _printf_int_hex + _printf_d.o(.ARM.Collect$$_printf_percent$$00000009) refers (Weak) to _printf_dec.o(.text) for _printf_int_dec + _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) refers (Special) to _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017) for _printf_percent_end + __main.o(!!!main) refers to __rtentry.o(.ARM.Collect$$rtentry$$00000000) for __rt_entry + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) for __rt_entry_li + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) for __rt_entry_main + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000C) for __rt_entry_postli_1 + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$00000009) for __rt_entry_postsh_1 + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$00000002) for __rt_entry_presh_1 + __rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry4.o(.ARM.Collect$$rtentry$$00000004) for __rt_entry_sh + _printf_intcommon.o(.text) refers (Weak) to _printf_pad.o(.text) for _printf_pre_padding + _printf_intcommon.o(.text) refers (Weak) to _printf_pad.o(.text) for _printf_pre_padding + _printf_intcommon.o(.text) refers (Weak) to _printf_pad.o(.text) for _printf_post_padding + _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_flags_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 hal.o(.rev16_text), (4 bytes). + Removing hal.o(.revsh_text), (4 bytes). + Removing hal.o(.rrx_text), (6 bytes). + Removing hal.o(i.MPUReadBuf), (572 bytes). + Removing hal.o(i.MPUWriteACK), (164 bytes). + Removing hal.o(i.MPUWriteAddr), (156 bytes). + Removing mpu.o(i.MpuGetData), (184 bytes). + Removing mpu.o(i.mpu6050_rest), (24 bytes). + Removing mpu.o(.bss), (36 bytes). + Removing mpu.o(.data), (4 bytes). + Removing retarget.o(.rev16_text), (4 bytes). + Removing retarget.o(.revsh_text), (4 bytes). + Removing retarget.o(.rrx_text), (6 bytes). + Removing retarget.o(i.GetChar), (28 bytes). + Removing retarget.o(i.IsDebugFifoEmpty), (16 bytes). + Removing retarget.o(i._ttywrch), (12 bytes). + Removing retarget.o(i.fgetc), (10 bytes). + Removing retarget.o(i.kbhit), (16 bytes). + Removing system_m451series.o(.rev16_text), (4 bytes). + Removing system_m451series.o(.revsh_text), (4 bytes). + Removing system_m451series.o(.rrx_text), (6 bytes). + Removing clk.o(.rev16_text), (4 bytes). + Removing clk.o(.revsh_text), (4 bytes). + Removing clk.o(.rrx_text), (6 bytes). + Removing clk.o(i.CLK_DisableCKO), (16 bytes). + Removing clk.o(i.CLK_DisableModuleClock), (44 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_EnableSysTick), (72 bytes). + Removing clk.o(i.CLK_GetCPUFreq), (16 bytes). + Removing clk.o(i.CLK_GetHCLKFreq), (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_Idle), (40 bytes). + Removing clk.o(i.CLK_PowerDown), (40 bytes). + Removing clk.o(i.CLK_SetModuleClock), (84 bytes). + Removing clk.o(i.CLK_SetSysTickClockSrc), (24 bytes). + Removing i2c.o(.rev16_text), (4 bytes). + Removing i2c.o(.revsh_text), (4 bytes). + Removing i2c.o(.rrx_text), (6 bytes). + Removing i2c.o(i.I2C_ClearTimeoutFlag), (10 bytes). + Removing i2c.o(i.I2C_Close), (76 bytes). + Removing i2c.o(i.I2C_DisableInt), (10 bytes). + Removing i2c.o(i.I2C_DisableTimeout), (10 bytes). + Removing i2c.o(i.I2C_DisableWakeup), (10 bytes). + Removing i2c.o(i.I2C_EnableInt), (10 bytes). + Removing i2c.o(i.I2C_EnableTimeout), (30 bytes). + Removing i2c.o(i.I2C_EnableWakeup), (10 bytes). + Removing i2c.o(i.I2C_GetData), (8 bytes). + Removing i2c.o(i.I2C_GetIntFlag), (10 bytes). + Removing i2c.o(i.I2C_GetStatus), (6 bytes). + Removing i2c.o(i.I2C_SMBusClearInterruptFlag), (8 bytes). + Removing i2c.o(i.I2C_SMBusClockLoTimeout), (70 bytes). + Removing i2c.o(i.I2C_SMBusClose), (6 bytes). + Removing i2c.o(i.I2C_SMBusGetPECValue), (8 bytes). + Removing i2c.o(i.I2C_SMBusGetStatus), (6 bytes). + Removing i2c.o(i.I2C_SMBusIdleTimeout), (50 bytes). + Removing i2c.o(i.I2C_SMBusOpen), (32 bytes). + Removing i2c.o(i.I2C_SMBusPECTxEnable), (30 bytes). + Removing i2c.o(i.I2C_SMBusSetPacketByteCount), (4 bytes). + Removing i2c.o(i.I2C_SMBusTimeout), (70 bytes). + Removing i2c.o(i.I2C_SetBusClockFreq), (52 bytes). + Removing i2c.o(i.I2C_SetData), (4 bytes). + Removing i2c.o(i.I2C_SetSlaveAddrMask), (46 bytes). + +70 unused section(s) (total 2444 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 rtexit.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 rtexit2.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry2.o ABSOLUTE + ../clib/angel/kernel.s 0x00000000 Number 0 __rtentry4.o ABSOLUTE + ../clib/angel/rt.s 0x00000000 Number 0 rt_raise.o ABSOLUTE + ../clib/angel/scatter.s 0x00000000 Number 0 __scatter.o ABSOLUTE + ../clib/angel/startup.s 0x00000000 Number 0 __main.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 sys_stackheap_outer.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 indicate_semi.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 use_no_semi.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 libspace.o ABSOLUTE + ../clib/angel/sysapp.c 0x00000000 Number 0 sys_command.o ABSOLUTE + ../clib/angel/sysapp.c 0x00000000 Number 0 sys_exit.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 no_argv.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 _get_argv_nomalloc.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE + ../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE + ../clib/heapalloc.c 0x00000000 Number 0 hrguard.o ABSOLUTE + ../clib/heapaux.c 0x00000000 Number 0 heapauxi.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libshutdown2.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libinit2.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libinit.o ABSOLUTE + ../clib/libinit.s 0x00000000 Number 0 libshutdown.o ABSOLUTE + ../clib/misc.s 0x00000000 Number 0 printf_stubs.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_intcommon.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_char_file.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_pad.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __2printf.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_flags.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_dec.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_ll.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_hex_int.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_ss.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags_ss.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_nopercent.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 _printf_char_common.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_ss_wp.o ABSOLUTE + ../clib/printf.c 0x00000000 Number 0 __printf_flags_ss_wp.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_d.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_percent_end.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_x.o ABSOLUTE + ../clib/printf_percent.s 0x00000000 Number 0 _printf_percent.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_formal.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 __raise.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_outer.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_exit.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_pvfn_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_other.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_segv_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_cppl_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_stak_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtred_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_fpe_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_abrt_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_general.o ABSOLUTE + ../clib/signal.s 0x00000000 Number 0 defsig.o ABSOLUTE + ../clib/stdlib.c 0x00000000 Number 0 exit.o ABSOLUTE + ../fplib/fpinit.s 0x00000000 Number 0 fpinit.o ABSOLUTE + C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\clk.c 0x00000000 Number 0 clk.o ABSOLUTE + C:\Keil_v5\ARM\PACK\Nuvoton\NuMicro_DFP\1.2.0\Device\M451\Driver\i2c.c 0x00000000 Number 0 i2c.o ABSOLUTE + C:\\Keil_v5\\ARM\\PACK\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\clk.c 0x00000000 Number 0 clk.o ABSOLUTE + C:\\Keil_v5\\ARM\\PACK\\Nuvoton\\NuMicro_DFP\\1.2.0\\Device\\M451\\Driver\\i2c.c 0x00000000 Number 0 i2c.o ABSOLUTE + RTE\Device\M451RG6AE\retarget.c 0x00000000 Number 0 retarget.o ABSOLUTE + RTE\Device\M451RG6AE\startup_M451Series.s 0x00000000 Number 0 startup_m451series.o ABSOLUTE + RTE\Device\M451RG6AE\system_M451Series.c 0x00000000 Number 0 system_m451series.o ABSOLUTE + RTE\\Device\\M451RG6AE\\retarget.c 0x00000000 Number 0 retarget.o ABSOLUTE + RTE\\Device\\M451RG6AE\\system_M451Series.c 0x00000000 Number 0 system_m451series.o ABSOLUTE + dc.s 0x00000000 Number 0 dc.o ABSOLUTE + hal.c 0x00000000 Number 0 hal.o ABSOLUTE + hal.c 0x00000000 Number 0 hal.o ABSOLUTE + main.c 0x00000000 Number 0 main.o ABSOLUTE + main.c 0x00000000 Number 0 main.o ABSOLUTE + mpu.c 0x00000000 Number 0 mpu.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$$00000009 0x000001b4 Section 6 _printf_d.o(.ARM.Collect$$_printf_percent$$00000009) + .ARM.Collect$$_printf_percent$$0000000C 0x000001ba Section 6 _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) + .ARM.Collect$$_printf_percent$$00000017 0x000001c0 Section 4 _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017) + .ARM.Collect$$libinit$$00000000 0x000001c4 Section 2 libinit.o(.ARM.Collect$$libinit$$00000000) + .ARM.Collect$$libinit$$00000001 0x000001c6 Section 4 libinit2.o(.ARM.Collect$$libinit$$00000001) + .ARM.Collect$$libinit$$00000004 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$00000004) + .ARM.Collect$$libinit$$0000000A 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000A) + .ARM.Collect$$libinit$$0000000C 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000C) + .ARM.Collect$$libinit$$0000000E 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000E) + .ARM.Collect$$libinit$$00000011 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$00000011) + .ARM.Collect$$libinit$$00000013 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$00000013) + .ARM.Collect$$libinit$$00000015 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$00000015) + .ARM.Collect$$libinit$$00000017 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$00000017) + .ARM.Collect$$libinit$$00000019 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$00000019) + .ARM.Collect$$libinit$$0000001B 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001B) + .ARM.Collect$$libinit$$0000001D 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001D) + .ARM.Collect$$libinit$$0000001F 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001F) + .ARM.Collect$$libinit$$00000021 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$00000021) + .ARM.Collect$$libinit$$00000023 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$00000023) + .ARM.Collect$$libinit$$00000025 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$00000025) + .ARM.Collect$$libinit$$0000002C 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$0000002C) + .ARM.Collect$$libinit$$0000002E 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$0000002E) + .ARM.Collect$$libinit$$00000030 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$00000030) + .ARM.Collect$$libinit$$00000032 0x000001ca Section 0 libinit2.o(.ARM.Collect$$libinit$$00000032) + .ARM.Collect$$libinit$$00000033 0x000001ca Section 2 libinit2.o(.ARM.Collect$$libinit$$00000033) + .ARM.Collect$$libshutdown$$00000000 0x000001cc Section 2 libshutdown.o(.ARM.Collect$$libshutdown$$00000000) + .ARM.Collect$$libshutdown$$00000002 0x000001ce Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000002) + .ARM.Collect$$libshutdown$$00000004 0x000001ce Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000004) + .ARM.Collect$$libshutdown$$00000007 0x000001ce Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000007) + .ARM.Collect$$libshutdown$$0000000A 0x000001ce Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A) + .ARM.Collect$$libshutdown$$0000000C 0x000001ce Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C) + .ARM.Collect$$libshutdown$$0000000F 0x000001ce Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F) + .ARM.Collect$$libshutdown$$00000010 0x000001ce Section 2 libshutdown2.o(.ARM.Collect$$libshutdown$$00000010) + .ARM.Collect$$rtentry$$00000000 0x000001d0 Section 0 __rtentry.o(.ARM.Collect$$rtentry$$00000000) + .ARM.Collect$$rtentry$$00000002 0x000001d0 Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000002) + .ARM.Collect$$rtentry$$00000004 0x000001d0 Section 6 __rtentry4.o(.ARM.Collect$$rtentry$$00000004) + .ARM.Collect$$rtentry$$00000009 0x000001d6 Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000009) + .ARM.Collect$$rtentry$$0000000A 0x000001d6 Section 4 __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) + .ARM.Collect$$rtentry$$0000000C 0x000001da Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000C) + .ARM.Collect$$rtentry$$0000000D 0x000001da Section 8 __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) + .ARM.Collect$$rtexit$$00000000 0x000001e2 Section 2 rtexit.o(.ARM.Collect$$rtexit$$00000000) + .ARM.Collect$$rtexit$$00000002 0x000001e4 Section 0 rtexit2.o(.ARM.Collect$$rtexit$$00000002) + .ARM.Collect$$rtexit$$00000003 0x000001e4 Section 4 rtexit2.o(.ARM.Collect$$rtexit$$00000003) + .ARM.Collect$$rtexit$$00000004 0x000001e8 Section 6 rtexit2.o(.ARM.Collect$$rtexit$$00000004) + .emb_text 0x000001f0 Section 28 retarget.o(.emb_text) + $v0 0x000001f0 Number 0 retarget.o(.emb_text) + .text 0x0000020c Section 116 startup_m451series.o(.text) + $v0 0x0000020c Number 0 startup_m451series.o(.text) + Default_Handler 0x00000251 Thumb Code 2 startup_m451series.o(.text) + .text 0x00000280 Section 0 noretval__2printf.o(.text) + .text 0x00000298 Section 0 _printf_pad.o(.text) + .text 0x000002e8 Section 0 _printf_dec.o(.text) + .text 0x00000360 Section 0 _printf_hex_int.o(.text) + .text 0x000003b8 Section 0 __printf_flags_wp.o(.text) + .text 0x000004f0 Section 0 heapauxi.o(.text) + .text 0x000004f6 Section 0 _printf_intcommon.o(.text) + .text 0x000005a8 Section 0 _printf_char_file.o(.text) + .text 0x000005cc Section 0 _printf_char_common.o(.text) + _printf_input_char 0x000005cd Thumb Code 10 _printf_char_common.o(.text) + .text 0x000005fc Section 74 sys_stackheap_outer.o(.text) + .text 0x00000646 Section 0 exit.o(.text) + .text 0x00000658 Section 8 libspace.o(.text) + .text 0x00000660 Section 0 sys_exit.o(.text) + .text 0x0000066c Section 2 use_no_semi.o(.text) + .text 0x0000066e Section 0 indicate_semi.o(.text) + i.CLK_DisablePLL 0x00000670 Section 0 clk.o(i.CLK_DisablePLL) + i.CLK_EnableModuleClock 0x00000688 Section 0 clk.o(i.CLK_EnableModuleClock) + i.CLK_EnablePLL 0x000006b4 Section 0 clk.o(i.CLK_EnablePLL) + i.CLK_EnableXtalRC 0x0000082c Section 0 clk.o(i.CLK_EnableXtalRC) + i.CLK_GetPLLClockFreq 0x00000840 Section 0 clk.o(i.CLK_GetPLLClockFreq) + CLK_GetPLLClockFreq 0x00000841 Thumb Code 84 clk.o(i.CLK_GetPLLClockFreq) + i.CLK_SetCoreClock 0x000008a4 Section 0 clk.o(i.CLK_SetCoreClock) + i.CLK_SetHCLK 0x00000954 Section 0 clk.o(i.CLK_SetHCLK) + i.CLK_WaitClockReady 0x000009d0 Section 0 clk.o(i.CLK_WaitClockReady) + i.HalInit 0x000009f8 Section 0 main.o(i.HalInit) + i.Hard_Fault_Handler 0x00000ad0 Section 0 retarget.o(i.Hard_Fault_Handler) + __tagsym$$used 0x00000ad1 Number 0 retarget.o(i.Hard_Fault_Handler) + i.I2C_GetBusClockFreq 0x00000afc Section 0 i2c.o(i.I2C_GetBusClockFreq) + i.I2C_Open 0x00000b14 Section 0 i2c.o(i.I2C_Open) + i.I2C_SetSlaveAddr 0x00000b50 Section 0 i2c.o(i.I2C_SetSlaveAddr) + i.I2C_Trigger 0x00000b88 Section 0 i2c.o(i.I2C_Trigger) + i.MPUReadReg 0x00000bb4 Section 0 hal.o(i.MPUReadReg) + i.MPUWriteReg 0x00000df8 Section 0 hal.o(i.MPUWriteReg) + i.MpuInit 0x00000f6c Section 0 mpu.o(i.MpuInit) + i.SendChar 0x00000fd8 Section 0 retarget.o(i.SendChar) + i.SendChar_ToUART 0x00000fe4 Section 0 retarget.o(i.SendChar_ToUART) + i.SystemCoreClockUpdate 0x00001014 Section 0 system_m451series.o(i.SystemCoreClockUpdate) + i.SystemInit 0x00001018 Section 0 system_m451series.o(i.SystemInit) + i._is_digit 0x0000108c Section 0 __printf_wp.o(i._is_digit) + i.delay_ms 0x0000109a Section 0 mpu.o(i.delay_ms) + i.ferror 0x000010be Section 0 retarget.o(i.ferror) + i.fputc 0x000010c6 Section 0 retarget.o(i.fputc) + i.main 0x000010d6 Section 0 main.o(i.main) + i.stackDump 0x000010e4 Section 0 retarget.o(i.stackDump) + stackDump 0x000010e5 Thumb Code 70 retarget.o(i.stackDump) + x$fpl$fpinit 0x0000118c Section 10 fpinit.o(x$fpl$fpinit) + $v0 0x0000118c Number 0 fpinit.o(x$fpl$fpinit) + .constdata 0x00001196 Section 40 _printf_hex_int.o(.constdata) + uc_hextab 0x00001196 Data 20 _printf_hex_int.o(.constdata) + lc_hextab 0x000011aa Data 20 _printf_hex_int.o(.constdata) + .constdata 0x000011be Section 17 __printf_flags_wp.o(.constdata) + maptable 0x000011be Data 17 __printf_flags_wp.o(.constdata) + .data 0x20000000 Section 8 retarget.o(.data) + .data 0x20000008 Section 44 system_m451series.o(.data) + .bss 0x20000034 Section 96 libspace.o(.bss) + HEAP 0x20000098 Section 0 startup_m451series.o(HEAP) + STACK 0x20000098 Section 1024 startup_m451series.o(STACK) + Heap_Mem 0x20000098 Data 0 startup_m451series.o(HEAP) + Stack_Mem 0x20000098 Data 1024 startup_m451series.o(STACK) + __initial_sp 0x20000498 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_truncate_signed - Undefined Weak Reference + _printf_truncate_unsigned - Undefined Weak Reference + _rand_init - Undefined Weak Reference + _signal_finish - Undefined Weak Reference + _signal_init - Undefined Weak Reference + _terminate_alloc - Undefined Weak Reference + _terminate_user_alloc - Undefined Weak Reference + _terminateio - Undefined Weak Reference + __Vectors_End 0x00000140 Data 0 startup_m451series.o(RESET) + __Vectors_Size 0x00000140 Number 0 startup_m451series.o ABSOLUTE + __main 0x00000141 Thumb Code 8 __main.o(!!!main) + __scatterload 0x00000149 Thumb Code 0 __scatter.o(!!!scatter) + __scatterload_rt2 0x00000149 Thumb Code 44 __scatter.o(!!!scatter) + __scatterload_rt2_thumb_only 0x00000149 Thumb Code 0 __scatter.o(!!!scatter) + __scatterload_null 0x00000157 Thumb Code 0 __scatter.o(!!!scatter) + __scatterload_copy 0x0000017d Thumb Code 26 __scatter_copy.o(!!handler_copy) + __scatterload_zeroinit 0x00000199 Thumb Code 28 __scatter_zi.o(!!handler_zi) + _printf_d 0x000001b5 Thumb Code 0 _printf_d.o(.ARM.Collect$$_printf_percent$$00000009) + _printf_percent 0x000001b5 Thumb Code 0 _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) + _printf_x 0x000001bb Thumb Code 0 _printf_x.o(.ARM.Collect$$_printf_percent$$0000000C) + _printf_percent_end 0x000001c1 Thumb Code 0 _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017) + __rt_lib_init 0x000001c5 Thumb Code 0 libinit.o(.ARM.Collect$$libinit$$00000000) + __rt_lib_init_fp_1 0x000001c7 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000001) + __rt_lib_init_alloca_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000002E) + __rt_lib_init_argv_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000002C) + __rt_lib_init_atexit_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001B) + __rt_lib_init_clock_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000021) + __rt_lib_init_cpp_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000032) + __rt_lib_init_exceptions_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000030) + __rt_lib_init_fp_trap_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001F) + __rt_lib_init_getenv_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000023) + __rt_lib_init_heap_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000A) + __rt_lib_init_lc_collate_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000011) + __rt_lib_init_lc_ctype_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000013) + __rt_lib_init_lc_monetary_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000015) + __rt_lib_init_lc_numeric_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000017) + __rt_lib_init_lc_time_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000019) + __rt_lib_init_preinit_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000004) + __rt_lib_init_rand_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000E) + __rt_lib_init_return 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000033) + __rt_lib_init_signal_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001D) + __rt_lib_init_stdio_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000025) + __rt_lib_init_user_alloc_1 0x000001cb Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000C) + __rt_lib_shutdown 0x000001cd Thumb Code 0 libshutdown.o(.ARM.Collect$$libshutdown$$00000000) + __rt_lib_shutdown_cpp_1 0x000001cf Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000002) + __rt_lib_shutdown_fp_trap_1 0x000001cf Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000007) + __rt_lib_shutdown_heap_1 0x000001cf Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F) + __rt_lib_shutdown_return 0x000001cf Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000010) + __rt_lib_shutdown_signal_1 0x000001cf Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A) + __rt_lib_shutdown_stdio_1 0x000001cf Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000004) + __rt_lib_shutdown_user_alloc_1 0x000001cf Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C) + __rt_entry 0x000001d1 Thumb Code 0 __rtentry.o(.ARM.Collect$$rtentry$$00000000) + __rt_entry_presh_1 0x000001d1 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000002) + __rt_entry_sh 0x000001d1 Thumb Code 0 __rtentry4.o(.ARM.Collect$$rtentry$$00000004) + __rt_entry_li 0x000001d7 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) + __rt_entry_postsh_1 0x000001d7 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000009) + __rt_entry_main 0x000001db Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) + __rt_entry_postli_1 0x000001db Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000C) + __rt_exit 0x000001e3 Thumb Code 0 rtexit.o(.ARM.Collect$$rtexit$$00000000) + __rt_exit_ls 0x000001e5 Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000003) + __rt_exit_prels_1 0x000001e5 Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000002) + __rt_exit_exit 0x000001e9 Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000004) + HardFault_Handler 0x000001f1 Thumb Code 24 retarget.o(.emb_text) + Reset_Handler 0x0000020d Thumb Code 50 startup_m451series.o(.text) + NMI_Handler 0x0000023f Thumb Code 2 startup_m451series.o(.text) + MemManage_Handler 0x00000243 Thumb Code 2 startup_m451series.o(.text) + BusFault_Handler 0x00000245 Thumb Code 2 startup_m451series.o(.text) + UsageFault_Handler 0x00000247 Thumb Code 2 startup_m451series.o(.text) + SVC_Handler 0x00000249 Thumb Code 2 startup_m451series.o(.text) + DebugMon_Handler 0x0000024b Thumb Code 2 startup_m451series.o(.text) + PendSV_Handler 0x0000024d Thumb Code 2 startup_m451series.o(.text) + SysTick_Handler 0x0000024f Thumb Code 2 startup_m451series.o(.text) + ACMP01_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + ADC00_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + ADC01_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + ADC02_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + ADC03_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + BOD_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + BRAKE0_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + BRAKE1_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + CAN0_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + CLKFAIL_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + DAC_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + EINT0_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + EINT1_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + EINT2_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + EINT3_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + EINT4_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + EINT5_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + GPA_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + GPB_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + GPC_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + GPD_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + GPE_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + GPF_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + I2C0_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + I2C1_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + IRC_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + PDMA_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + PWM0P0_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + PWM0P1_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + PWM0P2_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + PWM1P0_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + PWM1P1_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + PWM1P2_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + PWRWU_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + RAMPE_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + RTC_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + SC0_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + SPI0_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + SPI1_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + SPI2_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + TAMPER_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + TK_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + TMR0_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + TMR1_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + TMR2_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + TMR3_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + UART0_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + UART1_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + UART2_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + UART3_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + USBD_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + USBH_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + USBOTG_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + WDT_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + WWDT_IRQHandler 0x00000251 Thumb Code 0 startup_m451series.o(.text) + __user_initial_stackheap 0x00000255 Thumb Code 10 startup_m451series.o(.text) + __2printf 0x00000281 Thumb Code 20 noretval__2printf.o(.text) + _printf_pre_padding 0x00000299 Thumb Code 44 _printf_pad.o(.text) + _printf_post_padding 0x000002c5 Thumb Code 34 _printf_pad.o(.text) + _printf_int_dec 0x000002e9 Thumb Code 104 _printf_dec.o(.text) + _printf_int_hex 0x00000361 Thumb Code 84 _printf_hex_int.o(.text) + _printf_longlong_hex 0x00000361 Thumb Code 0 _printf_hex_int.o(.text) + __printf 0x000003b9 Thumb Code 308 __printf_flags_wp.o(.text) + __use_two_region_memory 0x000004f1 Thumb Code 2 heapauxi.o(.text) + __rt_heap_escrow$2region 0x000004f3 Thumb Code 2 heapauxi.o(.text) + __rt_heap_expand$2region 0x000004f5 Thumb Code 2 heapauxi.o(.text) + _printf_int_common 0x000004f7 Thumb Code 178 _printf_intcommon.o(.text) + _printf_char_file 0x000005a9 Thumb Code 32 _printf_char_file.o(.text) + _printf_char_common 0x000005d7 Thumb Code 32 _printf_char_common.o(.text) + __user_setup_stackheap 0x000005fd Thumb Code 74 sys_stackheap_outer.o(.text) + exit 0x00000647 Thumb Code 18 exit.o(.text) + __user_libspace 0x00000659 Thumb Code 8 libspace.o(.text) + __user_perproc_libspace 0x00000659 Thumb Code 0 libspace.o(.text) + __user_perthread_libspace 0x00000659 Thumb Code 0 libspace.o(.text) + _sys_exit 0x00000661 Thumb Code 8 sys_exit.o(.text) + __I$use$semihosting 0x0000066d Thumb Code 0 use_no_semi.o(.text) + __use_no_semihosting_swi 0x0000066d Thumb Code 2 use_no_semi.o(.text) + __semihosting_library_function 0x0000066f Thumb Code 0 indicate_semi.o(.text) + CLK_DisablePLL 0x00000671 Thumb Code 18 clk.o(i.CLK_DisablePLL) + CLK_EnableModuleClock 0x00000689 Thumb Code 44 clk.o(i.CLK_EnableModuleClock) + CLK_EnablePLL 0x000006b5 Thumb Code 330 clk.o(i.CLK_EnablePLL) + CLK_EnableXtalRC 0x0000082d Thumb Code 16 clk.o(i.CLK_EnableXtalRC) + CLK_SetCoreClock 0x000008a5 Thumb Code 162 clk.o(i.CLK_SetCoreClock) + CLK_SetHCLK 0x00000955 Thumb Code 118 clk.o(i.CLK_SetHCLK) + CLK_WaitClockReady 0x000009d1 Thumb Code 32 clk.o(i.CLK_WaitClockReady) + HalInit 0x000009f9 Thumb Code 180 main.o(i.HalInit) + Hard_Fault_Handler 0x00000ad1 Thumb Code 18 retarget.o(i.Hard_Fault_Handler) + I2C_GetBusClockFreq 0x00000afd Thumb Code 18 i2c.o(i.I2C_GetBusClockFreq) + I2C_Open 0x00000b15 Thumb Code 54 i2c.o(i.I2C_Open) + I2C_SetSlaveAddr 0x00000b51 Thumb Code 56 i2c.o(i.I2C_SetSlaveAddr) + I2C_Trigger 0x00000b89 Thumb Code 44 i2c.o(i.I2C_Trigger) + MPUReadReg 0x00000bb5 Thumb Code 384 hal.o(i.MPUReadReg) + MPUWriteReg 0x00000df9 Thumb Code 246 hal.o(i.MPUWriteReg) + MpuInit 0x00000f6d Thumb Code 108 mpu.o(i.MpuInit) + SendChar 0x00000fd9 Thumb Code 12 retarget.o(i.SendChar) + SendChar_ToUART 0x00000fe5 Thumb Code 44 retarget.o(i.SendChar_ToUART) + SystemCoreClockUpdate 0x00001015 Thumb Code 2 system_m451series.o(i.SystemCoreClockUpdate) + SystemInit 0x00001019 Thumb Code 104 system_m451series.o(i.SystemInit) + _is_digit 0x0000108d Thumb Code 14 __printf_wp.o(i._is_digit) + delay_ms 0x0000109b Thumb Code 36 mpu.o(i.delay_ms) + ferror 0x000010bf Thumb Code 8 retarget.o(i.ferror) + fputc 0x000010c7 Thumb Code 16 retarget.o(i.fputc) + main 0x000010d7 Thumb Code 14 main.o(i.main) + _fp_init 0x0000118d Thumb Code 10 fpinit.o(x$fpl$fpinit) + __fplib_config_fpu_vfp 0x00001195 Thumb Code 0 fpinit.o(x$fpl$fpinit) + __fplib_config_pureend_doubles 0x00001195 Thumb Code 0 fpinit.o(x$fpl$fpinit) + Region$$Table$$Base 0x000011d0 Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x000011f0 Number 0 anon$$obj.o(Region$$Table) + __stdout 0x20000000 Data 4 retarget.o(.data) + __stdin 0x20000004 Data 4 retarget.o(.data) + SystemCoreClock 0x20000008 Data 4 system_m451series.o(.data) + CyclesPerUs 0x2000000c Data 4 system_m451series.o(.data) + PllClock 0x20000010 Data 4 system_m451series.o(.data) + gau32ClkSrcTbl 0x20000014 Data 32 system_m451series.o(.data) + __libspace_start 0x20000034 Data 96 libspace.o(.bss) + __temporary_stack_top$libspace 0x20000094 Data 0 libspace.o(.bss) + + + +============================================================================== + +Memory Map of the image + + Image Entry point : 0x0000020d + + Load Region LR_1 (Base: 0x00000000, Size: 0x00001224, Max: 0xffffffff, ABSOLUTE) + + Execution Region ER_RO (Exec base: 0x00000000, Load base: 0x00000000, Size: 0x000011f0, Max: 0xffffffff, ABSOLUTE) + + Exec Addr Load Addr Size Type Attr Idx E Section Name Object + + 0x00000000 0x00000000 0x00000140 Data RO 347 RESET startup_m451series.o + 0x00000140 0x00000140 0x00000008 Code RO 796 * !!!main c_w.l(__main.o) + 0x00000148 0x00000148 0x00000034 Code RO 960 !!!scatter c_w.l(__scatter.o) + 0x0000017c 0x0000017c 0x0000001a Code RO 962 !!handler_copy c_w.l(__scatter_copy.o) + 0x00000196 0x00000196 0x00000002 PAD + 0x00000198 0x00000198 0x0000001c Code RO 964 !!handler_zi c_w.l(__scatter_zi.o) + 0x000001b4 0x000001b4 0x00000000 Code RO 793 .ARM.Collect$$_printf_percent$$00000000 c_w.l(_printf_percent.o) + 0x000001b4 0x000001b4 0x00000006 Code RO 792 .ARM.Collect$$_printf_percent$$00000009 c_w.l(_printf_d.o) + 0x000001ba 0x000001ba 0x00000006 Code RO 791 .ARM.Collect$$_printf_percent$$0000000C c_w.l(_printf_x.o) + 0x000001c0 0x000001c0 0x00000004 Code RO 803 .ARM.Collect$$_printf_percent$$00000017 c_w.l(_printf_percent_end.o) + 0x000001c4 0x000001c4 0x00000002 Code RO 832 .ARM.Collect$$libinit$$00000000 c_w.l(libinit.o) + 0x000001c6 0x000001c6 0x00000004 Code RO 838 .ARM.Collect$$libinit$$00000001 c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 841 .ARM.Collect$$libinit$$00000004 c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 844 .ARM.Collect$$libinit$$0000000A c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 846 .ARM.Collect$$libinit$$0000000C c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 848 .ARM.Collect$$libinit$$0000000E c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 851 .ARM.Collect$$libinit$$00000011 c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 853 .ARM.Collect$$libinit$$00000013 c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 855 .ARM.Collect$$libinit$$00000015 c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 857 .ARM.Collect$$libinit$$00000017 c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 859 .ARM.Collect$$libinit$$00000019 c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 861 .ARM.Collect$$libinit$$0000001B c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 863 .ARM.Collect$$libinit$$0000001D c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 865 .ARM.Collect$$libinit$$0000001F c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 867 .ARM.Collect$$libinit$$00000021 c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 869 .ARM.Collect$$libinit$$00000023 c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 871 .ARM.Collect$$libinit$$00000025 c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 875 .ARM.Collect$$libinit$$0000002C c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 877 .ARM.Collect$$libinit$$0000002E c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 879 .ARM.Collect$$libinit$$00000030 c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000000 Code RO 881 .ARM.Collect$$libinit$$00000032 c_w.l(libinit2.o) + 0x000001ca 0x000001ca 0x00000002 Code RO 882 .ARM.Collect$$libinit$$00000033 c_w.l(libinit2.o) + 0x000001cc 0x000001cc 0x00000002 Code RO 902 .ARM.Collect$$libshutdown$$00000000 c_w.l(libshutdown.o) + 0x000001ce 0x000001ce 0x00000000 Code RO 915 .ARM.Collect$$libshutdown$$00000002 c_w.l(libshutdown2.o) + 0x000001ce 0x000001ce 0x00000000 Code RO 917 .ARM.Collect$$libshutdown$$00000004 c_w.l(libshutdown2.o) + 0x000001ce 0x000001ce 0x00000000 Code RO 920 .ARM.Collect$$libshutdown$$00000007 c_w.l(libshutdown2.o) + 0x000001ce 0x000001ce 0x00000000 Code RO 923 .ARM.Collect$$libshutdown$$0000000A c_w.l(libshutdown2.o) + 0x000001ce 0x000001ce 0x00000000 Code RO 925 .ARM.Collect$$libshutdown$$0000000C c_w.l(libshutdown2.o) + 0x000001ce 0x000001ce 0x00000000 Code RO 928 .ARM.Collect$$libshutdown$$0000000F c_w.l(libshutdown2.o) + 0x000001ce 0x000001ce 0x00000002 Code RO 929 .ARM.Collect$$libshutdown$$00000010 c_w.l(libshutdown2.o) + 0x000001d0 0x000001d0 0x00000000 Code RO 798 .ARM.Collect$$rtentry$$00000000 c_w.l(__rtentry.o) + 0x000001d0 0x000001d0 0x00000000 Code RO 805 .ARM.Collect$$rtentry$$00000002 c_w.l(__rtentry2.o) + 0x000001d0 0x000001d0 0x00000006 Code RO 817 .ARM.Collect$$rtentry$$00000004 c_w.l(__rtentry4.o) + 0x000001d6 0x000001d6 0x00000000 Code RO 807 .ARM.Collect$$rtentry$$00000009 c_w.l(__rtentry2.o) + 0x000001d6 0x000001d6 0x00000004 Code RO 808 .ARM.Collect$$rtentry$$0000000A c_w.l(__rtentry2.o) + 0x000001da 0x000001da 0x00000000 Code RO 810 .ARM.Collect$$rtentry$$0000000C c_w.l(__rtentry2.o) + 0x000001da 0x000001da 0x00000008 Code RO 811 .ARM.Collect$$rtentry$$0000000D c_w.l(__rtentry2.o) + 0x000001e2 0x000001e2 0x00000002 Code RO 836 .ARM.Collect$$rtexit$$00000000 c_w.l(rtexit.o) + 0x000001e4 0x000001e4 0x00000000 Code RO 884 .ARM.Collect$$rtexit$$00000002 c_w.l(rtexit2.o) + 0x000001e4 0x000001e4 0x00000004 Code RO 885 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o) + 0x000001e8 0x000001e8 0x00000006 Code RO 886 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o) + 0x000001ee 0x000001ee 0x00000002 PAD + 0x000001f0 0x000001f0 0x0000001c Code RO 232 .emb_text retarget.o + 0x0000020c 0x0000020c 0x00000074 Code RO 348 * .text startup_m451series.o + 0x00000280 0x00000280 0x00000018 Code RO 742 .text c_w.l(noretval__2printf.o) + 0x00000298 0x00000298 0x0000004e Code RO 746 .text c_w.l(_printf_pad.o) + 0x000002e6 0x000002e6 0x00000002 PAD + 0x000002e8 0x000002e8 0x00000078 Code RO 748 .text c_w.l(_printf_dec.o) + 0x00000360 0x00000360 0x00000058 Code RO 753 .text c_w.l(_printf_hex_int.o) + 0x000003b8 0x000003b8 0x00000138 Code RO 783 .text c_w.l(__printf_flags_wp.o) + 0x000004f0 0x000004f0 0x00000006 Code RO 794 .text c_w.l(heapauxi.o) + 0x000004f6 0x000004f6 0x000000b2 Code RO 799 .text c_w.l(_printf_intcommon.o) + 0x000005a8 0x000005a8 0x00000024 Code RO 801 .text c_w.l(_printf_char_file.o) + 0x000005cc 0x000005cc 0x00000030 Code RO 819 .text c_w.l(_printf_char_common.o) + 0x000005fc 0x000005fc 0x0000004a Code RO 821 .text c_w.l(sys_stackheap_outer.o) + 0x00000646 0x00000646 0x00000012 Code RO 825 .text c_w.l(exit.o) + 0x00000658 0x00000658 0x00000008 Code RO 833 .text c_w.l(libspace.o) + 0x00000660 0x00000660 0x0000000c Code RO 894 .text c_w.l(sys_exit.o) + 0x0000066c 0x0000066c 0x00000002 Code RO 905 .text c_w.l(use_no_semi.o) + 0x0000066e 0x0000066e 0x00000000 Code RO 907 .text c_w.l(indicate_semi.o) + 0x0000066e 0x0000066e 0x00000002 PAD + 0x00000670 0x00000670 0x00000018 Code RO 393 i.CLK_DisablePLL clk.o + 0x00000688 0x00000688 0x0000002c Code RO 397 i.CLK_EnableModuleClock clk.o + 0x000006b4 0x000006b4 0x00000178 Code RO 398 i.CLK_EnablePLL clk.o + 0x0000082c 0x0000082c 0x00000014 Code RO 400 i.CLK_EnableXtalRC clk.o + 0x00000840 0x00000840 0x00000064 Code RO 407 i.CLK_GetPLLClockFreq clk.o + 0x000008a4 0x000008a4 0x000000b0 Code RO 410 i.CLK_SetCoreClock clk.o + 0x00000954 0x00000954 0x0000007c Code RO 411 i.CLK_SetHCLK clk.o + 0x000009d0 0x000009d0 0x00000028 Code RO 414 i.CLK_WaitClockReady clk.o + 0x000009f8 0x000009f8 0x000000d8 Code RO 4 i.HalInit main.o + 0x00000ad0 0x00000ad0 0x0000002c Code RO 234 i.Hard_Fault_Handler retarget.o + 0x00000afc 0x00000afc 0x00000018 Code RO 563 i.I2C_GetBusClockFreq i2c.o + 0x00000b14 0x00000b14 0x0000003c Code RO 567 i.I2C_Open i2c.o + 0x00000b50 0x00000b50 0x00000038 Code RO 580 i.I2C_SetSlaveAddr i2c.o + 0x00000b88 0x00000b88 0x0000002c Code RO 582 i.I2C_Trigger i2c.o + 0x00000bb4 0x00000bb4 0x00000244 Code RO 137 i.MPUReadReg hal.o + 0x00000df8 0x00000df8 0x00000174 Code RO 140 i.MPUWriteReg hal.o + 0x00000f6c 0x00000f6c 0x0000006c Code RO 192 i.MpuInit mpu.o + 0x00000fd8 0x00000fd8 0x0000000c Code RO 236 i.SendChar retarget.o + 0x00000fe4 0x00000fe4 0x00000030 Code RO 237 i.SendChar_ToUART retarget.o + 0x00001014 0x00001014 0x00000002 Code RO 355 i.SystemCoreClockUpdate system_m451series.o + 0x00001016 0x00001016 0x00000002 PAD + 0x00001018 0x00001018 0x00000074 Code RO 356 i.SystemInit system_m451series.o + 0x0000108c 0x0000108c 0x0000000e Code RO 781 i._is_digit c_w.l(__printf_wp.o) + 0x0000109a 0x0000109a 0x00000024 Code RO 193 i.delay_ms mpu.o + 0x000010be 0x000010be 0x00000008 Code RO 239 i.ferror retarget.o + 0x000010c6 0x000010c6 0x00000010 Code RO 241 i.fputc retarget.o + 0x000010d6 0x000010d6 0x0000000e Code RO 5 i.main main.o + 0x000010e4 0x000010e4 0x000000a8 Code RO 243 i.stackDump retarget.o + 0x0000118c 0x0000118c 0x0000000a Code RO 892 x$fpl$fpinit fz_wm.l(fpinit.o) + 0x00001196 0x00001196 0x00000028 Data RO 754 .constdata c_w.l(_printf_hex_int.o) + 0x000011be 0x000011be 0x00000011 Data RO 784 .constdata c_w.l(__printf_flags_wp.o) + 0x000011cf 0x000011cf 0x00000001 PAD + 0x000011d0 0x000011d0 0x00000020 Data RO 958 Region$$Table anon$$obj.o + + + Execution Region ER_RW (Exec base: 0x20000000, Load base: 0x000011f0, Size: 0x00000034, Max: 0xffffffff, ABSOLUTE) + + Exec Addr Load Addr Size Type Attr Idx E Section Name Object + + 0x20000000 0x000011f0 0x00000008 Data RW 244 .data retarget.o + 0x20000008 0x000011f8 0x0000002c Data RW 357 .data system_m451series.o + + + Execution Region ER_ZI (Exec base: 0x20000034, Load base: 0x00001224, Size: 0x00000464, Max: 0xffffffff, ABSOLUTE) + + Exec Addr Load Addr Size Type Attr Idx E Section Name Object + + 0x20000034 - 0x00000060 Zero RW 834 .bss c_w.l(libspace.o) + 0x20000094 0x00001224 0x00000004 PAD + 0x20000098 - 0x00000000 Zero RW 346 HEAP startup_m451series.o + 0x20000098 - 0x00000400 Zero RW 345 STACK startup_m451series.o + + +============================================================================== + +Image component sizes + + + Code (inc. data) RO Data RW Data ZI Data Debug Object Name + + 904 100 0 0 0 20294 clk.o + 952 322 0 0 0 1599 hal.o + 184 12 0 0 0 3274 i2c.o + 230 36 0 0 0 237653 main.o + 144 0 0 0 0 2633 mpu.o + 324 132 0 8 0 5701 retarget.o + 116 36 320 0 1024 928 startup_m451series.o + 118 12 0 44 0 2003 system_m451series.o + + ---------------------------------------------------------------------- + 2974 650 352 52 1024 274085 Object Totals + 0 0 32 0 0 0 (incl. Generated) + 2 0 0 0 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 + 312 4 17 0 0 92 __printf_flags_wp.o + 14 0 0 0 0 68 __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 + 6 0 0 0 0 0 _printf_d.o + 120 16 0 0 0 92 _printf_dec.o + 88 4 40 0 0 88 _printf_hex_int.o + 178 0 0 0 0 88 _printf_intcommon.o + 78 0 0 0 0 108 _printf_pad.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 + 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 + + ---------------------------------------------------------------------- + 1208 54 58 0 100 1496 Library Totals + 8 0 1 0 4 0 (incl. Padding) + + ---------------------------------------------------------------------- + + Code (inc. data) RO Data RW Data ZI Data Debug Library Name + + 1190 54 57 0 96 1380 c_w.l + 10 0 0 0 0 116 fz_wm.l + + ---------------------------------------------------------------------- + 1208 54 58 0 100 1496 Library Totals + + ---------------------------------------------------------------------- + +============================================================================== + + + Code (inc. data) RO Data RW Data ZI Data Debug + + 4182 704 410 52 1124 272857 Grand Totals + 4182 704 410 52 1124 272857 ELF Image Totals + 4182 704 410 52 0 0 ROM Totals + +============================================================================== + + Total RO Size (Code + RO Data) 4592 ( 4.48kB) + Total RW Size (RW Data + ZI Data) 1176 ( 1.15kB) + Total ROM Size (Code + RO Data + RW Data) 4644 ( 4.54kB) + +============================================================================== + diff --git a/mpu6050/m451/Objects/mpu9250.axf b/mpu6050/m451/Objects/mpu9250.axf new file mode 100644 index 0000000000000000000000000000000000000000..9dbf3e672fb54002aeab5bf6bcdbaef9081fdcf5 GIT binary patch literal 300048 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 z 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%0Dp2j!pPnWQFe0XYv<^La)?FnD; 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 +#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 + { + 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/mpu6050/m451/RTE/Device/M451RG6AE/startup_M451Series.s b/mpu6050/m451/RTE/Device/M451RG6AE/startup_M451Series.s new file mode 100644 index 0000000..c083f20 --- /dev/null +++ b/mpu6050/m451/RTE/Device/M451RG6AE/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/mpu6050/m451/RTE/Device/M451RG6AE/system_M451Series.c b/mpu6050/m451/RTE/Device/M451RG6AE/system_M451Series.c new file mode 100644 index 0000000..a37d80a --- /dev/null +++ b/mpu6050/m451/RTE/Device/M451RG6AE/system_M451Series.c @@ -0,0 +1,78 @@ +/****************************************************************************** + * @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 */ +{ +} + +/** + * 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/mpu6050/m451/RTE/_Target_1/RTE_Components.h b/mpu6050/m451/RTE/_Target_1/RTE_Components.h new file mode 100644 index 0000000..cddcae7 --- /dev/null +++ b/mpu6050/m451/RTE/_Target_1/RTE_Components.h @@ -0,0 +1,22 @@ + +/* + * Auto generated Run-Time-Environment Component Configuration File + * *** Do not modify ! *** + * + * Project: 'mpu9250' + * 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_I2C /* Driver I2C */ + +#endif /* RTE_COMPONENTS_H */ diff --git a/mpu6050/m451/data.h b/mpu6050/m451/data.h new file mode 100644 index 0000000..c4ccbe2 --- /dev/null +++ b/mpu6050/m451/data.h @@ -0,0 +1,115 @@ +#ifndef _ALL_USER_DATA_H_ +#define _ALL_USER_DATA_H_ + +#define SUCCESS 0 +#define FAIL -1 +#define FAILED -1 +typedef signed char int8_t; +typedef signed short int int16_t; +typedef signed int int32_t; +typedef signed long long int64_t; + + /* exact-width unsigned integer types */ +typedef unsigned char uint8_t; +typedef unsigned short int uint16_t; +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; + + +#define NULL 0 +extern volatile uint32_t SysTick_count; + + +typedef struct{ + int16_t accX; + int16_t accY; + int16_t accZ; + int16_t gyroX; + int16_t gyroY; + int16_t gyroZ; +}_st_Mpu; + + +typedef struct{ + int16_t magX; + int16_t magY; + int16_t magZ; +}_st_Mag; + + +typedef struct{ + float rate; + float height; +}High; + + +typedef struct{ + float roll; + float pitch; + float yaw; +}_st_AngE; + + + +typedef struct +{ + uint16_t roll; + uint16_t pitch; + uint16_t thr; + uint16_t yaw; + uint16_t AUX1; + uint16_t AUX2; + uint16_t AUX3; + uint16_t AUX4; +}_st_Remote; + + + +typedef volatile struct +{ + float desired; //< set point + float offset; // + float prevError; //< previous error + float integ; //< integral + float kp; //< proportional gain + float ki; //< integral gain + float kd; //< derivative gain + float IntegLimitHigh; //< integral limit + float IntegLimitLow; + float measured; + float out; + float OutLimitHigh; + float OutLimitLow; +}PidObject; + + +typedef volatile struct +{ + uint8_t unlock; + + +}_st_ALL_flag; + + +extern _st_Remote Remote; +extern _st_Mpu MPU6050; +extern _st_Mag AK8975; //保留,需外接磁力计 +extern _st_AngE Angle; + + +extern _st_ALL_flag ALL_flag; + + +extern PidObject pidRateX; +extern PidObject pidRateY; +extern PidObject pidRateZ; + +extern PidObject pidPitch; +extern PidObject pidRoll; +extern PidObject pidYaw; + +extern PidObject pidHeightRate; +extern PidObject pidHeightHigh; + +#endif + diff --git a/mpu6050/m451/hal.c b/mpu6050/m451/hal.c new file mode 100644 index 0000000..e7de36b --- /dev/null +++ b/mpu6050/m451/hal.c @@ -0,0 +1,229 @@ + +#include "M451Series.h" +#include +#include "hal.h" + +int MPUWriteReg( char RegAddr, char pucDATD_AA) +{ + int i=0; + + while(i<32) i++; + + I2C_START(I2C0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x08) + { + printf("I2CD_STArt write fail,I2D_STATUS %02X\r\n",I2C_GET_STATUS(I2C0)); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + + I2C_SET_DATA(I2C0,0xd0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0)!= 0x18) + { + printf("I2C write ADW fail\r\n"); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + //дÈë¶ÁµØÖ· + I2C_SET_DATA(I2C0,RegAddr); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x28) + { + printf("I2C write reg addr fail\r\n"); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + + I2C_SET_DATA(I2C0,pucDATD_AA); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x28) + { + printf("I2C write control fail\r\n"); + while (1); + } + + //Í£Ö¹ + I2C_Trigger(I2C0,0,1,1,0); + + + //printf("I2C write ok\r\n"); + return 0; + +} + +int MPUWriteAddr() +{ + if (I2C_GET_STATUS(I2C0) != 0x08) + { + printf("I2CD_STArt write add fail,I2D_STATUS %02X\r\n",I2C_GET_STATUS(I2C0)); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + //½øÈë¶Áд¿ØÖƲÙ×÷ + I2C_SET_DATA(I2C0,0xd0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0)!= 0x18) + { + printf("I2C write ADW fail\r\n"); + return FALSE; + } + return 1; +} + + +int MPUWriteACK(char cDat) +{ + if((I2C_GET_STATUS(I2C0) != 0x18)&&(I2C_GET_STATUS(I2C0) != 0x28)) + { + printf("I2C MPUWriteAddrAck STATUS error \r\n"); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + //дÈë¶ÁµØÖ· + I2C_SET_DATA(I2C0,cDat); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0)!= 0x28) + { + printf("MPUWriteAddrAck fail ACK no recv\r\n"); + return FALSE; + } + return 1; +} +char MPUReadReg( int unAddr/*, int unLength*/) +{ + char ret; + int i=0; + + while(i<32) i++; + I2C_Trigger(I2C0,0,0,1,0); + + I2C_START(I2C0); //Æô¶¯ + //Æô¶¯ + I2C_WAIT_READY(I2C0); + if(I2C_GET_STATUS(I2C0) != 0x08) + { + printf("I2CD_STArt read reg fail,I2D_STATUS %02X\r\n",I2C_GET_STATUS(I2C0)); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + + //½øÈë¶Áд¿ØÖƲÙ×÷ + I2C_SET_DATA(I2C0,0xd0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x018) + { + printf("status fault shoube be 0x018 ,I2D_STATUS %02X\r\n",I2C_GET_STATUS(I2C0)); + return FALSE; + } + //дÈë¶ÁµØÖ· + I2C_SET_DATA(I2C0,unAddr); + I2C_Trigger(I2C0,0,0,1,0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0)!= 0x28) + { + printf("I2C write reg addr fail\r\n"); + return FALSE; + } + // ÖØÐÂÆô¶¯ + + + I2C_Trigger(I2C0,0,0,1,0); + I2C_Trigger(I2C0,1,0,0,0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x10) + { + printf("I2C repeated D_STArt fail\r\n"); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + + //½øÈë¶Á²Ù×÷ + I2C_SET_DATA(I2C0,0xd0 | 1); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x40) + { + printf("I2C write control fail\r\n"); + while (1); + } + //¶ÁÈ¡Êý¾Ý + I2C_Trigger(I2C0,0,0,1,0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x58) + { + printf("I2C read fail\r\n"); + return FALSE; + } + ret = I2C_GET_DATA(I2C0); + I2C_Trigger(I2C0,0,1,1,0); + +// I2C_WAIT_READY(I2C0); + return ret; +} + +int MPUReadBuf( int unAddr, char *pucDATD_AA, int unLength) +{ + char ret; + int i=0; + while(i<32) i++; + I2C_Trigger(I2C0,0,0,1,0); + I2C_START(I2C0); + I2C_WAIT_READY(I2C0); + if(I2C_GET_STATUS(I2C0) != 0x08) + { + printf("I2CD_STArt fail,I2D_STATUS %02X\r\n",I2C_GET_STATUS(I2C0)); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + + I2C_SET_DATA(I2C0,0xd0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x18) + { + printf("I2CD_STArt fail,I2D_STATUS %02X\r\n",I2C_GET_STATUS(I2C0)); + return FALSE; + } + I2C_SET_DATA(I2C0,unAddr); + I2C_Trigger(I2C0,0,0,1,0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0)!= 0x28) + { + printf("I2C write reg addr fail\r\n"); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + I2C_Trigger(I2C0,1,0,0,0); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x10) + { + printf("I2C repeated D_STArt fail\r\n"); + return FALSE; + } + I2C_Trigger(I2C0,0,0,1,0); + I2C_SET_DATA(I2C0,0xd0 | 1); + I2C_WAIT_READY(I2C0); + if (I2C_GET_STATUS(I2C0) != 0x40) + { + printf("I2C write control fail\r\n"); + while (1); + } + for(i=0;iGPD_MFPL &= ~SYS_GPD_MFPL_PD4MFP_Msk; + SYS->GPD_MFPL |= SYS_GPD_MFPL_PD4MFP_I2C0_SDA; + + SYS->GPD_MFPL &= ~SYS_GPD_MFPL_PD5MFP_Msk; + SYS->GPD_MFPL |= SYS_GPD_MFPL_PD5MFP_I2C0_SCL; + I2C_Open(I2C0,100000); + + printf("I2C clock %d Hz\n", I2C_GetBusClockFreq(I2C0)); + + I2C_SetSlaveAddr(I2C0, 0, 0x78, 0); /* Slave Address : 0x15 */ + + SYS_LockReg(); + + //GPIO_SetMode(PB,BIT14,GPIO_PMD_INPUT); + //GPIO_SetMode(PB,BIT9,GPIO_PMD_OUTPUT); + + //I2C_EnableInt(I2C0); + //NVIC_EnableIRQ(I2C0_IRQn); +} + + +int main(){ + HalInit(); + MpuInit(); + +} \ No newline at end of file diff --git a/mpu6050/m451/mpu.c b/mpu6050/m451/mpu.c new file mode 100644 index 0000000..9c3bc76 --- /dev/null +++ b/mpu6050/m451/mpu.c @@ -0,0 +1,133 @@ +#include "data.h" +#include "hal.h" + +#define SMPLRT_DIV 0x19 //陀螺仪采样率,典型值:0x07(125Hz) +#define CONFIGL 0x1A //低通滤波频率,典型值:0x06(5Hz) +#define GYRO_CONFIG 0x1B //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s) +#define ACCEL_CONFIG 0x1C //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz) +#define ACCEL_ADDRESS 0x3B +#define ACCEL_XOUT_H 0x3B +#define ACCEL_XOUT_L 0x3C +#define ACCEL_YOUT_H 0x3D +#define ACCEL_YOUT_L 0x3E +#define ACCEL_ZOUT_H 0x3F +#define ACCEL_ZOUT_L 0x40 +#define TEMP_OUT_H 0x41 +#define TEMP_OUT_L 0x42 +#define GYRO_XOUT_H 0x43 +#define GYRO_ADDRESS 0x43 +#define GYRO_XOUT_L 0x44 +#define GYRO_YOUT_H 0x45 +#define GYRO_YOUT_L 0x46 +#define GYRO_ZOUT_H 0x47 +#define GYRO_ZOUT_L 0x48 +#define PWR_MGMT_1 0x6B //电源管理,典型值:0x00(正常启用) +#define WHO_AM_I 0x75 //IIC地址寄存器(默认数值0x68,只读) +#define MPU6050_PRODUCT_ID 0x68 +#define MPU6052C_PRODUCT_ID 0x72 +#define MPU9250_PRODUCT_ID 0x71 // +//#define MPU6050_is_DRY() GPIO_ReadOutBit(HT_GPIOC, GPIO_PIN_0)//IRQ主机数据输入 + #ifdef USE_I2C_HARDWARE + + #define MPU6050_ADDRESS 0xD0//0x68 + #else + #define MPU6050_ADDRESS 0xD0 //IIC写入时的地址字节数据,+1为读取 + #endif + + +void delay_ms(int x){ + + for(x = 0; x < 1000; x++){ + volatile int z = 0; + for (z = 0; z < 100;z++){ + + } + } +} + +int16_t MpuOffset[6] = {0}; + +_st_Mpu MPU6050; //MPU6050原始数据 + +static volatile int16_t *pMpu = (int16_t *)&MPU6050; + + + +/**************************************************************************************** +*@brief +*@brief +*@param[in] +*****************************************************************************************/ +int8_t mpu6050_rest(void) +{ + if(MPUWriteReg( PWR_MGMT_1, 0x80) == FAILED) + return FAILED; //复位 + //delay_ms(20); + return SUCCESS; +} +/**************************************************************************************** +*@brief +*@brief +*@param[in] +*****************************************************************************************/ +int8_t MpuInit(void) //初始化 +{ + uint8_t date = SUCCESS; + do + { + date = MPUWriteReg( PWR_MGMT_1, 0x80); //复位 + delay_ms(30); + date += MPUWriteReg( SMPLRT_DIV, 0x02); //陀螺仪采样率,0x00(500Hz) + date += MPUWriteReg( PWR_MGMT_1, 0x03); //设置设备时钟源,陀螺仪Z轴 + date += MPUWriteReg( CONFIGL, 0x03); //低通滤波频率,0x03(42Hz) + date += MPUWriteReg( GYRO_CONFIG, 0x18);//+-2000deg/s + date += MPUWriteReg( ACCEL_CONFIG, 0x09);//+-4G + } + while(date != SUCCESS); + date = MPUReadReg(0x75); + if(date!= MPU6050_PRODUCT_ID) + return FAILED; + else + //MpuGetOffset(); + return SUCCESS; +} +/**************************************************************************************** +*@brief +*@brief +*@param[in] +*****************************************************************************************/ + +#define Gyro_Read() MPUReadBuf( 0X3B,buffer,6) +#define Acc_Read() MPUReadBuf( 0x43,&buffer[6],6) + +void MpuGetData(void) //读取陀螺仪数据加滤波 +{ + uint8_t i; + int8_t buffer[12]; + + Gyro_Read(); + Acc_Read(); + + for(i=0;i<6;i++) + { + pMpu[i] = (((int16_t)buffer[i<<1] << 8) | buffer[(i<<1)+1])-MpuOffset[i]; + if(i < 3) + { + { + //static struct _1_ekf_filter ekf[3] = {{0.02,0,0,0,0.001,0.543},{0.02,0,0,0,0.001,0.543},{0.02,0,0,0,0.001,0.543}}; + //kalman_1(&ekf[i],(float)pMpu[i]); //一维卡尔曼 + //pMpu[i] = (int16_t)ekf[i].out; + } + } + if(i > 2) + { + uint8_t k=i-3; + const float factor = 0.15f; //滤波因素 + static float tBuff[3]; + + pMpu[i] = tBuff[k] = tBuff[k] * (1 - factor) + pMpu[i] * factor; + } + } +} + +/**************************************END OF FILE*************************************/ \ No newline at end of file diff --git a/mpu6050/m451/mpu9250.uvoptx b/mpu6050/m451/mpu9250.uvoptx new file mode 100644 index 0000000..7933327 --- /dev/null +++ b/mpu6050/m451/mpu9250.uvoptx @@ -0,0 +1,244 @@ + + + + 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 + + 0 + 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 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0M451_AP_256 -FS00 -FL040000 -FP0($$Device:M451RG6AE$Flash\M451_AP_256.FLM)) + + + + + 0 + + + 0 + 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 + + + + + + + + + + + + + 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 + .\hal.c + hal.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + .\mpu.c + mpu.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + .\data.h + data.h + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::Device + 0 + 0 + 0 + 1 + + +
diff --git a/mpu6050/m451/mpu9250.uvprojx b/mpu6050/m451/mpu9250.uvprojx new file mode 100644 index 0000000..6777423 --- /dev/null +++ b/mpu6050/m451/mpu9250.uvprojx @@ -0,0 +1,497 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + M451RG6AE + 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:M451RG6AE$Flash\M451_AP_256.FLM)) + 8158 + $$Device:M451RG6AE$Device\M451\Include\M451Series.h + + + + + + + + + + $$Device:M451RG6AE$SVD\Nuvoton\M451_v1.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + mpu9250 + 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 + + DARMCM1.DLL + + SARMCM3.DLL + + TARMCM1.DLL + + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 0 + -1 + + 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 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x40000 + + + 0 + 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 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Source Group 1 + + + main.c + 1 + .\main.c + + + hal.c + 1 + .\hal.c + + + mpu.c + 1 + .\mpu.c + + + data.h + 5 + .\data.h + + + + + ::CMSIS + + + ::Device + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\M451RG6AE\retarget.c + + + + + + + + RTE\Device\M451RG6AE\startup_M451Series.s + + + + + + + + RTE\Device\M451RG6AE\system_M451Series.c + + + + + + + + + +