From 95886b12ec5a7fa5cf62064e850416d614929043 Mon Sep 17 00:00:00 2001 From: Schrom01 Date: Fri, 30 Sep 2022 07:48:14 +0200 Subject: [PATCH] finished Task --- CT-Lab1-Project/CT-Lab1-Project.uvguix.roman | 3637 +++++++++++++++++ CT-Lab1-Project/CT-Lab1-Project.uvoptx | 245 ++ CT-Lab1-Project/CT-Lab1-Project.uvprojx | 503 +++ CT-Lab1-Project/EventRecorderStub.scvd | 9 + CT-Lab1-Project/Listings/CT-Lab1-Project.map | 627 +++ .../Objects/CT-Lab1-Project.build_log.htm | 52 + CT-Lab1-Project/Objects/CT-Lab1-Project.lnp | 6 + .../Objects/CT-Lab1-Project_Target 1.dep | 6 + CT-Lab1-Project/Objects/task.__i | 5 + CT-Lab1-Project/Objects/task.d | 2 + CT-Lab1-Project/Objects/task.o | Bin 0 -> 1816 bytes CT-Lab1-Project/Objects/utils_ctboard.d | 2 + CT-Lab1-Project/Objects/utils_ctboard.o | Bin 0 -> 5532 bytes .../.datainit_ctboard.s@4.0.1 | 100 + .../CT_Board_HS14_M0/.startup_ctboard.s@4.0.1 | 439 ++ .../CT_Board_HS14_M0/.system_ctboard.c@4.0.1 | 290 ++ .../CT_Board_HS14_M0/datainit_ctboard.s | 100 + .../Device/CT_Board_HS14_M0/startup_ctboard.s | 439 ++ .../Device/CT_Board_HS14_M0/system_ctboard.c | 290 ++ .../RTE/HAL/CT_Board_HS14_M0/.hal_fmc.c@3.0.1 | 143 + .../HAL/CT_Board_HS14_M0/.hal_gpio.c@4.0.1 | 412 ++ .../RTE/HAL/CT_Board_HS14_M0/.hal_pwr.c@2.2.0 | 132 + .../RTE/HAL/CT_Board_HS14_M0/.hal_rcc.c@4.0.1 | 347 ++ .../RTE/HAL/CT_Board_HS14_M0/hal_fmc.c | 143 + .../RTE/HAL/CT_Board_HS14_M0/hal_gpio.c | 412 ++ .../RTE/HAL/CT_Board_HS14_M0/hal_pwr.c | 132 + .../RTE/HAL/CT_Board_HS14_M0/hal_rcc.c | 347 ++ .../RTE/_Target_1/RTE_Components.h | 15 + CT-Lab1-Project/app/task.c | 97 + CT-Lab1-Project/app/utils_ctboard.c | 103 + CT-Lab1-Project/app/utils_ctboard.h | 52 + CT-Lab1-Project/build/CT-Lab1-Project.axf | Bin 0 -> 44772 bytes .../build/CT-Lab1-Project.build_log.htm | 335 ++ CT-Lab1-Project/build/CT-Lab1-Project.htm | 656 +++ CT-Lab1-Project/build/CT-Lab1-Project.lnp | 14 + .../build/CT-Lab1-Project_Target 1.dep | 41 + CT-Lab1-Project/build/ExtDll.iex | 2 + CT-Lab1-Project/build/datainit_ctboard.o | Bin 0 -> 2716 bytes CT-Lab1-Project/build/hal_fmc.d | 5 + CT-Lab1-Project/build/hal_fmc.o | Bin 0 -> 7284 bytes CT-Lab1-Project/build/hal_gpio.d | 5 + CT-Lab1-Project/build/hal_gpio.o | Bin 0 -> 21384 bytes CT-Lab1-Project/build/hal_pwr.d | 5 + CT-Lab1-Project/build/hal_pwr.o | Bin 0 -> 6544 bytes CT-Lab1-Project/build/hal_rcc.d | 5 + CT-Lab1-Project/build/hal_rcc.o | Bin 0 -> 12560 bytes CT-Lab1-Project/build/startup_ctboard.o | Bin 0 -> 8164 bytes CT-Lab1-Project/build/system_ctboard.d | 11 + CT-Lab1-Project/build/system_ctboard.o | Bin 0 -> 14404 bytes CT-Lab1-Project/build/task.d | 2 + CT-Lab1-Project/build/task.o | Bin 0 -> 5528 bytes CT-Lab1-Project/build/utils_ctboard.d | 2 + CT-Lab1-Project/build/utils_ctboard.o | Bin 0 -> 5540 bytes CTP_TargetSystem.pdf | Bin 0 -> 216666 bytes utils_ctboard.c | 103 + utils_ctboard.h | 52 + 56 files changed, 10325 insertions(+) create mode 100644 CT-Lab1-Project/CT-Lab1-Project.uvguix.roman create mode 100644 CT-Lab1-Project/CT-Lab1-Project.uvoptx create mode 100644 CT-Lab1-Project/CT-Lab1-Project.uvprojx create mode 100644 CT-Lab1-Project/EventRecorderStub.scvd create mode 100644 CT-Lab1-Project/Listings/CT-Lab1-Project.map create mode 100644 CT-Lab1-Project/Objects/CT-Lab1-Project.build_log.htm create mode 100644 CT-Lab1-Project/Objects/CT-Lab1-Project.lnp create mode 100644 CT-Lab1-Project/Objects/CT-Lab1-Project_Target 1.dep create mode 100644 CT-Lab1-Project/Objects/task.__i create mode 100644 CT-Lab1-Project/Objects/task.d create mode 100644 CT-Lab1-Project/Objects/task.o create mode 100644 CT-Lab1-Project/Objects/utils_ctboard.d create mode 100644 CT-Lab1-Project/Objects/utils_ctboard.o create mode 100644 CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/.datainit_ctboard.s@4.0.1 create mode 100644 CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/.startup_ctboard.s@4.0.1 create mode 100644 CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/.system_ctboard.c@4.0.1 create mode 100644 CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/datainit_ctboard.s create mode 100644 CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/startup_ctboard.s create mode 100644 CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/system_ctboard.c create mode 100644 CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_fmc.c@3.0.1 create mode 100644 CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_gpio.c@4.0.1 create mode 100644 CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_pwr.c@2.2.0 create mode 100644 CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_rcc.c@4.0.1 create mode 100644 CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_fmc.c create mode 100644 CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_gpio.c create mode 100644 CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_pwr.c create mode 100644 CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_rcc.c create mode 100644 CT-Lab1-Project/RTE/_Target_1/RTE_Components.h create mode 100644 CT-Lab1-Project/app/task.c create mode 100644 CT-Lab1-Project/app/utils_ctboard.c create mode 100644 CT-Lab1-Project/app/utils_ctboard.h create mode 100644 CT-Lab1-Project/build/CT-Lab1-Project.axf create mode 100644 CT-Lab1-Project/build/CT-Lab1-Project.build_log.htm create mode 100644 CT-Lab1-Project/build/CT-Lab1-Project.htm create mode 100644 CT-Lab1-Project/build/CT-Lab1-Project.lnp create mode 100644 CT-Lab1-Project/build/CT-Lab1-Project_Target 1.dep create mode 100644 CT-Lab1-Project/build/ExtDll.iex create mode 100644 CT-Lab1-Project/build/datainit_ctboard.o create mode 100644 CT-Lab1-Project/build/hal_fmc.d create mode 100644 CT-Lab1-Project/build/hal_fmc.o create mode 100644 CT-Lab1-Project/build/hal_gpio.d create mode 100644 CT-Lab1-Project/build/hal_gpio.o create mode 100644 CT-Lab1-Project/build/hal_pwr.d create mode 100644 CT-Lab1-Project/build/hal_pwr.o create mode 100644 CT-Lab1-Project/build/hal_rcc.d create mode 100644 CT-Lab1-Project/build/hal_rcc.o create mode 100644 CT-Lab1-Project/build/startup_ctboard.o create mode 100644 CT-Lab1-Project/build/system_ctboard.d create mode 100644 CT-Lab1-Project/build/system_ctboard.o create mode 100644 CT-Lab1-Project/build/task.d create mode 100644 CT-Lab1-Project/build/task.o create mode 100644 CT-Lab1-Project/build/utils_ctboard.d create mode 100644 CT-Lab1-Project/build/utils_ctboard.o create mode 100644 CTP_TargetSystem.pdf create mode 100644 utils_ctboard.c create mode 100644 utils_ctboard.h diff --git a/CT-Lab1-Project/CT-Lab1-Project.uvguix.roman b/CT-Lab1-Project/CT-Lab1-Project.uvguix.roman new file mode 100644 index 0000000..3028dba --- /dev/null +++ b/CT-Lab1-Project/CT-Lab1-Project.uvguix.roman @@ -0,0 +1,3637 @@ + + + + -6.1 + +
### uVision Project, (C) Keil Software
+ + + C:\Users\roman\Documents\CT-Lab1-Project\app + + + + + + + 38003 + Registers + 140 100 + + + 346 + Code Coverage + 1010 656 + + + 204 + Performance Analyzer + 1170 175 175 496 + + + + + + 35141 + Event Statistics + + 200 50 700 + + + 1506 + Symbols + + 80 80 80 + + + 1936 + Watch 1 + + 200 133 133 + + + 1937 + Watch 2 + + 200 133 133 + + + 1935 + Call Stack + Locals + + 200 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 150 + + + 466 + Source Browser + 500 + 166 + + + + + + + + 0 + 0 + 0 + 50 + 16 + + + + + + + 44 + 2 + 3 + + -32000 + -32000 + + + -1 + -1 + + + 52 + 52 + 1492 + 811 + + + + 0 + + 461 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000003000000000000000100000033433A5C55736572735C726F6D616E5C446F63756D656E74735C43542D4C6162312D50726F6A6563745C6170705C7461736B2E6300000000067461736B2E6300000000C5D4F200FFFFFFFF56433A5C55736572735C726F6D616E5C446F63756D656E74735C43542D4C6162312D50726F6A6563745C5254455C4465766963655C43545F426F6172645F485331345F4D305C737461727475705F6374626F6172642E730000000011737461727475705F6374626F6172642E7300000000FFDC7800FFFFFFFF3C433A5C55736572735C726F6D616E5C446F63756D656E74735C43542D4C6162312D50726F6A6563745C6170705C7574696C735F6374626F6172642E68000000000F7574696C735F6374626F6172642E6800000000BECEA100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F40000006600000080070000FE020000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F40000004F00000090050000DF000000 + + + 16 + F40000006600000090050000F6000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000CE020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000CE020000 + + + 16 + F2000000090100000E02000049030000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000CE020000 + + + 16 + F2000000090100000E02000049030000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000CE020000 + + + 16 + F2000000090100000E02000049030000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000FF02000080070000E6030000 + + + 16 + F200000009010000BA03000099010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000001902000090050000BD020000 + + + 16 + F200000009010000BA03000099010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000020300007D070000CD030000 + + + 16 + F200000009010000BA03000099010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000CE020000 + + + 16 + F2000000090100000E02000049030000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000020300007D070000CD030000 + + + 16 + F200000009010000BA03000099010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000020300007D070000CD030000 + + + 16 + F2000000090100000E02000049030000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000020300007D070000CD030000 + + + 16 + F2000000090100000E02000049030000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000020300007D070000CD030000 + + + 16 + F2000000090100000E02000049030000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 966 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000E603000080070000F9030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 476 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 3312 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F40000006600000090050000F6000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A0040000660000009005000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F4000000E7020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F0000000FE020000000000004F000000F0000000E70200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000003002000090050000D4020000000000001902000090050000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000E702000080070000EB020000010000000100001004000000010000006CFEFFFFF8010000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000000203000080070000FD03000000000000EB02000080070000E60300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2537 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000000460000000000000000000000000000000001000000010000000180FE880000000000004500000000000000000000000000000000010000000100000001800B810000000000001300000000000000000000000000000000010000000100000001800C810000000000001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020000001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 976 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2373 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1920 + 1080 + + + + 1 + Debug + + -1 + -1 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F40000004F00000080070000DF000000 + + + 16 + F40000006600000080070000F6000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000E2020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 109 + 109 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000E2020000 + + + 16 + F2000000090100000E02000049030000 + + + + 1465 + 1465 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000BA03000099010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000BA03000099010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000BA03000099010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000BA03000099010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000007D070000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 1935 + 1935 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000E2010000D4010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000E2010000D4010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000E2010000D4010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000BA03000099010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000BA03000099010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000BA03000099010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000BA03000099010000 + + + + 195 + 195 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000E2020000 + + + 16 + F2000000090100000E02000049030000 + + + + 196 + 196 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000E2020000 + + + 16 + F2000000090100000E02000049030000 + + + + 197 + 197 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 198 + 198 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000FF020000C0030000E6030000 + + + 16 + F200000009010000BA03000099010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 203 + 203 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + F40000006300000080070000DF000000 + + + 16 + F200000009010000BA03000099010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000007D070000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000BA03000099010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000007D070000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000007D070000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000007D070000C6000000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000007D070000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 38003 + 38003 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000E2020000 + + + 16 + F2000000090100000E02000049030000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + F200000009010000BA03000099010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + F2000000090100000E02000049030000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000E2010000D4010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000E2010000D4010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + F2000000090100000E02000049030000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000440200008D050000A4020000 + + + 16 + F2000000090100000E02000049030000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000007D070000C6000000 + + + 16 + F200000009010000BA03000099010000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D05000010020000 + + + 16 + F200000009010000E2010000D4010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 966 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000E603000080070000F9030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 0 + 0 + 0 + 0 + 476 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 1 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 000000001C0000006F02000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000160300007D070000CD030000 + + + 16 + F200000009010000E2010000D4010000 + + + + 3311 + 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFFF4000000DF00000080070000E3000000010000000100001004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000F40000006600000080070000F6000000F40000004F00000080070000DF0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A0040000660000009005000040020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F4000000FB020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F000000012030000000000004F000000F0000000FB0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF00000000FB02000080070000FF02000001000000010000100400000001000000AAFDFFFF3F00000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000001000000C40300001603000080070000FD030000C4030000FF02000080070000E603000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF000000000000000001000000000000000100000001000000FFFFFFFFC0030000FF020000C4030000E603000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF0000000029020000900500002D020000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000000000000000000004402000090050000D4020000000000002D02000090050000BD0200000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2537 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000004000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000004000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000004001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 955 + 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2362 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1920 + 1080 + + + + + + 1 + 0 + + 100 + 0 + + .\app\task.c + 6 + 18 + 28 + 1 + + 0 + + + RTE/Device/CT_Board_HS14_M0/startup_ctboard.s + 0 + 184 + 196 + 1 + + 0 + + + app\utils_ctboard.h + 0 + 1 + 1 + 1 + + 0 + + + + +
diff --git a/CT-Lab1-Project/CT-Lab1-Project.uvoptx b/CT-Lab1-Project/CT-Lab1-Project.uvoptx new file mode 100644 index 0000000..db953fc --- /dev/null +++ b/CT-Lab1-Project/CT-Lab1-Project.uvoptx @@ -0,0 +1,245 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp; *.cc; *.cxx + 0 + + + + 0 + 0 + + + + Target 1 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + ST-LINKIII-KEIL_SWO + -U-O206 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:CT_Board_HS14_M0$Flash\STM32F4xx_2048.FLM) + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F4xx_2048 -FL0200000 -FS08000000 -FP0($$Device:CT_Board_HS14_M0$Flash\STM32F4xx_2048.FLM) + + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Source Group 1 + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 1 + 0 + 0 + .\app\utils_ctboard.c + utils_ctboard.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\app\task.c + task.c + 0 + 0 + + + + + ::Device + 1 + 0 + 0 + 1 + + + + ::HAL + 1 + 0 + 0 + 1 + + +
diff --git a/CT-Lab1-Project/CT-Lab1-Project.uvprojx b/CT-Lab1-Project/CT-Lab1-Project.uvprojx new file mode 100644 index 0000000..fecd688 --- /dev/null +++ b/CT-Lab1-Project/CT-Lab1-Project.uvprojx @@ -0,0 +1,503 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x4 + ARM-ADS + 6180000::V6.18::ARMCLANG + 1 + + + CT_Board_HS14_M0 + STMicroelectronics + InES.CTBoard14_DFP.4.0.2 + https://ennis.zhaw.ch/pack/ + IRAM(0x20000000,0x30000) IRAM2(0x10000000,0x10000) IROM(0x08000000,0x200000) CPUTYPE("Cortex-M0") CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_2048 -FS08000000 -FL0200000 -FP0($$Device:CT_Board_HS14_M0$Flash\STM32F4xx_2048.FLM)) + 0 + + + + + + + + + + + $$Device:CT_Board_HS14_M0$SVD\STM32F429x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + CT-Lab1-Project + 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 + -REMAP-MPU + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + -MPU + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + -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-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x30000 + + + 1 + 0x8000000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x200000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x30000 + + + 0 + 0x10000000 + 0x10000 + + + + + + 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 + 1 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + --diag_suppress 6314 + + + + + + + + Source Group 1 + + + utils_ctboard.c + 1 + .\app\utils_ctboard.c + + + task.c + 1 + .\app\task.c + + + + + ::Device + + + ::HAL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RTE\Device\CT_Board_HS14_M0\datainit_ctboard.s + + + + + + + + RTE\Device\CT_Board_HS14_M0\startup_ctboard.s + + + + + + + + RTE\Device\CT_Board_HS14_M0\system_ctboard.c + + + + + + + + RTE\HAL\CT_Board_HS14_M0\hal_fmc.c + + + + + + + + RTE\HAL\CT_Board_HS14_M0\hal_gpio.c + + + + + + + + RTE\HAL\CT_Board_HS14_M0\hal_pwr.c + + + + + + + + RTE\HAL\CT_Board_HS14_M0\hal_rcc.c + + + + + + + + + +
diff --git a/CT-Lab1-Project/EventRecorderStub.scvd b/CT-Lab1-Project/EventRecorderStub.scvd new file mode 100644 index 0000000..2956b29 --- /dev/null +++ b/CT-Lab1-Project/EventRecorderStub.scvd @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/CT-Lab1-Project/Listings/CT-Lab1-Project.map b/CT-Lab1-Project/Listings/CT-Lab1-Project.map new file mode 100644 index 0000000..344c63d --- /dev/null +++ b/CT-Lab1-Project/Listings/CT-Lab1-Project.map @@ -0,0 +1,627 @@ +Component: Arm Compiler for Embedded 6.18 Tool: armlink [5e4cc100] + +============================================================================== + +Section Cross References + + utils_ctboard.o(.ARM.exidx.text.read_byte) refers to utils_ctboard.o(.text.read_byte) for [Anonymous Symbol] + utils_ctboard.o(.ARM.exidx.text.read_halfword) refers to utils_ctboard.o(.text.read_halfword) for [Anonymous Symbol] + utils_ctboard.o(.ARM.exidx.text.read_word) refers to utils_ctboard.o(.text.read_word) for [Anonymous Symbol] + utils_ctboard.o(.ARM.exidx.text.read_doubleword) refers to utils_ctboard.o(.text.read_doubleword) for [Anonymous Symbol] + utils_ctboard.o(.ARM.exidx.text.write_byte) refers to utils_ctboard.o(.text.write_byte) for [Anonymous Symbol] + utils_ctboard.o(.ARM.exidx.text.write_halfword) refers to utils_ctboard.o(.text.write_halfword) for [Anonymous Symbol] + utils_ctboard.o(.ARM.exidx.text.write_word) refers to utils_ctboard.o(.text.write_word) for [Anonymous Symbol] + utils_ctboard.o(.ARM.exidx.text.write_doubleword) refers to utils_ctboard.o(.text.write_doubleword) for [Anonymous Symbol] + task.o(.text.main) refers to utils_ctboard.o(.text.read_word) for read_word + task.o(.text.main) refers to utils_ctboard.o(.text.write_word) for write_word + task.o(.text.main) refers to utils_ctboard.o(.text.read_byte) for read_byte + task.o(.text.main) refers to task.o(.text.getData7Segment) for getData7Segment + task.o(.text.main) refers to utils_ctboard.o(.text.write_byte) for write_byte + task.o(.ARM.exidx.text.main) refers to task.o(.text.main) for [Anonymous Symbol] + task.o(.ARM.exidx.text.getData7Segment) refers to task.o(.text.getData7Segment) for [Anonymous Symbol] + task.o(.ARM.exidx.text.getData7SegmentTwoDigits) refers to task.o(.text.getData7SegmentTwoDigits) for [Anonymous Symbol] + datainit_ctboard.o(.text) refers (Weak) to startup_ctboard.o(STACK) for Stack_Mem + datainit_ctboard.o(.text) refers to task.o(.text.main) for main + startup_ctboard.o(RESET) refers to startup_ctboard.o(STACK) for __initial_sp + startup_ctboard.o(RESET) refers to startup_ctboard.o(.text) for Reset_Handler + startup_ctboard.o(.text) refers to system_ctboard.o(.text.__system) for __system + startup_ctboard.o(.text) refers to datainit_ctboard.o(.text) for __main + system_ctboard.o(.text.__system) refers to system_ctboard.o(.text.system_enter_run) for system_enter_run + system_ctboard.o(.ARM.exidx.text.__system) refers to system_ctboard.o(.text.__system) for [Anonymous Symbol] + system_ctboard.o(.text.system_enter_run) refers to system_ctboard.o(.text.init_SystemClock) for init_SystemClock + system_ctboard.o(.text.system_enter_run) refers to system_ctboard.o(.text.init_FPU) for init_FPU + system_ctboard.o(.text.system_enter_run) refers to system_ctboard.o(.text.init_FMC_SRAM) for init_FMC_SRAM + system_ctboard.o(.text.system_enter_run) refers to system_ctboard.o(.text.init_LCD) for init_LCD + system_ctboard.o(.ARM.exidx.text.system_enter_run) refers to system_ctboard.o(.text.system_enter_run) for [Anonymous Symbol] + system_ctboard.o(.text.init_SystemClock) refers to hal_rcc.o(.text.hal_rcc_reset) for hal_rcc_reset + system_ctboard.o(.text.init_SystemClock) refers to hal_rcc.o(.text.hal_rcc_set_osc) for hal_rcc_set_osc + system_ctboard.o(.text.init_SystemClock) refers to hal_rcc.o(.text.hal_rcc_setup_pll) for hal_rcc_setup_pll + system_ctboard.o(.text.init_SystemClock) refers to hal_pwr.o(.text.hal_pwr_set_overdrive) for hal_pwr_set_overdrive + system_ctboard.o(.text.init_SystemClock) refers to hal_rcc.o(.text.hal_rcc_setup_clock) for hal_rcc_setup_clock + system_ctboard.o(.ARM.exidx.text.init_SystemClock) refers to system_ctboard.o(.text.init_SystemClock) for [Anonymous Symbol] + system_ctboard.o(.ARM.exidx.text.init_FPU) refers to system_ctboard.o(.text.init_FPU) for [Anonymous Symbol] + system_ctboard.o(.text.init_FMC_SRAM) refers to hal_gpio.o(.text.hal_gpio_init_alternate) for hal_gpio_init_alternate + system_ctboard.o(.text.init_FMC_SRAM) refers to hal_fmc.o(.text.hal_fmc_init_sram) for hal_fmc_init_sram + system_ctboard.o(.ARM.exidx.text.init_FMC_SRAM) refers to system_ctboard.o(.text.init_FMC_SRAM) for [Anonymous Symbol] + system_ctboard.o(.ARM.exidx.text.init_LCD) refers to system_ctboard.o(.text.init_LCD) for [Anonymous Symbol] + system_ctboard.o(.ARM.exidx.text.system_enter_sleep) refers to system_ctboard.o(.text.system_enter_sleep) for [Anonymous Symbol] + system_ctboard.o(.ARM.exidx.text.system_enter_stop) refers to system_ctboard.o(.text.system_enter_stop) for [Anonymous Symbol] + system_ctboard.o(.ARM.exidx.text.system_enter_standby) refers to system_ctboard.o(.text.system_enter_standby) for [Anonymous Symbol] + hal_fmc.o(.ARM.exidx.text.hal_fmc_reset) refers to hal_fmc.o(.text.hal_fmc_reset) for [Anonymous Symbol] + hal_fmc.o(.ARM.exidx.text.hal_fmc_init_sram) refers to hal_fmc.o(.text.hal_fmc_init_sram) for [Anonymous Symbol] + hal_gpio.o(.ARM.exidx.text.hal_gpio_reset) refers to hal_gpio.o(.text.hal_gpio_reset) for [Anonymous Symbol] + hal_gpio.o(.text.hal_gpio_init_input) refers to hal_gpio.o(.text.intercept_overwrite_register) for intercept_overwrite_register + hal_gpio.o(.text.hal_gpio_init_input) refers to hal_gpio.o(.text.create_pattern_mask) for create_pattern_mask + hal_gpio.o(.ARM.exidx.text.hal_gpio_init_input) refers to hal_gpio.o(.text.hal_gpio_init_input) for [Anonymous Symbol] + hal_gpio.o(.ARM.exidx.text.intercept_overwrite_register) refers to hal_gpio.o(.text.intercept_overwrite_register) for [Anonymous Symbol] + hal_gpio.o(.text.create_pattern_mask) refers to aeabi_sdiv.o(.text) for __aeabi_uidiv + hal_gpio.o(.ARM.exidx.text.create_pattern_mask) refers to hal_gpio.o(.text.create_pattern_mask) for [Anonymous Symbol] + hal_gpio.o(.text.hal_gpio_init_analog) refers to hal_gpio.o(.text.hal_gpio_init_input) for hal_gpio_init_input + hal_gpio.o(.text.hal_gpio_init_analog) refers to hal_gpio.o(.text.create_pattern_mask) for create_pattern_mask + hal_gpio.o(.ARM.exidx.text.hal_gpio_init_analog) refers to hal_gpio.o(.text.hal_gpio_init_analog) for [Anonymous Symbol] + hal_gpio.o(.text.hal_gpio_init_output) refers to hal_gpio.o(.text.intercept_overwrite_register) for intercept_overwrite_register + hal_gpio.o(.text.hal_gpio_init_output) refers to hal_gpio.o(.text.create_pattern_mask) for create_pattern_mask + hal_gpio.o(.ARM.exidx.text.hal_gpio_init_output) refers to hal_gpio.o(.text.hal_gpio_init_output) for [Anonymous Symbol] + hal_gpio.o(.text.hal_gpio_init_alternate) refers to hal_gpio.o(.text.hal_gpio_init_output) for hal_gpio_init_output + hal_gpio.o(.text.hal_gpio_init_alternate) refers to hal_gpio.o(.text.create_pattern_mask) for create_pattern_mask + hal_gpio.o(.ARM.exidx.text.hal_gpio_init_alternate) refers to hal_gpio.o(.text.hal_gpio_init_alternate) for [Anonymous Symbol] + hal_gpio.o(.ARM.exidx.text.hal_gpio_input_read) refers to hal_gpio.o(.text.hal_gpio_input_read) for [Anonymous Symbol] + hal_gpio.o(.ARM.exidx.text.hal_gpio_output_read) refers to hal_gpio.o(.text.hal_gpio_output_read) for [Anonymous Symbol] + hal_gpio.o(.text.hal_gpio_output_write) refers to hal_gpio.o(.text.intercept_overwrite_register) for intercept_overwrite_register + hal_gpio.o(.ARM.exidx.text.hal_gpio_output_write) refers to hal_gpio.o(.text.hal_gpio_output_write) for [Anonymous Symbol] + hal_gpio.o(.text.hal_gpio_bit_set) refers to hal_gpio.o(.text.intercept_overwrite_register) for intercept_overwrite_register + hal_gpio.o(.ARM.exidx.text.hal_gpio_bit_set) refers to hal_gpio.o(.text.hal_gpio_bit_set) for [Anonymous Symbol] + hal_gpio.o(.text.hal_gpio_bit_reset) refers to hal_gpio.o(.text.intercept_overwrite_register) for intercept_overwrite_register + hal_gpio.o(.ARM.exidx.text.hal_gpio_bit_reset) refers to hal_gpio.o(.text.hal_gpio_bit_reset) for [Anonymous Symbol] + hal_gpio.o(.text.hal_gpio_bit_toggle) refers to hal_gpio.o(.text.intercept_overwrite_register) for intercept_overwrite_register + hal_gpio.o(.text.hal_gpio_bit_toggle) refers to hal_gpio.o(.text.hal_gpio_output_read) for hal_gpio_output_read + hal_gpio.o(.ARM.exidx.text.hal_gpio_bit_toggle) refers to hal_gpio.o(.text.hal_gpio_bit_toggle) for [Anonymous Symbol] + hal_gpio.o(.text.hal_gpio_irq_set) refers to hal_gpio.o(.text.get_syscfg_mask) for get_syscfg_mask + hal_gpio.o(.ARM.exidx.text.hal_gpio_irq_set) refers to hal_gpio.o(.text.hal_gpio_irq_set) for [Anonymous Symbol] + hal_gpio.o(.ARM.exidx.text.get_syscfg_mask) refers to hal_gpio.o(.text.get_syscfg_mask) for [Anonymous Symbol] + hal_gpio.o(.ARM.exidx.text.hal_gpio_irq_status) refers to hal_gpio.o(.text.hal_gpio_irq_status) for [Anonymous Symbol] + hal_gpio.o(.ARM.exidx.text.hal_gpio_irq_clear) refers to hal_gpio.o(.text.hal_gpio_irq_clear) for [Anonymous Symbol] + hal_pwr.o(.ARM.exidx.text.hal_pwr_reset) refers to hal_pwr.o(.text.hal_pwr_reset) for [Anonymous Symbol] + hal_pwr.o(.ARM.exidx.text.hal_pwr_set_backup_domain) refers to hal_pwr.o(.text.hal_pwr_set_backup_domain) for [Anonymous Symbol] + hal_pwr.o(.ARM.exidx.text.hal_pwr_set_backup_access) refers to hal_pwr.o(.text.hal_pwr_set_backup_access) for [Anonymous Symbol] + hal_pwr.o(.ARM.exidx.text.hal_pwr_set_wakeup_pin) refers to hal_pwr.o(.text.hal_pwr_set_wakeup_pin) for [Anonymous Symbol] + hal_pwr.o(.ARM.exidx.text.hal_pwr_set_flash_powerdown) refers to hal_pwr.o(.text.hal_pwr_set_flash_powerdown) for [Anonymous Symbol] + hal_pwr.o(.ARM.exidx.text.hal_pwr_set_overdrive) refers to hal_pwr.o(.text.hal_pwr_set_overdrive) for [Anonymous Symbol] + hal_pwr.o(.ARM.exidx.text.hal_pwr_set_underdrive) refers to hal_pwr.o(.text.hal_pwr_set_underdrive) for [Anonymous Symbol] + hal_rcc.o(.ARM.exidx.text.hal_rcc_reset) refers to hal_rcc.o(.text.hal_rcc_reset) for [Anonymous Symbol] + hal_rcc.o(.ARM.exidx.text.hal_rcc_set_peripheral) refers to hal_rcc.o(.text.hal_rcc_set_peripheral) for [Anonymous Symbol] + hal_rcc.o(.ARM.exidx.text.hal_rcc_set_osc) refers to hal_rcc.o(.text.hal_rcc_set_osc) for [Anonymous Symbol] + hal_rcc.o(.ARM.exidx.text.hal_rcc_setup_pll) refers to hal_rcc.o(.text.hal_rcc_setup_pll) for [Anonymous Symbol] + hal_rcc.o(.ARM.exidx.text.hal_rcc_setup_clock) refers to hal_rcc.o(.text.hal_rcc_setup_clock) for [Anonymous Symbol] + aeabi_idiv0_sigfpe.o(.text) refers to rt_div0.o(.text) for __rt_div0 + rt_div0.o(.text) refers to defsig_fpe_outer.o(.text) for __rt_SIGFPE + defsig_fpe_outer.o(.text) refers to defsig_fpe_inner.o(.text) for __rt_SIGFPE_inner + defsig_fpe_outer.o(.text) refers to defsig_exit.o(.text) for __sig_exit + defsig_fpe_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_fpe_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display + 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 + sys_exit_hlt.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting + sys_exit_hlt.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function + __raise.o(.text) refers to defsig.o(CL$$defsig) for __default_signal_handler + defsig_general.o(.text) refers to sys_wrch.o(.text) for _ttywrch + sys_wrch.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting + sys_wrch.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function + sys_wrch_hlt.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting + sys_wrch_hlt.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function + defsig.o(CL$$defsig) refers to defsig_fpe_inner.o(.text) for __rt_SIGFPE_inner + defsig_abrt_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_rtmem_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 utils_ctboard.o(.text), (0 bytes). + Removing utils_ctboard.o(.ARM.exidx.text.read_byte), (8 bytes). + Removing utils_ctboard.o(.text.read_halfword), (16 bytes). + Removing utils_ctboard.o(.ARM.exidx.text.read_halfword), (8 bytes). + Removing utils_ctboard.o(.ARM.exidx.text.read_word), (8 bytes). + Removing utils_ctboard.o(.text.read_doubleword), (18 bytes). + Removing utils_ctboard.o(.ARM.exidx.text.read_doubleword), (8 bytes). + Removing utils_ctboard.o(.ARM.exidx.text.write_byte), (8 bytes). + Removing utils_ctboard.o(.text.write_halfword), (22 bytes). + Removing utils_ctboard.o(.ARM.exidx.text.write_halfword), (8 bytes). + Removing utils_ctboard.o(.ARM.exidx.text.write_word), (8 bytes). + Removing utils_ctboard.o(.text.write_doubleword), (26 bytes). + Removing utils_ctboard.o(.ARM.exidx.text.write_doubleword), (8 bytes). + Removing task.o(.text), (0 bytes). + Removing task.o(.ARM.exidx.text.main), (8 bytes). + Removing task.o(.ARM.exidx.text.getData7Segment), (8 bytes). + Removing task.o(.text.getData7SegmentTwoDigits), (304 bytes). + Removing task.o(.ARM.exidx.text.getData7SegmentTwoDigits), (8 bytes). + Removing task.o(.ARM.use_no_argv), (4 bytes). + Removing startup_ctboard.o(HEAP), (2048 bytes). + Removing system_ctboard.o(.text), (0 bytes). + Removing system_ctboard.o(.ARM.exidx.text.__system), (8 bytes). + Removing system_ctboard.o(.ARM.exidx.text.system_enter_run), (8 bytes). + Removing system_ctboard.o(.ARM.exidx.text.init_SystemClock), (8 bytes). + Removing system_ctboard.o(.ARM.exidx.text.init_FPU), (8 bytes). + Removing system_ctboard.o(.ARM.exidx.text.init_FMC_SRAM), (8 bytes). + Removing system_ctboard.o(.ARM.exidx.text.init_LCD), (8 bytes). + Removing system_ctboard.o(.text.system_enter_sleep), (10 bytes). + Removing system_ctboard.o(.ARM.exidx.text.system_enter_sleep), (8 bytes). + Removing system_ctboard.o(.text.system_enter_stop), (14 bytes). + Removing system_ctboard.o(.ARM.exidx.text.system_enter_stop), (8 bytes). + Removing system_ctboard.o(.text.system_enter_standby), (2 bytes). + Removing system_ctboard.o(.ARM.exidx.text.system_enter_standby), (8 bytes). + Removing hal_fmc.o(.text), (0 bytes). + Removing hal_fmc.o(.text.hal_fmc_reset), (148 bytes). + Removing hal_fmc.o(.ARM.exidx.text.hal_fmc_reset), (8 bytes). + Removing hal_fmc.o(.ARM.exidx.text.hal_fmc_init_sram), (8 bytes). + Removing hal_gpio.o(.text), (0 bytes). + Removing hal_gpio.o(.text.hal_gpio_reset), (120 bytes). + Removing hal_gpio.o(.ARM.exidx.text.hal_gpio_reset), (8 bytes). + Removing hal_gpio.o(.text.hal_gpio_init_input), (126 bytes). + Removing hal_gpio.o(.ARM.exidx.text.hal_gpio_init_input), (8 bytes). + Removing hal_gpio.o(.ARM.exidx.text.intercept_overwrite_register), (8 bytes). + Removing hal_gpio.o(.ARM.exidx.text.create_pattern_mask), (8 bytes). + Removing hal_gpio.o(.text.hal_gpio_init_analog), (84 bytes). + Removing hal_gpio.o(.ARM.exidx.text.hal_gpio_init_analog), (8 bytes). + Removing hal_gpio.o(.ARM.exidx.text.hal_gpio_init_output), (8 bytes). + Removing hal_gpio.o(.ARM.exidx.text.hal_gpio_init_alternate), (8 bytes). + Removing hal_gpio.o(.text.hal_gpio_input_read), (14 bytes). + Removing hal_gpio.o(.ARM.exidx.text.hal_gpio_input_read), (8 bytes). + Removing hal_gpio.o(.text.hal_gpio_output_read), (14 bytes). + Removing hal_gpio.o(.ARM.exidx.text.hal_gpio_output_read), (8 bytes). + Removing hal_gpio.o(.text.hal_gpio_output_write), (42 bytes). + Removing hal_gpio.o(.ARM.exidx.text.hal_gpio_output_write), (8 bytes). + Removing hal_gpio.o(.text.hal_gpio_bit_set), (54 bytes). + Removing hal_gpio.o(.ARM.exidx.text.hal_gpio_bit_set), (8 bytes). + Removing hal_gpio.o(.text.hal_gpio_bit_reset), (54 bytes). + Removing hal_gpio.o(.ARM.exidx.text.hal_gpio_bit_reset), (8 bytes). + Removing hal_gpio.o(.text.hal_gpio_bit_toggle), (78 bytes). + Removing hal_gpio.o(.ARM.exidx.text.hal_gpio_bit_toggle), (8 bytes). + Removing hal_gpio.o(.text.hal_gpio_irq_set), (888 bytes). + Removing hal_gpio.o(.ARM.exidx.text.hal_gpio_irq_set), (8 bytes). + Removing hal_gpio.o(.text.get_syscfg_mask), (272 bytes). + Removing hal_gpio.o(.ARM.exidx.text.get_syscfg_mask), (8 bytes). + Removing hal_gpio.o(.text.hal_gpio_irq_status), (76 bytes). + Removing hal_gpio.o(.ARM.exidx.text.hal_gpio_irq_status), (8 bytes). + Removing hal_gpio.o(.text.hal_gpio_irq_clear), (28 bytes). + Removing hal_gpio.o(.ARM.exidx.text.hal_gpio_irq_clear), (8 bytes). + Removing hal_pwr.o(.text), (0 bytes). + Removing hal_pwr.o(.text.hal_pwr_reset), (24 bytes). + Removing hal_pwr.o(.ARM.exidx.text.hal_pwr_reset), (8 bytes). + Removing hal_pwr.o(.text.hal_pwr_set_backup_domain), (164 bytes). + Removing hal_pwr.o(.ARM.exidx.text.hal_pwr_set_backup_domain), (8 bytes). + Removing hal_pwr.o(.text.hal_pwr_set_backup_access), (52 bytes). + Removing hal_pwr.o(.ARM.exidx.text.hal_pwr_set_backup_access), (8 bytes). + Removing hal_pwr.o(.text.hal_pwr_set_wakeup_pin), (52 bytes). + Removing hal_pwr.o(.ARM.exidx.text.hal_pwr_set_wakeup_pin), (8 bytes). + Removing hal_pwr.o(.text.hal_pwr_set_flash_powerdown), (52 bytes). + Removing hal_pwr.o(.ARM.exidx.text.hal_pwr_set_flash_powerdown), (8 bytes). + Removing hal_pwr.o(.ARM.exidx.text.hal_pwr_set_overdrive), (8 bytes). + Removing hal_pwr.o(.text.hal_pwr_set_underdrive), (12 bytes). + Removing hal_pwr.o(.ARM.exidx.text.hal_pwr_set_underdrive), (8 bytes). + Removing hal_rcc.o(.text), (0 bytes). + Removing hal_rcc.o(.ARM.exidx.text.hal_rcc_reset), (8 bytes). + Removing hal_rcc.o(.text.hal_rcc_set_peripheral), (420 bytes). + Removing hal_rcc.o(.ARM.exidx.text.hal_rcc_set_peripheral), (8 bytes). + Removing hal_rcc.o(.ARM.exidx.text.hal_rcc_set_osc), (8 bytes). + Removing hal_rcc.o(.ARM.exidx.text.hal_rcc_setup_pll), (8 bytes). + Removing hal_rcc.o(.ARM.exidx.text.hal_rcc_setup_clock), (8 bytes). + +89 unused section(s) (total 5646 bytes) removed from the image. + +============================================================================== + +Image Symbol Table + + Local Symbols + + Symbol Name Value Ov Type Size Object(Section) + + ../clib/angel/rt.s 0x00000000 Number 0 aeabi_idiv0.o ABSOLUTE + ../clib/angel/rt.s 0x00000000 Number 0 aeabi_idiv0_sigfpe.o ABSOLUTE + ../clib/angel/rt.s 0x00000000 Number 0 rt_div0.o ABSOLUTE + ../clib/angel/rt.s 0x00000000 Number 0 rt_raise.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 use_no_semi.o ABSOLUTE + ../clib/angel/sys.s 0x00000000 Number 0 indicate_semi.o ABSOLUTE + ../clib/angel/sysapp.c 0x00000000 Number 0 sys_exit.o ABSOLUTE + ../clib/angel/sysapp.c 0x00000000 Number 0 sys_exit_hlt.o ABSOLUTE + ../clib/angel/sysapp.c 0x00000000 Number 0 sys_wrch.o ABSOLUTE + ../clib/angel/sysapp.c 0x00000000 Number 0 sys_wrch_hlt.o ABSOLUTE + ../clib/division.s 0x00000000 Number 0 aeabi_sdiv.o ABSOLUTE + ../clib/division.s 0x00000000 Number 0 aeabi_sdiv_div0.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_fpe_outer.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_fpe_formal.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_exit.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_fpe_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 __raise.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_general.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_abrt_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtred_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_rtmem_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_stak_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_pvfn_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_cppl_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_segv_inner.o ABSOLUTE + ../clib/signal.c 0x00000000 Number 0 defsig_other.o ABSOLUTE + ../clib/signal.s 0x00000000 Number 0 defsig.o ABSOLUTE + RTE/Device/CT_Board_HS14_M0/datainit_ctboard.s 0x00000000 Number 0 datainit_ctboard.o ABSOLUTE + RTE/Device/CT_Board_HS14_M0/startup_ctboard.s 0x00000000 Number 0 startup_ctboard.o ABSOLUTE + dc.s 0x00000000 Number 0 dc.o ABSOLUTE + hal_fmc.c 0x00000000 Number 0 hal_fmc.o ABSOLUTE + hal_gpio.c 0x00000000 Number 0 hal_gpio.o ABSOLUTE + hal_pwr.c 0x00000000 Number 0 hal_pwr.o ABSOLUTE + hal_rcc.c 0x00000000 Number 0 hal_rcc.o ABSOLUTE + system_ctboard.c 0x00000000 Number 0 system_ctboard.o ABSOLUTE + task.c 0x00000000 Number 0 task.o ABSOLUTE + utils_ctboard.c 0x00000000 Number 0 utils_ctboard.o ABSOLUTE + RESET 0x08000000 Section 428 startup_ctboard.o(RESET) + .text 0x080001ac Section 124 datainit_ctboard.o(.text) + .text 0x08000228 Section 36 startup_ctboard.o(.text) + .text 0x0800024c Section 364 aeabi_sdiv.o(.text) + [Anonymous Symbol] 0x080003b8 Section 0 system_ctboard.o(.text.__system) + create_pattern_mask 0x080003c1 Thumb Code 156 hal_gpio.o(.text.create_pattern_mask) + [Anonymous Symbol] 0x080003c0 Section 0 hal_gpio.o(.text.create_pattern_mask) + [Anonymous Symbol] 0x0800045c Section 0 task.o(.text.getData7Segment) + [Anonymous Symbol] 0x08000548 Section 0 hal_fmc.o(.text.hal_fmc_init_sram) + __arm_cp.1_0 0x0800077c Number 4 hal_fmc.o(.text.hal_fmc_init_sram) + __arm_cp.1_1 0x08000780 Number 4 hal_fmc.o(.text.hal_fmc_init_sram) + __arm_cp.1_2 0x08000784 Number 4 hal_fmc.o(.text.hal_fmc_init_sram) + __arm_cp.1_3 0x08000788 Number 4 hal_fmc.o(.text.hal_fmc_init_sram) + __arm_cp.1_4 0x0800078c Number 4 hal_fmc.o(.text.hal_fmc_init_sram) + __arm_cp.1_5 0x08000790 Number 4 hal_fmc.o(.text.hal_fmc_init_sram) + __arm_cp.1_6 0x08000794 Number 4 hal_fmc.o(.text.hal_fmc_init_sram) + [Anonymous Symbol] 0x08000798 Section 0 hal_gpio.o(.text.hal_gpio_init_alternate) + [Anonymous Symbol] 0x0800085a Section 0 hal_gpio.o(.text.hal_gpio_init_output) + [Anonymous Symbol] 0x0800092a Section 0 hal_pwr.o(.text.hal_pwr_set_overdrive) + [Anonymous Symbol] 0x08000938 Section 0 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_1 0x080009cc Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_4 0x080009d0 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_6 0x080009d4 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_7 0x080009d8 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_8 0x080009dc Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_9 0x080009e0 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_10 0x080009e4 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_11 0x080009e8 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_12 0x080009ec Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_13 0x080009f0 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_14 0x080009f4 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_15 0x080009f8 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_16 0x080009fc Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_17 0x08000a00 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_18 0x08000a04 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_19 0x08000a08 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_20 0x08000a0c Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_21 0x08000a10 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_22 0x08000a14 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_23 0x08000a18 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_24 0x08000a1c Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_25 0x08000a20 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_26 0x08000a24 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_27 0x08000a28 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_28 0x08000a2c Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_29 0x08000a30 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_30 0x08000a34 Number 4 hal_rcc.o(.text.hal_rcc_reset) + __arm_cp.0_31 0x08000a38 Number 4 hal_rcc.o(.text.hal_rcc_reset) + [Anonymous Symbol] 0x08000a3c Section 0 hal_rcc.o(.text.hal_rcc_set_osc) + __arm_cp.2_0 0x08000b48 Number 4 hal_rcc.o(.text.hal_rcc_set_osc) + __arm_cp.2_2 0x08000b4c Number 4 hal_rcc.o(.text.hal_rcc_set_osc) + [Anonymous Symbol] 0x08000b50 Section 0 hal_rcc.o(.text.hal_rcc_setup_clock) + __arm_cp.4_0 0x08000bf0 Number 4 hal_rcc.o(.text.hal_rcc_setup_clock) + __arm_cp.4_1 0x08000bf4 Number 4 hal_rcc.o(.text.hal_rcc_setup_clock) + [Anonymous Symbol] 0x08000bf8 Section 0 hal_rcc.o(.text.hal_rcc_setup_pll) + __arm_cp.3_0 0x08000d40 Number 4 hal_rcc.o(.text.hal_rcc_setup_pll) + __arm_cp.3_1 0x08000d44 Number 4 hal_rcc.o(.text.hal_rcc_setup_pll) + __arm_cp.3_2 0x08000d48 Number 4 hal_rcc.o(.text.hal_rcc_setup_pll) + __arm_cp.3_3 0x08000d4c Number 4 hal_rcc.o(.text.hal_rcc_setup_pll) + __arm_cp.3_4 0x08000d50 Number 4 hal_rcc.o(.text.hal_rcc_setup_pll) + __arm_cp.3_5 0x08000d54 Number 4 hal_rcc.o(.text.hal_rcc_setup_pll) + init_FMC_SRAM 0x08000d59 Thumb Code 340 system_ctboard.o(.text.init_FMC_SRAM) + [Anonymous Symbol] 0x08000d58 Section 0 system_ctboard.o(.text.init_FMC_SRAM) + __arm_cp.4_0 0x08000eac Number 4 system_ctboard.o(.text.init_FMC_SRAM) + __arm_cp.4_1 0x08000eb0 Number 4 system_ctboard.o(.text.init_FMC_SRAM) + __arm_cp.4_2 0x08000eb4 Number 4 system_ctboard.o(.text.init_FMC_SRAM) + __arm_cp.4_3 0x08000eb8 Number 4 system_ctboard.o(.text.init_FMC_SRAM) + __arm_cp.4_4 0x08000ebc Number 4 system_ctboard.o(.text.init_FMC_SRAM) + __arm_cp.4_5 0x08000ec0 Number 4 system_ctboard.o(.text.init_FMC_SRAM) + __arm_cp.4_6 0x08000ec4 Number 4 system_ctboard.o(.text.init_FMC_SRAM) + __arm_cp.4_7 0x08000ec8 Number 4 system_ctboard.o(.text.init_FMC_SRAM) + __arm_cp.4_8 0x08000ecc Number 4 system_ctboard.o(.text.init_FMC_SRAM) + __arm_cp.4_9 0x08000ed0 Number 4 system_ctboard.o(.text.init_FMC_SRAM) + init_FPU 0x08000ed5 Thumb Code 2 system_ctboard.o(.text.init_FPU) + [Anonymous Symbol] 0x08000ed4 Section 0 system_ctboard.o(.text.init_FPU) + init_LCD 0x08000ed9 Thumb Code 32 system_ctboard.o(.text.init_LCD) + [Anonymous Symbol] 0x08000ed8 Section 0 system_ctboard.o(.text.init_LCD) + __arm_cp.5_0 0x08000ef8 Number 4 system_ctboard.o(.text.init_LCD) + init_SystemClock 0x08000efd Thumb Code 196 system_ctboard.o(.text.init_SystemClock) + [Anonymous Symbol] 0x08000efc Section 0 system_ctboard.o(.text.init_SystemClock) + __arm_cp.2_0 0x08000fc0 Number 4 system_ctboard.o(.text.init_SystemClock) + __arm_cp.2_1 0x08000fc4 Number 4 system_ctboard.o(.text.init_SystemClock) + __arm_cp.2_2 0x08000fc8 Number 4 system_ctboard.o(.text.init_SystemClock) + __arm_cp.2_3 0x08000fcc Number 4 system_ctboard.o(.text.init_SystemClock) + __arm_cp.2_4 0x08000fd0 Number 4 system_ctboard.o(.text.init_SystemClock) + intercept_overwrite_register 0x08000fd5 Thumb Code 48 hal_gpio.o(.text.intercept_overwrite_register) + [Anonymous Symbol] 0x08000fd4 Section 0 hal_gpio.o(.text.intercept_overwrite_register) + __arm_cp.2_0 0x08001004 Number 4 hal_gpio.o(.text.intercept_overwrite_register) + __arm_cp.2_1 0x08001008 Number 4 hal_gpio.o(.text.intercept_overwrite_register) + __arm_cp.2_2 0x0800100c Number 4 hal_gpio.o(.text.intercept_overwrite_register) + [Anonymous Symbol] 0x08001010 Section 0 task.o(.text.main) + __arm_cp.0_0 0x08001048 Number 4 task.o(.text.main) + __arm_cp.0_1 0x0800104c Number 4 task.o(.text.main) + __arm_cp.0_2 0x08001050 Number 4 task.o(.text.main) + __arm_cp.0_3 0x08001054 Number 4 task.o(.text.main) + [Anonymous Symbol] 0x08001058 Section 0 utils_ctboard.o(.text.read_byte) + [Anonymous Symbol] 0x08001068 Section 0 utils_ctboard.o(.text.read_word) + [Anonymous Symbol] 0x08001078 Section 0 system_ctboard.o(.text.system_enter_run) + [Anonymous Symbol] 0x0800108c Section 0 utils_ctboard.o(.text.write_byte) + [Anonymous Symbol] 0x080010a2 Section 0 utils_ctboard.o(.text.write_word) + STACK 0x20000000 Section 8192 startup_ctboard.o(STACK) + __initial_sp 0x20002000 Data 0 startup_ctboard.o(STACK) + + Global Symbols + + Symbol Name Value Ov Type Size Object(Section) + + BuildAttributes$$THM_ISAv3M$S$PE$A:L22$X:L11$S22$IEEE1$IW$~IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$ROPI$EBA8$STANDARDLIB$REQ8$PRES8$EABIv2 0x00000000 Number 0 anon$$obj.o ABSOLUTE + Image$$ER_IROM1$$Limit - Undefined Weak Reference + Image$$RW_IRAM1$$Base - Undefined Weak Reference + Image$$RW_IRAM1$$ZI$$Base - Undefined Weak Reference + Image$$RW_IRAM1$$ZI$$Limit - Undefined Weak Reference + __sigvec_lookup - Undefined Weak Reference + __Vectors_Size 0x000001ac Number 0 startup_ctboard.o ABSOLUTE + Stack_Size 0x00002000 Number 0 startup_ctboard.o ABSOLUTE + __Vectors 0x08000000 Data 4 startup_ctboard.o(RESET) + __Vectors_End 0x080001ac Data 0 startup_ctboard.o(RESET) + __main 0x080001ad Thumb Code 74 datainit_ctboard.o(.text) + Reset_Handler 0x08000229 Thumb Code 8 startup_ctboard.o(.text) + NMI_Handler 0x08000231 Thumb Code 2 startup_ctboard.o(.text) + HardFault_Handler 0x08000233 Thumb Code 2 startup_ctboard.o(.text) + MemManage_Handler 0x08000235 Thumb Code 2 startup_ctboard.o(.text) + BusFault_Handler 0x08000237 Thumb Code 2 startup_ctboard.o(.text) + UsageFault_Handler 0x08000239 Thumb Code 2 startup_ctboard.o(.text) + SVC_Handler 0x0800023b Thumb Code 2 startup_ctboard.o(.text) + DebugMon_Handler 0x0800023d Thumb Code 2 startup_ctboard.o(.text) + PendSV_Handler 0x0800023f Thumb Code 2 startup_ctboard.o(.text) + SysTick_Handler 0x08000241 Thumb Code 2 startup_ctboard.o(.text) + ADC_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + CAN1_RX0_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + CAN1_RX1_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + CAN1_SCE_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + CAN1_TX_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + CAN2_RX0_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + CAN2_RX1_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + CAN2_SCE_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + CAN2_TX_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + CRYP_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DCMI_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA1_Stream0_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA1_Stream1_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA1_Stream2_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA1_Stream3_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA1_Stream4_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA1_Stream5_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA1_Stream6_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA1_Stream7_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA2D_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA2_Stream0_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA2_Stream1_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA2_Stream2_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA2_Stream3_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA2_Stream4_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA2_Stream5_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA2_Stream6_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + DMA2_Stream7_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + ETH_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + ETH_WKUP_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + EXTI0_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + EXTI15_10_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + EXTI1_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + EXTI2_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + EXTI3_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + EXTI4_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + EXTI9_5_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + FLASH_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + FMC_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + FPU_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + HASH_RNG_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + I2C1_ER_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + I2C1_EV_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + I2C2_ER_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + I2C2_EV_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + I2C3_ER_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + I2C3_EV_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + LTDC_ER_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + LTDC_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + OTG_FS_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + OTG_FS_WKUP_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + OTG_HS_EP1_IN_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + OTG_HS_EP1_OUT_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + OTG_HS_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + OTG_HS_WKUP_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + PVD_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + RCC_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + RTC_Alarm_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + RTC_WKUP_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + SAI1_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + SDIO_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + SPI1_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + SPI2_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + SPI3_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + SPI4_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + SPI5_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + SPI6_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TAMP_STAMP_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TIM1_BRK_TIM9_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TIM1_CC_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TIM1_TRG_COM_TIM11_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TIM1_UP_TIM10_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TIM2_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TIM3_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TIM4_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TIM5_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TIM6_DAC_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TIM7_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TIM8_BRK_TIM12_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TIM8_CC_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TIM8_TRG_COM_TIM14_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + TIM8_UP_TIM13_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + UART4_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + UART5_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + UART7_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + UART8_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + USART1_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + USART2_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + USART3_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + USART6_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + WWDG_IRQHandler 0x08000243 Thumb Code 0 startup_ctboard.o(.text) + __aeabi_uidiv 0x0800024d Thumb Code 0 aeabi_sdiv.o(.text) + __aeabi_uidivmod 0x0800024d Thumb Code 20 aeabi_sdiv.o(.text) + __aeabi_idiv 0x08000261 Thumb Code 0 aeabi_sdiv.o(.text) + __aeabi_idivmod 0x08000261 Thumb Code 338 aeabi_sdiv.o(.text) + __system 0x080003b9 Thumb Code 8 system_ctboard.o(.text.__system) + getData7Segment 0x0800045d Thumb Code 236 task.o(.text.getData7Segment) + hal_fmc_init_sram 0x08000549 Thumb Code 564 hal_fmc.o(.text.hal_fmc_init_sram) + hal_gpio_init_alternate 0x08000799 Thumb Code 194 hal_gpio.o(.text.hal_gpio_init_alternate) + hal_gpio_init_output 0x0800085b Thumb Code 208 hal_gpio.o(.text.hal_gpio_init_output) + hal_pwr_set_overdrive 0x0800092b Thumb Code 12 hal_pwr.o(.text.hal_pwr_set_overdrive) + hal_rcc_reset 0x08000939 Thumb Code 148 hal_rcc.o(.text.hal_rcc_reset) + hal_rcc_set_osc 0x08000a3d Thumb Code 268 hal_rcc.o(.text.hal_rcc_set_osc) + hal_rcc_setup_clock 0x08000b51 Thumb Code 160 hal_rcc.o(.text.hal_rcc_setup_clock) + hal_rcc_setup_pll 0x08000bf9 Thumb Code 328 hal_rcc.o(.text.hal_rcc_setup_pll) + main 0x08001011 Thumb Code 56 task.o(.text.main) + read_byte 0x08001059 Thumb Code 16 utils_ctboard.o(.text.read_byte) + read_word 0x08001069 Thumb Code 16 utils_ctboard.o(.text.read_word) + system_enter_run 0x08001079 Thumb Code 20 system_ctboard.o(.text.system_enter_run) + write_byte 0x0800108d Thumb Code 22 utils_ctboard.o(.text.write_byte) + write_word 0x080010a3 Thumb Code 20 utils_ctboard.o(.text.write_word) + Image$$RO$$Limit 0x080010b8 Number 0 anon$$obj.o ABSOLUTE + Image$$RW$$Base 0x20000000 Number 0 anon$$obj.o ABSOLUTE + Image$$ZI$$Base 0x20000000 Number 0 anon$$obj.o ABSOLUTE + Stack_Mem 0x20000000 Data 8192 startup_ctboard.o(STACK) + Image$$ZI$$Limit 0x20002000 Number 0 anon$$obj.o ABSOLUTE + + + +============================================================================== + +Memory Map of the image + + Image Entry point : 0x08000229 + + Load Region LR_1 (Base: 0x08000000, Size: 0x000010b8, Max: 0xffffffff, ABSOLUTE) + + Execution Region ER_RO (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x000010b8, Max: 0xffffffff, ABSOLUTE) + + Exec Addr Load Addr Size Type Attr Idx E Section Name Object + + 0x08000000 0x08000000 0x000001ac Data RO 46 RESET startup_ctboard.o + 0x080001ac 0x080001ac 0x0000007c Code RO 38 .text datainit_ctboard.o + 0x08000228 0x08000228 0x00000024 Code RO 47 * .text startup_ctboard.o + 0x0800024c 0x0800024c 0x0000016c Code RO 168 .text c_p.l(aeabi_sdiv.o) + 0x080003b8 0x080003b8 0x00000008 Code RO 52 .text.__system system_ctboard.o + 0x080003c0 0x080003c0 0x0000009c Code RO 94 .text.create_pattern_mask hal_gpio.o + 0x0800045c 0x0800045c 0x000000ec Code RO 27 .text.getData7Segment task.o + 0x08000548 0x08000548 0x00000250 Code RO 79 .text.hal_fmc_init_sram hal_fmc.o + 0x08000798 0x08000798 0x000000c2 Code RO 100 .text.hal_gpio_init_alternate hal_gpio.o + 0x0800085a 0x0800085a 0x000000d0 Code RO 98 .text.hal_gpio_init_output hal_gpio.o + 0x0800092a 0x0800092a 0x0000000c Code RO 139 .text.hal_pwr_set_overdrive hal_pwr.o + 0x08000936 0x08000936 0x00000002 PAD + 0x08000938 0x08000938 0x00000104 Code RO 150 .text.hal_rcc_reset hal_rcc.o + 0x08000a3c 0x08000a3c 0x00000114 Code RO 154 .text.hal_rcc_set_osc hal_rcc.o + 0x08000b50 0x08000b50 0x000000a8 Code RO 158 .text.hal_rcc_setup_clock hal_rcc.o + 0x08000bf8 0x08000bf8 0x00000160 Code RO 156 .text.hal_rcc_setup_pll hal_rcc.o + 0x08000d58 0x08000d58 0x0000017c Code RO 60 .text.init_FMC_SRAM system_ctboard.o + 0x08000ed4 0x08000ed4 0x00000002 Code RO 58 .text.init_FPU system_ctboard.o + 0x08000ed6 0x08000ed6 0x00000002 PAD + 0x08000ed8 0x08000ed8 0x00000024 Code RO 62 .text.init_LCD system_ctboard.o + 0x08000efc 0x08000efc 0x000000d8 Code RO 56 .text.init_SystemClock system_ctboard.o + 0x08000fd4 0x08000fd4 0x0000003c Code RO 92 .text.intercept_overwrite_register hal_gpio.o + 0x08001010 0x08001010 0x00000048 Code RO 25 .text.main task.o + 0x08001058 0x08001058 0x00000010 Code RO 2 .text.read_byte utils_ctboard.o + 0x08001068 0x08001068 0x00000010 Code RO 6 .text.read_word utils_ctboard.o + 0x08001078 0x08001078 0x00000014 Code RO 54 .text.system_enter_run system_ctboard.o + 0x0800108c 0x0800108c 0x00000016 Code RO 10 .text.write_byte utils_ctboard.o + 0x080010a2 0x080010a2 0x00000014 Code RO 14 .text.write_word utils_ctboard.o + + + Execution Region ER_RW (Exec base: 0x20000000, Load base: 0x080010b8, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE) + + **** No section assigned to this execution region **** + + + Execution Region ER_ZI (Exec base: 0x20000000, Load base: 0x080010b8, Size: 0x00002000, Max: 0xffffffff, ABSOLUTE) + + Exec Addr Load Addr Size Type Attr Idx E Section Name Object + + 0x20000000 - 0x00002000 Zero RW 44 STACK startup_ctboard.o + + +============================================================================== + +Image component sizes + + + Code (inc. data) RO Data RW Data ZI Data Debug Object Name + + 124 50 0 0 0 428 datainit_ctboard.o + 592 44 0 0 0 3213 hal_fmc.o + 618 12 0 0 0 8713 hal_gpio.o + 12 0 0 0 0 2018 hal_pwr.o + 1056 152 0 0 0 4848 hal_rcc.o + 36 8 428 0 8192 796 startup_ctboard.o + 662 64 0 0 0 6900 system_ctboard.o + 308 80 0 0 0 1190 task.o + 74 0 0 0 0 1703 utils_ctboard.o + + ---------------------------------------------------------------------- + 3488 410 428 0 8192 29809 Object Totals + 0 0 0 0 0 0 (incl. Generated) + 6 0 0 0 0 0 (incl. Padding) + + ---------------------------------------------------------------------- + + Code (inc. data) RO Data RW Data ZI Data Debug Library Member Name + + 364 4 0 0 0 92 aeabi_sdiv.o + + ---------------------------------------------------------------------- + 364 4 0 0 0 92 Library Totals + 0 0 0 0 0 0 (incl. Padding) + + ---------------------------------------------------------------------- + + Code (inc. data) RO Data RW Data ZI Data Debug Library Name + + 364 4 0 0 0 92 c_p.l + + ---------------------------------------------------------------------- + 364 4 0 0 0 92 Library Totals + + ---------------------------------------------------------------------- + +============================================================================== + + + Code (inc. data) RO Data RW Data ZI Data Debug + + 3852 414 428 0 8192 29677 Grand Totals + 3852 414 428 0 8192 29677 ELF Image Totals + 3852 414 428 0 0 0 ROM Totals + +============================================================================== + + Total RO Size (Code + RO Data) 4280 ( 4.18kB) + Total RW Size (RW Data + ZI Data) 8192 ( 8.00kB) + Total ROM Size (Code + RO Data + RW Data) 4280 ( 4.18kB) + +============================================================================== + diff --git a/CT-Lab1-Project/Objects/CT-Lab1-Project.build_log.htm b/CT-Lab1-Project/Objects/CT-Lab1-Project.build_log.htm new file mode 100644 index 0000000..aadf9bf --- /dev/null +++ b/CT-Lab1-Project/Objects/CT-Lab1-Project.build_log.htm @@ -0,0 +1,52 @@ + + +
+

µVision Build Log

+

Tool Versions:

+IDE-Version: µVision V5.37.0.0 +Copyright (C) 2022 ARM Ltd and ARM Germany GmbH. All rights reserved. +License Information: Roman Schenk, ZHAW, LIC=---- + +Tool Versions: +Toolchain: MDK-Lite Version: 5.37.0.0 +Toolchain Path: C:\Keil_v5\ARM\ARMCLANG\Bin +C Compiler: ArmClang.exe V6.18 +Assembler: Armasm.exe V6.18 +Linker/Locator: ArmLink.exe V6.18 +Library Manager: ArmAr.exe V6.18 +Hex Converter: FromElf.exe V6.18 +CPU DLL: SARMCM3.DLL V5.37.0.0 +Dialog DLL: DARMCM1.DLL V1.19.6.0 +Target DLL: UL2CM3.DLL V1.164.7.0 +Dialog DLL: TARMCM1.DLL V1.14.6.0 + +

Project:

+C:\Users\roman\Documents\CT-Lab1-Project\CT-Lab1-Project.uvprojx +Project File Date: 09/23/2022 + +

Output:

+*** Using Compiler 'V6.18', folder: 'C:\Keil_v5\ARM\ARMCLANG\Bin' +Build target 'Target 1' +linking... +.\Objects\CT-Lab1-Project.axf: Error: L6320W: Ignoring --entry command. Cannot find argument 'Reset_Handler'. +.\Objects\CT-Lab1-Project.axf: Warning: L6320W: Ignoring --first command. Cannot find argument '__Vectors'. +Not enough information to list image symbols. +Not enough information to list load addresses in the image map. +Finished: 2 information, 1 warning and 1 error messages. +".\Objects\CT-Lab1-Project.axf" - 1 Error(s), 1 Warning(s). + +

Software Packages used:

+ +Package Vendor: InES + https://ennis.zhaw.ch/pack/InES.CTBoard14_DFP.4.0.2.pack + InES.CTBoard14_DFP.4.0.2 + CT Board 14 (STM32F429ZI) Device Support + +

Collection of Component include folders:

+ +

Collection of Component Files used:

+Target not created. +Build Time Elapsed: 00:00:00 +
+ + diff --git a/CT-Lab1-Project/Objects/CT-Lab1-Project.lnp b/CT-Lab1-Project/Objects/CT-Lab1-Project.lnp new file mode 100644 index 0000000..2dc2575 --- /dev/null +++ b/CT-Lab1-Project/Objects/CT-Lab1-Project.lnp @@ -0,0 +1,6 @@ +--cpu Cortex-M0 +".\objects\utils_ctboard.o" +".\objects\task.o" +--ro-base 0x08000000 --entry 0x08000000 --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\CT-Lab1-Project.map" -o .\Objects\CT-Lab1-Project.axf \ No newline at end of file diff --git a/CT-Lab1-Project/Objects/CT-Lab1-Project_Target 1.dep b/CT-Lab1-Project/Objects/CT-Lab1-Project_Target 1.dep new file mode 100644 index 0000000..4c8b8e8 --- /dev/null +++ b/CT-Lab1-Project/Objects/CT-Lab1-Project_Target 1.dep @@ -0,0 +1,6 @@ +Dependencies for Project 'CT-Lab1-Project', Target 'Target 1': (DO NOT MODIFY !) +CompilerVersion: 6180000::V6.18::ARMCLANG +F (.\utils_ctboard.c)(0x613F3541)(-xc -std=c90 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__EVAL -gdwarf-4 -O0 -ffunction-sections -Weverything -Wno-packed -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -D__UVISION_VERSION="537" -o ./objects/utils_ctboard.o -MD) +I (C:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x6252B538) +I (utils_ctboard.h)(0x613F3541) +F (.\Task.c)(0x632D5432)(-xc -std=c90 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__EVAL -gdwarf-4 -O0 -ffunction-sections -Weverything -Wno-packed -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -D__UVISION_VERSION="537" -o ./objects/task.o -MD) diff --git a/CT-Lab1-Project/Objects/task.__i b/CT-Lab1-Project/Objects/task.__i new file mode 100644 index 0000000..97d2c95 --- /dev/null +++ b/CT-Lab1-Project/Objects/task.__i @@ -0,0 +1,5 @@ +-xc -std=c90 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c +-fno-rtti -funsigned-char -fshort-enums -fshort-wchar +-D__EVAL -gdwarf-4 -O0 -ffunction-sections -Weverything -Wno-packed -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier +-D__UVISION_VERSION="537" +-o ./objects/task.o -MD "Task.c" \ No newline at end of file diff --git a/CT-Lab1-Project/Objects/task.d b/CT-Lab1-Project/Objects/task.d new file mode 100644 index 0000000..55d5f53 --- /dev/null +++ b/CT-Lab1-Project/Objects/task.d @@ -0,0 +1,2 @@ +./objects/task.o: Task.c utils_ctboard.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h diff --git a/CT-Lab1-Project/Objects/task.o b/CT-Lab1-Project/Objects/task.o new file mode 100644 index 0000000000000000000000000000000000000000..fec35d05fa3d331ea0ba257642f38e797377ad86 GIT binary patch literal 1816 zcmb_dJ8u&~5T5nf!NK8h5*`U4bVA`FP)-g41Ob7AgLpp`DvZqeya@*1U37Or0f7Wa zG&Imq(9uxPQPELS((nr?kZ5SAD3A!>?B4kfQ6Vwb&EwnM+1Z)d^^c2J8bSz4Nl=+G zi^wXfk9=#=tp09lU^;He3b-Y##i|yuU$uO%MH=Dy^WPqq(6D##G z!~v(uI$%#7wB~}KH*Gng=k^?b!Me6z?sHwI zR=ZAfPITLLsWIKW8p$wfhJok!&Dp?R^58gXHs&VJIqj**OJQ(Jx-of9*Qc(JVE)JM zGj*KAkxsiy;sDgfUb}XPN^TIwa(U9L(ZJBE^JN+oCg-!TuCSgqiZL-RHi@kR+h~Va zi$yb6&XZULr7EZju>vY0x8lAzw1#1PDRC-~n?>3WS){Gt=!T!>8WyUS0MeYOH6>Mn zb*0kkn+3R3rBVYKdzY#3`F$m4l7ZjHJODdS265mS8LHTM+sq7T22LZCi;;&gaU2yN z)B$cLF$~7E8!-Bi5Hk(2ED?<)asx|jyD70b3kA&InaHUGKa$8XmT0%}e$aBlg*#*eu>Sx$vc0s>a@y@sVi;A8$#w&en@i7j;yCQKmtq-_ttUruNOmZD ziP`n%18uW&x!mn6D?hesMcWTzX`j4sbux+__jZ0^uj|XaJs&!rOp9w{m)L2O9o_X< zPQ-Q%=lUn=mr^UA(#7v}mz>k~UoFFV1r@nIiuR@oH{U%XmG}%(8aFN~`WSps0br;t zcGmv!K%HVd9pno@WiEN0;f%fvqSTm z2GqQ#DX6dp(T!}j((2kSf75{vCOaZJoTaI{mFO~|DjyL>K9C2grwlxkgEV?DK~5+W zUYKxy`)i(Ph@K^~FZwfpW)cxd{FPS0OLt3W1zd!P$sjmK)=taL=%F#%9Ry79ZU_YW)y5M@r2NqSHftMo* H06F;$)OyHv literal 0 HcmV?d00001 diff --git a/CT-Lab1-Project/Objects/utils_ctboard.d b/CT-Lab1-Project/Objects/utils_ctboard.d new file mode 100644 index 0000000..51d989d --- /dev/null +++ b/CT-Lab1-Project/Objects/utils_ctboard.d @@ -0,0 +1,2 @@ +./objects/utils_ctboard.o: utils_ctboard.c \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h utils_ctboard.h diff --git a/CT-Lab1-Project/Objects/utils_ctboard.o b/CT-Lab1-Project/Objects/utils_ctboard.o new file mode 100644 index 0000000000000000000000000000000000000000..fa7c1e2b01af29c4a4a5c9374c0185a990ae4d47 GIT binary patch literal 5532 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 Sm5bPMAnDOX)UiBSEB^+j>> +;******************************************************************************* +; +; Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); +; You may not use this file except in compliance with the License. +; You may obtain a copy of the License at: +; +; http://www.st.com/software_license_agreement_liberty_v2 +; +; Unless required by applicable law or agreed to in writing, software +; distributed under the License is distributed on an "AS IS" BASIS, +; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; See the License for the specific language governing permissions and +; limitations under the License. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00002000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 + EXPORT Stack_Size + EXPORT Stack_Mem + +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000800 + + 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 WWDG_IRQHandler ; Window WatchDog + DCD PVD_IRQHandler ; PVD through EXTI Line detection + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line + DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line + DCD FLASH_IRQHandler ; FLASH + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line0 + DCD EXTI1_IRQHandler ; EXTI Line1 + DCD EXTI2_IRQHandler ; EXTI Line2 + DCD EXTI3_IRQHandler ; EXTI Line3 + DCD EXTI4_IRQHandler ; EXTI Line4 + DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0 + DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1 + DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2 + DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3 + DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4 + DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5 + DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6 + DCD ADC_IRQHandler ; ADC1, ADC2 and ADC3s + DCD CAN1_TX_IRQHandler ; CAN1 TX + DCD CAN1_RX0_IRQHandler ; CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; External Line[9:5]s + DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9 + DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10 + DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; External Line[15:10]s + DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line + DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break and TIM12 + DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update and TIM13 + DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14 + DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare + DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 + DCD FMC_IRQHandler ; FMC + DCD SDIO_IRQHandler ; SDIO + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0 + DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1 + DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2 + DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3 + DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4 + DCD ETH_IRQHandler ; Ethernet + DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line + DCD CAN2_TX_IRQHandler ; CAN2 TX + DCD CAN2_RX0_IRQHandler ; CAN2 RX0 + DCD CAN2_RX1_IRQHandler ; CAN2 RX1 + DCD CAN2_SCE_IRQHandler ; CAN2 SCE + DCD OTG_FS_IRQHandler ; USB OTG FS + DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5 + DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6 + DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7 + DCD USART6_IRQHandler ; USART6 + DCD I2C3_EV_IRQHandler ; I2C3 event + DCD I2C3_ER_IRQHandler ; I2C3 error + DCD OTG_HS_EP1_OUT_IRQHandler ; USB OTG HS End Point 1 Out + DCD OTG_HS_EP1_IN_IRQHandler ; USB OTG HS End Point 1 In + DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI + DCD OTG_HS_IRQHandler ; USB OTG HS + DCD DCMI_IRQHandler ; DCMI + DCD CRYP_IRQHandler ; CRYP crypto + DCD HASH_RNG_IRQHandler ; Hash and Rng + DCD FPU_IRQHandler ; FPU + DCD UART7_IRQHandler ; UART7 + DCD UART8_IRQHandler ; UART8 + DCD SPI4_IRQHandler ; SPI4 + DCD SPI5_IRQHandler ; SPI5 + DCD SPI6_IRQHandler ; SPI6 + DCD SAI1_IRQHandler ; SAI1 + DCD LTDC_IRQHandler ; LTDC + DCD LTDC_ER_IRQHandler ; LTDC error + DCD DMA2D_IRQHandler ; DMA2D + +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __system + IMPORT __main + ENTRY + + LDR R0, =__system + 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 WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMP_STAMP_IRQHandler [WEAK] + EXPORT RTC_WKUP_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Stream0_IRQHandler [WEAK] + EXPORT DMA1_Stream1_IRQHandler [WEAK] + EXPORT DMA1_Stream2_IRQHandler [WEAK] + EXPORT DMA1_Stream3_IRQHandler [WEAK] + EXPORT DMA1_Stream4_IRQHandler [WEAK] + EXPORT DMA1_Stream5_IRQHandler [WEAK] + EXPORT DMA1_Stream6_IRQHandler [WEAK] + EXPORT ADC_IRQHandler [WEAK] + EXPORT CAN1_TX_IRQHandler [WEAK] + EXPORT CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_TIM9_IRQHandler [WEAK] + EXPORT TIM1_UP_TIM10_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_TIM11_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTC_Alarm_IRQHandler [WEAK] + EXPORT OTG_FS_WKUP_IRQHandler [WEAK] + EXPORT TIM8_BRK_TIM12_IRQHandler [WEAK] + EXPORT TIM8_UP_TIM13_IRQHandler [WEAK] + EXPORT TIM8_TRG_COM_TIM14_IRQHandler [WEAK] + EXPORT TIM8_CC_IRQHandler [WEAK] + EXPORT DMA1_Stream7_IRQHandler [WEAK] + EXPORT FMC_IRQHandler [WEAK] + EXPORT SDIO_IRQHandler [WEAK] + EXPORT TIM5_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT TIM6_DAC_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] + EXPORT DMA2_Stream0_IRQHandler [WEAK] + EXPORT DMA2_Stream1_IRQHandler [WEAK] + EXPORT DMA2_Stream2_IRQHandler [WEAK] + EXPORT DMA2_Stream3_IRQHandler [WEAK] + EXPORT DMA2_Stream4_IRQHandler [WEAK] + EXPORT ETH_IRQHandler [WEAK] + EXPORT ETH_WKUP_IRQHandler [WEAK] + EXPORT CAN2_TX_IRQHandler [WEAK] + EXPORT CAN2_RX0_IRQHandler [WEAK] + EXPORT CAN2_RX1_IRQHandler [WEAK] + EXPORT CAN2_SCE_IRQHandler [WEAK] + EXPORT OTG_FS_IRQHandler [WEAK] + EXPORT DMA2_Stream5_IRQHandler [WEAK] + EXPORT DMA2_Stream6_IRQHandler [WEAK] + EXPORT DMA2_Stream7_IRQHandler [WEAK] + EXPORT USART6_IRQHandler [WEAK] + EXPORT I2C3_EV_IRQHandler [WEAK] + EXPORT I2C3_ER_IRQHandler [WEAK] + EXPORT OTG_HS_EP1_OUT_IRQHandler [WEAK] + EXPORT OTG_HS_EP1_IN_IRQHandler [WEAK] + EXPORT OTG_HS_WKUP_IRQHandler [WEAK] + EXPORT OTG_HS_IRQHandler [WEAK] + EXPORT DCMI_IRQHandler [WEAK] + EXPORT CRYP_IRQHandler [WEAK] + EXPORT HASH_RNG_IRQHandler [WEAK] + EXPORT FPU_IRQHandler [WEAK] + EXPORT UART7_IRQHandler [WEAK] + EXPORT UART8_IRQHandler [WEAK] + EXPORT SPI4_IRQHandler [WEAK] + EXPORT SPI5_IRQHandler [WEAK] + EXPORT SPI6_IRQHandler [WEAK] + EXPORT SAI1_IRQHandler [WEAK] + EXPORT LTDC_IRQHandler [WEAK] + EXPORT LTDC_ER_IRQHandler [WEAK] + EXPORT DMA2D_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMP_STAMP_IRQHandler +RTC_WKUP_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Stream0_IRQHandler +DMA1_Stream1_IRQHandler +DMA1_Stream2_IRQHandler +DMA1_Stream3_IRQHandler +DMA1_Stream4_IRQHandler +DMA1_Stream5_IRQHandler +DMA1_Stream6_IRQHandler +ADC_IRQHandler +CAN1_TX_IRQHandler +CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_TIM9_IRQHandler +TIM1_UP_TIM10_IRQHandler +TIM1_TRG_COM_TIM11_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTC_Alarm_IRQHandler +OTG_FS_WKUP_IRQHandler +TIM8_BRK_TIM12_IRQHandler +TIM8_UP_TIM13_IRQHandler +TIM8_TRG_COM_TIM14_IRQHandler +TIM8_CC_IRQHandler +DMA1_Stream7_IRQHandler +FMC_IRQHandler +SDIO_IRQHandler +TIM5_IRQHandler +SPI3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +TIM6_DAC_IRQHandler +TIM7_IRQHandler +DMA2_Stream0_IRQHandler +DMA2_Stream1_IRQHandler +DMA2_Stream2_IRQHandler +DMA2_Stream3_IRQHandler +DMA2_Stream4_IRQHandler +ETH_IRQHandler +ETH_WKUP_IRQHandler +CAN2_TX_IRQHandler +CAN2_RX0_IRQHandler +CAN2_RX1_IRQHandler +CAN2_SCE_IRQHandler +OTG_FS_IRQHandler +DMA2_Stream5_IRQHandler +DMA2_Stream6_IRQHandler +DMA2_Stream7_IRQHandler +USART6_IRQHandler +I2C3_EV_IRQHandler +I2C3_ER_IRQHandler +OTG_HS_EP1_OUT_IRQHandler +OTG_HS_EP1_IN_IRQHandler +OTG_HS_WKUP_IRQHandler +OTG_HS_IRQHandler +DCMI_IRQHandler +CRYP_IRQHandler +HASH_RNG_IRQHandler +FPU_IRQHandler +UART7_IRQHandler +UART8_IRQHandler +SPI4_IRQHandler +SPI5_IRQHandler +SPI6_IRQHandler +SAI1_IRQHandler +LTDC_IRQHandler +LTDC_ER_IRQHandler +DMA2D_IRQHandler + B . + + ENDP + + ALIGN + + END + +;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE***** diff --git a/CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/.system_ctboard.c@4.0.1 b/CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/.system_ctboard.c@4.0.1 new file mode 100644 index 0000000..58c804c --- /dev/null +++ b/CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/.system_ctboard.c@4.0.1 @@ -0,0 +1,290 @@ +/* ---------------------------------------------------------------------------- + * -- _____ ______ _____ - + * -- |_ _| | ____|/ ____| - + * -- | | _ __ | |__ | (___ Institute of Embedded Systems - + * -- | | | '_ \| __| \___ \ Zurich University of - + * -- _| |_| | | | |____ ____) | Applied Sciences - + * -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - + * ------------------------------------------------------------------------- */ +/** + * \brief Interface of module system_ctboard. + * Description : Basic system configuration. + * * initialize system clock + * * initialize FMC (SRAM & GPIO) + * + * GPIO FMC pin assignment: + * + * PD0 > FMC_D2 | PE0 > FMC_NBL0 | PF0 > FMC_A0 | PG0 > FMC_A10 + * PD1 > FMC_D3 | PE1 > FMC_NBL1 | PF1 > FMC_A1 | PG1 > FMC_A11 + * PD3 > FMC_CLK | PE2 > FMC_A23 | PF2 > FMC_A2 | PG2 > FMC_A12 + * PD4 > FMC_NOE | PE3 > FMC_A19 | PF3 > FMC_A3 | PG3 > FMC_A13 + * PD5 > FMC_NWE | PE4 > FMC_A20 | PF4 > FMC_A4 | PG4 > FMC_A14 + * PD6 > FMC_WAIT | PE5 > FMC_A21 | PF5 > FMC_A5 | PG5 > FMC_A15 + * PD7 > FMC_NE1 | PE6 > FMC_A22 | PF12 > FMC_A6 | PG9 > FMC_NE2 + * PD8 > FMC_D13 | PE7 > FMC_D4 | PF13 > FMC_A7 | PG10 > FMC_NE3 + * PD9 > FMC_D14 | PE8 > FMC_D5 | PF14 > FMC_A8 | PG12 > FMC_NE4 + * PD10 > FMC_A15 | PE9 > FMC_D6 | PF15 > FMC_A9 | PG13 > FMC_A24 + * PD11 > FMC_A16 | PE10 > FMC_D7 | | + * PD12 > FMC_A17 | PE11 > FMC_D8 | | + * PD13 > FMC_A18 | PE12 > FMC_D9 | | + * PD14 > FMC_D0 | PE13 > FMC_D10 | | + * PD15 > FMC_D1 | PE14 > FMC_D11 | | + * | PE15 > FMC_D12 | | + * + * $Id$ + * ------------------------------------------------------------------------- */ + +/* Standard includes */ +#include + + +/* User includes */ +#include "system_ctboard.h" +#include "reg_stm32f4xx.h" +#include "reg_ctboard.h" + + +/* -- Macros (LCD) + * ------------------------------------------------------------------------- */ + +#define LCD_WAIT 0x1fff + + +/* -- Macros (FMC) + * ------------------------------------------------------------------------- */ + +#define FMC_PORTD_PINMASK 0xfffb +#define FMC_PORTE_PINMASK 0xffff +#define FMC_PORTF_PINMASK 0xf03f +#define FMC_PORTG_PINMASK 0x363f + + +/* -- Local function declarations + * ------------------------------------------------------------------------- */ + +static void init_SystemClock(void); +static void init_FPU(void); +static void init_FMC_SRAM(void); +static void init_LCD(void); + + +/* -- Public function definitions + * ------------------------------------------------------------------------- */ + +/** + * \brief Entry point used in startup. + */ +void __system(void) +{ + system_enter_run(); +} + + +/* + * See header files + */ +void system_enter_run(void) +{ + /* Initialize RCC / system clock */ + init_SystemClock(); + + /* Iitialize FPU */ + init_FPU(); + + /* Initialize SRAM interface */ + init_FMC_SRAM(); + + /* Initialize LCD on CT-Board */ + init_LCD(); +} + + +/* + * See header file + */ +void system_enter_sleep(hal_pwr_lp_entry_t entry) +{ + /** \note Implement this function if needed. */ +} + + +/* + * See header file + */ +void system_enter_stop(hal_pwr_regulator_t regulator, hal_pwr_lp_entry_t entry) +{ + /** \note Implement this function if needed. */ +} + + +/* + * See header file + */ +void system_enter_standby(void) +{ + /** \note Implement this function if needed. */ +} + + +/* -- Local function definitions + * ------------------------------------------------------------------------- */ + +/** + * \brief Configures the System clock source, PLL Multiplier and Divider + * factors, AHB/APBx prescalers and Flash settings. + */ +static void init_SystemClock(void) +{ + hal_rcc_pll_init_t pll_init; + hal_rcc_clk_init_t clk_init; + + /* Enable used periphery */ + PWR_ENABLE(); + + /* Reset */ + hal_rcc_reset(); + PWR_RESET(); + + /* Enable HSE oscillator and proceed if ok */ + if (hal_rcc_set_osc(HAL_RCC_OSC_HSE, ENABLE)) { + /* Select regulator voltage output Scale 1 mode */ + RCC->APB1ENR |= 0x00000000; + PWR->CR |= 0x0000c000; + + /* Configure PLL */ + pll_init.source = HAL_RCC_OSC_HSE; + pll_init.m_divider = 4u; + pll_init.n_factor = 168u; + pll_init.p_divider = 2u; + pll_init.q_divider = 7u; + hal_rcc_setup_pll(HAL_RCC_OSC_PLL, pll_init); + + /* Enable PLL */ + hal_rcc_set_osc(HAL_RCC_OSC_PLL, ENABLE); + + /* Enable overdrive to allow system clock >= 168 MHz */ + hal_pwr_set_overdrive(ENABLE); + + /* Configure Flash prefetch, Instruction cache, Data cache + * and wait state */ + FLASH->ACR = 0x00000705; + + /* Setup system clock */ + clk_init.osc = HAL_RCC_OSC_PLL; + clk_init.hpre = HAL_RCC_HPRE_2; // -> AHB clock : 84 MHz + clk_init.ppre1 = HAL_RCC_PPRE_2; // -> APB1 clock : 48 MHz + clk_init.ppre2 = HAL_RCC_PPRE_2; // -> APB2 clock : 48 MHz + hal_rcc_setup_clock(clk_init); + + } else { + /* If HSE fails to start-up, the application will have wrong clock con- + figuration. User can add here some code to deal with this error */ + } +} + + +/** + * \brief Initialize the floating point unit in M4 mode. + */ +static void init_FPU(void) +{ +#ifdef PLATFORM_M4 + /* No documentation about this, even the registers... */ + + /* set CP10 and CP11 Full Access */ + FPU->CPACR |= ((3u << 20u)|(3u << 22u)); +#endif +} + + +/** + * \brief Setup the flexible memory controller. This function configures the SRAM + * interface for accessing the periphery on the CT Board. + */ +static void init_FMC_SRAM(void) +{ +#ifndef NO_FMC + + hal_gpio_output_t gpio_init; + hal_fmc_sram_init_t sram_init; + hal_fmc_sram_timing_t sram_timing; + + /* Enable used peripherals */ + GPIOD_ENABLE(); + GPIOE_ENABLE(); + GPIOF_ENABLE(); + GPIOG_ENABLE(); + FMC_ENABLE(); + + /* Configure the involved GPIO pins to AF12 (FMC) */ + gpio_init.pupd = HAL_GPIO_PUPD_NOPULL; + gpio_init.out_speed = HAL_GPIO_OUT_SPEED_50MHZ; + gpio_init.out_type = HAL_GPIO_OUT_TYPE_PP; + + /* GPIOD configuration (pins: 0,1,3-15) */ + gpio_init.pins = FMC_PORTD_PINMASK; + hal_gpio_init_alternate(GPIOD, HAL_GPIO_AF_FMC, gpio_init); + + /* GPIOE configuration (pins: 0-15) */ + gpio_init.pins = FMC_PORTE_PINMASK; + hal_gpio_init_alternate(GPIOE, HAL_GPIO_AF_FMC, gpio_init); + + /* GPIOF configuration (pins: 0-5,12-15) */ + gpio_init.pins = FMC_PORTF_PINMASK; + hal_gpio_init_alternate(GPIOF, HAL_GPIO_AF_FMC, gpio_init); + + /* GPIOG configuration (pins: 1-5, 9, 10, 12, 13) */ + gpio_init.pins = FMC_PORTG_PINMASK; + hal_gpio_init_alternate(GPIOG, HAL_GPIO_AF_FMC, gpio_init); + + + /* Initialize the synchronous PSRAM on bank 1 */ + sram_init.address_mux = DISABLE; + sram_init.type = HAL_FMC_TYPE_PSRAM; + sram_init.width = HAL_FMC_WIDTH_16B; + sram_init.read_burst = ENABLE; + sram_init.write_enable = ENABLE; + sram_init.write_burst = ENABLE; + sram_init.continous_clock = ENABLE; + + sram_timing.bus_turnaround = 1u; + sram_timing.clk_divider = 15u; + sram_timing.data_latency = 2u; + + hal_fmc_init_sram(HAL_FMC_SRAM_BANK1, sram_init, sram_timing); + + + /* Initialize the asynchronous SRAM on bank 2 */ + sram_init.address_mux = DISABLE; + sram_init.type = HAL_FMC_TYPE_SRAM; + sram_init.width = HAL_FMC_WIDTH_16B; + sram_init.read_burst = DISABLE; + sram_init.write_enable = DISABLE; + sram_init.write_burst = DISABLE; + sram_init.continous_clock = DISABLE; + + sram_timing.bus_turnaround = 1u; + sram_timing.address_setup = 11u; + sram_timing.address_hold = 5u; + sram_timing.data_setup = 11u; + sram_timing.mode = HAL_FMC_ACCESS_MODE_A; + + hal_fmc_init_sram(HAL_FMC_SRAM_BANK2, sram_init, sram_timing); + +#endif +} + + +/** + * \brief Wait for the LCD controller on the CT Board to be initialized. + * \TODO Possibly adjust LCD controller on CPLD to set status bit + * and wait for it in this function. + */ +static void init_LCD(void) +{ +#ifndef NO_FMC + uint32_t wait_for_lcd = LCD_WAIT; + for(; wait_for_lcd > 0; wait_for_lcd--); +#endif +} + diff --git a/CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/datainit_ctboard.s b/CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/datainit_ctboard.s new file mode 100644 index 0000000..d891d1a --- /dev/null +++ b/CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/datainit_ctboard.s @@ -0,0 +1,100 @@ +;* ------------------------------------------------------------------ +;* -- _____ ______ _____ - +;* -- |_ _| | ____|/ ____| - +;* -- | | _ __ | |__ | (___ Institute of Embedded Systems - +;* -- | | | '_ \| __| \___ \ Zurich University of - +;* -- _| |_| | | | |____ ____) | Applied Sciences - +;* -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - +;* ------------------------------------------------------------------ +;* -- +;* -- Project : CT Board - Cortex M4 +;* -- Description : Data Segment initialisation. +;* -- +;* -- $Id$ +;* ------------------------------------------------------------------ + + +; ------------------------------------------------------------------- +; -- __Main +; ------------------------------------------------------------------- + + AREA |.text|, CODE, READONLY + + IMPORT main + + EXPORT __main + +__main PROC + + ; initialize RW and ZI data - this includes heap and stack for the -ro=... -rw=... -entry=... linking cmd args... + IMPORT |Image$$RO$$Limit| [WEAK] + IMPORT |Image$$RW$$Base| [WEAK] + IMPORT |Image$$ZI$$Base| [WEAK] + IMPORT |Image$$ZI$$Limit| [WEAK] + ; ...or from auto generated scatter file. Needs linker option: --diag_suppress 6314 + IMPORT |Image$$ER_IROM1$$Limit| [WEAK] + IMPORT |Image$$RW_IRAM1$$Base| [WEAK] + IMPORT |Image$$RW_IRAM1$$ZI$$Base| [WEAK] + IMPORT |Image$$RW_IRAM1$$ZI$$Limit| [WEAK] + ; import stack parameter + IMPORT Stack_Size [WEAK] + IMPORT Stack_Mem [WEAK] + + ; switch between command line generated regions and auto scatter file generated regions + LDR R1, =|Image$$RO$$Limit| + CMP R1,#0 + BEQ ScatterFileSymbols +CommandLineSymbols + LDR R2, =|Image$$RW$$Base| ; start of the RW data in RAM + LDR R3, =|Image$$ZI$$Base| ; end of the RW data in RAM + MOV R5, R3 ; start of zero initialized data + LDR R6, =|Image$$ZI$$Limit| ; end of zero initialized data + B CondRWLoop +ScatterFileSymbols + LDR R1, =|Image$$ER_IROM1$$Limit| ; start of flashed initial RW data + LDR R2, =|Image$$RW_IRAM1$$Base| ; start of the RW data in RAM + LDR R3, =|Image$$RW_IRAM1$$ZI$$Base| ; end of the RW data in RAM + MOV R5, R3 ; start of zero initialized data + LDR R6, =|Image$$RW_IRAM1$$ZI$$Limit| ; end of zero initialized data + B CondRWLoop + + ; init non-zero data +LoopRWCopy LDR R4, [R1] + STR R4, [R2] + ADDS R1, R1, #4 + ADDS R2, R2, #4 +CondRWLoop CMP R2, R3 + BNE LoopRWCopy + + ; init zero-initialized data + MOV R2, R5 + MOV R3, R6 + MOVS R4, #0 + B CondZILoop +LoopZICopy STR R4, [R2] + ADDS R2, R2, #4 +CondZILoop CMP R2, R3 + BNE LoopZICopy + + ; fingerprint stack section + LDR R0, =Stack_Mem + LDR R1, =Stack_Size + LDR R2, =0xEFBEADDE ; stack fingerprint (little endian!) +LoopStack STR R2, [R0] + ADDS R0, R0, #4 + SUBS R1, #4 + BNE LoopStack + + ; go to the user main function + LDR R0, =main + BX R0 + ENDP + + +; ------------------------------------------------------------------- +; -- End of file +; ------------------------------------------------------------------- + + ALIGN + + END diff --git a/CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/startup_ctboard.s b/CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/startup_ctboard.s new file mode 100644 index 0000000..fd8a0f9 --- /dev/null +++ b/CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/startup_ctboard.s @@ -0,0 +1,439 @@ +;******************** (C) COPYRIGHT 2013 STMicroelectronics ******************** +;* File Name : startup_stm32f429_439xx.s +;* Author : MCD Application Team +;* Version : V1.3.0 +;* Date : 08-November-2013 +;* Description : STM32F429xx/439xx devices vector table for MDK-ARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the system clock and the external SRAM/SDRAM mounted +;* on STM324x9I-EVAL boards to be used as data memory +;* (optional, to be enabled by user) +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM4 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +; +; Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); +; You may not use this file except in compliance with the License. +; You may obtain a copy of the License at: +; +; http://www.st.com/software_license_agreement_liberty_v2 +; +; Unless required by applicable law or agreed to in writing, software +; distributed under the License is distributed on an "AS IS" BASIS, +; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; See the License for the specific language governing permissions and +; limitations under the License. +; +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00002000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 + EXPORT Stack_Size + EXPORT Stack_Mem + +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000800 + + 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 WWDG_IRQHandler ; Window WatchDog + DCD PVD_IRQHandler ; PVD through EXTI Line detection + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line + DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line + DCD FLASH_IRQHandler ; FLASH + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line0 + DCD EXTI1_IRQHandler ; EXTI Line1 + DCD EXTI2_IRQHandler ; EXTI Line2 + DCD EXTI3_IRQHandler ; EXTI Line3 + DCD EXTI4_IRQHandler ; EXTI Line4 + DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0 + DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1 + DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2 + DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3 + DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4 + DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5 + DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6 + DCD ADC_IRQHandler ; ADC1, ADC2 and ADC3s + DCD CAN1_TX_IRQHandler ; CAN1 TX + DCD CAN1_RX0_IRQHandler ; CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; External Line[9:5]s + DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9 + DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10 + DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11 + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; External Line[15:10]s + DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line + DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line + DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break and TIM12 + DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update and TIM13 + DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14 + DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare + DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 + DCD FMC_IRQHandler ; FMC + DCD SDIO_IRQHandler ; SDIO + DCD TIM5_IRQHandler ; TIM5 + DCD SPI3_IRQHandler ; SPI3 + DCD UART4_IRQHandler ; UART4 + DCD UART5_IRQHandler ; UART5 + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0 + DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1 + DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2 + DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3 + DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4 + DCD ETH_IRQHandler ; Ethernet + DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line + DCD CAN2_TX_IRQHandler ; CAN2 TX + DCD CAN2_RX0_IRQHandler ; CAN2 RX0 + DCD CAN2_RX1_IRQHandler ; CAN2 RX1 + DCD CAN2_SCE_IRQHandler ; CAN2 SCE + DCD OTG_FS_IRQHandler ; USB OTG FS + DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5 + DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6 + DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7 + DCD USART6_IRQHandler ; USART6 + DCD I2C3_EV_IRQHandler ; I2C3 event + DCD I2C3_ER_IRQHandler ; I2C3 error + DCD OTG_HS_EP1_OUT_IRQHandler ; USB OTG HS End Point 1 Out + DCD OTG_HS_EP1_IN_IRQHandler ; USB OTG HS End Point 1 In + DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI + DCD OTG_HS_IRQHandler ; USB OTG HS + DCD DCMI_IRQHandler ; DCMI + DCD CRYP_IRQHandler ; CRYP crypto + DCD HASH_RNG_IRQHandler ; Hash and Rng + DCD FPU_IRQHandler ; FPU + DCD UART7_IRQHandler ; UART7 + DCD UART8_IRQHandler ; UART8 + DCD SPI4_IRQHandler ; SPI4 + DCD SPI5_IRQHandler ; SPI5 + DCD SPI6_IRQHandler ; SPI6 + DCD SAI1_IRQHandler ; SAI1 + DCD LTDC_IRQHandler ; LTDC + DCD LTDC_ER_IRQHandler ; LTDC error + DCD DMA2D_IRQHandler ; DMA2D + +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __system + IMPORT __main + ENTRY + + LDR R0, =__system + 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 WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMP_STAMP_IRQHandler [WEAK] + EXPORT RTC_WKUP_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Stream0_IRQHandler [WEAK] + EXPORT DMA1_Stream1_IRQHandler [WEAK] + EXPORT DMA1_Stream2_IRQHandler [WEAK] + EXPORT DMA1_Stream3_IRQHandler [WEAK] + EXPORT DMA1_Stream4_IRQHandler [WEAK] + EXPORT DMA1_Stream5_IRQHandler [WEAK] + EXPORT DMA1_Stream6_IRQHandler [WEAK] + EXPORT ADC_IRQHandler [WEAK] + EXPORT CAN1_TX_IRQHandler [WEAK] + EXPORT CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_TIM9_IRQHandler [WEAK] + EXPORT TIM1_UP_TIM10_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_TIM11_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTC_Alarm_IRQHandler [WEAK] + EXPORT OTG_FS_WKUP_IRQHandler [WEAK] + EXPORT TIM8_BRK_TIM12_IRQHandler [WEAK] + EXPORT TIM8_UP_TIM13_IRQHandler [WEAK] + EXPORT TIM8_TRG_COM_TIM14_IRQHandler [WEAK] + EXPORT TIM8_CC_IRQHandler [WEAK] + EXPORT DMA1_Stream7_IRQHandler [WEAK] + EXPORT FMC_IRQHandler [WEAK] + EXPORT SDIO_IRQHandler [WEAK] + EXPORT TIM5_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT TIM6_DAC_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] + EXPORT DMA2_Stream0_IRQHandler [WEAK] + EXPORT DMA2_Stream1_IRQHandler [WEAK] + EXPORT DMA2_Stream2_IRQHandler [WEAK] + EXPORT DMA2_Stream3_IRQHandler [WEAK] + EXPORT DMA2_Stream4_IRQHandler [WEAK] + EXPORT ETH_IRQHandler [WEAK] + EXPORT ETH_WKUP_IRQHandler [WEAK] + EXPORT CAN2_TX_IRQHandler [WEAK] + EXPORT CAN2_RX0_IRQHandler [WEAK] + EXPORT CAN2_RX1_IRQHandler [WEAK] + EXPORT CAN2_SCE_IRQHandler [WEAK] + EXPORT OTG_FS_IRQHandler [WEAK] + EXPORT DMA2_Stream5_IRQHandler [WEAK] + EXPORT DMA2_Stream6_IRQHandler [WEAK] + EXPORT DMA2_Stream7_IRQHandler [WEAK] + EXPORT USART6_IRQHandler [WEAK] + EXPORT I2C3_EV_IRQHandler [WEAK] + EXPORT I2C3_ER_IRQHandler [WEAK] + EXPORT OTG_HS_EP1_OUT_IRQHandler [WEAK] + EXPORT OTG_HS_EP1_IN_IRQHandler [WEAK] + EXPORT OTG_HS_WKUP_IRQHandler [WEAK] + EXPORT OTG_HS_IRQHandler [WEAK] + EXPORT DCMI_IRQHandler [WEAK] + EXPORT CRYP_IRQHandler [WEAK] + EXPORT HASH_RNG_IRQHandler [WEAK] + EXPORT FPU_IRQHandler [WEAK] + EXPORT UART7_IRQHandler [WEAK] + EXPORT UART8_IRQHandler [WEAK] + EXPORT SPI4_IRQHandler [WEAK] + EXPORT SPI5_IRQHandler [WEAK] + EXPORT SPI6_IRQHandler [WEAK] + EXPORT SAI1_IRQHandler [WEAK] + EXPORT LTDC_IRQHandler [WEAK] + EXPORT LTDC_ER_IRQHandler [WEAK] + EXPORT DMA2D_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMP_STAMP_IRQHandler +RTC_WKUP_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Stream0_IRQHandler +DMA1_Stream1_IRQHandler +DMA1_Stream2_IRQHandler +DMA1_Stream3_IRQHandler +DMA1_Stream4_IRQHandler +DMA1_Stream5_IRQHandler +DMA1_Stream6_IRQHandler +ADC_IRQHandler +CAN1_TX_IRQHandler +CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_TIM9_IRQHandler +TIM1_UP_TIM10_IRQHandler +TIM1_TRG_COM_TIM11_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTC_Alarm_IRQHandler +OTG_FS_WKUP_IRQHandler +TIM8_BRK_TIM12_IRQHandler +TIM8_UP_TIM13_IRQHandler +TIM8_TRG_COM_TIM14_IRQHandler +TIM8_CC_IRQHandler +DMA1_Stream7_IRQHandler +FMC_IRQHandler +SDIO_IRQHandler +TIM5_IRQHandler +SPI3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +TIM6_DAC_IRQHandler +TIM7_IRQHandler +DMA2_Stream0_IRQHandler +DMA2_Stream1_IRQHandler +DMA2_Stream2_IRQHandler +DMA2_Stream3_IRQHandler +DMA2_Stream4_IRQHandler +ETH_IRQHandler +ETH_WKUP_IRQHandler +CAN2_TX_IRQHandler +CAN2_RX0_IRQHandler +CAN2_RX1_IRQHandler +CAN2_SCE_IRQHandler +OTG_FS_IRQHandler +DMA2_Stream5_IRQHandler +DMA2_Stream6_IRQHandler +DMA2_Stream7_IRQHandler +USART6_IRQHandler +I2C3_EV_IRQHandler +I2C3_ER_IRQHandler +OTG_HS_EP1_OUT_IRQHandler +OTG_HS_EP1_IN_IRQHandler +OTG_HS_WKUP_IRQHandler +OTG_HS_IRQHandler +DCMI_IRQHandler +CRYP_IRQHandler +HASH_RNG_IRQHandler +FPU_IRQHandler +UART7_IRQHandler +UART8_IRQHandler +SPI4_IRQHandler +SPI5_IRQHandler +SPI6_IRQHandler +SAI1_IRQHandler +LTDC_IRQHandler +LTDC_ER_IRQHandler +DMA2D_IRQHandler + B . + + ENDP + + ALIGN + + END + +;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE***** diff --git a/CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/system_ctboard.c b/CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/system_ctboard.c new file mode 100644 index 0000000..58c804c --- /dev/null +++ b/CT-Lab1-Project/RTE/Device/CT_Board_HS14_M0/system_ctboard.c @@ -0,0 +1,290 @@ +/* ---------------------------------------------------------------------------- + * -- _____ ______ _____ - + * -- |_ _| | ____|/ ____| - + * -- | | _ __ | |__ | (___ Institute of Embedded Systems - + * -- | | | '_ \| __| \___ \ Zurich University of - + * -- _| |_| | | | |____ ____) | Applied Sciences - + * -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - + * ------------------------------------------------------------------------- */ +/** + * \brief Interface of module system_ctboard. + * Description : Basic system configuration. + * * initialize system clock + * * initialize FMC (SRAM & GPIO) + * + * GPIO FMC pin assignment: + * + * PD0 > FMC_D2 | PE0 > FMC_NBL0 | PF0 > FMC_A0 | PG0 > FMC_A10 + * PD1 > FMC_D3 | PE1 > FMC_NBL1 | PF1 > FMC_A1 | PG1 > FMC_A11 + * PD3 > FMC_CLK | PE2 > FMC_A23 | PF2 > FMC_A2 | PG2 > FMC_A12 + * PD4 > FMC_NOE | PE3 > FMC_A19 | PF3 > FMC_A3 | PG3 > FMC_A13 + * PD5 > FMC_NWE | PE4 > FMC_A20 | PF4 > FMC_A4 | PG4 > FMC_A14 + * PD6 > FMC_WAIT | PE5 > FMC_A21 | PF5 > FMC_A5 | PG5 > FMC_A15 + * PD7 > FMC_NE1 | PE6 > FMC_A22 | PF12 > FMC_A6 | PG9 > FMC_NE2 + * PD8 > FMC_D13 | PE7 > FMC_D4 | PF13 > FMC_A7 | PG10 > FMC_NE3 + * PD9 > FMC_D14 | PE8 > FMC_D5 | PF14 > FMC_A8 | PG12 > FMC_NE4 + * PD10 > FMC_A15 | PE9 > FMC_D6 | PF15 > FMC_A9 | PG13 > FMC_A24 + * PD11 > FMC_A16 | PE10 > FMC_D7 | | + * PD12 > FMC_A17 | PE11 > FMC_D8 | | + * PD13 > FMC_A18 | PE12 > FMC_D9 | | + * PD14 > FMC_D0 | PE13 > FMC_D10 | | + * PD15 > FMC_D1 | PE14 > FMC_D11 | | + * | PE15 > FMC_D12 | | + * + * $Id$ + * ------------------------------------------------------------------------- */ + +/* Standard includes */ +#include + + +/* User includes */ +#include "system_ctboard.h" +#include "reg_stm32f4xx.h" +#include "reg_ctboard.h" + + +/* -- Macros (LCD) + * ------------------------------------------------------------------------- */ + +#define LCD_WAIT 0x1fff + + +/* -- Macros (FMC) + * ------------------------------------------------------------------------- */ + +#define FMC_PORTD_PINMASK 0xfffb +#define FMC_PORTE_PINMASK 0xffff +#define FMC_PORTF_PINMASK 0xf03f +#define FMC_PORTG_PINMASK 0x363f + + +/* -- Local function declarations + * ------------------------------------------------------------------------- */ + +static void init_SystemClock(void); +static void init_FPU(void); +static void init_FMC_SRAM(void); +static void init_LCD(void); + + +/* -- Public function definitions + * ------------------------------------------------------------------------- */ + +/** + * \brief Entry point used in startup. + */ +void __system(void) +{ + system_enter_run(); +} + + +/* + * See header files + */ +void system_enter_run(void) +{ + /* Initialize RCC / system clock */ + init_SystemClock(); + + /* Iitialize FPU */ + init_FPU(); + + /* Initialize SRAM interface */ + init_FMC_SRAM(); + + /* Initialize LCD on CT-Board */ + init_LCD(); +} + + +/* + * See header file + */ +void system_enter_sleep(hal_pwr_lp_entry_t entry) +{ + /** \note Implement this function if needed. */ +} + + +/* + * See header file + */ +void system_enter_stop(hal_pwr_regulator_t regulator, hal_pwr_lp_entry_t entry) +{ + /** \note Implement this function if needed. */ +} + + +/* + * See header file + */ +void system_enter_standby(void) +{ + /** \note Implement this function if needed. */ +} + + +/* -- Local function definitions + * ------------------------------------------------------------------------- */ + +/** + * \brief Configures the System clock source, PLL Multiplier and Divider + * factors, AHB/APBx prescalers and Flash settings. + */ +static void init_SystemClock(void) +{ + hal_rcc_pll_init_t pll_init; + hal_rcc_clk_init_t clk_init; + + /* Enable used periphery */ + PWR_ENABLE(); + + /* Reset */ + hal_rcc_reset(); + PWR_RESET(); + + /* Enable HSE oscillator and proceed if ok */ + if (hal_rcc_set_osc(HAL_RCC_OSC_HSE, ENABLE)) { + /* Select regulator voltage output Scale 1 mode */ + RCC->APB1ENR |= 0x00000000; + PWR->CR |= 0x0000c000; + + /* Configure PLL */ + pll_init.source = HAL_RCC_OSC_HSE; + pll_init.m_divider = 4u; + pll_init.n_factor = 168u; + pll_init.p_divider = 2u; + pll_init.q_divider = 7u; + hal_rcc_setup_pll(HAL_RCC_OSC_PLL, pll_init); + + /* Enable PLL */ + hal_rcc_set_osc(HAL_RCC_OSC_PLL, ENABLE); + + /* Enable overdrive to allow system clock >= 168 MHz */ + hal_pwr_set_overdrive(ENABLE); + + /* Configure Flash prefetch, Instruction cache, Data cache + * and wait state */ + FLASH->ACR = 0x00000705; + + /* Setup system clock */ + clk_init.osc = HAL_RCC_OSC_PLL; + clk_init.hpre = HAL_RCC_HPRE_2; // -> AHB clock : 84 MHz + clk_init.ppre1 = HAL_RCC_PPRE_2; // -> APB1 clock : 48 MHz + clk_init.ppre2 = HAL_RCC_PPRE_2; // -> APB2 clock : 48 MHz + hal_rcc_setup_clock(clk_init); + + } else { + /* If HSE fails to start-up, the application will have wrong clock con- + figuration. User can add here some code to deal with this error */ + } +} + + +/** + * \brief Initialize the floating point unit in M4 mode. + */ +static void init_FPU(void) +{ +#ifdef PLATFORM_M4 + /* No documentation about this, even the registers... */ + + /* set CP10 and CP11 Full Access */ + FPU->CPACR |= ((3u << 20u)|(3u << 22u)); +#endif +} + + +/** + * \brief Setup the flexible memory controller. This function configures the SRAM + * interface for accessing the periphery on the CT Board. + */ +static void init_FMC_SRAM(void) +{ +#ifndef NO_FMC + + hal_gpio_output_t gpio_init; + hal_fmc_sram_init_t sram_init; + hal_fmc_sram_timing_t sram_timing; + + /* Enable used peripherals */ + GPIOD_ENABLE(); + GPIOE_ENABLE(); + GPIOF_ENABLE(); + GPIOG_ENABLE(); + FMC_ENABLE(); + + /* Configure the involved GPIO pins to AF12 (FMC) */ + gpio_init.pupd = HAL_GPIO_PUPD_NOPULL; + gpio_init.out_speed = HAL_GPIO_OUT_SPEED_50MHZ; + gpio_init.out_type = HAL_GPIO_OUT_TYPE_PP; + + /* GPIOD configuration (pins: 0,1,3-15) */ + gpio_init.pins = FMC_PORTD_PINMASK; + hal_gpio_init_alternate(GPIOD, HAL_GPIO_AF_FMC, gpio_init); + + /* GPIOE configuration (pins: 0-15) */ + gpio_init.pins = FMC_PORTE_PINMASK; + hal_gpio_init_alternate(GPIOE, HAL_GPIO_AF_FMC, gpio_init); + + /* GPIOF configuration (pins: 0-5,12-15) */ + gpio_init.pins = FMC_PORTF_PINMASK; + hal_gpio_init_alternate(GPIOF, HAL_GPIO_AF_FMC, gpio_init); + + /* GPIOG configuration (pins: 1-5, 9, 10, 12, 13) */ + gpio_init.pins = FMC_PORTG_PINMASK; + hal_gpio_init_alternate(GPIOG, HAL_GPIO_AF_FMC, gpio_init); + + + /* Initialize the synchronous PSRAM on bank 1 */ + sram_init.address_mux = DISABLE; + sram_init.type = HAL_FMC_TYPE_PSRAM; + sram_init.width = HAL_FMC_WIDTH_16B; + sram_init.read_burst = ENABLE; + sram_init.write_enable = ENABLE; + sram_init.write_burst = ENABLE; + sram_init.continous_clock = ENABLE; + + sram_timing.bus_turnaround = 1u; + sram_timing.clk_divider = 15u; + sram_timing.data_latency = 2u; + + hal_fmc_init_sram(HAL_FMC_SRAM_BANK1, sram_init, sram_timing); + + + /* Initialize the asynchronous SRAM on bank 2 */ + sram_init.address_mux = DISABLE; + sram_init.type = HAL_FMC_TYPE_SRAM; + sram_init.width = HAL_FMC_WIDTH_16B; + sram_init.read_burst = DISABLE; + sram_init.write_enable = DISABLE; + sram_init.write_burst = DISABLE; + sram_init.continous_clock = DISABLE; + + sram_timing.bus_turnaround = 1u; + sram_timing.address_setup = 11u; + sram_timing.address_hold = 5u; + sram_timing.data_setup = 11u; + sram_timing.mode = HAL_FMC_ACCESS_MODE_A; + + hal_fmc_init_sram(HAL_FMC_SRAM_BANK2, sram_init, sram_timing); + +#endif +} + + +/** + * \brief Wait for the LCD controller on the CT Board to be initialized. + * \TODO Possibly adjust LCD controller on CPLD to set status bit + * and wait for it in this function. + */ +static void init_LCD(void) +{ +#ifndef NO_FMC + uint32_t wait_for_lcd = LCD_WAIT; + for(; wait_for_lcd > 0; wait_for_lcd--); +#endif +} + diff --git a/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_fmc.c@3.0.1 b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_fmc.c@3.0.1 new file mode 100644 index 0000000..e454145 --- /dev/null +++ b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_fmc.c@3.0.1 @@ -0,0 +1,143 @@ +/* ---------------------------------------------------------------------------- + * -- _____ ______ _____ - + * -- |_ _| | ____|/ ____| - + * -- | | _ __ | |__ | (___ Institute of Embedded Systems - + * -- | | | '_ \| __| \___ \ Zurich University of - + * -- _| |_| | | | |____ ____) | Applied Sciences - + * -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - + * ------------------------------------------------------------------------- */ +/** + * \brief Implementation of module hal_fmc. + * + * The hardware abstraction layer for the memory controller. + * + * $Id$ + * ------------------------------------------------------------------------- */ + +/* User includes */ +#include "hal_fmc.h" +#include "reg_stm32f4xx.h" + + +/* -- Macros + * ------------------------------------------------------------------------- */ + +#define MASK_PERIPH_FMC (0x00000001) +#define MASK_SRAM_ENABLE (0x00000001) + + +/* -- Public function definitions + * ------------------------------------------------------------------------- */ + +/* + * See header file + */ +void hal_fmc_reset(hal_fmc_bank_t bank) +{ + switch (bank) { + default: + case HAL_FMC_SRAM_BANK1: + FMC->SRAM.BCR1 = 0x000030db; + FMC->SRAM.BTR1 = 0x0fffffff; + break; + + case HAL_FMC_SRAM_BANK2: + FMC->SRAM.BCR2 = 0x000030d2; + FMC->SRAM.BTR2 = 0x0fffffff; + break; + + case HAL_FMC_SRAM_BANK3: + FMC->SRAM.BCR3 = 0x000030d2; + FMC->SRAM.BTR3 = 0x0fffffff; + break; + + case HAL_FMC_SRAM_BANK4: + FMC->SRAM.BCR4 = 0x000030d2; + FMC->SRAM.BTR4 = 0x0fffffff; + break; + } +} + + +/* + * See header file + */ +void hal_fmc_init_sram(hal_fmc_bank_t bank, + hal_fmc_sram_init_t init, + hal_fmc_sram_timing_t timing) +{ + uint32_t reg_cr = 0, reg_tr = 0; + + /* Input check */ + timing.address_setup &= 0xf; + timing.address_hold &= 0xf; + if (timing.address_hold < 1u) timing.address_hold = 1u; + timing.data_setup &= 0xff; + if (timing.data_setup < 1u) timing.data_setup = 1u; + timing.bus_turnaround &= 0xf; + + /* Input check clock divider (2..16) */ + if (timing.clk_divider > 16u) timing.clk_divider = 16u; + if (timing.clk_divider < 2u) timing.clk_divider = 2u; + timing.clk_divider -= 1u; // 0b0001 -> clk / 2 + + /* Input check data latency (2..17) */ + if (timing.data_latency > 17u) timing.data_latency = 17u; + if (timing.data_latency < 2u) timing.data_latency = 2u; + timing.data_latency -= 2u; // 0b0000 -> latency = 2 + + /* Process boolean parameter */ + if (init.address_mux == ENABLE) reg_cr |= (1u << 1u); + if (init.read_burst == ENABLE) reg_cr |= (1u << 8u); + if (init.write_enable == ENABLE) reg_cr |= (1u << 12u); + if (init.write_burst == ENABLE) reg_cr |= (1u << 19u); + if (init.continous_clock == ENABLE) reg_cr |= (1u << 20u); + + /* Process non boolean parameter */ + reg_cr |= (init.type << 2u); + reg_cr |= (init.width << 4u); + + /* Process timing for async. SRAM */ + if (init.type == HAL_FMC_TYPE_SRAM) { + reg_tr |= (timing.address_setup << 0u); + reg_tr |= (timing.address_hold << 4u); + reg_tr |= (timing.data_setup << 8u); + reg_tr |= (timing.mode << 28u); + } + /* Process timing for sync. PSRAM */ + else if (init.type == HAL_FMC_TYPE_PSRAM) { + reg_tr |= (timing.clk_divider << 20u); + reg_tr |= (timing.data_latency << 24u); + } + /* Process bus turnaround time */ + reg_tr |= (timing.bus_turnaround << 16u); + + /* Write register */ + switch (bank) { + default: + case HAL_FMC_SRAM_BANK1: + FMC->SRAM.BCR1 = reg_cr; + FMC->SRAM.BTR1 = reg_tr; + FMC->SRAM.BCR1 |= MASK_SRAM_ENABLE; + break; + + case HAL_FMC_SRAM_BANK2: + FMC->SRAM.BCR2 = reg_cr; + FMC->SRAM.BTR2 = reg_tr; + FMC->SRAM.BCR2 |= MASK_SRAM_ENABLE; + break; + + case HAL_FMC_SRAM_BANK3: + FMC->SRAM.BCR3 = reg_cr; + FMC->SRAM.BTR3 = reg_tr; + FMC->SRAM.BCR3 |= MASK_SRAM_ENABLE; + break; + + case HAL_FMC_SRAM_BANK4: + FMC->SRAM.BCR4 = reg_cr; + FMC->SRAM.BTR4 = reg_tr; + FMC->SRAM.BCR4 |= MASK_SRAM_ENABLE; + break; + } +} + diff --git a/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_gpio.c@4.0.1 b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_gpio.c@4.0.1 new file mode 100644 index 0000000..59e0e4c --- /dev/null +++ b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_gpio.c@4.0.1 @@ -0,0 +1,412 @@ +/* ---------------------------------------------------------------------------- + * -- _____ ______ _____ - + * -- |_ _| | ____|/ ____| - + * -- | | _ __ | |__ | (___ Institute of Embedded Systems - + * -- | | | '_ \| __| \___ \ Zurich University of - + * -- _| |_| | | | |____ ____) | Applied Sciences - + * -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - + * ------------------------------------------------------------------------- */ +/** + * \brief Implementation of module hal_gpio. + * + * The hardware abstraction layer for the GPIO periphery. + * + * $Id$ + * ------------------------------------------------------------------------- */ + +/* User includes */ +#include "hal_gpio.h" + + +/* -- Macros + * ------------------------------------------------------------------------- */ + +#define NVIC_OFFSET_1_4 ( 6u) +#define NVIC_OFFSET_5_9 (23u) +#define NVIC_OFFSET_10_15 ( 8u) + + +/* -- Local function declarations + * ------------------------------------------------------------------------- */ + +static uint32_t create_pattern_mask(uint16_t pins, + uint8_t pattern, + uint8_t pattern_bit_width); +static uint16_t intercept_overwrite_register(reg_gpio_t *port, uint16_t pins); +static uint8_t get_syscfg_mask(reg_gpio_t *port); + + +/* -- Public function definitions + * ------------------------------------------------------------------------- */ + +/* + * See header file + */ +void hal_gpio_reset(reg_gpio_t *port) +{ + if(port == GPIOA) { + /* Reset GPIOA specific values */ + port->MODER = 0xa8000000; + port->OSPEEDR = 0x00000000; + port->PUPDR = 0x64000000; + } + else if (port == GPIOB) { + /* Reset GPIOB specific values */ + port->MODER = 0x00000280; + port->OSPEEDR = 0x000000c0; + port->PUPDR = 0x00000100; + } else { + /* Reset other GPIO */ + port->MODER = 0x00000000; + port->OSPEEDR = 0x00000000; + port->PUPDR = 0x00000000; + } + + port->OTYPER = 0x00000000; + port->AFRL = 0x00000000; + port->AFRH = 0x00000000; + port->ODR = 0x00000000; +} + +/* + * See header file + */ +void hal_gpio_init_input(reg_gpio_t *port, hal_gpio_input_t init) +{ + /* prevent overwrite false reg entry */ + init.pins = intercept_overwrite_register(port, init.pins); + + /* process mode */ + port->MODER &= ~create_pattern_mask(init.pins, 0x3, 2u); + port->MODER |= create_pattern_mask(init.pins, HAL_GPIO_MODE_IN, 2u); + + /* process pull up/down resitors */ + port->PUPDR &= ~create_pattern_mask(init.pins, 0x3, 2u); + port->PUPDR |= create_pattern_mask(init.pins, init.pupd, 2u); +} + + +/* + * See header file + */ +void hal_gpio_init_analog(reg_gpio_t *port, hal_gpio_input_t init) +{ + /* treat like input */ + hal_gpio_init_input(port, init); + + /* change mode */ + port->MODER &= ~create_pattern_mask(init.pins, 0x3, 2u); + port->MODER |= create_pattern_mask(init.pins, HAL_GPIO_MODE_AN, 2u); +} + + +/* + * See header file + */ +void hal_gpio_init_output(reg_gpio_t *port, hal_gpio_output_t init) +{ + /* prevent overwrite false reg entry */ + init.pins = intercept_overwrite_register(port, init.pins); + + /* process mode */ + port->MODER &= ~create_pattern_mask(init.pins, 0x3, 2u); + port->MODER |= create_pattern_mask(init.pins, HAL_GPIO_MODE_OUT, 2u); + + /* process pull up/down resitors */ + port->PUPDR &= ~create_pattern_mask(init.pins, 0x3, 2u); + port->PUPDR |= create_pattern_mask(init.pins, init.pupd, 2u); + + /* process port speed */ + port->OSPEEDR &= ~create_pattern_mask(init.pins, 0x3, 2u); + port->OSPEEDR |= create_pattern_mask(init.pins, init.out_speed, 2u); + + /* process output typ */ + port->OTYPER &= ~init.pins; + if(init.out_type == HAL_GPIO_OUT_TYPE_OD){ + port->OTYPER |= init.pins; + } +} + + +/* + * See header file + */ +void hal_gpio_init_alternate(reg_gpio_t *port, + hal_gpio_af_t af_mode, + hal_gpio_output_t init) +{ + /* treat like output */ + hal_gpio_init_output(port, init); + + /* change mode */ + port->MODER &= ~create_pattern_mask(init.pins, 0x3, 2u); + port->MODER |= create_pattern_mask(init.pins, HAL_GPIO_MODE_AF, 2u); + + /* process af type */ + port->AFRL &= ~create_pattern_mask(init.pins, 0xf, 4u); + port->AFRL |= create_pattern_mask(init.pins, af_mode, 4u); + port->AFRH &= ~create_pattern_mask((init.pins >> 8), 0xf, 4u); + port->AFRH |= create_pattern_mask((init.pins >> 8), af_mode, 4u); +} + + +/* + * See header file + */ +uint16_t hal_gpio_input_read(reg_gpio_t *port) +{ + return (uint16_t) port->IDR; +} + + +/* + * See header file + */ +uint16_t hal_gpio_output_read(reg_gpio_t *port) +{ + return (uint16_t) port->ODR; +} + + +/* + * See header file + */ +void hal_gpio_output_write(reg_gpio_t *port, uint16_t port_value) +{ + /* prevent overwrite false reg entry */ + port_value = intercept_overwrite_register(port, port_value); + port->ODR = port_value; +} + + +/* + * See header file + */ +void hal_gpio_bit_set(reg_gpio_t *port, uint16_t pins) +{ + /* prevent overwrite false reg entry */ + pins = intercept_overwrite_register(port, pins); + + /* exit if no pins to be configured */ + if (pins != 0) { + port->BSRR = pins; + } +} + + +/* + * See header file + */ +void hal_gpio_bit_reset(reg_gpio_t *port, uint16_t pins) +{ + /* prevent overwrite false reg entry */ + pins = intercept_overwrite_register(port, pins); + + /* exit if no pins to be configured */ + if (pins != 0) { + port->BSRR = (pins << 16); + } +} + + +/* + * See header file + */ +void hal_gpio_bit_toggle(reg_gpio_t *port, uint16_t pins) +{ + uint16_t pattern; + + /* prevent overwrite false reg entry */ + pins = intercept_overwrite_register(port, pins); + + /* exit if no pins to be configured */ + if (pins != 0) { + /* get actual value and invert */ + pattern = hal_gpio_output_read(port); + pattern = ~pattern; + + /* mask pins */ + pattern &= pins; + + port->ODR = pattern; + } +} + + +/* + * See header file + */ +void hal_gpio_irq_set(reg_gpio_t *port, + uint16_t pins, + hal_gpio_trg_t edge, + hal_bool_t status) +{ + uint8_t syscfg_bank, nvic_bank, syscfg_shift, exti_line; + uint32_t exticr_mask; + + for (exti_line = 0u; exti_line < 16u; exti_line++) { + if (pins & (0x1 << exti_line)) { + syscfg_bank = exti_line / 4u; + syscfg_shift = exti_line % 4u; + nvic_bank = (exti_line < 10u) ? 0u : 1u; + + if (status == ENABLE) { + /* Trigger (rising/falling/both) */ + if (edge & HAL_GPIO_TRG_POS) { + EXTI->RTSR |= (0x1 << exti_line); + } + if (edge & HAL_GPIO_TRG_NEG) { + EXTI->FTSR |= (0x1 << exti_line); + } + /* Set EXTI line to corresponding GPIO port */ + exticr_mask = get_syscfg_mask(port); + if (syscfg_bank == 0u) { + SYSCFG->EXTICR1 &= ~(0xf << syscfg_shift); + SYSCFG->EXTICR1 |= (exticr_mask << syscfg_shift); + } else if (syscfg_bank == 1u) { + SYSCFG->EXTICR2 &= ~(0xf << syscfg_shift); + SYSCFG->EXTICR2 |= (exticr_mask << syscfg_shift); + } else if (syscfg_bank == 2u) { + SYSCFG->EXTICR3 &= ~(0xf << syscfg_shift); + SYSCFG->EXTICR3 |= (exticr_mask << syscfg_shift); + } else if (syscfg_bank == 3u) { + SYSCFG->EXTICR4 &= ~(0xf << syscfg_shift); + SYSCFG->EXTICR4 |= (exticr_mask << syscfg_shift); + } + + /* Unmask interrupt */ + EXTI->IMR |= (0x1 << exti_line); + if (nvic_bank == 0u) { + NVIC->ISER0 |= ((exti_line < 5u) ? (0x1 << (exti_line + NVIC_OFFSET_1_4)) : + (exti_line < 10u) ? NVIC_OFFSET_5_9 : NVIC_OFFSET_10_15); + } else if (nvic_bank == 1u) { + NVIC->ISER1 |= ((exti_line < 5u) ? (0x1 << (exti_line + NVIC_OFFSET_1_4)) : + (exti_line < 10u) ? NVIC_OFFSET_5_9 : NVIC_OFFSET_10_15); + } else if (nvic_bank == 2u) { + NVIC->ISER2 |= ((exti_line < 5u) ? (0x1 << (exti_line + NVIC_OFFSET_1_4)) : + (exti_line < 10u) ? NVIC_OFFSET_5_9 : NVIC_OFFSET_10_15); + } + + } else { + /* Mask interrupt */ + EXTI->IMR &= ~(0x1 << exti_line); + if (nvic_bank == 0u) { + NVIC->ICER0 |= ((exti_line < 5u) ? (0x1 << (exti_line + NVIC_OFFSET_1_4)) : + (exti_line < 10u) ? NVIC_OFFSET_5_9 : NVIC_OFFSET_10_15); + } else if (nvic_bank == 1u) { + NVIC->ICER1 |= ((exti_line < 5u) ? (0x1 << (exti_line + NVIC_OFFSET_1_4)) : + (exti_line < 10u) ? NVIC_OFFSET_5_9 : NVIC_OFFSET_10_15); + } else if (nvic_bank == 2u) { + NVIC->ICER2 |= ((exti_line < 5u) ? (0x1 << (exti_line + NVIC_OFFSET_1_4)) : + (exti_line < 10u) ? NVIC_OFFSET_5_9 : NVIC_OFFSET_10_15); + } + } + } + } + +} + + +/* + * See header file + */ +hal_bool_t hal_gpio_irq_status(uint16_t pin) +{ + hal_bool_t status = DISABLED; + + if ((EXTI->IMR && pin) && + (EXTI->PR && pin)) { + status = ENABLED; + } + + return status; +} + + +/* + * See header file + */ +void hal_gpio_irq_clear(uint16_t pin) +{ + EXTI->PR |= pin; +} + + +/* -- Local function definitions + * ------------------------------------------------------------------------- */ + +/** + * \brief Creates a pattern based on specified pins. + * + * example: pins = 1,3,4 (0x001a) / pattern = 0x2 (2 bit wide) + * ==> pattern = 0x0000'0288 + * + * 0b0..0'0001'1010 / 0b10 (2 bit wide) + * ^ ^ ^ + * ==> 0b0..0'00010'1000'1000 + * ^^ ^^ ^^ + * + * pattern_bit_width must be 2 or 4 + */ +static uint32_t create_pattern_mask(uint16_t pins, + uint8_t pattern, + uint8_t pattern_bit_width) +{ + const uint8_t mask_bit_width = 32u; + const uint16_t pin1_mask = 1u; + + uint8_t pos, end; + uint32_t mask = 0u; + + if (pattern_bit_width == 2u || pattern_bit_width == 4u) { + /* create pattern mask */ + end = mask_bit_width / pattern_bit_width; + for (pos = 0; pos < end; pos++) { + if (pins & pin1_mask) { + mask |= pattern << (pos * pattern_bit_width); + } + pins >>= 1; + } + } else { + /* exit if pattern_bit_width not as needed */ + mask = 0u; + } + + return mask; +} + + +/** + * \brief This function ensures that these sensitive pins are not reconfigured. + * + * On GPIOA and GPIOB only pins 11 down to 0 are available to the user. + * Pins 15 down to 12 are used for system functions of the discovery board, + * e.g. connection of the debugger. + * These pins must not be reconfigured. Otherwise the debugger cannot be used any more. + */ +static uint16_t intercept_overwrite_register(reg_gpio_t *port, uint16_t pins){ + if (port == GPIOA || port == GPIOB){ + pins &= 0x0FFF; + } + return pins; +} + + +/** + * \brief Returns mask for configuration of SYSCFG_EXTICR register. + * \param port : Port of which the mask should be generated. + * \return Mask for specified port. + */ +static uint8_t get_syscfg_mask(reg_gpio_t *port) +{ + return ((port == GPIOA) ? 0u : + (port == GPIOB) ? 1u : + (port == GPIOC) ? 2u : + (port == GPIOD) ? 3u : + (port == GPIOE) ? 4u : + (port == GPIOF) ? 5u : + (port == GPIOG) ? 6u : + (port == GPIOH) ? 7u : + (port == GPIOI) ? 8u : + (port == GPIOJ) ? 9u : 10u); +} diff --git a/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_pwr.c@2.2.0 b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_pwr.c@2.2.0 new file mode 100644 index 0000000..a244dd6 --- /dev/null +++ b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_pwr.c@2.2.0 @@ -0,0 +1,132 @@ +/* ---------------------------------------------------------------------------- + * -- _____ ______ _____ - + * -- |_ _| | ____|/ ____| - + * -- | | _ __ | |__ | (___ Institute of Embedded Systems - + * -- | | | '_ \| __| \___ \ Zurich University of - + * -- _| |_| | | | |____ ____) | Applied Sciences - + * -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - + * ------------------------------------------------------------------------- */ +/** + * \brief Implementation of module hal_pwr. + * + * The hardware abstraction layer for the power control unit. + * + * $Id$ + * ------------------------------------------------------------------------- */ + +/* User includes */ +#include "hal_pwr.h" +#include "reg_stm32f4xx.h" + + +/* -- Macros + * ------------------------------------------------------------------------- */ + +#define TIME_OUT 0x1000 +#define MASK_PERIPH_PWR (1u << 28u) + + +/* -- Public function definitions + * ------------------------------------------------------------------------- */ + +/* + * See header file + */ +void hal_pwr_reset(void) +{ + /* Reset peripheral */ + PWR->CR = 0x0000c000; + PWR->CSR = 0x00000000; +} + + +/* + * See header file + */ +hal_bool_t hal_pwr_set_backup_domain(hal_bool_t status) +{ + uint16_t count = 0; + uint32_t reg = 0; + + if (status == DISABLE) { + /* Disable backup domain / regulator */ + PWR->CSR &= ~(1u << 9u); + return DISABLED; + } + + /* Enable backup domain / regulator */ + PWR->CSR |= (1u << 9u); + + /* Wait till regulator is ready and if time out is reached exit */ + reg = PWR->CSR & (1u << 3u); + while ((reg == 0) && (count != TIME_OUT)) { + reg = PWR->CSR & (1u << 3u); + count++; + } + + /* Return */ + if (reg != 0) { + return ENABLED; + } + return DISABLED; +} + + +/* + * See header file + */ +void hal_pwr_set_backup_access(hal_bool_t status) +{ + if (status == DISABLE) { + PWR->CR &= ~(1u << 8u); + } else { + PWR->CR |= (1u << 8u); + } +} + + +/* + * See header file + */ +void hal_pwr_set_wakeup_pin(hal_bool_t status) +{ + if (status == DISABLE) { + PWR->CSR &= ~(1u << 8u); + } else { + PWR->CSR |= (1u << 8u); + } +} + + +/* + * See header file + */ +void hal_pwr_set_flash_powerdown(hal_bool_t status) +{ + if (status == DISABLE) { + PWR->CR &= ~(1u << 9u); + } else { + PWR->CR |= (1u << 9u); + } +} + + +/* + * See header file + */ +hal_bool_t hal_pwr_set_overdrive(hal_bool_t status) +{ + /* Is this realy nedded ? + Extend clock to 180 MHz if HSI/HSE is used, but pll ? */ + return DISABLED; +} + + +/* + * See header file + */ +hal_bool_t hal_pwr_set_underdrive(hal_bool_t status) +{ + /* Is this realy nedded ? */ + return DISABLED; +} diff --git a/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_rcc.c@4.0.1 b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_rcc.c@4.0.1 new file mode 100644 index 0000000..fdd4d3a --- /dev/null +++ b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/.hal_rcc.c@4.0.1 @@ -0,0 +1,347 @@ +/* ---------------------------------------------------------------------------- + * -- _____ ______ _____ - + * -- |_ _| | ____|/ ____| - + * -- | | _ __ | |__ | (___ Institute of Embedded Systems - + * -- | | | '_ \| __| \___ \ Zurich University of - + * -- _| |_| | | | |____ ____) | Applied Sciences - + * -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - + * ------------------------------------------------------------------------- */ +/** + * \brief Implementation of module hal_rcc. + * + * The hardware abstraction layer for the reset and clock control unit. + * + * $Id$ + * ------------------------------------------------------------------------- */ + +/* User includes */ +#include "hal_rcc.h" +#include "reg_stm32f4xx.h" + + +/* -- Macros + * ------------------------------------------------------------------------- */ + +#define TIME_OUT 0x5000 + + +/* -- Public function definitions + * ------------------------------------------------------------------------- */ + +/* + * See header file + */ +void hal_rcc_reset(void) +{ + /* Set RCC->CR to default values */ + RCC->CR |= 0x00000001; // Set HSION bit first -> keep cpu running + RCC->CR &= 0xeaf6ffff; // Reset HSEON, CSSON, PLLON, PLLI2S, + // PLLSAI bits (STM32F42xx/43xx) + RCC->CR &= 0xfffbffff; // Reset HSEBYP bit + + /* Reset RCC->CFGR to default values */ + RCC->CFGR = 0u; + + /* Reset RCC->PLLxCFGR to default values */ + RCC->PLLCFGR = 0x24003010; + RCC->PLLI2SCFGR = 0x20003000; + RCC->PLLSAICFGR = 0x24003000; // only STM32F42xx/43xx) + + /* Disable all interrupts */ + RCC->CIR = 0u; + + /* Disable all peripherals */ + RCC->AHB1RSTR = 0u; + RCC->AHB2RSTR = 0u; + RCC->AHB3RSTR = 0u; + RCC->APB1RSTR = 0u; + RCC->APB2RSTR = 0u; + RCC->AHB1ENR = 0x00100000; + RCC->AHB2ENR = 0u; + RCC->AHB3ENR = 0u; + RCC->APB1ENR = 0u; + RCC->APB2ENR = 0u; + RCC->AHB1LPENR = 0x7e6791ff; + RCC->AHB2LPENR = 0x000000f1; + RCC->AHB3LPENR = 0x00000001; + RCC->APB1LPENR = 0x36fec9ff; + RCC->APB2LPENR = 0x00075f33; + + /* Reset forgotten registers */ + RCC->BDCR = 0u; + RCC->CSR = 0x0e000000; + RCC->SSCGR = 0u; + RCC->DCKCFGR = 0u; +} + + +/* + * See header file + */ +void hal_rcc_set_peripheral(hal_peripheral_t peripheral, hal_bool_t status) +{ + volatile uint32_t *reg; + uint32_t bit_pos; + + /* Select correct enable register */ + switch (peripheral) { + /* AHB1 */ + case PER_GPIOA: + bit_pos = 0u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOB: + bit_pos = 1u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOC: + bit_pos = 2u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOD: + bit_pos = 3u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOE: + bit_pos = 4u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOF: + bit_pos = 5u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOG: + bit_pos = 6u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOH: + bit_pos = 7u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOI: + bit_pos = 8u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOJ: + bit_pos = 9u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOK: + bit_pos = 10u; + reg = &RCC->AHB1ENR; + break; + case PER_DMA1: + bit_pos = 21u; + reg = &RCC->AHB1ENR; + break; + case PER_DMA2: + bit_pos = 22u; + reg = &RCC->AHB1ENR; + break; + + /* AHB3 */ + case PER_FMC: + bit_pos = 0u; + reg = &RCC->AHB3ENR; + break; + + /* APB1 */ + case PER_DAC: + bit_pos = 29u; + reg = &RCC->APB1ENR; + break; + case PER_PWR: + bit_pos = 28u; + reg = &RCC->APB1ENR; + break; + case PER_TIM2: + bit_pos = 0u; + reg = &RCC->APB1ENR; + break; + case PER_TIM3: + bit_pos = 1u; + reg = &RCC->APB1ENR; + break; + case PER_TIM4: + bit_pos = 2u; + reg = &RCC->APB1ENR; + break; + case PER_TIM5: + bit_pos = 3u; + reg = &RCC->APB1ENR; + break; + + + /* APB2 */ + case PER_ADC1: + bit_pos = 8u; + reg = &RCC->APB2ENR; + break; + case PER_ADC2: + bit_pos = 9u; + reg = &RCC->APB2ENR; + break; + case PER_ADC3: + bit_pos = 10u; + reg = &RCC->APB2ENR; + break; + + default: + return; + } + + if (status == DISABLE) { + *reg &= ~(1u << bit_pos); + } else { + *reg |= (1u << bit_pos); + } +} + + +/* + * See header file + */ +hal_bool_t hal_rcc_set_osc(hal_rcc_osc_t source, hal_bool_t status) +{ + uint32_t reg = 0; + uint32_t count = 0; + + /* Disable source */ + if (status == DISABLE) { + RCC->CR &= ~(1u << source); + return DISABLED; + } + + /* If pll, check if source is ok */ + if (source == HAL_RCC_OSC_PLL || + source == HAL_RCC_OSC_PLLI2S || + source == HAL_RCC_OSC_PLLSAI) + { + reg = RCC->CR; + /* HSE */ + if (RCC->PLLCFGR & ~(1u << 22u)) { + reg &= (1u << (HAL_RCC_OSC_HSE + 1u)); + } + /* HSI */ + else { + reg &= (1u << (HAL_RCC_OSC_HSI + 1u)); + } + /* Return if source is not ok */ + if (!reg) { + return DISABLED; + } + } + + /* Enable source */ + RCC->CR |= (1u << source); + + /* Wait till source is ready and if time out is reached exit */ + reg = RCC->CR & (1u << (source + 1u)); + while ((reg == 0) && (count != TIME_OUT)) { + reg = RCC->CR & (1u << (source + 1u)); + count++; + } + + /* Return */ + if (reg != 0) { + return ENABLED; + } + return DISABLED; +} + + +/* + * See header file + */ +void hal_rcc_setup_pll(hal_rcc_osc_t pll, hal_rcc_pll_init_t init) +{ + /* Input check */ + if (init.m_divider < 2u) init.m_divider = 2u; + + if (init.n_factor < 2u) init.n_factor = 2u; + if (init.n_factor > 432u) init.n_factor = 432u; + + if (init.p_divider > 8u) init.p_divider = 8u; + + if (init.q_divider < 2u) init.q_divider = 2u; + + init.r_divider &= 0x07; + + /* Set source or return if invalid */ + if (init.source == HAL_RCC_OSC_HSI) { + RCC->PLLCFGR &= ~(1u << 22u); + } else if (init.source == HAL_RCC_OSC_HSE) { + RCC->PLLCFGR |= (1u << 22u); + } else { + return; + } + + /* Set pll preescaler */ + RCC->PLLCFGR &= ~(0x3f); + RCC->PLLCFGR |= init.m_divider; + + /* Configure pll */ + switch (pll) { + case HAL_RCC_OSC_PLL: + RCC->PLLCFGR &= ~0x0f037fc0; + RCC->PLLCFGR |= (init.n_factor << 6u); + RCC->PLLCFGR |= (((init.p_divider - 1) >> 1u) << 16u); + RCC->PLLCFGR |= (init.q_divider << 24u); + break; + + case HAL_RCC_OSC_PLLI2S: + RCC->PLLI2SCFGR &= ~0x7f007fc0; + RCC->PLLI2SCFGR |= (init.n_factor << 6u); + RCC->PLLI2SCFGR |= (init.q_divider << 24u); + RCC->PLLI2SCFGR |= (init.r_divider << 28u); + break; + +/* case HAL_RCC_OSC_PLLSAI: + RCC->PLLSAICFGR &= ~0x7f007fc0; + RCC->PLLSAICFGR |= (init.n_factor << 6u); + RCC->PLLSAICFGR |= (init.q_divider << 24u); + RCC->PLLSAICFGR |= (init.r_divider << 28u); + break; +*/ + default: + break; + } +} + + +/* + * See header file + */ +void hal_rcc_setup_clock(hal_rcc_clk_init_t init) +{ + uint32_t reg = 0; + + /* Configure clock divider */ + RCC->CFGR &= ~0x0000fcf0; + RCC->CFGR |= (init.hpre << 4u); + RCC->CFGR |= (init.ppre1 << 10u); + RCC->CFGR |= (init.ppre2 << 13u); + + /* Select system clock source */ + RCC->CFGR &= ~0x00000003; + switch (init.osc) { + default: + case HAL_RCC_OSC_HSI: + reg = 0u; + break; + + case HAL_RCC_OSC_HSE: + reg = 1u; + break; + + case HAL_RCC_OSC_PLL: + reg = 2u; + break; + } + RCC->CFGR |= reg; + +#ifndef TESTING + /* Wait till system clock is selected */ + while ((RCC->CFGR & 0x0000000c) != (reg << 2u)); +#endif +} diff --git a/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_fmc.c b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_fmc.c new file mode 100644 index 0000000..e454145 --- /dev/null +++ b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_fmc.c @@ -0,0 +1,143 @@ +/* ---------------------------------------------------------------------------- + * -- _____ ______ _____ - + * -- |_ _| | ____|/ ____| - + * -- | | _ __ | |__ | (___ Institute of Embedded Systems - + * -- | | | '_ \| __| \___ \ Zurich University of - + * -- _| |_| | | | |____ ____) | Applied Sciences - + * -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - + * ------------------------------------------------------------------------- */ +/** + * \brief Implementation of module hal_fmc. + * + * The hardware abstraction layer for the memory controller. + * + * $Id$ + * ------------------------------------------------------------------------- */ + +/* User includes */ +#include "hal_fmc.h" +#include "reg_stm32f4xx.h" + + +/* -- Macros + * ------------------------------------------------------------------------- */ + +#define MASK_PERIPH_FMC (0x00000001) +#define MASK_SRAM_ENABLE (0x00000001) + + +/* -- Public function definitions + * ------------------------------------------------------------------------- */ + +/* + * See header file + */ +void hal_fmc_reset(hal_fmc_bank_t bank) +{ + switch (bank) { + default: + case HAL_FMC_SRAM_BANK1: + FMC->SRAM.BCR1 = 0x000030db; + FMC->SRAM.BTR1 = 0x0fffffff; + break; + + case HAL_FMC_SRAM_BANK2: + FMC->SRAM.BCR2 = 0x000030d2; + FMC->SRAM.BTR2 = 0x0fffffff; + break; + + case HAL_FMC_SRAM_BANK3: + FMC->SRAM.BCR3 = 0x000030d2; + FMC->SRAM.BTR3 = 0x0fffffff; + break; + + case HAL_FMC_SRAM_BANK4: + FMC->SRAM.BCR4 = 0x000030d2; + FMC->SRAM.BTR4 = 0x0fffffff; + break; + } +} + + +/* + * See header file + */ +void hal_fmc_init_sram(hal_fmc_bank_t bank, + hal_fmc_sram_init_t init, + hal_fmc_sram_timing_t timing) +{ + uint32_t reg_cr = 0, reg_tr = 0; + + /* Input check */ + timing.address_setup &= 0xf; + timing.address_hold &= 0xf; + if (timing.address_hold < 1u) timing.address_hold = 1u; + timing.data_setup &= 0xff; + if (timing.data_setup < 1u) timing.data_setup = 1u; + timing.bus_turnaround &= 0xf; + + /* Input check clock divider (2..16) */ + if (timing.clk_divider > 16u) timing.clk_divider = 16u; + if (timing.clk_divider < 2u) timing.clk_divider = 2u; + timing.clk_divider -= 1u; // 0b0001 -> clk / 2 + + /* Input check data latency (2..17) */ + if (timing.data_latency > 17u) timing.data_latency = 17u; + if (timing.data_latency < 2u) timing.data_latency = 2u; + timing.data_latency -= 2u; // 0b0000 -> latency = 2 + + /* Process boolean parameter */ + if (init.address_mux == ENABLE) reg_cr |= (1u << 1u); + if (init.read_burst == ENABLE) reg_cr |= (1u << 8u); + if (init.write_enable == ENABLE) reg_cr |= (1u << 12u); + if (init.write_burst == ENABLE) reg_cr |= (1u << 19u); + if (init.continous_clock == ENABLE) reg_cr |= (1u << 20u); + + /* Process non boolean parameter */ + reg_cr |= (init.type << 2u); + reg_cr |= (init.width << 4u); + + /* Process timing for async. SRAM */ + if (init.type == HAL_FMC_TYPE_SRAM) { + reg_tr |= (timing.address_setup << 0u); + reg_tr |= (timing.address_hold << 4u); + reg_tr |= (timing.data_setup << 8u); + reg_tr |= (timing.mode << 28u); + } + /* Process timing for sync. PSRAM */ + else if (init.type == HAL_FMC_TYPE_PSRAM) { + reg_tr |= (timing.clk_divider << 20u); + reg_tr |= (timing.data_latency << 24u); + } + /* Process bus turnaround time */ + reg_tr |= (timing.bus_turnaround << 16u); + + /* Write register */ + switch (bank) { + default: + case HAL_FMC_SRAM_BANK1: + FMC->SRAM.BCR1 = reg_cr; + FMC->SRAM.BTR1 = reg_tr; + FMC->SRAM.BCR1 |= MASK_SRAM_ENABLE; + break; + + case HAL_FMC_SRAM_BANK2: + FMC->SRAM.BCR2 = reg_cr; + FMC->SRAM.BTR2 = reg_tr; + FMC->SRAM.BCR2 |= MASK_SRAM_ENABLE; + break; + + case HAL_FMC_SRAM_BANK3: + FMC->SRAM.BCR3 = reg_cr; + FMC->SRAM.BTR3 = reg_tr; + FMC->SRAM.BCR3 |= MASK_SRAM_ENABLE; + break; + + case HAL_FMC_SRAM_BANK4: + FMC->SRAM.BCR4 = reg_cr; + FMC->SRAM.BTR4 = reg_tr; + FMC->SRAM.BCR4 |= MASK_SRAM_ENABLE; + break; + } +} + diff --git a/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_gpio.c b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_gpio.c new file mode 100644 index 0000000..59e0e4c --- /dev/null +++ b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_gpio.c @@ -0,0 +1,412 @@ +/* ---------------------------------------------------------------------------- + * -- _____ ______ _____ - + * -- |_ _| | ____|/ ____| - + * -- | | _ __ | |__ | (___ Institute of Embedded Systems - + * -- | | | '_ \| __| \___ \ Zurich University of - + * -- _| |_| | | | |____ ____) | Applied Sciences - + * -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - + * ------------------------------------------------------------------------- */ +/** + * \brief Implementation of module hal_gpio. + * + * The hardware abstraction layer for the GPIO periphery. + * + * $Id$ + * ------------------------------------------------------------------------- */ + +/* User includes */ +#include "hal_gpio.h" + + +/* -- Macros + * ------------------------------------------------------------------------- */ + +#define NVIC_OFFSET_1_4 ( 6u) +#define NVIC_OFFSET_5_9 (23u) +#define NVIC_OFFSET_10_15 ( 8u) + + +/* -- Local function declarations + * ------------------------------------------------------------------------- */ + +static uint32_t create_pattern_mask(uint16_t pins, + uint8_t pattern, + uint8_t pattern_bit_width); +static uint16_t intercept_overwrite_register(reg_gpio_t *port, uint16_t pins); +static uint8_t get_syscfg_mask(reg_gpio_t *port); + + +/* -- Public function definitions + * ------------------------------------------------------------------------- */ + +/* + * See header file + */ +void hal_gpio_reset(reg_gpio_t *port) +{ + if(port == GPIOA) { + /* Reset GPIOA specific values */ + port->MODER = 0xa8000000; + port->OSPEEDR = 0x00000000; + port->PUPDR = 0x64000000; + } + else if (port == GPIOB) { + /* Reset GPIOB specific values */ + port->MODER = 0x00000280; + port->OSPEEDR = 0x000000c0; + port->PUPDR = 0x00000100; + } else { + /* Reset other GPIO */ + port->MODER = 0x00000000; + port->OSPEEDR = 0x00000000; + port->PUPDR = 0x00000000; + } + + port->OTYPER = 0x00000000; + port->AFRL = 0x00000000; + port->AFRH = 0x00000000; + port->ODR = 0x00000000; +} + +/* + * See header file + */ +void hal_gpio_init_input(reg_gpio_t *port, hal_gpio_input_t init) +{ + /* prevent overwrite false reg entry */ + init.pins = intercept_overwrite_register(port, init.pins); + + /* process mode */ + port->MODER &= ~create_pattern_mask(init.pins, 0x3, 2u); + port->MODER |= create_pattern_mask(init.pins, HAL_GPIO_MODE_IN, 2u); + + /* process pull up/down resitors */ + port->PUPDR &= ~create_pattern_mask(init.pins, 0x3, 2u); + port->PUPDR |= create_pattern_mask(init.pins, init.pupd, 2u); +} + + +/* + * See header file + */ +void hal_gpio_init_analog(reg_gpio_t *port, hal_gpio_input_t init) +{ + /* treat like input */ + hal_gpio_init_input(port, init); + + /* change mode */ + port->MODER &= ~create_pattern_mask(init.pins, 0x3, 2u); + port->MODER |= create_pattern_mask(init.pins, HAL_GPIO_MODE_AN, 2u); +} + + +/* + * See header file + */ +void hal_gpio_init_output(reg_gpio_t *port, hal_gpio_output_t init) +{ + /* prevent overwrite false reg entry */ + init.pins = intercept_overwrite_register(port, init.pins); + + /* process mode */ + port->MODER &= ~create_pattern_mask(init.pins, 0x3, 2u); + port->MODER |= create_pattern_mask(init.pins, HAL_GPIO_MODE_OUT, 2u); + + /* process pull up/down resitors */ + port->PUPDR &= ~create_pattern_mask(init.pins, 0x3, 2u); + port->PUPDR |= create_pattern_mask(init.pins, init.pupd, 2u); + + /* process port speed */ + port->OSPEEDR &= ~create_pattern_mask(init.pins, 0x3, 2u); + port->OSPEEDR |= create_pattern_mask(init.pins, init.out_speed, 2u); + + /* process output typ */ + port->OTYPER &= ~init.pins; + if(init.out_type == HAL_GPIO_OUT_TYPE_OD){ + port->OTYPER |= init.pins; + } +} + + +/* + * See header file + */ +void hal_gpio_init_alternate(reg_gpio_t *port, + hal_gpio_af_t af_mode, + hal_gpio_output_t init) +{ + /* treat like output */ + hal_gpio_init_output(port, init); + + /* change mode */ + port->MODER &= ~create_pattern_mask(init.pins, 0x3, 2u); + port->MODER |= create_pattern_mask(init.pins, HAL_GPIO_MODE_AF, 2u); + + /* process af type */ + port->AFRL &= ~create_pattern_mask(init.pins, 0xf, 4u); + port->AFRL |= create_pattern_mask(init.pins, af_mode, 4u); + port->AFRH &= ~create_pattern_mask((init.pins >> 8), 0xf, 4u); + port->AFRH |= create_pattern_mask((init.pins >> 8), af_mode, 4u); +} + + +/* + * See header file + */ +uint16_t hal_gpio_input_read(reg_gpio_t *port) +{ + return (uint16_t) port->IDR; +} + + +/* + * See header file + */ +uint16_t hal_gpio_output_read(reg_gpio_t *port) +{ + return (uint16_t) port->ODR; +} + + +/* + * See header file + */ +void hal_gpio_output_write(reg_gpio_t *port, uint16_t port_value) +{ + /* prevent overwrite false reg entry */ + port_value = intercept_overwrite_register(port, port_value); + port->ODR = port_value; +} + + +/* + * See header file + */ +void hal_gpio_bit_set(reg_gpio_t *port, uint16_t pins) +{ + /* prevent overwrite false reg entry */ + pins = intercept_overwrite_register(port, pins); + + /* exit if no pins to be configured */ + if (pins != 0) { + port->BSRR = pins; + } +} + + +/* + * See header file + */ +void hal_gpio_bit_reset(reg_gpio_t *port, uint16_t pins) +{ + /* prevent overwrite false reg entry */ + pins = intercept_overwrite_register(port, pins); + + /* exit if no pins to be configured */ + if (pins != 0) { + port->BSRR = (pins << 16); + } +} + + +/* + * See header file + */ +void hal_gpio_bit_toggle(reg_gpio_t *port, uint16_t pins) +{ + uint16_t pattern; + + /* prevent overwrite false reg entry */ + pins = intercept_overwrite_register(port, pins); + + /* exit if no pins to be configured */ + if (pins != 0) { + /* get actual value and invert */ + pattern = hal_gpio_output_read(port); + pattern = ~pattern; + + /* mask pins */ + pattern &= pins; + + port->ODR = pattern; + } +} + + +/* + * See header file + */ +void hal_gpio_irq_set(reg_gpio_t *port, + uint16_t pins, + hal_gpio_trg_t edge, + hal_bool_t status) +{ + uint8_t syscfg_bank, nvic_bank, syscfg_shift, exti_line; + uint32_t exticr_mask; + + for (exti_line = 0u; exti_line < 16u; exti_line++) { + if (pins & (0x1 << exti_line)) { + syscfg_bank = exti_line / 4u; + syscfg_shift = exti_line % 4u; + nvic_bank = (exti_line < 10u) ? 0u : 1u; + + if (status == ENABLE) { + /* Trigger (rising/falling/both) */ + if (edge & HAL_GPIO_TRG_POS) { + EXTI->RTSR |= (0x1 << exti_line); + } + if (edge & HAL_GPIO_TRG_NEG) { + EXTI->FTSR |= (0x1 << exti_line); + } + /* Set EXTI line to corresponding GPIO port */ + exticr_mask = get_syscfg_mask(port); + if (syscfg_bank == 0u) { + SYSCFG->EXTICR1 &= ~(0xf << syscfg_shift); + SYSCFG->EXTICR1 |= (exticr_mask << syscfg_shift); + } else if (syscfg_bank == 1u) { + SYSCFG->EXTICR2 &= ~(0xf << syscfg_shift); + SYSCFG->EXTICR2 |= (exticr_mask << syscfg_shift); + } else if (syscfg_bank == 2u) { + SYSCFG->EXTICR3 &= ~(0xf << syscfg_shift); + SYSCFG->EXTICR3 |= (exticr_mask << syscfg_shift); + } else if (syscfg_bank == 3u) { + SYSCFG->EXTICR4 &= ~(0xf << syscfg_shift); + SYSCFG->EXTICR4 |= (exticr_mask << syscfg_shift); + } + + /* Unmask interrupt */ + EXTI->IMR |= (0x1 << exti_line); + if (nvic_bank == 0u) { + NVIC->ISER0 |= ((exti_line < 5u) ? (0x1 << (exti_line + NVIC_OFFSET_1_4)) : + (exti_line < 10u) ? NVIC_OFFSET_5_9 : NVIC_OFFSET_10_15); + } else if (nvic_bank == 1u) { + NVIC->ISER1 |= ((exti_line < 5u) ? (0x1 << (exti_line + NVIC_OFFSET_1_4)) : + (exti_line < 10u) ? NVIC_OFFSET_5_9 : NVIC_OFFSET_10_15); + } else if (nvic_bank == 2u) { + NVIC->ISER2 |= ((exti_line < 5u) ? (0x1 << (exti_line + NVIC_OFFSET_1_4)) : + (exti_line < 10u) ? NVIC_OFFSET_5_9 : NVIC_OFFSET_10_15); + } + + } else { + /* Mask interrupt */ + EXTI->IMR &= ~(0x1 << exti_line); + if (nvic_bank == 0u) { + NVIC->ICER0 |= ((exti_line < 5u) ? (0x1 << (exti_line + NVIC_OFFSET_1_4)) : + (exti_line < 10u) ? NVIC_OFFSET_5_9 : NVIC_OFFSET_10_15); + } else if (nvic_bank == 1u) { + NVIC->ICER1 |= ((exti_line < 5u) ? (0x1 << (exti_line + NVIC_OFFSET_1_4)) : + (exti_line < 10u) ? NVIC_OFFSET_5_9 : NVIC_OFFSET_10_15); + } else if (nvic_bank == 2u) { + NVIC->ICER2 |= ((exti_line < 5u) ? (0x1 << (exti_line + NVIC_OFFSET_1_4)) : + (exti_line < 10u) ? NVIC_OFFSET_5_9 : NVIC_OFFSET_10_15); + } + } + } + } + +} + + +/* + * See header file + */ +hal_bool_t hal_gpio_irq_status(uint16_t pin) +{ + hal_bool_t status = DISABLED; + + if ((EXTI->IMR && pin) && + (EXTI->PR && pin)) { + status = ENABLED; + } + + return status; +} + + +/* + * See header file + */ +void hal_gpio_irq_clear(uint16_t pin) +{ + EXTI->PR |= pin; +} + + +/* -- Local function definitions + * ------------------------------------------------------------------------- */ + +/** + * \brief Creates a pattern based on specified pins. + * + * example: pins = 1,3,4 (0x001a) / pattern = 0x2 (2 bit wide) + * ==> pattern = 0x0000'0288 + * + * 0b0..0'0001'1010 / 0b10 (2 bit wide) + * ^ ^ ^ + * ==> 0b0..0'00010'1000'1000 + * ^^ ^^ ^^ + * + * pattern_bit_width must be 2 or 4 + */ +static uint32_t create_pattern_mask(uint16_t pins, + uint8_t pattern, + uint8_t pattern_bit_width) +{ + const uint8_t mask_bit_width = 32u; + const uint16_t pin1_mask = 1u; + + uint8_t pos, end; + uint32_t mask = 0u; + + if (pattern_bit_width == 2u || pattern_bit_width == 4u) { + /* create pattern mask */ + end = mask_bit_width / pattern_bit_width; + for (pos = 0; pos < end; pos++) { + if (pins & pin1_mask) { + mask |= pattern << (pos * pattern_bit_width); + } + pins >>= 1; + } + } else { + /* exit if pattern_bit_width not as needed */ + mask = 0u; + } + + return mask; +} + + +/** + * \brief This function ensures that these sensitive pins are not reconfigured. + * + * On GPIOA and GPIOB only pins 11 down to 0 are available to the user. + * Pins 15 down to 12 are used for system functions of the discovery board, + * e.g. connection of the debugger. + * These pins must not be reconfigured. Otherwise the debugger cannot be used any more. + */ +static uint16_t intercept_overwrite_register(reg_gpio_t *port, uint16_t pins){ + if (port == GPIOA || port == GPIOB){ + pins &= 0x0FFF; + } + return pins; +} + + +/** + * \brief Returns mask for configuration of SYSCFG_EXTICR register. + * \param port : Port of which the mask should be generated. + * \return Mask for specified port. + */ +static uint8_t get_syscfg_mask(reg_gpio_t *port) +{ + return ((port == GPIOA) ? 0u : + (port == GPIOB) ? 1u : + (port == GPIOC) ? 2u : + (port == GPIOD) ? 3u : + (port == GPIOE) ? 4u : + (port == GPIOF) ? 5u : + (port == GPIOG) ? 6u : + (port == GPIOH) ? 7u : + (port == GPIOI) ? 8u : + (port == GPIOJ) ? 9u : 10u); +} diff --git a/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_pwr.c b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_pwr.c new file mode 100644 index 0000000..a244dd6 --- /dev/null +++ b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_pwr.c @@ -0,0 +1,132 @@ +/* ---------------------------------------------------------------------------- + * -- _____ ______ _____ - + * -- |_ _| | ____|/ ____| - + * -- | | _ __ | |__ | (___ Institute of Embedded Systems - + * -- | | | '_ \| __| \___ \ Zurich University of - + * -- _| |_| | | | |____ ____) | Applied Sciences - + * -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - + * ------------------------------------------------------------------------- */ +/** + * \brief Implementation of module hal_pwr. + * + * The hardware abstraction layer for the power control unit. + * + * $Id$ + * ------------------------------------------------------------------------- */ + +/* User includes */ +#include "hal_pwr.h" +#include "reg_stm32f4xx.h" + + +/* -- Macros + * ------------------------------------------------------------------------- */ + +#define TIME_OUT 0x1000 +#define MASK_PERIPH_PWR (1u << 28u) + + +/* -- Public function definitions + * ------------------------------------------------------------------------- */ + +/* + * See header file + */ +void hal_pwr_reset(void) +{ + /* Reset peripheral */ + PWR->CR = 0x0000c000; + PWR->CSR = 0x00000000; +} + + +/* + * See header file + */ +hal_bool_t hal_pwr_set_backup_domain(hal_bool_t status) +{ + uint16_t count = 0; + uint32_t reg = 0; + + if (status == DISABLE) { + /* Disable backup domain / regulator */ + PWR->CSR &= ~(1u << 9u); + return DISABLED; + } + + /* Enable backup domain / regulator */ + PWR->CSR |= (1u << 9u); + + /* Wait till regulator is ready and if time out is reached exit */ + reg = PWR->CSR & (1u << 3u); + while ((reg == 0) && (count != TIME_OUT)) { + reg = PWR->CSR & (1u << 3u); + count++; + } + + /* Return */ + if (reg != 0) { + return ENABLED; + } + return DISABLED; +} + + +/* + * See header file + */ +void hal_pwr_set_backup_access(hal_bool_t status) +{ + if (status == DISABLE) { + PWR->CR &= ~(1u << 8u); + } else { + PWR->CR |= (1u << 8u); + } +} + + +/* + * See header file + */ +void hal_pwr_set_wakeup_pin(hal_bool_t status) +{ + if (status == DISABLE) { + PWR->CSR &= ~(1u << 8u); + } else { + PWR->CSR |= (1u << 8u); + } +} + + +/* + * See header file + */ +void hal_pwr_set_flash_powerdown(hal_bool_t status) +{ + if (status == DISABLE) { + PWR->CR &= ~(1u << 9u); + } else { + PWR->CR |= (1u << 9u); + } +} + + +/* + * See header file + */ +hal_bool_t hal_pwr_set_overdrive(hal_bool_t status) +{ + /* Is this realy nedded ? + Extend clock to 180 MHz if HSI/HSE is used, but pll ? */ + return DISABLED; +} + + +/* + * See header file + */ +hal_bool_t hal_pwr_set_underdrive(hal_bool_t status) +{ + /* Is this realy nedded ? */ + return DISABLED; +} diff --git a/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_rcc.c b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_rcc.c new file mode 100644 index 0000000..fdd4d3a --- /dev/null +++ b/CT-Lab1-Project/RTE/HAL/CT_Board_HS14_M0/hal_rcc.c @@ -0,0 +1,347 @@ +/* ---------------------------------------------------------------------------- + * -- _____ ______ _____ - + * -- |_ _| | ____|/ ____| - + * -- | | _ __ | |__ | (___ Institute of Embedded Systems - + * -- | | | '_ \| __| \___ \ Zurich University of - + * -- _| |_| | | | |____ ____) | Applied Sciences - + * -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - + * ------------------------------------------------------------------------- */ +/** + * \brief Implementation of module hal_rcc. + * + * The hardware abstraction layer for the reset and clock control unit. + * + * $Id$ + * ------------------------------------------------------------------------- */ + +/* User includes */ +#include "hal_rcc.h" +#include "reg_stm32f4xx.h" + + +/* -- Macros + * ------------------------------------------------------------------------- */ + +#define TIME_OUT 0x5000 + + +/* -- Public function definitions + * ------------------------------------------------------------------------- */ + +/* + * See header file + */ +void hal_rcc_reset(void) +{ + /* Set RCC->CR to default values */ + RCC->CR |= 0x00000001; // Set HSION bit first -> keep cpu running + RCC->CR &= 0xeaf6ffff; // Reset HSEON, CSSON, PLLON, PLLI2S, + // PLLSAI bits (STM32F42xx/43xx) + RCC->CR &= 0xfffbffff; // Reset HSEBYP bit + + /* Reset RCC->CFGR to default values */ + RCC->CFGR = 0u; + + /* Reset RCC->PLLxCFGR to default values */ + RCC->PLLCFGR = 0x24003010; + RCC->PLLI2SCFGR = 0x20003000; + RCC->PLLSAICFGR = 0x24003000; // only STM32F42xx/43xx) + + /* Disable all interrupts */ + RCC->CIR = 0u; + + /* Disable all peripherals */ + RCC->AHB1RSTR = 0u; + RCC->AHB2RSTR = 0u; + RCC->AHB3RSTR = 0u; + RCC->APB1RSTR = 0u; + RCC->APB2RSTR = 0u; + RCC->AHB1ENR = 0x00100000; + RCC->AHB2ENR = 0u; + RCC->AHB3ENR = 0u; + RCC->APB1ENR = 0u; + RCC->APB2ENR = 0u; + RCC->AHB1LPENR = 0x7e6791ff; + RCC->AHB2LPENR = 0x000000f1; + RCC->AHB3LPENR = 0x00000001; + RCC->APB1LPENR = 0x36fec9ff; + RCC->APB2LPENR = 0x00075f33; + + /* Reset forgotten registers */ + RCC->BDCR = 0u; + RCC->CSR = 0x0e000000; + RCC->SSCGR = 0u; + RCC->DCKCFGR = 0u; +} + + +/* + * See header file + */ +void hal_rcc_set_peripheral(hal_peripheral_t peripheral, hal_bool_t status) +{ + volatile uint32_t *reg; + uint32_t bit_pos; + + /* Select correct enable register */ + switch (peripheral) { + /* AHB1 */ + case PER_GPIOA: + bit_pos = 0u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOB: + bit_pos = 1u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOC: + bit_pos = 2u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOD: + bit_pos = 3u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOE: + bit_pos = 4u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOF: + bit_pos = 5u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOG: + bit_pos = 6u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOH: + bit_pos = 7u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOI: + bit_pos = 8u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOJ: + bit_pos = 9u; + reg = &RCC->AHB1ENR; + break; + case PER_GPIOK: + bit_pos = 10u; + reg = &RCC->AHB1ENR; + break; + case PER_DMA1: + bit_pos = 21u; + reg = &RCC->AHB1ENR; + break; + case PER_DMA2: + bit_pos = 22u; + reg = &RCC->AHB1ENR; + break; + + /* AHB3 */ + case PER_FMC: + bit_pos = 0u; + reg = &RCC->AHB3ENR; + break; + + /* APB1 */ + case PER_DAC: + bit_pos = 29u; + reg = &RCC->APB1ENR; + break; + case PER_PWR: + bit_pos = 28u; + reg = &RCC->APB1ENR; + break; + case PER_TIM2: + bit_pos = 0u; + reg = &RCC->APB1ENR; + break; + case PER_TIM3: + bit_pos = 1u; + reg = &RCC->APB1ENR; + break; + case PER_TIM4: + bit_pos = 2u; + reg = &RCC->APB1ENR; + break; + case PER_TIM5: + bit_pos = 3u; + reg = &RCC->APB1ENR; + break; + + + /* APB2 */ + case PER_ADC1: + bit_pos = 8u; + reg = &RCC->APB2ENR; + break; + case PER_ADC2: + bit_pos = 9u; + reg = &RCC->APB2ENR; + break; + case PER_ADC3: + bit_pos = 10u; + reg = &RCC->APB2ENR; + break; + + default: + return; + } + + if (status == DISABLE) { + *reg &= ~(1u << bit_pos); + } else { + *reg |= (1u << bit_pos); + } +} + + +/* + * See header file + */ +hal_bool_t hal_rcc_set_osc(hal_rcc_osc_t source, hal_bool_t status) +{ + uint32_t reg = 0; + uint32_t count = 0; + + /* Disable source */ + if (status == DISABLE) { + RCC->CR &= ~(1u << source); + return DISABLED; + } + + /* If pll, check if source is ok */ + if (source == HAL_RCC_OSC_PLL || + source == HAL_RCC_OSC_PLLI2S || + source == HAL_RCC_OSC_PLLSAI) + { + reg = RCC->CR; + /* HSE */ + if (RCC->PLLCFGR & ~(1u << 22u)) { + reg &= (1u << (HAL_RCC_OSC_HSE + 1u)); + } + /* HSI */ + else { + reg &= (1u << (HAL_RCC_OSC_HSI + 1u)); + } + /* Return if source is not ok */ + if (!reg) { + return DISABLED; + } + } + + /* Enable source */ + RCC->CR |= (1u << source); + + /* Wait till source is ready and if time out is reached exit */ + reg = RCC->CR & (1u << (source + 1u)); + while ((reg == 0) && (count != TIME_OUT)) { + reg = RCC->CR & (1u << (source + 1u)); + count++; + } + + /* Return */ + if (reg != 0) { + return ENABLED; + } + return DISABLED; +} + + +/* + * See header file + */ +void hal_rcc_setup_pll(hal_rcc_osc_t pll, hal_rcc_pll_init_t init) +{ + /* Input check */ + if (init.m_divider < 2u) init.m_divider = 2u; + + if (init.n_factor < 2u) init.n_factor = 2u; + if (init.n_factor > 432u) init.n_factor = 432u; + + if (init.p_divider > 8u) init.p_divider = 8u; + + if (init.q_divider < 2u) init.q_divider = 2u; + + init.r_divider &= 0x07; + + /* Set source or return if invalid */ + if (init.source == HAL_RCC_OSC_HSI) { + RCC->PLLCFGR &= ~(1u << 22u); + } else if (init.source == HAL_RCC_OSC_HSE) { + RCC->PLLCFGR |= (1u << 22u); + } else { + return; + } + + /* Set pll preescaler */ + RCC->PLLCFGR &= ~(0x3f); + RCC->PLLCFGR |= init.m_divider; + + /* Configure pll */ + switch (pll) { + case HAL_RCC_OSC_PLL: + RCC->PLLCFGR &= ~0x0f037fc0; + RCC->PLLCFGR |= (init.n_factor << 6u); + RCC->PLLCFGR |= (((init.p_divider - 1) >> 1u) << 16u); + RCC->PLLCFGR |= (init.q_divider << 24u); + break; + + case HAL_RCC_OSC_PLLI2S: + RCC->PLLI2SCFGR &= ~0x7f007fc0; + RCC->PLLI2SCFGR |= (init.n_factor << 6u); + RCC->PLLI2SCFGR |= (init.q_divider << 24u); + RCC->PLLI2SCFGR |= (init.r_divider << 28u); + break; + +/* case HAL_RCC_OSC_PLLSAI: + RCC->PLLSAICFGR &= ~0x7f007fc0; + RCC->PLLSAICFGR |= (init.n_factor << 6u); + RCC->PLLSAICFGR |= (init.q_divider << 24u); + RCC->PLLSAICFGR |= (init.r_divider << 28u); + break; +*/ + default: + break; + } +} + + +/* + * See header file + */ +void hal_rcc_setup_clock(hal_rcc_clk_init_t init) +{ + uint32_t reg = 0; + + /* Configure clock divider */ + RCC->CFGR &= ~0x0000fcf0; + RCC->CFGR |= (init.hpre << 4u); + RCC->CFGR |= (init.ppre1 << 10u); + RCC->CFGR |= (init.ppre2 << 13u); + + /* Select system clock source */ + RCC->CFGR &= ~0x00000003; + switch (init.osc) { + default: + case HAL_RCC_OSC_HSI: + reg = 0u; + break; + + case HAL_RCC_OSC_HSE: + reg = 1u; + break; + + case HAL_RCC_OSC_PLL: + reg = 2u; + break; + } + RCC->CFGR |= reg; + +#ifndef TESTING + /* Wait till system clock is selected */ + while ((RCC->CFGR & 0x0000000c) != (reg << 2u)); +#endif +} diff --git a/CT-Lab1-Project/RTE/_Target_1/RTE_Components.h b/CT-Lab1-Project/RTE/_Target_1/RTE_Components.h new file mode 100644 index 0000000..a26857a --- /dev/null +++ b/CT-Lab1-Project/RTE/_Target_1/RTE_Components.h @@ -0,0 +1,15 @@ + +/* + * Auto generated Run-Time-Environment Configuration File + * *** Do not modify ! *** + * + * Project: 'CT-Lab1-Project' + * Target: 'Target 1' + */ + +#ifndef RTE_COMPONENTS_H +#define RTE_COMPONENTS_H + + + +#endif /* RTE_COMPONENTS_H */ diff --git a/CT-Lab1-Project/app/task.c b/CT-Lab1-Project/app/task.c new file mode 100644 index 0000000..c15f8cc --- /dev/null +++ b/CT-Lab1-Project/app/task.c @@ -0,0 +1,97 @@ +#include "utils_ctboard.h" + +uint8_t getData7Segment(uint8_t digit); +uint16_t getData7SegmentTwoDigits(uint8_t digit); + +int main(void) { + /* initializations go here */ + uint8_t rotationSwitchData; + while (1) { + /*Connect LEDs to Switchs */ + write_word(0x60000100, read_word(0x60000200)); + /*Connect Rotation Switch to 7 Segment */ + rotationSwitchData = read_byte(0x60000211) & 0x0F; + /*write_word(0x60000110, getData7Segment(rotationSwitchData) | 0xFFFF0000); */ + write_byte(0x60000110, getData7Segment(rotationSwitchData)); + } +} + +uint8_t getData7Segment(uint8_t digit) { + switch(digit) { + case 0x0: + return 0xC0; + case 0x1: + return 0xF9; + case 0x2: + return 0xA4; + case 0x3: + return 0xB0; + case 0x4: + return 0x99; + case 0x5: + return 0x92; + case 0x6: + return 0x82; + case 0x7: + return 0xF8; + case 0x8: + return 0x80; + case 0x9: + return 0x90; + case 0xA: + return 0x88; + case 0xB: + return 0x83; + case 0xC: + return 0xC6; + case 0xD: + return 0xA1; + case 0xE: + return 0x86; + case 0xF: + return 0x8E; + default: + return 0xFF; + + } +} + +uint16_t getData7SegmentTwoDigits(uint8_t digit) { + switch(digit) { + case 0x0: + return 0xFFC0; + case 0x1: + return 0xFFF9; + case 0x2: + return 0xFFA4; + case 0x3: + return 0xFFB0; + case 0x4: + return 0xFF99; + case 0x5: + return 0xFF92; + case 0x6: + return 0xFF82; + case 0x7: + return 0xFFF8; + case 0x8: + return 0xFF80; + case 0x9: + return 0xFF90; + case 0xA: + return 0xF9C0; + case 0xB: + return 0xF9F9; + case 0xC: + return 0xF9A4; + case 0xD: + return 0xF9B0; + case 0xE: + return 0xF999; + case 0xF: + return 0xF992; + default: + return 0xFFFF; + + } +} diff --git a/CT-Lab1-Project/app/utils_ctboard.c b/CT-Lab1-Project/app/utils_ctboard.c new file mode 100644 index 0000000..5c4e1eb --- /dev/null +++ b/CT-Lab1-Project/app/utils_ctboard.c @@ -0,0 +1,103 @@ +/* ---------------------------------------------------------------------------- + * -- _____ ______ _____ - + * -- |_ _| | ____|/ ____| - + * -- | | _ __ | |__ | (___ Institute of Embedded Systems - + * -- | | | '_ \| __| \___ \ Zurich University of - + * -- _| |_| | | | |____ ____) | Applied Sciences - + * -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - + * ---------------------------------------------------------------------------- + * -- + * -- Project : CT Board - Cortex M4 + * -- Description : Utilities for ct board. + * -- + * -- $Id: utils_ctboard.c 2160 2015-06-08 12:28:00Z feur $ + * ------------------------------------------------------------------------- */ + +#include +#include "utils_ctboard.h" + +/* ---------------------------------------------------------------------------- + * -- Functions + * ---------------------------------------------------------------------------- + */ + +/* + * See header file + */ +uint8_t read_byte(uint32_t address) +{ + uint8_t *pointer; + pointer = (uint8_t *)address; + return *pointer; +} + +/* + * See header file + */ +uint16_t read_halfword(uint32_t address) +{ + uint16_t *pointer; + pointer = (uint16_t *)address; + return *pointer; +} + +/* + * See header file + */ +uint32_t read_word(uint32_t address) +{ + uint32_t *pointer; + pointer = (uint32_t *)address; + return *pointer; +} + +/* + * See header file + */ +uint64_t read_doubleword(uint32_t address) +{ + uint64_t *pointer; + pointer = (uint64_t *)address; + return *pointer; +} + + +/* + * See header file + */ +void write_byte(uint32_t address, uint8_t data) +{ + uint8_t *pointer; + pointer = (uint8_t *)address; + *pointer = data; +} + +/* + * See header file + */ +void write_halfword(uint32_t address, uint16_t data) +{ + uint16_t *pointer; + pointer = (uint16_t *)address; + *pointer = data; +} + +/* + * See header file + */ +void write_word(uint32_t address, uint32_t data) +{ + uint32_t *pointer; + pointer = (uint32_t *)address; + *pointer = data; +} + +/* + * See header file + */ +void write_doubleword(uint32_t address, uint64_t data) +{ + uint64_t *pointer; + pointer = (uint64_t *)address; + *pointer = data; +} diff --git a/CT-Lab1-Project/app/utils_ctboard.h b/CT-Lab1-Project/app/utils_ctboard.h new file mode 100644 index 0000000..b946a56 --- /dev/null +++ b/CT-Lab1-Project/app/utils_ctboard.h @@ -0,0 +1,52 @@ +/* ---------------------------------------------------------------------------- + * -- _____ ______ _____ - + * -- |_ _| | ____|/ ____| - + * -- | | _ __ | |__ | (___ Institute of Embedded Systems - + * -- | | | '_ \| __| \___ \ Zurich University of - + * -- _| |_| | | | |____ ____) | Applied Sciences - + * -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - + * ---------------------------------------------------------------------------- + * -- + * -- Module : ctboard_utils + * -- Description : Interface for module. + * -- + * -- $Id: utils_ctboard.h 1122 2015-01-06 13:57:04Z feur $ + * ------------------------------------------------------------------------- */ +#ifndef _UTILS_CTBOARD +#define _UTILS_CTBOARD + +#include + +/* ---------------------------------------------------------------------------- + * -- Function prototypes + * ---------------------------------------------------------------------------- + */ + +/* + * Functions to read either a byte, halfword, word or + * doubleword from an arbitrary address. + * @param address: address to read from (32 bit) + * @retval data @ address + */ +uint8_t read_byte(uint32_t address); +uint16_t read_halfword(uint32_t address); +uint32_t read_word(uint32_t address); +uint64_t read_doubleword(uint32_t address); + + +/* + * Functions to write either a byte, halfword, word or + * doubleword to an arbitrary address. + * @param address: address to write to (32 bit) + * data: data to write @ address + */ +void write_byte(uint32_t address, uint8_t data); +void write_halfword(uint32_t address, uint16_t data); +void write_word(uint32_t address, uint32_t data); +void write_doubleword(uint32_t address, uint64_t data); + +/* ---------------------------------------------------------------------------- + * -- Header file end + * ---------------------------------------------------------------------------- + */ +#endif diff --git a/CT-Lab1-Project/build/CT-Lab1-Project.axf b/CT-Lab1-Project/build/CT-Lab1-Project.axf new file mode 100644 index 0000000000000000000000000000000000000000..f047779f513faa1ba002a6ab8722eddae3600e47 GIT binary patch literal 44772 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 + +
+

µVision Build Log

+

Tool Versions:

+IDE-Version: µVision V5.37.0.0 +Copyright (C) 2022 ARM Ltd and ARM Germany GmbH. All rights reserved. +License Information: Roman Schenk, ZHAW, LIC=---- + +Tool Versions: +Toolchain: MDK-Lite Version: 5.37.0.0 +Toolchain Path: C:\Keil_v5\ARM\ARMCLANG\Bin +C Compiler: ArmClang.exe V6.18 +Assembler: Armasm.exe V6.18 +Linker/Locator: ArmLink.exe V6.18 +Library Manager: ArmAr.exe V6.18 +Hex Converter: FromElf.exe V6.18 +CPU DLL: SARMCM3.DLL V5.37.0.0 +Dialog DLL: DARMCM1.DLL V1.19.6.0 +Target DLL: STLink\ST-LINKIII-KEIL_SWO.dll V3.0.9.0 +Dialog DLL: TARMCM1.DLL V1.14.6.0 + +

Project:

+C:\Users\roman\Documents\CT-Lab1-Project\CT-Lab1-Project.uvprojx +Project File Date: 09/23/2022 + +

Output:

+*** Using Compiler 'V6.18', folder: 'C:\Keil_v5\ARM\ARMCLANG\Bin' +Rebuild target 'Target 1' +assembling startup_ctboard.s... +assembling datainit_ctboard.s... +RTE/Device/CT_Board_HS14_M0/system_ctboard.c(42): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include\system_ctboard.h(32): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_gpio.h(24): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include\reg_stm32f4xx.h(1181): warning: // comments are not allowed in this language [-Wcomment] +// volatile uint32_t HR[5]; +^ +RTE/Device/CT_Board_HS14_M0/system_ctboard.c(42): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include\system_ctboard.h(32): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_gpio.h(25): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include/hal_common.h(59): warning: // comments are not allowed in this language [-Wcomment] + PER_ADC1, // APB2 + ^ +RTE/Device/CT_Board_HS14_M0/system_ctboard.c(42): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include\system_ctboard.h(32): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_gpio.h(168): warning: commas at the end of enumerator lists are a C99-specific feature [-Wc99-extensions] + HAL_GPIO_PIN_All = 0xffff, + ^ +RTE/Device/CT_Board_HS14_M0/system_ctboard.c(42): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include\system_ctboard.h(33): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_fmc.h(71): warning: commas at the end of enumerator lists are a C99-specific feature [-Wc99-extensions] + HAL_FMC_ACCESS_MODE_D = 3u, /**< Access mode D. */ + ^~ +RTE/Device/CT_Board_HS14_M0/system_ctboard.c(77): warning: no previous prototype for function '__system' [-Wmissing-prototypes] +void __system(void) + ^ +RTE/Device/CT_Board_HS14_M0/system_ctboard.c(77): note: declare 'static' if the function is not intended to be used outside of this translation unit +void __system(void) +^ +static +RTE/Device/CT_Board_HS14_M0/system_ctboard.c(105): warning: unused parameter 'entry' [-Wunused-parameter] +void system_enter_sleep(hal_pwr_lp_entry_t entry) + ^ +RTE/Device/CT_Board_HS14_M0/system_ctboard.c(114): warning: unused parameter 'regulator' [-Wunused-parameter] +void system_enter_stop(hal_pwr_regulator_t regulator, hal_pwr_lp_entry_t entry) + ^ +RTE/Device/CT_Board_HS14_M0/system_ctboard.c(114): warning: unused parameter 'entry' [-Wunused-parameter] +void system_enter_stop(hal_pwr_regulator_t regulator, hal_pwr_lp_entry_t entry) + ^ +RTE/Device/CT_Board_HS14_M0/system_ctboard.c(146): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + PWR_RESET(); + ^~~~~~~~~~~ +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include\reg_stm32f4xx.h(178): note: expanded from macro 'PWR_RESET' +#define PWR_RESET() REG_TGL(RCC->APB1RSTR, PWR_RCC_PATTERN) + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include\reg_stm32f4xx.h(31): note: expanded from macro 'REG_TGL' + REG_CLR((REG), (BIT)); \ + ^~~~~~~~~~~~~~~~~~~~~ +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include\reg_stm32f4xx.h(26): note: expanded from macro 'REG_CLR' +#define REG_CLR(REG, BIT) ( (REG) &= ~(BIT) ) + ~~ ^~~~~~ +RTE/Device/CT_Board_HS14_M0/system_ctboard.c(42): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include\system_ctboard.h(35): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_rcc.h(78): warning: padding struct 'hal_rcc_pll_init_t' with 1 byte to align 'n_factor' [-Wpadded] + uint16_t n_factor; + ^ +RTE/Device/CT_Board_HS14_M0/system_ctboard.c(174): warning: // comments are not allowed in this language [-Wcomment] + clk_init.hpre = HAL_RCC_HPRE_2; // -> AHB clock : 84 MHz + ^ +RTE/Device/CT_Board_HS14_M0/system_ctboard.c(42): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include\system_ctboard.h(32): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_gpio.h(197): warning: padding size of 'hal_gpio_output_t' with 1 byte to alignment boundary [-Wpadded] +typedef struct { + ^ +12 warnings generated. +compiling system_ctboard.c... +compiling utils_ctboard.c... +compiling task.c... +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(18): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_fmc.h(24): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include/hal_common.h(59): warning: // comments are not allowed in this language [-Wcomment] + PER_ADC1, // APB2 + ^ +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(18): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_fmc.h(71): warning: commas at the end of enumerator lists are a C99-specific feature [-Wc99-extensions] + HAL_FMC_ACCESS_MODE_D = 3u, /**< Access mode D. */ + ^~ +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(19): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include\reg_stm32f4xx.h(1181): warning: // comments are not allowed in this language [-Wcomment] +// volatile uint32_t HR[5]; +^ +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(38): warning: default label in switch which covers all enumeration values [-Wcovered-switch-default] + default: + ^ +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(82): warning: // comments are not allowed in this language [-Wcomment] + timing.clk_divider -= 1u; // 0b0001 -> clk / 2 + ^ +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(97): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + reg_cr |= (init.type << 2u); + ~~ ~~~~~~~~~~^~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(98): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + reg_cr |= (init.width << 4u); + ~~ ~~~~~~~~~~~^~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(102): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + reg_tr |= (timing.address_setup << 0u); + ~~ ~~~~~~~~~~~~~~~~~~~~~^~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(103): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + reg_tr |= (timing.address_hold << 4u); + ~~ ~~~~~~~~~~~~~~~~~~~~^~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(104): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + reg_tr |= (timing.data_setup << 8u); + ~~ ~~~~~~~~~~~~~~~~~~^~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(105): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + reg_tr |= (timing.mode << 28u); + ~~ ~~~~~~~~~~~~^~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(109): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + reg_tr |= (timing.clk_divider << 20u); + ~~ ~~~~~~~~~~~~~~~~~~~^~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(110): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + reg_tr |= (timing.data_latency << 24u); + ~~ ~~~~~~~~~~~~~~~~~~~~^~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(113): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + reg_tr |= (timing.bus_turnaround << 16u); + ~~ ~~~~~~~~~~~~~~~~~~~~~~^~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_fmc.c(117): warning: default label in switch which covers all enumeration values [-Wcovered-switch-default] + default: + ^ +15 warnings generated. +compiling hal_fmc.c... +RTE/HAL/CT_Board_HS14_M0/hal_gpio.c(18): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_gpio.h(24): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include\reg_stm32f4xx.h(1181): warning: // comments are not allowed in this language [-Wcomment] +// volatile uint32_t HR[5]; +^ +RTE/HAL/CT_Board_HS14_M0/hal_gpio.c(18): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_gpio.h(25): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include/hal_common.h(59): warning: // comments are not allowed in this language [-Wcomment] + PER_ADC1, // APB2 + ^ +RTE/HAL/CT_Board_HS14_M0/hal_gpio.c(18): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_gpio.h(168): warning: commas at the end of enumerator lists are a C99-specific feature [-Wc99-extensions] + HAL_GPIO_PIN_All = 0xffff, + ^ +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_gpio.h(187): warning: padding size of 'hal_gpio_input_t' with 1 byte to alignment boundary [-Wpadded] +typedef struct { + ^ +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_gpio.h(197): warning: padding size of 'hal_gpio_output_t' with 1 byte to alignment boundary [-Wpadded] +typedef struct { + ^ +RTE/HAL/CT_Board_HS14_M0/hal_gpio.c(207): warning: implicit conversion changes signedness: 'int' to 'uint32_t' (aka 'unsigned int') [-Wsign-conversion] + port->BSRR = (pins << 16); + ~ ~~~~~^~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_gpio.c(264): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + SYSCFG->EXTICR1 &= ~(0xf << syscfg_shift); + ~~ ^~~~~~~~~~~~~~~~~~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_gpio.c(267): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + SYSCFG->EXTICR2 &= ~(0xf << syscfg_shift); + ~~ ^~~~~~~~~~~~~~~~~~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_gpio.c(270): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + SYSCFG->EXTICR3 &= ~(0xf << syscfg_shift); + ~~ ^~~~~~~~~~~~~~~~~~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_gpio.c(273): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + SYSCFG->EXTICR4 &= ~(0xf << syscfg_shift); + ~~ ^~~~~~~~~~~~~~~~~~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_gpio.c(366): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + mask |= pattern << (pos * pattern_bit_width); + ~~ ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~ +11 warnings generated. +compiling hal_gpio.c... +RTE/HAL/CT_Board_HS14_M0/hal_pwr.c(18): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_pwr.h(24): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include/hal_common.h(59): warning: // comments are not allowed in this language [-Wcomment] + PER_ADC1, // APB2 + ^ +RTE/HAL/CT_Board_HS14_M0/hal_pwr.c(19): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include\reg_stm32f4xx.h(1181): warning: // comments are not allowed in this language [-Wcomment] +// volatile uint32_t HR[5]; +^ +RTE/HAL/CT_Board_HS14_M0/hal_pwr.c(117): warning: unused parameter 'status' [-Wunused-parameter] +hal_bool_t hal_pwr_set_overdrive(hal_bool_t status) + ^ +RTE/HAL/CT_Board_HS14_M0/hal_pwr.c(128): warning: unused parameter 'status' [-Wunused-parameter] +hal_bool_t hal_pwr_set_underdrive(hal_bool_t status) + ^ +4 warnings generated. +compiling hal_pwr.c... +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(18): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_rcc.h(24): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include/hal_common.h(59): warning: // comments are not allowed in this language [-Wcomment] + PER_ADC1, // APB2 + ^ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(19): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include\reg_stm32f4xx.h(1181): warning: // comments are not allowed in this language [-Wcomment] +// volatile uint32_t HR[5]; +^ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(37): warning: // comments are not allowed in this language [-Wcomment] + RCC->CR |= 0x00000001; // Set HSION bit first -> keep cpu running + ^ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(189): warning: default label in switch which covers all enumeration values [-Wcovered-switch-default] + default: + ^ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(18): warning: In file included from... +C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include\hal_rcc.h(78): warning: padding struct 'hal_rcc_pll_init_t' with 1 byte to align 'n_factor' [-Wpadded] + uint16_t n_factor; + ^ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(280): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + RCC->PLLCFGR &= ~(0x3f); + ~~ ^~~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(286): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + RCC->PLLCFGR &= ~0x0f037fc0; + ~~ ^~~~~~~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(287): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + RCC->PLLCFGR |= (init.n_factor << 6u); + ~~ ~~~~~~~~~~~~~~^~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(288): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + RCC->PLLCFGR |= (((init.p_divider - 1) >> 1u) << 16u); + ~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(289): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + RCC->PLLCFGR |= (init.q_divider << 24u); + ~~ ~~~~~~~~~~~~~~~^~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(293): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + RCC->PLLI2SCFGR &= ~0x7f007fc0; + ~~ ^~~~~~~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(294): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + RCC->PLLI2SCFGR |= (init.n_factor << 6u); + ~~ ~~~~~~~~~~~~~~^~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(295): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + RCC->PLLI2SCFGR |= (init.q_divider << 24u); + ~~ ~~~~~~~~~~~~~~~^~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(296): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + RCC->PLLI2SCFGR |= (init.r_divider << 28u); + ~~ ~~~~~~~~~~~~~~~^~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(284): warning: enumeration values 'HAL_RCC_OSC_HSI', 'HAL_RCC_OSC_HSE', and 'HAL_RCC_OSC_PLLSAI' not explicitly handled in switch [-Wswitch-enum] + switch (pll) { + ^~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(320): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + RCC->CFGR &= ~0x0000fcf0; + ~~ ^~~~~~~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(321): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + RCC->CFGR |= (init.hpre << 4u); + ~~ ~~~~~~~~~~^~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(322): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + RCC->CFGR |= (init.ppre1 << 10u); + ~~ ~~~~~~~~~~~^~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(323): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + RCC->CFGR |= (init.ppre2 << 13u); + ~~ ~~~~~~~~~~~^~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(326): warning: implicit conversion changes signedness: 'int' to 'unsigned int' [-Wsign-conversion] + RCC->CFGR &= ~0x00000003; + ~~ ^~~~~~~~~~~ +RTE/HAL/CT_Board_HS14_M0/hal_rcc.c(327): warning: enumeration values 'HAL_RCC_OSC_PLLI2S' and 'HAL_RCC_OSC_PLLSAI' not explicitly handled in switch [-Wswitch-enum] + switch (init.osc) { + ^~~~~~~~ +21 warnings generated. +compiling hal_rcc.c... +linking... +Program Size: Code=3852 RO-data=428 RW-data=0 ZI-data=8192 +".\build\CT-Lab1-Project.axf" - 0 Error(s), 63 Warning(s). + +

Software Packages used:

+ +Package Vendor: InES + https://ennis.zhaw.ch/pack/InES.CTBoard14_DFP.4.0.2.pack + InES.CTBoard14_DFP.4.0.2 + CT Board 14 (STM32F429ZI) Device Support + * Component: Startup Version: 4.0.1 + * Component: FMC Version: 3.0.1 + * Component: GPIO Version: 4.0.1 + * Component: PWR Version: 2.2.0 + * Component: RCC Version: 4.0.1 + +

Collection of Component include folders:

+ ./RTE/_Target_1 + C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include + C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include/m0 + C:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include + +

Collection of Component Files used:

+ + * Component: InES::Device:Startup:4.0.1 + Include file: Device/Include/reg_stm32f4xx.h + Include file: Device/Include/reg_ctboard.h + Include file: Device/Include/m0/platform_ctboard.h + Include file: Device/Include/system_ctboard.h + Source file: Device/Source/system_ctboard.c + Source file: Device/Source/datainit_ctboard.s + Source file: Device/Source/startup_ctboard.s + + * Component: InES::HAL:FMC:3.0.1 + Source file: HAL/Source/hal_fmc.c + Include file: HAL/Include/hal_common.h + Include file: HAL/Include/hal_fmc.h + Include file: Device/Include/reg_stm32f4xx.h + + * Component: InES::HAL:GPIO:4.0.1 + Include file: HAL/Include/hal_gpio.h + Include file: Device/Include/reg_stm32f4xx.h + Source file: HAL/Source/hal_gpio.c + Include file: HAL/Include/hal_common.h + + * Component: InES::HAL:PWR:2.2.0 + Include file: Device/Include/reg_stm32f4xx.h + Source file: HAL/Source/hal_pwr.c + Include file: HAL/Include/hal_common.h + Include file: HAL/Include/hal_pwr.h + + * Component: InES::HAL:RCC:4.0.1 + Source file: HAL/Source/hal_rcc.c + Include file: HAL/Include/hal_common.h + Include file: HAL/Include/hal_rcc.h + Include file: Device/Include/reg_stm32f4xx.h +Build Time Elapsed: 00:00:01 +
+ + diff --git a/CT-Lab1-Project/build/CT-Lab1-Project.htm b/CT-Lab1-Project/build/CT-Lab1-Project.htm new file mode 100644 index 0000000..e96b21c --- /dev/null +++ b/CT-Lab1-Project/build/CT-Lab1-Project.htm @@ -0,0 +1,656 @@ + + +Static Call Graph - [.\build\CT-Lab1-Project.axf] +
+

Static Call Graph for image .\build\CT-Lab1-Project.axf


+

#<CALLGRAPH># ARM Linker, 6180002: Last Updated: Fri Sep 30 07:35:31 2022 +

+

Maximum Stack Usage = 312 bytes + Unknown(Cycles, Untraceable Function Pointers)

+Call chain for Maximum Stack Depth:

+__system ⇒ system_enter_run ⇒ init_FMC_SRAM ⇒ hal_gpio_init_alternate ⇒ hal_gpio_init_output ⇒ create_pattern_mask +

+

+Mutually Recursive functions +

  • NMI_Handler   ⇒   NMI_Handler
    +
  • HardFault_Handler   ⇒   HardFault_Handler
    +
  • MemManage_Handler   ⇒   MemManage_Handler
    +
  • BusFault_Handler   ⇒   BusFault_Handler
    +
  • UsageFault_Handler   ⇒   UsageFault_Handler
    +
  • SVC_Handler   ⇒   SVC_Handler
    +
  • DebugMon_Handler   ⇒   DebugMon_Handler
    +
  • PendSV_Handler   ⇒   PendSV_Handler
    +
  • SysTick_Handler   ⇒   SysTick_Handler
    +
  • ADC_IRQHandler   ⇒   ADC_IRQHandler
    + +

    +

    +Function Pointers +

      +
    • ADC_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • BusFault_Handler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • CAN1_RX0_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • CAN1_RX1_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • CAN1_SCE_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • CAN1_TX_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • CAN2_RX0_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • CAN2_RX1_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • CAN2_SCE_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • CAN2_TX_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • CRYP_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DCMI_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA1_Stream0_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA1_Stream1_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA1_Stream2_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA1_Stream3_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA1_Stream4_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA1_Stream5_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA1_Stream6_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA1_Stream7_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA2D_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA2_Stream0_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA2_Stream1_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA2_Stream2_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA2_Stream3_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA2_Stream4_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA2_Stream5_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA2_Stream6_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DMA2_Stream7_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • DebugMon_Handler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • ETH_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • ETH_WKUP_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • EXTI0_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • EXTI15_10_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • EXTI1_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • EXTI2_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • EXTI3_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • EXTI4_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • EXTI9_5_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • FLASH_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • FMC_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • FPU_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • HASH_RNG_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • HardFault_Handler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • I2C1_ER_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • I2C1_EV_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • I2C2_ER_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • I2C2_EV_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • I2C3_ER_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • I2C3_EV_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • LTDC_ER_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • LTDC_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • MemManage_Handler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • NMI_Handler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • OTG_FS_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • OTG_FS_WKUP_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • OTG_HS_EP1_IN_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • OTG_HS_EP1_OUT_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • OTG_HS_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • OTG_HS_WKUP_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • PVD_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • PendSV_Handler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • RCC_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • RTC_Alarm_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • RTC_WKUP_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • Reset_Handler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • SAI1_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • SDIO_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • SPI1_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • SPI2_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • SPI3_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • SPI4_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • SPI5_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • SPI6_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • SVC_Handler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • SysTick_Handler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TAMP_STAMP_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TIM1_BRK_TIM9_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TIM1_CC_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TIM1_TRG_COM_TIM11_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TIM1_UP_TIM10_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TIM2_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TIM3_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TIM4_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TIM5_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TIM6_DAC_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TIM7_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TIM8_BRK_TIM12_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TIM8_CC_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TIM8_TRG_COM_TIM14_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • TIM8_UP_TIM13_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • UART4_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • UART5_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • UART7_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • UART8_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • USART1_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • USART2_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • USART3_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • USART6_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • UsageFault_Handler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • WWDG_IRQHandler from startup_ctboard.o(.text) referenced from startup_ctboard.o(RESET) +
    • __main from datainit_ctboard.o(.text) referenced from startup_ctboard.o(.text) +
    • __system from system_ctboard.o(.text.__system) referenced from startup_ctboard.o(.text) +
    • main from task.o(.text.main) referenced from datainit_ctboard.o(.text) +
    +

    +

    +Global Symbols +

    +

    __main (Thumb, 74 bytes, Stack size 0 bytes, datainit_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(.text) +
    +

    Reset_Handler (Thumb, 8 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    NMI_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +

    [Calls]

    • >>   NMI_Handler +
    +
    [Called By]
    • >>   NMI_Handler +
    +
    [Address Reference Count : 1]
    • startup_ctboard.o(RESET) +
    +

    HardFault_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +

    [Calls]

    • >>   HardFault_Handler +
    +
    [Called By]
    • >>   HardFault_Handler +
    +
    [Address Reference Count : 1]
    • startup_ctboard.o(RESET) +
    +

    MemManage_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +

    [Calls]

    • >>   MemManage_Handler +
    +
    [Called By]
    • >>   MemManage_Handler +
    +
    [Address Reference Count : 1]
    • startup_ctboard.o(RESET) +
    +

    BusFault_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +

    [Calls]

    • >>   BusFault_Handler +
    +
    [Called By]
    • >>   BusFault_Handler +
    +
    [Address Reference Count : 1]
    • startup_ctboard.o(RESET) +
    +

    UsageFault_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +

    [Calls]

    • >>   UsageFault_Handler +
    +
    [Called By]
    • >>   UsageFault_Handler +
    +
    [Address Reference Count : 1]
    • startup_ctboard.o(RESET) +
    +

    SVC_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +

    [Calls]

    • >>   SVC_Handler +
    +
    [Called By]
    • >>   SVC_Handler +
    +
    [Address Reference Count : 1]
    • startup_ctboard.o(RESET) +
    +

    DebugMon_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +

    [Calls]

    • >>   DebugMon_Handler +
    +
    [Called By]
    • >>   DebugMon_Handler +
    +
    [Address Reference Count : 1]
    • startup_ctboard.o(RESET) +
    +

    PendSV_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +

    [Calls]

    • >>   PendSV_Handler +
    +
    [Called By]
    • >>   PendSV_Handler +
    +
    [Address Reference Count : 1]
    • startup_ctboard.o(RESET) +
    +

    SysTick_Handler (Thumb, 2 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +

    [Calls]

    • >>   SysTick_Handler +
    +
    [Called By]
    • >>   SysTick_Handler +
    +
    [Address Reference Count : 1]
    • startup_ctboard.o(RESET) +
    +

    ADC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +

    [Calls]

    • >>   ADC_IRQHandler +
    +
    [Called By]
    • >>   ADC_IRQHandler +
    +
    [Address Reference Count : 1]
    • startup_ctboard.o(RESET) +
    +

    CAN1_RX0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    CAN1_RX1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    CAN1_SCE_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    CAN1_TX_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    CAN2_RX0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    CAN2_RX1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    CAN2_SCE_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    CAN2_TX_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    CRYP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DCMI_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA1_Stream0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA1_Stream1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA1_Stream2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA1_Stream3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA1_Stream4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA1_Stream5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA1_Stream6_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA1_Stream7_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA2D_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA2_Stream0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA2_Stream1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA2_Stream2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA2_Stream3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA2_Stream4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA2_Stream5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA2_Stream6_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    DMA2_Stream7_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    ETH_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    ETH_WKUP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    EXTI0_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    EXTI15_10_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    EXTI1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    EXTI2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    EXTI3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    EXTI4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    EXTI9_5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    FLASH_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    FMC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    FPU_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    HASH_RNG_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    I2C1_ER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    I2C1_EV_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    I2C2_ER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    I2C2_EV_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    I2C3_ER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    I2C3_EV_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    LTDC_ER_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    LTDC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    OTG_FS_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    OTG_FS_WKUP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    OTG_HS_EP1_IN_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    OTG_HS_EP1_OUT_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    OTG_HS_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    OTG_HS_WKUP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    PVD_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    RCC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    RTC_Alarm_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    RTC_WKUP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    SAI1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    SDIO_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    SPI1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    SPI2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    SPI3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    SPI4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    SPI5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    SPI6_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TAMP_STAMP_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TIM1_BRK_TIM9_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TIM1_CC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TIM1_TRG_COM_TIM11_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TIM1_UP_TIM10_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TIM2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TIM3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TIM4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TIM5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TIM6_DAC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TIM7_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TIM8_BRK_TIM12_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TIM8_CC_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TIM8_TRG_COM_TIM14_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    TIM8_UP_TIM13_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    UART4_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    UART5_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    UART7_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    UART8_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    USART1_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    USART2_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    USART3_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    USART6_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    WWDG_IRQHandler (Thumb, 0 bytes, Stack size 0 bytes, startup_ctboard.o(.text)) +
    [Address Reference Count : 1]

    • startup_ctboard.o(RESET) +
    +

    __aeabi_uidiv (Thumb, 0 bytes, Stack size 0 bytes, aeabi_sdiv.o(.text)) +

    [Called By]

    • >>   create_pattern_mask +
    + +

    __aeabi_uidivmod (Thumb, 20 bytes, Stack size 0 bytes, aeabi_sdiv.o(.text), UNUSED) + +

    __aeabi_idiv (Thumb, 0 bytes, Stack size 8 bytes, aeabi_sdiv.o(.text), UNUSED) + +

    __aeabi_idivmod (Thumb, 338 bytes, Stack size 8 bytes, aeabi_sdiv.o(.text), UNUSED) + +

    __system (Thumb, 8 bytes, Stack size 8 bytes, system_ctboard.o(.text.__system)) +

    [Stack]

    • Max Depth = 312
    • Call Chain = __system ⇒ system_enter_run ⇒ init_FMC_SRAM ⇒ hal_gpio_init_alternate ⇒ hal_gpio_init_output ⇒ create_pattern_mask +
    +
    [Calls]
    • >>   system_enter_run +
    +
    [Address Reference Count : 1]
    • startup_ctboard.o(.text) +
    +

    getData7Segment (Thumb, 236 bytes, Stack size 12 bytes, task.o(.text.getData7Segment)) +

    [Stack]

    • Max Depth = 12
    • Call Chain = getData7Segment +
    +
    [Called By]
    • >>   main +
    + +

    hal_fmc_init_sram (Thumb, 564 bytes, Stack size 64 bytes, hal_fmc.o(.text.hal_fmc_init_sram)) +

    [Stack]

    • Max Depth = 64
    • Call Chain = hal_fmc_init_sram +
    +
    [Called By]
    • >>   init_FMC_SRAM +
    + +

    hal_gpio_init_alternate (Thumb, 194 bytes, Stack size 72 bytes, hal_gpio.o(.text.hal_gpio_init_alternate)) +

    [Stack]

    • Max Depth = 160
    • Call Chain = hal_gpio_init_alternate ⇒ hal_gpio_init_output ⇒ create_pattern_mask +
    +
    [Calls]
    • >>   hal_gpio_init_output +
    • >>   create_pattern_mask +
    +
    [Called By]
    • >>   init_FMC_SRAM +
    + +

    hal_gpio_init_output (Thumb, 208 bytes, Stack size 48 bytes, hal_gpio.o(.text.hal_gpio_init_output)) +

    [Stack]

    • Max Depth = 88
    • Call Chain = hal_gpio_init_output ⇒ create_pattern_mask +
    +
    [Calls]
    • >>   create_pattern_mask +
    • >>   intercept_overwrite_register +
    +
    [Called By]
    • >>   hal_gpio_init_alternate +
    + +

    hal_pwr_set_overdrive (Thumb, 12 bytes, Stack size 4 bytes, hal_pwr.o(.text.hal_pwr_set_overdrive)) +

    [Stack]

    • Max Depth = 4
    • Call Chain = hal_pwr_set_overdrive +
    +
    [Called By]
    • >>   init_SystemClock +
    + +

    hal_rcc_reset (Thumb, 148 bytes, Stack size 0 bytes, hal_rcc.o(.text.hal_rcc_reset)) +

    [Called By]

    • >>   init_SystemClock +
    + +

    hal_rcc_set_osc (Thumb, 268 bytes, Stack size 32 bytes, hal_rcc.o(.text.hal_rcc_set_osc)) +

    [Stack]

    • Max Depth = 32
    • Call Chain = hal_rcc_set_osc +
    +
    [Called By]
    • >>   init_SystemClock +
    + +

    hal_rcc_setup_clock (Thumb, 160 bytes, Stack size 20 bytes, hal_rcc.o(.text.hal_rcc_setup_clock)) +

    [Stack]

    • Max Depth = 20
    • Call Chain = hal_rcc_setup_clock +
    +
    [Called By]
    • >>   init_SystemClock +
    + +

    hal_rcc_setup_pll (Thumb, 328 bytes, Stack size 24 bytes, hal_rcc.o(.text.hal_rcc_setup_pll)) +

    [Stack]

    • Max Depth = 24
    • Call Chain = hal_rcc_setup_pll +
    +
    [Called By]
    • >>   init_SystemClock +
    + +

    main (Thumb, 56 bytes, Stack size 16 bytes, task.o(.text.main)) +

    [Stack]

    • Max Depth = 28
    • Call Chain = main ⇒ getData7Segment +
    +
    [Calls]
    • >>   getData7Segment +
    • >>   write_word +
    • >>   write_byte +
    • >>   read_word +
    • >>   read_byte +
    +
    [Address Reference Count : 1]
    • datainit_ctboard.o(.text) +
    +

    read_byte (Thumb, 16 bytes, Stack size 8 bytes, utils_ctboard.o(.text.read_byte)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = read_byte +
    +
    [Called By]
    • >>   main +
    + +

    read_word (Thumb, 16 bytes, Stack size 8 bytes, utils_ctboard.o(.text.read_word)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = read_word +
    +
    [Called By]
    • >>   main +
    + +

    system_enter_run (Thumb, 20 bytes, Stack size 8 bytes, system_ctboard.o(.text.system_enter_run)) +

    [Stack]

    • Max Depth = 304
    • Call Chain = system_enter_run ⇒ init_FMC_SRAM ⇒ hal_gpio_init_alternate ⇒ hal_gpio_init_output ⇒ create_pattern_mask +
    +
    [Calls]
    • >>   init_LCD +
    • >>   init_FMC_SRAM +
    • >>   init_FPU +
    • >>   init_SystemClock +
    +
    [Called By]
    • >>   __system +
    + +

    write_byte (Thumb, 22 bytes, Stack size 12 bytes, utils_ctboard.o(.text.write_byte)) +

    [Stack]

    • Max Depth = 12
    • Call Chain = write_byte +
    +
    [Called By]
    • >>   main +
    + +

    write_word (Thumb, 20 bytes, Stack size 12 bytes, utils_ctboard.o(.text.write_word)) +

    [Stack]

    • Max Depth = 12
    • Call Chain = write_word +
    +
    [Called By]
    • >>   main +
    +

    +

    +Local Symbols +

    +

    init_SystemClock (Thumb, 196 bytes, Stack size 40 bytes, system_ctboard.o(.text.init_SystemClock)) +

    [Stack]

    • Max Depth = 72
    • Call Chain = init_SystemClock ⇒ hal_rcc_set_osc +
    +
    [Calls]
    • >>   hal_rcc_setup_clock +
    • >>   hal_pwr_set_overdrive +
    • >>   hal_rcc_setup_pll +
    • >>   hal_rcc_set_osc +
    • >>   hal_rcc_reset +
    +
    [Called By]
    • >>   system_enter_run +
    + +

    init_FPU (Thumb, 2 bytes, Stack size 0 bytes, system_ctboard.o(.text.init_FPU)) +

    [Called By]

    • >>   system_enter_run +
    + +

    init_FMC_SRAM (Thumb, 340 bytes, Stack size 136 bytes, system_ctboard.o(.text.init_FMC_SRAM)) +

    [Stack]

    • Max Depth = 296
    • Call Chain = init_FMC_SRAM ⇒ hal_gpio_init_alternate ⇒ hal_gpio_init_output ⇒ create_pattern_mask +
    +
    [Calls]
    • >>   hal_fmc_init_sram +
    • >>   hal_gpio_init_alternate +
    +
    [Called By]
    • >>   system_enter_run +
    + +

    init_LCD (Thumb, 32 bytes, Stack size 4 bytes, system_ctboard.o(.text.init_LCD)) +

    [Stack]

    • Max Depth = 4
    • Call Chain = init_LCD +
    +
    [Called By]
    • >>   system_enter_run +
    + +

    intercept_overwrite_register (Thumb, 48 bytes, Stack size 8 bytes, hal_gpio.o(.text.intercept_overwrite_register)) +

    [Stack]

    • Max Depth = 8
    • Call Chain = intercept_overwrite_register +
    +
    [Called By]
    • >>   hal_gpio_init_output +
    + +

    create_pattern_mask (Thumb, 156 bytes, Stack size 40 bytes, hal_gpio.o(.text.create_pattern_mask)) +

    [Stack]

    • Max Depth = 40
    • Call Chain = create_pattern_mask +
    +
    [Calls]
    • >>   __aeabi_uidiv +
    +
    [Called By]
    • >>   hal_gpio_init_output +
    • >>   hal_gpio_init_alternate +
    +

    +

    +Undefined Global Symbols +


    diff --git a/CT-Lab1-Project/build/CT-Lab1-Project.lnp b/CT-Lab1-Project/build/CT-Lab1-Project.lnp new file mode 100644 index 0000000..9c2056c --- /dev/null +++ b/CT-Lab1-Project/build/CT-Lab1-Project.lnp @@ -0,0 +1,14 @@ +--cpu Cortex-M0 +".\build\utils_ctboard.o" +".\build\task.o" +".\build\datainit_ctboard.o" +".\build\startup_ctboard.o" +".\build\system_ctboard.o" +".\build\hal_fmc.o" +".\build\hal_gpio.o" +".\build\hal_pwr.o" +".\build\hal_rcc.o" +--ro-base 0x08000000 --entry 0x08000000 --rw-base 0x20000000 --entry Reset_Handler --first __Vectors --strict +--diag_suppress 6314 --summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols +--info sizes --info totals --info unused --info veneers +--list ".\Listings\CT-Lab1-Project.map" -o .\build\CT-Lab1-Project.axf \ No newline at end of file diff --git a/CT-Lab1-Project/build/CT-Lab1-Project_Target 1.dep b/CT-Lab1-Project/build/CT-Lab1-Project_Target 1.dep new file mode 100644 index 0000000..f43160b --- /dev/null +++ b/CT-Lab1-Project/build/CT-Lab1-Project_Target 1.dep @@ -0,0 +1,41 @@ +Dependencies for Project 'CT-Lab1-Project', Target 'Target 1': (DO NOT MODIFY !) +CompilerVersion: 6180000::V6.18::ARMCLANG +F (.\app\utils_ctboard.c)(0x613F3541)(-xc -std=c90 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__EVAL -gdwarf-4 -O0 -ffunction-sections -Weverything -Wno-packed -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I./RTE/_Target_1 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include/m0 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include -D__UVISION_VERSION="537" -D_RTE_ -D_RTE_ -o ./build/utils_ctboard.o -MD) +I (C:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x6252B538) +I (app\utils_ctboard.h)(0x613F3541) +F (.\app\task.c)(0x63368018)(-xc -std=c90 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__EVAL -gdwarf-4 -O0 -ffunction-sections -Weverything -Wno-packed -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I./RTE/_Target_1 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include/m0 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include -D__UVISION_VERSION="537" -D_RTE_ -D_RTE_ -o ./build/task.o -MD) +I (app\utils_ctboard.h)(0x613F3541) +I (C:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x6252B538) +F (RTE/Device/CT_Board_HS14_M0/datainit_ctboard.s)(0x5C517478)(--target=arm-arm-none-eabi -mcpu=cortex-m0 -masm=auto -c -gdwarf-4 -Wa,armasm,--pd,"__EVAL SETA 1" -I./RTE/_Target_1 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include/m0 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include -Wa,armasm,--pd,"__UVISION_VERSION SETA 537" -Wa,armasm,--pd,"_RTE_ SETA 1" -Wa,armasm,--pd,"_RTE_ SETA 1" -o ./build/datainit_ctboard.o) +F (RTE/Device/CT_Board_HS14_M0/startup_ctboard.s)(0x5C517478)(--target=arm-arm-none-eabi -mcpu=cortex-m0 -masm=auto -c -gdwarf-4 -Wa,armasm,--pd,"__EVAL SETA 1" -I./RTE/_Target_1 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include/m0 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include -Wa,armasm,--pd,"__UVISION_VERSION SETA 537" -Wa,armasm,--pd,"_RTE_ SETA 1" -Wa,armasm,--pd,"_RTE_ SETA 1" -o ./build/startup_ctboard.o) +F (RTE/Device/CT_Board_HS14_M0/system_ctboard.c)(0x5C597514)(-xc -std=c90 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__EVAL -gdwarf-4 -O0 -ffunction-sections -Weverything -Wno-packed -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I./RTE/_Target_1 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include/m0 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include -D__UVISION_VERSION="537" -D_RTE_ -D_RTE_ -o ./build/system_ctboard.o -MD) +I (C:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x6252B538) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\Device\Include\system_ctboard.h)(0x5C517478) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\Device\Include\m0\platform_ctboard.h)(0x5C517478) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_gpio.h)(0x5C517478) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\Device\Include\reg_stm32f4xx.h)(0x5C597514) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_common.h)(0x5C517478) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_fmc.h)(0x5C517478) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_pwr.h)(0x5C517478) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_rcc.h)(0x5C517478) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\Device\Include\reg_ctboard.h)(0x5C6AA868) +F (RTE/HAL/CT_Board_HS14_M0/hal_fmc.c)(0x5C517478)(-xc -std=c90 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__EVAL -gdwarf-4 -O0 -ffunction-sections -Weverything -Wno-packed -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I./RTE/_Target_1 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include/m0 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include -D__UVISION_VERSION="537" -D_RTE_ -D_RTE_ -o ./build/hal_fmc.o -MD) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_fmc.h)(0x5C517478) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_common.h)(0x5C517478) +I (C:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x6252B538) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\Device\Include\reg_stm32f4xx.h)(0x5C597514) +F (RTE/HAL/CT_Board_HS14_M0/hal_gpio.c)(0x5C5ACEB0)(-xc -std=c90 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__EVAL -gdwarf-4 -O0 -ffunction-sections -Weverything -Wno-packed -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I./RTE/_Target_1 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include/m0 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include -D__UVISION_VERSION="537" -D_RTE_ -D_RTE_ -o ./build/hal_gpio.o -MD) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_gpio.h)(0x5C517478) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\Device\Include\reg_stm32f4xx.h)(0x5C597514) +I (C:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x6252B538) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_common.h)(0x5C517478) +F (RTE/HAL/CT_Board_HS14_M0/hal_pwr.c)(0x5C517478)(-xc -std=c90 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__EVAL -gdwarf-4 -O0 -ffunction-sections -Weverything -Wno-packed -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I./RTE/_Target_1 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include/m0 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include -D__UVISION_VERSION="537" -D_RTE_ -D_RTE_ -o ./build/hal_pwr.o -MD) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_pwr.h)(0x5C517478) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_common.h)(0x5C517478) +I (C:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x6252B538) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\Device\Include\reg_stm32f4xx.h)(0x5C597514) +F (RTE/HAL/CT_Board_HS14_M0/hal_rcc.c)(0x5C597514)(-xc -std=c90 --target=arm-arm-none-eabi -mcpu=cortex-m0 -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -D__EVAL -gdwarf-4 -O0 -ffunction-sections -Weverything -Wno-packed -Wno-reserved-id-macro -Wno-unused-macros -Wno-documentation-unknown-command -Wno-documentation -Wno-license-management -Wno-parentheses-equality -Wno-reserved-identifier -I./RTE/_Target_1 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/Device/Include/m0 -IC:/Users/roman/AppData/Local/Arm/Packs/InES/CTBoard14_DFP/4.0.2/HAL/Include -D__UVISION_VERSION="537" -D_RTE_ -D_RTE_ -o ./build/hal_rcc.o -MD) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_rcc.h)(0x5C517478) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_common.h)(0x5C517478) +I (C:\Keil_v5\ARM\ARMCLANG\include\stdint.h)(0x6252B538) +I (C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\Device\Include\reg_stm32f4xx.h)(0x5C597514) diff --git a/CT-Lab1-Project/build/ExtDll.iex b/CT-Lab1-Project/build/ExtDll.iex new file mode 100644 index 0000000..6c0896e --- /dev/null +++ b/CT-Lab1-Project/build/ExtDll.iex @@ -0,0 +1,2 @@ +[EXTDLL] +Count=0 diff --git a/CT-Lab1-Project/build/datainit_ctboard.o b/CT-Lab1-Project/build/datainit_ctboard.o new file mode 100644 index 0000000000000000000000000000000000000000..e8488962eceebc5476368d8c98c76212bb7d3a50 GIT binary patch literal 2716 zcmcgu-*4M=5WlaTHqP2^X*!VTT4W(3er&OuwrpLsNu)_i-6d-kXKaEZ*Kyp|5XX`2 zR0B=ZKttkzhlvM-ctzp?i9MqUO(5|HFo`D~(EbCoCxifvyRV(J-3kIBagx7xpS$~h zzxO?#@9SUI>Ltb)^ofB4dkA1k;+CO#&Yp)X90LJmQs;DdA@zN3HFsfpId?I0Kc`Qu zPM|z-QM^C8b9^&1otyr2>DPNNF3&B4!tNj6B>daG(UmcMY*pBV>C{<5@Csl29}Pc! zdG}{>tl}da1z0D344^@L0^kbq;{Y4P#{f2oX8~Ho#{qVT=K$Kop8)6*e-hv-@lk+p zkc;>Lq*%RC(aO%QYdc!0VJ`Vr&@xwy!n|3V(OOnyxg9q$?WjoxHH4Dyb^VUhi5BHz z;K>BtwiC!(ejr!8rqgOUE%~%sSdbgO-(Hlhz_UV6e*Gn9-flWGGjBj?apO|x1mQ;D zdsb(o?AtvL*9$jFjeON=7V_(X|E6O{JU+?*kzkr0hQj4lJ`R)i2*BsW@kM=+@Y}@G z0Cy66H{mysi?EC%7Q*ltj{So8+Z13@A5Q|Wogu0a5Kpqn$rF=Ee3+afF&PJZYElq} zaYq9uP^>hcYKx6CQF>N7A&s*f%i@Uy6+{luh%|%GLnINiXxk@&T|1f^gEXXBT1bmh zN*a=erL-hT8R>{Lk{*??R`B%>h%&W+k1zyqjyP@l2-Wv}2q}2*aBUx^NUMnBjMKzD zql`%8ryxB*86OccT&CeWj^ipLe3RoLSWcF>#xa8*$vB_~54reltiV#1R{56*cNo?) zpPGfQW7S~NXCQN#zmSg-H3y`BFHzv}Q6deIj9&+L;c}f+gH_MS2OxpxP?fl&ghT+p zD5Cx{n0c8iP}LVOWFxZdw@kx*$4SJRZ zIK=g!>F`MhwTf~8uRXGNrH*^8(Oz*#$tP!;#d^)ek63Lv&EB?YHJgF6s}^9X=eAqL zC<@$WFLFXfX{^*t-6-zP)f7W1E>>q}l`D(YLP0T5(kqopLAkD9RxTM8GYD6z%9^oWELD`sQgK09uUCu(rBYndcV|J3oU0KiEl?u(-#b>)!}58a02#S! zZJS}Q+YOvBJb(7=TmhAKw|Bne2N-C+HiLKz@kMNvC|X@RJgE*Uo?=tt(~s_lDp2cS#h5Wekk$G~YPWw#Yro&yJJ5dN|> z)xCLbw}aF6u-n=4W6Vnm!~55Cj(Qi;t(XBe?t~bmJ|vMY=!Do;C{Pv>%3u#pq0C~; zvbvAy{xImQbSDsvfP}lnGGIVVpliOb;Cgm5F(1Z8=q?c2_#Vj`_ia>t zfFN1q7T&I4j8l&v#E+(ayBqicRQO?JbdTwiz8Co>2PF%Nq@j!)LS=GTAj3TT&h30F z9$J=yqKJtyaX49wK85r;kba696o@$^ZZW literal 0 HcmV?d00001 diff --git a/CT-Lab1-Project/build/hal_fmc.d b/CT-Lab1-Project/build/hal_fmc.d new file mode 100644 index 0000000..7361834 --- /dev/null +++ b/CT-Lab1-Project/build/hal_fmc.d @@ -0,0 +1,5 @@ +./build/hal_fmc.o: RTE\HAL\CT_Board_HS14_M0\hal_fmc.c \ + C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_fmc.h \ + C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_common.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h \ + C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\Device\Include\reg_stm32f4xx.h diff --git a/CT-Lab1-Project/build/hal_fmc.o b/CT-Lab1-Project/build/hal_fmc.o new file mode 100644 index 0000000000000000000000000000000000000000..372189e2b831f33dd0bc9740bb07e2e7ef807d94 GIT binary patch literal 7284 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 oJmV=H7|n4WuP}F4;0vogId;kCd literal 0 HcmV?d00001 diff --git a/CT-Lab1-Project/build/hal_gpio.d b/CT-Lab1-Project/build/hal_gpio.d new file mode 100644 index 0000000..48c4242 --- /dev/null +++ b/CT-Lab1-Project/build/hal_gpio.d @@ -0,0 +1,5 @@ +./build/hal_gpio.o: RTE\HAL\CT_Board_HS14_M0\hal_gpio.c \ + C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_gpio.h \ + C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\Device\Include\reg_stm32f4xx.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h \ + C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_common.h diff --git a/CT-Lab1-Project/build/hal_gpio.o b/CT-Lab1-Project/build/hal_gpio.o new file mode 100644 index 0000000000000000000000000000000000000000..6e6717b094a65f9dd5d987eaf97ed85d56225587 GIT binary patch literal 21384 zcmb_^33wgFm2P!ccdM^-Elak%+u?c_245|fj13sBtOZL*wvc2n#LSf}YXe(SB$z4Lh>eAdS7OVMK(vzcK9~)gUg_+TS>F zh-`_-I#BKwF}9AbCS$z&G$G8Guy7%fkK+$qHJ)B!-(`-Z4@?PH4Oqk0XlQ8SRf?%xeGV(pimSNX%!=F}ceo{_chC$CWMwpSUKtR)uxT zf%fl~9%yujuI^`Ug*CRnJ*#woqccAKD0!j$7#uf-+bfI#gJWSoJ8?*r97Ls~!X28Z z%8I!I6NlO>#E|Lh$He5Mje!S-#?$VZIpFLuy6rt?w{>@9es;IK+nAp{Am)n^(QoFG zWqXh4w{r7f+1_LHM;hM{wpI}~%tKXWuT*MzN?519u=gk;beAK;$)<1KyhP9Lfq3Rzdr zBtPV+7jcs#Zj70Tt>oC=lZ-8*=pu@4B8tlP(73(R8nJgd7|&}4tX!EWJ@%gND8_yiWB(+Ny~G@myGGh) zm5wyZA-U^}_Oa448pVZ1ZW_kI*<%jLv32OxI?P{J&kohE>&G*0NZ*;UD}0ZA!>)n! zUE!UfVRw%lHo8Njlg6C8M+U-U&PduWXN+QKa}51`v`0gUK4w>NoGZZFl?`9A;q&DA z=7_bxQgeLFLhm8nz3@Cle2W+gshR8JW0r4;sXisR&CqTJS8G><#@3yOzHG@1%yYHg zMaRIusntlcm-?vqvCr`b9=Kv$j2IPSRF0T;86)mMay$*SKC!YbJ;Ri(FRmka9bld# z;zLanhyI)OM}>9x`d5t`@Yxu(M=Z=lcL320+*3quHdd28$}6uz?lA`B*psCOW~>~` zj?rDmMz1g@0{zN*;MVbZ!*iiM2djJb9@#xzuh{8WkCSu7OW%BTF8VYbYj=N))~tB$ zl2@l=&0g)!x;wku=$8w!V>7s9M8txrJ446j3>ycgj^+&KjLyWWolPr0S3LXn!8s_A zg%JEC>&Ak?*hHmTa}$S1IzZAF4kw+*{hBsB3tA#~GUoOS_%M0lwXl%hzN<97aoR4? zKNwTiPB}<=#uw@x%X;P)>gBMW{6al?M$o_1-pypMkAc@Dv2xQ6sM2NgjL1-I%5eA~ zMRZ2QU68di{n+eb<5yXu*~8hRQ*f`FvdfE64&(lL^xlSi*3)3!h4r*i zci0^b!FniR{fm0*`0QA)W5bR$Y7g6^4(vDyJ73gW>9b?NjtM))s5y-LD(uLF9dB%T zeDOq@j=8<Zili?TH;k+`hK*;%C~`!Ep2QrJQ43{?HQjGG+M{VG(jLNAQ87F3(lp%!76*6-!Hb~YY6i&&=0MDK*DyItJOb5tJ zrI$9<@T$0zpjkPU_^Y5DDrW8Ugtje2hSo+goY1yOdy;|1g~*(bN+*DxOwDFwoPuH& zD%r4#O4+_jAg8c43R9!#&lD#%Q@OQt)~U0E$gzc~8Dx4|K*wG>i7hlgcLM+$9_o@p=f6rSTFL%>qn?G6JM_1)Q5D0K+Jk zw-G7tCrUn!+!WRbz%{hSLU{nBkZ&O~~v8g_GoE ztZ)-4c(rQfJ2P1cX0k7@=5Xuz zQ%=TQ^kQxvBjF4I&NvW&`DROqlX8`&6W>zTA%YoA+<;>}=LKNW7f zSN@shc6sH;UH7YA`R8HxVz2x}mV233-k;-M>6M?H>0aZNpPK7_%Paq9#J$lgKfOqV zc9S!AB8!77V^$p?&2kY{J%Zo7&9yUyhlXL9APiRxTUW|mhYgEFB=()tU4q7nx|85 zi11q;(O_8NcRgaG;f6o*h%=3F_`f{jEF&vy!y0?J$;b&$0&zQpMrsnR3<43{>5m;q0$ z_u$gmp5%RFARPCI4~#3qEgta~V<>#SSLZ|Hy6hdEz0FzXIwkqNLd%v)=^8V_}(A zrZ434eC0J_60H~>iZetghO$$F74$Uf%2Os0%`&O#OratBzA12P7NQ%MaqcJ3w3p|Y zBVrR?oY>3LF|ta23Cq*cz^#Hji{(`$2bFU!X;-bm&00*uCGuH&4ryO*+zX}Y`0dA4 zE;pzSNU??LD5r`?rDWYQ%wgkP zn+EUCIdbGf6^cJ|WjXSmnq}{iKBVu6lc`(p|As;gz<=Q+fZ(S*m%?w&Jq~hMtYTVsq=G5$+;5J5NSM><`|DBEC1YA`3ci~ z2K62$wf)k42j$19{G=tE4j6rrj21c9p!g9LPjP66wvbeYoqce$go?CZQ+FUjy31tpr-lxW6M@{nd3C7Lmm-c*p-Q1Zgjywa}i-Cdn6 zoqZ=pN_w_Oi0s(b(i3Uz>WP$Z-_o*mYs=Qi%4or=NJCfGwi6>wJ=>eNHFdT{zFgc= z)ZE;ZpMS2XYbeiKS5lo<+7Msc)zq^!zOKHYC|;AlxxHyyysf*VE7~kdPu#q*x230d zb5Gayrq0b}UCleTqt)Kcr47rgo3<1zukGnNucf(9?C9+6XzN6y&FxJ+0%qf<)mCnZ z*KVvWi?82MyRo`Dg}Jddg;BQQto2D&&4#k_cx5VM!^Vabm6D27hOZ9PsPe& z_XV2U2wOoHi4*jZO$EIqr4v49C^!tICF_G;f)Vtw0n_30oS@UB6LfGx!)ft~`at8v zS{G!MH>?Y&RMeCPXjLWEP<>ftaGIBu)>H=SRX3Cc4V9l+zP=%_;v4Eti`Q=OxkHTg z<)5M%8Icvw+VU0*I5>Nb{(vda3BwbkXKd_99E%QRgk=vGsgyn%Ie;%Q*wKXFl7Q(LMG_g>iB+}cJCKs}%H0?rE)7C@J>47n;N zWrfhK<$ARwLpdp1fqE=MPWAkF8^Lc3Vd;*rK_o zr3rL*Qy-|#`1YpW^OH8&NKKDMFz4q(4Xrh8P4ZOT!!y~t zr0N!QBG4^jr1X?neO+yB+x*S;e1+?^wV=Kl<&>V0LSIwgj$UqT3-$#5V0J*b`iMO?2Awzd$co7wda@9jyWLD#~xqXC7_*jK)x>M5ACd}5B`36JpZnl zcHRjeA@Iv6*#8|F?b;LdB0-z|*vYf(3dCeUjRn*>VQ3)B5BOXS3G@RziUalSzI1vg za}sLdl*y-=lL$cI#iKAvPt4<8dLHl6^GdqA%bNO{@~XR8CqYcF1YBr#Y>_JbMPyc}&}&GxNSc zA(RhYvO#sDjMJQ`Tw7(^j{J#;+EXAUOIeWmaWZJb$#dj?Tv~;ZO#1bdFzjf$yTD!z zjqIpBxz&z3HE3nfwr{nwtL)`Yo1H^enTk3ckij;nD9cuX$^oO57>3h^m*sx@gVL}= z>6dd?XQS6u@*fwq+L?~LQlir3j{N&YQ9JC&ZxD&D{OzKkf3KQ`JvH53W9PKlnKd>7 zFdtesU)*Xhl5d#^fg&P~d>ho4;OL}QL;=cByYb?vJwv_&!8`a@;z##&0c&gqK%k1MUK2467=9hNWwMb zbxNOKMoec>Od&!vUsBP0I2p|&hwG1OIL`SW4+oD{K1Pe?2}Wyb)XqaxP6UMxVzj1K z*>fN!7pHKKZ5Khg{L)qgQGSN06w<1wW#pywaL6$1+3D`Rx`*zm=wfSN!k~>o)!`0I z9|Z1UJFCh*9>xk`7v8`pFrr}OfT1XwYcvl@+-heXZa(cs%QMnXx93r%sObbI+Z{&} z-V0$KjY=`9qRUw{7f$CMOyPw>bZ22*IVH44cSuZ~UHJ8>+7;h2JPbOUh|?mJYD% zd&u>^n~t8);~N_leBk}KKd=tH~Z)}L67?AL!ife^c$deCFnuW~ zEfQ0)MJIHm6}t6kdlw3#OX=2l8uc;CZ-g&9ge*J;#Rmpo2@{y@&4XRmUw@{ zD-%lmJDq;FB$5;hL3e}3XL%$keuyuCeLngn&?Hw$zdBD)X@b7ACR3Vd$NrDJ!cPqB z88dK5K+(II)(44o1qu1_f%+L@I{cx!%AX8zJLE+^x(4(rA5Gt=Nna(Lg7GDZ;|H(! z;z7p|{7K@|){g>m{xFtMkz$4z4#;u($Co5N$8-eb{COs!A;mFbZ9slZLPiBC7Krk| zcq~YfFBZQF#Ak7e{8-TykRO{OUoMse|hb;T5`v9ZFh1fP5(=&e5bBG8RK`d>iPu@%q0i}=tN8;@>8fBJm%&p>zk z=#|jl=A&mqUhAVz1zqi+c7^?mn@iowR9gv{&X*?1Y)+9<)kfKC92K{6z5p;@y-UBFm zCE^@SE1i<0DoRq6r_j`LGD%UDBv6uq-VP*_6tx_yZkl=$Q9EvmFux;cg&`vJ)@6#i z8F7^?&Zj_R(hHQSs3E?~ycxorawb*5$Hskg;Ce9_L=g)wKBk~E@0;Qn)>yEgB=kB& zOu@-OVJxFogk1a<{bt73$0?!%TyjYWTAx$I+vZ9z)LMk8DWZToVjAB?y)uYYYj@Eh zG^+LvPgyN_dJ87Z9E*#8rebA#NfpL58#pmBYXcEWZdL89`cBioO9e zs+bhZupAu}&1$7@uIG6v2&WStgGA#_^a8>foNm%I-ARcL7a7-TJVWDI8qd|(tg%O9 zzeZZcWakQvH)tHwxJTo?8t>Qmu*SU_f3ERqjla}*K;tVKf3K0omD+tz<6kw>y_)zY z#+8un#e|s}b2QG@7}2;ywWs*&a^_2+Jl;~F2-_=v{;)cBmn7d5`2k?vt+hYrLNexmU+jdVno_&FMn z(RiH36Ev1;+@SHx8rwAXYP?kAwHp6f;~tIoX?$4YQyO2?_Bug% zSFW*MW0OWYz{~zSIOXK6e}V^kxZJSBOx z#xH9;Pvch!@!X=*p`>@M#xad|5aPM?ubQS)ouv1KM%t&Fc<%gG(}y&Eq*0=;q(7Mu z&!t(KUaD~gA)ZrfG)=$LNdGKCJg?|vA<^e+yintngm`{^OVeW-@6>o7;e5nV(@$u8 zLF2203x#-F(;sP+u4*q^<2=H}LM+vEp~e!8wHo6ZJ2hUc@j8vSXuMnFgM@hg(BVw# z-!C-2Ojs(!8=9u$Vssm5zG-lXw+8t>Kk zV~tN~d_m(ujkx{u{KoWWgqu9C>3K@?JBtwWnD$kKGYR$ni7-Mm=G`KVxrBQELx?Q` z&nwyj(EP%qpXU!A@r*G-%$qWe2no*@Jfa!#Nap#`pm7r+=EG)V4qD z;SZcTP=^4NB2_tx_^5W&NfK`FFlMxrK2_o@baj}+h449w63UAGD&O6>6bV{!$Re1M`vr-VSPQ^F{Gr?BT7>|OFizBwD37e zXIEcK^tAOGm*b#I^ZAGMDcKcTN%|O6(&UlFDPAQM^@$vH#_2GIJ}*C#rIh1Vhp}}y z4K)UQREKLQy0xcid&|)SKnp`3u{umssnR1kt-HsE!Pv}^6!~@%JRgRW*HO&#zNRg} z3%3*E_SmyM-rOC<$&J-MY6Yl8ebEBW{eq(Ss({)mv1ls}gp;ygP!vBQpmqXVPO zimwc)tz>J+`=Wk9QM@>yR?OBo_X~>RMFF)URztou>K7EnR|M2nuo~xnK~cOgpys0r zA%f9DAFE(R9A{%GWSsjY#qk24p`rkVT1i=)RwZTlv5%pwEoB+-DQN;nO zC_t_7Q-yva9|ZNvZwW1eiC%F|yP5x&ga^M$HeSI9+H3Fzh#7Rx05hfL#Xk&(CsQTC?Q1Z@@sYa|7+z@KU@a8TwU+Z8e!U=p!+|R{s?Uu(M zR2sfKS74)Iixp@B3Fbu1`iu$BCwf!E+ciR!$Y*gOHY5NS&LG7&&lTbZud{X7E5f!H zGDbAgrDMT1IOCes-EM5B6oGEDKguIj-UMSvvGb`xE>mrK-@p+DsF3j<`Xt{A;(uD9 zZ3)px+LUN}%PCeD!q+SEN%?}Z5Cbd{qJVjpOC5!CNP~KKVxEH*g=~d-2TV>u6K`MP zG5wIGbO;x0QE@(4@N}}>TNdg|bVmrH97n&xl82+d@@drX$4UX$E(hSEe;NMX$ z`G(&kF@TyQVqB{btiUe3PHgh8grzjk3_TG!FnWBUilmL;51eQ~h!cC0a*k^q^s%2u zqH*?8qgO!pdEhPT!9H-=Se>;>Dc~0Xr5KF8M+J*pKTZ`Xr=L26l)53bgycyGhZhlV z0=yU%^j(I&7)Yv8#E$X`PWAxDU-bw(+Una>)uha82!dl?^?e&A3E#V55QpL@L*x0x zMwwf|nu&=Bjad zb&uQ0cotq3QDQ5qh(EUGL{43#ikP3?AW>&|-iQM7H%1hHFHr}eaqqC9jR5v2iIj@;3WqIYCrRnneMp;yc9uc4aBcOIZHhYN;J{kwRO{iy5Rnivs?v}=Y>&USRiD(r)&mQb8$gjaF%jxVrSGGt z#3ugMfC(=vc6HD>cU zbjHXKmvR~YAQ`+j;UZ@lA2S%CX9#(}28;=}0uag)rWcea>%>r^+tY-gZ*2ZFoRgp^ zZn)5(YBL5}%{qR@7-E#7yUxPw$WpTw3TmcM1^VD_h#OJjl#lf|U44@j5fDf}q!zdh zoiV9fOF4%i#JLeArW^q|O;Iwzq~ivZYH=yU5hAr-H{Vyl;{O6`imr$N literal 0 HcmV?d00001 diff --git a/CT-Lab1-Project/build/hal_pwr.d b/CT-Lab1-Project/build/hal_pwr.d new file mode 100644 index 0000000..5a8be71 --- /dev/null +++ b/CT-Lab1-Project/build/hal_pwr.d @@ -0,0 +1,5 @@ +./build/hal_pwr.o: RTE\HAL\CT_Board_HS14_M0\hal_pwr.c \ + C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_pwr.h \ + C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_common.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h \ + C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\Device\Include\reg_stm32f4xx.h diff --git a/CT-Lab1-Project/build/hal_pwr.o b/CT-Lab1-Project/build/hal_pwr.o new file mode 100644 index 0000000000000000000000000000000000000000..b6d6f03d852fb4049bee346995e77eead134f9e5 GIT binary patch literal 6544 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 RrZUA=NgHHExzmW;{sUWwsD1zd literal 0 HcmV?d00001 diff --git a/CT-Lab1-Project/build/hal_rcc.d b/CT-Lab1-Project/build/hal_rcc.d new file mode 100644 index 0000000..184a1d5 --- /dev/null +++ b/CT-Lab1-Project/build/hal_rcc.d @@ -0,0 +1,5 @@ +./build/hal_rcc.o: RTE\HAL\CT_Board_HS14_M0\hal_rcc.c \ + C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_rcc.h \ + C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\HAL\Include\hal_common.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h \ + C:\Users\roman\AppData\Local\Arm\Packs\InES\CTBoard14_DFP\4.0.2\Device\Include\reg_stm32f4xx.h diff --git a/CT-Lab1-Project/build/hal_rcc.o b/CT-Lab1-Project/build/hal_rcc.o new file mode 100644 index 0000000000000000000000000000000000000000..d2a4a3c8ea846cc70583e6a04915de9ffa7756c3 GIT binary patch literal 12560 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 C2z@*N literal 0 HcmV?d00001 diff --git a/CT-Lab1-Project/build/task.d b/CT-Lab1-Project/build/task.d new file mode 100644 index 0000000..077f6b4 --- /dev/null +++ b/CT-Lab1-Project/build/task.d @@ -0,0 +1,2 @@ +./build/task.o: app\task.c app\utils_ctboard.h \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h diff --git a/CT-Lab1-Project/build/task.o b/CT-Lab1-Project/build/task.o new file mode 100644 index 0000000000000000000000000000000000000000..6b3a6a834d41e0b368fe202fd1bf93a12f08a845 GIT binary patch literal 5528 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 L9j02=q89Go*I7&m literal 0 HcmV?d00001 diff --git a/CT-Lab1-Project/build/utils_ctboard.d b/CT-Lab1-Project/build/utils_ctboard.d new file mode 100644 index 0000000..44fca61 --- /dev/null +++ b/CT-Lab1-Project/build/utils_ctboard.d @@ -0,0 +1,2 @@ +./build/utils_ctboard.o: app\utils_ctboard.c \ + C:\Keil_v5\ARM\ARMCLANG\Bin\..\include\stdint.h app\utils_ctboard.h diff --git a/CT-Lab1-Project/build/utils_ctboard.o b/CT-Lab1-Project/build/utils_ctboard.o new file mode 100644 index 0000000000000000000000000000000000000000..5d38d085bc846ab4fed7ed378be9f55261716b93 GIT binary patch literal 5540 zcmb_gYmAgv8Gg?<7rtGVVY@7_u(ggA=(@_sE-d$2W?3rbw#5b_wTruR`Cv!p=FBVw zTXjntZJMZy)(AG5{xF6nO(dp9O&T?+CiO@CVN6P*CTe2*p+DMaG+q*Xp7)%Yof#HU z<4fi|=e@t@_MNl*_2EY*j4{$6BfczhBKNOUO>9hINZtdjhrW;BrR!$FT#*I2A{V^t zm4h^)Z;Sld+sJ2^lwb8{4>dJ5*3;L$1#`_*Jmf*Ht9~WoGPUXFoBH`B^p~63nTD2i ze)@WBA@W7<3$ZI^!MhUqin)4t#-E9|#W#1EjfqvUNTPS`VB#)wa;=EBQVy*WiL3!c z5_^{KT`m&cAd$oa%a@}Y3*gfiPYqbzed`Xb+P6+59uv=r=)G*LjrBX7=ps8Y(@`K= zT@xb*loL7Skl?)+O=Jg}&*Ntvh&~1IjkllTV`#oX@xJJn0n0q^QHpbDUZpq{{U*gx zuR`$?Xl_tE9{n-JehjVjQgZq?XuUz^ihGx%hft6=$XLs~%kn{T@7M%RT0H&$*4xN3 znjRb5JnnmchsWROv4u8G59OLUMo%<7`p`3{Bh0*;#Wy{6x8>M-jvm~uvIakMdKEnm zz}nX_9B5>FROK9BGusDrL@mDe&}OpfJK5$t$&ogFkL%dfw_o#arthhy@2NIl<(j@9 z)={eOdiC8!-wb^FwdRcT^|j^!xg!|el{`@{7xpC6)nc}gE}cz2wmlrnX44}h zrzKsfOwHBvh1ztso++oRxgaYOd!|m-!fI`*S}vwbQwPe~xgxUErY25oKAO&qZa!Wu ze>BY2Wv*1qpDiItb~as=xqPXB5=E%hjCa7JIq!T&55z|9CZD53P&sHhnDHV$|Z5&gH6MttOQ+N(-x! zOV`sP|BvY%PhqjrVLFo+!>_=^)?j3}#Il%}@WSTeh{SuA9rLBjBm^HOuislOYt4XJ zXV#m0;`hoX!%zJ9Bge!nL#Nm1dA|vY;^SkUO!Tav7{3OwzdzysPcrVkPG9c7{fVBo zcuUE+KRfNXSNA6d3i4i3-XkzQTkH%KSgZP$MPdtdl0uK{r z7A-cK*x|1b_ERUjRt+Un#r)6{^5k zJWC<+d*Gqrc_+_I9^O$Sj^F8!k5K9-9e%`N=y1;AlMbIIqTbIs{so6GIs7&e$07Hxhxz0=pdHT>@plgYaR$Zf#!-t90+#P~Ki93sN`eGYZ~Q12Ld;4UJ9-tSQ3;TUN=WBO(+JQen z#5$aC{3#;pn00)Ch&puLVLwkEbu2jj^F-wTy5p}AQAdf0ylRJh-y)AZKPMvoUx*92Kd^B?zO~sk{x~_qnD`X9v4@=(s%R!#34^abn+t@UF3hW3gDw-<^;L z&k~X_=ORH6ujClSm$w$h>~-VHwtt-Q?HTn`GQ^WB@<(lLQhLsHAw+-{#h|3uOae45{_GhE6Gzu4qm*2$~n>?KP2_hMe2E+i4kOt2d zTMR_sl`@j{x&>{qlXLJTpTZC3S_r!0y~$RW7@2;kOrv2Xf;;er6&S2^BV>gs-OIsh z5&kFaU1+cnaFc=U65QROlosk{5qFQzeypr#Kh&Zo7{&}~`T)gJK<~svq3m8~jQ0^y9%?3X$X<%{OiD#Xj3SZWt z)f&1a<#XV-p-)h5^q;jbNsG39SiZ^*55nH2T+49Tn!+PGY>Wx>vS8<$MVjuEUSYJ` z>e4*qoNjbHvtVMepb%WLtFGH==4 LGO=yjwrwX9+qNbX-^||sx#$1y-Oo9vpL7b{ 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 joJP2SkKd36$yQ{pWL5x>a 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ℑZ5g}=Ywizxw-E4fce(e4k)Xl~pp>90 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%0A6vkhjbn@C@%o=E}oqQn`G(b%-O_o(#diNKu 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 V5ypggU@(Lb@BaNq3P{@0{|9aL1&aUx literal 0 HcmV?d00001 diff --git a/utils_ctboard.c b/utils_ctboard.c new file mode 100644 index 0000000..5c4e1eb --- /dev/null +++ b/utils_ctboard.c @@ -0,0 +1,103 @@ +/* ---------------------------------------------------------------------------- + * -- _____ ______ _____ - + * -- |_ _| | ____|/ ____| - + * -- | | _ __ | |__ | (___ Institute of Embedded Systems - + * -- | | | '_ \| __| \___ \ Zurich University of - + * -- _| |_| | | | |____ ____) | Applied Sciences - + * -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - + * ---------------------------------------------------------------------------- + * -- + * -- Project : CT Board - Cortex M4 + * -- Description : Utilities for ct board. + * -- + * -- $Id: utils_ctboard.c 2160 2015-06-08 12:28:00Z feur $ + * ------------------------------------------------------------------------- */ + +#include +#include "utils_ctboard.h" + +/* ---------------------------------------------------------------------------- + * -- Functions + * ---------------------------------------------------------------------------- + */ + +/* + * See header file + */ +uint8_t read_byte(uint32_t address) +{ + uint8_t *pointer; + pointer = (uint8_t *)address; + return *pointer; +} + +/* + * See header file + */ +uint16_t read_halfword(uint32_t address) +{ + uint16_t *pointer; + pointer = (uint16_t *)address; + return *pointer; +} + +/* + * See header file + */ +uint32_t read_word(uint32_t address) +{ + uint32_t *pointer; + pointer = (uint32_t *)address; + return *pointer; +} + +/* + * See header file + */ +uint64_t read_doubleword(uint32_t address) +{ + uint64_t *pointer; + pointer = (uint64_t *)address; + return *pointer; +} + + +/* + * See header file + */ +void write_byte(uint32_t address, uint8_t data) +{ + uint8_t *pointer; + pointer = (uint8_t *)address; + *pointer = data; +} + +/* + * See header file + */ +void write_halfword(uint32_t address, uint16_t data) +{ + uint16_t *pointer; + pointer = (uint16_t *)address; + *pointer = data; +} + +/* + * See header file + */ +void write_word(uint32_t address, uint32_t data) +{ + uint32_t *pointer; + pointer = (uint32_t *)address; + *pointer = data; +} + +/* + * See header file + */ +void write_doubleword(uint32_t address, uint64_t data) +{ + uint64_t *pointer; + pointer = (uint64_t *)address; + *pointer = data; +} diff --git a/utils_ctboard.h b/utils_ctboard.h new file mode 100644 index 0000000..b946a56 --- /dev/null +++ b/utils_ctboard.h @@ -0,0 +1,52 @@ +/* ---------------------------------------------------------------------------- + * -- _____ ______ _____ - + * -- |_ _| | ____|/ ____| - + * -- | | _ __ | |__ | (___ Institute of Embedded Systems - + * -- | | | '_ \| __| \___ \ Zurich University of - + * -- _| |_| | | | |____ ____) | Applied Sciences - + * -- |_____|_| |_|______|_____/ 8401 Winterthur, Switzerland - + * ---------------------------------------------------------------------------- + * -- + * -- Module : ctboard_utils + * -- Description : Interface for module. + * -- + * -- $Id: utils_ctboard.h 1122 2015-01-06 13:57:04Z feur $ + * ------------------------------------------------------------------------- */ +#ifndef _UTILS_CTBOARD +#define _UTILS_CTBOARD + +#include + +/* ---------------------------------------------------------------------------- + * -- Function prototypes + * ---------------------------------------------------------------------------- + */ + +/* + * Functions to read either a byte, halfword, word or + * doubleword from an arbitrary address. + * @param address: address to read from (32 bit) + * @retval data @ address + */ +uint8_t read_byte(uint32_t address); +uint16_t read_halfword(uint32_t address); +uint32_t read_word(uint32_t address); +uint64_t read_doubleword(uint32_t address); + + +/* + * Functions to write either a byte, halfword, word or + * doubleword to an arbitrary address. + * @param address: address to write to (32 bit) + * data: data to write @ address + */ +void write_byte(uint32_t address, uint8_t data); +void write_halfword(uint32_t address, uint16_t data); +void write_word(uint32_t address, uint32_t data); +void write_doubleword(uint32_t address, uint64_t data); + +/* ---------------------------------------------------------------------------- + * -- Header file end + * ---------------------------------------------------------------------------- + */ +#endif