From 26e73f451e47e6f4e8e3cffaeb3435e500f94789 Mon Sep 17 00:00:00 2001 From: cbb <2625274797@qq.com> Date: Thu, 25 Dec 2025 12:07:06 +0800 Subject: [PATCH] init --- .clang-format | 7 + .continue/mcpServers/new-mcp-server.yaml | 10 + .vscode/c_cpp_properties.json | 18 + .vscode/launch.json | 84 + .vscode/settings.json | 7 + .vscode/tasks.json | 112 + Robot_V2.cbuild-idx.yml | 17 + Robot_V2.cbuild-pack.yml | 8 + Robot_V2.csolution.yml | 52 + Robot_V2/.clangd | 424 ++++ Robot_V2/Algorithm/DengFOC.cpp | 290 +++ Robot_V2/Algorithm/DengFOC.h | 411 ++++ Robot_V2/Algorithm/Filter.cpp | 151 ++ Robot_V2/Algorithm/Filter.h | 164 ++ Robot_V2/Algorithm/pid.cpp | 60 + Robot_V2/Algorithm/pid.h | 25 + Robot_V2/Algorithm/thermal.cpp | 0 Robot_V2/Algorithm/thermal.h | 7 + .../GD32C103CB/ac6_linker_script.sct.src | 109 + Robot_V2/RTE/Device/GD32C103CB/gd32c10x_adc.c | 992 ++++++++ .../GD32C103CB/gd32c10x_adc.c.base@1.0.0 | 992 ++++++++ Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c | 332 +++ .../GD32C103CB/gd32c10x_bkp.c.base@1.0.0 | 332 +++ Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c | 1473 ++++++++++++ .../GD32C103CB/gd32c10x_can.c.base@1.0.0 | 1469 ++++++++++++ Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c | 127 + .../GD32C103CB/gd32c10x_crc.c.base@1.0.0 | 127 + Robot_V2/RTE/Device/GD32C103CB/gd32c10x_ctc.c | 388 ++++ .../GD32C103CB/gd32c10x_ctc.c.base@1.0.0 | 388 ++++ Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dac.c | 539 +++++ .../GD32C103CB/gd32c10x_dac.c.base@1.0.0 | 539 +++++ Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.c | 133 ++ .../GD32C103CB/gd32c10x_dbg.c.base@1.0.0 | 133 ++ Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c | 737 ++++++ .../GD32C103CB/gd32c10x_dma.c.base@1.0.0 | 737 ++++++ .../RTE/Device/GD32C103CB/gd32c10x_eval.c | 222 ++ .../GD32C103CB/gd32c10x_eval.c.base@1.0.0 | 222 ++ .../RTE/Device/GD32C103CB/gd32c10x_exmc.c | 229 ++ .../GD32C103CB/gd32c10x_exmc.c.base@1.0.0 | 229 ++ .../RTE/Device/GD32C103CB/gd32c10x_exti.c | 247 ++ .../GD32C103CB/gd32c10x_exti.c.base@1.0.0 | 247 ++ Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c | 1034 +++++++++ .../GD32C103CB/gd32c10x_fmc.c.base@1.0.0 | 1033 +++++++++ .../RTE/Device/GD32C103CB/gd32c10x_fwdgt.c | 215 ++ .../GD32C103CB/gd32c10x_fwdgt.c.base@1.0.0 | 215 ++ .../RTE/Device/GD32C103CB/gd32c10x_gpio.c | 538 +++++ .../GD32C103CB/gd32c10x_gpio.c.base@1.0.0 | 538 +++++ Robot_V2/RTE/Device/GD32C103CB/gd32c10x_i2c.c | 797 +++++++ .../GD32C103CB/gd32c10x_i2c.c.base@1.0.0 | 797 +++++++ Robot_V2/RTE/Device/GD32C103CB/gd32c10x_it.c | 139 ++ .../RTE/Device/GD32C103CB/gd32c10x_misc.c | 184 ++ .../GD32C103CB/gd32c10x_misc.c.base@1.0.0 | 184 ++ Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c | 294 +++ .../GD32C103CB/gd32c10x_pmu.c.base@1.0.0 | 294 +++ Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c | 1249 ++++++++++ .../GD32C103CB/gd32c10x_rcu.c.base@1.0.0 | 1249 ++++++++++ Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rtc.c | 281 +++ .../GD32C103CB/gd32c10x_rtc.c.base@1.0.0 | 281 +++ Robot_V2/RTE/Device/GD32C103CB/gd32c10x_spi.c | 855 +++++++ .../GD32C103CB/gd32c10x_spi.c.base@1.0.0 | 855 +++++++ .../RTE/Device/GD32C103CB/gd32c10x_timer.c | 2039 +++++++++++++++++ .../GD32C103CB/gd32c10x_timer.c.base@1.0.0 | 2039 +++++++++++++++++ .../RTE/Device/GD32C103CB/gd32c10x_usart.c | 890 +++++++ .../GD32C103CB/gd32c10x_usart.c.base@1.0.0 | 890 +++++++ .../RTE/Device/GD32C103CB/gd32c10x_wwdgt.c | 125 + .../GD32C103CB/gd32c10x_wwdgt.c.base@1.0.0 | 125 + .../Device/GD32C103CB/regions_GD32C103CB.h | 101 + .../RTE/Device/GD32C103CB/startup_gd32c10x.s | 383 ++++ .../GD32C103CB/startup_gd32c10x.s.base@1.0.0 | 381 +++ .../RTE/Device/GD32C103CB/system_gd32c10x.c | 947 ++++++++ .../GD32C103CB/system_gd32c10x.c.base@1.0.0 | 947 ++++++++ .../RTE/_Debug_GD32C103CB/RTE_Components.h | 50 + .../RTE/_Release_GD32C103CB/RTE_Components.h | 46 + Robot_V2/Robot_V2.cproject.yml | 62 + Robot_V2/device/ADC.cpp | 274 +++ Robot_V2/device/Can.cpp | 697 ++++++ Robot_V2/device/Can.h | 109 + Robot_V2/device/Timer.cpp | 109 + Robot_V2/device/Timer.h | 27 + Robot_V2/device/adc.h | 40 + Robot_V2/device/ang_sensor.cpp | 306 +++ Robot_V2/device/ang_sensor.h | 40 + Robot_V2/device/motor.cpp | 38 + Robot_V2/device/motor.h | 11 + Robot_V2/device/test.cpp | 25 + Robot_V2/main.cpp | 43 + Robot_V2/main.h | 41 + Robot_V2/sys/OTA.cpp | 120 + Robot_V2/sys/OTA.h | 28 + Robot_V2/sys/config.h | 21 + Robot_V2/sys/flash.cpp | 453 ++++ Robot_V2/sys/flash.h | 71 + Robot_V2/sys/health.cpp | 103 + Robot_V2/sys/health.h | 40 + Robot_V2/sys/initial.cpp | 93 + Robot_V2/sys/initial.h | 30 + Robot_V2/sys/systick.cpp | 117 + Robot_V2/sys/systick.h | 62 + out/Robot_V2+GD32C103CB.cbuild-run.yml | 44 + .../Robot_V2.Debug+GD32C103CB.cbuild.yml | 406 ++++ .../clangd/index/Can.cpp.189F590D64E2E593.idx | Bin 0 -> 30178 bytes .../clangd/index/Can.h.8B31786D14DBA198.idx | Bin 0 -> 6226 bytes .../clangd/index/OTA.cpp.50C8AB01C9FB489F.idx | Bin 0 -> 15640 bytes .../clangd/index/OTA.h.A31C5333BB5BD1BE.idx | Bin 0 -> 1356 bytes .../index/__assert.E345279A48A82EDB.idx | Bin 0 -> 886 bytes .../__assertion_handler.A06D3288BF6A29D6.idx | Bin 0 -> 518 bytes .../__bit_reference.5581F6325EEF88AD.idx | Bin 0 -> 60674 bytes .../index/__config.30A38D3F581253B6.idx | Bin 0 -> 4866 bytes .../index/__hash_table.6BACF26D905ACE43.idx | Bin 0 -> 69392 bytes .../index/__locale.CBD5BB79C9491443.idx | Bin 0 -> 49012 bytes .../index/__mbstate_t.h.E3CAD0BE2BA17A12.idx | Bin 0 -> 452 bytes .../index/__node_handle.4DD592B5DB5DF1DD.idx | Bin 0 -> 5230 bytes .../__posix_l_fallback.h.3DA06B8078D52A15.idx | Bin 0 -> 5466 bytes .../index/__split_buffer.4058F910FA3FAAED.idx | Bin 0 -> 43160 bytes .../__std_mbstate_t.h.4C6E89C1BEA8FB5D.idx | Bin 0 -> 724 bytes ...__strtonum_fallback.h.2071A03A8D89DB05.idx | Bin 0 -> 1546 bytes .../index/__undef_macros.57D3C71F3A7CDC3F.idx | Bin 0 -> 188 bytes .../__verbose_abort.F5A053E88C7D8970.idx | Bin 0 -> 510 bytes .../clangd/index/abi.h.FF4E2174A05AF0D4.idx | Bin 0 -> 1038 bytes .../clangd/index/abs.h.88A27D96B3A57198.idx | Bin 0 -> 850 bytes .../index/access.h.145E1499C171D131.idx | Bin 0 -> 1816 bytes .../index/access.h.AE1FF68D71BE4910.idx | Bin 0 -> 1806 bytes .../index/accumulate.h.5466F2AED9365208.idx | Bin 0 -> 1248 bytes .../index/add_const.h.EE1659CCC75953B2.idx | Bin 0 -> 756 bytes .../index/add_cv.h.D828F08421293930.idx | Bin 0 -> 744 bytes ...dd_lvalue_reference.h.2BE6101D7483F1A8.idx | Bin 0 -> 866 bytes .../index/add_pointer.h.5A03EB062085C90F.idx | Bin 0 -> 1096 bytes ...dd_rvalue_reference.h.F9D3F9E30C668025.idx | Bin 0 -> 844 bytes .../index/add_volatile.h.47B164B5FB9A18CF.idx | Bin 0 -> 768 bytes .../index/addressof.h.904B359A9449298E.idx | Bin 0 -> 666 bytes ...adjacent_difference.h.86AC4FED5FB91107.idx | Bin 0 -> 1598 bytes .../adjacent_find.h.D96FBABC9AAF3B9B.idx | Bin 0 -> 2524 bytes .../index/advance.h.5266297F85371B8C.idx | Bin 0 -> 2726 bytes .../index/algorithm.B30359D947B69808.idx | Bin 0 -> 12966 bytes .../index/aliases.h.E1DBA59293C59E0C.idx | Bin 0 -> 5354 bytes .../aliasing_iterator.h.D9524FD581BAF72D.idx | Bin 0 -> 2956 bytes .../clangd/index/align.h.FD51B79B3D7C593C.idx | Bin 0 -> 724 bytes .../aligned_storage.h.E479E04EBB5F494C.idx | Bin 0 -> 4100 bytes .../aligned_union.h.8B4152DD83941B69.idx | Bin 0 -> 1424 bytes .../index/alignment_of.h.16160A0F7457F061.idx | Bin 0 -> 950 bytes .../index/all_of.h.5995C1323207F3C0.idx | Bin 0 -> 1036 bytes .../allocate_at_least.h.372CC9DA473A1A11.idx | Bin 0 -> 768 bytes .../allocation_guard.h.C0FC9EA0DABE6EB3.idx | Bin 0 -> 1832 bytes .../index/allocator.h.E2154D9C2D533F58.idx | Bin 0 -> 5826 bytes .../allocator_arg_t.h.C61E4D03CAF2DB72.idx | Bin 0 -> 1790 bytes ...llocator_destructor.h.95895B512A88B71D.idx | Bin 0 -> 736 bytes .../allocator_traits.h.C39E12D9B656333D.idx | Bin 0 -> 8534 bytes .../index/any_of.h.596A83D1376FF467.idx | Bin 0 -> 1036 bytes .../index/arithmetic.h.472E5FB4788CDB44.idx | Bin 0 -> 1080 bytes .../clangd/index/arm.h.B36414F100A03BC5.idx | Bin 0 -> 1738 bytes .../clangd/index/array.823BB78AF2DC6FB8.idx | Bin 0 -> 20154 bytes .../clangd/index/array.h.4A931171DE6421B4.idx | Bin 0 -> 1558 bytes .../index/as_const.h.583845552C2B6EFC.idx | Bin 0 -> 1038 bytes .../index/assignable.h.F6EB480E6DA2D825.idx | Bin 0 -> 1066 bytes .../clangd/index/atomic.6F0B5D149341F7F2.idx | Bin 0 -> 2890 bytes .../index/atomic.h.796FC25F2505F6EC.idx | Bin 0 -> 17184 bytes .../index/atomic_base.h.4017A932C4226FB2.idx | Bin 0 -> 5810 bytes .../index/atomic_flag.h.6E0A411934D9EC58.idx | Bin 0 -> 5330 bytes .../index/atomic_init.h.7B0EB7135A1804F5.idx | Bin 0 -> 426 bytes .../atomic_lock_free.h.D1E9374D2EC4C0B1.idx | Bin 0 -> 590 bytes .../index/atomic_sync.h.E5D7BA1914710C56.idx | Bin 0 -> 3190 bytes .../index/auto_cast.h.8CF9D0A292C2A48A.idx | Bin 0 -> 480 bytes .../index/auto_ptr.h.C13AC252E0D54B59.idx | Bin 0 -> 352 bytes .../index/availability.h.4A3E0FF96F5383BC.idx | Bin 0 -> 1982 bytes ...ack_insert_iterator.h.75B14E10F5662592.idx | Bin 0 -> 3050 bytes ...noulli_distribution.h.54396DDE7A3A5D77.idx | Bin 0 -> 4200 bytes .../binary_function.h.0270CAD7354089A4.idx | Bin 0 -> 490 bytes .../binary_negate.h.6728A6211F595C4E.idx | Bin 0 -> 1182 bytes .../binary_search.h.8C6FD15D08393FE0.idx | Bin 0 -> 1922 bytes .../clangd/index/bind.h.58C1F5CA64878D61.idx | Bin 0 -> 7712 bytes .../index/binder1st.h.FDD57B15FD661708.idx | Bin 0 -> 538 bytes .../index/binder2nd.h.EC8AE384DC5BFB06.idx | Bin 0 -> 538 bytes ...nomial_distribution.h.8DC1D7F2150DA55A.idx | Bin 0 -> 5458 bytes .../clangd/index/bit.11EEF07B2FA18BD4.idx | Bin 0 -> 1052 bytes .../index/bit_cast.h.BAF1058F560618B6.idx | Bin 0 -> 584 bytes .../bit_reference.h.7E0EAF5F9323DE3A.idx | Bin 0 -> 378 bytes .../clangd/index/blsr.h.6DFA61E449FF7F15.idx | Bin 0 -> 522 bytes .../boolean_testable.h.763055A39DDA24B7.idx | Bin 0 -> 664 bytes .../index/bounded_iter.h.2E95ED3788A69ED6.idx | Bin 0 -> 9214 bytes ...oyer_moore_searcher.h.78D863651A13F341.idx | Bin 0 -> 18366 bytes ...sd_locale_fallbacks.h.2B5764B2CC73DEC1.idx | Bin 0 -> 1816 bytes .../index/buffer.h.8E0B1954A377CF97.idx | Bin 0 -> 4166 bytes ...iltin_new_allocator.h.A33AB4FC7FC5A377.idx | Bin 0 -> 1060 bytes .../can_extract_key.h.DDF8C1F767140C73.idx | Bin 0 -> 1256 bytes ...cauchy_distribution.h.4B184DA389313C79.idx | Bin 0 -> 5096 bytes .../clangd/index/cctype.41E40031BAD0B66A.idx | Bin 0 -> 1942 bytes .../clangd/index/cerrno.0507BFB39A251894.idx | Bin 0 -> 452 bytes .../index/char_traits.h.ACAAAA892C3B7AF3.idx | Bin 0 -> 24030 bytes .../check_memory_order.h.45FFDD340ACC9CCA.idx | Bin 0 -> 432 bytes ...quared_distribution.h.AA839B6E0FF025AC.idx | Bin 0 -> 4652 bytes .../clangd/index/clamp.h.8681AE4D76E3C110.idx | Bin 0 -> 1194 bytes .../clamp_to_integral.h.96582E5A141DFB65.idx | Bin 0 -> 4854 bytes .../class_or_enum.h.08AB965AA082F9F6.idx | Bin 0 -> 924 bytes .../clangd/index/climits.E28CBAF95D6297E5.idx | Bin 0 -> 424 bytes .../clangd/index/clocale.845299ED330323A2.idx | Bin 0 -> 838 bytes .../clangd/index/cmath.897A1FBCD85B8687.idx | Bin 0 -> 25450 bytes ...comparison_category.h.79D3A3A9F48F543A.idx | Bin 0 -> 782 bytes .../common_reference.h.53D18AD8F96D0322.idx | Bin 0 -> 1596 bytes ...mmon_reference_with.h.D237B3CB1BE83226.idx | Bin 0 -> 808 bytes .../index/common_type.h.D1E41E04223A2EA1.idx | Bin 0 -> 1922 bytes .../clangd/index/comp.h.33EFFEB59228A79B.idx | Bin 0 -> 760 bytes .../comp_ref_type.h.7C830A33ED20669F.idx | Bin 0 -> 900 bytes .../clangd/index/compare.B226725F596BB269.idx | Bin 0 -> 1048 bytes .../compare_three_way.h.77E3698F10D0AD82.idx | Bin 0 -> 670 bytes ...re_three_way_result.h.4A4AF3300AE42C79.idx | Bin 0 -> 682 bytes .../index/compiler.h.7B172C72923E4560.idx | Bin 0 -> 298 bytes .../index/complex.h.BE75731799287E48.idx | Bin 0 -> 638 bytes .../compressed_pair.h.03142A32A127C044.idx | Bin 0 -> 5066 bytes .../index/concepts.5626189FF631F015.idx | Bin 0 -> 716 bytes .../index/concepts.h.04CAA957A0692B88.idx | Bin 0 -> 1564 bytes .../index/concepts.h.259B56F1E2A3749C.idx | Bin 0 -> 4062 bytes .../index/concepts.h.36E8012122A56AC9.idx | Bin 0 -> 2844 bytes .../index/concepts.h.FCB0BD7182788737.idx | Bin 0 -> 1680 bytes .../condition_variable.h.FB8A7741F32CDE7E.idx | Bin 0 -> 7936 bytes .../index/conditional.h.A60C42E31A26E14B.idx | Bin 0 -> 1226 bytes .../index/config.h.64C4A69BAD8C2642.idx | Bin 0 -> 1238 bytes .../index/conjunction.h.C3C8BCA48E138593.idx | Bin 0 -> 1494 bytes ...nstexpr_c_functions.h.C41E86195B675CFF.idx | Bin 0 -> 4248 bytes .../index/construct_at.h.8575EA892FE66828.idx | Bin 0 -> 2950 bytes .../constructible.h.8305E16F97D03B92.idx | Bin 0 -> 804 bytes ...er_compatible_range.h.34DF8E0859E8CA0A.idx | Bin 0 -> 672 bytes .../index/contention_t.h.94CE35A00C98221B.idx | Bin 0 -> 624 bytes ...convert_to_integral.h.BB55A1173E0E5D1E.idx | Bin 0 -> 1290 bytes .../convertible_to.h.AF7FB873A9C3BF81.idx | Bin 0 -> 666 bytes .../clangd/index/copy.h.973102E8206E202F.idx | Bin 0 -> 3090 bytes .../copy_backward.h.189F2F6CB7362E78.idx | Bin 0 -> 4448 bytes .../index/copy_cv.h.F0B051EE47E984C0.idx | Bin 0 -> 380 bytes .../index/copy_cvref.h.5E9807E6078DC895.idx | Bin 0 -> 794 bytes .../index/copy_if.h.AB9F6E505087491D.idx | Bin 0 -> 1072 bytes .../copy_move_common.h.D563070E7254EC13.idx | Bin 0 -> 3190 bytes .../index/copy_n.h.0AC42427849132F9.idx | Bin 0 -> 1792 bytes .../index/copyable.h.1156F81A09F1AD8E.idx | Bin 0 -> 784 bytes .../index/copysign.h.AAC8FA3FDAEEA894.idx | Bin 0 -> 1104 bytes .../index/core_cm4.h.CC705C8F3FEC8944.idx | Bin 0 -> 37022 bytes .../core_cm4_simd.h.E8FC04F231FE4092.idx | Bin 0 -> 7060 bytes .../index/core_cmFunc.h.77722454BC93B8E2.idx | Bin 0 -> 6030 bytes .../index/core_cmInstr.h.CDBA5A00B6B2E1D6.idx | Bin 0 -> 6680 bytes .../clangd/index/count.h.BDE8C409E04FEAC3.idx | Bin 0 -> 4404 bytes .../index/count_if.h.7834C7F763BF4AE0.idx | Bin 0 -> 1258 bytes .../index/countl.h.C435FDEF26928854.idx | Bin 0 -> 1404 bytes .../index/countr.h.23679444F87C5A17.idx | Bin 0 -> 1232 bytes .../clangd/index/cstdarg.8B2752D53B87D8FA.idx | Bin 0 -> 602 bytes .../clangd/index/cstddef.4FB307A386DE5065.idx | Bin 0 -> 3560 bytes .../clangd/index/cstdint.A28258D7D90B4F09.idx | Bin 0 -> 3688 bytes .../clangd/index/cstdio.AD9B4EC480E77860.idx | Bin 0 -> 5632 bytes .../clangd/index/cstdlib.65BC9BB3F270A9D6.idx | Bin 0 -> 4966 bytes .../clangd/index/cstring.B0715BA78B825871.idx | Bin 0 -> 3288 bytes .../clangd/index/ctime.9CD23D8851A90920.idx | Bin 0 -> 1926 bytes .../clangd/index/ctype.h.A859AB71FC1AF149.idx | Bin 0 -> 424 bytes .../clangd/index/ctype.h.D2BF01A5EAB1C8AD.idx | Bin 0 -> 3580 bytes .../clangd/index/cwchar.E408FC646F0D5547.idx | Bin 0 -> 9008 bytes .../clangd/index/cwctype.38212B9A6D9B3D46.idx | Bin 0 -> 2804 bytes .../cxx_atomic_impl.h.F57C898D119C5E18.idx | Bin 0 -> 4142 bytes .../index/dangling.h.255EB75741B9F7D0.idx | Bin 0 -> 776 bytes .../clangd/index/data.h.5D1DEB009CA3CFD8.idx | Bin 0 -> 1182 bytes .../clangd/index/data.h.80DECDAC5E7932D1.idx | Bin 0 -> 1954 bytes .../index/datasizeof.h.AD464932AD7356B0.idx | Bin 0 -> 776 bytes .../clangd/index/decay.h.F6682406F3F8D668.idx | Bin 0 -> 1746 bytes .../index/declval.h.EE8ED7882A74A218.idx | Bin 0 -> 612 bytes ...fault_random_engine.h.B9B906BAD56E3609.idx | Bin 0 -> 648 bytes .../default_searcher.h.E240A1A8B768056E.idx | Bin 0 -> 1624 bytes .../default_sentinel.h.B897A3FD54947BCA.idx | Bin 0 -> 408 bytes .../dependent_type.h.ACCA67AD0B14D4AC.idx | Bin 0 -> 410 bytes .../index/derived_from.h.C6BDD379E985EA2E.idx | Bin 0 -> 670 bytes .../index/destruct_n.h.92E52D2853C033CB.idx | Bin 0 -> 1326 bytes .../index/destructible.h.705C0699A9D10199.idx | Bin 0 -> 548 bytes .../index/desugars_to.h.2195A466DF580F14.idx | Bin 0 -> 384 bytes .../different_from.h.BD0F6307B6F0B6FC.idx | Bin 0 -> 664 bytes ...iscard_block_engine.h.8093DA26EE4C9233.idx | Bin 0 -> 5630 bytes ...screte_distribution.h.0801BDF957890E93.idx | Bin 0 -> 11034 bytes .../index/disjunction.h.CE6E738F5B4FA686.idx | Bin 0 -> 798 bytes .../index/distance.h.DA7B3C92281713E9.idx | Bin 0 -> 1888 bytes .../index/duration.h.DB9974C660070F66.idx | Bin 0 -> 20250 bytes .../clangd/index/empty.h.2ADEC2E99BEFFA0D.idx | Bin 0 -> 1432 bytes .../clangd/index/empty.h.AEF655102DC8EC54.idx | Bin 0 -> 894 bytes .../clangd/index/empty.h.AFF76EF902F5662D.idx | Bin 0 -> 374 bytes ...able_borrowed_range.h.13DE2DEF7A398A5E.idx | Bin 0 -> 412 bytes .../index/enable_if.h.BC3C82D5E21D7639.idx | Bin 0 -> 912 bytes .../enable_insertable.h.C29A8AA97AECB407.idx | Bin 0 -> 408 bytes .../index/enable_view.h.CF466F520822E115.idx | Bin 0 -> 1050 bytes .../clangd/index/equal.h.2A6141FBF10917BC.idx | Bin 0 -> 5286 bytes .../index/equal_range.h.70732B9350D3CD9C.idx | Bin 0 -> 3936 bytes ...equality_comparable.h.E7D218DA88BB04B6.idx | Bin 0 -> 964 bytes .../erase_if_container.h.024EDCFF0B1B8EF6.idx | Bin 0 -> 1244 bytes .../clangd/index/errc.h.75D0FD53E26E4F73.idx | Bin 0 -> 9296 bytes .../clangd/index/errno.h.10371C1DDC4BFC92.idx | Bin 0 -> 464 bytes .../clangd/index/errno.h.42779960C98FC621.idx | Bin 0 -> 2378 bytes .../error_category.h.239968016733BE57.idx | Bin 0 -> 2426 bytes .../index/error_code.h.AC13E4769EAF7D59.idx | Bin 0 -> 5180 bytes .../error_condition.h.3BEAAC54DCEB195F.idx | Bin 0 -> 4226 bytes .../error_functions.h.9935817FF1F33E52.idx | Bin 0 -> 922 bytes .../index/exception.738A51C043E5C14F.idx | Bin 0 -> 1334 bytes .../index/exception.h.D8C5111A308F2692.idx | Bin 0 -> 2200 bytes .../exception_guard.h.D545BBEB7909E6CA.idx | Bin 0 -> 1720 bytes .../exception_ptr.h.24C47F5B333FB7E1.idx | Bin 0 -> 2868 bytes .../index/exchange.h.300D90E40B3A7734.idx | Bin 0 -> 1442 bytes .../exclusive_scan.h.C4AD492DBBA992DB.idx | Bin 0 -> 1552 bytes .../index/execution.986FAA929C11DE44.idx | Bin 0 -> 1008 bytes ...ential_distribution.h.280BEB34D99FDD75.idx | Bin 0 -> 4986 bytes ...ponential_functions.h.55D5B21C0FBB1C0E.idx | Bin 0 -> 2178 bytes ...pheme_cluster_table.h.7559E4A8E1B3D831.idx | Bin 0 -> 908 bytes .../index/extent.h.BE25866992E84088.idx | Bin 0 -> 934 bytes ...tern_template_lists.h.55C2C02A1EA324F4.idx | Bin 0 -> 390 bytes ..._value_distribution.h.C8D53A1B89F27E5F.idx | Bin 0 -> 9630 bytes .../clangd/index/fdim.h.11A70B93B7E85CE9.idx | Bin 0 -> 1094 bytes .../clangd/index/fence.h.2E421EFC8E7123C3.idx | Bin 0 -> 958 bytes .../clangd/index/fill.h.7D29F04CC7CC0B03.idx | Bin 0 -> 1470 bytes .../index/fill_n.h.5EEDBEACB3CD43F3.idx | Bin 0 -> 2824 bytes .../clangd/index/find.h.D1A43C182763EE7D.idx | Bin 0 -> 6934 bytes .../index/find_end.h.15FDE6E17A82D31D.idx | Bin 0 -> 3692 bytes .../find_first_of.h.2BB2AC66B095CEBC.idx | Bin 0 -> 2026 bytes .../index/find_if.h.3FC9097A48E94ED8.idx | Bin 0 -> 1044 bytes .../index/find_if_not.h.9B02D1BECDA57157.idx | Bin 0 -> 1052 bytes .../index/find_index.h.B72F41E58BF0F68F.idx | Bin 0 -> 714 bytes .../find_segment_if.h.DC9FE000EB02479B.idx | Bin 0 -> 1752 bytes ...sher_f_distribution.h.B43ED9C624B3EBDD.idx | Bin 0 -> 9200 bytes .../index/flash.cpp.8F9E316F74D04058.idx | Bin 0 -> 21026 bytes .../clangd/index/flash.h.5DA166015EA23E7C.idx | Bin 0 -> 3648 bytes .../clangd/index/fma.h.58258C4934799F1D.idx | Bin 0 -> 1144 bytes .../index/for_each.h.035278B724E87AF0.idx | Bin 0 -> 2202 bytes .../index/for_each_n.h.E4578CE2562136A1.idx | Bin 0 -> 1256 bytes .../for_each_segment.h.CAB9A10BEBF7F261.idx | Bin 0 -> 984 bytes .../index/format.h.990F54CDB6C0B18A.idx | Bin 0 -> 520 bytes .../index/format_arg.h.5F776F736041F9C4.idx | Bin 0 -> 2432 bytes .../index/format_error.h.E08DED97442A6F4A.idx | Bin 0 -> 636 bytes ...ormat_parse_context.h.E743FB3F06164780.idx | Bin 0 -> 796 bytes .../format_string.h.7BFA80B3ADA1174E.idx | Bin 0 -> 1130 bytes .../format_to_n_result.h.6E36E4D0B6835EE5.idx | Bin 0 -> 546 bytes .../index/formatter.h.6C2294F5A2A978CC.idx | Bin 0 -> 518 bytes .../formatter_bool.h.7AF1073675FDE69E.idx | Bin 0 -> 1538 bytes .../formatter_integral.h.9251ACCA130A9567.idx | Bin 0 -> 3082 bytes .../formatter_output.h.0C707313BC8B1AC5.idx | Bin 0 -> 2978 bytes .../index/forward.h.EF526ED9681BEDE2.idx | Bin 0 -> 1206 bytes .../index/forward_like.h.54AEDF8D977A59BE.idx | Bin 0 -> 934 bytes .../clangd/index/fpos.h.51F847CC42CC7FB0.idx | Bin 0 -> 2030 bytes .../index/from_range.h.1813980F34DCA66A.idx | Bin 0 -> 400 bytes ...ont_insert_iterator.h.F90717F379EE45F9.idx | Bin 0 -> 3014 bytes .../index/fstream.h.B8F5415AA0A8938D.idx | Bin 0 -> 1840 bytes .../index/function.h.49D9C8096C2908A3.idx | Bin 0 -> 14632 bytes .../index/functional.22015D78C09675A7.idx | Bin 0 -> 4254 bytes .../index/functional.h.8343B93DC7AB798A.idx | Bin 0 -> 458 bytes .../clangd/index/gamma.h.565E36029249C60D.idx | Bin 0 -> 912 bytes .../gamma_distribution.h.A7A4BD8575E0DD0E.idx | Bin 0 -> 5792 bytes .../index/gcd_lcm.h.1D27E93FE773BA29.idx | Bin 0 -> 2726 bytes .../index/gd32c10x.h.CA3FDA6574B06FC1.idx | Bin 0 -> 13158 bytes .../index/gd32c10x_adc.h.EF4358569067F517.idx | Bin 0 -> 11932 bytes .../index/gd32c10x_bkp.c.B2AC217BC86F058C.idx | Bin 0 -> 19700 bytes .../index/gd32c10x_bkp.h.28AB3DAAE2BCC6C2.idx | Bin 0 -> 9498 bytes .../index/gd32c10x_can.c.9A7AF0289E55BDB6.idx | Bin 0 -> 44988 bytes .../index/gd32c10x_can.h.9D407DE6E7D7BBC6.idx | Bin 0 -> 36344 bytes .../index/gd32c10x_crc.c.F6DDC6B8B8993B58.idx | Bin 0 -> 15472 bytes .../index/gd32c10x_crc.h.BCF9DD097BC0E558.idx | Bin 0 -> 1588 bytes .../index/gd32c10x_ctc.h.689D2BB536D5AB9B.idx | Bin 0 -> 4940 bytes .../index/gd32c10x_dac.h.8E85B964D194DCF6.idx | Bin 0 -> 6412 bytes .../index/gd32c10x_dbg.c.77F06E5A520C4FCE.idx | Bin 0 -> 15126 bytes .../index/gd32c10x_dbg.h.057F810B0DB71ECF.idx | Bin 0 -> 4744 bytes .../index/gd32c10x_dma.c.35CA06EF854535A5.idx | Bin 0 -> 25648 bytes .../index/gd32c10x_dma.h.E55AB735911EF4CD.idx | Bin 0 -> 9632 bytes .../gd32c10x_eval.c.594FB0A3FEC0397F.idx | Bin 0 -> 19850 bytes .../gd32c10x_eval.h.5DA3DA1252F47ABB.idx | Bin 0 -> 3522 bytes .../gd32c10x_exmc.h.12FCFBE39F7C8EE1.idx | Bin 0 -> 5260 bytes .../gd32c10x_exti.c.04D5F235593F65BA.idx | Bin 0 -> 17308 bytes .../gd32c10x_exti.h.325FE95D190A0DD5.idx | Bin 0 -> 7990 bytes .../index/gd32c10x_fmc.c.6C918DDFBCD12E54.idx | Bin 0 -> 28176 bytes .../index/gd32c10x_fmc.h.085216A0DF1765A6.idx | Bin 0 -> 8436 bytes .../gd32c10x_fwdgt.c.86603F7A914142A9.idx | Bin 0 -> 17074 bytes .../gd32c10x_fwdgt.h.A1DEE4AD92B3FDBA.idx | Bin 0 -> 2350 bytes .../gd32c10x_gpio.c.7D9C99867F6F9BAE.idx | Bin 0 -> 21688 bytes .../gd32c10x_gpio.h.319A27BC78E6E6DF.idx | Bin 0 -> 11306 bytes .../index/gd32c10x_i2c.h.F2668D21079D77C4.idx | Bin 0 -> 18362 bytes .../gd32c10x_libopt.h.E4A1E3DB1E741BF6.idx | Bin 0 -> 3174 bytes .../gd32c10x_misc.c.6B3DFF52F8233DF2.idx | Bin 0 -> 16402 bytes .../gd32c10x_misc.h.CB5209240ED995C3.idx | Bin 0 -> 2062 bytes .../index/gd32c10x_pmu.c.7F8D1B29C554C9FD.idx | Bin 0 -> 18274 bytes .../index/gd32c10x_pmu.h.E6ED462BA1FFA736.idx | Bin 0 -> 2966 bytes .../index/gd32c10x_rcu.c.228F9724BB392EE3.idx | Bin 0 -> 32986 bytes .../index/gd32c10x_rcu.h.B5EAFBD1E2CFD229.idx | Bin 0 -> 38328 bytes .../index/gd32c10x_rtc.h.A18544EABA387F40.idx | Bin 0 -> 3210 bytes .../index/gd32c10x_spi.h.21EB4F19BDAFC3E0.idx | Bin 0 -> 10690 bytes .../gd32c10x_timer.h.0295D8FCD03CD7D6.idx | Bin 0 -> 27238 bytes .../gd32c10x_usart.c.E3B04A639D02B8B1.idx | Bin 0 -> 31992 bytes .../gd32c10x_usart.h.0EEB29A2569AC05B.idx | Bin 0 -> 20382 bytes .../gd32c10x_wwdgt.h.0FBAD93D1D95DB21.idx | Bin 0 -> 1846 bytes .../index/generate.h.E9B5F2A10C2E7224.idx | Bin 0 -> 1252 bytes .../generate_canonical.h.331BBBE2D2A0ED98.idx | Bin 0 -> 1278 bytes .../index/generate_n.h.6FF61CC2C0AA4587.idx | Bin 0 -> 1240 bytes ...metric_distribution.h.91DA632C425405E7.idx | Bin 0 -> 7770 bytes .../half_positive.h.835AC56A0E242B1F.idx | Bin 0 -> 890 bytes ...ject_representation.h.8C81629C4A36156B.idx | Bin 0 -> 1026 bytes ..._virtual_destructor.h.64567FE18BF6E3DF.idx | Bin 0 -> 830 bytes .../clangd/index/hash.h.883B556D9DB05764.idx | Bin 0 -> 10014 bytes ...gh_resolution_clock.h.90C4FEF3764C2F9D.idx | Bin 0 -> 792 bytes ...yperbolic_functions.h.7AE80F11FB8FCB8C.idx | Bin 0 -> 1052 bytes .../clangd/index/hypot.h.6188795359D07194.idx | Bin 0 -> 1096 bytes .../clangd/index/id.h.8E48E9BB85BAFEDB.idx | Bin 0 -> 884 bytes .../index/identity.h.3184AA958B4FFFC3.idx | Bin 0 -> 1102 bytes .../index/ignore.h.5C13969DE9B73E1F.idx | Bin 0 -> 572 bytes .../in_in_out_result.h.512579FCBED28C25.idx | Bin 0 -> 828 bytes .../in_out_result.h.2E5990760C39DE2F.idx | Bin 0 -> 824 bytes .../index/in_place.h.33FB8B5B562FAB34.idx | Bin 0 -> 1818 bytes .../index/includes.h.8B6877206B612D29.idx | Bin 0 -> 3628 bytes .../inclusive_scan.h.0480AFFA9E0915C0.idx | Bin 0 -> 1790 bytes ...ncrementable_traits.h.D1DA584B5709D41A.idx | Bin 0 -> 1444 bytes ...pendent_bits_engine.h.765BCEAD1CF73B6D.idx | Bin 0 -> 17718 bytes ...onjunct_break_table.h.A79BFBF5B5DC314A.idx | Bin 0 -> 904 bytes .../index/initial.cpp.091E9550D2F5002F.idx | Bin 0 -> 17356 bytes .../index/initial.h.3789E8A46017A9C9.idx | Bin 0 -> 1662 bytes .../initializer_list.967A8146E450D645.idx | Bin 0 -> 1974 bytes .../inner_product.h.02CDC2358617CC13.idx | Bin 0 -> 1440 bytes .../index/inout_ptr.h.A27C06B285DB600B.idx | Bin 0 -> 1820 bytes .../inplace_merge.h.2A9C5DB1304275FC.idx | Bin 0 -> 9786 bytes .../insert_iterator.h.66B801DEC63CD811.idx | Bin 0 -> 3316 bytes .../integer_sequence.h.E5F0501589D243E8.idx | Bin 0 -> 1516 bytes .../integral_constant.h.AE83A9C783F3E1FC.idx | Bin 0 -> 5740 bytes ...yperbolic_functions.h.B3EF4DA55939D92A.idx | Bin 0 -> 1060 bytes ...onometric_functions.h.6FA2170402B62718.idx | Bin 0 -> 1640 bytes .../index/invert_if.h.F0EEC460CC1B74F1.idx | Bin 0 -> 570 bytes .../index/invocable.h.5FBF525FC7995401.idx | Bin 0 -> 652 bytes .../index/invoke.h.01F7682F585EBC75.idx | Bin 0 -> 1004 bytes .../index/invoke.h.D5482CEF74F9AE21.idx | Bin 0 -> 4808 bytes .../clangd/index/ios.37D749D0BD5969FC.idx | Bin 0 -> 28296 bytes .../clangd/index/ios.h.38DC8C7C5E8EDF72.idx | Bin 0 -> 904 bytes .../clangd/index/iosfwd.FE59745E653D39BE.idx | Bin 0 -> 2236 bytes .../clangd/index/iota.h.FA0A39100F813132.idx | Bin 0 -> 656 bytes .../index/is_abstract.h.49B5EA65BD6F7D8C.idx | Bin 0 -> 798 bytes .../index/is_aggregate.h.4FD07E224BFB7AE8.idx | Bin 0 -> 800 bytes .../index/is_allocator.h.AA303E57362A4729.idx | Bin 0 -> 992 bytes ..._always_bitcastable.h.7F1F54E927EB34D7.idx | Bin 0 -> 1314 bytes ...is_always_lock_free.h.AC3C87D950F4D6F8.idx | Bin 0 -> 388 bytes .../is_arithmetic.h.ACD8E5D2A9FFFF1E.idx | Bin 0 -> 1188 bytes .../index/is_array.h.F12A9D5F316285B1.idx | Bin 0 -> 920 bytes .../is_assignable.h.3E3CEB4B8D4D4214.idx | Bin 0 -> 1648 bytes .../index/is_base_of.h.B131E5198F7EC50C.idx | Bin 0 -> 834 bytes .../is_bounded_array.h.F72A3BC59A2990B2.idx | Bin 0 -> 782 bytes .../index/is_callable.h.3CB8357A2C5E0E65.idx | Bin 0 -> 728 bytes .../index/is_class.h.883AC9084E09F8A3.idx | Bin 0 -> 788 bytes .../index/is_compound.h.1CCB7D41E405206D.idx | Bin 0 -> 892 bytes .../index/is_const.h.B2F55503C8C40DCC.idx | Bin 0 -> 748 bytes ..._constant_evaluated.h.77CAD4341A852355.idx | Bin 0 -> 486 bytes .../is_constructible.h.96B6728AC672B2EC.idx | Bin 0 -> 1890 bytes .../is_convertible.h.03BF5079F7A83C51.idx | Bin 0 -> 922 bytes ...is_core_convertible.h.CDD0F4DD8EC5EAF5.idx | Bin 0 -> 612 bytes .../is_destructible.h.FB1858F75C6E1B8A.idx | Bin 0 -> 1298 bytes .../index/is_empty.h.6D4DA0DBD064B226.idx | Bin 0 -> 804 bytes .../index/is_enum.h.BB2EBEE7DF91619E.idx | Bin 0 -> 800 bytes ...equality_comparable.h.E27628545CB3B306.idx | Bin 0 -> 2312 bytes ...is_execution_policy.h.5B362EFD9EF957C9.idx | Bin 0 -> 732 bytes .../index/is_final.h.2C12464E43993C97.idx | Bin 0 -> 830 bytes .../is_floating_point.h.8EAB90A2EB9CCCBB.idx | Bin 0 -> 1116 bytes .../index/is_function.h.F6ED986B59B83663.idx | Bin 0 -> 798 bytes .../is_fundamental.h.13BAC84CD66153C4.idx | Bin 0 -> 1030 bytes .../index/is_heap.h.09FD231B17C39C83.idx | Bin 0 -> 2058 bytes .../is_heap_until.h.D53F19D7B71F8B50.idx | Bin 0 -> 2614 bytes ...fault_constructible.h.3A4377990962FA8B.idx | Bin 0 -> 868 bytes .../index/is_integral.h.DAE94075EC5D66C3.idx | Bin 0 -> 934 bytes .../is_literal_type.h.6A7166FB738E9FFE.idx | Bin 0 -> 862 bytes .../is_member_pointer.h.DC574E93086B7A9D.idx | Bin 0 -> 1136 bytes ..._nothrow_assignable.h.DA66871630172DBD.idx | Bin 0 -> 1684 bytes ...throw_constructible.h.2CC908809464F1E0.idx | Bin 0 -> 1972 bytes ...othrow_destructible.h.848AD33BDE197B71.idx | Bin 0 -> 1244 bytes .../is_null_pointer.h.AA29EA114199F3A4.idx | Bin 0 -> 936 bytes .../index/is_object.h.5C8684A7225DDDAA.idx | Bin 0 -> 752 bytes .../is_partitioned.h.C8064981C4956B40.idx | Bin 0 -> 2244 bytes .../is_permutation.h.0A91444E8F583F1B.idx | Bin 0 -> 11754 bytes .../index/is_pod.h.E2CBCD869A86E300.idx | Bin 0 -> 782 bytes .../index/is_pointer.h.AA15CD79ABF2C9ED.idx | Bin 0 -> 884 bytes ...is_pointer_in_range.h.5959AAF1450AFE8D.idx | Bin 0 -> 2006 bytes .../is_polymorphic.h.53467A5A539F2ADD.idx | Bin 0 -> 806 bytes ...is_primary_template.h.40C05A6DC80217D3.idx | Bin 0 -> 790 bytes .../index/is_reference.h.0319D240F1BF7EF4.idx | Bin 0 -> 1110 bytes ...s_reference_wrapper.h.D5FC88FA7EBA71AD.idx | Bin 0 -> 890 bytes .../is_referenceable.h.2139A342F9598D63.idx | Bin 0 -> 678 bytes .../index/is_same.h.AA5B651ECDA46A9F.idx | Bin 0 -> 822 bytes .../index/is_scalar.h.6991FA1BFD30118A.idx | Bin 0 -> 1418 bytes .../is_seed_sequence.h.8289C146A170DBCA.idx | Bin 0 -> 870 bytes .../index/is_signed.h.139A87B80CEA610A.idx | Bin 0 -> 1018 bytes .../is_signed_integer.h.332587A207E718CE.idx | Bin 0 -> 746 bytes .../index/is_sorted.h.F896857BC419469D.idx | Bin 0 -> 2024 bytes .../is_sorted_until.h.3BC318266FB99A92.idx | Bin 0 -> 2302 bytes .../is_specialization.h.E433D73BA7A52FCC.idx | Bin 0 -> 412 bytes .../is_standard_layout.h.3377C5BE8672CA3B.idx | Bin 0 -> 818 bytes .../index/is_swappable.h.3BB2ECEBD0A61D48.idx | Bin 0 -> 3356 bytes .../is_transparent.h.C0C046C7AEABFED6.idx | Bin 0 -> 536 bytes .../index/is_trivial.h.5138D1392FAF839A.idx | Bin 0 -> 794 bytes ...rivially_assignable.h.D9DCE11181ABE29B.idx | Bin 0 -> 1814 bytes ...ially_constructible.h.8D31EAF5056E6907.idx | Bin 0 -> 1962 bytes ..._trivially_copyable.h.91C68C48F2E17D15.idx | Bin 0 -> 954 bytes ...vially_destructible.h.C60E7178F54BD94B.idx | Bin 0 -> 1014 bytes ...phically_comparable.h.45E47625872B5DCE.idx | Bin 0 -> 1398 bytes ...ivially_relocatable.h.C8775AB00396A68D.idx | Bin 0 -> 1018 bytes .../is_unbounded_array.h.CC460754E1D88DD3.idx | Bin 0 -> 672 bytes .../index/is_union.h.A0EDF5E23D447FA7.idx | Bin 0 -> 788 bytes .../index/is_unsigned.h.3C53D2566F0C5879.idx | Bin 0 -> 1024 bytes ...is_unsigned_integer.h.B68D28746FA9E591.idx | Bin 0 -> 748 bytes .../index/is_valid.h.5D7192519EBAC22F.idx | Bin 0 -> 1712 bytes .../is_valid_expansion.h.733378003B825D17.idx | Bin 0 -> 598 bytes .../is_valid_range.h.7D190A33FA8990A0.idx | Bin 0 -> 902 bytes .../index/is_void.h.EED11160F0850253.idx | Bin 0 -> 746 bytes .../index/is_volatile.h.FF8E1D441994F32D.idx | Bin 0 -> 758 bytes .../index/istream.h.57D0390027A936D4.idx | Bin 0 -> 1216 bytes .../istream_iterator.h.206C0ABBDFB3FC09.idx | Bin 0 -> 4590 bytes ...istreambuf_iterator.h.F047DF33D44FBBF3.idx | Bin 0 -> 4398 bytes .../index/iter_move.h.E14FA613D5A041C9.idx | Bin 0 -> 1466 bytes .../index/iter_swap.h.ACEDDCDFF3B24E81.idx | Bin 0 -> 1004 bytes .../index/iter_swap.h.FEB5042665CE4EFD.idx | Bin 0 -> 1846 bytes .../index/iterator.99A30467BF5E69A3.idx | Bin 0 -> 4252 bytes .../index/iterator.h.594856F054C605A1.idx | Bin 0 -> 1234 bytes ...iterator_operations.h.C497B84E2783FF11.idx | Bin 0 -> 4202 bytes .../iterator_traits.h.D23B20C46EDA0250.idx | Bin 0 -> 6158 bytes .../kill_dependency.h.844803F4D9DE4C1A.idx | Bin 0 -> 538 bytes .../index/knuth_b.h.D8EAC1EF94216D5A.idx | Bin 0 -> 778 bytes .../index/language.h.1FF35719D4011FAA.idx | Bin 0 -> 246 bytes .../clangd/index/lazy.h.FFD84FDB223282BE.idx | Bin 0 -> 378 bytes ...cographical_compare.h.F87D7565F6AA22D4.idx | Bin 0 -> 5826 bytes ...l_compare_three_way.h.682A24580EA4ACD8.idx | Bin 0 -> 1766 bytes .../clangd/index/limits.7823894A40E92A27.idx | Bin 0 -> 13806 bytes .../index/limits.h.4667C41B0CB6AF5F.idx | Bin 0 -> 660 bytes ...congruential_engine.h.41212A98EF204F5F.idx | Bin 0 -> 7090 bytes .../clangd/index/locale.7DCC05AEABC92EC6.idx | Bin 0 -> 180238 bytes .../index/locale.h.1459E9CD145BDF48.idx | Bin 0 -> 426 bytes .../index/locale.h.5DB8185214B4E86F.idx | Bin 0 -> 4534 bytes .../locale_base_api.h.20FE6B0B0588F0C2.idx | Bin 0 -> 368 bytes .../index/locale_guard.h.2C2E448EDE025341.idx | Bin 0 -> 736 bytes .../index/lock_guard.h.335C023AEB5BC60B.idx | Bin 0 -> 1394 bytes .../clangd/index/log2.h.C5B4B93937412FC4.idx | Bin 0 -> 652 bytes .../index/logarithms.h.CB1AE45B0B2702D4.idx | Bin 0 -> 1420 bytes ...normal_distribution.h.B14475A998CB124C.idx | Bin 0 -> 9178 bytes .../index/lower_bound.h.9E9D47C95A91ACD4.idx | Bin 0 -> 3980 bytes .../index/main.cpp.0E43507EBD398BBA.idx | Bin 0 -> 14602 bytes ...ke_32_64_or_128_bit.h.6306278CFFAA9DB6.idx | Bin 0 -> 1208 bytes ...ke_const_lvalue_ref.h.6E4C10E741F1B388.idx | Bin 0 -> 532 bytes .../index/make_heap.h.4511F87A5D6C0634.idx | Bin 0 -> 3138 bytes .../make_projected.h.18D5DF92FA25D85F.idx | Bin 0 -> 2122 bytes .../index/make_signed.h.3A16A448C255F1EC.idx | Bin 0 -> 1466 bytes .../make_tuple_types.h.DCE7A337E608B7BB.idx | Bin 0 -> 1792 bytes .../make_unsigned.h.1DBAB563162F8611.idx | Bin 0 -> 1802 bytes .../clangd/index/math.h.FA63853E54A56DD0.idx | Bin 0 -> 6006 bytes .../clangd/index/math.h.FDAF21D7A5B4B726.idx | Bin 0 -> 43074 bytes .../clangd/index/max.h.74FCCCE84EF837CD.idx | Bin 0 -> 2054 bytes .../index/max_element.h.5F6E46DDB4549D59.idx | Bin 0 -> 2426 bytes .../index/maybe_const.h.9C98AC87F7791ABF.idx | Bin 0 -> 516 bytes .../index/mem_fn.h.F314EAF99FE9A47E.idx | Bin 0 -> 1218 bytes .../index/mem_fun_ref.h.8CFA00FEA2165792.idx | Bin 0 -> 676 bytes .../clangd/index/memory.2AB23E2CB8981748.idx | Bin 0 -> 4236 bytes .../index/memory.h.38E36F62DB1D52EE.idx | Bin 0 -> 418 bytes .../index/memory_order.h.7EA3D6810723B78C.idx | Bin 0 -> 1286 bytes .../memory_resource.h.425E28114F9185E1.idx | Bin 0 -> 2490 bytes .../memory_resource.h.DC75938AB83C7CCC.idx | Bin 0 -> 490 bytes .../clangd/index/merge.h.AEFB228341672878.idx | Bin 0 -> 2940 bytes ...enne_twister_engine.h.32BEED209FC6FC30.idx | Bin 0 -> 40120 bytes .../clangd/index/min.h.8DA5F299BF82516F.idx | Bin 0 -> 2054 bytes .../index/min_element.h.E8CF37081C3AE3F1.idx | Bin 0 -> 2144 bytes .../index/min_max.h.B8043771CDCF322D.idx | Bin 0 -> 1386 bytes .../index/minmax.h.E0B6AB5E18D00125.idx | Bin 0 -> 2264 bytes .../minmax_element.h.4891F7E36DD4A2A8.idx | Bin 0 -> 4018 bytes .../index/mismatch.h.9DA7550F5B08A645.idx | Bin 0 -> 6694 bytes .../index/modulo.h.FB829A77FA8BF72E.idx | Bin 0 -> 1180 bytes .../index/monostate.h.A53F4D2FB87FE381.idx | Bin 0 -> 2024 bytes .../index/movable.h.18F69015A5EC72A6.idx | Bin 0 -> 916 bytes .../index/movable_box.h.757EB7D0A5E7A98F.idx | Bin 0 -> 1584 bytes .../clangd/index/move.h.7690FA5DD03A0CEA.idx | Bin 0 -> 1664 bytes .../clangd/index/move.h.C90662CD8D69F515.idx | Bin 0 -> 3384 bytes .../move_backward.h.8235D363C9EEEA34.idx | Bin 0 -> 5386 bytes .../move_iterator.h.8129EA95A6ADEAE4.idx | Bin 0 -> 11926 bytes .../move_sentinel.h.09059202E0D7E3BC.idx | Bin 0 -> 1080 bytes .../clangd/index/mutex.E453ECB8CC08EA8B.idx | Bin 0 -> 3898 bytes .../clangd/index/mutex.h.CFFBE8F4F617FCDA.idx | Bin 0 -> 616 bytes .../clangd/index/nat.h.6F825F99E94F81F5.idx | Bin 0 -> 376 bytes .../index/negation.h.2A420FFCAEDD9D78.idx | Bin 0 -> 724 bytes ...nomial_distribution.h.EC0924C2A2A39B43.idx | Bin 0 -> 11482 bytes .../nested_exception.h.4E1A59394FF72293.idx | Bin 0 -> 3496 bytes .../clangd/index/new.90705CE65A1CC122.idx | Bin 0 -> 8662 bytes .../clangd/index/next.h.3C9EB7D4A263DDAA.idx | Bin 0 -> 1458 bytes .../next_permutation.h.1382F12C95086674.idx | Bin 0 -> 3538 bytes .../index/no_destroy.h.360F19637543D9B7.idx | Bin 0 -> 952 bytes ...ve_assign_container.h.A019306552E13D5B.idx | Bin 0 -> 884 bytes .../index/none_of.h.FAB89C5D643EA993.idx | Bin 0 -> 1268 bytes ...normal_distribution.h.884FB25FED1AD797.idx | Bin 0 -> 13814 bytes .../index/not_fn.h.8C7A6C50221C47A1.idx | Bin 0 -> 1664 bytes .../index/nth_element.h.3C78F1BB35A37EC3.idx | Bin 0 -> 10350 bytes .../clangd/index/numeric.61C1EC9ED621EAB9.idx | Bin 0 -> 3316 bytes .../index/once_flag.h.2A5C4B7BAC4511AE.idx | Bin 0 -> 3800 bytes .../index/operations.h.0D4ABE387B894C56.idx | Bin 0 -> 1464 bytes .../index/operations.h.700ADDAD068F6FD5.idx | Bin 0 -> 14340 bytes .../index/optional.BF78B44765411FDF.idx | Bin 0 -> 38168 bytes .../index/ordering.h.652ED507A57E28CC.idx | Bin 0 -> 660 bytes .../index/ostream.h.26C38309C53BE3D2.idx | Bin 0 -> 902 bytes .../ostream_iterator.h.1552B5EAD3538A26.idx | Bin 0 -> 3158 bytes ...ostreambuf_iterator.h.645371D68675D6AB.idx | Bin 0 -> 3250 bytes .../index/out_ptr.h.FAE1C55C60A9C68D.idx | Bin 0 -> 1690 bytes .../clangd/index/pair.h.3C5C0AC1D8B5C97A.idx | Bin 0 -> 23962 bytes .../clangd/index/pair.h.E6D9FC01B6CFDFC4.idx | Bin 0 -> 1862 bytes ...ser_std_format_spec.h.84860ADE692480B6.idx | Bin 0 -> 3240 bytes .../index/partial_sort.h.5087978FABD20AD0.idx | Bin 0 -> 4592 bytes .../partial_sort_copy.h.319611E93B8A4CFB.idx | Bin 0 -> 4960 bytes .../index/partial_sum.h.7A19825E94E840CF.idx | Bin 0 -> 1516 bytes .../index/partition.h.0FA3FDBD646D84C4.idx | Bin 0 -> 3836 bytes .../partition_copy.h.21BD3CF0FB1C9940.idx | Bin 0 -> 1696 bytes .../partition_point.h.798E326AB036052F.idx | Bin 0 -> 1930 bytes .../perfect_forward.h.79E69D5FF92240D0.idx | Bin 0 -> 8402 bytes ...nstant_distribution.h.5C5063C93FFBA74D.idx | Bin 0 -> 24346 bytes ...piecewise_construct.h.968071A7FCB194C3.idx | Bin 0 -> 812 bytes ...linear_distribution.h.7E62360378ED3202.idx | Bin 0 -> 25636 bytes .../index/platform.h.9519C817BB8896B2.idx | Bin 0 -> 270 bytes ..._to_binary_function.h.115E14BEDA96E8EF.idx | Bin 0 -> 556 bytes ...r_to_unary_function.h.A5E8AFBD5CFF6753.idx | Bin 0 -> 554 bytes .../pointer_traits.h.A1E4352FBFCB6789.idx | Bin 0 -> 3906 bytes ...oisson_distribution.h.CA7322EA1D26F160.idx | Bin 0 -> 13612 bytes .../poll_with_backoff.h.C9DCC4B7D84C81B7.idx | Bin 0 -> 1024 bytes ...lymorphic_allocator.h.2B50CA2ABE4DDB31.idx | Bin 0 -> 8758 bytes .../index/pop_heap.h.DB1B1B0698AAE775.idx | Bin 0 -> 3906 bytes .../index/popcount.h.A9B791436A2EB215.idx | Bin 0 -> 1072 bytes .../index/predicate.h.0AC652433C7D252E.idx | Bin 0 -> 788 bytes .../clangd/index/prev.h.A9CF4EF00FA09869.idx | Bin 0 -> 1458 bytes .../prev_permutation.h.4E2079A766740303.idx | Bin 0 -> 3538 bytes ...ate_constructor_tag.h.41E10EC5CADF5751.idx | Bin 0 -> 392 bytes .../index/projected.h.F48E903DD8B268F9.idx | Bin 0 -> 798 bytes .../index/promote.h.7CEBE789ED3968C5.idx | Bin 0 -> 786 bytes .../clangd/index/pstl.h.C5A38E55DBC590C4.idx | Bin 0 -> 540 bytes .../clangd/index/pstl.h.C8221DABE666DA14.idx | Bin 0 -> 542 bytes .../index/push_heap.h.C7920352CFA83778.idx | Bin 0 -> 3726 bytes .../clangd/index/random.3D36632E17D00160.idx | Bin 0 -> 6690 bytes .../random_device.h.D6A5729AEB02B7AF.idx | Bin 0 -> 1790 bytes .../randomize_range.h.F315D98A6403F2CE.idx | Bin 0 -> 434 bytes ...ranges_construct_at.h.99F5610A049957B8.idx | Bin 0 -> 2074 bytes .../index/ranges_copy.h.EE9AF5D32E59343D.idx | Bin 0 -> 1782 bytes .../ranges_copy_n.h.731F4D6C572C21B5.idx | Bin 0 -> 1872 bytes .../ranges_fill_n.h.D4FD76B1D9303458.idx | Bin 0 -> 790 bytes ...es_iterator_concept.h.7C37EDF27CC317CF.idx | Bin 0 -> 928 bytes ...ges_iterator_traits.h.D7913F4F66CD66C8.idx | Bin 0 -> 788 bytes .../ranges_operations.h.262C5ECC38C86002.idx | Bin 0 -> 938 bytes .../ranges_transform.h.9FD3703E515515AD.idx | Bin 0 -> 1926 bytes .../ranges_upper_bound.h.3BD163831FB6E89F.idx | Bin 0 -> 1648 bytes .../clangd/index/rank.h.924AA4335C03708B.idx | Bin 0 -> 1200 bytes .../index/ranlux.h.E237E8199354923B.idx | Bin 0 -> 1152 bytes .../clangd/index/ratio.5533D3494D735EE2.idx | Bin 0 -> 7228 bytes ...aw_storage_iterator.h.61BCA162BB248280.idx | Bin 0 -> 2838 bytes .../readable_traits.h.721829DEDF9D2840.idx | Bin 0 -> 1460 bytes .../index/reduce.h.428EF05B8A1A4A5A.idx | Bin 0 -> 1830 bytes .../reference_wrapper.h.977B591177265425.idx | Bin 0 -> 3766 bytes .../index/regular.h.605F1F6A3685148D.idx | Bin 0 -> 666 bytes .../index/rel_ops.h.BFBF1E87258219E0.idx | Bin 0 -> 1078 bytes .../index/relation.h.E03FBF96470C642F.idx | Bin 0 -> 528 bytes .../index/remainder.h.5FD2AC264FE76C7E.idx | Bin 0 -> 1400 bytes .../index/remove.h.75E0913B14A3CA8E.idx | Bin 0 -> 2854 bytes .../remove_all_extents.h.229B5F6BA2B9205F.idx | Bin 0 -> 834 bytes .../index/remove_const.h.87C5B951ED53AB3F.idx | Bin 0 -> 698 bytes .../remove_const_ref.h.8034B53EAF7183E7.idx | Bin 0 -> 660 bytes .../index/remove_copy.h.59E1E2FC7ABAA199.idx | Bin 0 -> 1910 bytes .../remove_copy_if.h.8F73042FE05B63F1.idx | Bin 0 -> 1316 bytes .../index/remove_cv.h.CE95648183D95206.idx | Bin 0 -> 686 bytes .../index/remove_cvref.h.20D11949D987EDE4.idx | Bin 0 -> 826 bytes .../remove_extent.h.E3037A0E97BA3EB6.idx | Bin 0 -> 814 bytes .../index/remove_if.h.AB03B053B9E23B20.idx | Bin 0 -> 2132 bytes .../remove_pointer.h.4FC2EF010B5D012C.idx | Bin 0 -> 706 bytes .../remove_reference.h.31CF85DCEDE6A3BD.idx | Bin 0 -> 714 bytes .../remove_volatile.h.925762160888A177.idx | Bin 0 -> 710 bytes .../index/replace.h.3B2DC15CF8D44890.idx | Bin 0 -> 1908 bytes .../index/replace_copy.h.17A3741966711320.idx | Bin 0 -> 1966 bytes .../replace_copy_if.h.CF26BBDBC2575B70.idx | Bin 0 -> 1364 bytes .../index/replace_if.h.C520D8E89B26A0C0.idx | Bin 0 -> 1306 bytes .../index/result_of.h.F09E247C7592CD85.idx | Bin 0 -> 912 bytes .../index/reverse.h.CFCF8DA94D88AF7C.idx | Bin 0 -> 3606 bytes .../reverse_access.h.3BC7191EACA4E2CA.idx | Bin 0 -> 2440 bytes .../index/reverse_copy.h.528D96AA8BADEF29.idx | Bin 0 -> 1306 bytes .../reverse_iterator.h.724E40878F82DCA2.idx | Bin 0 -> 10846 bytes .../clangd/index/roots.h.7034EC9DF151E72D.idx | Bin 0 -> 978 bytes .../index/rotate.h.1275A7BBDCB011F6.idx | Bin 0 -> 10362 bytes .../index/rotate.h.F66B1E4029766689.idx | Bin 0 -> 2230 bytes .../index/rotate_copy.h.3F5347FA54B87F92.idx | Bin 0 -> 896 bytes .../rounding_functions.h.794067E037665006.idx | Bin 0 -> 3212 bytes .../index/same_as.h.57D42C3DEBA8BD43.idx | Bin 0 -> 528 bytes .../index/sample.h.6E07B845134BC18B.idx | Bin 0 -> 4906 bytes .../index/sanitizers.h.F74F63335D614D5E.idx | Bin 0 -> 788 bytes .../index/search.h.D7253C6950B2C1E2.idx | Bin 0 -> 5314 bytes .../index/search_n.h.BAA4E8D22CE7FED4.idx | Bin 0 -> 6664 bytes .../index/seed_seq.h.79105115AE614921.idx | Bin 0 -> 5506 bytes .../segmented_iterator.h.CF53F7E159FE02C1.idx | Bin 0 -> 720 bytes .../index/semiregular.h.0D2C9D4D585E4C4A.idx | Bin 0 -> 660 bytes .../set_difference.h.6530E96BBFF0E494.idx | Bin 0 -> 3716 bytes .../set_intersection.h.83EFDE2F3D7F43C7.idx | Bin 0 -> 7262 bytes ...ymmetric_difference.h.0D643667100CE243.idx | Bin 0 -> 4232 bytes .../index/set_union.h.ECEF752AB3C4B13C.idx | Bin 0 -> 4202 bytes .../sfinae_helpers.h.4998634B7566175F.idx | Bin 0 -> 2712 bytes .../index/shared_ptr.h.D04D3318B7ABF73D.idx | Bin 0 -> 33680 bytes .../index/shuffle.h.FAD0CA60A22CC9D0.idx | Bin 0 -> 4066 bytes ...huffle_order_engine.h.23876B288758363C.idx | Bin 0 -> 14254 bytes .../index/sift_down.h.7B94369BC0C2E4C0.idx | Bin 0 -> 4318 bytes .../index/simd_utils.h.3634D4418600B905.idx | Bin 0 -> 2150 bytes .../clangd/index/size.h.932DCAFCB7B86EC4.idx | Bin 0 -> 1068 bytes .../clangd/index/size.h.9E931F8BA0582D89.idx | Bin 0 -> 1924 bytes .../clangd/index/sort.h.8CDF8820EB061655.idx | Bin 0 -> 23328 bytes .../index/sort_heap.h.ADCE49F00A9ABACD.idx | Bin 0 -> 3068 bytes .../special_functions.h.798B540E1A4DD74E.idx | Bin 0 -> 1948 bytes .../index/sstream.h.125C3BA0793F4F64.idx | Bin 0 -> 2092 bytes .../stable_partition.h.4C959889C10A229D.idx | Bin 0 -> 10864 bytes .../index/stable_sort.h.4A8CE978DD5E5FB2.idx | Bin 0 -> 10574 bytes .../index/stdarg.h.91D8E4F4F2AB368B.idx | Bin 0 -> 574 bytes .../index/stddef.h.9AFA5AD8EF66A96D.idx | Bin 0 -> 518 bytes .../index/stddef.h.CD0E280344C76AAC.idx | Bin 0 -> 664 bytes .../index/stdexcept.54D08763FD1F5E48.idx | Bin 0 -> 8642 bytes .../index/stdint.h.43B2D76160AC52CA.idx | Bin 0 -> 472 bytes .../index/stdint.h.FB0C6441DE3EED80.idx | Bin 0 -> 6922 bytes .../clangd/index/stdio.h.34DE98B629941C4A.idx | Bin 0 -> 438 bytes .../clangd/index/stdio.h.E6D66DA0CB3C3122.idx | Bin 0 -> 33270 bytes .../index/stdlib.h.6AAF2D52688EAF4D.idx | Bin 0 -> 22632 bytes .../index/stdlib.h.C292466360747BC9.idx | Bin 0 -> 924 bytes .../index/steady_clock.h.439DF5434184A609.idx | Bin 0 -> 652 bytes .../index/streambuf.66A76306EEAD9E71.idx | Bin 0 -> 21630 bytes .../index/streambuf.h.F4952FB8C61AAF35.idx | Bin 0 -> 814 bytes ...weak_ordering_check.h.D4399C22DA29E043.idx | Bin 0 -> 1140 bytes .../clangd/index/string.9711B4DED4D835CC.idx | Bin 0 -> 191260 bytes .../index/string.h.626939629D08384A.idx | Bin 0 -> 1796 bytes .../index/string.h.797333FE765FB5F1.idx | Bin 0 -> 2008 bytes .../index/string.h.E220BF4E30EFDCC7.idx | Bin 0 -> 18708 bytes .../index/string_view.05ECCF7139A44305.idx | Bin 0 -> 39368 bytes .../index/string_view.h.CDDA0157556164D4.idx | Bin 0 -> 1034 bytes .../strip_signature.h.6F11072ECC5AB7BA.idx | Bin 0 -> 410 bytes ...dent_t_distribution.h.7A78252292DF9631.idx | Bin 0 -> 8990 bytes .../index/subrange.h.833EE16C539BC01C.idx | Bin 0 -> 4278 bytes .../index/subrange.h.A51BAAA20BF1ABBA.idx | Bin 0 -> 714 bytes ...t_with_carry_engine.h.F1ABEDAA7C06F6FF.idx | Bin 0 -> 34970 bytes .../index/support.h.49371EC40513A70C.idx | Bin 0 -> 352 bytes .../clangd/index/swap.h.77CD6A5FFB0C4FA2.idx | Bin 0 -> 2198 bytes .../swap_allocator.h.98FC7D0779E432AB.idx | Bin 0 -> 1510 bytes .../index/swap_ranges.h.4F23106FD90BB375.idx | Bin 0 -> 2240 bytes .../index/swappable.h.13C66D84F12E1CD9.idx | Bin 0 -> 2246 bytes .../synth_three_way.h.732CC0C95E214BED.idx | Bin 0 -> 926 bytes .../index/system_clock.h.77D3BB677FECB43B.idx | Bin 0 -> 1656 bytes .../index/system_error.8DCE5C30978940DB.idx | Bin 0 -> 1688 bytes .../index/system_error.h.3B0DF7000664B9FD.idx | Bin 0 -> 2216 bytes .../system_gd32c10x.c.452EB4E084F788B0.idx | Bin 0 -> 19214 bytes .../system_gd32c10x.h.22477223D94E8216.idx | Bin 0 -> 880 bytes .../index/systick.cpp.D6965781E9E353E3.idx | Bin 0 -> 14910 bytes .../index/systick.h.B6A7175B66896FF1.idx | Bin 0 -> 968 bytes .../index/tables.h.87D2B8EEB3F7FB90.idx | Bin 0 -> 974 bytes .../index/tag_types.h.7EA08D2FCB5526FF.idx | Bin 0 -> 1418 bytes .../index/temp_value.h.FE7E37D703CAEDFB.idx | Bin 0 -> 1164 bytes .../temporary_buffer.h.70CB60F2B84D2F0E.idx | Bin 0 -> 1520 bytes .../index/terminate.h.4B5AE8494DB60358.idx | Bin 0 -> 500 bytes ...e_way_comp_ref_type.h.1EDFDD7B6E521A85.idx | Bin 0 -> 790 bytes ...hree_way_comparable.h.AA954713807061E1.idx | Bin 0 -> 1492 bytes .../clangd/index/time.h.D264233BC10C47A0.idx | Bin 0 -> 7388 bytes .../index/time_point.h.BFDF913C60D8BA11.idx | Bin 0 -> 7852 bytes .../to_chars_base_10.h.05E0EB5B5EEB34DF.idx | Bin 0 -> 1586 bytes .../to_chars_integral.h.ED223F62FCEA7398.idx | Bin 0 -> 11918 bytes .../to_chars_result.h.02A779CDBE37DE87.idx | Bin 0 -> 836 bytes .../index/to_gcc_order.h.CA3D0ED367860B07.idx | Bin 0 -> 804 bytes .../totally_ordered.h.9ACE0D9BD1A431BB.idx | Bin 0 -> 958 bytes .../index/traits.h.054BA444558158FF.idx | Bin 0 -> 3642 bytes .../index/traits.h.3A3A7EE63D605587.idx | Bin 0 -> 5010 bytes .../index/transform.h.7020D2BAA4584EBA.idx | Bin 0 -> 2022 bytes ...form_exclusive_scan.h.B5D5D2F8F5AEA094.idx | Bin 0 -> 836 bytes ...form_inclusive_scan.h.60E5341877AD00A6.idx | Bin 0 -> 1318 bytes .../transform_reduce.h.C4F0981BA496A189.idx | Bin 0 -> 1898 bytes ...onometric_functions.h.3A9AC935DB747FC1.idx | Bin 0 -> 1056 bytes .../clangd/index/tuple.0145E94843AD1A46.idx | Bin 0 -> 31550 bytes .../clangd/index/tuple.h.67D03A8A5A38FE8B.idx | Bin 0 -> 1960 bytes .../tuple_element.h.5EBFE0992EF5F6AA.idx | Bin 0 -> 1924 bytes .../tuple_indices.h.CBEB5740A14DE2F5.idx | Bin 0 -> 626 bytes .../tuple_like_ext.h.E0D1E3A0A3B5DB6D.idx | Bin 0 -> 1346 bytes ...le_like_no_subrange.h.D64033078CC151F8.idx | Bin 0 -> 1254 bytes .../index/tuple_size.h.09CEC8A002112EC1.idx | Bin 0 -> 2308 bytes .../index/tuple_types.h.0D5AD9E137BC2B92.idx | Bin 0 -> 378 bytes .../type_identity.h.E76DB18F2B2B3CCD.idx | Bin 0 -> 432 bytes .../index/type_list.h.CEA1C7FE77FDAB85.idx | Bin 0 -> 530 bytes .../index/type_traits.9761DD2E1700AB2D.idx | Bin 0 -> 11052 bytes .../index/typeinfo.FE0ACDE9DB83EC79.idx | Bin 0 -> 4802 bytes .../unary_function.h.3AA202CCD04741BB.idx | Bin 0 -> 474 bytes .../index/unary_negate.h.F7CEC985FF0D4344.idx | Bin 0 -> 1176 bytes .../underlying_type.h.BE08A4C00E8C173C.idx | Bin 0 -> 820 bytes .../index/unicode.h.B83D5D46FA0FD2C3.idx | Bin 0 -> 1548 bytes ...rm_int_distribution.h.E265CE4A07C35D73.idx | Bin 0 -> 14864 bytes ...andom_bit_generator.h.9CBDF3225CA92F78.idx | Bin 0 -> 1228 bytes ...m_real_distribution.h.143AE5D861EE4E8C.idx | Bin 0 -> 4740 bytes ...tialized_algorithms.h.C5EA7BE8E6577109.idx | Bin 0 -> 11796 bytes .../index/unique.h.5A62E4947B508F2C.idx | Bin 0 -> 3040 bytes .../index/unique_copy.h.1B4C888D6DF1AA59.idx | Bin 0 -> 5320 bytes .../index/unique_lock.h.140006F566DA327D.idx | Bin 0 -> 8218 bytes .../index/unique_ptr.h.1D8B108D8DFC5B85.idx | Bin 0 -> 20372 bytes .../index/unordered_map.7B3D663F7BFFA563.idx | Bin 0 -> 62054 bytes .../index/unreachable.h.051A6D54C9154348.idx | Bin 0 -> 586 bytes ...nreachable_sentinel.h.93E8A07209989F81.idx | Bin 0 -> 538 bytes .../index/unwrap_iter.h.83DA630310A3AC8C.idx | Bin 0 -> 1738 bytes .../index/unwrap_range.h.61BE0D73AD25157D.idx | Bin 0 -> 1654 bytes .../index/unwrap_ref.h.474FD90C3321EEB7.idx | Bin 0 -> 728 bytes .../index/upper_bound.h.9C32212E6017B999.idx | Bin 0 -> 2756 bytes .../uses_allocator.h.9281CEA1979A7A9D.idx | Bin 0 -> 1066 bytes .../clangd/index/utility.AB477ADB3300132A.idx | Bin 0 -> 2970 bytes .../clangd/index/variant.67131580FDDBB730.idx | Bin 0 -> 36014 bytes .../clangd/index/vector.F0ACE3709BA75640.idx | Bin 0 -> 150180 bytes .../index/vector.h.4598AF5F599A3548.idx | Bin 0 -> 558 bytes .../clangd/index/version.68FAC25560644D60.idx | Bin 0 -> 2054 bytes .../view_interface.h.5EC3B1B4C4D1662C.idx | Bin 0 -> 2166 bytes .../index/void_t.h.C65FACB8D0ADDC26.idx | Bin 0 -> 508 bytes .../index/voidify.h.D1E9E7C00EA3ED47.idx | Bin 0 -> 614 bytes .../clangd/index/wchar.h.0B57B5D77F67DF8F.idx | Bin 0 -> 2306 bytes .../clangd/index/wchar.h.81D3D4D24961BC6D.idx | Bin 0 -> 15632 bytes .../index/wctype.h.5F3D7D775E4B95FF.idx | Bin 0 -> 448 bytes .../index/wctype.h.8D38237F4025A01B.idx | Bin 0 -> 3840 bytes .../weak_result_type.h.9EDE35462DD9E310.idx | Bin 0 -> 1830 bytes ...eibull_distribution.h.502721EDADFF92F2.idx | Bin 0 -> 10674 bytes ...th_estimation_table.h.F4544BD901E48883.idx | Bin 0 -> 776 bytes .../index/wrap_iter.h.31F6BD71A78208B6.idx | Bin 0 -> 7550 bytes .../Robot_V2.Release+GD32C103CB.cbuild.yml | 354 +++ out/Robot_V2/GD32C103CB/Release/Robot_V2.axf | Bin 0 -> 183508 bytes .../GD32C103CB/Release/Robot_V2.axf.map | 139 ++ out/Robot_V2/GD32C103CB/Release/Robot_V2.hex | 396 ++++ .../GD32C103CB/Release/compile_commands.json | 134 ++ tmp/.ninja_log | 28 + tmp/1/.ninja_deps | Bin 0 -> 115852 bytes tmp/1/.ninja_log | 28 + tmp/1/CMakeCache.txt | 370 +++ .../CMakeFiles/3.31.5/CMakeASMCompiler.cmake | 28 + tmp/1/CMakeFiles/3.31.5/CMakeCCompiler.cmake | 81 + .../CMakeFiles/3.31.5/CMakeCXXCompiler.cmake | 97 + .../3.31.5/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 1884 bytes .../3.31.5/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 1894 bytes tmp/1/CMakeFiles/3.31.5/CMakeSystem.cmake | 15 + .../3.31.5/CompilerIdC/CMakeCCompilerId.c | 904 ++++++++ .../3.31.5/CompilerIdC/CMakeCCompilerId.o | Bin 0 -> 2440 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 919 ++++++++ .../3.31.5/CompilerIdCXX/CMakeCXXCompilerId.o | Bin 0 -> 2452 bytes tmp/1/CMakeFiles/CMakeConfigureLog.yaml | 328 +++ .../RTE/Device/GD32C103CB/gd32c10x_eval.o | Bin 0 -> 14528 bytes .../RTE/Device/GD32C103CB/gd32c10x_bkp.o | Bin 0 -> 12840 bytes .../RTE/Device/GD32C103CB/gd32c10x_can.o | Bin 0 -> 33724 bytes .../RTE/Device/GD32C103CB/gd32c10x_crc.o | Bin 0 -> 5800 bytes .../RTE/Device/GD32C103CB/gd32c10x_dbg.o | Bin 0 -> 6076 bytes .../RTE/Device/GD32C103CB/gd32c10x_dma.o | Bin 0 -> 17092 bytes .../RTE/Device/GD32C103CB/gd32c10x_exti.o | Bin 0 -> 8716 bytes .../RTE/Device/GD32C103CB/gd32c10x_fmc.o | Bin 0 -> 41656 bytes .../RTE/Device/GD32C103CB/gd32c10x_fwdgt.o | Bin 0 -> 7268 bytes .../RTE/Device/GD32C103CB/gd32c10x_gpio.o | Bin 0 -> 15224 bytes .../RTE/Device/GD32C103CB/gd32c10x_misc.o | Bin 0 -> 10204 bytes .../RTE/Device/GD32C103CB/gd32c10x_pmu.o | Bin 0 -> 12092 bytes .../RTE/Device/GD32C103CB/gd32c10x_rcu.o | Bin 0 -> 33752 bytes .../RTE/Device/GD32C103CB/gd32c10x_usart.o | Bin 0 -> 29016 bytes .../RTE/Device/GD32C103CB/startup_gd32c10x.o | Bin 0 -> 7200 bytes .../RTE/Device/GD32C103CB/system_gd32c10x.o | Bin 0 -> 8240 bytes .../G_/Robot_v2/BOOT/Robot_V2/main.o | Bin 0 -> 9180 bytes .../G_/Robot_v2/BOOT/Robot_V2/device/Can.o | Bin 0 -> 80276 bytes .../G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o | Bin 0 -> 22908 bytes .../G_/Robot_v2/BOOT/Robot_V2/sys/flash.o | Bin 0 -> 55868 bytes .../G_/Robot_v2/BOOT/Robot_V2/sys/initial.o | Bin 0 -> 15036 bytes .../G_/Robot_v2/BOOT/Robot_V2/sys/systick.o | Bin 0 -> 15216 bytes tmp/1/CMakeFiles/TargetDirectories.txt | 22 + tmp/1/CMakeFiles/cmake.check_cache | 1 + tmp/1/CMakeFiles/feature_tests.bin | Bin 0 -> 3314 bytes tmp/1/CMakeFiles/rules.ninja | 244 ++ tmp/1/ac6_linker_script.sct | 42 + tmp/1/build.ninja | 659 ++++++ tmp/1/cmake_install.cmake | 61 + tmp/1/compile_commands.json | 134 ++ tmp/CMakeCache.txt | 134 ++ tmp/CMakeFiles/3.31.5/CMakeSystem.cmake | 15 + tmp/CMakeFiles/CMakeConfigureLog.yaml | 11 + .../Labels.json | 37 + .../Labels.txt | 11 + .../Robot_V2.Release+GD32C103CB-complete | 0 .../Labels.json | 34 + .../Labels.txt | 10 + .../Labels.json | 37 + .../Labels.txt | 11 + .../Labels.json | 40 + .../Labels.txt | 12 + .../Labels.json | 52 + .../Labels.txt | 16 + tmp/CMakeFiles/TargetDirectories.txt | 8 + tmp/CMakeFiles/cmake.check_cache | 1 + tmp/CMakeFiles/rules.ninja | 45 + tmp/CMakeLists.txt | 80 + .../CMakeLists.txt | 166 ++ .../components.cmake | 306 +++ tmp/Robot_V2.Release+GD32C103CB/groups.cmake | 70 + .../Robot_V2.Release+GD32C103CB-configure | 0 ...bot_V2.Release+GD32C103CB-configure-.cmake | 56 + ...ot_V2.Release+GD32C103CB-configure-err.log | 0 ...ot_V2.Release+GD32C103CB-configure-out.log | 17 + ...obot_V2.Release+GD32C103CB-database-.cmake | 56 + ...bot_V2.Release+GD32C103CB-database-err.log | 0 ...bot_V2.Release+GD32C103CB-database-out.log | 1 + .../Robot_V2.Release+GD32C103CB-done | 0 .../Robot_V2.Release+GD32C103CB-download | 0 .../Robot_V2.Release+GD32C103CB-executes | 0 .../Robot_V2.Release+GD32C103CB-mkdir | 0 .../Robot_V2.Release+GD32C103CB-patch | 0 ...Robot_V2.Release+GD32C103CB-patch-info.txt | 6 + ...t_V2.Release+GD32C103CB-source_dirinfo.txt | 9 + .../Robot_V2.Release+GD32C103CB-test | 0 .../Robot_V2.Release+GD32C103CB-update | 0 ...obot_V2.Release+GD32C103CB-update-info.txt | 7 + .../Robot_V2.Release+GD32C103CB-cfgcmd.txt | 1 + .../Robot_V2.Release+GD32C103CB-mkdirs.cmake | 27 + .../toolchain.cmake | 6 + tmp/build.ninja | 272 +++ tmp/cmake_install.cmake | 56 + tmp/roots.cmake | 7 + vcpkg-configuration.json | 16 + 899 files changed, 42812 insertions(+) create mode 100644 .clang-format create mode 100644 .continue/mcpServers/new-mcp-server.yaml create mode 100644 .vscode/c_cpp_properties.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json create mode 100644 Robot_V2.cbuild-idx.yml create mode 100644 Robot_V2.cbuild-pack.yml create mode 100644 Robot_V2.csolution.yml create mode 100644 Robot_V2/.clangd create mode 100644 Robot_V2/Algorithm/DengFOC.cpp create mode 100644 Robot_V2/Algorithm/DengFOC.h create mode 100644 Robot_V2/Algorithm/Filter.cpp create mode 100644 Robot_V2/Algorithm/Filter.h create mode 100644 Robot_V2/Algorithm/pid.cpp create mode 100644 Robot_V2/Algorithm/pid.h create mode 100644 Robot_V2/Algorithm/thermal.cpp create mode 100644 Robot_V2/Algorithm/thermal.h create mode 100644 Robot_V2/RTE/Device/GD32C103CB/ac6_linker_script.sct.src create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_adc.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_adc.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_ctc.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_ctc.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dac.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dac.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exmc.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exmc.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_i2c.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_i2c.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_it.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rtc.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rtc.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_spi.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_spi.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_timer.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_timer.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_wwdgt.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/gd32c10x_wwdgt.c.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/regions_GD32C103CB.h create mode 100644 Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.s create mode 100644 Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.s.base@1.0.0 create mode 100644 Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c create mode 100644 Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c.base@1.0.0 create mode 100644 Robot_V2/RTE/_Debug_GD32C103CB/RTE_Components.h create mode 100644 Robot_V2/RTE/_Release_GD32C103CB/RTE_Components.h create mode 100644 Robot_V2/Robot_V2.cproject.yml create mode 100644 Robot_V2/device/ADC.cpp create mode 100644 Robot_V2/device/Can.cpp create mode 100644 Robot_V2/device/Can.h create mode 100644 Robot_V2/device/Timer.cpp create mode 100644 Robot_V2/device/Timer.h create mode 100644 Robot_V2/device/adc.h create mode 100644 Robot_V2/device/ang_sensor.cpp create mode 100644 Robot_V2/device/ang_sensor.h create mode 100644 Robot_V2/device/motor.cpp create mode 100644 Robot_V2/device/motor.h create mode 100644 Robot_V2/device/test.cpp create mode 100644 Robot_V2/main.cpp create mode 100644 Robot_V2/main.h create mode 100644 Robot_V2/sys/OTA.cpp create mode 100644 Robot_V2/sys/OTA.h create mode 100644 Robot_V2/sys/config.h create mode 100644 Robot_V2/sys/flash.cpp create mode 100644 Robot_V2/sys/flash.h create mode 100644 Robot_V2/sys/health.cpp create mode 100644 Robot_V2/sys/health.h create mode 100644 Robot_V2/sys/initial.cpp create mode 100644 Robot_V2/sys/initial.h create mode 100644 Robot_V2/sys/systick.cpp create mode 100644 Robot_V2/sys/systick.h create mode 100644 out/Robot_V2+GD32C103CB.cbuild-run.yml create mode 100644 out/Robot_V2/GD32C103CB/Debug/Robot_V2.Debug+GD32C103CB.cbuild.yml create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/Can.cpp.189F590D64E2E593.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/Can.h.8B31786D14DBA198.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/OTA.cpp.50C8AB01C9FB489F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/OTA.h.A31C5333BB5BD1BE.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__assert.E345279A48A82EDB.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__assertion_handler.A06D3288BF6A29D6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__bit_reference.5581F6325EEF88AD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__config.30A38D3F581253B6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__hash_table.6BACF26D905ACE43.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__locale.CBD5BB79C9491443.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__mbstate_t.h.E3CAD0BE2BA17A12.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__node_handle.4DD592B5DB5DF1DD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__posix_l_fallback.h.3DA06B8078D52A15.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__split_buffer.4058F910FA3FAAED.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__std_mbstate_t.h.4C6E89C1BEA8FB5D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__strtonum_fallback.h.2071A03A8D89DB05.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__undef_macros.57D3C71F3A7CDC3F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__verbose_abort.F5A053E88C7D8970.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/abi.h.FF4E2174A05AF0D4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/abs.h.88A27D96B3A57198.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/access.h.145E1499C171D131.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/access.h.AE1FF68D71BE4910.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/accumulate.h.5466F2AED9365208.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/add_const.h.EE1659CCC75953B2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/add_cv.h.D828F08421293930.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/add_lvalue_reference.h.2BE6101D7483F1A8.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/add_pointer.h.5A03EB062085C90F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/add_rvalue_reference.h.F9D3F9E30C668025.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/add_volatile.h.47B164B5FB9A18CF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/addressof.h.904B359A9449298E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/adjacent_difference.h.86AC4FED5FB91107.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/adjacent_find.h.D96FBABC9AAF3B9B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/advance.h.5266297F85371B8C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/algorithm.B30359D947B69808.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/aliases.h.E1DBA59293C59E0C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/aliasing_iterator.h.D9524FD581BAF72D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/align.h.FD51B79B3D7C593C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/aligned_storage.h.E479E04EBB5F494C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/aligned_union.h.8B4152DD83941B69.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/alignment_of.h.16160A0F7457F061.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/all_of.h.5995C1323207F3C0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/allocate_at_least.h.372CC9DA473A1A11.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/allocation_guard.h.C0FC9EA0DABE6EB3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/allocator.h.E2154D9C2D533F58.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/allocator_arg_t.h.C61E4D03CAF2DB72.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/allocator_destructor.h.95895B512A88B71D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/allocator_traits.h.C39E12D9B656333D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/any_of.h.596A83D1376FF467.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/arithmetic.h.472E5FB4788CDB44.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/arm.h.B36414F100A03BC5.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/array.823BB78AF2DC6FB8.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/array.h.4A931171DE6421B4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/as_const.h.583845552C2B6EFC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/assignable.h.F6EB480E6DA2D825.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic.6F0B5D149341F7F2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic.h.796FC25F2505F6EC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic_base.h.4017A932C4226FB2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic_flag.h.6E0A411934D9EC58.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic_init.h.7B0EB7135A1804F5.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic_lock_free.h.D1E9374D2EC4C0B1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic_sync.h.E5D7BA1914710C56.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/auto_cast.h.8CF9D0A292C2A48A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/auto_ptr.h.C13AC252E0D54B59.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/availability.h.4A3E0FF96F5383BC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/back_insert_iterator.h.75B14E10F5662592.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bernoulli_distribution.h.54396DDE7A3A5D77.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/binary_function.h.0270CAD7354089A4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/binary_negate.h.6728A6211F595C4E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/binary_search.h.8C6FD15D08393FE0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bind.h.58C1F5CA64878D61.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/binder1st.h.FDD57B15FD661708.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/binder2nd.h.EC8AE384DC5BFB06.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/binomial_distribution.h.8DC1D7F2150DA55A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bit.11EEF07B2FA18BD4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bit_cast.h.BAF1058F560618B6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bit_reference.h.7E0EAF5F9323DE3A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/blsr.h.6DFA61E449FF7F15.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/boolean_testable.h.763055A39DDA24B7.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bounded_iter.h.2E95ED3788A69ED6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/boyer_moore_searcher.h.78D863651A13F341.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bsd_locale_fallbacks.h.2B5764B2CC73DEC1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/buffer.h.8E0B1954A377CF97.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/builtin_new_allocator.h.A33AB4FC7FC5A377.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/can_extract_key.h.DDF8C1F767140C73.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cauchy_distribution.h.4B184DA389313C79.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cctype.41E40031BAD0B66A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cerrno.0507BFB39A251894.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/char_traits.h.ACAAAA892C3B7AF3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/check_memory_order.h.45FFDD340ACC9CCA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/chi_squared_distribution.h.AA839B6E0FF025AC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/clamp.h.8681AE4D76E3C110.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/clamp_to_integral.h.96582E5A141DFB65.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/class_or_enum.h.08AB965AA082F9F6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/climits.E28CBAF95D6297E5.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/clocale.845299ED330323A2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cmath.897A1FBCD85B8687.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/common_comparison_category.h.79D3A3A9F48F543A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/common_reference.h.53D18AD8F96D0322.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/common_reference_with.h.D237B3CB1BE83226.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/common_type.h.D1E41E04223A2EA1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/comp.h.33EFFEB59228A79B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/comp_ref_type.h.7C830A33ED20669F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/compare.B226725F596BB269.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/compare_three_way.h.77E3698F10D0AD82.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/compare_three_way_result.h.4A4AF3300AE42C79.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/compiler.h.7B172C72923E4560.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/complex.h.BE75731799287E48.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/compressed_pair.h.03142A32A127C044.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/concepts.5626189FF631F015.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/concepts.h.04CAA957A0692B88.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/concepts.h.259B56F1E2A3749C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/concepts.h.36E8012122A56AC9.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/concepts.h.FCB0BD7182788737.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/condition_variable.h.FB8A7741F32CDE7E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/conditional.h.A60C42E31A26E14B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/config.h.64C4A69BAD8C2642.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/conjunction.h.C3C8BCA48E138593.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/constexpr_c_functions.h.C41E86195B675CFF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/construct_at.h.8575EA892FE66828.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/constructible.h.8305E16F97D03B92.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/container_compatible_range.h.34DF8E0859E8CA0A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/contention_t.h.94CE35A00C98221B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/convert_to_integral.h.BB55A1173E0E5D1E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/convertible_to.h.AF7FB873A9C3BF81.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy.h.973102E8206E202F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_backward.h.189F2F6CB7362E78.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_cv.h.F0B051EE47E984C0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_cvref.h.5E9807E6078DC895.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_if.h.AB9F6E505087491D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_move_common.h.D563070E7254EC13.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_n.h.0AC42427849132F9.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copyable.h.1156F81A09F1AD8E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copysign.h.AAC8FA3FDAEEA894.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/core_cm4.h.CC705C8F3FEC8944.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/core_cm4_simd.h.E8FC04F231FE4092.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/core_cmFunc.h.77722454BC93B8E2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/core_cmInstr.h.CDBA5A00B6B2E1D6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/count.h.BDE8C409E04FEAC3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/count_if.h.7834C7F763BF4AE0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/countl.h.C435FDEF26928854.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/countr.h.23679444F87C5A17.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cstdarg.8B2752D53B87D8FA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cstddef.4FB307A386DE5065.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cstdint.A28258D7D90B4F09.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cstdio.AD9B4EC480E77860.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cstdlib.65BC9BB3F270A9D6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cstring.B0715BA78B825871.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ctime.9CD23D8851A90920.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ctype.h.A859AB71FC1AF149.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ctype.h.D2BF01A5EAB1C8AD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cwchar.E408FC646F0D5547.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cwctype.38212B9A6D9B3D46.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cxx_atomic_impl.h.F57C898D119C5E18.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/dangling.h.255EB75741B9F7D0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/data.h.5D1DEB009CA3CFD8.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/data.h.80DECDAC5E7932D1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/datasizeof.h.AD464932AD7356B0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/decay.h.F6682406F3F8D668.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/declval.h.EE8ED7882A74A218.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/default_random_engine.h.B9B906BAD56E3609.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/default_searcher.h.E240A1A8B768056E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/default_sentinel.h.B897A3FD54947BCA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/dependent_type.h.ACCA67AD0B14D4AC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/derived_from.h.C6BDD379E985EA2E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/destruct_n.h.92E52D2853C033CB.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/destructible.h.705C0699A9D10199.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/desugars_to.h.2195A466DF580F14.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/different_from.h.BD0F6307B6F0B6FC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/discard_block_engine.h.8093DA26EE4C9233.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/discrete_distribution.h.0801BDF957890E93.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/disjunction.h.CE6E738F5B4FA686.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/distance.h.DA7B3C92281713E9.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/duration.h.DB9974C660070F66.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/empty.h.2ADEC2E99BEFFA0D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/empty.h.AEF655102DC8EC54.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/empty.h.AFF76EF902F5662D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/enable_borrowed_range.h.13DE2DEF7A398A5E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/enable_if.h.BC3C82D5E21D7639.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/enable_insertable.h.C29A8AA97AECB407.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/enable_view.h.CF466F520822E115.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/equal.h.2A6141FBF10917BC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/equal_range.h.70732B9350D3CD9C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/equality_comparable.h.E7D218DA88BB04B6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/erase_if_container.h.024EDCFF0B1B8EF6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/errc.h.75D0FD53E26E4F73.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/errno.h.10371C1DDC4BFC92.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/errno.h.42779960C98FC621.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/error_category.h.239968016733BE57.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/error_code.h.AC13E4769EAF7D59.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/error_condition.h.3BEAAC54DCEB195F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/error_functions.h.9935817FF1F33E52.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exception.738A51C043E5C14F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exception.h.D8C5111A308F2692.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exception_guard.h.D545BBEB7909E6CA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exception_ptr.h.24C47F5B333FB7E1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exchange.h.300D90E40B3A7734.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exclusive_scan.h.C4AD492DBBA992DB.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/execution.986FAA929C11DE44.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exponential_distribution.h.280BEB34D99FDD75.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exponential_functions.h.55D5B21C0FBB1C0E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/extended_grapheme_cluster_table.h.7559E4A8E1B3D831.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/extent.h.BE25866992E84088.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/extern_template_lists.h.55C2C02A1EA324F4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/extreme_value_distribution.h.C8D53A1B89F27E5F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/fdim.h.11A70B93B7E85CE9.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/fence.h.2E421EFC8E7123C3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/fill.h.7D29F04CC7CC0B03.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/fill_n.h.5EEDBEACB3CD43F3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find.h.D1A43C182763EE7D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_end.h.15FDE6E17A82D31D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_first_of.h.2BB2AC66B095CEBC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_if.h.3FC9097A48E94ED8.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_if_not.h.9B02D1BECDA57157.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_index.h.B72F41E58BF0F68F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_segment_if.h.DC9FE000EB02479B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/fisher_f_distribution.h.B43ED9C624B3EBDD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/flash.cpp.8F9E316F74D04058.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/flash.h.5DA166015EA23E7C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/fma.h.58258C4934799F1D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/for_each.h.035278B724E87AF0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/for_each_n.h.E4578CE2562136A1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/for_each_segment.h.CAB9A10BEBF7F261.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/format.h.990F54CDB6C0B18A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/format_arg.h.5F776F736041F9C4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/format_error.h.E08DED97442A6F4A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/format_parse_context.h.E743FB3F06164780.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/format_string.h.7BFA80B3ADA1174E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/format_to_n_result.h.6E36E4D0B6835EE5.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/formatter.h.6C2294F5A2A978CC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/formatter_bool.h.7AF1073675FDE69E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/formatter_integral.h.9251ACCA130A9567.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/formatter_output.h.0C707313BC8B1AC5.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/forward.h.EF526ED9681BEDE2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/forward_like.h.54AEDF8D977A59BE.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/fpos.h.51F847CC42CC7FB0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/from_range.h.1813980F34DCA66A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/front_insert_iterator.h.F90717F379EE45F9.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/fstream.h.B8F5415AA0A8938D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/function.h.49D9C8096C2908A3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/functional.22015D78C09675A7.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/functional.h.8343B93DC7AB798A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gamma.h.565E36029249C60D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gamma_distribution.h.A7A4BD8575E0DD0E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gcd_lcm.h.1D27E93FE773BA29.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x.h.CA3FDA6574B06FC1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_adc.h.EF4358569067F517.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_bkp.c.B2AC217BC86F058C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_bkp.h.28AB3DAAE2BCC6C2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_can.c.9A7AF0289E55BDB6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_can.h.9D407DE6E7D7BBC6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_crc.c.F6DDC6B8B8993B58.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_crc.h.BCF9DD097BC0E558.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_ctc.h.689D2BB536D5AB9B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_dac.h.8E85B964D194DCF6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_dbg.c.77F06E5A520C4FCE.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_dbg.h.057F810B0DB71ECF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_dma.c.35CA06EF854535A5.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_dma.h.E55AB735911EF4CD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_eval.c.594FB0A3FEC0397F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_eval.h.5DA3DA1252F47ABB.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_exmc.h.12FCFBE39F7C8EE1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_exti.c.04D5F235593F65BA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_exti.h.325FE95D190A0DD5.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_fmc.c.6C918DDFBCD12E54.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_fmc.h.085216A0DF1765A6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_fwdgt.c.86603F7A914142A9.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_fwdgt.h.A1DEE4AD92B3FDBA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_gpio.c.7D9C99867F6F9BAE.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_gpio.h.319A27BC78E6E6DF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_i2c.h.F2668D21079D77C4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_libopt.h.E4A1E3DB1E741BF6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_misc.c.6B3DFF52F8233DF2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_misc.h.CB5209240ED995C3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_pmu.c.7F8D1B29C554C9FD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_pmu.h.E6ED462BA1FFA736.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_rcu.c.228F9724BB392EE3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_rcu.h.B5EAFBD1E2CFD229.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_rtc.h.A18544EABA387F40.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_spi.h.21EB4F19BDAFC3E0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_timer.h.0295D8FCD03CD7D6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_usart.c.E3B04A639D02B8B1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_usart.h.0EEB29A2569AC05B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_wwdgt.h.0FBAD93D1D95DB21.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/generate.h.E9B5F2A10C2E7224.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/generate_canonical.h.331BBBE2D2A0ED98.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/generate_n.h.6FF61CC2C0AA4587.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/geometric_distribution.h.91DA632C425405E7.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/half_positive.h.835AC56A0E242B1F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/has_unique_object_representation.h.8C81629C4A36156B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/has_virtual_destructor.h.64567FE18BF6E3DF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/hash.h.883B556D9DB05764.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/high_resolution_clock.h.90C4FEF3764C2F9D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/hyperbolic_functions.h.7AE80F11FB8FCB8C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/hypot.h.6188795359D07194.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/id.h.8E48E9BB85BAFEDB.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/identity.h.3184AA958B4FFFC3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ignore.h.5C13969DE9B73E1F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/in_in_out_result.h.512579FCBED28C25.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/in_out_result.h.2E5990760C39DE2F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/in_place.h.33FB8B5B562FAB34.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/includes.h.8B6877206B612D29.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inclusive_scan.h.0480AFFA9E0915C0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/incrementable_traits.h.D1DA584B5709D41A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/independent_bits_engine.h.765BCEAD1CF73B6D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/indic_conjunct_break_table.h.A79BFBF5B5DC314A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/initial.cpp.091E9550D2F5002F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/initial.h.3789E8A46017A9C9.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/initializer_list.967A8146E450D645.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inner_product.h.02CDC2358617CC13.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inout_ptr.h.A27C06B285DB600B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inplace_merge.h.2A9C5DB1304275FC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/insert_iterator.h.66B801DEC63CD811.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/integer_sequence.h.E5F0501589D243E8.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/integral_constant.h.AE83A9C783F3E1FC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inverse_hyperbolic_functions.h.B3EF4DA55939D92A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inverse_trigonometric_functions.h.6FA2170402B62718.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/invert_if.h.F0EEC460CC1B74F1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/invocable.h.5FBF525FC7995401.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/invoke.h.01F7682F585EBC75.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/invoke.h.D5482CEF74F9AE21.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ios.37D749D0BD5969FC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ios.h.38DC8C7C5E8EDF72.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iosfwd.FE59745E653D39BE.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iota.h.FA0A39100F813132.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_abstract.h.49B5EA65BD6F7D8C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_aggregate.h.4FD07E224BFB7AE8.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_allocator.h.AA303E57362A4729.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_always_bitcastable.h.7F1F54E927EB34D7.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_always_lock_free.h.AC3C87D950F4D6F8.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_arithmetic.h.ACD8E5D2A9FFFF1E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_array.h.F12A9D5F316285B1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_assignable.h.3E3CEB4B8D4D4214.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_base_of.h.B131E5198F7EC50C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_bounded_array.h.F72A3BC59A2990B2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_callable.h.3CB8357A2C5E0E65.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_class.h.883AC9084E09F8A3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_compound.h.1CCB7D41E405206D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_const.h.B2F55503C8C40DCC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_constant_evaluated.h.77CAD4341A852355.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_constructible.h.96B6728AC672B2EC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_convertible.h.03BF5079F7A83C51.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_core_convertible.h.CDD0F4DD8EC5EAF5.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_destructible.h.FB1858F75C6E1B8A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_empty.h.6D4DA0DBD064B226.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_enum.h.BB2EBEE7DF91619E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_equality_comparable.h.E27628545CB3B306.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_execution_policy.h.5B362EFD9EF957C9.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_final.h.2C12464E43993C97.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_floating_point.h.8EAB90A2EB9CCCBB.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_function.h.F6ED986B59B83663.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_fundamental.h.13BAC84CD66153C4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_heap.h.09FD231B17C39C83.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_heap_until.h.D53F19D7B71F8B50.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_implicitly_default_constructible.h.3A4377990962FA8B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_integral.h.DAE94075EC5D66C3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_literal_type.h.6A7166FB738E9FFE.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_member_pointer.h.DC574E93086B7A9D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_nothrow_assignable.h.DA66871630172DBD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_nothrow_constructible.h.2CC908809464F1E0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_nothrow_destructible.h.848AD33BDE197B71.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_null_pointer.h.AA29EA114199F3A4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_object.h.5C8684A7225DDDAA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_partitioned.h.C8064981C4956B40.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_permutation.h.0A91444E8F583F1B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_pod.h.E2CBCD869A86E300.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_pointer.h.AA15CD79ABF2C9ED.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_pointer_in_range.h.5959AAF1450AFE8D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_polymorphic.h.53467A5A539F2ADD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_primary_template.h.40C05A6DC80217D3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_reference.h.0319D240F1BF7EF4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_reference_wrapper.h.D5FC88FA7EBA71AD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_referenceable.h.2139A342F9598D63.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_same.h.AA5B651ECDA46A9F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_scalar.h.6991FA1BFD30118A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_seed_sequence.h.8289C146A170DBCA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_signed.h.139A87B80CEA610A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_signed_integer.h.332587A207E718CE.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_sorted.h.F896857BC419469D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_sorted_until.h.3BC318266FB99A92.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_specialization.h.E433D73BA7A52FCC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_standard_layout.h.3377C5BE8672CA3B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_swappable.h.3BB2ECEBD0A61D48.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_transparent.h.C0C046C7AEABFED6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivial.h.5138D1392FAF839A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivially_assignable.h.D9DCE11181ABE29B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivially_constructible.h.8D31EAF5056E6907.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivially_copyable.h.91C68C48F2E17D15.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivially_destructible.h.C60E7178F54BD94B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivially_lexicographically_comparable.h.45E47625872B5DCE.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivially_relocatable.h.C8775AB00396A68D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_unbounded_array.h.CC460754E1D88DD3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_union.h.A0EDF5E23D447FA7.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_unsigned.h.3C53D2566F0C5879.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_unsigned_integer.h.B68D28746FA9E591.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_valid.h.5D7192519EBAC22F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_valid_expansion.h.733378003B825D17.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_valid_range.h.7D190A33FA8990A0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_void.h.EED11160F0850253.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_volatile.h.FF8E1D441994F32D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/istream.h.57D0390027A936D4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/istream_iterator.h.206C0ABBDFB3FC09.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/istreambuf_iterator.h.F047DF33D44FBBF3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iter_move.h.E14FA613D5A041C9.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iter_swap.h.ACEDDCDFF3B24E81.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iter_swap.h.FEB5042665CE4EFD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iterator.99A30467BF5E69A3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iterator.h.594856F054C605A1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iterator_operations.h.C497B84E2783FF11.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iterator_traits.h.D23B20C46EDA0250.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/kill_dependency.h.844803F4D9DE4C1A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/knuth_b.h.D8EAC1EF94216D5A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/language.h.1FF35719D4011FAA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lazy.h.FFD84FDB223282BE.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lexicographical_compare.h.F87D7565F6AA22D4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lexicographical_compare_three_way.h.682A24580EA4ACD8.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/limits.7823894A40E92A27.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/limits.h.4667C41B0CB6AF5F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/linear_congruential_engine.h.41212A98EF204F5F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/locale.7DCC05AEABC92EC6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/locale.h.1459E9CD145BDF48.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/locale.h.5DB8185214B4E86F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/locale_base_api.h.20FE6B0B0588F0C2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/locale_guard.h.2C2E448EDE025341.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lock_guard.h.335C023AEB5BC60B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/log2.h.C5B4B93937412FC4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/logarithms.h.CB1AE45B0B2702D4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lognormal_distribution.h.B14475A998CB124C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lower_bound.h.9E9D47C95A91ACD4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/main.cpp.0E43507EBD398BBA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_32_64_or_128_bit.h.6306278CFFAA9DB6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_const_lvalue_ref.h.6E4C10E741F1B388.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_heap.h.4511F87A5D6C0634.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_projected.h.18D5DF92FA25D85F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_signed.h.3A16A448C255F1EC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_tuple_types.h.DCE7A337E608B7BB.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_unsigned.h.1DBAB563162F8611.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/math.h.FA63853E54A56DD0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/math.h.FDAF21D7A5B4B726.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/max.h.74FCCCE84EF837CD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/max_element.h.5F6E46DDB4549D59.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/maybe_const.h.9C98AC87F7791ABF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/mem_fn.h.F314EAF99FE9A47E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/mem_fun_ref.h.8CFA00FEA2165792.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/memory.2AB23E2CB8981748.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/memory.h.38E36F62DB1D52EE.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/memory_order.h.7EA3D6810723B78C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/memory_resource.h.425E28114F9185E1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/memory_resource.h.DC75938AB83C7CCC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/merge.h.AEFB228341672878.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/mersenne_twister_engine.h.32BEED209FC6FC30.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/min.h.8DA5F299BF82516F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/min_element.h.E8CF37081C3AE3F1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/min_max.h.B8043771CDCF322D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/minmax.h.E0B6AB5E18D00125.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/minmax_element.h.4891F7E36DD4A2A8.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/mismatch.h.9DA7550F5B08A645.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/modulo.h.FB829A77FA8BF72E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/monostate.h.A53F4D2FB87FE381.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/movable.h.18F69015A5EC72A6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/movable_box.h.757EB7D0A5E7A98F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/move.h.7690FA5DD03A0CEA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/move.h.C90662CD8D69F515.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/move_backward.h.8235D363C9EEEA34.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/move_iterator.h.8129EA95A6ADEAE4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/move_sentinel.h.09059202E0D7E3BC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/mutex.E453ECB8CC08EA8B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/mutex.h.CFFBE8F4F617FCDA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/nat.h.6F825F99E94F81F5.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/negation.h.2A420FFCAEDD9D78.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/negative_binomial_distribution.h.EC0924C2A2A39B43.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/nested_exception.h.4E1A59394FF72293.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/new.90705CE65A1CC122.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/next.h.3C9EB7D4A263DDAA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/next_permutation.h.1382F12C95086674.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/no_destroy.h.360F19637543D9B7.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/noexcept_move_assign_container.h.A019306552E13D5B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/none_of.h.FAB89C5D643EA993.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/normal_distribution.h.884FB25FED1AD797.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/not_fn.h.8C7A6C50221C47A1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/nth_element.h.3C78F1BB35A37EC3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/numeric.61C1EC9ED621EAB9.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/once_flag.h.2A5C4B7BAC4511AE.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/operations.h.0D4ABE387B894C56.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/operations.h.700ADDAD068F6FD5.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/optional.BF78B44765411FDF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ordering.h.652ED507A57E28CC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ostream.h.26C38309C53BE3D2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ostream_iterator.h.1552B5EAD3538A26.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ostreambuf_iterator.h.645371D68675D6AB.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/out_ptr.h.FAE1C55C60A9C68D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pair.h.3C5C0AC1D8B5C97A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pair.h.E6D9FC01B6CFDFC4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/parser_std_format_spec.h.84860ADE692480B6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partial_sort.h.5087978FABD20AD0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partial_sort_copy.h.319611E93B8A4CFB.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partial_sum.h.7A19825E94E840CF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partition.h.0FA3FDBD646D84C4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partition_copy.h.21BD3CF0FB1C9940.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partition_point.h.798E326AB036052F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/perfect_forward.h.79E69D5FF92240D0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/piecewise_constant_distribution.h.5C5063C93FFBA74D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/piecewise_construct.h.968071A7FCB194C3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/piecewise_linear_distribution.h.7E62360378ED3202.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/platform.h.9519C817BB8896B2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pointer_to_binary_function.h.115E14BEDA96E8EF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pointer_to_unary_function.h.A5E8AFBD5CFF6753.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pointer_traits.h.A1E4352FBFCB6789.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/poisson_distribution.h.CA7322EA1D26F160.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/poll_with_backoff.h.C9DCC4B7D84C81B7.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/polymorphic_allocator.h.2B50CA2ABE4DDB31.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pop_heap.h.DB1B1B0698AAE775.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/popcount.h.A9B791436A2EB215.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/predicate.h.0AC652433C7D252E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/prev.h.A9CF4EF00FA09869.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/prev_permutation.h.4E2079A766740303.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/private_constructor_tag.h.41E10EC5CADF5751.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/projected.h.F48E903DD8B268F9.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/promote.h.7CEBE789ED3968C5.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pstl.h.C5A38E55DBC590C4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pstl.h.C8221DABE666DA14.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/push_heap.h.C7920352CFA83778.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/random.3D36632E17D00160.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/random_device.h.D6A5729AEB02B7AF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/randomize_range.h.F315D98A6403F2CE.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_construct_at.h.99F5610A049957B8.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_copy.h.EE9AF5D32E59343D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_copy_n.h.731F4D6C572C21B5.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_fill_n.h.D4FD76B1D9303458.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_iterator_concept.h.7C37EDF27CC317CF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_iterator_traits.h.D7913F4F66CD66C8.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_operations.h.262C5ECC38C86002.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_transform.h.9FD3703E515515AD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_upper_bound.h.3BD163831FB6E89F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/rank.h.924AA4335C03708B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranlux.h.E237E8199354923B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ratio.5533D3494D735EE2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/raw_storage_iterator.h.61BCA162BB248280.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/readable_traits.h.721829DEDF9D2840.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reduce.h.428EF05B8A1A4A5A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reference_wrapper.h.977B591177265425.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/regular.h.605F1F6A3685148D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/rel_ops.h.BFBF1E87258219E0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/relation.h.E03FBF96470C642F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remainder.h.5FD2AC264FE76C7E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove.h.75E0913B14A3CA8E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_all_extents.h.229B5F6BA2B9205F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_const.h.87C5B951ED53AB3F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_const_ref.h.8034B53EAF7183E7.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_copy.h.59E1E2FC7ABAA199.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_copy_if.h.8F73042FE05B63F1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_cv.h.CE95648183D95206.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_cvref.h.20D11949D987EDE4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_extent.h.E3037A0E97BA3EB6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_if.h.AB03B053B9E23B20.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_pointer.h.4FC2EF010B5D012C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_reference.h.31CF85DCEDE6A3BD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_volatile.h.925762160888A177.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/replace.h.3B2DC15CF8D44890.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/replace_copy.h.17A3741966711320.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/replace_copy_if.h.CF26BBDBC2575B70.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/replace_if.h.C520D8E89B26A0C0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/result_of.h.F09E247C7592CD85.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reverse.h.CFCF8DA94D88AF7C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reverse_access.h.3BC7191EACA4E2CA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reverse_copy.h.528D96AA8BADEF29.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reverse_iterator.h.724E40878F82DCA2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/roots.h.7034EC9DF151E72D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/rotate.h.1275A7BBDCB011F6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/rotate.h.F66B1E4029766689.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/rotate_copy.h.3F5347FA54B87F92.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/rounding_functions.h.794067E037665006.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/same_as.h.57D42C3DEBA8BD43.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sample.h.6E07B845134BC18B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sanitizers.h.F74F63335D614D5E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/search.h.D7253C6950B2C1E2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/search_n.h.BAA4E8D22CE7FED4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/seed_seq.h.79105115AE614921.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/segmented_iterator.h.CF53F7E159FE02C1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/semiregular.h.0D2C9D4D585E4C4A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/set_difference.h.6530E96BBFF0E494.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/set_intersection.h.83EFDE2F3D7F43C7.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/set_symmetric_difference.h.0D643667100CE243.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/set_union.h.ECEF752AB3C4B13C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sfinae_helpers.h.4998634B7566175F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/shared_ptr.h.D04D3318B7ABF73D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/shuffle.h.FAD0CA60A22CC9D0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/shuffle_order_engine.h.23876B288758363C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sift_down.h.7B94369BC0C2E4C0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/simd_utils.h.3634D4418600B905.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/size.h.932DCAFCB7B86EC4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/size.h.9E931F8BA0582D89.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sort.h.8CDF8820EB061655.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sort_heap.h.ADCE49F00A9ABACD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/special_functions.h.798B540E1A4DD74E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sstream.h.125C3BA0793F4F64.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stable_partition.h.4C959889C10A229D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stable_sort.h.4A8CE978DD5E5FB2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdarg.h.91D8E4F4F2AB368B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stddef.h.9AFA5AD8EF66A96D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stddef.h.CD0E280344C76AAC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdexcept.54D08763FD1F5E48.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdint.h.43B2D76160AC52CA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdint.h.FB0C6441DE3EED80.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdio.h.34DE98B629941C4A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdio.h.E6D66DA0CB3C3122.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdlib.h.6AAF2D52688EAF4D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdlib.h.C292466360747BC9.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/steady_clock.h.439DF5434184A609.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/streambuf.66A76306EEAD9E71.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/streambuf.h.F4952FB8C61AAF35.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/strict_weak_ordering_check.h.D4399C22DA29E043.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/string.9711B4DED4D835CC.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/string.h.626939629D08384A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/string.h.797333FE765FB5F1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/string.h.E220BF4E30EFDCC7.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/string_view.05ECCF7139A44305.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/string_view.h.CDDA0157556164D4.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/strip_signature.h.6F11072ECC5AB7BA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/student_t_distribution.h.7A78252292DF9631.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/subrange.h.833EE16C539BC01C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/subrange.h.A51BAAA20BF1ABBA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/subtract_with_carry_engine.h.F1ABEDAA7C06F6FF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/support.h.49371EC40513A70C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/swap.h.77CD6A5FFB0C4FA2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/swap_allocator.h.98FC7D0779E432AB.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/swap_ranges.h.4F23106FD90BB375.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/swappable.h.13C66D84F12E1CD9.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/synth_three_way.h.732CC0C95E214BED.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/system_clock.h.77D3BB677FECB43B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/system_error.8DCE5C30978940DB.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/system_error.h.3B0DF7000664B9FD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/system_gd32c10x.c.452EB4E084F788B0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/system_gd32c10x.h.22477223D94E8216.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/systick.cpp.D6965781E9E353E3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/systick.h.B6A7175B66896FF1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tables.h.87D2B8EEB3F7FB90.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tag_types.h.7EA08D2FCB5526FF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/temp_value.h.FE7E37D703CAEDFB.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/temporary_buffer.h.70CB60F2B84D2F0E.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/terminate.h.4B5AE8494DB60358.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/three_way_comp_ref_type.h.1EDFDD7B6E521A85.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/three_way_comparable.h.AA954713807061E1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/time.h.D264233BC10C47A0.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/time_point.h.BFDF913C60D8BA11.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/to_chars_base_10.h.05E0EB5B5EEB34DF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/to_chars_integral.h.ED223F62FCEA7398.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/to_chars_result.h.02A779CDBE37DE87.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/to_gcc_order.h.CA3D0ED367860B07.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/totally_ordered.h.9ACE0D9BD1A431BB.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/traits.h.054BA444558158FF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/traits.h.3A3A7EE63D605587.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/transform.h.7020D2BAA4584EBA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/transform_exclusive_scan.h.B5D5D2F8F5AEA094.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/transform_inclusive_scan.h.60E5341877AD00A6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/transform_reduce.h.C4F0981BA496A189.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/trigonometric_functions.h.3A9AC935DB747FC1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple.0145E94843AD1A46.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple.h.67D03A8A5A38FE8B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_element.h.5EBFE0992EF5F6AA.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_indices.h.CBEB5740A14DE2F5.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_like_ext.h.E0D1E3A0A3B5DB6D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_like_no_subrange.h.D64033078CC151F8.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_size.h.09CEC8A002112EC1.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_types.h.0D5AD9E137BC2B92.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/type_identity.h.E76DB18F2B2B3CCD.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/type_list.h.CEA1C7FE77FDAB85.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/type_traits.9761DD2E1700AB2D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/typeinfo.FE0ACDE9DB83EC79.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unary_function.h.3AA202CCD04741BB.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unary_negate.h.F7CEC985FF0D4344.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/underlying_type.h.BE08A4C00E8C173C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unicode.h.B83D5D46FA0FD2C3.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/uniform_int_distribution.h.E265CE4A07C35D73.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/uniform_random_bit_generator.h.9CBDF3225CA92F78.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/uniform_real_distribution.h.143AE5D861EE4E8C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/uninitialized_algorithms.h.C5EA7BE8E6577109.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unique.h.5A62E4947B508F2C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unique_copy.h.1B4C888D6DF1AA59.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unique_lock.h.140006F566DA327D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unique_ptr.h.1D8B108D8DFC5B85.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unordered_map.7B3D663F7BFFA563.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unreachable.h.051A6D54C9154348.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unreachable_sentinel.h.93E8A07209989F81.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unwrap_iter.h.83DA630310A3AC8C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unwrap_range.h.61BE0D73AD25157D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unwrap_ref.h.474FD90C3321EEB7.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/upper_bound.h.9C32212E6017B999.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/uses_allocator.h.9281CEA1979A7A9D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/utility.AB477ADB3300132A.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/variant.67131580FDDBB730.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/vector.F0ACE3709BA75640.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/vector.h.4598AF5F599A3548.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/version.68FAC25560644D60.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/view_interface.h.5EC3B1B4C4D1662C.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/void_t.h.C65FACB8D0ADDC26.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/voidify.h.D1E9E7C00EA3ED47.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/wchar.h.0B57B5D77F67DF8F.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/wchar.h.81D3D4D24961BC6D.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/wctype.h.5F3D7D775E4B95FF.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/wctype.h.8D38237F4025A01B.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/weak_result_type.h.9EDE35462DD9E310.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/weibull_distribution.h.502721EDADFF92F2.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/width_estimation_table.h.F4544BD901E48883.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/wrap_iter.h.31F6BD71A78208B6.idx create mode 100644 out/Robot_V2/GD32C103CB/Release/Robot_V2.Release+GD32C103CB.cbuild.yml create mode 100644 out/Robot_V2/GD32C103CB/Release/Robot_V2.axf create mode 100644 out/Robot_V2/GD32C103CB/Release/Robot_V2.axf.map create mode 100644 out/Robot_V2/GD32C103CB/Release/Robot_V2.hex create mode 100644 out/Robot_V2/GD32C103CB/Release/compile_commands.json create mode 100644 tmp/.ninja_log create mode 100644 tmp/1/.ninja_deps create mode 100644 tmp/1/.ninja_log create mode 100644 tmp/1/CMakeCache.txt create mode 100644 tmp/1/CMakeFiles/3.31.5/CMakeASMCompiler.cmake create mode 100644 tmp/1/CMakeFiles/3.31.5/CMakeCCompiler.cmake create mode 100644 tmp/1/CMakeFiles/3.31.5/CMakeCXXCompiler.cmake create mode 100644 tmp/1/CMakeFiles/3.31.5/CMakeDetermineCompilerABI_C.bin create mode 100644 tmp/1/CMakeFiles/3.31.5/CMakeDetermineCompilerABI_CXX.bin create mode 100644 tmp/1/CMakeFiles/3.31.5/CMakeSystem.cmake create mode 100644 tmp/1/CMakeFiles/3.31.5/CompilerIdC/CMakeCCompilerId.c create mode 100644 tmp/1/CMakeFiles/3.31.5/CompilerIdC/CMakeCCompilerId.o create mode 100644 tmp/1/CMakeFiles/3.31.5/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100644 tmp/1/CMakeFiles/3.31.5/CompilerIdCXX/CMakeCXXCompilerId.o create mode 100644 tmp/1/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_EVAL_GD32C10x_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.o create mode 100644 tmp/1/CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.o create mode 100644 tmp/1/CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o create mode 100644 tmp/1/CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o create mode 100644 tmp/1/CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o create mode 100644 tmp/1/CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/flash.o create mode 100644 tmp/1/CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/initial.o create mode 100644 tmp/1/CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/systick.o create mode 100644 tmp/1/CMakeFiles/TargetDirectories.txt create mode 100644 tmp/1/CMakeFiles/cmake.check_cache create mode 100644 tmp/1/CMakeFiles/feature_tests.bin create mode 100644 tmp/1/CMakeFiles/rules.ninja create mode 100644 tmp/1/ac6_linker_script.sct create mode 100644 tmp/1/build.ninja create mode 100644 tmp/1/cmake_install.cmake create mode 100644 tmp/1/compile_commands.json create mode 100644 tmp/CMakeCache.txt create mode 100644 tmp/CMakeFiles/3.31.5/CMakeSystem.cmake create mode 100644 tmp/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-build.dir/Labels.json create mode 100644 tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-build.dir/Labels.txt create mode 100644 tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-complete create mode 100644 tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-configure.dir/Labels.json create mode 100644 tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-configure.dir/Labels.txt create mode 100644 tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-database.dir/Labels.json create mode 100644 tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-database.dir/Labels.txt create mode 100644 tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-executes.dir/Labels.json create mode 100644 tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-executes.dir/Labels.txt create mode 100644 tmp/CMakeFiles/Robot_V2.Release+GD32C103CB.dir/Labels.json create mode 100644 tmp/CMakeFiles/Robot_V2.Release+GD32C103CB.dir/Labels.txt create mode 100644 tmp/CMakeFiles/TargetDirectories.txt create mode 100644 tmp/CMakeFiles/cmake.check_cache create mode 100644 tmp/CMakeFiles/rules.ninja create mode 100644 tmp/CMakeLists.txt create mode 100644 tmp/Robot_V2.Release+GD32C103CB/CMakeLists.txt create mode 100644 tmp/Robot_V2.Release+GD32C103CB/components.cmake create mode 100644 tmp/Robot_V2.Release+GD32C103CB/groups.cmake create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-.cmake create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-err.log create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-out.log create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-.cmake create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-err.log create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-out.log create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-done create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-download create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-executes create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-mkdir create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch-info.txt create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-source_dirinfo.txt create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-test create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update create mode 100644 tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update-info.txt create mode 100644 tmp/Robot_V2.Release+GD32C103CB/tmp/Robot_V2.Release+GD32C103CB-cfgcmd.txt create mode 100644 tmp/Robot_V2.Release+GD32C103CB/tmp/Robot_V2.Release+GD32C103CB-mkdirs.cmake create mode 100644 tmp/Robot_V2.Release+GD32C103CB/toolchain.cmake create mode 100644 tmp/build.ninja create mode 100644 tmp/cmake_install.cmake create mode 100644 tmp/roots.cmake create mode 100644 vcpkg-configuration.json diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..dd5c713 --- /dev/null +++ b/.clang-format @@ -0,0 +1,7 @@ +BasedOnStyle: LLVM +UseTab: Always +IndentWidth: 4 +TabWidth: 4 +BreakBeforeBraces: Attach +AllowShortIfStatementsOnASingleLine: false +IndentCaseLabels: false diff --git a/.continue/mcpServers/new-mcp-server.yaml b/.continue/mcpServers/new-mcp-server.yaml new file mode 100644 index 0000000..0e32aa6 --- /dev/null +++ b/.continue/mcpServers/new-mcp-server.yaml @@ -0,0 +1,10 @@ +name: New MCP server +version: 0.0.1 +schema: v1 +mcpServers: + - name: New MCP server + command: npx + args: + - -y + - + env: {} diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..93ef6f1 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,18 @@ +{ + "configurations": [ + { + "name": "windows-gcc-x86", + "includePath": [ + "${workspaceFolder}/**" + ], + "compilerPath": "C:/mingw/bin/gcc.exe", + "cStandard": "${default}", + "cppStandard": "${default}", + "intelliSenseMode": "windows-gcc-x86", + "compilerArgs": [ + "" + ] + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..32da4d3 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,84 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "STLink@Arm-Debugger (launch)", + "type": "arm-debugger", + "request": "launch", + "connectionAddress": "${command:device-manager.getSerialNumber}", + "connectionType": "ST-Link", + "programs": "${command:cmsis-csolution.getBinaryFiles}", + "cmsisPack": "${command:cmsis-csolution.getDfpName}", + "deviceName": "${command:cmsis-csolution.getDeviceName}", + "processorName": "${command:cmsis-csolution.getProcessorName}", + "workspaceFolder": "${workspaceFolder}/" + }, + { + "name": "STLink@pyOCD (launch)", + "type": "gdbtarget", + "request": "launch", + "cwd": "${workspaceFolder}/", + "program": "out/Robot_V2/GD32C103CB/Release/Robot_V2.axf", + "gdb": "arm-none-eabi-gdb", + "auxiliaryGdb": true, + "preLaunchTask": "CMSIS Load", + "initCommands": [ + "monitor reset halt", + "tbreak main" + ], + "customResetCommands": [ + "monitor reset halt", + "maintenance flush register-cache", + "maintenance flush dcache", + "tbreak main", + "continue" + ], + "target": { + "server": "pyocd", + "serverParameters": [ + "gdbserver", + "--probe", + "stlink:", + "--connect", + "attach", + "--cbuild-run", + "${command:cmsis-csolution.getCbuildRunFile}", + "--quiet", + "--log", + "*.cbuild_run,*server=info" + ], + "port": "3333" + }, + "cmsis": { + "cbuildRunFile": "${command:cmsis-csolution.getCbuildRunFile}", + "updateConfiguration": "auto" + } + }, + { + "name": "STLink@pyOCD (attach)", + "type": "gdbtarget", + "request": "attach", + "cwd": "${workspaceFolder}/", + "program": "out/Robot_V2/GD32C103CB/Release/Robot_V2.axf", + "gdb": "arm-none-eabi-gdb", + "auxiliaryGdb": true, + "initCommands": [ + "" + ], + "customResetCommands": [ + "monitor reset halt", + "maintenance flush register-cache", + "maintenance flush dcache", + "tbreak main", + "continue" + ], + "target": { + "port": "3333" + }, + "cmsis": { + "cbuildRunFile": "${command:cmsis-csolution.getCbuildRunFile}", + "updateConfiguration": "auto" + } + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..4208c90 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "clangd.arguments": [ + "--compile-commands-dir=g:\\Robot_v2\\BOOT\\out\\Robot_V2\\GD32C103CB\\Release" + ], + "debug.hideSlowPreLaunchWarning": true, + "debug.showInStatusBar": "never" +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..1477a9b --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,112 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "CMSIS Load+Run", + "problemMatcher": [], + "dependsOn": [ + "CMSIS Load", + "CMSIS Run" + ], + "dependsOrder": "sequence" + }, + { + "label": "CMSIS Erase", + "type": "shell", + "command": "pyocd", + "options": { + "cwd": "${workspaceFolder}/", + "shell": { + "executable": "cmd.exe", + "args": [ + "/d", + "/c" + ] + } + }, + "args": [ + "erase", + "--probe", + "stlink:", + "--chip", + "--cbuild-run", + "${command:cmsis-csolution.getCbuildRunFile}" + ], + "problemMatcher": [] + }, + { + "label": "CMSIS Load", + "type": "shell", + "command": "pyocd", + "options": { + "cwd": "${workspaceFolder}/", + "shell": { + "executable": "cmd.exe", + "args": [ + "/d", + "/c" + ] + } + }, + "args": [ + "load", + "--probe", + "stlink:", + "--cbuild-run", + "${command:cmsis-csolution.getCbuildRunFile}" + ], + "problemMatcher": [] + }, + { + "label": "CMSIS Run", + "type": "shell", + "command": "pyocd", + "options": { + "cwd": "${workspaceFolder}/", + "shell": { + "executable": "cmd.exe", + "args": [ + "/d", + "/c" + ] + } + }, + "args": [ + "gdbserver", + "--probe", + "stlink:", + "--connect", + "attach", + "--persist", + "--reset-run", + "--cbuild-run", + "${command:cmsis-csolution.getCbuildRunFile}", + "--quiet", + "--log", + "*.cbuild_run,*server=info" + ], + "problemMatcher": [] + }, + { + "label": "CMSIS TargetInfo", + "type": "shell", + "command": "pyocd", + "options": { + "cwd": "${workspaceFolder}/", + "shell": { + "executable": "cmd.exe", + "args": [ + "/d", + "/c" + ] + } + }, + "args": [ + "list", + "--cbuild-run", + "${command:cmsis-csolution.getCbuildRunFile}" + ], + "problemMatcher": [] + } + ] +} \ No newline at end of file diff --git a/Robot_V2.cbuild-idx.yml b/Robot_V2.cbuild-idx.yml new file mode 100644 index 0000000..28e56bc --- /dev/null +++ b/Robot_V2.cbuild-idx.yml @@ -0,0 +1,17 @@ +build-idx: + generated-by: csolution version 2.12.0+p41-gfeadfc5e + cdefault: ${CMSIS_COMPILER_ROOT}/cdefault.yml + csolution: Robot_V2.csolution.yml + cbuild-run: out/Robot_V2+GD32C103CB.cbuild-run.yml + tmpdir: tmp + cprojects: + - cproject: Robot_V2/Robot_V2.cproject.yml + cbuilds: + - cbuild: out/Robot_V2/GD32C103CB/Release/Robot_V2.Release+GD32C103CB.cbuild.yml + project: Robot_V2 + configuration: .Release+GD32C103CB + messages: + info: + - Robot_V2.cbuild-pack.yml - file is already up-to-date + - Robot_V2+GD32C103CB.cbuild-run.yml - file is already up-to-date + - Robot_V2.Release+GD32C103CB.cbuild.yml - file is already up-to-date diff --git a/Robot_V2.cbuild-pack.yml b/Robot_V2.cbuild-pack.yml new file mode 100644 index 0000000..d3c7b80 --- /dev/null +++ b/Robot_V2.cbuild-pack.yml @@ -0,0 +1,8 @@ +cbuild-pack: + resolved-packs: + - resolved-pack: ARM::CMSIS@4.5.0 + selected-by-pack: + - ARM::CMSIS + - resolved-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by-pack: + - GigaDevice::GD32C10x_DFP diff --git a/Robot_V2.csolution.yml b/Robot_V2.csolution.yml new file mode 100644 index 0000000..54608ea --- /dev/null +++ b/Robot_V2.csolution.yml @@ -0,0 +1,52 @@ +# A solution is a collection of related projects that share same base configuration. +solution: + created-for: CMSIS-Toolbox@2.12.0 + cdefault: # use CMSIS-Toolbox default Compiler options + + # Compilers that can be selected + select-compiler: + - compiler: AC6 + - compiler: GCC + - compiler: IAR + - compiler: CLANG + + # List of miscellaneous tool-specific controls + misc: + - for-compiler: AC6 # GDB requires DWARF 5, remove when using uVision Debugger + C-CPP: + - -gdwarf-5 + ASM: + - -gdwarf-5 + + # List the packs that define the device and/or board. + packs: + - pack: GigaDevice::GD32C10x_DFP + - pack: ARM::CMSIS + + # List different hardware targets that are used to deploy the solution. + target-types: + - type: GD32C103CB + device: GD32C103CB + target-set: + - set: + images: + - project-context: Robot_V2.Release + debugger: + name: ST-Link@pyOCD + clock: 10000000 + protocol: swd + + # List of different build configurations. + build-types: + - type: Debug + debug: on + optimize: none + + - type: Release + debug: off + optimize: balanced + + # List related projects. + projects: + - project: Robot_V2/Robot_V2.cproject.yml + compiler: AC6 diff --git a/Robot_V2/.clangd b/Robot_V2/.clangd new file mode 100644 index 0000000..84e4f63 --- /dev/null +++ b/Robot_V2/.clangd @@ -0,0 +1,424 @@ +CompileFlags: + CompilationDatabase: g:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release + Add: + - '-D_ILP32=1' + - '-D_USE_STATIC_INLINE=1' + - '-D__APCS_32__=1' + - '-D__ARMCC_VERSION=6240002' + - '-D__ARMCOMPILER_VERSION=6240002' + - '-D__ARMEL__=1' + - '-D__ARM_32BIT_STATE=1' + - '-D__ARM_ACLE=200' + - '-D__ARM_ARCH=7' + - '-D__ARM_ARCH_7EM__=1' + - '-D__ARM_ARCH_EXT_IDIV__=1' + - '-D__ARM_ARCH_ISA_THUMB=2' + - '-D__ARM_ARCH_PROFILE=''M''' + - '-D__ARM_EABI__=1' + - '-D__ARM_FEATURE_CLZ=1' + - '-D__ARM_FEATURE_COPROC=0xf' + - '-D__ARM_FEATURE_DSP=1' + - '-D__ARM_FEATURE_FMA=1' + - '-D__ARM_FEATURE_IDIV=1' + - '-D__ARM_FEATURE_LDREX=0x7' + - '-D__ARM_FEATURE_QBIT=1' + - '-D__ARM_FEATURE_SAT=1' + - '-D__ARM_FEATURE_SIMD32=1' + - '-D__ARM_FEATURE_UNALIGNED=1' + - '-D__ARM_FP=0x6' + - '-D__ARM_FP16_ARGS=1' + - '-D__ARM_FP16_FORMAT_IEEE=1' + - '-D__ARM_NO_IMAGINARY_TYPE=1' + - '-D__ARM_PCS=1' + - '-D__ARM_PCS_VFP=1' + - '-D__ARM_PROMISE=__builtin_assume' + - '-D__ARM_SIZEOF_MINIMAL_ENUM=1' + - '-D__ARM_SIZEOF_WCHAR_T=2' + - '-D__ARM_VFPV2__=1' + - '-D__ARM_VFPV3__=1' + - '-D__ARM_VFPV4__=1' + - '-D__ATOMIC_ACQUIRE=2' + - '-D__ATOMIC_ACQ_REL=4' + - '-D__ATOMIC_CONSUME=1' + - '-D__ATOMIC_RELAXED=0' + - '-D__ATOMIC_RELEASE=3' + - '-D__ATOMIC_SEQ_CST=5' + - '-D__BIGGEST_ALIGNMENT__=8' + - '-D__BITINT_MAXWIDTH__=128' + - '-D__BOOL_WIDTH__=8' + - '-D__BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__' + - '-D__CHAR16_TYPE__=unsigned short' + - '-D__CHAR32_TYPE__=unsigned int' + - '-D__CHAR_BIT__=8' + - '-D__CHAR_UNSIGNED__=1' + - '-D__CLANG_ATOMIC_BOOL_LOCK_FREE=2' + - '-D__CLANG_ATOMIC_CHAR16_T_LOCK_FREE=2' + - '-D__CLANG_ATOMIC_CHAR32_T_LOCK_FREE=2' + - '-D__CLANG_ATOMIC_CHAR_LOCK_FREE=2' + - '-D__CLANG_ATOMIC_INT_LOCK_FREE=2' + - '-D__CLANG_ATOMIC_LLONG_LOCK_FREE=1' + - '-D__CLANG_ATOMIC_LONG_LOCK_FREE=2' + - '-D__CLANG_ATOMIC_POINTER_LOCK_FREE=2' + - '-D__CLANG_ATOMIC_SHORT_LOCK_FREE=2' + - '-D__CLANG_ATOMIC_WCHAR_T_LOCK_FREE=2' + - '-D__CONSTANT_CFSTRINGS__=1' + - '-D__DBL_DECIMAL_DIG__=17' + - '-D__DBL_DENORM_MIN__=4.9406564584124654e-324' + - '-D__DBL_DIG__=15' + - '-D__DBL_EPSILON__=2.2204460492503131e-16' + - '-D__DBL_HAS_DENORM__=1' + - '-D__DBL_HAS_INFINITY__=1' + - '-D__DBL_HAS_QUIET_NAN__=1' + - '-D__DBL_MANT_DIG__=53' + - '-D__DBL_MAX_10_EXP__=308' + - '-D__DBL_MAX_EXP__=1024' + - '-D__DBL_MAX__=1.7976931348623157e+308' + - '-D__DBL_MIN_10_EXP__=(-307)' + - '-D__DBL_MIN_EXP__=(-1021)' + - '-D__DBL_MIN__=2.2250738585072014e-308' + - '-D__DBL_NORM_MAX__=1.7976931348623157e+308' + - '-D__DECIMAL_DIG__=__LDBL_DECIMAL_DIG__' + - '-D__ELF__=1' + - '-D__ESCAPE__=' + - '-D__FINITE_MATH_ONLY__=1' + - '-D__FLT16_DECIMAL_DIG__=5' + - '-D__FLT16_DENORM_MIN__=5.9604644775390625e-8F16' + - '-D__FLT16_DIG__=3' + - '-D__FLT16_EPSILON__=9.765625e-4F16' + - '-D__FLT16_HAS_DENORM__=1' + - '-D__FLT16_HAS_INFINITY__=1' + - '-D__FLT16_HAS_QUIET_NAN__=1' + - '-D__FLT16_MANT_DIG__=11' + - '-D__FLT16_MAX_10_EXP__=4' + - '-D__FLT16_MAX_EXP__=16' + - '-D__FLT16_MAX__=6.5504e+4F16' + - '-D__FLT16_MIN_10_EXP__=(-4)' + - '-D__FLT16_MIN_EXP__=(-13)' + - '-D__FLT16_MIN__=6.103515625e-5F16' + - '-D__FLT16_NORM_MAX__=6.5504e+4F16' + - '-D__FLT_DECIMAL_DIG__=9' + - '-D__FLT_DENORM_MIN__=1.40129846e-45F' + - '-D__FLT_DIG__=6' + - '-D__FLT_EPSILON__=1.19209290e-7F' + - '-D__FLT_HAS_DENORM__=1' + - '-D__FLT_HAS_INFINITY__=1' + - '-D__FLT_HAS_QUIET_NAN__=1' + - '-D__FLT_MANT_DIG__=24' + - '-D__FLT_MAX_10_EXP__=38' + - '-D__FLT_MAX_EXP__=128' + - '-D__FLT_MAX__=3.40282347e+38F' + - '-D__FLT_MIN_10_EXP__=(-37)' + - '-D__FLT_MIN_EXP__=(-125)' + - '-D__FLT_MIN__=1.17549435e-38F' + - '-D__FLT_NORM_MAX__=3.40282347e+38F' + - '-D__FLT_RADIX__=2' + - '-D__FPCLASS_NEGINF=0x0004' + - '-D__FPCLASS_NEGNORMAL=0x0008' + - '-D__FPCLASS_NEGSUBNORMAL=0x0010' + - '-D__FPCLASS_NEGZERO=0x0020' + - '-D__FPCLASS_POSINF=0x0200' + - '-D__FPCLASS_POSNORMAL=0x0100' + - '-D__FPCLASS_POSSUBNORMAL=0x0080' + - '-D__FPCLASS_POSZERO=0x0040' + - '-D__FPCLASS_QNAN=0x0002' + - '-D__FPCLASS_SNAN=0x0001' + - '-D__GCC_ATOMIC_BOOL_LOCK_FREE=2' + - '-D__GCC_ATOMIC_CHAR16_T_LOCK_FREE=2' + - '-D__GCC_ATOMIC_CHAR32_T_LOCK_FREE=2' + - '-D__GCC_ATOMIC_CHAR_LOCK_FREE=2' + - '-D__GCC_ATOMIC_INT_LOCK_FREE=2' + - '-D__GCC_ATOMIC_LLONG_LOCK_FREE=1' + - '-D__GCC_ATOMIC_LONG_LOCK_FREE=2' + - '-D__GCC_ATOMIC_POINTER_LOCK_FREE=2' + - '-D__GCC_ATOMIC_SHORT_LOCK_FREE=2' + - '-D__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1' + - '-D__GCC_ATOMIC_WCHAR_T_LOCK_FREE=2' + - '-D__GCC_CONSTRUCTIVE_SIZE=64' + - '-D__GCC_DESTRUCTIVE_SIZE=64' + - '-D__GCC_HAVE_DWARF2_CFI_ASM=1' + - '-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1' + - '-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1' + - '-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1' + - '-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1' + - '-D__GNUC_MINOR__=2' + - '-D__GNUC_PATCHLEVEL__=1' + - '-D__GNUC_STDC_INLINE__=1' + - '-D__GNUC__=4' + - '-D__GXX_ABI_VERSION=1002' + - '-D__ILP32__=1' + - '-D__INT16_C_SUFFIX__=' + - '-D__INT16_FMTd__="hd"' + - '-D__INT16_FMTi__="hi"' + - '-D__INT16_MAX__=32767' + - '-D__INT16_TYPE__=short' + - '-D__INT32_C_SUFFIX__=' + - '-D__INT32_FMTd__="d"' + - '-D__INT32_FMTi__="i"' + - '-D__INT32_MAX__=2147483647' + - '-D__INT32_TYPE__=int' + - '-D__INT64_C_SUFFIX__=LL' + - '-D__INT64_FMTd__="lld"' + - '-D__INT64_FMTi__="lli"' + - '-D__INT64_MAX__=9223372036854775807LL' + - '-D__INT64_TYPE__=long long int' + - '-D__INT8_C_SUFFIX__=' + - '-D__INT8_FMTd__="hhd"' + - '-D__INT8_FMTi__="hhi"' + - '-D__INT8_MAX__=127' + - '-D__INT8_TYPE__=signed char' + - '-D__INTMAX_C_SUFFIX__=LL' + - '-D__INTMAX_FMTd__="lld"' + - '-D__INTMAX_FMTi__="lli"' + - '-D__INTMAX_MAX__=9223372036854775807LL' + - '-D__INTMAX_TYPE__=long long int' + - '-D__INTMAX_WIDTH__=64' + - '-D__INTPTR_FMTd__="d"' + - '-D__INTPTR_FMTi__="i"' + - '-D__INTPTR_MAX__=2147483647' + - '-D__INTPTR_TYPE__=int' + - '-D__INTPTR_WIDTH__=32' + - '-D__INT_FAST16_FMTd__="hd"' + - '-D__INT_FAST16_FMTi__="hi"' + - '-D__INT_FAST16_MAX__=32767' + - '-D__INT_FAST16_TYPE__=short' + - '-D__INT_FAST16_WIDTH__=16' + - '-D__INT_FAST32_FMTd__="d"' + - '-D__INT_FAST32_FMTi__="i"' + - '-D__INT_FAST32_MAX__=2147483647' + - '-D__INT_FAST32_TYPE__=int' + - '-D__INT_FAST32_WIDTH__=32' + - '-D__INT_FAST64_FMTd__="lld"' + - '-D__INT_FAST64_FMTi__="lli"' + - '-D__INT_FAST64_MAX__=9223372036854775807LL' + - '-D__INT_FAST64_TYPE__=long long int' + - '-D__INT_FAST64_WIDTH__=64' + - '-D__INT_FAST8_FMTd__="hhd"' + - '-D__INT_FAST8_FMTi__="hhi"' + - '-D__INT_FAST8_MAX__=127' + - '-D__INT_FAST8_TYPE__=signed char' + - '-D__INT_FAST8_WIDTH__=8' + - '-D__INT_LEAST16_FMTd__="hd"' + - '-D__INT_LEAST16_FMTi__="hi"' + - '-D__INT_LEAST16_MAX__=32767' + - '-D__INT_LEAST16_TYPE__=short' + - '-D__INT_LEAST16_WIDTH__=16' + - '-D__INT_LEAST32_FMTd__="d"' + - '-D__INT_LEAST32_FMTi__="i"' + - '-D__INT_LEAST32_MAX__=2147483647' + - '-D__INT_LEAST32_TYPE__=int' + - '-D__INT_LEAST32_WIDTH__=32' + - '-D__INT_LEAST64_FMTd__="lld"' + - '-D__INT_LEAST64_FMTi__="lli"' + - '-D__INT_LEAST64_MAX__=9223372036854775807LL' + - '-D__INT_LEAST64_TYPE__=long long int' + - '-D__INT_LEAST64_WIDTH__=64' + - '-D__INT_LEAST8_FMTd__="hhd"' + - '-D__INT_LEAST8_FMTi__="hhi"' + - '-D__INT_LEAST8_MAX__=127' + - '-D__INT_LEAST8_TYPE__=signed char' + - '-D__INT_LEAST8_WIDTH__=8' + - '-D__INT_MAX__=2147483647' + - '-D__INT_WIDTH__=32' + - '-D__I__=1.0if' + - '-D__LDBL_DECIMAL_DIG__=17' + - '-D__LDBL_DENORM_MIN__=4.9406564584124654e-324L' + - '-D__LDBL_DIG__=15' + - '-D__LDBL_EPSILON__=2.2204460492503131e-16L' + - '-D__LDBL_HAS_DENORM__=1' + - '-D__LDBL_HAS_INFINITY__=1' + - '-D__LDBL_HAS_QUIET_NAN__=1' + - '-D__LDBL_MANT_DIG__=53' + - '-D__LDBL_MAX_10_EXP__=308' + - '-D__LDBL_MAX_EXP__=1024' + - '-D__LDBL_MAX__=1.7976931348623157e+308L' + - '-D__LDBL_MIN_10_EXP__=(-307)' + - '-D__LDBL_MIN_EXP__=(-1021)' + - '-D__LDBL_MIN__=2.2250738585072014e-308L' + - '-D__LDBL_NORM_MAX__=1.7976931348623157e+308L' + - '-D__LITTLE_ENDIAN__=1' + - '-D__LLONG_WIDTH__=64' + - '-D__LONG_LONG_MAX__=9223372036854775807LL' + - '-D__LONG_MAX__=2147483647L' + - '-D__LONG_WIDTH__=32' + - '-D__MEMORY_SCOPE_DEVICE=1' + - '-D__MEMORY_SCOPE_SINGLE=4' + - '-D__MEMORY_SCOPE_SYSTEM=0' + - '-D__MEMORY_SCOPE_WRKGRP=2' + - '-D__MEMORY_SCOPE_WVFRNT=3' + - '-D__OBJC_BOOL_IS_BOOL=0' + - '-D__OPENCL_MEMORY_SCOPE_ALL_SVM_DEVICES=3' + - '-D__OPENCL_MEMORY_SCOPE_DEVICE=2' + - '-D__OPENCL_MEMORY_SCOPE_SUB_GROUP=4' + - '-D__OPENCL_MEMORY_SCOPE_WORK_GROUP=1' + - '-D__OPENCL_MEMORY_SCOPE_WORK_ITEM=0' + - '-D__OPTIMIZE__=1' + - '-D__ORDER_BIG_ENDIAN__=4321' + - '-D__ORDER_LITTLE_ENDIAN__=1234' + - '-D__ORDER_PDP_ENDIAN__=3412' + - '-D__POINTER_WIDTH__=32' + - '-D__PRAGMA_REDEFINE_EXTNAME=1' + - '-D__PTRDIFF_FMTd__="d"' + - '-D__PTRDIFF_FMTi__="i"' + - '-D__PTRDIFF_MAX__=2147483647' + - '-D__PTRDIFF_TYPE__=int' + - '-D__PTRDIFF_WIDTH__=32' + - '-D__REGISTER_PREFIX__=' + - '-D__SCHAR_MAX__=127' + - '-D__SHRT_MAX__=32767' + - '-D__SHRT_WIDTH__=16' + - '-D__SIG_ATOMIC_MAX__=2147483647' + - '-D__SIG_ATOMIC_WIDTH__=32' + - '-D__SIZEOF_DOUBLE__=8' + - '-D__SIZEOF_FLOAT__=4' + - '-D__SIZEOF_INT__=4' + - '-D__SIZEOF_LONG_DOUBLE__=8' + - '-D__SIZEOF_LONG_LONG__=8' + - '-D__SIZEOF_LONG__=4' + - '-D__SIZEOF_POINTER__=4' + - '-D__SIZEOF_PTRDIFF_T__=4' + - '-D__SIZEOF_SHORT__=2' + - '-D__SIZEOF_SIZE_T__=4' + - '-D__SIZEOF_WCHAR_T__=2' + - '-D__SIZEOF_WINT_T__=4' + - '-D__SIZE_FMTX__="X"' + - '-D__SIZE_FMTo__="o"' + - '-D__SIZE_FMTu__="u"' + - '-D__SIZE_FMTx__="x"' + - '-D__SIZE_MAX__=4294967295U' + - '-D__SIZE_TYPE__=unsigned int' + - '-D__SIZE_WIDTH__=32' + - '-D__STDC_EMBED_EMPTY__=2' + - '-D__STDC_EMBED_FOUND__=1' + - '-D__STDC_EMBED_NOT_FOUND__=0' + - '-D__STDC_HOSTED__=1' + - '-D__STDC_UTF_16__=1' + - '-D__STDC_UTF_32__=1' + - '-D__STDC_VERSION__=201710L' + - '-D__STDC__=1' + - '-D__THUMBEL__=1' + - '-D__THUMB_INTERWORK__=1' + - '-D__UINT16_C_SUFFIX__=' + - '-D__UINT16_FMTX__="hX"' + - '-D__UINT16_FMTo__="ho"' + - '-D__UINT16_FMTu__="hu"' + - '-D__UINT16_FMTx__="hx"' + - '-D__UINT16_MAX__=65535' + - '-D__UINT16_TYPE__=unsigned short' + - '-D__UINT32_C_SUFFIX__=U' + - '-D__UINT32_FMTX__="X"' + - '-D__UINT32_FMTo__="o"' + - '-D__UINT32_FMTu__="u"' + - '-D__UINT32_FMTx__="x"' + - '-D__UINT32_MAX__=4294967295U' + - '-D__UINT32_TYPE__=unsigned int' + - '-D__UINT64_C_SUFFIX__=ULL' + - '-D__UINT64_FMTX__="llX"' + - '-D__UINT64_FMTo__="llo"' + - '-D__UINT64_FMTu__="llu"' + - '-D__UINT64_FMTx__="llx"' + - '-D__UINT64_MAX__=18446744073709551615ULL' + - '-D__UINT64_TYPE__=long long unsigned int' + - '-D__UINT8_C_SUFFIX__=' + - '-D__UINT8_FMTX__="hhX"' + - '-D__UINT8_FMTo__="hho"' + - '-D__UINT8_FMTu__="hhu"' + - '-D__UINT8_FMTx__="hhx"' + - '-D__UINT8_MAX__=255' + - '-D__UINT8_TYPE__=unsigned char' + - '-D__UINTMAX_C_SUFFIX__=ULL' + - '-D__UINTMAX_FMTX__="llX"' + - '-D__UINTMAX_FMTo__="llo"' + - '-D__UINTMAX_FMTu__="llu"' + - '-D__UINTMAX_FMTx__="llx"' + - '-D__UINTMAX_MAX__=18446744073709551615ULL' + - '-D__UINTMAX_TYPE__=long long unsigned int' + - '-D__UINTMAX_WIDTH__=64' + - '-D__UINTPTR_FMTX__="X"' + - '-D__UINTPTR_FMTo__="o"' + - '-D__UINTPTR_FMTu__="u"' + - '-D__UINTPTR_FMTx__="x"' + - '-D__UINTPTR_MAX__=4294967295U' + - '-D__UINTPTR_TYPE__=unsigned int' + - '-D__UINTPTR_WIDTH__=32' + - '-D__UINT_FAST16_FMTX__="hX"' + - '-D__UINT_FAST16_FMTo__="ho"' + - '-D__UINT_FAST16_FMTu__="hu"' + - '-D__UINT_FAST16_FMTx__="hx"' + - '-D__UINT_FAST16_MAX__=65535' + - '-D__UINT_FAST16_TYPE__=unsigned short' + - '-D__UINT_FAST32_FMTX__="X"' + - '-D__UINT_FAST32_FMTo__="o"' + - '-D__UINT_FAST32_FMTu__="u"' + - '-D__UINT_FAST32_FMTx__="x"' + - '-D__UINT_FAST32_MAX__=4294967295U' + - '-D__UINT_FAST32_TYPE__=unsigned int' + - '-D__UINT_FAST64_FMTX__="llX"' + - '-D__UINT_FAST64_FMTo__="llo"' + - '-D__UINT_FAST64_FMTu__="llu"' + - '-D__UINT_FAST64_FMTx__="llx"' + - '-D__UINT_FAST64_MAX__=18446744073709551615ULL' + - '-D__UINT_FAST64_TYPE__=long long unsigned int' + - '-D__UINT_FAST8_FMTX__="hhX"' + - '-D__UINT_FAST8_FMTo__="hho"' + - '-D__UINT_FAST8_FMTu__="hhu"' + - '-D__UINT_FAST8_FMTx__="hhx"' + - '-D__UINT_FAST8_MAX__=255' + - '-D__UINT_FAST8_TYPE__=unsigned char' + - '-D__UINT_LEAST16_FMTX__="hX"' + - '-D__UINT_LEAST16_FMTo__="ho"' + - '-D__UINT_LEAST16_FMTu__="hu"' + - '-D__UINT_LEAST16_FMTx__="hx"' + - '-D__UINT_LEAST16_MAX__=65535' + - '-D__UINT_LEAST16_TYPE__=unsigned short' + - '-D__UINT_LEAST32_FMTX__="X"' + - '-D__UINT_LEAST32_FMTo__="o"' + - '-D__UINT_LEAST32_FMTu__="u"' + - '-D__UINT_LEAST32_FMTx__="x"' + - '-D__UINT_LEAST32_MAX__=4294967295U' + - '-D__UINT_LEAST32_TYPE__=unsigned int' + - '-D__UINT_LEAST64_FMTX__="llX"' + - '-D__UINT_LEAST64_FMTo__="llo"' + - '-D__UINT_LEAST64_FMTu__="llu"' + - '-D__UINT_LEAST64_FMTx__="llx"' + - '-D__UINT_LEAST64_MAX__=18446744073709551615ULL' + - '-D__UINT_LEAST64_TYPE__=long long unsigned int' + - '-D__UINT_LEAST8_FMTX__="hhX"' + - '-D__UINT_LEAST8_FMTo__="hho"' + - '-D__UINT_LEAST8_FMTu__="hhu"' + - '-D__UINT_LEAST8_FMTx__="hhx"' + - '-D__UINT_LEAST8_MAX__=255' + - '-D__UINT_LEAST8_TYPE__=unsigned char' + - '-D__USER_LABEL_PREFIX__=' + - '-D__VERSION__="Clang 20.0.0git"' + - '-D__VFP_FP__=1' + - '-D__WCHAR_MAX__=65535' + - '-D__WCHAR_TYPE__=unsigned short' + - '-D__WCHAR_UNSIGNED__=1' + - '-D__WCHAR_WIDTH__=16' + - '-D__WINT_MAX__=2147483647' + - '-D__WINT_TYPE__=int' + - '-D__WINT_WIDTH__=32' + - '-D__arm=1' + - '-D__arm__=1' + - '-D__clang__=1' + - '-D__clang_literal_encoding__="UTF-8"' + - '-D__clang_major__=20' + - '-D__clang_minor__=0' + - '-D__clang_patchlevel__=0' + - '-D__clang_version__="20.0.0git "' + - '-D__clang_wide_literal_encoding__="UTF-16"' + - '-D__llvm__=1' + - '-D__thumb2__=1' + - '-D__thumb__=1' + - '-D__ARMCOMPILER_LIBCXX=1' + - '-IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB' + - '-IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include' + - >- + -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc + - >- + -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include + - >- + -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities + - '-IG:/Robot_v2/BOOT/Robot_V2' + - '-IG:/Robot_v2/BOOT/Robot_V2/sys' + - '-IG:/Robot_v2/BOOT/Robot_V2/device' diff --git a/Robot_V2/Algorithm/DengFOC.cpp b/Robot_V2/Algorithm/DengFOC.cpp new file mode 100644 index 0000000..b824d00 --- /dev/null +++ b/Robot_V2/Algorithm/DengFOC.cpp @@ -0,0 +1,290 @@ +#include "DengFOC.h" +#include "Can.h" +#include "Timer.h" +#include "adc.h" +#include "ang_sensor.h" +#include "initial.h" +#include "pid.h" +#include +#include +#include +#include "motor.h" + +constexpr double PI = 3.1415926535897932384626433832795f; +constexpr float ANGLE_FACTOR = 25.0f / 360.0f * 2.0f * 3.14159265358979323846f; +constexpr float _1_SQRT3 = 0.57735026919f; +constexpr float _2_SQRT3 = 1.15470053838f; +constexpr float _3PI_2 = 4.71238898038f; +constexpr u8 PP = 11; +constexpr float DIR = 1.0; +constexpr float sqrt3 = 1.73205080757f; // sqrt(3)的预计算值 +constexpr float sqrt3dv2 = 0.86602540378f; // sqrt(3)/2的预计算值 +constexpr float zero_electric_angle = 0.0f; +constexpr u16 LUT_SCALE = (LUT_SIZE / (2.0f * PI)); + +FOC_Controlroller FOC; // FOC控制初始化 +extern sampler sampler; +extern angle_sensor KTH7823; +extern CAN_transmiter CAN0_transmiter; + +// 初始变量及函数定义 +#define _constrain(amt, low, high) \ + ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt))) +#define constrain(value, min, max, target_min, target_max) \ + ((value - min) / (max - min) * (target_max - target_min)) + +/** + * @brief 归一化角度 + * + * @param angle + * @return float + */ +inline float _normalizeAngle(float angle) { + float a = fmod(angle, 2 * PI); + // 取余运算可以用于归一化,列出特殊值例子算便知 + return a >= 0 ? a : (a + 2 * PI); +} + +// 通过Ia,Ib,Ic计算Iq,Id(目前仅输出Iq) +inline float FOC_Controlroller::cal_Iq_Id(float current_a, float current_b, + float current_c) { + // 计算电气角度 + float angle_el = _normalizeAngle(shaft_angle * PP); + + // Clarke变换 (使用三相电流) + float I_alpha = (2.0f / 3.0f) * current_a - (1.0f / 3.0f) * current_b - + (1.0f / 3.0f) * current_c; + float I_beta = _1_SQRT3 * current_b - _1_SQRT3 * current_c; + + // Park变换 + float sin_el, cos_el; + cos_el = cos_lut[(u16)(angle_el * LUT_SCALE) & LUT_MASK]; + sin_el = sin_lut[(u16)(angle_el * LUT_SCALE) & LUT_MASK]; + float I_q = I_beta * cos_el - I_alpha * sin_el; + + return I_q*1000.0f; // 返回Iq值,乘以1000以转换为mA +} + +/** + * @brief 电机控制类构造函数 + * + */ +FOC_Controlroller::FOC_Controlroller() { ; } + +/** + * @brief 设置电机输出,使用优化的SVPWM算法 + * + * @param Uq: q轴电压 + * @param Ud: d轴电压 + * @param angle_el: 电机轴角度 + */ +inline void FOC_Controlroller::setPhaseVoltage(float Uq, float Ud) { + // 计算电气角度 + float angle_el = _normalizeAngle(shaft_angle * PP); + + // 帕克逆变换 (直接计算,避免函数调用开销) + float sin_el, cos_el; + sin_el = sin_lut[(u16)(angle_el * LUT_SCALE) & LUT_MASK]; + cos_el = cos_lut[(u16)(angle_el * LUT_SCALE) & LUT_MASK]; + float Ualpha = Ud * cos_el - Uq * sin_el; + float Ubeta = Ud * sin_el + Uq * cos_el; + + // 克拉克逆变换 (使用预计算常量优化) + Ua = Ualpha + v_half; + Ub = sqrt3dv2 * Ubeta - 0.5f * Ualpha + v_half; + Uc = -0.5f * Ualpha - sqrt3dv2 * Ubeta + v_half; + + // 计算占空比并限制范围 + duty_a = _constrain(Ua / v_safe, 0.0f, 1.0f); + duty_b = _constrain(Ub / v_safe, 0.0f, 1.0f); + duty_c = _constrain(Uc / v_safe, 0.0f, 1.0f); + // 设置PWM输出 + float voltage_exchange = limit_voltage / v_safe; + duty_a = duty_a * voltage_exchange; + duty_b = duty_b * voltage_exchange; + duty_c = duty_c * voltage_exchange; + Set_3Pwm(duty_a, duty_b, duty_c); + // std::printf("PWM:%f,%f,%f\n", dc_a, dc_b, dc_c); +} + +/** + * @brief 电机关机 + * + */ +void FOC_Controlroller::shut_down() { + is_shut_down = 1; + motor_sleep(); +} +/** + * @brief 占空比置0 + * + */ +void FOC_Controlroller::drv_stop() { Set_3Pwm(0.0f, 0.0f, 0.0f); } +/** + * @brief 电机锁止 + */ +void FOC_Controlroller::drv_hold(float duty) { + if (duty > 0.95f) { + duty = 0.95f; + } else if (duty < 0.0f) { + duty = 0.0f; + } + Set_3Pwm(duty, duty, duty); +} +/** + * @brief 电机恢复 + * + */ +void FOC_Controlroller::resume() { + over_current = false; + voltage_error = false; + is_shut_down = false; + motor_resume(); +} +/** + * @brief 更新电源电压 + * + */ +void FOC_Controlroller::update_power(void) { + voltage_power_supply = sampler.get_vbus_voltage(); + if (voltage_power_supply < 36.0f and voltage_power_supply > 8.0f) { + voltage_error = false; + v_half = voltage_power_supply * 0.5f; + v_safe = voltage_power_supply * 0.95f; + } else { + voltage_error = true; + } +} + +/** + * @brief 速度开环控制 + * + * @param target_velocity: 目标速度 + * @return float: q轴电压 + */ +float FOC_Controlroller::velocity_open_loop() { + // 通过时间间隔和目标速度计算需要转动的机械角度,存储在shaft_angle中,在此之前,还需要对轴角度归一化 + // 预计算常量 1e-4 = 100微秒控制周期 + shaft_angle = + _normalizeAngle(shaft_angle + target_velocity * ANGLE_FACTOR * 1e-4f); + + // 因为在开环控制中,Ud始终为0,只控制Uq + const float Uq = voltage_power_supply / 2.0f; + + setPhaseVoltage(Uq, 0.0f); + // CAN0_transmiter.testfloat_union.f = + cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'), sampler.get_current('W')); + + return limit_voltage; +} + +/** + * @brief 电机初始化 + * + * @param _PP: 电机极队数 + */ +// void FOC_Controlroller::DFOC_alignSensor(int _PP) { +// u8 PP = _PP; +// setPhaseVoltage(3, 0, _3PI_2); +// delay_1ms(3000); +// zero_electric_angle = _electricalAngle(); +// setPhaseVoltage(0, 0, _3PI_2); +// std::printf("0电角度:%f", zero_electric_angle); +// } + +/** + * @brief 角度闭环控制 + * + * @param target_angle: 目标角度 + * @return float: 当前角度 + */ +float FOC_Controlroller::angle_control(float target_angle) { + // PID 控制计算 + float Uq = angle_loop(target_angle - rt_angle); + + // 获取电机轴角度 + shaft_angle = KTH7823.getcurrent_sensorangle() * DEG2RAD; + // 设置相电压 + setPhaseVoltage(Uq, 0.0f); + return shaft_angle; +} + +/** + * @brief 带速度限制的角度闭环控制 + * + * @param target_angle: 目标角度 + * @param max_velocity: 最大速度限制 (单位: rad/s) + * @return float: 当前角度 + */ +float FOC_Controlroller::angle_control_with_velocity_limit(float target_angle) { + // 计算角度误差 + float angle_error = target_angle - rt_angle; + + // 使用角度PID控制器计算目标速度 + float target_velocity = ang_inVelAngloop(angle_error); + + // 对目标速度进行限幅 + target_velocity = _constrain(target_velocity, -limit_velocity, limit_velocity); + + // 使用速度PID控制器计算最终输出电压 + float Uq = vel_inVelAngloop(target_velocity - rt_velocity); + // CAN0_transmiter.testfloat_union.f = target_velocity - rt_velocity; + + // 获取电机轴角度 + shaft_angle = KTH7823.getcurrent_sensorangle() * DEG2RAD; + + // 设置相电压 + setPhaseVoltage(Uq, 0.0f); + + return shaft_angle; +} + +/** + * @brief 角度闭环控制 + * + * @param target_angle: 目标角度 + * @return float: 当前角度 + */ +float FOC_Controlroller::angle_control_NPID(float target_angle) { + static float Kp = 20.0f; + // 控制力矩计算 + float Uq = _constrain(Kp * (target_angle - rt_angle), -voltage_power_supply, + voltage_power_supply); + + // 获取电机轴角度 + shaft_angle = KTH7823.getcurrent_sensorangle() * DEG2RAD; + // 设置相电压 + setPhaseVoltage(Uq, 0.0f); + return shaft_angle; +} + +/** + * @brief 速度闭环控制 + * + * @param target_velocity: 目标速度 + * @return float: 当前速度 + */ +float FOC_Controlroller::velocity_control(float target_velocity) { + // PID 控制计算 + float Uq = vel_loop((target_velocity - rt_velocity)*25); + + // 获取电机轴角度 + shaft_angle = KTH7823.getcurrent_sensorangle() * DEG2RAD; + // 设置相电压 + setPhaseVoltage(Uq, 0.0f); + // CAN0_transmiter.testfloat_union.f = + cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'), sampler.get_current('W')); + return rt_velocity; +} + +float FOC_Controlroller::current_control(float target_current) { + // PID 控制计算 + float Iq = cal_Iq_Id(sampler.get_current('U'), sampler.get_current('V'), sampler.get_current('W')); + float Uq = current_loop(target_current - Iq); + CAN0_transmiter.testfloat_union.f = Iq; + // 获取电机轴角度 + shaft_angle = KTH7823.getcurrent_sensorangle() * DEG2RAD; + // 设置相电压 + setPhaseVoltage(Uq, 0.0f); + return 1; +} \ No newline at end of file diff --git a/Robot_V2/Algorithm/DengFOC.h b/Robot_V2/Algorithm/DengFOC.h new file mode 100644 index 0000000..3a616aa --- /dev/null +++ b/Robot_V2/Algorithm/DengFOC.h @@ -0,0 +1,411 @@ +// 函数声明 +#ifndef _DENGFOC_H +#define _DENGFOC_H +#include "pid.h" +#include + +class FOC_Controlroller { + + public: + FOC_Controlroller(); + + u8 control_mode = 0; + float limit_voltage = 0.0f; + float limit_velocity = 0.0f; + float target_angle = 0.0f; + float target_velocity = 0.0f; + float rt_angle = 0.0f; + float rt_velocity = 0.0f; + bool over_current = false; + bool voltage_error = false; + bool is_shut_down = false; + float voltage_power_supply = 24.0f; // 电源电压 + float v_safe = voltage_power_supply * 1.05f; + float duty_a = 0, duty_b = 0, duty_c = 0; + float Ua = 0, Ub = 0, Uc = 0; + float velocity_open_loop(); + float angle_control(float target_angle); + float angle_control_with_velocity_limit(float target_angle); + float velocity_control(float target_velocity); + float current_control(float target_current); + float angle_control_NPID(float target_angle); + + void update_power(void); + void DFOC_alignSensor(int _PP); + void shut_down(void); + void resume(void); + void drv_stop(void); + void drv_hold(float duty = 0.5f); + + protected: + float shaft_angle = 0; + float Ualpha, Ubeta = 0; + float zero_electric_angle = 0; + float v_half = voltage_power_supply * 0.5f; // 电源电压的一半 + + PIDController vel_loop = + PIDController{0.028f, 0.2f, 1e-4, 1000000, voltage_power_supply}; // 12V + PIDController angle_loop = PIDController{20.0f, 100.0f, 0.2f, 10000000, + voltage_power_supply}; // 12V + PIDController current_loop = + PIDController{0.006f, 0.02f, 0, 100000, voltage_power_supply}; // 12V + PIDController vel_inVelAngloop = + PIDController{0.35f, 5.0f,1e-3, 1000000, voltage_power_supply}; + PIDController ang_inVelAngloop = + PIDController{30.0f, 0.0f, 1e-3, 1000000, 999}; + + void setPhaseVoltage(float Uq, float Ud); + float cal_Iq_Id(float current_a, float current_b, float current_c); +}; + +float _normalizeAngle(float angle); +inline float _electricalAngle(); + +constexpr u16 LUT_SIZE = 1024; +constexpr u16 LUT_MASK = (LUT_SIZE - 1); + +__attribute__((aligned(4))) const float sin_lut[LUT_SIZE] = { + 0.000000f, 0.006136f, 0.012272f, 0.018407f, 0.024541f, 0.030675f, + 0.036807f, 0.042938f, 0.049068f, 0.055195f, 0.061321f, 0.067444f, + 0.073565f, 0.079682f, 0.085797f, 0.091909f, 0.098017f, 0.104122f, + 0.110222f, 0.116319f, 0.122411f, 0.128498f, 0.134581f, 0.140658f, + 0.146730f, 0.152797f, 0.158858f, 0.164913f, 0.170962f, 0.177004f, + 0.183040f, 0.189069f, 0.195090f, 0.201105f, 0.207111f, 0.213110f, + 0.219101f, 0.225084f, 0.231058f, 0.237024f, 0.242980f, 0.248928f, + 0.254866f, 0.260794f, 0.266713f, 0.272621f, 0.278520f, 0.284408f, + 0.290285f, 0.296151f, 0.302006f, 0.307850f, 0.313682f, 0.319502f, + 0.325310f, 0.331106f, 0.336890f, 0.342661f, 0.348419f, 0.354164f, + 0.359895f, 0.365613f, 0.371317f, 0.377007f, 0.382683f, 0.388345f, + 0.393992f, 0.399624f, 0.405241f, 0.410843f, 0.416430f, 0.422000f, + 0.427555f, 0.433094f, 0.438616f, 0.444122f, 0.449611f, 0.455084f, + 0.460539f, 0.465976f, 0.471397f, 0.476799f, 0.482184f, 0.487550f, + 0.492898f, 0.498228f, 0.503538f, 0.508830f, 0.514103f, 0.519356f, + 0.524590f, 0.529804f, 0.534998f, 0.540171f, 0.545325f, 0.550458f, + 0.555570f, 0.560662f, 0.565732f, 0.570781f, 0.575808f, 0.580814f, + 0.585798f, 0.590760f, 0.595699f, 0.600616f, 0.605511f, 0.610383f, + 0.615232f, 0.620057f, 0.624859f, 0.629638f, 0.634393f, 0.639124f, + 0.643832f, 0.648514f, 0.653173f, 0.657807f, 0.662416f, 0.667000f, + 0.671559f, 0.676093f, 0.680601f, 0.685084f, 0.689541f, 0.693971f, + 0.698376f, 0.702755f, 0.707107f, 0.711432f, 0.715731f, 0.720003f, + 0.724247f, 0.728464f, 0.732654f, 0.736817f, 0.740951f, 0.745058f, + 0.749136f, 0.753187f, 0.757209f, 0.761202f, 0.765167f, 0.769103f, + 0.773010f, 0.776888f, 0.780737f, 0.784557f, 0.788346f, 0.792107f, + 0.795837f, 0.799537f, 0.803208f, 0.806848f, 0.810457f, 0.814036f, + 0.817585f, 0.821103f, 0.824589f, 0.828045f, 0.831470f, 0.834863f, + 0.838225f, 0.841555f, 0.844854f, 0.848120f, 0.851355f, 0.854558f, + 0.857729f, 0.860867f, 0.863973f, 0.867046f, 0.870087f, 0.873095f, + 0.876070f, 0.879012f, 0.881921f, 0.884797f, 0.887640f, 0.890449f, + 0.893224f, 0.895966f, 0.898674f, 0.901349f, 0.903989f, 0.906596f, + 0.909168f, 0.911706f, 0.914210f, 0.916679f, 0.919114f, 0.921514f, + 0.923880f, 0.926210f, 0.928506f, 0.930767f, 0.932993f, 0.935184f, + 0.937339f, 0.939459f, 0.941544f, 0.943593f, 0.945607f, 0.947586f, + 0.949528f, 0.951435f, 0.953306f, 0.955141f, 0.956940f, 0.958703f, + 0.960431f, 0.962121f, 0.963776f, 0.965394f, 0.966976f, 0.968522f, + 0.970031f, 0.971504f, 0.972940f, 0.974339f, 0.975702f, 0.977028f, + 0.978317f, 0.979570f, 0.980785f, 0.981964f, 0.983105f, 0.984210f, + 0.985278f, 0.986308f, 0.987301f, 0.988258f, 0.989177f, 0.990058f, + 0.990903f, 0.991710f, 0.992480f, 0.993212f, 0.993907f, 0.994565f, + 0.995185f, 0.995767f, 0.996313f, 0.996820f, 0.997290f, 0.997723f, + 0.998118f, 0.998476f, 0.998795f, 0.999078f, 0.999322f, 0.999529f, + 0.999699f, 0.999831f, 0.999925f, 0.999981f, 1.000000f, 0.999981f, + 0.999925f, 0.999831f, 0.999699f, 0.999529f, 0.999322f, 0.999078f, + 0.998795f, 0.998476f, 0.998118f, 0.997723f, 0.997290f, 0.996820f, + 0.996313f, 0.995767f, 0.995185f, 0.994565f, 0.993907f, 0.993212f, + 0.992480f, 0.991710f, 0.990903f, 0.990058f, 0.989177f, 0.988258f, + 0.987301f, 0.986308f, 0.985278f, 0.984210f, 0.983105f, 0.981964f, + 0.980785f, 0.979570f, 0.978317f, 0.977028f, 0.975702f, 0.974339f, + 0.972940f, 0.971504f, 0.970031f, 0.968522f, 0.966976f, 0.965394f, + 0.963776f, 0.962121f, 0.960431f, 0.958703f, 0.956940f, 0.955141f, + 0.953306f, 0.951435f, 0.949528f, 0.947586f, 0.945607f, 0.943593f, + 0.941544f, 0.939459f, 0.937339f, 0.935184f, 0.932993f, 0.930767f, + 0.928506f, 0.926210f, 0.923880f, 0.921514f, 0.919114f, 0.916679f, + 0.914210f, 0.911706f, 0.909168f, 0.906596f, 0.903989f, 0.901349f, + 0.898674f, 0.895966f, 0.893224f, 0.890449f, 0.887640f, 0.884797f, + 0.881921f, 0.879012f, 0.876070f, 0.873095f, 0.870087f, 0.867046f, + 0.863973f, 0.860867f, 0.857729f, 0.854558f, 0.851355f, 0.848120f, + 0.844854f, 0.841555f, 0.838225f, 0.834863f, 0.831470f, 0.828045f, + 0.824589f, 0.821103f, 0.817585f, 0.814036f, 0.810457f, 0.806848f, + 0.803208f, 0.799537f, 0.795837f, 0.792107f, 0.788346f, 0.784557f, + 0.780737f, 0.776888f, 0.773010f, 0.769103f, 0.765167f, 0.761202f, + 0.757209f, 0.753187f, 0.749136f, 0.745058f, 0.740951f, 0.736817f, + 0.732654f, 0.728464f, 0.724247f, 0.720003f, 0.715731f, 0.711432f, + 0.707107f, 0.702755f, 0.698376f, 0.693971f, 0.689541f, 0.685084f, + 0.680601f, 0.676093f, 0.671559f, 0.667000f, 0.662416f, 0.657807f, + 0.653173f, 0.648514f, 0.643832f, 0.639124f, 0.634393f, 0.629638f, + 0.624859f, 0.620057f, 0.615232f, 0.610383f, 0.605511f, 0.600616f, + 0.595699f, 0.590760f, 0.585798f, 0.580814f, 0.575808f, 0.570781f, + 0.565732f, 0.560662f, 0.555570f, 0.550458f, 0.545325f, 0.540171f, + 0.534998f, 0.529804f, 0.524590f, 0.519356f, 0.514103f, 0.508830f, + 0.503538f, 0.498228f, 0.492898f, 0.487550f, 0.482184f, 0.476799f, + 0.471397f, 0.465976f, 0.460539f, 0.455084f, 0.449611f, 0.444122f, + 0.438616f, 0.433094f, 0.427555f, 0.422000f, 0.416430f, 0.410843f, + 0.405241f, 0.399624f, 0.393992f, 0.388345f, 0.382683f, 0.377007f, + 0.371317f, 0.365613f, 0.359895f, 0.354164f, 0.348419f, 0.342661f, + 0.336890f, 0.331106f, 0.325310f, 0.319502f, 0.313682f, 0.307850f, + 0.302006f, 0.296151f, 0.290285f, 0.284408f, 0.278520f, 0.272621f, + 0.266713f, 0.260794f, 0.254866f, 0.248928f, 0.242980f, 0.237024f, + 0.231058f, 0.225084f, 0.219101f, 0.213110f, 0.207111f, 0.201105f, + 0.195090f, 0.189069f, 0.183040f, 0.177004f, 0.170962f, 0.164913f, + 0.158858f, 0.152797f, 0.146730f, 0.140658f, 0.134581f, 0.128498f, + 0.122411f, 0.116319f, 0.110222f, 0.104122f, 0.098017f, 0.091909f, + 0.085797f, 0.079682f, 0.073565f, 0.067444f, 0.061321f, 0.055195f, + 0.049068f, 0.042938f, 0.036807f, 0.030675f, 0.024541f, 0.018407f, + 0.012272f, 0.006136f, 0.000000f, -0.006136f, -0.012272f, -0.018407f, + -0.024541f, -0.030675f, -0.036807f, -0.042938f, -0.049068f, -0.055195f, + -0.061321f, -0.067444f, -0.073565f, -0.079682f, -0.085797f, -0.091909f, + -0.098017f, -0.104122f, -0.110222f, -0.116319f, -0.122411f, -0.128498f, + -0.134581f, -0.140658f, -0.146730f, -0.152797f, -0.158858f, -0.164913f, + -0.170962f, -0.177004f, -0.183040f, -0.189069f, -0.195090f, -0.201105f, + -0.207111f, -0.213110f, -0.219101f, -0.225084f, -0.231058f, -0.237024f, + -0.242980f, -0.248928f, -0.254866f, -0.260794f, -0.266713f, -0.272621f, + -0.278520f, -0.284408f, -0.290285f, -0.296151f, -0.302006f, -0.307850f, + -0.313682f, -0.319502f, -0.325310f, -0.331106f, -0.336890f, -0.342661f, + -0.348419f, -0.354164f, -0.359895f, -0.365613f, -0.371317f, -0.377007f, + -0.382683f, -0.388345f, -0.393992f, -0.399624f, -0.405241f, -0.410843f, + -0.416430f, -0.422000f, -0.427555f, -0.433094f, -0.438616f, -0.444122f, + -0.449611f, -0.455084f, -0.460539f, -0.465976f, -0.471397f, -0.476799f, + -0.482184f, -0.487550f, -0.492898f, -0.498228f, -0.503538f, -0.508830f, + -0.514103f, -0.519356f, -0.524590f, -0.529804f, -0.534998f, -0.540171f, + -0.545325f, -0.550458f, -0.555570f, -0.560662f, -0.565732f, -0.570781f, + -0.575808f, -0.580814f, -0.585798f, -0.590760f, -0.595699f, -0.600616f, + -0.605511f, -0.610383f, -0.615232f, -0.620057f, -0.624859f, -0.629638f, + -0.634393f, -0.639124f, -0.643832f, -0.648514f, -0.653173f, -0.657807f, + -0.662416f, -0.667000f, -0.671559f, -0.676093f, -0.680601f, -0.685084f, + -0.689541f, -0.693971f, -0.698376f, -0.702755f, -0.707107f, -0.711432f, + -0.715731f, -0.720003f, -0.724247f, -0.728464f, -0.732654f, -0.736817f, + -0.740951f, -0.745058f, -0.749136f, -0.753187f, -0.757209f, -0.761202f, + -0.765167f, -0.769103f, -0.773010f, -0.776888f, -0.780737f, -0.784557f, + -0.788346f, -0.792107f, -0.795837f, -0.799537f, -0.803208f, -0.806848f, + -0.810457f, -0.814036f, -0.817585f, -0.821103f, -0.824589f, -0.828045f, + -0.831470f, -0.834863f, -0.838225f, -0.841555f, -0.844854f, -0.848120f, + -0.851355f, -0.854558f, -0.857729f, -0.860867f, -0.863973f, -0.867046f, + -0.870087f, -0.873095f, -0.876070f, -0.879012f, -0.881921f, -0.884797f, + -0.887640f, -0.890449f, -0.893224f, -0.895966f, -0.898674f, -0.901349f, + -0.903989f, -0.906596f, -0.909168f, -0.911706f, -0.914210f, -0.916679f, + -0.919114f, -0.921514f, -0.923880f, -0.926210f, -0.928506f, -0.930767f, + -0.932993f, -0.935184f, -0.937339f, -0.939459f, -0.941544f, -0.943593f, + -0.945607f, -0.947586f, -0.949528f, -0.951435f, -0.953306f, -0.955141f, + -0.956940f, -0.958703f, -0.960431f, -0.962121f, -0.963776f, -0.965394f, + -0.966976f, -0.968522f, -0.970031f, -0.971504f, -0.972940f, -0.974339f, + -0.975702f, -0.977028f, -0.978317f, -0.979570f, -0.980785f, -0.981964f, + -0.983105f, -0.984210f, -0.985278f, -0.986308f, -0.987301f, -0.988258f, + -0.989177f, -0.990058f, -0.990903f, -0.991710f, -0.992480f, -0.993212f, + -0.993907f, -0.994565f, -0.995185f, -0.995767f, -0.996313f, -0.996820f, + -0.997290f, -0.997723f, -0.998118f, -0.998476f, -0.998795f, -0.999078f, + -0.999322f, -0.999529f, -0.999699f, -0.999831f, -0.999925f, -0.999981f, + -1.000000f, -0.999981f, -0.999925f, -0.999831f, -0.999699f, -0.999529f, + -0.999322f, -0.999078f, -0.998795f, -0.998476f, -0.998118f, -0.997723f, + -0.997290f, -0.996820f, -0.996313f, -0.995767f, -0.995185f, -0.994565f, + -0.993907f, -0.993212f, -0.992480f, -0.991710f, -0.990903f, -0.990058f, + -0.989177f, -0.988258f, -0.987301f, -0.986308f, -0.985278f, -0.984210f, + -0.983105f, -0.981964f, -0.980785f, -0.979570f, -0.978317f, -0.977028f, + -0.975702f, -0.974339f, -0.972940f, -0.971504f, -0.970031f, -0.968522f, + -0.966976f, -0.965394f, -0.963776f, -0.962121f, -0.960431f, -0.958703f, + -0.956940f, -0.955141f, -0.953306f, -0.951435f, -0.949528f, -0.947586f, + -0.945607f, -0.943593f, -0.941544f, -0.939459f, -0.937339f, -0.935184f, + -0.932993f, -0.930767f, -0.928506f, -0.926210f, -0.923880f, -0.921514f, + -0.919114f, -0.916679f, -0.914210f, -0.911706f, -0.909168f, -0.906596f, + -0.903989f, -0.901349f, -0.898674f, -0.895966f, -0.893224f, -0.890449f, + -0.887640f, -0.884797f, -0.881921f, -0.879012f, -0.876070f, -0.873095f, + -0.870087f, -0.867046f, -0.863973f, -0.860867f, -0.857729f, -0.854558f, + -0.851355f, -0.848120f, -0.844854f, -0.841555f, -0.838225f, -0.834863f, + -0.831470f, -0.828045f, -0.824589f, -0.821103f, -0.817585f, -0.814036f, + -0.810457f, -0.806848f, -0.803208f, -0.799537f, -0.795837f, -0.792107f, + -0.788346f, -0.784557f, -0.780737f, -0.776888f, -0.773010f, -0.769103f, + -0.765167f, -0.761202f, -0.757209f, -0.753187f, -0.749136f, -0.745058f, + -0.740951f, -0.736817f, -0.732654f, -0.728464f, -0.724247f, -0.720003f, + -0.715731f, -0.711432f, -0.707107f, -0.702755f, -0.698376f, -0.693971f, + -0.689541f, -0.685084f, -0.680601f, -0.676093f, -0.671559f, -0.667000f, + -0.662416f, -0.657807f, -0.653173f, -0.648514f, -0.643832f, -0.639124f, + -0.634393f, -0.629638f, -0.624859f, -0.620057f, -0.615232f, -0.610383f, + -0.605511f, -0.600616f, -0.595699f, -0.590760f, -0.585798f, -0.580814f, + -0.575808f, -0.570781f, -0.565732f, -0.560662f, -0.555570f, -0.550458f, + -0.545325f, -0.540171f, -0.534998f, -0.529804f, -0.524590f, -0.519356f, + -0.514103f, -0.508830f, -0.503538f, -0.498228f, -0.492898f, -0.487550f, + -0.482184f, -0.476799f, -0.471397f, -0.465976f, -0.460539f, -0.455084f, + -0.449611f, -0.444122f, -0.438616f, -0.433094f, -0.427555f, -0.422000f, + -0.416430f, -0.410843f, -0.405241f, -0.399624f, -0.393992f, -0.388345f, + -0.382683f, -0.377007f, -0.371317f, -0.365613f, -0.359895f, -0.354164f, + -0.348419f, -0.342661f, -0.336890f, -0.331106f, -0.325310f, -0.319502f, + -0.313682f, -0.307850f, -0.302006f, -0.296151f, -0.290285f, -0.284408f, + -0.278520f, -0.272621f, -0.266713f, -0.260794f, -0.254866f, -0.248928f, + -0.242980f, -0.237024f, -0.231058f, -0.225084f, -0.219101f, -0.213110f, + -0.207111f, -0.201105f, -0.195090f, -0.189069f, -0.183040f, -0.177004f, + -0.170962f, -0.164913f, -0.158858f, -0.152797f, -0.146730f, -0.140658f, + -0.134581f, -0.128498f, -0.122411f, -0.116319f, -0.110222f, -0.104122f, + -0.098017f, -0.091909f, -0.085797f, -0.079682f, -0.073565f, -0.067444f, + -0.061321f, -0.055195f, -0.049068f, -0.042938f, -0.036807f, -0.030675f, + -0.024541f, -0.018407f, -0.012272f, -0.006136f}; +__attribute__((aligned(4))) const float cos_lut[LUT_SIZE] = { + 1.000000f, 0.999981f, 0.999925f, 0.999831f, 0.999699f, 0.999529f, + 0.999322f, 0.999078f, 0.998795f, 0.998476f, 0.998118f, 0.997723f, + 0.997290f, 0.996820f, 0.996313f, 0.995767f, 0.995185f, 0.994565f, + 0.993907f, 0.993212f, 0.992480f, 0.991710f, 0.990903f, 0.990058f, + 0.989177f, 0.988258f, 0.987301f, 0.986308f, 0.985278f, 0.984210f, + 0.983105f, 0.981964f, 0.980785f, 0.979570f, 0.978317f, 0.977028f, + 0.975702f, 0.974339f, 0.972940f, 0.971504f, 0.970031f, 0.968522f, + 0.966976f, 0.965394f, 0.963776f, 0.962121f, 0.960431f, 0.958703f, + 0.956940f, 0.955141f, 0.953306f, 0.951435f, 0.949528f, 0.947586f, + 0.945607f, 0.943593f, 0.941544f, 0.939459f, 0.937339f, 0.935184f, + 0.932993f, 0.930767f, 0.928506f, 0.926210f, 0.923880f, 0.921514f, + 0.919114f, 0.916679f, 0.914210f, 0.911706f, 0.909168f, 0.906596f, + 0.903989f, 0.901349f, 0.898674f, 0.895966f, 0.893224f, 0.890449f, + 0.887640f, 0.884797f, 0.881921f, 0.879012f, 0.876070f, 0.873095f, + 0.870087f, 0.867046f, 0.863973f, 0.860867f, 0.857729f, 0.854558f, + 0.851355f, 0.848120f, 0.844854f, 0.841555f, 0.838225f, 0.834863f, + 0.831470f, 0.828045f, 0.824589f, 0.821103f, 0.817585f, 0.814036f, + 0.810457f, 0.806848f, 0.803208f, 0.799537f, 0.795837f, 0.792107f, + 0.788346f, 0.784557f, 0.780737f, 0.776888f, 0.773010f, 0.769103f, + 0.765167f, 0.761202f, 0.757209f, 0.753187f, 0.749136f, 0.745058f, + 0.740951f, 0.736817f, 0.732654f, 0.728464f, 0.724247f, 0.720003f, + 0.715731f, 0.711432f, 0.707107f, 0.702755f, 0.698376f, 0.693971f, + 0.689541f, 0.685084f, 0.680601f, 0.676093f, 0.671559f, 0.667000f, + 0.662416f, 0.657807f, 0.653173f, 0.648514f, 0.643832f, 0.639124f, + 0.634393f, 0.629638f, 0.624859f, 0.620057f, 0.615232f, 0.610383f, + 0.605511f, 0.600616f, 0.595699f, 0.590760f, 0.585798f, 0.580814f, + 0.575808f, 0.570781f, 0.565732f, 0.560662f, 0.555570f, 0.550458f, + 0.545325f, 0.540171f, 0.534998f, 0.529804f, 0.524590f, 0.519356f, + 0.514103f, 0.508830f, 0.503538f, 0.498228f, 0.492898f, 0.487550f, + 0.482184f, 0.476799f, 0.471397f, 0.465976f, 0.460539f, 0.455084f, + 0.449611f, 0.444122f, 0.438616f, 0.433094f, 0.427555f, 0.422000f, + 0.416430f, 0.410843f, 0.405241f, 0.399624f, 0.393992f, 0.388345f, + 0.382683f, 0.377007f, 0.371317f, 0.365613f, 0.359895f, 0.354164f, + 0.348419f, 0.342661f, 0.336890f, 0.331106f, 0.325310f, 0.319502f, + 0.313682f, 0.307850f, 0.302006f, 0.296151f, 0.290285f, 0.284408f, + 0.278520f, 0.272621f, 0.266713f, 0.260794f, 0.254866f, 0.248928f, + 0.242980f, 0.237024f, 0.231058f, 0.225084f, 0.219101f, 0.213110f, + 0.207111f, 0.201105f, 0.195090f, 0.189069f, 0.183040f, 0.177004f, + 0.170962f, 0.164913f, 0.158858f, 0.152797f, 0.146730f, 0.140658f, + 0.134581f, 0.128498f, 0.122411f, 0.116319f, 0.110222f, 0.104122f, + 0.098017f, 0.091909f, 0.085797f, 0.079682f, 0.073565f, 0.067444f, + 0.061321f, 0.055195f, 0.049068f, 0.042938f, 0.036807f, 0.030675f, + 0.024541f, 0.018407f, 0.012272f, 0.006136f, 0.000000f, -0.006136f, + -0.012272f, -0.018407f, -0.024541f, -0.030675f, -0.036807f, -0.042938f, + -0.049068f, -0.055195f, -0.061321f, -0.067444f, -0.073565f, -0.079682f, + -0.085797f, -0.091909f, -0.098017f, -0.104122f, -0.110222f, -0.116319f, + -0.122411f, -0.128498f, -0.134581f, -0.140658f, -0.146730f, -0.152797f, + -0.158858f, -0.164913f, -0.170962f, -0.177004f, -0.183040f, -0.189069f, + -0.195090f, -0.201105f, -0.207111f, -0.213110f, -0.219101f, -0.225084f, + -0.231058f, -0.237024f, -0.242980f, -0.248928f, -0.254866f, -0.260794f, + -0.266713f, -0.272621f, -0.278520f, -0.284408f, -0.290285f, -0.296151f, + -0.302006f, -0.307850f, -0.313682f, -0.319502f, -0.325310f, -0.331106f, + -0.336890f, -0.342661f, -0.348419f, -0.354164f, -0.359895f, -0.365613f, + -0.371317f, -0.377007f, -0.382683f, -0.388345f, -0.393992f, -0.399624f, + -0.405241f, -0.410843f, -0.416430f, -0.422000f, -0.427555f, -0.433094f, + -0.438616f, -0.444122f, -0.449611f, -0.455084f, -0.460539f, -0.465976f, + -0.471397f, -0.476799f, -0.482184f, -0.487550f, -0.492898f, -0.498228f, + -0.503538f, -0.508830f, -0.514103f, -0.519356f, -0.524590f, -0.529804f, + -0.534998f, -0.540171f, -0.545325f, -0.550458f, -0.555570f, -0.560662f, + -0.565732f, -0.570781f, -0.575808f, -0.580814f, -0.585798f, -0.590760f, + -0.595699f, -0.600616f, -0.605511f, -0.610383f, -0.615232f, -0.620057f, + -0.624859f, -0.629638f, -0.634393f, -0.639124f, -0.643832f, -0.648514f, + -0.653173f, -0.657807f, -0.662416f, -0.667000f, -0.671559f, -0.676093f, + -0.680601f, -0.685084f, -0.689541f, -0.693971f, -0.698376f, -0.702755f, + -0.707107f, -0.711432f, -0.715731f, -0.720003f, -0.724247f, -0.728464f, + -0.732654f, -0.736817f, -0.740951f, -0.745058f, -0.749136f, -0.753187f, + -0.757209f, -0.761202f, -0.765167f, -0.769103f, -0.773010f, -0.776888f, + -0.780737f, -0.784557f, -0.788346f, -0.792107f, -0.795837f, -0.799537f, + -0.803208f, -0.806848f, -0.810457f, -0.814036f, -0.817585f, -0.821103f, + -0.824589f, -0.828045f, -0.831470f, -0.834863f, -0.838225f, -0.841555f, + -0.844854f, -0.848120f, -0.851355f, -0.854558f, -0.857729f, -0.860867f, + -0.863973f, -0.867046f, -0.870087f, -0.873095f, -0.876070f, -0.879012f, + -0.881921f, -0.884797f, -0.887640f, -0.890449f, -0.893224f, -0.895966f, + -0.898674f, -0.901349f, -0.903989f, -0.906596f, -0.909168f, -0.911706f, + -0.914210f, -0.916679f, -0.919114f, -0.921514f, -0.923880f, -0.926210f, + -0.928506f, -0.930767f, -0.932993f, -0.935184f, -0.937339f, -0.939459f, + -0.941544f, -0.943593f, -0.945607f, -0.947586f, -0.949528f, -0.951435f, + -0.953306f, -0.955141f, -0.956940f, -0.958703f, -0.960431f, -0.962121f, + -0.963776f, -0.965394f, -0.966976f, -0.968522f, -0.970031f, -0.971504f, + -0.972940f, -0.974339f, -0.975702f, -0.977028f, -0.978317f, -0.979570f, + -0.980785f, -0.981964f, -0.983105f, -0.984210f, -0.985278f, -0.986308f, + -0.987301f, -0.988258f, -0.989177f, -0.990058f, -0.990903f, -0.991710f, + -0.992480f, -0.993212f, -0.993907f, -0.994565f, -0.995185f, -0.995767f, + -0.996313f, -0.996820f, -0.997290f, -0.997723f, -0.998118f, -0.998476f, + -0.998795f, -0.999078f, -0.999322f, -0.999529f, -0.999699f, -0.999831f, + -0.999925f, -0.999981f, -1.000000f, -0.999981f, -0.999925f, -0.999831f, + -0.999699f, -0.999529f, -0.999322f, -0.999078f, -0.998795f, -0.998476f, + -0.998118f, -0.997723f, -0.997290f, -0.996820f, -0.996313f, -0.995767f, + -0.995185f, -0.994565f, -0.993907f, -0.993212f, -0.992480f, -0.991710f, + -0.990903f, -0.990058f, -0.989177f, -0.988258f, -0.987301f, -0.986308f, + -0.985278f, -0.984210f, -0.983105f, -0.981964f, -0.980785f, -0.979570f, + -0.978317f, -0.977028f, -0.975702f, -0.974339f, -0.972940f, -0.971504f, + -0.970031f, -0.968522f, -0.966976f, -0.965394f, -0.963776f, -0.962121f, + -0.960431f, -0.958703f, -0.956940f, -0.955141f, -0.953306f, -0.951435f, + -0.949528f, -0.947586f, -0.945607f, -0.943593f, -0.941544f, -0.939459f, + -0.937339f, -0.935184f, -0.932993f, -0.930767f, -0.928506f, -0.926210f, + -0.923880f, -0.921514f, -0.919114f, -0.916679f, -0.914210f, -0.911706f, + -0.909168f, -0.906596f, -0.903989f, -0.901349f, -0.898674f, -0.895966f, + -0.893224f, -0.890449f, -0.887640f, -0.884797f, -0.881921f, -0.879012f, + -0.876070f, -0.873095f, -0.870087f, -0.867046f, -0.863973f, -0.860867f, + -0.857729f, -0.854558f, -0.851355f, -0.848120f, -0.844854f, -0.841555f, + -0.838225f, -0.834863f, -0.831470f, -0.828045f, -0.824589f, -0.821103f, + -0.817585f, -0.814036f, -0.810457f, -0.806848f, -0.803208f, -0.799537f, + -0.795837f, -0.792107f, -0.788346f, -0.784557f, -0.780737f, -0.776888f, + -0.773010f, -0.769103f, -0.765167f, -0.761202f, -0.757209f, -0.753187f, + -0.749136f, -0.745058f, -0.740951f, -0.736817f, -0.732654f, -0.728464f, + -0.724247f, -0.720003f, -0.715731f, -0.711432f, -0.707107f, -0.702755f, + -0.698376f, -0.693971f, -0.689541f, -0.685084f, -0.680601f, -0.676093f, + -0.671559f, -0.667000f, -0.662416f, -0.657807f, -0.653173f, -0.648514f, + -0.643832f, -0.639124f, -0.634393f, -0.629638f, -0.624859f, -0.620057f, + -0.615232f, -0.610383f, -0.605511f, -0.600616f, -0.595699f, -0.590760f, + -0.585798f, -0.580814f, -0.575808f, -0.570781f, -0.565732f, -0.560662f, + -0.555570f, -0.550458f, -0.545325f, -0.540171f, -0.534998f, -0.529804f, + -0.524590f, -0.519356f, -0.514103f, -0.508830f, -0.503538f, -0.498228f, + -0.492898f, -0.487550f, -0.482184f, -0.476799f, -0.471397f, -0.465976f, + -0.460539f, -0.455084f, -0.449611f, -0.444122f, -0.438616f, -0.433094f, + -0.427555f, -0.422000f, -0.416430f, -0.410843f, -0.405241f, -0.399624f, + -0.393992f, -0.388345f, -0.382683f, -0.377007f, -0.371317f, -0.365613f, + -0.359895f, -0.354164f, -0.348419f, -0.342661f, -0.336890f, -0.331106f, + -0.325310f, -0.319502f, -0.313682f, -0.307850f, -0.302006f, -0.296151f, + -0.290285f, -0.284408f, -0.278520f, -0.272621f, -0.266713f, -0.260794f, + -0.254866f, -0.248928f, -0.242980f, -0.237024f, -0.231058f, -0.225084f, + -0.219101f, -0.213110f, -0.207111f, -0.201105f, -0.195090f, -0.189069f, + -0.183040f, -0.177004f, -0.170962f, -0.164913f, -0.158858f, -0.152797f, + -0.146730f, -0.140658f, -0.134581f, -0.128498f, -0.122411f, -0.116319f, + -0.110222f, -0.104122f, -0.098017f, -0.091909f, -0.085797f, -0.079682f, + -0.073565f, -0.067444f, -0.061321f, -0.055195f, -0.049068f, -0.042938f, + -0.036807f, -0.030675f, -0.024541f, -0.018407f, -0.012272f, -0.006136f, + -0.000000f, 0.006136f, 0.012272f, 0.018407f, 0.024541f, 0.030675f, + 0.036807f, 0.042938f, 0.049068f, 0.055195f, 0.061321f, 0.067444f, + 0.073565f, 0.079682f, 0.085797f, 0.091909f, 0.098017f, 0.104122f, + 0.110222f, 0.116319f, 0.122411f, 0.128498f, 0.134581f, 0.140658f, + 0.146730f, 0.152797f, 0.158858f, 0.164913f, 0.170962f, 0.177004f, + 0.183040f, 0.189069f, 0.195090f, 0.201105f, 0.207111f, 0.213110f, + 0.219101f, 0.225084f, 0.231058f, 0.237024f, 0.242980f, 0.248928f, + 0.254866f, 0.260794f, 0.266713f, 0.272621f, 0.278520f, 0.284408f, + 0.290285f, 0.296151f, 0.302006f, 0.307850f, 0.313682f, 0.319502f, + 0.325310f, 0.331106f, 0.336890f, 0.342661f, 0.348419f, 0.354164f, + 0.359895f, 0.365613f, 0.371317f, 0.377007f, 0.382683f, 0.388345f, + 0.393992f, 0.399624f, 0.405241f, 0.410843f, 0.416430f, 0.422000f, + 0.427555f, 0.433094f, 0.438616f, 0.444122f, 0.449611f, 0.455084f, + 0.460539f, 0.465976f, 0.471397f, 0.476799f, 0.482184f, 0.487550f, + 0.492898f, 0.498228f, 0.503538f, 0.508830f, 0.514103f, 0.519356f, + 0.524590f, 0.529804f, 0.534998f, 0.540171f, 0.545325f, 0.550458f, + 0.555570f, 0.560662f, 0.565732f, 0.570781f, 0.575808f, 0.580814f, + 0.585798f, 0.590760f, 0.595699f, 0.600616f, 0.605511f, 0.610383f, + 0.615232f, 0.620057f, 0.624859f, 0.629638f, 0.634393f, 0.639124f, + 0.643832f, 0.648514f, 0.653173f, 0.657807f, 0.662416f, 0.667000f, + 0.671559f, 0.676093f, 0.680601f, 0.685084f, 0.689541f, 0.693971f, + 0.698376f, 0.702755f, 0.707107f, 0.711432f, 0.715731f, 0.720003f, + 0.724247f, 0.728464f, 0.732654f, 0.736817f, 0.740951f, 0.745058f, + 0.749136f, 0.753187f, 0.757209f, 0.761202f, 0.765167f, 0.769103f, + 0.773010f, 0.776888f, 0.780737f, 0.784557f, 0.788346f, 0.792107f, + 0.795837f, 0.799537f, 0.803208f, 0.806848f, 0.810457f, 0.814036f, + 0.817585f, 0.821103f, 0.824589f, 0.828045f, 0.831470f, 0.834863f, + 0.838225f, 0.841555f, 0.844854f, 0.848120f, 0.851355f, 0.854558f, + 0.857729f, 0.860867f, 0.863973f, 0.867046f, 0.870087f, 0.873095f, + 0.876070f, 0.879012f, 0.881921f, 0.884797f, 0.887640f, 0.890449f, + 0.893224f, 0.895966f, 0.898674f, 0.901349f, 0.903989f, 0.906596f, + 0.909168f, 0.911706f, 0.914210f, 0.916679f, 0.919114f, 0.921514f, + 0.923880f, 0.926210f, 0.928506f, 0.930767f, 0.932993f, 0.935184f, + 0.937339f, 0.939459f, 0.941544f, 0.943593f, 0.945607f, 0.947586f, + 0.949528f, 0.951435f, 0.953306f, 0.955141f, 0.956940f, 0.958703f, + 0.960431f, 0.962121f, 0.963776f, 0.965394f, 0.966976f, 0.968522f, + 0.970031f, 0.971504f, 0.972940f, 0.974339f, 0.975702f, 0.977028f, + 0.978317f, 0.979570f, 0.980785f, 0.981964f, 0.983105f, 0.984210f, + 0.985278f, 0.986308f, 0.987301f, 0.988258f, 0.989177f, 0.990058f, + 0.990903f, 0.991710f, 0.992480f, 0.993212f, 0.993907f, 0.994565f, + 0.995185f, 0.995767f, 0.996313f, 0.996820f, 0.997290f, 0.997723f, + 0.998118f, 0.998476f, 0.998795f, 0.999078f, 0.999322f, 0.999529f, + 0.999699f, 0.999831f, 0.999925f, 0.999981f}; +#endif \ No newline at end of file diff --git a/Robot_V2/Algorithm/Filter.cpp b/Robot_V2/Algorithm/Filter.cpp new file mode 100644 index 0000000..01021aa --- /dev/null +++ b/Robot_V2/Algorithm/Filter.cpp @@ -0,0 +1,151 @@ +#include "Filter.h" +#include "Can.h" +#include "ang_sensor.h" +#include +#include +#include + +extern angle_sensor KTH7823; +extern CAN_transmiter CAN0_transmiter; +extern u32 system_runtime_us; +EncoderAngleKalman Angle_kalman(0, 1.0f, 1e-4f, 0.25f); +EncoderVelocityKalman Vel_kalman(0, 1e-5f, 1e-6f, 0.02f); + +constexpr u8 SIZE_FLOAT = sizeof(float); + +/*! + \brief 中值滤波器函数 + \param[in] values 待滤波的数据数组 + \param[in] size 数组大小 + \retval 滤波后的中值 + \note 使用部分排序优化算法提高效率 +*/ +float medium_filter(float values[], u8 size) { + // 使用局部数组避免动态内存分配 + float sorted[size]; + memcpy(sorted, values, size * SIZE_FLOAT); + + // 这比完整排序更高效,时间复杂度从O(n log n)降低到O(n) + std::nth_element(sorted, sorted + size / 2, sorted + size); + + return sorted[size / 2]; // 返回中值 +} + +// EncoderVelocityKalman类的实现 +/*! + \brief 构造函数,初始化编码器速度卡尔曼滤波器参数 + \param[in] initial_velocity 初始速度值 (rad/s) + \param[in] T 控制周期(s) + \param[in] Q 过程噪声协方差(典型值: 1e-4 ~ 1e-2) + \param[in] R 测量噪声协方差(典型值: 速度范围的1%~5%) + \retval none +*/ +EncoderVelocityKalman::EncoderVelocityKalman(float initial_velocity, float T, + float Q, float R) + : kalman(initial_velocity, T, Q, R) {} + +/*! + \brief 更新卡尔曼滤波器状态 + \param[in] measured_velocity 测量的速度值 (rad/s) + \retval 估计的速度值 (rad/s) + \note 实现卡尔曼滤波的预测和更新步骤,假设速度变化符合随机游走模型 +*/ +float EncoderVelocityKalman::update(float measured_velocity) { + // 1. 预测步骤 - 假设速度符合随机游走模型(加速度为0) + // 由于速度变化缓慢,我们可以简单预测速度保持不变 + kalman.predict(kalman.getState()); + + // 2. 更新步骤 - 直接使用测量值更新 + return kalman.update(measured_velocity); +} + +/*! + \brief 获取当前速度估计值 + \retval 当前速度估计值 (deg/s) +*/ +float EncoderVelocityKalman::getVelocity() const { return kalman.getState(); } + +/*! + \brief 设置过程噪声协方差 + \param[in] q 过程噪声协方差值 + \retval none +*/ +void EncoderVelocityKalman::setProcessNoise(float q) { + kalman.setProcessNoise(q); +} + +/*! + \brief 设置测量噪声协方差 + \param[in] r 测量噪声协方差值 + \retval none +*/ +void EncoderVelocityKalman::setMeasurementNoise(float r) { + kalman.setMeasurementNoise(r); +} + +// EncoderAngleKalman类的实现 +/*! + \brief 构造函数,初始化编码器角度卡尔曼滤波器参数 + \param[in] initial_angle 初始角度值 (degree) + \param[in] initial_error_covariance 初始误差协方差 + \param[in] process_noise 过程噪声协方差 + \param[in] measurement_noise 测量噪声协方差 + \retval none +*/ +EncoderAngleKalman::EncoderAngleKalman(float initial_angle, + float initial_error_covariance, + float process_noise, + float measurement_noise) + : kalman(initial_angle, initial_error_covariance, process_noise, + measurement_noise), + last_angle(initial_angle), initialized(true) {} + +/*! + \brief 更新卡尔曼滤波器状态 + \param[in] measured_angle 测量的角度值 (degree) + \retval 估计的角度值 (degree) + \note 实现卡尔曼滤波的预测和更新步骤 +*/ +float EncoderAngleKalman::update(float measured_angle) { + // 更新last_angle以支持速度计算 + last_angle = kalman.getState(); + // 1. 预测步骤 - 速度估计 + kalman.predict(last_angle); + + // 2. 更新步骤 - 使用处理后的角度值更新 + float filtered_angle = kalman.update(measured_angle); + return filtered_angle; +} + +/*! + \brief 获取当前角度估计值 + \retval 当前角度估计值 (degree) +*/ +float EncoderAngleKalman::getAngle() const { return kalman.getState(); } +/*! + \brief 获取当前角度估计值 + \retval 当前角度估计值 (degree) +*/ +float EncoderAngleKalman::getVelocity() const { + static u32 last_us100_counter = system_runtime_us; + float vel = (kalman.getState() - last_angle) * 1e4 * + (system_runtime_us - last_us100_counter); + last_us100_counter = system_runtime_us; + return vel; +} + +/*! + \brief 设置过程噪声协方差 + \param[in] q 过程噪声协方差值 + \retval none +*/ +void EncoderAngleKalman::setProcessNoise(float q) { kalman.setProcessNoise(q); } + +/*! + \brief 设置测量噪声协方差 + \param[in] r 测量噪声协方差值 + \retval none +*/ +void EncoderAngleKalman::setMeasurementNoise(float r) { + kalman.setMeasurementNoise(r); +} \ No newline at end of file diff --git a/Robot_V2/Algorithm/Filter.h b/Robot_V2/Algorithm/Filter.h new file mode 100644 index 0000000..26096bb --- /dev/null +++ b/Robot_V2/Algorithm/Filter.h @@ -0,0 +1,164 @@ +#ifndef _FILTER_H +#define _FILTER_H + +#ifdef __cplusplus +extern "C" { +#endif + +// C风格函数声明可以放在这里 +// 例如: void some_c_function(float* data, int size); + +#ifdef __cplusplus +} // extern "C" +#endif + +#ifdef __cplusplus +#include +#include + +float medium_filter(float values[], u8 size); + +/*! + \brief 通用卡尔曼滤波器模板类 + \note 可用于各种基于线性系统的状态估计 +*/ +template class KalmanFilter { + private: + T P; // 估计误差协方差 + T Q; // 过程噪声协方差 + T R; // 测量噪声协方差 + + public: + T x; // 状态估计 + /*! + \brief 构造函数 + \param[in] initial_state 初始状态值 + \param[in] initial_error_covariance 初始误差协方差 + \param[in] process_noise 过程噪声协方差 + \param[in] measurement_noise 测量噪声协方差 + */ + KalmanFilter(T initial_state, T initial_error_covariance, T process_noise, + T measurement_noise) + : x(initial_state), P(initial_error_covariance), Q(process_noise), + R(measurement_noise) {} + + /*! + \brief 预测步骤 + \param[in] state_prediction 状态预测值 + \retval none + */ + void predict(T state_prediction) { + x = state_prediction; + P += Q; + } + + /*! + \brief 更新步骤 + \param[in] measurement 测量值 + \param[in] measurement_prediction 测量预测值 + \retval 估计的状态值 + */ + T update(T measurement, T measurement_prediction) { + T y = measurement - measurement_prediction; // 测量残差 + T S = P + R; // 残差协方差 + T K = P / S; // 卡尔曼增益 + + x += K * y; // 更新状态估计 + P = (1 - K) * P; // 更新误差协方差 + + return x; + } + + /*! + \brief 直接更新步骤(适用于状态直接可测的情况) + \param[in] measurement 测量值 + \retval 估计的状态值 + */ + T update(T measurement) { + T K = P / (P + R); // 卡尔曼增益 + + x += K * (measurement - x); // 更新状态估计 + P = (1 - K) * P; // 更新误差协方差 + return x; + } + + /*! + \brief 获取当前状态估计值 + \retval 当前状态估计值 + */ + T getState() const { return x; } + + /*! + \brief 设置过程噪声协方差 + \param[in] process_noise 过程噪声协方差值 + \retval none + */ + void setProcessNoise(T process_noise) { Q = process_noise; } + + /*! + \brief 设置测量噪声协方差 + \param[in] measurement_noise 测量噪声协方差值 + \retval none + */ + void setMeasurementNoise(T measurement_noise) { R = measurement_noise; } +}; + +/*! + \brief 编码器速度卡尔曼滤波器类 + \note 用于滤除编码器速度测量噪声的卡尔曼滤波器实现 +*/ +class EncoderVelocityKalman { + private: + KalmanFilter kalman; + + public: + EncoderVelocityKalman(float initial_velocity, + float initial_error_covariance, float process_noise, + float measurement_noise); + + float update(float measured_velocity); + + float getVelocity() const; + + void setProcessNoise(float q); + + void setMeasurementNoise(float r); + + u8 init(float init_velocity) { + kalman.x = init_velocity; + return 0; + } +}; + +/*! + \brief 编码器角度卡尔曼滤波器类 + \note 用于滤除编码器角度测量噪声的卡尔曼滤波器实现 +*/ +class EncoderAngleKalman { + private: + KalmanFilter kalman; + bool initialized; + float last_angle; + + public: + EncoderAngleKalman(float initial_angle, float initial_error_covariance, + float process_noise, float measurement_noise); + + float update(float measured_angle); + + float getAngle() const; + float getVelocity() const; + + void setProcessNoise(float q); + float getstate() const { return kalman.getState(); }; + + void setMeasurementNoise(float r); + u8 init(float init_angle) { + kalman.x = init_angle; + return 0; + } +}; + +#endif // __cplusplus + +#endif // _FILTER_H \ No newline at end of file diff --git a/Robot_V2/Algorithm/pid.cpp b/Robot_V2/Algorithm/pid.cpp new file mode 100644 index 0000000..61595c1 --- /dev/null +++ b/Robot_V2/Algorithm/pid.cpp @@ -0,0 +1,60 @@ +#include "pid.h" +#define _constrain(amt, low, high) \ + ((amt) < (low) ? (low) : ((amt) > (high) ? (high) : (amt))) +#include "Can.h" +#include "math.h" + +extern CAN_transmiter CAN0_transmiter; +constexpr float TIME_SLICE = 1e-4; + +PIDController::PIDController(float P, float I, float D, float ramp, float limit) + : P(P), I(I), D(D), output_ramp(ramp) // PID控制器加速度限幅 + , + limit(limit) // PID控制器输出限幅 + , + error_prev(0.0f), output_prev(0.0f), integral_prev(0.0f) {} + +// PID 控制器函数 +float PIDController::operator()(float error) { + // P环 + float proportional = P * error; + + // Tustin 散点积分(I环) + // 添加积分限幅,防止积分饱和 + float integral = integral_prev + I * TIME_SLICE * 0.5f * (error + error_prev); + integral = _constrain(integral, -limit, limit); + + // D环(微分环节) + float derivative = D * (error - error_prev) / TIME_SLICE; + + // 将P,I,D三环的计算值加起来 + float output = proportional + integral + derivative; + output = _constrain(output, -limit, limit); + + // 输出斜坡限制 + // 简化的斜坡限制(单行逻辑) + if (output_ramp > 0) { + float max_delta = output_ramp * TIME_SLICE; + output = output_prev + fmaxf(-max_delta, fminf(max_delta, output - output_prev)); + } + // 保存值(为了下一次循环) + integral_prev = integral; + output_prev = output; + error_prev = error; + + return output; +} + +/** + * @brief 设置PID参数 + * + * @param P: P参数 + * @param I: I参数 + * @param D: D参数 + * @return void + */ +void PIDController::set_PID(float P, float I, float D) { + this->P = P; + this->I = I; + this->D = D; +} \ No newline at end of file diff --git a/Robot_V2/Algorithm/pid.h b/Robot_V2/Algorithm/pid.h new file mode 100644 index 0000000..695b51d --- /dev/null +++ b/Robot_V2/Algorithm/pid.h @@ -0,0 +1,25 @@ +#ifndef PID_H +#define PID_H + +class PIDController +{ +public: + PIDController(float P, float I, float D, float ramp, float limit); + ~PIDController() = default; + + float operator() (float error); + void set_PID(float P, float I, float D); + + float P; //!< 比例增益(P环增益) + float I; //!< 积分增益(I环增益) + float D; //!< 微分增益(D环增益) + float output_ramp; + float limit; +protected: + float error_prev; //!< 最后的跟踪误差值 + float output_prev; //!< 最后一个 pid 输出值 + float integral_prev; //!< 最后一个积分分量值 + unsigned long timestamp_prev; //!< 上次执行时间戳 +}; + +#endif \ No newline at end of file diff --git a/Robot_V2/Algorithm/thermal.cpp b/Robot_V2/Algorithm/thermal.cpp new file mode 100644 index 0000000..e69de29 diff --git a/Robot_V2/Algorithm/thermal.h b/Robot_V2/Algorithm/thermal.h new file mode 100644 index 0000000..ed7041f --- /dev/null +++ b/Robot_V2/Algorithm/thermal.h @@ -0,0 +1,7 @@ +#ifndef THERMAL_H +#define THERMAL_H + + + + +#endif \ No newline at end of file diff --git a/Robot_V2/RTE/Device/GD32C103CB/ac6_linker_script.sct.src b/Robot_V2/RTE/Device/GD32C103CB/ac6_linker_script.sct.src new file mode 100644 index 0000000..7820e1f --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/ac6_linker_script.sct.src @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2023 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* ---------------------------------------------------------------------------- + Stack seal size definition + *----------------------------------------------------------------------------*/ +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define __STACKSEAL_SIZE 8 +#else +#define __STACKSEAL_SIZE 0 +#endif + +/*---------------------------------------------------------------------------- + Scatter File Definitions definition + *----------------------------------------------------------------------------*/ + +LR_ROM0 __ROM0_BASE __ROM0_SIZE { + + ER_ROM0 __ROM0_BASE __ROM0_SIZE { + *.o (RESET, +First) + *(InRoot$$Sections) + *(+RO +XO) + } + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + ER_CMSE_VENEER AlignExpr(+0, 32) (__ROM0_SIZE - AlignExpr(ImageLength(ER_ROM0), 32)) { + *(Veneer$$CMSE) + } +#endif + + RW_NOINIT __RAM0_BASE UNINIT (__RAM0_SIZE - __HEAP_SIZE - __STACK_SIZE - __STACKSEAL_SIZE) { + *.o(.bss.noinit) + *.o(.bss.noinit.*) + } + + RW_RAM0 AlignExpr(+0, 8) (__RAM0_SIZE - __HEAP_SIZE - __STACK_SIZE - __STACKSEAL_SIZE - AlignExpr(ImageLength(RW_NOINIT), 8)) { + *(+RW +ZI) + } + +#if __HEAP_SIZE > 0 + ARM_LIB_HEAP (AlignExpr(+0, 8)) EMPTY __HEAP_SIZE { ; Reserve empty region for heap + } +#endif + + ARM_LIB_STACK (__RAM0_BASE + __RAM0_SIZE - __STACKSEAL_SIZE) EMPTY -__STACK_SIZE { ; Reserve empty region for stack + } + +#if __STACKSEAL_SIZE > 0 + STACKSEAL +0 EMPTY __STACKSEAL_SIZE { ; Reserve empty region for stack seal immediately after stack + } +#endif + +#if __RAM1_SIZE > 0 + RW_RAM1 __RAM1_BASE __RAM1_SIZE { + .ANY (+RW +ZI) + } +#endif + +#if __RAM2_SIZE > 0 + RW_RAM2 __RAM2_BASE __RAM2_SIZE { + .ANY (+RW +ZI) + } +#endif + +#if __RAM3_SIZE > 0 + RW_RAM3 __RAM3_BASE __RAM3_SIZE { + .ANY (+RW +ZI) + } +#endif +} + +#if __ROM1_SIZE > 0 +LR_ROM1 __ROM1_BASE __ROM1_SIZE { + ER_ROM1 +0 __ROM1_SIZE { + .ANY (+RO +XO) + } +} +#endif + +#if __ROM2_SIZE > 0 +LR_ROM2 __ROM2_BASE __ROM2_SIZE { + ER_ROM2 +0 __ROM2_SIZE { + .ANY (+RO +XO) + } +} +#endif + +#if __ROM3_SIZE > 0 +LR_ROM3 __ROM3_BASE __ROM3_SIZE { + ER_ROM3 +0 __ROM3_SIZE { + .ANY (+RO +XO) + } +} +#endif diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_adc.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_adc.c new file mode 100644 index 0000000..638fd3a --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_adc.c @@ -0,0 +1,992 @@ +/*! + \file gd32c10x_adc.c + \brief ADC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_adc.h" + +/* discontinuous mode macro*/ +#define ADC_CHANNEL_LENGTH_SUBTRACT_ONE ((uint8_t)1U) + +/* ADC regular channel macro */ +#define ADC_REGULAR_CHANNEL_RANK_SIX ((uint8_t)6U) +#define ADC_REGULAR_CHANNEL_RANK_TWELVE ((uint8_t)12U) +#define ADC_REGULAR_CHANNEL_RANK_SIXTEEN ((uint8_t)16U) +#define ADC_REGULAR_CHANNEL_RANK_LENGTH ((uint8_t)5U) + +/* ADC sampling time macro */ +#define ADC_CHANNEL_SAMPLE_TEN ((uint8_t)10U) +#define ADC_CHANNEL_SAMPLE_EIGHTEEN ((uint8_t)18U) +#define ADC_CHANNEL_SAMPLE_LENGTH ((uint8_t)3U) + +/* ADC inserted channel macro */ +#define ADC_INSERTED_CHANNEL_RANK_LENGTH ((uint8_t)5U) +#define ADC_INSERTED_CHANNEL_SHIFT_LENGTH ((uint8_t)15U) + +/* ADC inserted channel offset macro */ +#define ADC_OFFSET_LENGTH ((uint8_t)3U) +#define ADC_OFFSET_SHIFT_LENGTH ((uint8_t)4U) + +/*! + \brief reset ADC + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_deinit(uint32_t adc_periph) +{ + switch(adc_periph){ + case ADC0: + /* reset ADC0 */ + rcu_periph_reset_enable(RCU_ADC0RST); + rcu_periph_reset_disable(RCU_ADC0RST); + break; + case ADC1: + /* reset ADC1 */ + rcu_periph_reset_enable(RCU_ADC1RST); + rcu_periph_reset_disable(RCU_ADC1RST); + break; + default: + break; + } +} + +/*! + \brief configure the ADC sync mode + \param[in] mode: ADC mode + only one parameter can be selected which is shown as below: + \arg ADC_MODE_FREE: all the ADCs work independently + \arg ADC_DAUL_REGULAL_PARALLEL_INSERTED_PARALLEL: ADC0 and ADC1 work in combined regular parallel + inserted parallel mode + \arg ADC_DAUL_REGULAL_PARALLEL_INSERTED_ROTATION: ADC0 and ADC1 work in combined regular parallel + trigger rotation mode + \arg ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_FAST: ADC0 and ADC1 work in combined inserted parallel + follow-up fast mode + \arg ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_SLOW: ADC0 and ADC1 work in combined inserted parallel + follow-up slow mode + \arg ADC_DAUL_INSERTED_PARALLEL: ADC0 and ADC1 work in inserted parallel mode only + \arg ADC_DAUL_REGULAL_PARALLEL: ADC0 and ADC1 work in regular parallel mode only + \arg ADC_DAUL_REGULAL_FOLLOWUP_FAST: ADC0 and ADC1 work in follow-up fast mode only + \arg ADC_DAUL_REGULAL_FOLLOWUP_SLOW: ADC0 and ADC1 work in follow-up slow mode only + \arg ADC_DAUL_INSERTED_TRIGGER_ROTATION: ADC0 and ADC1 work in trigger rotation mode only + \param[out] none + \retval none +*/ +void adc_mode_config(uint32_t mode) +{ + ADC_CTL0(ADC0) &= ~(ADC_CTL0_SYNCM); + ADC_CTL0(ADC0) |= mode; +} + +/*! + \brief enable or disable ADC special function + \param[in] adc_periph: ADCx,x=0,1 + \param[in] function: the function to config + only one parameter can be selected which is shown as below: + \arg ADC_SCAN_MODE: scan mode select + \arg ADC_INSERTED_CHANNEL_AUTO: inserted channel group convert automatically + \arg ADC_CONTINUOUS_MODE: continuous mode select + \param[in] newvalue: ENABLE or DISABLE + \param[out] none + \retval none +*/ +void adc_special_function_config(uint32_t adc_periph , uint32_t function , ControlStatus newvalue) +{ + if(newvalue){ + if(0U != (function & ADC_SCAN_MODE)){ + /* enable scan mode */ + ADC_CTL0(adc_periph) |= ADC_SCAN_MODE; + } + if(0U != (function & ADC_INSERTED_CHANNEL_AUTO)){ + /* enable inserted channel group convert automatically */ + ADC_CTL0(adc_periph) |= ADC_INSERTED_CHANNEL_AUTO; + } + if(0U != (function & ADC_CONTINUOUS_MODE)){ + /* enable continuous mode */ + ADC_CTL1(adc_periph) |= ADC_CONTINUOUS_MODE; + } + }else{ + if(0U != (function & ADC_SCAN_MODE)){ + /* disable scan mode */ + ADC_CTL0(adc_periph) &= ~ADC_SCAN_MODE; + } + if(0U != (function & ADC_INSERTED_CHANNEL_AUTO)){ + /* disable inserted channel group convert automatically */ + ADC_CTL0(adc_periph) &= ~ADC_INSERTED_CHANNEL_AUTO; + } + if(0U != (function & ADC_CONTINUOUS_MODE)){ + /* disable continuous mode */ + ADC_CTL1(adc_periph) &= ~ADC_CONTINUOUS_MODE; + } + } +} + +/*! + \brief configure ADC data alignment + \param[in] adc_periph: ADCx,x=0,1 + \param[in] data_alignment: data alignment select + only one parameter can be selected which is shown as below: + \arg ADC_DATAALIGN_RIGHT: LSB alignment + \arg ADC_DATAALIGN_LEFT: MSB alignment + \param[out] none + \retval none +*/ +void adc_data_alignment_config(uint32_t adc_periph , uint32_t data_alignment) +{ + if(ADC_DATAALIGN_RIGHT != data_alignment){ + /* MSB alignment */ + ADC_CTL1(adc_periph) |= ADC_CTL1_DAL; + }else{ + /* LSB alignment */ + ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_DAL); + } +} + +/*! + \brief enable ADC interface + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_enable(uint32_t adc_periph) +{ + if(RESET == (ADC_CTL1(adc_periph) & ADC_CTL1_ADCON)){ + /* enable ADC */ + ADC_CTL1(adc_periph) |= (uint32_t)ADC_CTL1_ADCON; + } +} + +/*! + \brief disable ADC interface + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_disable(uint32_t adc_periph) +{ + /* disable ADC */ + ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ADCON); +} + +/*! + \brief ADC calibration and reset calibration + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_calibration_enable(uint32_t adc_periph) +{ + /* reset the selected ADC calibration registers */ + ADC_CTL1(adc_periph) |= (uint32_t) ADC_CTL1_RSTCLB; + /* check the RSTCLB bit state */ + while(RESET != (ADC_CTL1(adc_periph) & ADC_CTL1_RSTCLB)){ + } + /* enable ADC calibration process */ + ADC_CTL1(adc_periph) |= ADC_CTL1_CLB; + /* check the CLB bit state */ + while(RESET != (ADC_CTL1(adc_periph) & ADC_CTL1_CLB)){ + } +} + +/*! + \brief enable the temperature sensor and Vrefint channel + \param[in] none + \param[out] none + \retval none +*/ +void adc_tempsensor_vrefint_enable(void) +{ + /* enable the temperature sensor and Vrefint channel */ + ADC_CTL1(ADC0) |= ADC_CTL1_TSVREN; +} + +/*! + \brief disable the temperature sensor and Vrefint channel + \param[in] none + \param[out] none + \retval none +*/ +void adc_tempsensor_vrefint_disable(void) +{ + /* disable the temperature sensor and Vrefint channel */ + ADC_CTL1(ADC0) &= ~ADC_CTL1_TSVREN; +} + +/*! + \brief configure ADC resolution + \param[in] adc_periph: ADCx,x=0,1 + \param[in] resolution: ADC resolution + only one parameter can be selected which is shown as below: + \arg ADC_RESOLUTION_12B: 12-bit ADC resolution + \arg ADC_RESOLUTION_10B: 10-bit ADC resolution + \arg ADC_RESOLUTION_8B: 8-bit ADC resolution + \arg ADC_RESOLUTION_6B: 6-bit ADC resolution + \param[out] none + \retval none +*/ +void adc_resolution_config(uint32_t adc_periph , uint32_t resolution) +{ + ADC_OVSAMPCTL(adc_periph) &= ~((uint32_t)ADC_OVSAMPCTL_DRES); + ADC_OVSAMPCTL(adc_periph) |= (uint32_t)resolution; +} + +/*! + \brief configure ADC oversample mode + \param[in] adc_periph: ADCx,x=0,1 + \param[in] mode: ADC oversampling mode + only one parameter can be selected which is shown as below: + \arg ADC_OVERSAMPLING_ALL_CONVERT: all oversampled conversions for a channel are done consecutively after a trigger + \arg ADC_OVERSAMPLING_ONE_CONVERT: each oversampled conversion for a channel needs a trigger + \param[in] shift: ADC oversampling shift + only one parameter can be selected which is shown as below: + \arg ADC_OVERSAMPLING_SHIFT_NONE: no oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_1B: 1-bit oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_2B: 2-bit oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_3B: 3-bit oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_4B: 3-bit oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_5B: 5-bit oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_6B: 6-bit oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_7B: 7-bit oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_8B: 8-bit oversampling shift + \param[in] ratio: ADC oversampling ratio + only one parameter can be selected which is shown as below: + \arg ADC_OVERSAMPLING_RATIO_MUL2: oversampling ratio multiple 2 + \arg ADC_OVERSAMPLING_RATIO_MUL4: oversampling ratio multiple 4 + \arg ADC_OVERSAMPLING_RATIO_MUL8: oversampling ratio multiple 8 + \arg ADC_OVERSAMPLING_RATIO_MUL16: oversampling ratio multiple 16 + \arg ADC_OVERSAMPLING_RATIO_MUL32: oversampling ratio multiple 32 + \arg ADC_OVERSAMPLING_RATIO_MUL64: oversampling ratio multiple 64 + \arg ADC_OVERSAMPLING_RATIO_MUL128: oversampling ratio multiple 128 + \arg ADC_OVERSAMPLING_RATIO_MUL256: oversampling ratio multiple 256 + \param[out] none + \retval none +*/ +void adc_oversample_mode_config(uint32_t adc_periph, uint32_t mode, uint16_t shift, uint8_t ratio) +{ + if(ADC_OVERSAMPLING_ONE_CONVERT == mode){ + ADC_OVSAMPCTL(adc_periph) |= (uint32_t)ADC_OVSAMPCTL_TOVS; + }else{ + ADC_OVSAMPCTL(adc_periph) &= ~((uint32_t)ADC_OVSAMPCTL_TOVS); + } + /* config the shift and ratio */ + ADC_OVSAMPCTL(adc_periph) &= ~((uint32_t)(ADC_OVSAMPCTL_OVSR | ADC_OVSAMPCTL_OVSS)); + ADC_OVSAMPCTL(adc_periph) |= ((uint32_t)shift | (uint32_t)ratio); +} + +/*! + \brief enable ADC oversample mode + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_oversample_mode_enable(uint32_t adc_periph) +{ + ADC_OVSAMPCTL(adc_periph) |= ADC_OVSAMPCTL_OVSEN; +} + +/*! + \brief disable ADC oversample mode + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_oversample_mode_disable(uint32_t adc_periph) +{ + ADC_OVSAMPCTL(adc_periph) &= ~((uint32_t)ADC_OVSAMPCTL_OVSEN); +} + +/*! + \brief enable DMA request + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_dma_mode_enable(uint32_t adc_periph) +{ + /* enable DMA request */ + ADC_CTL1(adc_periph) |= (uint32_t)(ADC_CTL1_DMA); +} + +/*! + \brief disable DMA request + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_dma_mode_disable(uint32_t adc_periph) +{ + /* disable DMA request */ + ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_DMA); +} + +/*! + \brief configure ADC discontinuous mode + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_channel_group: select the channel group + only one parameter can be selected which is shown as below: + \arg ADC_REGULAR_CHANNEL: regular channel group + \arg ADC_INSERTED_CHANNEL: inserted channel group + \arg ADC_CHANNEL_DISCON_DISABLE: disable discontinuous mode of regular & inserted channel + \param[in] length: number of conversions in discontinuous mode,the number can be 1..8 + for regular channel ,the number has no effect for inserted channel + \param[out] none + \retval none +*/ +void adc_discontinuous_mode_config(uint32_t adc_periph, uint8_t adc_channel_group, uint8_t length) +{ + /* disable discontinuous mode of regular & inserted channel */ + ADC_CTL0(adc_periph) &= ~((uint32_t)(ADC_CTL0_DISRC | ADC_CTL0_DISIC)); + switch(adc_channel_group){ + case ADC_REGULAR_CHANNEL: + /* config the number of conversions in discontinuous mode */ + ADC_CTL0(adc_periph) &= ~((uint32_t)ADC_CTL0_DISNUM); + ADC_CTL0(adc_periph) |= CTL0_DISNUM(((uint32_t)length - ADC_CHANNEL_LENGTH_SUBTRACT_ONE)); + /* enable regular channel group discontinuous mode */ + ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_DISRC; + break; + case ADC_INSERTED_CHANNEL: + /* enable inserted channel group discontinuous mode */ + ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_DISIC; + break; + case ADC_CHANNEL_DISCON_DISABLE: + /* disable discontinuous mode of regular & inserted channel */ + default: + break; + } +} + +/*! + \brief configure the length of regular channel group or inserted channel group + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_channel_group: select the channel group + only one parameter can be selected which is shown as below: + \arg ADC_REGULAR_CHANNEL: regular channel group + \arg ADC_INSERTED_CHANNEL: inserted channel group + \param[in] length: the length of the channel + regular channel 1-16 + inserted channel 1-4 + \param[out] none + \retval none +*/ +void adc_channel_length_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t length) +{ + switch(adc_channel_group){ + case ADC_REGULAR_CHANNEL: + /* configure the length of regular channel group */ + ADC_RSQ0(adc_periph) &= ~((uint32_t)ADC_RSQ0_RL); + ADC_RSQ0(adc_periph) |= RSQ0_RL((uint32_t)(length-ADC_CHANNEL_LENGTH_SUBTRACT_ONE)); + break; + case ADC_INSERTED_CHANNEL: + /* configure the length of inserted channel group */ + ADC_ISQ(adc_periph) &= ~((uint32_t)ADC_ISQ_IL); + ADC_ISQ(adc_periph) |= ISQ_IL((uint32_t)(length-ADC_CHANNEL_LENGTH_SUBTRACT_ONE)); + break; + default: + break; + } +} + +/*! + \brief configure ADC regular channel + \param[in] adc_periph: ADCx,x=0,1 + \param[in] rank: the regular group sequence rank,this parameter must be between 0 to 15 + \param[in] adc_channel: the selected ADC channel + only one parameter can be selected which is shown as below: + \arg ADC_CHANNEL_x(x=0..17)(x=16 and x=17 are only for ADC0): ADC Channelx + \param[in] sample_time: the sample time value + only one parameter can be selected which is shown as below: + \arg ADC_SAMPLETIME_1POINT5: 1.5 cycles + \arg ADC_SAMPLETIME_7POINT5: 7.5 cycles + \arg ADC_SAMPLETIME_13POINT5: 13.5 cycles + \arg ADC_SAMPLETIME_28POINT5: 28.5 cycles + \arg ADC_SAMPLETIME_41POINT5: 41.5 cycles + \arg ADC_SAMPLETIME_55POINT5: 55.5 cycles + \arg ADC_SAMPLETIME_71POINT5: 71.5 cycles + \arg ADC_SAMPLETIME_239POINT5: 239.5 cycles + \param[out] none + \retval none +*/ +void adc_regular_channel_config(uint32_t adc_periph , uint8_t rank , uint8_t adc_channel , uint32_t sample_time) +{ + uint32_t rsq,sampt; + + /* ADC regular sequence config */ + if(rank < ADC_REGULAR_CHANNEL_RANK_SIX){ + /* the regular group sequence rank is smaller than six */ + rsq = ADC_RSQ2(adc_periph); + rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (ADC_REGULAR_CHANNEL_RANK_LENGTH*rank))); + /* the channel number is written to these bits to select a channel as the nth conversion in the regular channel group */ + rsq |= ((uint32_t)adc_channel << (ADC_REGULAR_CHANNEL_RANK_LENGTH*rank)); + ADC_RSQ2(adc_periph) = rsq; + }else if(rank < ADC_REGULAR_CHANNEL_RANK_TWELVE){ + /* the regular group sequence rank is smaller than twelve */ + rsq = ADC_RSQ1(adc_periph); + rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (ADC_REGULAR_CHANNEL_RANK_LENGTH*(rank-ADC_REGULAR_CHANNEL_RANK_SIX)))); + /* the channel number is written to these bits to select a channel as the nth conversion in the regular channel group */ + rsq |= ((uint32_t)adc_channel << (ADC_REGULAR_CHANNEL_RANK_LENGTH*(rank-ADC_REGULAR_CHANNEL_RANK_SIX))); + ADC_RSQ1(adc_periph) = rsq; + }else if(rank < ADC_REGULAR_CHANNEL_RANK_SIXTEEN){ + /* the regular group sequence rank is smaller than sixteen */ + rsq = ADC_RSQ0(adc_periph); + rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (ADC_REGULAR_CHANNEL_RANK_LENGTH*(rank-ADC_REGULAR_CHANNEL_RANK_TWELVE)))); + /* the channel number is written to these bits to select a channel as the nth conversion in the regular channel group */ + rsq |= ((uint32_t)adc_channel << (ADC_REGULAR_CHANNEL_RANK_LENGTH*(rank-ADC_REGULAR_CHANNEL_RANK_TWELVE))); + ADC_RSQ0(adc_periph) = rsq; + }else{ + } + + /* ADC sampling time config */ + if(adc_channel < ADC_CHANNEL_SAMPLE_TEN){ + /* the regular group sequence rank is smaller than ten */ + sampt = ADC_SAMPT1(adc_periph); + sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH*adc_channel))); + /* channel sample time set*/ + sampt |= (uint32_t)(sample_time << (ADC_CHANNEL_SAMPLE_LENGTH*adc_channel)); + ADC_SAMPT1(adc_periph) = sampt; + }else if(adc_channel < ADC_CHANNEL_SAMPLE_EIGHTEEN){ + /* the regular group sequence rank is smaller than eighteen */ + sampt = ADC_SAMPT0(adc_periph); + sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH*(adc_channel-ADC_CHANNEL_SAMPLE_TEN)))); + /* channel sample time set*/ + sampt |= (uint32_t)(sample_time << (ADC_CHANNEL_SAMPLE_LENGTH*(adc_channel-ADC_CHANNEL_SAMPLE_TEN))); + ADC_SAMPT0(adc_periph) = sampt; + }else{ + } +} + +/*! + \brief configure ADC inserted channel + \param[in] adc_periph: ADCx,x=0,1 + \param[in] rank: the inserted group sequencer rank,this parameter must be between 0 to 3 + \param[in] adc_channel: the selected ADC channel + only one parameter can be selected which is shown as below: + \arg ADC_CHANNEL_x(x=0..17)(x=16 and x=17 are only for ADC0): ADC Channelx + \param[in] sample_time: The sample time value + only one parameter can be selected which is shown as below: + \arg ADC_SAMPLETIME_1POINT5: 1.5 cycles + \arg ADC_SAMPLETIME_7POINT5: 7.5 cycles + \arg ADC_SAMPLETIME_13POINT5: 13.5 cycles + \arg ADC_SAMPLETIME_28POINT5: 28.5 cycles + \arg ADC_SAMPLETIME_41POINT5: 41.5 cycles + \arg ADC_SAMPLETIME_55POINT5: 55.5 cycles + \arg ADC_SAMPLETIME_71POINT5: 71.5 cycles + \arg ADC_SAMPLETIME_239POINT5: 239.5 cycles + \param[out] none + \retval none +*/ +void adc_inserted_channel_config(uint32_t adc_periph , uint8_t rank , uint8_t adc_channel , uint32_t sample_time) +{ + uint8_t inserted_length; + uint32_t isq,sampt; + + /* get inserted channel group length */ + inserted_length = (uint8_t)GET_BITS(ADC_ISQ(adc_periph) , 20U , 21U); + /* the channel number is written to these bits to select a channel as the nth conversion in the inserted channel group */ + isq = ADC_ISQ(adc_periph); + isq &= ~((uint32_t)(ADC_ISQ_ISQN << (5U * ((3 + rank) - inserted_length)))); + isq |= ((uint32_t)adc_channel << (5U * ((3 + rank) - inserted_length))); + ADC_ISQ(adc_periph) = isq; + + /* ADC sampling time config */ + if(adc_channel < ADC_CHANNEL_SAMPLE_TEN){ + /* the inserted group sequence rank is smaller than ten */ + sampt = ADC_SAMPT1(adc_periph); + sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH*adc_channel))); + /* channel sample time set*/ + sampt |= (uint32_t) sample_time << (ADC_CHANNEL_SAMPLE_LENGTH*adc_channel); + ADC_SAMPT1(adc_periph) = sampt; + }else if(adc_channel < ADC_CHANNEL_SAMPLE_EIGHTEEN){ + /* the inserted group sequence rank is smaller than eighteen */ + sampt = ADC_SAMPT0(adc_periph); + sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH*(adc_channel-ADC_CHANNEL_SAMPLE_TEN)))); + /* channel sample time set*/ + sampt |= ((uint32_t)sample_time << (ADC_CHANNEL_SAMPLE_LENGTH*(adc_channel-ADC_CHANNEL_SAMPLE_TEN))); + ADC_SAMPT0(adc_periph) = sampt; + }else{ + } +} + +/*! + \brief configure ADC inserted channel offset + \param[in] adc_periph: ADCx,x=0,1 + \param[in] inserted_channel : insert channel select + only one parameter can be selected which is shown as below: + \arg ADC_INSERTED_CHANNEL_0: inserted channel0 + \arg ADC_INSERTED_CHANNEL_1: inserted channel1 + \arg ADC_INSERTED_CHANNEL_2: inserted channel2 + \arg ADC_INSERTED_CHANNEL_3: inserted channel3 + \param[in] offset : the offset data + \param[out] none + \retval none +*/ +void adc_inserted_channel_offset_config(uint32_t adc_periph , uint8_t inserted_channel , uint16_t offset) +{ + uint8_t inserted_length; + uint32_t num = 0U; + + inserted_length = (uint8_t)GET_BITS(ADC_ISQ(adc_periph) , 20U , 21U); + num = ((uint32_t)ADC_OFFSET_LENGTH - ((uint32_t)inserted_length - (uint32_t)inserted_channel)); + + if(num <= ADC_OFFSET_LENGTH){ + /* calculate the offset of the register */ + num = num * ADC_OFFSET_SHIFT_LENGTH; + /* config the offset of the selected channels */ + REG32((adc_periph) + 0x14U + num) = IOFFX_IOFF((uint32_t)offset); + } +} + +/*! + \brief configure ADC external trigger source + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_channel_group: select the channel group + only one parameter can be selected which is shown as below: + \arg ADC_REGULAR_CHANNEL: regular channel group + \arg ADC_INSERTED_CHANNEL: inserted channel group + \param[in] external_trigger_source: regular or inserted group trigger source + only one parameter can be selected which is shown as below: + for regular channel: + \arg ADC0_1_EXTTRIG_REGULAR_T0_CH0: timer 0 CC0 event select + \arg ADC0_1_EXTTRIG_REGULAR_T0_CH1: timer 0 CC1 event select + \arg ADC0_1_EXTTRIG_REGULAR_T0_CH2: timer 0 CC2 event select + \arg ADC0_1_EXTTRIG_REGULAR_T1_CH1: timer 1 CC1 event select + \arg ADC0_1_EXTTRIG_REGULAR_T2_TRGO: timer 2 TRGO event select + \arg ADC0_1_EXTTRIG_REGULAR_T3_CH3: timer 3 CC3 event select + \arg ADC0_1_EXTTRIG_REGULAR_T7_TRGO: timer 7 TRGO event select + \arg ADC0_1_EXTTRIG_REGULAR_EXTI_11 : external interrupt line 11 + \arg ADC0_1_EXTTRIG_REGULAR_NONE: software trigger + for inserted channel: + \arg ADC0_1_EXTTRIG_INSERTED_T0_TRGO: timer 0 TRGO event select + \arg ADC0_1_EXTTRIG_INSERTED_T0_CH3: timer 0 CC3 event select + \arg ADC0_1_EXTTRIG_INSERTED_T1_TRGO: timer 1 TRGO event select + \arg ADC0_1_EXTTRIG_INSERTED_T1_CH0: timer 1 CC0 event select + \arg ADC0_1_EXTTRIG_INSERTED_T2_CH3: timer 2 CC3 event select + \arg ADC0_1_EXTTRIG_INSERTED_T3_TRGO: timer 3 TRGO event select + \arg ADC0_1_EXTTRIG_INSERTED_EXTI_15: external interrupt line 15 + \arg ADC0_1_EXTTRIG_INSERTED_T7_CH3: timer 7 CC3 event select + \arg ADC0_1_EXTTRIG_INSERTED_NONE: software trigger + \param[out] none + \retval none +*/ +void adc_external_trigger_source_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t external_trigger_source) +{ + switch(adc_channel_group){ + case ADC_REGULAR_CHANNEL: + /* configure ADC regular group external trigger source */ + ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ETSRC); + ADC_CTL1(adc_periph) |= (uint32_t)external_trigger_source; + break; + case ADC_INSERTED_CHANNEL: + /* configure ADC inserted group external trigger source */ + ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ETSIC); + ADC_CTL1(adc_periph) |= (uint32_t)external_trigger_source; + break; + default: + break; + } +} + +/*! + \brief enable ADC external trigger + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_channel_group: select the channel group + one or more parameters can be selected which are shown as below: + \arg ADC_REGULAR_CHANNEL: regular channel group + \arg ADC_INSERTED_CHANNEL: inserted channel group + \param[in] newvalue: ENABLE or DISABLE + \param[out] none + \retval none +*/ +void adc_external_trigger_config(uint32_t adc_periph, uint8_t adc_channel_group, ControlStatus newvalue) +{ + if(newvalue){ + if(0U != (adc_channel_group & ADC_REGULAR_CHANNEL)){ + /* enable ADC regular channel group external trigger */ + ADC_CTL1(adc_periph) |= ADC_CTL1_ETERC; + } + if(0U != (adc_channel_group & ADC_INSERTED_CHANNEL)){ + /* enable ADC inserted channel group external trigger */ + ADC_CTL1(adc_periph) |= ADC_CTL1_ETEIC; + } + }else{ + if(0U != (adc_channel_group & ADC_REGULAR_CHANNEL)){ + /* disable ADC regular channel group external trigger */ + ADC_CTL1(adc_periph) &= ~ADC_CTL1_ETERC; + } + if(0U != (adc_channel_group & ADC_INSERTED_CHANNEL)){ + /* disable ADC regular channel group external trigger */ + ADC_CTL1(adc_periph) &= ~ADC_CTL1_ETEIC; + } + } +} + +/*! + \brief enable ADC software trigger + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_channel_group: select the channel group + one or more parameters can be selected which are shown as below: + \arg ADC_REGULAR_CHANNEL: regular channel group + \arg ADC_INSERTED_CHANNEL: inserted channel group + \param[out] none + \retval none +*/ +void adc_software_trigger_enable(uint32_t adc_periph , uint8_t adc_channel_group) +{ + if(0U != (adc_channel_group & ADC_REGULAR_CHANNEL)){ + /* enable ADC regular channel group software trigger */ + ADC_CTL1(adc_periph) |= ADC_CTL1_SWRCST; + } + if(0U != (adc_channel_group & ADC_INSERTED_CHANNEL)){ + /* enable ADC inserted channel group software trigger */ + ADC_CTL1(adc_periph) |= ADC_CTL1_SWICST; + } +} + +/*! + \brief read ADC regular group data register + \param[in] adc_periph: ADCx,x=0,1 + \param[in] none + \param[out] none + \retval the conversion value +*/ +uint16_t adc_regular_data_read(uint32_t adc_periph) +{ + return (uint16_t)(ADC_RDATA(adc_periph)); +} + +/*! + \brief read ADC inserted group data register + \param[in] adc_periph: ADCx,x=0,1 + \param[in] inserted_channel : insert channel select + only one parameter can be selected which is shown as below: + \arg ADC_INSERTED_CHANNEL_0: inserted Channel0 + \arg ADC_INSERTED_CHANNEL_1: inserted channel1 + \arg ADC_INSERTED_CHANNEL_2: inserted Channel2 + \arg ADC_INSERTED_CHANNEL_3: inserted Channel3 + \param[out] none + \retval the conversion value +*/ +uint16_t adc_inserted_data_read(uint32_t adc_periph , uint8_t inserted_channel) +{ + uint32_t idata; + /* read the data of the selected channel */ + switch(inserted_channel){ + case ADC_INSERTED_CHANNEL_0: + /* read the data of channel 0 */ + idata = ADC_IDATA0(adc_periph); + break; + case ADC_INSERTED_CHANNEL_1: + /* read the data of channel 1 */ + idata = ADC_IDATA1(adc_periph); + break; + case ADC_INSERTED_CHANNEL_2: + /* read the data of channel 2 */ + idata = ADC_IDATA2(adc_periph); + break; + case ADC_INSERTED_CHANNEL_3: + /* read the data of channel 3 */ + idata = ADC_IDATA3(adc_periph); + break; + default: + idata = 0U; + break; + } + return (uint16_t)idata; +} + +/*! + \brief read the last ADC0 and ADC1 conversion result data in sync mode + \param[in] none + \param[out] none + \retval the conversion value +*/ +uint32_t adc_sync_mode_convert_value_read(void) +{ + /* return conversion value */ + return ADC_RDATA(ADC0); +} + +/*! + \brief configure ADC analog watchdog single channel + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_channel: the selected ADC channel + only one parameter can be selected which is shown as below: + \arg ADC_CHANNEL_x: ADC Channelx(x=0..17)(x=16 and x=17 are only for ADC0) + \param[out] none + \retval none +*/ +void adc_watchdog_single_channel_enable(uint32_t adc_periph, uint8_t adc_channel) +{ + ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC | ADC_CTL0_WDCHSEL); + /* analog watchdog channel select */ + ADC_CTL0(adc_periph) |= (uint32_t)adc_channel; + ADC_CTL0(adc_periph) |= (uint32_t)(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC); +} + +/*! + \brief configure ADC analog watchdog group channel + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_channel_group: the channel group use analog watchdog + only one parameter can be selected which is shown as below: + \arg ADC_REGULAR_CHANNEL: regular channel group + \arg ADC_INSERTED_CHANNEL: inserted channel group + \arg ADC_REGULAR_INSERTED_CHANNEL: both regular and inserted group + \param[out] none + \retval none +*/ +void adc_watchdog_group_channel_enable(uint32_t adc_periph, uint8_t adc_channel_group) +{ + ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC); + /* select the group */ + switch(adc_channel_group){ + case ADC_REGULAR_CHANNEL: + /* regular channel analog watchdog enable */ + ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_RWDEN; + break; + case ADC_INSERTED_CHANNEL: + /* inserted channel analog watchdog enable */ + ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_IWDEN; + break; + case ADC_REGULAR_INSERTED_CHANNEL: + /* regular and inserted channel analog watchdog enable */ + ADC_CTL0(adc_periph) |= (uint32_t)(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN); + break; + default: + break; + } +} + +/*! + \brief disable ADC analog watchdog + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_watchdog_disable(uint32_t adc_periph) +{ + ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC | ADC_CTL0_WDCHSEL); +} + +/*! + \brief configure ADC analog watchdog threshold + \param[in] adc_periph: ADCx,x=0,1 + \param[in] low_threshold: analog watchdog low threshold,0..4095 + \param[in] high_threshold: analog watchdog high threshold,0..4095 + \param[out] none + \retval none +*/ +void adc_watchdog_threshold_config(uint32_t adc_periph , uint16_t low_threshold , uint16_t high_threshold) +{ + ADC_WDLT(adc_periph) = (uint32_t)WDLT_WDLT(low_threshold); + ADC_WDHT(adc_periph) = (uint32_t)WDHT_WDHT(high_threshold); +} + +/*! + \brief get the ADC flag bits + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_flag: the adc flag bits + only one parameter can be selected which is shown as below: + \arg ADC_FLAG_WDE: analog watchdog event flag + \arg ADC_FLAG_EOC: end of group conversion flag + \arg ADC_FLAG_EOIC: end of inserted group conversion flag + \arg ADC_FLAG_STIC: start flag of inserted channel group + \arg ADC_FLAG_STRC: start flag of regular channel group + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus adc_flag_get(uint32_t adc_periph , uint32_t adc_flag) +{ + FlagStatus reval = RESET; + if(ADC_STAT(adc_periph) & adc_flag){ + reval = SET; + } + return reval; +} + +/*! + \brief clear the ADC flag bits + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_flag: the adc flag bits + one or more parameters can be selected which are shown as below: + \arg ADC_FLAG_WDE: analog watchdog event flag + \arg ADC_FLAG_EOC: end of group conversion flag + \arg ADC_FLAG_EOIC: end of inserted group conversion flag + \arg ADC_FLAG_STIC: start flag of inserted channel group + \arg ADC_FLAG_STRC: start flag of regular channel group + \param[out] none + \retval none +*/ +void adc_flag_clear(uint32_t adc_periph , uint32_t adc_flag) +{ + ADC_STAT(adc_periph) &= ~((uint32_t)adc_flag); +} + +/*! + \brief get the bit state of ADCx software start conversion + \param[in] adc_periph: ADCx, x=0,1, only one among these parameters can be selected + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus adc_regular_software_startconv_flag_get(uint32_t adc_periph) +{ + FlagStatus reval = RESET; + if((uint32_t)RESET != (ADC_STAT(adc_periph) & ADC_STAT_STRC)){ + reval = SET; + } + return reval; +} + +/*! + \brief get the bit state of ADCx software inserted channel start conversion + \param[in] adc_periph: ADCx, x=0,1 only one among these parameters can be selected + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus adc_inserted_software_startconv_flag_get(uint32_t adc_periph) +{ + FlagStatus reval = RESET; + if((uint32_t)RESET != (ADC_STAT(adc_periph) & ADC_STAT_STIC)){ + reval = SET; + } + return reval; +} + +/*! + \brief get the ADC interrupt bits + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_interrupt: the adc interrupt bits + only one parameter can be selected which is shown as below: + \arg ADC_INT_FLAG_WDE: analog watchdog interrupt + \arg ADC_INT_FLAG_EOC: end of group conversion interrupt + \arg ADC_INT_FLAG_EOIC: end of inserted group conversion interrupt + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus adc_interrupt_flag_get(uint32_t adc_periph , uint32_t adc_interrupt) +{ + FlagStatus interrupt_flag = RESET; + uint32_t state; + /* check the interrupt bits */ + switch(adc_interrupt){ + case ADC_INT_FLAG_WDE: + /* get the ADC analog watchdog interrupt bits */ + state = ADC_STAT(adc_periph) & ADC_STAT_WDE; + if((ADC_CTL0(adc_periph) & ADC_CTL0_WDEIE) && state){ + interrupt_flag = SET; + } + break; + case ADC_INT_FLAG_EOC: + /* get the ADC end of group conversion interrupt bits */ + state = ADC_STAT(adc_periph) & ADC_STAT_EOC; + if((ADC_CTL0(adc_periph) & ADC_CTL0_EOCIE) && state){ + interrupt_flag = SET; + } + break; + case ADC_INT_FLAG_EOIC: + /* get the ADC end of inserted group conversion interrupt bits */ + state = ADC_STAT(adc_periph) & ADC_STAT_EOIC; + if((ADC_CTL0(adc_periph) & ADC_CTL0_EOICIE) && state){ + interrupt_flag = SET; + } + break; + default: + break; + } + return interrupt_flag; +} + +/*! + \brief clear the ADC flag + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_interrupt: the adc status flag + one or more parameters can be selected which are shown as below: + \arg ADC_INT_FLAG_WDE: analog watchdog interrupt + \arg ADC_INT_FLAG_EOC: end of group conversion interrupt + \arg ADC_INT_FLAG_EOIC: end of inserted group conversion interrupt + \param[out] none + \retval none +*/ +void adc_interrupt_flag_clear(uint32_t adc_periph , uint32_t adc_interrupt) +{ + ADC_STAT(adc_periph) &= ~((uint32_t)adc_interrupt); +} + +/*! + \brief enable ADC interrupt + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_interrupt: the adc interrupt + one or more parameters can be selected which are shown as below: + \arg ADC_INT_WDE: analog watchdog interrupt flag + \arg ADC_INT_EOC: end of group conversion interrupt flag + \arg ADC_INT_EOIC: end of inserted group conversion interrupt flag + \param[out] none + \retval none +*/ +void adc_interrupt_enable(uint32_t adc_periph , uint32_t adc_interrupt) +{ + /* enable ADC analog watchdog interrupt */ + if(0U != (adc_interrupt & ADC_INT_WDE)){ + ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_WDEIE; + } + /* enable ADC end of group conversion interrupt */ + if(0U != (adc_interrupt & ADC_INT_EOC)){ + ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_EOCIE; + } + /* enable ADC end of inserted group conversion interrupt */ + if(0U != (adc_interrupt & ADC_INT_EOIC)){ + ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_EOICIE; + } +} + +/*! + \brief disable ADC interrupt + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_interrupt: the adc interrupt flag + one or more parameters can be selected which are shown as below: + \arg ADC_INT_WDE: analog watchdog interrupt flag + \arg ADC_INT_EOC: end of group conversion interrupt flag + \arg ADC_INT_EOIC: end of inserted group conversion interrupt flag + \param[out] none + \retval none +*/ +void adc_interrupt_disable(uint32_t adc_periph, uint32_t adc_interrupt) +{ + /* disable ADC analog watchdog interrupt */ + if(0U != (adc_interrupt & ADC_INT_WDE)){ + ADC_CTL0(adc_periph) &= ~(uint32_t) ADC_CTL0_WDEIE; + } + /* disable ADC end of group conversion interrupt */ + if(0U != (adc_interrupt & ADC_INT_EOC)){ + ADC_CTL0(adc_periph) &= ~(uint32_t) ADC_CTL0_EOCIE; + } + /* disable ADC end of inserted group conversion interrupt */ + if(0U != (adc_interrupt & ADC_INT_EOIC)){ + ADC_CTL0(adc_periph) &= ~(uint32_t) ADC_CTL0_EOICIE; + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_adc.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_adc.c.base@1.0.0 new file mode 100644 index 0000000..638fd3a --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_adc.c.base@1.0.0 @@ -0,0 +1,992 @@ +/*! + \file gd32c10x_adc.c + \brief ADC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_adc.h" + +/* discontinuous mode macro*/ +#define ADC_CHANNEL_LENGTH_SUBTRACT_ONE ((uint8_t)1U) + +/* ADC regular channel macro */ +#define ADC_REGULAR_CHANNEL_RANK_SIX ((uint8_t)6U) +#define ADC_REGULAR_CHANNEL_RANK_TWELVE ((uint8_t)12U) +#define ADC_REGULAR_CHANNEL_RANK_SIXTEEN ((uint8_t)16U) +#define ADC_REGULAR_CHANNEL_RANK_LENGTH ((uint8_t)5U) + +/* ADC sampling time macro */ +#define ADC_CHANNEL_SAMPLE_TEN ((uint8_t)10U) +#define ADC_CHANNEL_SAMPLE_EIGHTEEN ((uint8_t)18U) +#define ADC_CHANNEL_SAMPLE_LENGTH ((uint8_t)3U) + +/* ADC inserted channel macro */ +#define ADC_INSERTED_CHANNEL_RANK_LENGTH ((uint8_t)5U) +#define ADC_INSERTED_CHANNEL_SHIFT_LENGTH ((uint8_t)15U) + +/* ADC inserted channel offset macro */ +#define ADC_OFFSET_LENGTH ((uint8_t)3U) +#define ADC_OFFSET_SHIFT_LENGTH ((uint8_t)4U) + +/*! + \brief reset ADC + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_deinit(uint32_t adc_periph) +{ + switch(adc_periph){ + case ADC0: + /* reset ADC0 */ + rcu_periph_reset_enable(RCU_ADC0RST); + rcu_periph_reset_disable(RCU_ADC0RST); + break; + case ADC1: + /* reset ADC1 */ + rcu_periph_reset_enable(RCU_ADC1RST); + rcu_periph_reset_disable(RCU_ADC1RST); + break; + default: + break; + } +} + +/*! + \brief configure the ADC sync mode + \param[in] mode: ADC mode + only one parameter can be selected which is shown as below: + \arg ADC_MODE_FREE: all the ADCs work independently + \arg ADC_DAUL_REGULAL_PARALLEL_INSERTED_PARALLEL: ADC0 and ADC1 work in combined regular parallel + inserted parallel mode + \arg ADC_DAUL_REGULAL_PARALLEL_INSERTED_ROTATION: ADC0 and ADC1 work in combined regular parallel + trigger rotation mode + \arg ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_FAST: ADC0 and ADC1 work in combined inserted parallel + follow-up fast mode + \arg ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_SLOW: ADC0 and ADC1 work in combined inserted parallel + follow-up slow mode + \arg ADC_DAUL_INSERTED_PARALLEL: ADC0 and ADC1 work in inserted parallel mode only + \arg ADC_DAUL_REGULAL_PARALLEL: ADC0 and ADC1 work in regular parallel mode only + \arg ADC_DAUL_REGULAL_FOLLOWUP_FAST: ADC0 and ADC1 work in follow-up fast mode only + \arg ADC_DAUL_REGULAL_FOLLOWUP_SLOW: ADC0 and ADC1 work in follow-up slow mode only + \arg ADC_DAUL_INSERTED_TRIGGER_ROTATION: ADC0 and ADC1 work in trigger rotation mode only + \param[out] none + \retval none +*/ +void adc_mode_config(uint32_t mode) +{ + ADC_CTL0(ADC0) &= ~(ADC_CTL0_SYNCM); + ADC_CTL0(ADC0) |= mode; +} + +/*! + \brief enable or disable ADC special function + \param[in] adc_periph: ADCx,x=0,1 + \param[in] function: the function to config + only one parameter can be selected which is shown as below: + \arg ADC_SCAN_MODE: scan mode select + \arg ADC_INSERTED_CHANNEL_AUTO: inserted channel group convert automatically + \arg ADC_CONTINUOUS_MODE: continuous mode select + \param[in] newvalue: ENABLE or DISABLE + \param[out] none + \retval none +*/ +void adc_special_function_config(uint32_t adc_periph , uint32_t function , ControlStatus newvalue) +{ + if(newvalue){ + if(0U != (function & ADC_SCAN_MODE)){ + /* enable scan mode */ + ADC_CTL0(adc_periph) |= ADC_SCAN_MODE; + } + if(0U != (function & ADC_INSERTED_CHANNEL_AUTO)){ + /* enable inserted channel group convert automatically */ + ADC_CTL0(adc_periph) |= ADC_INSERTED_CHANNEL_AUTO; + } + if(0U != (function & ADC_CONTINUOUS_MODE)){ + /* enable continuous mode */ + ADC_CTL1(adc_periph) |= ADC_CONTINUOUS_MODE; + } + }else{ + if(0U != (function & ADC_SCAN_MODE)){ + /* disable scan mode */ + ADC_CTL0(adc_periph) &= ~ADC_SCAN_MODE; + } + if(0U != (function & ADC_INSERTED_CHANNEL_AUTO)){ + /* disable inserted channel group convert automatically */ + ADC_CTL0(adc_periph) &= ~ADC_INSERTED_CHANNEL_AUTO; + } + if(0U != (function & ADC_CONTINUOUS_MODE)){ + /* disable continuous mode */ + ADC_CTL1(adc_periph) &= ~ADC_CONTINUOUS_MODE; + } + } +} + +/*! + \brief configure ADC data alignment + \param[in] adc_periph: ADCx,x=0,1 + \param[in] data_alignment: data alignment select + only one parameter can be selected which is shown as below: + \arg ADC_DATAALIGN_RIGHT: LSB alignment + \arg ADC_DATAALIGN_LEFT: MSB alignment + \param[out] none + \retval none +*/ +void adc_data_alignment_config(uint32_t adc_periph , uint32_t data_alignment) +{ + if(ADC_DATAALIGN_RIGHT != data_alignment){ + /* MSB alignment */ + ADC_CTL1(adc_periph) |= ADC_CTL1_DAL; + }else{ + /* LSB alignment */ + ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_DAL); + } +} + +/*! + \brief enable ADC interface + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_enable(uint32_t adc_periph) +{ + if(RESET == (ADC_CTL1(adc_periph) & ADC_CTL1_ADCON)){ + /* enable ADC */ + ADC_CTL1(adc_periph) |= (uint32_t)ADC_CTL1_ADCON; + } +} + +/*! + \brief disable ADC interface + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_disable(uint32_t adc_periph) +{ + /* disable ADC */ + ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ADCON); +} + +/*! + \brief ADC calibration and reset calibration + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_calibration_enable(uint32_t adc_periph) +{ + /* reset the selected ADC calibration registers */ + ADC_CTL1(adc_periph) |= (uint32_t) ADC_CTL1_RSTCLB; + /* check the RSTCLB bit state */ + while(RESET != (ADC_CTL1(adc_periph) & ADC_CTL1_RSTCLB)){ + } + /* enable ADC calibration process */ + ADC_CTL1(adc_periph) |= ADC_CTL1_CLB; + /* check the CLB bit state */ + while(RESET != (ADC_CTL1(adc_periph) & ADC_CTL1_CLB)){ + } +} + +/*! + \brief enable the temperature sensor and Vrefint channel + \param[in] none + \param[out] none + \retval none +*/ +void adc_tempsensor_vrefint_enable(void) +{ + /* enable the temperature sensor and Vrefint channel */ + ADC_CTL1(ADC0) |= ADC_CTL1_TSVREN; +} + +/*! + \brief disable the temperature sensor and Vrefint channel + \param[in] none + \param[out] none + \retval none +*/ +void adc_tempsensor_vrefint_disable(void) +{ + /* disable the temperature sensor and Vrefint channel */ + ADC_CTL1(ADC0) &= ~ADC_CTL1_TSVREN; +} + +/*! + \brief configure ADC resolution + \param[in] adc_periph: ADCx,x=0,1 + \param[in] resolution: ADC resolution + only one parameter can be selected which is shown as below: + \arg ADC_RESOLUTION_12B: 12-bit ADC resolution + \arg ADC_RESOLUTION_10B: 10-bit ADC resolution + \arg ADC_RESOLUTION_8B: 8-bit ADC resolution + \arg ADC_RESOLUTION_6B: 6-bit ADC resolution + \param[out] none + \retval none +*/ +void adc_resolution_config(uint32_t adc_periph , uint32_t resolution) +{ + ADC_OVSAMPCTL(adc_periph) &= ~((uint32_t)ADC_OVSAMPCTL_DRES); + ADC_OVSAMPCTL(adc_periph) |= (uint32_t)resolution; +} + +/*! + \brief configure ADC oversample mode + \param[in] adc_periph: ADCx,x=0,1 + \param[in] mode: ADC oversampling mode + only one parameter can be selected which is shown as below: + \arg ADC_OVERSAMPLING_ALL_CONVERT: all oversampled conversions for a channel are done consecutively after a trigger + \arg ADC_OVERSAMPLING_ONE_CONVERT: each oversampled conversion for a channel needs a trigger + \param[in] shift: ADC oversampling shift + only one parameter can be selected which is shown as below: + \arg ADC_OVERSAMPLING_SHIFT_NONE: no oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_1B: 1-bit oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_2B: 2-bit oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_3B: 3-bit oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_4B: 3-bit oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_5B: 5-bit oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_6B: 6-bit oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_7B: 7-bit oversampling shift + \arg ADC_OVERSAMPLING_SHIFT_8B: 8-bit oversampling shift + \param[in] ratio: ADC oversampling ratio + only one parameter can be selected which is shown as below: + \arg ADC_OVERSAMPLING_RATIO_MUL2: oversampling ratio multiple 2 + \arg ADC_OVERSAMPLING_RATIO_MUL4: oversampling ratio multiple 4 + \arg ADC_OVERSAMPLING_RATIO_MUL8: oversampling ratio multiple 8 + \arg ADC_OVERSAMPLING_RATIO_MUL16: oversampling ratio multiple 16 + \arg ADC_OVERSAMPLING_RATIO_MUL32: oversampling ratio multiple 32 + \arg ADC_OVERSAMPLING_RATIO_MUL64: oversampling ratio multiple 64 + \arg ADC_OVERSAMPLING_RATIO_MUL128: oversampling ratio multiple 128 + \arg ADC_OVERSAMPLING_RATIO_MUL256: oversampling ratio multiple 256 + \param[out] none + \retval none +*/ +void adc_oversample_mode_config(uint32_t adc_periph, uint32_t mode, uint16_t shift, uint8_t ratio) +{ + if(ADC_OVERSAMPLING_ONE_CONVERT == mode){ + ADC_OVSAMPCTL(adc_periph) |= (uint32_t)ADC_OVSAMPCTL_TOVS; + }else{ + ADC_OVSAMPCTL(adc_periph) &= ~((uint32_t)ADC_OVSAMPCTL_TOVS); + } + /* config the shift and ratio */ + ADC_OVSAMPCTL(adc_periph) &= ~((uint32_t)(ADC_OVSAMPCTL_OVSR | ADC_OVSAMPCTL_OVSS)); + ADC_OVSAMPCTL(adc_periph) |= ((uint32_t)shift | (uint32_t)ratio); +} + +/*! + \brief enable ADC oversample mode + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_oversample_mode_enable(uint32_t adc_periph) +{ + ADC_OVSAMPCTL(adc_periph) |= ADC_OVSAMPCTL_OVSEN; +} + +/*! + \brief disable ADC oversample mode + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_oversample_mode_disable(uint32_t adc_periph) +{ + ADC_OVSAMPCTL(adc_periph) &= ~((uint32_t)ADC_OVSAMPCTL_OVSEN); +} + +/*! + \brief enable DMA request + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_dma_mode_enable(uint32_t adc_periph) +{ + /* enable DMA request */ + ADC_CTL1(adc_periph) |= (uint32_t)(ADC_CTL1_DMA); +} + +/*! + \brief disable DMA request + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_dma_mode_disable(uint32_t adc_periph) +{ + /* disable DMA request */ + ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_DMA); +} + +/*! + \brief configure ADC discontinuous mode + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_channel_group: select the channel group + only one parameter can be selected which is shown as below: + \arg ADC_REGULAR_CHANNEL: regular channel group + \arg ADC_INSERTED_CHANNEL: inserted channel group + \arg ADC_CHANNEL_DISCON_DISABLE: disable discontinuous mode of regular & inserted channel + \param[in] length: number of conversions in discontinuous mode,the number can be 1..8 + for regular channel ,the number has no effect for inserted channel + \param[out] none + \retval none +*/ +void adc_discontinuous_mode_config(uint32_t adc_periph, uint8_t adc_channel_group, uint8_t length) +{ + /* disable discontinuous mode of regular & inserted channel */ + ADC_CTL0(adc_periph) &= ~((uint32_t)(ADC_CTL0_DISRC | ADC_CTL0_DISIC)); + switch(adc_channel_group){ + case ADC_REGULAR_CHANNEL: + /* config the number of conversions in discontinuous mode */ + ADC_CTL0(adc_periph) &= ~((uint32_t)ADC_CTL0_DISNUM); + ADC_CTL0(adc_periph) |= CTL0_DISNUM(((uint32_t)length - ADC_CHANNEL_LENGTH_SUBTRACT_ONE)); + /* enable regular channel group discontinuous mode */ + ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_DISRC; + break; + case ADC_INSERTED_CHANNEL: + /* enable inserted channel group discontinuous mode */ + ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_DISIC; + break; + case ADC_CHANNEL_DISCON_DISABLE: + /* disable discontinuous mode of regular & inserted channel */ + default: + break; + } +} + +/*! + \brief configure the length of regular channel group or inserted channel group + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_channel_group: select the channel group + only one parameter can be selected which is shown as below: + \arg ADC_REGULAR_CHANNEL: regular channel group + \arg ADC_INSERTED_CHANNEL: inserted channel group + \param[in] length: the length of the channel + regular channel 1-16 + inserted channel 1-4 + \param[out] none + \retval none +*/ +void adc_channel_length_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t length) +{ + switch(adc_channel_group){ + case ADC_REGULAR_CHANNEL: + /* configure the length of regular channel group */ + ADC_RSQ0(adc_periph) &= ~((uint32_t)ADC_RSQ0_RL); + ADC_RSQ0(adc_periph) |= RSQ0_RL((uint32_t)(length-ADC_CHANNEL_LENGTH_SUBTRACT_ONE)); + break; + case ADC_INSERTED_CHANNEL: + /* configure the length of inserted channel group */ + ADC_ISQ(adc_periph) &= ~((uint32_t)ADC_ISQ_IL); + ADC_ISQ(adc_periph) |= ISQ_IL((uint32_t)(length-ADC_CHANNEL_LENGTH_SUBTRACT_ONE)); + break; + default: + break; + } +} + +/*! + \brief configure ADC regular channel + \param[in] adc_periph: ADCx,x=0,1 + \param[in] rank: the regular group sequence rank,this parameter must be between 0 to 15 + \param[in] adc_channel: the selected ADC channel + only one parameter can be selected which is shown as below: + \arg ADC_CHANNEL_x(x=0..17)(x=16 and x=17 are only for ADC0): ADC Channelx + \param[in] sample_time: the sample time value + only one parameter can be selected which is shown as below: + \arg ADC_SAMPLETIME_1POINT5: 1.5 cycles + \arg ADC_SAMPLETIME_7POINT5: 7.5 cycles + \arg ADC_SAMPLETIME_13POINT5: 13.5 cycles + \arg ADC_SAMPLETIME_28POINT5: 28.5 cycles + \arg ADC_SAMPLETIME_41POINT5: 41.5 cycles + \arg ADC_SAMPLETIME_55POINT5: 55.5 cycles + \arg ADC_SAMPLETIME_71POINT5: 71.5 cycles + \arg ADC_SAMPLETIME_239POINT5: 239.5 cycles + \param[out] none + \retval none +*/ +void adc_regular_channel_config(uint32_t adc_periph , uint8_t rank , uint8_t adc_channel , uint32_t sample_time) +{ + uint32_t rsq,sampt; + + /* ADC regular sequence config */ + if(rank < ADC_REGULAR_CHANNEL_RANK_SIX){ + /* the regular group sequence rank is smaller than six */ + rsq = ADC_RSQ2(adc_periph); + rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (ADC_REGULAR_CHANNEL_RANK_LENGTH*rank))); + /* the channel number is written to these bits to select a channel as the nth conversion in the regular channel group */ + rsq |= ((uint32_t)adc_channel << (ADC_REGULAR_CHANNEL_RANK_LENGTH*rank)); + ADC_RSQ2(adc_periph) = rsq; + }else if(rank < ADC_REGULAR_CHANNEL_RANK_TWELVE){ + /* the regular group sequence rank is smaller than twelve */ + rsq = ADC_RSQ1(adc_periph); + rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (ADC_REGULAR_CHANNEL_RANK_LENGTH*(rank-ADC_REGULAR_CHANNEL_RANK_SIX)))); + /* the channel number is written to these bits to select a channel as the nth conversion in the regular channel group */ + rsq |= ((uint32_t)adc_channel << (ADC_REGULAR_CHANNEL_RANK_LENGTH*(rank-ADC_REGULAR_CHANNEL_RANK_SIX))); + ADC_RSQ1(adc_periph) = rsq; + }else if(rank < ADC_REGULAR_CHANNEL_RANK_SIXTEEN){ + /* the regular group sequence rank is smaller than sixteen */ + rsq = ADC_RSQ0(adc_periph); + rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (ADC_REGULAR_CHANNEL_RANK_LENGTH*(rank-ADC_REGULAR_CHANNEL_RANK_TWELVE)))); + /* the channel number is written to these bits to select a channel as the nth conversion in the regular channel group */ + rsq |= ((uint32_t)adc_channel << (ADC_REGULAR_CHANNEL_RANK_LENGTH*(rank-ADC_REGULAR_CHANNEL_RANK_TWELVE))); + ADC_RSQ0(adc_periph) = rsq; + }else{ + } + + /* ADC sampling time config */ + if(adc_channel < ADC_CHANNEL_SAMPLE_TEN){ + /* the regular group sequence rank is smaller than ten */ + sampt = ADC_SAMPT1(adc_periph); + sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH*adc_channel))); + /* channel sample time set*/ + sampt |= (uint32_t)(sample_time << (ADC_CHANNEL_SAMPLE_LENGTH*adc_channel)); + ADC_SAMPT1(adc_periph) = sampt; + }else if(adc_channel < ADC_CHANNEL_SAMPLE_EIGHTEEN){ + /* the regular group sequence rank is smaller than eighteen */ + sampt = ADC_SAMPT0(adc_periph); + sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH*(adc_channel-ADC_CHANNEL_SAMPLE_TEN)))); + /* channel sample time set*/ + sampt |= (uint32_t)(sample_time << (ADC_CHANNEL_SAMPLE_LENGTH*(adc_channel-ADC_CHANNEL_SAMPLE_TEN))); + ADC_SAMPT0(adc_periph) = sampt; + }else{ + } +} + +/*! + \brief configure ADC inserted channel + \param[in] adc_periph: ADCx,x=0,1 + \param[in] rank: the inserted group sequencer rank,this parameter must be between 0 to 3 + \param[in] adc_channel: the selected ADC channel + only one parameter can be selected which is shown as below: + \arg ADC_CHANNEL_x(x=0..17)(x=16 and x=17 are only for ADC0): ADC Channelx + \param[in] sample_time: The sample time value + only one parameter can be selected which is shown as below: + \arg ADC_SAMPLETIME_1POINT5: 1.5 cycles + \arg ADC_SAMPLETIME_7POINT5: 7.5 cycles + \arg ADC_SAMPLETIME_13POINT5: 13.5 cycles + \arg ADC_SAMPLETIME_28POINT5: 28.5 cycles + \arg ADC_SAMPLETIME_41POINT5: 41.5 cycles + \arg ADC_SAMPLETIME_55POINT5: 55.5 cycles + \arg ADC_SAMPLETIME_71POINT5: 71.5 cycles + \arg ADC_SAMPLETIME_239POINT5: 239.5 cycles + \param[out] none + \retval none +*/ +void adc_inserted_channel_config(uint32_t adc_periph , uint8_t rank , uint8_t adc_channel , uint32_t sample_time) +{ + uint8_t inserted_length; + uint32_t isq,sampt; + + /* get inserted channel group length */ + inserted_length = (uint8_t)GET_BITS(ADC_ISQ(adc_periph) , 20U , 21U); + /* the channel number is written to these bits to select a channel as the nth conversion in the inserted channel group */ + isq = ADC_ISQ(adc_periph); + isq &= ~((uint32_t)(ADC_ISQ_ISQN << (5U * ((3 + rank) - inserted_length)))); + isq |= ((uint32_t)adc_channel << (5U * ((3 + rank) - inserted_length))); + ADC_ISQ(adc_periph) = isq; + + /* ADC sampling time config */ + if(adc_channel < ADC_CHANNEL_SAMPLE_TEN){ + /* the inserted group sequence rank is smaller than ten */ + sampt = ADC_SAMPT1(adc_periph); + sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH*adc_channel))); + /* channel sample time set*/ + sampt |= (uint32_t) sample_time << (ADC_CHANNEL_SAMPLE_LENGTH*adc_channel); + ADC_SAMPT1(adc_periph) = sampt; + }else if(adc_channel < ADC_CHANNEL_SAMPLE_EIGHTEEN){ + /* the inserted group sequence rank is smaller than eighteen */ + sampt = ADC_SAMPT0(adc_periph); + sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH*(adc_channel-ADC_CHANNEL_SAMPLE_TEN)))); + /* channel sample time set*/ + sampt |= ((uint32_t)sample_time << (ADC_CHANNEL_SAMPLE_LENGTH*(adc_channel-ADC_CHANNEL_SAMPLE_TEN))); + ADC_SAMPT0(adc_periph) = sampt; + }else{ + } +} + +/*! + \brief configure ADC inserted channel offset + \param[in] adc_periph: ADCx,x=0,1 + \param[in] inserted_channel : insert channel select + only one parameter can be selected which is shown as below: + \arg ADC_INSERTED_CHANNEL_0: inserted channel0 + \arg ADC_INSERTED_CHANNEL_1: inserted channel1 + \arg ADC_INSERTED_CHANNEL_2: inserted channel2 + \arg ADC_INSERTED_CHANNEL_3: inserted channel3 + \param[in] offset : the offset data + \param[out] none + \retval none +*/ +void adc_inserted_channel_offset_config(uint32_t adc_periph , uint8_t inserted_channel , uint16_t offset) +{ + uint8_t inserted_length; + uint32_t num = 0U; + + inserted_length = (uint8_t)GET_BITS(ADC_ISQ(adc_periph) , 20U , 21U); + num = ((uint32_t)ADC_OFFSET_LENGTH - ((uint32_t)inserted_length - (uint32_t)inserted_channel)); + + if(num <= ADC_OFFSET_LENGTH){ + /* calculate the offset of the register */ + num = num * ADC_OFFSET_SHIFT_LENGTH; + /* config the offset of the selected channels */ + REG32((adc_periph) + 0x14U + num) = IOFFX_IOFF((uint32_t)offset); + } +} + +/*! + \brief configure ADC external trigger source + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_channel_group: select the channel group + only one parameter can be selected which is shown as below: + \arg ADC_REGULAR_CHANNEL: regular channel group + \arg ADC_INSERTED_CHANNEL: inserted channel group + \param[in] external_trigger_source: regular or inserted group trigger source + only one parameter can be selected which is shown as below: + for regular channel: + \arg ADC0_1_EXTTRIG_REGULAR_T0_CH0: timer 0 CC0 event select + \arg ADC0_1_EXTTRIG_REGULAR_T0_CH1: timer 0 CC1 event select + \arg ADC0_1_EXTTRIG_REGULAR_T0_CH2: timer 0 CC2 event select + \arg ADC0_1_EXTTRIG_REGULAR_T1_CH1: timer 1 CC1 event select + \arg ADC0_1_EXTTRIG_REGULAR_T2_TRGO: timer 2 TRGO event select + \arg ADC0_1_EXTTRIG_REGULAR_T3_CH3: timer 3 CC3 event select + \arg ADC0_1_EXTTRIG_REGULAR_T7_TRGO: timer 7 TRGO event select + \arg ADC0_1_EXTTRIG_REGULAR_EXTI_11 : external interrupt line 11 + \arg ADC0_1_EXTTRIG_REGULAR_NONE: software trigger + for inserted channel: + \arg ADC0_1_EXTTRIG_INSERTED_T0_TRGO: timer 0 TRGO event select + \arg ADC0_1_EXTTRIG_INSERTED_T0_CH3: timer 0 CC3 event select + \arg ADC0_1_EXTTRIG_INSERTED_T1_TRGO: timer 1 TRGO event select + \arg ADC0_1_EXTTRIG_INSERTED_T1_CH0: timer 1 CC0 event select + \arg ADC0_1_EXTTRIG_INSERTED_T2_CH3: timer 2 CC3 event select + \arg ADC0_1_EXTTRIG_INSERTED_T3_TRGO: timer 3 TRGO event select + \arg ADC0_1_EXTTRIG_INSERTED_EXTI_15: external interrupt line 15 + \arg ADC0_1_EXTTRIG_INSERTED_T7_CH3: timer 7 CC3 event select + \arg ADC0_1_EXTTRIG_INSERTED_NONE: software trigger + \param[out] none + \retval none +*/ +void adc_external_trigger_source_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t external_trigger_source) +{ + switch(adc_channel_group){ + case ADC_REGULAR_CHANNEL: + /* configure ADC regular group external trigger source */ + ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ETSRC); + ADC_CTL1(adc_periph) |= (uint32_t)external_trigger_source; + break; + case ADC_INSERTED_CHANNEL: + /* configure ADC inserted group external trigger source */ + ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ETSIC); + ADC_CTL1(adc_periph) |= (uint32_t)external_trigger_source; + break; + default: + break; + } +} + +/*! + \brief enable ADC external trigger + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_channel_group: select the channel group + one or more parameters can be selected which are shown as below: + \arg ADC_REGULAR_CHANNEL: regular channel group + \arg ADC_INSERTED_CHANNEL: inserted channel group + \param[in] newvalue: ENABLE or DISABLE + \param[out] none + \retval none +*/ +void adc_external_trigger_config(uint32_t adc_periph, uint8_t adc_channel_group, ControlStatus newvalue) +{ + if(newvalue){ + if(0U != (adc_channel_group & ADC_REGULAR_CHANNEL)){ + /* enable ADC regular channel group external trigger */ + ADC_CTL1(adc_periph) |= ADC_CTL1_ETERC; + } + if(0U != (adc_channel_group & ADC_INSERTED_CHANNEL)){ + /* enable ADC inserted channel group external trigger */ + ADC_CTL1(adc_periph) |= ADC_CTL1_ETEIC; + } + }else{ + if(0U != (adc_channel_group & ADC_REGULAR_CHANNEL)){ + /* disable ADC regular channel group external trigger */ + ADC_CTL1(adc_periph) &= ~ADC_CTL1_ETERC; + } + if(0U != (adc_channel_group & ADC_INSERTED_CHANNEL)){ + /* disable ADC regular channel group external trigger */ + ADC_CTL1(adc_periph) &= ~ADC_CTL1_ETEIC; + } + } +} + +/*! + \brief enable ADC software trigger + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_channel_group: select the channel group + one or more parameters can be selected which are shown as below: + \arg ADC_REGULAR_CHANNEL: regular channel group + \arg ADC_INSERTED_CHANNEL: inserted channel group + \param[out] none + \retval none +*/ +void adc_software_trigger_enable(uint32_t adc_periph , uint8_t adc_channel_group) +{ + if(0U != (adc_channel_group & ADC_REGULAR_CHANNEL)){ + /* enable ADC regular channel group software trigger */ + ADC_CTL1(adc_periph) |= ADC_CTL1_SWRCST; + } + if(0U != (adc_channel_group & ADC_INSERTED_CHANNEL)){ + /* enable ADC inserted channel group software trigger */ + ADC_CTL1(adc_periph) |= ADC_CTL1_SWICST; + } +} + +/*! + \brief read ADC regular group data register + \param[in] adc_periph: ADCx,x=0,1 + \param[in] none + \param[out] none + \retval the conversion value +*/ +uint16_t adc_regular_data_read(uint32_t adc_periph) +{ + return (uint16_t)(ADC_RDATA(adc_periph)); +} + +/*! + \brief read ADC inserted group data register + \param[in] adc_periph: ADCx,x=0,1 + \param[in] inserted_channel : insert channel select + only one parameter can be selected which is shown as below: + \arg ADC_INSERTED_CHANNEL_0: inserted Channel0 + \arg ADC_INSERTED_CHANNEL_1: inserted channel1 + \arg ADC_INSERTED_CHANNEL_2: inserted Channel2 + \arg ADC_INSERTED_CHANNEL_3: inserted Channel3 + \param[out] none + \retval the conversion value +*/ +uint16_t adc_inserted_data_read(uint32_t adc_periph , uint8_t inserted_channel) +{ + uint32_t idata; + /* read the data of the selected channel */ + switch(inserted_channel){ + case ADC_INSERTED_CHANNEL_0: + /* read the data of channel 0 */ + idata = ADC_IDATA0(adc_periph); + break; + case ADC_INSERTED_CHANNEL_1: + /* read the data of channel 1 */ + idata = ADC_IDATA1(adc_periph); + break; + case ADC_INSERTED_CHANNEL_2: + /* read the data of channel 2 */ + idata = ADC_IDATA2(adc_periph); + break; + case ADC_INSERTED_CHANNEL_3: + /* read the data of channel 3 */ + idata = ADC_IDATA3(adc_periph); + break; + default: + idata = 0U; + break; + } + return (uint16_t)idata; +} + +/*! + \brief read the last ADC0 and ADC1 conversion result data in sync mode + \param[in] none + \param[out] none + \retval the conversion value +*/ +uint32_t adc_sync_mode_convert_value_read(void) +{ + /* return conversion value */ + return ADC_RDATA(ADC0); +} + +/*! + \brief configure ADC analog watchdog single channel + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_channel: the selected ADC channel + only one parameter can be selected which is shown as below: + \arg ADC_CHANNEL_x: ADC Channelx(x=0..17)(x=16 and x=17 are only for ADC0) + \param[out] none + \retval none +*/ +void adc_watchdog_single_channel_enable(uint32_t adc_periph, uint8_t adc_channel) +{ + ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC | ADC_CTL0_WDCHSEL); + /* analog watchdog channel select */ + ADC_CTL0(adc_periph) |= (uint32_t)adc_channel; + ADC_CTL0(adc_periph) |= (uint32_t)(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC); +} + +/*! + \brief configure ADC analog watchdog group channel + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_channel_group: the channel group use analog watchdog + only one parameter can be selected which is shown as below: + \arg ADC_REGULAR_CHANNEL: regular channel group + \arg ADC_INSERTED_CHANNEL: inserted channel group + \arg ADC_REGULAR_INSERTED_CHANNEL: both regular and inserted group + \param[out] none + \retval none +*/ +void adc_watchdog_group_channel_enable(uint32_t adc_periph, uint8_t adc_channel_group) +{ + ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC); + /* select the group */ + switch(adc_channel_group){ + case ADC_REGULAR_CHANNEL: + /* regular channel analog watchdog enable */ + ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_RWDEN; + break; + case ADC_INSERTED_CHANNEL: + /* inserted channel analog watchdog enable */ + ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_IWDEN; + break; + case ADC_REGULAR_INSERTED_CHANNEL: + /* regular and inserted channel analog watchdog enable */ + ADC_CTL0(adc_periph) |= (uint32_t)(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN); + break; + default: + break; + } +} + +/*! + \brief disable ADC analog watchdog + \param[in] adc_periph: ADCx,x=0,1 + \param[out] none + \retval none +*/ +void adc_watchdog_disable(uint32_t adc_periph) +{ + ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC | ADC_CTL0_WDCHSEL); +} + +/*! + \brief configure ADC analog watchdog threshold + \param[in] adc_periph: ADCx,x=0,1 + \param[in] low_threshold: analog watchdog low threshold,0..4095 + \param[in] high_threshold: analog watchdog high threshold,0..4095 + \param[out] none + \retval none +*/ +void adc_watchdog_threshold_config(uint32_t adc_periph , uint16_t low_threshold , uint16_t high_threshold) +{ + ADC_WDLT(adc_periph) = (uint32_t)WDLT_WDLT(low_threshold); + ADC_WDHT(adc_periph) = (uint32_t)WDHT_WDHT(high_threshold); +} + +/*! + \brief get the ADC flag bits + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_flag: the adc flag bits + only one parameter can be selected which is shown as below: + \arg ADC_FLAG_WDE: analog watchdog event flag + \arg ADC_FLAG_EOC: end of group conversion flag + \arg ADC_FLAG_EOIC: end of inserted group conversion flag + \arg ADC_FLAG_STIC: start flag of inserted channel group + \arg ADC_FLAG_STRC: start flag of regular channel group + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus adc_flag_get(uint32_t adc_periph , uint32_t adc_flag) +{ + FlagStatus reval = RESET; + if(ADC_STAT(adc_periph) & adc_flag){ + reval = SET; + } + return reval; +} + +/*! + \brief clear the ADC flag bits + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_flag: the adc flag bits + one or more parameters can be selected which are shown as below: + \arg ADC_FLAG_WDE: analog watchdog event flag + \arg ADC_FLAG_EOC: end of group conversion flag + \arg ADC_FLAG_EOIC: end of inserted group conversion flag + \arg ADC_FLAG_STIC: start flag of inserted channel group + \arg ADC_FLAG_STRC: start flag of regular channel group + \param[out] none + \retval none +*/ +void adc_flag_clear(uint32_t adc_periph , uint32_t adc_flag) +{ + ADC_STAT(adc_periph) &= ~((uint32_t)adc_flag); +} + +/*! + \brief get the bit state of ADCx software start conversion + \param[in] adc_periph: ADCx, x=0,1, only one among these parameters can be selected + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus adc_regular_software_startconv_flag_get(uint32_t adc_periph) +{ + FlagStatus reval = RESET; + if((uint32_t)RESET != (ADC_STAT(adc_periph) & ADC_STAT_STRC)){ + reval = SET; + } + return reval; +} + +/*! + \brief get the bit state of ADCx software inserted channel start conversion + \param[in] adc_periph: ADCx, x=0,1 only one among these parameters can be selected + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus adc_inserted_software_startconv_flag_get(uint32_t adc_periph) +{ + FlagStatus reval = RESET; + if((uint32_t)RESET != (ADC_STAT(adc_periph) & ADC_STAT_STIC)){ + reval = SET; + } + return reval; +} + +/*! + \brief get the ADC interrupt bits + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_interrupt: the adc interrupt bits + only one parameter can be selected which is shown as below: + \arg ADC_INT_FLAG_WDE: analog watchdog interrupt + \arg ADC_INT_FLAG_EOC: end of group conversion interrupt + \arg ADC_INT_FLAG_EOIC: end of inserted group conversion interrupt + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus adc_interrupt_flag_get(uint32_t adc_periph , uint32_t adc_interrupt) +{ + FlagStatus interrupt_flag = RESET; + uint32_t state; + /* check the interrupt bits */ + switch(adc_interrupt){ + case ADC_INT_FLAG_WDE: + /* get the ADC analog watchdog interrupt bits */ + state = ADC_STAT(adc_periph) & ADC_STAT_WDE; + if((ADC_CTL0(adc_periph) & ADC_CTL0_WDEIE) && state){ + interrupt_flag = SET; + } + break; + case ADC_INT_FLAG_EOC: + /* get the ADC end of group conversion interrupt bits */ + state = ADC_STAT(adc_periph) & ADC_STAT_EOC; + if((ADC_CTL0(adc_periph) & ADC_CTL0_EOCIE) && state){ + interrupt_flag = SET; + } + break; + case ADC_INT_FLAG_EOIC: + /* get the ADC end of inserted group conversion interrupt bits */ + state = ADC_STAT(adc_periph) & ADC_STAT_EOIC; + if((ADC_CTL0(adc_periph) & ADC_CTL0_EOICIE) && state){ + interrupt_flag = SET; + } + break; + default: + break; + } + return interrupt_flag; +} + +/*! + \brief clear the ADC flag + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_interrupt: the adc status flag + one or more parameters can be selected which are shown as below: + \arg ADC_INT_FLAG_WDE: analog watchdog interrupt + \arg ADC_INT_FLAG_EOC: end of group conversion interrupt + \arg ADC_INT_FLAG_EOIC: end of inserted group conversion interrupt + \param[out] none + \retval none +*/ +void adc_interrupt_flag_clear(uint32_t adc_periph , uint32_t adc_interrupt) +{ + ADC_STAT(adc_periph) &= ~((uint32_t)adc_interrupt); +} + +/*! + \brief enable ADC interrupt + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_interrupt: the adc interrupt + one or more parameters can be selected which are shown as below: + \arg ADC_INT_WDE: analog watchdog interrupt flag + \arg ADC_INT_EOC: end of group conversion interrupt flag + \arg ADC_INT_EOIC: end of inserted group conversion interrupt flag + \param[out] none + \retval none +*/ +void adc_interrupt_enable(uint32_t adc_periph , uint32_t adc_interrupt) +{ + /* enable ADC analog watchdog interrupt */ + if(0U != (adc_interrupt & ADC_INT_WDE)){ + ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_WDEIE; + } + /* enable ADC end of group conversion interrupt */ + if(0U != (adc_interrupt & ADC_INT_EOC)){ + ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_EOCIE; + } + /* enable ADC end of inserted group conversion interrupt */ + if(0U != (adc_interrupt & ADC_INT_EOIC)){ + ADC_CTL0(adc_periph) |= (uint32_t) ADC_CTL0_EOICIE; + } +} + +/*! + \brief disable ADC interrupt + \param[in] adc_periph: ADCx,x=0,1 + \param[in] adc_interrupt: the adc interrupt flag + one or more parameters can be selected which are shown as below: + \arg ADC_INT_WDE: analog watchdog interrupt flag + \arg ADC_INT_EOC: end of group conversion interrupt flag + \arg ADC_INT_EOIC: end of inserted group conversion interrupt flag + \param[out] none + \retval none +*/ +void adc_interrupt_disable(uint32_t adc_periph, uint32_t adc_interrupt) +{ + /* disable ADC analog watchdog interrupt */ + if(0U != (adc_interrupt & ADC_INT_WDE)){ + ADC_CTL0(adc_periph) &= ~(uint32_t) ADC_CTL0_WDEIE; + } + /* disable ADC end of group conversion interrupt */ + if(0U != (adc_interrupt & ADC_INT_EOC)){ + ADC_CTL0(adc_periph) &= ~(uint32_t) ADC_CTL0_EOCIE; + } + /* disable ADC end of inserted group conversion interrupt */ + if(0U != (adc_interrupt & ADC_INT_EOIC)){ + ADC_CTL0(adc_periph) &= ~(uint32_t) ADC_CTL0_EOICIE; + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c new file mode 100644 index 0000000..3832c3d --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c @@ -0,0 +1,332 @@ +/*! + \file gd32c10x_bkp.c + \brief BKP driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_bkp.h" + +/* BKP register bits offset */ +#define BKP_TAMPER_BITS_OFFSET ((uint32_t)8U) + +/*! + \brief reset BKP registers + \param[in] none + \param[out] none + \retval none +*/ +void bkp_deinit(void) +{ + /* reset BKP domain register*/ + rcu_bkp_reset_enable(); + rcu_bkp_reset_disable(); +} + +/*! + \brief write BKP data register + \param[in] register_number: refer to bkp_data_register_enum + only one parameter can be selected which is shown as below: + \arg BKP_DATA_x(x = 0..41): bkp data register number x + \param[in] data: the data to be write in BKP data register + \param[out] none + \retval none +*/ +void bkp_data_write(bkp_data_register_enum register_number, uint16_t data) +{ + if((register_number >= BKP_DATA_10) && (register_number <= BKP_DATA_41)){ + BKP_DATA10_41(register_number-1U) = data; + }else if((register_number >= BKP_DATA_0) && (register_number <= BKP_DATA_9)){ + BKP_DATA0_9(register_number-1U) = data; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief read BKP data register + \param[in] register_number: refer to bkp_data_register_enum + only one parameter can be selected which is shown as below: + \arg BKP_DATA_x(x = 0..41): bkp data register number x + \param[out] none + \retval data of BKP data register +*/ +uint16_t bkp_data_read(bkp_data_register_enum register_number) +{ + uint16_t data = 0U; + + /* get the data from the BKP data register */ + if((register_number >= BKP_DATA_10) && (register_number <= BKP_DATA_41)){ + data = BKP_DATA10_41(register_number-1U); + }else if((register_number >= BKP_DATA_0) && (register_number <= BKP_DATA_9)){ + data = BKP_DATA0_9(register_number-1U); + }else{ + /* illegal parameters */ + } + return data; +} + +/*! + \brief enable RTC clock calibration output + \param[in] none + \param[out] none + \retval none +*/ +void bkp_rtc_calibration_output_enable(void) +{ + BKP_OCTL |= (uint16_t)BKP_OCTL_COEN; +} + +/*! + \brief disable RTC clock calibration output + \param[in] none + \param[out] none + \retval none +*/ +void bkp_rtc_calibration_output_disable(void) +{ + BKP_OCTL &= (uint16_t)~BKP_OCTL_COEN; +} + +/*! + \brief enable RTC alarm or second signal output + \param[in] none + \param[out] none + \retval none +*/ +void bkp_rtc_signal_output_enable(void) +{ + BKP_OCTL |= (uint16_t)BKP_OCTL_ASOEN; +} + +/*! + \brief disable RTC alarm or second signal output + \param[in] none + \param[out] none + \retval none +*/ +void bkp_rtc_signal_output_disable(void) +{ + BKP_OCTL &= (uint16_t)~BKP_OCTL_ASOEN; +} + +/*! + \brief select RTC output + \param[in] outputsel: RTC output selection + only one parameter can be selected which is shown as below: + \arg RTC_OUTPUT_ALARM_PULSE: RTC alarm pulse is selected as the RTC output + \arg RTC_OUTPUT_SECOND_PULSE: RTC second pulse is selected as the RTC output + \param[out] none + \retval none +*/ +void bkp_rtc_output_select(uint16_t outputsel) +{ + uint16_t ctl = 0U; + + /* configure BKP_OCTL_ROSEL with outputsel */ + ctl = BKP_OCTL; + ctl &= (uint16_t)~BKP_OCTL_ROSEL; + ctl |= outputsel; + BKP_OCTL = ctl; +} + +/*! + \brief select RTC clock output + \param[in] clocksel: RTC clock output selection + only one parameter can be selected which is shown as below: + \arg RTC_CLOCK_DIV_64: RTC clock div 64 + \arg RTC_CLOCK_DIV_1: RTC clock + \param[out] none + \retval none +*/ +void bkp_rtc_clock_output_select(uint16_t clocksel) +{ + uint16_t ctl = 0U; + + /* configure BKP_OCTL_CCOSEL with clocksel */ + ctl = BKP_OCTL; + ctl &= (uint16_t)~BKP_OCTL_CCOSEL; + ctl |= clocksel; + BKP_OCTL = ctl; +} + +/*! + \brief select RTC clock calibration direction + \param[in] direction: RTC clock calibration direction + only one parameter can be selected which is shown as below: + \arg RTC_CLOCK_SLOW_DOWN: RTC clock slow down + \arg RTC_CLOCK_SPEED_UP: RTC clock speed up + \param[out] none + \retval none +*/ +void bkp_rtc_clock_calibration_direction_select(uint16_t direction) +{ + uint16_t ctl = 0U; + + /* configure BKP_OCTL_CALDIR with direction */ + ctl = BKP_OCTL; + ctl &= (uint16_t)~BKP_OCTL_CALDIR; + ctl |= direction; + BKP_OCTL = ctl; +} + +/*! + \brief set RTC clock calibration value + \param[in] value: RTC clock calibration value + \arg 0x00 - 0x7F + \param[out] none + \retval none +*/ +void bkp_rtc_calibration_value_set(uint8_t value) +{ + uint16_t ctl; + + /* configure BKP_OCTL_RCCV with value */ + ctl = BKP_OCTL; + ctl &= (uint16_t)~BKP_OCTL_RCCV; + ctl |= (uint16_t)OCTL_RCCV(value); + BKP_OCTL = ctl; +} + +/*! + \brief enable tamper detection + \param[in] none + \param[out] none + \retval none +*/ +void bkp_tamper_detection_enable(void) +{ + BKP_TPCTL |= (uint16_t)BKP_TPCTL_TPEN; +} + +/*! + \brief disable tamper detection + \param[in] none + \param[out] none + \retval none +*/ +void bkp_tamper_detection_disable(void) +{ + BKP_TPCTL &= (uint16_t)~BKP_TPCTL_TPEN; +} + +/*! + \brief set tamper pin active level + \param[in] level: tamper active level + only one parameter can be selected which is shown as below: + \arg TAMPER_PIN_ACTIVE_HIGH: the tamper pin is active high + \arg TAMPER_PIN_ACTIVE_LOW: the tamper pin is active low + \param[out] none + \retval none +*/ +void bkp_tamper_active_level_set(uint16_t level) +{ + uint16_t ctl = 0U; + + /* configure BKP_TPCTL_TPAL with level */ + ctl = BKP_TPCTL; + ctl &= (uint16_t)~BKP_TPCTL_TPAL; + ctl |= level; + BKP_TPCTL = ctl; +} + +/*! + \brief enable tamper interrupt + \param[in] none + \param[out] none + \retval none +*/ +void bkp_interrupt_enable(void) +{ + BKP_TPCS |= (uint16_t)BKP_TPCS_TPIE; +} + +/*! + \brief disable tamper interrupt + \param[in] none + \param[out] none + \retval none +*/ +void bkp_interrupt_disable(void) +{ + BKP_TPCS &= (uint16_t)~BKP_TPCS_TPIE; +} + +/*! + \brief get tamper flag state + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus bkp_flag_get(void) +{ + if(RESET != (BKP_TPCS & BKP_FLAG_TAMPER)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear tamper flag state + \param[in] none + \param[out] none + \retval none +*/ +void bkp_flag_clear(void) +{ + BKP_TPCS |= (uint16_t)(BKP_FLAG_TAMPER >> BKP_TAMPER_BITS_OFFSET); +} + +/*! + \brief get tamper interrupt flag state + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus bkp_interrupt_flag_get(void) +{ + if(RESET != (BKP_TPCS & BKP_INT_FLAG_TAMPER)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear tamper interrupt flag state + \param[in] none + \param[out] none + \retval none +*/ +void bkp_interrupt_flag_clear(void) +{ + BKP_TPCS |= (uint16_t)(BKP_INT_FLAG_TAMPER >> BKP_TAMPER_BITS_OFFSET); +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c.base@1.0.0 new file mode 100644 index 0000000..3832c3d --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c.base@1.0.0 @@ -0,0 +1,332 @@ +/*! + \file gd32c10x_bkp.c + \brief BKP driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_bkp.h" + +/* BKP register bits offset */ +#define BKP_TAMPER_BITS_OFFSET ((uint32_t)8U) + +/*! + \brief reset BKP registers + \param[in] none + \param[out] none + \retval none +*/ +void bkp_deinit(void) +{ + /* reset BKP domain register*/ + rcu_bkp_reset_enable(); + rcu_bkp_reset_disable(); +} + +/*! + \brief write BKP data register + \param[in] register_number: refer to bkp_data_register_enum + only one parameter can be selected which is shown as below: + \arg BKP_DATA_x(x = 0..41): bkp data register number x + \param[in] data: the data to be write in BKP data register + \param[out] none + \retval none +*/ +void bkp_data_write(bkp_data_register_enum register_number, uint16_t data) +{ + if((register_number >= BKP_DATA_10) && (register_number <= BKP_DATA_41)){ + BKP_DATA10_41(register_number-1U) = data; + }else if((register_number >= BKP_DATA_0) && (register_number <= BKP_DATA_9)){ + BKP_DATA0_9(register_number-1U) = data; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief read BKP data register + \param[in] register_number: refer to bkp_data_register_enum + only one parameter can be selected which is shown as below: + \arg BKP_DATA_x(x = 0..41): bkp data register number x + \param[out] none + \retval data of BKP data register +*/ +uint16_t bkp_data_read(bkp_data_register_enum register_number) +{ + uint16_t data = 0U; + + /* get the data from the BKP data register */ + if((register_number >= BKP_DATA_10) && (register_number <= BKP_DATA_41)){ + data = BKP_DATA10_41(register_number-1U); + }else if((register_number >= BKP_DATA_0) && (register_number <= BKP_DATA_9)){ + data = BKP_DATA0_9(register_number-1U); + }else{ + /* illegal parameters */ + } + return data; +} + +/*! + \brief enable RTC clock calibration output + \param[in] none + \param[out] none + \retval none +*/ +void bkp_rtc_calibration_output_enable(void) +{ + BKP_OCTL |= (uint16_t)BKP_OCTL_COEN; +} + +/*! + \brief disable RTC clock calibration output + \param[in] none + \param[out] none + \retval none +*/ +void bkp_rtc_calibration_output_disable(void) +{ + BKP_OCTL &= (uint16_t)~BKP_OCTL_COEN; +} + +/*! + \brief enable RTC alarm or second signal output + \param[in] none + \param[out] none + \retval none +*/ +void bkp_rtc_signal_output_enable(void) +{ + BKP_OCTL |= (uint16_t)BKP_OCTL_ASOEN; +} + +/*! + \brief disable RTC alarm or second signal output + \param[in] none + \param[out] none + \retval none +*/ +void bkp_rtc_signal_output_disable(void) +{ + BKP_OCTL &= (uint16_t)~BKP_OCTL_ASOEN; +} + +/*! + \brief select RTC output + \param[in] outputsel: RTC output selection + only one parameter can be selected which is shown as below: + \arg RTC_OUTPUT_ALARM_PULSE: RTC alarm pulse is selected as the RTC output + \arg RTC_OUTPUT_SECOND_PULSE: RTC second pulse is selected as the RTC output + \param[out] none + \retval none +*/ +void bkp_rtc_output_select(uint16_t outputsel) +{ + uint16_t ctl = 0U; + + /* configure BKP_OCTL_ROSEL with outputsel */ + ctl = BKP_OCTL; + ctl &= (uint16_t)~BKP_OCTL_ROSEL; + ctl |= outputsel; + BKP_OCTL = ctl; +} + +/*! + \brief select RTC clock output + \param[in] clocksel: RTC clock output selection + only one parameter can be selected which is shown as below: + \arg RTC_CLOCK_DIV_64: RTC clock div 64 + \arg RTC_CLOCK_DIV_1: RTC clock + \param[out] none + \retval none +*/ +void bkp_rtc_clock_output_select(uint16_t clocksel) +{ + uint16_t ctl = 0U; + + /* configure BKP_OCTL_CCOSEL with clocksel */ + ctl = BKP_OCTL; + ctl &= (uint16_t)~BKP_OCTL_CCOSEL; + ctl |= clocksel; + BKP_OCTL = ctl; +} + +/*! + \brief select RTC clock calibration direction + \param[in] direction: RTC clock calibration direction + only one parameter can be selected which is shown as below: + \arg RTC_CLOCK_SLOW_DOWN: RTC clock slow down + \arg RTC_CLOCK_SPEED_UP: RTC clock speed up + \param[out] none + \retval none +*/ +void bkp_rtc_clock_calibration_direction_select(uint16_t direction) +{ + uint16_t ctl = 0U; + + /* configure BKP_OCTL_CALDIR with direction */ + ctl = BKP_OCTL; + ctl &= (uint16_t)~BKP_OCTL_CALDIR; + ctl |= direction; + BKP_OCTL = ctl; +} + +/*! + \brief set RTC clock calibration value + \param[in] value: RTC clock calibration value + \arg 0x00 - 0x7F + \param[out] none + \retval none +*/ +void bkp_rtc_calibration_value_set(uint8_t value) +{ + uint16_t ctl; + + /* configure BKP_OCTL_RCCV with value */ + ctl = BKP_OCTL; + ctl &= (uint16_t)~BKP_OCTL_RCCV; + ctl |= (uint16_t)OCTL_RCCV(value); + BKP_OCTL = ctl; +} + +/*! + \brief enable tamper detection + \param[in] none + \param[out] none + \retval none +*/ +void bkp_tamper_detection_enable(void) +{ + BKP_TPCTL |= (uint16_t)BKP_TPCTL_TPEN; +} + +/*! + \brief disable tamper detection + \param[in] none + \param[out] none + \retval none +*/ +void bkp_tamper_detection_disable(void) +{ + BKP_TPCTL &= (uint16_t)~BKP_TPCTL_TPEN; +} + +/*! + \brief set tamper pin active level + \param[in] level: tamper active level + only one parameter can be selected which is shown as below: + \arg TAMPER_PIN_ACTIVE_HIGH: the tamper pin is active high + \arg TAMPER_PIN_ACTIVE_LOW: the tamper pin is active low + \param[out] none + \retval none +*/ +void bkp_tamper_active_level_set(uint16_t level) +{ + uint16_t ctl = 0U; + + /* configure BKP_TPCTL_TPAL with level */ + ctl = BKP_TPCTL; + ctl &= (uint16_t)~BKP_TPCTL_TPAL; + ctl |= level; + BKP_TPCTL = ctl; +} + +/*! + \brief enable tamper interrupt + \param[in] none + \param[out] none + \retval none +*/ +void bkp_interrupt_enable(void) +{ + BKP_TPCS |= (uint16_t)BKP_TPCS_TPIE; +} + +/*! + \brief disable tamper interrupt + \param[in] none + \param[out] none + \retval none +*/ +void bkp_interrupt_disable(void) +{ + BKP_TPCS &= (uint16_t)~BKP_TPCS_TPIE; +} + +/*! + \brief get tamper flag state + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus bkp_flag_get(void) +{ + if(RESET != (BKP_TPCS & BKP_FLAG_TAMPER)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear tamper flag state + \param[in] none + \param[out] none + \retval none +*/ +void bkp_flag_clear(void) +{ + BKP_TPCS |= (uint16_t)(BKP_FLAG_TAMPER >> BKP_TAMPER_BITS_OFFSET); +} + +/*! + \brief get tamper interrupt flag state + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus bkp_interrupt_flag_get(void) +{ + if(RESET != (BKP_TPCS & BKP_INT_FLAG_TAMPER)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear tamper interrupt flag state + \param[in] none + \param[out] none + \retval none +*/ +void bkp_interrupt_flag_clear(void) +{ + BKP_TPCS |= (uint16_t)(BKP_INT_FLAG_TAMPER >> BKP_TAMPER_BITS_OFFSET); +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c new file mode 100644 index 0000000..ca75355 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c @@ -0,0 +1,1473 @@ +/*! + \file gd32c10x_can.c + \brief CAN driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_can.h" +#include "stdio.h" +#include + +#define CAN_ERROR_HANDLE(s) do{}while(1) + +/* This table can be used to calculate data length in FD mode */ +const uint8_t g_can_fdlength_table[] = {12, 16, 20, 24, 32, 48, 64}; + +/*! + \brief deinitialize CAN + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval none +*/ +void can_deinit(uint32_t can_periph) +{ + if(CAN0 == can_periph) { + rcu_periph_reset_enable(RCU_CAN0RST); + rcu_periph_reset_disable(RCU_CAN0RST); + } else { + rcu_periph_reset_enable(RCU_CAN1RST); + rcu_periph_reset_disable(RCU_CAN1RST); + } +} + +/*! + \brief initialize CAN parameter struct with a default value + \param[in] type: the type of CAN parameter struct + only one parameter can be selected which is shown as below: + \arg CAN_INIT_STRUCT: the CAN initial struct + \arg CAN_FILTER_STRUCT: the CAN filter struct + \arg CAN_FD_FRAME_STRUCT: the CAN FD initial struct + \arg CAN_TX_MESSAGE_STRUCT: the CAN TX message struct + \arg CAN_RX_MESSAGE_STRUCT: the CAN RX message struct + \param[in] p_struct: the pointer of the specific struct + \param[out] none + \retval none +*/ +void can_struct_para_init(can_struct_type_enum type, void *p_struct) +{ + uint8_t i; + + if(NULL == p_struct) { + CAN_ERROR_HANDLE("struct parameter can not be NULL \r\n"); + } + + /* get type of the struct */ + switch(type) { + /* used for can_init() */ + case CAN_INIT_STRUCT: + ((can_parameter_struct *)p_struct)->auto_bus_off_recovery = DISABLE; + ((can_parameter_struct *)p_struct)->auto_retrans = DISABLE; + ((can_parameter_struct *)p_struct)->auto_wake_up = DISABLE; + ((can_parameter_struct *)p_struct)->prescaler = 0x0400U; + ((can_parameter_struct *)p_struct)->rec_fifo_overwrite = DISABLE; + ((can_parameter_struct *)p_struct)->resync_jump_width = CAN_BT_SJW_1TQ; + ((can_parameter_struct *)p_struct)->time_segment_1 = CAN_BT_BS1_3TQ; + ((can_parameter_struct *)p_struct)->time_segment_2 = CAN_BT_BS2_1TQ; + ((can_parameter_struct *)p_struct)->time_triggered = DISABLE; + ((can_parameter_struct *)p_struct)->trans_fifo_order = DISABLE; + ((can_parameter_struct *)p_struct)->working_mode = CAN_NORMAL_MODE; + + break; + /* used for can_filter_init() */ + case CAN_FILTER_STRUCT: + ((can_filter_parameter_struct *)p_struct)->filter_bits = CAN_FILTERBITS_32BIT; + ((can_filter_parameter_struct *)p_struct)->filter_enable = DISABLE; + ((can_filter_parameter_struct *)p_struct)->filter_fifo_number = CAN_FIFO0; + ((can_filter_parameter_struct *)p_struct)->filter_list_high = 0x0000U; + ((can_filter_parameter_struct *)p_struct)->filter_list_low = 0x0000U; + ((can_filter_parameter_struct *)p_struct)->filter_mask_high = 0x0000U; + ((can_filter_parameter_struct *)p_struct)->filter_mask_low = 0x0000U; + ((can_filter_parameter_struct *)p_struct)->filter_mode = CAN_FILTERMODE_MASK; + ((can_filter_parameter_struct *)p_struct)->filter_number = 0U; + + break; + /* used for can_fd_init() */ + case CAN_FD_FRAME_STRUCT: + ((can_fdframe_struct *)p_struct)->data_prescaler = 0x0400U; + ((can_fdframe_struct *)p_struct)->data_resync_jump_width = 1U - 1U; + ((can_fdframe_struct *)p_struct)->data_time_segment_1 = 3U - 1U; + ((can_fdframe_struct *)p_struct)->data_time_segment_2 = 2U - 1U; + ((can_fdframe_struct *)p_struct)->delay_compensation = DISABLE; + ((can_fdframe_struct *)p_struct)->esi_mode = CAN_ESIMOD_HARDWARE; + ((can_fdframe_struct *)p_struct)->excp_event_detect = ENABLE; + ((can_fdframe_struct *)p_struct)->fd_frame = DISABLE; + ((can_fdframe_struct *)p_struct)->iso_bosch = CAN_FDMOD_ISO; + ((can_fdframe_struct *)p_struct)->p_delay_compensation = 0U; + + break; + /* used for can_message_transmit() */ + case CAN_TX_MESSAGE_STRUCT: + ((can_trasnmit_message_struct *)p_struct)->fd_brs = CAN_BRS_DISABLE; + ((can_trasnmit_message_struct *)p_struct)->fd_esi = CAN_ESI_DOMINANT; + ((can_trasnmit_message_struct *)p_struct)->fd_flag = CAN_FDF_CLASSIC; + + for(i = 0U; i < 64U; i++) { + ((can_trasnmit_message_struct *)p_struct)->tx_data[i] = 0U; + } + + ((can_trasnmit_message_struct *)p_struct)->tx_dlen = 0u; + ((can_trasnmit_message_struct *)p_struct)->tx_efid = 0U; + ((can_trasnmit_message_struct *)p_struct)->tx_ff = (uint8_t)CAN_FF_STANDARD; + ((can_trasnmit_message_struct *)p_struct)->tx_ft = (uint8_t)CAN_FT_DATA; + ((can_trasnmit_message_struct *)p_struct)->tx_sfid = 0U; + + break; + /* used for can_message_receive() */ + case CAN_RX_MESSAGE_STRUCT: + ((can_receive_message_struct *)p_struct)->fd_brs = CAN_BRS_DISABLE; + ((can_receive_message_struct *)p_struct)->fd_esi = CAN_ESI_DOMINANT; + ((can_receive_message_struct *)p_struct)->fd_flag = CAN_FDF_CLASSIC; + + for(i = 0U; i < 64U; i++) { + ((can_receive_message_struct *)p_struct)->rx_data[i] = 0U; + } + + ((can_receive_message_struct *)p_struct)->rx_dlen = 0U; + ((can_receive_message_struct *)p_struct)->rx_efid = 0U; + ((can_receive_message_struct *)p_struct)->rx_ff = (uint8_t)CAN_FF_STANDARD; + ((can_receive_message_struct *)p_struct)->rx_fi = 0U; + ((can_receive_message_struct *)p_struct)->rx_ft = (uint8_t)CAN_FT_DATA; + ((can_receive_message_struct *)p_struct)->rx_sfid = 0U; + + break; + + default: + CAN_ERROR_HANDLE("parameter is invalid \r\n"); + } +} + +/*! + \brief initialize CAN + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] can_parameter_init: parameters for CAN initialization + \arg working_mode: CAN_NORMAL_MODE, CAN_LOOPBACK_MODE, CAN_SILENT_MODE, CAN_SILENT_LOOPBACK_MODE + \arg resync_jump_width: 0x00 - 0x07 + \arg time_segment_1: 0x00 - 0x7F + \arg time_segment_2: 0x00 - 0x1F + \arg time_triggered: ENABLE or DISABLE + \arg auto_bus_off_recovery: ENABLE or DISABLE + \arg auto_wake_up: ENABLE or DISABLE + \arg auto_retrans: ENABLE or DISABLE + \arg rec_fifo_overwrite: ENABLE or DISABLE + \arg trans_fifo_order: ENABLE or DISABLE + \arg prescaler: 0x0001 - 0x0400 + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +ErrStatus can_init(uint32_t can_periph, can_parameter_struct *can_parameter_init) +{ + uint32_t timeout = CAN_TIMEOUT; + ErrStatus flag = ERROR; + uint32_t fdctl_status; + + /* disable sleep mode */ + CAN_CTL(can_periph) &= ~CAN_CTL_SLPWMOD; + /* enable initialize mode */ + CAN_CTL(can_periph) |= CAN_CTL_IWMOD; + /* wait ACK */ + while((CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)) { + timeout--; + } + /* check initialize working success */ + if(CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) { + flag = ERROR; + } else { + /* set the bit timing register */ + fdctl_status = CAN_FDCTL(can_periph); + if(CAN_FDCTL_FDEN != (fdctl_status & CAN_FDCTL_FDEN)) { + /* CAN FD disable, should first enable, then write */ + fdctl_status = fdctl_status | CAN_FDCTL_FDEN; + CAN_FDCTL(can_periph) = fdctl_status; + CAN_BT(can_periph) = (BT_MODE((uint32_t)can_parameter_init->working_mode) | \ + BT_SJW((uint32_t)can_parameter_init->resync_jump_width) | \ + BT_BS1((uint32_t)can_parameter_init->time_segment_1) | \ + BT_BS2((uint32_t)can_parameter_init->time_segment_2) | \ + BT_BAUDPSC(((uint32_t)(can_parameter_init->prescaler) - 1U))); + fdctl_status = fdctl_status & (~CAN_FDCTL_FDEN); + CAN_FDCTL(can_periph) = fdctl_status; + } else { + /* CAN FD enable */ + CAN_BT(can_periph) = (BT_MODE((uint32_t)can_parameter_init->working_mode) | \ + BT_SJW((uint32_t)can_parameter_init->resync_jump_width) | \ + BT_BS1((uint32_t)can_parameter_init->time_segment_1) | \ + BT_BS2((uint32_t)can_parameter_init->time_segment_2) | \ + BT_BAUDPSC(((uint32_t)(can_parameter_init->prescaler) - 1U))); + } + + /* time trigger communication mode */ + if(ENABLE == can_parameter_init->time_triggered) { + CAN_CTL(can_periph) |= CAN_CTL_TTC; + } else { + CAN_CTL(can_periph) &= ~CAN_CTL_TTC; + } + /* automatic bus-off management */ + if(ENABLE == can_parameter_init->auto_bus_off_recovery) { + CAN_CTL(can_periph) |= CAN_CTL_ABOR; + } else { + CAN_CTL(can_periph) &= ~CAN_CTL_ABOR; + } + /* automatic wakeup mode */ + if(ENABLE == can_parameter_init->auto_wake_up) { + CAN_CTL(can_periph) |= CAN_CTL_AWU; + } else { + CAN_CTL(can_periph) &= ~CAN_CTL_AWU; + } + /* automatic retransmission mode */ + if(ENABLE == can_parameter_init->auto_retrans) { + CAN_CTL(can_periph) &= ~CAN_CTL_ARD; + } else { + CAN_CTL(can_periph) |= CAN_CTL_ARD; + } + /* receive fifo overwrite mode */ + if(ENABLE == can_parameter_init->rec_fifo_overwrite) { + CAN_CTL(can_periph) &= ~CAN_CTL_RFOD; + } else { + CAN_CTL(can_periph) |= CAN_CTL_RFOD; + } + /* transmit fifo order */ + if(ENABLE == can_parameter_init->trans_fifo_order) { + CAN_CTL(can_periph) |= CAN_CTL_TFO; + } else { + CAN_CTL(can_periph) &= ~CAN_CTL_TFO; + } + /* disable initialize mode */ + CAN_CTL(can_periph) &= ~CAN_CTL_IWMOD; + timeout = CAN_TIMEOUT; + /* wait the ACK */ + while((CAN_STAT_IWS == (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)) { + timeout--; + } + /* check exit initialize mode */ + if(0U != timeout) { + flag = SUCCESS; + } + } + return flag; +} + +/*! + \brief initialize CAN FD function + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] can_fdframe_init: parameters for CAN FD initialization + \arg fd_frame: ENABLE or DISABLE + \arg excp_event_detect: ENABLE or DISABLE + \arg delay_compensation: ENABLE or DISABLE + \arg p_delay_compensation: the pointer of tdc struct + can_fd_tdc_struct: + tdc_mode: CAN_TDCMOD_CALC_AND_OFFSET or CAN_TDCMOD_OFFSET + tdc_filter: 0x00 - 0x07 + tdc_offset: 0x00 - 0x07 + \arg iso_bosch: CAN_FDMOD_ISO or CAN_FDMOD_BOSCH + \arg esi_mode: CAN_ESIMOD_HARDWARE or CAN_ESIMOD_SOFTWARE + \arg data_resync_jump_width: 0x00 - 0x07 + \arg data_time_segment_1: 0x00 - 0x0F + \arg data_time_segment_2: 0x00 - 0x07 + \arg data_prescaler: 0x0001 - 0x0400 + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +ErrStatus can_fd_init(uint32_t can_periph, can_fdframe_struct *can_fdframe_init) +{ + uint32_t timeout = CAN_TIMEOUT; + uint32_t tempreg = 0U; + + /* check null pointer */ + if(0 == can_fdframe_init) { + return ERROR; + } + /* disable sleep mode */ + CAN_CTL(can_periph) &= ~CAN_CTL_SLPWMOD; + /* enable initialize mode */ + CAN_CTL(can_periph) |= CAN_CTL_IWMOD; + /* wait ACK */ + while((CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)) { + timeout--; + } + /* check initialize working success */ + if(CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) { + return ERROR; + } else { + /* set the data bit timing register */ + CAN_DBT(can_periph) = (BT_DSJW((uint32_t)can_fdframe_init->data_resync_jump_width) | \ + BT_DBS1((uint32_t)can_fdframe_init->data_time_segment_1) | \ + BT_DBS2((uint32_t)can_fdframe_init->data_time_segment_2) | \ + BT_BAUDPSC(((uint32_t)can_fdframe_init->data_prescaler) - 1U)); + + tempreg = can_fdframe_init->esi_mode | can_fdframe_init->iso_bosch; + + /* Protocol exception event detection */ + if(ENABLE == can_fdframe_init->excp_event_detect) { + tempreg &= ~CAN_FDCTL_PRED; + } else { + tempreg |= CAN_FDCTL_PRED; + } + + /* Transmitter delay compensation mode */ + if(ENABLE == can_fdframe_init->delay_compensation) { + tempreg |= CAN_FDCTL_TDCEN; + /* p_delay_compensation pointer should be config when TDC mode is enabled */ + if(0 != can_fdframe_init->p_delay_compensation) { + tempreg |= (can_fdframe_init->p_delay_compensation->tdc_mode & CAN_FDCTL_TDCMOD); + CAN_FDTDC(can_periph) = (FDTDC_TDCF(can_fdframe_init->p_delay_compensation->tdc_filter) | FDTDC_TDCO( + can_fdframe_init->p_delay_compensation->tdc_offset)); + } else { + return ERROR; + } + } else { + /* Transmitter delay compensation mode is disabled */ + tempreg &= ~CAN_FDCTL_TDCEN; + } + + /* FD operation mode */ + if(ENABLE == can_fdframe_init->fd_frame) { + tempreg |= CAN_FDCTL_FDEN; + } else { + tempreg &= ~CAN_FDCTL_FDEN; + } + CAN_FDCTL(can_periph) = tempreg; + + /* disable initialize mode */ + CAN_CTL(can_periph) &= ~CAN_CTL_IWMOD; + timeout = CAN_TIMEOUT; + /* wait the ACK */ + while((CAN_STAT_IWS == (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)) { + timeout--; + } + /* check exit initialize mode */ + if(0U == timeout) { + return ERROR; + } + } + + return SUCCESS; +} + +/*! + \brief initialize CAN filter + \param[in] can_filter_parameter_init: struct for CAN filter initialization + \arg filter_list_high: 0x0000 - 0xFFFF + \arg filter_list_low: 0x0000 - 0xFFFF + \arg filter_mask_high: 0x0000 - 0xFFFF + \arg filter_mask_low: 0x0000 - 0xFFFF + \arg filter_fifo_number: CAN_FIFO0, CAN_FIFO1 + \arg filter_number: 0 - 27 + \arg filter_mode: CAN_FILTERMODE_MASK, CAN_FILTERMODE_LIST + \arg filter_bits: CAN_FILTERBITS_32BIT, CAN_FILTERBITS_16BIT + \arg filter_enable: ENABLE or DISABLE + \param[out] none + \retval none +*/ +void can_filter_init(can_filter_parameter_struct *can_filter_parameter_init) +{ + uint32_t val = 0U; + + val = ((uint32_t)1) << (can_filter_parameter_init->filter_number); + /* filter lock disable */ + CAN_FCTL(CAN0) |= CAN_FCTL_FLD; + /* disable filter */ + CAN_FW(CAN0) &= ~(uint32_t)val; + + /* filter 16 bits */ + if(CAN_FILTERBITS_16BIT == can_filter_parameter_init->filter_bits) { + /* set filter 16 bits */ + CAN_FSCFG(CAN0) &= ~(uint32_t)val; + /* first 16 bits list and first 16 bits mask or first 16 bits list and second 16 bits list */ + CAN_FDATA0(CAN0, can_filter_parameter_init->filter_number) = \ + FDATA_MASK_HIGH((can_filter_parameter_init->filter_mask_low) & CAN_FILTER_MASK_16BITS) | \ + FDATA_MASK_LOW((can_filter_parameter_init->filter_list_low) & CAN_FILTER_MASK_16BITS); + /* second 16 bits list and second 16 bits mask or third 16 bits list and fourth 16 bits list */ + CAN_FDATA1(CAN0, can_filter_parameter_init->filter_number) = \ + FDATA_MASK_HIGH((can_filter_parameter_init->filter_mask_high) & CAN_FILTER_MASK_16BITS) | \ + FDATA_MASK_LOW((can_filter_parameter_init->filter_list_high) & CAN_FILTER_MASK_16BITS); + } + /* filter 32 bits */ + if(CAN_FILTERBITS_32BIT == can_filter_parameter_init->filter_bits) { + /* set filter 32 bits */ + CAN_FSCFG(CAN0) |= (uint32_t)val; + /* 32 bits list or first 32 bits list */ + CAN_FDATA0(CAN0, can_filter_parameter_init->filter_number) = \ + FDATA_MASK_HIGH((can_filter_parameter_init->filter_list_high) & CAN_FILTER_MASK_16BITS) | + FDATA_MASK_LOW((can_filter_parameter_init->filter_list_low) & CAN_FILTER_MASK_16BITS); + /* 32 bits mask or second 32 bits list */ + CAN_FDATA1(CAN0, can_filter_parameter_init->filter_number) = \ + FDATA_MASK_HIGH((can_filter_parameter_init->filter_mask_high) & CAN_FILTER_MASK_16BITS) | + FDATA_MASK_LOW((can_filter_parameter_init->filter_mask_low) & CAN_FILTER_MASK_16BITS); + } + + /* filter mode */ + if(CAN_FILTERMODE_MASK == can_filter_parameter_init->filter_mode) { + /* mask mode */ + CAN_FMCFG(CAN0) &= ~(uint32_t)val; + } else { + /* list mode */ + CAN_FMCFG(CAN0) |= (uint32_t)val; + } + + /* filter FIFO */ + if(CAN_FIFO0 == (can_filter_parameter_init->filter_fifo_number)) { + /* FIFO0 */ + CAN_FAFIFO(CAN0) &= ~(uint32_t)val; + } else { + /* FIFO1 */ + CAN_FAFIFO(CAN0) |= (uint32_t)val; + } + + /* filter working */ + if(ENABLE == can_filter_parameter_init->filter_enable) { + + CAN_FW(CAN0) |= (uint32_t)val; + } + + /* filter lock enable */ + CAN_FCTL(CAN0) &= ~CAN_FCTL_FLD; +} + +/*! + \brief CAN filter mask mode initialization + \param[in] id: extended(11-bits) or standard(29-bits) identifier + \arg 0x00000000 - 0x1FFFFFFF + \param[in] mask: extended(11-bits) or standard(29-bits) identifier mask + \arg 0x00000000 - 0x1FFFFFFF + \param[in] format_fifo: format and FIFO states + only one parameter can be selected which is shown as below: + \arg CAN_STANDARD_FIFO0 + \arg CAN_STANDARD_FIFO1 + \arg CAN_EXTENDED_FIFO0 + \arg CAN_EXTENDED_FIFO1 + \param[in] filter_number: filter sequence number + \arg 0x00 - 0x1C + \param[out] none + \retval none +*/ +void can_filter_mask_mode_init(uint32_t id, uint32_t mask, can_format_fifo_enum format_fifo, uint16_t filter_number) +{ + can_filter_parameter_struct can_filter; + + /* Initialize the filter structure */ + can_struct_para_init(CAN_FILTER_STRUCT, &can_filter); + + /* filter config */ + can_filter.filter_number = filter_number; + can_filter.filter_mode = CAN_FILTERMODE_MASK; + can_filter.filter_bits = CAN_FILTERBITS_32BIT; + can_filter.filter_enable = ENABLE; + + switch(format_fifo) { + /* standard FIFO 0 */ + case CAN_STANDARD_FIFO0: + can_filter.filter_fifo_number = CAN_FIFO0; + /* configure SFID[10:0] */ + can_filter.filter_list_high = (uint16_t)id << 5; + can_filter.filter_list_low = 0x0000U; + /* configure SFID[10:0] mask */ + can_filter.filter_mask_high = (uint16_t)mask << 5; + /* both data and remote frames can be received */ + can_filter.filter_mask_low = (uint16_t)(1U << 2U); + + break; + /* standard FIFO 1 */ + case CAN_STANDARD_FIFO1: + can_filter.filter_fifo_number = CAN_FIFO1; + /* configure SFID[10:0] */ + can_filter.filter_list_high = (uint16_t)id << 5; + can_filter.filter_list_low = 0x0000U; + /* configure SFID[10:0] mask */ + can_filter.filter_mask_high = (uint16_t)mask << 5; + /* both data and remote frames can be received */ + can_filter.filter_mask_low = (uint16_t)(1U << 2U); + + break; + /* extended FIFO 0 */ + case CAN_EXTENDED_FIFO0: + can_filter.filter_fifo_number = CAN_FIFO0; + /* configure EFID[28:13] */ + can_filter.filter_list_high = (uint16_t)(id >> 13); + /* configure EFID[12:0] and frame format bit set */ + can_filter.filter_list_low = ((uint16_t)(id << 3)) | (1U << 2); + /* configure EFID[28:13] mask */ + can_filter.filter_mask_high = (uint16_t)(mask >> 13); + /* configure EFID[12:0] and frame format bit mask */ + /* both data and remote frames can be received */ + can_filter.filter_mask_low = ((uint16_t)(mask << 3)) | (1U << 2); + + break; + /* extended FIFO 1 */ + case CAN_EXTENDED_FIFO1: + can_filter.filter_fifo_number = CAN_FIFO1; + /* configure EFID[28:13] */ + can_filter.filter_list_high = (uint16_t)(id >> 13); + /* configure EFID[12:0] and frame format bit set */ + can_filter.filter_list_low = ((uint16_t)(id << 3)) | (1U << 2); + /* configure EFID[28:13] mask */ + can_filter.filter_mask_high = (uint16_t)(mask >> 13); + /* configure EFID[12:0] and frame format bit mask */ + /* both data and remote frames can be received */ + can_filter.filter_mask_low = ((uint16_t)(mask << 3)) | (1U << 2); + + break; + default: + CAN_ERROR_HANDLE("parameter is invalid \r\n"); + } + + can_filter_init(&can_filter); +} + +/*! + \brief CAN communication mode configure + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] mode: communication mode + only one parameter can be selected which is shown as below: + \arg CAN_NORMAL_MODE + \arg CAN_LOOPBACK_MODE + \arg CAN_SILENT_MODE + \arg CAN_SILENT_LOOPBACK_MODE + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +ErrStatus can_monitor_mode_set(uint32_t can_periph, uint8_t mode) +{ + ErrStatus reval = SUCCESS; + uint32_t timeout = CAN_TIMEOUT; + + if(mode == (mode & CAN_SILENT_LOOPBACK_MODE)) { + /* disable sleep mode */ + CAN_CTL(can_periph) &= (~(uint32_t)CAN_CTL_SLPWMOD); + /* set initialize mode */ + CAN_CTL(can_periph) |= (uint8_t)CAN_CTL_IWMOD; + /* wait the acknowledge */ + timeout = CAN_TIMEOUT; + while((CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)) { + timeout--; + } + + if(CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) { + reval = ERROR; + } else { + CAN_BT(can_periph) &= ~BT_MODE(3); + CAN_BT(can_periph) |= BT_MODE(mode); + + timeout = CAN_TIMEOUT; + /* enter normal mode */ + CAN_CTL(can_periph) &= ~(uint32_t)(CAN_CTL_SLPWMOD | CAN_CTL_IWMOD); + /* wait the acknowledge */ + while((0U != (CAN_STAT(can_periph) & (CAN_STAT_IWS | CAN_STAT_SLPWS))) && (0U != timeout)) { + timeout--; + } + if(0U != (CAN_STAT(can_periph) & (CAN_STAT_IWS | CAN_STAT_SLPWS))) { + reval = ERROR; + } + } + } else { + reval = ERROR; + } + + return reval; +} + +/*! + \brief CAN FD frame function enable + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval none +*/ +void can_fd_function_enable(uint32_t can_periph) +{ + CAN_FDCTL(can_periph) |= CAN_FDCTL_FDEN; +} + +/*! + \brief CAN FD frame function disable + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval none +*/ +void can_fd_function_disable(uint32_t can_periph) +{ + CAN_FDCTL(can_periph) &= ~CAN_FDCTL_FDEN; +} + +/*! + \brief set CAN1 filter start bank number + \param[in] start_bank: CAN1 start bank number + only one parameter can be selected which is shown as below: + \arg (1..27) + \param[out] none + \retval none +*/ +void can1_filter_start_bank(uint8_t start_bank) +{ + /* filter lock disable */ + CAN_FCTL(CAN0) |= CAN_FCTL_FLD; + /* set CAN1 filter start number */ + CAN_FCTL(CAN0) &= ~(uint32_t)CAN_FCTL_HBC1F; + CAN_FCTL(CAN0) |= FCTL_HBC1F(start_bank); + /* filter lock enable */ + CAN_FCTL(CAN0) &= ~CAN_FCTL_FLD; +} + +/*! + \brief enable CAN debug freeze + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval none +*/ +void can_debug_freeze_enable(uint32_t can_periph) +{ + /* set DFZ bit */ + CAN_CTL(can_periph) |= CAN_CTL_DFZ; + if(CAN0 == can_periph) { + dbg_periph_enable(DBG_CAN0_HOLD); + } else { + dbg_periph_enable(DBG_CAN1_HOLD); + } +} + +/*! + \brief disable CAN debug freeze + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval none +*/ +void can_debug_freeze_disable(uint32_t can_periph) +{ + /* set DFZ bit */ + CAN_CTL(can_periph) &= ~CAN_CTL_DFZ; + + if(CAN0 == can_periph) { + dbg_periph_disable(DBG_CAN0_HOLD); + } else { + dbg_periph_disable(DBG_CAN1_HOLD); + } +} + +/*! + \brief enable CAN time trigger mode + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval none +*/ +void can_time_trigger_mode_enable(uint32_t can_periph) +{ + uint8_t mailbox_number; + + /* enable the tcc mode */ + CAN_CTL(can_periph) |= CAN_CTL_TTC; + /* enable time stamp */ + for(mailbox_number = 0U; mailbox_number < 3U; mailbox_number++) { + CAN_TMP(can_periph, mailbox_number) |= CAN_TMP_TSEN; + } +} + +/*! + \brief disable CAN time trigger mode + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval none +*/ +void can_time_trigger_mode_disable(uint32_t can_periph) +{ + uint8_t mailbox_number; + + /* disable the TCC mode */ + CAN_CTL(can_periph) &= ~CAN_CTL_TTC; + /* reset TSEN bits */ + for(mailbox_number = 0U; mailbox_number < 3U; mailbox_number++) { + CAN_TMP(can_periph, mailbox_number) &= ~CAN_TMP_TSEN; + } +} + +/*! + \brief transmit CAN message + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] transmit_message: struct for CAN transmit message + \arg tx_sfid: 0x00000000 - 0x000007FF + \arg tx_efid: 0x00000000 - 0x1FFFFFFF + \arg tx_ff: CAN_FF_STANDARD, CAN_FF_EXTENDED + \arg tx_ft: CAN_FT_DATA, CAN_FT_REMOTE + \arg tx_dlen: 0 - 8 (FD mode: 0 - 8, or 12, 16, 20, 24, 32, 48, 64) + \arg tx_data[]: 0x00 - 0xFF + \param[out] none + \retval mailbox_number +*/ +uint8_t can_message_transmit(uint32_t can_periph, can_trasnmit_message_struct *transmit_message) +{ + uint8_t mailbox_number = CAN_MAILBOX0; + uint8_t i = 0U; + uint8_t hit = 0U; + uint32_t canfd_en = 0U; + volatile uint32_t p_temp; + uint32_t reg_temp = 0U; + + /* select one empty mailbox */ + if(CAN_TSTAT_TME0 == (CAN_TSTAT(can_periph)&CAN_TSTAT_TME0)) { + mailbox_number = CAN_MAILBOX0; + } else if(CAN_TSTAT_TME1 == (CAN_TSTAT(can_periph)&CAN_TSTAT_TME1)) { + mailbox_number = CAN_MAILBOX1; + } else if(CAN_TSTAT_TME2 == (CAN_TSTAT(can_periph)&CAN_TSTAT_TME2)) { + mailbox_number = CAN_MAILBOX2; + } else { + mailbox_number = CAN_NOMAILBOX; + } + /* return no mailbox empty */ + if(CAN_NOMAILBOX == mailbox_number) { + return CAN_NOMAILBOX; + } + + CAN_TMI(can_periph, mailbox_number) &= CAN_TMI_TEN; + if(CAN_FF_STANDARD == transmit_message->tx_ff) { + /* set transmit mailbox standard identifier */ + CAN_TMI(can_periph, mailbox_number) |= (uint32_t)(TMI_SFID(transmit_message->tx_sfid) | \ + transmit_message->tx_ft); + } else { + /* set transmit mailbox extended identifier */ + CAN_TMI(can_periph, mailbox_number) |= (uint32_t)(TMI_EFID(transmit_message->tx_efid) | \ + transmit_message->tx_ff | \ + transmit_message->tx_ft); + } + + if(CAN_FDF_CLASSIC == transmit_message->fd_flag) { + /* set the data length */ + CAN_TMP(can_periph, mailbox_number) &= ~(CAN_TMP_DLENC | CAN_TMP_ESI | CAN_TMP_BRS | CAN_TMP_FDF); + /* Classic CAN frame data length does not exceed 8 */ + if (transmit_message->tx_dlen > 8U) { + transmit_message->tx_dlen = 8U; + } + CAN_TMP(can_periph, mailbox_number) |= transmit_message->tx_dlen; + /* set the data */ + CAN_TMDATA0(can_periph, mailbox_number) = TMDATA0_DB3(transmit_message->tx_data[3]) | \ + TMDATA0_DB2(transmit_message->tx_data[2]) | \ + TMDATA0_DB1(transmit_message->tx_data[1]) | \ + TMDATA0_DB0(transmit_message->tx_data[0]); + CAN_TMDATA1(can_periph, mailbox_number) = TMDATA1_DB7(transmit_message->tx_data[7]) | \ + TMDATA1_DB6(transmit_message->tx_data[6]) | \ + TMDATA1_DB5(transmit_message->tx_data[5]) | \ + TMDATA1_DB4(transmit_message->tx_data[4]); + } else { + canfd_en = CAN_FDCTL(can_periph) & CAN_FDCTL_FDEN; + /* check FD function has been enabled */ + if(canfd_en) { + if(transmit_message->tx_dlen <= 8U) { + /* set the data length */ + reg_temp |= transmit_message->tx_dlen; + } else { + /* data length greater than 8 */ + for(i = 0U; i < 7U; i++) { + if(transmit_message->tx_dlen == g_can_fdlength_table[i]) { + hit = 1U; + break; + } + } + /* data length is valid */ + if(1U == hit) { + reg_temp |= 9U + i; + } else { + CAN_ERROR_HANDLE("dlen is invalid \r\n"); + } + } + reg_temp |= (((uint32_t)transmit_message->fd_brs << 5U) | ((uint32_t)transmit_message->fd_esi << 4U) | ((uint32_t)transmit_message->fd_flag << 7U)); + CAN_TMP(can_periph, mailbox_number) = reg_temp; + + /* set the data */ + i = transmit_message->tx_dlen / 4U; + + /* data length is 5-7 need send 2 word */ + if((1U == i) && (4U != transmit_message->tx_dlen)) { + i++; + } + p_temp = (uint32_t)transmit_message->tx_data; + if((0U == i)) { + CAN_TMDATA0(can_periph, mailbox_number) = *(uint32_t *)p_temp; + } else { + for(; i > 0U; i--) { + CAN_TMDATA0(can_periph, mailbox_number) = *(uint32_t *)p_temp; + p_temp = ((uint32_t)((uint32_t)p_temp + 4U)); + } + } + + } else { + CAN_ERROR_HANDLE("CAN FD function disabled \r\n"); + } + } + + /* enable transmission */ + CAN_TMI(can_periph, mailbox_number) |= CAN_TMI_TEN; + + return mailbox_number; +} + +/*! + \brief get CAN transmit state + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] mailbox_number + only one parameter can be selected which is shown as below: + \arg CAN_MAILBOX(x=0,1,2) + \param[out] none + \retval can_transmit_state_enum +*/ +can_transmit_state_enum can_transmit_states(uint32_t can_periph, uint8_t mailbox_number) +{ + can_transmit_state_enum state = CAN_TRANSMIT_FAILED; + uint32_t val = 0U; + + /* check selected mailbox state */ + switch(mailbox_number) { + /* mailbox0 */ + case CAN_MAILBOX0: + val = CAN_TSTAT(can_periph) & (CAN_TSTAT_MTF0 | CAN_TSTAT_MTFNERR0 | CAN_TSTAT_TME0); + break; + /* mailbox1 */ + case CAN_MAILBOX1: + val = CAN_TSTAT(can_periph) & (CAN_TSTAT_MTF1 | CAN_TSTAT_MTFNERR1 | CAN_TSTAT_TME1); + break; + /* mailbox2 */ + case CAN_MAILBOX2: + val = CAN_TSTAT(can_periph) & (CAN_TSTAT_MTF2 | CAN_TSTAT_MTFNERR2 | CAN_TSTAT_TME2); + break; + default: + val = CAN_TRANSMIT_FAILED; + break; + } + + switch(val) { + /* transmit pending */ + case(CAN_STATE_PENDING): + state = CAN_TRANSMIT_PENDING; + break; + /* mailbox0 transmit succeeded */ + case(CAN_TSTAT_MTF0 | CAN_TSTAT_MTFNERR0 | CAN_TSTAT_TME0): + state = CAN_TRANSMIT_OK; + break; + /* mailbox1 transmit succeeded */ + case(CAN_TSTAT_MTF1 | CAN_TSTAT_MTFNERR1 | CAN_TSTAT_TME1): + state = CAN_TRANSMIT_OK; + break; + /* mailbox2 transmit succeeded */ + case(CAN_TSTAT_MTF2 | CAN_TSTAT_MTFNERR2 | CAN_TSTAT_TME2): + state = CAN_TRANSMIT_OK; + break; + /* transmit failed */ + default: + state = CAN_TRANSMIT_FAILED; + break; + } + return state; +} + +/*! + \brief stop CAN transmission + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] mailbox_number + only one parameter can be selected which is shown as below: + \arg CAN_MAILBOXx(x=0,1,2) + \param[out] none + \retval none +*/ +void can_transmission_stop(uint32_t can_periph, uint8_t mailbox_number) +{ + if(CAN_MAILBOX0 == mailbox_number) { + CAN_TSTAT(can_periph) |= CAN_TSTAT_MST0; + while(CAN_TSTAT_MST0 == (CAN_TSTAT(can_periph) & CAN_TSTAT_MST0)) { + } + } else if(CAN_MAILBOX1 == mailbox_number) { + CAN_TSTAT(can_periph) |= CAN_TSTAT_MST1; + while(CAN_TSTAT_MST1 == (CAN_TSTAT(can_periph) & CAN_TSTAT_MST1)) { + } + } else if(CAN_MAILBOX2 == mailbox_number) { + CAN_TSTAT(can_periph) |= CAN_TSTAT_MST2; + while(CAN_TSTAT_MST2 == (CAN_TSTAT(can_periph) & CAN_TSTAT_MST2)) { + } + } else { + /* illegal parameters */ + } +} + +/*! + \brief CAN receive message + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] fifo_number + \arg CAN_FIFOx(x=0,1) + \param[out] receive_message: struct for CAN receive message + \arg rx_sfid: 0x00000000 - 0x000007FF + \arg rx_efid: 0x00000000 - 0x1FFFFFFF + \arg rx_ff: CAN_FF_STANDARD, CAN_FF_EXTENDED + \arg rx_ft: CAN_FT_DATA, CAN_FT_REMOTE + \arg rx_dlen: 0 - 8 (FD mode: 0 - 8, or 12, 16, 20, 24, 32, 48, 64) + \arg rx_data[]: 0x00 - 0xFF + \arg rx_fi: 0 - 27 + \retval none +*/ +void can_message_receive(uint32_t can_periph, uint8_t fifo_number, can_receive_message_struct *receive_message) +{ + uint32_t canfd_en = 0U; + volatile uint32_t p_temp; + uint32_t data_temp; + uint8_t canfd_recv_cnt = 0U; + uint8_t i; + + /* get the frame format */ + receive_message->rx_ff = (uint8_t)(CAN_RFIFOMI_FF & CAN_RFIFOMI(can_periph, fifo_number)); + if(CAN_FF_STANDARD == receive_message->rx_ff) { + /* get standard identifier */ + receive_message->rx_sfid = (uint32_t)(GET_RFIFOMI_SFID(CAN_RFIFOMI(can_periph, fifo_number))); + } else { + /* get extended identifier */ + receive_message->rx_efid = (uint32_t)(GET_RFIFOMI_EFID(CAN_RFIFOMI(can_periph, fifo_number))); + } + + /* get frame type */ + receive_message->rx_ft = (uint8_t)(CAN_RFIFOMI_FT & CAN_RFIFOMI(can_periph, fifo_number)); + /* filtering index */ + receive_message->rx_fi = (uint8_t)(GET_RFIFOMP_FI(CAN_RFIFOMP(can_periph, fifo_number))); + receive_message->fd_flag = (uint8_t)((CAN_RFIFOMP_FDF & CAN_RFIFOMP(can_periph, fifo_number)) >> 7); + + canfd_en = CAN_FDCTL(can_periph) & CAN_FDCTL_FDEN; + if(!canfd_en) { + if(CAN_FDF_CLASSIC == receive_message->fd_flag) { + /* get receive data length */ + receive_message->rx_dlen = (uint8_t)(GET_RFIFOMP_DLENC(CAN_RFIFOMP(can_periph, fifo_number))); + /* receive data */ + receive_message->rx_data[0] = (uint8_t)(GET_RFIFOMDATA0_DB0(CAN_RFIFOMDATA0(can_periph, fifo_number))); + receive_message->rx_data[1] = (uint8_t)(GET_RFIFOMDATA0_DB1(CAN_RFIFOMDATA0(can_periph, fifo_number))); + receive_message->rx_data[2] = (uint8_t)(GET_RFIFOMDATA0_DB2(CAN_RFIFOMDATA0(can_periph, fifo_number))); + receive_message->rx_data[3] = (uint8_t)(GET_RFIFOMDATA0_DB3(CAN_RFIFOMDATA0(can_periph, fifo_number))); + receive_message->rx_data[4] = (uint8_t)(GET_RFIFOMDATA1_DB4(CAN_RFIFOMDATA1(can_periph, fifo_number))); + receive_message->rx_data[5] = (uint8_t)(GET_RFIFOMDATA1_DB5(CAN_RFIFOMDATA1(can_periph, fifo_number))); + receive_message->rx_data[6] = (uint8_t)(GET_RFIFOMDATA1_DB6(CAN_RFIFOMDATA1(can_periph, fifo_number))); + receive_message->rx_data[7] = (uint8_t)(GET_RFIFOMDATA1_DB7(CAN_RFIFOMDATA1(can_periph, fifo_number))); + + } else { + printf("CAN FD function disabled but FD frame received\r\n"); + // CAN_ERROR_HANDLE("CAN FD function disabled \r\n"); + } + } else { + + /* check FD function has been enabled */ + /* get receive data length */ + canfd_recv_cnt = (uint8_t)(GET_RFIFOMP_DLENC(CAN_RFIFOMP(can_periph, fifo_number))); + + if(canfd_recv_cnt <= 8U) { + /* set the data length */ + receive_message->rx_dlen = canfd_recv_cnt; + } else { + receive_message->rx_dlen = g_can_fdlength_table[canfd_recv_cnt - 9U]; + } + + receive_message->fd_brs = (uint8_t)((CAN_RFIFOMP(can_periph, fifo_number) & CAN_RFIFOMP_BRS) >> 5); + receive_message->fd_esi = (uint8_t)((CAN_RFIFOMP(can_periph, fifo_number) & CAN_RFIFOMP_ESI) >> 4); + + /* get the data */ + i = receive_message->rx_dlen / 4U; + + /* data length is 5-7 need receive 2 word */ + if((1U == i) && (4U != receive_message->rx_dlen)) { + i++; + } + p_temp = (uint32_t)(uint32_t)receive_message->rx_data; + if(0U == i) { + data_temp = CAN_RFIFOMDATA0(can_periph, fifo_number); + *(uint32_t *)p_temp = data_temp; + } else { + /* get the data by reading from CAN_RFIFOMDATA0 register*/ + for(; i > 0U; i--) { + data_temp = CAN_RFIFOMDATA0(can_periph, fifo_number); + *(uint32_t *)p_temp = data_temp; + p_temp = ((uint32_t)((uint32_t)p_temp + 4U)); + } + } + } + + /* release FIFO */ + if(CAN_FIFO0 == fifo_number) { + CAN_RFIFO0(can_periph) |= CAN_RFIFO0_RFD0; + } else { + CAN_RFIFO1(can_periph) |= CAN_RFIFO1_RFD1; + } +} + +/*! + \brief release FIFO0 + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] fifo_number + only one parameter can be selected which is shown as below: + \arg CAN_FIFOx(x=0,1) + \param[out] none + \retval none +*/ +void can_fifo_release(uint32_t can_periph, uint8_t fifo_number) +{ + if(CAN_FIFO0 == fifo_number) { + CAN_RFIFO0(can_periph) |= CAN_RFIFO0_RFD0; + } else if(CAN_FIFO1 == fifo_number) { + CAN_RFIFO1(can_periph) |= CAN_RFIFO1_RFD1; + } else { + /* illegal parameters */ + CAN_ERROR_HANDLE("CAN FIFO NUM is invalid \r\n"); + } +} + +/*! + \brief CAN receive message length + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] fifo_number + only one parameter can be selected which is shown as below: + \arg CAN_FIFOx(x=0,1) + \param[out] none + \retval message length +*/ +uint8_t can_receive_message_length_get(uint32_t can_periph, uint8_t fifo_number) +{ + uint8_t val = 0U; + + if(CAN_FIFO0 == fifo_number) { + /* FIFO0 */ + val = (uint8_t)(CAN_RFIFO0(can_periph) & CAN_RFIF_RFL_MASK); + } else if(CAN_FIFO1 == fifo_number) { + /* FIFO1 */ + val = (uint8_t)(CAN_RFIFO1(can_periph) & CAN_RFIF_RFL_MASK); + } else { + /* illegal parameters */ + } + return val; +} + +/*! + \brief set CAN working mode + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] can_working_mode + only one parameter can be selected which is shown as below: + \arg CAN_MODE_INITIALIZE + \arg CAN_MODE_NORMAL + \arg CAN_MODE_SLEEP + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +ErrStatus can_working_mode_set(uint32_t can_periph, uint8_t working_mode) +{ + ErrStatus flag = ERROR; + /* timeout for IWS or also for SLPWS bits */ + uint32_t timeout = CAN_TIMEOUT; + + if(CAN_MODE_INITIALIZE == working_mode) { + /* disable sleep mode */ + CAN_CTL(can_periph) &= (~(uint32_t)CAN_CTL_SLPWMOD); + /* set initialize mode */ + CAN_CTL(can_periph) |= (uint8_t)CAN_CTL_IWMOD; + /* wait the acknowledge */ + while((CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)) { + timeout--; + } + if(CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) { + flag = ERROR; + } else { + flag = SUCCESS; + } + } else if(CAN_MODE_NORMAL == working_mode) { + /* enter normal mode */ + CAN_CTL(can_periph) &= ~(uint32_t)(CAN_CTL_SLPWMOD | CAN_CTL_IWMOD); + /* wait the acknowledge */ + while((0U != (CAN_STAT(can_periph) & (CAN_STAT_IWS | CAN_STAT_SLPWS))) && (0U != timeout)) { + timeout--; + } + if(0U != (CAN_STAT(can_periph) & (CAN_STAT_IWS | CAN_STAT_SLPWS))) { + flag = ERROR; + } else { + flag = SUCCESS; + } + } else if(CAN_MODE_SLEEP == working_mode) { + /* disable initialize mode */ + CAN_CTL(can_periph) &= (~(uint32_t)CAN_CTL_IWMOD); + /* set sleep mode */ + CAN_CTL(can_periph) |= (uint8_t)CAN_CTL_SLPWMOD; + /* wait the acknowledge */ + while((CAN_STAT_SLPWS != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)) && (0U != timeout)) { + timeout--; + } + if(CAN_STAT_SLPWS != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)) { + flag = ERROR; + } else { + flag = SUCCESS; + } + } else { + flag = ERROR; + } + return flag; +} + +/*! + \brief wake up CAN + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +ErrStatus can_wakeup(uint32_t can_periph) +{ + ErrStatus flag = ERROR; + uint32_t timeout = CAN_TIMEOUT; + + /* wakeup */ + CAN_CTL(can_periph) &= ~CAN_CTL_SLPWMOD; + + while((0U != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)) && (0x00U != timeout)) { + timeout--; + } + /* check state */ + if(0U != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)) { + flag = ERROR; + } else { + flag = SUCCESS; + } + return flag; +} + +/*! + \brief get CAN error type + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval can_error_enum + \arg CAN_ERROR_NONE: no error + \arg CAN_ERROR_FILL: fill error + \arg CAN_ERROR_FORMATE: format error + \arg CAN_ERROR_ACK: ACK error + \arg CAN_ERROR_BITRECESSIVE: bit recessive + \arg CAN_ERROR_BITDOMINANTER: bit dominant error + \arg CAN_ERROR_CRC: CRC error + \arg CAN_ERROR_SOFTWARECFG: software configure +*/ +can_error_enum can_error_get(uint32_t can_periph) +{ + can_error_enum error; + error = CAN_ERROR_NONE; + + /* get error type */ + error = (can_error_enum)(GET_ERR_ERRN(CAN_ERR(can_periph))); + return error; +} + +/*! + \brief get CAN receive error number + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval error number +*/ +uint8_t can_receive_error_number_get(uint32_t can_periph) +{ + uint8_t val; + + /* get error count */ + val = (uint8_t)(GET_ERR_RECNT(CAN_ERR(can_periph))); + return val; +} + +/*! + \brief get CAN transmit error number + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval error number +*/ +uint8_t can_transmit_error_number_get(uint32_t can_periph) +{ + uint8_t val; + + val = (uint8_t)(GET_ERR_TECNT(CAN_ERR(can_periph))); + return val; +} + +/*! + \brief enable CAN interrupt + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] interrupt + one or more parameters can be selected which are shown as below: + \arg CAN_INT_TME: transmit mailbox empty interrupt enable + \arg CAN_INT_RFNE0: receive FIFO0 not empty interrupt enable + \arg CAN_INT_RFF0: receive FIFO0 full interrupt enable + \arg CAN_INT_RFO0: receive FIFO0 overfull interrupt enable + \arg CAN_INT_RFNE1: receive FIFO1 not empty interrupt enable + \arg CAN_INT_RFF1: receive FIFO1 full interrupt enable + \arg CAN_INT_RFO1: receive FIFO1 overfull interrupt enable + \arg CAN_INT_WERR: warning error interrupt enable + \arg CAN_INT_PERR: passive error interrupt enable + \arg CAN_INT_BO: bus-off interrupt enable + \arg CAN_INT_ERRN: error number interrupt enable + \arg CAN_INT_ERR: error interrupt enable + \arg CAN_INT_WU: wakeup interrupt enable + \arg CAN_INT_SLPW: sleep working interrupt enable + \param[out] none + \retval none +*/ +void can_interrupt_enable(uint32_t can_periph, uint32_t interrupt) +{ + CAN_INTEN(can_periph) |= interrupt; +} + +/*! + \brief disable CAN interrupt + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] interrupt + one or more parameters can be selected which are shown as below: + \arg CAN_INT_TME: transmit mailbox empty interrupt enable + \arg CAN_INT_RFNE0: receive FIFO0 not empty interrupt enable + \arg CAN_INT_RFF0: receive FIFO0 full interrupt enable + \arg CAN_INT_RFO0: receive FIFO0 overfull interrupt enable + \arg CAN_INT_RFNE1: receive FIFO1 not empty interrupt enable + \arg CAN_INT_RFF1: receive FIFO1 full interrupt enable + \arg CAN_INT_RFO1: receive FIFO1 overfull interrupt enable + \arg CAN_INT_WERR: warning error interrupt enable + \arg CAN_INT_PERR: passive error interrupt enable + \arg CAN_INT_BO: bus-off interrupt enable + \arg CAN_INT_ERRN: error number interrupt enable + \arg CAN_INT_ERR: error interrupt enable + \arg CAN_INT_WU: wakeup interrupt enable + \arg CAN_INT_SLPW: sleep working interrupt enable + \param[out] none + \retval none +*/ +void can_interrupt_disable(uint32_t can_periph, uint32_t interrupt) +{ + CAN_INTEN(can_periph) &= ~interrupt; +} + +/*! + \brief get CAN flag state + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] flag: CAN flags, refer to can_flag_enum + only one parameter can be selected which is shown as below: + \arg CAN_FLAG_RXL: RX level + \arg CAN_FLAG_LASTRX: last sample value of RX pin + \arg CAN_FLAG_RS: receiving state + \arg CAN_FLAG_TS: transmitting state + \arg CAN_FLAG_SLPIF: status change flag of entering sleep working mode + \arg CAN_FLAG_WUIF: status change flag of wakeup from sleep working mode + \arg CAN_FLAG_ERRIF: error flag + \arg CAN_FLAG_SLPWS: sleep working state + \arg CAN_FLAG_IWS: initial working state + \arg CAN_FLAG_TMLS2: transmit mailbox 2 last sending in Tx FIFO + \arg CAN_FLAG_TMLS1: transmit mailbox 1 last sending in Tx FIFO + \arg CAN_FLAG_TMLS0: transmit mailbox 0 last sending in Tx FIFO + \arg CAN_FLAG_TME2: transmit mailbox 2 empty + \arg CAN_FLAG_TME1: transmit mailbox 1 empty + \arg CAN_FLAG_TME0: transmit mailbox 0 empty + \arg CAN_FLAG_MTE2: mailbox 2 transmit error + \arg CAN_FLAG_MTE1: mailbox 1 transmit error + \arg CAN_FLAG_MTE0: mailbox 0 transmit error + \arg CAN_FLAG_MAL2: mailbox 2 arbitration lost + \arg CAN_FLAG_MAL1: mailbox 1 arbitration lost + \arg CAN_FLAG_MAL0: mailbox 0 arbitration lost + \arg CAN_FLAG_MTFNERR2: mailbox 2 transmit finished with no error + \arg CAN_FLAG_MTFNERR1: mailbox 1 transmit finished with no error + \arg CAN_FLAG_MTFNERR0: mailbox 0 transmit finished with no error + \arg CAN_FLAG_MTF2: mailbox 2 transmit finished + \arg CAN_FLAG_MTF1: mailbox 1 transmit finished + \arg CAN_FLAG_MTF0: mailbox 0 transmit finished + \arg CAN_FLAG_RFO0: receive FIFO0 overfull + \arg CAN_FLAG_RFF0: receive FIFO0 full + \arg CAN_FLAG_RFO1: receive FIFO1 overfull + \arg CAN_FLAG_RFF1: receive FIFO1 full + \arg CAN_FLAG_BOERR: bus-off error + \arg CAN_FLAG_PERR: passive error + \arg CAN_FLAG_WERR: warning error + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus can_flag_get(uint32_t can_periph, can_flag_enum flag) +{ + /* get flag and interrupt enable state */ + if(RESET != (CAN_REG_VAL(can_periph, flag) & BIT(CAN_BIT_POS(flag)))) { + return SET; + } else { + return RESET; + } +} + +/*! + \brief clear CAN flag state + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] flag: CAN flags, refer to can_flag_enum + only one parameter can be selected which is shown as below: + \arg CAN_FLAG_SLPIF: status change flag of entering sleep working mode + \arg CAN_FLAG_WUIF: status change flag of wakeup from sleep working mode + \arg CAN_FLAG_ERRIF: error flag + \arg CAN_FLAG_MTE2: mailbox 2 transmit error + \arg CAN_FLAG_MTE1: mailbox 1 transmit error + \arg CAN_FLAG_MTE0: mailbox 0 transmit error + \arg CAN_FLAG_MAL2: mailbox 2 arbitration lost + \arg CAN_FLAG_MAL1: mailbox 1 arbitration lost + \arg CAN_FLAG_MAL0: mailbox 0 arbitration lost + \arg CAN_FLAG_MTFNERR2: mailbox 2 transmit finished with no error + \arg CAN_FLAG_MTFNERR1: mailbox 1 transmit finished with no error + \arg CAN_FLAG_MTFNERR0: mailbox 0 transmit finished with no error + \arg CAN_FLAG_MTF2: mailbox 2 transmit finished + \arg CAN_FLAG_MTF1: mailbox 1 transmit finished + \arg CAN_FLAG_MTF0: mailbox 0 transmit finished + \arg CAN_FLAG_RFO0: receive FIFO0 overfull + \arg CAN_FLAG_RFF0: receive FIFO0 full + \arg CAN_FLAG_RFO1: receive FIFO1 overfull + \arg CAN_FLAG_RFF1: receive FIFO1 full + \param[out] none + \retval none +*/ +void can_flag_clear(uint32_t can_periph, can_flag_enum flag) +{ + CAN_REG_VAL(can_periph, flag) |= BIT(CAN_BIT_POS(flag)); +} + +/*! + \brief get CAN interrupt flag state + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] flag: CAN interrupt flags, refer to can_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg CAN_INT_FLAG_SLPIF: status change interrupt flag of sleep working mode entering + \arg CAN_INT_FLAG_WUIF: status change interrupt flag of wakeup from sleep working mode + \arg CAN_INT_FLAG_ERRIF: error interrupt flag + \arg CAN_INT_FLAG_MTF2: mailbox 2 transmit finished interrupt flag + \arg CAN_INT_FLAG_MTF1: mailbox 1 transmit finished interrupt flag + \arg CAN_INT_FLAG_MTF0: mailbox 0 transmit finished interrupt flag + \arg CAN_INT_FLAG_RFO0: receive FIFO0 overfull interrupt flag + \arg CAN_INT_FLAG_RFF0: receive FIFO0 full interrupt flag + \arg CAN_INT_FLAG_RFL0: receive FIFO0 not empty interrupt flag + \arg CAN_INT_FLAG_RFO1: receive FIFO1 overfull interrupt flag + \arg CAN_INT_FLAG_RFF1: receive FIFO1 full interrupt flag + \arg CAN_INT_FLAG_RFL1: receive FIFO1 not empty interrupt flag + \arg CAN_INT_FLAG_ERRN: error number interrupt flag + \arg CAN_INT_FLAG_BOERR: bus-off error interrupt flag + \arg CAN_INT_FLAG_PERR: passive error interrupt flag + \arg CAN_INT_FLAG_WERR: warning error interrupt flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus can_interrupt_flag_get(uint32_t can_periph, can_interrupt_flag_enum flag) +{ + uint32_t ret1 = RESET; + uint32_t ret2 = RESET; + + /* get the status of interrupt flag */ + if(flag == CAN_INT_FLAG_RFL0) { + ret1 = can_receive_message_length_get(can_periph, CAN_FIFO0); + } else if(flag == CAN_INT_FLAG_RFL1) { + ret1 = can_receive_message_length_get(can_periph, CAN_FIFO1); + } else if(flag == CAN_INT_FLAG_ERRN) { + ret1 = can_error_get(can_periph); + } else { + ret1 = CAN_REG_VALS(can_periph, flag) & BIT(CAN_BIT_POS0(flag)); + } + /* get the status of interrupt enable bit */ + ret2 = CAN_INTEN(can_periph) & BIT(CAN_BIT_POS1(flag)); + if(ret1 && ret2) { + return SET; + } else { + return RESET; + } +} + +/*! + \brief clear CAN interrupt flag state + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] flag: CAN interrupt flags, refer to can_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg CAN_INT_FLAG_SLPIF: status change interrupt flag of sleep working mode entering + \arg CAN_INT_FLAG_WUIF: status change interrupt flag of wakeup from sleep working mode + \arg CAN_INT_FLAG_ERRIF: error interrupt flag + \arg CAN_INT_FLAG_MTF2: mailbox 2 transmit finished interrupt flag + \arg CAN_INT_FLAG_MTF1: mailbox 1 transmit finished interrupt flag + \arg CAN_INT_FLAG_MTF0: mailbox 0 transmit finished interrupt flag + \arg CAN_INT_FLAG_RFO0: receive FIFO0 overfull interrupt flag + \arg CAN_INT_FLAG_RFF0: receive FIFO0 full interrupt flag + \arg CAN_INT_FLAG_RFO1: receive FIFO1 overfull interrupt flag + \arg CAN_INT_FLAG_RFF1: receive FIFO1 full interrupt flag + \param[out] none + \retval none +*/ +void can_interrupt_flag_clear(uint32_t can_periph, can_interrupt_flag_enum flag) +{ + CAN_REG_VALS(can_periph, flag) |= BIT(CAN_BIT_POS0(flag)); +} + +#ifdef GD32C103XXA +/*! + \brief get FIFO overrun flag state + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] fifo_number + only one parameter can be selected which is shown as below: + \arg CAN_FIFOx(x=0,1) + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus can_fifo_overrun_flag_get(uint32_t can_periph, uint8_t fifo_number) +{ + FlagStatus ret = RESET; + if(CAN_FIFO0 == fifo_number) { + /* get flag state */ + if(RESET != (CAN_RFIFO0(can_periph) & CAN_RFIFO0_RFOVRN0)) { + ret = SET; + } else { + ret = RESET; + } + } else if(CAN_FIFO1 == fifo_number) { + /* get flag state */ + if(RESET != (CAN_RFIFO1(can_periph) & CAN_RFIFO1_RFOVRN1)) { + ret = SET; + } else { + ret = RESET; + } + } else { + /* illegal parameters */ + CAN_ERROR_HANDLE("CAN FIFO NUM is invalid \r\n"); + } + return ret; +} +#endif /* GD32C103XXA */ diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c.base@1.0.0 new file mode 100644 index 0000000..6b70808 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c.base@1.0.0 @@ -0,0 +1,1469 @@ +/*! + \file gd32c10x_can.c + \brief CAN driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_can.h" +#include + +#define CAN_ERROR_HANDLE(s) do{}while(1) + +/* This table can be used to calculate data length in FD mode */ +const uint8_t g_can_fdlength_table[] = {12, 16, 20, 24, 32, 48, 64}; + +/*! + \brief deinitialize CAN + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval none +*/ +void can_deinit(uint32_t can_periph) +{ + if(CAN0 == can_periph) { + rcu_periph_reset_enable(RCU_CAN0RST); + rcu_periph_reset_disable(RCU_CAN0RST); + } else { + rcu_periph_reset_enable(RCU_CAN1RST); + rcu_periph_reset_disable(RCU_CAN1RST); + } +} + +/*! + \brief initialize CAN parameter struct with a default value + \param[in] type: the type of CAN parameter struct + only one parameter can be selected which is shown as below: + \arg CAN_INIT_STRUCT: the CAN initial struct + \arg CAN_FILTER_STRUCT: the CAN filter struct + \arg CAN_FD_FRAME_STRUCT: the CAN FD initial struct + \arg CAN_TX_MESSAGE_STRUCT: the CAN TX message struct + \arg CAN_RX_MESSAGE_STRUCT: the CAN RX message struct + \param[in] p_struct: the pointer of the specific struct + \param[out] none + \retval none +*/ +void can_struct_para_init(can_struct_type_enum type, void *p_struct) +{ + uint8_t i; + + if(NULL == p_struct) { + CAN_ERROR_HANDLE("struct parameter can not be NULL \r\n"); + } + + /* get type of the struct */ + switch(type) { + /* used for can_init() */ + case CAN_INIT_STRUCT: + ((can_parameter_struct *)p_struct)->auto_bus_off_recovery = DISABLE; + ((can_parameter_struct *)p_struct)->auto_retrans = DISABLE; + ((can_parameter_struct *)p_struct)->auto_wake_up = DISABLE; + ((can_parameter_struct *)p_struct)->prescaler = 0x0400U; + ((can_parameter_struct *)p_struct)->rec_fifo_overwrite = DISABLE; + ((can_parameter_struct *)p_struct)->resync_jump_width = CAN_BT_SJW_1TQ; + ((can_parameter_struct *)p_struct)->time_segment_1 = CAN_BT_BS1_3TQ; + ((can_parameter_struct *)p_struct)->time_segment_2 = CAN_BT_BS2_1TQ; + ((can_parameter_struct *)p_struct)->time_triggered = DISABLE; + ((can_parameter_struct *)p_struct)->trans_fifo_order = DISABLE; + ((can_parameter_struct *)p_struct)->working_mode = CAN_NORMAL_MODE; + + break; + /* used for can_filter_init() */ + case CAN_FILTER_STRUCT: + ((can_filter_parameter_struct *)p_struct)->filter_bits = CAN_FILTERBITS_32BIT; + ((can_filter_parameter_struct *)p_struct)->filter_enable = DISABLE; + ((can_filter_parameter_struct *)p_struct)->filter_fifo_number = CAN_FIFO0; + ((can_filter_parameter_struct *)p_struct)->filter_list_high = 0x0000U; + ((can_filter_parameter_struct *)p_struct)->filter_list_low = 0x0000U; + ((can_filter_parameter_struct *)p_struct)->filter_mask_high = 0x0000U; + ((can_filter_parameter_struct *)p_struct)->filter_mask_low = 0x0000U; + ((can_filter_parameter_struct *)p_struct)->filter_mode = CAN_FILTERMODE_MASK; + ((can_filter_parameter_struct *)p_struct)->filter_number = 0U; + + break; + /* used for can_fd_init() */ + case CAN_FD_FRAME_STRUCT: + ((can_fdframe_struct *)p_struct)->data_prescaler = 0x0400U; + ((can_fdframe_struct *)p_struct)->data_resync_jump_width = 1U - 1U; + ((can_fdframe_struct *)p_struct)->data_time_segment_1 = 3U - 1U; + ((can_fdframe_struct *)p_struct)->data_time_segment_2 = 2U - 1U; + ((can_fdframe_struct *)p_struct)->delay_compensation = DISABLE; + ((can_fdframe_struct *)p_struct)->esi_mode = CAN_ESIMOD_HARDWARE; + ((can_fdframe_struct *)p_struct)->excp_event_detect = ENABLE; + ((can_fdframe_struct *)p_struct)->fd_frame = DISABLE; + ((can_fdframe_struct *)p_struct)->iso_bosch = CAN_FDMOD_ISO; + ((can_fdframe_struct *)p_struct)->p_delay_compensation = 0U; + + break; + /* used for can_message_transmit() */ + case CAN_TX_MESSAGE_STRUCT: + ((can_trasnmit_message_struct *)p_struct)->fd_brs = CAN_BRS_DISABLE; + ((can_trasnmit_message_struct *)p_struct)->fd_esi = CAN_ESI_DOMINANT; + ((can_trasnmit_message_struct *)p_struct)->fd_flag = CAN_FDF_CLASSIC; + + for(i = 0U; i < 64U; i++) { + ((can_trasnmit_message_struct *)p_struct)->tx_data[i] = 0U; + } + + ((can_trasnmit_message_struct *)p_struct)->tx_dlen = 0u; + ((can_trasnmit_message_struct *)p_struct)->tx_efid = 0U; + ((can_trasnmit_message_struct *)p_struct)->tx_ff = (uint8_t)CAN_FF_STANDARD; + ((can_trasnmit_message_struct *)p_struct)->tx_ft = (uint8_t)CAN_FT_DATA; + ((can_trasnmit_message_struct *)p_struct)->tx_sfid = 0U; + + break; + /* used for can_message_receive() */ + case CAN_RX_MESSAGE_STRUCT: + ((can_receive_message_struct *)p_struct)->fd_brs = CAN_BRS_DISABLE; + ((can_receive_message_struct *)p_struct)->fd_esi = CAN_ESI_DOMINANT; + ((can_receive_message_struct *)p_struct)->fd_flag = CAN_FDF_CLASSIC; + + for(i = 0U; i < 64U; i++) { + ((can_receive_message_struct *)p_struct)->rx_data[i] = 0U; + } + + ((can_receive_message_struct *)p_struct)->rx_dlen = 0U; + ((can_receive_message_struct *)p_struct)->rx_efid = 0U; + ((can_receive_message_struct *)p_struct)->rx_ff = (uint8_t)CAN_FF_STANDARD; + ((can_receive_message_struct *)p_struct)->rx_fi = 0U; + ((can_receive_message_struct *)p_struct)->rx_ft = (uint8_t)CAN_FT_DATA; + ((can_receive_message_struct *)p_struct)->rx_sfid = 0U; + + break; + + default: + CAN_ERROR_HANDLE("parameter is invalid \r\n"); + } +} + +/*! + \brief initialize CAN + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] can_parameter_init: parameters for CAN initialization + \arg working_mode: CAN_NORMAL_MODE, CAN_LOOPBACK_MODE, CAN_SILENT_MODE, CAN_SILENT_LOOPBACK_MODE + \arg resync_jump_width: 0x00 - 0x07 + \arg time_segment_1: 0x00 - 0x7F + \arg time_segment_2: 0x00 - 0x1F + \arg time_triggered: ENABLE or DISABLE + \arg auto_bus_off_recovery: ENABLE or DISABLE + \arg auto_wake_up: ENABLE or DISABLE + \arg auto_retrans: ENABLE or DISABLE + \arg rec_fifo_overwrite: ENABLE or DISABLE + \arg trans_fifo_order: ENABLE or DISABLE + \arg prescaler: 0x0001 - 0x0400 + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +ErrStatus can_init(uint32_t can_periph, can_parameter_struct *can_parameter_init) +{ + uint32_t timeout = CAN_TIMEOUT; + ErrStatus flag = ERROR; + uint32_t fdctl_status; + + /* disable sleep mode */ + CAN_CTL(can_periph) &= ~CAN_CTL_SLPWMOD; + /* enable initialize mode */ + CAN_CTL(can_periph) |= CAN_CTL_IWMOD; + /* wait ACK */ + while((CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)) { + timeout--; + } + /* check initialize working success */ + if(CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) { + flag = ERROR; + } else { + /* set the bit timing register */ + fdctl_status = CAN_FDCTL(can_periph); + if(CAN_FDCTL_FDEN != (fdctl_status & CAN_FDCTL_FDEN)) { + /* CAN FD disable, should first enable, then write */ + fdctl_status = fdctl_status | CAN_FDCTL_FDEN; + CAN_FDCTL(can_periph) = fdctl_status; + CAN_BT(can_periph) = (BT_MODE((uint32_t)can_parameter_init->working_mode) | \ + BT_SJW((uint32_t)can_parameter_init->resync_jump_width) | \ + BT_BS1((uint32_t)can_parameter_init->time_segment_1) | \ + BT_BS2((uint32_t)can_parameter_init->time_segment_2) | \ + BT_BAUDPSC(((uint32_t)(can_parameter_init->prescaler) - 1U))); + fdctl_status = fdctl_status & (~CAN_FDCTL_FDEN); + CAN_FDCTL(can_periph) = fdctl_status; + } else { + /* CAN FD enable */ + CAN_BT(can_periph) = (BT_MODE((uint32_t)can_parameter_init->working_mode) | \ + BT_SJW((uint32_t)can_parameter_init->resync_jump_width) | \ + BT_BS1((uint32_t)can_parameter_init->time_segment_1) | \ + BT_BS2((uint32_t)can_parameter_init->time_segment_2) | \ + BT_BAUDPSC(((uint32_t)(can_parameter_init->prescaler) - 1U))); + } + + /* time trigger communication mode */ + if(ENABLE == can_parameter_init->time_triggered) { + CAN_CTL(can_periph) |= CAN_CTL_TTC; + } else { + CAN_CTL(can_periph) &= ~CAN_CTL_TTC; + } + /* automatic bus-off management */ + if(ENABLE == can_parameter_init->auto_bus_off_recovery) { + CAN_CTL(can_periph) |= CAN_CTL_ABOR; + } else { + CAN_CTL(can_periph) &= ~CAN_CTL_ABOR; + } + /* automatic wakeup mode */ + if(ENABLE == can_parameter_init->auto_wake_up) { + CAN_CTL(can_periph) |= CAN_CTL_AWU; + } else { + CAN_CTL(can_periph) &= ~CAN_CTL_AWU; + } + /* automatic retransmission mode */ + if(ENABLE == can_parameter_init->auto_retrans) { + CAN_CTL(can_periph) &= ~CAN_CTL_ARD; + } else { + CAN_CTL(can_periph) |= CAN_CTL_ARD; + } + /* receive fifo overwrite mode */ + if(ENABLE == can_parameter_init->rec_fifo_overwrite) { + CAN_CTL(can_periph) &= ~CAN_CTL_RFOD; + } else { + CAN_CTL(can_periph) |= CAN_CTL_RFOD; + } + /* transmit fifo order */ + if(ENABLE == can_parameter_init->trans_fifo_order) { + CAN_CTL(can_periph) |= CAN_CTL_TFO; + } else { + CAN_CTL(can_periph) &= ~CAN_CTL_TFO; + } + /* disable initialize mode */ + CAN_CTL(can_periph) &= ~CAN_CTL_IWMOD; + timeout = CAN_TIMEOUT; + /* wait the ACK */ + while((CAN_STAT_IWS == (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)) { + timeout--; + } + /* check exit initialize mode */ + if(0U != timeout) { + flag = SUCCESS; + } + } + return flag; +} + +/*! + \brief initialize CAN FD function + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] can_fdframe_init: parameters for CAN FD initialization + \arg fd_frame: ENABLE or DISABLE + \arg excp_event_detect: ENABLE or DISABLE + \arg delay_compensation: ENABLE or DISABLE + \arg p_delay_compensation: the pointer of tdc struct + can_fd_tdc_struct: + tdc_mode: CAN_TDCMOD_CALC_AND_OFFSET or CAN_TDCMOD_OFFSET + tdc_filter: 0x00 - 0x07 + tdc_offset: 0x00 - 0x07 + \arg iso_bosch: CAN_FDMOD_ISO or CAN_FDMOD_BOSCH + \arg esi_mode: CAN_ESIMOD_HARDWARE or CAN_ESIMOD_SOFTWARE + \arg data_resync_jump_width: 0x00 - 0x07 + \arg data_time_segment_1: 0x00 - 0x0F + \arg data_time_segment_2: 0x00 - 0x07 + \arg data_prescaler: 0x0001 - 0x0400 + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +ErrStatus can_fd_init(uint32_t can_periph, can_fdframe_struct *can_fdframe_init) +{ + uint32_t timeout = CAN_TIMEOUT; + uint32_t tempreg = 0U; + + /* check null pointer */ + if(0 == can_fdframe_init) { + return ERROR; + } + /* disable sleep mode */ + CAN_CTL(can_periph) &= ~CAN_CTL_SLPWMOD; + /* enable initialize mode */ + CAN_CTL(can_periph) |= CAN_CTL_IWMOD; + /* wait ACK */ + while((CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)) { + timeout--; + } + /* check initialize working success */ + if(CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) { + return ERROR; + } else { + /* set the data bit timing register */ + CAN_DBT(can_periph) = (BT_DSJW((uint32_t)can_fdframe_init->data_resync_jump_width) | \ + BT_DBS1((uint32_t)can_fdframe_init->data_time_segment_1) | \ + BT_DBS2((uint32_t)can_fdframe_init->data_time_segment_2) | \ + BT_BAUDPSC(((uint32_t)can_fdframe_init->data_prescaler) - 1U)); + + tempreg = can_fdframe_init->esi_mode | can_fdframe_init->iso_bosch; + + /* Protocol exception event detection */ + if(ENABLE == can_fdframe_init->excp_event_detect) { + tempreg &= ~CAN_FDCTL_PRED; + } else { + tempreg |= CAN_FDCTL_PRED; + } + + /* Transmitter delay compensation mode */ + if(ENABLE == can_fdframe_init->delay_compensation) { + tempreg |= CAN_FDCTL_TDCEN; + /* p_delay_compensation pointer should be config when TDC mode is enabled */ + if(0 != can_fdframe_init->p_delay_compensation) { + tempreg |= (can_fdframe_init->p_delay_compensation->tdc_mode & CAN_FDCTL_TDCMOD); + CAN_FDTDC(can_periph) = (FDTDC_TDCF(can_fdframe_init->p_delay_compensation->tdc_filter) | FDTDC_TDCO( + can_fdframe_init->p_delay_compensation->tdc_offset)); + } else { + return ERROR; + } + } else { + /* Transmitter delay compensation mode is disabled */ + tempreg &= ~CAN_FDCTL_TDCEN; + } + + /* FD operation mode */ + if(ENABLE == can_fdframe_init->fd_frame) { + tempreg |= CAN_FDCTL_FDEN; + } else { + tempreg &= ~CAN_FDCTL_FDEN; + } + CAN_FDCTL(can_periph) = tempreg; + + /* disable initialize mode */ + CAN_CTL(can_periph) &= ~CAN_CTL_IWMOD; + timeout = CAN_TIMEOUT; + /* wait the ACK */ + while((CAN_STAT_IWS == (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)) { + timeout--; + } + /* check exit initialize mode */ + if(0U == timeout) { + return ERROR; + } + } + + return SUCCESS; +} + +/*! + \brief initialize CAN filter + \param[in] can_filter_parameter_init: struct for CAN filter initialization + \arg filter_list_high: 0x0000 - 0xFFFF + \arg filter_list_low: 0x0000 - 0xFFFF + \arg filter_mask_high: 0x0000 - 0xFFFF + \arg filter_mask_low: 0x0000 - 0xFFFF + \arg filter_fifo_number: CAN_FIFO0, CAN_FIFO1 + \arg filter_number: 0 - 27 + \arg filter_mode: CAN_FILTERMODE_MASK, CAN_FILTERMODE_LIST + \arg filter_bits: CAN_FILTERBITS_32BIT, CAN_FILTERBITS_16BIT + \arg filter_enable: ENABLE or DISABLE + \param[out] none + \retval none +*/ +void can_filter_init(can_filter_parameter_struct *can_filter_parameter_init) +{ + uint32_t val = 0U; + + val = ((uint32_t)1) << (can_filter_parameter_init->filter_number); + /* filter lock disable */ + CAN_FCTL(CAN0) |= CAN_FCTL_FLD; + /* disable filter */ + CAN_FW(CAN0) &= ~(uint32_t)val; + + /* filter 16 bits */ + if(CAN_FILTERBITS_16BIT == can_filter_parameter_init->filter_bits) { + /* set filter 16 bits */ + CAN_FSCFG(CAN0) &= ~(uint32_t)val; + /* first 16 bits list and first 16 bits mask or first 16 bits list and second 16 bits list */ + CAN_FDATA0(CAN0, can_filter_parameter_init->filter_number) = \ + FDATA_MASK_HIGH((can_filter_parameter_init->filter_mask_low) & CAN_FILTER_MASK_16BITS) | \ + FDATA_MASK_LOW((can_filter_parameter_init->filter_list_low) & CAN_FILTER_MASK_16BITS); + /* second 16 bits list and second 16 bits mask or third 16 bits list and fourth 16 bits list */ + CAN_FDATA1(CAN0, can_filter_parameter_init->filter_number) = \ + FDATA_MASK_HIGH((can_filter_parameter_init->filter_mask_high) & CAN_FILTER_MASK_16BITS) | \ + FDATA_MASK_LOW((can_filter_parameter_init->filter_list_high) & CAN_FILTER_MASK_16BITS); + } + /* filter 32 bits */ + if(CAN_FILTERBITS_32BIT == can_filter_parameter_init->filter_bits) { + /* set filter 32 bits */ + CAN_FSCFG(CAN0) |= (uint32_t)val; + /* 32 bits list or first 32 bits list */ + CAN_FDATA0(CAN0, can_filter_parameter_init->filter_number) = \ + FDATA_MASK_HIGH((can_filter_parameter_init->filter_list_high) & CAN_FILTER_MASK_16BITS) | + FDATA_MASK_LOW((can_filter_parameter_init->filter_list_low) & CAN_FILTER_MASK_16BITS); + /* 32 bits mask or second 32 bits list */ + CAN_FDATA1(CAN0, can_filter_parameter_init->filter_number) = \ + FDATA_MASK_HIGH((can_filter_parameter_init->filter_mask_high) & CAN_FILTER_MASK_16BITS) | + FDATA_MASK_LOW((can_filter_parameter_init->filter_mask_low) & CAN_FILTER_MASK_16BITS); + } + + /* filter mode */ + if(CAN_FILTERMODE_MASK == can_filter_parameter_init->filter_mode) { + /* mask mode */ + CAN_FMCFG(CAN0) &= ~(uint32_t)val; + } else { + /* list mode */ + CAN_FMCFG(CAN0) |= (uint32_t)val; + } + + /* filter FIFO */ + if(CAN_FIFO0 == (can_filter_parameter_init->filter_fifo_number)) { + /* FIFO0 */ + CAN_FAFIFO(CAN0) &= ~(uint32_t)val; + } else { + /* FIFO1 */ + CAN_FAFIFO(CAN0) |= (uint32_t)val; + } + + /* filter working */ + if(ENABLE == can_filter_parameter_init->filter_enable) { + + CAN_FW(CAN0) |= (uint32_t)val; + } + + /* filter lock enable */ + CAN_FCTL(CAN0) &= ~CAN_FCTL_FLD; +} + +/*! + \brief CAN filter mask mode initialization + \param[in] id: extended(11-bits) or standard(29-bits) identifier + \arg 0x00000000 - 0x1FFFFFFF + \param[in] mask: extended(11-bits) or standard(29-bits) identifier mask + \arg 0x00000000 - 0x1FFFFFFF + \param[in] format_fifo: format and FIFO states + only one parameter can be selected which is shown as below: + \arg CAN_STANDARD_FIFO0 + \arg CAN_STANDARD_FIFO1 + \arg CAN_EXTENDED_FIFO0 + \arg CAN_EXTENDED_FIFO1 + \param[in] filter_number: filter sequence number + \arg 0x00 - 0x1C + \param[out] none + \retval none +*/ +void can_filter_mask_mode_init(uint32_t id, uint32_t mask, can_format_fifo_enum format_fifo, uint16_t filter_number) +{ + can_filter_parameter_struct can_filter; + + /* Initialize the filter structure */ + can_struct_para_init(CAN_FILTER_STRUCT, &can_filter); + + /* filter config */ + can_filter.filter_number = filter_number; + can_filter.filter_mode = CAN_FILTERMODE_MASK; + can_filter.filter_bits = CAN_FILTERBITS_32BIT; + can_filter.filter_enable = ENABLE; + + switch(format_fifo) { + /* standard FIFO 0 */ + case CAN_STANDARD_FIFO0: + can_filter.filter_fifo_number = CAN_FIFO0; + /* configure SFID[10:0] */ + can_filter.filter_list_high = (uint16_t)id << 5; + can_filter.filter_list_low = 0x0000U; + /* configure SFID[10:0] mask */ + can_filter.filter_mask_high = (uint16_t)mask << 5; + /* both data and remote frames can be received */ + can_filter.filter_mask_low = (uint16_t)(1U << 2U); + + break; + /* standard FIFO 1 */ + case CAN_STANDARD_FIFO1: + can_filter.filter_fifo_number = CAN_FIFO1; + /* configure SFID[10:0] */ + can_filter.filter_list_high = (uint16_t)id << 5; + can_filter.filter_list_low = 0x0000U; + /* configure SFID[10:0] mask */ + can_filter.filter_mask_high = (uint16_t)mask << 5; + /* both data and remote frames can be received */ + can_filter.filter_mask_low = (uint16_t)(1U << 2U); + + break; + /* extended FIFO 0 */ + case CAN_EXTENDED_FIFO0: + can_filter.filter_fifo_number = CAN_FIFO0; + /* configure EFID[28:13] */ + can_filter.filter_list_high = (uint16_t)(id >> 13); + /* configure EFID[12:0] and frame format bit set */ + can_filter.filter_list_low = ((uint16_t)(id << 3)) | (1U << 2); + /* configure EFID[28:13] mask */ + can_filter.filter_mask_high = (uint16_t)(mask >> 13); + /* configure EFID[12:0] and frame format bit mask */ + /* both data and remote frames can be received */ + can_filter.filter_mask_low = ((uint16_t)(mask << 3)) | (1U << 2); + + break; + /* extended FIFO 1 */ + case CAN_EXTENDED_FIFO1: + can_filter.filter_fifo_number = CAN_FIFO1; + /* configure EFID[28:13] */ + can_filter.filter_list_high = (uint16_t)(id >> 13); + /* configure EFID[12:0] and frame format bit set */ + can_filter.filter_list_low = ((uint16_t)(id << 3)) | (1U << 2); + /* configure EFID[28:13] mask */ + can_filter.filter_mask_high = (uint16_t)(mask >> 13); + /* configure EFID[12:0] and frame format bit mask */ + /* both data and remote frames can be received */ + can_filter.filter_mask_low = ((uint16_t)(mask << 3)) | (1U << 2); + + break; + default: + CAN_ERROR_HANDLE("parameter is invalid \r\n"); + } + + can_filter_init(&can_filter); +} + +/*! + \brief CAN communication mode configure + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] mode: communication mode + only one parameter can be selected which is shown as below: + \arg CAN_NORMAL_MODE + \arg CAN_LOOPBACK_MODE + \arg CAN_SILENT_MODE + \arg CAN_SILENT_LOOPBACK_MODE + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +ErrStatus can_monitor_mode_set(uint32_t can_periph, uint8_t mode) +{ + ErrStatus reval = SUCCESS; + uint32_t timeout = CAN_TIMEOUT; + + if(mode == (mode & CAN_SILENT_LOOPBACK_MODE)) { + /* disable sleep mode */ + CAN_CTL(can_periph) &= (~(uint32_t)CAN_CTL_SLPWMOD); + /* set initialize mode */ + CAN_CTL(can_periph) |= (uint8_t)CAN_CTL_IWMOD; + /* wait the acknowledge */ + timeout = CAN_TIMEOUT; + while((CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)) { + timeout--; + } + + if(CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) { + reval = ERROR; + } else { + CAN_BT(can_periph) &= ~BT_MODE(3); + CAN_BT(can_periph) |= BT_MODE(mode); + + timeout = CAN_TIMEOUT; + /* enter normal mode */ + CAN_CTL(can_periph) &= ~(uint32_t)(CAN_CTL_SLPWMOD | CAN_CTL_IWMOD); + /* wait the acknowledge */ + while((0U != (CAN_STAT(can_periph) & (CAN_STAT_IWS | CAN_STAT_SLPWS))) && (0U != timeout)) { + timeout--; + } + if(0U != (CAN_STAT(can_periph) & (CAN_STAT_IWS | CAN_STAT_SLPWS))) { + reval = ERROR; + } + } + } else { + reval = ERROR; + } + + return reval; +} + +/*! + \brief CAN FD frame function enable + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval none +*/ +void can_fd_function_enable(uint32_t can_periph) +{ + CAN_FDCTL(can_periph) |= CAN_FDCTL_FDEN; +} + +/*! + \brief CAN FD frame function disable + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval none +*/ +void can_fd_function_disable(uint32_t can_periph) +{ + CAN_FDCTL(can_periph) &= ~CAN_FDCTL_FDEN; +} + +/*! + \brief set CAN1 filter start bank number + \param[in] start_bank: CAN1 start bank number + only one parameter can be selected which is shown as below: + \arg (1..27) + \param[out] none + \retval none +*/ +void can1_filter_start_bank(uint8_t start_bank) +{ + /* filter lock disable */ + CAN_FCTL(CAN0) |= CAN_FCTL_FLD; + /* set CAN1 filter start number */ + CAN_FCTL(CAN0) &= ~(uint32_t)CAN_FCTL_HBC1F; + CAN_FCTL(CAN0) |= FCTL_HBC1F(start_bank); + /* filter lock enable */ + CAN_FCTL(CAN0) &= ~CAN_FCTL_FLD; +} + +/*! + \brief enable CAN debug freeze + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval none +*/ +void can_debug_freeze_enable(uint32_t can_periph) +{ + /* set DFZ bit */ + CAN_CTL(can_periph) |= CAN_CTL_DFZ; + if(CAN0 == can_periph) { + dbg_periph_enable(DBG_CAN0_HOLD); + } else { + dbg_periph_enable(DBG_CAN1_HOLD); + } +} + +/*! + \brief disable CAN debug freeze + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval none +*/ +void can_debug_freeze_disable(uint32_t can_periph) +{ + /* set DFZ bit */ + CAN_CTL(can_periph) &= ~CAN_CTL_DFZ; + + if(CAN0 == can_periph) { + dbg_periph_disable(DBG_CAN0_HOLD); + } else { + dbg_periph_disable(DBG_CAN1_HOLD); + } +} + +/*! + \brief enable CAN time trigger mode + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval none +*/ +void can_time_trigger_mode_enable(uint32_t can_periph) +{ + uint8_t mailbox_number; + + /* enable the tcc mode */ + CAN_CTL(can_periph) |= CAN_CTL_TTC; + /* enable time stamp */ + for(mailbox_number = 0U; mailbox_number < 3U; mailbox_number++) { + CAN_TMP(can_periph, mailbox_number) |= CAN_TMP_TSEN; + } +} + +/*! + \brief disable CAN time trigger mode + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval none +*/ +void can_time_trigger_mode_disable(uint32_t can_periph) +{ + uint8_t mailbox_number; + + /* disable the TCC mode */ + CAN_CTL(can_periph) &= ~CAN_CTL_TTC; + /* reset TSEN bits */ + for(mailbox_number = 0U; mailbox_number < 3U; mailbox_number++) { + CAN_TMP(can_periph, mailbox_number) &= ~CAN_TMP_TSEN; + } +} + +/*! + \brief transmit CAN message + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] transmit_message: struct for CAN transmit message + \arg tx_sfid: 0x00000000 - 0x000007FF + \arg tx_efid: 0x00000000 - 0x1FFFFFFF + \arg tx_ff: CAN_FF_STANDARD, CAN_FF_EXTENDED + \arg tx_ft: CAN_FT_DATA, CAN_FT_REMOTE + \arg tx_dlen: 0 - 8 (FD mode: 0 - 8, or 12, 16, 20, 24, 32, 48, 64) + \arg tx_data[]: 0x00 - 0xFF + \param[out] none + \retval mailbox_number +*/ +uint8_t can_message_transmit(uint32_t can_periph, can_trasnmit_message_struct *transmit_message) +{ + uint8_t mailbox_number = CAN_MAILBOX0; + uint8_t i = 0U; + uint8_t hit = 0U; + uint32_t canfd_en = 0U; + volatile uint32_t p_temp; + uint32_t reg_temp = 0U; + + /* select one empty mailbox */ + if(CAN_TSTAT_TME0 == (CAN_TSTAT(can_periph)&CAN_TSTAT_TME0)) { + mailbox_number = CAN_MAILBOX0; + } else if(CAN_TSTAT_TME1 == (CAN_TSTAT(can_periph)&CAN_TSTAT_TME1)) { + mailbox_number = CAN_MAILBOX1; + } else if(CAN_TSTAT_TME2 == (CAN_TSTAT(can_periph)&CAN_TSTAT_TME2)) { + mailbox_number = CAN_MAILBOX2; + } else { + mailbox_number = CAN_NOMAILBOX; + } + /* return no mailbox empty */ + if(CAN_NOMAILBOX == mailbox_number) { + return CAN_NOMAILBOX; + } + + CAN_TMI(can_periph, mailbox_number) &= CAN_TMI_TEN; + if(CAN_FF_STANDARD == transmit_message->tx_ff) { + /* set transmit mailbox standard identifier */ + CAN_TMI(can_periph, mailbox_number) |= (uint32_t)(TMI_SFID(transmit_message->tx_sfid) | \ + transmit_message->tx_ft); + } else { + /* set transmit mailbox extended identifier */ + CAN_TMI(can_periph, mailbox_number) |= (uint32_t)(TMI_EFID(transmit_message->tx_efid) | \ + transmit_message->tx_ff | \ + transmit_message->tx_ft); + } + + if(CAN_FDF_CLASSIC == transmit_message->fd_flag) { + /* set the data length */ + CAN_TMP(can_periph, mailbox_number) &= ~(CAN_TMP_DLENC | CAN_TMP_ESI | CAN_TMP_BRS | CAN_TMP_FDF); + /* Classic CAN frame data length does not exceed 8 */ + if (transmit_message->tx_dlen > 8U) { + transmit_message->tx_dlen = 8U; + } + CAN_TMP(can_periph, mailbox_number) |= transmit_message->tx_dlen; + /* set the data */ + CAN_TMDATA0(can_periph, mailbox_number) = TMDATA0_DB3(transmit_message->tx_data[3]) | \ + TMDATA0_DB2(transmit_message->tx_data[2]) | \ + TMDATA0_DB1(transmit_message->tx_data[1]) | \ + TMDATA0_DB0(transmit_message->tx_data[0]); + CAN_TMDATA1(can_periph, mailbox_number) = TMDATA1_DB7(transmit_message->tx_data[7]) | \ + TMDATA1_DB6(transmit_message->tx_data[6]) | \ + TMDATA1_DB5(transmit_message->tx_data[5]) | \ + TMDATA1_DB4(transmit_message->tx_data[4]); + } else { + canfd_en = CAN_FDCTL(can_periph) & CAN_FDCTL_FDEN; + /* check FD function has been enabled */ + if(canfd_en) { + if(transmit_message->tx_dlen <= 8U) { + /* set the data length */ + reg_temp |= transmit_message->tx_dlen; + } else { + /* data length greater than 8 */ + for(i = 0U; i < 7U; i++) { + if(transmit_message->tx_dlen == g_can_fdlength_table[i]) { + hit = 1U; + break; + } + } + /* data length is valid */ + if(1U == hit) { + reg_temp |= 9U + i; + } else { + CAN_ERROR_HANDLE("dlen is invalid \r\n"); + } + } + reg_temp |= (((uint32_t)transmit_message->fd_brs << 5U) | ((uint32_t)transmit_message->fd_esi << 4U) | ((uint32_t)transmit_message->fd_flag << 7U)); + CAN_TMP(can_periph, mailbox_number) = reg_temp; + + /* set the data */ + i = transmit_message->tx_dlen / 4U; + + /* data length is 5-7 need send 2 word */ + if((1U == i) && (4U != transmit_message->tx_dlen)) { + i++; + } + p_temp = (uint32_t)transmit_message->tx_data; + if((0U == i)) { + CAN_TMDATA0(can_periph, mailbox_number) = *(uint32_t *)p_temp; + } else { + for(; i > 0U; i--) { + CAN_TMDATA0(can_periph, mailbox_number) = *(uint32_t *)p_temp; + p_temp = ((uint32_t)((uint32_t)p_temp + 4U)); + } + } + + } else { + CAN_ERROR_HANDLE("CAN FD function disabled \r\n"); + } + } + + /* enable transmission */ + CAN_TMI(can_periph, mailbox_number) |= CAN_TMI_TEN; + + return mailbox_number; +} + +/*! + \brief get CAN transmit state + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] mailbox_number + only one parameter can be selected which is shown as below: + \arg CAN_MAILBOX(x=0,1,2) + \param[out] none + \retval can_transmit_state_enum +*/ +can_transmit_state_enum can_transmit_states(uint32_t can_periph, uint8_t mailbox_number) +{ + can_transmit_state_enum state = CAN_TRANSMIT_FAILED; + uint32_t val = 0U; + + /* check selected mailbox state */ + switch(mailbox_number) { + /* mailbox0 */ + case CAN_MAILBOX0: + val = CAN_TSTAT(can_periph) & (CAN_TSTAT_MTF0 | CAN_TSTAT_MTFNERR0 | CAN_TSTAT_TME0); + break; + /* mailbox1 */ + case CAN_MAILBOX1: + val = CAN_TSTAT(can_periph) & (CAN_TSTAT_MTF1 | CAN_TSTAT_MTFNERR1 | CAN_TSTAT_TME1); + break; + /* mailbox2 */ + case CAN_MAILBOX2: + val = CAN_TSTAT(can_periph) & (CAN_TSTAT_MTF2 | CAN_TSTAT_MTFNERR2 | CAN_TSTAT_TME2); + break; + default: + val = CAN_TRANSMIT_FAILED; + break; + } + + switch(val) { + /* transmit pending */ + case(CAN_STATE_PENDING): + state = CAN_TRANSMIT_PENDING; + break; + /* mailbox0 transmit succeeded */ + case(CAN_TSTAT_MTF0 | CAN_TSTAT_MTFNERR0 | CAN_TSTAT_TME0): + state = CAN_TRANSMIT_OK; + break; + /* mailbox1 transmit succeeded */ + case(CAN_TSTAT_MTF1 | CAN_TSTAT_MTFNERR1 | CAN_TSTAT_TME1): + state = CAN_TRANSMIT_OK; + break; + /* mailbox2 transmit succeeded */ + case(CAN_TSTAT_MTF2 | CAN_TSTAT_MTFNERR2 | CAN_TSTAT_TME2): + state = CAN_TRANSMIT_OK; + break; + /* transmit failed */ + default: + state = CAN_TRANSMIT_FAILED; + break; + } + return state; +} + +/*! + \brief stop CAN transmission + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] mailbox_number + only one parameter can be selected which is shown as below: + \arg CAN_MAILBOXx(x=0,1,2) + \param[out] none + \retval none +*/ +void can_transmission_stop(uint32_t can_periph, uint8_t mailbox_number) +{ + if(CAN_MAILBOX0 == mailbox_number) { + CAN_TSTAT(can_periph) |= CAN_TSTAT_MST0; + while(CAN_TSTAT_MST0 == (CAN_TSTAT(can_periph) & CAN_TSTAT_MST0)) { + } + } else if(CAN_MAILBOX1 == mailbox_number) { + CAN_TSTAT(can_periph) |= CAN_TSTAT_MST1; + while(CAN_TSTAT_MST1 == (CAN_TSTAT(can_periph) & CAN_TSTAT_MST1)) { + } + } else if(CAN_MAILBOX2 == mailbox_number) { + CAN_TSTAT(can_periph) |= CAN_TSTAT_MST2; + while(CAN_TSTAT_MST2 == (CAN_TSTAT(can_periph) & CAN_TSTAT_MST2)) { + } + } else { + /* illegal parameters */ + } +} + +/*! + \brief CAN receive message + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] fifo_number + \arg CAN_FIFOx(x=0,1) + \param[out] receive_message: struct for CAN receive message + \arg rx_sfid: 0x00000000 - 0x000007FF + \arg rx_efid: 0x00000000 - 0x1FFFFFFF + \arg rx_ff: CAN_FF_STANDARD, CAN_FF_EXTENDED + \arg rx_ft: CAN_FT_DATA, CAN_FT_REMOTE + \arg rx_dlen: 0 - 8 (FD mode: 0 - 8, or 12, 16, 20, 24, 32, 48, 64) + \arg rx_data[]: 0x00 - 0xFF + \arg rx_fi: 0 - 27 + \retval none +*/ +void can_message_receive(uint32_t can_periph, uint8_t fifo_number, can_receive_message_struct *receive_message) +{ + uint32_t canfd_en = 0U; + volatile uint32_t p_temp; + uint32_t data_temp; + uint8_t canfd_recv_cnt = 0U; + uint8_t i; + + /* get the frame format */ + receive_message->rx_ff = (uint8_t)(CAN_RFIFOMI_FF & CAN_RFIFOMI(can_periph, fifo_number)); + if(CAN_FF_STANDARD == receive_message->rx_ff) { + /* get standard identifier */ + receive_message->rx_sfid = (uint32_t)(GET_RFIFOMI_SFID(CAN_RFIFOMI(can_periph, fifo_number))); + } else { + /* get extended identifier */ + receive_message->rx_efid = (uint32_t)(GET_RFIFOMI_EFID(CAN_RFIFOMI(can_periph, fifo_number))); + } + + /* get frame type */ + receive_message->rx_ft = (uint8_t)(CAN_RFIFOMI_FT & CAN_RFIFOMI(can_periph, fifo_number)); + /* filtering index */ + receive_message->rx_fi = (uint8_t)(GET_RFIFOMP_FI(CAN_RFIFOMP(can_periph, fifo_number))); + receive_message->fd_flag = (uint8_t)((CAN_RFIFOMP_FDF & CAN_RFIFOMP(can_periph, fifo_number)) >> 7); + + canfd_en = CAN_FDCTL(can_periph) & CAN_FDCTL_FDEN; + if(!canfd_en) { + if(CAN_FDF_CLASSIC == receive_message->fd_flag) { + /* get receive data length */ + receive_message->rx_dlen = (uint8_t)(GET_RFIFOMP_DLENC(CAN_RFIFOMP(can_periph, fifo_number))); + /* receive data */ + receive_message->rx_data[0] = (uint8_t)(GET_RFIFOMDATA0_DB0(CAN_RFIFOMDATA0(can_periph, fifo_number))); + receive_message->rx_data[1] = (uint8_t)(GET_RFIFOMDATA0_DB1(CAN_RFIFOMDATA0(can_periph, fifo_number))); + receive_message->rx_data[2] = (uint8_t)(GET_RFIFOMDATA0_DB2(CAN_RFIFOMDATA0(can_periph, fifo_number))); + receive_message->rx_data[3] = (uint8_t)(GET_RFIFOMDATA0_DB3(CAN_RFIFOMDATA0(can_periph, fifo_number))); + receive_message->rx_data[4] = (uint8_t)(GET_RFIFOMDATA1_DB4(CAN_RFIFOMDATA1(can_periph, fifo_number))); + receive_message->rx_data[5] = (uint8_t)(GET_RFIFOMDATA1_DB5(CAN_RFIFOMDATA1(can_periph, fifo_number))); + receive_message->rx_data[6] = (uint8_t)(GET_RFIFOMDATA1_DB6(CAN_RFIFOMDATA1(can_periph, fifo_number))); + receive_message->rx_data[7] = (uint8_t)(GET_RFIFOMDATA1_DB7(CAN_RFIFOMDATA1(can_periph, fifo_number))); + } else { + CAN_ERROR_HANDLE("CAN FD function disabled \r\n"); + } + } else { + /* check FD function has been enabled */ + /* get receive data length */ + canfd_recv_cnt = (uint8_t)(GET_RFIFOMP_DLENC(CAN_RFIFOMP(can_periph, fifo_number))); + + if(canfd_recv_cnt <= 8U) { + /* set the data length */ + receive_message->rx_dlen = canfd_recv_cnt; + } else { + receive_message->rx_dlen = g_can_fdlength_table[canfd_recv_cnt - 9U]; + } + + receive_message->fd_brs = (uint8_t)((CAN_RFIFOMP(can_periph, fifo_number) & CAN_RFIFOMP_BRS) >> 5); + receive_message->fd_esi = (uint8_t)((CAN_RFIFOMP(can_periph, fifo_number) & CAN_RFIFOMP_ESI) >> 4); + + /* get the data */ + i = receive_message->rx_dlen / 4U; + + /* data length is 5-7 need receive 2 word */ + if((1U == i) && (4U != receive_message->rx_dlen)) { + i++; + } + p_temp = (uint32_t)(uint32_t)receive_message->rx_data; + if(0U == i) { + data_temp = CAN_RFIFOMDATA0(can_periph, fifo_number); + *(uint32_t *)p_temp = data_temp; + } else { + /* get the data by reading from CAN_RFIFOMDATA0 register*/ + for(; i > 0U; i--) { + data_temp = CAN_RFIFOMDATA0(can_periph, fifo_number); + *(uint32_t *)p_temp = data_temp; + p_temp = ((uint32_t)((uint32_t)p_temp + 4U)); + } + } + } + + /* release FIFO */ + if(CAN_FIFO0 == fifo_number) { + CAN_RFIFO0(can_periph) |= CAN_RFIFO0_RFD0; + } else { + CAN_RFIFO1(can_periph) |= CAN_RFIFO1_RFD1; + } +} + +/*! + \brief release FIFO0 + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] fifo_number + only one parameter can be selected which is shown as below: + \arg CAN_FIFOx(x=0,1) + \param[out] none + \retval none +*/ +void can_fifo_release(uint32_t can_periph, uint8_t fifo_number) +{ + if(CAN_FIFO0 == fifo_number) { + CAN_RFIFO0(can_periph) |= CAN_RFIFO0_RFD0; + } else if(CAN_FIFO1 == fifo_number) { + CAN_RFIFO1(can_periph) |= CAN_RFIFO1_RFD1; + } else { + /* illegal parameters */ + CAN_ERROR_HANDLE("CAN FIFO NUM is invalid \r\n"); + } +} + +/*! + \brief CAN receive message length + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] fifo_number + only one parameter can be selected which is shown as below: + \arg CAN_FIFOx(x=0,1) + \param[out] none + \retval message length +*/ +uint8_t can_receive_message_length_get(uint32_t can_periph, uint8_t fifo_number) +{ + uint8_t val = 0U; + + if(CAN_FIFO0 == fifo_number) { + /* FIFO0 */ + val = (uint8_t)(CAN_RFIFO0(can_periph) & CAN_RFIF_RFL_MASK); + } else if(CAN_FIFO1 == fifo_number) { + /* FIFO1 */ + val = (uint8_t)(CAN_RFIFO1(can_periph) & CAN_RFIF_RFL_MASK); + } else { + /* illegal parameters */ + } + return val; +} + +/*! + \brief set CAN working mode + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] can_working_mode + only one parameter can be selected which is shown as below: + \arg CAN_MODE_INITIALIZE + \arg CAN_MODE_NORMAL + \arg CAN_MODE_SLEEP + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +ErrStatus can_working_mode_set(uint32_t can_periph, uint8_t working_mode) +{ + ErrStatus flag = ERROR; + /* timeout for IWS or also for SLPWS bits */ + uint32_t timeout = CAN_TIMEOUT; + + if(CAN_MODE_INITIALIZE == working_mode) { + /* disable sleep mode */ + CAN_CTL(can_periph) &= (~(uint32_t)CAN_CTL_SLPWMOD); + /* set initialize mode */ + CAN_CTL(can_periph) |= (uint8_t)CAN_CTL_IWMOD; + /* wait the acknowledge */ + while((CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) && (0U != timeout)) { + timeout--; + } + if(CAN_STAT_IWS != (CAN_STAT(can_periph) & CAN_STAT_IWS)) { + flag = ERROR; + } else { + flag = SUCCESS; + } + } else if(CAN_MODE_NORMAL == working_mode) { + /* enter normal mode */ + CAN_CTL(can_periph) &= ~(uint32_t)(CAN_CTL_SLPWMOD | CAN_CTL_IWMOD); + /* wait the acknowledge */ + while((0U != (CAN_STAT(can_periph) & (CAN_STAT_IWS | CAN_STAT_SLPWS))) && (0U != timeout)) { + timeout--; + } + if(0U != (CAN_STAT(can_periph) & (CAN_STAT_IWS | CAN_STAT_SLPWS))) { + flag = ERROR; + } else { + flag = SUCCESS; + } + } else if(CAN_MODE_SLEEP == working_mode) { + /* disable initialize mode */ + CAN_CTL(can_periph) &= (~(uint32_t)CAN_CTL_IWMOD); + /* set sleep mode */ + CAN_CTL(can_periph) |= (uint8_t)CAN_CTL_SLPWMOD; + /* wait the acknowledge */ + while((CAN_STAT_SLPWS != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)) && (0U != timeout)) { + timeout--; + } + if(CAN_STAT_SLPWS != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)) { + flag = ERROR; + } else { + flag = SUCCESS; + } + } else { + flag = ERROR; + } + return flag; +} + +/*! + \brief wake up CAN + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +ErrStatus can_wakeup(uint32_t can_periph) +{ + ErrStatus flag = ERROR; + uint32_t timeout = CAN_TIMEOUT; + + /* wakeup */ + CAN_CTL(can_periph) &= ~CAN_CTL_SLPWMOD; + + while((0U != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)) && (0x00U != timeout)) { + timeout--; + } + /* check state */ + if(0U != (CAN_STAT(can_periph) & CAN_STAT_SLPWS)) { + flag = ERROR; + } else { + flag = SUCCESS; + } + return flag; +} + +/*! + \brief get CAN error type + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval can_error_enum + \arg CAN_ERROR_NONE: no error + \arg CAN_ERROR_FILL: fill error + \arg CAN_ERROR_FORMATE: format error + \arg CAN_ERROR_ACK: ACK error + \arg CAN_ERROR_BITRECESSIVE: bit recessive + \arg CAN_ERROR_BITDOMINANTER: bit dominant error + \arg CAN_ERROR_CRC: CRC error + \arg CAN_ERROR_SOFTWARECFG: software configure +*/ +can_error_enum can_error_get(uint32_t can_periph) +{ + can_error_enum error; + error = CAN_ERROR_NONE; + + /* get error type */ + error = (can_error_enum)(GET_ERR_ERRN(CAN_ERR(can_periph))); + return error; +} + +/*! + \brief get CAN receive error number + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval error number +*/ +uint8_t can_receive_error_number_get(uint32_t can_periph) +{ + uint8_t val; + + /* get error count */ + val = (uint8_t)(GET_ERR_RECNT(CAN_ERR(can_periph))); + return val; +} + +/*! + \brief get CAN transmit error number + \param[in] can_periph + \arg CANx(x=0,1) + \param[out] none + \retval error number +*/ +uint8_t can_transmit_error_number_get(uint32_t can_periph) +{ + uint8_t val; + + val = (uint8_t)(GET_ERR_TECNT(CAN_ERR(can_periph))); + return val; +} + +/*! + \brief enable CAN interrupt + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] interrupt + one or more parameters can be selected which are shown as below: + \arg CAN_INT_TME: transmit mailbox empty interrupt enable + \arg CAN_INT_RFNE0: receive FIFO0 not empty interrupt enable + \arg CAN_INT_RFF0: receive FIFO0 full interrupt enable + \arg CAN_INT_RFO0: receive FIFO0 overfull interrupt enable + \arg CAN_INT_RFNE1: receive FIFO1 not empty interrupt enable + \arg CAN_INT_RFF1: receive FIFO1 full interrupt enable + \arg CAN_INT_RFO1: receive FIFO1 overfull interrupt enable + \arg CAN_INT_WERR: warning error interrupt enable + \arg CAN_INT_PERR: passive error interrupt enable + \arg CAN_INT_BO: bus-off interrupt enable + \arg CAN_INT_ERRN: error number interrupt enable + \arg CAN_INT_ERR: error interrupt enable + \arg CAN_INT_WU: wakeup interrupt enable + \arg CAN_INT_SLPW: sleep working interrupt enable + \param[out] none + \retval none +*/ +void can_interrupt_enable(uint32_t can_periph, uint32_t interrupt) +{ + CAN_INTEN(can_periph) |= interrupt; +} + +/*! + \brief disable CAN interrupt + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] interrupt + one or more parameters can be selected which are shown as below: + \arg CAN_INT_TME: transmit mailbox empty interrupt enable + \arg CAN_INT_RFNE0: receive FIFO0 not empty interrupt enable + \arg CAN_INT_RFF0: receive FIFO0 full interrupt enable + \arg CAN_INT_RFO0: receive FIFO0 overfull interrupt enable + \arg CAN_INT_RFNE1: receive FIFO1 not empty interrupt enable + \arg CAN_INT_RFF1: receive FIFO1 full interrupt enable + \arg CAN_INT_RFO1: receive FIFO1 overfull interrupt enable + \arg CAN_INT_WERR: warning error interrupt enable + \arg CAN_INT_PERR: passive error interrupt enable + \arg CAN_INT_BO: bus-off interrupt enable + \arg CAN_INT_ERRN: error number interrupt enable + \arg CAN_INT_ERR: error interrupt enable + \arg CAN_INT_WU: wakeup interrupt enable + \arg CAN_INT_SLPW: sleep working interrupt enable + \param[out] none + \retval none +*/ +void can_interrupt_disable(uint32_t can_periph, uint32_t interrupt) +{ + CAN_INTEN(can_periph) &= ~interrupt; +} + +/*! + \brief get CAN flag state + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] flag: CAN flags, refer to can_flag_enum + only one parameter can be selected which is shown as below: + \arg CAN_FLAG_RXL: RX level + \arg CAN_FLAG_LASTRX: last sample value of RX pin + \arg CAN_FLAG_RS: receiving state + \arg CAN_FLAG_TS: transmitting state + \arg CAN_FLAG_SLPIF: status change flag of entering sleep working mode + \arg CAN_FLAG_WUIF: status change flag of wakeup from sleep working mode + \arg CAN_FLAG_ERRIF: error flag + \arg CAN_FLAG_SLPWS: sleep working state + \arg CAN_FLAG_IWS: initial working state + \arg CAN_FLAG_TMLS2: transmit mailbox 2 last sending in Tx FIFO + \arg CAN_FLAG_TMLS1: transmit mailbox 1 last sending in Tx FIFO + \arg CAN_FLAG_TMLS0: transmit mailbox 0 last sending in Tx FIFO + \arg CAN_FLAG_TME2: transmit mailbox 2 empty + \arg CAN_FLAG_TME1: transmit mailbox 1 empty + \arg CAN_FLAG_TME0: transmit mailbox 0 empty + \arg CAN_FLAG_MTE2: mailbox 2 transmit error + \arg CAN_FLAG_MTE1: mailbox 1 transmit error + \arg CAN_FLAG_MTE0: mailbox 0 transmit error + \arg CAN_FLAG_MAL2: mailbox 2 arbitration lost + \arg CAN_FLAG_MAL1: mailbox 1 arbitration lost + \arg CAN_FLAG_MAL0: mailbox 0 arbitration lost + \arg CAN_FLAG_MTFNERR2: mailbox 2 transmit finished with no error + \arg CAN_FLAG_MTFNERR1: mailbox 1 transmit finished with no error + \arg CAN_FLAG_MTFNERR0: mailbox 0 transmit finished with no error + \arg CAN_FLAG_MTF2: mailbox 2 transmit finished + \arg CAN_FLAG_MTF1: mailbox 1 transmit finished + \arg CAN_FLAG_MTF0: mailbox 0 transmit finished + \arg CAN_FLAG_RFO0: receive FIFO0 overfull + \arg CAN_FLAG_RFF0: receive FIFO0 full + \arg CAN_FLAG_RFO1: receive FIFO1 overfull + \arg CAN_FLAG_RFF1: receive FIFO1 full + \arg CAN_FLAG_BOERR: bus-off error + \arg CAN_FLAG_PERR: passive error + \arg CAN_FLAG_WERR: warning error + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus can_flag_get(uint32_t can_periph, can_flag_enum flag) +{ + /* get flag and interrupt enable state */ + if(RESET != (CAN_REG_VAL(can_periph, flag) & BIT(CAN_BIT_POS(flag)))) { + return SET; + } else { + return RESET; + } +} + +/*! + \brief clear CAN flag state + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] flag: CAN flags, refer to can_flag_enum + only one parameter can be selected which is shown as below: + \arg CAN_FLAG_SLPIF: status change flag of entering sleep working mode + \arg CAN_FLAG_WUIF: status change flag of wakeup from sleep working mode + \arg CAN_FLAG_ERRIF: error flag + \arg CAN_FLAG_MTE2: mailbox 2 transmit error + \arg CAN_FLAG_MTE1: mailbox 1 transmit error + \arg CAN_FLAG_MTE0: mailbox 0 transmit error + \arg CAN_FLAG_MAL2: mailbox 2 arbitration lost + \arg CAN_FLAG_MAL1: mailbox 1 arbitration lost + \arg CAN_FLAG_MAL0: mailbox 0 arbitration lost + \arg CAN_FLAG_MTFNERR2: mailbox 2 transmit finished with no error + \arg CAN_FLAG_MTFNERR1: mailbox 1 transmit finished with no error + \arg CAN_FLAG_MTFNERR0: mailbox 0 transmit finished with no error + \arg CAN_FLAG_MTF2: mailbox 2 transmit finished + \arg CAN_FLAG_MTF1: mailbox 1 transmit finished + \arg CAN_FLAG_MTF0: mailbox 0 transmit finished + \arg CAN_FLAG_RFO0: receive FIFO0 overfull + \arg CAN_FLAG_RFF0: receive FIFO0 full + \arg CAN_FLAG_RFO1: receive FIFO1 overfull + \arg CAN_FLAG_RFF1: receive FIFO1 full + \param[out] none + \retval none +*/ +void can_flag_clear(uint32_t can_periph, can_flag_enum flag) +{ + CAN_REG_VAL(can_periph, flag) |= BIT(CAN_BIT_POS(flag)); +} + +/*! + \brief get CAN interrupt flag state + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] flag: CAN interrupt flags, refer to can_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg CAN_INT_FLAG_SLPIF: status change interrupt flag of sleep working mode entering + \arg CAN_INT_FLAG_WUIF: status change interrupt flag of wakeup from sleep working mode + \arg CAN_INT_FLAG_ERRIF: error interrupt flag + \arg CAN_INT_FLAG_MTF2: mailbox 2 transmit finished interrupt flag + \arg CAN_INT_FLAG_MTF1: mailbox 1 transmit finished interrupt flag + \arg CAN_INT_FLAG_MTF0: mailbox 0 transmit finished interrupt flag + \arg CAN_INT_FLAG_RFO0: receive FIFO0 overfull interrupt flag + \arg CAN_INT_FLAG_RFF0: receive FIFO0 full interrupt flag + \arg CAN_INT_FLAG_RFL0: receive FIFO0 not empty interrupt flag + \arg CAN_INT_FLAG_RFO1: receive FIFO1 overfull interrupt flag + \arg CAN_INT_FLAG_RFF1: receive FIFO1 full interrupt flag + \arg CAN_INT_FLAG_RFL1: receive FIFO1 not empty interrupt flag + \arg CAN_INT_FLAG_ERRN: error number interrupt flag + \arg CAN_INT_FLAG_BOERR: bus-off error interrupt flag + \arg CAN_INT_FLAG_PERR: passive error interrupt flag + \arg CAN_INT_FLAG_WERR: warning error interrupt flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus can_interrupt_flag_get(uint32_t can_periph, can_interrupt_flag_enum flag) +{ + uint32_t ret1 = RESET; + uint32_t ret2 = RESET; + + /* get the status of interrupt flag */ + if(flag == CAN_INT_FLAG_RFL0) { + ret1 = can_receive_message_length_get(can_periph, CAN_FIFO0); + } else if(flag == CAN_INT_FLAG_RFL1) { + ret1 = can_receive_message_length_get(can_periph, CAN_FIFO1); + } else if(flag == CAN_INT_FLAG_ERRN) { + ret1 = can_error_get(can_periph); + } else { + ret1 = CAN_REG_VALS(can_periph, flag) & BIT(CAN_BIT_POS0(flag)); + } + /* get the status of interrupt enable bit */ + ret2 = CAN_INTEN(can_periph) & BIT(CAN_BIT_POS1(flag)); + if(ret1 && ret2) { + return SET; + } else { + return RESET; + } +} + +/*! + \brief clear CAN interrupt flag state + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] flag: CAN interrupt flags, refer to can_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg CAN_INT_FLAG_SLPIF: status change interrupt flag of sleep working mode entering + \arg CAN_INT_FLAG_WUIF: status change interrupt flag of wakeup from sleep working mode + \arg CAN_INT_FLAG_ERRIF: error interrupt flag + \arg CAN_INT_FLAG_MTF2: mailbox 2 transmit finished interrupt flag + \arg CAN_INT_FLAG_MTF1: mailbox 1 transmit finished interrupt flag + \arg CAN_INT_FLAG_MTF0: mailbox 0 transmit finished interrupt flag + \arg CAN_INT_FLAG_RFO0: receive FIFO0 overfull interrupt flag + \arg CAN_INT_FLAG_RFF0: receive FIFO0 full interrupt flag + \arg CAN_INT_FLAG_RFO1: receive FIFO1 overfull interrupt flag + \arg CAN_INT_FLAG_RFF1: receive FIFO1 full interrupt flag + \param[out] none + \retval none +*/ +void can_interrupt_flag_clear(uint32_t can_periph, can_interrupt_flag_enum flag) +{ + CAN_REG_VALS(can_periph, flag) |= BIT(CAN_BIT_POS0(flag)); +} + +#ifdef GD32C103XXA +/*! + \brief get FIFO overrun flag state + \param[in] can_periph + \arg CANx(x=0,1) + \param[in] fifo_number + only one parameter can be selected which is shown as below: + \arg CAN_FIFOx(x=0,1) + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus can_fifo_overrun_flag_get(uint32_t can_periph, uint8_t fifo_number) +{ + FlagStatus ret = RESET; + if(CAN_FIFO0 == fifo_number) { + /* get flag state */ + if(RESET != (CAN_RFIFO0(can_periph) & CAN_RFIFO0_RFOVRN0)) { + ret = SET; + } else { + ret = RESET; + } + } else if(CAN_FIFO1 == fifo_number) { + /* get flag state */ + if(RESET != (CAN_RFIFO1(can_periph) & CAN_RFIFO1_RFOVRN1)) { + ret = SET; + } else { + ret = RESET; + } + } else { + /* illegal parameters */ + CAN_ERROR_HANDLE("CAN FIFO NUM is invalid \r\n"); + } + return ret; +} +#endif /* GD32C103XXA */ diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c new file mode 100644 index 0000000..9525060 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c @@ -0,0 +1,127 @@ +/*! + \file gd32c10x_crc.c + \brief CRC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_crc.h" + +#define CRC_DATA_RESET_VALUE ((uint32_t)0xFFFFFFFFU) +#define CRC_FDATA_RESET_VALUE ((uint32_t)0x00000000U) + +/*! + \brief deinit CRC calculation unit + \param[in] none + \param[out] none + \retval none +*/ +void crc_deinit(void) +{ + CRC_DATA = CRC_DATA_RESET_VALUE; + CRC_FDATA = CRC_FDATA_RESET_VALUE; + CRC_CTL = (uint32_t)CRC_CTL_RST; +} + +/*! + \brief reset data register(CRC_DATA) to the value of 0xFFFFFFFF + \param[in] none + \param[out] none + \retval none +*/ +void crc_data_register_reset(void) +{ + CRC_CTL |= (uint32_t)CRC_CTL_RST; +} + +/*! + \brief read the value of the data register + \param[in] none + \param[out] none + \retval 32-bit value of the data register +*/ +uint32_t crc_data_register_read(void) +{ + uint32_t data; + data = CRC_DATA; + return (data); +} + +/*! + \brief read the value of the free data register + \param[in] none + \param[out] none + \retval 8-bit value of the free data register +*/ +uint8_t crc_free_data_register_read(void) +{ + uint8_t fdata; + fdata = (uint8_t)CRC_FDATA; + return (fdata); +} + +/*! + \brief write data to the free data register + \param[in] free_data: specified 8-bit data + \param[out] none + \retval none +*/ +void crc_free_data_register_write(uint8_t free_data) +{ + CRC_FDATA = (uint32_t)free_data; +} + +/*! + \brief calculate the CRC value of a 32-bit data + \param[in] sdata: specified 32-bit data + \param[out] none + \retval 32-bit value calculated by CRC +*/ +uint32_t crc_single_data_calculate(uint32_t sdata) +{ + CRC_DATA = sdata; + return (CRC_DATA); +} + +/*! + \brief calculate the CRC value of an array of 32-bit values + \param[in] array: pointer to an array of 32-bit values + \param[in] size: size of the array + \param[out] none + \retval 32-bit value calculated by CRC +*/ +uint32_t crc_block_data_calculate(const uint32_t *array, uint32_t size) +{ + uint32_t index; + for(index = 0U; index < size; index++){ + CRC_DATA = *(array+index); + } + return (CRC_DATA); +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c.base@1.0.0 new file mode 100644 index 0000000..9525060 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c.base@1.0.0 @@ -0,0 +1,127 @@ +/*! + \file gd32c10x_crc.c + \brief CRC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_crc.h" + +#define CRC_DATA_RESET_VALUE ((uint32_t)0xFFFFFFFFU) +#define CRC_FDATA_RESET_VALUE ((uint32_t)0x00000000U) + +/*! + \brief deinit CRC calculation unit + \param[in] none + \param[out] none + \retval none +*/ +void crc_deinit(void) +{ + CRC_DATA = CRC_DATA_RESET_VALUE; + CRC_FDATA = CRC_FDATA_RESET_VALUE; + CRC_CTL = (uint32_t)CRC_CTL_RST; +} + +/*! + \brief reset data register(CRC_DATA) to the value of 0xFFFFFFFF + \param[in] none + \param[out] none + \retval none +*/ +void crc_data_register_reset(void) +{ + CRC_CTL |= (uint32_t)CRC_CTL_RST; +} + +/*! + \brief read the value of the data register + \param[in] none + \param[out] none + \retval 32-bit value of the data register +*/ +uint32_t crc_data_register_read(void) +{ + uint32_t data; + data = CRC_DATA; + return (data); +} + +/*! + \brief read the value of the free data register + \param[in] none + \param[out] none + \retval 8-bit value of the free data register +*/ +uint8_t crc_free_data_register_read(void) +{ + uint8_t fdata; + fdata = (uint8_t)CRC_FDATA; + return (fdata); +} + +/*! + \brief write data to the free data register + \param[in] free_data: specified 8-bit data + \param[out] none + \retval none +*/ +void crc_free_data_register_write(uint8_t free_data) +{ + CRC_FDATA = (uint32_t)free_data; +} + +/*! + \brief calculate the CRC value of a 32-bit data + \param[in] sdata: specified 32-bit data + \param[out] none + \retval 32-bit value calculated by CRC +*/ +uint32_t crc_single_data_calculate(uint32_t sdata) +{ + CRC_DATA = sdata; + return (CRC_DATA); +} + +/*! + \brief calculate the CRC value of an array of 32-bit values + \param[in] array: pointer to an array of 32-bit values + \param[in] size: size of the array + \param[out] none + \retval 32-bit value calculated by CRC +*/ +uint32_t crc_block_data_calculate(const uint32_t *array, uint32_t size) +{ + uint32_t index; + for(index = 0U; index < size; index++){ + CRC_DATA = *(array+index); + } + return (CRC_DATA); +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_ctc.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_ctc.c new file mode 100644 index 0000000..44d1fcf --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_ctc.c @@ -0,0 +1,388 @@ +/*! + \file gd32c10x_ctc.c + \brief CTC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_ctc.h" + +#define CTC_FLAG_MASK ((uint32_t)0x00000700U) + +/* CTC register bit offset */ +#define CTC_TRIMVALUE_OFFSET ((uint32_t)8U) +#define CTC_TRIM_VALUE_OFFSET ((uint32_t)8U) +#define CTC_REFCAP_OFFSET ((uint32_t)16U) +#define CTC_LIMIT_VALUE_OFFSET ((uint32_t)16U) + +/*! + \brief reset CTC clock trim controller + \param[in] none + \param[out] none + \retval none +*/ +void ctc_deinit(void) +{ + /* reset CTC */ + rcu_periph_reset_enable(RCU_CTCRST); + rcu_periph_reset_disable(RCU_CTCRST); +} + +/*! + \brief enable CTC trim counter + \param[in] none + \param[out] none + \retval none +*/ +void ctc_counter_enable(void) +{ + CTC_CTL0 |= (uint32_t)CTC_CTL0_CNTEN; +} + +/*! + \brief disable CTC trim counter + \param[in] none + \param[out] none + \retval none +*/ +void ctc_counter_disable(void) +{ + CTC_CTL0 &= (uint32_t)(~CTC_CTL0_CNTEN); +} + +/*! + \brief configure the IRC48M trim value + \param[in] ctc_trim_value: 8-bit IRC48M trim value + \arg 0x00 - 0x3F + \param[out] none + \retval none +*/ +void ctc_irc48m_trim_value_config(uint8_t trim_value) +{ + /* clear TRIMVALUE bits */ + CTC_CTL0 &= (~(uint32_t)CTC_CTL0_TRIMVALUE); + /* set TRIMVALUE bits */ + CTC_CTL0 |= ((uint32_t)trim_value << CTC_TRIM_VALUE_OFFSET); +} + +/*! + \brief generate software reference source sync pulse + \param[in] none + \param[out] none + \retval none +*/ +void ctc_software_refsource_pulse_generate(void) +{ + CTC_CTL0 |= (uint32_t)CTC_CTL0_SWREFPUL; +} + +/*! + \brief configure hardware automatically trim mode + \param[in] hardmode: + only one parameter can be selected which is shown as below: + \arg CTC_HARDWARE_TRIM_MODE_ENABLE: hardware automatically trim mode enable + \arg CTC_HARDWARE_TRIM_MODE_DISABLE: hardware automatically trim mode disable + \param[out] none + \retval none +*/ +void ctc_hardware_trim_mode_config(uint32_t hardmode) +{ + CTC_CTL0 &= (uint32_t)(~CTC_CTL0_AUTOTRIM); + CTC_CTL0 |= (uint32_t)hardmode; +} + +/*! + \brief configure reference signal source polarity + \param[in] polarity: + only one parameter can be selected which is shown as below: + \arg CTC_REFSOURCE_POLARITY_FALLING: reference signal source polarity is falling edge + \arg CTC_REFSOURCE_POLARITY_RISING: reference signal source polarity is rising edge + \param[out] none + \retval none +*/ +void ctc_refsource_polarity_config(uint32_t polarity) +{ + CTC_CTL1 &= (uint32_t)(~CTC_CTL1_REFPOL); + CTC_CTL1 |= (uint32_t)polarity; +} + +/*! + \brief select reference signal source + \param[in] refs: + only one parameter can be selected which is shown as below: + \arg CTC_REFSOURCE_GPIO: GPIO is selected + \arg CTC_REFSOURCE_LXTAL: LXTAL is selected + \param[out] none + \retval none +*/ +void ctc_refsource_signal_select(uint32_t refs) +{ + CTC_CTL1 &= (uint32_t)(~CTC_CTL1_REFSEL); + CTC_CTL1 |= (uint32_t)refs; +} + +/*! + \brief configure reference signal source prescaler + \param[in] prescaler: + only one parameter can be selected which is shown as below: + \arg CTC_REFSOURCE_PSC_OFF: reference signal not divided + \arg CTC_REFSOURCE_PSC_DIV2: reference signal divided by 2 + \arg CTC_REFSOURCE_PSC_DIV4: reference signal divided by 4 + \arg CTC_REFSOURCE_PSC_DIV8: reference signal divided by 8 + \arg CTC_REFSOURCE_PSC_DIV16: reference signal divided by 16 + \arg CTC_REFSOURCE_PSC_DIV32: reference signal divided by 32 + \arg CTC_REFSOURCE_PSC_DIV64: reference signal divided by 64 + \arg CTC_REFSOURCE_PSC_DIV128: reference signal divided by 128 + \param[out] none + \retval none +*/ +void ctc_refsource_prescaler_config(uint32_t prescaler) +{ + CTC_CTL1 &= (uint32_t)(~CTC_CTL1_REFPSC); + CTC_CTL1 |= (uint32_t)prescaler; +} + +/*! + \brief configure clock trim base limit value + \param[in] limit_value: 8-bit clock trim base limit value + \arg 0x00 - 0xFF + \param[out] none + \retval none +*/ +void ctc_clock_limit_value_config(uint8_t limit_value) +{ + CTC_CTL1 &= (uint32_t)(~CTC_CTL1_CKLIM); + CTC_CTL1 |= (uint32_t)((uint32_t)limit_value << CTC_LIMIT_VALUE_OFFSET); +} + +/*! + \brief configure CTC counter reload value + \param[in] reload_value: 16-bit CTC counter reload value + \arg 0x0000 - 0xFFFF + \param[out] none + \retval none +*/ +void ctc_counter_reload_value_config(uint16_t reload_value) +{ + CTC_CTL1 &= (uint32_t)(~CTC_CTL1_RLVALUE); + CTC_CTL1 |= (uint32_t)reload_value; +} + +/*! + \brief read CTC counter capture value when reference sync pulse occurred + \param[in] none + \param[out] none + \retval the 16-bit CTC counter capture value +*/ +uint16_t ctc_counter_capture_value_read(void) +{ + uint16_t capture_value = 0U; + capture_value = (uint16_t)((CTC_STAT & CTC_STAT_REFCAP)>> CTC_REFCAP_OFFSET); + return (capture_value); +} + +/*! + \brief read CTC trim counter direction when reference sync pulse occurred + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET + \arg SET: CTC trim counter direction is down-counting + \arg RESET: CTC trim counter direction is up-counting +*/ +FlagStatus ctc_counter_direction_read(void) +{ + if(RESET != (CTC_STAT & CTC_STAT_REFDIR)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief read CTC counter reload value + \param[in] none + \param[out] none + \retval the 16-bit CTC counter reload value +*/ +uint16_t ctc_counter_reload_value_read(void) +{ + uint16_t reload_value = 0U; + reload_value = (uint16_t)(CTC_CTL1 & CTC_CTL1_RLVALUE); + return (reload_value); +} + +/*! + \brief read the IRC48M trim value + \param[in] none + \param[out] none + \retval the 8-bit IRC48M trim value +*/ +uint8_t ctc_irc48m_trim_value_read(void) +{ + uint8_t trim_value = 0U; + trim_value = (uint8_t)((CTC_CTL0 & CTC_CTL0_TRIMVALUE) >> CTC_TRIMVALUE_OFFSET); + return (trim_value); +} + +/*! + \brief enable the CTC interrupt + \param[in] interrupt: CTC interrupt enable + one or more parameters can be selected which are shown as below: + \arg CTC_INT_CKOK: clock trim OK interrupt enable + \arg CTC_INT_CKWARN: clock trim warning interrupt enable + \arg CTC_INT_ERR: error interrupt enable + \arg CTC_INT_EREF: expect reference interrupt enable + \param[out] none + \retval none +*/ +void ctc_interrupt_enable(uint32_t interrupt) +{ + CTC_CTL0 |= (uint32_t)interrupt; +} + +/*! + \brief disable the CTC interrupt + \param[in] interrupt: CTC interrupt enable source + one or more parameters can be selected which are shown as below: + \arg CTC_INT_CKOK: clock trim OK interrupt enable + \arg CTC_INT_CKWARN: clock trim warning interrupt enable + \arg CTC_INT_ERR: error interrupt enable + \arg CTC_INT_EREF: expect reference interrupt enable + \param[out] none + \retval none +*/ +void ctc_interrupt_disable(uint32_t interrupt) +{ + CTC_CTL0 &= (uint32_t)(~interrupt); +} + +/*! + \brief get CTC interrupt flag + \param[in] interrupt: the CTC interrupt flag + only one parameter can be selected which is shown as below: + \arg CTC_INT_FLAG_CKOK: clock trim OK interrupt + \arg CTC_INT_FLAG_CKWARN: clock trim warning interrupt + \arg CTC_INT_FLAG_ERR: error interrupt + \arg CTC_INT_FLAG_EREF: expect reference interrupt + \arg CTC_INT_FLAG_CKERR: clock trim error bit interrupt + \arg CTC_INT_FLAG_REFMISS: reference sync pulse miss interrupt + \arg CTC_INT_FLAG_TRIMERR: trim value error interrupt + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus ctc_interrupt_flag_get(uint32_t interrupt) +{ + uint32_t intflag = 0U, intenable = 0U; + + /* check whether the interrupt is enabled */ + if(RESET != (interrupt & CTC_FLAG_MASK)){ + intenable = CTC_CTL0 & CTC_CTL0_ERRIE; + }else{ + intenable = CTC_CTL0 & interrupt; + } + + /* get interrupt flag status */ + intflag = CTC_STAT & interrupt; + + if(intflag && intenable){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear CTC interrupt flag + \param[in] interrupt: the CTC interrupt flag + only one parameter can be selected which is shown as below: + \arg CTC_INT_FLAG_CKOK: clock trim OK interrupt + \arg CTC_INT_FLAG_CKWARN: clock trim warning interrupt + \arg CTC_INT_FLAG_ERR: error interrupt + \arg CTC_INT_FLAG_EREF: expect reference interrupt + \arg CTC_INT_FLAG_CKERR: clock trim error bit interrupt + \arg CTC_INT_FLAG_REFMISS: reference sync pulse miss interrupt + \arg CTC_INT_FLAG_TRIMERR: trim value error interrupt + \param[out] none + \retval none +*/ +void ctc_interrupt_flag_clear(uint32_t interrupt) +{ + if(RESET != (interrupt & CTC_FLAG_MASK)){ + CTC_INTC |= CTC_INTC_ERRIC; + }else{ + CTC_INTC |= interrupt; + } +} + +/*! + \brief get CTC flag + \param[in] flag: the CTC flag + only one parameter can be selected which is shown as below: + \arg CTC_FLAG_CKOK: clock trim OK flag + \arg CTC_FLAG_CKWARN: clock trim warning flag + \arg CTC_FLAG_ERR: error flag + \arg CTC_FLAG_EREF: expect reference flag + \arg CTC_FLAG_CKERR: clock trim error bit + \arg CTC_FLAG_REFMISS: reference sync pulse miss + \arg CTC_FLAG_TRIMERR: trim value error bit + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus ctc_flag_get(uint32_t flag) +{ + if(RESET != (CTC_STAT & flag)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear CTC flag + \param[in] flag: the CTC flag + only one parameter can be selected which is shown as below: + \arg CTC_FLAG_CKOK: clock trim OK flag + \arg CTC_FLAG_CKWARN: clock trim warning flag + \arg CTC_FLAG_ERR: error flag + \arg CTC_FLAG_EREF: expect reference flag + \arg CTC_FLAG_CKERR: clock trim error bit + \arg CTC_FLAG_REFMISS: reference sync pulse miss + \arg CTC_FLAG_TRIMERR: trim value error bit + \param[out] none + \retval none +*/ +void ctc_flag_clear(uint32_t flag) +{ + if(RESET != (flag & CTC_FLAG_MASK)){ + CTC_INTC |= CTC_INTC_ERRIC; + }else{ + CTC_INTC |= flag; + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_ctc.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_ctc.c.base@1.0.0 new file mode 100644 index 0000000..44d1fcf --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_ctc.c.base@1.0.0 @@ -0,0 +1,388 @@ +/*! + \file gd32c10x_ctc.c + \brief CTC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_ctc.h" + +#define CTC_FLAG_MASK ((uint32_t)0x00000700U) + +/* CTC register bit offset */ +#define CTC_TRIMVALUE_OFFSET ((uint32_t)8U) +#define CTC_TRIM_VALUE_OFFSET ((uint32_t)8U) +#define CTC_REFCAP_OFFSET ((uint32_t)16U) +#define CTC_LIMIT_VALUE_OFFSET ((uint32_t)16U) + +/*! + \brief reset CTC clock trim controller + \param[in] none + \param[out] none + \retval none +*/ +void ctc_deinit(void) +{ + /* reset CTC */ + rcu_periph_reset_enable(RCU_CTCRST); + rcu_periph_reset_disable(RCU_CTCRST); +} + +/*! + \brief enable CTC trim counter + \param[in] none + \param[out] none + \retval none +*/ +void ctc_counter_enable(void) +{ + CTC_CTL0 |= (uint32_t)CTC_CTL0_CNTEN; +} + +/*! + \brief disable CTC trim counter + \param[in] none + \param[out] none + \retval none +*/ +void ctc_counter_disable(void) +{ + CTC_CTL0 &= (uint32_t)(~CTC_CTL0_CNTEN); +} + +/*! + \brief configure the IRC48M trim value + \param[in] ctc_trim_value: 8-bit IRC48M trim value + \arg 0x00 - 0x3F + \param[out] none + \retval none +*/ +void ctc_irc48m_trim_value_config(uint8_t trim_value) +{ + /* clear TRIMVALUE bits */ + CTC_CTL0 &= (~(uint32_t)CTC_CTL0_TRIMVALUE); + /* set TRIMVALUE bits */ + CTC_CTL0 |= ((uint32_t)trim_value << CTC_TRIM_VALUE_OFFSET); +} + +/*! + \brief generate software reference source sync pulse + \param[in] none + \param[out] none + \retval none +*/ +void ctc_software_refsource_pulse_generate(void) +{ + CTC_CTL0 |= (uint32_t)CTC_CTL0_SWREFPUL; +} + +/*! + \brief configure hardware automatically trim mode + \param[in] hardmode: + only one parameter can be selected which is shown as below: + \arg CTC_HARDWARE_TRIM_MODE_ENABLE: hardware automatically trim mode enable + \arg CTC_HARDWARE_TRIM_MODE_DISABLE: hardware automatically trim mode disable + \param[out] none + \retval none +*/ +void ctc_hardware_trim_mode_config(uint32_t hardmode) +{ + CTC_CTL0 &= (uint32_t)(~CTC_CTL0_AUTOTRIM); + CTC_CTL0 |= (uint32_t)hardmode; +} + +/*! + \brief configure reference signal source polarity + \param[in] polarity: + only one parameter can be selected which is shown as below: + \arg CTC_REFSOURCE_POLARITY_FALLING: reference signal source polarity is falling edge + \arg CTC_REFSOURCE_POLARITY_RISING: reference signal source polarity is rising edge + \param[out] none + \retval none +*/ +void ctc_refsource_polarity_config(uint32_t polarity) +{ + CTC_CTL1 &= (uint32_t)(~CTC_CTL1_REFPOL); + CTC_CTL1 |= (uint32_t)polarity; +} + +/*! + \brief select reference signal source + \param[in] refs: + only one parameter can be selected which is shown as below: + \arg CTC_REFSOURCE_GPIO: GPIO is selected + \arg CTC_REFSOURCE_LXTAL: LXTAL is selected + \param[out] none + \retval none +*/ +void ctc_refsource_signal_select(uint32_t refs) +{ + CTC_CTL1 &= (uint32_t)(~CTC_CTL1_REFSEL); + CTC_CTL1 |= (uint32_t)refs; +} + +/*! + \brief configure reference signal source prescaler + \param[in] prescaler: + only one parameter can be selected which is shown as below: + \arg CTC_REFSOURCE_PSC_OFF: reference signal not divided + \arg CTC_REFSOURCE_PSC_DIV2: reference signal divided by 2 + \arg CTC_REFSOURCE_PSC_DIV4: reference signal divided by 4 + \arg CTC_REFSOURCE_PSC_DIV8: reference signal divided by 8 + \arg CTC_REFSOURCE_PSC_DIV16: reference signal divided by 16 + \arg CTC_REFSOURCE_PSC_DIV32: reference signal divided by 32 + \arg CTC_REFSOURCE_PSC_DIV64: reference signal divided by 64 + \arg CTC_REFSOURCE_PSC_DIV128: reference signal divided by 128 + \param[out] none + \retval none +*/ +void ctc_refsource_prescaler_config(uint32_t prescaler) +{ + CTC_CTL1 &= (uint32_t)(~CTC_CTL1_REFPSC); + CTC_CTL1 |= (uint32_t)prescaler; +} + +/*! + \brief configure clock trim base limit value + \param[in] limit_value: 8-bit clock trim base limit value + \arg 0x00 - 0xFF + \param[out] none + \retval none +*/ +void ctc_clock_limit_value_config(uint8_t limit_value) +{ + CTC_CTL1 &= (uint32_t)(~CTC_CTL1_CKLIM); + CTC_CTL1 |= (uint32_t)((uint32_t)limit_value << CTC_LIMIT_VALUE_OFFSET); +} + +/*! + \brief configure CTC counter reload value + \param[in] reload_value: 16-bit CTC counter reload value + \arg 0x0000 - 0xFFFF + \param[out] none + \retval none +*/ +void ctc_counter_reload_value_config(uint16_t reload_value) +{ + CTC_CTL1 &= (uint32_t)(~CTC_CTL1_RLVALUE); + CTC_CTL1 |= (uint32_t)reload_value; +} + +/*! + \brief read CTC counter capture value when reference sync pulse occurred + \param[in] none + \param[out] none + \retval the 16-bit CTC counter capture value +*/ +uint16_t ctc_counter_capture_value_read(void) +{ + uint16_t capture_value = 0U; + capture_value = (uint16_t)((CTC_STAT & CTC_STAT_REFCAP)>> CTC_REFCAP_OFFSET); + return (capture_value); +} + +/*! + \brief read CTC trim counter direction when reference sync pulse occurred + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET + \arg SET: CTC trim counter direction is down-counting + \arg RESET: CTC trim counter direction is up-counting +*/ +FlagStatus ctc_counter_direction_read(void) +{ + if(RESET != (CTC_STAT & CTC_STAT_REFDIR)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief read CTC counter reload value + \param[in] none + \param[out] none + \retval the 16-bit CTC counter reload value +*/ +uint16_t ctc_counter_reload_value_read(void) +{ + uint16_t reload_value = 0U; + reload_value = (uint16_t)(CTC_CTL1 & CTC_CTL1_RLVALUE); + return (reload_value); +} + +/*! + \brief read the IRC48M trim value + \param[in] none + \param[out] none + \retval the 8-bit IRC48M trim value +*/ +uint8_t ctc_irc48m_trim_value_read(void) +{ + uint8_t trim_value = 0U; + trim_value = (uint8_t)((CTC_CTL0 & CTC_CTL0_TRIMVALUE) >> CTC_TRIMVALUE_OFFSET); + return (trim_value); +} + +/*! + \brief enable the CTC interrupt + \param[in] interrupt: CTC interrupt enable + one or more parameters can be selected which are shown as below: + \arg CTC_INT_CKOK: clock trim OK interrupt enable + \arg CTC_INT_CKWARN: clock trim warning interrupt enable + \arg CTC_INT_ERR: error interrupt enable + \arg CTC_INT_EREF: expect reference interrupt enable + \param[out] none + \retval none +*/ +void ctc_interrupt_enable(uint32_t interrupt) +{ + CTC_CTL0 |= (uint32_t)interrupt; +} + +/*! + \brief disable the CTC interrupt + \param[in] interrupt: CTC interrupt enable source + one or more parameters can be selected which are shown as below: + \arg CTC_INT_CKOK: clock trim OK interrupt enable + \arg CTC_INT_CKWARN: clock trim warning interrupt enable + \arg CTC_INT_ERR: error interrupt enable + \arg CTC_INT_EREF: expect reference interrupt enable + \param[out] none + \retval none +*/ +void ctc_interrupt_disable(uint32_t interrupt) +{ + CTC_CTL0 &= (uint32_t)(~interrupt); +} + +/*! + \brief get CTC interrupt flag + \param[in] interrupt: the CTC interrupt flag + only one parameter can be selected which is shown as below: + \arg CTC_INT_FLAG_CKOK: clock trim OK interrupt + \arg CTC_INT_FLAG_CKWARN: clock trim warning interrupt + \arg CTC_INT_FLAG_ERR: error interrupt + \arg CTC_INT_FLAG_EREF: expect reference interrupt + \arg CTC_INT_FLAG_CKERR: clock trim error bit interrupt + \arg CTC_INT_FLAG_REFMISS: reference sync pulse miss interrupt + \arg CTC_INT_FLAG_TRIMERR: trim value error interrupt + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus ctc_interrupt_flag_get(uint32_t interrupt) +{ + uint32_t intflag = 0U, intenable = 0U; + + /* check whether the interrupt is enabled */ + if(RESET != (interrupt & CTC_FLAG_MASK)){ + intenable = CTC_CTL0 & CTC_CTL0_ERRIE; + }else{ + intenable = CTC_CTL0 & interrupt; + } + + /* get interrupt flag status */ + intflag = CTC_STAT & interrupt; + + if(intflag && intenable){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear CTC interrupt flag + \param[in] interrupt: the CTC interrupt flag + only one parameter can be selected which is shown as below: + \arg CTC_INT_FLAG_CKOK: clock trim OK interrupt + \arg CTC_INT_FLAG_CKWARN: clock trim warning interrupt + \arg CTC_INT_FLAG_ERR: error interrupt + \arg CTC_INT_FLAG_EREF: expect reference interrupt + \arg CTC_INT_FLAG_CKERR: clock trim error bit interrupt + \arg CTC_INT_FLAG_REFMISS: reference sync pulse miss interrupt + \arg CTC_INT_FLAG_TRIMERR: trim value error interrupt + \param[out] none + \retval none +*/ +void ctc_interrupt_flag_clear(uint32_t interrupt) +{ + if(RESET != (interrupt & CTC_FLAG_MASK)){ + CTC_INTC |= CTC_INTC_ERRIC; + }else{ + CTC_INTC |= interrupt; + } +} + +/*! + \brief get CTC flag + \param[in] flag: the CTC flag + only one parameter can be selected which is shown as below: + \arg CTC_FLAG_CKOK: clock trim OK flag + \arg CTC_FLAG_CKWARN: clock trim warning flag + \arg CTC_FLAG_ERR: error flag + \arg CTC_FLAG_EREF: expect reference flag + \arg CTC_FLAG_CKERR: clock trim error bit + \arg CTC_FLAG_REFMISS: reference sync pulse miss + \arg CTC_FLAG_TRIMERR: trim value error bit + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus ctc_flag_get(uint32_t flag) +{ + if(RESET != (CTC_STAT & flag)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear CTC flag + \param[in] flag: the CTC flag + only one parameter can be selected which is shown as below: + \arg CTC_FLAG_CKOK: clock trim OK flag + \arg CTC_FLAG_CKWARN: clock trim warning flag + \arg CTC_FLAG_ERR: error flag + \arg CTC_FLAG_EREF: expect reference flag + \arg CTC_FLAG_CKERR: clock trim error bit + \arg CTC_FLAG_REFMISS: reference sync pulse miss + \arg CTC_FLAG_TRIMERR: trim value error bit + \param[out] none + \retval none +*/ +void ctc_flag_clear(uint32_t flag) +{ + if(RESET != (flag & CTC_FLAG_MASK)){ + CTC_INTC |= CTC_INTC_ERRIC; + }else{ + CTC_INTC |= flag; + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dac.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dac.c new file mode 100644 index 0000000..06b662c --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dac.c @@ -0,0 +1,539 @@ +/*! + \file gd32c10x_dac.c + \brief DAC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_dac.h" + +/* DAC register bit offset */ +#define OUT1_REG_OFFSET ((uint32_t)0x00000010U) +#define DH_12BIT_OFFSET ((uint32_t)0x00000010U) +#define DH_8BIT_OFFSET ((uint32_t)0x00000008U) + +/*! + \brief deinitialize DAC + \param[in] dac_periph: DACx(x=0) + \param[out] none + \retval none +*/ +void dac_deinit(uint32_t dac_periph) +{ + switch(dac_periph){ + case DAC0: + /* reset DAC0 */ + rcu_periph_reset_enable(RCU_DACRST); + rcu_periph_reset_disable(RCU_DACRST); + break; + default: + break; + } +} + +/*! + \brief enable DAC + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_enable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DEN0; + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DEN1; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief disable DAC + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_disable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DEN0); + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DEN1); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief enable DAC DMA function + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_dma_enable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DDMAEN0; + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DDMAEN1; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief disable DAC DMA function + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_dma_disable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DDMAEN0); + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DDMAEN1); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief enable DAC output buffer + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_output_buffer_enable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DBOFF0); + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DBOFF1); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief disable DAC output buffer + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_output_buffer_disable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DBOFF0; + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DBOFF1; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief get DAC output value + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval DAC output data: 0~4095 +*/ +uint16_t dac_output_value_get(uint32_t dac_periph, uint8_t dac_out) +{ + uint16_t data = 0U; + + if(DAC_OUT0 == dac_out){ + /* store the DACx_OUT0 output value */ + data = (uint16_t)DAC_OUT0_DO(dac_periph); + }else if(DAC_OUT1 == dac_out){ + /* store the DACx_OUT1 output value */ + data = (uint16_t)DAC_OUT1_DO(dac_periph); + }else{ + /* illegal parameters */ + } + + return data; +} + +/*! + \brief set DAC data holding register value + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[in] dac_align: DAC data alignment mode + only one parameter can be selected which is shown as below: + \arg DAC_ALIGN_12B_R: 12-bit right-aligned data + \arg DAC_ALIGN_12B_L: 12-bit left-aligned data + \arg DAC_ALIGN_8B_R: 8-bit right-aligned data + \param[in] data: data to be loaded(0~4095) + \param[out] none + \retval none +*/ +void dac_data_set(uint32_t dac_periph, uint8_t dac_out, uint32_t dac_align, uint16_t data) +{ + /* DAC_OUT0 data alignment */ + if(DAC_OUT0 == dac_out){ + switch(dac_align){ + /* 12-bit right-aligned data */ + case DAC_ALIGN_12B_R: + DAC_OUT0_R12DH(dac_periph) = data; + break; + /* 12-bit left-aligned data */ + case DAC_ALIGN_12B_L: + DAC_OUT0_L12DH(dac_periph) = data; + break; + /* 8-bit right-aligned data */ + case DAC_ALIGN_8B_R: + DAC_OUT0_R8DH(dac_periph) = data; + break; + default: + break; + } + }else if(DAC_OUT1 == dac_out){ + /* DAC_OUT1 data alignment */ + switch(dac_align){ + /* 12-bit right-aligned data */ + case DAC_ALIGN_12B_R: + DAC_OUT1_R12DH(dac_periph) = data; + break; + /* 12-bit left-aligned data */ + case DAC_ALIGN_12B_L: + DAC_OUT1_L12DH(dac_periph) = data; + break; + /* 8-bit right-aligned data */ + case DAC_ALIGN_8B_R: + DAC_OUT1_R8DH(dac_periph) = data; + break; + default: + break; + } + }else{ + /* illegal parameters */ + } +} + +/*! + \brief enable DAC trigger + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_trigger_enable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DTEN0; + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DTEN1; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief disable DAC trigger + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_trigger_disable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DTEN0); + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DTEN1); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure DAC trigger source + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[in] triggersource: external trigger of DAC + only one parameter can be selected which is shown as below: + \arg DAC_TRIGGER_T5_TRGO: TIMER5 TRGO + \arg DAC_TRIGGER_T2_TRGO: TIMER2 TRGO + \arg DAC_TRIGGER_T6_TRGO: TIMER6 TRGO + \arg DAC_TRIGGER_T4_TRGO: TIMER4 TRGO + \arg DAC_TRIGGER_T1_TRGO: TIMER1 TRGO + \arg DAC_TRIGGER_T3_TRGO: TIMER3 TRGO + \arg DAC_TRIGGER_EXTI_9: EXTI interrupt line9 event + \arg DAC_TRIGGER_SOFTWARE: software trigger + \param[out] none + \retval none +*/ +void dac_trigger_source_config(uint32_t dac_periph, uint8_t dac_out, uint32_t triggersource) +{ + if(DAC_OUT0 == dac_out){ + /* configure DACx_OUT0 trigger source */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DTSEL0); + DAC_CTL0(dac_periph) |= triggersource; + }else if(DAC_OUT1 == dac_out){ + /* configure DACx_OUT1 trigger source */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DTSEL1); + DAC_CTL0(dac_periph) |= (triggersource << OUT1_REG_OFFSET); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief enable DAC software trigger + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \retval none +*/ +void dac_software_trigger_enable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_SWT(dac_periph) |= (uint32_t)DAC_SWT_SWTR0; + }else if(DAC_OUT1 == dac_out){ + DAC_SWT(dac_periph) |= (uint32_t)DAC_SWT_SWTR1; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure DAC wave mode + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[in] wave_mode: DAC wave mode + only one parameter can be selected which is shown as below: + \arg DAC_WAVE_DISABLE: wave mode disable + \arg DAC_WAVE_MODE_LFSR: LFSR noise mode + \arg DAC_WAVE_MODE_TRIANGLE: triangle noise mode + \param[out] none + \retval none +*/ +void dac_wave_mode_config(uint32_t dac_periph, uint8_t dac_out, uint32_t wave_mode) +{ + if(DAC_OUT0 == dac_out){ + /* configure DACx_OUT0 wave mode */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DWM0); + DAC_CTL0(dac_periph) |= wave_mode; + }else if(DAC_OUT1 == dac_out){ + /* configure DACx_OUT1 wave mode */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DWM1); + DAC_CTL0(dac_periph) |= (wave_mode << OUT1_REG_OFFSET); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure DAC LFSR noise mode + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[in] unmask_bits: LFSR noise unmask bits + only one parameter can be selected which is shown as below: + \arg DAC_LFSR_BIT0: unmask the LFSR bit0 + \arg DAC_LFSR_BITS1_0: unmask the LFSR bits[1:0] + \arg DAC_LFSR_BITS2_0: unmask the LFSR bits[2:0] + \arg DAC_LFSR_BITS3_0: unmask the LFSR bits[3:0] + \arg DAC_LFSR_BITS4_0: unmask the LFSR bits[4:0] + \arg DAC_LFSR_BITS5_0: unmask the LFSR bits[5:0] + \arg DAC_LFSR_BITS6_0: unmask the LFSR bits[6:0] + \arg DAC_LFSR_BITS7_0: unmask the LFSR bits[7:0] + \arg DAC_LFSR_BITS8_0: unmask the LFSR bits[8:0] + \arg DAC_LFSR_BITS9_0: unmask the LFSR bits[9:0] + \arg DAC_LFSR_BITS10_0: unmask the LFSR bits[10:0] + \arg DAC_LFSR_BITS11_0: unmask the LFSR bits[11:0] + \param[out] none + \retval none +*/ +void dac_lfsr_noise_config(uint32_t dac_periph, uint8_t dac_out, uint32_t unmask_bits) +{ + if(DAC_OUT0 == dac_out){ + /* configure DACx_OUT0 LFSR noise mode */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DWBW0); + DAC_CTL0(dac_periph) |= unmask_bits; + }else if(DAC_OUT1 == dac_out){ + /* configure DACx_OUT1 LFSR noise mode */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DWBW1); + DAC_CTL0(dac_periph) |= (unmask_bits << OUT1_REG_OFFSET); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure DAC triangle noise mode + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[in] amplitude: the amplitude of the triangle + only one parameter can be selected which is shown as below: + \arg DAC_TRIANGLE_AMPLITUDE_1: triangle amplitude is 1 + \arg DAC_TRIANGLE_AMPLITUDE_3: triangle amplitude is 3 + \arg DAC_TRIANGLE_AMPLITUDE_7: triangle amplitude is 7 + \arg DAC_TRIANGLE_AMPLITUDE_15: triangle amplitude is 15 + \arg DAC_TRIANGLE_AMPLITUDE_31: triangle amplitude is 31 + \arg DAC_TRIANGLE_AMPLITUDE_63: triangle amplitude is 63 + \arg DAC_TRIANGLE_AMPLITUDE_127: triangle amplitude is 127 + \arg DAC_TRIANGLE_AMPLITUDE_255: triangle amplitude is 255 + \arg DAC_TRIANGLE_AMPLITUDE_511: triangle amplitude is 511 + \arg DAC_TRIANGLE_AMPLITUDE_1023: triangle amplitude is 1023 + \arg DAC_TRIANGLE_AMPLITUDE_2047: triangle amplitude is 2047 + \arg DAC_TRIANGLE_AMPLITUDE_4095: triangle amplitude is 4095 + \param[out] none + \retval none +*/ +void dac_triangle_noise_config(uint32_t dac_periph, uint8_t dac_out, uint32_t amplitude) +{ + if(DAC_OUT0 == dac_out){ + /* configure DACx_OUT0 triangle noise mode */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DWBW0); + DAC_CTL0(dac_periph) |= amplitude; + }else if(DAC_OUT1 == dac_out){ + /* configure DACx_OUT1 triangle noise mode */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DWBW1); + DAC_CTL0(dac_periph) |= (amplitude << OUT1_REG_OFFSET); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief enable DAC concurrent mode + \param[in] dac_periph: DACx(x=0) + \param[out] none + \retval none +*/ +void dac_concurrent_enable(uint32_t dac_periph) +{ + uint32_t ctl = 0U; + + ctl = (uint32_t)(DAC_CTL0_DEN0 | DAC_CTL0_DEN1); + DAC_CTL0(dac_periph) |= (uint32_t)ctl; +} + +/*! + \brief disable DAC concurrent mode + \param[in] dac_periph: DACx(x=0) + \param[out] none + \retval none +*/ +void dac_concurrent_disable(uint32_t dac_periph) +{ + uint32_t ctl = 0U; + + ctl = (uint32_t)(DAC_CTL0_DEN0 | DAC_CTL0_DEN1); + DAC_CTL0(dac_periph) &= (uint32_t)(~ctl); +} + +/*! + \brief enable DAC concurrent software trigger + \param[in] dac_periph: DACx(x=0) + \param[out] none + \retval none +*/ +void dac_concurrent_software_trigger_enable(uint32_t dac_periph) +{ + uint32_t swt = 0U; + + swt = (uint32_t)(DAC_SWT_SWTR0 | DAC_SWT_SWTR1); + DAC_SWT(dac_periph) |= (uint32_t)swt; +} + +/*! + \brief enable DAC concurrent buffer function + \param[in] dac_periph: DACx(x=0) + \param[out] none + \retval none +*/ +void dac_concurrent_output_buffer_enable(uint32_t dac_periph) +{ + uint32_t ctl = 0U; + + ctl = (uint32_t)(DAC_CTL0_DBOFF0 | DAC_CTL0_DBOFF1); + DAC_CTL0(dac_periph) &= (uint32_t)(~ctl); +} + +/*! + \brief disable DAC concurrent buffer function + \param[in] dac_periph: DACx(x=0) + \param[out] none + \retval none +*/ +void dac_concurrent_output_buffer_disable(uint32_t dac_periph) +{ + uint32_t ctl = 0U; + + ctl = (uint32_t)(DAC_CTL0_DBOFF0 | DAC_CTL0_DBOFF1); + DAC_CTL0(dac_periph) |= (uint32_t)ctl; +} + +/*! + \brief set DAC concurrent mode data holding register value + \param[in] dac_periph: DACx(x=0) + \param[in] dac_align: DAC data alignment mode + only one parameter can be selected which is shown as below: + \arg DAC_ALIGN_12B_R: 12-bit right-aligned data + \arg DAC_ALIGN_12B_L: 12-bit left-aligned data + \arg DAC_ALIGN_8B_R: 8-bit right-aligned data + \param[in] data0: data to be loaded (0~4095) + \param[in] data1: data to be loaded (0~4095) + \param[out] none + \retval none +*/ +void dac_concurrent_data_set(uint32_t dac_periph, uint32_t dac_align, uint16_t data0, uint16_t data1) +{ + uint32_t data = 0U; + + switch(dac_align){ + /* 12-bit right-aligned data */ + case DAC_ALIGN_12B_R: + data = (uint32_t)(((uint32_t)data1 << DH_12BIT_OFFSET) | data0); + DACC_R12DH(dac_periph) = (uint32_t)data; + break; + /* 12-bit left-aligned data */ + case DAC_ALIGN_12B_L: + data = (uint32_t)(((uint32_t)data1 << DH_12BIT_OFFSET) | data0); + DACC_L12DH(dac_periph) = (uint32_t)data; + break; + /* 8-bit right-aligned data */ + case DAC_ALIGN_8B_R: + data = (uint32_t)(((uint32_t)data1 << DH_8BIT_OFFSET) | data0); + DACC_R8DH(dac_periph) = (uint32_t)data; + break; + default: + break; + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dac.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dac.c.base@1.0.0 new file mode 100644 index 0000000..06b662c --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dac.c.base@1.0.0 @@ -0,0 +1,539 @@ +/*! + \file gd32c10x_dac.c + \brief DAC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_dac.h" + +/* DAC register bit offset */ +#define OUT1_REG_OFFSET ((uint32_t)0x00000010U) +#define DH_12BIT_OFFSET ((uint32_t)0x00000010U) +#define DH_8BIT_OFFSET ((uint32_t)0x00000008U) + +/*! + \brief deinitialize DAC + \param[in] dac_periph: DACx(x=0) + \param[out] none + \retval none +*/ +void dac_deinit(uint32_t dac_periph) +{ + switch(dac_periph){ + case DAC0: + /* reset DAC0 */ + rcu_periph_reset_enable(RCU_DACRST); + rcu_periph_reset_disable(RCU_DACRST); + break; + default: + break; + } +} + +/*! + \brief enable DAC + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_enable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DEN0; + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DEN1; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief disable DAC + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_disable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DEN0); + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DEN1); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief enable DAC DMA function + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_dma_enable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DDMAEN0; + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DDMAEN1; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief disable DAC DMA function + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_dma_disable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DDMAEN0); + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DDMAEN1); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief enable DAC output buffer + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_output_buffer_enable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DBOFF0); + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DBOFF1); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief disable DAC output buffer + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_output_buffer_disable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DBOFF0; + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DBOFF1; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief get DAC output value + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval DAC output data: 0~4095 +*/ +uint16_t dac_output_value_get(uint32_t dac_periph, uint8_t dac_out) +{ + uint16_t data = 0U; + + if(DAC_OUT0 == dac_out){ + /* store the DACx_OUT0 output value */ + data = (uint16_t)DAC_OUT0_DO(dac_periph); + }else if(DAC_OUT1 == dac_out){ + /* store the DACx_OUT1 output value */ + data = (uint16_t)DAC_OUT1_DO(dac_periph); + }else{ + /* illegal parameters */ + } + + return data; +} + +/*! + \brief set DAC data holding register value + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[in] dac_align: DAC data alignment mode + only one parameter can be selected which is shown as below: + \arg DAC_ALIGN_12B_R: 12-bit right-aligned data + \arg DAC_ALIGN_12B_L: 12-bit left-aligned data + \arg DAC_ALIGN_8B_R: 8-bit right-aligned data + \param[in] data: data to be loaded(0~4095) + \param[out] none + \retval none +*/ +void dac_data_set(uint32_t dac_periph, uint8_t dac_out, uint32_t dac_align, uint16_t data) +{ + /* DAC_OUT0 data alignment */ + if(DAC_OUT0 == dac_out){ + switch(dac_align){ + /* 12-bit right-aligned data */ + case DAC_ALIGN_12B_R: + DAC_OUT0_R12DH(dac_periph) = data; + break; + /* 12-bit left-aligned data */ + case DAC_ALIGN_12B_L: + DAC_OUT0_L12DH(dac_periph) = data; + break; + /* 8-bit right-aligned data */ + case DAC_ALIGN_8B_R: + DAC_OUT0_R8DH(dac_periph) = data; + break; + default: + break; + } + }else if(DAC_OUT1 == dac_out){ + /* DAC_OUT1 data alignment */ + switch(dac_align){ + /* 12-bit right-aligned data */ + case DAC_ALIGN_12B_R: + DAC_OUT1_R12DH(dac_periph) = data; + break; + /* 12-bit left-aligned data */ + case DAC_ALIGN_12B_L: + DAC_OUT1_L12DH(dac_periph) = data; + break; + /* 8-bit right-aligned data */ + case DAC_ALIGN_8B_R: + DAC_OUT1_R8DH(dac_periph) = data; + break; + default: + break; + } + }else{ + /* illegal parameters */ + } +} + +/*! + \brief enable DAC trigger + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_trigger_enable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DTEN0; + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) |= (uint32_t)DAC_CTL0_DTEN1; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief disable DAC trigger + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[out] none + \retval none +*/ +void dac_trigger_disable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DTEN0); + }else if(DAC_OUT1 == dac_out){ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DTEN1); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure DAC trigger source + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[in] triggersource: external trigger of DAC + only one parameter can be selected which is shown as below: + \arg DAC_TRIGGER_T5_TRGO: TIMER5 TRGO + \arg DAC_TRIGGER_T2_TRGO: TIMER2 TRGO + \arg DAC_TRIGGER_T6_TRGO: TIMER6 TRGO + \arg DAC_TRIGGER_T4_TRGO: TIMER4 TRGO + \arg DAC_TRIGGER_T1_TRGO: TIMER1 TRGO + \arg DAC_TRIGGER_T3_TRGO: TIMER3 TRGO + \arg DAC_TRIGGER_EXTI_9: EXTI interrupt line9 event + \arg DAC_TRIGGER_SOFTWARE: software trigger + \param[out] none + \retval none +*/ +void dac_trigger_source_config(uint32_t dac_periph, uint8_t dac_out, uint32_t triggersource) +{ + if(DAC_OUT0 == dac_out){ + /* configure DACx_OUT0 trigger source */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DTSEL0); + DAC_CTL0(dac_periph) |= triggersource; + }else if(DAC_OUT1 == dac_out){ + /* configure DACx_OUT1 trigger source */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DTSEL1); + DAC_CTL0(dac_periph) |= (triggersource << OUT1_REG_OFFSET); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief enable DAC software trigger + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \retval none +*/ +void dac_software_trigger_enable(uint32_t dac_periph, uint8_t dac_out) +{ + if(DAC_OUT0 == dac_out){ + DAC_SWT(dac_periph) |= (uint32_t)DAC_SWT_SWTR0; + }else if(DAC_OUT1 == dac_out){ + DAC_SWT(dac_periph) |= (uint32_t)DAC_SWT_SWTR1; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure DAC wave mode + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[in] wave_mode: DAC wave mode + only one parameter can be selected which is shown as below: + \arg DAC_WAVE_DISABLE: wave mode disable + \arg DAC_WAVE_MODE_LFSR: LFSR noise mode + \arg DAC_WAVE_MODE_TRIANGLE: triangle noise mode + \param[out] none + \retval none +*/ +void dac_wave_mode_config(uint32_t dac_periph, uint8_t dac_out, uint32_t wave_mode) +{ + if(DAC_OUT0 == dac_out){ + /* configure DACx_OUT0 wave mode */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DWM0); + DAC_CTL0(dac_periph) |= wave_mode; + }else if(DAC_OUT1 == dac_out){ + /* configure DACx_OUT1 wave mode */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DWM1); + DAC_CTL0(dac_periph) |= (wave_mode << OUT1_REG_OFFSET); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure DAC LFSR noise mode + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[in] unmask_bits: LFSR noise unmask bits + only one parameter can be selected which is shown as below: + \arg DAC_LFSR_BIT0: unmask the LFSR bit0 + \arg DAC_LFSR_BITS1_0: unmask the LFSR bits[1:0] + \arg DAC_LFSR_BITS2_0: unmask the LFSR bits[2:0] + \arg DAC_LFSR_BITS3_0: unmask the LFSR bits[3:0] + \arg DAC_LFSR_BITS4_0: unmask the LFSR bits[4:0] + \arg DAC_LFSR_BITS5_0: unmask the LFSR bits[5:0] + \arg DAC_LFSR_BITS6_0: unmask the LFSR bits[6:0] + \arg DAC_LFSR_BITS7_0: unmask the LFSR bits[7:0] + \arg DAC_LFSR_BITS8_0: unmask the LFSR bits[8:0] + \arg DAC_LFSR_BITS9_0: unmask the LFSR bits[9:0] + \arg DAC_LFSR_BITS10_0: unmask the LFSR bits[10:0] + \arg DAC_LFSR_BITS11_0: unmask the LFSR bits[11:0] + \param[out] none + \retval none +*/ +void dac_lfsr_noise_config(uint32_t dac_periph, uint8_t dac_out, uint32_t unmask_bits) +{ + if(DAC_OUT0 == dac_out){ + /* configure DACx_OUT0 LFSR noise mode */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DWBW0); + DAC_CTL0(dac_periph) |= unmask_bits; + }else if(DAC_OUT1 == dac_out){ + /* configure DACx_OUT1 LFSR noise mode */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DWBW1); + DAC_CTL0(dac_periph) |= (unmask_bits << OUT1_REG_OFFSET); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure DAC triangle noise mode + \param[in] dac_periph: DACx(x=0) + \param[in] dac_out: DAC_OUTx(x=0,1) + \param[in] amplitude: the amplitude of the triangle + only one parameter can be selected which is shown as below: + \arg DAC_TRIANGLE_AMPLITUDE_1: triangle amplitude is 1 + \arg DAC_TRIANGLE_AMPLITUDE_3: triangle amplitude is 3 + \arg DAC_TRIANGLE_AMPLITUDE_7: triangle amplitude is 7 + \arg DAC_TRIANGLE_AMPLITUDE_15: triangle amplitude is 15 + \arg DAC_TRIANGLE_AMPLITUDE_31: triangle amplitude is 31 + \arg DAC_TRIANGLE_AMPLITUDE_63: triangle amplitude is 63 + \arg DAC_TRIANGLE_AMPLITUDE_127: triangle amplitude is 127 + \arg DAC_TRIANGLE_AMPLITUDE_255: triangle amplitude is 255 + \arg DAC_TRIANGLE_AMPLITUDE_511: triangle amplitude is 511 + \arg DAC_TRIANGLE_AMPLITUDE_1023: triangle amplitude is 1023 + \arg DAC_TRIANGLE_AMPLITUDE_2047: triangle amplitude is 2047 + \arg DAC_TRIANGLE_AMPLITUDE_4095: triangle amplitude is 4095 + \param[out] none + \retval none +*/ +void dac_triangle_noise_config(uint32_t dac_periph, uint8_t dac_out, uint32_t amplitude) +{ + if(DAC_OUT0 == dac_out){ + /* configure DACx_OUT0 triangle noise mode */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DWBW0); + DAC_CTL0(dac_periph) |= amplitude; + }else if(DAC_OUT1 == dac_out){ + /* configure DACx_OUT1 triangle noise mode */ + DAC_CTL0(dac_periph) &= (uint32_t)(~DAC_CTL0_DWBW1); + DAC_CTL0(dac_periph) |= (amplitude << OUT1_REG_OFFSET); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief enable DAC concurrent mode + \param[in] dac_periph: DACx(x=0) + \param[out] none + \retval none +*/ +void dac_concurrent_enable(uint32_t dac_periph) +{ + uint32_t ctl = 0U; + + ctl = (uint32_t)(DAC_CTL0_DEN0 | DAC_CTL0_DEN1); + DAC_CTL0(dac_periph) |= (uint32_t)ctl; +} + +/*! + \brief disable DAC concurrent mode + \param[in] dac_periph: DACx(x=0) + \param[out] none + \retval none +*/ +void dac_concurrent_disable(uint32_t dac_periph) +{ + uint32_t ctl = 0U; + + ctl = (uint32_t)(DAC_CTL0_DEN0 | DAC_CTL0_DEN1); + DAC_CTL0(dac_periph) &= (uint32_t)(~ctl); +} + +/*! + \brief enable DAC concurrent software trigger + \param[in] dac_periph: DACx(x=0) + \param[out] none + \retval none +*/ +void dac_concurrent_software_trigger_enable(uint32_t dac_periph) +{ + uint32_t swt = 0U; + + swt = (uint32_t)(DAC_SWT_SWTR0 | DAC_SWT_SWTR1); + DAC_SWT(dac_periph) |= (uint32_t)swt; +} + +/*! + \brief enable DAC concurrent buffer function + \param[in] dac_periph: DACx(x=0) + \param[out] none + \retval none +*/ +void dac_concurrent_output_buffer_enable(uint32_t dac_periph) +{ + uint32_t ctl = 0U; + + ctl = (uint32_t)(DAC_CTL0_DBOFF0 | DAC_CTL0_DBOFF1); + DAC_CTL0(dac_periph) &= (uint32_t)(~ctl); +} + +/*! + \brief disable DAC concurrent buffer function + \param[in] dac_periph: DACx(x=0) + \param[out] none + \retval none +*/ +void dac_concurrent_output_buffer_disable(uint32_t dac_periph) +{ + uint32_t ctl = 0U; + + ctl = (uint32_t)(DAC_CTL0_DBOFF0 | DAC_CTL0_DBOFF1); + DAC_CTL0(dac_periph) |= (uint32_t)ctl; +} + +/*! + \brief set DAC concurrent mode data holding register value + \param[in] dac_periph: DACx(x=0) + \param[in] dac_align: DAC data alignment mode + only one parameter can be selected which is shown as below: + \arg DAC_ALIGN_12B_R: 12-bit right-aligned data + \arg DAC_ALIGN_12B_L: 12-bit left-aligned data + \arg DAC_ALIGN_8B_R: 8-bit right-aligned data + \param[in] data0: data to be loaded (0~4095) + \param[in] data1: data to be loaded (0~4095) + \param[out] none + \retval none +*/ +void dac_concurrent_data_set(uint32_t dac_periph, uint32_t dac_align, uint16_t data0, uint16_t data1) +{ + uint32_t data = 0U; + + switch(dac_align){ + /* 12-bit right-aligned data */ + case DAC_ALIGN_12B_R: + data = (uint32_t)(((uint32_t)data1 << DH_12BIT_OFFSET) | data0); + DACC_R12DH(dac_periph) = (uint32_t)data; + break; + /* 12-bit left-aligned data */ + case DAC_ALIGN_12B_L: + data = (uint32_t)(((uint32_t)data1 << DH_12BIT_OFFSET) | data0); + DACC_L12DH(dac_periph) = (uint32_t)data; + break; + /* 8-bit right-aligned data */ + case DAC_ALIGN_8B_R: + data = (uint32_t)(((uint32_t)data1 << DH_8BIT_OFFSET) | data0); + DACC_R8DH(dac_periph) = (uint32_t)data; + break; + default: + break; + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.c new file mode 100644 index 0000000..d241f64 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.c @@ -0,0 +1,133 @@ +/*! + \file gd32c10x_dbg.c + \brief DBG driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_dbg.h" + +/*! + \brief read DBG_ID code register + \param[in] none + \param[out] none + \retval DBG_ID code +*/ +uint32_t dbg_id_get(void) +{ + return DBG_ID; +} + +/*! + \brief enable low power behavior when the mcu is in debug mode + \param[in] dbg_low_power: + one or more parameters can be selected which are shown as below: + \arg DBG_LOW_POWER_SLEEP: keep debugger connection during sleep mode + \arg DBG_LOW_POWER_DEEPSLEEP: keep debugger connection during deepsleep mode + \arg DBG_LOW_POWER_STANDBY: keep debugger connection during standby mode + \param[out] none + \retval none +*/ +void dbg_low_power_enable(uint32_t dbg_low_power) +{ + DBG_CTL |= dbg_low_power; +} + +/*! + \brief disable low power behavior when the mcu is in debug mode + \param[in] dbg_low_power: + one or more parameters can be selected which are shown as below: + \arg DBG_LOW_POWER_SLEEP: donot keep debugger connection during sleep mode + \arg DBG_LOW_POWER_DEEPSLEEP: donot keep debugger connection during deepsleep mode + \arg DBG_LOW_POWER_STANDBY: donot keep debugger connection during standby mode + \param[out] none + \retval none +*/ +void dbg_low_power_disable(uint32_t dbg_low_power) +{ + DBG_CTL &= ~dbg_low_power; +} + +/*! + \brief enable peripheral behavior when the mcu is in debug mode + \param[in] dbg_periph: refer to dbg_periph_enum + one or more parameters can be selected which are shown as below: + \arg DBG_FWDGT_HOLD : debug FWDGT kept when core is halted + \arg DBG_WWDGT_HOLD : debug WWDGT kept when core is halted + \arg DBG_CANx_HOLD (x=0,1,CAN1 is only available for CL series): hold CANx counter when core is halted + \arg DBG_I2Cx_HOLD (x=0,1): hold I2Cx smbus when core is halted + \arg DBG_TIMERx_HOLD (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13,TIMER8..13 are not available for HD series): hold TIMERx counter when core is halted + \param[out] none + \retval none +*/ +void dbg_periph_enable(dbg_periph_enum dbg_periph) +{ + DBG_CTL |= (uint32_t)dbg_periph; +} + +/*! + \brief disable peripheral behavior when the mcu is in debug mode + \param[in] dbg_periph: refer to dbg_periph_enum + one or more parameters can be selected which are shown as below: + \arg DBG_FWDGT_HOLD : debug FWDGT kept when core is halted + \arg DBG_WWDGT_HOLD : debug WWDGT kept when core is halted + \arg DBG_CANx_HOLD (x=0,1,CAN1 is only available for CL series): hold CAN0 counter when core is halted + \arg DBG_I2Cx_HOLD (x=0,1): hold I2Cx smbus when core is halted + \arg DBG_TIMERx_HOLD (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13): hold TIMERx counter when core is halted + \param[out] none + \retval none +*/ +void dbg_periph_disable(dbg_periph_enum dbg_periph) +{ + DBG_CTL &= ~(uint32_t)dbg_periph; +} + +/*! + \brief enable trace pin assignment + \param[in] none + \param[out] none + \retval none +*/ +void dbg_trace_pin_enable(void) +{ + DBG_CTL |= DBG_CTL_TRACE_IOEN; +} + +/*! + \brief disable trace pin assignment + \param[in] none + \param[out] none + \retval none +*/ +void dbg_trace_pin_disable(void) +{ + DBG_CTL &= ~DBG_CTL_TRACE_IOEN; +} + diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.c.base@1.0.0 new file mode 100644 index 0000000..d241f64 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.c.base@1.0.0 @@ -0,0 +1,133 @@ +/*! + \file gd32c10x_dbg.c + \brief DBG driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_dbg.h" + +/*! + \brief read DBG_ID code register + \param[in] none + \param[out] none + \retval DBG_ID code +*/ +uint32_t dbg_id_get(void) +{ + return DBG_ID; +} + +/*! + \brief enable low power behavior when the mcu is in debug mode + \param[in] dbg_low_power: + one or more parameters can be selected which are shown as below: + \arg DBG_LOW_POWER_SLEEP: keep debugger connection during sleep mode + \arg DBG_LOW_POWER_DEEPSLEEP: keep debugger connection during deepsleep mode + \arg DBG_LOW_POWER_STANDBY: keep debugger connection during standby mode + \param[out] none + \retval none +*/ +void dbg_low_power_enable(uint32_t dbg_low_power) +{ + DBG_CTL |= dbg_low_power; +} + +/*! + \brief disable low power behavior when the mcu is in debug mode + \param[in] dbg_low_power: + one or more parameters can be selected which are shown as below: + \arg DBG_LOW_POWER_SLEEP: donot keep debugger connection during sleep mode + \arg DBG_LOW_POWER_DEEPSLEEP: donot keep debugger connection during deepsleep mode + \arg DBG_LOW_POWER_STANDBY: donot keep debugger connection during standby mode + \param[out] none + \retval none +*/ +void dbg_low_power_disable(uint32_t dbg_low_power) +{ + DBG_CTL &= ~dbg_low_power; +} + +/*! + \brief enable peripheral behavior when the mcu is in debug mode + \param[in] dbg_periph: refer to dbg_periph_enum + one or more parameters can be selected which are shown as below: + \arg DBG_FWDGT_HOLD : debug FWDGT kept when core is halted + \arg DBG_WWDGT_HOLD : debug WWDGT kept when core is halted + \arg DBG_CANx_HOLD (x=0,1,CAN1 is only available for CL series): hold CANx counter when core is halted + \arg DBG_I2Cx_HOLD (x=0,1): hold I2Cx smbus when core is halted + \arg DBG_TIMERx_HOLD (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13,TIMER8..13 are not available for HD series): hold TIMERx counter when core is halted + \param[out] none + \retval none +*/ +void dbg_periph_enable(dbg_periph_enum dbg_periph) +{ + DBG_CTL |= (uint32_t)dbg_periph; +} + +/*! + \brief disable peripheral behavior when the mcu is in debug mode + \param[in] dbg_periph: refer to dbg_periph_enum + one or more parameters can be selected which are shown as below: + \arg DBG_FWDGT_HOLD : debug FWDGT kept when core is halted + \arg DBG_WWDGT_HOLD : debug WWDGT kept when core is halted + \arg DBG_CANx_HOLD (x=0,1,CAN1 is only available for CL series): hold CAN0 counter when core is halted + \arg DBG_I2Cx_HOLD (x=0,1): hold I2Cx smbus when core is halted + \arg DBG_TIMERx_HOLD (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13): hold TIMERx counter when core is halted + \param[out] none + \retval none +*/ +void dbg_periph_disable(dbg_periph_enum dbg_periph) +{ + DBG_CTL &= ~(uint32_t)dbg_periph; +} + +/*! + \brief enable trace pin assignment + \param[in] none + \param[out] none + \retval none +*/ +void dbg_trace_pin_enable(void) +{ + DBG_CTL |= DBG_CTL_TRACE_IOEN; +} + +/*! + \brief disable trace pin assignment + \param[in] none + \param[out] none + \retval none +*/ +void dbg_trace_pin_disable(void) +{ + DBG_CTL &= ~DBG_CTL_TRACE_IOEN; +} + diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c new file mode 100644 index 0000000..1b083d6 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c @@ -0,0 +1,737 @@ +/*! + \file gd32c10x_dma.c + \brief DMA driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_dma.h" +#include + +#define DMA_WRONG_HANDLE while(1){} + +/* check whether peripheral matches channels or not */ +static ErrStatus dma_periph_and_channel_check(uint32_t dma_periph, dma_channel_enum channelx); + +/*! + \brief deinitialize DMA a channel registers + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel is deinitialized + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_deinit(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + /* disable the DMA channel */ + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CHEN; + /* reset DMA channel registers */ + DMA_CHCTL(dma_periph, channelx) = DMA_CHCTL_RESET_VALUE; + DMA_CHCNT(dma_periph, channelx) = DMA_CHCNT_RESET_VALUE; + DMA_CHPADDR(dma_periph, channelx) = DMA_CHPADDR_RESET_VALUE; + DMA_CHMADDR(dma_periph, channelx) = DMA_CHMADDR_RESET_VALUE; + DMA_INTC(dma_periph) |= DMA_FLAG_ADD(DMA_CHINTF_RESET_VALUE, channelx); +} + +/*! + \brief initialize the parameters of DMA struct with the default values + \param[in] init_struct: the initialization data needed to initialize DMA channel + \param[out] none + \retval none +*/ +void dma_struct_para_init(dma_parameter_struct* init_struct) +{ + if(NULL == init_struct){ + DMA_WRONG_HANDLE + } + + /* set the DMA struct with the default values */ + init_struct->periph_addr = 0U; + init_struct->periph_width = 0U; + init_struct->periph_inc = DMA_PERIPH_INCREASE_DISABLE; + init_struct->memory_addr = 0U; + init_struct->memory_width = 0U; + init_struct->memory_inc = DMA_MEMORY_INCREASE_DISABLE; + init_struct->number = 0U; + init_struct->direction = DMA_PERIPHERAL_TO_MEMORY; + init_struct->priority = DMA_PRIORITY_LOW; +} + +/*! + \brief initialize DMA channel + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel is initialized + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] init_struct: the data needed to initialize DMA channel + periph_addr: peripheral base address + periph_width: DMA_PERIPHERAL_WIDTH_8BIT, DMA_PERIPHERAL_WIDTH_16BIT, DMA_PERIPHERAL_WIDTH_32BIT + periph_inc: DMA_PERIPH_INCREASE_ENABLE, DMA_PERIPH_INCREASE_DISABLE + memory_addr: memory base address + memory_width: DMA_MEMORY_WIDTH_8BIT, DMA_MEMORY_WIDTH_16BIT, DMA_MEMORY_WIDTH_32BIT + memory_inc: DMA_MEMORY_INCREASE_ENABLE, DMA_MEMORY_INCREASE_DISABLE + direction: DMA_PERIPHERAL_TO_MEMORY, DMA_MEMORY_TO_PERIPHERAL + number: the number of remaining data to be transferred by the DMA + priority: DMA_PRIORITY_LOW, DMA_PRIORITY_MEDIUM, DMA_PRIORITY_HIGH, DMA_PRIORITY_ULTRA_HIGH + \param[out] none + \retval none +*/ +void dma_init(uint32_t dma_periph, dma_channel_enum channelx, dma_parameter_struct* init_struct) +{ + uint32_t ctl; + + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + /* configure peripheral base address */ + DMA_CHPADDR(dma_periph, channelx) = init_struct->periph_addr; + + /* configure memory base address */ + DMA_CHMADDR(dma_periph, channelx) = init_struct->memory_addr; + + /* configure the number of remaining data to be transferred */ + DMA_CHCNT(dma_periph, channelx) = (init_struct->number & DMA_CHANNEL_CNT_MASK); + + /* configure peripheral transfer width,memory transfer width and priority */ + ctl = DMA_CHCTL(dma_periph, channelx); + ctl &= ~(DMA_CHXCTL_PWIDTH | DMA_CHXCTL_MWIDTH | DMA_CHXCTL_PRIO); + ctl |= (init_struct->periph_width | init_struct->memory_width | init_struct->priority); + DMA_CHCTL(dma_periph, channelx) = ctl; + + /* configure peripheral increasing mode */ + if(DMA_PERIPH_INCREASE_ENABLE == init_struct->periph_inc){ + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_PNAGA; + }else{ + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_PNAGA; + } + + /* configure memory increasing mode */ + if(DMA_MEMORY_INCREASE_ENABLE == init_struct->memory_inc){ + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_MNAGA; + }else{ + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_MNAGA; + } + + /* configure the direction of data transfer */ + if(DMA_PERIPHERAL_TO_MEMORY == init_struct->direction){ + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_DIR; + }else{ + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_DIR; + } +} + +/*! + \brief enable DMA circulation mode + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_circulation_enable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_CMEN; +} + +/*! + \brief disable DMA circulation mode + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_circulation_disable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CMEN; +} + +/*! + \brief enable memory to memory mode + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_memory_to_memory_enable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_M2M; +} + +/*! + \brief disable memory to memory mode + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_memory_to_memory_disable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_M2M; +} + +/*! + \brief enable DMA channel + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_channel_enable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_CHEN; +} + +/*! + \brief disable DMA channel + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_channel_disable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CHEN; +} + +/*! + \brief set DMA peripheral base address + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] address: peripheral base address + \param[out] none + \retval none +*/ +void dma_periph_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHPADDR(dma_periph, channelx) = address; +} + +/*! + \brief set DMA memory base address + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] address: memory base address + \param[out] none + \retval none +*/ +void dma_memory_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHMADDR(dma_periph, channelx) = address; +} + +/*! + \brief set the number of remaining data to be transferred by the DMA + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] number: the number of remaining data to be transferred by the DMA + \arg 0x0000-0xFFFF + \param[out] none + \retval none +*/ +void dma_transfer_number_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t number) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCNT(dma_periph, channelx) = (number & DMA_CHANNEL_CNT_MASK); +} + +/*! + \brief get the number of remaining data to be transferred by the DMA + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval uint32_t: the number of remaining data to be transferred by the DMA +*/ +uint32_t dma_transfer_number_get(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + return (uint32_t)DMA_CHCNT(dma_periph, channelx); +} + +/*! + \brief configure priority level of DMA channel + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] priority: priority level of this channel + only one parameter can be selected which is shown as below: + \arg DMA_PRIORITY_LOW: low priority + \arg DMA_PRIORITY_MEDIUM: medium priority + \arg DMA_PRIORITY_HIGH: high priority + \arg DMA_PRIORITY_ULTRA_HIGH: ultra high priority + \param[out] none + \retval none +*/ +void dma_priority_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t priority) +{ + uint32_t ctl; + + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + /* acquire DMA_CHxCTL register */ + ctl = DMA_CHCTL(dma_periph, channelx); + /* assign register */ + ctl &= ~DMA_CHXCTL_PRIO; + ctl |= priority; + DMA_CHCTL(dma_periph, channelx) = ctl; +} + +/*! + \brief configure transfer data size of memory + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] mwidth: transfer data width of memory + only one parameter can be selected which is shown as below: + \arg DMA_MEMORY_WIDTH_8BIT: transfer data width of memory is 8-bit + \arg DMA_MEMORY_WIDTH_16BIT: transfer data width of memory is 16-bit + \arg DMA_MEMORY_WIDTH_32BIT: transfer data width of memory is 32-bit + \param[out] none + \retval none +*/ +void dma_memory_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t mwidth) +{ + uint32_t ctl; + + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + /* acquire DMA_CHxCTL register */ + ctl = DMA_CHCTL(dma_periph, channelx); + /* assign register */ + ctl &= ~DMA_CHXCTL_MWIDTH; + ctl |= mwidth; + DMA_CHCTL(dma_periph, channelx) = ctl; +} + +/*! + \brief configure transfer data size of peripheral + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] pwidth: transfer data width of peripheral + only one parameter can be selected which is shown as below: + \arg DMA_PERIPHERAL_WIDTH_8BIT: transfer data width of peripheral is 8-bit + \arg DMA_PERIPHERAL_WIDTH_16BIT: transfer data width of peripheral is 16-bit + \arg DMA_PERIPHERAL_WIDTH_32BIT: transfer data width of peripheral is 32-bit + \param[out] none + \retval none +*/ +void dma_periph_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t pwidth) +{ + uint32_t ctl; + + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + /* acquire DMA_CHxCTL register */ + ctl = DMA_CHCTL(dma_periph, channelx); + /* assign register */ + ctl &= ~DMA_CHXCTL_PWIDTH; + ctl |= pwidth; + DMA_CHCTL(dma_periph, channelx) = ctl; +} + +/*! + \brief enable next address increment algorithm of memory + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_memory_increase_enable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_MNAGA; +} + +/*! + \brief disable next address increment algorithm of memory + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_memory_increase_disable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_MNAGA; +} + +/*! + \brief enable next address increment algorithm of peripheral + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_periph_increase_enable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_PNAGA; +} + +/*! + \brief disable next address increment algorithm of peripheral + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_periph_increase_disable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_PNAGA; +} + +/*! + \brief configure the direction of data transfer on the channel + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] direction: specify the direction of data transfer + only one parameter can be selected which is shown as below: + \arg DMA_PERIPHERAL_TO_MEMORY: read from peripheral and write to memory + \arg DMA_MEMORY_TO_PERIPHERAL: read from memory and write to peripheral + \param[out] none + \retval none +*/ +void dma_transfer_direction_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t direction) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + if(DMA_PERIPHERAL_TO_MEMORY == direction){ + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_DIR; + } else { + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_DIR; + } +} + +/*! + \brief check DMA flag is set or not + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel to get flag + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] flag: specify get which flag + only one parameter can be selected which is shown as below: + \arg DMA_FLAG_G: global interrupt flag of channel + \arg DMA_FLAG_FTF: full transfer finish flag of channel + \arg DMA_FLAG_HTF: half transfer finish flag of channel + \arg DMA_FLAG_ERR: error flag of channel + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus dma_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) +{ + FlagStatus reval; + + /* check whether the flag is set or not */ + if(RESET != (DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx))){ + reval = SET; + }else{ + reval = RESET; + } + + return reval; +} + +/*! + \brief clear the flag of a DMA channel + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel to clear flag + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] flag: specify get which flag + only one parameter can be selected which is shown as below: + \arg DMA_FLAG_G: global interrupt flag of channel + \arg DMA_FLAG_FTF: full transfer finish flag of channel + \arg DMA_FLAG_HTF: half transfer finish flag of channel + \arg DMA_FLAG_ERR: error flag of channel + \param[out] none + \retval none +*/ +void dma_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) +{ + DMA_INTC(dma_periph) |= DMA_FLAG_ADD(flag, channelx); +} + +/*! + \brief check DMA flag and interrupt enable bit is set or not + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel to get flag + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] flag: specify get which flag + only one parameter can be selected which is shown as below: + \arg DMA_INT_FLAG_FTF: full transfer finish interrupt flag of channel + \arg DMA_INT_FLAG_HTF: half transfer finish interrupt flag of channel + \arg DMA_INT_FLAG_ERR: error interrupt flag of channel + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus dma_interrupt_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) +{ + uint32_t interrupt_enable = 0U, interrupt_flag = 0U; + + switch(flag){ + case DMA_INT_FLAG_FTF: + /* check whether the full transfer finish interrupt flag is set and enabled */ + interrupt_flag = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx); + interrupt_enable = DMA_CHCTL(dma_periph, channelx) & DMA_CHXCTL_FTFIE; + break; + case DMA_INT_FLAG_HTF: + /* check whether the half transfer finish interrupt flag is set and enabled */ + interrupt_flag = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx); + interrupt_enable = DMA_CHCTL(dma_periph, channelx) & DMA_CHXCTL_HTFIE; + break; + case DMA_INT_FLAG_ERR: + /* check whether the error interrupt flag is set and enabled */ + interrupt_flag = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx); + interrupt_enable = DMA_CHCTL(dma_periph, channelx) & DMA_CHXCTL_ERRIE; + break; + default: + DMA_WRONG_HANDLE + } + + /* when the interrupt flag is set and enabled, return SET */ + if((0U != interrupt_flag) && (0U != interrupt_enable)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear the interrupt flag of a DMA channel + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] flag: specify get which flag + only one parameter can be selected which is shown as below: + \arg DMA_INT_FLAG_G: global interrupt flag of channel + \arg DMA_INT_FLAG_FTF: full transfer finish interrupt flag of channel + \arg DMA_INT_FLAG_HTF: half transfer finish interrupt flag of channel + \arg DMA_INT_FLAG_ERR: error interrupt flag of channel + \param[out] none + \retval none +*/ +void dma_interrupt_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) +{ + DMA_INTC(dma_periph) |= DMA_FLAG_ADD(flag, channelx); +} + +/*! + \brief enable DMA interrupt + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] source: specify which interrupt to enable + one or more parameters can be selected which are shown as below + \arg DMA_INT_FTF: channel full transfer finish interrupt + \arg DMA_INT_HTF: channel half transfer finish interrupt + \arg DMA_INT_ERR: channel error interrupt + \param[out] none + \retval none +*/ +void dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) |= source; +} + +/*! + \brief disable DMA interrupt + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] source: specify which interrupt to disable + one or more parameters can be selected which are shown as below + \arg DMA_INT_FTF: channel full transfer finish interrupt + \arg DMA_INT_HTF: channel half transfer finish interrupt + \arg DMA_INT_ERR: channel error interrupt + \param[out] none + \retval none +*/ +void dma_interrupt_disable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) &= ~source; +} + +/*! + \brief check whether peripheral matches channels or not + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA_CHx(x=0..6) + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +static ErrStatus dma_periph_and_channel_check(uint32_t dma_periph, dma_channel_enum channelx) +{ + ErrStatus val = SUCCESS; + + if(DMA1 == dma_periph){ + /* for DMA1, the channel is from DMA_CH0 to DMA_CH4 */ + if(channelx > DMA_CH4){ + val = ERROR; + } + } + + return val; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c.base@1.0.0 new file mode 100644 index 0000000..1b083d6 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c.base@1.0.0 @@ -0,0 +1,737 @@ +/*! + \file gd32c10x_dma.c + \brief DMA driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_dma.h" +#include + +#define DMA_WRONG_HANDLE while(1){} + +/* check whether peripheral matches channels or not */ +static ErrStatus dma_periph_and_channel_check(uint32_t dma_periph, dma_channel_enum channelx); + +/*! + \brief deinitialize DMA a channel registers + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel is deinitialized + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_deinit(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + /* disable the DMA channel */ + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CHEN; + /* reset DMA channel registers */ + DMA_CHCTL(dma_periph, channelx) = DMA_CHCTL_RESET_VALUE; + DMA_CHCNT(dma_periph, channelx) = DMA_CHCNT_RESET_VALUE; + DMA_CHPADDR(dma_periph, channelx) = DMA_CHPADDR_RESET_VALUE; + DMA_CHMADDR(dma_periph, channelx) = DMA_CHMADDR_RESET_VALUE; + DMA_INTC(dma_periph) |= DMA_FLAG_ADD(DMA_CHINTF_RESET_VALUE, channelx); +} + +/*! + \brief initialize the parameters of DMA struct with the default values + \param[in] init_struct: the initialization data needed to initialize DMA channel + \param[out] none + \retval none +*/ +void dma_struct_para_init(dma_parameter_struct* init_struct) +{ + if(NULL == init_struct){ + DMA_WRONG_HANDLE + } + + /* set the DMA struct with the default values */ + init_struct->periph_addr = 0U; + init_struct->periph_width = 0U; + init_struct->periph_inc = DMA_PERIPH_INCREASE_DISABLE; + init_struct->memory_addr = 0U; + init_struct->memory_width = 0U; + init_struct->memory_inc = DMA_MEMORY_INCREASE_DISABLE; + init_struct->number = 0U; + init_struct->direction = DMA_PERIPHERAL_TO_MEMORY; + init_struct->priority = DMA_PRIORITY_LOW; +} + +/*! + \brief initialize DMA channel + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel is initialized + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] init_struct: the data needed to initialize DMA channel + periph_addr: peripheral base address + periph_width: DMA_PERIPHERAL_WIDTH_8BIT, DMA_PERIPHERAL_WIDTH_16BIT, DMA_PERIPHERAL_WIDTH_32BIT + periph_inc: DMA_PERIPH_INCREASE_ENABLE, DMA_PERIPH_INCREASE_DISABLE + memory_addr: memory base address + memory_width: DMA_MEMORY_WIDTH_8BIT, DMA_MEMORY_WIDTH_16BIT, DMA_MEMORY_WIDTH_32BIT + memory_inc: DMA_MEMORY_INCREASE_ENABLE, DMA_MEMORY_INCREASE_DISABLE + direction: DMA_PERIPHERAL_TO_MEMORY, DMA_MEMORY_TO_PERIPHERAL + number: the number of remaining data to be transferred by the DMA + priority: DMA_PRIORITY_LOW, DMA_PRIORITY_MEDIUM, DMA_PRIORITY_HIGH, DMA_PRIORITY_ULTRA_HIGH + \param[out] none + \retval none +*/ +void dma_init(uint32_t dma_periph, dma_channel_enum channelx, dma_parameter_struct* init_struct) +{ + uint32_t ctl; + + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + /* configure peripheral base address */ + DMA_CHPADDR(dma_periph, channelx) = init_struct->periph_addr; + + /* configure memory base address */ + DMA_CHMADDR(dma_periph, channelx) = init_struct->memory_addr; + + /* configure the number of remaining data to be transferred */ + DMA_CHCNT(dma_periph, channelx) = (init_struct->number & DMA_CHANNEL_CNT_MASK); + + /* configure peripheral transfer width,memory transfer width and priority */ + ctl = DMA_CHCTL(dma_periph, channelx); + ctl &= ~(DMA_CHXCTL_PWIDTH | DMA_CHXCTL_MWIDTH | DMA_CHXCTL_PRIO); + ctl |= (init_struct->periph_width | init_struct->memory_width | init_struct->priority); + DMA_CHCTL(dma_periph, channelx) = ctl; + + /* configure peripheral increasing mode */ + if(DMA_PERIPH_INCREASE_ENABLE == init_struct->periph_inc){ + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_PNAGA; + }else{ + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_PNAGA; + } + + /* configure memory increasing mode */ + if(DMA_MEMORY_INCREASE_ENABLE == init_struct->memory_inc){ + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_MNAGA; + }else{ + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_MNAGA; + } + + /* configure the direction of data transfer */ + if(DMA_PERIPHERAL_TO_MEMORY == init_struct->direction){ + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_DIR; + }else{ + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_DIR; + } +} + +/*! + \brief enable DMA circulation mode + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_circulation_enable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_CMEN; +} + +/*! + \brief disable DMA circulation mode + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_circulation_disable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CMEN; +} + +/*! + \brief enable memory to memory mode + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_memory_to_memory_enable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_M2M; +} + +/*! + \brief disable memory to memory mode + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_memory_to_memory_disable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_M2M; +} + +/*! + \brief enable DMA channel + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_channel_enable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_CHEN; +} + +/*! + \brief disable DMA channel + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_channel_disable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CHEN; +} + +/*! + \brief set DMA peripheral base address + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] address: peripheral base address + \param[out] none + \retval none +*/ +void dma_periph_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHPADDR(dma_periph, channelx) = address; +} + +/*! + \brief set DMA memory base address + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] address: memory base address + \param[out] none + \retval none +*/ +void dma_memory_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHMADDR(dma_periph, channelx) = address; +} + +/*! + \brief set the number of remaining data to be transferred by the DMA + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] number: the number of remaining data to be transferred by the DMA + \arg 0x0000-0xFFFF + \param[out] none + \retval none +*/ +void dma_transfer_number_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t number) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCNT(dma_periph, channelx) = (number & DMA_CHANNEL_CNT_MASK); +} + +/*! + \brief get the number of remaining data to be transferred by the DMA + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval uint32_t: the number of remaining data to be transferred by the DMA +*/ +uint32_t dma_transfer_number_get(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + return (uint32_t)DMA_CHCNT(dma_periph, channelx); +} + +/*! + \brief configure priority level of DMA channel + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] priority: priority level of this channel + only one parameter can be selected which is shown as below: + \arg DMA_PRIORITY_LOW: low priority + \arg DMA_PRIORITY_MEDIUM: medium priority + \arg DMA_PRIORITY_HIGH: high priority + \arg DMA_PRIORITY_ULTRA_HIGH: ultra high priority + \param[out] none + \retval none +*/ +void dma_priority_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t priority) +{ + uint32_t ctl; + + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + /* acquire DMA_CHxCTL register */ + ctl = DMA_CHCTL(dma_periph, channelx); + /* assign register */ + ctl &= ~DMA_CHXCTL_PRIO; + ctl |= priority; + DMA_CHCTL(dma_periph, channelx) = ctl; +} + +/*! + \brief configure transfer data size of memory + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] mwidth: transfer data width of memory + only one parameter can be selected which is shown as below: + \arg DMA_MEMORY_WIDTH_8BIT: transfer data width of memory is 8-bit + \arg DMA_MEMORY_WIDTH_16BIT: transfer data width of memory is 16-bit + \arg DMA_MEMORY_WIDTH_32BIT: transfer data width of memory is 32-bit + \param[out] none + \retval none +*/ +void dma_memory_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t mwidth) +{ + uint32_t ctl; + + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + /* acquire DMA_CHxCTL register */ + ctl = DMA_CHCTL(dma_periph, channelx); + /* assign register */ + ctl &= ~DMA_CHXCTL_MWIDTH; + ctl |= mwidth; + DMA_CHCTL(dma_periph, channelx) = ctl; +} + +/*! + \brief configure transfer data size of peripheral + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] pwidth: transfer data width of peripheral + only one parameter can be selected which is shown as below: + \arg DMA_PERIPHERAL_WIDTH_8BIT: transfer data width of peripheral is 8-bit + \arg DMA_PERIPHERAL_WIDTH_16BIT: transfer data width of peripheral is 16-bit + \arg DMA_PERIPHERAL_WIDTH_32BIT: transfer data width of peripheral is 32-bit + \param[out] none + \retval none +*/ +void dma_periph_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t pwidth) +{ + uint32_t ctl; + + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + /* acquire DMA_CHxCTL register */ + ctl = DMA_CHCTL(dma_periph, channelx); + /* assign register */ + ctl &= ~DMA_CHXCTL_PWIDTH; + ctl |= pwidth; + DMA_CHCTL(dma_periph, channelx) = ctl; +} + +/*! + \brief enable next address increment algorithm of memory + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_memory_increase_enable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_MNAGA; +} + +/*! + \brief disable next address increment algorithm of memory + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_memory_increase_disable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_MNAGA; +} + +/*! + \brief enable next address increment algorithm of peripheral + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_periph_increase_enable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_PNAGA; +} + +/*! + \brief disable next address increment algorithm of peripheral + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[out] none + \retval none +*/ +void dma_periph_increase_disable(uint32_t dma_periph, dma_channel_enum channelx) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_PNAGA; +} + +/*! + \brief configure the direction of data transfer on the channel + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] direction: specify the direction of data transfer + only one parameter can be selected which is shown as below: + \arg DMA_PERIPHERAL_TO_MEMORY: read from peripheral and write to memory + \arg DMA_MEMORY_TO_PERIPHERAL: read from memory and write to peripheral + \param[out] none + \retval none +*/ +void dma_transfer_direction_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t direction) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + if(DMA_PERIPHERAL_TO_MEMORY == direction){ + DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_DIR; + } else { + DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_DIR; + } +} + +/*! + \brief check DMA flag is set or not + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel to get flag + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] flag: specify get which flag + only one parameter can be selected which is shown as below: + \arg DMA_FLAG_G: global interrupt flag of channel + \arg DMA_FLAG_FTF: full transfer finish flag of channel + \arg DMA_FLAG_HTF: half transfer finish flag of channel + \arg DMA_FLAG_ERR: error flag of channel + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus dma_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) +{ + FlagStatus reval; + + /* check whether the flag is set or not */ + if(RESET != (DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx))){ + reval = SET; + }else{ + reval = RESET; + } + + return reval; +} + +/*! + \brief clear the flag of a DMA channel + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel to clear flag + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] flag: specify get which flag + only one parameter can be selected which is shown as below: + \arg DMA_FLAG_G: global interrupt flag of channel + \arg DMA_FLAG_FTF: full transfer finish flag of channel + \arg DMA_FLAG_HTF: half transfer finish flag of channel + \arg DMA_FLAG_ERR: error flag of channel + \param[out] none + \retval none +*/ +void dma_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) +{ + DMA_INTC(dma_periph) |= DMA_FLAG_ADD(flag, channelx); +} + +/*! + \brief check DMA flag and interrupt enable bit is set or not + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel to get flag + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] flag: specify get which flag + only one parameter can be selected which is shown as below: + \arg DMA_INT_FLAG_FTF: full transfer finish interrupt flag of channel + \arg DMA_INT_FLAG_HTF: half transfer finish interrupt flag of channel + \arg DMA_INT_FLAG_ERR: error interrupt flag of channel + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus dma_interrupt_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) +{ + uint32_t interrupt_enable = 0U, interrupt_flag = 0U; + + switch(flag){ + case DMA_INT_FLAG_FTF: + /* check whether the full transfer finish interrupt flag is set and enabled */ + interrupt_flag = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx); + interrupt_enable = DMA_CHCTL(dma_periph, channelx) & DMA_CHXCTL_FTFIE; + break; + case DMA_INT_FLAG_HTF: + /* check whether the half transfer finish interrupt flag is set and enabled */ + interrupt_flag = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx); + interrupt_enable = DMA_CHCTL(dma_periph, channelx) & DMA_CHXCTL_HTFIE; + break; + case DMA_INT_FLAG_ERR: + /* check whether the error interrupt flag is set and enabled */ + interrupt_flag = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, channelx); + interrupt_enable = DMA_CHCTL(dma_periph, channelx) & DMA_CHXCTL_ERRIE; + break; + default: + DMA_WRONG_HANDLE + } + + /* when the interrupt flag is set and enabled, return SET */ + if((0U != interrupt_flag) && (0U != interrupt_enable)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear the interrupt flag of a DMA channel + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] flag: specify get which flag + only one parameter can be selected which is shown as below: + \arg DMA_INT_FLAG_G: global interrupt flag of channel + \arg DMA_INT_FLAG_FTF: full transfer finish interrupt flag of channel + \arg DMA_INT_FLAG_HTF: half transfer finish interrupt flag of channel + \arg DMA_INT_FLAG_ERR: error interrupt flag of channel + \param[out] none + \retval none +*/ +void dma_interrupt_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) +{ + DMA_INTC(dma_periph) |= DMA_FLAG_ADD(flag, channelx); +} + +/*! + \brief enable DMA interrupt + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] source: specify which interrupt to enable + one or more parameters can be selected which are shown as below + \arg DMA_INT_FTF: channel full transfer finish interrupt + \arg DMA_INT_HTF: channel half transfer finish interrupt + \arg DMA_INT_ERR: channel error interrupt + \param[out] none + \retval none +*/ +void dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) |= source; +} + +/*! + \brief disable DMA interrupt + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4) + \param[in] source: specify which interrupt to disable + one or more parameters can be selected which are shown as below + \arg DMA_INT_FTF: channel full transfer finish interrupt + \arg DMA_INT_HTF: channel half transfer finish interrupt + \arg DMA_INT_ERR: channel error interrupt + \param[out] none + \retval none +*/ +void dma_interrupt_disable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source) +{ + if(ERROR == dma_periph_and_channel_check(dma_periph, channelx)){ + DMA_WRONG_HANDLE + } + + DMA_CHCTL(dma_periph, channelx) &= ~source; +} + +/*! + \brief check whether peripheral matches channels or not + \param[in] dma_periph: DMAx(x=0,1) + \arg DMAx(x=0,1) + \param[in] channelx: specified DMA channel + only one parameter can be selected which is shown as below: + \arg DMA_CHx(x=0..6) + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +static ErrStatus dma_periph_and_channel_check(uint32_t dma_periph, dma_channel_enum channelx) +{ + ErrStatus val = SUCCESS; + + if(DMA1 == dma_periph){ + /* for DMA1, the channel is from DMA_CH0 to DMA_CH4 */ + if(channelx > DMA_CH4){ + val = ERROR; + } + } + + return val; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.c new file mode 100644 index 0000000..0bc0f94 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.c @@ -0,0 +1,222 @@ +/*! + \file gd32c10x_eval.c + \brief firmware functions to manage leds, keys, COM ports + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_eval.h" + +/* private variables */ +static uint32_t GPIO_PORT[LED_MAX] = {LED1_GPIO_PORT, LED2_GPIO_PORT, + LED3_GPIO_PORT, LED4_GPIO_PORT}; +static uint32_t GPIO_PIN[LED_MAX] = {LED1_PIN, LED2_PIN, LED3_PIN, LED4_PIN}; + +static rcu_periph_enum COM_CLK[COMn] = {EVAL_COM0_CLK, EVAL_COM1_CLK}; +static uint32_t COM_TX_PIN[COMn] = {EVAL_COM0_TX_PIN, EVAL_COM1_TX_PIN}; +static uint32_t COM_RX_PIN[COMn] = {EVAL_COM0_RX_PIN, EVAL_COM1_RX_PIN}; +static uint32_t COM_GPIO_PORT[COMn] = {EVAL_COM0_GPIO_PORT, EVAL_COM1_GPIO_PORT}; +static rcu_periph_enum COM_GPIO_CLK[COMn] = {EVAL_COM0_GPIO_CLK, EVAL_COM1_GPIO_CLK}; + +static rcu_periph_enum GPIO_CLK[LED_MAX] = {LED1_GPIO_CLK, LED2_GPIO_CLK, + LED3_GPIO_CLK, LED4_GPIO_CLK}; + +static uint32_t KEY_PORT[KEY_MAX] = {WAKEUP_KEY_GPIO_PORT, + TAMPER_KEY_GPIO_PORT, + USER_KEY_GPIO_PORT}; +static uint32_t KEY_PIN[KEY_MAX] = {WAKEUP_KEY_PIN, TAMPER_KEY_PIN,USER_KEY_PIN,}; +static rcu_periph_enum KEY_CLK[KEY_MAX] = {WAKEUP_KEY_GPIO_CLK, + TAMPER_KEY_GPIO_CLK, + USER_KEY_GPIO_CLK}; +static exti_line_enum KEY_EXTI_LINE[KEY_MAX] = {WAKEUP_KEY_EXTI_LINE, + TAMPER_KEY_EXTI_LINE, + USER_KEY_EXTI_LINE}; +static uint8_t KEY_PORT_SOURCE[KEY_MAX] = {WAKEUP_KEY_EXTI_PORT_SOURCE, + TAMPER_KEY_EXTI_PORT_SOURCE, + USER_KEY_EXTI_PORT_SOURCE}; +static uint8_t KEY_PIN_SOURCE[KEY_MAX] = {WAKEUP_KEY_EXTI_PIN_SOURCE, + TAMPER_KEY_EXTI_PIN_SOURCE, + USER_KEY_EXTI_PIN_SOURCE}; +static IRQn_Type KEY_IRQn[KEY_MAX] = {WAKEUP_KEY_EXTI_IRQn, + TAMPER_KEY_EXTI_IRQn, + USER_KEY_EXTI_IRQn}; + +/*! + \brief configure led GPIO + \param[in] lednum: specify the led to be configured + \arg LED1 + \arg LED2 + \arg LED3 + \arg LED4 + \param[out] none + \retval none +*/ +void gd_eval_led_init (led_typedef_enum lednum) +{ + /* enable the led clock */ + rcu_periph_clock_enable(GPIO_CLK[lednum]); + /* configure led GPIO port */ + gpio_init(GPIO_PORT[lednum], GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN[lednum]); + + GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum]; +} + +/*! + \brief turn on selected led + \param[in] lednum: specify the led to be turned on + \arg LED1 + \arg LED2 + \arg LED3 + \arg LED4 + \param[out] none + \retval none +*/ +void gd_eval_led_on(led_typedef_enum lednum) +{ + GPIO_BOP(GPIO_PORT[lednum]) = GPIO_PIN[lednum]; +} + +/*! + \brief turn off selected led + \param[in] lednum: specify the led to be turned off + \arg LED1 + \arg LED2 + \arg LED3 + \arg LED4 + \param[out] none + \retval none +*/ +void gd_eval_led_off(led_typedef_enum lednum) +{ + GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum]; +} + +/*! + \brief toggle selected led + \param[in] lednum: specify the led to be toggled + \arg LED1 + \arg LED2 + \arg LED3 + \arg LED4 + \param[out] none + \retval none +*/ +void gd_eval_led_toggle(led_typedef_enum lednum) +{ + gpio_bit_write(GPIO_PORT[lednum], GPIO_PIN[lednum], + (bit_status)(1-gpio_input_bit_get(GPIO_PORT[lednum], GPIO_PIN[lednum]))); +} + +/*! + \brief configure key + \param[in] key_num: specify the key to be configured + \arg KEY_TAMPER: tamper key + \arg KEY_WAKEUP: wakeup key + \arg KEY_USER: user key + \param[in] key_mode: specify button mode + \arg KEY_MODE_GPIO: key will be used as simple IO + \arg KEY_MODE_EXTI: key will be connected to EXTI line with interrupt + \param[out] none + \retval none +*/ +void gd_eval_key_init(key_typedef_enum key_num, keymode_typedef_enum key_mode) +{ + /* enable the key clock */ + rcu_periph_clock_enable(KEY_CLK[key_num]); + rcu_periph_clock_enable(RCU_AF); + + /* configure button pin as input */ + gpio_init(KEY_PORT[key_num], GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, KEY_PIN[key_num]); + + if (key_mode == KEY_MODE_EXTI) { + /* enable and set key EXTI interrupt to the lowest priority */ + nvic_irq_enable(KEY_IRQn[key_num], 2U, 0U); + + /* connect key EXTI line to key GPIO pin */ + gpio_exti_source_select(KEY_PORT_SOURCE[key_num], KEY_PIN_SOURCE[key_num]); + + /* configure key EXTI line */ + exti_init(KEY_EXTI_LINE[key_num], EXTI_INTERRUPT, EXTI_TRIG_FALLING); + exti_interrupt_flag_clear(KEY_EXTI_LINE[key_num]); + } +} + +/*! + \brief return the selected key state + \param[in] key: specify the key to be checked + \arg KEY_TAMPER: tamper key + \arg KEY_WAKEUP: wakeup key + \arg KEY_USER: user key + \param[out] none + \retval the key's GPIO pin value +*/ +uint8_t gd_eval_key_state_get(key_typedef_enum key) +{ + return gpio_input_bit_get(KEY_PORT[key], KEY_PIN[key]); +} + +/*! + \brief configure COM port + \param[in] com: COM on the board + \arg EVAL_COM0: COM0 on the board + \arg EVAL_COM1: COM1 on the board + \param[out] none + \retval none +*/ +void gd_eval_com_init(uint32_t com) +{ + uint32_t com_id = 0U; + if(EVAL_COM0 == com){ + com_id = 0U; + }else if(EVAL_COM1 == com){ + com_id = 1U; + }else{ + com_id = 2U; + } + + /* enable GPIO clock */ + rcu_periph_clock_enable(COM_GPIO_CLK[com_id]); + + /* enable USART clock */ + rcu_periph_clock_enable(COM_CLK[com_id]); + + /* connect port to USARTx_Tx */ + gpio_init(COM_GPIO_PORT[com_id], GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, COM_TX_PIN[com_id]); + + /* connect port to USARTx_Rx */ + gpio_init(COM_GPIO_PORT[com_id], GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, COM_RX_PIN[com_id]); + + /* USART configure */ + usart_deinit(com); + usart_baudrate_set(com, 3000000U); + usart_receive_config(com, USART_RECEIVE_ENABLE); + usart_transmit_config(com, USART_TRANSMIT_ENABLE); + usart_enable(com); +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.c.base@1.0.0 new file mode 100644 index 0000000..079f63e --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.c.base@1.0.0 @@ -0,0 +1,222 @@ +/*! + \file gd32c10x_eval.c + \brief firmware functions to manage leds, keys, COM ports + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_eval.h" + +/* private variables */ +static uint32_t GPIO_PORT[LED_MAX] = {LED1_GPIO_PORT, LED2_GPIO_PORT, + LED3_GPIO_PORT, LED4_GPIO_PORT}; +static uint32_t GPIO_PIN[LED_MAX] = {LED1_PIN, LED2_PIN, LED3_PIN, LED4_PIN}; + +static rcu_periph_enum COM_CLK[COMn] = {EVAL_COM0_CLK, EVAL_COM1_CLK}; +static uint32_t COM_TX_PIN[COMn] = {EVAL_COM0_TX_PIN, EVAL_COM1_TX_PIN}; +static uint32_t COM_RX_PIN[COMn] = {EVAL_COM0_RX_PIN, EVAL_COM1_RX_PIN}; +static uint32_t COM_GPIO_PORT[COMn] = {EVAL_COM0_GPIO_PORT, EVAL_COM1_GPIO_PORT}; +static rcu_periph_enum COM_GPIO_CLK[COMn] = {EVAL_COM0_GPIO_CLK, EVAL_COM1_GPIO_CLK}; + +static rcu_periph_enum GPIO_CLK[LED_MAX] = {LED1_GPIO_CLK, LED2_GPIO_CLK, + LED3_GPIO_CLK, LED4_GPIO_CLK}; + +static uint32_t KEY_PORT[KEY_MAX] = {WAKEUP_KEY_GPIO_PORT, + TAMPER_KEY_GPIO_PORT, + USER_KEY_GPIO_PORT}; +static uint32_t KEY_PIN[KEY_MAX] = {WAKEUP_KEY_PIN, TAMPER_KEY_PIN,USER_KEY_PIN,}; +static rcu_periph_enum KEY_CLK[KEY_MAX] = {WAKEUP_KEY_GPIO_CLK, + TAMPER_KEY_GPIO_CLK, + USER_KEY_GPIO_CLK}; +static exti_line_enum KEY_EXTI_LINE[KEY_MAX] = {WAKEUP_KEY_EXTI_LINE, + TAMPER_KEY_EXTI_LINE, + USER_KEY_EXTI_LINE}; +static uint8_t KEY_PORT_SOURCE[KEY_MAX] = {WAKEUP_KEY_EXTI_PORT_SOURCE, + TAMPER_KEY_EXTI_PORT_SOURCE, + USER_KEY_EXTI_PORT_SOURCE}; +static uint8_t KEY_PIN_SOURCE[KEY_MAX] = {WAKEUP_KEY_EXTI_PIN_SOURCE, + TAMPER_KEY_EXTI_PIN_SOURCE, + USER_KEY_EXTI_PIN_SOURCE}; +static IRQn_Type KEY_IRQn[KEY_MAX] = {WAKEUP_KEY_EXTI_IRQn, + TAMPER_KEY_EXTI_IRQn, + USER_KEY_EXTI_IRQn}; + +/*! + \brief configure led GPIO + \param[in] lednum: specify the led to be configured + \arg LED1 + \arg LED2 + \arg LED3 + \arg LED4 + \param[out] none + \retval none +*/ +void gd_eval_led_init (led_typedef_enum lednum) +{ + /* enable the led clock */ + rcu_periph_clock_enable(GPIO_CLK[lednum]); + /* configure led GPIO port */ + gpio_init(GPIO_PORT[lednum], GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,GPIO_PIN[lednum]); + + GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum]; +} + +/*! + \brief turn on selected led + \param[in] lednum: specify the led to be turned on + \arg LED1 + \arg LED2 + \arg LED3 + \arg LED4 + \param[out] none + \retval none +*/ +void gd_eval_led_on(led_typedef_enum lednum) +{ + GPIO_BOP(GPIO_PORT[lednum]) = GPIO_PIN[lednum]; +} + +/*! + \brief turn off selected led + \param[in] lednum: specify the led to be turned off + \arg LED1 + \arg LED2 + \arg LED3 + \arg LED4 + \param[out] none + \retval none +*/ +void gd_eval_led_off(led_typedef_enum lednum) +{ + GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum]; +} + +/*! + \brief toggle selected led + \param[in] lednum: specify the led to be toggled + \arg LED1 + \arg LED2 + \arg LED3 + \arg LED4 + \param[out] none + \retval none +*/ +void gd_eval_led_toggle(led_typedef_enum lednum) +{ + gpio_bit_write(GPIO_PORT[lednum], GPIO_PIN[lednum], + (bit_status)(1-gpio_input_bit_get(GPIO_PORT[lednum], GPIO_PIN[lednum]))); +} + +/*! + \brief configure key + \param[in] key_num: specify the key to be configured + \arg KEY_TAMPER: tamper key + \arg KEY_WAKEUP: wakeup key + \arg KEY_USER: user key + \param[in] key_mode: specify button mode + \arg KEY_MODE_GPIO: key will be used as simple IO + \arg KEY_MODE_EXTI: key will be connected to EXTI line with interrupt + \param[out] none + \retval none +*/ +void gd_eval_key_init(key_typedef_enum key_num, keymode_typedef_enum key_mode) +{ + /* enable the key clock */ + rcu_periph_clock_enable(KEY_CLK[key_num]); + rcu_periph_clock_enable(RCU_AF); + + /* configure button pin as input */ + gpio_init(KEY_PORT[key_num], GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, KEY_PIN[key_num]); + + if (key_mode == KEY_MODE_EXTI) { + /* enable and set key EXTI interrupt to the lowest priority */ + nvic_irq_enable(KEY_IRQn[key_num], 2U, 0U); + + /* connect key EXTI line to key GPIO pin */ + gpio_exti_source_select(KEY_PORT_SOURCE[key_num], KEY_PIN_SOURCE[key_num]); + + /* configure key EXTI line */ + exti_init(KEY_EXTI_LINE[key_num], EXTI_INTERRUPT, EXTI_TRIG_FALLING); + exti_interrupt_flag_clear(KEY_EXTI_LINE[key_num]); + } +} + +/*! + \brief return the selected key state + \param[in] key: specify the key to be checked + \arg KEY_TAMPER: tamper key + \arg KEY_WAKEUP: wakeup key + \arg KEY_USER: user key + \param[out] none + \retval the key's GPIO pin value +*/ +uint8_t gd_eval_key_state_get(key_typedef_enum key) +{ + return gpio_input_bit_get(KEY_PORT[key], KEY_PIN[key]); +} + +/*! + \brief configure COM port + \param[in] com: COM on the board + \arg EVAL_COM0: COM0 on the board + \arg EVAL_COM1: COM1 on the board + \param[out] none + \retval none +*/ +void gd_eval_com_init(uint32_t com) +{ + uint32_t com_id = 0U; + if(EVAL_COM0 == com){ + com_id = 0U; + }else if(EVAL_COM1 == com){ + com_id = 1U; + }else{ + com_id = 2U; + } + + /* enable GPIO clock */ + rcu_periph_clock_enable(COM_GPIO_CLK[com_id]); + + /* enable USART clock */ + rcu_periph_clock_enable(COM_CLK[com_id]); + + /* connect port to USARTx_Tx */ + gpio_init(COM_GPIO_PORT[com_id], GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, COM_TX_PIN[com_id]); + + /* connect port to USARTx_Rx */ + gpio_init(COM_GPIO_PORT[com_id], GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, COM_RX_PIN[com_id]); + + /* USART configure */ + usart_deinit(com); + usart_baudrate_set(com, 115200U); + usart_receive_config(com, USART_RECEIVE_ENABLE); + usart_transmit_config(com, USART_TRANSMIT_ENABLE); + usart_enable(com); +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exmc.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exmc.c new file mode 100644 index 0000000..8fb26c9 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exmc.c @@ -0,0 +1,229 @@ +/*! + \file gd32c10x_exmc.c + \brief EXMC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_exmc.h" + +/* EXMC bank0 register reset value */ +#define BANK0_SNCTL_RESET ((uint32_t)0x000030DBU) +#define BANK0_SNTCFG_RESET ((uint32_t)0x0FFFFFFFU) +#define BANK0_SNWTCFG_RESET ((uint32_t)0x0FFFFFFFU) + +/* EXMC register bit offset */ +#define SNCTL_NRMUX_OFFSET ((uint32_t)1U) +#define SNCTL_SBRSTEN_OFFSET ((uint32_t)8U) +#define SNCTL_WRAPEN_OFFSET ((uint32_t)10U) +#define SNCTL_WREN_OFFSET ((uint32_t)12U) +#define SNCTL_NRWTEN_OFFSET ((uint32_t)13U) +#define SNCTL_EXMODEN_OFFSET ((uint32_t)14U) +#define SNCTL_ASYNCWAIT_OFFSET ((uint32_t)15U) + +#define SNTCFG_AHLD_OFFSET ((uint32_t)4U) +#define SNTCFG_DSET_OFFSET ((uint32_t)8U) +#define SNTCFG_BUSLAT_OFFSET ((uint32_t)16U) + +#define SNWTCFG_WAHLD_OFFSET ((uint32_t)4U) +#define SNWTCFG_WDSET_OFFSET ((uint32_t)8U) +#define SNWTCFG_WBUSLAT_OFFSET ((uint32_t)16U) + +/*! + \brief deinitialize EXMC NOR/SRAM bank + \param[in] none + \param[out] none + \retval none +*/ +void exmc_norsram_deinit(void) +{ + /* reset the registers */ + EXMC_SNCTL = BANK0_SNCTL_RESET; + + EXMC_SNTCFG = BANK0_SNTCFG_RESET; + EXMC_SNWTCFG = BANK0_SNWTCFG_RESET; +} + +/*! + \brief initialize the struct exmc_norsram_parameter_struct + \param[in] none + \param[out] exmc_norsram_init_struct: the initialized struct exmc_norsram_parameter_struct pointer + \retval none +*/ +void exmc_norsram_struct_para_init(exmc_norsram_parameter_struct* exmc_norsram_init_struct) +{ + /* configure the structure with default value */ + exmc_norsram_init_struct->address_data_mux = ENABLE; + exmc_norsram_init_struct->memory_type = EXMC_MEMORY_TYPE_NOR; + exmc_norsram_init_struct->databus_width = EXMC_NOR_DATABUS_WIDTH_16B; + exmc_norsram_init_struct->burst_mode = DISABLE; + exmc_norsram_init_struct->nwait_polarity = EXMC_NWAIT_POLARITY_LOW; + exmc_norsram_init_struct->wrap_burst_mode = DISABLE; + exmc_norsram_init_struct->nwait_config = EXMC_NWAIT_CONFIG_BEFORE; + exmc_norsram_init_struct->memory_write = ENABLE; + exmc_norsram_init_struct->nwait_signal = ENABLE; + exmc_norsram_init_struct->extended_mode = DISABLE; + exmc_norsram_init_struct->asyn_wait = DISABLE; + exmc_norsram_init_struct->write_mode = EXMC_ASYN_WRITE; + + /* read/write timing configure */ + exmc_norsram_init_struct->read_write_timing->asyn_address_setuptime = 0xFU; + exmc_norsram_init_struct->read_write_timing->asyn_address_holdtime = 0xFU; + exmc_norsram_init_struct->read_write_timing->asyn_data_setuptime = 0xFFU; + exmc_norsram_init_struct->read_write_timing->bus_latency = 0xFU; + exmc_norsram_init_struct->read_write_timing->syn_clk_division = EXMC_SYN_CLOCK_RATIO_16_CLK; + exmc_norsram_init_struct->read_write_timing->syn_data_latency = EXMC_DATALAT_17_CLK; + exmc_norsram_init_struct->read_write_timing->asyn_access_mode = EXMC_ACCESS_MODE_A; + + /* write timing configure, when extended mode is used */ + exmc_norsram_init_struct->write_timing->asyn_address_setuptime = 0xFU; + exmc_norsram_init_struct->write_timing->asyn_address_holdtime = 0xFU; + exmc_norsram_init_struct->write_timing->asyn_data_setuptime = 0xFFU; + exmc_norsram_init_struct->write_timing->bus_latency = 0xFU; + exmc_norsram_init_struct->write_timing->asyn_access_mode = EXMC_ACCESS_MODE_A; +} + +/*! + \brief initialize EXMC NOR/SRAM bank + \param[in] exmc_norsram_parameter_struct: configure the EXMC NOR/SRAM parameter + write_mode: EXMC_ASYN_WRITE,EXMC_SYN_WRITE + extended_mode: ENABLE or DISABLE + asyn_wait: ENABLE or DISABLE + nwait_signal: ENABLE or DISABLE + memory_write: ENABLE or DISABLE + nwait_config: EXMC_NWAIT_CONFIG_BEFORE,EXMC_NWAIT_CONFIG_DURING + wrap_burst_mode: ENABLE or DISABLE + nwait_polarity: EXMC_NWAIT_POLARITY_LOW,EXMC_NWAIT_POLARITY_HIGH + burst_mode: ENABLE or DISABLE + databus_width: EXMC_NOR_DATABUS_WIDTH_8B,EXMC_NOR_DATABUS_WIDTH_16B + memory_type: EXMC_MEMORY_TYPE_SRAM,EXMC_MEMORY_TYPE_PSRAM,EXMC_MEMORY_TYPE_NOR + address_data_mux: ENABLE or DISABLE + read_write_timing: struct exmc_norsram_timing_parameter_struct set the time + write_timing: struct exmc_norsram_timing_parameter_struct set the time + \param[out] none + \retval none +*/ +void exmc_norsram_init(exmc_norsram_parameter_struct* exmc_norsram_init_struct) +{ + uint32_t snctl = 0x00000000U, sntcfg = 0x00000000U, snwtcfg = 0x00000000U; + + /* get the register value */ + snctl = EXMC_SNCTL; + + /* clear relative bits */ + snctl &= ((uint32_t)~(EXMC_SNCTL_NRMUX | EXMC_SNCTL_NRTP | EXMC_SNCTL_NRW | EXMC_SNCTL_SBRSTEN | + EXMC_SNCTL_NREN | EXMC_SNCTL_NRWTPOL | EXMC_SNCTL_WRAPEN | EXMC_SNCTL_NRWTCFG | + EXMC_SNCTL_WREN | EXMC_SNCTL_NRWTEN | EXMC_SNCTL_EXMODEN | EXMC_SNCTL_ASYNCWAIT | + EXMC_SNCTL_SYNCWR )); + + snctl |= (uint32_t)(exmc_norsram_init_struct->address_data_mux << SNCTL_NRMUX_OFFSET) | + exmc_norsram_init_struct->memory_type | + exmc_norsram_init_struct->databus_width | + (exmc_norsram_init_struct->burst_mode << SNCTL_SBRSTEN_OFFSET) | + exmc_norsram_init_struct->nwait_polarity | + (exmc_norsram_init_struct->wrap_burst_mode << SNCTL_WRAPEN_OFFSET) | + exmc_norsram_init_struct->nwait_config | + (exmc_norsram_init_struct->memory_write << SNCTL_WREN_OFFSET) | + (exmc_norsram_init_struct->nwait_signal << SNCTL_NRWTEN_OFFSET) | + (exmc_norsram_init_struct->extended_mode << SNCTL_EXMODEN_OFFSET) | + (exmc_norsram_init_struct->asyn_wait << SNCTL_ASYNCWAIT_OFFSET) | + exmc_norsram_init_struct->write_mode; + + sntcfg = (uint32_t)((exmc_norsram_init_struct->read_write_timing->asyn_address_setuptime - 1U ) & EXMC_SNTCFG_ASET )| + (((exmc_norsram_init_struct->read_write_timing->asyn_address_holdtime - 1U ) << SNTCFG_AHLD_OFFSET ) & EXMC_SNTCFG_AHLD ) | + (((exmc_norsram_init_struct->read_write_timing->asyn_data_setuptime - 1U ) << SNTCFG_DSET_OFFSET ) & EXMC_SNTCFG_DSET ) | + (((exmc_norsram_init_struct->read_write_timing->bus_latency - 1U ) << SNTCFG_BUSLAT_OFFSET ) & EXMC_SNTCFG_BUSLAT )| + exmc_norsram_init_struct->read_write_timing->syn_clk_division | + exmc_norsram_init_struct->read_write_timing->syn_data_latency | + exmc_norsram_init_struct->read_write_timing->asyn_access_mode; + + /* nor flash access enable */ + if(EXMC_MEMORY_TYPE_NOR == exmc_norsram_init_struct->memory_type){ + snctl |= (uint32_t)EXMC_SNCTL_NREN; + } + + /* extended mode configure */ + if(ENABLE == exmc_norsram_init_struct->extended_mode){ + snwtcfg = (uint32_t)((exmc_norsram_init_struct->write_timing->asyn_address_setuptime - 1U) & EXMC_SNWTCFG_WASET ) | + (((exmc_norsram_init_struct->write_timing->asyn_address_holdtime -1U ) << SNWTCFG_WAHLD_OFFSET ) & EXMC_SNWTCFG_WAHLD )| + (((exmc_norsram_init_struct->write_timing->asyn_data_setuptime -1U ) << SNWTCFG_WDSET_OFFSET ) & EXMC_SNWTCFG_WDSET )| + (((exmc_norsram_init_struct->write_timing->bus_latency - 1U ) << SNWTCFG_WBUSLAT_OFFSET ) & EXMC_SNWTCFG_WBUSLAT ) | + exmc_norsram_init_struct->write_timing->asyn_access_mode; + }else{ + snwtcfg = BANK0_SNWTCFG_RESET; + } + + /* configure the registers */ + EXMC_SNCTL = snctl; + EXMC_SNTCFG = sntcfg; + EXMC_SNWTCFG = snwtcfg; +} + +/*! + \brief enable EXMC NOR/PSRAM bank + \param[in] none + \param[out] none + \retval none +*/ +void exmc_norsram_enable(void) +{ + EXMC_SNCTL |= (uint32_t)EXMC_SNCTL_NRBKEN; +} + +/*! + \brief disable EXMC NOR/PSRAM bank + \param[in] none + \param[out] none + \retval none +*/ +void exmc_norsram_disable(void) +{ + EXMC_SNCTL &= ~(uint32_t)EXMC_SNCTL_NRBKEN; +} + +/*! + \brief configure CRAM page size + \param[in] page_size: CRAM page size + only one parameter can be selected which is shown as below: + \arg EXMC_CRAM_AUTO_SPLIT: the clock is generated only during synchronous access + \arg EXMC_CRAM_PAGE_SIZE_128_BYTES: page size is 128 bytes + \arg EXMC_CRAM_PAGE_SIZE_256_BYTES: page size is 256 bytes + \arg EXMC_CRAM_PAGE_SIZE_512_BYTES: page size is 512 bytes + \arg EXMC_CRAM_PAGE_SIZE_1024_BYTES: page size is 1024 bytes + \param[out] none + \retval none +*/ +void exmc_norsram_page_size_config(uint32_t page_size) +{ + /* reset the bits */ + EXMC_SNCTL &= ~EXMC_SNCTL_CPS; + /* set the CPS bits */ + EXMC_SNCTL |= page_size; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exmc.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exmc.c.base@1.0.0 new file mode 100644 index 0000000..8fb26c9 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exmc.c.base@1.0.0 @@ -0,0 +1,229 @@ +/*! + \file gd32c10x_exmc.c + \brief EXMC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_exmc.h" + +/* EXMC bank0 register reset value */ +#define BANK0_SNCTL_RESET ((uint32_t)0x000030DBU) +#define BANK0_SNTCFG_RESET ((uint32_t)0x0FFFFFFFU) +#define BANK0_SNWTCFG_RESET ((uint32_t)0x0FFFFFFFU) + +/* EXMC register bit offset */ +#define SNCTL_NRMUX_OFFSET ((uint32_t)1U) +#define SNCTL_SBRSTEN_OFFSET ((uint32_t)8U) +#define SNCTL_WRAPEN_OFFSET ((uint32_t)10U) +#define SNCTL_WREN_OFFSET ((uint32_t)12U) +#define SNCTL_NRWTEN_OFFSET ((uint32_t)13U) +#define SNCTL_EXMODEN_OFFSET ((uint32_t)14U) +#define SNCTL_ASYNCWAIT_OFFSET ((uint32_t)15U) + +#define SNTCFG_AHLD_OFFSET ((uint32_t)4U) +#define SNTCFG_DSET_OFFSET ((uint32_t)8U) +#define SNTCFG_BUSLAT_OFFSET ((uint32_t)16U) + +#define SNWTCFG_WAHLD_OFFSET ((uint32_t)4U) +#define SNWTCFG_WDSET_OFFSET ((uint32_t)8U) +#define SNWTCFG_WBUSLAT_OFFSET ((uint32_t)16U) + +/*! + \brief deinitialize EXMC NOR/SRAM bank + \param[in] none + \param[out] none + \retval none +*/ +void exmc_norsram_deinit(void) +{ + /* reset the registers */ + EXMC_SNCTL = BANK0_SNCTL_RESET; + + EXMC_SNTCFG = BANK0_SNTCFG_RESET; + EXMC_SNWTCFG = BANK0_SNWTCFG_RESET; +} + +/*! + \brief initialize the struct exmc_norsram_parameter_struct + \param[in] none + \param[out] exmc_norsram_init_struct: the initialized struct exmc_norsram_parameter_struct pointer + \retval none +*/ +void exmc_norsram_struct_para_init(exmc_norsram_parameter_struct* exmc_norsram_init_struct) +{ + /* configure the structure with default value */ + exmc_norsram_init_struct->address_data_mux = ENABLE; + exmc_norsram_init_struct->memory_type = EXMC_MEMORY_TYPE_NOR; + exmc_norsram_init_struct->databus_width = EXMC_NOR_DATABUS_WIDTH_16B; + exmc_norsram_init_struct->burst_mode = DISABLE; + exmc_norsram_init_struct->nwait_polarity = EXMC_NWAIT_POLARITY_LOW; + exmc_norsram_init_struct->wrap_burst_mode = DISABLE; + exmc_norsram_init_struct->nwait_config = EXMC_NWAIT_CONFIG_BEFORE; + exmc_norsram_init_struct->memory_write = ENABLE; + exmc_norsram_init_struct->nwait_signal = ENABLE; + exmc_norsram_init_struct->extended_mode = DISABLE; + exmc_norsram_init_struct->asyn_wait = DISABLE; + exmc_norsram_init_struct->write_mode = EXMC_ASYN_WRITE; + + /* read/write timing configure */ + exmc_norsram_init_struct->read_write_timing->asyn_address_setuptime = 0xFU; + exmc_norsram_init_struct->read_write_timing->asyn_address_holdtime = 0xFU; + exmc_norsram_init_struct->read_write_timing->asyn_data_setuptime = 0xFFU; + exmc_norsram_init_struct->read_write_timing->bus_latency = 0xFU; + exmc_norsram_init_struct->read_write_timing->syn_clk_division = EXMC_SYN_CLOCK_RATIO_16_CLK; + exmc_norsram_init_struct->read_write_timing->syn_data_latency = EXMC_DATALAT_17_CLK; + exmc_norsram_init_struct->read_write_timing->asyn_access_mode = EXMC_ACCESS_MODE_A; + + /* write timing configure, when extended mode is used */ + exmc_norsram_init_struct->write_timing->asyn_address_setuptime = 0xFU; + exmc_norsram_init_struct->write_timing->asyn_address_holdtime = 0xFU; + exmc_norsram_init_struct->write_timing->asyn_data_setuptime = 0xFFU; + exmc_norsram_init_struct->write_timing->bus_latency = 0xFU; + exmc_norsram_init_struct->write_timing->asyn_access_mode = EXMC_ACCESS_MODE_A; +} + +/*! + \brief initialize EXMC NOR/SRAM bank + \param[in] exmc_norsram_parameter_struct: configure the EXMC NOR/SRAM parameter + write_mode: EXMC_ASYN_WRITE,EXMC_SYN_WRITE + extended_mode: ENABLE or DISABLE + asyn_wait: ENABLE or DISABLE + nwait_signal: ENABLE or DISABLE + memory_write: ENABLE or DISABLE + nwait_config: EXMC_NWAIT_CONFIG_BEFORE,EXMC_NWAIT_CONFIG_DURING + wrap_burst_mode: ENABLE or DISABLE + nwait_polarity: EXMC_NWAIT_POLARITY_LOW,EXMC_NWAIT_POLARITY_HIGH + burst_mode: ENABLE or DISABLE + databus_width: EXMC_NOR_DATABUS_WIDTH_8B,EXMC_NOR_DATABUS_WIDTH_16B + memory_type: EXMC_MEMORY_TYPE_SRAM,EXMC_MEMORY_TYPE_PSRAM,EXMC_MEMORY_TYPE_NOR + address_data_mux: ENABLE or DISABLE + read_write_timing: struct exmc_norsram_timing_parameter_struct set the time + write_timing: struct exmc_norsram_timing_parameter_struct set the time + \param[out] none + \retval none +*/ +void exmc_norsram_init(exmc_norsram_parameter_struct* exmc_norsram_init_struct) +{ + uint32_t snctl = 0x00000000U, sntcfg = 0x00000000U, snwtcfg = 0x00000000U; + + /* get the register value */ + snctl = EXMC_SNCTL; + + /* clear relative bits */ + snctl &= ((uint32_t)~(EXMC_SNCTL_NRMUX | EXMC_SNCTL_NRTP | EXMC_SNCTL_NRW | EXMC_SNCTL_SBRSTEN | + EXMC_SNCTL_NREN | EXMC_SNCTL_NRWTPOL | EXMC_SNCTL_WRAPEN | EXMC_SNCTL_NRWTCFG | + EXMC_SNCTL_WREN | EXMC_SNCTL_NRWTEN | EXMC_SNCTL_EXMODEN | EXMC_SNCTL_ASYNCWAIT | + EXMC_SNCTL_SYNCWR )); + + snctl |= (uint32_t)(exmc_norsram_init_struct->address_data_mux << SNCTL_NRMUX_OFFSET) | + exmc_norsram_init_struct->memory_type | + exmc_norsram_init_struct->databus_width | + (exmc_norsram_init_struct->burst_mode << SNCTL_SBRSTEN_OFFSET) | + exmc_norsram_init_struct->nwait_polarity | + (exmc_norsram_init_struct->wrap_burst_mode << SNCTL_WRAPEN_OFFSET) | + exmc_norsram_init_struct->nwait_config | + (exmc_norsram_init_struct->memory_write << SNCTL_WREN_OFFSET) | + (exmc_norsram_init_struct->nwait_signal << SNCTL_NRWTEN_OFFSET) | + (exmc_norsram_init_struct->extended_mode << SNCTL_EXMODEN_OFFSET) | + (exmc_norsram_init_struct->asyn_wait << SNCTL_ASYNCWAIT_OFFSET) | + exmc_norsram_init_struct->write_mode; + + sntcfg = (uint32_t)((exmc_norsram_init_struct->read_write_timing->asyn_address_setuptime - 1U ) & EXMC_SNTCFG_ASET )| + (((exmc_norsram_init_struct->read_write_timing->asyn_address_holdtime - 1U ) << SNTCFG_AHLD_OFFSET ) & EXMC_SNTCFG_AHLD ) | + (((exmc_norsram_init_struct->read_write_timing->asyn_data_setuptime - 1U ) << SNTCFG_DSET_OFFSET ) & EXMC_SNTCFG_DSET ) | + (((exmc_norsram_init_struct->read_write_timing->bus_latency - 1U ) << SNTCFG_BUSLAT_OFFSET ) & EXMC_SNTCFG_BUSLAT )| + exmc_norsram_init_struct->read_write_timing->syn_clk_division | + exmc_norsram_init_struct->read_write_timing->syn_data_latency | + exmc_norsram_init_struct->read_write_timing->asyn_access_mode; + + /* nor flash access enable */ + if(EXMC_MEMORY_TYPE_NOR == exmc_norsram_init_struct->memory_type){ + snctl |= (uint32_t)EXMC_SNCTL_NREN; + } + + /* extended mode configure */ + if(ENABLE == exmc_norsram_init_struct->extended_mode){ + snwtcfg = (uint32_t)((exmc_norsram_init_struct->write_timing->asyn_address_setuptime - 1U) & EXMC_SNWTCFG_WASET ) | + (((exmc_norsram_init_struct->write_timing->asyn_address_holdtime -1U ) << SNWTCFG_WAHLD_OFFSET ) & EXMC_SNWTCFG_WAHLD )| + (((exmc_norsram_init_struct->write_timing->asyn_data_setuptime -1U ) << SNWTCFG_WDSET_OFFSET ) & EXMC_SNWTCFG_WDSET )| + (((exmc_norsram_init_struct->write_timing->bus_latency - 1U ) << SNWTCFG_WBUSLAT_OFFSET ) & EXMC_SNWTCFG_WBUSLAT ) | + exmc_norsram_init_struct->write_timing->asyn_access_mode; + }else{ + snwtcfg = BANK0_SNWTCFG_RESET; + } + + /* configure the registers */ + EXMC_SNCTL = snctl; + EXMC_SNTCFG = sntcfg; + EXMC_SNWTCFG = snwtcfg; +} + +/*! + \brief enable EXMC NOR/PSRAM bank + \param[in] none + \param[out] none + \retval none +*/ +void exmc_norsram_enable(void) +{ + EXMC_SNCTL |= (uint32_t)EXMC_SNCTL_NRBKEN; +} + +/*! + \brief disable EXMC NOR/PSRAM bank + \param[in] none + \param[out] none + \retval none +*/ +void exmc_norsram_disable(void) +{ + EXMC_SNCTL &= ~(uint32_t)EXMC_SNCTL_NRBKEN; +} + +/*! + \brief configure CRAM page size + \param[in] page_size: CRAM page size + only one parameter can be selected which is shown as below: + \arg EXMC_CRAM_AUTO_SPLIT: the clock is generated only during synchronous access + \arg EXMC_CRAM_PAGE_SIZE_128_BYTES: page size is 128 bytes + \arg EXMC_CRAM_PAGE_SIZE_256_BYTES: page size is 256 bytes + \arg EXMC_CRAM_PAGE_SIZE_512_BYTES: page size is 512 bytes + \arg EXMC_CRAM_PAGE_SIZE_1024_BYTES: page size is 1024 bytes + \param[out] none + \retval none +*/ +void exmc_norsram_page_size_config(uint32_t page_size) +{ + /* reset the bits */ + EXMC_SNCTL &= ~EXMC_SNCTL_CPS; + /* set the CPS bits */ + EXMC_SNCTL |= page_size; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c new file mode 100644 index 0000000..b1925dc --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c @@ -0,0 +1,247 @@ +/*! + \file gd32c10x_exti.c + \brief EXTI driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_exti.h" + +#define EXTI_REG_RESET_VALUE ((uint32_t)0x00000000U) + +/*! + \brief deinitialize the EXTI + \param[in] none + \param[out] none + \retval none +*/ +void exti_deinit(void) +{ + /* reset the value of all the EXTI registers */ + EXTI_INTEN = EXTI_REG_RESET_VALUE; + EXTI_EVEN = EXTI_REG_RESET_VALUE; + EXTI_RTEN = EXTI_REG_RESET_VALUE; + EXTI_FTEN = EXTI_REG_RESET_VALUE; + EXTI_SWIEV = EXTI_REG_RESET_VALUE; +} + +/*! + \brief initialize the EXTI line x + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[in] mode: interrupt or event mode, refer to exti_mode_enum + only one parameter can be selected which is shown as below: + \arg EXTI_INTERRUPT: interrupt mode + \arg EXTI_EVENT: event mode + \param[in] trig_type: interrupt trigger type, refer to exti_trig_type_enum + only one parameter can be selected which is shown as below: + \arg EXTI_TRIG_RISING: rising edge trigger + \arg EXTI_TRIG_FALLING: falling trigger + \arg EXTI_TRIG_BOTH: rising and falling trigger + \param[out] none + \retval none +*/ +void exti_init(exti_line_enum linex, exti_mode_enum mode, exti_trig_type_enum trig_type) +{ + /* reset the EXTI line x */ + EXTI_INTEN &= ~(uint32_t)linex; + EXTI_EVEN &= ~(uint32_t)linex; + EXTI_RTEN &= ~(uint32_t)linex; + EXTI_FTEN &= ~(uint32_t)linex; + + /* set the EXTI mode and enable the interrupts or events from EXTI line x */ + switch(mode) { + case EXTI_INTERRUPT: + EXTI_INTEN |= (uint32_t)linex; + break; + case EXTI_EVENT: + EXTI_EVEN |= (uint32_t)linex; + break; + default: + break; + } + + /* set the EXTI trigger type */ + switch(trig_type) { + case EXTI_TRIG_RISING: + EXTI_RTEN |= (uint32_t)linex; + EXTI_FTEN &= ~(uint32_t)linex; + break; + case EXTI_TRIG_FALLING: + EXTI_RTEN &= ~(uint32_t)linex; + EXTI_FTEN |= (uint32_t)linex; + break; + case EXTI_TRIG_BOTH: + EXTI_RTEN |= (uint32_t)linex; + EXTI_FTEN |= (uint32_t)linex; + break; + default: + break; + } +} + +/*! + \brief enable the interrupts from EXTI line x + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_interrupt_enable(exti_line_enum linex) +{ + EXTI_INTEN |= (uint32_t)linex; +} + +/*! + \brief disable the interrupt from EXTI line x + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_interrupt_disable(exti_line_enum linex) +{ + EXTI_INTEN &= ~(uint32_t)linex; +} + +/*! + \brief enable the events from EXTI line x + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_event_enable(exti_line_enum linex) +{ + EXTI_EVEN |= (uint32_t)linex; +} + +/*! + \brief disable the events from EXTI line x + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_event_disable(exti_line_enum linex) +{ + EXTI_EVEN &= ~(uint32_t)linex; +} + +/*! + \brief enable the software interrupt event from EXTI line x + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_software_interrupt_enable(exti_line_enum linex) +{ + EXTI_SWIEV |= (uint32_t)linex; +} + +/*! + \brief disable the software interrupt event from EXTI line x + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_software_interrupt_disable(exti_line_enum linex) +{ + EXTI_SWIEV &= ~(uint32_t)linex; +} + +/*! + \brief get EXTI line x interrupt pending flag + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus exti_flag_get(exti_line_enum linex) +{ + if(RESET != (EXTI_PD & (uint32_t)linex)) { + return SET; + } else { + return RESET; + } +} + +/*! + \brief clear EXTI line x interrupt pending flag + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_flag_clear(exti_line_enum linex) +{ + EXTI_PD = (uint32_t)linex; +} + +/*! + \brief get EXTI line x interrupt pending flag + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus exti_interrupt_flag_get(exti_line_enum linex) +{ + if(RESET != (EXTI_PD & (uint32_t)linex)) { + return SET; + } else { + return RESET; + } +} + +/*! + \brief clear EXTI line x interrupt pending flag + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_interrupt_flag_clear(exti_line_enum linex) +{ + EXTI_PD = (uint32_t)linex; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c.base@1.0.0 new file mode 100644 index 0000000..b1925dc --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c.base@1.0.0 @@ -0,0 +1,247 @@ +/*! + \file gd32c10x_exti.c + \brief EXTI driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_exti.h" + +#define EXTI_REG_RESET_VALUE ((uint32_t)0x00000000U) + +/*! + \brief deinitialize the EXTI + \param[in] none + \param[out] none + \retval none +*/ +void exti_deinit(void) +{ + /* reset the value of all the EXTI registers */ + EXTI_INTEN = EXTI_REG_RESET_VALUE; + EXTI_EVEN = EXTI_REG_RESET_VALUE; + EXTI_RTEN = EXTI_REG_RESET_VALUE; + EXTI_FTEN = EXTI_REG_RESET_VALUE; + EXTI_SWIEV = EXTI_REG_RESET_VALUE; +} + +/*! + \brief initialize the EXTI line x + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[in] mode: interrupt or event mode, refer to exti_mode_enum + only one parameter can be selected which is shown as below: + \arg EXTI_INTERRUPT: interrupt mode + \arg EXTI_EVENT: event mode + \param[in] trig_type: interrupt trigger type, refer to exti_trig_type_enum + only one parameter can be selected which is shown as below: + \arg EXTI_TRIG_RISING: rising edge trigger + \arg EXTI_TRIG_FALLING: falling trigger + \arg EXTI_TRIG_BOTH: rising and falling trigger + \param[out] none + \retval none +*/ +void exti_init(exti_line_enum linex, exti_mode_enum mode, exti_trig_type_enum trig_type) +{ + /* reset the EXTI line x */ + EXTI_INTEN &= ~(uint32_t)linex; + EXTI_EVEN &= ~(uint32_t)linex; + EXTI_RTEN &= ~(uint32_t)linex; + EXTI_FTEN &= ~(uint32_t)linex; + + /* set the EXTI mode and enable the interrupts or events from EXTI line x */ + switch(mode) { + case EXTI_INTERRUPT: + EXTI_INTEN |= (uint32_t)linex; + break; + case EXTI_EVENT: + EXTI_EVEN |= (uint32_t)linex; + break; + default: + break; + } + + /* set the EXTI trigger type */ + switch(trig_type) { + case EXTI_TRIG_RISING: + EXTI_RTEN |= (uint32_t)linex; + EXTI_FTEN &= ~(uint32_t)linex; + break; + case EXTI_TRIG_FALLING: + EXTI_RTEN &= ~(uint32_t)linex; + EXTI_FTEN |= (uint32_t)linex; + break; + case EXTI_TRIG_BOTH: + EXTI_RTEN |= (uint32_t)linex; + EXTI_FTEN |= (uint32_t)linex; + break; + default: + break; + } +} + +/*! + \brief enable the interrupts from EXTI line x + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_interrupt_enable(exti_line_enum linex) +{ + EXTI_INTEN |= (uint32_t)linex; +} + +/*! + \brief disable the interrupt from EXTI line x + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_interrupt_disable(exti_line_enum linex) +{ + EXTI_INTEN &= ~(uint32_t)linex; +} + +/*! + \brief enable the events from EXTI line x + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_event_enable(exti_line_enum linex) +{ + EXTI_EVEN |= (uint32_t)linex; +} + +/*! + \brief disable the events from EXTI line x + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_event_disable(exti_line_enum linex) +{ + EXTI_EVEN &= ~(uint32_t)linex; +} + +/*! + \brief enable the software interrupt event from EXTI line x + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_software_interrupt_enable(exti_line_enum linex) +{ + EXTI_SWIEV |= (uint32_t)linex; +} + +/*! + \brief disable the software interrupt event from EXTI line x + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_software_interrupt_disable(exti_line_enum linex) +{ + EXTI_SWIEV &= ~(uint32_t)linex; +} + +/*! + \brief get EXTI line x interrupt pending flag + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus exti_flag_get(exti_line_enum linex) +{ + if(RESET != (EXTI_PD & (uint32_t)linex)) { + return SET; + } else { + return RESET; + } +} + +/*! + \brief clear EXTI line x interrupt pending flag + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_flag_clear(exti_line_enum linex) +{ + EXTI_PD = (uint32_t)linex; +} + +/*! + \brief get EXTI line x interrupt pending flag + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus exti_interrupt_flag_get(exti_line_enum linex) +{ + if(RESET != (EXTI_PD & (uint32_t)linex)) { + return SET; + } else { + return RESET; + } +} + +/*! + \brief clear EXTI line x interrupt pending flag + \param[in] linex: EXTI line number, refer to exti_line_enum + only one parameter can be selected which is shown as below: + \arg EXTI_x (x=0..18): EXTI line x + \param[out] none + \retval none +*/ +void exti_interrupt_flag_clear(exti_line_enum linex) +{ + EXTI_PD = (uint32_t)linex; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c new file mode 100644 index 0000000..7f29736 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c @@ -0,0 +1,1034 @@ +/*! + \file gd32c10x_fmc.c + \brief FMC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_fmc.h" +#include "stdio.h" + +/* FMC mask */ +#define LOW_8BITS_MASK ((uint32_t)0x000000FFU) +#define HIGH_8BITS_MASK ((uint32_t)0x0000FF00U) +#define LOW_8BITS_MASK1 ((uint32_t)0x00FF0000U) +#define HIGH_8BITS_MASK1 ((uint32_t)0xFF000000U) +#define LOW_16BITS_MASK ((uint32_t)0x0000FFFFU) +#define HIGH_16BITS_MASK ((uint32_t)0xFFFF0000U) + +/* USER of option bytes mask */ +#define OB_USER_MASK ((uint8_t)0xF8U) + +/* OB_WP mask */ +#define OB_WP0_MASK ((uint32_t)0x000000FFU) +#define OB_WP1_MASK ((uint32_t)0x0000FF00U) +#define OB_WP2_MASK ((uint32_t)0x00FF0000U) +#define OB_WP3_MASK ((uint32_t)0xFF000000U) + +/* return the FMC state */ +static fmc_state_enum fmc_state_get(void); +/* check FMC ready or not */ +static fmc_state_enum fmc_ready_wait(uint32_t timeout); + +/* FMC main memory programming functions */ + +/*! + \brief enable pre-fetch + \param[in] none + \param[out] none + \retval none +*/ +void fmc_prefetch_enable(void) +{ + FMC_WS |= FMC_WS_PFEN; +} + +/*! + \brief disable pre-fetch + \param[in] none + \param[out] none + \retval none +*/ +void fmc_prefetch_disable(void) +{ + FMC_WS &= ~FMC_WS_PFEN; +} + +/*! + \brief enable IBUS cache + \param[in] none + \param[out] none + \retval none +*/ +void fmc_ibus_enable(void) +{ + FMC_WS |= FMC_WS_ICEN; +} + +/*! + \brief disable IBUS cache + \param[in] none + \param[out] none + \retval none +*/ +void fmc_ibus_disable(void) +{ + FMC_WS &= ~FMC_WS_ICEN; +} + +/*! + \brief enable DBUS cache + \param[in] none + \param[out] none + \retval none +*/ +void fmc_dbus_enable(void) +{ + FMC_WS |= FMC_WS_DCEN; +} + +/*! + \brief disable DBUS cache + \param[in] none + \param[out] none + \retval none +*/ +void fmc_dbus_disable(void) +{ + FMC_WS &= ~FMC_WS_DCEN; +} + +/*! + \brief reset IBUS cache + \param[in] none + \param[out] none + \retval none +*/ +void fmc_ibus_reset(void) +{ + FMC_WS |= FMC_WS_ICRST; +} + +/*! + \brief reset DBUS cache + \param[in] none + \param[out] none + \retval none +*/ +void fmc_dbus_reset(void) +{ + FMC_WS |= FMC_WS_DCRST; +} + +/*! + \brief set program width to flash memory + \param[in] pgw + only one parameter can be selected which is shown as below: + \arg FMC_PROG_W_32B: 32-bit program width to flash memory + \arg FMC_PROG_W_64B: 64-bit program width to flash memory + \param[out] none + \retval none +*/ +void fmc_program_width_set(uint32_t pgw) +{ + uint32_t reg; + + reg = FMC_WS; + /* configure program width to flash memory */ + reg &= ~FMC_WS_PGW; + FMC_WS = (reg | pgw); +} + +/*! + \brief unlock the main FMC operation + \param[in] none + \param[out] none + \retval none +*/ +void fmc_unlock(void) +{ + if(RESET != (FMC_CTL & FMC_CTL_LK)){ + /* write the FMC unlock key */ + FMC_KEY = UNLOCK_KEY0; + FMC_KEY = UNLOCK_KEY1; + } +} + +/*! + \brief lock the main FMC operation + \param[in] none + \param[out] none + \retval none +*/ +void fmc_lock(void) +{ + /* set the LK bit */ + FMC_CTL |= FMC_CTL_LK; +} + +/*! + \brief set the wait state counter value + \param[in] wscnt:wait state counter value + only one parameter can be selected which is shown as below: + \arg FMC_WAIT_STATE_0: FMC 0 wait + \arg FMC_WAIT_STATE_1: FMC 1 wait + \arg FMC_WAIT_STATE_2: FMC 2 wait + \arg FMC_WAIT_STATE_3: FMC 3 wait + \param[out] none + \retval none +*/ +void fmc_wscnt_set(uint32_t wscnt) +{ + uint32_t reg; + + reg = FMC_WS; + /* set the wait state counter value */ + reg &= ~FMC_WS_WSCNT; + FMC_WS = (reg | wscnt); +} + +/*! + \brief FMC erase page + \param[in] page_address: target page address + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_WPERR: erase/program protection error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum fmc_page_erase(uint32_t page_address) +{ + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + FMC_CTL |= FMC_CTL_PER; + FMC_ADDR = page_address; + FMC_CTL |= FMC_CTL_START; + __DSB(); + __ISB(); + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + /* reset the PER bit */ + FMC_CTL &= ~FMC_CTL_PER; + } + + /* return the FMC state */ + return fmc_state; +} + +/*! + \brief FMC erase whole chip + \param[in] none + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_WPERR: erase/program protection error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum fmc_mass_erase(void) +{ + fmc_state_enum fmc_state; + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + /* start whole chip erase */ + FMC_CTL |= FMC_CTL_MER; + FMC_CTL |= FMC_CTL_START; + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + /* reset the MER bit */ + FMC_CTL &= ~FMC_CTL_MER; + } + + /* return the FMC state */ + return fmc_state; +} + +/*! + \brief FMC program a double word at the corresponding address + \param[in] address: address to program + \param[in] data: double word to program + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_PGERR: program error + \arg FMC_PGAERR: program alignment error + \arg FMC_WPERR: erase/program protection error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum fmc_doubleword_program(uint32_t address, uint64_t data) +{ + uint32_t data0, data1; + + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + data0 = (uint32_t)(data & 0xFFFFFFFFU); + data1 = (uint32_t)((data >> 32U) & 0xFFFFFFFFU); + + if(FMC_READY == fmc_state){ + /* set the PGW and PG bit to start program */ + FMC_WS |= FMC_WS_PGW; + FMC_CTL |= FMC_CTL_PG; + + REG32(address) = data0; + REG32(address + 4U) = data1; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + /* reset the PG and PGW bit */ + FMC_CTL &= ~FMC_CTL_PG; + FMC_WS &= ~FMC_WS_PGW; + } + + /* return the FMC state */ + return fmc_state; +} + +#ifndef GD32C103XXA +/*! + \brief FMC program a word at the corresponding address + \param[in] address: address to program + \param[in] data: word to program + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_PGERR: program error + \arg FMC_PGAERR: program alignment error + \arg FMC_WPERR: erase/program protection error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum fmc_word_program(uint32_t address, uint32_t data) +{ + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + /* set the PG bit to start program */ + FMC_CTL |= FMC_CTL_PG; + REG32(address) = data; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + /* reset the PG bit */ + FMC_CTL &= ~FMC_CTL_PG; + } + + /* return the FMC state */ + return fmc_state; +} +#endif + +/*! + \brief unlock the option byte operation + it is better to used in pairs with ob_lock + \param[in] none + \param[out] none + \retval none +*/ +void ob_unlock(void) +{ + if(RESET == (FMC_CTL & FMC_CTL_OBWEN)){ + /* write the FMC key */ + FMC_OBKEY = UNLOCK_KEY0; + FMC_OBKEY = UNLOCK_KEY1; + } +} + +/*! + \brief lock the option byte operation + it is better to used in pairs with ob_unlock after an operation + \param[in] none + \param[out] none + \retval none +*/ +void ob_lock(void) +{ + /* reset the OBWEN bit */ + FMC_CTL &= ~FMC_CTL_OBWEN; +} + +/*! + \brief erase the FMC option bytes + programmer must ensure FMC & option byte are both unlocked before calling this function + \param[in] none + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_PGERR: program error + \arg FMC_PGAERR: program alignment error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum ob_erase(void) +{ + uint8_t temp_spc; + uint32_t temp; + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + /* check the option bytes security protection value */ + if(RESET == ob_security_protection_flag_get()){ + temp_spc = FMC_NSPC; + }else{ + temp_spc = FMC_USPC; + } + + temp = HIGH_16BITS_MASK | ((uint32_t)temp_spc); + + if(FMC_READY == fmc_state){ + /* start erase the option bytes */ + FMC_CTL |= FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_START; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + /* reset the OBER bit and enable the option bytes programming */ + FMC_CTL &= ~FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_OBPG; + + /* restore the last get option byte security protection code */ + OB_SPC_USER = temp; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + /* reset the OBPG bit */ + FMC_CTL &= ~FMC_CTL_OBPG; + }else{ + /* reset the OBER bit */ + FMC_CTL &= ~FMC_CTL_OBER; + } + } + /* return the FMC state */ + return fmc_state; +} + +/*! + \brief enable write protection + \param[in] ob_wp: specify sector to be write protected + one or more parameters can be selected which are shown as below: + \arg OB_WP_NONE: disable all write protection + \arg OB_WP_x(x=0..31): write protect specify sector + \arg OB_WP_ALL: write protect all sector + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_PGERR: program error + \arg FMC_PGAERR: program alignment error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum ob_write_protection_enable(uint32_t ob_wp) +{ + uint32_t i; + uint32_t op_byte[4]; + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + for(i = 0U; i < 4U; i++){ + op_byte[i] = OP_BYTE(i); + } + ob_wp = (uint32_t)(~ob_wp); + op_byte[2] = (ob_wp & LOW_8BITS_MASK) | ((ob_wp & HIGH_8BITS_MASK) << 8U); + op_byte[3] = ((ob_wp & LOW_8BITS_MASK1) >> 16U) | ((ob_wp & HIGH_8BITS_MASK1) >> 8U); + + if(FMC_READY == fmc_state){ + /* start erase the option byte */ + FMC_CTL |= FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_START; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + /* reset the OBER bit and enable the option bytes programming */ + FMC_CTL &= ~FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_OBPG; + + for(i = 0U; i < 4U; i++){ + OP_BYTE(i) = op_byte[i]; + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + if(FMC_READY != fmc_state){ + break; + } + } + + /* reset the OBPG bit */ + FMC_CTL &= ~FMC_CTL_OBPG; + }else{ + /* reset the OBER bit */ + FMC_CTL &= ~FMC_CTL_OBER; + } + } + + /* return the FMC state */ + return fmc_state; +} + +/*! + \brief configure security protection + \param[in] ob_spc: specify security protection code + only one parameter can be selected which is shown as below: + \arg FMC_NSPC: no security protection + \arg FMC_USPC: under security protection + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_PGERR: program error + \arg FMC_PGAERR: program alignment error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum ob_security_protection_config(uint8_t ob_spc) +{ + uint8_t i; + uint32_t op_byte[4]; + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + for(i = 0U; i < 4U; i++){ + op_byte[i] = OP_BYTE(i); + } + op_byte[0] = ((uint32_t)(ob_spc)) | ((op_byte[0] & HIGH_16BITS_MASK)); + + if(FMC_READY == fmc_state){ + /* start erase the option byte */ + FMC_CTL |= FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_START; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + /* reset the OBER bit and enable the option bytes programming */ + FMC_CTL &= ~FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_OBPG; + + for(i = 0U; i < 4U; i++){ + OP_BYTE(i) = op_byte[i]; + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + if(FMC_READY != fmc_state){ + break; + } + } + + /* reset the OBPG bit */ + FMC_CTL &= ~FMC_CTL_OBPG; + }else{ + /* reset the OBER bit */ + FMC_CTL &= ~FMC_CTL_OBER; + } + } + + /* return the FMC state */ + return fmc_state; +} + +/*! + \brief program option bytes USER + programmer must ensure FMC & option bytes are both unlocked before calling this function + \param[in] ob_fwdgt: option bytes free watchdog value + only one parameter can be selected which is shown as below: + \arg OB_FWDGT_SW: software free watchdog + \arg OB_FWDGT_HW: hardware free watchdog + \param[in] ob_deepsleep: option bytes deepsleep reset value + only one parameter can be selected which is shown as below: + \arg OB_DEEPSLEEP_NRST: no reset when entering deepsleep mode + \arg OB_DEEPSLEEP_RST: generate a reset instead of entering deepsleep mode + \param[in] ob_stdby: option bytes standby reset value + only one parameter can be selected which is shown as below: + \arg OB_STDBY_NRST: no reset when entering standby mode + \arg OB_STDBY_RST: generate a reset instead of entering standby mode + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_PGERR: program error + \arg FMC_PGAERR: program alignment error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum ob_user_write(uint8_t ob_fwdgt, uint8_t ob_deepsleep, uint8_t ob_stdby) +{ + uint8_t i; + uint32_t temp; + uint32_t op_byte[4]; + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + for(i = 0U; i < 4U; i++){ + op_byte[i] = OP_BYTE(i); + } + temp = ((uint8_t)((uint8_t)((uint8_t)(ob_fwdgt) | ob_deepsleep) | ob_stdby) | (OB_USER_MASK)); + op_byte[0] = ((uint32_t)(temp) << 16U) | ((op_byte[0] & LOW_16BITS_MASK)); + + if(FMC_READY == fmc_state){ + /* start erase the option byte */ + FMC_CTL |= FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_START; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + /* reset the OBER bit and enable the option bytes programming */ + FMC_CTL &= ~FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_OBPG; + + for(i = 0U; i < 4U; i++){ + OP_BYTE(i) = op_byte[i]; + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + if(FMC_READY != fmc_state){ + break; + } + } + + /* reset the OBPG bit */ + FMC_CTL &= ~FMC_CTL_OBPG; + }else{ + /* reset the OBER bit */ + FMC_CTL &= ~FMC_CTL_OBER; + } + } + + /* return the FMC state */ + return fmc_state; +} + +/*! + \brief program option bytes data + \param[in] ob_data: the byte to be programmed + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_PGERR: program error + \arg FMC_PGAERR: program alignment error + \arg FMC_TOERR: timeout error +*/ + +fmc_state_enum ob_data_program(uint16_t ob_data) +{ + uint8_t i; + uint32_t op_byte[4]; + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + for(i = 0U; i < 4U; i++){ + op_byte[i] = OP_BYTE(i); + } + op_byte[1] = (uint32_t)((ob_data & LOW_8BITS_MASK) | ((ob_data & HIGH_8BITS_MASK) << 8U)); + + if(FMC_READY == fmc_state){ + /* start erase the option byte */ + FMC_CTL |= FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_START; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + /* reset the OBER bit and enable the option bytes programming */ + FMC_CTL &= ~FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_OBPG; + + for(i = 0U; i < 4U; i++){ + OP_BYTE(i) = op_byte[i]; + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + if(FMC_READY != fmc_state){ + break; + } + } + + /* reset the OBPG bit */ + FMC_CTL &= ~FMC_CTL_OBPG; + }else{ + /* reset the OBER bit */ + FMC_CTL &= ~FMC_CTL_OBER; + } + } + + /* return the FMC state */ + return fmc_state; +} + +#ifdef GD32C103XXA + +/*! + \brief get the address where ECC error occur on + \param[in] none + \param[out] none + \retval uint16_t: the address where ECC error occur on +*/ +uint16_t fmc_ecc_address_get(void) +{ + return (uint16_t)(FMC_ECCCS >> ECCEADDR_OFFSET); +} + +/*! + \brief check ECC flag is set or not + \param[in] flag: check FMC ECC flag + only one parameter can be selected which is shown as below: + \arg FMC_FLAG_ECCCOR: one bit error detected and correct flag + \arg FMC_FLAG_ECCDET: two bits error detect flag + \arg FMC_FLAG_SYSECC: an ECC error is detected in system memory flag + \arg FMC_FLAG_MFECC: an ECC error is detected in main Flash flag + \arg FMC_FLAG_OTPECC: an ECC error is detected in OTP flag + \arg FMC_FLAG_OBECC: an ECC error is detected in reading option bytes flag + \arg FMC_FLAG_OBECCDET: option bytes two bits error detect in loading option bytes to register flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus fmc_ecc_flag_get(uint32_t flag) +{ + FlagStatus status = RESET; + + if(FMC_ECCCS & flag){ + status = SET; + } + /* return the state of corresponding FMC flag */ + return status; +} + +/*! + \brief check ECC flag is set or not + \param[in] flag: check FMC ECC flag + only one parameter can be selected which is shown as below: + \arg FMC_FLAG_ECCCOR: one bit error detected and correct flag + \arg FMC_FLAG_ECCDET: two bits error detect flag + \arg FMC_FLAG_SYSECC: an ECC error is detected in system memory flag + \arg FMC_FLAG_MFECC: an ECC error is detected in main Flash flag + \arg FMC_FLAG_OTPECC: an ECC error is detected in OTP flag + \arg FMC_FLAG_OBECC: an ECC error is detected in reading option bytes flag + \arg FMC_FLAG_OBECCDET: option bytes two bits error detect in loading option bytes to register flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +void fmc_ecc_flag_clear(uint32_t flag) +{ + FMC_ECCCS |= flag; +} + +/*! + \brief enable FMC ECC interrupt + \param[in] interrupt: the FMC ECC interrupt source + only one parameter can be selected which is shown as below: + \arg FMC_INT_ECCCOR: FMC one bit error correct interrupt + \arg FMC_INT_ECCDET: FMC two bits error interrupt + \param[out] none + \retval none +*/ +void fmc_ecc_interrupt_enable(uint32_t interrupt) +{ + FMC_ECCCS |= interrupt; +} + +/*! + \brief disable FMC ECC interrupt + \param[in] interrupt: the FMC ECC interrupt source + only one parameter can be selected which is shown as below: + \arg FMC_INT_ECCCOR: FMC one bit error correct interrupt + \arg FMC_INT_ECCDET: FMC two bits error interrupt + \param[out] none + \retval none +*/ +void fmc_ecc_interrupt_disable(uint32_t interrupt) +{ + uint32_t temp = (FMC_ECCCS & BITS(14,15)); + temp &= ~(uint32_t)(interrupt); + FMC_ECCCS = temp; +} + +/*! + \brief get FMC ECC interrupt flag + \param[in] int_flag: FMC ECC interrupt flag + only one parameter can be selected which is shown as below: + \arg FMC_INT_FLAG_ECCCOR: one bit error detected and correct interrupt flag + \arg FMC_INT_FLAG_ECCDET: two bits error detect interrupt flag + \arg FMC_INT_FLAG_OBECCDET: option bytes two bits error detect in loading option bytes to register interrupt flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus fmc_ecc_interrupt_flag_get(uint32_t int_flag) +{ + uint32_t intenable = 0U, flagstatus = 0U; + /* get the interrupt enable bit status */ + intenable = (FMC_REG_VAL(int_flag) & BIT(FMC_BIT_POS(int_flag))); + /* get the corresponding flag bit status */ + flagstatus = (FMC_REG_VAL2(int_flag) & BIT(FMC_BIT_POS2(int_flag))); + + if(flagstatus && intenable) { + return SET; + } else { + return RESET; + } + +} + +/*! + \brief clear FMC ECC interrupt flag + \param[in] int_flag: FMC ECC interrupt flag + one or more parameters can be selected which is shown as below: + \arg FMC_INT_FLAG_ECCCOR: one bit error detected and correct interrupt flag + \arg FMC_INT_FLAG_ECCDET: two bits error detect interrupt flag + \arg FMC_INT_FLAG_OBECCDET: option bytes two bits error detect in loading option bytes to register interrupt flag + \param[out] none + \retval none +*/ +void fmc_ecc_interrupt_flag_clear(uint32_t int_flag) +{ + FMC_ECCCS |= int_flag; +} + +#endif +/*! + \brief get OB_USER in register FMC_OBSTAT + \param[in] none + \param[out] none + \retval the FMC user option bytes values +*/ +uint8_t ob_user_get(void) +{ + /* return the FMC user option bytes value */ + return (uint8_t)(FMC_OBSTAT >> 2U); +} + +/*! + \brief get OB_DATA in register FMC_OBSTAT + \param[in] none + \param[out] none + \retval ob_data +*/ +uint16_t ob_data_get(void) +{ + return (uint16_t)(FMC_OBSTAT >> 10U); +} + +/*! + \brief get the FMC option byte write protection (OB_WP) in register FMC_WP + \param[in] none + \param[out] none + \retval the FMC write protection option bytes value +*/ +uint32_t ob_write_protection_get(void) +{ + /* return the FMC write protection option bytes value */ + return FMC_WP; +} + +/*! + \brief get the FMC option bytes security protection state + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus ob_security_protection_flag_get(void) +{ + FlagStatus spc_state = RESET; + + if(RESET != (FMC_OBSTAT & FMC_OBSTAT_SPC)){ + spc_state = SET; + }else{ + spc_state = RESET; + } + return spc_state; +} + +/*! + \brief check OBERR flag is set or not + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus fmc_oberr_flag_get(void) +{ + FlagStatus status = RESET; + + if(RESET != (FMC_OBSTAT & FMC_OBSTAT_OBERR)){ + status = SET; + } + /* return the state of corresponding FMC flag */ + return status; +} + +/*! + \brief check flag is set or not + \param[in] flag: check FMC flag + only one parameter can be selected which is shown as below: + \arg FMC_FLAG_BUSY: FMC busy flag bit + \arg FMC_FLAG_PGERR: FMC operation error flag bit + \arg FMC_FLAG_PGAERR: FMC program alignment error flag bit + \arg FMC_FLAG_WPERR: FMC erase/program protection error flag bit + \arg FMC_FLAG_END: FMC end of operation flag bit + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus fmc_flag_get(uint32_t flag) +{ + FlagStatus status = RESET; + + if(FMC_STAT & flag){ + status = SET; + } + /* return the state of corresponding FMC flag */ + return status; +} + +/*! + \brief clear the FMC flag + \param[in] flag: clear FMC flag + one or more parameters can be selected which is shown as below: + \arg FMC_FLAG_PGERR: FMC operation error flag bit + \arg FMC_FLAG_PGAERR: FMC program alignment error flag bit + \arg FMC_FLAG_WPERR: FMC erase/program protection error flag bit + \arg FMC_FLAG_END: FMC end of operation flag bit + \param[out] none + \retval none +*/ +void fmc_flag_clear(uint32_t flag) +{ + /* clear the flags */ + FMC_STAT = flag; +} + +/*! + \brief enable FMC interrupt + \param[in] interrupt: the FMC interrupt source + only one parameter can be selected which is shown as below: + \arg FMC_INT_END: enable FMC end of program interrupt + \arg FMC_INT_ERR: enable FMC error interrupt + \param[out] none + \retval none +*/ +void fmc_interrupt_enable(uint32_t interrupt) +{ + FMC_CTL |= interrupt; +} + +/*! + \brief disable FMC interrupt + \param[in] interrupt: the FMC interrupt source + only one parameter can be selected which is shown as below: + \arg FMC_INT_END: enable FMC end of program interrupt + \arg FMC_INT_ERR: enable FMC error interrupt + \param[out] none + \retval none +*/ +void fmc_interrupt_disable(uint32_t interrupt) +{ + FMC_CTL &= ~(uint32_t)interrupt; +} + +/*! + \brief get FMC interrupt flag state + \param[in] flag: FMC interrupt flags, refer to fmc_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg FMC_INT_FLAG_PGERR: FMC operation error interrupt flag bit + \arg FMC_FLAG_PGAERR: FMC program alignment error flag bit + \arg FMC_INT_FLAG_WPERR: FMC erase/program protection error interrupt flag bit + \arg FMC_INT_FLAG_END: FMC end of operation interrupt flag bit + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus fmc_interrupt_flag_get(uint32_t flag) +{ + FlagStatus status = RESET; + + if(FMC_STAT & flag){ + status = SET; + } + /* return the state of corresponding FMC flag */ + return status; +} + +/*! + \brief clear FMC interrupt flag state + \param[in] flag: FMC interrupt flags, refer to can_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg FMC_INT_FLAG_PGERR: FMC operation error interrupt flag bit + \arg FMC_FLAG_PGAERR: FMC program alignment error flag bit + \arg FMC_INT_FLAG_WPERR: FMC erase/program protection error interrupt flag bit + \arg FMC_INT_FLAG_END: FMC end of operation interrupt flag bit + \param[out] none + \retval none +*/ +void fmc_interrupt_flag_clear(uint32_t flag) +{ + /* clear the flag */ + FMC_STAT = flag; +} + +/*! + \brief get the FMC state + \param[in] none + \param[out] none + \retval state of FMC, refer to fmc_state_enum +*/ +static fmc_state_enum fmc_state_get(void) +{ + fmc_state_enum fmc_state = FMC_READY; + + if((uint32_t)0x00U != (FMC_STAT & FMC_STAT_BUSY)){ + fmc_state = FMC_BUSY; + }else{ + if((uint32_t)0x00U != (FMC_STAT & FMC_STAT_WPERR)){ + fmc_state = FMC_WPERR; + }else{ + if((uint32_t)0x00U != (FMC_STAT & (FMC_STAT_PGERR))){ + fmc_state = FMC_PGERR; + }else{ + if((uint32_t)0x00U != (FMC_STAT & (FMC_STAT_PGAERR))){ + fmc_state = FMC_PGAERR; + } + } + } + } + /* return the FMC state */ + return fmc_state; +} + +/*! + \brief check whether FMC is ready or not + \param[in] timeout: count of loop + \param[out] none + \retval state of FMC, refer to fmc_state_enum +*/ +static fmc_state_enum fmc_ready_wait(uint32_t timeout) +{ + fmc_state_enum fmc_state = FMC_BUSY; + + /* wait for FMC ready */ + do{ + /* get FMC state */ + fmc_state = fmc_state_get(); + timeout--; + }while((FMC_BUSY == fmc_state) && (0x00U != timeout)); + + if(FMC_BUSY == fmc_state){ + fmc_state = FMC_TOERR; + } + /* return the FMC state */ + return fmc_state; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c.base@1.0.0 new file mode 100644 index 0000000..3a3eae2 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c.base@1.0.0 @@ -0,0 +1,1033 @@ +/*! + \file gd32c10x_fmc.c + \brief FMC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_fmc.h" + +/* FMC mask */ +#define LOW_8BITS_MASK ((uint32_t)0x000000FFU) +#define HIGH_8BITS_MASK ((uint32_t)0x0000FF00U) +#define LOW_8BITS_MASK1 ((uint32_t)0x00FF0000U) +#define HIGH_8BITS_MASK1 ((uint32_t)0xFF000000U) +#define LOW_16BITS_MASK ((uint32_t)0x0000FFFFU) +#define HIGH_16BITS_MASK ((uint32_t)0xFFFF0000U) + +/* USER of option bytes mask */ +#define OB_USER_MASK ((uint8_t)0xF8U) + +/* OB_WP mask */ +#define OB_WP0_MASK ((uint32_t)0x000000FFU) +#define OB_WP1_MASK ((uint32_t)0x0000FF00U) +#define OB_WP2_MASK ((uint32_t)0x00FF0000U) +#define OB_WP3_MASK ((uint32_t)0xFF000000U) + +/* return the FMC state */ +static fmc_state_enum fmc_state_get(void); +/* check FMC ready or not */ +static fmc_state_enum fmc_ready_wait(uint32_t timeout); + +/* FMC main memory programming functions */ + +/*! + \brief enable pre-fetch + \param[in] none + \param[out] none + \retval none +*/ +void fmc_prefetch_enable(void) +{ + FMC_WS |= FMC_WS_PFEN; +} + +/*! + \brief disable pre-fetch + \param[in] none + \param[out] none + \retval none +*/ +void fmc_prefetch_disable(void) +{ + FMC_WS &= ~FMC_WS_PFEN; +} + +/*! + \brief enable IBUS cache + \param[in] none + \param[out] none + \retval none +*/ +void fmc_ibus_enable(void) +{ + FMC_WS |= FMC_WS_ICEN; +} + +/*! + \brief disable IBUS cache + \param[in] none + \param[out] none + \retval none +*/ +void fmc_ibus_disable(void) +{ + FMC_WS &= ~FMC_WS_ICEN; +} + +/*! + \brief enable DBUS cache + \param[in] none + \param[out] none + \retval none +*/ +void fmc_dbus_enable(void) +{ + FMC_WS |= FMC_WS_DCEN; +} + +/*! + \brief disable DBUS cache + \param[in] none + \param[out] none + \retval none +*/ +void fmc_dbus_disable(void) +{ + FMC_WS &= ~FMC_WS_DCEN; +} + +/*! + \brief reset IBUS cache + \param[in] none + \param[out] none + \retval none +*/ +void fmc_ibus_reset(void) +{ + FMC_WS |= FMC_WS_ICRST; +} + +/*! + \brief reset DBUS cache + \param[in] none + \param[out] none + \retval none +*/ +void fmc_dbus_reset(void) +{ + FMC_WS |= FMC_WS_DCRST; +} + +/*! + \brief set program width to flash memory + \param[in] pgw + only one parameter can be selected which is shown as below: + \arg FMC_PROG_W_32B: 32-bit program width to flash memory + \arg FMC_PROG_W_64B: 64-bit program width to flash memory + \param[out] none + \retval none +*/ +void fmc_program_width_set(uint32_t pgw) +{ + uint32_t reg; + + reg = FMC_WS; + /* configure program width to flash memory */ + reg &= ~FMC_WS_PGW; + FMC_WS = (reg | pgw); +} + +/*! + \brief unlock the main FMC operation + \param[in] none + \param[out] none + \retval none +*/ +void fmc_unlock(void) +{ + if(RESET != (FMC_CTL & FMC_CTL_LK)){ + /* write the FMC unlock key */ + FMC_KEY = UNLOCK_KEY0; + FMC_KEY = UNLOCK_KEY1; + } +} + +/*! + \brief lock the main FMC operation + \param[in] none + \param[out] none + \retval none +*/ +void fmc_lock(void) +{ + /* set the LK bit */ + FMC_CTL |= FMC_CTL_LK; +} + +/*! + \brief set the wait state counter value + \param[in] wscnt:wait state counter value + only one parameter can be selected which is shown as below: + \arg FMC_WAIT_STATE_0: FMC 0 wait + \arg FMC_WAIT_STATE_1: FMC 1 wait + \arg FMC_WAIT_STATE_2: FMC 2 wait + \arg FMC_WAIT_STATE_3: FMC 3 wait + \param[out] none + \retval none +*/ +void fmc_wscnt_set(uint32_t wscnt) +{ + uint32_t reg; + + reg = FMC_WS; + /* set the wait state counter value */ + reg &= ~FMC_WS_WSCNT; + FMC_WS = (reg | wscnt); +} + +/*! + \brief FMC erase page + \param[in] page_address: target page address + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_WPERR: erase/program protection error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum fmc_page_erase(uint32_t page_address) +{ + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + FMC_CTL |= FMC_CTL_PER; + FMC_ADDR = page_address; + FMC_CTL |= FMC_CTL_START; + __DSB(); + __ISB(); + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + /* reset the PER bit */ + FMC_CTL &= ~FMC_CTL_PER; + } + + /* return the FMC state */ + return fmc_state; +} + +/*! + \brief FMC erase whole chip + \param[in] none + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_WPERR: erase/program protection error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum fmc_mass_erase(void) +{ + fmc_state_enum fmc_state; + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + /* start whole chip erase */ + FMC_CTL |= FMC_CTL_MER; + FMC_CTL |= FMC_CTL_START; + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + /* reset the MER bit */ + FMC_CTL &= ~FMC_CTL_MER; + } + + /* return the FMC state */ + return fmc_state; +} + +/*! + \brief FMC program a double word at the corresponding address + \param[in] address: address to program + \param[in] data: double word to program + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_PGERR: program error + \arg FMC_PGAERR: program alignment error + \arg FMC_WPERR: erase/program protection error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum fmc_doubleword_program(uint32_t address, uint64_t data) +{ + uint32_t data0, data1; + + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + data0 = (uint32_t)(data & 0xFFFFFFFFU); + data1 = (uint32_t)((data >> 32U) & 0xFFFFFFFFU); + + if(FMC_READY == fmc_state){ + /* set the PGW and PG bit to start program */ + FMC_WS |= FMC_WS_PGW; + FMC_CTL |= FMC_CTL_PG; + + REG32(address) = data0; + REG32(address + 4U) = data1; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + /* reset the PG and PGW bit */ + FMC_CTL &= ~FMC_CTL_PG; + FMC_WS &= ~FMC_WS_PGW; + } + + /* return the FMC state */ + return fmc_state; +} + +#ifndef GD32C103XXA +/*! + \brief FMC program a word at the corresponding address + \param[in] address: address to program + \param[in] data: word to program + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_PGERR: program error + \arg FMC_PGAERR: program alignment error + \arg FMC_WPERR: erase/program protection error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum fmc_word_program(uint32_t address, uint32_t data) +{ + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + /* set the PG bit to start program */ + FMC_CTL |= FMC_CTL_PG; + REG32(address) = data; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + /* reset the PG bit */ + FMC_CTL &= ~FMC_CTL_PG; + } + + /* return the FMC state */ + return fmc_state; +} +#endif + +/*! + \brief unlock the option byte operation + it is better to used in pairs with ob_lock + \param[in] none + \param[out] none + \retval none +*/ +void ob_unlock(void) +{ + if(RESET == (FMC_CTL & FMC_CTL_OBWEN)){ + /* write the FMC key */ + FMC_OBKEY = UNLOCK_KEY0; + FMC_OBKEY = UNLOCK_KEY1; + } +} + +/*! + \brief lock the option byte operation + it is better to used in pairs with ob_unlock after an operation + \param[in] none + \param[out] none + \retval none +*/ +void ob_lock(void) +{ + /* reset the OBWEN bit */ + FMC_CTL &= ~FMC_CTL_OBWEN; +} + +/*! + \brief erase the FMC option bytes + programmer must ensure FMC & option byte are both unlocked before calling this function + \param[in] none + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_PGERR: program error + \arg FMC_PGAERR: program alignment error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum ob_erase(void) +{ + uint8_t temp_spc; + uint32_t temp; + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + /* check the option bytes security protection value */ + if(RESET == ob_security_protection_flag_get()){ + temp_spc = FMC_NSPC; + }else{ + temp_spc = FMC_USPC; + } + + temp = HIGH_16BITS_MASK | ((uint32_t)temp_spc); + + if(FMC_READY == fmc_state){ + /* start erase the option bytes */ + FMC_CTL |= FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_START; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + /* reset the OBER bit and enable the option bytes programming */ + FMC_CTL &= ~FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_OBPG; + + /* restore the last get option byte security protection code */ + OB_SPC_USER = temp; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + /* reset the OBPG bit */ + FMC_CTL &= ~FMC_CTL_OBPG; + }else{ + /* reset the OBER bit */ + FMC_CTL &= ~FMC_CTL_OBER; + } + } + /* return the FMC state */ + return fmc_state; +} + +/*! + \brief enable write protection + \param[in] ob_wp: specify sector to be write protected + one or more parameters can be selected which are shown as below: + \arg OB_WP_NONE: disable all write protection + \arg OB_WP_x(x=0..31): write protect specify sector + \arg OB_WP_ALL: write protect all sector + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_PGERR: program error + \arg FMC_PGAERR: program alignment error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum ob_write_protection_enable(uint32_t ob_wp) +{ + uint32_t i; + uint32_t op_byte[4]; + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + for(i = 0U; i < 4U; i++){ + op_byte[i] = OP_BYTE(i); + } + ob_wp = (uint32_t)(~ob_wp); + op_byte[2] = (ob_wp & LOW_8BITS_MASK) | ((ob_wp & HIGH_8BITS_MASK) << 8U); + op_byte[3] = ((ob_wp & LOW_8BITS_MASK1) >> 16U) | ((ob_wp & HIGH_8BITS_MASK1) >> 8U); + + if(FMC_READY == fmc_state){ + /* start erase the option byte */ + FMC_CTL |= FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_START; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + /* reset the OBER bit and enable the option bytes programming */ + FMC_CTL &= ~FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_OBPG; + + for(i = 0U; i < 4U; i++){ + OP_BYTE(i) = op_byte[i]; + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + if(FMC_READY != fmc_state){ + break; + } + } + + /* reset the OBPG bit */ + FMC_CTL &= ~FMC_CTL_OBPG; + }else{ + /* reset the OBER bit */ + FMC_CTL &= ~FMC_CTL_OBER; + } + } + + /* return the FMC state */ + return fmc_state; +} + +/*! + \brief configure security protection + \param[in] ob_spc: specify security protection code + only one parameter can be selected which is shown as below: + \arg FMC_NSPC: no security protection + \arg FMC_USPC: under security protection + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_PGERR: program error + \arg FMC_PGAERR: program alignment error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum ob_security_protection_config(uint8_t ob_spc) +{ + uint8_t i; + uint32_t op_byte[4]; + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + for(i = 0U; i < 4U; i++){ + op_byte[i] = OP_BYTE(i); + } + op_byte[0] = ((uint32_t)(ob_spc)) | ((op_byte[0] & HIGH_16BITS_MASK)); + + if(FMC_READY == fmc_state){ + /* start erase the option byte */ + FMC_CTL |= FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_START; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + /* reset the OBER bit and enable the option bytes programming */ + FMC_CTL &= ~FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_OBPG; + + for(i = 0U; i < 4U; i++){ + OP_BYTE(i) = op_byte[i]; + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + if(FMC_READY != fmc_state){ + break; + } + } + + /* reset the OBPG bit */ + FMC_CTL &= ~FMC_CTL_OBPG; + }else{ + /* reset the OBER bit */ + FMC_CTL &= ~FMC_CTL_OBER; + } + } + + /* return the FMC state */ + return fmc_state; +} + +/*! + \brief program option bytes USER + programmer must ensure FMC & option bytes are both unlocked before calling this function + \param[in] ob_fwdgt: option bytes free watchdog value + only one parameter can be selected which is shown as below: + \arg OB_FWDGT_SW: software free watchdog + \arg OB_FWDGT_HW: hardware free watchdog + \param[in] ob_deepsleep: option bytes deepsleep reset value + only one parameter can be selected which is shown as below: + \arg OB_DEEPSLEEP_NRST: no reset when entering deepsleep mode + \arg OB_DEEPSLEEP_RST: generate a reset instead of entering deepsleep mode + \param[in] ob_stdby: option bytes standby reset value + only one parameter can be selected which is shown as below: + \arg OB_STDBY_NRST: no reset when entering standby mode + \arg OB_STDBY_RST: generate a reset instead of entering standby mode + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_PGERR: program error + \arg FMC_PGAERR: program alignment error + \arg FMC_TOERR: timeout error +*/ +fmc_state_enum ob_user_write(uint8_t ob_fwdgt, uint8_t ob_deepsleep, uint8_t ob_stdby) +{ + uint8_t i; + uint32_t temp; + uint32_t op_byte[4]; + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + for(i = 0U; i < 4U; i++){ + op_byte[i] = OP_BYTE(i); + } + temp = ((uint8_t)((uint8_t)((uint8_t)(ob_fwdgt) | ob_deepsleep) | ob_stdby) | (OB_USER_MASK)); + op_byte[0] = ((uint32_t)(temp) << 16U) | ((op_byte[0] & LOW_16BITS_MASK)); + + if(FMC_READY == fmc_state){ + /* start erase the option byte */ + FMC_CTL |= FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_START; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + /* reset the OBER bit and enable the option bytes programming */ + FMC_CTL &= ~FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_OBPG; + + for(i = 0U; i < 4U; i++){ + OP_BYTE(i) = op_byte[i]; + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + if(FMC_READY != fmc_state){ + break; + } + } + + /* reset the OBPG bit */ + FMC_CTL &= ~FMC_CTL_OBPG; + }else{ + /* reset the OBER bit */ + FMC_CTL &= ~FMC_CTL_OBER; + } + } + + /* return the FMC state */ + return fmc_state; +} + +/*! + \brief program option bytes data + \param[in] ob_data: the byte to be programmed + \param[out] none + \retval state of FMC + \arg FMC_READY: the operation has been completed + \arg FMC_PGERR: program error + \arg FMC_PGAERR: program alignment error + \arg FMC_TOERR: timeout error +*/ + +fmc_state_enum ob_data_program(uint16_t ob_data) +{ + uint8_t i; + uint32_t op_byte[4]; + fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + for(i = 0U; i < 4U; i++){ + op_byte[i] = OP_BYTE(i); + } + op_byte[1] = (uint32_t)((ob_data & LOW_8BITS_MASK) | ((ob_data & HIGH_8BITS_MASK) << 8U)); + + if(FMC_READY == fmc_state){ + /* start erase the option byte */ + FMC_CTL |= FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_START; + + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + + if(FMC_READY == fmc_state){ + /* reset the OBER bit and enable the option bytes programming */ + FMC_CTL &= ~FMC_CTL_OBER; + FMC_CTL |= FMC_CTL_OBPG; + + for(i = 0U; i < 4U; i++){ + OP_BYTE(i) = op_byte[i]; + /* wait for the FMC ready */ + fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT); + if(FMC_READY != fmc_state){ + break; + } + } + + /* reset the OBPG bit */ + FMC_CTL &= ~FMC_CTL_OBPG; + }else{ + /* reset the OBER bit */ + FMC_CTL &= ~FMC_CTL_OBER; + } + } + + /* return the FMC state */ + return fmc_state; +} + +#ifdef GD32C103XXA + +/*! + \brief get the address where ECC error occur on + \param[in] none + \param[out] none + \retval uint16_t: the address where ECC error occur on +*/ +uint16_t fmc_ecc_address_get(void) +{ + return (uint16_t)(FMC_ECCCS >> ECCEADDR_OFFSET); +} + +/*! + \brief check ECC flag is set or not + \param[in] flag: check FMC ECC flag + only one parameter can be selected which is shown as below: + \arg FMC_FLAG_ECCCOR: one bit error detected and correct flag + \arg FMC_FLAG_ECCDET: two bits error detect flag + \arg FMC_FLAG_SYSECC: an ECC error is detected in system memory flag + \arg FMC_FLAG_MFECC: an ECC error is detected in main Flash flag + \arg FMC_FLAG_OTPECC: an ECC error is detected in OTP flag + \arg FMC_FLAG_OBECC: an ECC error is detected in reading option bytes flag + \arg FMC_FLAG_OBECCDET: option bytes two bits error detect in loading option bytes to register flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus fmc_ecc_flag_get(uint32_t flag) +{ + FlagStatus status = RESET; + + if(FMC_ECCCS & flag){ + status = SET; + } + /* return the state of corresponding FMC flag */ + return status; +} + +/*! + \brief check ECC flag is set or not + \param[in] flag: check FMC ECC flag + only one parameter can be selected which is shown as below: + \arg FMC_FLAG_ECCCOR: one bit error detected and correct flag + \arg FMC_FLAG_ECCDET: two bits error detect flag + \arg FMC_FLAG_SYSECC: an ECC error is detected in system memory flag + \arg FMC_FLAG_MFECC: an ECC error is detected in main Flash flag + \arg FMC_FLAG_OTPECC: an ECC error is detected in OTP flag + \arg FMC_FLAG_OBECC: an ECC error is detected in reading option bytes flag + \arg FMC_FLAG_OBECCDET: option bytes two bits error detect in loading option bytes to register flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +void fmc_ecc_flag_clear(uint32_t flag) +{ + FMC_ECCCS |= flag; +} + +/*! + \brief enable FMC ECC interrupt + \param[in] interrupt: the FMC ECC interrupt source + only one parameter can be selected which is shown as below: + \arg FMC_INT_ECCCOR: FMC one bit error correct interrupt + \arg FMC_INT_ECCDET: FMC two bits error interrupt + \param[out] none + \retval none +*/ +void fmc_ecc_interrupt_enable(uint32_t interrupt) +{ + FMC_ECCCS |= interrupt; +} + +/*! + \brief disable FMC ECC interrupt + \param[in] interrupt: the FMC ECC interrupt source + only one parameter can be selected which is shown as below: + \arg FMC_INT_ECCCOR: FMC one bit error correct interrupt + \arg FMC_INT_ECCDET: FMC two bits error interrupt + \param[out] none + \retval none +*/ +void fmc_ecc_interrupt_disable(uint32_t interrupt) +{ + uint32_t temp = (FMC_ECCCS & BITS(14,15)); + temp &= ~(uint32_t)(interrupt); + FMC_ECCCS = temp; +} + +/*! + \brief get FMC ECC interrupt flag + \param[in] int_flag: FMC ECC interrupt flag + only one parameter can be selected which is shown as below: + \arg FMC_INT_FLAG_ECCCOR: one bit error detected and correct interrupt flag + \arg FMC_INT_FLAG_ECCDET: two bits error detect interrupt flag + \arg FMC_INT_FLAG_OBECCDET: option bytes two bits error detect in loading option bytes to register interrupt flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus fmc_ecc_interrupt_flag_get(uint32_t int_flag) +{ + uint32_t intenable = 0U, flagstatus = 0U; + /* get the interrupt enable bit status */ + intenable = (FMC_REG_VAL(int_flag) & BIT(FMC_BIT_POS(int_flag))); + /* get the corresponding flag bit status */ + flagstatus = (FMC_REG_VAL2(int_flag) & BIT(FMC_BIT_POS2(int_flag))); + + if(flagstatus && intenable) { + return SET; + } else { + return RESET; + } + +} + +/*! + \brief clear FMC ECC interrupt flag + \param[in] int_flag: FMC ECC interrupt flag + one or more parameters can be selected which is shown as below: + \arg FMC_INT_FLAG_ECCCOR: one bit error detected and correct interrupt flag + \arg FMC_INT_FLAG_ECCDET: two bits error detect interrupt flag + \arg FMC_INT_FLAG_OBECCDET: option bytes two bits error detect in loading option bytes to register interrupt flag + \param[out] none + \retval none +*/ +void fmc_ecc_interrupt_flag_clear(uint32_t int_flag) +{ + FMC_ECCCS |= int_flag; +} + +#endif +/*! + \brief get OB_USER in register FMC_OBSTAT + \param[in] none + \param[out] none + \retval the FMC user option bytes values +*/ +uint8_t ob_user_get(void) +{ + /* return the FMC user option bytes value */ + return (uint8_t)(FMC_OBSTAT >> 2U); +} + +/*! + \brief get OB_DATA in register FMC_OBSTAT + \param[in] none + \param[out] none + \retval ob_data +*/ +uint16_t ob_data_get(void) +{ + return (uint16_t)(FMC_OBSTAT >> 10U); +} + +/*! + \brief get the FMC option byte write protection (OB_WP) in register FMC_WP + \param[in] none + \param[out] none + \retval the FMC write protection option bytes value +*/ +uint32_t ob_write_protection_get(void) +{ + /* return the FMC write protection option bytes value */ + return FMC_WP; +} + +/*! + \brief get the FMC option bytes security protection state + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus ob_security_protection_flag_get(void) +{ + FlagStatus spc_state = RESET; + + if(RESET != (FMC_OBSTAT & FMC_OBSTAT_SPC)){ + spc_state = SET; + }else{ + spc_state = RESET; + } + return spc_state; +} + +/*! + \brief check OBERR flag is set or not + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus fmc_oberr_flag_get(void) +{ + FlagStatus status = RESET; + + if(RESET != (FMC_OBSTAT & FMC_OBSTAT_OBERR)){ + status = SET; + } + /* return the state of corresponding FMC flag */ + return status; +} + +/*! + \brief check flag is set or not + \param[in] flag: check FMC flag + only one parameter can be selected which is shown as below: + \arg FMC_FLAG_BUSY: FMC busy flag bit + \arg FMC_FLAG_PGERR: FMC operation error flag bit + \arg FMC_FLAG_PGAERR: FMC program alignment error flag bit + \arg FMC_FLAG_WPERR: FMC erase/program protection error flag bit + \arg FMC_FLAG_END: FMC end of operation flag bit + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus fmc_flag_get(uint32_t flag) +{ + FlagStatus status = RESET; + + if(FMC_STAT & flag){ + status = SET; + } + /* return the state of corresponding FMC flag */ + return status; +} + +/*! + \brief clear the FMC flag + \param[in] flag: clear FMC flag + one or more parameters can be selected which is shown as below: + \arg FMC_FLAG_PGERR: FMC operation error flag bit + \arg FMC_FLAG_PGAERR: FMC program alignment error flag bit + \arg FMC_FLAG_WPERR: FMC erase/program protection error flag bit + \arg FMC_FLAG_END: FMC end of operation flag bit + \param[out] none + \retval none +*/ +void fmc_flag_clear(uint32_t flag) +{ + /* clear the flags */ + FMC_STAT = flag; +} + +/*! + \brief enable FMC interrupt + \param[in] interrupt: the FMC interrupt source + only one parameter can be selected which is shown as below: + \arg FMC_INT_END: enable FMC end of program interrupt + \arg FMC_INT_ERR: enable FMC error interrupt + \param[out] none + \retval none +*/ +void fmc_interrupt_enable(uint32_t interrupt) +{ + FMC_CTL |= interrupt; +} + +/*! + \brief disable FMC interrupt + \param[in] interrupt: the FMC interrupt source + only one parameter can be selected which is shown as below: + \arg FMC_INT_END: enable FMC end of program interrupt + \arg FMC_INT_ERR: enable FMC error interrupt + \param[out] none + \retval none +*/ +void fmc_interrupt_disable(uint32_t interrupt) +{ + FMC_CTL &= ~(uint32_t)interrupt; +} + +/*! + \brief get FMC interrupt flag state + \param[in] flag: FMC interrupt flags, refer to fmc_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg FMC_INT_FLAG_PGERR: FMC operation error interrupt flag bit + \arg FMC_FLAG_PGAERR: FMC program alignment error flag bit + \arg FMC_INT_FLAG_WPERR: FMC erase/program protection error interrupt flag bit + \arg FMC_INT_FLAG_END: FMC end of operation interrupt flag bit + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus fmc_interrupt_flag_get(uint32_t flag) +{ + FlagStatus status = RESET; + + if(FMC_STAT & flag){ + status = SET; + } + /* return the state of corresponding FMC flag */ + return status; +} + +/*! + \brief clear FMC interrupt flag state + \param[in] flag: FMC interrupt flags, refer to can_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg FMC_INT_FLAG_PGERR: FMC operation error interrupt flag bit + \arg FMC_FLAG_PGAERR: FMC program alignment error flag bit + \arg FMC_INT_FLAG_WPERR: FMC erase/program protection error interrupt flag bit + \arg FMC_INT_FLAG_END: FMC end of operation interrupt flag bit + \param[out] none + \retval none +*/ +void fmc_interrupt_flag_clear(uint32_t flag) +{ + /* clear the flag */ + FMC_STAT = flag; +} + +/*! + \brief get the FMC state + \param[in] none + \param[out] none + \retval state of FMC, refer to fmc_state_enum +*/ +static fmc_state_enum fmc_state_get(void) +{ + fmc_state_enum fmc_state = FMC_READY; + + if((uint32_t)0x00U != (FMC_STAT & FMC_STAT_BUSY)){ + fmc_state = FMC_BUSY; + }else{ + if((uint32_t)0x00U != (FMC_STAT & FMC_STAT_WPERR)){ + fmc_state = FMC_WPERR; + }else{ + if((uint32_t)0x00U != (FMC_STAT & (FMC_STAT_PGERR))){ + fmc_state = FMC_PGERR; + }else{ + if((uint32_t)0x00U != (FMC_STAT & (FMC_STAT_PGAERR))){ + fmc_state = FMC_PGAERR; + } + } + } + } + /* return the FMC state */ + return fmc_state; +} + +/*! + \brief check whether FMC is ready or not + \param[in] timeout: count of loop + \param[out] none + \retval state of FMC, refer to fmc_state_enum +*/ +static fmc_state_enum fmc_ready_wait(uint32_t timeout) +{ + fmc_state_enum fmc_state = FMC_BUSY; + + /* wait for FMC ready */ + do{ + /* get FMC state */ + fmc_state = fmc_state_get(); + timeout--; + }while((FMC_BUSY == fmc_state) && (0x00U != timeout)); + + if(FMC_BUSY == fmc_state){ + fmc_state = FMC_TOERR; + } + /* return the FMC state */ + return fmc_state; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c new file mode 100644 index 0000000..35661db --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c @@ -0,0 +1,215 @@ +/*! + \file gd32c10x_fwdgt.c + \brief FWDGT driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_fwdgt.h" + +/*! + \brief enable write access to FWDGT_PSC and FWDGT_RLD + \param[in] none + \param[out] none + \retval none +*/ +void fwdgt_write_enable(void) +{ + FWDGT_CTL = FWDGT_WRITEACCESS_ENABLE; +} + +/*! + \brief disable write access to FWDGT_PSC and FWDGT_RLD + \param[in] none + \param[out] none + \retval none +*/ +void fwdgt_write_disable(void) +{ + FWDGT_CTL = FWDGT_WRITEACCESS_DISABLE; +} + +/*! + \brief start the free watchdog timer counter + \param[in] none + \param[out] none + \retval none +*/ +void fwdgt_enable(void) +{ + FWDGT_CTL = FWDGT_KEY_ENABLE; +} + +/*! + \brief configure the free watchdog timer counter prescaler value + \param[in] prescaler_value: specify prescaler value + only one parameter can be selected which is shown as below: + \arg FWDGT_PSC_DIV4: FWDGT prescaler set to 4 + \arg FWDGT_PSC_DIV8: FWDGT prescaler set to 8 + \arg FWDGT_PSC_DIV16: FWDGT prescaler set to 16 + \arg FWDGT_PSC_DIV32: FWDGT prescaler set to 32 + \arg FWDGT_PSC_DIV64: FWDGT prescaler set to 64 + \arg FWDGT_PSC_DIV128: FWDGT prescaler set to 128 + \arg FWDGT_PSC_DIV256: FWDGT prescaler set to 256 + \param[out] none + \retval ErrStatus: ERROR or SUCCESS +*/ +ErrStatus fwdgt_prescaler_value_config(uint16_t prescaler_value) +{ + uint32_t timeout = FWDGT_PSC_TIMEOUT; + uint32_t flag_status = RESET; + + /* enable write access to FWDGT_PSC */ + FWDGT_CTL = FWDGT_WRITEACCESS_ENABLE; + + /* wait until the PUD flag to be reset */ + do { + flag_status = FWDGT_STAT & FWDGT_STAT_PUD; + } while((--timeout > 0U) && ((uint32_t)RESET != flag_status)); + + if((uint32_t)RESET != flag_status) { + return ERROR; + } + + /* configure FWDGT */ + FWDGT_PSC = (uint32_t)prescaler_value; + + return SUCCESS; +} + +/*! + \brief configure the free watchdog timer counter reload value + \param[in] reload_value: specify reload value(0x0000 - 0x0FFF) + \param[out] none + \retval ErrStatus: ERROR or SUCCESS +*/ +ErrStatus fwdgt_reload_value_config(uint16_t reload_value) +{ + uint32_t timeout = FWDGT_RLD_TIMEOUT; + uint32_t flag_status = RESET; + + /* enable write access to FWDGT_RLD */ + FWDGT_CTL = FWDGT_WRITEACCESS_ENABLE; + + /* wait until the RUD flag to be reset */ + do { + flag_status = FWDGT_STAT & FWDGT_STAT_RUD; + } while((--timeout > 0U) && ((uint32_t)RESET != flag_status)); + + if((uint32_t)RESET != flag_status) { + return ERROR; + } + + FWDGT_RLD = RLD_RLD(reload_value); + + return SUCCESS; +} + +/*! + \brief reload the counter of FWDGT + \param[in] none + \param[out] none + \retval none +*/ +void fwdgt_counter_reload(void) +{ + FWDGT_CTL = FWDGT_KEY_RELOAD; +} + +/*! + \brief configure counter reload value, and prescaler divider value + \param[in] reload_value: specify reload value(0x0000 - 0x0FFF) + \param[in] prescaler_div: FWDGT prescaler value + only one parameter can be selected which is shown as below: + \arg FWDGT_PSC_DIV4: FWDGT prescaler set to 4 + \arg FWDGT_PSC_DIV8: FWDGT prescaler set to 8 + \arg FWDGT_PSC_DIV16: FWDGT prescaler set to 16 + \arg FWDGT_PSC_DIV32: FWDGT prescaler set to 32 + \arg FWDGT_PSC_DIV64: FWDGT prescaler set to 64 + \arg FWDGT_PSC_DIV128: FWDGT prescaler set to 128 + \arg FWDGT_PSC_DIV256: FWDGT prescaler set to 256 + \param[out] none + \retval ErrStatus: ERROR or SUCCESS +*/ +ErrStatus fwdgt_config(uint16_t reload_value, uint8_t prescaler_div) +{ + uint32_t timeout = FWDGT_PSC_TIMEOUT; + uint32_t flag_status = RESET; + + /* enable write access to FWDGT_PSC,and FWDGT_RLD */ + FWDGT_CTL = FWDGT_WRITEACCESS_ENABLE; + + /* wait until the PUD flag to be reset */ + do { + flag_status = FWDGT_STAT & FWDGT_STAT_PUD; + } while((--timeout > 0U) && ((uint32_t)RESET != flag_status)); + + if((uint32_t)RESET != flag_status) { + return ERROR; + } + + /* configure FWDGT */ + FWDGT_PSC = (uint32_t)prescaler_div; + + timeout = FWDGT_RLD_TIMEOUT; + /* wait until the RUD flag to be reset */ + do { + flag_status = FWDGT_STAT & FWDGT_STAT_RUD; + } while((--timeout > 0U) && ((uint32_t)RESET != flag_status)); + + if((uint32_t)RESET != flag_status) { + return ERROR; + } + + FWDGT_RLD = RLD_RLD(reload_value); + + /* reload the counter */ + FWDGT_CTL = FWDGT_KEY_RELOAD; + + return SUCCESS; +} + +/*! + \brief get flag state of FWDGT + \param[in] flag: flag to get + only one parameter can be selected which is shown as below: + \arg FWDGT_FLAG_PUD: a write operation to FWDGT_PSC register is on going + \arg FWDGT_FLAG_RUD: a write operation to FWDGT_RLD register is on going + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus fwdgt_flag_get(uint16_t flag) +{ + if(FWDGT_STAT & flag) { + return SET; + } + + return RESET; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c.base@1.0.0 new file mode 100644 index 0000000..35661db --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c.base@1.0.0 @@ -0,0 +1,215 @@ +/*! + \file gd32c10x_fwdgt.c + \brief FWDGT driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_fwdgt.h" + +/*! + \brief enable write access to FWDGT_PSC and FWDGT_RLD + \param[in] none + \param[out] none + \retval none +*/ +void fwdgt_write_enable(void) +{ + FWDGT_CTL = FWDGT_WRITEACCESS_ENABLE; +} + +/*! + \brief disable write access to FWDGT_PSC and FWDGT_RLD + \param[in] none + \param[out] none + \retval none +*/ +void fwdgt_write_disable(void) +{ + FWDGT_CTL = FWDGT_WRITEACCESS_DISABLE; +} + +/*! + \brief start the free watchdog timer counter + \param[in] none + \param[out] none + \retval none +*/ +void fwdgt_enable(void) +{ + FWDGT_CTL = FWDGT_KEY_ENABLE; +} + +/*! + \brief configure the free watchdog timer counter prescaler value + \param[in] prescaler_value: specify prescaler value + only one parameter can be selected which is shown as below: + \arg FWDGT_PSC_DIV4: FWDGT prescaler set to 4 + \arg FWDGT_PSC_DIV8: FWDGT prescaler set to 8 + \arg FWDGT_PSC_DIV16: FWDGT prescaler set to 16 + \arg FWDGT_PSC_DIV32: FWDGT prescaler set to 32 + \arg FWDGT_PSC_DIV64: FWDGT prescaler set to 64 + \arg FWDGT_PSC_DIV128: FWDGT prescaler set to 128 + \arg FWDGT_PSC_DIV256: FWDGT prescaler set to 256 + \param[out] none + \retval ErrStatus: ERROR or SUCCESS +*/ +ErrStatus fwdgt_prescaler_value_config(uint16_t prescaler_value) +{ + uint32_t timeout = FWDGT_PSC_TIMEOUT; + uint32_t flag_status = RESET; + + /* enable write access to FWDGT_PSC */ + FWDGT_CTL = FWDGT_WRITEACCESS_ENABLE; + + /* wait until the PUD flag to be reset */ + do { + flag_status = FWDGT_STAT & FWDGT_STAT_PUD; + } while((--timeout > 0U) && ((uint32_t)RESET != flag_status)); + + if((uint32_t)RESET != flag_status) { + return ERROR; + } + + /* configure FWDGT */ + FWDGT_PSC = (uint32_t)prescaler_value; + + return SUCCESS; +} + +/*! + \brief configure the free watchdog timer counter reload value + \param[in] reload_value: specify reload value(0x0000 - 0x0FFF) + \param[out] none + \retval ErrStatus: ERROR or SUCCESS +*/ +ErrStatus fwdgt_reload_value_config(uint16_t reload_value) +{ + uint32_t timeout = FWDGT_RLD_TIMEOUT; + uint32_t flag_status = RESET; + + /* enable write access to FWDGT_RLD */ + FWDGT_CTL = FWDGT_WRITEACCESS_ENABLE; + + /* wait until the RUD flag to be reset */ + do { + flag_status = FWDGT_STAT & FWDGT_STAT_RUD; + } while((--timeout > 0U) && ((uint32_t)RESET != flag_status)); + + if((uint32_t)RESET != flag_status) { + return ERROR; + } + + FWDGT_RLD = RLD_RLD(reload_value); + + return SUCCESS; +} + +/*! + \brief reload the counter of FWDGT + \param[in] none + \param[out] none + \retval none +*/ +void fwdgt_counter_reload(void) +{ + FWDGT_CTL = FWDGT_KEY_RELOAD; +} + +/*! + \brief configure counter reload value, and prescaler divider value + \param[in] reload_value: specify reload value(0x0000 - 0x0FFF) + \param[in] prescaler_div: FWDGT prescaler value + only one parameter can be selected which is shown as below: + \arg FWDGT_PSC_DIV4: FWDGT prescaler set to 4 + \arg FWDGT_PSC_DIV8: FWDGT prescaler set to 8 + \arg FWDGT_PSC_DIV16: FWDGT prescaler set to 16 + \arg FWDGT_PSC_DIV32: FWDGT prescaler set to 32 + \arg FWDGT_PSC_DIV64: FWDGT prescaler set to 64 + \arg FWDGT_PSC_DIV128: FWDGT prescaler set to 128 + \arg FWDGT_PSC_DIV256: FWDGT prescaler set to 256 + \param[out] none + \retval ErrStatus: ERROR or SUCCESS +*/ +ErrStatus fwdgt_config(uint16_t reload_value, uint8_t prescaler_div) +{ + uint32_t timeout = FWDGT_PSC_TIMEOUT; + uint32_t flag_status = RESET; + + /* enable write access to FWDGT_PSC,and FWDGT_RLD */ + FWDGT_CTL = FWDGT_WRITEACCESS_ENABLE; + + /* wait until the PUD flag to be reset */ + do { + flag_status = FWDGT_STAT & FWDGT_STAT_PUD; + } while((--timeout > 0U) && ((uint32_t)RESET != flag_status)); + + if((uint32_t)RESET != flag_status) { + return ERROR; + } + + /* configure FWDGT */ + FWDGT_PSC = (uint32_t)prescaler_div; + + timeout = FWDGT_RLD_TIMEOUT; + /* wait until the RUD flag to be reset */ + do { + flag_status = FWDGT_STAT & FWDGT_STAT_RUD; + } while((--timeout > 0U) && ((uint32_t)RESET != flag_status)); + + if((uint32_t)RESET != flag_status) { + return ERROR; + } + + FWDGT_RLD = RLD_RLD(reload_value); + + /* reload the counter */ + FWDGT_CTL = FWDGT_KEY_RELOAD; + + return SUCCESS; +} + +/*! + \brief get flag state of FWDGT + \param[in] flag: flag to get + only one parameter can be selected which is shown as below: + \arg FWDGT_FLAG_PUD: a write operation to FWDGT_PSC register is on going + \arg FWDGT_FLAG_RUD: a write operation to FWDGT_RLD register is on going + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus fwdgt_flag_get(uint16_t flag) +{ + if(FWDGT_STAT & flag) { + return SET; + } + + return RESET; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c new file mode 100644 index 0000000..233dbc5 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c @@ -0,0 +1,538 @@ +/*! + \file gd32c10x_gpio.c + \brief GPIO driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_gpio.h" + +#define AFIO_EXTI_SOURCE_MASK ((uint8_t)0x03U) /*!< AFIO exti source selection mask*/ +#define AFIO_EXTI_SOURCE_FIELDS ((uint8_t)0x04U) /*!< select AFIO exti source registers */ +#define LSB_16BIT_MASK ((uint16_t)0xFFFFU) /*!< LSB 16-bit mask */ +#define PCF_POSITION_MASK ((uint32_t)0x000F0000U) /*!< AFIO_PCF register position mask */ +#define PCF_SWJCFG_MASK ((uint32_t)0xF8FFFFFFU) /*!< AFIO_PCF register SWJCFG mask */ +#define PCF_LOCATION1_MASK ((uint32_t)0x00200000U) /*!< AFIO_PCF register location1 mask */ +#define PCF_LOCATION2_MASK ((uint32_t)0x00100000U) /*!< AFIO_PCF register location2 mask */ +#define AFIO_PCF1_FIELDS ((uint32_t)0x80000000U) /*!< select AFIO_PCF1 register */ +#define GPIO_OUTPUT_PORT_OFFSET ((uint32_t)4U) /*!< GPIO event output port offset*/ + +/*! + \brief reset GPIO port + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[out] none + \retval none +*/ +void gpio_deinit(uint32_t gpio_periph) +{ + switch(gpio_periph){ + case GPIOA: + /* reset GPIOA */ + rcu_periph_reset_enable(RCU_GPIOARST); + rcu_periph_reset_disable(RCU_GPIOARST); + break; + case GPIOB: + /* reset GPIOB */ + rcu_periph_reset_enable(RCU_GPIOBRST); + rcu_periph_reset_disable(RCU_GPIOBRST); + break; + case GPIOC: + /* reset GPIOC */ + rcu_periph_reset_enable(RCU_GPIOCRST); + rcu_periph_reset_disable(RCU_GPIOCRST); + break; + case GPIOD: + /* reset GPIOD */ + rcu_periph_reset_enable(RCU_GPIODRST); + rcu_periph_reset_disable(RCU_GPIODRST); + break; + case GPIOE: + /* reset GPIOE */ + rcu_periph_reset_enable(RCU_GPIOERST); + rcu_periph_reset_disable(RCU_GPIOERST); + break; + default: + break; + } +} + +/*! + \brief reset alternate function I/O(AFIO) + \param[in] none + \param[out] none + \retval none +*/ +void gpio_afio_deinit(void) +{ + rcu_periph_reset_enable(RCU_AFRST); + rcu_periph_reset_disable(RCU_AFRST); +} + +/*! + \brief GPIO parameter initialization + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] mode: gpio pin mode + only one parameter can be selected which is shown as below: + \arg GPIO_MODE_AIN: analog input mode + \arg GPIO_MODE_IN_FLOATING: floating input mode + \arg GPIO_MODE_IPD: pull-down input mode + \arg GPIO_MODE_IPU: pull-up input mode + \arg GPIO_MODE_OUT_OD: GPIO output with open-drain + \arg GPIO_MODE_OUT_PP: GPIO output with push-pull + \arg GPIO_MODE_AF_OD: AFIO output with open-drain + \arg GPIO_MODE_AF_PP: AFIO output with push-pull + \param[in] speed: gpio output max speed value + only one parameter can be selected which is shown as below: + \arg GPIO_OSPEED_10MHZ: output max speed 10MHz + \arg GPIO_OSPEED_2MHZ: output max speed 2MHz + \arg GPIO_OSPEED_50MHZ: output max speed 50MHz + \arg GPIO_OSPEED_MAX: output max speed more than 50MHz + \param[in] pin: GPIO pin + one or more parameters can be selected which are shown as below: + \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL + \param[out] none + \retval none +*/ +void gpio_init(uint32_t gpio_periph, uint32_t mode, uint32_t speed, uint32_t pin) +{ + uint16_t i; + uint32_t temp_mode = 0U; + uint32_t reg = 0U; + + /* GPIO mode configuration */ + temp_mode = (uint32_t)(mode & ((uint32_t)0x0FU)); + + /* GPIO speed configuration */ + if(((uint32_t)0x00U) != ((uint32_t)mode & ((uint32_t)0x10U))){ + /* output mode max speed */ + if(GPIO_OSPEED_MAX == (uint32_t)speed){ + temp_mode |= (uint32_t)0x03U; + /* set the corresponding SPD bit */ + GPIOx_SPD(gpio_periph) |= (uint32_t)pin ; + }else{ + /* output mode max speed:10MHz,2MHz,50MHz */ + temp_mode |= (uint32_t)speed; + } + } + + /* configure the eight low port pins with GPIO_CTL0 */ + for(i = 0U;i < 8U;i++){ + if((1U << i) & pin){ + reg = GPIO_CTL0(gpio_periph); + + /* clear the specified pin mode bits */ + reg &= ~GPIO_MODE_MASK(i); + /* set the specified pin mode bits */ + reg |= GPIO_MODE_SET(i, temp_mode); + + /* set IPD or IPU */ + if(GPIO_MODE_IPD == mode){ + /* reset the corresponding OCTL bit */ + GPIO_BC(gpio_periph) = (uint32_t)((1U << i) & pin); + }else{ + /* set the corresponding OCTL bit */ + if(GPIO_MODE_IPU == mode){ + GPIO_BOP(gpio_periph) = (uint32_t)((1U << i) & pin); + } + } + /* set GPIO_CTL0 register */ + GPIO_CTL0(gpio_periph) = reg; + } + } + /* configure the eight high port pins with GPIO_CTL1 */ + for(i = 8U;i < 16U;i++){ + if((1U << i) & pin){ + reg = GPIO_CTL1(gpio_periph); + + /* clear the specified pin mode bits */ + reg &= ~GPIO_MODE_MASK(i - 8U); + /* set the specified pin mode bits */ + reg |= GPIO_MODE_SET(i - 8U, temp_mode); + + /* set IPD or IPU */ + if(GPIO_MODE_IPD == mode){ + /* reset the corresponding OCTL bit */ + GPIO_BC(gpio_periph) = (uint32_t)((1U << i) & pin); + }else{ + /* set the corresponding OCTL bit */ + if(GPIO_MODE_IPU == mode){ + GPIO_BOP(gpio_periph) = (uint32_t)((1U << i) & pin); + } + } + /* set GPIO_CTL1 register */ + GPIO_CTL1(gpio_periph) = reg; + } + } +} + +/*! + \brief set GPIO pin + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] pin: GPIO pin + one or more parameters can be selected which are shown as below: + \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL + \param[out] none + \retval none +*/ +void gpio_bit_set(uint32_t gpio_periph, uint32_t pin) +{ + GPIO_BOP(gpio_periph) = (uint32_t)pin; +} + +/*! + \brief reset GPIO pin + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] pin: GPIO pin + one or more parameters can be selected which are shown as below: + \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL + \param[out] none + \retval none +*/ +void gpio_bit_reset(uint32_t gpio_periph, uint32_t pin) +{ + GPIO_BC(gpio_periph) = (uint32_t)pin; +} + +/*! + \brief write data to the specified GPIO pin + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] pin: GPIO pin + one or more parameters can be selected which are shown as below: + \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL + \param[in] bit_value: SET or RESET + \arg RESET: clear the port pin + \arg SET: set the port pin + \param[out] none + \retval none +*/ +void gpio_bit_write(uint32_t gpio_periph, uint32_t pin, bit_status bit_value) +{ + if(RESET != bit_value){ + GPIO_BOP(gpio_periph) = (uint32_t)pin; + }else{ + GPIO_BC(gpio_periph) = (uint32_t)pin; + } +} + +/*! + \brief write data to the specified GPIO port + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] data: specify the value to be written to the port output data register + \param[out] none + \retval none +*/ +void gpio_port_write(uint32_t gpio_periph,uint16_t data) +{ + GPIO_OCTL(gpio_periph) = (uint32_t)data; +} + +/*! + \brief get GPIO pin input status + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] pin: GPIO pin + only one parameter can be selected which are shown as below: + \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL + \param[out] none + \retval input status of gpio pin: SET or RESET +*/ +FlagStatus gpio_input_bit_get(uint32_t gpio_periph,uint32_t pin) +{ + if((uint32_t)RESET != (GPIO_ISTAT(gpio_periph)&(pin))){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief get GPIO port input status + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[out] none + \retval input status of gpio all pins +*/ +uint16_t gpio_input_port_get(uint32_t gpio_periph) +{ + return (uint16_t)(GPIO_ISTAT(gpio_periph)); +} + +/*! + \brief get GPIO pin output status + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] pin: GPIO pin + only one parameter can be selected which are shown as below: + \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL + \param[out] none + \retval output status of gpio pin: SET or RESET +*/ +FlagStatus gpio_output_bit_get(uint32_t gpio_periph, uint32_t pin) +{ + if((uint32_t)RESET !=(GPIO_OCTL(gpio_periph)&(pin))){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief get GPIO port output status + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[out] none + \retval output status of gpio all pins +*/ +uint16_t gpio_output_port_get(uint32_t gpio_periph) +{ + return ((uint16_t)GPIO_OCTL(gpio_periph)); +} + +/*! + \brief configure GPIO pin remap + \param[in] gpio_remap: select the pin to remap + only one parameter can be selected which are shown as below: + \arg GPIO_SPI0_REMAP: SPI0 remapping + \arg GPIO_I2C0_REMAP: I2C0 remapping + \arg GPIO_USART0_REMAP: USART0 remapping + \arg GPIO_USART1_REMAP: USART1 remapping + \arg GPIO_USART2_PARTIAL_REMAP: USART2 partial remapping + \arg GPIO_USART2_FULL_REMAP: USART2 full remapping + \arg GPIO_TIMER0_PARTIAL_REMAP: TIMER0 partial remapping + \arg GPIO_TIMER0_FULL_REMAP: TIMER0 full remapping + \arg GPIO_TIMER1_PARTIAL_REMAP0: TIMER1 partial remapping + \arg GPIO_TIMER1_PARTIAL_REMAP1: TIMER1 partial remapping + \arg GPIO_TIMER1_FULL_REMAP: TIMER1 full remapping + \arg GPIO_TIMER2_PARTIAL_REMAP: TIMER2 partial remapping + \arg GPIO_TIMER2_FULL_REMAP: TIMER2 full remapping + \arg GPIO_TIMER3_REMAP: TIMER3 remapping + \arg GPIO_CAN0_PARTIAL_REMAP: CAN0 partial remapping + \arg GPIO_CAN0_FULL_REMAP: CAN0 full remapping + \arg GPIO_PD01_REMAP: PD01 remapping + \arg GPIO_TIMER4CH3_IREMAP: TIMER4 channel3 internal remapping + \arg GPIO_ADC0_ETRGRT_REMAP: ADC0 external trigger routine conversion remapping + \arg GPIO_ADC1_ETRGRT_REMAP: ADC1 external trigger routine conversion remapping + \arg GPIO_CAN1_REMAP: CAN1 remapping + \arg GPIO_SWJ_NONJTRST_REMAP: full SWJ(JTAG-DP + SW-DP),but without NJTRST + \arg GPIO_SWJ_SWDPENABLE_REMAP: JTAG-DP disabled and SW-DP enabled + \arg GPIO_SWJ_DISABLE_REMAP: JTAG-DP disabled and SW-DP disabled + \arg GPIO_SPI2_REMAP: SPI2 remapping + \arg GPIO_TIMER1ITI1_REMAP: TIMER1 internal trigger 1 remapping + \arg GPIO_TIMER8_REMAP: TIMER8 remapping + \arg GPIO_EXMC_NADV_REMAP: EXMC_NADV connect/disconnect + \arg GPIO_CTC_REMAP0: CTC remapping(PD15) + \param[in] newvalue: ENABLE or DISABLE + \param[out] none + \retval none +*/ +void gpio_pin_remap_config(uint32_t remap, ControlStatus newvalue) +{ + uint32_t remap1 = 0U, remap2 = 0U, temp_reg = 0U, temp_mask = 0U; + + if(((uint32_t)0x80000000U) == (remap & 0x80000000U)){ + /* get AFIO_PCF1 register value */ + temp_reg = AFIO_PCF1; + }else{ + /* get AFIO_PCF0 register value */ + temp_reg = AFIO_PCF0; + } + + temp_mask = (remap & PCF_POSITION_MASK) >> 0x10U; + remap1 = remap & LSB_16BIT_MASK; + + /* judge pin remap type */ + if((PCF_LOCATION1_MASK | PCF_LOCATION2_MASK) == (remap & (PCF_LOCATION1_MASK | PCF_LOCATION2_MASK))){ + temp_reg &= PCF_SWJCFG_MASK; + AFIO_PCF0 &= PCF_SWJCFG_MASK; + }else if(PCF_LOCATION2_MASK == (remap & PCF_LOCATION2_MASK)){ + remap2 = ((uint32_t)0x03U) << temp_mask; + temp_reg &= ~remap2; + temp_reg |= ~PCF_SWJCFG_MASK; + }else{ + temp_reg &= ~(remap1 << ((remap >> 0x15U)*0x10U)); + temp_reg |= ~PCF_SWJCFG_MASK; + } + + /* set pin remap value */ + if(DISABLE != newvalue){ + temp_reg |= (remap1 << ((remap >> 0x15U)*0x10U)); + } + + if(AFIO_PCF1_FIELDS == (remap & AFIO_PCF1_FIELDS)){ + /* set AFIO_PCF1 register value */ + AFIO_PCF1 = temp_reg; + }else{ + /* set AFIO_PCF0 register value */ + AFIO_PCF0 = temp_reg; + } +} + +/*! + \brief select GPIO pin exti sources + \param[in] output_port: gpio event output port + only one parameter can be selected which are shown as below: + \arg GPIO_PORT_SOURCE_GPIOA: output port source A + \arg GPIO_PORT_SOURCE_GPIOB: output port source B + \arg GPIO_PORT_SOURCE_GPIOC: output port source C + \arg GPIO_PORT_SOURCE_GPIOD: output port source D + \arg GPIO_PORT_SOURCE_GPIOE: output port source E + \param[in] output_pin: + only one parameter can be selected which are shown as below: + \arg GPIO_PIN_SOURCE_x(x=0..15) + \param[out] none + \retval none +*/ +void gpio_exti_source_select(uint8_t output_port, uint8_t output_pin) +{ + uint32_t source = 0U; + source = ((uint32_t)0x0FU) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK)); + + /* select EXTI sources */ + if(GPIO_PIN_SOURCE_4 > output_pin){ + /* select EXTI0/EXTI1/EXTI2/EXTI3 */ + AFIO_EXTISS0 &= ~source; + AFIO_EXTISS0 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); + }else if(GPIO_PIN_SOURCE_8 > output_pin){ + /* select EXTI4/EXTI5/EXTI6/EXTI7 */ + AFIO_EXTISS1 &= ~source; + AFIO_EXTISS1 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); + }else if(GPIO_PIN_SOURCE_12 > output_pin){ + /* select EXTI8/EXTI9/EXTI10/EXTI11 */ + AFIO_EXTISS2 &= ~source; + AFIO_EXTISS2 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); + }else{ + /* select EXTI12/EXTI13/EXTI14/EXTI15 */ + AFIO_EXTISS3 &= ~source; + AFIO_EXTISS3 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); + } +} + +/*! + \brief configure GPIO pin event output + \param[in] output_port: gpio event output port + only one parameter can be selected which are shown as below: + \arg GPIO_EVENT_PORT_GPIOA: event output port A + \arg GPIO_EVENT_PORT_GPIOB: event output port B + \arg GPIO_EVENT_PORT_GPIOC: event output port C + \arg GPIO_EVENT_PORT_GPIOD: event output port D + \arg GPIO_EVENT_PORT_GPIOE: event output port E + \param[in] output_pin: + only one parameter can be selected which are shown as below: + \arg GPIO_EVENT_PIN_x(x=0..15) + \param[out] none + \retval none +*/ +void gpio_event_output_config(uint8_t output_port, uint8_t output_pin) +{ + uint32_t reg = 0U; + reg = AFIO_EC; + + /* clear AFIO_EC_PORT and AFIO_EC_PIN bits */ + reg &= (uint32_t)(~(AFIO_EC_PORT|AFIO_EC_PIN)); + + reg |= (uint32_t)((uint32_t)output_port << GPIO_OUTPUT_PORT_OFFSET); + reg |= (uint32_t)output_pin; + + AFIO_EC = reg; +} + +/*! + \brief enable GPIO pin event output + \param[in] none + \param[out] none + \retval none +*/ +void gpio_event_output_enable(void) +{ + AFIO_EC |= AFIO_EC_EOE; +} + +/*! + \brief disable GPIO pin event output + \param[in] none + \param[out] none + \retval none +*/ +void gpio_event_output_disable(void) +{ + AFIO_EC &= (uint32_t)(~AFIO_EC_EOE); +} + +/*! + \brief lock GPIO pin + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] pin: GPIO pin + one or more parameters can be selected which are shown as below: + \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL + \param[out] none + \retval none +*/ +void gpio_pin_lock(uint32_t gpio_periph, uint32_t pin) +{ + uint32_t lock = 0x00010000U; + lock |= pin; + + /* lock key writing sequence: write 1 -> write 0 -> write 1 -> read 0 -> read 1 */ + GPIO_LOCK(gpio_periph) = (uint32_t)lock; + GPIO_LOCK(gpio_periph) = (uint32_t)pin; + GPIO_LOCK(gpio_periph) = (uint32_t)lock; + lock = GPIO_LOCK(gpio_periph); + lock = GPIO_LOCK(gpio_periph); +} + +/*! + \brief configure the I/O compensation cell + \param[in] compensation: specifies the I/O compensation cell mode + only one parameter can be selected which are shown as below: + \arg GPIO_COMPENSATION_ENABLE: I/O compensation cell is enabled + \arg GPIO_COMPENSATION_DISABLE: I/O compensation cell is disabled + \param[out] none + \retval none +*/ +void gpio_compensation_config(uint32_t compensation) +{ + uint32_t reg; + reg = AFIO_CPSCTL; + + /* reset the AFIO_CPSCTL_CPS_EN bit and set according to gpio_compensation */ + reg &= ~AFIO_CPSCTL_CPS_EN; + AFIO_CPSCTL = (reg | compensation); +} + +/*! + \brief check the I/O compensation cell is ready or not + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET + */ +FlagStatus gpio_compensation_flag_get(void) +{ + if(((uint32_t)RESET) != (AFIO_CPSCTL & AFIO_CPSCTL_CPS_RDY)){ + return SET; + }else{ + return RESET; + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c.base@1.0.0 new file mode 100644 index 0000000..233dbc5 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c.base@1.0.0 @@ -0,0 +1,538 @@ +/*! + \file gd32c10x_gpio.c + \brief GPIO driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_gpio.h" + +#define AFIO_EXTI_SOURCE_MASK ((uint8_t)0x03U) /*!< AFIO exti source selection mask*/ +#define AFIO_EXTI_SOURCE_FIELDS ((uint8_t)0x04U) /*!< select AFIO exti source registers */ +#define LSB_16BIT_MASK ((uint16_t)0xFFFFU) /*!< LSB 16-bit mask */ +#define PCF_POSITION_MASK ((uint32_t)0x000F0000U) /*!< AFIO_PCF register position mask */ +#define PCF_SWJCFG_MASK ((uint32_t)0xF8FFFFFFU) /*!< AFIO_PCF register SWJCFG mask */ +#define PCF_LOCATION1_MASK ((uint32_t)0x00200000U) /*!< AFIO_PCF register location1 mask */ +#define PCF_LOCATION2_MASK ((uint32_t)0x00100000U) /*!< AFIO_PCF register location2 mask */ +#define AFIO_PCF1_FIELDS ((uint32_t)0x80000000U) /*!< select AFIO_PCF1 register */ +#define GPIO_OUTPUT_PORT_OFFSET ((uint32_t)4U) /*!< GPIO event output port offset*/ + +/*! + \brief reset GPIO port + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[out] none + \retval none +*/ +void gpio_deinit(uint32_t gpio_periph) +{ + switch(gpio_periph){ + case GPIOA: + /* reset GPIOA */ + rcu_periph_reset_enable(RCU_GPIOARST); + rcu_periph_reset_disable(RCU_GPIOARST); + break; + case GPIOB: + /* reset GPIOB */ + rcu_periph_reset_enable(RCU_GPIOBRST); + rcu_periph_reset_disable(RCU_GPIOBRST); + break; + case GPIOC: + /* reset GPIOC */ + rcu_periph_reset_enable(RCU_GPIOCRST); + rcu_periph_reset_disable(RCU_GPIOCRST); + break; + case GPIOD: + /* reset GPIOD */ + rcu_periph_reset_enable(RCU_GPIODRST); + rcu_periph_reset_disable(RCU_GPIODRST); + break; + case GPIOE: + /* reset GPIOE */ + rcu_periph_reset_enable(RCU_GPIOERST); + rcu_periph_reset_disable(RCU_GPIOERST); + break; + default: + break; + } +} + +/*! + \brief reset alternate function I/O(AFIO) + \param[in] none + \param[out] none + \retval none +*/ +void gpio_afio_deinit(void) +{ + rcu_periph_reset_enable(RCU_AFRST); + rcu_periph_reset_disable(RCU_AFRST); +} + +/*! + \brief GPIO parameter initialization + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] mode: gpio pin mode + only one parameter can be selected which is shown as below: + \arg GPIO_MODE_AIN: analog input mode + \arg GPIO_MODE_IN_FLOATING: floating input mode + \arg GPIO_MODE_IPD: pull-down input mode + \arg GPIO_MODE_IPU: pull-up input mode + \arg GPIO_MODE_OUT_OD: GPIO output with open-drain + \arg GPIO_MODE_OUT_PP: GPIO output with push-pull + \arg GPIO_MODE_AF_OD: AFIO output with open-drain + \arg GPIO_MODE_AF_PP: AFIO output with push-pull + \param[in] speed: gpio output max speed value + only one parameter can be selected which is shown as below: + \arg GPIO_OSPEED_10MHZ: output max speed 10MHz + \arg GPIO_OSPEED_2MHZ: output max speed 2MHz + \arg GPIO_OSPEED_50MHZ: output max speed 50MHz + \arg GPIO_OSPEED_MAX: output max speed more than 50MHz + \param[in] pin: GPIO pin + one or more parameters can be selected which are shown as below: + \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL + \param[out] none + \retval none +*/ +void gpio_init(uint32_t gpio_periph, uint32_t mode, uint32_t speed, uint32_t pin) +{ + uint16_t i; + uint32_t temp_mode = 0U; + uint32_t reg = 0U; + + /* GPIO mode configuration */ + temp_mode = (uint32_t)(mode & ((uint32_t)0x0FU)); + + /* GPIO speed configuration */ + if(((uint32_t)0x00U) != ((uint32_t)mode & ((uint32_t)0x10U))){ + /* output mode max speed */ + if(GPIO_OSPEED_MAX == (uint32_t)speed){ + temp_mode |= (uint32_t)0x03U; + /* set the corresponding SPD bit */ + GPIOx_SPD(gpio_periph) |= (uint32_t)pin ; + }else{ + /* output mode max speed:10MHz,2MHz,50MHz */ + temp_mode |= (uint32_t)speed; + } + } + + /* configure the eight low port pins with GPIO_CTL0 */ + for(i = 0U;i < 8U;i++){ + if((1U << i) & pin){ + reg = GPIO_CTL0(gpio_periph); + + /* clear the specified pin mode bits */ + reg &= ~GPIO_MODE_MASK(i); + /* set the specified pin mode bits */ + reg |= GPIO_MODE_SET(i, temp_mode); + + /* set IPD or IPU */ + if(GPIO_MODE_IPD == mode){ + /* reset the corresponding OCTL bit */ + GPIO_BC(gpio_periph) = (uint32_t)((1U << i) & pin); + }else{ + /* set the corresponding OCTL bit */ + if(GPIO_MODE_IPU == mode){ + GPIO_BOP(gpio_periph) = (uint32_t)((1U << i) & pin); + } + } + /* set GPIO_CTL0 register */ + GPIO_CTL0(gpio_periph) = reg; + } + } + /* configure the eight high port pins with GPIO_CTL1 */ + for(i = 8U;i < 16U;i++){ + if((1U << i) & pin){ + reg = GPIO_CTL1(gpio_periph); + + /* clear the specified pin mode bits */ + reg &= ~GPIO_MODE_MASK(i - 8U); + /* set the specified pin mode bits */ + reg |= GPIO_MODE_SET(i - 8U, temp_mode); + + /* set IPD or IPU */ + if(GPIO_MODE_IPD == mode){ + /* reset the corresponding OCTL bit */ + GPIO_BC(gpio_periph) = (uint32_t)((1U << i) & pin); + }else{ + /* set the corresponding OCTL bit */ + if(GPIO_MODE_IPU == mode){ + GPIO_BOP(gpio_periph) = (uint32_t)((1U << i) & pin); + } + } + /* set GPIO_CTL1 register */ + GPIO_CTL1(gpio_periph) = reg; + } + } +} + +/*! + \brief set GPIO pin + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] pin: GPIO pin + one or more parameters can be selected which are shown as below: + \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL + \param[out] none + \retval none +*/ +void gpio_bit_set(uint32_t gpio_periph, uint32_t pin) +{ + GPIO_BOP(gpio_periph) = (uint32_t)pin; +} + +/*! + \brief reset GPIO pin + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] pin: GPIO pin + one or more parameters can be selected which are shown as below: + \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL + \param[out] none + \retval none +*/ +void gpio_bit_reset(uint32_t gpio_periph, uint32_t pin) +{ + GPIO_BC(gpio_periph) = (uint32_t)pin; +} + +/*! + \brief write data to the specified GPIO pin + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] pin: GPIO pin + one or more parameters can be selected which are shown as below: + \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL + \param[in] bit_value: SET or RESET + \arg RESET: clear the port pin + \arg SET: set the port pin + \param[out] none + \retval none +*/ +void gpio_bit_write(uint32_t gpio_periph, uint32_t pin, bit_status bit_value) +{ + if(RESET != bit_value){ + GPIO_BOP(gpio_periph) = (uint32_t)pin; + }else{ + GPIO_BC(gpio_periph) = (uint32_t)pin; + } +} + +/*! + \brief write data to the specified GPIO port + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] data: specify the value to be written to the port output data register + \param[out] none + \retval none +*/ +void gpio_port_write(uint32_t gpio_periph,uint16_t data) +{ + GPIO_OCTL(gpio_periph) = (uint32_t)data; +} + +/*! + \brief get GPIO pin input status + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] pin: GPIO pin + only one parameter can be selected which are shown as below: + \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL + \param[out] none + \retval input status of gpio pin: SET or RESET +*/ +FlagStatus gpio_input_bit_get(uint32_t gpio_periph,uint32_t pin) +{ + if((uint32_t)RESET != (GPIO_ISTAT(gpio_periph)&(pin))){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief get GPIO port input status + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[out] none + \retval input status of gpio all pins +*/ +uint16_t gpio_input_port_get(uint32_t gpio_periph) +{ + return (uint16_t)(GPIO_ISTAT(gpio_periph)); +} + +/*! + \brief get GPIO pin output status + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] pin: GPIO pin + only one parameter can be selected which are shown as below: + \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL + \param[out] none + \retval output status of gpio pin: SET or RESET +*/ +FlagStatus gpio_output_bit_get(uint32_t gpio_periph, uint32_t pin) +{ + if((uint32_t)RESET !=(GPIO_OCTL(gpio_periph)&(pin))){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief get GPIO port output status + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[out] none + \retval output status of gpio all pins +*/ +uint16_t gpio_output_port_get(uint32_t gpio_periph) +{ + return ((uint16_t)GPIO_OCTL(gpio_periph)); +} + +/*! + \brief configure GPIO pin remap + \param[in] gpio_remap: select the pin to remap + only one parameter can be selected which are shown as below: + \arg GPIO_SPI0_REMAP: SPI0 remapping + \arg GPIO_I2C0_REMAP: I2C0 remapping + \arg GPIO_USART0_REMAP: USART0 remapping + \arg GPIO_USART1_REMAP: USART1 remapping + \arg GPIO_USART2_PARTIAL_REMAP: USART2 partial remapping + \arg GPIO_USART2_FULL_REMAP: USART2 full remapping + \arg GPIO_TIMER0_PARTIAL_REMAP: TIMER0 partial remapping + \arg GPIO_TIMER0_FULL_REMAP: TIMER0 full remapping + \arg GPIO_TIMER1_PARTIAL_REMAP0: TIMER1 partial remapping + \arg GPIO_TIMER1_PARTIAL_REMAP1: TIMER1 partial remapping + \arg GPIO_TIMER1_FULL_REMAP: TIMER1 full remapping + \arg GPIO_TIMER2_PARTIAL_REMAP: TIMER2 partial remapping + \arg GPIO_TIMER2_FULL_REMAP: TIMER2 full remapping + \arg GPIO_TIMER3_REMAP: TIMER3 remapping + \arg GPIO_CAN0_PARTIAL_REMAP: CAN0 partial remapping + \arg GPIO_CAN0_FULL_REMAP: CAN0 full remapping + \arg GPIO_PD01_REMAP: PD01 remapping + \arg GPIO_TIMER4CH3_IREMAP: TIMER4 channel3 internal remapping + \arg GPIO_ADC0_ETRGRT_REMAP: ADC0 external trigger routine conversion remapping + \arg GPIO_ADC1_ETRGRT_REMAP: ADC1 external trigger routine conversion remapping + \arg GPIO_CAN1_REMAP: CAN1 remapping + \arg GPIO_SWJ_NONJTRST_REMAP: full SWJ(JTAG-DP + SW-DP),but without NJTRST + \arg GPIO_SWJ_SWDPENABLE_REMAP: JTAG-DP disabled and SW-DP enabled + \arg GPIO_SWJ_DISABLE_REMAP: JTAG-DP disabled and SW-DP disabled + \arg GPIO_SPI2_REMAP: SPI2 remapping + \arg GPIO_TIMER1ITI1_REMAP: TIMER1 internal trigger 1 remapping + \arg GPIO_TIMER8_REMAP: TIMER8 remapping + \arg GPIO_EXMC_NADV_REMAP: EXMC_NADV connect/disconnect + \arg GPIO_CTC_REMAP0: CTC remapping(PD15) + \param[in] newvalue: ENABLE or DISABLE + \param[out] none + \retval none +*/ +void gpio_pin_remap_config(uint32_t remap, ControlStatus newvalue) +{ + uint32_t remap1 = 0U, remap2 = 0U, temp_reg = 0U, temp_mask = 0U; + + if(((uint32_t)0x80000000U) == (remap & 0x80000000U)){ + /* get AFIO_PCF1 register value */ + temp_reg = AFIO_PCF1; + }else{ + /* get AFIO_PCF0 register value */ + temp_reg = AFIO_PCF0; + } + + temp_mask = (remap & PCF_POSITION_MASK) >> 0x10U; + remap1 = remap & LSB_16BIT_MASK; + + /* judge pin remap type */ + if((PCF_LOCATION1_MASK | PCF_LOCATION2_MASK) == (remap & (PCF_LOCATION1_MASK | PCF_LOCATION2_MASK))){ + temp_reg &= PCF_SWJCFG_MASK; + AFIO_PCF0 &= PCF_SWJCFG_MASK; + }else if(PCF_LOCATION2_MASK == (remap & PCF_LOCATION2_MASK)){ + remap2 = ((uint32_t)0x03U) << temp_mask; + temp_reg &= ~remap2; + temp_reg |= ~PCF_SWJCFG_MASK; + }else{ + temp_reg &= ~(remap1 << ((remap >> 0x15U)*0x10U)); + temp_reg |= ~PCF_SWJCFG_MASK; + } + + /* set pin remap value */ + if(DISABLE != newvalue){ + temp_reg |= (remap1 << ((remap >> 0x15U)*0x10U)); + } + + if(AFIO_PCF1_FIELDS == (remap & AFIO_PCF1_FIELDS)){ + /* set AFIO_PCF1 register value */ + AFIO_PCF1 = temp_reg; + }else{ + /* set AFIO_PCF0 register value */ + AFIO_PCF0 = temp_reg; + } +} + +/*! + \brief select GPIO pin exti sources + \param[in] output_port: gpio event output port + only one parameter can be selected which are shown as below: + \arg GPIO_PORT_SOURCE_GPIOA: output port source A + \arg GPIO_PORT_SOURCE_GPIOB: output port source B + \arg GPIO_PORT_SOURCE_GPIOC: output port source C + \arg GPIO_PORT_SOURCE_GPIOD: output port source D + \arg GPIO_PORT_SOURCE_GPIOE: output port source E + \param[in] output_pin: + only one parameter can be selected which are shown as below: + \arg GPIO_PIN_SOURCE_x(x=0..15) + \param[out] none + \retval none +*/ +void gpio_exti_source_select(uint8_t output_port, uint8_t output_pin) +{ + uint32_t source = 0U; + source = ((uint32_t)0x0FU) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK)); + + /* select EXTI sources */ + if(GPIO_PIN_SOURCE_4 > output_pin){ + /* select EXTI0/EXTI1/EXTI2/EXTI3 */ + AFIO_EXTISS0 &= ~source; + AFIO_EXTISS0 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); + }else if(GPIO_PIN_SOURCE_8 > output_pin){ + /* select EXTI4/EXTI5/EXTI6/EXTI7 */ + AFIO_EXTISS1 &= ~source; + AFIO_EXTISS1 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); + }else if(GPIO_PIN_SOURCE_12 > output_pin){ + /* select EXTI8/EXTI9/EXTI10/EXTI11 */ + AFIO_EXTISS2 &= ~source; + AFIO_EXTISS2 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); + }else{ + /* select EXTI12/EXTI13/EXTI14/EXTI15 */ + AFIO_EXTISS3 &= ~source; + AFIO_EXTISS3 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK))); + } +} + +/*! + \brief configure GPIO pin event output + \param[in] output_port: gpio event output port + only one parameter can be selected which are shown as below: + \arg GPIO_EVENT_PORT_GPIOA: event output port A + \arg GPIO_EVENT_PORT_GPIOB: event output port B + \arg GPIO_EVENT_PORT_GPIOC: event output port C + \arg GPIO_EVENT_PORT_GPIOD: event output port D + \arg GPIO_EVENT_PORT_GPIOE: event output port E + \param[in] output_pin: + only one parameter can be selected which are shown as below: + \arg GPIO_EVENT_PIN_x(x=0..15) + \param[out] none + \retval none +*/ +void gpio_event_output_config(uint8_t output_port, uint8_t output_pin) +{ + uint32_t reg = 0U; + reg = AFIO_EC; + + /* clear AFIO_EC_PORT and AFIO_EC_PIN bits */ + reg &= (uint32_t)(~(AFIO_EC_PORT|AFIO_EC_PIN)); + + reg |= (uint32_t)((uint32_t)output_port << GPIO_OUTPUT_PORT_OFFSET); + reg |= (uint32_t)output_pin; + + AFIO_EC = reg; +} + +/*! + \brief enable GPIO pin event output + \param[in] none + \param[out] none + \retval none +*/ +void gpio_event_output_enable(void) +{ + AFIO_EC |= AFIO_EC_EOE; +} + +/*! + \brief disable GPIO pin event output + \param[in] none + \param[out] none + \retval none +*/ +void gpio_event_output_disable(void) +{ + AFIO_EC &= (uint32_t)(~AFIO_EC_EOE); +} + +/*! + \brief lock GPIO pin + \param[in] gpio_periph: GPIOx(x = A,B,C,D,E) + \param[in] pin: GPIO pin + one or more parameters can be selected which are shown as below: + \arg GPIO_PIN_x(x=0..15), GPIO_PIN_ALL + \param[out] none + \retval none +*/ +void gpio_pin_lock(uint32_t gpio_periph, uint32_t pin) +{ + uint32_t lock = 0x00010000U; + lock |= pin; + + /* lock key writing sequence: write 1 -> write 0 -> write 1 -> read 0 -> read 1 */ + GPIO_LOCK(gpio_periph) = (uint32_t)lock; + GPIO_LOCK(gpio_periph) = (uint32_t)pin; + GPIO_LOCK(gpio_periph) = (uint32_t)lock; + lock = GPIO_LOCK(gpio_periph); + lock = GPIO_LOCK(gpio_periph); +} + +/*! + \brief configure the I/O compensation cell + \param[in] compensation: specifies the I/O compensation cell mode + only one parameter can be selected which are shown as below: + \arg GPIO_COMPENSATION_ENABLE: I/O compensation cell is enabled + \arg GPIO_COMPENSATION_DISABLE: I/O compensation cell is disabled + \param[out] none + \retval none +*/ +void gpio_compensation_config(uint32_t compensation) +{ + uint32_t reg; + reg = AFIO_CPSCTL; + + /* reset the AFIO_CPSCTL_CPS_EN bit and set according to gpio_compensation */ + reg &= ~AFIO_CPSCTL_CPS_EN; + AFIO_CPSCTL = (reg | compensation); +} + +/*! + \brief check the I/O compensation cell is ready or not + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET + */ +FlagStatus gpio_compensation_flag_get(void) +{ + if(((uint32_t)RESET) != (AFIO_CPSCTL & AFIO_CPSCTL_CPS_RDY)){ + return SET; + }else{ + return RESET; + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_i2c.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_i2c.c new file mode 100644 index 0000000..662a67f --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_i2c.c @@ -0,0 +1,797 @@ +/*! + \file gd32c10x_i2c.c + \brief I2C driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_i2c.h" + +/* I2C register bit mask */ +#define I2CCLK_MAX ((uint32_t)0x0000003FU) /*!< i2cclk maximum value */ +#define I2CCLK_MIN ((uint32_t)0x00000002U) /*!< i2cclk minimum value */ +#define I2C_FLAG_MASK ((uint32_t)0x0000FFFFU) /*!< i2c flag mask */ +#define I2C_ADDRESS_MASK ((uint32_t)0x000003FFU) /*!< i2c address mask */ +#define I2C_ADDRESS2_MASK ((uint32_t)0x000000FEU) /*!< the second i2c address mask */ + +/* I2C register bit offset */ +#define STAT1_PECV_OFFSET ((uint32_t)0x00000008U) /*!< bit offset of PECV in I2C_STAT1 */ + +/*! + \brief reset I2C + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_deinit(uint32_t i2c_periph) +{ + switch(i2c_periph){ + case I2C0: + /* reset I2C0 */ + rcu_periph_reset_enable(RCU_I2C0RST); + rcu_periph_reset_disable(RCU_I2C0RST); + break; + case I2C1: + /* reset I2C1 */ + rcu_periph_reset_enable(RCU_I2C1RST); + rcu_periph_reset_disable(RCU_I2C1RST); + break; + default: + break; + } +} + +/*! + \brief configure I2C clock + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] clkspeed: I2C clock speed, supports standard mode (up to 100 kHz), fast mode (up to 400 kHz) + and fast mode plus (up to 1MHz) + \param[in] dutycyc: duty cycle in fast mode or fast mode plus, and only I2C_DTCY_2 can be selected in standard mode + only one parameter can be selected which is shown as below: + \arg I2C_DTCY_2: T_low/T_high=2 + \arg I2C_DTCY_16_9: T_low/T_high=16/9 + \param[out] none + \retval none +*/ +void i2c_clock_config(uint32_t i2c_periph, uint32_t clkspeed, uint32_t dutycyc) +{ + uint32_t pclk1, clkc, freq, risetime; + uint32_t temp; + + pclk1 = rcu_clock_freq_get(CK_APB1); + /* I2C peripheral clock frequency */ + freq = (uint32_t)(pclk1 / 1000000U); + if(freq >= I2CCLK_MAX) { + freq = I2CCLK_MAX; + } + temp = I2C_CTL1(i2c_periph); + temp &= ~I2C_CTL1_I2CCLK; + temp |= freq; + + I2C_CTL1(i2c_periph) = temp; + + if(100000U >= clkspeed) { + /* the maximum SCL rise time is 1000ns in standard mode */ + risetime = (uint32_t)((pclk1 / 1000000U) + 1U); + if(risetime >= I2CCLK_MAX) { + I2C_RT(i2c_periph) = I2CCLK_MAX; + } else if(risetime <= I2CCLK_MIN) { + I2C_RT(i2c_periph) = I2CCLK_MIN; + }else{ + I2C_RT(i2c_periph) = risetime; + } + clkc = (uint32_t)(pclk1 / (clkspeed * 2U)); + if(clkc < 0x04U) { + /* the CLKC in standard mode minimum value is 4 */ + clkc = 0x04U; + } + + I2C_CKCFG(i2c_periph) |= (I2C_CKCFG_CLKC & clkc); + } else if(400000U >= clkspeed) { + /* the maximum SCL rise time is 300ns in fast mode */ + I2C_RT(i2c_periph) = (uint32_t)(((freq * (uint32_t)300U) / (uint32_t)1000U) + (uint32_t)1U); + if(I2C_DTCY_2 == dutycyc) { + /* I2C duty cycle is 2 */ + clkc = (uint32_t)(pclk1 / (clkspeed * 3U)); + I2C_CKCFG(i2c_periph) &= ~I2C_CKCFG_DTCY; + } else { + /* I2C duty cycle is 16/9 */ + clkc = (uint32_t)(pclk1 / (clkspeed * 25U)); + I2C_CKCFG(i2c_periph) |= I2C_CKCFG_DTCY; + } + if(0U == (clkc & I2C_CKCFG_CLKC)) { + /* the CLKC in fast mode minimum value is 1 */ + clkc |= 0x0001U; + } + I2C_CKCFG(i2c_periph) |= I2C_CKCFG_FAST; + I2C_CKCFG(i2c_periph) |= clkc; + }else{ + /* fast mode plus, the maximum SCL rise time is 120ns */ + I2C_RT(i2c_periph) = (uint32_t)(((freq*(uint32_t)120U)/(uint32_t)1000U)+(uint32_t)1U); + if(I2C_DTCY_2 == dutycyc){ + /* I2C duty cycle is 2 */ + clkc = (uint32_t)(pclk1/(clkspeed*3U)); + I2C_CKCFG(i2c_periph) &= ~I2C_CKCFG_DTCY; + }else{ + /* I2C duty cycle is 16/9 */ + clkc = (uint32_t)(pclk1/(clkspeed*25U)); + I2C_CKCFG(i2c_periph) |= I2C_CKCFG_DTCY; + } + /* enable fast mode */ + I2C_CKCFG(i2c_periph) |= I2C_CKCFG_FAST; + I2C_CKCFG(i2c_periph) |= clkc; + /* enable I2C fast mode plus */ + I2C_FMPCFG(i2c_periph) = I2C_FMPCFG_FMPEN; + } +} + +/*! + \brief configure I2C address + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] mode: + only one parameter can be selected which is shown as below: + \arg I2C_I2CMODE_ENABLE: I2C mode + \arg I2C_SMBUSMODE_ENABLE: SMBus mode + \param[in] addformat: 7bits or 10bits + only one parameter can be selected which is shown as below: + \arg I2C_ADDFORMAT_7BITS: address format is 7 bits + \arg I2C_ADDFORMAT_10BITS: address format is 10 bits + \param[in] addr: I2C address + \param[out] none + \retval none +*/ +void i2c_mode_addr_config(uint32_t i2c_periph, uint32_t mode, uint32_t addformat, uint32_t addr) +{ + /* SMBus/I2C mode selected */ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_SMBEN); + ctl |= mode; + I2C_CTL0(i2c_periph) = ctl; + /* configure address */ + addr = addr & I2C_ADDRESS_MASK; + I2C_SADDR0(i2c_periph) = (addformat | addr); +} + +/*! + \brief select SMBus type + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] type: + only one parameter can be selected which is shown as below: + \arg I2C_SMBUS_DEVICE: SMBus mode device type + \arg I2C_SMBUS_HOST: SMBus mode host type + \param[out] none + \retval none +*/ +void i2c_smbus_type_config(uint32_t i2c_periph, uint32_t type) +{ + if(I2C_SMBUS_HOST == type){ + I2C_CTL0(i2c_periph) |= I2C_CTL0_SMBSEL; + }else{ + I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_SMBSEL); + } +} + +/*! + \brief whether or not to send an ACK + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] ack: + only one parameter can be selected which is shown as below: + \arg I2C_ACK_ENABLE: ACK will be sent + \arg I2C_ACK_DISABLE: ACK will not be sent + \param[out] none + \retval none +*/ +void i2c_ack_config(uint32_t i2c_periph, uint32_t ack) +{ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_ACKEN); + ctl |= ack; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief configure I2C POAP position + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] pos: + only one parameter can be selected which is shown as below: + \arg I2C_ACKPOS_CURRENT: ACKEN bit decides whether or not to send ACK or not for the current byte + \arg I2C_ACKPOS_NEXT: ACKEN bit decides whether or not to send ACK for the next byte + \param[out] none + \retval none +*/ +void i2c_ackpos_config(uint32_t i2c_periph, uint32_t pos) +{ + uint32_t ctl = 0U; + + /* configure I2C POAP position */ + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_POAP); + ctl |= pos; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief master sends slave address + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] addr: slave address + \param[in] trandirection: transmitter or receiver + only one parameter can be selected which is shown as below: + \arg I2C_TRANSMITTER: transmitter + \arg I2C_RECEIVER: receiver + \param[out] none + \retval none +*/ +void i2c_master_addressing(uint32_t i2c_periph, uint32_t addr, uint32_t trandirection) +{ + /* master is a transmitter or a receiver */ + if(I2C_TRANSMITTER == trandirection){ + addr = addr & I2C_TRANSMITTER; + }else{ + addr = addr | I2C_RECEIVER; + } + /* send slave address */ + I2C_DATA(i2c_periph) = addr; +} + +/*! + \brief enable dual-address mode + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] addr: the second address in dual-address mode + \param[out] none + \retval none +*/ +void i2c_dualaddr_enable(uint32_t i2c_periph, uint32_t addr) +{ + /* configure address */ + addr = addr & I2C_ADDRESS2_MASK; + I2C_SADDR1(i2c_periph) = (I2C_SADDR1_DUADEN | addr); +} + +/*! + \brief disable dual-address mode + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_dualaddr_disable(uint32_t i2c_periph) +{ + I2C_SADDR1(i2c_periph) &= ~(I2C_SADDR1_DUADEN); +} + +/*! + \brief enable I2C + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_enable(uint32_t i2c_periph) +{ + I2C_CTL0(i2c_periph) |= I2C_CTL0_I2CEN; +} + +/*! + \brief disable I2C + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_disable(uint32_t i2c_periph) +{ + I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_I2CEN); +} + +/*! + \brief generate a START condition on I2C bus + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_start_on_bus(uint32_t i2c_periph) +{ + I2C_CTL0(i2c_periph) |= I2C_CTL0_START; +} + +/*! + \brief generate a STOP condition on I2C bus + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_stop_on_bus(uint32_t i2c_periph) +{ + I2C_CTL0(i2c_periph) |= I2C_CTL0_STOP; +} + +/*! + \brief I2C transmit data function + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] data: data of transmission + \param[out] none + \retval none +*/ +void i2c_data_transmit(uint32_t i2c_periph, uint8_t data) +{ + I2C_DATA(i2c_periph) = DATA_TRANS(data); +} + +/*! + \brief I2C receive data function + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval data of received +*/ +uint8_t i2c_data_receive(uint32_t i2c_periph) +{ + return (uint8_t)DATA_RECV(I2C_DATA(i2c_periph)); +} + +/*! + \brief configure I2C DMA mode + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] dmastate: + only one parameter can be selected which is shown as below: + \arg I2C_DMA_ON: enable DMA mode + \arg I2C_DMA_OFF: disable DMA mode + \param[out] none + \retval none +*/ +void i2c_dma_config(uint32_t i2c_periph, uint32_t dmastate) +{ + /* configure I2C DMA function */ + uint32_t ctl = 0U; + + ctl = I2C_CTL1(i2c_periph); + ctl &= ~(I2C_CTL1_DMAON); + ctl |= dmastate; + I2C_CTL1(i2c_periph) = ctl; +} + +/*! + \brief configure whether next DMA EOT is DMA last transfer or not + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] dmalast: + only one parameter can be selected which is shown as below: + \arg I2C_DMALST_ON: next DMA EOT is the last transfer + \arg I2C_DMALST_OFF: next DMA EOT is not the last transfer + \param[out] none + \retval none +*/ +void i2c_dma_last_transfer_config(uint32_t i2c_periph, uint32_t dmalast) +{ + /* configure DMA last transfer */ + uint32_t ctl = 0U; + + ctl = I2C_CTL1(i2c_periph); + ctl &= ~(I2C_CTL1_DMALST); + ctl |= dmalast; + I2C_CTL1(i2c_periph) = ctl; +} + +/*! + \brief whether to stretch SCL low when data is not ready in slave mode + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] stretchpara: + only one parameter can be selected which is shown as below: + \arg I2C_SCLSTRETCH_ENABLE: enable SCL stretching + \arg I2C_SCLSTRETCH_DISABLE: disable SCL stretching + \param[out] none + \retval none +*/ +void i2c_stretch_scl_low_config(uint32_t i2c_periph, uint32_t stretchpara) +{ + /* configure I2C SCL stretching */ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_SS); + ctl |= stretchpara; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief whether or not to response to a general call + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] gcallpara: + only one parameter can be selected which is shown as below: + \arg I2C_GCEN_ENABLE: slave will response to a general call + \arg I2C_GCEN_DISABLE: slave will not response to a general call + \param[out] none + \retval none +*/ +void i2c_slave_response_to_gcall_config(uint32_t i2c_periph, uint32_t gcallpara) +{ + /* configure slave response to a general call enable or disable */ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_GCEN); + ctl |= gcallpara; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief configure software reset of I2C + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] sreset: + only one parameter can be selected which is shown as below: + \arg I2C_SRESET_SET: I2C is under reset + \arg I2C_SRESET_RESET: I2C is not under reset + \param[out] none + \retval none +*/ +void i2c_software_reset_config(uint32_t i2c_periph, uint32_t sreset) +{ + /* modify CTL0 and configure software reset I2C state */ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_SRESET); + ctl |= sreset; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief configure I2C PEC calculation + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] pecstate: + only one parameter can be selected which is shown as below: + \arg I2C_PEC_ENABLE: PEC calculation on + \arg I2C_PEC_DISABLE: PEC calculation off + \param[out] none + \retval none +*/ +void i2c_pec_config(uint32_t i2c_periph, uint32_t pecstate) +{ + /* on/off PEC calculation */ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_PECEN); + ctl |= pecstate; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief configure whether to transfer PEC value + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] pecpara: + only one parameter can be selected which is shown as below: + \arg I2C_PECTRANS_ENABLE: transfer PEC value + \arg I2C_PECTRANS_DISABLE: not transfer PEC value + \param[out] none + \retval none +*/ +void i2c_pec_transfer_config(uint32_t i2c_periph, uint32_t pecpara) +{ + /* whether to transfer PEC */ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_PECTRANS); + ctl |= pecpara; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief get packet error checking value + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval PEC value +*/ +uint8_t i2c_pec_value_get(uint32_t i2c_periph) +{ + return (uint8_t)((I2C_STAT1(i2c_periph) & I2C_STAT1_PECV) >> STAT1_PECV_OFFSET); +} + +/*! + \brief configure I2C alert through SMBA pin + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] smbuspara: + only one parameter can be selected which is shown as below: + \arg I2C_SALTSEND_ENABLE: issue alert through SMBA pin + \arg I2C_SALTSEND_DISABLE: not issue alert through SMBA pin + \param[out] none + \retval none +*/ +void i2c_smbus_alert_config(uint32_t i2c_periph, uint32_t smbuspara) +{ + /* configure smbus alert through SMBA pin */ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_SALT); + ctl |= smbuspara; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief configure I2C ARP protocol in SMBus + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] arpstate: + only one parameter can be selected which is shown as below: + \arg I2C_ARP_ENABLE: enable ARP + \arg I2C_ARP_DISABLE: disable ARP + \param[out] none + \retval none +*/ +void i2c_smbus_arp_config(uint32_t i2c_periph, uint32_t arpstate) +{ + /* enable or disable I2C ARP protocol*/ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_ARPEN); + ctl |= arpstate; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief enable SAM_V interface + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_sam_enable(uint32_t i2c_periph) +{ + I2C_SAMCS(i2c_periph) |= I2C_SAMCS_SAMEN; +} + +/*! + \brief disable SAM_V interface + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_sam_disable(uint32_t i2c_periph) +{ + I2C_SAMCS(i2c_periph) &= ~(I2C_SAMCS_SAMEN); +} + +/*! + \brief enable SAM_V interface timeout detect + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_sam_timeout_enable(uint32_t i2c_periph) +{ + I2C_SAMCS(i2c_periph) |= I2C_SAMCS_STOEN; +} + +/*! + \brief disable SAM_V interface timeout detect + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_sam_timeout_disable(uint32_t i2c_periph) +{ + I2C_SAMCS(i2c_periph) &= ~(I2C_SAMCS_STOEN); +} + +/*! + \brief check I2C flag is set or not + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] flag: I2C flags, refer to i2c_flag_enum + only one parameter can be selected which is shown as below: + \arg I2C_FLAG_SBSEND: start condition sent out in master mode + \arg I2C_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode + \arg I2C_FLAG_BTC: byte transmission finishes + \arg I2C_FLAG_ADD10SEND: header of 10-bit address is sent in master mode + \arg I2C_FLAG_STPDET: stop condition detected in slave mode + \arg I2C_FLAG_RBNE: I2C_DATA is not empty during receiving + \arg I2C_FLAG_TBE: I2C_DATA is empty during transmitting + \arg I2C_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus + \arg I2C_FLAG_LOSTARB: arbitration lost in master mode + \arg I2C_FLAG_AERR: acknowledge error + \arg I2C_FLAG_OUERR: over-run or under-run situation occurs in slave mode + \arg I2C_FLAG_PECERR: PEC error when receiving data + \arg I2C_FLAG_SMBTO: timeout signal in SMBus mode + \arg I2C_FLAG_SMBALT: SMBus alert status + \arg I2C_FLAG_MASTER: a flag indicating whether I2C block is in master or slave mode + \arg I2C_FLAG_I2CBSY: busy flag + \arg I2C_FLAG_TR: whether the I2C is a transmitter or a receiver + \arg I2C_FLAG_RXGC: general call address (00h) received + \arg I2C_FLAG_DEFSMB: default address of SMBus device + \arg I2C_FLAG_HSTSMB: SMBus host header detected in slave mode + \arg I2C_FLAG_DUMOD: dual flag in slave mode indicating which address is matched in dual-address mode + \arg I2C_FLAG_TFF: txframe fall flag + \arg I2C_FLAG_TFR: txframe rise flag + \arg I2C_FLAG_RFF: rxframe fall flag + \arg I2C_FLAG_RFR: rxframe rise flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus i2c_flag_get(uint32_t i2c_periph, i2c_flag_enum flag) +{ + if(RESET != (I2C_REG_VAL(i2c_periph, flag) & BIT(I2C_BIT_POS(flag)))){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear I2C flag status + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] flag: I2C flags, refer to i2c_flag_enum + only one parameter can be selected which is shown as below: + \arg I2C_FLAG_SMBALT: SMBus alert status + \arg I2C_FLAG_SMBTO: timeout signal in SMBus mode + \arg I2C_FLAG_PECERR: PEC error when receiving data + \arg I2C_FLAG_OUERR: over-run or under-run situation occurs in slave mode + \arg I2C_FLAG_AERR: acknowledge error + \arg I2C_FLAG_LOSTARB: arbitration lost in master mode + \arg I2C_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus + \arg I2C_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode + \arg I2C_FLAG_TFF: txframe fall flag + \arg I2C_FLAG_TFR: txframe rise flag + \arg I2C_FLAG_RFF: rxframe fall flag + \arg I2C_FLAG_RFR: rxframe rise flag + \param[out] none + \retval none +*/ +void i2c_flag_clear(uint32_t i2c_periph, i2c_flag_enum flag) +{ + if(I2C_FLAG_ADDSEND == flag){ + /* read I2C_STAT0 and then read I2C_STAT1 to clear ADDSEND */ + I2C_STAT0(i2c_periph); + I2C_STAT1(i2c_periph); + }else{ + I2C_REG_VAL(i2c_periph, flag) &= ~BIT(I2C_BIT_POS(flag)); + } +} + +/*! + \brief enable I2C interrupt + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] interrupt: I2C interrupts, refer to i2c_interrupt_enum + only one parameter can be selected which is shown as below: + \arg I2C_INT_ERR: error interrupt + \arg I2C_INT_EV: event interrupt + \arg I2C_INT_BUF: buffer interrupt + \arg I2C_INT_TFF: txframe fall interrupt + \arg I2C_INT_TFR: txframe rise interrupt + \arg I2C_INT_RFF: rxframe fall interrupt + \arg I2C_INT_RFR: rxframe rise interrupt + \param[out] none + \retval none +*/ +void i2c_interrupt_enable(uint32_t i2c_periph, i2c_interrupt_enum interrupt) +{ + I2C_REG_VAL(i2c_periph, interrupt) |= BIT(I2C_BIT_POS(interrupt)); +} + +/*! + \brief disable I2C interrupt + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] interrupt: I2C interrupts, refer to i2c_interrupt_enum + only one parameter can be selected which is shown as below: + \arg I2C_INT_ERR: error interrupt + \arg I2C_INT_EV: event interrupt + \arg I2C_INT_BUF: buffer interrupt + \arg I2C_INT_TFF: txframe fall interrupt + \arg I2C_INT_TFR: txframe rise interrupt + \arg I2C_INT_RFF: rxframe fall interrupt + \arg I2C_INT_RFR: rxframe rise interrupt + \param[out] none + \retval none +*/ +void i2c_interrupt_disable(uint32_t i2c_periph, i2c_interrupt_enum interrupt) +{ + I2C_REG_VAL(i2c_periph, interrupt) &= ~BIT(I2C_BIT_POS(interrupt)); +} + +/*! + \brief get I2C interrupt flag status + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] int_flag: I2C interrupt flags, refer to i2c_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg I2C_INT_FLAG_SBSEND: start condition sent out in master mode interrupt flag + \arg I2C_INT_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode interrupt flag + \arg I2C_INT_FLAG_BTC: byte transmission finishes interrupt flag + \arg I2C_INT_FLAG_ADD10SEND: header of 10-bit address is sent in master mode interrupt flag + \arg I2C_INT_FLAG_STPDET: stop condition detected in slave mode interrupt flag + \arg I2C_INT_FLAG_RBNE: I2C_DATA is not Empty during receiving interrupt flag + \arg I2C_INT_FLAG_TBE: I2C_DATA is empty during transmitting interrupt flag + \arg I2C_INT_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus interrupt flag + \arg I2C_INT_FLAG_LOSTARB: arbitration lost in master mode interrupt flag + \arg I2C_INT_FLAG_AERR: acknowledge error interrupt flag + \arg I2C_INT_FLAG_OUERR: over-run or under-run situation occurs in slave mode interrupt flag + \arg I2C_INT_FLAG_PECERR: PEC error when receiving data interrupt flag + \arg I2C_INT_FLAG_SMBTO: timeout signal in SMBus mode interrupt flag + \arg I2C_INT_FLAG_SMBALT: SMBus alert status interrupt flag + \arg I2C_INT_FLAG_TFF: txframe fall interrupt flag + \arg I2C_INT_FLAG_TFR: txframe rise interrupt flag + \arg I2C_INT_FLAG_RFF: rxframe fall interrupt flag + \arg I2C_INT_FLAG_RFR: rxframe rise interrupt flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus i2c_interrupt_flag_get(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag) +{ + uint32_t intenable = 0U, flagstatus = 0U, bufie; + + /* check BUFIE */ + bufie = I2C_CTL1(i2c_periph)&I2C_CTL1_BUFIE; + + /* get the interrupt enable bit status */ + intenable = (I2C_REG_VAL(i2c_periph, int_flag) & BIT(I2C_BIT_POS(int_flag))); + /* get the corresponding flag bit status */ + flagstatus = (I2C_REG_VAL2(i2c_periph, int_flag) & BIT(I2C_BIT_POS2(int_flag))); + + if((I2C_INT_FLAG_RBNE == int_flag) || (I2C_INT_FLAG_TBE == int_flag)){ + if(intenable && bufie){ + intenable = 1U; + }else{ + intenable = 0U; + } + } + if((0U != flagstatus) && (0U != intenable)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear I2C interrupt flag status + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] int_flag: I2C interrupt flags, refer to i2c_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg I2C_INT_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode interrupt flag + \arg I2C_INT_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus interrupt flag + \arg I2C_INT_FLAG_LOSTARB: arbitration lost in master mode interrupt flag + \arg I2C_INT_FLAG_AERR: acknowledge error interrupt flag + \arg I2C_INT_FLAG_OUERR: over-run or under-run situation occurs in slave mode interrupt flag + \arg I2C_INT_FLAG_PECERR: PEC error when receiving data interrupt flag + \arg I2C_INT_FLAG_SMBTO: timeout signal in SMBus mode interrupt flag + \arg I2C_INT_FLAG_SMBALT: SMBus alert status interrupt flag + \arg I2C_INT_FLAG_TFF: txframe fall interrupt flag + \arg I2C_INT_FLAG_TFR: txframe rise interrupt flag + \arg I2C_INT_FLAG_RFF: rxframe fall interrupt flag + \arg I2C_INT_FLAG_RFR: rxframe rise interrupt flag + \param[out] none + \retval none +*/ +void i2c_interrupt_flag_clear(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag) +{ + if(I2C_INT_FLAG_ADDSEND == int_flag){ + /* read I2C_STAT0 and then read I2C_STAT1 to clear ADDSEND */ + I2C_STAT0(i2c_periph); + I2C_STAT1(i2c_periph); + }else{ + I2C_REG_VAL2(i2c_periph, int_flag) &= ~BIT(I2C_BIT_POS2(int_flag)); + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_i2c.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_i2c.c.base@1.0.0 new file mode 100644 index 0000000..662a67f --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_i2c.c.base@1.0.0 @@ -0,0 +1,797 @@ +/*! + \file gd32c10x_i2c.c + \brief I2C driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_i2c.h" + +/* I2C register bit mask */ +#define I2CCLK_MAX ((uint32_t)0x0000003FU) /*!< i2cclk maximum value */ +#define I2CCLK_MIN ((uint32_t)0x00000002U) /*!< i2cclk minimum value */ +#define I2C_FLAG_MASK ((uint32_t)0x0000FFFFU) /*!< i2c flag mask */ +#define I2C_ADDRESS_MASK ((uint32_t)0x000003FFU) /*!< i2c address mask */ +#define I2C_ADDRESS2_MASK ((uint32_t)0x000000FEU) /*!< the second i2c address mask */ + +/* I2C register bit offset */ +#define STAT1_PECV_OFFSET ((uint32_t)0x00000008U) /*!< bit offset of PECV in I2C_STAT1 */ + +/*! + \brief reset I2C + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_deinit(uint32_t i2c_periph) +{ + switch(i2c_periph){ + case I2C0: + /* reset I2C0 */ + rcu_periph_reset_enable(RCU_I2C0RST); + rcu_periph_reset_disable(RCU_I2C0RST); + break; + case I2C1: + /* reset I2C1 */ + rcu_periph_reset_enable(RCU_I2C1RST); + rcu_periph_reset_disable(RCU_I2C1RST); + break; + default: + break; + } +} + +/*! + \brief configure I2C clock + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] clkspeed: I2C clock speed, supports standard mode (up to 100 kHz), fast mode (up to 400 kHz) + and fast mode plus (up to 1MHz) + \param[in] dutycyc: duty cycle in fast mode or fast mode plus, and only I2C_DTCY_2 can be selected in standard mode + only one parameter can be selected which is shown as below: + \arg I2C_DTCY_2: T_low/T_high=2 + \arg I2C_DTCY_16_9: T_low/T_high=16/9 + \param[out] none + \retval none +*/ +void i2c_clock_config(uint32_t i2c_periph, uint32_t clkspeed, uint32_t dutycyc) +{ + uint32_t pclk1, clkc, freq, risetime; + uint32_t temp; + + pclk1 = rcu_clock_freq_get(CK_APB1); + /* I2C peripheral clock frequency */ + freq = (uint32_t)(pclk1 / 1000000U); + if(freq >= I2CCLK_MAX) { + freq = I2CCLK_MAX; + } + temp = I2C_CTL1(i2c_periph); + temp &= ~I2C_CTL1_I2CCLK; + temp |= freq; + + I2C_CTL1(i2c_periph) = temp; + + if(100000U >= clkspeed) { + /* the maximum SCL rise time is 1000ns in standard mode */ + risetime = (uint32_t)((pclk1 / 1000000U) + 1U); + if(risetime >= I2CCLK_MAX) { + I2C_RT(i2c_periph) = I2CCLK_MAX; + } else if(risetime <= I2CCLK_MIN) { + I2C_RT(i2c_periph) = I2CCLK_MIN; + }else{ + I2C_RT(i2c_periph) = risetime; + } + clkc = (uint32_t)(pclk1 / (clkspeed * 2U)); + if(clkc < 0x04U) { + /* the CLKC in standard mode minimum value is 4 */ + clkc = 0x04U; + } + + I2C_CKCFG(i2c_periph) |= (I2C_CKCFG_CLKC & clkc); + } else if(400000U >= clkspeed) { + /* the maximum SCL rise time is 300ns in fast mode */ + I2C_RT(i2c_periph) = (uint32_t)(((freq * (uint32_t)300U) / (uint32_t)1000U) + (uint32_t)1U); + if(I2C_DTCY_2 == dutycyc) { + /* I2C duty cycle is 2 */ + clkc = (uint32_t)(pclk1 / (clkspeed * 3U)); + I2C_CKCFG(i2c_periph) &= ~I2C_CKCFG_DTCY; + } else { + /* I2C duty cycle is 16/9 */ + clkc = (uint32_t)(pclk1 / (clkspeed * 25U)); + I2C_CKCFG(i2c_periph) |= I2C_CKCFG_DTCY; + } + if(0U == (clkc & I2C_CKCFG_CLKC)) { + /* the CLKC in fast mode minimum value is 1 */ + clkc |= 0x0001U; + } + I2C_CKCFG(i2c_periph) |= I2C_CKCFG_FAST; + I2C_CKCFG(i2c_periph) |= clkc; + }else{ + /* fast mode plus, the maximum SCL rise time is 120ns */ + I2C_RT(i2c_periph) = (uint32_t)(((freq*(uint32_t)120U)/(uint32_t)1000U)+(uint32_t)1U); + if(I2C_DTCY_2 == dutycyc){ + /* I2C duty cycle is 2 */ + clkc = (uint32_t)(pclk1/(clkspeed*3U)); + I2C_CKCFG(i2c_periph) &= ~I2C_CKCFG_DTCY; + }else{ + /* I2C duty cycle is 16/9 */ + clkc = (uint32_t)(pclk1/(clkspeed*25U)); + I2C_CKCFG(i2c_periph) |= I2C_CKCFG_DTCY; + } + /* enable fast mode */ + I2C_CKCFG(i2c_periph) |= I2C_CKCFG_FAST; + I2C_CKCFG(i2c_periph) |= clkc; + /* enable I2C fast mode plus */ + I2C_FMPCFG(i2c_periph) = I2C_FMPCFG_FMPEN; + } +} + +/*! + \brief configure I2C address + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] mode: + only one parameter can be selected which is shown as below: + \arg I2C_I2CMODE_ENABLE: I2C mode + \arg I2C_SMBUSMODE_ENABLE: SMBus mode + \param[in] addformat: 7bits or 10bits + only one parameter can be selected which is shown as below: + \arg I2C_ADDFORMAT_7BITS: address format is 7 bits + \arg I2C_ADDFORMAT_10BITS: address format is 10 bits + \param[in] addr: I2C address + \param[out] none + \retval none +*/ +void i2c_mode_addr_config(uint32_t i2c_periph, uint32_t mode, uint32_t addformat, uint32_t addr) +{ + /* SMBus/I2C mode selected */ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_SMBEN); + ctl |= mode; + I2C_CTL0(i2c_periph) = ctl; + /* configure address */ + addr = addr & I2C_ADDRESS_MASK; + I2C_SADDR0(i2c_periph) = (addformat | addr); +} + +/*! + \brief select SMBus type + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] type: + only one parameter can be selected which is shown as below: + \arg I2C_SMBUS_DEVICE: SMBus mode device type + \arg I2C_SMBUS_HOST: SMBus mode host type + \param[out] none + \retval none +*/ +void i2c_smbus_type_config(uint32_t i2c_periph, uint32_t type) +{ + if(I2C_SMBUS_HOST == type){ + I2C_CTL0(i2c_periph) |= I2C_CTL0_SMBSEL; + }else{ + I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_SMBSEL); + } +} + +/*! + \brief whether or not to send an ACK + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] ack: + only one parameter can be selected which is shown as below: + \arg I2C_ACK_ENABLE: ACK will be sent + \arg I2C_ACK_DISABLE: ACK will not be sent + \param[out] none + \retval none +*/ +void i2c_ack_config(uint32_t i2c_periph, uint32_t ack) +{ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_ACKEN); + ctl |= ack; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief configure I2C POAP position + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] pos: + only one parameter can be selected which is shown as below: + \arg I2C_ACKPOS_CURRENT: ACKEN bit decides whether or not to send ACK or not for the current byte + \arg I2C_ACKPOS_NEXT: ACKEN bit decides whether or not to send ACK for the next byte + \param[out] none + \retval none +*/ +void i2c_ackpos_config(uint32_t i2c_periph, uint32_t pos) +{ + uint32_t ctl = 0U; + + /* configure I2C POAP position */ + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_POAP); + ctl |= pos; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief master sends slave address + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] addr: slave address + \param[in] trandirection: transmitter or receiver + only one parameter can be selected which is shown as below: + \arg I2C_TRANSMITTER: transmitter + \arg I2C_RECEIVER: receiver + \param[out] none + \retval none +*/ +void i2c_master_addressing(uint32_t i2c_periph, uint32_t addr, uint32_t trandirection) +{ + /* master is a transmitter or a receiver */ + if(I2C_TRANSMITTER == trandirection){ + addr = addr & I2C_TRANSMITTER; + }else{ + addr = addr | I2C_RECEIVER; + } + /* send slave address */ + I2C_DATA(i2c_periph) = addr; +} + +/*! + \brief enable dual-address mode + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] addr: the second address in dual-address mode + \param[out] none + \retval none +*/ +void i2c_dualaddr_enable(uint32_t i2c_periph, uint32_t addr) +{ + /* configure address */ + addr = addr & I2C_ADDRESS2_MASK; + I2C_SADDR1(i2c_periph) = (I2C_SADDR1_DUADEN | addr); +} + +/*! + \brief disable dual-address mode + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_dualaddr_disable(uint32_t i2c_periph) +{ + I2C_SADDR1(i2c_periph) &= ~(I2C_SADDR1_DUADEN); +} + +/*! + \brief enable I2C + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_enable(uint32_t i2c_periph) +{ + I2C_CTL0(i2c_periph) |= I2C_CTL0_I2CEN; +} + +/*! + \brief disable I2C + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_disable(uint32_t i2c_periph) +{ + I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_I2CEN); +} + +/*! + \brief generate a START condition on I2C bus + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_start_on_bus(uint32_t i2c_periph) +{ + I2C_CTL0(i2c_periph) |= I2C_CTL0_START; +} + +/*! + \brief generate a STOP condition on I2C bus + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_stop_on_bus(uint32_t i2c_periph) +{ + I2C_CTL0(i2c_periph) |= I2C_CTL0_STOP; +} + +/*! + \brief I2C transmit data function + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] data: data of transmission + \param[out] none + \retval none +*/ +void i2c_data_transmit(uint32_t i2c_periph, uint8_t data) +{ + I2C_DATA(i2c_periph) = DATA_TRANS(data); +} + +/*! + \brief I2C receive data function + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval data of received +*/ +uint8_t i2c_data_receive(uint32_t i2c_periph) +{ + return (uint8_t)DATA_RECV(I2C_DATA(i2c_periph)); +} + +/*! + \brief configure I2C DMA mode + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] dmastate: + only one parameter can be selected which is shown as below: + \arg I2C_DMA_ON: enable DMA mode + \arg I2C_DMA_OFF: disable DMA mode + \param[out] none + \retval none +*/ +void i2c_dma_config(uint32_t i2c_periph, uint32_t dmastate) +{ + /* configure I2C DMA function */ + uint32_t ctl = 0U; + + ctl = I2C_CTL1(i2c_periph); + ctl &= ~(I2C_CTL1_DMAON); + ctl |= dmastate; + I2C_CTL1(i2c_periph) = ctl; +} + +/*! + \brief configure whether next DMA EOT is DMA last transfer or not + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] dmalast: + only one parameter can be selected which is shown as below: + \arg I2C_DMALST_ON: next DMA EOT is the last transfer + \arg I2C_DMALST_OFF: next DMA EOT is not the last transfer + \param[out] none + \retval none +*/ +void i2c_dma_last_transfer_config(uint32_t i2c_periph, uint32_t dmalast) +{ + /* configure DMA last transfer */ + uint32_t ctl = 0U; + + ctl = I2C_CTL1(i2c_periph); + ctl &= ~(I2C_CTL1_DMALST); + ctl |= dmalast; + I2C_CTL1(i2c_periph) = ctl; +} + +/*! + \brief whether to stretch SCL low when data is not ready in slave mode + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] stretchpara: + only one parameter can be selected which is shown as below: + \arg I2C_SCLSTRETCH_ENABLE: enable SCL stretching + \arg I2C_SCLSTRETCH_DISABLE: disable SCL stretching + \param[out] none + \retval none +*/ +void i2c_stretch_scl_low_config(uint32_t i2c_periph, uint32_t stretchpara) +{ + /* configure I2C SCL stretching */ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_SS); + ctl |= stretchpara; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief whether or not to response to a general call + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] gcallpara: + only one parameter can be selected which is shown as below: + \arg I2C_GCEN_ENABLE: slave will response to a general call + \arg I2C_GCEN_DISABLE: slave will not response to a general call + \param[out] none + \retval none +*/ +void i2c_slave_response_to_gcall_config(uint32_t i2c_periph, uint32_t gcallpara) +{ + /* configure slave response to a general call enable or disable */ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_GCEN); + ctl |= gcallpara; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief configure software reset of I2C + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] sreset: + only one parameter can be selected which is shown as below: + \arg I2C_SRESET_SET: I2C is under reset + \arg I2C_SRESET_RESET: I2C is not under reset + \param[out] none + \retval none +*/ +void i2c_software_reset_config(uint32_t i2c_periph, uint32_t sreset) +{ + /* modify CTL0 and configure software reset I2C state */ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_SRESET); + ctl |= sreset; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief configure I2C PEC calculation + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] pecstate: + only one parameter can be selected which is shown as below: + \arg I2C_PEC_ENABLE: PEC calculation on + \arg I2C_PEC_DISABLE: PEC calculation off + \param[out] none + \retval none +*/ +void i2c_pec_config(uint32_t i2c_periph, uint32_t pecstate) +{ + /* on/off PEC calculation */ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_PECEN); + ctl |= pecstate; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief configure whether to transfer PEC value + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] pecpara: + only one parameter can be selected which is shown as below: + \arg I2C_PECTRANS_ENABLE: transfer PEC value + \arg I2C_PECTRANS_DISABLE: not transfer PEC value + \param[out] none + \retval none +*/ +void i2c_pec_transfer_config(uint32_t i2c_periph, uint32_t pecpara) +{ + /* whether to transfer PEC */ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_PECTRANS); + ctl |= pecpara; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief get packet error checking value + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval PEC value +*/ +uint8_t i2c_pec_value_get(uint32_t i2c_periph) +{ + return (uint8_t)((I2C_STAT1(i2c_periph) & I2C_STAT1_PECV) >> STAT1_PECV_OFFSET); +} + +/*! + \brief configure I2C alert through SMBA pin + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] smbuspara: + only one parameter can be selected which is shown as below: + \arg I2C_SALTSEND_ENABLE: issue alert through SMBA pin + \arg I2C_SALTSEND_DISABLE: not issue alert through SMBA pin + \param[out] none + \retval none +*/ +void i2c_smbus_alert_config(uint32_t i2c_periph, uint32_t smbuspara) +{ + /* configure smbus alert through SMBA pin */ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_SALT); + ctl |= smbuspara; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief configure I2C ARP protocol in SMBus + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] arpstate: + only one parameter can be selected which is shown as below: + \arg I2C_ARP_ENABLE: enable ARP + \arg I2C_ARP_DISABLE: disable ARP + \param[out] none + \retval none +*/ +void i2c_smbus_arp_config(uint32_t i2c_periph, uint32_t arpstate) +{ + /* enable or disable I2C ARP protocol*/ + uint32_t ctl = 0U; + + ctl = I2C_CTL0(i2c_periph); + ctl &= ~(I2C_CTL0_ARPEN); + ctl |= arpstate; + I2C_CTL0(i2c_periph) = ctl; +} + +/*! + \brief enable SAM_V interface + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_sam_enable(uint32_t i2c_periph) +{ + I2C_SAMCS(i2c_periph) |= I2C_SAMCS_SAMEN; +} + +/*! + \brief disable SAM_V interface + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_sam_disable(uint32_t i2c_periph) +{ + I2C_SAMCS(i2c_periph) &= ~(I2C_SAMCS_SAMEN); +} + +/*! + \brief enable SAM_V interface timeout detect + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_sam_timeout_enable(uint32_t i2c_periph) +{ + I2C_SAMCS(i2c_periph) |= I2C_SAMCS_STOEN; +} + +/*! + \brief disable SAM_V interface timeout detect + \param[in] i2c_periph: I2Cx(x=0,1) + \param[out] none + \retval none +*/ +void i2c_sam_timeout_disable(uint32_t i2c_periph) +{ + I2C_SAMCS(i2c_periph) &= ~(I2C_SAMCS_STOEN); +} + +/*! + \brief check I2C flag is set or not + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] flag: I2C flags, refer to i2c_flag_enum + only one parameter can be selected which is shown as below: + \arg I2C_FLAG_SBSEND: start condition sent out in master mode + \arg I2C_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode + \arg I2C_FLAG_BTC: byte transmission finishes + \arg I2C_FLAG_ADD10SEND: header of 10-bit address is sent in master mode + \arg I2C_FLAG_STPDET: stop condition detected in slave mode + \arg I2C_FLAG_RBNE: I2C_DATA is not empty during receiving + \arg I2C_FLAG_TBE: I2C_DATA is empty during transmitting + \arg I2C_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus + \arg I2C_FLAG_LOSTARB: arbitration lost in master mode + \arg I2C_FLAG_AERR: acknowledge error + \arg I2C_FLAG_OUERR: over-run or under-run situation occurs in slave mode + \arg I2C_FLAG_PECERR: PEC error when receiving data + \arg I2C_FLAG_SMBTO: timeout signal in SMBus mode + \arg I2C_FLAG_SMBALT: SMBus alert status + \arg I2C_FLAG_MASTER: a flag indicating whether I2C block is in master or slave mode + \arg I2C_FLAG_I2CBSY: busy flag + \arg I2C_FLAG_TR: whether the I2C is a transmitter or a receiver + \arg I2C_FLAG_RXGC: general call address (00h) received + \arg I2C_FLAG_DEFSMB: default address of SMBus device + \arg I2C_FLAG_HSTSMB: SMBus host header detected in slave mode + \arg I2C_FLAG_DUMOD: dual flag in slave mode indicating which address is matched in dual-address mode + \arg I2C_FLAG_TFF: txframe fall flag + \arg I2C_FLAG_TFR: txframe rise flag + \arg I2C_FLAG_RFF: rxframe fall flag + \arg I2C_FLAG_RFR: rxframe rise flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus i2c_flag_get(uint32_t i2c_periph, i2c_flag_enum flag) +{ + if(RESET != (I2C_REG_VAL(i2c_periph, flag) & BIT(I2C_BIT_POS(flag)))){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear I2C flag status + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] flag: I2C flags, refer to i2c_flag_enum + only one parameter can be selected which is shown as below: + \arg I2C_FLAG_SMBALT: SMBus alert status + \arg I2C_FLAG_SMBTO: timeout signal in SMBus mode + \arg I2C_FLAG_PECERR: PEC error when receiving data + \arg I2C_FLAG_OUERR: over-run or under-run situation occurs in slave mode + \arg I2C_FLAG_AERR: acknowledge error + \arg I2C_FLAG_LOSTARB: arbitration lost in master mode + \arg I2C_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus + \arg I2C_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode + \arg I2C_FLAG_TFF: txframe fall flag + \arg I2C_FLAG_TFR: txframe rise flag + \arg I2C_FLAG_RFF: rxframe fall flag + \arg I2C_FLAG_RFR: rxframe rise flag + \param[out] none + \retval none +*/ +void i2c_flag_clear(uint32_t i2c_periph, i2c_flag_enum flag) +{ + if(I2C_FLAG_ADDSEND == flag){ + /* read I2C_STAT0 and then read I2C_STAT1 to clear ADDSEND */ + I2C_STAT0(i2c_periph); + I2C_STAT1(i2c_periph); + }else{ + I2C_REG_VAL(i2c_periph, flag) &= ~BIT(I2C_BIT_POS(flag)); + } +} + +/*! + \brief enable I2C interrupt + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] interrupt: I2C interrupts, refer to i2c_interrupt_enum + only one parameter can be selected which is shown as below: + \arg I2C_INT_ERR: error interrupt + \arg I2C_INT_EV: event interrupt + \arg I2C_INT_BUF: buffer interrupt + \arg I2C_INT_TFF: txframe fall interrupt + \arg I2C_INT_TFR: txframe rise interrupt + \arg I2C_INT_RFF: rxframe fall interrupt + \arg I2C_INT_RFR: rxframe rise interrupt + \param[out] none + \retval none +*/ +void i2c_interrupt_enable(uint32_t i2c_periph, i2c_interrupt_enum interrupt) +{ + I2C_REG_VAL(i2c_periph, interrupt) |= BIT(I2C_BIT_POS(interrupt)); +} + +/*! + \brief disable I2C interrupt + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] interrupt: I2C interrupts, refer to i2c_interrupt_enum + only one parameter can be selected which is shown as below: + \arg I2C_INT_ERR: error interrupt + \arg I2C_INT_EV: event interrupt + \arg I2C_INT_BUF: buffer interrupt + \arg I2C_INT_TFF: txframe fall interrupt + \arg I2C_INT_TFR: txframe rise interrupt + \arg I2C_INT_RFF: rxframe fall interrupt + \arg I2C_INT_RFR: rxframe rise interrupt + \param[out] none + \retval none +*/ +void i2c_interrupt_disable(uint32_t i2c_periph, i2c_interrupt_enum interrupt) +{ + I2C_REG_VAL(i2c_periph, interrupt) &= ~BIT(I2C_BIT_POS(interrupt)); +} + +/*! + \brief get I2C interrupt flag status + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] int_flag: I2C interrupt flags, refer to i2c_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg I2C_INT_FLAG_SBSEND: start condition sent out in master mode interrupt flag + \arg I2C_INT_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode interrupt flag + \arg I2C_INT_FLAG_BTC: byte transmission finishes interrupt flag + \arg I2C_INT_FLAG_ADD10SEND: header of 10-bit address is sent in master mode interrupt flag + \arg I2C_INT_FLAG_STPDET: stop condition detected in slave mode interrupt flag + \arg I2C_INT_FLAG_RBNE: I2C_DATA is not Empty during receiving interrupt flag + \arg I2C_INT_FLAG_TBE: I2C_DATA is empty during transmitting interrupt flag + \arg I2C_INT_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus interrupt flag + \arg I2C_INT_FLAG_LOSTARB: arbitration lost in master mode interrupt flag + \arg I2C_INT_FLAG_AERR: acknowledge error interrupt flag + \arg I2C_INT_FLAG_OUERR: over-run or under-run situation occurs in slave mode interrupt flag + \arg I2C_INT_FLAG_PECERR: PEC error when receiving data interrupt flag + \arg I2C_INT_FLAG_SMBTO: timeout signal in SMBus mode interrupt flag + \arg I2C_INT_FLAG_SMBALT: SMBus alert status interrupt flag + \arg I2C_INT_FLAG_TFF: txframe fall interrupt flag + \arg I2C_INT_FLAG_TFR: txframe rise interrupt flag + \arg I2C_INT_FLAG_RFF: rxframe fall interrupt flag + \arg I2C_INT_FLAG_RFR: rxframe rise interrupt flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus i2c_interrupt_flag_get(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag) +{ + uint32_t intenable = 0U, flagstatus = 0U, bufie; + + /* check BUFIE */ + bufie = I2C_CTL1(i2c_periph)&I2C_CTL1_BUFIE; + + /* get the interrupt enable bit status */ + intenable = (I2C_REG_VAL(i2c_periph, int_flag) & BIT(I2C_BIT_POS(int_flag))); + /* get the corresponding flag bit status */ + flagstatus = (I2C_REG_VAL2(i2c_periph, int_flag) & BIT(I2C_BIT_POS2(int_flag))); + + if((I2C_INT_FLAG_RBNE == int_flag) || (I2C_INT_FLAG_TBE == int_flag)){ + if(intenable && bufie){ + intenable = 1U; + }else{ + intenable = 0U; + } + } + if((0U != flagstatus) && (0U != intenable)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear I2C interrupt flag status + \param[in] i2c_periph: I2Cx(x=0,1) + \param[in] int_flag: I2C interrupt flags, refer to i2c_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg I2C_INT_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode interrupt flag + \arg I2C_INT_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus interrupt flag + \arg I2C_INT_FLAG_LOSTARB: arbitration lost in master mode interrupt flag + \arg I2C_INT_FLAG_AERR: acknowledge error interrupt flag + \arg I2C_INT_FLAG_OUERR: over-run or under-run situation occurs in slave mode interrupt flag + \arg I2C_INT_FLAG_PECERR: PEC error when receiving data interrupt flag + \arg I2C_INT_FLAG_SMBTO: timeout signal in SMBus mode interrupt flag + \arg I2C_INT_FLAG_SMBALT: SMBus alert status interrupt flag + \arg I2C_INT_FLAG_TFF: txframe fall interrupt flag + \arg I2C_INT_FLAG_TFR: txframe rise interrupt flag + \arg I2C_INT_FLAG_RFF: rxframe fall interrupt flag + \arg I2C_INT_FLAG_RFR: rxframe rise interrupt flag + \param[out] none + \retval none +*/ +void i2c_interrupt_flag_clear(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag) +{ + if(I2C_INT_FLAG_ADDSEND == int_flag){ + /* read I2C_STAT0 and then read I2C_STAT1 to clear ADDSEND */ + I2C_STAT0(i2c_periph); + I2C_STAT1(i2c_periph); + }else{ + I2C_REG_VAL2(i2c_periph, int_flag) &= ~BIT(I2C_BIT_POS2(int_flag)); + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_it.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_it.c new file mode 100644 index 0000000..bd96b46 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_it.c @@ -0,0 +1,139 @@ +/*! + \file gd32c10x_it.c + \brief interrupt service routines + + \version 2025-09-30, V1.0.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x.h" +#include "systick.h" + +/*! + \brief this function handles NMI exception + \param[in] none + \param[out] none + \retval none +*/ +void NMI_Handler(void) +{ +} + +/*! + \brief this function handles HardFault exception + \param[in] none + \param[out] none + \retval none +*/ +void HardFault_Handler(void) +{ + /* if Hard Fault exception occurs, go to infinite loop */ + while (1){ + } +} + +/*! + \brief this function handles MemManage exception + \param[in] none + \param[out] none + \retval none +*/ +void MemManage_Handler(void) +{ + /* if Memory Manage exception occurs, go to infinite loop */ + while (1){ + } +} + +/*! + \brief this function handles BusFault exception + \param[in] none + \param[out] none + \retval none +*/ +void BusFault_Handler(void) +{ + /* if Bus Fault exception occurs, go to infinite loop */ + while (1){ + } +} + +/*! + \brief this function handles UsageFault exception + \param[in] none + \param[out] none + \retval none +*/ +void UsageFault_Handler(void) +{ + /* if Usage Fault exception occurs, go to infinite loop */ + while (1){ + } +} + +/*! + \brief this function handles SVC exception + \param[in] none + \param[out] none + \retval none +*/ +void SVC_Handler(void) +{ +} + +/*! + \brief this function handles DebugMon exception + \param[in] none + \param[out] none + \retval none +*/ +void DebugMon_Handler(void) +{ +} + +/*! + \brief this function handles PendSV exception + \param[in] none + \param[out] none + \retval none +*/ +void PendSV_Handler(void) +{ +} + +/*! + \brief this function handles SysTick exception + \param[in] none + \param[out] none + \retval none +*/ +void SysTick_Handler(void) +{ + delay_decrement(); +} \ No newline at end of file diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.c new file mode 100644 index 0000000..5883aac --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.c @@ -0,0 +1,184 @@ +/*! + \file gd32c10x_misc.c + \brief MISC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_misc.h" + +/*! + \brief set the priority group + \param[in] nvic_prigroup: the NVIC priority group + \arg NVIC_PRIGROUP_PRE0_SUB4: 0 bits for pre-emption priority, 4 bits for subpriority + \arg NVIC_PRIGROUP_PRE1_SUB3: 1 bits for pre-emption priority, 3 bits for subpriority + \arg NVIC_PRIGROUP_PRE2_SUB2: 2 bits for pre-emption priority, 2 bits for subpriority + \arg NVIC_PRIGROUP_PRE3_SUB1: 3 bits for pre-emption priority, 1 bits for subpriority + \arg NVIC_PRIGROUP_PRE4_SUB0: 4 bits for pre-emption priority, 0 bits for subpriority + \param[out] none + \retval none +*/ +void nvic_priority_group_set(uint32_t nvic_prigroup) +{ + /* set the priority group value */ + SCB->AIRCR = NVIC_AIRCR_VECTKEY_MASK | nvic_prigroup; +} + +/*! + \brief enable NVIC interrupt request + \param[in] nvic_irq: the NVIC interrupt request, detailed in IRQn_Type + \param[in] nvic_irq_pre_priority: the pre-emption priority needed to set + \param[in] nvic_irq_sub_priority: the subpriority needed to set + \param[out] none + \retval none +*/ +void nvic_irq_enable(IRQn_Type nvic_irq, + uint8_t nvic_irq_pre_priority, + uint8_t nvic_irq_sub_priority) +{ + uint32_t temp_priority = 0x00U, temp_pre = 0x00U, temp_sub = 0x00U; + + /* use the priority group value to get the temp_pre and the temp_sub */ + switch((SCB->AIRCR) & (uint32_t)0x700U) { + case NVIC_PRIGROUP_PRE0_SUB4: + temp_pre = 0U; + temp_sub = 0x4U; + break; + case NVIC_PRIGROUP_PRE1_SUB3: + temp_pre = 1U; + temp_sub = 0x3U; + break; + case NVIC_PRIGROUP_PRE2_SUB2: + temp_pre = 2U; + temp_sub = 0x2U; + break; + case NVIC_PRIGROUP_PRE3_SUB1: + temp_pre = 3U; + temp_sub = 0x1U; + break; + case NVIC_PRIGROUP_PRE4_SUB0: + temp_pre = 4U; + temp_sub = 0x0U; + break; + default: + nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); + temp_pre = 2U; + temp_sub = 0x2U; + break; + } + + /* get the temp_priority to fill the NVIC->IP register */ + temp_priority = (uint32_t)nvic_irq_pre_priority << (0x4U - temp_pre); + temp_priority |= nvic_irq_sub_priority & (0x0FU >> (0x4U - temp_sub)); + temp_priority = temp_priority << 0x04U; + NVIC->IP[nvic_irq] = (uint8_t)temp_priority; + + /* enable the selected IRQ */ + NVIC->ISER[nvic_irq >> 0x05U] = (uint32_t)0x01U << (nvic_irq & (uint8_t)0x1FU); +} + +/*! + \brief disable NVIC interrupt request + \param[in] nvic_irq: the NVIC interrupt request, detailed in IRQn_Type + \param[out] none + \retval none +*/ +void nvic_irq_disable(IRQn_Type nvic_irq) +{ + /* disable the selected IRQ.*/ + NVIC->ICER[nvic_irq >> 0x05U] = (uint32_t)0x01U << (nvic_irq & (uint8_t)0x1FU); +} + +/*! + \brief set the NVIC vector table base address + \param[in] nvic_vict_tab: the RAM or FLASH base address + \arg NVIC_VECTTAB_RAM: RAM base address + \are NVIC_VECTTAB_FLASH: Flash base address + \param[in] offset: vector table offset + \param[out] none + \retval none +*/ +void nvic_vector_table_set(uint32_t nvic_vict_tab, uint32_t offset) +{ + SCB->VTOR = nvic_vict_tab | (offset & NVIC_VECTTAB_OFFSET_MASK); + __DSB(); +} + +/*! + \brief set the state of the low power mode + \param[in] lowpower_mode: the low power mode state + \arg SCB_LPM_SLEEP_EXIT_ISR: if chose this para, the system always enter low power + mode by exiting from ISR + \arg SCB_LPM_DEEPSLEEP: if chose this para, the system will enter the DEEPSLEEP mode + \arg SCB_LPM_WAKE_BY_ALL_INT: if chose this para, the low power mode can be woke up + by all the enable and disable interrupts + \param[out] none + \retval none +*/ +void system_lowpower_set(uint8_t lowpower_mode) +{ + SCB->SCR |= (uint32_t)lowpower_mode; +} + +/*! + \brief reset the state of the low power mode + \param[in] lowpower_mode: the low power mode state + \arg SCB_LPM_SLEEP_EXIT_ISR: if chose this para, the system will exit low power + mode by exiting from ISR + \arg SCB_LPM_DEEPSLEEP: if chose this para, the system will enter the SLEEP mode + \arg SCB_LPM_WAKE_BY_ALL_INT: if chose this para, the low power mode only can be + woke up by the enable interrupts + \param[out] none + \retval none +*/ +void system_lowpower_reset(uint8_t lowpower_mode) +{ + SCB->SCR &= (~(uint32_t)lowpower_mode); +} + +/*! + \brief set the systick clock source + \param[in] systick_clksource: the systick clock source needed to choose + \arg SYSTICK_CLKSOURCE_HCLK: systick clock source is from HCLK + \arg SYSTICK_CLKSOURCE_HCLK_DIV8: systick clock source is from HCLK/8 + \param[out] none + \retval none +*/ + +void systick_clksource_set(uint32_t systick_clksource) +{ + if(SYSTICK_CLKSOURCE_HCLK == systick_clksource) { + /* set the systick clock source from HCLK */ + SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK; + } else { + /* set the systick clock source from HCLK/8 */ + SysTick->CTRL &= SYSTICK_CLKSOURCE_HCLK_DIV8; + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.c.base@1.0.0 new file mode 100644 index 0000000..5883aac --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.c.base@1.0.0 @@ -0,0 +1,184 @@ +/*! + \file gd32c10x_misc.c + \brief MISC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_misc.h" + +/*! + \brief set the priority group + \param[in] nvic_prigroup: the NVIC priority group + \arg NVIC_PRIGROUP_PRE0_SUB4: 0 bits for pre-emption priority, 4 bits for subpriority + \arg NVIC_PRIGROUP_PRE1_SUB3: 1 bits for pre-emption priority, 3 bits for subpriority + \arg NVIC_PRIGROUP_PRE2_SUB2: 2 bits for pre-emption priority, 2 bits for subpriority + \arg NVIC_PRIGROUP_PRE3_SUB1: 3 bits for pre-emption priority, 1 bits for subpriority + \arg NVIC_PRIGROUP_PRE4_SUB0: 4 bits for pre-emption priority, 0 bits for subpriority + \param[out] none + \retval none +*/ +void nvic_priority_group_set(uint32_t nvic_prigroup) +{ + /* set the priority group value */ + SCB->AIRCR = NVIC_AIRCR_VECTKEY_MASK | nvic_prigroup; +} + +/*! + \brief enable NVIC interrupt request + \param[in] nvic_irq: the NVIC interrupt request, detailed in IRQn_Type + \param[in] nvic_irq_pre_priority: the pre-emption priority needed to set + \param[in] nvic_irq_sub_priority: the subpriority needed to set + \param[out] none + \retval none +*/ +void nvic_irq_enable(IRQn_Type nvic_irq, + uint8_t nvic_irq_pre_priority, + uint8_t nvic_irq_sub_priority) +{ + uint32_t temp_priority = 0x00U, temp_pre = 0x00U, temp_sub = 0x00U; + + /* use the priority group value to get the temp_pre and the temp_sub */ + switch((SCB->AIRCR) & (uint32_t)0x700U) { + case NVIC_PRIGROUP_PRE0_SUB4: + temp_pre = 0U; + temp_sub = 0x4U; + break; + case NVIC_PRIGROUP_PRE1_SUB3: + temp_pre = 1U; + temp_sub = 0x3U; + break; + case NVIC_PRIGROUP_PRE2_SUB2: + temp_pre = 2U; + temp_sub = 0x2U; + break; + case NVIC_PRIGROUP_PRE3_SUB1: + temp_pre = 3U; + temp_sub = 0x1U; + break; + case NVIC_PRIGROUP_PRE4_SUB0: + temp_pre = 4U; + temp_sub = 0x0U; + break; + default: + nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); + temp_pre = 2U; + temp_sub = 0x2U; + break; + } + + /* get the temp_priority to fill the NVIC->IP register */ + temp_priority = (uint32_t)nvic_irq_pre_priority << (0x4U - temp_pre); + temp_priority |= nvic_irq_sub_priority & (0x0FU >> (0x4U - temp_sub)); + temp_priority = temp_priority << 0x04U; + NVIC->IP[nvic_irq] = (uint8_t)temp_priority; + + /* enable the selected IRQ */ + NVIC->ISER[nvic_irq >> 0x05U] = (uint32_t)0x01U << (nvic_irq & (uint8_t)0x1FU); +} + +/*! + \brief disable NVIC interrupt request + \param[in] nvic_irq: the NVIC interrupt request, detailed in IRQn_Type + \param[out] none + \retval none +*/ +void nvic_irq_disable(IRQn_Type nvic_irq) +{ + /* disable the selected IRQ.*/ + NVIC->ICER[nvic_irq >> 0x05U] = (uint32_t)0x01U << (nvic_irq & (uint8_t)0x1FU); +} + +/*! + \brief set the NVIC vector table base address + \param[in] nvic_vict_tab: the RAM or FLASH base address + \arg NVIC_VECTTAB_RAM: RAM base address + \are NVIC_VECTTAB_FLASH: Flash base address + \param[in] offset: vector table offset + \param[out] none + \retval none +*/ +void nvic_vector_table_set(uint32_t nvic_vict_tab, uint32_t offset) +{ + SCB->VTOR = nvic_vict_tab | (offset & NVIC_VECTTAB_OFFSET_MASK); + __DSB(); +} + +/*! + \brief set the state of the low power mode + \param[in] lowpower_mode: the low power mode state + \arg SCB_LPM_SLEEP_EXIT_ISR: if chose this para, the system always enter low power + mode by exiting from ISR + \arg SCB_LPM_DEEPSLEEP: if chose this para, the system will enter the DEEPSLEEP mode + \arg SCB_LPM_WAKE_BY_ALL_INT: if chose this para, the low power mode can be woke up + by all the enable and disable interrupts + \param[out] none + \retval none +*/ +void system_lowpower_set(uint8_t lowpower_mode) +{ + SCB->SCR |= (uint32_t)lowpower_mode; +} + +/*! + \brief reset the state of the low power mode + \param[in] lowpower_mode: the low power mode state + \arg SCB_LPM_SLEEP_EXIT_ISR: if chose this para, the system will exit low power + mode by exiting from ISR + \arg SCB_LPM_DEEPSLEEP: if chose this para, the system will enter the SLEEP mode + \arg SCB_LPM_WAKE_BY_ALL_INT: if chose this para, the low power mode only can be + woke up by the enable interrupts + \param[out] none + \retval none +*/ +void system_lowpower_reset(uint8_t lowpower_mode) +{ + SCB->SCR &= (~(uint32_t)lowpower_mode); +} + +/*! + \brief set the systick clock source + \param[in] systick_clksource: the systick clock source needed to choose + \arg SYSTICK_CLKSOURCE_HCLK: systick clock source is from HCLK + \arg SYSTICK_CLKSOURCE_HCLK_DIV8: systick clock source is from HCLK/8 + \param[out] none + \retval none +*/ + +void systick_clksource_set(uint32_t systick_clksource) +{ + if(SYSTICK_CLKSOURCE_HCLK == systick_clksource) { + /* set the systick clock source from HCLK */ + SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK; + } else { + /* set the systick clock source from HCLK/8 */ + SysTick->CTRL &= SYSTICK_CLKSOURCE_HCLK_DIV8; + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c new file mode 100644 index 0000000..a852732 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c @@ -0,0 +1,294 @@ +/*! + \file gd32c10x_pmu.c + \brief PMU driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_pmu.h" + +/*! + \brief reset PMU register + \param[in] none + \param[out] none + \retval none +*/ +void pmu_deinit(void) +{ + /* reset PMU */ + rcu_periph_reset_enable(RCU_PMURST); + rcu_periph_reset_disable(RCU_PMURST); +} + +/*! + \brief select low voltage detector threshold + \param[in] lvdt_n: + only one parameter can be selected which is shown as below: + \arg PMU_LVDT_0: voltage threshold is 2.1V + \arg PMU_LVDT_1: voltage threshold is 2.3V + \arg PMU_LVDT_2: voltage threshold is 2.4V + \arg PMU_LVDT_3: voltage threshold is 2.6V + \arg PMU_LVDT_4: voltage threshold is 2.7V + \arg PMU_LVDT_5: voltage threshold is 2.9V + \arg PMU_LVDT_6: voltage threshold is 3.0V + \arg PMU_LVDT_7: voltage threshold is 3.1V + \param[out] none + \retval none +*/ +void pmu_lvd_select(uint32_t lvdt_n) +{ + /* disable LVD */ + PMU_CTL &= ~PMU_CTL_LVDEN; + /* clear LVDT bits */ + PMU_CTL &= ~PMU_CTL_LVDT; + /* set LVDT bits according to lvdt_n */ + PMU_CTL |= lvdt_n; + /* enable LVD */ + PMU_CTL |= PMU_CTL_LVDEN; +} + +/*! + \brief select LDO output voltage + this bit set by software when the main PLL closed, before closing PLL, change the system clock to IRC16M or HXTAL + \param[in] ldo_output: + only one parameter can be selected which is shown as below: + \arg PMU_LDOVS_LOW: LDO output voltage select low mode + \arg PMU_LDOVS_NORMAL: LDO output voltage select normal mode + \param[out] none + \retval none +*/ +void pmu_ldo_output_select(uint32_t ldo_output) +{ + PMU_CTL &= ~PMU_CTL_LDOVS; + PMU_CTL |= ldo_output; +} + +/*! + \brief disable PMU lvd + \param[in] none + \param[out] none + \retval none +*/ +void pmu_lvd_disable(void) +{ + /* disable LVD */ + PMU_CTL &= ~PMU_CTL_LVDEN; +} + +/*! + \brief PMU work at sleep mode + \param[in] sleepmodecmd: + only one parameter can be selected which is shown as below: + \arg WFI_CMD: use WFI command + \arg WFE_CMD: use WFE command + \param[out] none + \retval none +*/ +void pmu_to_sleepmode(uint8_t sleepmodecmd) +{ + /* clear sleepdeep bit of Cortex-M4 system control register */ + SCB->SCR &= ~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); + + /* select WFI or WFE command to enter sleep mode */ + if(WFI_CMD == sleepmodecmd){ + __WFI(); + }else{ + __SEV(); + __WFE(); + __WFE(); + } +} + +/*! + \brief PMU work at deepsleep mode + \param[in] ldo: + only one parameter can be selected which is shown as below: + \arg PMU_LDO_NORMAL: LDO work at normal power mode when pmu enter deepsleep mode + \arg PMU_LDO_LOWPOWER: LDO work at low power mode when pmu enter deepsleep mode + \param[in] deepsleepmodecmd: + only one parameter can be selected which is shown as below: + \arg WFI_CMD: use WFI command + \arg WFE_CMD: use WFE command + \param[out] none + \retval none +*/ +void pmu_to_deepsleepmode(uint32_t ldo,uint8_t deepsleepmodecmd) +{ + static uint32_t reg_snap[4]; + /* clear stbmod and ldolp bits */ + PMU_CTL &= ~((uint32_t)(PMU_CTL_STBMOD | PMU_CTL_LDOLP)); + + /* set ldolp bit according to pmu_ldo */ + PMU_CTL |= ldo; + + /* set sleepdeep bit of Cortex-M4 system control register */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + reg_snap[0] = REG32(0xE000E010U); + reg_snap[1] = REG32(0xE000E100U); + reg_snap[2] = REG32(0xE000E104U); + reg_snap[3] = REG32(0xE000E108U); + + REG32(0xE000E010U) &= 0x00010004U; + REG32(0xE000E180U) = 0XFF7FF83DU; + REG32(0xE000E184U) = 0XFFFFF8FFU; + REG32(0xE000E188U) = 0xFFFFFFFFU; + + /* select WFI or WFE command to enter deepsleep mode */ + if(WFI_CMD == deepsleepmodecmd){ + __WFI(); + }else{ + __SEV(); + __WFE(); + __WFE(); + } + + REG32(0xE000E010U) = reg_snap[0]; + REG32(0xE000E100U) = reg_snap[1]; + REG32(0xE000E104U) = reg_snap[2]; + REG32(0xE000E108U) = reg_snap[3]; + + /* reset sleepdeep bit of Cortex-M4 system control register */ + SCB->SCR &= ~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); +} + +/*! + \brief pmu work at standby mode + \param[in] none + \param[out] none + \retval none +*/ +void pmu_to_standbymode(void) +{ + /* set stbmod bit */ + PMU_CTL |= PMU_CTL_STBMOD; + + /* reset wakeup flag */ + PMU_CTL |= PMU_CTL_WURST; + + /* set sleepdeep bit of Cortex-M4 system control register */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + REG32(0xE000E010U) &= 0x00010004U; + REG32(0xE000E180U) = 0XFFFFFFF7U; + REG32(0xE000E184U) = 0XFFFFFDFFU; + REG32(0xE000E188U) = 0xFFFFFFFFU; + + /* select WFI or WFE command to enter standby mode */ + __WFI(); +} + +/*! + \brief enable wakeup pin + \param[in] none + \param[out] none + \retval none +*/ +void pmu_wakeup_pin_enable(void) +{ + PMU_CS |= PMU_CS_WUPEN; +} + +/*! + \brief disable wakeup pin + \param[in] none + \param[out] none + \retval none +*/ +void pmu_wakeup_pin_disable(void) +{ + PMU_CS &= ~PMU_CS_WUPEN; +} + +/*! + \brief enable write access to the registers in backup domain + \param[in] none + \param[out] none + \retval none +*/ +void pmu_backup_write_enable(void) +{ + PMU_CTL |= PMU_CTL_BKPWEN; +} + +/*! + \brief disable write access to the registers in backup domain + \param[in] none + \param[out] none + \retval none +*/ +void pmu_backup_write_disable(void) +{ + PMU_CTL &= ~PMU_CTL_BKPWEN; +} + +/*! + \brief get flag state + \param[in] flag: + only one parameter can be selected which is shown as below: + \arg PMU_FLAG_WAKEUP: wakeup flag + \arg PMU_FLAG_STANDBY: standby flag + \arg PMU_FLAG_LVD: lvd flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus pmu_flag_get(uint32_t flag) +{ + if(RESET != (PMU_CS & flag)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear flag bit + \param[in] flag: + only one parameter can be selected which is shown as below: + \arg PMU_FLAG_RESET_WAKEUP: reset wakeup flag + \arg PMU_FLAG_RESET_STANDBY: reset standby flag + \param[out] none + \retval none +*/ +void pmu_flag_clear(uint32_t flag) +{ + switch(flag){ + case PMU_FLAG_RESET_WAKEUP: + /* reset wakeup flag */ + PMU_CTL |= PMU_CTL_WURST; + break; + case PMU_FLAG_RESET_STANDBY: + /* reset standby flag */ + PMU_CTL |= PMU_CTL_STBRST; + break; + default: + break; + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c.base@1.0.0 new file mode 100644 index 0000000..a852732 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c.base@1.0.0 @@ -0,0 +1,294 @@ +/*! + \file gd32c10x_pmu.c + \brief PMU driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_pmu.h" + +/*! + \brief reset PMU register + \param[in] none + \param[out] none + \retval none +*/ +void pmu_deinit(void) +{ + /* reset PMU */ + rcu_periph_reset_enable(RCU_PMURST); + rcu_periph_reset_disable(RCU_PMURST); +} + +/*! + \brief select low voltage detector threshold + \param[in] lvdt_n: + only one parameter can be selected which is shown as below: + \arg PMU_LVDT_0: voltage threshold is 2.1V + \arg PMU_LVDT_1: voltage threshold is 2.3V + \arg PMU_LVDT_2: voltage threshold is 2.4V + \arg PMU_LVDT_3: voltage threshold is 2.6V + \arg PMU_LVDT_4: voltage threshold is 2.7V + \arg PMU_LVDT_5: voltage threshold is 2.9V + \arg PMU_LVDT_6: voltage threshold is 3.0V + \arg PMU_LVDT_7: voltage threshold is 3.1V + \param[out] none + \retval none +*/ +void pmu_lvd_select(uint32_t lvdt_n) +{ + /* disable LVD */ + PMU_CTL &= ~PMU_CTL_LVDEN; + /* clear LVDT bits */ + PMU_CTL &= ~PMU_CTL_LVDT; + /* set LVDT bits according to lvdt_n */ + PMU_CTL |= lvdt_n; + /* enable LVD */ + PMU_CTL |= PMU_CTL_LVDEN; +} + +/*! + \brief select LDO output voltage + this bit set by software when the main PLL closed, before closing PLL, change the system clock to IRC16M or HXTAL + \param[in] ldo_output: + only one parameter can be selected which is shown as below: + \arg PMU_LDOVS_LOW: LDO output voltage select low mode + \arg PMU_LDOVS_NORMAL: LDO output voltage select normal mode + \param[out] none + \retval none +*/ +void pmu_ldo_output_select(uint32_t ldo_output) +{ + PMU_CTL &= ~PMU_CTL_LDOVS; + PMU_CTL |= ldo_output; +} + +/*! + \brief disable PMU lvd + \param[in] none + \param[out] none + \retval none +*/ +void pmu_lvd_disable(void) +{ + /* disable LVD */ + PMU_CTL &= ~PMU_CTL_LVDEN; +} + +/*! + \brief PMU work at sleep mode + \param[in] sleepmodecmd: + only one parameter can be selected which is shown as below: + \arg WFI_CMD: use WFI command + \arg WFE_CMD: use WFE command + \param[out] none + \retval none +*/ +void pmu_to_sleepmode(uint8_t sleepmodecmd) +{ + /* clear sleepdeep bit of Cortex-M4 system control register */ + SCB->SCR &= ~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); + + /* select WFI or WFE command to enter sleep mode */ + if(WFI_CMD == sleepmodecmd){ + __WFI(); + }else{ + __SEV(); + __WFE(); + __WFE(); + } +} + +/*! + \brief PMU work at deepsleep mode + \param[in] ldo: + only one parameter can be selected which is shown as below: + \arg PMU_LDO_NORMAL: LDO work at normal power mode when pmu enter deepsleep mode + \arg PMU_LDO_LOWPOWER: LDO work at low power mode when pmu enter deepsleep mode + \param[in] deepsleepmodecmd: + only one parameter can be selected which is shown as below: + \arg WFI_CMD: use WFI command + \arg WFE_CMD: use WFE command + \param[out] none + \retval none +*/ +void pmu_to_deepsleepmode(uint32_t ldo,uint8_t deepsleepmodecmd) +{ + static uint32_t reg_snap[4]; + /* clear stbmod and ldolp bits */ + PMU_CTL &= ~((uint32_t)(PMU_CTL_STBMOD | PMU_CTL_LDOLP)); + + /* set ldolp bit according to pmu_ldo */ + PMU_CTL |= ldo; + + /* set sleepdeep bit of Cortex-M4 system control register */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + reg_snap[0] = REG32(0xE000E010U); + reg_snap[1] = REG32(0xE000E100U); + reg_snap[2] = REG32(0xE000E104U); + reg_snap[3] = REG32(0xE000E108U); + + REG32(0xE000E010U) &= 0x00010004U; + REG32(0xE000E180U) = 0XFF7FF83DU; + REG32(0xE000E184U) = 0XFFFFF8FFU; + REG32(0xE000E188U) = 0xFFFFFFFFU; + + /* select WFI or WFE command to enter deepsleep mode */ + if(WFI_CMD == deepsleepmodecmd){ + __WFI(); + }else{ + __SEV(); + __WFE(); + __WFE(); + } + + REG32(0xE000E010U) = reg_snap[0]; + REG32(0xE000E100U) = reg_snap[1]; + REG32(0xE000E104U) = reg_snap[2]; + REG32(0xE000E108U) = reg_snap[3]; + + /* reset sleepdeep bit of Cortex-M4 system control register */ + SCB->SCR &= ~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); +} + +/*! + \brief pmu work at standby mode + \param[in] none + \param[out] none + \retval none +*/ +void pmu_to_standbymode(void) +{ + /* set stbmod bit */ + PMU_CTL |= PMU_CTL_STBMOD; + + /* reset wakeup flag */ + PMU_CTL |= PMU_CTL_WURST; + + /* set sleepdeep bit of Cortex-M4 system control register */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + REG32(0xE000E010U) &= 0x00010004U; + REG32(0xE000E180U) = 0XFFFFFFF7U; + REG32(0xE000E184U) = 0XFFFFFDFFU; + REG32(0xE000E188U) = 0xFFFFFFFFU; + + /* select WFI or WFE command to enter standby mode */ + __WFI(); +} + +/*! + \brief enable wakeup pin + \param[in] none + \param[out] none + \retval none +*/ +void pmu_wakeup_pin_enable(void) +{ + PMU_CS |= PMU_CS_WUPEN; +} + +/*! + \brief disable wakeup pin + \param[in] none + \param[out] none + \retval none +*/ +void pmu_wakeup_pin_disable(void) +{ + PMU_CS &= ~PMU_CS_WUPEN; +} + +/*! + \brief enable write access to the registers in backup domain + \param[in] none + \param[out] none + \retval none +*/ +void pmu_backup_write_enable(void) +{ + PMU_CTL |= PMU_CTL_BKPWEN; +} + +/*! + \brief disable write access to the registers in backup domain + \param[in] none + \param[out] none + \retval none +*/ +void pmu_backup_write_disable(void) +{ + PMU_CTL &= ~PMU_CTL_BKPWEN; +} + +/*! + \brief get flag state + \param[in] flag: + only one parameter can be selected which is shown as below: + \arg PMU_FLAG_WAKEUP: wakeup flag + \arg PMU_FLAG_STANDBY: standby flag + \arg PMU_FLAG_LVD: lvd flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus pmu_flag_get(uint32_t flag) +{ + if(RESET != (PMU_CS & flag)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear flag bit + \param[in] flag: + only one parameter can be selected which is shown as below: + \arg PMU_FLAG_RESET_WAKEUP: reset wakeup flag + \arg PMU_FLAG_RESET_STANDBY: reset standby flag + \param[out] none + \retval none +*/ +void pmu_flag_clear(uint32_t flag) +{ + switch(flag){ + case PMU_FLAG_RESET_WAKEUP: + /* reset wakeup flag */ + PMU_CTL |= PMU_CTL_WURST; + break; + case PMU_FLAG_RESET_STANDBY: + /* reset standby flag */ + PMU_CTL |= PMU_CTL_STBRST; + break; + default: + break; + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c new file mode 100644 index 0000000..89007c4 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c @@ -0,0 +1,1249 @@ +/*! + \file gd32c10x_rcu.c + \brief RCU driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_rcu.h" + +/* define clock source */ +#define SEL_IRC8M ((uint16_t)0U) /* IRC8M is selected as CK_SYS */ +#define SEL_HXTAL ((uint16_t)1U) /* HXTAL is selected as CK_SYS */ +#define SEL_PLL ((uint16_t)2U) /* PLL is selected as CK_SYS */ + +/* define startup timeout count */ +#define OSC_STARTUP_TIMEOUT ((uint32_t)0x000FFFFFU) +#define LXTAL_STARTUP_TIMEOUT ((uint32_t)0x03FFFFFFU) + +/* ADC clock prescaler offset */ +#define RCU_ADC_PSC_OFFSET ((uint32_t)14U) + +/* RCU IRC8M adjust value mask and offset*/ +#define RCU_IRC8M_ADJUST_MASK ((uint8_t)0x1FU) +#define RCU_IRC8M_ADJUST_OFFSET ((uint32_t)3U) + +/* RCU PLL1 clock multiplication factor offset */ +#define RCU_CFG1_PLL1MF_OFFSET ((uint32_t)8U) +/* RCU PREDV1 division factor offset*/ +#define RCU_CFG1_PREDV1_OFFSET ((uint32_t)4U) + +/*! + \brief deinitialize the RCU + \param[in] none + \param[out] none + \retval none +*/ +void rcu_deinit(void) +{ + /* enable IRC8M */ + RCU_CTL |= RCU_CTL_IRC8MEN; + rcu_osci_stab_wait(RCU_IRC8M); + + RCU_CFG0 &= ~(RCU_CFG0_SCS); + /* reset HXTALEN, CKMEN, PLLEN bits */ + RCU_CTL &= ~(RCU_CTL_HXTALEN | RCU_CTL_CKMEN | RCU_CTL_PLLEN); + + /* reset CFG0 register */ + RCU_CFG0 &= ~(RCU_CFG0_SCS | RCU_CFG0_AHBPSC | RCU_CFG0_APB1PSC | RCU_CFG0_APB2PSC | + RCU_CFG0_ADCPSC | RCU_CFG0_CKOUT0SEL | RCU_CFG0_ADCPSC_2); + + /* reset HXTALBPS bit */ + RCU_CTL &= ~RCU_CTL_HXTALBPS; + /* reset PLLSEL, PREDV0_LSB, PLLMF, USBFSPSC bits */ + RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0_LSB | RCU_CFG0_PLLMF | + RCU_CFG0_USBFSPSC | RCU_CFG0_PLLMF_4 | RCU_CFG0_USBFSPSC_2); + /* reset PLL1EN and PLL2EN bits */ + RCU_CTL &= ~(RCU_CTL_PLL1EN | RCU_CTL_PLL2EN); + + /* reset INT and CFG1 register */ + RCU_INT = 0x00ff0000U; + RCU_CFG1 &= ~(RCU_CFG1_PREDV0 | RCU_CFG1_PREDV1 | RCU_CFG1_PLL1MF | RCU_CFG1_PLL2MF | + RCU_CFG1_PREDV0SEL | RCU_CFG1_I2S1SEL | RCU_CFG1_I2S2SEL | RCU_CFG1_ADCPSC_3 | + RCU_CFG1_PLLPRESEL); +} +/*! + \brief enable the peripherals clock + \param[in] periph: RCU peripherals, refer to rcu_periph_enum + only one parameter can be selected which is shown as below: + \arg RCU_GPIOx (x=A,B,C,D,E): GPIO ports clock + \arg RCU_AF : alternate function clock + \arg RCU_CRC: CRC clock + \arg RCU_DMAx (x=0,1): DMA clock + \arg RCU_USBFS: USBFS clock + \arg RCU_EXMC: EXMC clock + \arg RCU_TIMERx (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13): TIMER clock + \arg RCU_WWDGT: WWDGT clock + \arg RCU_SPIx (x=0,1,2): SPI clock + \arg RCU_USARTx (x=0,1,2): USART clock + \arg RCU_UARTx (x=3,4): UART clock + \arg RCU_I2Cx (x=0,1): I2C clock + \arg RCU_CANx (x=0,1): CAN clock + \arg RCU_PMU: PMU clock + \arg RCU_DAC: DAC clock + \arg RCU_RTC: RTC clock + \arg RCU_ADCx (x=0,1): ADC clock + \arg RCU_CTC: CTC clock + \arg RCU_BKPI: BKP interface clock + \param[out] none + \retval none +*/ +void rcu_periph_clock_enable(rcu_periph_enum periph) +{ + RCU_REG_VAL(periph) |= BIT(RCU_BIT_POS(periph)); +} + +/*! + \brief disable the peripherals clock + \param[in] periph: RCU peripherals, refer to rcu_periph_enum + only one parameter can be selected which is shown as below: + \arg RCU_GPIOx (x=A,B,C,D,E): GPIO ports clock + \arg RCU_AF: alternate function clock + \arg RCU_CRC: CRC clock + \arg RCU_DMAx (x=0,1): DMA clock + \arg RCU_USBFS: USBFS clock + \arg RCU_EXMC: EXMC clock + \arg RCU_TIMERx (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13): TIMER clock + \arg RCU_WWDGT: WWDGT clock + \arg RCU_SPIx (x=0,1,2): SPI clock + \arg RCU_USARTx (x=0,1,2): USART clock + \arg RCU_UARTx (x=3,4): UART clock + \arg RCU_I2Cx (x=0,1): I2C clock + \arg RCU_CANx (x=0,1): CAN clock + \arg RCU_PMU: PMU clock + \arg RCU_DAC: DAC clock + \arg RCU_RTC: RTC clock + \arg RCU_ADCx (x=0,1): ADC clock + \arg RCU_CTC: CTC clock + \arg RCU_BKPI: BKP interface clock + \param[out] none + \retval none +*/ +void rcu_periph_clock_disable(rcu_periph_enum periph) +{ + RCU_REG_VAL(periph) &= ~BIT(RCU_BIT_POS(periph)); +} + +/*! + \brief enable the peripherals clock when sleep mode + \param[in] periph: RCU peripherals, refer to rcu_periph_sleep_enum + only one parameter can be selected which is shown as below: + \arg RCU_FMC_SLP: FMC clock + \arg RCU_SRAM_SLP: SRAM clock + \param[out] none + \retval none +*/ +void rcu_periph_clock_sleep_enable(rcu_periph_sleep_enum periph) +{ + RCU_REG_VAL(periph) |= BIT(RCU_BIT_POS(periph)); +} + +/*! + \brief disable the peripherals clock when sleep mode + \param[in] periph: RCU peripherals, refer to rcu_periph_sleep_enum + only one parameter can be selected which is shown as below: + \arg RCU_FMC_SLP: FMC clock + \arg RCU_SRAM_SLP: SRAM clock + \param[out] none + \retval none +*/ +void rcu_periph_clock_sleep_disable(rcu_periph_sleep_enum periph) +{ + RCU_REG_VAL(periph) &= ~BIT(RCU_BIT_POS(periph)); +} + +/*! + \brief reset the peripherals + \param[in] periph_reset: RCU peripherals reset, refer to rcu_periph_reset_enum + only one parameter can be selected which is shown as below: + \arg RCU_GPIOxRST (x=A,B,C,D,E): reset GPIO ports + \arg RCU_AFRST : reset alternate function clock + \arg RCU_USBFSRST: reset USBFS + \arg RCU_TIMERxRST (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13): reset TIMER + \arg RCU_WWDGTRST: reset WWDGT + \arg RCU_SPIxRST (x=0,1,2): reset SPI + \arg RCU_USARTxRST (x=0,1,2): reset USART + \arg RCU_UARTxRST (x=3,4): reset UART + \arg RCU_I2CxRST (x=0,1): reset I2C + \arg RCU_CANxRST (x=0,1): reset CAN + \arg RCU_PMURST: reset PMU + \arg RCU_DACRST: reset DAC + \arg RCU_ADCxRST (x=0,1): reset ADC + \arg RCU_CTCRST: reset CTC + \arg RCU_BKPIRST: reset BKPI + \param[out] none + \retval none +*/ +void rcu_periph_reset_enable(rcu_periph_reset_enum periph_reset) +{ + RCU_REG_VAL(periph_reset) |= BIT(RCU_BIT_POS(periph_reset)); +} + +/*! + \brief disable reset the peripheral + \param[in] periph_reset: RCU peripherals reset, refer to rcu_periph_reset_enum + only one parameter can be selected which is shown as below: + \arg RCU_GPIOxRST (x=A,B,C,D,E): reset GPIO ports + \arg RCU_AFRST : reset alternate function clock + \arg RCU_USBFSRST: reset USBFS + \arg RCU_TIMERxRST (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13): reset TIMER + \arg RCU_WWDGTRST: reset WWDGT + \arg RCU_SPIxRST (x=0,1,2): reset SPI + \arg RCU_USARTxRST (x=0,1,2): reset USART + \arg RCU_UARTxRST (x=3,4): reset UART + \arg RCU_I2CxRST (x=0,1): reset I2C + \arg RCU_CANxRST (x=0,1): reset CAN + \arg RCU_PMURST: reset PMU + \arg RCU_DACRST: reset DAC + \arg RCU_ADCxRST (x=0,1): reset ADC + \arg RCU_CTCRST: reset CTC + \arg RCU_BKPIRST: reset BKPI + \param[out] none + \retval none +*/ +void rcu_periph_reset_disable(rcu_periph_reset_enum periph_reset) +{ + RCU_REG_VAL(periph_reset) &= ~BIT(RCU_BIT_POS(periph_reset)); +} + +/*! + \brief reset the BKP domain + \param[in] none + \param[out] none + \retval none +*/ +void rcu_bkp_reset_enable(void) +{ + RCU_BDCTL |= RCU_BDCTL_BKPRST; +} + +/*! + \brief disable the BKP domain reset + \param[in] none + \param[out] none + \retval none +*/ +void rcu_bkp_reset_disable(void) +{ + RCU_BDCTL &= ~RCU_BDCTL_BKPRST; +} + +/*! + \brief configure the system clock source + \param[in] ck_sys: system clock source select + only one parameter can be selected which is shown as below: + \arg RCU_CKSYSSRC_IRC8M: select CK_IRC8M as the CK_SYS source + \arg RCU_CKSYSSRC_HXTAL: select CK_HXTAL as the CK_SYS source + \arg RCU_CKSYSSRC_PLL: select CK_PLL as the CK_SYS source + \param[out] none + \retval none +*/ +void rcu_system_clock_source_config(uint32_t ck_sys) +{ + uint32_t reg; + + reg = RCU_CFG0; + /* reset the SCS bits and set according to ck_sys */ + reg &= ~RCU_CFG0_SCS; + RCU_CFG0 = (reg | ck_sys); +} + +/*! + \brief get the system clock source + \param[in] none + \param[out] none + \retval which clock is selected as CK_SYS source + \arg RCU_SCSS_IRC8M: CK_IRC8M is selected as the CK_SYS source + \arg RCU_SCSS_HXTAL: CK_HXTAL is selected as the CK_SYS source + \arg RCU_SCSS_PLL: CK_PLL is selected as the CK_SYS source +*/ +uint32_t rcu_system_clock_source_get(void) +{ + return (RCU_CFG0 & RCU_CFG0_SCSS); +} + +/*! + \brief configure the AHB clock prescaler selection + \param[in] ck_ahb: AHB clock prescaler selection + only one parameter can be selected which is shown as below: + \arg RCU_AHB_CKSYS_DIVx, x=1, 2, 4, 8, 16, 64, 128, 256, 512 + \param[out] none + \retval none +*/ +void rcu_ahb_clock_config(uint32_t ck_ahb) +{ + uint32_t reg; + + reg = RCU_CFG0; + + /* reset the AHBPSC bits and set according to ck_ahb */ + reg &= ~RCU_CFG0_AHBPSC; + RCU_CFG0 = (reg | ck_ahb); +} + +/*! + \brief configure the APB1 clock prescaler selection + \param[in] ck_apb1: APB1 clock prescaler selection + only one parameter can be selected which is shown as below: + \arg RCU_APB1_CKAHB_DIV1: select CK_AHB as CK_APB1 + \arg RCU_APB1_CKAHB_DIV2: select CK_AHB/2 as CK_APB1 + \arg RCU_APB1_CKAHB_DIV4: select CK_AHB/4 as CK_APB1 + \arg RCU_APB1_CKAHB_DIV8: select CK_AHB/8 as CK_APB1 + \arg RCU_APB1_CKAHB_DIV16: select CK_AHB/16 as CK_APB1 + \param[out] none + \retval none +*/ +void rcu_apb1_clock_config(uint32_t ck_apb1) +{ + uint32_t reg; + + reg = RCU_CFG0; + + /* reset the APB1PSC and set according to ck_apb1 */ + reg &= ~RCU_CFG0_APB1PSC; + RCU_CFG0 = (reg | ck_apb1); +} + +/*! + \brief configure the APB2 clock prescaler selection + \param[in] ck_apb2: APB2 clock prescaler selection + only one parameter can be selected which is shown as below: + \arg RCU_APB2_CKAHB_DIV1: select CK_AHB as CK_APB2 + \arg RCU_APB2_CKAHB_DIV2: select CK_AHB/2 as CK_APB2 + \arg RCU_APB2_CKAHB_DIV4: select CK_AHB/4 as CK_APB2 + \arg RCU_APB2_CKAHB_DIV8: select CK_AHB/8 as CK_APB2 + \arg RCU_APB2_CKAHB_DIV16: select CK_AHB/16 as CK_APB2 + \param[out] none + \retval none +*/ +void rcu_apb2_clock_config(uint32_t ck_apb2) +{ + uint32_t reg; + + reg = RCU_CFG0; + + /* reset the APB2PSC and set according to ck_apb2 */ + reg &= ~RCU_CFG0_APB2PSC; + RCU_CFG0 = (reg | ck_apb2); +} + +/*! + \brief configure the CK_OUT0 clock source + \param[in] ckout0_src: CK_OUT0 clock source selection + only one parameter can be selected which is shown as below: + \arg RCU_CKOUT0SRC_NONE: no clock selected + \arg RCU_CKOUT0SRC_CKSYS: system clock selected + \arg RCU_CKOUT0SRC_IRC8M: high speed 8M internal oscillator clock selected + \arg RCU_CKOUT0SRC_HXTAL: HXTAL selected + \arg RCU_CKOUT0SRC_CKPLL_DIV2: CK_PLL/2 selected + \arg RCU_CKOUT0SRC_CKPLL1: CK_PLL1 selected + \arg RCU_CKOUT0SRC_CKPLL2_DIV2: CK_PLL2/2 selected + \arg RCU_CKOUT0SRC_CKPLL2: PLL2 selected + \arg RCU_CKOUT0SRC_IRC48M: IRC48M selected + \arg RCU_CKOUT0SRC_IRC48M_DIV8: IRC48M/8 selected + \param[out] none + \retval none +*/ +void rcu_ckout0_config(uint32_t ckout0_src) +{ + uint32_t reg; + + reg = RCU_CFG0; + + /* reset the CKOUT0SRC, set according to ckout0_src */ + reg &= ~RCU_CFG0_CKOUT0SEL; + RCU_CFG0 = (reg | ckout0_src); +} + +/*! + \brief configure the main PLL clock + \param[in] pll_src: PLL clock source selection + only one parameter can be selected which is shown as below: + \arg RCU_PLLSRC_IRC8M_DIV2: IRC8M/2 clock selected as source clock of PLL + \arg RCU_PLLSRC_HXTAL_IRC48M: HXTAL or IRC48M selected as source clock of PLL + \param[in] pll_mul: PLL clock multiplication factor + only one parameter can be selected which is shown as below: + \arg RCU_PLL_MULx (x = 2..14, 16..31, 6.5) + \param[out] none + \retval none +*/ +void rcu_pll_config(uint32_t pll_src, uint32_t pll_mul) +{ + uint32_t reg = 0U; + + reg = RCU_CFG0; + + /* PLL clock source and multiplication factor configuration */ + reg &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + reg |= (pll_src | pll_mul); + + RCU_CFG0 = reg; +} + +/*! + \brief configure the PLL clock source preselection + \param[in] pll_presel: PLL clock source preselection + only one parameter can be selected which is shown as below: + \arg RCU_PLLPRESRC_HXTAL: HXTAL selected as PLL source clock + \arg RCU_PLLPRESRC_IRC48M: CK_PLL selected as PREDV0 input source clock + \param[out] none + \retval none +*/ +void rcu_pllpresel_config(uint32_t pll_presel) +{ + uint32_t reg = 0U; + + reg = RCU_CFG1; + + /* PLL clock source preselection */ + reg &= ~RCU_CFG1_PLLPRESEL; + reg |= pll_presel; + + RCU_CFG1 = reg; +} + +/*! + \brief configure the PREDV0 division factor and clock source + \param[in] predv0_source: PREDV0 input clock source selection + only one parameter can be selected which is shown as below: + \arg RCU_PREDV0SRC_HXTAL_IRC48M: HXTAL or IRC48M selected as PREDV0 input source clock + \arg RCU_PREDV0SRC_CKPLL1: CK_PLL1 selected as PREDV0 input source clock + \param[in] predv0_div: PREDV0 division factor + only one parameter can be selected which is shown as below: + \arg RCU_PREDV0_DIVx, x = 1..16 + \param[out] none + \retval none +*/ +void rcu_predv0_config(uint32_t predv0_source, uint32_t predv0_div) +{ + uint32_t reg = 0U; + + reg = RCU_CFG1; + /* reset PREDV0SEL and PREDV0 bits */ + reg &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PREDV0); + /* set the PREDV0SEL and PREDV0 division factor */ + reg |= (predv0_source | predv0_div); + + RCU_CFG1 = reg; +} + +/*! + \brief configure the PREDV1 division factor + \param[in] predv1_div: PREDV1 division factor + only one parameter can be selected which is shown as below: + \arg RCU_PREDV1_DIVx, x = 1..16 + \param[out] none + \retval none +*/ +void rcu_predv1_config(uint32_t predv1_div) +{ + uint32_t reg = 0U; + + reg = RCU_CFG1; + /* reset the PREDV1 bits */ + reg &= ~RCU_CFG1_PREDV1; + /* set the PREDV1 division factor */ + reg |= predv1_div; + + RCU_CFG1 = reg; +} + +/*! + \brief configure the PLL1 clock + \param[in] pll_mul: PLL clock multiplication factor + only one parameter can be selected which is shown as below: + \arg RCU_PLL1_MULx (x = 8..16, 20) + \param[out] none + \retval none +*/ +void rcu_pll1_config(uint32_t pll_mul) +{ + RCU_CFG1 &= ~RCU_CFG1_PLL1MF; + RCU_CFG1 |= pll_mul; +} + +/*! + \brief configure the PLL2 clock + \param[in] pll_mul: PLL clock multiplication factor + only one parameter can be selected which is shown as below: + \arg RCU_PLL2_MULx (x = 8..16, 20) + \param[out] none + \retval none +*/ +void rcu_pll2_config(uint32_t pll_mul) +{ + RCU_CFG1 &= ~RCU_CFG1_PLL2MF; + RCU_CFG1 |= pll_mul; +} + +/*! + \brief configure the ADC prescaler factor + \param[in] adc_psc: ADC prescaler factor + only one parameter can be selected which is shown as below: + \arg RCU_CKADC_CKAPB2_DIV2: ADC prescaler select CK_APB2/2 + \arg RCU_CKADC_CKAPB2_DIV4: ADC prescaler select CK_APB2/4 + \arg RCU_CKADC_CKAPB2_DIV6: ADC prescaler select CK_APB2/6 + \arg RCU_CKADC_CKAPB2_DIV8: ADC prescaler select CK_APB2/8 + \arg RCU_CKADC_CKAPB2_DIV12: ADC prescaler select CK_APB2/12 + \arg RCU_CKADC_CKAPB2_DIV16: ADC prescaler select CK_APB2/16 + \arg RCU_CKADC_CKAHB_DIV3: ADC prescaler select CK_AHB/3 + \arg RCU_CKADC_CKAHB_DIV5: ADC prescaler select CK_AHB/5 + \arg RCU_CKADC_CKAHB_DIV7: ADC prescaler select CK_AHB/7 + \arg RCU_CKADC_CKAHB_DIV9: ADC prescaler select CK_AHB/9 + \param[out] none + \retval none +*/ +void rcu_adc_clock_config(uint32_t adc_psc) +{ + uint32_t reg0,reg1; + + /* reset the ADCPSC bits */ + reg0 = RCU_CFG0; + reg0 &= ~(RCU_CFG0_ADCPSC_2 | RCU_CFG0_ADCPSC); + reg1 = RCU_CFG1; + reg1 &= ~RCU_CFG1_ADCPSC_3; + + /* set the ADC prescaler factor */ + switch(adc_psc){ + case RCU_CKADC_CKAPB2_DIV2: + case RCU_CKADC_CKAPB2_DIV4: + case RCU_CKADC_CKAPB2_DIV6: + case RCU_CKADC_CKAPB2_DIV8: + reg0 |= (adc_psc << RCU_ADC_PSC_OFFSET); + break; + + case RCU_CKADC_CKAPB2_DIV12: + case RCU_CKADC_CKAPB2_DIV16: + adc_psc &= ~BIT(2); + reg0 |= ((adc_psc << RCU_ADC_PSC_OFFSET) | RCU_CFG0_ADCPSC_2); + break; + + case RCU_CKADC_CKAHB_DIV3: + case RCU_CKADC_CKAHB_DIV5: + case RCU_CKADC_CKAHB_DIV7: + case RCU_CKADC_CKAHB_DIV9: + adc_psc &= ~BITS(2,3); + reg0 |= (adc_psc << RCU_ADC_PSC_OFFSET); + reg1 |= RCU_CFG1_ADCPSC_3; + break; + + default: + break; + } + + /* set the register */ + RCU_CFG0 = reg0; + RCU_CFG1 = reg1; +} + +/*! + \brief configure the USBFS prescaler factor + \param[in] adc_div: USB prescaler factor + only one parameter can be selected which is shown as below: + \arg RCU_CKUSB_CKPLL_DIV1_5: USBFS prescaler select CK_PLL/1.5 + \arg RCU_CKUSB_CKPLL_DIV1: USBFS prescaler select CK_PLL/1 + \arg RCU_CKUSB_CKPLL_DIV2_5: USBFS prescaler select CK_PLL/2.5 + \arg RCU_CKUSB_CKPLL_DIV2: USBFS prescaler select CK_PLL/2 + \arg RCU_CKUSB_CKPLL_DIV3: USBFS prescaler select CK_PLL/3 + \arg RCU_CKUSB_CKPLL_DIV3_5: USBFS prescaler select CK_PLL/3.5 + \arg RCU_CKUSB_CKPLL_DIV4: USBFS prescaler select CK_PLL/4 + \param[out] none + \retval none +*/ +void rcu_usb_clock_config(uint32_t usb_psc) +{ + uint32_t reg; + + reg = RCU_CFG0; + + /* configure the USBFS prescaler factor */ + reg &= ~RCU_CFG0_USBFSPSC; + + RCU_CFG0 = (reg | usb_psc); +} + +/*! + \brief configure the RTC clock source selection + \param[in] rtc_clock_source: RTC clock source selection + only one parameter can be selected which is shown as below: + \arg RCU_RTCSRC_NONE: no clock selected + \arg RCU_RTCSRC_LXTAL: CK_LXTAL selected as RTC source clock + \arg RCU_RTCSRC_IRC40K: CK_IRC40K selected as RTC source clock + \arg RCU_RTCSRC_HXTAL_DIV_128: CK_HXTAL/128 selected as RTC source clock + \param[out] none + \retval none +*/ +void rcu_rtc_clock_config(uint32_t rtc_clock_source) +{ + uint32_t reg; + + reg = RCU_BDCTL; + /* reset the RTCSRC bits and set according to rtc_clock_source */ + reg &= ~RCU_BDCTL_RTCSRC; + RCU_BDCTL = (reg | rtc_clock_source); +} + +/*! + \brief configure the I2S1 clock source selection + \param[in] i2s_clock_source: I2S1 clock source selection + only one parameter can be selected which is shown as below: + \arg RCU_I2S1SRC_CKSYS: system clock selected as I2S1 source clock + \arg RCU_I2S1SRC_CKPLL2_MUL2: CK_PLL2x2 selected as I2S1 source clock + \param[out] none + \retval none +*/ +void rcu_i2s1_clock_config(uint32_t i2s_clock_source) +{ + uint32_t reg; + + reg = RCU_CFG1; + /* reset the I2S1SEL bit and set according to i2s_clock_source */ + reg &= ~RCU_CFG1_I2S1SEL; + RCU_CFG1 = (reg | i2s_clock_source); +} + +/*! + \brief configure the I2S2 clock source selection + \param[in] i2s_clock_source: I2S2 clock source selection + only one parameter can be selected which is shown as below: + \arg RCU_I2S2SRC_CKSYS: system clock selected as I2S2 source clock + \arg RCU_I2S2SRC_CKPLL2_MUL2: CK_PLL2x2 selected as I2S2 source clock + \param[out] none + \retval none +*/ +void rcu_i2s2_clock_config(uint32_t i2s_clock_source) +{ + uint32_t reg; + + reg = RCU_CFG1; + /* reset the I2S2SEL bit and set according to i2s_clock_source */ + reg &= ~RCU_CFG1_I2S2SEL; + RCU_CFG1 = (reg | i2s_clock_source); +} + +/*! + \brief configure the CK48M clock source selection + \param[in] ck48m_clock_source: CK48M clock source selection + only one parameter can be selected which is shown as below: + \arg RCU_CK48MSRC_CKPLL: CK_PLL selected as CK48M source clock + \arg RCU_CK48MSRC_IRC48M: CK_IRC48M selected as CK48M source clock + \param[out] none + \retval none +*/ +void rcu_ck48m_clock_config(uint32_t ck48m_clock_source) +{ + uint32_t reg; + + reg = RCU_ADDCTL; + /* reset the CK48MSEL bit and set according to ck48m_clock_source */ + reg &= ~RCU_ADDCTL_CK48MSEL; + RCU_ADDCTL = (reg | ck48m_clock_source); +} + +/*! + \brief get the clock stabilization and peripheral reset flags + \param[in] flag: the clock stabilization and peripheral reset flags, refer to rcu_flag_enum + only one parameter can be selected which is shown as below: + \arg RCU_FLAG_IRC8MSTB: IRC8M stabilization flag + \arg RCU_FLAG_HXTALSTB: HXTAL stabilization flag + \arg RCU_FLAG_PLLSTB: PLL stabilization flag + \arg RCU_FLAG_PLL1STB: PLL1 stabilization flag + \arg RCU_FLAG_PLL2STB: PLL2 stabilization flag + \arg RCU_FLAG_LXTALSTB: LXTAL stabilization flag + \arg RCU_FLAG_IRC40KSTB: IRC40K stabilization flag + \arg RCU_FLAG_IRC48MSTB: IRC48M stabilization flag + \arg RCU_FLAG_EPRST: external PIN reset flag + \arg RCU_FLAG_PORRST: power reset flag + \arg RCU_FLAG_SWRST: software reset flag + \arg RCU_FLAG_FWDGTRST: free watchdog timer reset flag + \arg RCU_FLAG_WWDGTRST: window watchdog timer reset flag + \arg RCU_FLAG_LPRST: low-power reset flag + \param[out] none + \retval none +*/ +FlagStatus rcu_flag_get(rcu_flag_enum flag) +{ + /* get the rcu flag */ + if(RESET != (RCU_REG_VAL(flag) & BIT(RCU_BIT_POS(flag)))){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear all the reset flag + \param[in] none + \param[out] none + \retval none +*/ +void rcu_all_reset_flag_clear(void) +{ + RCU_RSTSCK |= RCU_RSTSCK_RSTFC; +} + +/*! + \brief get the clock stabilization interrupt and ckm flags + \param[in] int_flag: interrupt and ckm flags, refer to rcu_int_flag_enum + only one parameter can be selected which is shown as below: + \arg RCU_INT_FLAG_IRC40KSTB: IRC40K stabilization interrupt flag + \arg RCU_INT_FLAG_LXTALSTB: LXTAL stabilization interrupt flag + \arg RCU_INT_FLAG_IRC8MSTB: IRC8M stabilization interrupt flag + \arg RCU_INT_FLAG_HXTALSTB: HXTAL stabilization interrupt flag + \arg RCU_INT_FLAG_PLLSTB: PLL stabilization interrupt flag + \arg RCU_INT_FLAG_PLL1STB: PLL1 stabilization interrupt flag + \arg RCU_INT_FLAG_PLL2STB: PLL2 stabilization interrupt flag + \arg RCU_INT_FLAG_CKM: HXTAL clock stuck interrupt flag + \arg RCU_INT_FLAG_IRC48MSTB: IRC48M stabilization interrupt flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus rcu_interrupt_flag_get(rcu_int_flag_enum int_flag) +{ + /* get the rcu interrupt flag */ + if(RESET != (RCU_REG_VAL(int_flag) & BIT(RCU_BIT_POS(int_flag)))){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear the interrupt flags + \param[in] int_flag_clear: clock stabilization and stuck interrupt flags clear, refer to rcu_int_flag_clear_enum + only one parameter can be selected which is shown as below: + \arg RCU_INT_FLAG_IRC40KSTB_CLR: IRC40K stabilization interrupt flag clear + \arg RCU_INT_FLAG_LXTALSTB_CLR: LXTAL stabilization interrupt flag clear + \arg RCU_INT_FLAG_IRC8MSTB_CLR: IRC8M stabilization interrupt flag clear + \arg RCU_INT_FLAG_HXTALSTB_CLR: HXTAL stabilization interrupt flag clear + \arg RCU_INT_FLAG_PLLSTB_CLR: PLL stabilization interrupt flag clear + \arg RCU_INT_FLAG_PLL1STB_CLR: PLL1 stabilization interrupt flag clear + \arg RCU_INT_FLAG_PLL2STB_CLR: PLL2 stabilization interrupt flag clear + \arg RCU_INT_FLAG_CKM_CLR: clock stuck interrupt flag clear + \arg RCU_INT_FLAG_IRC48MSTB_CLR: IRC48M stabilization interrupt flag clear + \param[out] none + \retval none +*/ +void rcu_interrupt_flag_clear(rcu_int_flag_clear_enum int_flag_clear) +{ + RCU_REG_VAL(int_flag_clear) |= BIT(RCU_BIT_POS(int_flag_clear)); +} + +/*! + \brief enable the stabilization interrupt + \param[in] stab_int: clock stabilization interrupt, refer to rcu_int_enum + only one parameter can be selected which is shown as below: + \arg RCU_INT_IRC40KSTB: IRC40K stabilization interrupt enable + \arg RCU_INT_LXTALSTB: LXTAL stabilization interrupt enable + \arg RCU_INT_IRC8MSTB: IRC8M stabilization interrupt enable + \arg RCU_INT_HXTALSTB: HXTAL stabilization interrupt enable + \arg RCU_INT_PLLSTB: PLL stabilization interrupt enable + \arg RCU_INT_PLL1STB: PLL1 stabilization interrupt enable + \arg RCU_INT_PLL2STB: PLL2 stabilization interrupt enable + \arg RCU_INT_IRC48MSTB: IRC48M stabilization interrupt enable + \param[out] none + \retval none +*/ +void rcu_interrupt_enable(rcu_int_enum stab_int) +{ + RCU_REG_VAL(stab_int) |= BIT(RCU_BIT_POS(stab_int)); +} + +/*! + \brief disable the stabilization interrupt + \param[in] stab_int: clock stabilization interrupt, refer to rcu_int_enum + only one parameter can be selected which is shown as below: + \arg RCU_INT_IRC40KSTB: IRC40K stabilization interrupt enable + \arg RCU_INT_LXTALSTB: LXTAL stabilization interrupt enable + \arg RCU_INT_IRC8MSTB: IRC8M stabilization interrupt enable + \arg RCU_INT_HXTALSTB: HXTAL stabilization interrupt enable + \arg RCU_INT_PLLSTB: PLL stabilization interrupt enable + \arg RCU_INT_PLL1STB: PLL1 stabilization interrupt enable + \arg RCU_INT_PLL2STB: PLL2 stabilization interrupt enable + \arg RCU_INT_IRC48MSTB: IRC48M stabilization interrupt enable + \param[out] none + \retval none +*/ +void rcu_interrupt_disable(rcu_int_enum stab_int) +{ + RCU_REG_VAL(stab_int) &= ~BIT(RCU_BIT_POS(stab_int)); +} + +/*! + \brief configure the LXTAL drive capability + \param[in] lxtal_dricap: drive capability of LXTAL + only one parameter can be selected which is shown as below: + \arg RCU_LXTAL_LOWDRI: lower driving capability + \arg RCU_LXTAL_MED_LOWDRI: medium low driving capability + \arg RCU_LXTAL_MED_HIGHDRI: medium high driving capability + \arg RCU_LXTAL_HIGHDRI: higher driving capability + \param[out] none + \retval none +*/ +void rcu_lxtal_drive_capability_config(uint32_t lxtal_dricap) +{ + uint32_t reg; + + reg = RCU_BDCTL; + + /* reset the LXTALDRI bits and set according to lxtal_dricap */ + reg &= ~RCU_BDCTL_LXTALDRI; + RCU_BDCTL = (reg | lxtal_dricap); +} + +/*! + \brief wait for oscillator stabilization flags is SET or oscillator startup is timeout + \param[in] osci: oscillator types, refer to rcu_osci_type_enum + only one parameter can be selected which is shown as below: + \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) + \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) + \arg RCU_IRC8M: internal 8M RC oscillators(IRC8M) + \arg RCU_IRC48M: internal 48M RC oscillators(IRC48M) + \arg RCU_IRC40K: internal 40K RC oscillator(IRC40K) + \arg RCU_PLL_CK: phase locked loop(PLL) + \arg RCU_PLL1_CK: phase locked loop 1 + \arg RCU_PLL2_CK: phase locked loop 2 + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +ErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci) +{ + uint32_t stb_cnt = 0U; + ErrStatus reval = ERROR; + FlagStatus osci_stat = RESET; + + switch(osci){ + /* wait HXTAL stable */ + case RCU_HXTAL: + while((RESET == osci_stat) && (HXTAL_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_HXTALSTB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if(RESET != rcu_flag_get(RCU_FLAG_HXTALSTB)){ + reval = SUCCESS; + } + break; + + /* wait LXTAL stable */ + case RCU_LXTAL: + while((RESET == osci_stat) && (LXTAL_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_LXTALSTB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if(RESET != rcu_flag_get(RCU_FLAG_LXTALSTB)){ + reval = SUCCESS; + } + break; + + /* wait IRC8M stable */ + case RCU_IRC8M: + while((RESET == osci_stat) && (IRC8M_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_IRC8MSTB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if(RESET != rcu_flag_get(RCU_FLAG_IRC8MSTB)){ + reval = SUCCESS; + } + break; + + /* wait IRC48M stable */ + case RCU_IRC48M: + while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_IRC48MSTB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if (RESET != rcu_flag_get(RCU_FLAG_IRC48MSTB)){ + reval = SUCCESS; + } + break; + + /* wait IRC40K stable */ + case RCU_IRC40K: + while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_IRC40KSTB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if(RESET != rcu_flag_get(RCU_FLAG_IRC40KSTB)){ + reval = SUCCESS; + } + break; + + /* wait PLL stable */ + case RCU_PLL_CK: + while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_PLLSTB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if(RESET != rcu_flag_get(RCU_FLAG_PLLSTB)){ + reval = SUCCESS; + } + break; + + /* wait PLL1 stable */ + case RCU_PLL1_CK: + while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_PLL1STB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if(RESET != rcu_flag_get(RCU_FLAG_PLL1STB)){ + reval = SUCCESS; + } + break; + /* wait PLL2 stable */ + case RCU_PLL2_CK: + while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_PLL2STB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if(RESET != rcu_flag_get(RCU_FLAG_PLL2STB)){ + reval = SUCCESS; + } + break; + + default: + break; + } + + /* return value */ + return reval; +} + +/*! + \brief turn on the oscillator + \param[in] osci: oscillator types, refer to rcu_osci_type_enum + only one parameter can be selected which is shown as below: + \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) + \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) + \arg RCU_IRC8M: internal 8M RC oscillators(IRC8M) + \arg RCU_IRC48M: internal 48M RC oscillators(IRC48M) + \arg RCU_IRC40K: internal 40K RC oscillator(IRC40K) + \arg RCU_PLL_CK: phase locked loop(PLL) + \arg RCU_PLL1_CK: phase locked loop 1 + \arg RCU_PLL2_CK: phase locked loop 2 + \param[out] none + \retval none +*/ +void rcu_osci_on(rcu_osci_type_enum osci) +{ + RCU_REG_VAL(osci) |= BIT(RCU_BIT_POS(osci)); +} + +/*! + \brief turn off the oscillator + \param[in] osci: oscillator types, refer to rcu_osci_type_enum + only one parameter can be selected which is shown as below: + \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) + \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) + \arg RCU_IRC8M: internal 8M RC oscillators(IRC8M) + \arg RCU_IRC48M: internal 48M RC oscillators(IRC48M) + \arg RCU_IRC40K: internal 40K RC oscillator(IRC40K) + \arg RCU_PLL_CK: phase locked loop(PLL) + \arg RCU_PLL1_CK: phase locked loop 1 + \arg RCU_PLL2_CK: phase locked loop 2 + \param[out] none + \retval none +*/ +void rcu_osci_off(rcu_osci_type_enum osci) +{ + RCU_REG_VAL(osci) &= ~BIT(RCU_BIT_POS(osci)); +} + +/*! + \brief enable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it + \param[in] osci: oscillator types, refer to rcu_osci_type_enum + only one parameter can be selected which is shown as below: + \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) + \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) + \param[out] none + \retval none +*/ +void rcu_osci_bypass_mode_enable(rcu_osci_type_enum osci) +{ + uint32_t reg; + + switch(osci){ + /* enable HXTAL to bypass mode */ + case RCU_HXTAL: + reg = RCU_CTL; + RCU_CTL &= ~RCU_CTL_HXTALEN; + RCU_CTL = (reg | RCU_CTL_HXTALBPS); + break; + /* enable LXTAL to bypass mode */ + case RCU_LXTAL: + reg = RCU_BDCTL; + RCU_BDCTL &= ~RCU_BDCTL_LXTALEN; + RCU_BDCTL = (reg | RCU_BDCTL_LXTALBPS); + break; + case RCU_IRC8M: + case RCU_IRC48M: + case RCU_IRC40K: + case RCU_PLL_CK: + case RCU_PLL1_CK: + case RCU_PLL2_CK: + break; + default: + break; + } +} + +/*! + \brief disable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it + \param[in] osci: oscillator types, refer to rcu_osci_type_enum + only one parameter can be selected which is shown as below: + \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) + \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) + \param[out] none + \retval none +*/ +void rcu_osci_bypass_mode_disable(rcu_osci_type_enum osci) +{ + uint32_t reg; + + switch(osci){ + /* disable HXTAL to bypass mode */ + case RCU_HXTAL: + reg = RCU_CTL; + RCU_CTL &= ~RCU_CTL_HXTALEN; + RCU_CTL = (reg & ~RCU_CTL_HXTALBPS); + break; + /* disable LXTAL to bypass mode */ + case RCU_LXTAL: + reg = RCU_BDCTL; + RCU_BDCTL &= ~RCU_BDCTL_LXTALEN; + RCU_BDCTL = (reg & ~RCU_BDCTL_LXTALBPS); + break; + case RCU_IRC8M: + case RCU_IRC48M: + case RCU_IRC40K: + case RCU_PLL_CK: + case RCU_PLL1_CK: + case RCU_PLL2_CK: + break; + default: + break; + } +} + +/*! + \brief enable the HXTAL clock monitor + \param[in] none + \param[out] none + \retval none +*/ + +void rcu_hxtal_clock_monitor_enable(void) +{ + RCU_CTL |= RCU_CTL_CKMEN; +} + +/*! + \brief disable the HXTAL clock monitor + \param[in] none + \param[out] none + \retval none +*/ +void rcu_hxtal_clock_monitor_disable(void) +{ + RCU_CTL &= ~RCU_CTL_CKMEN; +} + +/*! + \brief set the IRC8M adjust value + \param[in] irc8m_adjval: IRC8M adjust value, must be between 0 and 0x1F + \arg 0x00 - 0x1F + \param[out] none + \retval none +*/ +void rcu_irc8m_adjust_value_set(uint32_t irc8m_adjval) +{ + uint32_t reg; + + reg = RCU_CTL; + /* reset the IRC8MADJ bits and set according to irc8m_adjval */ + reg &= ~RCU_CTL_IRC8MADJ; + RCU_CTL = (reg | ((irc8m_adjval & RCU_IRC8M_ADJUST_MASK) << RCU_IRC8M_ADJUST_OFFSET)); +} + +/*! + \brief deep-sleep mode voltage select + \param[in] dsvol: deep sleep mode voltage + only one parameter can be selected which is shown as below: + \arg RCU_DEEPSLEEP_V_1_0: the core voltage is 1.0V + \arg RCU_DEEPSLEEP_V_0_9: the core voltage is 0.9V + \arg RCU_DEEPSLEEP_V_0_8: the core voltage is 0.8V + \arg RCU_DEEPSLEEP_V_1_2: the core voltage is 1.2V + \param[out] none + \retval none +*/ +void rcu_deepsleep_voltage_set(uint32_t dsvol) +{ + dsvol &= RCU_DSV_DSLPVS; + RCU_DSV = dsvol; +} + +/*! + \brief get the system clock, bus and peripheral clock frequency + \param[in] clock: the clock frequency which to get + only one parameter can be selected which is shown as below: + \arg CK_SYS: system clock frequency + \arg CK_AHB: AHB clock frequency + \arg CK_APB1: APB1 clock frequency + \arg CK_APB2: APB2 clock frequency + \param[out] none + \retval clock frequency of system, AHB, APB1, APB2 +*/ +uint32_t rcu_clock_freq_get(rcu_clock_freq_enum clock) +{ + uint32_t sws, ck_freq = 0U; + uint32_t cksys_freq, ahb_freq, apb1_freq, apb2_freq; + uint32_t pllsel, pllpresel, predv0sel, pllmf,ck_src, idx, clk_exp; + uint32_t predv0, predv1, pll1mf; + + /* exponent of AHB, APB1 and APB2 clock divider */ + uint8_t ahb_exp[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + uint8_t apb1_exp[8] = {0, 0, 0, 0, 1, 2, 3, 4}; + uint8_t apb2_exp[8] = {0, 0, 0, 0, 1, 2, 3, 4}; + + sws = GET_BITS(RCU_CFG0, 2, 3); + switch(sws){ + /* IRC8M is selected as CK_SYS */ + case SEL_IRC8M: + cksys_freq = IRC8M_VALUE; + break; + /* HXTAL is selected as CK_SYS */ + case SEL_HXTAL: + cksys_freq = HXTAL_VALUE; + break; + /* PLL is selected as CK_SYS */ + case SEL_PLL: + /* PLL clock source selection, HXTAL, IRC48M or IRC8M/2 */ + pllsel = (RCU_CFG0 & RCU_CFG0_PLLSEL); + + if(RCU_PLLSRC_HXTAL_IRC48M == pllsel) { + /* PLL clock source is HXTAL or IRC48M */ + pllpresel = (RCU_CFG1 & RCU_CFG1_PLLPRESEL); + + if(RCU_PLLPRESRC_HXTAL == pllpresel){ + /* PLL clock source is HXTAL */ + ck_src = HXTAL_VALUE; + }else{ + /* PLL clock source is IRC48 */ + ck_src = IRC48M_VALUE; + } + + predv0sel = (RCU_CFG1 & RCU_CFG1_PREDV0SEL); + /* source clock use PLL1 */ + if(RCU_PREDV0SRC_CKPLL1 == predv0sel){ + predv1 = ((RCU_CFG1 & RCU_CFG1_PREDV1) >> RCU_CFG1_PREDV1_OFFSET) + 1U; + pll1mf = (uint32_t)((RCU_CFG1 & RCU_CFG1_PLL1MF) >> RCU_CFG1_PLL1MF_OFFSET) + 2U; + if(17U == pll1mf){ + pll1mf = 20U; + } + ck_src = (ck_src/predv1)*pll1mf; + } + predv0 = (RCU_CFG1 & RCU_CFG1_PREDV0) + 1U; + ck_src /= predv0; + }else{ + /* PLL clock source is IRC8M/2 */ + ck_src = IRC8M_VALUE/2U; + } + + /* PLL multiplication factor */ + pllmf = GET_BITS(RCU_CFG0, 18, 21); + if((RCU_CFG0 & RCU_CFG0_PLLMF_4)){ + pllmf |= 0x10U; + } + if(pllmf < 15U){ + pllmf += 2U; + }else{ + pllmf += 1U; + } + cksys_freq = ck_src*pllmf; + if(15U == pllmf){ + cksys_freq = ck_src*6U + ck_src/2U; + } + + break; + /* IRC8M is selected as CK_SYS */ + default: + cksys_freq = IRC8M_VALUE; + break; + } + + /* calculate AHB clock frequency */ + idx = GET_BITS(RCU_CFG0, 4, 7); + clk_exp = ahb_exp[idx]; + ahb_freq = cksys_freq >> clk_exp; + + /* calculate APB1 clock frequency */ + idx = GET_BITS(RCU_CFG0, 8, 10); + clk_exp = apb1_exp[idx]; + apb1_freq = ahb_freq >> clk_exp; + + /* calculate APB2 clock frequency */ + idx = GET_BITS(RCU_CFG0, 11, 13); + clk_exp = apb2_exp[idx]; + apb2_freq = ahb_freq >> clk_exp; + + /* return the clocks frequency */ + switch(clock){ + case CK_SYS: + ck_freq = cksys_freq; + break; + case CK_AHB: + ck_freq = ahb_freq; + break; + case CK_APB1: + ck_freq = apb1_freq; + break; + case CK_APB2: + ck_freq = apb2_freq; + break; + default: + break; + } + return ck_freq; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c.base@1.0.0 new file mode 100644 index 0000000..89007c4 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c.base@1.0.0 @@ -0,0 +1,1249 @@ +/*! + \file gd32c10x_rcu.c + \brief RCU driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_rcu.h" + +/* define clock source */ +#define SEL_IRC8M ((uint16_t)0U) /* IRC8M is selected as CK_SYS */ +#define SEL_HXTAL ((uint16_t)1U) /* HXTAL is selected as CK_SYS */ +#define SEL_PLL ((uint16_t)2U) /* PLL is selected as CK_SYS */ + +/* define startup timeout count */ +#define OSC_STARTUP_TIMEOUT ((uint32_t)0x000FFFFFU) +#define LXTAL_STARTUP_TIMEOUT ((uint32_t)0x03FFFFFFU) + +/* ADC clock prescaler offset */ +#define RCU_ADC_PSC_OFFSET ((uint32_t)14U) + +/* RCU IRC8M adjust value mask and offset*/ +#define RCU_IRC8M_ADJUST_MASK ((uint8_t)0x1FU) +#define RCU_IRC8M_ADJUST_OFFSET ((uint32_t)3U) + +/* RCU PLL1 clock multiplication factor offset */ +#define RCU_CFG1_PLL1MF_OFFSET ((uint32_t)8U) +/* RCU PREDV1 division factor offset*/ +#define RCU_CFG1_PREDV1_OFFSET ((uint32_t)4U) + +/*! + \brief deinitialize the RCU + \param[in] none + \param[out] none + \retval none +*/ +void rcu_deinit(void) +{ + /* enable IRC8M */ + RCU_CTL |= RCU_CTL_IRC8MEN; + rcu_osci_stab_wait(RCU_IRC8M); + + RCU_CFG0 &= ~(RCU_CFG0_SCS); + /* reset HXTALEN, CKMEN, PLLEN bits */ + RCU_CTL &= ~(RCU_CTL_HXTALEN | RCU_CTL_CKMEN | RCU_CTL_PLLEN); + + /* reset CFG0 register */ + RCU_CFG0 &= ~(RCU_CFG0_SCS | RCU_CFG0_AHBPSC | RCU_CFG0_APB1PSC | RCU_CFG0_APB2PSC | + RCU_CFG0_ADCPSC | RCU_CFG0_CKOUT0SEL | RCU_CFG0_ADCPSC_2); + + /* reset HXTALBPS bit */ + RCU_CTL &= ~RCU_CTL_HXTALBPS; + /* reset PLLSEL, PREDV0_LSB, PLLMF, USBFSPSC bits */ + RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0_LSB | RCU_CFG0_PLLMF | + RCU_CFG0_USBFSPSC | RCU_CFG0_PLLMF_4 | RCU_CFG0_USBFSPSC_2); + /* reset PLL1EN and PLL2EN bits */ + RCU_CTL &= ~(RCU_CTL_PLL1EN | RCU_CTL_PLL2EN); + + /* reset INT and CFG1 register */ + RCU_INT = 0x00ff0000U; + RCU_CFG1 &= ~(RCU_CFG1_PREDV0 | RCU_CFG1_PREDV1 | RCU_CFG1_PLL1MF | RCU_CFG1_PLL2MF | + RCU_CFG1_PREDV0SEL | RCU_CFG1_I2S1SEL | RCU_CFG1_I2S2SEL | RCU_CFG1_ADCPSC_3 | + RCU_CFG1_PLLPRESEL); +} +/*! + \brief enable the peripherals clock + \param[in] periph: RCU peripherals, refer to rcu_periph_enum + only one parameter can be selected which is shown as below: + \arg RCU_GPIOx (x=A,B,C,D,E): GPIO ports clock + \arg RCU_AF : alternate function clock + \arg RCU_CRC: CRC clock + \arg RCU_DMAx (x=0,1): DMA clock + \arg RCU_USBFS: USBFS clock + \arg RCU_EXMC: EXMC clock + \arg RCU_TIMERx (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13): TIMER clock + \arg RCU_WWDGT: WWDGT clock + \arg RCU_SPIx (x=0,1,2): SPI clock + \arg RCU_USARTx (x=0,1,2): USART clock + \arg RCU_UARTx (x=3,4): UART clock + \arg RCU_I2Cx (x=0,1): I2C clock + \arg RCU_CANx (x=0,1): CAN clock + \arg RCU_PMU: PMU clock + \arg RCU_DAC: DAC clock + \arg RCU_RTC: RTC clock + \arg RCU_ADCx (x=0,1): ADC clock + \arg RCU_CTC: CTC clock + \arg RCU_BKPI: BKP interface clock + \param[out] none + \retval none +*/ +void rcu_periph_clock_enable(rcu_periph_enum periph) +{ + RCU_REG_VAL(periph) |= BIT(RCU_BIT_POS(periph)); +} + +/*! + \brief disable the peripherals clock + \param[in] periph: RCU peripherals, refer to rcu_periph_enum + only one parameter can be selected which is shown as below: + \arg RCU_GPIOx (x=A,B,C,D,E): GPIO ports clock + \arg RCU_AF: alternate function clock + \arg RCU_CRC: CRC clock + \arg RCU_DMAx (x=0,1): DMA clock + \arg RCU_USBFS: USBFS clock + \arg RCU_EXMC: EXMC clock + \arg RCU_TIMERx (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13): TIMER clock + \arg RCU_WWDGT: WWDGT clock + \arg RCU_SPIx (x=0,1,2): SPI clock + \arg RCU_USARTx (x=0,1,2): USART clock + \arg RCU_UARTx (x=3,4): UART clock + \arg RCU_I2Cx (x=0,1): I2C clock + \arg RCU_CANx (x=0,1): CAN clock + \arg RCU_PMU: PMU clock + \arg RCU_DAC: DAC clock + \arg RCU_RTC: RTC clock + \arg RCU_ADCx (x=0,1): ADC clock + \arg RCU_CTC: CTC clock + \arg RCU_BKPI: BKP interface clock + \param[out] none + \retval none +*/ +void rcu_periph_clock_disable(rcu_periph_enum periph) +{ + RCU_REG_VAL(periph) &= ~BIT(RCU_BIT_POS(periph)); +} + +/*! + \brief enable the peripherals clock when sleep mode + \param[in] periph: RCU peripherals, refer to rcu_periph_sleep_enum + only one parameter can be selected which is shown as below: + \arg RCU_FMC_SLP: FMC clock + \arg RCU_SRAM_SLP: SRAM clock + \param[out] none + \retval none +*/ +void rcu_periph_clock_sleep_enable(rcu_periph_sleep_enum periph) +{ + RCU_REG_VAL(periph) |= BIT(RCU_BIT_POS(periph)); +} + +/*! + \brief disable the peripherals clock when sleep mode + \param[in] periph: RCU peripherals, refer to rcu_periph_sleep_enum + only one parameter can be selected which is shown as below: + \arg RCU_FMC_SLP: FMC clock + \arg RCU_SRAM_SLP: SRAM clock + \param[out] none + \retval none +*/ +void rcu_periph_clock_sleep_disable(rcu_periph_sleep_enum periph) +{ + RCU_REG_VAL(periph) &= ~BIT(RCU_BIT_POS(periph)); +} + +/*! + \brief reset the peripherals + \param[in] periph_reset: RCU peripherals reset, refer to rcu_periph_reset_enum + only one parameter can be selected which is shown as below: + \arg RCU_GPIOxRST (x=A,B,C,D,E): reset GPIO ports + \arg RCU_AFRST : reset alternate function clock + \arg RCU_USBFSRST: reset USBFS + \arg RCU_TIMERxRST (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13): reset TIMER + \arg RCU_WWDGTRST: reset WWDGT + \arg RCU_SPIxRST (x=0,1,2): reset SPI + \arg RCU_USARTxRST (x=0,1,2): reset USART + \arg RCU_UARTxRST (x=3,4): reset UART + \arg RCU_I2CxRST (x=0,1): reset I2C + \arg RCU_CANxRST (x=0,1): reset CAN + \arg RCU_PMURST: reset PMU + \arg RCU_DACRST: reset DAC + \arg RCU_ADCxRST (x=0,1): reset ADC + \arg RCU_CTCRST: reset CTC + \arg RCU_BKPIRST: reset BKPI + \param[out] none + \retval none +*/ +void rcu_periph_reset_enable(rcu_periph_reset_enum periph_reset) +{ + RCU_REG_VAL(periph_reset) |= BIT(RCU_BIT_POS(periph_reset)); +} + +/*! + \brief disable reset the peripheral + \param[in] periph_reset: RCU peripherals reset, refer to rcu_periph_reset_enum + only one parameter can be selected which is shown as below: + \arg RCU_GPIOxRST (x=A,B,C,D,E): reset GPIO ports + \arg RCU_AFRST : reset alternate function clock + \arg RCU_USBFSRST: reset USBFS + \arg RCU_TIMERxRST (x=0,1,2,3,4,5,6,7,8,9,10,11,12,13): reset TIMER + \arg RCU_WWDGTRST: reset WWDGT + \arg RCU_SPIxRST (x=0,1,2): reset SPI + \arg RCU_USARTxRST (x=0,1,2): reset USART + \arg RCU_UARTxRST (x=3,4): reset UART + \arg RCU_I2CxRST (x=0,1): reset I2C + \arg RCU_CANxRST (x=0,1): reset CAN + \arg RCU_PMURST: reset PMU + \arg RCU_DACRST: reset DAC + \arg RCU_ADCxRST (x=0,1): reset ADC + \arg RCU_CTCRST: reset CTC + \arg RCU_BKPIRST: reset BKPI + \param[out] none + \retval none +*/ +void rcu_periph_reset_disable(rcu_periph_reset_enum periph_reset) +{ + RCU_REG_VAL(periph_reset) &= ~BIT(RCU_BIT_POS(periph_reset)); +} + +/*! + \brief reset the BKP domain + \param[in] none + \param[out] none + \retval none +*/ +void rcu_bkp_reset_enable(void) +{ + RCU_BDCTL |= RCU_BDCTL_BKPRST; +} + +/*! + \brief disable the BKP domain reset + \param[in] none + \param[out] none + \retval none +*/ +void rcu_bkp_reset_disable(void) +{ + RCU_BDCTL &= ~RCU_BDCTL_BKPRST; +} + +/*! + \brief configure the system clock source + \param[in] ck_sys: system clock source select + only one parameter can be selected which is shown as below: + \arg RCU_CKSYSSRC_IRC8M: select CK_IRC8M as the CK_SYS source + \arg RCU_CKSYSSRC_HXTAL: select CK_HXTAL as the CK_SYS source + \arg RCU_CKSYSSRC_PLL: select CK_PLL as the CK_SYS source + \param[out] none + \retval none +*/ +void rcu_system_clock_source_config(uint32_t ck_sys) +{ + uint32_t reg; + + reg = RCU_CFG0; + /* reset the SCS bits and set according to ck_sys */ + reg &= ~RCU_CFG0_SCS; + RCU_CFG0 = (reg | ck_sys); +} + +/*! + \brief get the system clock source + \param[in] none + \param[out] none + \retval which clock is selected as CK_SYS source + \arg RCU_SCSS_IRC8M: CK_IRC8M is selected as the CK_SYS source + \arg RCU_SCSS_HXTAL: CK_HXTAL is selected as the CK_SYS source + \arg RCU_SCSS_PLL: CK_PLL is selected as the CK_SYS source +*/ +uint32_t rcu_system_clock_source_get(void) +{ + return (RCU_CFG0 & RCU_CFG0_SCSS); +} + +/*! + \brief configure the AHB clock prescaler selection + \param[in] ck_ahb: AHB clock prescaler selection + only one parameter can be selected which is shown as below: + \arg RCU_AHB_CKSYS_DIVx, x=1, 2, 4, 8, 16, 64, 128, 256, 512 + \param[out] none + \retval none +*/ +void rcu_ahb_clock_config(uint32_t ck_ahb) +{ + uint32_t reg; + + reg = RCU_CFG0; + + /* reset the AHBPSC bits and set according to ck_ahb */ + reg &= ~RCU_CFG0_AHBPSC; + RCU_CFG0 = (reg | ck_ahb); +} + +/*! + \brief configure the APB1 clock prescaler selection + \param[in] ck_apb1: APB1 clock prescaler selection + only one parameter can be selected which is shown as below: + \arg RCU_APB1_CKAHB_DIV1: select CK_AHB as CK_APB1 + \arg RCU_APB1_CKAHB_DIV2: select CK_AHB/2 as CK_APB1 + \arg RCU_APB1_CKAHB_DIV4: select CK_AHB/4 as CK_APB1 + \arg RCU_APB1_CKAHB_DIV8: select CK_AHB/8 as CK_APB1 + \arg RCU_APB1_CKAHB_DIV16: select CK_AHB/16 as CK_APB1 + \param[out] none + \retval none +*/ +void rcu_apb1_clock_config(uint32_t ck_apb1) +{ + uint32_t reg; + + reg = RCU_CFG0; + + /* reset the APB1PSC and set according to ck_apb1 */ + reg &= ~RCU_CFG0_APB1PSC; + RCU_CFG0 = (reg | ck_apb1); +} + +/*! + \brief configure the APB2 clock prescaler selection + \param[in] ck_apb2: APB2 clock prescaler selection + only one parameter can be selected which is shown as below: + \arg RCU_APB2_CKAHB_DIV1: select CK_AHB as CK_APB2 + \arg RCU_APB2_CKAHB_DIV2: select CK_AHB/2 as CK_APB2 + \arg RCU_APB2_CKAHB_DIV4: select CK_AHB/4 as CK_APB2 + \arg RCU_APB2_CKAHB_DIV8: select CK_AHB/8 as CK_APB2 + \arg RCU_APB2_CKAHB_DIV16: select CK_AHB/16 as CK_APB2 + \param[out] none + \retval none +*/ +void rcu_apb2_clock_config(uint32_t ck_apb2) +{ + uint32_t reg; + + reg = RCU_CFG0; + + /* reset the APB2PSC and set according to ck_apb2 */ + reg &= ~RCU_CFG0_APB2PSC; + RCU_CFG0 = (reg | ck_apb2); +} + +/*! + \brief configure the CK_OUT0 clock source + \param[in] ckout0_src: CK_OUT0 clock source selection + only one parameter can be selected which is shown as below: + \arg RCU_CKOUT0SRC_NONE: no clock selected + \arg RCU_CKOUT0SRC_CKSYS: system clock selected + \arg RCU_CKOUT0SRC_IRC8M: high speed 8M internal oscillator clock selected + \arg RCU_CKOUT0SRC_HXTAL: HXTAL selected + \arg RCU_CKOUT0SRC_CKPLL_DIV2: CK_PLL/2 selected + \arg RCU_CKOUT0SRC_CKPLL1: CK_PLL1 selected + \arg RCU_CKOUT0SRC_CKPLL2_DIV2: CK_PLL2/2 selected + \arg RCU_CKOUT0SRC_CKPLL2: PLL2 selected + \arg RCU_CKOUT0SRC_IRC48M: IRC48M selected + \arg RCU_CKOUT0SRC_IRC48M_DIV8: IRC48M/8 selected + \param[out] none + \retval none +*/ +void rcu_ckout0_config(uint32_t ckout0_src) +{ + uint32_t reg; + + reg = RCU_CFG0; + + /* reset the CKOUT0SRC, set according to ckout0_src */ + reg &= ~RCU_CFG0_CKOUT0SEL; + RCU_CFG0 = (reg | ckout0_src); +} + +/*! + \brief configure the main PLL clock + \param[in] pll_src: PLL clock source selection + only one parameter can be selected which is shown as below: + \arg RCU_PLLSRC_IRC8M_DIV2: IRC8M/2 clock selected as source clock of PLL + \arg RCU_PLLSRC_HXTAL_IRC48M: HXTAL or IRC48M selected as source clock of PLL + \param[in] pll_mul: PLL clock multiplication factor + only one parameter can be selected which is shown as below: + \arg RCU_PLL_MULx (x = 2..14, 16..31, 6.5) + \param[out] none + \retval none +*/ +void rcu_pll_config(uint32_t pll_src, uint32_t pll_mul) +{ + uint32_t reg = 0U; + + reg = RCU_CFG0; + + /* PLL clock source and multiplication factor configuration */ + reg &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + reg |= (pll_src | pll_mul); + + RCU_CFG0 = reg; +} + +/*! + \brief configure the PLL clock source preselection + \param[in] pll_presel: PLL clock source preselection + only one parameter can be selected which is shown as below: + \arg RCU_PLLPRESRC_HXTAL: HXTAL selected as PLL source clock + \arg RCU_PLLPRESRC_IRC48M: CK_PLL selected as PREDV0 input source clock + \param[out] none + \retval none +*/ +void rcu_pllpresel_config(uint32_t pll_presel) +{ + uint32_t reg = 0U; + + reg = RCU_CFG1; + + /* PLL clock source preselection */ + reg &= ~RCU_CFG1_PLLPRESEL; + reg |= pll_presel; + + RCU_CFG1 = reg; +} + +/*! + \brief configure the PREDV0 division factor and clock source + \param[in] predv0_source: PREDV0 input clock source selection + only one parameter can be selected which is shown as below: + \arg RCU_PREDV0SRC_HXTAL_IRC48M: HXTAL or IRC48M selected as PREDV0 input source clock + \arg RCU_PREDV0SRC_CKPLL1: CK_PLL1 selected as PREDV0 input source clock + \param[in] predv0_div: PREDV0 division factor + only one parameter can be selected which is shown as below: + \arg RCU_PREDV0_DIVx, x = 1..16 + \param[out] none + \retval none +*/ +void rcu_predv0_config(uint32_t predv0_source, uint32_t predv0_div) +{ + uint32_t reg = 0U; + + reg = RCU_CFG1; + /* reset PREDV0SEL and PREDV0 bits */ + reg &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PREDV0); + /* set the PREDV0SEL and PREDV0 division factor */ + reg |= (predv0_source | predv0_div); + + RCU_CFG1 = reg; +} + +/*! + \brief configure the PREDV1 division factor + \param[in] predv1_div: PREDV1 division factor + only one parameter can be selected which is shown as below: + \arg RCU_PREDV1_DIVx, x = 1..16 + \param[out] none + \retval none +*/ +void rcu_predv1_config(uint32_t predv1_div) +{ + uint32_t reg = 0U; + + reg = RCU_CFG1; + /* reset the PREDV1 bits */ + reg &= ~RCU_CFG1_PREDV1; + /* set the PREDV1 division factor */ + reg |= predv1_div; + + RCU_CFG1 = reg; +} + +/*! + \brief configure the PLL1 clock + \param[in] pll_mul: PLL clock multiplication factor + only one parameter can be selected which is shown as below: + \arg RCU_PLL1_MULx (x = 8..16, 20) + \param[out] none + \retval none +*/ +void rcu_pll1_config(uint32_t pll_mul) +{ + RCU_CFG1 &= ~RCU_CFG1_PLL1MF; + RCU_CFG1 |= pll_mul; +} + +/*! + \brief configure the PLL2 clock + \param[in] pll_mul: PLL clock multiplication factor + only one parameter can be selected which is shown as below: + \arg RCU_PLL2_MULx (x = 8..16, 20) + \param[out] none + \retval none +*/ +void rcu_pll2_config(uint32_t pll_mul) +{ + RCU_CFG1 &= ~RCU_CFG1_PLL2MF; + RCU_CFG1 |= pll_mul; +} + +/*! + \brief configure the ADC prescaler factor + \param[in] adc_psc: ADC prescaler factor + only one parameter can be selected which is shown as below: + \arg RCU_CKADC_CKAPB2_DIV2: ADC prescaler select CK_APB2/2 + \arg RCU_CKADC_CKAPB2_DIV4: ADC prescaler select CK_APB2/4 + \arg RCU_CKADC_CKAPB2_DIV6: ADC prescaler select CK_APB2/6 + \arg RCU_CKADC_CKAPB2_DIV8: ADC prescaler select CK_APB2/8 + \arg RCU_CKADC_CKAPB2_DIV12: ADC prescaler select CK_APB2/12 + \arg RCU_CKADC_CKAPB2_DIV16: ADC prescaler select CK_APB2/16 + \arg RCU_CKADC_CKAHB_DIV3: ADC prescaler select CK_AHB/3 + \arg RCU_CKADC_CKAHB_DIV5: ADC prescaler select CK_AHB/5 + \arg RCU_CKADC_CKAHB_DIV7: ADC prescaler select CK_AHB/7 + \arg RCU_CKADC_CKAHB_DIV9: ADC prescaler select CK_AHB/9 + \param[out] none + \retval none +*/ +void rcu_adc_clock_config(uint32_t adc_psc) +{ + uint32_t reg0,reg1; + + /* reset the ADCPSC bits */ + reg0 = RCU_CFG0; + reg0 &= ~(RCU_CFG0_ADCPSC_2 | RCU_CFG0_ADCPSC); + reg1 = RCU_CFG1; + reg1 &= ~RCU_CFG1_ADCPSC_3; + + /* set the ADC prescaler factor */ + switch(adc_psc){ + case RCU_CKADC_CKAPB2_DIV2: + case RCU_CKADC_CKAPB2_DIV4: + case RCU_CKADC_CKAPB2_DIV6: + case RCU_CKADC_CKAPB2_DIV8: + reg0 |= (adc_psc << RCU_ADC_PSC_OFFSET); + break; + + case RCU_CKADC_CKAPB2_DIV12: + case RCU_CKADC_CKAPB2_DIV16: + adc_psc &= ~BIT(2); + reg0 |= ((adc_psc << RCU_ADC_PSC_OFFSET) | RCU_CFG0_ADCPSC_2); + break; + + case RCU_CKADC_CKAHB_DIV3: + case RCU_CKADC_CKAHB_DIV5: + case RCU_CKADC_CKAHB_DIV7: + case RCU_CKADC_CKAHB_DIV9: + adc_psc &= ~BITS(2,3); + reg0 |= (adc_psc << RCU_ADC_PSC_OFFSET); + reg1 |= RCU_CFG1_ADCPSC_3; + break; + + default: + break; + } + + /* set the register */ + RCU_CFG0 = reg0; + RCU_CFG1 = reg1; +} + +/*! + \brief configure the USBFS prescaler factor + \param[in] adc_div: USB prescaler factor + only one parameter can be selected which is shown as below: + \arg RCU_CKUSB_CKPLL_DIV1_5: USBFS prescaler select CK_PLL/1.5 + \arg RCU_CKUSB_CKPLL_DIV1: USBFS prescaler select CK_PLL/1 + \arg RCU_CKUSB_CKPLL_DIV2_5: USBFS prescaler select CK_PLL/2.5 + \arg RCU_CKUSB_CKPLL_DIV2: USBFS prescaler select CK_PLL/2 + \arg RCU_CKUSB_CKPLL_DIV3: USBFS prescaler select CK_PLL/3 + \arg RCU_CKUSB_CKPLL_DIV3_5: USBFS prescaler select CK_PLL/3.5 + \arg RCU_CKUSB_CKPLL_DIV4: USBFS prescaler select CK_PLL/4 + \param[out] none + \retval none +*/ +void rcu_usb_clock_config(uint32_t usb_psc) +{ + uint32_t reg; + + reg = RCU_CFG0; + + /* configure the USBFS prescaler factor */ + reg &= ~RCU_CFG0_USBFSPSC; + + RCU_CFG0 = (reg | usb_psc); +} + +/*! + \brief configure the RTC clock source selection + \param[in] rtc_clock_source: RTC clock source selection + only one parameter can be selected which is shown as below: + \arg RCU_RTCSRC_NONE: no clock selected + \arg RCU_RTCSRC_LXTAL: CK_LXTAL selected as RTC source clock + \arg RCU_RTCSRC_IRC40K: CK_IRC40K selected as RTC source clock + \arg RCU_RTCSRC_HXTAL_DIV_128: CK_HXTAL/128 selected as RTC source clock + \param[out] none + \retval none +*/ +void rcu_rtc_clock_config(uint32_t rtc_clock_source) +{ + uint32_t reg; + + reg = RCU_BDCTL; + /* reset the RTCSRC bits and set according to rtc_clock_source */ + reg &= ~RCU_BDCTL_RTCSRC; + RCU_BDCTL = (reg | rtc_clock_source); +} + +/*! + \brief configure the I2S1 clock source selection + \param[in] i2s_clock_source: I2S1 clock source selection + only one parameter can be selected which is shown as below: + \arg RCU_I2S1SRC_CKSYS: system clock selected as I2S1 source clock + \arg RCU_I2S1SRC_CKPLL2_MUL2: CK_PLL2x2 selected as I2S1 source clock + \param[out] none + \retval none +*/ +void rcu_i2s1_clock_config(uint32_t i2s_clock_source) +{ + uint32_t reg; + + reg = RCU_CFG1; + /* reset the I2S1SEL bit and set according to i2s_clock_source */ + reg &= ~RCU_CFG1_I2S1SEL; + RCU_CFG1 = (reg | i2s_clock_source); +} + +/*! + \brief configure the I2S2 clock source selection + \param[in] i2s_clock_source: I2S2 clock source selection + only one parameter can be selected which is shown as below: + \arg RCU_I2S2SRC_CKSYS: system clock selected as I2S2 source clock + \arg RCU_I2S2SRC_CKPLL2_MUL2: CK_PLL2x2 selected as I2S2 source clock + \param[out] none + \retval none +*/ +void rcu_i2s2_clock_config(uint32_t i2s_clock_source) +{ + uint32_t reg; + + reg = RCU_CFG1; + /* reset the I2S2SEL bit and set according to i2s_clock_source */ + reg &= ~RCU_CFG1_I2S2SEL; + RCU_CFG1 = (reg | i2s_clock_source); +} + +/*! + \brief configure the CK48M clock source selection + \param[in] ck48m_clock_source: CK48M clock source selection + only one parameter can be selected which is shown as below: + \arg RCU_CK48MSRC_CKPLL: CK_PLL selected as CK48M source clock + \arg RCU_CK48MSRC_IRC48M: CK_IRC48M selected as CK48M source clock + \param[out] none + \retval none +*/ +void rcu_ck48m_clock_config(uint32_t ck48m_clock_source) +{ + uint32_t reg; + + reg = RCU_ADDCTL; + /* reset the CK48MSEL bit and set according to ck48m_clock_source */ + reg &= ~RCU_ADDCTL_CK48MSEL; + RCU_ADDCTL = (reg | ck48m_clock_source); +} + +/*! + \brief get the clock stabilization and peripheral reset flags + \param[in] flag: the clock stabilization and peripheral reset flags, refer to rcu_flag_enum + only one parameter can be selected which is shown as below: + \arg RCU_FLAG_IRC8MSTB: IRC8M stabilization flag + \arg RCU_FLAG_HXTALSTB: HXTAL stabilization flag + \arg RCU_FLAG_PLLSTB: PLL stabilization flag + \arg RCU_FLAG_PLL1STB: PLL1 stabilization flag + \arg RCU_FLAG_PLL2STB: PLL2 stabilization flag + \arg RCU_FLAG_LXTALSTB: LXTAL stabilization flag + \arg RCU_FLAG_IRC40KSTB: IRC40K stabilization flag + \arg RCU_FLAG_IRC48MSTB: IRC48M stabilization flag + \arg RCU_FLAG_EPRST: external PIN reset flag + \arg RCU_FLAG_PORRST: power reset flag + \arg RCU_FLAG_SWRST: software reset flag + \arg RCU_FLAG_FWDGTRST: free watchdog timer reset flag + \arg RCU_FLAG_WWDGTRST: window watchdog timer reset flag + \arg RCU_FLAG_LPRST: low-power reset flag + \param[out] none + \retval none +*/ +FlagStatus rcu_flag_get(rcu_flag_enum flag) +{ + /* get the rcu flag */ + if(RESET != (RCU_REG_VAL(flag) & BIT(RCU_BIT_POS(flag)))){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear all the reset flag + \param[in] none + \param[out] none + \retval none +*/ +void rcu_all_reset_flag_clear(void) +{ + RCU_RSTSCK |= RCU_RSTSCK_RSTFC; +} + +/*! + \brief get the clock stabilization interrupt and ckm flags + \param[in] int_flag: interrupt and ckm flags, refer to rcu_int_flag_enum + only one parameter can be selected which is shown as below: + \arg RCU_INT_FLAG_IRC40KSTB: IRC40K stabilization interrupt flag + \arg RCU_INT_FLAG_LXTALSTB: LXTAL stabilization interrupt flag + \arg RCU_INT_FLAG_IRC8MSTB: IRC8M stabilization interrupt flag + \arg RCU_INT_FLAG_HXTALSTB: HXTAL stabilization interrupt flag + \arg RCU_INT_FLAG_PLLSTB: PLL stabilization interrupt flag + \arg RCU_INT_FLAG_PLL1STB: PLL1 stabilization interrupt flag + \arg RCU_INT_FLAG_PLL2STB: PLL2 stabilization interrupt flag + \arg RCU_INT_FLAG_CKM: HXTAL clock stuck interrupt flag + \arg RCU_INT_FLAG_IRC48MSTB: IRC48M stabilization interrupt flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus rcu_interrupt_flag_get(rcu_int_flag_enum int_flag) +{ + /* get the rcu interrupt flag */ + if(RESET != (RCU_REG_VAL(int_flag) & BIT(RCU_BIT_POS(int_flag)))){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear the interrupt flags + \param[in] int_flag_clear: clock stabilization and stuck interrupt flags clear, refer to rcu_int_flag_clear_enum + only one parameter can be selected which is shown as below: + \arg RCU_INT_FLAG_IRC40KSTB_CLR: IRC40K stabilization interrupt flag clear + \arg RCU_INT_FLAG_LXTALSTB_CLR: LXTAL stabilization interrupt flag clear + \arg RCU_INT_FLAG_IRC8MSTB_CLR: IRC8M stabilization interrupt flag clear + \arg RCU_INT_FLAG_HXTALSTB_CLR: HXTAL stabilization interrupt flag clear + \arg RCU_INT_FLAG_PLLSTB_CLR: PLL stabilization interrupt flag clear + \arg RCU_INT_FLAG_PLL1STB_CLR: PLL1 stabilization interrupt flag clear + \arg RCU_INT_FLAG_PLL2STB_CLR: PLL2 stabilization interrupt flag clear + \arg RCU_INT_FLAG_CKM_CLR: clock stuck interrupt flag clear + \arg RCU_INT_FLAG_IRC48MSTB_CLR: IRC48M stabilization interrupt flag clear + \param[out] none + \retval none +*/ +void rcu_interrupt_flag_clear(rcu_int_flag_clear_enum int_flag_clear) +{ + RCU_REG_VAL(int_flag_clear) |= BIT(RCU_BIT_POS(int_flag_clear)); +} + +/*! + \brief enable the stabilization interrupt + \param[in] stab_int: clock stabilization interrupt, refer to rcu_int_enum + only one parameter can be selected which is shown as below: + \arg RCU_INT_IRC40KSTB: IRC40K stabilization interrupt enable + \arg RCU_INT_LXTALSTB: LXTAL stabilization interrupt enable + \arg RCU_INT_IRC8MSTB: IRC8M stabilization interrupt enable + \arg RCU_INT_HXTALSTB: HXTAL stabilization interrupt enable + \arg RCU_INT_PLLSTB: PLL stabilization interrupt enable + \arg RCU_INT_PLL1STB: PLL1 stabilization interrupt enable + \arg RCU_INT_PLL2STB: PLL2 stabilization interrupt enable + \arg RCU_INT_IRC48MSTB: IRC48M stabilization interrupt enable + \param[out] none + \retval none +*/ +void rcu_interrupt_enable(rcu_int_enum stab_int) +{ + RCU_REG_VAL(stab_int) |= BIT(RCU_BIT_POS(stab_int)); +} + +/*! + \brief disable the stabilization interrupt + \param[in] stab_int: clock stabilization interrupt, refer to rcu_int_enum + only one parameter can be selected which is shown as below: + \arg RCU_INT_IRC40KSTB: IRC40K stabilization interrupt enable + \arg RCU_INT_LXTALSTB: LXTAL stabilization interrupt enable + \arg RCU_INT_IRC8MSTB: IRC8M stabilization interrupt enable + \arg RCU_INT_HXTALSTB: HXTAL stabilization interrupt enable + \arg RCU_INT_PLLSTB: PLL stabilization interrupt enable + \arg RCU_INT_PLL1STB: PLL1 stabilization interrupt enable + \arg RCU_INT_PLL2STB: PLL2 stabilization interrupt enable + \arg RCU_INT_IRC48MSTB: IRC48M stabilization interrupt enable + \param[out] none + \retval none +*/ +void rcu_interrupt_disable(rcu_int_enum stab_int) +{ + RCU_REG_VAL(stab_int) &= ~BIT(RCU_BIT_POS(stab_int)); +} + +/*! + \brief configure the LXTAL drive capability + \param[in] lxtal_dricap: drive capability of LXTAL + only one parameter can be selected which is shown as below: + \arg RCU_LXTAL_LOWDRI: lower driving capability + \arg RCU_LXTAL_MED_LOWDRI: medium low driving capability + \arg RCU_LXTAL_MED_HIGHDRI: medium high driving capability + \arg RCU_LXTAL_HIGHDRI: higher driving capability + \param[out] none + \retval none +*/ +void rcu_lxtal_drive_capability_config(uint32_t lxtal_dricap) +{ + uint32_t reg; + + reg = RCU_BDCTL; + + /* reset the LXTALDRI bits and set according to lxtal_dricap */ + reg &= ~RCU_BDCTL_LXTALDRI; + RCU_BDCTL = (reg | lxtal_dricap); +} + +/*! + \brief wait for oscillator stabilization flags is SET or oscillator startup is timeout + \param[in] osci: oscillator types, refer to rcu_osci_type_enum + only one parameter can be selected which is shown as below: + \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) + \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) + \arg RCU_IRC8M: internal 8M RC oscillators(IRC8M) + \arg RCU_IRC48M: internal 48M RC oscillators(IRC48M) + \arg RCU_IRC40K: internal 40K RC oscillator(IRC40K) + \arg RCU_PLL_CK: phase locked loop(PLL) + \arg RCU_PLL1_CK: phase locked loop 1 + \arg RCU_PLL2_CK: phase locked loop 2 + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +ErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci) +{ + uint32_t stb_cnt = 0U; + ErrStatus reval = ERROR; + FlagStatus osci_stat = RESET; + + switch(osci){ + /* wait HXTAL stable */ + case RCU_HXTAL: + while((RESET == osci_stat) && (HXTAL_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_HXTALSTB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if(RESET != rcu_flag_get(RCU_FLAG_HXTALSTB)){ + reval = SUCCESS; + } + break; + + /* wait LXTAL stable */ + case RCU_LXTAL: + while((RESET == osci_stat) && (LXTAL_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_LXTALSTB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if(RESET != rcu_flag_get(RCU_FLAG_LXTALSTB)){ + reval = SUCCESS; + } + break; + + /* wait IRC8M stable */ + case RCU_IRC8M: + while((RESET == osci_stat) && (IRC8M_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_IRC8MSTB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if(RESET != rcu_flag_get(RCU_FLAG_IRC8MSTB)){ + reval = SUCCESS; + } + break; + + /* wait IRC48M stable */ + case RCU_IRC48M: + while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_IRC48MSTB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if (RESET != rcu_flag_get(RCU_FLAG_IRC48MSTB)){ + reval = SUCCESS; + } + break; + + /* wait IRC40K stable */ + case RCU_IRC40K: + while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_IRC40KSTB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if(RESET != rcu_flag_get(RCU_FLAG_IRC40KSTB)){ + reval = SUCCESS; + } + break; + + /* wait PLL stable */ + case RCU_PLL_CK: + while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_PLLSTB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if(RESET != rcu_flag_get(RCU_FLAG_PLLSTB)){ + reval = SUCCESS; + } + break; + + /* wait PLL1 stable */ + case RCU_PLL1_CK: + while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_PLL1STB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if(RESET != rcu_flag_get(RCU_FLAG_PLL1STB)){ + reval = SUCCESS; + } + break; + /* wait PLL2 stable */ + case RCU_PLL2_CK: + while((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)){ + osci_stat = rcu_flag_get(RCU_FLAG_PLL2STB); + stb_cnt++; + } + + /* check whether flag is set or not */ + if(RESET != rcu_flag_get(RCU_FLAG_PLL2STB)){ + reval = SUCCESS; + } + break; + + default: + break; + } + + /* return value */ + return reval; +} + +/*! + \brief turn on the oscillator + \param[in] osci: oscillator types, refer to rcu_osci_type_enum + only one parameter can be selected which is shown as below: + \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) + \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) + \arg RCU_IRC8M: internal 8M RC oscillators(IRC8M) + \arg RCU_IRC48M: internal 48M RC oscillators(IRC48M) + \arg RCU_IRC40K: internal 40K RC oscillator(IRC40K) + \arg RCU_PLL_CK: phase locked loop(PLL) + \arg RCU_PLL1_CK: phase locked loop 1 + \arg RCU_PLL2_CK: phase locked loop 2 + \param[out] none + \retval none +*/ +void rcu_osci_on(rcu_osci_type_enum osci) +{ + RCU_REG_VAL(osci) |= BIT(RCU_BIT_POS(osci)); +} + +/*! + \brief turn off the oscillator + \param[in] osci: oscillator types, refer to rcu_osci_type_enum + only one parameter can be selected which is shown as below: + \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) + \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) + \arg RCU_IRC8M: internal 8M RC oscillators(IRC8M) + \arg RCU_IRC48M: internal 48M RC oscillators(IRC48M) + \arg RCU_IRC40K: internal 40K RC oscillator(IRC40K) + \arg RCU_PLL_CK: phase locked loop(PLL) + \arg RCU_PLL1_CK: phase locked loop 1 + \arg RCU_PLL2_CK: phase locked loop 2 + \param[out] none + \retval none +*/ +void rcu_osci_off(rcu_osci_type_enum osci) +{ + RCU_REG_VAL(osci) &= ~BIT(RCU_BIT_POS(osci)); +} + +/*! + \brief enable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it + \param[in] osci: oscillator types, refer to rcu_osci_type_enum + only one parameter can be selected which is shown as below: + \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) + \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) + \param[out] none + \retval none +*/ +void rcu_osci_bypass_mode_enable(rcu_osci_type_enum osci) +{ + uint32_t reg; + + switch(osci){ + /* enable HXTAL to bypass mode */ + case RCU_HXTAL: + reg = RCU_CTL; + RCU_CTL &= ~RCU_CTL_HXTALEN; + RCU_CTL = (reg | RCU_CTL_HXTALBPS); + break; + /* enable LXTAL to bypass mode */ + case RCU_LXTAL: + reg = RCU_BDCTL; + RCU_BDCTL &= ~RCU_BDCTL_LXTALEN; + RCU_BDCTL = (reg | RCU_BDCTL_LXTALBPS); + break; + case RCU_IRC8M: + case RCU_IRC48M: + case RCU_IRC40K: + case RCU_PLL_CK: + case RCU_PLL1_CK: + case RCU_PLL2_CK: + break; + default: + break; + } +} + +/*! + \brief disable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it + \param[in] osci: oscillator types, refer to rcu_osci_type_enum + only one parameter can be selected which is shown as below: + \arg RCU_HXTAL: high speed crystal oscillator(HXTAL) + \arg RCU_LXTAL: low speed crystal oscillator(LXTAL) + \param[out] none + \retval none +*/ +void rcu_osci_bypass_mode_disable(rcu_osci_type_enum osci) +{ + uint32_t reg; + + switch(osci){ + /* disable HXTAL to bypass mode */ + case RCU_HXTAL: + reg = RCU_CTL; + RCU_CTL &= ~RCU_CTL_HXTALEN; + RCU_CTL = (reg & ~RCU_CTL_HXTALBPS); + break; + /* disable LXTAL to bypass mode */ + case RCU_LXTAL: + reg = RCU_BDCTL; + RCU_BDCTL &= ~RCU_BDCTL_LXTALEN; + RCU_BDCTL = (reg & ~RCU_BDCTL_LXTALBPS); + break; + case RCU_IRC8M: + case RCU_IRC48M: + case RCU_IRC40K: + case RCU_PLL_CK: + case RCU_PLL1_CK: + case RCU_PLL2_CK: + break; + default: + break; + } +} + +/*! + \brief enable the HXTAL clock monitor + \param[in] none + \param[out] none + \retval none +*/ + +void rcu_hxtal_clock_monitor_enable(void) +{ + RCU_CTL |= RCU_CTL_CKMEN; +} + +/*! + \brief disable the HXTAL clock monitor + \param[in] none + \param[out] none + \retval none +*/ +void rcu_hxtal_clock_monitor_disable(void) +{ + RCU_CTL &= ~RCU_CTL_CKMEN; +} + +/*! + \brief set the IRC8M adjust value + \param[in] irc8m_adjval: IRC8M adjust value, must be between 0 and 0x1F + \arg 0x00 - 0x1F + \param[out] none + \retval none +*/ +void rcu_irc8m_adjust_value_set(uint32_t irc8m_adjval) +{ + uint32_t reg; + + reg = RCU_CTL; + /* reset the IRC8MADJ bits and set according to irc8m_adjval */ + reg &= ~RCU_CTL_IRC8MADJ; + RCU_CTL = (reg | ((irc8m_adjval & RCU_IRC8M_ADJUST_MASK) << RCU_IRC8M_ADJUST_OFFSET)); +} + +/*! + \brief deep-sleep mode voltage select + \param[in] dsvol: deep sleep mode voltage + only one parameter can be selected which is shown as below: + \arg RCU_DEEPSLEEP_V_1_0: the core voltage is 1.0V + \arg RCU_DEEPSLEEP_V_0_9: the core voltage is 0.9V + \arg RCU_DEEPSLEEP_V_0_8: the core voltage is 0.8V + \arg RCU_DEEPSLEEP_V_1_2: the core voltage is 1.2V + \param[out] none + \retval none +*/ +void rcu_deepsleep_voltage_set(uint32_t dsvol) +{ + dsvol &= RCU_DSV_DSLPVS; + RCU_DSV = dsvol; +} + +/*! + \brief get the system clock, bus and peripheral clock frequency + \param[in] clock: the clock frequency which to get + only one parameter can be selected which is shown as below: + \arg CK_SYS: system clock frequency + \arg CK_AHB: AHB clock frequency + \arg CK_APB1: APB1 clock frequency + \arg CK_APB2: APB2 clock frequency + \param[out] none + \retval clock frequency of system, AHB, APB1, APB2 +*/ +uint32_t rcu_clock_freq_get(rcu_clock_freq_enum clock) +{ + uint32_t sws, ck_freq = 0U; + uint32_t cksys_freq, ahb_freq, apb1_freq, apb2_freq; + uint32_t pllsel, pllpresel, predv0sel, pllmf,ck_src, idx, clk_exp; + uint32_t predv0, predv1, pll1mf; + + /* exponent of AHB, APB1 and APB2 clock divider */ + uint8_t ahb_exp[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + uint8_t apb1_exp[8] = {0, 0, 0, 0, 1, 2, 3, 4}; + uint8_t apb2_exp[8] = {0, 0, 0, 0, 1, 2, 3, 4}; + + sws = GET_BITS(RCU_CFG0, 2, 3); + switch(sws){ + /* IRC8M is selected as CK_SYS */ + case SEL_IRC8M: + cksys_freq = IRC8M_VALUE; + break; + /* HXTAL is selected as CK_SYS */ + case SEL_HXTAL: + cksys_freq = HXTAL_VALUE; + break; + /* PLL is selected as CK_SYS */ + case SEL_PLL: + /* PLL clock source selection, HXTAL, IRC48M or IRC8M/2 */ + pllsel = (RCU_CFG0 & RCU_CFG0_PLLSEL); + + if(RCU_PLLSRC_HXTAL_IRC48M == pllsel) { + /* PLL clock source is HXTAL or IRC48M */ + pllpresel = (RCU_CFG1 & RCU_CFG1_PLLPRESEL); + + if(RCU_PLLPRESRC_HXTAL == pllpresel){ + /* PLL clock source is HXTAL */ + ck_src = HXTAL_VALUE; + }else{ + /* PLL clock source is IRC48 */ + ck_src = IRC48M_VALUE; + } + + predv0sel = (RCU_CFG1 & RCU_CFG1_PREDV0SEL); + /* source clock use PLL1 */ + if(RCU_PREDV0SRC_CKPLL1 == predv0sel){ + predv1 = ((RCU_CFG1 & RCU_CFG1_PREDV1) >> RCU_CFG1_PREDV1_OFFSET) + 1U; + pll1mf = (uint32_t)((RCU_CFG1 & RCU_CFG1_PLL1MF) >> RCU_CFG1_PLL1MF_OFFSET) + 2U; + if(17U == pll1mf){ + pll1mf = 20U; + } + ck_src = (ck_src/predv1)*pll1mf; + } + predv0 = (RCU_CFG1 & RCU_CFG1_PREDV0) + 1U; + ck_src /= predv0; + }else{ + /* PLL clock source is IRC8M/2 */ + ck_src = IRC8M_VALUE/2U; + } + + /* PLL multiplication factor */ + pllmf = GET_BITS(RCU_CFG0, 18, 21); + if((RCU_CFG0 & RCU_CFG0_PLLMF_4)){ + pllmf |= 0x10U; + } + if(pllmf < 15U){ + pllmf += 2U; + }else{ + pllmf += 1U; + } + cksys_freq = ck_src*pllmf; + if(15U == pllmf){ + cksys_freq = ck_src*6U + ck_src/2U; + } + + break; + /* IRC8M is selected as CK_SYS */ + default: + cksys_freq = IRC8M_VALUE; + break; + } + + /* calculate AHB clock frequency */ + idx = GET_BITS(RCU_CFG0, 4, 7); + clk_exp = ahb_exp[idx]; + ahb_freq = cksys_freq >> clk_exp; + + /* calculate APB1 clock frequency */ + idx = GET_BITS(RCU_CFG0, 8, 10); + clk_exp = apb1_exp[idx]; + apb1_freq = ahb_freq >> clk_exp; + + /* calculate APB2 clock frequency */ + idx = GET_BITS(RCU_CFG0, 11, 13); + clk_exp = apb2_exp[idx]; + apb2_freq = ahb_freq >> clk_exp; + + /* return the clocks frequency */ + switch(clock){ + case CK_SYS: + ck_freq = cksys_freq; + break; + case CK_AHB: + ck_freq = ahb_freq; + break; + case CK_APB1: + ck_freq = apb1_freq; + break; + case CK_APB2: + ck_freq = apb2_freq; + break; + default: + break; + } + return ck_freq; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rtc.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rtc.c new file mode 100644 index 0000000..d124ad7 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rtc.c @@ -0,0 +1,281 @@ +/*! + \file gd32c10x_rtc.c + \brief RTC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_rtc.h" + +/* RTC register high / low bits mask */ +#define RTC_HIGH_BITS_MASK ((uint32_t)0x000F0000U) /* RTC high bits mask */ +#define RTC_LOW_BITS_MASK ((uint32_t)0x0000FFFFU) /* RTC low bits mask */ + +/* RTC register high bits offset */ +#define RTC_HIGH_BITS_OFFSET ((uint32_t)16U) + +/*! + \brief enter RTC configuration mode + \param[in] none + \param[out] none + \retval none +*/ +void rtc_configuration_mode_enter(void) +{ + RTC_CTL |= RTC_CTL_CMF; +} + +/*! + \brief exit RTC configuration mode + \param[in] none + \param[out] none + \retval none +*/ +void rtc_configuration_mode_exit(void) +{ + RTC_CTL &= ~RTC_CTL_CMF; +} + +/*! + \brief set RTC counter value + \param[in] cnt: RTC counter value + \param[out] none + \retval none +*/ +void rtc_counter_set(uint32_t cnt) +{ + rtc_configuration_mode_enter(); + /* set the RTC counter high bits */ + RTC_CNTH = (cnt >> RTC_HIGH_BITS_OFFSET); + /* set the RTC counter low bits */ + RTC_CNTL = (cnt & RTC_LOW_BITS_MASK); + rtc_configuration_mode_exit(); +} + +/*! + \brief set RTC prescaler value + \param[in] psc: RTC prescaler value + \param[out] none + \retval none +*/ +void rtc_prescaler_set(uint32_t psc) +{ + rtc_configuration_mode_enter(); + /* set the RTC prescaler high bits */ + RTC_PSCH = ((psc & RTC_HIGH_BITS_MASK) >> RTC_HIGH_BITS_OFFSET); + /* set the RTC prescaler low bits */ + RTC_PSCL = (psc & RTC_LOW_BITS_MASK); + rtc_configuration_mode_exit(); +} + +/*! + \brief wait RTC last write operation finished flag set + \param[in] none + \param[out] none + \retval none +*/ +void rtc_lwoff_wait(void) +{ + /* loop until LWOFF flag is set */ + while(RESET == (RTC_CTL & RTC_CTL_LWOFF)){ + } +} + +/*! + \brief wait RTC registers synchronized flag set + \param[in] none + \param[out] none + \retval none +*/ +void rtc_register_sync_wait(void) +{ + /* clear RSYNF flag */ + RTC_CTL &= ~RTC_CTL_RSYNF; + /* loop until RSYNF flag is set */ + while(RESET == (RTC_CTL & RTC_CTL_RSYNF)){ + } +} + +/*! + \brief set RTC alarm value + \param[in] alarm: RTC alarm value + \param[out] none + \retval none +*/ +void rtc_alarm_config(uint32_t alarm) +{ + rtc_configuration_mode_enter(); + /* set the alarm high bits */ + RTC_ALRMH = (alarm >> RTC_HIGH_BITS_OFFSET); + /* set the alarm low bits */ + RTC_ALRML = (alarm & RTC_LOW_BITS_MASK); + rtc_configuration_mode_exit(); +} + +/*! + \brief get RTC counter value + \param[in] none + \param[out] none + \retval RTC counter value +*/ +uint32_t rtc_counter_get(void) +{ + uint32_t temp = 0x0U, high_old, high_new; + + high_old = RTC_CNTH; + temp = RTC_CNTL; + high_new = RTC_CNTH; + + if(high_old != high_new){ + temp = (high_new << RTC_HIGH_BITS_OFFSET) | RTC_CNTL; + }else{ + temp |= (high_new << RTC_HIGH_BITS_OFFSET); + } + + return temp; +} + +/*! + \brief get RTC divider value + \param[in] none + \param[out] none + \retval RTC divider value +*/ +uint32_t rtc_divider_get(void) +{ + uint32_t temp = 0x00U; + + temp = ((RTC_DIVH & RTC_DIVH_DIV) << RTC_HIGH_BITS_OFFSET); + temp |= RTC_DIVL; + return temp; +} + +/*! + \brief get RTC flag status + \param[in] flag: specify which flag status to get + only one parameter can be selected which is shown as below: + \arg RTC_FLAG_SECOND: second interrupt flag + \arg RTC_FLAG_ALARM: alarm interrupt flag + \arg RTC_FLAG_OVERFLOW: overflow interrupt flag + \arg RTC_FLAG_RSYN: registers synchronized flag + \arg RTC_FLAG_LWOF: last write operation finished flag + \param[out] none + \retval SET or RESET +*/ +FlagStatus rtc_flag_get(uint32_t flag) +{ + if(RESET != (RTC_CTL & flag)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear RTC flag status + \param[in] flag: specify which flag status to clear + one or more parameters can be selected which are shown as below: + \arg RTC_FLAG_SECOND: second interrupt flag + \arg RTC_FLAG_ALARM: alarm interrupt flag + \arg RTC_FLAG_OVERFLOW: overflow interrupt flag + \arg RTC_FLAG_RSYN: registers synchronized flag + \param[out] none + \retval none +*/ +void rtc_flag_clear(uint32_t flag) +{ + /* clear RTC flag */ + RTC_CTL &= ~flag; +} + +/*! + \brief get RTC interrupt flag status + \param[in] flag: specify which flag status to get + only one parameter can be selected which is shown as below: + \arg RTC_INT_FLAG_SECOND: second interrupt flag + \arg RTC_INT_FLAG_ALARM: alarm interrupt flag + \arg RTC_INT_FLAG_OVERFLOW: overflow interrupt flag + \param[out] none + \retval SET or RESET +*/ +FlagStatus rtc_interrupt_flag_get(uint32_t flag) +{ + if(RESET != (RTC_CTL & flag)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear RTC interrupt flag status + \param[in] flag: specify which flag status to clear + one or more parameters can be selected which are shown as below: + \arg RTC_INT_FLAG_SECOND: second interrupt flag + \arg RTC_INT_FLAG_ALARM: alarm interrupt flag + \arg RTC_INT_FLAG_OVERFLOW: overflow interrupt flag + \param[out] none + \retval none +*/ +void rtc_interrupt_flag_clear(uint32_t flag) +{ + /* clear RTC interrupt flag */ + RTC_CTL &= ~flag; +} + +/*! + \brief enable RTC interrupt + \param[in] interrupt: specify which interrupt to enable + one or more parameters can be selected which are shown as below: + \arg RTC_INT_SECOND: second interrupt + \arg RTC_INT_ALARM: alarm interrupt + \arg RTC_INT_OVERFLOW: overflow interrupt + \param[out] none + \retval none +*/ +void rtc_interrupt_enable(uint32_t interrupt) +{ + RTC_INTEN |= interrupt; +} + +/*! + \brief disable RTC interrupt + \param[in] interrupt: specify which interrupt to disable + one or more parameters can be selected which are shown as below: + \arg RTC_INT_SECOND: second interrupt + \arg RTC_INT_ALARM: alarm interrupt + \arg RTC_INT_OVERFLOW: overflow interrupt + \param[out] none + \retval none +*/ +void rtc_interrupt_disable(uint32_t interrupt) +{ + RTC_INTEN &= ~interrupt; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rtc.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rtc.c.base@1.0.0 new file mode 100644 index 0000000..d124ad7 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rtc.c.base@1.0.0 @@ -0,0 +1,281 @@ +/*! + \file gd32c10x_rtc.c + \brief RTC driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_rtc.h" + +/* RTC register high / low bits mask */ +#define RTC_HIGH_BITS_MASK ((uint32_t)0x000F0000U) /* RTC high bits mask */ +#define RTC_LOW_BITS_MASK ((uint32_t)0x0000FFFFU) /* RTC low bits mask */ + +/* RTC register high bits offset */ +#define RTC_HIGH_BITS_OFFSET ((uint32_t)16U) + +/*! + \brief enter RTC configuration mode + \param[in] none + \param[out] none + \retval none +*/ +void rtc_configuration_mode_enter(void) +{ + RTC_CTL |= RTC_CTL_CMF; +} + +/*! + \brief exit RTC configuration mode + \param[in] none + \param[out] none + \retval none +*/ +void rtc_configuration_mode_exit(void) +{ + RTC_CTL &= ~RTC_CTL_CMF; +} + +/*! + \brief set RTC counter value + \param[in] cnt: RTC counter value + \param[out] none + \retval none +*/ +void rtc_counter_set(uint32_t cnt) +{ + rtc_configuration_mode_enter(); + /* set the RTC counter high bits */ + RTC_CNTH = (cnt >> RTC_HIGH_BITS_OFFSET); + /* set the RTC counter low bits */ + RTC_CNTL = (cnt & RTC_LOW_BITS_MASK); + rtc_configuration_mode_exit(); +} + +/*! + \brief set RTC prescaler value + \param[in] psc: RTC prescaler value + \param[out] none + \retval none +*/ +void rtc_prescaler_set(uint32_t psc) +{ + rtc_configuration_mode_enter(); + /* set the RTC prescaler high bits */ + RTC_PSCH = ((psc & RTC_HIGH_BITS_MASK) >> RTC_HIGH_BITS_OFFSET); + /* set the RTC prescaler low bits */ + RTC_PSCL = (psc & RTC_LOW_BITS_MASK); + rtc_configuration_mode_exit(); +} + +/*! + \brief wait RTC last write operation finished flag set + \param[in] none + \param[out] none + \retval none +*/ +void rtc_lwoff_wait(void) +{ + /* loop until LWOFF flag is set */ + while(RESET == (RTC_CTL & RTC_CTL_LWOFF)){ + } +} + +/*! + \brief wait RTC registers synchronized flag set + \param[in] none + \param[out] none + \retval none +*/ +void rtc_register_sync_wait(void) +{ + /* clear RSYNF flag */ + RTC_CTL &= ~RTC_CTL_RSYNF; + /* loop until RSYNF flag is set */ + while(RESET == (RTC_CTL & RTC_CTL_RSYNF)){ + } +} + +/*! + \brief set RTC alarm value + \param[in] alarm: RTC alarm value + \param[out] none + \retval none +*/ +void rtc_alarm_config(uint32_t alarm) +{ + rtc_configuration_mode_enter(); + /* set the alarm high bits */ + RTC_ALRMH = (alarm >> RTC_HIGH_BITS_OFFSET); + /* set the alarm low bits */ + RTC_ALRML = (alarm & RTC_LOW_BITS_MASK); + rtc_configuration_mode_exit(); +} + +/*! + \brief get RTC counter value + \param[in] none + \param[out] none + \retval RTC counter value +*/ +uint32_t rtc_counter_get(void) +{ + uint32_t temp = 0x0U, high_old, high_new; + + high_old = RTC_CNTH; + temp = RTC_CNTL; + high_new = RTC_CNTH; + + if(high_old != high_new){ + temp = (high_new << RTC_HIGH_BITS_OFFSET) | RTC_CNTL; + }else{ + temp |= (high_new << RTC_HIGH_BITS_OFFSET); + } + + return temp; +} + +/*! + \brief get RTC divider value + \param[in] none + \param[out] none + \retval RTC divider value +*/ +uint32_t rtc_divider_get(void) +{ + uint32_t temp = 0x00U; + + temp = ((RTC_DIVH & RTC_DIVH_DIV) << RTC_HIGH_BITS_OFFSET); + temp |= RTC_DIVL; + return temp; +} + +/*! + \brief get RTC flag status + \param[in] flag: specify which flag status to get + only one parameter can be selected which is shown as below: + \arg RTC_FLAG_SECOND: second interrupt flag + \arg RTC_FLAG_ALARM: alarm interrupt flag + \arg RTC_FLAG_OVERFLOW: overflow interrupt flag + \arg RTC_FLAG_RSYN: registers synchronized flag + \arg RTC_FLAG_LWOF: last write operation finished flag + \param[out] none + \retval SET or RESET +*/ +FlagStatus rtc_flag_get(uint32_t flag) +{ + if(RESET != (RTC_CTL & flag)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear RTC flag status + \param[in] flag: specify which flag status to clear + one or more parameters can be selected which are shown as below: + \arg RTC_FLAG_SECOND: second interrupt flag + \arg RTC_FLAG_ALARM: alarm interrupt flag + \arg RTC_FLAG_OVERFLOW: overflow interrupt flag + \arg RTC_FLAG_RSYN: registers synchronized flag + \param[out] none + \retval none +*/ +void rtc_flag_clear(uint32_t flag) +{ + /* clear RTC flag */ + RTC_CTL &= ~flag; +} + +/*! + \brief get RTC interrupt flag status + \param[in] flag: specify which flag status to get + only one parameter can be selected which is shown as below: + \arg RTC_INT_FLAG_SECOND: second interrupt flag + \arg RTC_INT_FLAG_ALARM: alarm interrupt flag + \arg RTC_INT_FLAG_OVERFLOW: overflow interrupt flag + \param[out] none + \retval SET or RESET +*/ +FlagStatus rtc_interrupt_flag_get(uint32_t flag) +{ + if(RESET != (RTC_CTL & flag)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear RTC interrupt flag status + \param[in] flag: specify which flag status to clear + one or more parameters can be selected which are shown as below: + \arg RTC_INT_FLAG_SECOND: second interrupt flag + \arg RTC_INT_FLAG_ALARM: alarm interrupt flag + \arg RTC_INT_FLAG_OVERFLOW: overflow interrupt flag + \param[out] none + \retval none +*/ +void rtc_interrupt_flag_clear(uint32_t flag) +{ + /* clear RTC interrupt flag */ + RTC_CTL &= ~flag; +} + +/*! + \brief enable RTC interrupt + \param[in] interrupt: specify which interrupt to enable + one or more parameters can be selected which are shown as below: + \arg RTC_INT_SECOND: second interrupt + \arg RTC_INT_ALARM: alarm interrupt + \arg RTC_INT_OVERFLOW: overflow interrupt + \param[out] none + \retval none +*/ +void rtc_interrupt_enable(uint32_t interrupt) +{ + RTC_INTEN |= interrupt; +} + +/*! + \brief disable RTC interrupt + \param[in] interrupt: specify which interrupt to disable + one or more parameters can be selected which are shown as below: + \arg RTC_INT_SECOND: second interrupt + \arg RTC_INT_ALARM: alarm interrupt + \arg RTC_INT_OVERFLOW: overflow interrupt + \param[out] none + \retval none +*/ +void rtc_interrupt_disable(uint32_t interrupt) +{ + RTC_INTEN &= ~interrupt; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_spi.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_spi.c new file mode 100644 index 0000000..f07e114 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_spi.c @@ -0,0 +1,855 @@ +/*! + \file gd32c10x_spi.c + \brief SPI driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_spi.h" + +#define SPI_ERROR_HANDLE(s) do{}while(1) + +/* SPI/I2S parameter initialization mask */ +#define SPI_INIT_MASK ((uint32_t)0x00003040U) /* SPI parameter initialization mask */ +#define I2S_INIT_MASK ((uint32_t)0x0000F047U) /* I2S parameter initialization mask */ + +/* I2S clock source selection, multiplication and division mask */ +#define I2S1_CLOCK_SEL ((uint32_t)0x00020000U) /* I2S1 clock source selection */ +#define I2S2_CLOCK_SEL ((uint32_t)0x00040000U) /* I2S2 clock source selection */ +#define I2S_CLOCK_MUL_MASK ((uint32_t)0x0000F000U) /* I2S clock multiplication mask */ +#define I2S_CLOCK_DIV_MASK ((uint32_t)0x000000F0U) /* I2S clock division mask */ + +/* default value and offset */ +#define SPI_I2SPSC_DEFAULT_VALUE ((uint32_t)0x00000002U) /* default value of SPI_I2SPSC register */ +#define RCU_CFG1_PREDV1_OFFSET 4U /* PREDV1 offset in RCU_CFG1 */ +#define RCU_CFG1_PLL2MF_OFFSET 12U /* PLL2MF offset in RCU_CFG1 */ + +/*! + \brief reset SPI and I2S + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_i2s_deinit(uint32_t spi_periph) +{ + switch(spi_periph){ + case SPI0: + /* reset SPI0 */ + rcu_periph_reset_enable(RCU_SPI0RST); + rcu_periph_reset_disable(RCU_SPI0RST); + break; + case SPI1: + /* reset SPI1 and I2S1 */ + rcu_periph_reset_enable(RCU_SPI1RST); + rcu_periph_reset_disable(RCU_SPI1RST); + break; + case SPI2: + /* reset SPI2 and I2S2 */ + rcu_periph_reset_enable(RCU_SPI2RST); + rcu_periph_reset_disable(RCU_SPI2RST); + break; + default: + break; + } +} + +/*! + \brief initialize the parameters of SPI struct with the default values + \param[in] spi_struct: SPI parameter struct + \param[out] none + \retval none +*/ +void spi_struct_para_init(spi_parameter_struct* spi_struct) +{ + /* set the SPI struct with the default values */ + spi_struct->device_mode = SPI_SLAVE; + spi_struct->trans_mode = SPI_TRANSMODE_FULLDUPLEX; + spi_struct->frame_size = SPI_FRAMESIZE_8BIT; + spi_struct->nss = SPI_NSS_HARD; + spi_struct->endian = SPI_ENDIAN_MSB; + spi_struct->clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE; + spi_struct->prescale = SPI_PSC_2; +} + +/*! + \brief initialize SPI parameter + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] spi_struct: SPI parameter initialization stuct members of the structure + and the member values are shown as below: + device_mode: SPI_MASTER, SPI_SLAVE + trans_mode: SPI_TRANSMODE_FULLDUPLEX, SPI_TRANSMODE_RECEIVEONLY, + SPI_TRANSMODE_BDRECEIVE, SPI_TRANSMODE_BDTRANSMIT + frame_size: SPI_FRAMESIZE_16BIT, SPI_FRAMESIZE_8BIT + nss: SPI_NSS_SOFT, SPI_NSS_HARD + endian: SPI_ENDIAN_MSB, SPI_ENDIAN_LSB + clock_polarity_phase: SPI_CK_PL_LOW_PH_1EDGE, SPI_CK_PL_HIGH_PH_1EDGE + SPI_CK_PL_LOW_PH_2EDGE, SPI_CK_PL_HIGH_PH_2EDGE + prescale: SPI_PSC_n (n=2,4,8,16,32,64,128,256) + \param[out] none + \retval none +*/ +void spi_init(uint32_t spi_periph, spi_parameter_struct* spi_struct) +{ + uint32_t reg = 0U; + reg = SPI_CTL0(spi_periph); + reg &= SPI_INIT_MASK; + + /* select SPI as master or slave */ + reg |= spi_struct->device_mode; + /* select SPI transfer mode */ + reg |= spi_struct->trans_mode; + /* select SPI frame size */ + reg |= spi_struct->frame_size; + /* select SPI NSS use hardware or software */ + reg |= spi_struct->nss; + /* select SPI LSB or MSB */ + reg |= spi_struct->endian; + /* select SPI polarity and phase */ + reg |= spi_struct->clock_polarity_phase; + /* select SPI prescale to adjust transmit speed */ + reg |= spi_struct->prescale; + + /* write to SPI_CTL0 register */ + SPI_CTL0(spi_periph) = (uint32_t)reg; + + SPI_I2SCTL(spi_periph) &= (uint32_t)(~SPI_I2SCTL_I2SSEL); +} + +/*! + \brief enable SPI + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_enable(uint32_t spi_periph) +{ + SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_SPIEN; +} + +/*! + \brief disable SPI + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_disable(uint32_t spi_periph) +{ + SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_SPIEN); +} + +/*! + \brief initialize I2S parameter + \param[in] spi_periph: SPIx(x=1,2) + \param[in] mode: I2S operation mode + only one parameter can be selected which is shown as below: + \arg I2S_MODE_SLAVETX: I2S slave transmit mode + \arg I2S_MODE_SLAVERX: I2S slave receive mode + \arg I2S_MODE_MASTERTX: I2S master transmit mode + \arg I2S_MODE_MASTERRX: I2S master receive mode + \param[in] standard: I2S standard + only one parameter can be selected which is shown as below: + \arg I2S_STD_PHILIPS: I2S Philips standard + \arg I2S_STD_MSB: I2S MSB standard + \arg I2S_STD_LSB: I2S LSB standard + \arg I2S_STD_PCMSHORT: I2S PCM short standard + \arg I2S_STD_PCMLONG: I2S PCM long standard + \param[in] ckpl: I2S idle state clock polarity + only one parameter can be selected which is shown as below: + \arg I2S_CKPL_LOW: I2S clock polarity low level + \arg I2S_CKPL_HIGH: I2S clock polarity high level + \param[out] none + \retval none +*/ +void i2s_init(uint32_t spi_periph, uint32_t mode, uint32_t standard, uint32_t ckpl) +{ + uint32_t reg = 0U; + reg = SPI_I2SCTL(spi_periph); + reg &= I2S_INIT_MASK; + + /* enable I2S mode */ + reg |= (uint32_t)SPI_I2SCTL_I2SSEL; + /* select I2S mode */ + reg |= (uint32_t)mode; + /* select I2S standard */ + reg |= (uint32_t)standard; + /* select I2S polarity */ + reg |= (uint32_t)ckpl; + + /* write to SPI_I2SCTL register */ + SPI_I2SCTL(spi_periph) = (uint32_t)reg; +} + +/*! + \brief configure I2S prescaler + \param[in] spi_periph: SPIx(x=1,2) + \param[in] audiosample: I2S audio sample rate + only one parameter can be selected which is shown as below: + \arg I2S_AUDIOSAMPLE_8K: audio sample rate is 8KHz + \arg I2S_AUDIOSAMPLE_11K: audio sample rate is 11KHz + \arg I2S_AUDIOSAMPLE_16K: audio sample rate is 16KHz + \arg I2S_AUDIOSAMPLE_22K: audio sample rate is 22KHz + \arg I2S_AUDIOSAMPLE_32K: audio sample rate is 32KHz + \arg I2S_AUDIOSAMPLE_44K: audio sample rate is 44KHz + \arg I2S_AUDIOSAMPLE_48K: audio sample rate is 48KHz + \arg I2S_AUDIOSAMPLE_96K: audio sample rate is 96KHz + \arg I2S_AUDIOSAMPLE_192K: audio sample rate is 192KHz + \param[in] frameformat: I2S data length and channel length + only one parameter can be selected which is shown as below: + \arg I2S_FRAMEFORMAT_DT16B_CH16B: I2S data length is 16 bit and channel length is 16 bit + \arg I2S_FRAMEFORMAT_DT16B_CH32B: I2S data length is 16 bit and channel length is 32 bit + \arg I2S_FRAMEFORMAT_DT24B_CH32B: I2S data length is 24 bit and channel length is 32 bit + \arg I2S_FRAMEFORMAT_DT32B_CH32B: I2S data length is 32 bit and channel length is 32 bit + \param[in] mckout: I2S master clock output + only one parameter can be selected which is shown as below: + \arg I2S_MCKOUT_ENABLE: I2S master clock output enable + \arg I2S_MCKOUT_DISABLE: I2S master clock output disable + \param[out] none + \retval none +*/ +void i2s_psc_config(uint32_t spi_periph, uint32_t audiosample, uint32_t frameformat, uint32_t mckout) +{ + uint32_t i2sdiv = 2U, i2sof = 0U; + uint32_t clks = 0U; + uint32_t i2sclock = 0U; + + /* judge whether the audiosample is 0 */ + if(0U == audiosample){ + SPI_ERROR_HANDLE("the parameter can not be 0 \r\n"); + } + + /* deinit SPI_I2SPSC register */ + SPI_I2SPSC(spi_periph) = SPI_I2SPSC_DEFAULT_VALUE; + + /* get the I2S clock source */ + if(SPI1 == ((uint32_t)spi_periph)){ + /* I2S1 clock source selection */ + clks = I2S1_CLOCK_SEL; + }else{ + /* I2S2 clock source selection */ + clks = I2S2_CLOCK_SEL; + } + + if(0U != (RCU_CFG1 & clks)){ + /* get RCU PLL2 clock multiplication factor */ + clks = (uint32_t)((RCU_CFG1 & I2S_CLOCK_MUL_MASK) >> RCU_CFG1_PLL2MF_OFFSET); + + if((clks > 5U) && (clks < 15U)){ + /* multiplier is between 8 and 16 */ + clks += 2U; + }else{ + if(15U == clks){ + /* multiplier is 20 */ + clks = 20U; + } + } + + /* get the PREDV1 value */ + i2sclock = (uint32_t)(((RCU_CFG1 & I2S_CLOCK_DIV_MASK) >> RCU_CFG1_PREDV1_OFFSET) + 1U); + /* calculate I2S clock based on PLL2 and PREDV1 */ + if(0U != (RCU_CFG1_PLLPRESEL & RCU_CFG1)){ + i2sclock = (uint32_t)((IRC48M_VALUE / i2sclock) * clks * 2U); + }else{ + i2sclock = (uint32_t)((HXTAL_VALUE / i2sclock) * clks * 2U); + } + }else{ + /* get system clock */ + i2sclock = rcu_clock_freq_get(CK_SYS); + } + + /* config the prescaler depending on the mclk output state, the frame format and audio sample rate */ + if(I2S_MCKOUT_ENABLE == mckout){ + clks = (uint32_t)(((i2sclock / 256U) * 10U) / audiosample); + }else{ + if(I2S_FRAMEFORMAT_DT16B_CH16B == frameformat){ + clks = (uint32_t)(((i2sclock / 32U) *10U) / audiosample); + }else{ + clks = (uint32_t)(((i2sclock / 64U) *10U) / audiosample); + } + } + + /* remove the floating point */ + clks = (clks + 5U) / 10U; + i2sof = (clks & 0x00000001U); + i2sdiv = ((clks - i2sof) / 2U); + i2sof = (i2sof << 8U); + + /* set the default values */ + if((i2sdiv < 2U) || (i2sdiv > 255U)){ + i2sdiv = 2U; + i2sof = 0U; + } + + /* configure SPI_I2SPSC */ + SPI_I2SPSC(spi_periph) = (uint32_t)(i2sdiv | i2sof | mckout); + + /* clear SPI_I2SCTL_DTLEN and SPI_I2SCTL_CHLEN bits */ + SPI_I2SCTL(spi_periph) &= (uint32_t)(~(SPI_I2SCTL_DTLEN | SPI_I2SCTL_CHLEN)); + /* configure data frame format */ + SPI_I2SCTL(spi_periph) |= (uint32_t)frameformat; +} + +/*! + \brief enable I2S + \param[in] spi_periph: SPIx(x=1,2) + \param[out] none + \retval none +*/ +void i2s_enable(uint32_t spi_periph) +{ + SPI_I2SCTL(spi_periph) |= (uint32_t)SPI_I2SCTL_I2SEN; +} + +/*! + \brief disable I2S + \param[in] spi_periph: SPIx(x=1,2) + \param[out] none + \retval none +*/ +void i2s_disable(uint32_t spi_periph) +{ + SPI_I2SCTL(spi_periph) &= (uint32_t)(~SPI_I2SCTL_I2SEN); +} + +/*! + \brief enable SPI NSS output + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_nss_output_enable(uint32_t spi_periph) +{ + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_NSSDRV; +} + +/*! + \brief disable SPI NSS output + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_nss_output_disable(uint32_t spi_periph) +{ + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_NSSDRV); +} + +/*! + \brief SPI NSS pin high level in software mode + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_nss_internal_high(uint32_t spi_periph) +{ + SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_SWNSS; +} + +/*! + \brief SPI NSS pin low level in software mode + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_nss_internal_low(uint32_t spi_periph) +{ + SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_SWNSS); +} + +/*! + \brief enable SPI DMA send or receive + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] dma: SPI DMA mode + only one parameter can be selected which is shown as below: + \arg SPI_DMA_TRANSMIT: SPI transmit data using DMA + \arg SPI_DMA_RECEIVE: SPI receive data using DMA + \param[out] none + \retval none +*/ +void spi_dma_enable(uint32_t spi_periph, uint8_t dma) +{ + if(SPI_DMA_TRANSMIT == dma){ + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_DMATEN; + }else{ + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_DMAREN; + } +} + +/*! + \brief disable SPI DMA send or receive + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] dma: SPI DMA mode + only one parameter can be selected which is shown as below: + \arg SPI_DMA_TRANSMIT: SPI transmit data using DMA + \arg SPI_DMA_RECEIVE: SPI receive data using DMA + \param[out] none + \retval none +*/ +void spi_dma_disable(uint32_t spi_periph, uint8_t dma) +{ + if(SPI_DMA_TRANSMIT == dma){ + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_DMATEN); + }else{ + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_DMAREN); + } +} + +/*! + \brief configure SPI/I2S data frame format + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] frame_format: SPI frame size + only one parameter can be selected which is shown as below: + \arg SPI_FRAMESIZE_16BIT: SPI frame size is 16 bits + \arg SPI_FRAMESIZE_8BIT: SPI frame size is 8 bits + \param[out] none + \retval none +*/ +void spi_i2s_data_frame_format_config(uint32_t spi_periph, uint16_t frame_format) +{ + /* clear SPI_CTL0_FF16 bit */ + SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_FF16); + /* configure SPI_CTL0_FF16 bit */ + SPI_CTL0(spi_periph) |= (uint32_t)frame_format; +} + +/*! + \brief SPI transmit data + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] data: 16-bit data + \param[out] none + \retval none +*/ +void spi_i2s_data_transmit(uint32_t spi_periph, uint16_t data) +{ + SPI_DATA(spi_periph) = (uint32_t)data; +} + +/*! + \brief SPI receive data + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval 16-bit data +*/ +uint16_t spi_i2s_data_receive(uint32_t spi_periph) +{ + return ((uint16_t)SPI_DATA(spi_periph)); +} + +/*! + \brief configure SPI bidirectional transfer direction + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] transfer_direction: SPI transfer direction + only one parameter can be selected which is shown as below: + \arg SPI_BIDIRECTIONAL_TRANSMIT: SPI work in transmit-only mode + \arg SPI_BIDIRECTIONAL_RECEIVE: SPI work in receive-only mode + \param[out] none + \retval none +*/ +void spi_bidirectional_transfer_config(uint32_t spi_periph, uint32_t transfer_direction) +{ + if(SPI_BIDIRECTIONAL_TRANSMIT == transfer_direction){ + /* set the transmit-only mode */ + SPI_CTL0(spi_periph) |= (uint32_t)SPI_BIDIRECTIONAL_TRANSMIT; + }else{ + /* set the receive-only mode */ + SPI_CTL0(spi_periph) &= SPI_BIDIRECTIONAL_RECEIVE; + } +} + +/*! + \brief clear SPI/I2S format error flag status + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] flag: SPI/I2S frame format error flag + \arg SPI_FLAG_FERR: only for SPI work in TI mode + \arg I2S_FLAG_FERR: for I2S + \param[out] none + \retval none +*/ +void spi_i2s_format_error_clear(uint32_t spi_periph, uint32_t flag) +{ + SPI_STAT(spi_periph) = (uint32_t)(~flag); +} + +/*! + \brief set SPI CRC polynomial + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] crc_poly: CRC polynomial value + \param[out] none + \retval none +*/ +void spi_crc_polynomial_set(uint32_t spi_periph,uint16_t crc_poly) +{ + /* set SPI CRC polynomial */ + SPI_CRCPOLY(spi_periph) = (uint32_t)crc_poly; +} + +/*! + \brief get SPI CRC polynomial + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval 16-bit CRC polynomial +*/ +uint16_t spi_crc_polynomial_get(uint32_t spi_periph) +{ + return ((uint16_t)SPI_CRCPOLY(spi_periph)); +} + +/*! + \brief turn on CRC function + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_crc_on(uint32_t spi_periph) +{ + SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_CRCEN; +} + +/*! + \brief turn off CRC function + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_crc_off(uint32_t spi_periph) +{ + SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_CRCEN); +} + +/*! + \brief SPI next data is CRC value + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_crc_next(uint32_t spi_periph) +{ + SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_CRCNT; +} + +/*! + \brief get SPI CRC send value or receive value + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] crc: SPI crc value + only one parameter can be selected which is shown as below: + \arg SPI_CRC_TX: get transmit crc value + \arg SPI_CRC_RX: get receive crc value + \param[out] none + \retval 16-bit CRC value +*/ +uint16_t spi_crc_get(uint32_t spi_periph,uint8_t crc) +{ + if(SPI_CRC_TX == crc){ + return ((uint16_t)(SPI_TCRC(spi_periph))); + }else{ + return ((uint16_t)(SPI_RCRC(spi_periph))); + } +} + +/*! + \brief clear SPI CRC error flag status + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_crc_error_clear(uint32_t spi_periph) +{ + SPI_STAT(spi_periph) = (uint32_t)(~SPI_FLAG_CRCERR); +} + +/*! + \brief enable SPI TI mode + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_ti_mode_enable(uint32_t spi_periph) +{ + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_TMOD; +} + +/*! + \brief disable SPI TI mode + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_ti_mode_disable(uint32_t spi_periph) +{ + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_TMOD); +} + +/*! + \brief enable SPI NSS pulse mode + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_nssp_mode_enable(uint32_t spi_periph) +{ + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_NSSP; +} + +/*! + \brief disable SPI NSS pulse mode + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_nssp_mode_disable(uint32_t spi_periph) +{ + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_NSSP); +} + +/*! + \brief enable SPI quad wire mode + \param[in] spi_periph: SPIx(only x=0) + \param[out] none + \retval none +*/ +void spi_quad_enable(uint32_t spi_periph) +{ + SPI_QCTL(spi_periph) |= (uint32_t)SPI_QCTL_QMOD; +} + +/*! + \brief disable SPI quad wire mode + \param[in] spi_periph: SPIx(only x=0) + \param[out] none + \retval none +*/ +void spi_quad_disable(uint32_t spi_periph) +{ + SPI_QCTL(spi_periph) &= (uint32_t)(~SPI_QCTL_QMOD); +} + +/*! + \brief enable SPI quad wire mode write + \param[in] spi_periph: SPIx(only x=0) + \param[out] none + \retval none +*/ +void spi_quad_write_enable(uint32_t spi_periph) +{ + SPI_QCTL(spi_periph) &= (uint32_t)(~SPI_QCTL_QRD); +} + +/*! + \brief enable SPI quad wire mode read + \param[in] spi_periph: SPIx(only x=0) + \param[out] none + \retval none +*/ +void spi_quad_read_enable(uint32_t spi_periph) +{ + SPI_QCTL(spi_periph) |= (uint32_t)SPI_QCTL_QRD; +} + +/*! + \brief enable SPI quad wire mode SPI_IO2 and SPI_IO3 pin output + \param[in] spi_periph: SPIx(only x=0) + \param[out] none + \retval none +*/ +void spi_quad_io23_output_enable(uint32_t spi_periph) +{ + SPI_QCTL(spi_periph) |= (uint32_t)SPI_QCTL_IO23_DRV; +} + + /*! + \brief disable SPI quad wire mode SPI_IO2 and SPI_IO3 pin output + \param[in] spi_periph: SPIx(only x=0) + \param[out] none + \retval none +*/ +void spi_quad_io23_output_disable(uint32_t spi_periph) +{ + SPI_QCTL(spi_periph) &= (uint32_t)(~SPI_QCTL_IO23_DRV); +} + +/*! + \brief enable SPI and I2S interrupt + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] interrupt: SPI/I2S interrupt + only one parameter can be selected which is shown as below: + \arg SPI_I2S_INT_TBE: transmit buffer empty interrupt + \arg SPI_I2S_INT_RBNE: receive buffer not empty interrupt + \arg SPI_I2S_INT_ERR: CRC error,configuration error,reception overrun error, + transmission underrun error and format error interrupt + \param[out] none + \retval none +*/ +void spi_i2s_interrupt_enable(uint32_t spi_periph, uint8_t interrupt) +{ + switch(interrupt){ + /* SPI/I2S transmit buffer empty interrupt */ + case SPI_I2S_INT_TBE: + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_TBEIE; + break; + /* SPI/I2S receive buffer not empty interrupt */ + case SPI_I2S_INT_RBNE: + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_RBNEIE; + break; + /* SPI/I2S error */ + case SPI_I2S_INT_ERR: + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_ERRIE; + break; + default: + break; + } +} + +/*! + \brief disable SPI and I2S interrupt + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] interrupt: SPI/I2S interrupt + only one parameter can be selected which is shown as below: + \arg SPI_I2S_INT_TBE: transmit buffer empty interrupt + \arg SPI_I2S_INT_RBNE: receive buffer not empty interrupt + \arg SPI_I2S_INT_ERR: CRC error,configuration error,reception overrun error, + transmission underrun error and format error interrupt + \param[out] none + \retval none +*/ +void spi_i2s_interrupt_disable(uint32_t spi_periph, uint8_t interrupt) +{ + switch(interrupt){ + /* SPI/I2S transmit buffer empty interrupt */ + case SPI_I2S_INT_TBE: + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_TBEIE); + break; + /* SPI/I2S receive buffer not empty interrupt */ + case SPI_I2S_INT_RBNE: + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_RBNEIE); + break; + /* SPI/I2S error */ + case SPI_I2S_INT_ERR: + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_ERRIE); + break; + default: + break; + } +} + +/*! + \brief get SPI and I2S interrupt flag status + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] interrupt: SPI/I2S interrupt flag status + only one parameter can be selected which is shown as below: + \arg SPI_I2S_INT_FLAG_TBE: transmit buffer empty interrupt flag + \arg SPI_I2S_INT_FLAG_RBNE: receive buffer not empty interrupt flag + \arg SPI_I2S_INT_FLAG_RXORERR: overrun interrupt flag + \arg SPI_INT_FLAG_CONFERR: config error interrupt flag + \arg SPI_INT_FLAG_CRCERR: CRC error interrupt flag + \arg I2S_INT_FLAG_TXURERR: underrun error interrupt flag + \arg SPI_I2S_INT_FLAG_FERR: format error interrupt flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus spi_i2s_interrupt_flag_get(uint32_t spi_periph, uint8_t interrupt) +{ + uint32_t reg1 = SPI_STAT(spi_periph); + uint32_t reg2 = SPI_CTL1(spi_periph); + + switch(interrupt){ + /* SPI/I2S transmit buffer empty interrupt */ + case SPI_I2S_INT_FLAG_TBE: + reg1 = reg1 & SPI_STAT_TBE; + reg2 = reg2 & SPI_CTL1_TBEIE; + break; + /* SPI/I2S receive buffer not empty interrupt */ + case SPI_I2S_INT_FLAG_RBNE: + reg1 = reg1 & SPI_STAT_RBNE; + reg2 = reg2 & SPI_CTL1_RBNEIE; + break; + /* SPI/I2S overrun interrupt */ + case SPI_I2S_INT_FLAG_RXORERR: + reg1 = reg1 & SPI_STAT_RXORERR; + reg2 = reg2 & SPI_CTL1_ERRIE; + break; + /* SPI config error interrupt */ + case SPI_INT_FLAG_CONFERR: + reg1 = reg1 & SPI_STAT_CONFERR; + reg2 = reg2 & SPI_CTL1_ERRIE; + break; + /* SPI CRC error interrupt */ + case SPI_INT_FLAG_CRCERR: + reg1 = reg1 & SPI_STAT_CRCERR; + reg2 = reg2 & SPI_CTL1_ERRIE; + break; + /* I2S underrun error interrupt */ + case I2S_INT_FLAG_TXURERR: + reg1 = reg1 & SPI_STAT_TXURERR; + reg2 = reg2 & SPI_CTL1_ERRIE; + break; + /* SPI/I2S format error interrupt */ + case SPI_I2S_INT_FLAG_FERR: + reg1 = reg1 & SPI_STAT_FERR; + reg2 = reg2 & SPI_CTL1_ERRIE; + break; + default: + break; + } + /* get SPI/I2S interrupt flag status */ + if((0U != reg1) && (0U != reg2)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief get SPI and I2S flag status + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] flag: SPI/I2S flag status + one or more parameters can be selected which are shown as below: + \arg SPI_FLAG_TBE: transmit buffer empty flag + \arg SPI_FLAG_RBNE: receive buffer not empty flag + \arg SPI_FLAG_TRANS: transmit on-going flag + \arg SPI_FLAG_RXORERR: receive overrun error flag + \arg SPI_FLAG_CONFERR: mode config error flag + \arg SPI_FLAG_CRCERR: CRC error flag + \arg SPI_FLAG_FERR: format error interrupt flag + \arg I2S_FLAG_TBE: transmit buffer empty flag + \arg I2S_FLAG_RBNE: receive buffer not empty flag + \arg I2S_FLAG_TRANS: transmit on-going flag + \arg I2S_FLAG_RXORERR: overrun error flag + \arg I2S_FLAG_TXURERR: underrun error flag + \arg I2S_FLAG_CH: channel side flag + \arg I2S_FLAG_FERR: format error interrupt flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus spi_i2s_flag_get(uint32_t spi_periph, uint32_t flag) +{ + if(RESET != (SPI_STAT(spi_periph) & flag)){ + return SET; + }else{ + return RESET; + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_spi.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_spi.c.base@1.0.0 new file mode 100644 index 0000000..f07e114 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_spi.c.base@1.0.0 @@ -0,0 +1,855 @@ +/*! + \file gd32c10x_spi.c + \brief SPI driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_spi.h" + +#define SPI_ERROR_HANDLE(s) do{}while(1) + +/* SPI/I2S parameter initialization mask */ +#define SPI_INIT_MASK ((uint32_t)0x00003040U) /* SPI parameter initialization mask */ +#define I2S_INIT_MASK ((uint32_t)0x0000F047U) /* I2S parameter initialization mask */ + +/* I2S clock source selection, multiplication and division mask */ +#define I2S1_CLOCK_SEL ((uint32_t)0x00020000U) /* I2S1 clock source selection */ +#define I2S2_CLOCK_SEL ((uint32_t)0x00040000U) /* I2S2 clock source selection */ +#define I2S_CLOCK_MUL_MASK ((uint32_t)0x0000F000U) /* I2S clock multiplication mask */ +#define I2S_CLOCK_DIV_MASK ((uint32_t)0x000000F0U) /* I2S clock division mask */ + +/* default value and offset */ +#define SPI_I2SPSC_DEFAULT_VALUE ((uint32_t)0x00000002U) /* default value of SPI_I2SPSC register */ +#define RCU_CFG1_PREDV1_OFFSET 4U /* PREDV1 offset in RCU_CFG1 */ +#define RCU_CFG1_PLL2MF_OFFSET 12U /* PLL2MF offset in RCU_CFG1 */ + +/*! + \brief reset SPI and I2S + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_i2s_deinit(uint32_t spi_periph) +{ + switch(spi_periph){ + case SPI0: + /* reset SPI0 */ + rcu_periph_reset_enable(RCU_SPI0RST); + rcu_periph_reset_disable(RCU_SPI0RST); + break; + case SPI1: + /* reset SPI1 and I2S1 */ + rcu_periph_reset_enable(RCU_SPI1RST); + rcu_periph_reset_disable(RCU_SPI1RST); + break; + case SPI2: + /* reset SPI2 and I2S2 */ + rcu_periph_reset_enable(RCU_SPI2RST); + rcu_periph_reset_disable(RCU_SPI2RST); + break; + default: + break; + } +} + +/*! + \brief initialize the parameters of SPI struct with the default values + \param[in] spi_struct: SPI parameter struct + \param[out] none + \retval none +*/ +void spi_struct_para_init(spi_parameter_struct* spi_struct) +{ + /* set the SPI struct with the default values */ + spi_struct->device_mode = SPI_SLAVE; + spi_struct->trans_mode = SPI_TRANSMODE_FULLDUPLEX; + spi_struct->frame_size = SPI_FRAMESIZE_8BIT; + spi_struct->nss = SPI_NSS_HARD; + spi_struct->endian = SPI_ENDIAN_MSB; + spi_struct->clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE; + spi_struct->prescale = SPI_PSC_2; +} + +/*! + \brief initialize SPI parameter + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] spi_struct: SPI parameter initialization stuct members of the structure + and the member values are shown as below: + device_mode: SPI_MASTER, SPI_SLAVE + trans_mode: SPI_TRANSMODE_FULLDUPLEX, SPI_TRANSMODE_RECEIVEONLY, + SPI_TRANSMODE_BDRECEIVE, SPI_TRANSMODE_BDTRANSMIT + frame_size: SPI_FRAMESIZE_16BIT, SPI_FRAMESIZE_8BIT + nss: SPI_NSS_SOFT, SPI_NSS_HARD + endian: SPI_ENDIAN_MSB, SPI_ENDIAN_LSB + clock_polarity_phase: SPI_CK_PL_LOW_PH_1EDGE, SPI_CK_PL_HIGH_PH_1EDGE + SPI_CK_PL_LOW_PH_2EDGE, SPI_CK_PL_HIGH_PH_2EDGE + prescale: SPI_PSC_n (n=2,4,8,16,32,64,128,256) + \param[out] none + \retval none +*/ +void spi_init(uint32_t spi_periph, spi_parameter_struct* spi_struct) +{ + uint32_t reg = 0U; + reg = SPI_CTL0(spi_periph); + reg &= SPI_INIT_MASK; + + /* select SPI as master or slave */ + reg |= spi_struct->device_mode; + /* select SPI transfer mode */ + reg |= spi_struct->trans_mode; + /* select SPI frame size */ + reg |= spi_struct->frame_size; + /* select SPI NSS use hardware or software */ + reg |= spi_struct->nss; + /* select SPI LSB or MSB */ + reg |= spi_struct->endian; + /* select SPI polarity and phase */ + reg |= spi_struct->clock_polarity_phase; + /* select SPI prescale to adjust transmit speed */ + reg |= spi_struct->prescale; + + /* write to SPI_CTL0 register */ + SPI_CTL0(spi_periph) = (uint32_t)reg; + + SPI_I2SCTL(spi_periph) &= (uint32_t)(~SPI_I2SCTL_I2SSEL); +} + +/*! + \brief enable SPI + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_enable(uint32_t spi_periph) +{ + SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_SPIEN; +} + +/*! + \brief disable SPI + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_disable(uint32_t spi_periph) +{ + SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_SPIEN); +} + +/*! + \brief initialize I2S parameter + \param[in] spi_periph: SPIx(x=1,2) + \param[in] mode: I2S operation mode + only one parameter can be selected which is shown as below: + \arg I2S_MODE_SLAVETX: I2S slave transmit mode + \arg I2S_MODE_SLAVERX: I2S slave receive mode + \arg I2S_MODE_MASTERTX: I2S master transmit mode + \arg I2S_MODE_MASTERRX: I2S master receive mode + \param[in] standard: I2S standard + only one parameter can be selected which is shown as below: + \arg I2S_STD_PHILIPS: I2S Philips standard + \arg I2S_STD_MSB: I2S MSB standard + \arg I2S_STD_LSB: I2S LSB standard + \arg I2S_STD_PCMSHORT: I2S PCM short standard + \arg I2S_STD_PCMLONG: I2S PCM long standard + \param[in] ckpl: I2S idle state clock polarity + only one parameter can be selected which is shown as below: + \arg I2S_CKPL_LOW: I2S clock polarity low level + \arg I2S_CKPL_HIGH: I2S clock polarity high level + \param[out] none + \retval none +*/ +void i2s_init(uint32_t spi_periph, uint32_t mode, uint32_t standard, uint32_t ckpl) +{ + uint32_t reg = 0U; + reg = SPI_I2SCTL(spi_periph); + reg &= I2S_INIT_MASK; + + /* enable I2S mode */ + reg |= (uint32_t)SPI_I2SCTL_I2SSEL; + /* select I2S mode */ + reg |= (uint32_t)mode; + /* select I2S standard */ + reg |= (uint32_t)standard; + /* select I2S polarity */ + reg |= (uint32_t)ckpl; + + /* write to SPI_I2SCTL register */ + SPI_I2SCTL(spi_periph) = (uint32_t)reg; +} + +/*! + \brief configure I2S prescaler + \param[in] spi_periph: SPIx(x=1,2) + \param[in] audiosample: I2S audio sample rate + only one parameter can be selected which is shown as below: + \arg I2S_AUDIOSAMPLE_8K: audio sample rate is 8KHz + \arg I2S_AUDIOSAMPLE_11K: audio sample rate is 11KHz + \arg I2S_AUDIOSAMPLE_16K: audio sample rate is 16KHz + \arg I2S_AUDIOSAMPLE_22K: audio sample rate is 22KHz + \arg I2S_AUDIOSAMPLE_32K: audio sample rate is 32KHz + \arg I2S_AUDIOSAMPLE_44K: audio sample rate is 44KHz + \arg I2S_AUDIOSAMPLE_48K: audio sample rate is 48KHz + \arg I2S_AUDIOSAMPLE_96K: audio sample rate is 96KHz + \arg I2S_AUDIOSAMPLE_192K: audio sample rate is 192KHz + \param[in] frameformat: I2S data length and channel length + only one parameter can be selected which is shown as below: + \arg I2S_FRAMEFORMAT_DT16B_CH16B: I2S data length is 16 bit and channel length is 16 bit + \arg I2S_FRAMEFORMAT_DT16B_CH32B: I2S data length is 16 bit and channel length is 32 bit + \arg I2S_FRAMEFORMAT_DT24B_CH32B: I2S data length is 24 bit and channel length is 32 bit + \arg I2S_FRAMEFORMAT_DT32B_CH32B: I2S data length is 32 bit and channel length is 32 bit + \param[in] mckout: I2S master clock output + only one parameter can be selected which is shown as below: + \arg I2S_MCKOUT_ENABLE: I2S master clock output enable + \arg I2S_MCKOUT_DISABLE: I2S master clock output disable + \param[out] none + \retval none +*/ +void i2s_psc_config(uint32_t spi_periph, uint32_t audiosample, uint32_t frameformat, uint32_t mckout) +{ + uint32_t i2sdiv = 2U, i2sof = 0U; + uint32_t clks = 0U; + uint32_t i2sclock = 0U; + + /* judge whether the audiosample is 0 */ + if(0U == audiosample){ + SPI_ERROR_HANDLE("the parameter can not be 0 \r\n"); + } + + /* deinit SPI_I2SPSC register */ + SPI_I2SPSC(spi_periph) = SPI_I2SPSC_DEFAULT_VALUE; + + /* get the I2S clock source */ + if(SPI1 == ((uint32_t)spi_periph)){ + /* I2S1 clock source selection */ + clks = I2S1_CLOCK_SEL; + }else{ + /* I2S2 clock source selection */ + clks = I2S2_CLOCK_SEL; + } + + if(0U != (RCU_CFG1 & clks)){ + /* get RCU PLL2 clock multiplication factor */ + clks = (uint32_t)((RCU_CFG1 & I2S_CLOCK_MUL_MASK) >> RCU_CFG1_PLL2MF_OFFSET); + + if((clks > 5U) && (clks < 15U)){ + /* multiplier is between 8 and 16 */ + clks += 2U; + }else{ + if(15U == clks){ + /* multiplier is 20 */ + clks = 20U; + } + } + + /* get the PREDV1 value */ + i2sclock = (uint32_t)(((RCU_CFG1 & I2S_CLOCK_DIV_MASK) >> RCU_CFG1_PREDV1_OFFSET) + 1U); + /* calculate I2S clock based on PLL2 and PREDV1 */ + if(0U != (RCU_CFG1_PLLPRESEL & RCU_CFG1)){ + i2sclock = (uint32_t)((IRC48M_VALUE / i2sclock) * clks * 2U); + }else{ + i2sclock = (uint32_t)((HXTAL_VALUE / i2sclock) * clks * 2U); + } + }else{ + /* get system clock */ + i2sclock = rcu_clock_freq_get(CK_SYS); + } + + /* config the prescaler depending on the mclk output state, the frame format and audio sample rate */ + if(I2S_MCKOUT_ENABLE == mckout){ + clks = (uint32_t)(((i2sclock / 256U) * 10U) / audiosample); + }else{ + if(I2S_FRAMEFORMAT_DT16B_CH16B == frameformat){ + clks = (uint32_t)(((i2sclock / 32U) *10U) / audiosample); + }else{ + clks = (uint32_t)(((i2sclock / 64U) *10U) / audiosample); + } + } + + /* remove the floating point */ + clks = (clks + 5U) / 10U; + i2sof = (clks & 0x00000001U); + i2sdiv = ((clks - i2sof) / 2U); + i2sof = (i2sof << 8U); + + /* set the default values */ + if((i2sdiv < 2U) || (i2sdiv > 255U)){ + i2sdiv = 2U; + i2sof = 0U; + } + + /* configure SPI_I2SPSC */ + SPI_I2SPSC(spi_periph) = (uint32_t)(i2sdiv | i2sof | mckout); + + /* clear SPI_I2SCTL_DTLEN and SPI_I2SCTL_CHLEN bits */ + SPI_I2SCTL(spi_periph) &= (uint32_t)(~(SPI_I2SCTL_DTLEN | SPI_I2SCTL_CHLEN)); + /* configure data frame format */ + SPI_I2SCTL(spi_periph) |= (uint32_t)frameformat; +} + +/*! + \brief enable I2S + \param[in] spi_periph: SPIx(x=1,2) + \param[out] none + \retval none +*/ +void i2s_enable(uint32_t spi_periph) +{ + SPI_I2SCTL(spi_periph) |= (uint32_t)SPI_I2SCTL_I2SEN; +} + +/*! + \brief disable I2S + \param[in] spi_periph: SPIx(x=1,2) + \param[out] none + \retval none +*/ +void i2s_disable(uint32_t spi_periph) +{ + SPI_I2SCTL(spi_periph) &= (uint32_t)(~SPI_I2SCTL_I2SEN); +} + +/*! + \brief enable SPI NSS output + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_nss_output_enable(uint32_t spi_periph) +{ + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_NSSDRV; +} + +/*! + \brief disable SPI NSS output + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_nss_output_disable(uint32_t spi_periph) +{ + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_NSSDRV); +} + +/*! + \brief SPI NSS pin high level in software mode + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_nss_internal_high(uint32_t spi_periph) +{ + SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_SWNSS; +} + +/*! + \brief SPI NSS pin low level in software mode + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_nss_internal_low(uint32_t spi_periph) +{ + SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_SWNSS); +} + +/*! + \brief enable SPI DMA send or receive + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] dma: SPI DMA mode + only one parameter can be selected which is shown as below: + \arg SPI_DMA_TRANSMIT: SPI transmit data using DMA + \arg SPI_DMA_RECEIVE: SPI receive data using DMA + \param[out] none + \retval none +*/ +void spi_dma_enable(uint32_t spi_periph, uint8_t dma) +{ + if(SPI_DMA_TRANSMIT == dma){ + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_DMATEN; + }else{ + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_DMAREN; + } +} + +/*! + \brief disable SPI DMA send or receive + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] dma: SPI DMA mode + only one parameter can be selected which is shown as below: + \arg SPI_DMA_TRANSMIT: SPI transmit data using DMA + \arg SPI_DMA_RECEIVE: SPI receive data using DMA + \param[out] none + \retval none +*/ +void spi_dma_disable(uint32_t spi_periph, uint8_t dma) +{ + if(SPI_DMA_TRANSMIT == dma){ + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_DMATEN); + }else{ + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_DMAREN); + } +} + +/*! + \brief configure SPI/I2S data frame format + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] frame_format: SPI frame size + only one parameter can be selected which is shown as below: + \arg SPI_FRAMESIZE_16BIT: SPI frame size is 16 bits + \arg SPI_FRAMESIZE_8BIT: SPI frame size is 8 bits + \param[out] none + \retval none +*/ +void spi_i2s_data_frame_format_config(uint32_t spi_periph, uint16_t frame_format) +{ + /* clear SPI_CTL0_FF16 bit */ + SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_FF16); + /* configure SPI_CTL0_FF16 bit */ + SPI_CTL0(spi_periph) |= (uint32_t)frame_format; +} + +/*! + \brief SPI transmit data + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] data: 16-bit data + \param[out] none + \retval none +*/ +void spi_i2s_data_transmit(uint32_t spi_periph, uint16_t data) +{ + SPI_DATA(spi_periph) = (uint32_t)data; +} + +/*! + \brief SPI receive data + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval 16-bit data +*/ +uint16_t spi_i2s_data_receive(uint32_t spi_periph) +{ + return ((uint16_t)SPI_DATA(spi_periph)); +} + +/*! + \brief configure SPI bidirectional transfer direction + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] transfer_direction: SPI transfer direction + only one parameter can be selected which is shown as below: + \arg SPI_BIDIRECTIONAL_TRANSMIT: SPI work in transmit-only mode + \arg SPI_BIDIRECTIONAL_RECEIVE: SPI work in receive-only mode + \param[out] none + \retval none +*/ +void spi_bidirectional_transfer_config(uint32_t spi_periph, uint32_t transfer_direction) +{ + if(SPI_BIDIRECTIONAL_TRANSMIT == transfer_direction){ + /* set the transmit-only mode */ + SPI_CTL0(spi_periph) |= (uint32_t)SPI_BIDIRECTIONAL_TRANSMIT; + }else{ + /* set the receive-only mode */ + SPI_CTL0(spi_periph) &= SPI_BIDIRECTIONAL_RECEIVE; + } +} + +/*! + \brief clear SPI/I2S format error flag status + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] flag: SPI/I2S frame format error flag + \arg SPI_FLAG_FERR: only for SPI work in TI mode + \arg I2S_FLAG_FERR: for I2S + \param[out] none + \retval none +*/ +void spi_i2s_format_error_clear(uint32_t spi_periph, uint32_t flag) +{ + SPI_STAT(spi_periph) = (uint32_t)(~flag); +} + +/*! + \brief set SPI CRC polynomial + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] crc_poly: CRC polynomial value + \param[out] none + \retval none +*/ +void spi_crc_polynomial_set(uint32_t spi_periph,uint16_t crc_poly) +{ + /* set SPI CRC polynomial */ + SPI_CRCPOLY(spi_periph) = (uint32_t)crc_poly; +} + +/*! + \brief get SPI CRC polynomial + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval 16-bit CRC polynomial +*/ +uint16_t spi_crc_polynomial_get(uint32_t spi_periph) +{ + return ((uint16_t)SPI_CRCPOLY(spi_periph)); +} + +/*! + \brief turn on CRC function + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_crc_on(uint32_t spi_periph) +{ + SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_CRCEN; +} + +/*! + \brief turn off CRC function + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_crc_off(uint32_t spi_periph) +{ + SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_CRCEN); +} + +/*! + \brief SPI next data is CRC value + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_crc_next(uint32_t spi_periph) +{ + SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_CRCNT; +} + +/*! + \brief get SPI CRC send value or receive value + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] crc: SPI crc value + only one parameter can be selected which is shown as below: + \arg SPI_CRC_TX: get transmit crc value + \arg SPI_CRC_RX: get receive crc value + \param[out] none + \retval 16-bit CRC value +*/ +uint16_t spi_crc_get(uint32_t spi_periph,uint8_t crc) +{ + if(SPI_CRC_TX == crc){ + return ((uint16_t)(SPI_TCRC(spi_periph))); + }else{ + return ((uint16_t)(SPI_RCRC(spi_periph))); + } +} + +/*! + \brief clear SPI CRC error flag status + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_crc_error_clear(uint32_t spi_periph) +{ + SPI_STAT(spi_periph) = (uint32_t)(~SPI_FLAG_CRCERR); +} + +/*! + \brief enable SPI TI mode + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_ti_mode_enable(uint32_t spi_periph) +{ + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_TMOD; +} + +/*! + \brief disable SPI TI mode + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_ti_mode_disable(uint32_t spi_periph) +{ + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_TMOD); +} + +/*! + \brief enable SPI NSS pulse mode + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_nssp_mode_enable(uint32_t spi_periph) +{ + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_NSSP; +} + +/*! + \brief disable SPI NSS pulse mode + \param[in] spi_periph: SPIx(x=0,1,2) + \param[out] none + \retval none +*/ +void spi_nssp_mode_disable(uint32_t spi_periph) +{ + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_NSSP); +} + +/*! + \brief enable SPI quad wire mode + \param[in] spi_periph: SPIx(only x=0) + \param[out] none + \retval none +*/ +void spi_quad_enable(uint32_t spi_periph) +{ + SPI_QCTL(spi_periph) |= (uint32_t)SPI_QCTL_QMOD; +} + +/*! + \brief disable SPI quad wire mode + \param[in] spi_periph: SPIx(only x=0) + \param[out] none + \retval none +*/ +void spi_quad_disable(uint32_t spi_periph) +{ + SPI_QCTL(spi_periph) &= (uint32_t)(~SPI_QCTL_QMOD); +} + +/*! + \brief enable SPI quad wire mode write + \param[in] spi_periph: SPIx(only x=0) + \param[out] none + \retval none +*/ +void spi_quad_write_enable(uint32_t spi_periph) +{ + SPI_QCTL(spi_periph) &= (uint32_t)(~SPI_QCTL_QRD); +} + +/*! + \brief enable SPI quad wire mode read + \param[in] spi_periph: SPIx(only x=0) + \param[out] none + \retval none +*/ +void spi_quad_read_enable(uint32_t spi_periph) +{ + SPI_QCTL(spi_periph) |= (uint32_t)SPI_QCTL_QRD; +} + +/*! + \brief enable SPI quad wire mode SPI_IO2 and SPI_IO3 pin output + \param[in] spi_periph: SPIx(only x=0) + \param[out] none + \retval none +*/ +void spi_quad_io23_output_enable(uint32_t spi_periph) +{ + SPI_QCTL(spi_periph) |= (uint32_t)SPI_QCTL_IO23_DRV; +} + + /*! + \brief disable SPI quad wire mode SPI_IO2 and SPI_IO3 pin output + \param[in] spi_periph: SPIx(only x=0) + \param[out] none + \retval none +*/ +void spi_quad_io23_output_disable(uint32_t spi_periph) +{ + SPI_QCTL(spi_periph) &= (uint32_t)(~SPI_QCTL_IO23_DRV); +} + +/*! + \brief enable SPI and I2S interrupt + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] interrupt: SPI/I2S interrupt + only one parameter can be selected which is shown as below: + \arg SPI_I2S_INT_TBE: transmit buffer empty interrupt + \arg SPI_I2S_INT_RBNE: receive buffer not empty interrupt + \arg SPI_I2S_INT_ERR: CRC error,configuration error,reception overrun error, + transmission underrun error and format error interrupt + \param[out] none + \retval none +*/ +void spi_i2s_interrupt_enable(uint32_t spi_periph, uint8_t interrupt) +{ + switch(interrupt){ + /* SPI/I2S transmit buffer empty interrupt */ + case SPI_I2S_INT_TBE: + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_TBEIE; + break; + /* SPI/I2S receive buffer not empty interrupt */ + case SPI_I2S_INT_RBNE: + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_RBNEIE; + break; + /* SPI/I2S error */ + case SPI_I2S_INT_ERR: + SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_ERRIE; + break; + default: + break; + } +} + +/*! + \brief disable SPI and I2S interrupt + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] interrupt: SPI/I2S interrupt + only one parameter can be selected which is shown as below: + \arg SPI_I2S_INT_TBE: transmit buffer empty interrupt + \arg SPI_I2S_INT_RBNE: receive buffer not empty interrupt + \arg SPI_I2S_INT_ERR: CRC error,configuration error,reception overrun error, + transmission underrun error and format error interrupt + \param[out] none + \retval none +*/ +void spi_i2s_interrupt_disable(uint32_t spi_periph, uint8_t interrupt) +{ + switch(interrupt){ + /* SPI/I2S transmit buffer empty interrupt */ + case SPI_I2S_INT_TBE: + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_TBEIE); + break; + /* SPI/I2S receive buffer not empty interrupt */ + case SPI_I2S_INT_RBNE: + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_RBNEIE); + break; + /* SPI/I2S error */ + case SPI_I2S_INT_ERR: + SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_ERRIE); + break; + default: + break; + } +} + +/*! + \brief get SPI and I2S interrupt flag status + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] interrupt: SPI/I2S interrupt flag status + only one parameter can be selected which is shown as below: + \arg SPI_I2S_INT_FLAG_TBE: transmit buffer empty interrupt flag + \arg SPI_I2S_INT_FLAG_RBNE: receive buffer not empty interrupt flag + \arg SPI_I2S_INT_FLAG_RXORERR: overrun interrupt flag + \arg SPI_INT_FLAG_CONFERR: config error interrupt flag + \arg SPI_INT_FLAG_CRCERR: CRC error interrupt flag + \arg I2S_INT_FLAG_TXURERR: underrun error interrupt flag + \arg SPI_I2S_INT_FLAG_FERR: format error interrupt flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus spi_i2s_interrupt_flag_get(uint32_t spi_periph, uint8_t interrupt) +{ + uint32_t reg1 = SPI_STAT(spi_periph); + uint32_t reg2 = SPI_CTL1(spi_periph); + + switch(interrupt){ + /* SPI/I2S transmit buffer empty interrupt */ + case SPI_I2S_INT_FLAG_TBE: + reg1 = reg1 & SPI_STAT_TBE; + reg2 = reg2 & SPI_CTL1_TBEIE; + break; + /* SPI/I2S receive buffer not empty interrupt */ + case SPI_I2S_INT_FLAG_RBNE: + reg1 = reg1 & SPI_STAT_RBNE; + reg2 = reg2 & SPI_CTL1_RBNEIE; + break; + /* SPI/I2S overrun interrupt */ + case SPI_I2S_INT_FLAG_RXORERR: + reg1 = reg1 & SPI_STAT_RXORERR; + reg2 = reg2 & SPI_CTL1_ERRIE; + break; + /* SPI config error interrupt */ + case SPI_INT_FLAG_CONFERR: + reg1 = reg1 & SPI_STAT_CONFERR; + reg2 = reg2 & SPI_CTL1_ERRIE; + break; + /* SPI CRC error interrupt */ + case SPI_INT_FLAG_CRCERR: + reg1 = reg1 & SPI_STAT_CRCERR; + reg2 = reg2 & SPI_CTL1_ERRIE; + break; + /* I2S underrun error interrupt */ + case I2S_INT_FLAG_TXURERR: + reg1 = reg1 & SPI_STAT_TXURERR; + reg2 = reg2 & SPI_CTL1_ERRIE; + break; + /* SPI/I2S format error interrupt */ + case SPI_I2S_INT_FLAG_FERR: + reg1 = reg1 & SPI_STAT_FERR; + reg2 = reg2 & SPI_CTL1_ERRIE; + break; + default: + break; + } + /* get SPI/I2S interrupt flag status */ + if((0U != reg1) && (0U != reg2)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief get SPI and I2S flag status + \param[in] spi_periph: SPIx(x=0,1,2) + \param[in] flag: SPI/I2S flag status + one or more parameters can be selected which are shown as below: + \arg SPI_FLAG_TBE: transmit buffer empty flag + \arg SPI_FLAG_RBNE: receive buffer not empty flag + \arg SPI_FLAG_TRANS: transmit on-going flag + \arg SPI_FLAG_RXORERR: receive overrun error flag + \arg SPI_FLAG_CONFERR: mode config error flag + \arg SPI_FLAG_CRCERR: CRC error flag + \arg SPI_FLAG_FERR: format error interrupt flag + \arg I2S_FLAG_TBE: transmit buffer empty flag + \arg I2S_FLAG_RBNE: receive buffer not empty flag + \arg I2S_FLAG_TRANS: transmit on-going flag + \arg I2S_FLAG_RXORERR: overrun error flag + \arg I2S_FLAG_TXURERR: underrun error flag + \arg I2S_FLAG_CH: channel side flag + \arg I2S_FLAG_FERR: format error interrupt flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus spi_i2s_flag_get(uint32_t spi_periph, uint32_t flag) +{ + if(RESET != (SPI_STAT(spi_periph) & flag)){ + return SET; + }else{ + return RESET; + } +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_timer.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_timer.c new file mode 100644 index 0000000..5112573 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_timer.c @@ -0,0 +1,2039 @@ +/*! + \file gd32c10x_timer.c + \brief TIMER driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_timer.h" + +/* TIMER init parameter mask */ +#define ALIGNEDMODE_MASK ((uint32_t)0x00000060U) /*!< TIMER init parameter aligne dmode mask */ +#define COUNTERDIRECTION_MASK ((uint32_t)0x00000010U) /*!< TIMER init parameter counter direction mask */ +#define CLOCKDIVISION_MASK ((uint32_t)0x00000300U) /*!< TIMER init parameter clock division value mask */ + +/*! + \brief deinit a timer + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval none +*/ +void timer_deinit(uint32_t timer_periph) +{ + switch(timer_periph){ + case TIMER0: + /* reset TIMER0 */ + rcu_periph_reset_enable(RCU_TIMER0RST); + rcu_periph_reset_disable(RCU_TIMER0RST); + break; + case TIMER1: + /* reset TIMER1 */ + rcu_periph_reset_enable(RCU_TIMER1RST); + rcu_periph_reset_disable(RCU_TIMER1RST); + break; + case TIMER2: + /* reset TIMER2 */ + rcu_periph_reset_enable(RCU_TIMER2RST); + rcu_periph_reset_disable(RCU_TIMER2RST); + break; + case TIMER3: + /* reset TIMER3 */ + rcu_periph_reset_enable(RCU_TIMER3RST); + rcu_periph_reset_disable(RCU_TIMER3RST); + break; + case TIMER4: + /* reset TIMER4 */ + rcu_periph_reset_enable(RCU_TIMER4RST); + rcu_periph_reset_disable(RCU_TIMER4RST); + break; + case TIMER5: + /* reset TIMER5 */ + rcu_periph_reset_enable(RCU_TIMER5RST); + rcu_periph_reset_disable(RCU_TIMER5RST); + break; + case TIMER6: + /* reset TIMER6 */ + rcu_periph_reset_enable(RCU_TIMER6RST); + rcu_periph_reset_disable(RCU_TIMER6RST); + break; + case TIMER7: + /* reset TIMER7 */ + rcu_periph_reset_enable(RCU_TIMER7RST); + rcu_periph_reset_disable(RCU_TIMER7RST); + break; + case TIMER8: + /* reset TIMER8 */ + rcu_periph_reset_enable(RCU_TIMER8RST); + rcu_periph_reset_disable(RCU_TIMER8RST); + break; + case TIMER9: + /* reset TIMER9 */ + rcu_periph_reset_enable(RCU_TIMER9RST); + rcu_periph_reset_disable(RCU_TIMER9RST); + break; + case TIMER10: + /* reset TIMER10 */ + rcu_periph_reset_enable(RCU_TIMER10RST); + rcu_periph_reset_disable(RCU_TIMER10RST); + break; + case TIMER11: + /* reset TIMER11 */ + rcu_periph_reset_enable(RCU_TIMER11RST); + rcu_periph_reset_disable(RCU_TIMER11RST); + break; + case TIMER12: + /* reset TIMER12 */ + rcu_periph_reset_enable(RCU_TIMER12RST); + rcu_periph_reset_disable(RCU_TIMER12RST); + break; + case TIMER13: + /* reset TIMER13 */ + rcu_periph_reset_enable(RCU_TIMER13RST); + rcu_periph_reset_disable(RCU_TIMER13RST); + break; + default: + break; + } +} + +/*! + \brief initialize TIMER init parameter struct with a default value + \param[in] initpara: init parameter struct + \param[out] none + \retval none +*/ +void timer_struct_para_init(timer_parameter_struct* initpara) +{ + /* initialize the init parameter struct member with the default value */ + initpara->prescaler = 0U; + initpara->alignedmode = TIMER_COUNTER_EDGE; + initpara->counterdirection = TIMER_COUNTER_UP; + initpara->period = 65535U; + initpara->clockdivision = TIMER_CKDIV_DIV1; + initpara->repetitioncounter = 0U; +} + +/*! + \brief initialize TIMER counter + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] initpara: init parameter struct + prescaler: prescaler value of the counter clock, 0~65535 + alignedmode: TIMER_COUNTER_EDGE, TIMER_COUNTER_CENTER_DOWN, TIMER_COUNTER_CENTER_UP, + TIMER_COUNTER_CENTER_BOTH + counterdirection: TIMER_COUNTER_UP, TIMER_COUNTER_DOWN + period: counter auto reload value, 0~65535 + clockdivision: TIMER_CKDIV_DIV1, TIMER_CKDIV_DIV2, TIMER_CKDIV_DIV4 + repetitioncounter: counter repetition value, 0~255 + \param[out] none + \retval none +*/ +void timer_init(uint32_t timer_periph, timer_parameter_struct* initpara) +{ + /* configure the counter prescaler value */ + TIMER_PSC(timer_periph) = (uint16_t)initpara->prescaler; + + /* configure the counter direction and aligned mode */ + if((TIMER0 == timer_periph) || (TIMER1 == timer_periph) || (TIMER2 == timer_periph) + || (TIMER3 == timer_periph) || (TIMER4 == timer_periph) || (TIMER7 == timer_periph)){ + TIMER_CTL0(timer_periph) &= (~(uint32_t)(TIMER_CTL0_DIR | TIMER_CTL0_CAM)); + TIMER_CTL0(timer_periph) |= (uint32_t)(initpara->alignedmode & ALIGNEDMODE_MASK); + TIMER_CTL0(timer_periph) |= (uint32_t)(initpara->counterdirection & COUNTERDIRECTION_MASK); + } + + /* configure the autoreload value */ + TIMER_CAR(timer_periph) = (uint32_t)initpara->period; + + if((TIMER5 != timer_periph) && (TIMER6 != timer_periph)){ + /* reset the CKDIV bit */ + TIMER_CTL0(timer_periph) &= (~(uint32_t)TIMER_CTL0_CKDIV); + TIMER_CTL0(timer_periph) |= (uint32_t)(initpara->clockdivision & CLOCKDIVISION_MASK); + } + + if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ + /* configure the repetition counter value */ + TIMER_CREP(timer_periph) = (uint32_t)initpara->repetitioncounter; + } + + /* generate an update event */ + TIMER_SWEVG(timer_periph) |= (uint32_t)TIMER_SWEVG_UPG; +} + +/*! + \brief enable a timer + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval none +*/ +void timer_enable(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_CEN; +} + +/*! + \brief disable a timer + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval none +*/ +void timer_disable(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_CEN; +} + +/*! + \brief enable the auto reload shadow function + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval none +*/ +void timer_auto_reload_shadow_enable(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_ARSE; +} + +/*! + \brief disable the auto reload shadow function + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval none +*/ +void timer_auto_reload_shadow_disable(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_ARSE; +} + +/*! + \brief enable the update event + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval none +*/ +void timer_update_event_enable(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_UPDIS; +} + +/*! + \brief disable the update event + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval none +*/ +void timer_update_event_disable(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) |= (uint32_t) TIMER_CTL0_UPDIS; +} + +/*! + \brief set TIMER counter alignment mode + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] aligned: + only one parameter can be selected which is shown as below: + \arg TIMER_COUNTER_EDGE: edge-aligned mode + \arg TIMER_COUNTER_CENTER_DOWN: center-aligned and counting down assert mode + \arg TIMER_COUNTER_CENTER_UP: center-aligned and counting up assert mode + \arg TIMER_COUNTER_CENTER_BOTH: center-aligned and counting up/down assert mode + \param[out] none + \retval none +*/ +void timer_counter_alignment(uint32_t timer_periph, uint16_t aligned) +{ + TIMER_CTL0(timer_periph) &= (uint32_t)(~TIMER_CTL0_CAM); + TIMER_CTL0(timer_periph) |= (uint32_t)aligned; +} + +/*! + \brief set TIMER counter up direction + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[out] none + \retval none +*/ +void timer_counter_up_direction(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_DIR; +} + +/*! + \brief set TIMER counter down direction + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[out] none + \retval none +*/ +void timer_counter_down_direction(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_DIR; +} + +/*! + \brief configure TIMER prescaler + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] prescaler: prescaler value + \param[in] pscreload: prescaler reload mode + only one parameter can be selected which is shown as below: + \arg TIMER_PSC_RELOAD_NOW: the prescaler is loaded right now + \arg TIMER_PSC_RELOAD_UPDATE: the prescaler is loaded at the next update event + \param[out] none + \retval none +*/ +void timer_prescaler_config(uint32_t timer_periph, uint16_t prescaler, uint32_t pscreload) +{ + TIMER_PSC(timer_periph) = (uint32_t)prescaler; + + if(TIMER_PSC_RELOAD_NOW == pscreload){ + TIMER_SWEVG(timer_periph) |= (uint32_t)TIMER_SWEVG_UPG; + } +} + +/*! + \brief configure TIMER repetition register value + \param[in] timer_periph: TIMERx(x=0,7) + \param[in] repetition: the counter repetition value, 0~255 + \param[out] none + \retval none +*/ +void timer_repetition_value_config(uint32_t timer_periph, uint16_t repetition) +{ + TIMER_CREP(timer_periph) = (uint32_t)repetition; +} + +/*! + \brief configure TIMER autoreload register value + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] autoreload: the counter auto-reload value + \param[out] none + \retval none +*/ +void timer_autoreload_value_config(uint32_t timer_periph, uint16_t autoreload) +{ + TIMER_CAR(timer_periph) = (uint32_t)autoreload; +} + +/*! + \brief configure TIMER counter register value + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] counter: the counter value + \param[out] none + \retval none +*/ +void timer_counter_value_config(uint32_t timer_periph, uint16_t counter) +{ + TIMER_CNT(timer_periph) = (uint32_t)counter; +} + +/*! + \brief read TIMER counter value + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval counter value +*/ +uint32_t timer_counter_read(uint32_t timer_periph) +{ + uint32_t count_value = 0U; + count_value = TIMER_CNT(timer_periph); + return (count_value); +} + +/*! + \brief read TIMER prescaler value + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval prescaler register value +*/ +uint16_t timer_prescaler_read(uint32_t timer_periph) +{ + uint16_t prescaler_value = 0U; + prescaler_value = (uint16_t)(TIMER_PSC(timer_periph)); + return (prescaler_value); +} + +/*! + \brief configure TIMER single pulse mode + \param[in] timer_periph: TIMERx(x=0..8,11) + \param[in] spmode: + only one parameter can be selected which is shown as below: + \arg TIMER_SP_MODE_SINGLE: single pulse mode + \arg TIMER_SP_MODE_REPETITIVE: repetitive pulse mode + \param[out] none + \retval none +*/ +void timer_single_pulse_mode_config(uint32_t timer_periph, uint32_t spmode) +{ + if(TIMER_SP_MODE_SINGLE == spmode){ + TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_SPM; + }else if(TIMER_SP_MODE_REPETITIVE == spmode){ + TIMER_CTL0(timer_periph) &= ~((uint32_t)TIMER_CTL0_SPM); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure TIMER update source + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] update: + only one parameter can be selected which is shown as below: + \arg TIMER_UPDATE_SRC_GLOBAL: update generate by setting of UPG bit or the counter overflow/underflow, + or the slave mode controller trigger + \arg TIMER_UPDATE_SRC_REGULAR: update generate only by counter overflow/underflow + \param[out] none + \retval none +*/ +void timer_update_source_config(uint32_t timer_periph, uint32_t update) +{ + if(TIMER_UPDATE_SRC_REGULAR == update){ + TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_UPS; + }else if(TIMER_UPDATE_SRC_GLOBAL == update){ + TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_UPS; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief enable the TIMER DMA + \param[in] timer_periph: TIMERx(x=0..7) + \param[in] dma: specify which DMA to enable + one or more parameters can be selected which are shown as below: + \arg TIMER_DMA_UPD: update DMA enable, TIMERx(x=0..7) + \arg TIMER_DMA_CH0D: channel 0 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CH1D: channel 1 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CH2D: channel 2 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CH3D: channel 3 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CMTD: channel commutation DMA request enable, TIMERx(x=0,7) + \arg TIMER_DMA_TRGD: trigger DMA enable, TIMERx(x=0..4,7) + \param[out] none + \retval none +*/ +void timer_dma_enable(uint32_t timer_periph, uint16_t dma) +{ + TIMER_DMAINTEN(timer_periph) |= (uint32_t) dma; +} + +/*! + \brief disable the TIMER DMA + \param[in] timer_periph: TIMERxTIMERx(x=0..7) + \param[in] dma: specify which DMA to disable + one or more parameters can be selected which are shown as below: + \arg TIMER_DMA_UPD: update DMA enable, TIMERx(x=0..7) + \arg TIMER_DMA_CH0D: channel 0 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CH1D: channel 1 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CH2D: channel 2 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CH3D: channel 3 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CMTD: channel commutation DMA request enable, TIMERx(x=0,7) + \arg TIMER_DMA_TRGD: trigger DMA enable, TIMERx(x=0..4,7) + \param[out] none + \retval none +*/ +void timer_dma_disable(uint32_t timer_periph, uint16_t dma) +{ + TIMER_DMAINTEN(timer_periph) &= (~(uint32_t)(dma)); +} + +/*! + \brief channel DMA request source selection + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] dma_request: channel DMA request source selection + only one parameter can be selected which is shown as below: + \arg TIMER_DMAREQUEST_CHANNELEVENT: DMA request of channel n is sent when channel n event occurs + \arg TIMER_DMAREQUEST_UPDATEEVENT: DMA request of channel n is sent when update event occurs + \param[out] none + \retval none +*/ +void timer_channel_dma_request_source_select(uint32_t timer_periph, uint32_t dma_request) +{ + if(TIMER_DMAREQUEST_UPDATEEVENT == dma_request){ + TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_DMAS; + }else if(TIMER_DMAREQUEST_CHANNELEVENT == dma_request){ + TIMER_CTL1(timer_periph) &= ~(uint32_t)TIMER_CTL1_DMAS; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure the TIMER DMA transfer + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] dma_baseaddr: + only one parameter can be selected which is shown as below: + \arg TIMER_DMACFG_DMATA_CTL0: DMA transfer address is TIMER_CTL0, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CTL1: DMA transfer address is TIMER_CTL1, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_SMCFG: DMA transfer address is TIMER_SMCFG, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_DMAINTEN: DMA transfer address is TIMER_DMAINTEN, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_INTF: DMA transfer address is TIMER_INTF, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_SWEVG: DMA transfer address is TIMER_SWEVG, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CHCTL0: DMA transfer address is TIMER_CHCTL0, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CHCTL1: DMA transfer address is TIMER_CHCTL1, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CHCTL2: DMA transfer address is TIMER_CHCTL2, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CNT: DMA transfer address is TIMER_CNT, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_PSC: DMA transfer address is TIMER_PSC, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CAR: DMA transfer address is TIMER_CAR, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CREP: DMA transfer address is TIMER_CREP, TIMERx(x=0,7) + \arg TIMER_DMACFG_DMATA_CH0CV: DMA transfer address is TIMER_CH0CV, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CH1CV: DMA transfer address is TIMER_CH1CV, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CH2CV: DMA transfer address is TIMER_CH2CV, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CH3CV: DMA transfer address is TIMER_CH3CV, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CCHP: DMA transfer address is TIMER_CCHP, TIMERx(x=0,7) + \arg TIMER_DMACFG_DMATA_DMACFG: DMA transfer address is TIMER_DMACFG, TIMERx(x=0..4,7) + \param[in] dma_lenth: + only one parameter can be selected which is shown as below: + \arg TIMER_DMACFG_DMATC_xTRANSFER(x=1..18): DMA transfer x time + \param[out] none + \retval none +*/ +void timer_dma_transfer_config(uint32_t timer_periph, uint32_t dma_baseaddr, uint32_t dma_lenth) +{ + TIMER_DMACFG(timer_periph) &= (~(uint32_t)(TIMER_DMACFG_DMATA | TIMER_DMACFG_DMATC)); + TIMER_DMACFG(timer_periph) |= (uint32_t)(dma_baseaddr | dma_lenth); +} + +/*! + \brief software generate events + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] event: the timer software event generation sources + one or more parameters can be selected which are shown as below: + \arg TIMER_EVENT_SRC_UPG: update event generation, TIMERx(x=0..13) + \arg TIMER_EVENT_SRC_CH0G: channel 0 capture or compare event generation, TIMERx(x=0..4,7..13) + \arg TIMER_EVENT_SRC_CH1G: channel 1 capture or compare event generation, TIMERx(x=0..4,7,8,11) + \arg TIMER_EVENT_SRC_CH2G: channel 2 capture or compare event generation, TIMERx(x=0..4,7) + \arg TIMER_EVENT_SRC_CH3G: channel 3 capture or compare event generation, TIMERx(x=0..4,7) + \arg TIMER_EVENT_SRC_CMTG: channel commutation event generation, TIMERx(x=0,7) + \arg TIMER_EVENT_SRC_TRGG: trigger event generation, TIMERx(x=0..4,7,8,11) + \arg TIMER_EVENT_SRC_BRKG: break event generation, TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_event_software_generate(uint32_t timer_periph, uint16_t event) +{ + TIMER_SWEVG(timer_periph) |= (uint32_t)event; +} + +/*! + \brief initialize TIMER break parameter struct with a default value + \param[in] breakpara: TIMER break parameter struct + \param[out] none + \retval none +*/ +void timer_break_struct_para_init(timer_break_parameter_struct* breakpara) +{ + /* initialize the break parameter struct member with the default value */ + breakpara->runoffstate = TIMER_ROS_STATE_DISABLE; + breakpara->ideloffstate = TIMER_IOS_STATE_DISABLE; + breakpara->deadtime = 0U; + breakpara->breakpolarity = TIMER_BREAK_POLARITY_LOW; + breakpara->outputautostate = TIMER_OUTAUTO_DISABLE; + breakpara->protectmode = TIMER_CCHP_PROT_OFF; + breakpara->breakstate = TIMER_BREAK_DISABLE; +} + +/*! + \brief configure TIMER break function + \param[in] timer_periph: TIMERx(x=0,7) + \param[in] breakpara: TIMER break parameter struct + runoffstate: TIMER_ROS_STATE_ENABLE, TIMER_ROS_STATE_DISABLE + ideloffstate: TIMER_IOS_STATE_ENABLE, TIMER_IOS_STATE_DISABLE + deadtime: 0~255 + breakpolarity: TIMER_BREAK_POLARITY_LOW, TIMER_BREAK_POLARITY_HIGH + outputautostate: TIMER_OUTAUTO_ENABLE, TIMER_OUTAUTO_DISABLE + protectmode: TIMER_CCHP_PROT_OFF, TIMER_CCHP_PROT_0, TIMER_CCHP_PROT_1, TIMER_CCHP_PROT_2 + breakstate: TIMER_BREAK_ENABLE, TIMER_BREAK_DISABLE + \param[out] none + \retval none +*/ +void timer_break_config(uint32_t timer_periph, timer_break_parameter_struct* breakpara) +{ + TIMER_CCHP(timer_periph) = (uint32_t)(((uint32_t)(breakpara->runoffstate)) | + ((uint32_t)(breakpara->ideloffstate))| + ((uint32_t)(breakpara->deadtime)) | + ((uint32_t)(breakpara->breakpolarity)) | + ((uint32_t)(breakpara->outputautostate)) | + ((uint32_t)(breakpara->protectmode)) | + ((uint32_t)(breakpara->breakstate))); +} + +/*! + \brief enable TIMER break function + \param[in] timer_periph: TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_break_enable(uint32_t timer_periph) +{ + TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_BRKEN; +} + +/*! + \brief disable TIMER break function + \param[in] timer_periph: TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_break_disable(uint32_t timer_periph) +{ + TIMER_CCHP(timer_periph) &= ~(uint32_t)TIMER_CCHP_BRKEN; +} + +/*! + \brief enable TIMER output automatic function + \param[in] timer_periph: TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_automatic_output_enable(uint32_t timer_periph) +{ + TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_OAEN; +} + +/*! + \brief disable TIMER output automatic function + \param[in] timer_periph: TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_automatic_output_disable(uint32_t timer_periph) +{ + TIMER_CCHP(timer_periph) &= ~(uint32_t)TIMER_CCHP_OAEN; +} + +/*! + \brief enable or disable TIMER primary output function + \param[in] timer_periph: TIMERx(x=0,7) + \param[in] newvalue: ENABLE or DISABLE + \param[out] none + \retval none +*/ +void timer_primary_output_config(uint32_t timer_periph, ControlStatus newvalue) +{ + if(ENABLE == newvalue){ + TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_POEN; + }else{ + TIMER_CCHP(timer_periph) &= (~(uint32_t)TIMER_CCHP_POEN); + } +} + +/*! + \brief enable or disable channel capture/compare control shadow register + \param[in] timer_periph: TIMERx(x=0,7) + \param[in] newvalue: ENABLE or DISABLE + \param[out] none + \retval none +*/ +void timer_channel_control_shadow_config(uint32_t timer_periph, ControlStatus newvalue) +{ + if(ENABLE == newvalue){ + TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_CCSE; + }else{ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_CCSE); + } +} + +/*! + \brief configure TIMER channel control shadow register update control + \param[in] timer_periph: TIMERx(x=0,7) + \param[in] ccuctl: channel control shadow register update control + only one parameter can be selected which is shown as below: + \arg TIMER_UPDATECTL_CCU: the shadow registers update by when CMTG bit is set + \arg TIMER_UPDATECTL_CCUTRI: the shadow registers update by when CMTG bit is set or an rising edge of TRGI occurs + \param[out] none + \retval none +*/ +void timer_channel_control_shadow_update_config(uint32_t timer_periph, uint32_t ccuctl) +{ + if(TIMER_UPDATECTL_CCU == ccuctl){ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_CCUC); + }else if(TIMER_UPDATECTL_CCUTRI == ccuctl){ + TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_CCUC; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief initialize TIMER channel output parameter struct with a default value + \param[in] ocpara: TIMER channel n output parameter struct + \param[out] none + \retval none +*/ +void timer_channel_output_struct_para_init(timer_oc_parameter_struct* ocpara) +{ + /* initialize the channel output parameter struct member with the default value */ + ocpara->outputstate = TIMER_CCX_DISABLE; + ocpara->outputnstate = TIMER_CCXN_DISABLE; + ocpara->ocpolarity = TIMER_OC_POLARITY_HIGH; + ocpara->ocnpolarity = TIMER_OCN_POLARITY_HIGH; + ocpara->ocidlestate = TIMER_OC_IDLE_STATE_LOW; + ocpara->ocnidlestate = TIMER_OCN_IDLE_STATE_LOW; +} + +/*! + \brief configure TIMER channel output function + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] ocpara: TIMER channel output parameter struct + outputstate: TIMER_CCX_ENABLE, TIMER_CCX_DISABLE + outputnstate: TIMER_CCXN_ENABLE, TIMER_CCXN_DISABLE + ocpolarity: TIMER_OC_POLARITY_HIGH, TIMER_OC_POLARITY_LOW + ocnpolarity: TIMER_OCN_POLARITY_HIGH, TIMER_OCN_POLARITY_LOW + ocidlestate: TIMER_OC_IDLE_STATE_LOW, TIMER_OC_IDLE_STATE_HIGH + ocnidlestate: TIMER_OCN_IDLE_STATE_LOW, TIMER_OCN_IDLE_STATE_HIGH + \param[out] none + \retval none +*/ +void timer_channel_output_config(uint32_t timer_periph, uint16_t channel, timer_oc_parameter_struct* ocpara) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + /* reset the CH0EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); + /* set the CH0EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->outputstate; + /* reset the CH0P bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0P); + /* set the CH0P bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->ocpolarity; + + if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ + /* reset the CH0NEN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NEN); + /* set the CH0NEN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->outputnstate; + /* reset the CH0NP bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NP); + /* set the CH0NP bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->ocnpolarity; + /* reset the ISO0 bit */ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO0); + /* set the ISO0 bit */ + TIMER_CTL1(timer_periph) |= (uint32_t)ocpara->ocidlestate; + /* reset the ISO0N bit */ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO0N); + /* set the ISO0N bit */ + TIMER_CTL1(timer_periph) |= (uint32_t)ocpara->ocnidlestate; + } + TIMER_CHCTL0(timer_periph) &= ~(uint32_t)TIMER_CHCTL0_CH0MS; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + /* reset the CH1EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); + /* set the CH1EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputstate) << 4U); + /* reset the CH1P bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1P); + /* set the CH1P bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity) << 4U); + + if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ + /* reset the CH1NEN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NEN); + /* set the CH1NEN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputnstate) << 4U); + /* reset the CH1NP bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NP); + /* set the CH1NP bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnpolarity) << 4U); + /* reset the ISO1 bit */ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO1); + /* set the ISO1 bit */ + TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate) << 2U); + /* reset the ISO1N bit */ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO1N); + /* set the ISO1N bit */ + TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnidlestate) << 2U); + } + TIMER_CHCTL0(timer_periph) &= ~(uint32_t)TIMER_CHCTL0_CH1MS; + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + /* reset the CH2EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN); + /* set the CH2EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputstate) << 8U); + /* reset the CH2P bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2P); + /* set the CH2P bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity) << 8U); + + if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ + /* reset the CH2NEN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NEN); + /* set the CH2NEN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputnstate) << 8U); + /* reset the CH2NP bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NP); + /* set the CH2NP bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnpolarity) << 8U); + /* reset the ISO2 bit */ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO2); + /* set the ISO2 bit */ + TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate) << 4U); + /* reset the ISO2N bit */ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO2N); + /* set the ISO2N bit */ + TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnidlestate) << 4U); + } + TIMER_CHCTL1(timer_periph) &= ~(uint32_t)TIMER_CHCTL1_CH2MS; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + /* reset the CH3EN bit */ + TIMER_CHCTL2(timer_periph) &=(~(uint32_t)TIMER_CHCTL2_CH3EN); + /* set the CH3EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputstate) << 12U); + /* reset the CH3P bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3P); + /* set the CH3P bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity) << 12U); + + if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ + /* reset the ISO3 bit */ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO3); + /* set the ISO3 bit */ + TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate) << 6U); + } + TIMER_CHCTL1(timer_periph) &= ~(uint32_t)TIMER_CHCTL1_CH3MS; + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel output compare mode + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] ocmode: channel output compare mode + only one parameter can be selected which is shown as below: + \arg TIMER_OC_MODE_TIMING: timing mode + \arg TIMER_OC_MODE_ACTIVE: active mode + \arg TIMER_OC_MODE_INACTIVE: inactive mode + \arg TIMER_OC_MODE_TOGGLE: toggle mode + \arg TIMER_OC_MODE_LOW: force low mode + \arg TIMER_OC_MODE_HIGH: force high mode + \arg TIMER_OC_MODE_PWM0: PWM mode 0 + \arg TIMER_OC_MODE_PWM1: PWM mode 1 + \param[out] none + \retval none +*/ +void timer_channel_output_mode_config(uint32_t timer_periph, uint16_t channel, uint16_t ocmode) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMCTL); + TIMER_CHCTL0(timer_periph) |= (uint32_t)ocmode; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMCTL); + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(ocmode) << 8U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMCTL); + TIMER_CHCTL1(timer_periph) |= (uint32_t)ocmode; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMCTL); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(ocmode) << 8U); + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel output pulse value + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] pulse: channel output pulse value + \param[out] none + \retval none +*/ +void timer_channel_output_pulse_value_config(uint32_t timer_periph, uint16_t channel, uint32_t pulse) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CH0CV(timer_periph) = (uint32_t)pulse; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CH1CV(timer_periph) = (uint32_t)pulse; + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CH2CV(timer_periph) = (uint32_t)pulse; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CH3CV(timer_periph) = (uint32_t)pulse; + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel output shadow function + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] ocshadow: channel output shadow state + only one parameter can be selected which is shown as below: + \arg TIMER_OC_SHADOW_ENABLE: channel output shadow state enable + \arg TIMER_OC_SHADOW_DISABLE: channel output shadow state disable + \param[out] none + \retval none +*/ +void timer_channel_output_shadow_config(uint32_t timer_periph, uint16_t channel, uint16_t ocshadow) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMSEN); + TIMER_CHCTL0(timer_periph) |= (uint32_t)ocshadow; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMSEN); + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(ocshadow) << 8U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMSEN); + TIMER_CHCTL1(timer_periph) |= (uint32_t)ocshadow; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMSEN); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(ocshadow) << 8U); + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel output fast function + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] ocfast: channel output fast function + only one parameter can be selected which is shown as below: + \arg TIMER_OC_FAST_ENABLE: channel output fast function enable + \arg TIMER_OC_FAST_DISABLE: channel output fast function disable + \param[out] none + \retval none +*/ +void timer_channel_output_fast_config(uint32_t timer_periph, uint16_t channel, uint16_t ocfast) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMFEN); + TIMER_CHCTL0(timer_periph) |= (uint32_t)ocfast; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMFEN); + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)ocfast << 8U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMFEN); + TIMER_CHCTL1(timer_periph) |= (uint32_t)ocfast; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMFEN); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)ocfast << 8U); + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel output clear function + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] occlear: channel output clear function + only one parameter can be selected which is shown as below: + \arg TIMER_OC_CLEAR_ENABLE: channel output clear function enable + \arg TIMER_OC_CLEAR_DISABLE: channel output clear function disable + \param[out] none + \retval none +*/ +void timer_channel_output_clear_config(uint32_t timer_periph, uint16_t channel, uint16_t occlear) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMCEN); + TIMER_CHCTL0(timer_periph) |= (uint32_t)occlear; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMCEN); + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)occlear << 8U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMCEN); + TIMER_CHCTL1(timer_periph) |= (uint32_t)occlear; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMCEN); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)occlear << 8U); + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel output polarity + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] ocpolarity: channel output polarity + only one parameter can be selected which is shown as below: + \arg TIMER_OC_POLARITY_HIGH: channel output polarity is high + \arg TIMER_OC_POLARITY_LOW: channel output polarity is low + \param[out] none + \retval none +*/ +void timer_channel_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocpolarity) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0P); + TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpolarity; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1P); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 4U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2P); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 8U); + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3P); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 12U); + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel complementary output polarity + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0,7)) + \param[in] ocnpolarity: channel complementary output polarity + only one parameter can be selected which is shown as below: + \arg TIMER_OCN_POLARITY_HIGH: channel complementary output polarity is high + \arg TIMER_OCN_POLARITY_LOW: channel complementary output polarity is low + \param[out] none + \retval none +*/ +void timer_channel_complementary_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnpolarity) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NP); + TIMER_CHCTL2(timer_periph) |= (uint32_t)ocnpolarity; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NP); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnpolarity << 4U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NP); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnpolarity << 8U); + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel enable state + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] state: TIMER channel enable state + only one parameter can be selected which is shown as below: + \arg TIMER_CCX_ENABLE: channel enable + \arg TIMER_CCX_DISABLE: channel disable + \param[out] none + \retval none +*/ +void timer_channel_output_state_config(uint32_t timer_periph, uint16_t channel, uint32_t state) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); + TIMER_CHCTL2(timer_periph) |= (uint32_t)state; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 4U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 8U); + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3EN); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 12U); + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel complementary output enable state + \param[in] timer_periph: TIMERx(x=0,7) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0,7)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0,7)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0,7)) + \param[in] ocnstate: TIMER channel complementary output enable state + only one parameter can be selected which is shown as below: + \arg TIMER_CCXN_ENABLE: channel complementary enable + \arg TIMER_CCXN_DISABLE: channel complementary disable + \param[out] none + \retval none +*/ +void timer_channel_complementary_output_state_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnstate) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NEN); + TIMER_CHCTL2(timer_periph) |= (uint32_t)ocnstate; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NEN); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnstate << 4U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NEN); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnstate << 8U); + break; + default: + break; + } +} + +/*! + \brief initialize TIMER channel input parameter struct with a default value + \param[in] icpara: TIMER channel input parameter struct + \param[out] none + \retval none +*/ +void timer_channel_input_struct_para_init(timer_ic_parameter_struct* icpara) +{ + /* initialize the channel input parameter struct member with the default value */ + icpara->icpolarity = TIMER_IC_POLARITY_RISING; + icpara->icselection = TIMER_IC_SELECTION_DIRECTTI; + icpara->icprescaler = TIMER_IC_PSC_DIV1; + icpara->icfilter = 0U; +} + +/*! + \brief configure TIMER input capture parameter + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] icpara: TIMER channel input parameter struct + icpolarity: TIMER_IC_POLARITY_RISING, TIMER_IC_POLARITY_FALLING, + TIMER_IC_POLARITY_BOTH_EDGE(only for TIMER8~TIMER13) + icselection: TIMER_IC_SELECTION_DIRECTTI, TIMER_IC_SELECTION_INDIRECTTI, + TIMER_IC_SELECTION_ITS + icprescaler: TIMER_IC_PSC_DIV1, TIMER_IC_PSC_DIV2, TIMER_IC_PSC_DIV4, + TIMER_IC_PSC_DIV8 + icfilter: 0~15 + \param[out] none + \retval none +*/ +void timer_input_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct* icpara) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + /* reset the CH0EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); + + /* reset the CH0P and CH0NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP)); + TIMER_CHCTL2(timer_periph) |= (uint32_t)(icpara->icpolarity); + /* reset the CH0MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); + TIMER_CHCTL0(timer_periph) |= (uint32_t)(icpara->icselection); + /* reset the CH0CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 4U); + + /* set the CH0EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; + break; + + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + /* reset the CH1EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); + + /* reset the CH1P and CH1NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP)); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 4U); + /* reset the CH1MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection) << 8U); + /* reset the CH1CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 12U); + + /* set the CH1EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + /* reset the CH2EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN); + + /* reset the CH2P and CH2NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH2P | TIMER_CHCTL2_CH2NP)); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 8U); + + /* reset the CH2MS bit */ + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2MS); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection)); + + /* reset the CH2CAPFLT bit */ + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2CAPFLT); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 4U); + + /* set the CH2EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH2EN; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + /* reset the CH3EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3EN); + + /* reset the CH3P bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH3P)); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 12U); + + /* reset the CH3MS bit */ + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3MS); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection) << 8U); + + /* reset the CH3CAPFLT bit */ + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3CAPFLT); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 12U); + + /* set the CH3EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH3EN; + break; + default: + break; + } + /* configure TIMER channel input capture prescaler value */ + timer_channel_input_capture_prescaler_config(timer_periph, channel, (uint16_t)(icpara->icprescaler)); +} + +/*! + \brief configure TIMER channel input capture prescaler value + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] prescaler: channel input capture prescaler value + only one parameter can be selected which is shown as below: + \arg TIMER_IC_PSC_DIV1: no prescaler + \arg TIMER_IC_PSC_DIV2: divided by 2 + \arg TIMER_IC_PSC_DIV4: divided by 4 + \arg TIMER_IC_PSC_DIV8: divided by 8 + \param[out] none + \retval none +*/ +void timer_channel_input_capture_prescaler_config(uint32_t timer_periph, uint16_t channel, uint16_t prescaler) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPPSC); + TIMER_CHCTL0(timer_periph) |= (uint32_t)prescaler; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPPSC); + TIMER_CHCTL0(timer_periph) |= ((uint32_t)prescaler << 8U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2CAPPSC); + TIMER_CHCTL1(timer_periph) |= (uint32_t)prescaler; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3CAPPSC); + TIMER_CHCTL1(timer_periph) |= ((uint32_t)prescaler << 8U); + break; + default: + break; + } +} + +/*! + \brief read TIMER channel capture compare register value + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[out] none + \retval channel capture compare register value +*/ +uint32_t timer_channel_capture_value_register_read(uint32_t timer_periph, uint16_t channel) +{ + uint32_t count_value = 0U; + + switch(channel){ + case TIMER_CH_0: + /* read TIMER channel 0 capture compare register value */ + count_value = TIMER_CH0CV(timer_periph); + break; + case TIMER_CH_1: + /* read TIMER channel 1 capture compare register value */ + count_value = TIMER_CH1CV(timer_periph); + break; + case TIMER_CH_2: + /* read TIMER channel 2 capture compare register value */ + count_value = TIMER_CH2CV(timer_periph); + break; + case TIMER_CH_3: + /* read TIMER channel 3 capture compare register value */ + count_value = TIMER_CH3CV(timer_periph); + break; + default: + break; + } + return (count_value); +} + +/*! + \brief configure TIMER input pwm capture function + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0 + \arg TIMER_CH_1: TIMER channel 1 + \param[in] icpwm: TIMER channel input pwm parameter struct + icpolarity: TIMER_IC_POLARITY_RISING, TIMER_IC_POLARITY_FALLING + icselection: TIMER_IC_SELECTION_DIRECTTI, TIMER_IC_SELECTION_INDIRECTTI + icprescaler: TIMER_IC_PSC_DIV1, TIMER_IC_PSC_DIV2, TIMER_IC_PSC_DIV4, + TIMER_IC_PSC_DIV8 + icfilter: 0~15 + \param[out] none + \retval none +*/ +void timer_input_pwm_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct* icpwm) +{ + uint16_t icpolarity = 0x0U; + uint16_t icselection = 0x0U; + + /* Set channel input polarity */ + if(TIMER_IC_POLARITY_RISING == icpwm->icpolarity){ + icpolarity = TIMER_IC_POLARITY_FALLING; + }else{ + icpolarity = TIMER_IC_POLARITY_RISING; + } + /* Set channel input mode selection */ + if(TIMER_IC_SELECTION_DIRECTTI == icpwm->icselection){ + icselection = TIMER_IC_SELECTION_INDIRECTTI; + }else{ + icselection = TIMER_IC_SELECTION_DIRECTTI; + } + + if(TIMER_CH_0 == channel){ + /* reset the CH0EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); + /* reset the CH0P and CH0NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP)); + /* set the CH0P and CH0NP bits */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)(icpwm->icpolarity); + /* reset the CH0MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); + /* set the CH0MS bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)(icpwm->icselection); + /* reset the CH0CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); + /* set the CH0CAPFLT bit */ + TIMER_CHCTL0(timer_periph) |= ((uint32_t)(icpwm->icfilter) << 4U); + /* set the CH0EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; + /* configure TIMER channel input capture prescaler value */ + timer_channel_input_capture_prescaler_config(timer_periph, TIMER_CH_0, (uint16_t)(icpwm->icprescaler)); + + /* reset the CH1EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); + /* reset the CH1P and CH1NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP)); + /* set the CH1P and CH1NP bits */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)icpolarity<< 4U); + /* reset the CH1MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); + /* set the CH1MS bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)icselection << 8U); + /* reset the CH1CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); + /* set the CH1CAPFLT bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icfilter) << 12U); + /* set the CH1EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; + /* configure TIMER channel input capture prescaler value */ + timer_channel_input_capture_prescaler_config(timer_periph, TIMER_CH_1, (uint16_t)(icpwm->icprescaler)); + }else{ + /* reset the CH1EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); + /* reset the CH1P and CH1NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP)); + /* set the CH1P and CH1NP bits */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icpolarity) << 4U); + /* reset the CH1MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); + /* set the CH1MS bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icselection) << 8U); + /* reset the CH1CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); + /* set the CH1CAPFLT bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icfilter) << 12U); + /* set the CH1EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; + /* configure TIMER channel input capture prescaler value */ + timer_channel_input_capture_prescaler_config(timer_periph, TIMER_CH_1, (uint16_t)(icpwm->icprescaler)); + + /* reset the CH0EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); + /* reset the CH0P and CH0NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP)); + /* set the CH0P and CH0NP bits */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)icpolarity; + /* reset the CH0MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); + /* set the CH0MS bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)icselection; + /* reset the CH0CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); + /* set the CH0CAPFLT bit */ + TIMER_CHCTL0(timer_periph) |= ((uint32_t)(icpwm->icfilter) << 4U); + /* set the CH0EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; + /* configure TIMER channel input capture prescaler value */ + timer_channel_input_capture_prescaler_config(timer_periph, TIMER_CH_0, (uint16_t)(icpwm->icprescaler)); + } +} + +/*! + \brief configure TIMER hall sensor mode + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] hallmode: + only one parameter can be selected which is shown as below: + \arg TIMER_HALLINTERFACE_ENABLE: TIMER hall sensor mode enable + \arg TIMER_HALLINTERFACE_DISABLE: TIMER hall sensor mode disable + \param[out] none + \retval none +*/ +void timer_hall_mode_config(uint32_t timer_periph, uint32_t hallmode) +{ + if(TIMER_HALLINTERFACE_ENABLE == hallmode){ + TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_TI0S; + }else if(TIMER_HALLINTERFACE_DISABLE == hallmode){ + TIMER_CTL1(timer_periph) &= ~(uint32_t)TIMER_CTL1_TI0S; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief select TIMER input trigger source + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[in] intrigger: + only one parameter can be selected which is shown as below: + \arg TIMER_SMCFG_TRGSEL_ITI0: internal trigger 0(TIMERx(x=0..4,7,8,11)) + \arg TIMER_SMCFG_TRGSEL_ITI1: internal trigger 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_SMCFG_TRGSEL_ITI2: internal trigger 2(TIMERx(x=0..4,7,8,11)) + \arg TIMER_SMCFG_TRGSEL_ITI3: internal trigger 3(TIMERx(x=0..4,7,8,11)) + \arg TIMER_SMCFG_TRGSEL_CI0F_ED: TI0 edge detector(TIMERx(x=0..4,7,8,11)) + \arg TIMER_SMCFG_TRGSEL_CI0FE0: filtered TIMER input 0(TIMERx(x=0..4,7,8,11)) + \arg TIMER_SMCFG_TRGSEL_CI1FE1: filtered TIMER input 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_SMCFG_TRGSEL_ETIFP: filtered external trigger input(TIMERx(x=0..4,7)) + \param[out] none + \retval none +*/ +void timer_input_trigger_source_select(uint32_t timer_periph, uint32_t intrigger) +{ + TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_TRGS); + TIMER_SMCFG(timer_periph) |= (uint32_t)intrigger; +} + +/*! + \brief select TIMER master mode output trigger source + \param[in] timer_periph: TIMERx(x=0..7) + \param[in] outrigger: + only one parameter can be selected which is shown as below: + \arg TIMER_TRI_OUT_SRC_RESET: the UPG bit as trigger output(TIMERx(x=0..7)) + \arg TIMER_TRI_OUT_SRC_ENABLE: the counter enable signal TIMER_CTL0_CEN as trigger output(TIMERx(x=0..7)) + \arg TIMER_TRI_OUT_SRC_UPDATE: update event as trigger output(TIMERx(x=0..7)) + \arg TIMER_TRI_OUT_SRC_CH0: a capture or a compare match occurred in channel 0 as trigger output TRGO(TIMERx(x=0..4,7)) + \arg TIMER_TRI_OUT_SRC_O0CPRE: O0CPRE as trigger output(TIMERx(x=0..4,7)) + \arg TIMER_TRI_OUT_SRC_O1CPRE: O1CPRE as trigger output(TIMERx(x=0..4,7)) + \arg TIMER_TRI_OUT_SRC_O2CPRE: O2CPRE as trigger output(TIMERx(x=0..4,7)) + \arg TIMER_TRI_OUT_SRC_O3CPRE: O3CPRE as trigger output(TIMERx(x=0..4,7)) + \param[out] none + \retval none +*/ +void timer_master_output_trigger_source_select(uint32_t timer_periph, uint32_t outrigger) +{ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_MMC); + TIMER_CTL1(timer_periph) |= (uint32_t)outrigger; +} + +/*! + \brief select TIMER slave mode + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[in] slavemode: + only one parameter can be selected which is shown as below: + \arg TIMER_SLAVE_MODE_DISABLE: slave mode disable + \arg TIMER_QUAD_DECODER_MODE0: quadrature decoder mode 0 + \arg TIMER_QUAD_DECODER_MODE1: quadrature decoder mode 1 + \arg TIMER_QUAD_DECODER_MODE2: quadrature decoder mode 2 + \arg TIMER_SLAVE_MODE_RESTART: restart mode + \arg TIMER_SLAVE_MODE_PAUSE: pause mode + \arg TIMER_SLAVE_MODE_EVENT: event mode + \arg TIMER_SLAVE_MODE_EXTERNAL0: external clock mode 0 + \param[out] none + \retval none +*/ + +void timer_slave_mode_select(uint32_t timer_periph, uint32_t slavemode) +{ + TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC); + TIMER_SMCFG(timer_periph) |= (uint32_t)slavemode; +} + +/*! + \brief configure TIMER master slave mode + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[in] masterslave: + only one parameter can be selected which is shown as below: + \arg TIMER_MASTER_SLAVE_MODE_ENABLE: master slave mode enable + \arg TIMER_MASTER_SLAVE_MODE_DISABLE: master slave mode disable + \param[out] none + \retval none +*/ +void timer_master_slave_mode_config(uint32_t timer_periph, uint32_t masterslave) +{ + if(TIMER_MASTER_SLAVE_MODE_ENABLE == masterslave){ + TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SMCFG_MSM; + }else if(TIMER_MASTER_SLAVE_MODE_DISABLE == masterslave){ + TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_MSM; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure TIMER external trigger input + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] extprescaler: + only one parameter can be selected which is shown as below: + \arg TIMER_EXT_TRI_PSC_OFF: no divided + \arg TIMER_EXT_TRI_PSC_DIV2: divided by 2 + \arg TIMER_EXT_TRI_PSC_DIV4: divided by 4 + \arg TIMER_EXT_TRI_PSC_DIV8: divided by 8 + \param[in] extpolarity: + only one parameter can be selected which is shown as below: + \arg TIMER_ETP_FALLING: active low or falling edge active + \arg TIMER_ETP_RISING: active high or rising edge active + \param[in] extfilter: a value between 0 and 15 + \param[out] none + \retval none +*/ +void timer_external_trigger_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter) +{ + TIMER_SMCFG(timer_periph) &= (~(uint32_t)(TIMER_SMCFG_ETP | TIMER_SMCFG_ETPSC | TIMER_SMCFG_ETFC)); + TIMER_SMCFG(timer_periph) |= (uint32_t)(extprescaler | extpolarity); + TIMER_SMCFG(timer_periph) |= (uint32_t)(extfilter << 8U); +} + +/*! + \brief configure TIMER quadrature decoder mode + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] decomode: + only one parameter can be selected which is shown as below: + \arg TIMER_QUAD_DECODER_MODE0: counter counts on CI0FE0 edge depending on CI1FE1 level + \arg TIMER_QUAD_DECODER_MODE1: counter counts on CI1FE1 edge depending on CI0FE0 level + \arg TIMER_QUAD_DECODER_MODE2: counter counts on both CI0FE0 and CI1FE1 edges depending on the level of the other input + \param[in] ic0polarity: + only one parameter can be selected which is shown as below: + \arg TIMER_IC_POLARITY_RISING: capture rising edge + \arg TIMER_IC_POLARITY_FALLING: capture falling edge + \param[in] ic1polarity: + only one parameter can be selected which is shown as below: + \arg TIMER_IC_POLARITY_RISING: capture rising edge + \arg TIMER_IC_POLARITY_FALLING: capture falling edge + \param[out] none + \retval none +*/ +void timer_quadrature_decoder_mode_config(uint32_t timer_periph, uint32_t decomode, uint16_t ic0polarity, uint16_t ic1polarity) +{ + /* configure the quadrature decoder mode */ + TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC); + TIMER_SMCFG(timer_periph) |= (uint32_t)decomode; + /* configure input capture selection */ + TIMER_CHCTL0(timer_periph) &= (uint32_t)(((~(uint32_t)TIMER_CHCTL0_CH0MS)) & ((~(uint32_t)TIMER_CHCTL0_CH1MS))); + TIMER_CHCTL0(timer_periph) |= (uint32_t)(TIMER_IC_SELECTION_DIRECTTI | ((uint32_t)TIMER_IC_SELECTION_DIRECTTI << 8U)); + /* configure channel input capture polarity */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP)); + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP)); + TIMER_CHCTL2(timer_periph) |= ((uint32_t)ic0polarity | ((uint32_t)ic1polarity << 4U)); +} + +/*! + \brief configure TIMER internal clock mode + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[out] none + \retval none +*/ +void timer_internal_clock_config(uint32_t timer_periph) +{ + TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC; +} + +/*! + \brief configure TIMER the internal trigger as external clock input + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[in] intrigger: + only one parameter can be selected which is shown as below: + \arg TIMER_SMCFG_TRGSEL_ITI0: internal trigger 0 + \arg TIMER_SMCFG_TRGSEL_ITI1: internal trigger 1 + \arg TIMER_SMCFG_TRGSEL_ITI2: internal trigger 2 + \arg TIMER_SMCFG_TRGSEL_ITI3: internal trigger 3 + \param[out] none + \retval none +*/ +void timer_internal_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t intrigger) +{ + timer_input_trigger_source_select(timer_periph, intrigger); + TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC; + TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SLAVE_MODE_EXTERNAL0; +} + +/*! + \brief configure TIMER the external trigger as external clock input + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[in] extrigger: + only one parameter can be selected which is shown as below: + \arg TIMER_SMCFG_TRGSEL_CI0F_ED: TI0 edge detector + \arg TIMER_SMCFG_TRGSEL_CI0FE0: filtered TIMER input 0 + \arg TIMER_SMCFG_TRGSEL_CI1FE1: filtered TIMER input 1 + \param[in] extpolarity: + only one parameter can be selected which is shown as below: + \arg TIMER_IC_POLARITY_RISING: active low or falling edge active + \arg TIMER_IC_POLARITY_FALLING: active high or rising edge active + \param[in] extfilter: a value between 0 and 15 + \param[out] none + \retval none +*/ +void timer_external_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t extrigger, uint16_t extpolarity, uint32_t extfilter) +{ + if(TIMER_SMCFG_TRGSEL_CI1FE1 == extrigger){ + /* reset the CH1EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); + /* reset the CH1NP bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP)); + /* set the CH1NP bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)extpolarity << 4U); + /* reset the CH1MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); + /* set the CH1MS bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)TIMER_IC_SELECTION_DIRECTTI << 8U); + /* reset the CH1CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); + /* set the CH1CAPFLT bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)(extfilter << 12U); + /* set the CH1EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; + }else{ + /* reset the CH0EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); + /* reset the CH0P and CH0NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP)); + /* set the CH0P and CH0NP bits */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)extpolarity; + /* reset the CH0MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); + /* set the CH0MS bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)TIMER_IC_SELECTION_DIRECTTI; + /* reset the CH0CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); + /* reset the CH0CAPFLT bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)(extfilter << 4U); + /* set the CH0EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; + } + /* select TIMER input trigger source */ + timer_input_trigger_source_select(timer_periph, extrigger); + /* reset the SMC bit */ + TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC); + /* set the SMC bit */ + TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SLAVE_MODE_EXTERNAL0; +} + +/*! + \brief configure TIMER the external clock mode0 + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[in] extprescaler: + only one parameter can be selected which is shown as below: + \arg TIMER_EXT_TRI_PSC_OFF: no divided + \arg TIMER_EXT_TRI_PSC_DIV2: divided by 2 + \arg TIMER_EXT_TRI_PSC_DIV4: divided by 4 + \arg TIMER_EXT_TRI_PSC_DIV8: divided by 8 + \param[in] extpolarity: + only one parameter can be selected which is shown as below: + \arg TIMER_ETP_FALLING: active low or falling edge active + \arg TIMER_ETP_RISING: active high or rising edge active + \param[in] extfilter: a value between 0 and 15 + \param[out] none + \retval none +*/ +void timer_external_clock_mode0_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter) +{ + /* configure TIMER external trigger input */ + timer_external_trigger_config(timer_periph, extprescaler, extpolarity, extfilter); + /* reset the SMC bit,TRGS bit */ + TIMER_SMCFG(timer_periph) &= (~(uint32_t)(TIMER_SMCFG_SMC | TIMER_SMCFG_TRGS)); + /* set the SMC bit,TRGS bit */ + TIMER_SMCFG(timer_periph) |= (uint32_t)(TIMER_SLAVE_MODE_EXTERNAL0 | TIMER_SMCFG_TRGSEL_ETIFP); +} + +/*! + \brief configure TIMER the external clock mode1 + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] extprescaler: + only one parameter can be selected which is shown as below: + \arg TIMER_EXT_TRI_PSC_OFF: no divided + \arg TIMER_EXT_TRI_PSC_DIV2: divided by 2 + \arg TIMER_EXT_TRI_PSC_DIV4: divided by 4 + \arg TIMER_EXT_TRI_PSC_DIV8: divided by 8 + \param[in] extpolarity: + only one parameter can be selected which is shown as below: + \arg TIMER_ETP_FALLING: active low or falling edge active + \arg TIMER_ETP_RISING: active high or rising edge active + \param[in] extfilter: a value between 0 and 15 + \param[out] none + \retval none +*/ +void timer_external_clock_mode1_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter) +{ + /* configure TIMER external trigger input */ + timer_external_trigger_config(timer_periph, extprescaler, extpolarity, extfilter); + TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SMCFG_SMC1; +} + +/*! + \brief disable TIMER the external clock mode1 + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[out] none + \retval none +*/ +void timer_external_clock_mode1_disable(uint32_t timer_periph) +{ + TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC1; +} + +/*! + \brief configure TIMER write CHxVAL register selection + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] ccsel: + only one parameter can be selected which is shown as below: + \arg TIMER_CHVSEL_DISABLE: no effect + \arg TIMER_CHVSEL_ENABLE: when write the CHxVAL register, if the write value is same as the CHxVAL value, the write access is ignored + \param[out] none + \retval none +*/ +void timer_write_chxval_register_config(uint32_t timer_periph, uint16_t ccsel) +{ + if(TIMER_CHVSEL_ENABLE == ccsel){ + TIMER_CFG(timer_periph) |= (uint32_t)TIMER_CFG_CHVSEL; + }else if(TIMER_CHVSEL_DISABLE == ccsel){ + TIMER_CFG(timer_periph) &= ~(uint32_t)TIMER_CFG_CHVSEL; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure TIMER output value selection + \param[in] timer_periph: TIMERx(x=0,7) + \param[in] outsel: + only one parameter can be selected which is shown as below: + \arg TIMER_OUTSEL_DISABLE: no effect + \arg TIMER_OUTSEL_ENABLE: if POEN and IOS is 0, the output disabled + \param[out] none + \retval none +*/ +void timer_output_value_selection_config(uint32_t timer_periph, uint16_t outsel) +{ + if(TIMER_OUTSEL_ENABLE == outsel){ + TIMER_CFG(timer_periph) |= (uint32_t)TIMER_CFG_OUTSEL; + }else if(TIMER_OUTSEL_DISABLE == outsel){ + TIMER_CFG(timer_periph) &= ~(uint32_t)TIMER_CFG_OUTSEL; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief enable the TIMER interrupt + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] interrupt: specify which interrupt to enable + one or more parameters can be selected which are shown as below: + \arg TIMER_INT_UP: update interrupt enable, TIMERx(x=0..13) + \arg TIMER_INT_CH0: channel 0 interrupt enable, TIMERx(x=0..4,7..13) + \arg TIMER_INT_CH1: channel 1 interrupt enable, TIMERx(x=0..4,7,8,11) + \arg TIMER_INT_CH2: channel 2 interrupt enable, TIMERx(x=0..4,7) + \arg TIMER_INT_CH3: channel 3 interrupt enable, TIMERx(x=0..4,7) + \arg TIMER_INT_CMT: commutation interrupt enable, TIMERx(x=0,7) + \arg TIMER_INT_TRG: trigger interrupt enable, TIMERx(x=0..4,7,8,11) + \arg TIMER_INT_BRK: break interrupt enable, TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_interrupt_enable(uint32_t timer_periph, uint32_t interrupt) +{ + TIMER_DMAINTEN(timer_periph) |= (uint32_t) interrupt; +} + +/*! + \brief disable the TIMER interrupt + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] interrupt: specify which interrupt to disable + one or more parameters can be selected which are shown as below: + \arg TIMER_INT_UP: update interrupt enable, TIMERx(x=0..13) + \arg TIMER_INT_CH0: channel 0 interrupt enable, TIMERx(x=0..4,7..13) + \arg TIMER_INT_CH1: channel 1 interrupt enable, TIMERx(x=0..4,7,8,11) + \arg TIMER_INT_CH2: channel 2 interrupt enable, TIMERx(x=0..4,7) + \arg TIMER_INT_CH3: channel 3 interrupt enable , TIMERx(x=0..4,7) + \arg TIMER_INT_CMT: commutation interrupt enable, TIMERx(x=0,7) + \arg TIMER_INT_TRG: trigger interrupt enable, TIMERx(x=0..4,7,8,11) + \arg TIMER_INT_BRK: break interrupt enable, TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_interrupt_disable(uint32_t timer_periph, uint32_t interrupt) +{ + TIMER_DMAINTEN(timer_periph) &= (~(uint32_t)interrupt); +} + +/*! + \brief get timer interrupt flag + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] interrupt: the timer interrupt bits + only one parameter can be selected which is shown as below: + \arg TIMER_INT_FLAG_UP: update interrupt flag, TIMERx(x=0..13) + \arg TIMER_INT_FLAG_CH0: channel 0 interrupt flag, TIMERx(x=0..4,7..13) + \arg TIMER_INT_FLAG_CH1: channel 1 interrupt flag, TIMERx(x=0..4,7,8,11) + \arg TIMER_INT_FLAG_CH2: channel 2 interrupt flag, TIMERx(x=0..4,7) + \arg TIMER_INT_FLAG_CH3: channel 3 interrupt flag, TIMERx(x=0..4,7) + \arg TIMER_INT_FLAG_CMT: channel commutation interrupt flag, TIMERx(x=0,7) + \arg TIMER_INT_FLAG_TRG: trigger interrupt flag, TIMERx(x=0,7,8,11) + \arg TIMER_INT_FLAG_BRK: break interrupt flag, TIMERx(x=0,7) + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus timer_interrupt_flag_get(uint32_t timer_periph, uint32_t interrupt) +{ + uint32_t val; + val = (TIMER_DMAINTEN(timer_periph) & interrupt); + if((RESET != (TIMER_INTF(timer_periph) & interrupt)) && (RESET != val)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear TIMER interrupt flag + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] interrupt: the timer interrupt bits + one or more parameters can be selected which are shown as below: + \arg TIMER_INT_FLAG_UP: update interrupt flag, TIMERx(x=0..13) + \arg TIMER_INT_FLAG_CH0: channel 0 interrupt flag, TIMERx(x=0..4,7..13) + \arg TIMER_INT_FLAG_CH1: channel 1 interrupt flag, TIMERx(x=0..4,7,8,11) + \arg TIMER_INT_FLAG_CH2: channel 2 interrupt flag, TIMERx(x=0..4,7) + \arg TIMER_INT_FLAG_CH3: channel 3 interrupt flag, TIMERx(x=0..4,7) + \arg TIMER_INT_FLAG_CMT: channel commutation interrupt flag, TIMERx(x=0,7) + \arg TIMER_INT_FLAG_TRG: trigger interrupt flag, TIMERx(x=0,7,8,11) + \arg TIMER_INT_FLAG_BRK: break interrupt flag, TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_interrupt_flag_clear(uint32_t timer_periph, uint32_t interrupt) +{ + TIMER_INTF(timer_periph) = (~(uint32_t)interrupt); +} + +/*! + \brief get TIMER flags + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] flag: the timer interrupt flags + only one parameter can be selected which is shown as below: + \arg TIMER_FLAG_UP: update flag, TIMERx(x=0..13) + \arg TIMER_FLAG_CH0: channel 0 flag, TIMERx(x=0..4,7..13) + \arg TIMER_FLAG_CH1: channel 1 flag, TIMERx(x=0..4,7,8,11) + \arg TIMER_FLAG_CH2: channel 2 flag, TIMERx(x=0..4,7) + \arg TIMER_FLAG_CH3: channel 3 flag, TIMERx(x=0..4,7) + \arg TIMER_FLAG_CMT: channel commutation flag, TIMERx(x=0,7) + \arg TIMER_FLAG_TRG: trigger flag, TIMERx(x=0,7,8,11) + \arg TIMER_FLAG_BRK: break flag, TIMERx(x=0,7) + \arg TIMER_FLAG_CH0O: channel 0 overcapture flag, TIMERx(x=0..4,7..11) + \arg TIMER_FLAG_CH1O: channel 1 overcapture flag, TIMERx(x=0..4,7,8,11) + \arg TIMER_FLAG_CH2O: channel 2 overcapture flag, TIMERx(x=0..4,7) + \arg TIMER_FLAG_CH3O: channel 3 overcapture flag, TIMERx(x=0..4,7) + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus timer_flag_get(uint32_t timer_periph, uint32_t flag) +{ + if(RESET != (TIMER_INTF(timer_periph) & flag)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear TIMER flags + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] flag: the timer interrupt flags + one or more parameters can be selected which are shown as below: + \arg TIMER_FLAG_UP: update flag, TIMERx(x=0..13) + \arg TIMER_FLAG_CH0: channel 0 flag, TIMERx(x=0..4,7..13) + \arg TIMER_FLAG_CH1: channel 1 flag, TIMERx(x=0..4,7,8,11) + \arg TIMER_FLAG_CH2: channel 2 flag, TIMERx(x=0..4,7) + \arg TIMER_FLAG_CH3: channel 3 flag, TIMERx(x=0..4,7) + \arg TIMER_FLAG_CMT: channel commutation flag, TIMERx(x=0,7) + \arg TIMER_FLAG_TRG: trigger flag, TIMERx(x=0,7,8,11) + \arg TIMER_FLAG_BRK: break flag, TIMERx(x=0,7) + \arg TIMER_FLAG_CH0O: channel 0 overcapture flag, TIMERx(x=0..4,7..11) + \arg TIMER_FLAG_CH1O: channel 1 overcapture flag, TIMERx(x=0..4,7,8,11) + \arg TIMER_FLAG_CH2O: channel 2 overcapture flag, TIMERx(x=0..4,7) + \arg TIMER_FLAG_CH3O: channel 3 overcapture flag, TIMERx(x=0..4,7) + \param[out] none + \retval none +*/ +void timer_flag_clear(uint32_t timer_periph, uint32_t flag) +{ + TIMER_INTF(timer_periph) = (~(uint32_t)flag); +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_timer.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_timer.c.base@1.0.0 new file mode 100644 index 0000000..5112573 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_timer.c.base@1.0.0 @@ -0,0 +1,2039 @@ +/*! + \file gd32c10x_timer.c + \brief TIMER driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_timer.h" + +/* TIMER init parameter mask */ +#define ALIGNEDMODE_MASK ((uint32_t)0x00000060U) /*!< TIMER init parameter aligne dmode mask */ +#define COUNTERDIRECTION_MASK ((uint32_t)0x00000010U) /*!< TIMER init parameter counter direction mask */ +#define CLOCKDIVISION_MASK ((uint32_t)0x00000300U) /*!< TIMER init parameter clock division value mask */ + +/*! + \brief deinit a timer + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval none +*/ +void timer_deinit(uint32_t timer_periph) +{ + switch(timer_periph){ + case TIMER0: + /* reset TIMER0 */ + rcu_periph_reset_enable(RCU_TIMER0RST); + rcu_periph_reset_disable(RCU_TIMER0RST); + break; + case TIMER1: + /* reset TIMER1 */ + rcu_periph_reset_enable(RCU_TIMER1RST); + rcu_periph_reset_disable(RCU_TIMER1RST); + break; + case TIMER2: + /* reset TIMER2 */ + rcu_periph_reset_enable(RCU_TIMER2RST); + rcu_periph_reset_disable(RCU_TIMER2RST); + break; + case TIMER3: + /* reset TIMER3 */ + rcu_periph_reset_enable(RCU_TIMER3RST); + rcu_periph_reset_disable(RCU_TIMER3RST); + break; + case TIMER4: + /* reset TIMER4 */ + rcu_periph_reset_enable(RCU_TIMER4RST); + rcu_periph_reset_disable(RCU_TIMER4RST); + break; + case TIMER5: + /* reset TIMER5 */ + rcu_periph_reset_enable(RCU_TIMER5RST); + rcu_periph_reset_disable(RCU_TIMER5RST); + break; + case TIMER6: + /* reset TIMER6 */ + rcu_periph_reset_enable(RCU_TIMER6RST); + rcu_periph_reset_disable(RCU_TIMER6RST); + break; + case TIMER7: + /* reset TIMER7 */ + rcu_periph_reset_enable(RCU_TIMER7RST); + rcu_periph_reset_disable(RCU_TIMER7RST); + break; + case TIMER8: + /* reset TIMER8 */ + rcu_periph_reset_enable(RCU_TIMER8RST); + rcu_periph_reset_disable(RCU_TIMER8RST); + break; + case TIMER9: + /* reset TIMER9 */ + rcu_periph_reset_enable(RCU_TIMER9RST); + rcu_periph_reset_disable(RCU_TIMER9RST); + break; + case TIMER10: + /* reset TIMER10 */ + rcu_periph_reset_enable(RCU_TIMER10RST); + rcu_periph_reset_disable(RCU_TIMER10RST); + break; + case TIMER11: + /* reset TIMER11 */ + rcu_periph_reset_enable(RCU_TIMER11RST); + rcu_periph_reset_disable(RCU_TIMER11RST); + break; + case TIMER12: + /* reset TIMER12 */ + rcu_periph_reset_enable(RCU_TIMER12RST); + rcu_periph_reset_disable(RCU_TIMER12RST); + break; + case TIMER13: + /* reset TIMER13 */ + rcu_periph_reset_enable(RCU_TIMER13RST); + rcu_periph_reset_disable(RCU_TIMER13RST); + break; + default: + break; + } +} + +/*! + \brief initialize TIMER init parameter struct with a default value + \param[in] initpara: init parameter struct + \param[out] none + \retval none +*/ +void timer_struct_para_init(timer_parameter_struct* initpara) +{ + /* initialize the init parameter struct member with the default value */ + initpara->prescaler = 0U; + initpara->alignedmode = TIMER_COUNTER_EDGE; + initpara->counterdirection = TIMER_COUNTER_UP; + initpara->period = 65535U; + initpara->clockdivision = TIMER_CKDIV_DIV1; + initpara->repetitioncounter = 0U; +} + +/*! + \brief initialize TIMER counter + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] initpara: init parameter struct + prescaler: prescaler value of the counter clock, 0~65535 + alignedmode: TIMER_COUNTER_EDGE, TIMER_COUNTER_CENTER_DOWN, TIMER_COUNTER_CENTER_UP, + TIMER_COUNTER_CENTER_BOTH + counterdirection: TIMER_COUNTER_UP, TIMER_COUNTER_DOWN + period: counter auto reload value, 0~65535 + clockdivision: TIMER_CKDIV_DIV1, TIMER_CKDIV_DIV2, TIMER_CKDIV_DIV4 + repetitioncounter: counter repetition value, 0~255 + \param[out] none + \retval none +*/ +void timer_init(uint32_t timer_periph, timer_parameter_struct* initpara) +{ + /* configure the counter prescaler value */ + TIMER_PSC(timer_periph) = (uint16_t)initpara->prescaler; + + /* configure the counter direction and aligned mode */ + if((TIMER0 == timer_periph) || (TIMER1 == timer_periph) || (TIMER2 == timer_periph) + || (TIMER3 == timer_periph) || (TIMER4 == timer_periph) || (TIMER7 == timer_periph)){ + TIMER_CTL0(timer_periph) &= (~(uint32_t)(TIMER_CTL0_DIR | TIMER_CTL0_CAM)); + TIMER_CTL0(timer_periph) |= (uint32_t)(initpara->alignedmode & ALIGNEDMODE_MASK); + TIMER_CTL0(timer_periph) |= (uint32_t)(initpara->counterdirection & COUNTERDIRECTION_MASK); + } + + /* configure the autoreload value */ + TIMER_CAR(timer_periph) = (uint32_t)initpara->period; + + if((TIMER5 != timer_periph) && (TIMER6 != timer_periph)){ + /* reset the CKDIV bit */ + TIMER_CTL0(timer_periph) &= (~(uint32_t)TIMER_CTL0_CKDIV); + TIMER_CTL0(timer_periph) |= (uint32_t)(initpara->clockdivision & CLOCKDIVISION_MASK); + } + + if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ + /* configure the repetition counter value */ + TIMER_CREP(timer_periph) = (uint32_t)initpara->repetitioncounter; + } + + /* generate an update event */ + TIMER_SWEVG(timer_periph) |= (uint32_t)TIMER_SWEVG_UPG; +} + +/*! + \brief enable a timer + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval none +*/ +void timer_enable(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_CEN; +} + +/*! + \brief disable a timer + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval none +*/ +void timer_disable(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_CEN; +} + +/*! + \brief enable the auto reload shadow function + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval none +*/ +void timer_auto_reload_shadow_enable(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_ARSE; +} + +/*! + \brief disable the auto reload shadow function + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval none +*/ +void timer_auto_reload_shadow_disable(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_ARSE; +} + +/*! + \brief enable the update event + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval none +*/ +void timer_update_event_enable(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_UPDIS; +} + +/*! + \brief disable the update event + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval none +*/ +void timer_update_event_disable(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) |= (uint32_t) TIMER_CTL0_UPDIS; +} + +/*! + \brief set TIMER counter alignment mode + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] aligned: + only one parameter can be selected which is shown as below: + \arg TIMER_COUNTER_EDGE: edge-aligned mode + \arg TIMER_COUNTER_CENTER_DOWN: center-aligned and counting down assert mode + \arg TIMER_COUNTER_CENTER_UP: center-aligned and counting up assert mode + \arg TIMER_COUNTER_CENTER_BOTH: center-aligned and counting up/down assert mode + \param[out] none + \retval none +*/ +void timer_counter_alignment(uint32_t timer_periph, uint16_t aligned) +{ + TIMER_CTL0(timer_periph) &= (uint32_t)(~TIMER_CTL0_CAM); + TIMER_CTL0(timer_periph) |= (uint32_t)aligned; +} + +/*! + \brief set TIMER counter up direction + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[out] none + \retval none +*/ +void timer_counter_up_direction(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_DIR; +} + +/*! + \brief set TIMER counter down direction + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[out] none + \retval none +*/ +void timer_counter_down_direction(uint32_t timer_periph) +{ + TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_DIR; +} + +/*! + \brief configure TIMER prescaler + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] prescaler: prescaler value + \param[in] pscreload: prescaler reload mode + only one parameter can be selected which is shown as below: + \arg TIMER_PSC_RELOAD_NOW: the prescaler is loaded right now + \arg TIMER_PSC_RELOAD_UPDATE: the prescaler is loaded at the next update event + \param[out] none + \retval none +*/ +void timer_prescaler_config(uint32_t timer_periph, uint16_t prescaler, uint32_t pscreload) +{ + TIMER_PSC(timer_periph) = (uint32_t)prescaler; + + if(TIMER_PSC_RELOAD_NOW == pscreload){ + TIMER_SWEVG(timer_periph) |= (uint32_t)TIMER_SWEVG_UPG; + } +} + +/*! + \brief configure TIMER repetition register value + \param[in] timer_periph: TIMERx(x=0,7) + \param[in] repetition: the counter repetition value, 0~255 + \param[out] none + \retval none +*/ +void timer_repetition_value_config(uint32_t timer_periph, uint16_t repetition) +{ + TIMER_CREP(timer_periph) = (uint32_t)repetition; +} + +/*! + \brief configure TIMER autoreload register value + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] autoreload: the counter auto-reload value + \param[out] none + \retval none +*/ +void timer_autoreload_value_config(uint32_t timer_periph, uint16_t autoreload) +{ + TIMER_CAR(timer_periph) = (uint32_t)autoreload; +} + +/*! + \brief configure TIMER counter register value + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] counter: the counter value + \param[out] none + \retval none +*/ +void timer_counter_value_config(uint32_t timer_periph, uint16_t counter) +{ + TIMER_CNT(timer_periph) = (uint32_t)counter; +} + +/*! + \brief read TIMER counter value + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval counter value +*/ +uint32_t timer_counter_read(uint32_t timer_periph) +{ + uint32_t count_value = 0U; + count_value = TIMER_CNT(timer_periph); + return (count_value); +} + +/*! + \brief read TIMER prescaler value + \param[in] timer_periph: TIMERx(x=0..13) + \param[out] none + \retval prescaler register value +*/ +uint16_t timer_prescaler_read(uint32_t timer_periph) +{ + uint16_t prescaler_value = 0U; + prescaler_value = (uint16_t)(TIMER_PSC(timer_periph)); + return (prescaler_value); +} + +/*! + \brief configure TIMER single pulse mode + \param[in] timer_periph: TIMERx(x=0..8,11) + \param[in] spmode: + only one parameter can be selected which is shown as below: + \arg TIMER_SP_MODE_SINGLE: single pulse mode + \arg TIMER_SP_MODE_REPETITIVE: repetitive pulse mode + \param[out] none + \retval none +*/ +void timer_single_pulse_mode_config(uint32_t timer_periph, uint32_t spmode) +{ + if(TIMER_SP_MODE_SINGLE == spmode){ + TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_SPM; + }else if(TIMER_SP_MODE_REPETITIVE == spmode){ + TIMER_CTL0(timer_periph) &= ~((uint32_t)TIMER_CTL0_SPM); + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure TIMER update source + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] update: + only one parameter can be selected which is shown as below: + \arg TIMER_UPDATE_SRC_GLOBAL: update generate by setting of UPG bit or the counter overflow/underflow, + or the slave mode controller trigger + \arg TIMER_UPDATE_SRC_REGULAR: update generate only by counter overflow/underflow + \param[out] none + \retval none +*/ +void timer_update_source_config(uint32_t timer_periph, uint32_t update) +{ + if(TIMER_UPDATE_SRC_REGULAR == update){ + TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_UPS; + }else if(TIMER_UPDATE_SRC_GLOBAL == update){ + TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_UPS; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief enable the TIMER DMA + \param[in] timer_periph: TIMERx(x=0..7) + \param[in] dma: specify which DMA to enable + one or more parameters can be selected which are shown as below: + \arg TIMER_DMA_UPD: update DMA enable, TIMERx(x=0..7) + \arg TIMER_DMA_CH0D: channel 0 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CH1D: channel 1 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CH2D: channel 2 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CH3D: channel 3 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CMTD: channel commutation DMA request enable, TIMERx(x=0,7) + \arg TIMER_DMA_TRGD: trigger DMA enable, TIMERx(x=0..4,7) + \param[out] none + \retval none +*/ +void timer_dma_enable(uint32_t timer_periph, uint16_t dma) +{ + TIMER_DMAINTEN(timer_periph) |= (uint32_t) dma; +} + +/*! + \brief disable the TIMER DMA + \param[in] timer_periph: TIMERxTIMERx(x=0..7) + \param[in] dma: specify which DMA to disable + one or more parameters can be selected which are shown as below: + \arg TIMER_DMA_UPD: update DMA enable, TIMERx(x=0..7) + \arg TIMER_DMA_CH0D: channel 0 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CH1D: channel 1 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CH2D: channel 2 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CH3D: channel 3 DMA enable, TIMERx(x=0..4,7) + \arg TIMER_DMA_CMTD: channel commutation DMA request enable, TIMERx(x=0,7) + \arg TIMER_DMA_TRGD: trigger DMA enable, TIMERx(x=0..4,7) + \param[out] none + \retval none +*/ +void timer_dma_disable(uint32_t timer_periph, uint16_t dma) +{ + TIMER_DMAINTEN(timer_periph) &= (~(uint32_t)(dma)); +} + +/*! + \brief channel DMA request source selection + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] dma_request: channel DMA request source selection + only one parameter can be selected which is shown as below: + \arg TIMER_DMAREQUEST_CHANNELEVENT: DMA request of channel n is sent when channel n event occurs + \arg TIMER_DMAREQUEST_UPDATEEVENT: DMA request of channel n is sent when update event occurs + \param[out] none + \retval none +*/ +void timer_channel_dma_request_source_select(uint32_t timer_periph, uint32_t dma_request) +{ + if(TIMER_DMAREQUEST_UPDATEEVENT == dma_request){ + TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_DMAS; + }else if(TIMER_DMAREQUEST_CHANNELEVENT == dma_request){ + TIMER_CTL1(timer_periph) &= ~(uint32_t)TIMER_CTL1_DMAS; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure the TIMER DMA transfer + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] dma_baseaddr: + only one parameter can be selected which is shown as below: + \arg TIMER_DMACFG_DMATA_CTL0: DMA transfer address is TIMER_CTL0, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CTL1: DMA transfer address is TIMER_CTL1, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_SMCFG: DMA transfer address is TIMER_SMCFG, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_DMAINTEN: DMA transfer address is TIMER_DMAINTEN, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_INTF: DMA transfer address is TIMER_INTF, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_SWEVG: DMA transfer address is TIMER_SWEVG, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CHCTL0: DMA transfer address is TIMER_CHCTL0, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CHCTL1: DMA transfer address is TIMER_CHCTL1, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CHCTL2: DMA transfer address is TIMER_CHCTL2, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CNT: DMA transfer address is TIMER_CNT, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_PSC: DMA transfer address is TIMER_PSC, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CAR: DMA transfer address is TIMER_CAR, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CREP: DMA transfer address is TIMER_CREP, TIMERx(x=0,7) + \arg TIMER_DMACFG_DMATA_CH0CV: DMA transfer address is TIMER_CH0CV, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CH1CV: DMA transfer address is TIMER_CH1CV, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CH2CV: DMA transfer address is TIMER_CH2CV, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CH3CV: DMA transfer address is TIMER_CH3CV, TIMERx(x=0..4,7) + \arg TIMER_DMACFG_DMATA_CCHP: DMA transfer address is TIMER_CCHP, TIMERx(x=0,7) + \arg TIMER_DMACFG_DMATA_DMACFG: DMA transfer address is TIMER_DMACFG, TIMERx(x=0..4,7) + \param[in] dma_lenth: + only one parameter can be selected which is shown as below: + \arg TIMER_DMACFG_DMATC_xTRANSFER(x=1..18): DMA transfer x time + \param[out] none + \retval none +*/ +void timer_dma_transfer_config(uint32_t timer_periph, uint32_t dma_baseaddr, uint32_t dma_lenth) +{ + TIMER_DMACFG(timer_periph) &= (~(uint32_t)(TIMER_DMACFG_DMATA | TIMER_DMACFG_DMATC)); + TIMER_DMACFG(timer_periph) |= (uint32_t)(dma_baseaddr | dma_lenth); +} + +/*! + \brief software generate events + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] event: the timer software event generation sources + one or more parameters can be selected which are shown as below: + \arg TIMER_EVENT_SRC_UPG: update event generation, TIMERx(x=0..13) + \arg TIMER_EVENT_SRC_CH0G: channel 0 capture or compare event generation, TIMERx(x=0..4,7..13) + \arg TIMER_EVENT_SRC_CH1G: channel 1 capture or compare event generation, TIMERx(x=0..4,7,8,11) + \arg TIMER_EVENT_SRC_CH2G: channel 2 capture or compare event generation, TIMERx(x=0..4,7) + \arg TIMER_EVENT_SRC_CH3G: channel 3 capture or compare event generation, TIMERx(x=0..4,7) + \arg TIMER_EVENT_SRC_CMTG: channel commutation event generation, TIMERx(x=0,7) + \arg TIMER_EVENT_SRC_TRGG: trigger event generation, TIMERx(x=0..4,7,8,11) + \arg TIMER_EVENT_SRC_BRKG: break event generation, TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_event_software_generate(uint32_t timer_periph, uint16_t event) +{ + TIMER_SWEVG(timer_periph) |= (uint32_t)event; +} + +/*! + \brief initialize TIMER break parameter struct with a default value + \param[in] breakpara: TIMER break parameter struct + \param[out] none + \retval none +*/ +void timer_break_struct_para_init(timer_break_parameter_struct* breakpara) +{ + /* initialize the break parameter struct member with the default value */ + breakpara->runoffstate = TIMER_ROS_STATE_DISABLE; + breakpara->ideloffstate = TIMER_IOS_STATE_DISABLE; + breakpara->deadtime = 0U; + breakpara->breakpolarity = TIMER_BREAK_POLARITY_LOW; + breakpara->outputautostate = TIMER_OUTAUTO_DISABLE; + breakpara->protectmode = TIMER_CCHP_PROT_OFF; + breakpara->breakstate = TIMER_BREAK_DISABLE; +} + +/*! + \brief configure TIMER break function + \param[in] timer_periph: TIMERx(x=0,7) + \param[in] breakpara: TIMER break parameter struct + runoffstate: TIMER_ROS_STATE_ENABLE, TIMER_ROS_STATE_DISABLE + ideloffstate: TIMER_IOS_STATE_ENABLE, TIMER_IOS_STATE_DISABLE + deadtime: 0~255 + breakpolarity: TIMER_BREAK_POLARITY_LOW, TIMER_BREAK_POLARITY_HIGH + outputautostate: TIMER_OUTAUTO_ENABLE, TIMER_OUTAUTO_DISABLE + protectmode: TIMER_CCHP_PROT_OFF, TIMER_CCHP_PROT_0, TIMER_CCHP_PROT_1, TIMER_CCHP_PROT_2 + breakstate: TIMER_BREAK_ENABLE, TIMER_BREAK_DISABLE + \param[out] none + \retval none +*/ +void timer_break_config(uint32_t timer_periph, timer_break_parameter_struct* breakpara) +{ + TIMER_CCHP(timer_periph) = (uint32_t)(((uint32_t)(breakpara->runoffstate)) | + ((uint32_t)(breakpara->ideloffstate))| + ((uint32_t)(breakpara->deadtime)) | + ((uint32_t)(breakpara->breakpolarity)) | + ((uint32_t)(breakpara->outputautostate)) | + ((uint32_t)(breakpara->protectmode)) | + ((uint32_t)(breakpara->breakstate))); +} + +/*! + \brief enable TIMER break function + \param[in] timer_periph: TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_break_enable(uint32_t timer_periph) +{ + TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_BRKEN; +} + +/*! + \brief disable TIMER break function + \param[in] timer_periph: TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_break_disable(uint32_t timer_periph) +{ + TIMER_CCHP(timer_periph) &= ~(uint32_t)TIMER_CCHP_BRKEN; +} + +/*! + \brief enable TIMER output automatic function + \param[in] timer_periph: TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_automatic_output_enable(uint32_t timer_periph) +{ + TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_OAEN; +} + +/*! + \brief disable TIMER output automatic function + \param[in] timer_periph: TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_automatic_output_disable(uint32_t timer_periph) +{ + TIMER_CCHP(timer_periph) &= ~(uint32_t)TIMER_CCHP_OAEN; +} + +/*! + \brief enable or disable TIMER primary output function + \param[in] timer_periph: TIMERx(x=0,7) + \param[in] newvalue: ENABLE or DISABLE + \param[out] none + \retval none +*/ +void timer_primary_output_config(uint32_t timer_periph, ControlStatus newvalue) +{ + if(ENABLE == newvalue){ + TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_POEN; + }else{ + TIMER_CCHP(timer_periph) &= (~(uint32_t)TIMER_CCHP_POEN); + } +} + +/*! + \brief enable or disable channel capture/compare control shadow register + \param[in] timer_periph: TIMERx(x=0,7) + \param[in] newvalue: ENABLE or DISABLE + \param[out] none + \retval none +*/ +void timer_channel_control_shadow_config(uint32_t timer_periph, ControlStatus newvalue) +{ + if(ENABLE == newvalue){ + TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_CCSE; + }else{ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_CCSE); + } +} + +/*! + \brief configure TIMER channel control shadow register update control + \param[in] timer_periph: TIMERx(x=0,7) + \param[in] ccuctl: channel control shadow register update control + only one parameter can be selected which is shown as below: + \arg TIMER_UPDATECTL_CCU: the shadow registers update by when CMTG bit is set + \arg TIMER_UPDATECTL_CCUTRI: the shadow registers update by when CMTG bit is set or an rising edge of TRGI occurs + \param[out] none + \retval none +*/ +void timer_channel_control_shadow_update_config(uint32_t timer_periph, uint32_t ccuctl) +{ + if(TIMER_UPDATECTL_CCU == ccuctl){ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_CCUC); + }else if(TIMER_UPDATECTL_CCUTRI == ccuctl){ + TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_CCUC; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief initialize TIMER channel output parameter struct with a default value + \param[in] ocpara: TIMER channel n output parameter struct + \param[out] none + \retval none +*/ +void timer_channel_output_struct_para_init(timer_oc_parameter_struct* ocpara) +{ + /* initialize the channel output parameter struct member with the default value */ + ocpara->outputstate = TIMER_CCX_DISABLE; + ocpara->outputnstate = TIMER_CCXN_DISABLE; + ocpara->ocpolarity = TIMER_OC_POLARITY_HIGH; + ocpara->ocnpolarity = TIMER_OCN_POLARITY_HIGH; + ocpara->ocidlestate = TIMER_OC_IDLE_STATE_LOW; + ocpara->ocnidlestate = TIMER_OCN_IDLE_STATE_LOW; +} + +/*! + \brief configure TIMER channel output function + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] ocpara: TIMER channel output parameter struct + outputstate: TIMER_CCX_ENABLE, TIMER_CCX_DISABLE + outputnstate: TIMER_CCXN_ENABLE, TIMER_CCXN_DISABLE + ocpolarity: TIMER_OC_POLARITY_HIGH, TIMER_OC_POLARITY_LOW + ocnpolarity: TIMER_OCN_POLARITY_HIGH, TIMER_OCN_POLARITY_LOW + ocidlestate: TIMER_OC_IDLE_STATE_LOW, TIMER_OC_IDLE_STATE_HIGH + ocnidlestate: TIMER_OCN_IDLE_STATE_LOW, TIMER_OCN_IDLE_STATE_HIGH + \param[out] none + \retval none +*/ +void timer_channel_output_config(uint32_t timer_periph, uint16_t channel, timer_oc_parameter_struct* ocpara) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + /* reset the CH0EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); + /* set the CH0EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->outputstate; + /* reset the CH0P bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0P); + /* set the CH0P bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->ocpolarity; + + if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ + /* reset the CH0NEN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NEN); + /* set the CH0NEN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->outputnstate; + /* reset the CH0NP bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NP); + /* set the CH0NP bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->ocnpolarity; + /* reset the ISO0 bit */ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO0); + /* set the ISO0 bit */ + TIMER_CTL1(timer_periph) |= (uint32_t)ocpara->ocidlestate; + /* reset the ISO0N bit */ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO0N); + /* set the ISO0N bit */ + TIMER_CTL1(timer_periph) |= (uint32_t)ocpara->ocnidlestate; + } + TIMER_CHCTL0(timer_periph) &= ~(uint32_t)TIMER_CHCTL0_CH0MS; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + /* reset the CH1EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); + /* set the CH1EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputstate) << 4U); + /* reset the CH1P bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1P); + /* set the CH1P bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity) << 4U); + + if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ + /* reset the CH1NEN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NEN); + /* set the CH1NEN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputnstate) << 4U); + /* reset the CH1NP bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NP); + /* set the CH1NP bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnpolarity) << 4U); + /* reset the ISO1 bit */ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO1); + /* set the ISO1 bit */ + TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate) << 2U); + /* reset the ISO1N bit */ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO1N); + /* set the ISO1N bit */ + TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnidlestate) << 2U); + } + TIMER_CHCTL0(timer_periph) &= ~(uint32_t)TIMER_CHCTL0_CH1MS; + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + /* reset the CH2EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN); + /* set the CH2EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputstate) << 8U); + /* reset the CH2P bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2P); + /* set the CH2P bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity) << 8U); + + if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ + /* reset the CH2NEN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NEN); + /* set the CH2NEN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputnstate) << 8U); + /* reset the CH2NP bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NP); + /* set the CH2NP bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnpolarity) << 8U); + /* reset the ISO2 bit */ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO2); + /* set the ISO2 bit */ + TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate) << 4U); + /* reset the ISO2N bit */ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO2N); + /* set the ISO2N bit */ + TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnidlestate) << 4U); + } + TIMER_CHCTL1(timer_periph) &= ~(uint32_t)TIMER_CHCTL1_CH2MS; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + /* reset the CH3EN bit */ + TIMER_CHCTL2(timer_periph) &=(~(uint32_t)TIMER_CHCTL2_CH3EN); + /* set the CH3EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputstate) << 12U); + /* reset the CH3P bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3P); + /* set the CH3P bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity) << 12U); + + if((TIMER0 == timer_periph) || (TIMER7 == timer_periph)){ + /* reset the ISO3 bit */ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO3); + /* set the ISO3 bit */ + TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate) << 6U); + } + TIMER_CHCTL1(timer_periph) &= ~(uint32_t)TIMER_CHCTL1_CH3MS; + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel output compare mode + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] ocmode: channel output compare mode + only one parameter can be selected which is shown as below: + \arg TIMER_OC_MODE_TIMING: timing mode + \arg TIMER_OC_MODE_ACTIVE: active mode + \arg TIMER_OC_MODE_INACTIVE: inactive mode + \arg TIMER_OC_MODE_TOGGLE: toggle mode + \arg TIMER_OC_MODE_LOW: force low mode + \arg TIMER_OC_MODE_HIGH: force high mode + \arg TIMER_OC_MODE_PWM0: PWM mode 0 + \arg TIMER_OC_MODE_PWM1: PWM mode 1 + \param[out] none + \retval none +*/ +void timer_channel_output_mode_config(uint32_t timer_periph, uint16_t channel, uint16_t ocmode) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMCTL); + TIMER_CHCTL0(timer_periph) |= (uint32_t)ocmode; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMCTL); + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(ocmode) << 8U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMCTL); + TIMER_CHCTL1(timer_periph) |= (uint32_t)ocmode; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMCTL); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(ocmode) << 8U); + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel output pulse value + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] pulse: channel output pulse value + \param[out] none + \retval none +*/ +void timer_channel_output_pulse_value_config(uint32_t timer_periph, uint16_t channel, uint32_t pulse) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CH0CV(timer_periph) = (uint32_t)pulse; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CH1CV(timer_periph) = (uint32_t)pulse; + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CH2CV(timer_periph) = (uint32_t)pulse; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CH3CV(timer_periph) = (uint32_t)pulse; + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel output shadow function + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] ocshadow: channel output shadow state + only one parameter can be selected which is shown as below: + \arg TIMER_OC_SHADOW_ENABLE: channel output shadow state enable + \arg TIMER_OC_SHADOW_DISABLE: channel output shadow state disable + \param[out] none + \retval none +*/ +void timer_channel_output_shadow_config(uint32_t timer_periph, uint16_t channel, uint16_t ocshadow) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMSEN); + TIMER_CHCTL0(timer_periph) |= (uint32_t)ocshadow; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMSEN); + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(ocshadow) << 8U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMSEN); + TIMER_CHCTL1(timer_periph) |= (uint32_t)ocshadow; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMSEN); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(ocshadow) << 8U); + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel output fast function + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] ocfast: channel output fast function + only one parameter can be selected which is shown as below: + \arg TIMER_OC_FAST_ENABLE: channel output fast function enable + \arg TIMER_OC_FAST_DISABLE: channel output fast function disable + \param[out] none + \retval none +*/ +void timer_channel_output_fast_config(uint32_t timer_periph, uint16_t channel, uint16_t ocfast) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMFEN); + TIMER_CHCTL0(timer_periph) |= (uint32_t)ocfast; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMFEN); + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)ocfast << 8U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMFEN); + TIMER_CHCTL1(timer_periph) |= (uint32_t)ocfast; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMFEN); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)ocfast << 8U); + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel output clear function + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] occlear: channel output clear function + only one parameter can be selected which is shown as below: + \arg TIMER_OC_CLEAR_ENABLE: channel output clear function enable + \arg TIMER_OC_CLEAR_DISABLE: channel output clear function disable + \param[out] none + \retval none +*/ +void timer_channel_output_clear_config(uint32_t timer_periph, uint16_t channel, uint16_t occlear) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMCEN); + TIMER_CHCTL0(timer_periph) |= (uint32_t)occlear; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMCEN); + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)occlear << 8U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMCEN); + TIMER_CHCTL1(timer_periph) |= (uint32_t)occlear; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMCEN); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)occlear << 8U); + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel output polarity + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] ocpolarity: channel output polarity + only one parameter can be selected which is shown as below: + \arg TIMER_OC_POLARITY_HIGH: channel output polarity is high + \arg TIMER_OC_POLARITY_LOW: channel output polarity is low + \param[out] none + \retval none +*/ +void timer_channel_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocpolarity) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0P); + TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpolarity; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1P); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 4U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2P); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 8U); + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3P); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 12U); + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel complementary output polarity + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0,7)) + \param[in] ocnpolarity: channel complementary output polarity + only one parameter can be selected which is shown as below: + \arg TIMER_OCN_POLARITY_HIGH: channel complementary output polarity is high + \arg TIMER_OCN_POLARITY_LOW: channel complementary output polarity is low + \param[out] none + \retval none +*/ +void timer_channel_complementary_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnpolarity) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NP); + TIMER_CHCTL2(timer_periph) |= (uint32_t)ocnpolarity; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NP); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnpolarity << 4U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NP); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnpolarity << 8U); + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel enable state + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] state: TIMER channel enable state + only one parameter can be selected which is shown as below: + \arg TIMER_CCX_ENABLE: channel enable + \arg TIMER_CCX_DISABLE: channel disable + \param[out] none + \retval none +*/ +void timer_channel_output_state_config(uint32_t timer_periph, uint16_t channel, uint32_t state) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); + TIMER_CHCTL2(timer_periph) |= (uint32_t)state; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 4U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 8U); + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3EN); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 12U); + break; + default: + break; + } +} + +/*! + \brief configure TIMER channel complementary output enable state + \param[in] timer_periph: TIMERx(x=0,7) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0,7)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0,7)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0,7)) + \param[in] ocnstate: TIMER channel complementary output enable state + only one parameter can be selected which is shown as below: + \arg TIMER_CCXN_ENABLE: channel complementary enable + \arg TIMER_CCXN_DISABLE: channel complementary disable + \param[out] none + \retval none +*/ +void timer_channel_complementary_output_state_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnstate) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NEN); + TIMER_CHCTL2(timer_periph) |= (uint32_t)ocnstate; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NEN); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnstate << 4U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NEN); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnstate << 8U); + break; + default: + break; + } +} + +/*! + \brief initialize TIMER channel input parameter struct with a default value + \param[in] icpara: TIMER channel input parameter struct + \param[out] none + \retval none +*/ +void timer_channel_input_struct_para_init(timer_ic_parameter_struct* icpara) +{ + /* initialize the channel input parameter struct member with the default value */ + icpara->icpolarity = TIMER_IC_POLARITY_RISING; + icpara->icselection = TIMER_IC_SELECTION_DIRECTTI; + icpara->icprescaler = TIMER_IC_PSC_DIV1; + icpara->icfilter = 0U; +} + +/*! + \brief configure TIMER input capture parameter + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] icpara: TIMER channel input parameter struct + icpolarity: TIMER_IC_POLARITY_RISING, TIMER_IC_POLARITY_FALLING, + TIMER_IC_POLARITY_BOTH_EDGE(only for TIMER8~TIMER13) + icselection: TIMER_IC_SELECTION_DIRECTTI, TIMER_IC_SELECTION_INDIRECTTI, + TIMER_IC_SELECTION_ITS + icprescaler: TIMER_IC_PSC_DIV1, TIMER_IC_PSC_DIV2, TIMER_IC_PSC_DIV4, + TIMER_IC_PSC_DIV8 + icfilter: 0~15 + \param[out] none + \retval none +*/ +void timer_input_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct* icpara) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + /* reset the CH0EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); + + /* reset the CH0P and CH0NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP)); + TIMER_CHCTL2(timer_periph) |= (uint32_t)(icpara->icpolarity); + /* reset the CH0MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); + TIMER_CHCTL0(timer_periph) |= (uint32_t)(icpara->icselection); + /* reset the CH0CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 4U); + + /* set the CH0EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; + break; + + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + /* reset the CH1EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); + + /* reset the CH1P and CH1NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP)); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 4U); + /* reset the CH1MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection) << 8U); + /* reset the CH1CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 12U); + + /* set the CH1EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + /* reset the CH2EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN); + + /* reset the CH2P and CH2NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH2P | TIMER_CHCTL2_CH2NP)); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 8U); + + /* reset the CH2MS bit */ + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2MS); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection)); + + /* reset the CH2CAPFLT bit */ + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2CAPFLT); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 4U); + + /* set the CH2EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH2EN; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + /* reset the CH3EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3EN); + + /* reset the CH3P bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH3P)); + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 12U); + + /* reset the CH3MS bit */ + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3MS); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection) << 8U); + + /* reset the CH3CAPFLT bit */ + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3CAPFLT); + TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 12U); + + /* set the CH3EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH3EN; + break; + default: + break; + } + /* configure TIMER channel input capture prescaler value */ + timer_channel_input_capture_prescaler_config(timer_periph, channel, (uint16_t)(icpara->icprescaler)); +} + +/*! + \brief configure TIMER channel input capture prescaler value + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[in] prescaler: channel input capture prescaler value + only one parameter can be selected which is shown as below: + \arg TIMER_IC_PSC_DIV1: no prescaler + \arg TIMER_IC_PSC_DIV2: divided by 2 + \arg TIMER_IC_PSC_DIV4: divided by 4 + \arg TIMER_IC_PSC_DIV8: divided by 8 + \param[out] none + \retval none +*/ +void timer_channel_input_capture_prescaler_config(uint32_t timer_periph, uint16_t channel, uint16_t prescaler) +{ + switch(channel){ + /* configure TIMER_CH_0 */ + case TIMER_CH_0: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPPSC); + TIMER_CHCTL0(timer_periph) |= (uint32_t)prescaler; + break; + /* configure TIMER_CH_1 */ + case TIMER_CH_1: + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPPSC); + TIMER_CHCTL0(timer_periph) |= ((uint32_t)prescaler << 8U); + break; + /* configure TIMER_CH_2 */ + case TIMER_CH_2: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2CAPPSC); + TIMER_CHCTL1(timer_periph) |= (uint32_t)prescaler; + break; + /* configure TIMER_CH_3 */ + case TIMER_CH_3: + TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3CAPPSC); + TIMER_CHCTL1(timer_periph) |= ((uint32_t)prescaler << 8U); + break; + default: + break; + } +} + +/*! + \brief read TIMER channel capture compare register value + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4,7..13)) + \arg TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4,7)) + \arg TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4,7)) + \param[out] none + \retval channel capture compare register value +*/ +uint32_t timer_channel_capture_value_register_read(uint32_t timer_periph, uint16_t channel) +{ + uint32_t count_value = 0U; + + switch(channel){ + case TIMER_CH_0: + /* read TIMER channel 0 capture compare register value */ + count_value = TIMER_CH0CV(timer_periph); + break; + case TIMER_CH_1: + /* read TIMER channel 1 capture compare register value */ + count_value = TIMER_CH1CV(timer_periph); + break; + case TIMER_CH_2: + /* read TIMER channel 2 capture compare register value */ + count_value = TIMER_CH2CV(timer_periph); + break; + case TIMER_CH_3: + /* read TIMER channel 3 capture compare register value */ + count_value = TIMER_CH3CV(timer_periph); + break; + default: + break; + } + return (count_value); +} + +/*! + \brief configure TIMER input pwm capture function + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[in] channel: + only one parameter can be selected which is shown as below: + \arg TIMER_CH_0: TIMER channel 0 + \arg TIMER_CH_1: TIMER channel 1 + \param[in] icpwm: TIMER channel input pwm parameter struct + icpolarity: TIMER_IC_POLARITY_RISING, TIMER_IC_POLARITY_FALLING + icselection: TIMER_IC_SELECTION_DIRECTTI, TIMER_IC_SELECTION_INDIRECTTI + icprescaler: TIMER_IC_PSC_DIV1, TIMER_IC_PSC_DIV2, TIMER_IC_PSC_DIV4, + TIMER_IC_PSC_DIV8 + icfilter: 0~15 + \param[out] none + \retval none +*/ +void timer_input_pwm_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct* icpwm) +{ + uint16_t icpolarity = 0x0U; + uint16_t icselection = 0x0U; + + /* Set channel input polarity */ + if(TIMER_IC_POLARITY_RISING == icpwm->icpolarity){ + icpolarity = TIMER_IC_POLARITY_FALLING; + }else{ + icpolarity = TIMER_IC_POLARITY_RISING; + } + /* Set channel input mode selection */ + if(TIMER_IC_SELECTION_DIRECTTI == icpwm->icselection){ + icselection = TIMER_IC_SELECTION_INDIRECTTI; + }else{ + icselection = TIMER_IC_SELECTION_DIRECTTI; + } + + if(TIMER_CH_0 == channel){ + /* reset the CH0EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); + /* reset the CH0P and CH0NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP)); + /* set the CH0P and CH0NP bits */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)(icpwm->icpolarity); + /* reset the CH0MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); + /* set the CH0MS bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)(icpwm->icselection); + /* reset the CH0CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); + /* set the CH0CAPFLT bit */ + TIMER_CHCTL0(timer_periph) |= ((uint32_t)(icpwm->icfilter) << 4U); + /* set the CH0EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; + /* configure TIMER channel input capture prescaler value */ + timer_channel_input_capture_prescaler_config(timer_periph, TIMER_CH_0, (uint16_t)(icpwm->icprescaler)); + + /* reset the CH1EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); + /* reset the CH1P and CH1NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP)); + /* set the CH1P and CH1NP bits */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)icpolarity<< 4U); + /* reset the CH1MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); + /* set the CH1MS bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)icselection << 8U); + /* reset the CH1CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); + /* set the CH1CAPFLT bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icfilter) << 12U); + /* set the CH1EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; + /* configure TIMER channel input capture prescaler value */ + timer_channel_input_capture_prescaler_config(timer_periph, TIMER_CH_1, (uint16_t)(icpwm->icprescaler)); + }else{ + /* reset the CH1EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); + /* reset the CH1P and CH1NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP)); + /* set the CH1P and CH1NP bits */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icpolarity) << 4U); + /* reset the CH1MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); + /* set the CH1MS bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icselection) << 8U); + /* reset the CH1CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); + /* set the CH1CAPFLT bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icfilter) << 12U); + /* set the CH1EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; + /* configure TIMER channel input capture prescaler value */ + timer_channel_input_capture_prescaler_config(timer_periph, TIMER_CH_1, (uint16_t)(icpwm->icprescaler)); + + /* reset the CH0EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); + /* reset the CH0P and CH0NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP)); + /* set the CH0P and CH0NP bits */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)icpolarity; + /* reset the CH0MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); + /* set the CH0MS bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)icselection; + /* reset the CH0CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); + /* set the CH0CAPFLT bit */ + TIMER_CHCTL0(timer_periph) |= ((uint32_t)(icpwm->icfilter) << 4U); + /* set the CH0EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; + /* configure TIMER channel input capture prescaler value */ + timer_channel_input_capture_prescaler_config(timer_periph, TIMER_CH_0, (uint16_t)(icpwm->icprescaler)); + } +} + +/*! + \brief configure TIMER hall sensor mode + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] hallmode: + only one parameter can be selected which is shown as below: + \arg TIMER_HALLINTERFACE_ENABLE: TIMER hall sensor mode enable + \arg TIMER_HALLINTERFACE_DISABLE: TIMER hall sensor mode disable + \param[out] none + \retval none +*/ +void timer_hall_mode_config(uint32_t timer_periph, uint32_t hallmode) +{ + if(TIMER_HALLINTERFACE_ENABLE == hallmode){ + TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_TI0S; + }else if(TIMER_HALLINTERFACE_DISABLE == hallmode){ + TIMER_CTL1(timer_periph) &= ~(uint32_t)TIMER_CTL1_TI0S; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief select TIMER input trigger source + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[in] intrigger: + only one parameter can be selected which is shown as below: + \arg TIMER_SMCFG_TRGSEL_ITI0: internal trigger 0(TIMERx(x=0..4,7,8,11)) + \arg TIMER_SMCFG_TRGSEL_ITI1: internal trigger 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_SMCFG_TRGSEL_ITI2: internal trigger 2(TIMERx(x=0..4,7,8,11)) + \arg TIMER_SMCFG_TRGSEL_ITI3: internal trigger 3(TIMERx(x=0..4,7,8,11)) + \arg TIMER_SMCFG_TRGSEL_CI0F_ED: TI0 edge detector(TIMERx(x=0..4,7,8,11)) + \arg TIMER_SMCFG_TRGSEL_CI0FE0: filtered TIMER input 0(TIMERx(x=0..4,7,8,11)) + \arg TIMER_SMCFG_TRGSEL_CI1FE1: filtered TIMER input 1(TIMERx(x=0..4,7,8,11)) + \arg TIMER_SMCFG_TRGSEL_ETIFP: filtered external trigger input(TIMERx(x=0..4,7)) + \param[out] none + \retval none +*/ +void timer_input_trigger_source_select(uint32_t timer_periph, uint32_t intrigger) +{ + TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_TRGS); + TIMER_SMCFG(timer_periph) |= (uint32_t)intrigger; +} + +/*! + \brief select TIMER master mode output trigger source + \param[in] timer_periph: TIMERx(x=0..7) + \param[in] outrigger: + only one parameter can be selected which is shown as below: + \arg TIMER_TRI_OUT_SRC_RESET: the UPG bit as trigger output(TIMERx(x=0..7)) + \arg TIMER_TRI_OUT_SRC_ENABLE: the counter enable signal TIMER_CTL0_CEN as trigger output(TIMERx(x=0..7)) + \arg TIMER_TRI_OUT_SRC_UPDATE: update event as trigger output(TIMERx(x=0..7)) + \arg TIMER_TRI_OUT_SRC_CH0: a capture or a compare match occurred in channel 0 as trigger output TRGO(TIMERx(x=0..4,7)) + \arg TIMER_TRI_OUT_SRC_O0CPRE: O0CPRE as trigger output(TIMERx(x=0..4,7)) + \arg TIMER_TRI_OUT_SRC_O1CPRE: O1CPRE as trigger output(TIMERx(x=0..4,7)) + \arg TIMER_TRI_OUT_SRC_O2CPRE: O2CPRE as trigger output(TIMERx(x=0..4,7)) + \arg TIMER_TRI_OUT_SRC_O3CPRE: O3CPRE as trigger output(TIMERx(x=0..4,7)) + \param[out] none + \retval none +*/ +void timer_master_output_trigger_source_select(uint32_t timer_periph, uint32_t outrigger) +{ + TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_MMC); + TIMER_CTL1(timer_periph) |= (uint32_t)outrigger; +} + +/*! + \brief select TIMER slave mode + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[in] slavemode: + only one parameter can be selected which is shown as below: + \arg TIMER_SLAVE_MODE_DISABLE: slave mode disable + \arg TIMER_QUAD_DECODER_MODE0: quadrature decoder mode 0 + \arg TIMER_QUAD_DECODER_MODE1: quadrature decoder mode 1 + \arg TIMER_QUAD_DECODER_MODE2: quadrature decoder mode 2 + \arg TIMER_SLAVE_MODE_RESTART: restart mode + \arg TIMER_SLAVE_MODE_PAUSE: pause mode + \arg TIMER_SLAVE_MODE_EVENT: event mode + \arg TIMER_SLAVE_MODE_EXTERNAL0: external clock mode 0 + \param[out] none + \retval none +*/ + +void timer_slave_mode_select(uint32_t timer_periph, uint32_t slavemode) +{ + TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC); + TIMER_SMCFG(timer_periph) |= (uint32_t)slavemode; +} + +/*! + \brief configure TIMER master slave mode + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[in] masterslave: + only one parameter can be selected which is shown as below: + \arg TIMER_MASTER_SLAVE_MODE_ENABLE: master slave mode enable + \arg TIMER_MASTER_SLAVE_MODE_DISABLE: master slave mode disable + \param[out] none + \retval none +*/ +void timer_master_slave_mode_config(uint32_t timer_periph, uint32_t masterslave) +{ + if(TIMER_MASTER_SLAVE_MODE_ENABLE == masterslave){ + TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SMCFG_MSM; + }else if(TIMER_MASTER_SLAVE_MODE_DISABLE == masterslave){ + TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_MSM; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure TIMER external trigger input + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] extprescaler: + only one parameter can be selected which is shown as below: + \arg TIMER_EXT_TRI_PSC_OFF: no divided + \arg TIMER_EXT_TRI_PSC_DIV2: divided by 2 + \arg TIMER_EXT_TRI_PSC_DIV4: divided by 4 + \arg TIMER_EXT_TRI_PSC_DIV8: divided by 8 + \param[in] extpolarity: + only one parameter can be selected which is shown as below: + \arg TIMER_ETP_FALLING: active low or falling edge active + \arg TIMER_ETP_RISING: active high or rising edge active + \param[in] extfilter: a value between 0 and 15 + \param[out] none + \retval none +*/ +void timer_external_trigger_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter) +{ + TIMER_SMCFG(timer_periph) &= (~(uint32_t)(TIMER_SMCFG_ETP | TIMER_SMCFG_ETPSC | TIMER_SMCFG_ETFC)); + TIMER_SMCFG(timer_periph) |= (uint32_t)(extprescaler | extpolarity); + TIMER_SMCFG(timer_periph) |= (uint32_t)(extfilter << 8U); +} + +/*! + \brief configure TIMER quadrature decoder mode + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] decomode: + only one parameter can be selected which is shown as below: + \arg TIMER_QUAD_DECODER_MODE0: counter counts on CI0FE0 edge depending on CI1FE1 level + \arg TIMER_QUAD_DECODER_MODE1: counter counts on CI1FE1 edge depending on CI0FE0 level + \arg TIMER_QUAD_DECODER_MODE2: counter counts on both CI0FE0 and CI1FE1 edges depending on the level of the other input + \param[in] ic0polarity: + only one parameter can be selected which is shown as below: + \arg TIMER_IC_POLARITY_RISING: capture rising edge + \arg TIMER_IC_POLARITY_FALLING: capture falling edge + \param[in] ic1polarity: + only one parameter can be selected which is shown as below: + \arg TIMER_IC_POLARITY_RISING: capture rising edge + \arg TIMER_IC_POLARITY_FALLING: capture falling edge + \param[out] none + \retval none +*/ +void timer_quadrature_decoder_mode_config(uint32_t timer_periph, uint32_t decomode, uint16_t ic0polarity, uint16_t ic1polarity) +{ + /* configure the quadrature decoder mode */ + TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC); + TIMER_SMCFG(timer_periph) |= (uint32_t)decomode; + /* configure input capture selection */ + TIMER_CHCTL0(timer_periph) &= (uint32_t)(((~(uint32_t)TIMER_CHCTL0_CH0MS)) & ((~(uint32_t)TIMER_CHCTL0_CH1MS))); + TIMER_CHCTL0(timer_periph) |= (uint32_t)(TIMER_IC_SELECTION_DIRECTTI | ((uint32_t)TIMER_IC_SELECTION_DIRECTTI << 8U)); + /* configure channel input capture polarity */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP)); + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP)); + TIMER_CHCTL2(timer_periph) |= ((uint32_t)ic0polarity | ((uint32_t)ic1polarity << 4U)); +} + +/*! + \brief configure TIMER internal clock mode + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[out] none + \retval none +*/ +void timer_internal_clock_config(uint32_t timer_periph) +{ + TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC; +} + +/*! + \brief configure TIMER the internal trigger as external clock input + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[in] intrigger: + only one parameter can be selected which is shown as below: + \arg TIMER_SMCFG_TRGSEL_ITI0: internal trigger 0 + \arg TIMER_SMCFG_TRGSEL_ITI1: internal trigger 1 + \arg TIMER_SMCFG_TRGSEL_ITI2: internal trigger 2 + \arg TIMER_SMCFG_TRGSEL_ITI3: internal trigger 3 + \param[out] none + \retval none +*/ +void timer_internal_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t intrigger) +{ + timer_input_trigger_source_select(timer_periph, intrigger); + TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC; + TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SLAVE_MODE_EXTERNAL0; +} + +/*! + \brief configure TIMER the external trigger as external clock input + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[in] extrigger: + only one parameter can be selected which is shown as below: + \arg TIMER_SMCFG_TRGSEL_CI0F_ED: TI0 edge detector + \arg TIMER_SMCFG_TRGSEL_CI0FE0: filtered TIMER input 0 + \arg TIMER_SMCFG_TRGSEL_CI1FE1: filtered TIMER input 1 + \param[in] extpolarity: + only one parameter can be selected which is shown as below: + \arg TIMER_IC_POLARITY_RISING: active low or falling edge active + \arg TIMER_IC_POLARITY_FALLING: active high or rising edge active + \param[in] extfilter: a value between 0 and 15 + \param[out] none + \retval none +*/ +void timer_external_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t extrigger, uint16_t extpolarity, uint32_t extfilter) +{ + if(TIMER_SMCFG_TRGSEL_CI1FE1 == extrigger){ + /* reset the CH1EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN); + /* reset the CH1NP bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP)); + /* set the CH1NP bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)extpolarity << 4U); + /* reset the CH1MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS); + /* set the CH1MS bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)TIMER_IC_SELECTION_DIRECTTI << 8U); + /* reset the CH1CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT); + /* set the CH1CAPFLT bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)(extfilter << 12U); + /* set the CH1EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN; + }else{ + /* reset the CH0EN bit */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN); + /* reset the CH0P and CH0NP bits */ + TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP)); + /* set the CH0P and CH0NP bits */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)extpolarity; + /* reset the CH0MS bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS); + /* set the CH0MS bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)TIMER_IC_SELECTION_DIRECTTI; + /* reset the CH0CAPFLT bit */ + TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT); + /* reset the CH0CAPFLT bit */ + TIMER_CHCTL0(timer_periph) |= (uint32_t)(extfilter << 4U); + /* set the CH0EN bit */ + TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN; + } + /* select TIMER input trigger source */ + timer_input_trigger_source_select(timer_periph, extrigger); + /* reset the SMC bit */ + TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC); + /* set the SMC bit */ + TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SLAVE_MODE_EXTERNAL0; +} + +/*! + \brief configure TIMER the external clock mode0 + \param[in] timer_periph: TIMERx(x=0..4,7,8,11) + \param[in] extprescaler: + only one parameter can be selected which is shown as below: + \arg TIMER_EXT_TRI_PSC_OFF: no divided + \arg TIMER_EXT_TRI_PSC_DIV2: divided by 2 + \arg TIMER_EXT_TRI_PSC_DIV4: divided by 4 + \arg TIMER_EXT_TRI_PSC_DIV8: divided by 8 + \param[in] extpolarity: + only one parameter can be selected which is shown as below: + \arg TIMER_ETP_FALLING: active low or falling edge active + \arg TIMER_ETP_RISING: active high or rising edge active + \param[in] extfilter: a value between 0 and 15 + \param[out] none + \retval none +*/ +void timer_external_clock_mode0_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter) +{ + /* configure TIMER external trigger input */ + timer_external_trigger_config(timer_periph, extprescaler, extpolarity, extfilter); + /* reset the SMC bit,TRGS bit */ + TIMER_SMCFG(timer_periph) &= (~(uint32_t)(TIMER_SMCFG_SMC | TIMER_SMCFG_TRGS)); + /* set the SMC bit,TRGS bit */ + TIMER_SMCFG(timer_periph) |= (uint32_t)(TIMER_SLAVE_MODE_EXTERNAL0 | TIMER_SMCFG_TRGSEL_ETIFP); +} + +/*! + \brief configure TIMER the external clock mode1 + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[in] extprescaler: + only one parameter can be selected which is shown as below: + \arg TIMER_EXT_TRI_PSC_OFF: no divided + \arg TIMER_EXT_TRI_PSC_DIV2: divided by 2 + \arg TIMER_EXT_TRI_PSC_DIV4: divided by 4 + \arg TIMER_EXT_TRI_PSC_DIV8: divided by 8 + \param[in] extpolarity: + only one parameter can be selected which is shown as below: + \arg TIMER_ETP_FALLING: active low or falling edge active + \arg TIMER_ETP_RISING: active high or rising edge active + \param[in] extfilter: a value between 0 and 15 + \param[out] none + \retval none +*/ +void timer_external_clock_mode1_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter) +{ + /* configure TIMER external trigger input */ + timer_external_trigger_config(timer_periph, extprescaler, extpolarity, extfilter); + TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SMCFG_SMC1; +} + +/*! + \brief disable TIMER the external clock mode1 + \param[in] timer_periph: TIMERx(x=0..4,7) + \param[out] none + \retval none +*/ +void timer_external_clock_mode1_disable(uint32_t timer_periph) +{ + TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC1; +} + +/*! + \brief configure TIMER write CHxVAL register selection + \param[in] timer_periph: TIMERx(x=0..4,7..13) + \param[in] ccsel: + only one parameter can be selected which is shown as below: + \arg TIMER_CHVSEL_DISABLE: no effect + \arg TIMER_CHVSEL_ENABLE: when write the CHxVAL register, if the write value is same as the CHxVAL value, the write access is ignored + \param[out] none + \retval none +*/ +void timer_write_chxval_register_config(uint32_t timer_periph, uint16_t ccsel) +{ + if(TIMER_CHVSEL_ENABLE == ccsel){ + TIMER_CFG(timer_periph) |= (uint32_t)TIMER_CFG_CHVSEL; + }else if(TIMER_CHVSEL_DISABLE == ccsel){ + TIMER_CFG(timer_periph) &= ~(uint32_t)TIMER_CFG_CHVSEL; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief configure TIMER output value selection + \param[in] timer_periph: TIMERx(x=0,7) + \param[in] outsel: + only one parameter can be selected which is shown as below: + \arg TIMER_OUTSEL_DISABLE: no effect + \arg TIMER_OUTSEL_ENABLE: if POEN and IOS is 0, the output disabled + \param[out] none + \retval none +*/ +void timer_output_value_selection_config(uint32_t timer_periph, uint16_t outsel) +{ + if(TIMER_OUTSEL_ENABLE == outsel){ + TIMER_CFG(timer_periph) |= (uint32_t)TIMER_CFG_OUTSEL; + }else if(TIMER_OUTSEL_DISABLE == outsel){ + TIMER_CFG(timer_periph) &= ~(uint32_t)TIMER_CFG_OUTSEL; + }else{ + /* illegal parameters */ + } +} + +/*! + \brief enable the TIMER interrupt + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] interrupt: specify which interrupt to enable + one or more parameters can be selected which are shown as below: + \arg TIMER_INT_UP: update interrupt enable, TIMERx(x=0..13) + \arg TIMER_INT_CH0: channel 0 interrupt enable, TIMERx(x=0..4,7..13) + \arg TIMER_INT_CH1: channel 1 interrupt enable, TIMERx(x=0..4,7,8,11) + \arg TIMER_INT_CH2: channel 2 interrupt enable, TIMERx(x=0..4,7) + \arg TIMER_INT_CH3: channel 3 interrupt enable, TIMERx(x=0..4,7) + \arg TIMER_INT_CMT: commutation interrupt enable, TIMERx(x=0,7) + \arg TIMER_INT_TRG: trigger interrupt enable, TIMERx(x=0..4,7,8,11) + \arg TIMER_INT_BRK: break interrupt enable, TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_interrupt_enable(uint32_t timer_periph, uint32_t interrupt) +{ + TIMER_DMAINTEN(timer_periph) |= (uint32_t) interrupt; +} + +/*! + \brief disable the TIMER interrupt + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] interrupt: specify which interrupt to disable + one or more parameters can be selected which are shown as below: + \arg TIMER_INT_UP: update interrupt enable, TIMERx(x=0..13) + \arg TIMER_INT_CH0: channel 0 interrupt enable, TIMERx(x=0..4,7..13) + \arg TIMER_INT_CH1: channel 1 interrupt enable, TIMERx(x=0..4,7,8,11) + \arg TIMER_INT_CH2: channel 2 interrupt enable, TIMERx(x=0..4,7) + \arg TIMER_INT_CH3: channel 3 interrupt enable , TIMERx(x=0..4,7) + \arg TIMER_INT_CMT: commutation interrupt enable, TIMERx(x=0,7) + \arg TIMER_INT_TRG: trigger interrupt enable, TIMERx(x=0..4,7,8,11) + \arg TIMER_INT_BRK: break interrupt enable, TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_interrupt_disable(uint32_t timer_periph, uint32_t interrupt) +{ + TIMER_DMAINTEN(timer_periph) &= (~(uint32_t)interrupt); +} + +/*! + \brief get timer interrupt flag + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] interrupt: the timer interrupt bits + only one parameter can be selected which is shown as below: + \arg TIMER_INT_FLAG_UP: update interrupt flag, TIMERx(x=0..13) + \arg TIMER_INT_FLAG_CH0: channel 0 interrupt flag, TIMERx(x=0..4,7..13) + \arg TIMER_INT_FLAG_CH1: channel 1 interrupt flag, TIMERx(x=0..4,7,8,11) + \arg TIMER_INT_FLAG_CH2: channel 2 interrupt flag, TIMERx(x=0..4,7) + \arg TIMER_INT_FLAG_CH3: channel 3 interrupt flag, TIMERx(x=0..4,7) + \arg TIMER_INT_FLAG_CMT: channel commutation interrupt flag, TIMERx(x=0,7) + \arg TIMER_INT_FLAG_TRG: trigger interrupt flag, TIMERx(x=0,7,8,11) + \arg TIMER_INT_FLAG_BRK: break interrupt flag, TIMERx(x=0,7) + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus timer_interrupt_flag_get(uint32_t timer_periph, uint32_t interrupt) +{ + uint32_t val; + val = (TIMER_DMAINTEN(timer_periph) & interrupt); + if((RESET != (TIMER_INTF(timer_periph) & interrupt)) && (RESET != val)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear TIMER interrupt flag + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] interrupt: the timer interrupt bits + one or more parameters can be selected which are shown as below: + \arg TIMER_INT_FLAG_UP: update interrupt flag, TIMERx(x=0..13) + \arg TIMER_INT_FLAG_CH0: channel 0 interrupt flag, TIMERx(x=0..4,7..13) + \arg TIMER_INT_FLAG_CH1: channel 1 interrupt flag, TIMERx(x=0..4,7,8,11) + \arg TIMER_INT_FLAG_CH2: channel 2 interrupt flag, TIMERx(x=0..4,7) + \arg TIMER_INT_FLAG_CH3: channel 3 interrupt flag, TIMERx(x=0..4,7) + \arg TIMER_INT_FLAG_CMT: channel commutation interrupt flag, TIMERx(x=0,7) + \arg TIMER_INT_FLAG_TRG: trigger interrupt flag, TIMERx(x=0,7,8,11) + \arg TIMER_INT_FLAG_BRK: break interrupt flag, TIMERx(x=0,7) + \param[out] none + \retval none +*/ +void timer_interrupt_flag_clear(uint32_t timer_periph, uint32_t interrupt) +{ + TIMER_INTF(timer_periph) = (~(uint32_t)interrupt); +} + +/*! + \brief get TIMER flags + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] flag: the timer interrupt flags + only one parameter can be selected which is shown as below: + \arg TIMER_FLAG_UP: update flag, TIMERx(x=0..13) + \arg TIMER_FLAG_CH0: channel 0 flag, TIMERx(x=0..4,7..13) + \arg TIMER_FLAG_CH1: channel 1 flag, TIMERx(x=0..4,7,8,11) + \arg TIMER_FLAG_CH2: channel 2 flag, TIMERx(x=0..4,7) + \arg TIMER_FLAG_CH3: channel 3 flag, TIMERx(x=0..4,7) + \arg TIMER_FLAG_CMT: channel commutation flag, TIMERx(x=0,7) + \arg TIMER_FLAG_TRG: trigger flag, TIMERx(x=0,7,8,11) + \arg TIMER_FLAG_BRK: break flag, TIMERx(x=0,7) + \arg TIMER_FLAG_CH0O: channel 0 overcapture flag, TIMERx(x=0..4,7..11) + \arg TIMER_FLAG_CH1O: channel 1 overcapture flag, TIMERx(x=0..4,7,8,11) + \arg TIMER_FLAG_CH2O: channel 2 overcapture flag, TIMERx(x=0..4,7) + \arg TIMER_FLAG_CH3O: channel 3 overcapture flag, TIMERx(x=0..4,7) + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus timer_flag_get(uint32_t timer_periph, uint32_t flag) +{ + if(RESET != (TIMER_INTF(timer_periph) & flag)){ + return SET; + }else{ + return RESET; + } +} + +/*! + \brief clear TIMER flags + \param[in] timer_periph: TIMERx(x=0..13) + \param[in] flag: the timer interrupt flags + one or more parameters can be selected which are shown as below: + \arg TIMER_FLAG_UP: update flag, TIMERx(x=0..13) + \arg TIMER_FLAG_CH0: channel 0 flag, TIMERx(x=0..4,7..13) + \arg TIMER_FLAG_CH1: channel 1 flag, TIMERx(x=0..4,7,8,11) + \arg TIMER_FLAG_CH2: channel 2 flag, TIMERx(x=0..4,7) + \arg TIMER_FLAG_CH3: channel 3 flag, TIMERx(x=0..4,7) + \arg TIMER_FLAG_CMT: channel commutation flag, TIMERx(x=0,7) + \arg TIMER_FLAG_TRG: trigger flag, TIMERx(x=0,7,8,11) + \arg TIMER_FLAG_BRK: break flag, TIMERx(x=0,7) + \arg TIMER_FLAG_CH0O: channel 0 overcapture flag, TIMERx(x=0..4,7..11) + \arg TIMER_FLAG_CH1O: channel 1 overcapture flag, TIMERx(x=0..4,7,8,11) + \arg TIMER_FLAG_CH2O: channel 2 overcapture flag, TIMERx(x=0..4,7) + \arg TIMER_FLAG_CH3O: channel 3 overcapture flag, TIMERx(x=0..4,7) + \param[out] none + \retval none +*/ +void timer_flag_clear(uint32_t timer_periph, uint32_t flag) +{ + TIMER_INTF(timer_periph) = (~(uint32_t)flag); +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c new file mode 100644 index 0000000..1abf091 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c @@ -0,0 +1,890 @@ +/*! + \file gd32c10x_usart.c + \brief USART driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_usart.h" + +/* USART register bit offset */ +#define GP_GUAT_OFFSET ((uint32_t)8U) /* bit offset of GUAT in USART_GP */ +#define CTL3_SCRTNUM_OFFSET ((uint32_t)1U) /* bit offset of SCRTNUM in USART_CTL3 */ +#define RT_BL_OFFSET ((uint32_t)24U) /* bit offset of BL in USART_RT */ + +/*! + \brief reset USART/UART + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_deinit(uint32_t usart_periph) +{ + switch(usart_periph) { + case USART0: + /* reset USART0 */ + rcu_periph_reset_enable(RCU_USART0RST); + rcu_periph_reset_disable(RCU_USART0RST); + break; + case USART1: + /* reset USART1 */ + rcu_periph_reset_enable(RCU_USART1RST); + rcu_periph_reset_disable(RCU_USART1RST); + break; + case USART2: + /* reset USART2 */ + rcu_periph_reset_enable(RCU_USART2RST); + rcu_periph_reset_disable(RCU_USART2RST); + break; + case UART3: + /* reset UART3 */ + rcu_periph_reset_enable(RCU_UART3RST); + rcu_periph_reset_disable(RCU_UART3RST); + break; + case UART4: + /* reset UART4 */ + rcu_periph_reset_enable(RCU_UART4RST); + rcu_periph_reset_disable(RCU_UART4RST); + break; + default: + break; + } +} + +/*! + \brief configure USART baud rate value + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] baudval: baud rate value + \param[out] none + \retval none +*/ +void usart_baudrate_set(uint32_t usart_periph, uint32_t baudval) +{ + uint32_t uclk = 0U, intdiv = 0U, fradiv = 0U, udiv = 0U; + switch(usart_periph) { + /* get clock frequency */ + case USART0: + /* get USART0 clock */ + uclk = rcu_clock_freq_get(CK_APB2); + break; + case USART1: + /* get USART1 clock */ + uclk = rcu_clock_freq_get(CK_APB1); + break; + case USART2: + /* get USART2 clock */ + uclk = rcu_clock_freq_get(CK_APB1); + break; + case UART3: + /* get UART3 clock */ + uclk = rcu_clock_freq_get(CK_APB1); + break; + case UART4: + /* get UART4 clock */ + uclk = rcu_clock_freq_get(CK_APB1); + break; + default: + break; + } + /* oversampling by 16, configure the value of USART_BAUD */ + udiv = (uclk + baudval / 2U) / baudval; + intdiv = udiv & 0xfff0U; + fradiv = udiv & 0xfU; + USART_BAUD(usart_periph) = ((USART_BAUD_FRADIV | USART_BAUD_INTDIV) & (intdiv | fradiv)); +} + +/*! + \brief configure USART parity + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] paritycfg: configure USART parity + only one parameter can be selected which is shown as below: + \arg USART_PM_NONE: no parity + \arg USART_PM_ODD: odd parity + \arg USART_PM_EVEN: even parity + \param[out] none + \retval none +*/ +void usart_parity_config(uint32_t usart_periph, uint32_t paritycfg) +{ + /* clear USART_CTL0 PM,PCEN bits */ + USART_CTL0(usart_periph) &= ~(USART_CTL0_PM | USART_CTL0_PCEN); + /* configure USART parity mode */ + USART_CTL0(usart_periph) |= paritycfg; +} + +/*! + \brief configure USART word length + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] wlen: USART word length configure + only one parameter can be selected which is shown as below: + \arg USART_WL_8BIT: 8 bits + \arg USART_WL_9BIT: 9 bits + \param[out] none + \retval none +*/ +void usart_word_length_set(uint32_t usart_periph, uint32_t wlen) +{ + /* clear USART_CTL0 WL bit */ + USART_CTL0(usart_periph) &= ~USART_CTL0_WL; + /* configure USART word length */ + USART_CTL0(usart_periph) |= wlen; +} + +/*! + \brief configure USART stop bit length + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] stblen: USART stop bit configure + only one parameter can be selected which is shown as below: + \arg USART_STB_1BIT: 1 bit + \arg USART_STB_0_5BIT: 0.5 bit, not available for UARTx(x=3,4) + \arg USART_STB_2BIT: 2 bits + \arg USART_STB_1_5BIT: 1.5 bits, not available for UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_stop_bit_set(uint32_t usart_periph, uint32_t stblen) +{ + /* clear USART_CTL1 STB bits */ + USART_CTL1(usart_periph) &= ~USART_CTL1_STB; + /* configure USART stop bits */ + USART_CTL1(usart_periph) |= stblen; +} + +/*! + \brief enable USART + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_enable(uint32_t usart_periph) +{ + USART_CTL0(usart_periph) |= USART_CTL0_UEN; +} + +/*! + \brief disable USART + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_disable(uint32_t usart_periph) +{ + USART_CTL0(usart_periph) &= ~(USART_CTL0_UEN); +} + +/*! + \brief configure USART transmitter + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] txconfig: enable or disable USART transmitter + only one parameter can be selected which is shown as below: + \arg USART_TRANSMIT_ENABLE: enable USART transmission + \arg USART_TRANSMIT_DISABLE: disable USART transmission + \param[out] none + \retval none +*/ +void usart_transmit_config(uint32_t usart_periph, uint32_t txconfig) +{ + USART_CTL0(usart_periph) &= ~(USART_CTL0_TEN); + USART_CTL0(usart_periph) |= (USART_CTL0_TEN & txconfig); +} + +/*! + \brief configure USART receiver + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] rxconfig: enable or disable USART receiver + only one parameter can be selected which is shown as below: + \arg USART_RECEIVE_ENABLE: enable USART reception + \arg USART_RECEIVE_DISABLE: disable USART reception + \param[out] none + \retval none +*/ +void usart_receive_config(uint32_t usart_periph, uint32_t rxconfig) +{ + USART_CTL0(usart_periph) &= ~(USART_CTL0_REN); + USART_CTL0(usart_periph) |= (USART_CTL0_REN & rxconfig); +} + +/*! + \brief data is transmitted/received with the LSB/MSB first + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] msbf: LSB/MSB + only one parameter can be selected which is shown as below: + \arg USART_MSBF_LSB: LSB first + \arg USART_MSBF_MSB: MSB first + \param[out] none + \retval none +*/ +void usart_data_first_config(uint32_t usart_periph, uint32_t msbf) +{ + USART_CTL3(usart_periph) &= ~(USART_CTL3_MSBF); + USART_CTL3(usart_periph) |= msbf; +} + +/*! + \brief configure USART inversion + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] invertpara: refer to enum usart_invert_enum + only one parameter can be selected which is shown as below: + \arg USART_DINV_ENABLE: data bit level inversion + \arg USART_DINV_DISABLE: data bit level not inversion + \arg USART_TXPIN_ENABLE: TX pin level inversion + \arg USART_TXPIN_DISABLE: TX pin level not inversion + \arg USART_RXPIN_ENABLE: RX pin level inversion + \arg USART_RXPIN_DISABLE: RX pin level not inversion + \param[out] none + \retval none +*/ +void usart_invert_config(uint32_t usart_periph, usart_invert_enum invertpara) +{ + /* inverted or not the specified signal */ + switch(invertpara) { + case USART_DINV_ENABLE: + /* data bit level inversion */ + USART_CTL3(usart_periph) |= USART_CTL3_DINV; + break; + case USART_TXPIN_ENABLE: + /* TX pin level inversion */ + USART_CTL3(usart_periph) |= USART_CTL3_TINV; + break; + case USART_RXPIN_ENABLE: + /* RX pin level inversion */ + USART_CTL3(usart_periph) |= USART_CTL3_RINV; + break; + case USART_DINV_DISABLE: + /* data bit level not inversion */ + USART_CTL3(usart_periph) &= ~(USART_CTL3_DINV); + break; + case USART_TXPIN_DISABLE: + /* TX pin level not inversion */ + USART_CTL3(usart_periph) &= ~(USART_CTL3_TINV); + break; + case USART_RXPIN_DISABLE: + /* RX pin level not inversion */ + USART_CTL3(usart_periph) &= ~(USART_CTL3_RINV); + break; + default: + break; + } +} + +/*! + \brief enable receiver timeout + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_receiver_timeout_enable(uint32_t usart_periph) +{ + USART_CTL3(usart_periph) |= USART_CTL3_RTEN; +} + +/*! + \brief disable receiver timeout + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_receiver_timeout_disable(uint32_t usart_periph) +{ + USART_CTL3(usart_periph) &= ~(USART_CTL3_RTEN); +} + +/*! + \brief configure receiver timeout threshold + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] rtimeout: 0-0xFFFFFF + \param[out] none + \retval none +*/ +void usart_receiver_timeout_threshold_config(uint32_t usart_periph, uint32_t rtimeout) +{ + USART_RT(usart_periph) &= ~(USART_RT_RT); + USART_RT(usart_periph) |= rtimeout; +} + +/*! + \brief USART transmit data function + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] data: data to be transmitted + \param[out] none + \retval none +*/ +void usart_data_transmit(uint32_t usart_periph, uint16_t data) +{ + USART_DATA(usart_periph) = USART_DATA_DATA & (uint32_t)data; +} + +/*! + \brief USART receive data function + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval data of received +*/ +uint16_t usart_data_receive(uint32_t usart_periph) +{ + return (uint16_t)(GET_BITS(USART_DATA(usart_periph), 0U, 8U)); +} + +/*! + \brief configure the address of the USART in wake up by address match mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] addr: address of USART/UART + \param[out] none + \retval none +*/ +void usart_address_config(uint32_t usart_periph, uint8_t addr) +{ + USART_CTL1(usart_periph) &= ~(USART_CTL1_ADDR); + USART_CTL1(usart_periph) |= (USART_CTL1_ADDR & (uint32_t)addr); +} + +/*! + \brief enable mute mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_mute_mode_enable(uint32_t usart_periph) +{ + USART_CTL0(usart_periph) |= USART_CTL0_RWU; +} + +/*! + \brief disable mute mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_mute_mode_disable(uint32_t usart_periph) +{ + USART_CTL0(usart_periph) &= ~(USART_CTL0_RWU); +} + +/*! + \brief configure wakeup method in mute mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] wmethod: two methods be used to enter or exit the mute mode + only one parameter can be selected which is shown as below: + \arg USART_WM_IDLE: idle line + \arg USART_WM_ADDR: address mask + \param[out] none + \retval none +*/ +void usart_mute_mode_wakeup_config(uint32_t usart_periph, uint32_t wmethod) +{ + USART_CTL0(usart_periph) &= ~(USART_CTL0_WM); + USART_CTL0(usart_periph) |= wmethod; +} + +/*! + \brief enable LIN mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_lin_mode_enable(uint32_t usart_periph) +{ + USART_CTL1(usart_periph) |= USART_CTL1_LMEN; +} + +/*! + \brief disable LIN mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_lin_mode_disable(uint32_t usart_periph) +{ + USART_CTL1(usart_periph) &= ~(USART_CTL1_LMEN); +} + +/*! + \brief configure lin break frame length + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] lblen: lin break frame length + only one parameter can be selected which is shown as below: + \arg USART_LBLEN_10B: 10 bits + \arg USART_LBLEN_11B: 11 bits + \param[out] none + \retval none +*/ +void usart_lin_break_detection_length_config(uint32_t usart_periph, uint32_t lblen) +{ + USART_CTL1(usart_periph) &= ~(USART_CTL1_LBLEN); + USART_CTL1(usart_periph) |= (USART_CTL1_LBLEN & lblen); +} + +/*! + \brief send break frame + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_send_break(uint32_t usart_periph) +{ + USART_CTL0(usart_periph) |= USART_CTL0_SBKCMD; +} + +/*! + \brief enable half duplex mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_halfduplex_enable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) |= USART_CTL2_HDEN; +} + +/*! + \brief disable half duplex mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_halfduplex_disable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_HDEN); +} + +/*! + \brief enable CK pin in synchronous mode + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_synchronous_clock_enable(uint32_t usart_periph) +{ + USART_CTL1(usart_periph) |= USART_CTL1_CKEN; +} + +/*! + \brief disable CK pin in synchronous mode + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_synchronous_clock_disable(uint32_t usart_periph) +{ + USART_CTL1(usart_periph) &= ~(USART_CTL1_CKEN); +} + +/*! + \brief configure USART synchronous mode parameters + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] clen: CK length + only one parameter can be selected which is shown as below: + \arg USART_CLEN_NONE: there are 7 CK pulses for an 8 bit frame and 8 CK pulses for a 9 bit frame + \arg USART_CLEN_EN: there are 8 CK pulses for an 8 bit frame and 9 CK pulses for a 9 bit frame + \param[in] cph: clock phase + only one parameter can be selected which is shown as below: + \arg USART_CPH_1CK: first clock transition is the first data capture edge + \arg USART_CPH_2CK: second clock transition is the first data capture edge + \param[in] cpl: clock polarity + only one parameter can be selected which is shown as below: + \arg USART_CPL_LOW: steady low value on CK pin + \arg USART_CPL_HIGH: steady high value on CK pin + \param[out] none + \retval none +*/ +void usart_synchronous_clock_config(uint32_t usart_periph, uint32_t clen, uint32_t cph, uint32_t cpl) +{ + USART_CTL1(usart_periph) &= ~(USART_CTL1_CLEN | USART_CTL1_CPH | USART_CTL1_CPL); + USART_CTL1(usart_periph) |= (USART_CTL1_CLEN & clen) | (USART_CTL1_CPH & cph) | (USART_CTL1_CPL & cpl); +} + +/*! + \brief configure guard time value in smartcard mode + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] guat: guard time value, 0-0xFF + \param[out] none + \retval none +*/ +void usart_guard_time_config(uint32_t usart_periph, uint8_t guat) +{ + USART_GP(usart_periph) &= ~(USART_GP_GUAT); + USART_GP(usart_periph) |= (USART_GP_GUAT & ((uint32_t)guat << GP_GUAT_OFFSET)); +} + +/*! + \brief enable smartcard mode + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_smartcard_mode_enable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) |= USART_CTL2_SCEN; +} + +/*! + \brief disable smartcard mode + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_smartcard_mode_disable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_SCEN); +} + +/*! + \brief enable NACK in smartcard mode + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_smartcard_mode_nack_enable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) |= USART_CTL2_NKEN; +} + +/*! + \brief disable NACK in smartcard mode + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_smartcard_mode_nack_disable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_NKEN); +} + +/*! + \brief configure smartcard auto-retry number + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] scrtnum: smartcard auto-retry number + \param[out] none + \retval none +*/ +void usart_smartcard_autoretry_config(uint32_t usart_periph, uint8_t scrtnum) +{ + USART_CTL3(usart_periph) &= ~(USART_CTL3_SCRTNUM); + USART_CTL3(usart_periph) |= (USART_CTL3_SCRTNUM & ((uint32_t)scrtnum << CTL3_SCRTNUM_OFFSET)); +} + +/*! + \brief configure block length + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] bl: block length + \param[out] none + \retval none +*/ +void usart_block_length_config(uint32_t usart_periph, uint8_t bl) +{ + USART_RT(usart_periph) &= ~(USART_RT_BL); + USART_RT(usart_periph) |= (USART_RT_BL & ((uint32_t)bl << RT_BL_OFFSET)); +} + +/*! + \brief enable IrDA mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_irda_mode_enable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) |= USART_CTL2_IREN; +} + +/*! + \brief disable IrDA mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_irda_mode_disable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_IREN); +} + +/*! + \brief configure the peripheral clock prescaler + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] psc: 0x00-0xFF + \param[out] none + \retval none +*/ +void usart_prescaler_config(uint32_t usart_periph, uint8_t psc) +{ + USART_GP(usart_periph) &= ~(USART_GP_PSC); + USART_GP(usart_periph) |= (uint32_t)psc; +} + +/*! + \brief configure IrDA low-power + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] irlp: IrDA low-power or normal + only one parameter can be selected which is shown as below: + \arg USART_IRLP_LOW: low-power + \arg USART_IRLP_NORMAL: normal + \param[out] none + \retval none +*/ +void usart_irda_lowpower_config(uint32_t usart_periph, uint32_t irlp) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_IRLP); + USART_CTL2(usart_periph) |= (USART_CTL2_IRLP & irlp); +} + +/*! + \brief configure hardware flow control RTS + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] rtsconfig: enable or disable RTS + only one parameter can be selected which is shown as below: + \arg USART_RTS_ENABLE: enable RTS + \arg USART_RTS_DISABLE: disable RTS + \param[out] none + \retval none +*/ +void usart_hardware_flow_rts_config(uint32_t usart_periph, uint32_t rtsconfig) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_RTSEN); + USART_CTL2(usart_periph) |= (USART_CTL2_RTSEN & rtsconfig); +} + +/*! + \brief configure hardware flow control CTS + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] ctsconfig: enable or disable CTS + only one parameter can be selected which is shown as below: + \arg USART_CTS_ENABLE: enable CTS + \arg USART_CTS_DISABLE: disable CTS + \param[out] none + \retval none +*/ +void usart_hardware_flow_cts_config(uint32_t usart_periph, uint32_t ctsconfig) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_CTSEN); + USART_CTL2(usart_periph) |= (USART_CTL2_CTSEN & ctsconfig); +} + +/*! + \brief configure USART DMA reception + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3) + \param[in] dmaconfig: USART DMA mode + only one parameter can be selected which is shown as below: + \arg USART_RECEIVE_DMA_ENABLE: enable USART DMA for reception + \arg USART_RECEIVE_DMA_DISABLE: disable USART DMA for reception + \param[out] none + \retval none +*/ +void usart_dma_receive_config(uint32_t usart_periph, uint8_t dmaconfig) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_DENR); + USART_CTL2(usart_periph) |= (USART_CTL2_DENR & dmaconfig); +} + +/*! + \brief configure USART DMA transmission + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3) + \param[in] dmaconfig: USART DMA mode + only one parameter can be selected which is shown as below: + \arg USART_TRANSMIT_DMA_ENABLE: enable USART DMA for transmission + \arg USART_TRANSMIT_DMA_DISABLE: disable USART DMA for transmission + \param[out] none + \retval none +*/ +void usart_dma_transmit_config(uint32_t usart_periph, uint8_t dmaconfig) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_DENT); + USART_CTL2(usart_periph) |= (USART_CTL2_DENT & dmaconfig); +} + +/*! + \brief configure hardware flow control coherence mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3) + \param[in] hcm: + \arg USART_RTS_NONE_COHERENCE: nRTS signal equals to the rxne status register + \arg USART_RTS_COHERENCE: nRTS signal is set when the last data bit has been sampled + \param[out] none + \retval none +*/ +void usart_hardware_flow_coherence_config(uint32_t usart_periph, uint32_t hcm) +{ + USART_CHC(usart_periph) &= ~(USART_CHC_HCM); + USART_CHC(usart_periph) |= (USART_CHC_HCM & hcm); +} + +/*! + \brief get flag in STAT0/STAT1 register + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] flag: USART flags, refer to usart_flag_enum + only one parameter can be selected which is shown as below: + \arg USART_FLAG_CTS: CTS change flag + \arg USART_FLAG_LBD: LIN break detected flag + \arg USART_FLAG_TBE: transmit data buffer empty + \arg USART_FLAG_TC: transmission complete + \arg USART_FLAG_RBNE: read data buffer not empty + \arg USART_FLAG_IDLE: IDLE frame detected flag + \arg USART_FLAG_ORERR: overrun error + \arg USART_FLAG_NERR: noise error flag + \arg USART_FLAG_FERR: frame error flag + \arg USART_FLAG_PERR: parity error flag + \arg USART_FLAG_BSY: busy flag + \arg USART_FLAG_EB: end of block flag + \arg USART_FLAG_RT: receiver timeout flag + \arg USART_FLAG_EPERR: early parity error flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus usart_flag_get(uint32_t usart_periph, usart_flag_enum flag) +{ + if(RESET != (USART_REG_VAL(usart_periph, flag) & BIT(USART_BIT_POS(flag)))) { + return SET; + } else { + return RESET; + } +} + +/*! + \brief clear flag in STAT0/STAT1 register + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] flag: USART flags, refer to usart_flag_enum + only one parameter can be selected which is shown as below: + \arg USART_FLAG_CTS: CTS change flag + \arg USART_FLAG_LBD: LIN break detected flag + \arg USART_FLAG_TC: transmission complete + \arg USART_FLAG_RBNE: read data buffer not empty + \arg USART_FLAG_EB: end of block flag + \arg USART_FLAG_RT: receiver timeout flag + \arg USART_FLAG_EPERR: early parity error flag + \param[out] none + \retval none +*/ +void usart_flag_clear(uint32_t usart_periph, usart_flag_enum flag) +{ + if(USART_FLAG_EPERR == flag) { + USART_REG_VAL(usart_periph, flag) &= ~BIT(USART_BIT_POS(flag)); + } else { + USART_REG_VAL(usart_periph, flag) = ~BIT(USART_BIT_POS(flag)); + } +} + +/*! + \brief enable USART interrupt + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] interrupt: USART interrupts, refer to usart_interrupt_enum + only one parameter can be selected which is shown as below: + \arg USART_INT_PERR: parity error interrupt + \arg USART_INT_TBE: transmitter buffer empty interrupt + \arg USART_INT_TC: transmission complete interrupt + \arg USART_INT_RBNE: read data buffer not empty interrupt and overrun error interrupt + \arg USART_INT_IDLE: IDLE line detected interrupt + \arg USART_INT_LBD: LIN break detected interrupt + \arg USART_INT_ERR: error interrupt + \arg USART_INT_CTS: CTS interrupt + \arg USART_INT_RT: interrupt enable bit of receive timeout event + \arg USART_INT_EB: interrupt enable bit of end of block event + \param[out] none + \retval none +*/ +void usart_interrupt_enable(uint32_t usart_periph, usart_interrupt_enum interrupt) +{ + USART_REG_VAL(usart_periph, interrupt) |= BIT(USART_BIT_POS(interrupt)); +} + +/*! + \brief disable USART interrupt + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] interrupt: USART interrupts, refer to usart_interrupt_enum + only one parameter can be selected which is shown as below: + \arg USART_INT_PERR: parity error interrupt + \arg USART_INT_TBE: transmitter buffer empty interrupt + \arg USART_INT_TC: transmission complete interrupt + \arg USART_INT_RBNE: read data buffer not empty interrupt and overrun error interrupt + \arg USART_INT_IDLE: IDLE line detected interrupt + \arg USART_INT_LBD: LIN break detected interrupt + \arg USART_INT_ERR: error interrupt + \arg USART_INT_CTS: CTS interrupt + \arg USART_INT_RT: interrupt enable bit of receive timeout event + \arg USART_INT_EB: interrupt enable bit of end of block event + \param[out] none + \retval none +*/ +void usart_interrupt_disable(uint32_t usart_periph, usart_interrupt_enum interrupt) +{ + USART_REG_VAL(usart_periph, interrupt) &= ~BIT(USART_BIT_POS(interrupt)); +} + +/*! + \brief get USART interrupt and flag status + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] int_flag: USART interrupt flags, refer to usart_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg USART_INT_FLAG_PERR: parity error interrupt and flag + \arg USART_INT_FLAG_TBE: transmitter buffer empty interrupt and flag + \arg USART_INT_FLAG_TC: transmission complete interrupt and flag + \arg USART_INT_FLAG_RBNE: read data buffer not empty interrupt and flag + \arg USART_INT_FLAG_RBNE_ORERR: read data buffer not empty interrupt and overrun error flag + \arg USART_INT_FLAG_IDLE: IDLE line detected interrupt and flag + \arg USART_INT_FLAG_LBD: LIN break detected interrupt and flag + \arg USART_INT_FLAG_CTS: CTS interrupt and flag + \arg USART_INT_FLAG_ERR_ORERR: error interrupt and overrun error + \arg USART_INT_FLAG_ERR_NERR: error interrupt and noise error flag + \arg USART_INT_FLAG_ERR_FERR: error interrupt and frame error flag + \arg USART_INT_FLAG_EB: interrupt enable bit of end of block event and flag + \arg USART_INT_FLAG_RT: interrupt enable bit of receive timeout event and flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus usart_interrupt_flag_get(uint32_t usart_periph, usart_interrupt_flag_enum int_flag) +{ + uint32_t intenable = 0U, flagstatus = 0U; + /* get the interrupt enable bit status */ + intenable = (USART_REG_VAL(usart_periph, int_flag) & BIT(USART_BIT_POS(int_flag))); + /* get the corresponding flag bit status */ + flagstatus = (USART_REG_VAL2(usart_periph, int_flag) & BIT(USART_BIT_POS2(int_flag))); + + if((0U != flagstatus) && (0U != intenable)) { + return SET; + } else { + return RESET; + } +} + +/*! + \brief clear USART interrupt flag in STAT0/STAT1 register + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] int_flag: USART interrupt flags, refer to usart_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg USART_INT_FLAG_CTS: CTS change flag + \arg USART_INT_FLAG_LBD: LIN break detected flag + \arg USART_INT_FLAG_TC: transmission complete + \arg USART_INT_FLAG_RBNE: read data buffer not empty + \arg USART_INT_FLAG_EB: end of block flag + \arg USART_INT_FLAG_RT: receiver timeout flag + \param[out] none + \retval none +*/ +void usart_interrupt_flag_clear(uint32_t usart_periph, usart_interrupt_flag_enum int_flag) +{ + USART_REG_VAL2(usart_periph, int_flag) = ~BIT(USART_BIT_POS2(int_flag)); +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c.base@1.0.0 new file mode 100644 index 0000000..1abf091 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c.base@1.0.0 @@ -0,0 +1,890 @@ +/*! + \file gd32c10x_usart.c + \brief USART driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_usart.h" + +/* USART register bit offset */ +#define GP_GUAT_OFFSET ((uint32_t)8U) /* bit offset of GUAT in USART_GP */ +#define CTL3_SCRTNUM_OFFSET ((uint32_t)1U) /* bit offset of SCRTNUM in USART_CTL3 */ +#define RT_BL_OFFSET ((uint32_t)24U) /* bit offset of BL in USART_RT */ + +/*! + \brief reset USART/UART + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_deinit(uint32_t usart_periph) +{ + switch(usart_periph) { + case USART0: + /* reset USART0 */ + rcu_periph_reset_enable(RCU_USART0RST); + rcu_periph_reset_disable(RCU_USART0RST); + break; + case USART1: + /* reset USART1 */ + rcu_periph_reset_enable(RCU_USART1RST); + rcu_periph_reset_disable(RCU_USART1RST); + break; + case USART2: + /* reset USART2 */ + rcu_periph_reset_enable(RCU_USART2RST); + rcu_periph_reset_disable(RCU_USART2RST); + break; + case UART3: + /* reset UART3 */ + rcu_periph_reset_enable(RCU_UART3RST); + rcu_periph_reset_disable(RCU_UART3RST); + break; + case UART4: + /* reset UART4 */ + rcu_periph_reset_enable(RCU_UART4RST); + rcu_periph_reset_disable(RCU_UART4RST); + break; + default: + break; + } +} + +/*! + \brief configure USART baud rate value + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] baudval: baud rate value + \param[out] none + \retval none +*/ +void usart_baudrate_set(uint32_t usart_periph, uint32_t baudval) +{ + uint32_t uclk = 0U, intdiv = 0U, fradiv = 0U, udiv = 0U; + switch(usart_periph) { + /* get clock frequency */ + case USART0: + /* get USART0 clock */ + uclk = rcu_clock_freq_get(CK_APB2); + break; + case USART1: + /* get USART1 clock */ + uclk = rcu_clock_freq_get(CK_APB1); + break; + case USART2: + /* get USART2 clock */ + uclk = rcu_clock_freq_get(CK_APB1); + break; + case UART3: + /* get UART3 clock */ + uclk = rcu_clock_freq_get(CK_APB1); + break; + case UART4: + /* get UART4 clock */ + uclk = rcu_clock_freq_get(CK_APB1); + break; + default: + break; + } + /* oversampling by 16, configure the value of USART_BAUD */ + udiv = (uclk + baudval / 2U) / baudval; + intdiv = udiv & 0xfff0U; + fradiv = udiv & 0xfU; + USART_BAUD(usart_periph) = ((USART_BAUD_FRADIV | USART_BAUD_INTDIV) & (intdiv | fradiv)); +} + +/*! + \brief configure USART parity + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] paritycfg: configure USART parity + only one parameter can be selected which is shown as below: + \arg USART_PM_NONE: no parity + \arg USART_PM_ODD: odd parity + \arg USART_PM_EVEN: even parity + \param[out] none + \retval none +*/ +void usart_parity_config(uint32_t usart_periph, uint32_t paritycfg) +{ + /* clear USART_CTL0 PM,PCEN bits */ + USART_CTL0(usart_periph) &= ~(USART_CTL0_PM | USART_CTL0_PCEN); + /* configure USART parity mode */ + USART_CTL0(usart_periph) |= paritycfg; +} + +/*! + \brief configure USART word length + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] wlen: USART word length configure + only one parameter can be selected which is shown as below: + \arg USART_WL_8BIT: 8 bits + \arg USART_WL_9BIT: 9 bits + \param[out] none + \retval none +*/ +void usart_word_length_set(uint32_t usart_periph, uint32_t wlen) +{ + /* clear USART_CTL0 WL bit */ + USART_CTL0(usart_periph) &= ~USART_CTL0_WL; + /* configure USART word length */ + USART_CTL0(usart_periph) |= wlen; +} + +/*! + \brief configure USART stop bit length + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] stblen: USART stop bit configure + only one parameter can be selected which is shown as below: + \arg USART_STB_1BIT: 1 bit + \arg USART_STB_0_5BIT: 0.5 bit, not available for UARTx(x=3,4) + \arg USART_STB_2BIT: 2 bits + \arg USART_STB_1_5BIT: 1.5 bits, not available for UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_stop_bit_set(uint32_t usart_periph, uint32_t stblen) +{ + /* clear USART_CTL1 STB bits */ + USART_CTL1(usart_periph) &= ~USART_CTL1_STB; + /* configure USART stop bits */ + USART_CTL1(usart_periph) |= stblen; +} + +/*! + \brief enable USART + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_enable(uint32_t usart_periph) +{ + USART_CTL0(usart_periph) |= USART_CTL0_UEN; +} + +/*! + \brief disable USART + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_disable(uint32_t usart_periph) +{ + USART_CTL0(usart_periph) &= ~(USART_CTL0_UEN); +} + +/*! + \brief configure USART transmitter + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] txconfig: enable or disable USART transmitter + only one parameter can be selected which is shown as below: + \arg USART_TRANSMIT_ENABLE: enable USART transmission + \arg USART_TRANSMIT_DISABLE: disable USART transmission + \param[out] none + \retval none +*/ +void usart_transmit_config(uint32_t usart_periph, uint32_t txconfig) +{ + USART_CTL0(usart_periph) &= ~(USART_CTL0_TEN); + USART_CTL0(usart_periph) |= (USART_CTL0_TEN & txconfig); +} + +/*! + \brief configure USART receiver + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] rxconfig: enable or disable USART receiver + only one parameter can be selected which is shown as below: + \arg USART_RECEIVE_ENABLE: enable USART reception + \arg USART_RECEIVE_DISABLE: disable USART reception + \param[out] none + \retval none +*/ +void usart_receive_config(uint32_t usart_periph, uint32_t rxconfig) +{ + USART_CTL0(usart_periph) &= ~(USART_CTL0_REN); + USART_CTL0(usart_periph) |= (USART_CTL0_REN & rxconfig); +} + +/*! + \brief data is transmitted/received with the LSB/MSB first + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] msbf: LSB/MSB + only one parameter can be selected which is shown as below: + \arg USART_MSBF_LSB: LSB first + \arg USART_MSBF_MSB: MSB first + \param[out] none + \retval none +*/ +void usart_data_first_config(uint32_t usart_periph, uint32_t msbf) +{ + USART_CTL3(usart_periph) &= ~(USART_CTL3_MSBF); + USART_CTL3(usart_periph) |= msbf; +} + +/*! + \brief configure USART inversion + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] invertpara: refer to enum usart_invert_enum + only one parameter can be selected which is shown as below: + \arg USART_DINV_ENABLE: data bit level inversion + \arg USART_DINV_DISABLE: data bit level not inversion + \arg USART_TXPIN_ENABLE: TX pin level inversion + \arg USART_TXPIN_DISABLE: TX pin level not inversion + \arg USART_RXPIN_ENABLE: RX pin level inversion + \arg USART_RXPIN_DISABLE: RX pin level not inversion + \param[out] none + \retval none +*/ +void usart_invert_config(uint32_t usart_periph, usart_invert_enum invertpara) +{ + /* inverted or not the specified signal */ + switch(invertpara) { + case USART_DINV_ENABLE: + /* data bit level inversion */ + USART_CTL3(usart_periph) |= USART_CTL3_DINV; + break; + case USART_TXPIN_ENABLE: + /* TX pin level inversion */ + USART_CTL3(usart_periph) |= USART_CTL3_TINV; + break; + case USART_RXPIN_ENABLE: + /* RX pin level inversion */ + USART_CTL3(usart_periph) |= USART_CTL3_RINV; + break; + case USART_DINV_DISABLE: + /* data bit level not inversion */ + USART_CTL3(usart_periph) &= ~(USART_CTL3_DINV); + break; + case USART_TXPIN_DISABLE: + /* TX pin level not inversion */ + USART_CTL3(usart_periph) &= ~(USART_CTL3_TINV); + break; + case USART_RXPIN_DISABLE: + /* RX pin level not inversion */ + USART_CTL3(usart_periph) &= ~(USART_CTL3_RINV); + break; + default: + break; + } +} + +/*! + \brief enable receiver timeout + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_receiver_timeout_enable(uint32_t usart_periph) +{ + USART_CTL3(usart_periph) |= USART_CTL3_RTEN; +} + +/*! + \brief disable receiver timeout + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_receiver_timeout_disable(uint32_t usart_periph) +{ + USART_CTL3(usart_periph) &= ~(USART_CTL3_RTEN); +} + +/*! + \brief configure receiver timeout threshold + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] rtimeout: 0-0xFFFFFF + \param[out] none + \retval none +*/ +void usart_receiver_timeout_threshold_config(uint32_t usart_periph, uint32_t rtimeout) +{ + USART_RT(usart_periph) &= ~(USART_RT_RT); + USART_RT(usart_periph) |= rtimeout; +} + +/*! + \brief USART transmit data function + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] data: data to be transmitted + \param[out] none + \retval none +*/ +void usart_data_transmit(uint32_t usart_periph, uint16_t data) +{ + USART_DATA(usart_periph) = USART_DATA_DATA & (uint32_t)data; +} + +/*! + \brief USART receive data function + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval data of received +*/ +uint16_t usart_data_receive(uint32_t usart_periph) +{ + return (uint16_t)(GET_BITS(USART_DATA(usart_periph), 0U, 8U)); +} + +/*! + \brief configure the address of the USART in wake up by address match mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] addr: address of USART/UART + \param[out] none + \retval none +*/ +void usart_address_config(uint32_t usart_periph, uint8_t addr) +{ + USART_CTL1(usart_periph) &= ~(USART_CTL1_ADDR); + USART_CTL1(usart_periph) |= (USART_CTL1_ADDR & (uint32_t)addr); +} + +/*! + \brief enable mute mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_mute_mode_enable(uint32_t usart_periph) +{ + USART_CTL0(usart_periph) |= USART_CTL0_RWU; +} + +/*! + \brief disable mute mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_mute_mode_disable(uint32_t usart_periph) +{ + USART_CTL0(usart_periph) &= ~(USART_CTL0_RWU); +} + +/*! + \brief configure wakeup method in mute mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] wmethod: two methods be used to enter or exit the mute mode + only one parameter can be selected which is shown as below: + \arg USART_WM_IDLE: idle line + \arg USART_WM_ADDR: address mask + \param[out] none + \retval none +*/ +void usart_mute_mode_wakeup_config(uint32_t usart_periph, uint32_t wmethod) +{ + USART_CTL0(usart_periph) &= ~(USART_CTL0_WM); + USART_CTL0(usart_periph) |= wmethod; +} + +/*! + \brief enable LIN mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_lin_mode_enable(uint32_t usart_periph) +{ + USART_CTL1(usart_periph) |= USART_CTL1_LMEN; +} + +/*! + \brief disable LIN mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_lin_mode_disable(uint32_t usart_periph) +{ + USART_CTL1(usart_periph) &= ~(USART_CTL1_LMEN); +} + +/*! + \brief configure lin break frame length + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] lblen: lin break frame length + only one parameter can be selected which is shown as below: + \arg USART_LBLEN_10B: 10 bits + \arg USART_LBLEN_11B: 11 bits + \param[out] none + \retval none +*/ +void usart_lin_break_detection_length_config(uint32_t usart_periph, uint32_t lblen) +{ + USART_CTL1(usart_periph) &= ~(USART_CTL1_LBLEN); + USART_CTL1(usart_periph) |= (USART_CTL1_LBLEN & lblen); +} + +/*! + \brief send break frame + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_send_break(uint32_t usart_periph) +{ + USART_CTL0(usart_periph) |= USART_CTL0_SBKCMD; +} + +/*! + \brief enable half duplex mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_halfduplex_enable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) |= USART_CTL2_HDEN; +} + +/*! + \brief disable half duplex mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_halfduplex_disable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_HDEN); +} + +/*! + \brief enable CK pin in synchronous mode + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_synchronous_clock_enable(uint32_t usart_periph) +{ + USART_CTL1(usart_periph) |= USART_CTL1_CKEN; +} + +/*! + \brief disable CK pin in synchronous mode + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_synchronous_clock_disable(uint32_t usart_periph) +{ + USART_CTL1(usart_periph) &= ~(USART_CTL1_CKEN); +} + +/*! + \brief configure USART synchronous mode parameters + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] clen: CK length + only one parameter can be selected which is shown as below: + \arg USART_CLEN_NONE: there are 7 CK pulses for an 8 bit frame and 8 CK pulses for a 9 bit frame + \arg USART_CLEN_EN: there are 8 CK pulses for an 8 bit frame and 9 CK pulses for a 9 bit frame + \param[in] cph: clock phase + only one parameter can be selected which is shown as below: + \arg USART_CPH_1CK: first clock transition is the first data capture edge + \arg USART_CPH_2CK: second clock transition is the first data capture edge + \param[in] cpl: clock polarity + only one parameter can be selected which is shown as below: + \arg USART_CPL_LOW: steady low value on CK pin + \arg USART_CPL_HIGH: steady high value on CK pin + \param[out] none + \retval none +*/ +void usart_synchronous_clock_config(uint32_t usart_periph, uint32_t clen, uint32_t cph, uint32_t cpl) +{ + USART_CTL1(usart_periph) &= ~(USART_CTL1_CLEN | USART_CTL1_CPH | USART_CTL1_CPL); + USART_CTL1(usart_periph) |= (USART_CTL1_CLEN & clen) | (USART_CTL1_CPH & cph) | (USART_CTL1_CPL & cpl); +} + +/*! + \brief configure guard time value in smartcard mode + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] guat: guard time value, 0-0xFF + \param[out] none + \retval none +*/ +void usart_guard_time_config(uint32_t usart_periph, uint8_t guat) +{ + USART_GP(usart_periph) &= ~(USART_GP_GUAT); + USART_GP(usart_periph) |= (USART_GP_GUAT & ((uint32_t)guat << GP_GUAT_OFFSET)); +} + +/*! + \brief enable smartcard mode + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_smartcard_mode_enable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) |= USART_CTL2_SCEN; +} + +/*! + \brief disable smartcard mode + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_smartcard_mode_disable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_SCEN); +} + +/*! + \brief enable NACK in smartcard mode + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_smartcard_mode_nack_enable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) |= USART_CTL2_NKEN; +} + +/*! + \brief disable NACK in smartcard mode + \param[in] usart_periph: USARTx(x=0,1,2) + \param[out] none + \retval none +*/ +void usart_smartcard_mode_nack_disable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_NKEN); +} + +/*! + \brief configure smartcard auto-retry number + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] scrtnum: smartcard auto-retry number + \param[out] none + \retval none +*/ +void usart_smartcard_autoretry_config(uint32_t usart_periph, uint8_t scrtnum) +{ + USART_CTL3(usart_periph) &= ~(USART_CTL3_SCRTNUM); + USART_CTL3(usart_periph) |= (USART_CTL3_SCRTNUM & ((uint32_t)scrtnum << CTL3_SCRTNUM_OFFSET)); +} + +/*! + \brief configure block length + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] bl: block length + \param[out] none + \retval none +*/ +void usart_block_length_config(uint32_t usart_periph, uint8_t bl) +{ + USART_RT(usart_periph) &= ~(USART_RT_BL); + USART_RT(usart_periph) |= (USART_RT_BL & ((uint32_t)bl << RT_BL_OFFSET)); +} + +/*! + \brief enable IrDA mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_irda_mode_enable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) |= USART_CTL2_IREN; +} + +/*! + \brief disable IrDA mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[out] none + \retval none +*/ +void usart_irda_mode_disable(uint32_t usart_periph) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_IREN); +} + +/*! + \brief configure the peripheral clock prescaler + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] psc: 0x00-0xFF + \param[out] none + \retval none +*/ +void usart_prescaler_config(uint32_t usart_periph, uint8_t psc) +{ + USART_GP(usart_periph) &= ~(USART_GP_PSC); + USART_GP(usart_periph) |= (uint32_t)psc; +} + +/*! + \brief configure IrDA low-power + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] irlp: IrDA low-power or normal + only one parameter can be selected which is shown as below: + \arg USART_IRLP_LOW: low-power + \arg USART_IRLP_NORMAL: normal + \param[out] none + \retval none +*/ +void usart_irda_lowpower_config(uint32_t usart_periph, uint32_t irlp) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_IRLP); + USART_CTL2(usart_periph) |= (USART_CTL2_IRLP & irlp); +} + +/*! + \brief configure hardware flow control RTS + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] rtsconfig: enable or disable RTS + only one parameter can be selected which is shown as below: + \arg USART_RTS_ENABLE: enable RTS + \arg USART_RTS_DISABLE: disable RTS + \param[out] none + \retval none +*/ +void usart_hardware_flow_rts_config(uint32_t usart_periph, uint32_t rtsconfig) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_RTSEN); + USART_CTL2(usart_periph) |= (USART_CTL2_RTSEN & rtsconfig); +} + +/*! + \brief configure hardware flow control CTS + \param[in] usart_periph: USARTx(x=0,1,2) + \param[in] ctsconfig: enable or disable CTS + only one parameter can be selected which is shown as below: + \arg USART_CTS_ENABLE: enable CTS + \arg USART_CTS_DISABLE: disable CTS + \param[out] none + \retval none +*/ +void usart_hardware_flow_cts_config(uint32_t usart_periph, uint32_t ctsconfig) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_CTSEN); + USART_CTL2(usart_periph) |= (USART_CTL2_CTSEN & ctsconfig); +} + +/*! + \brief configure USART DMA reception + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3) + \param[in] dmaconfig: USART DMA mode + only one parameter can be selected which is shown as below: + \arg USART_RECEIVE_DMA_ENABLE: enable USART DMA for reception + \arg USART_RECEIVE_DMA_DISABLE: disable USART DMA for reception + \param[out] none + \retval none +*/ +void usart_dma_receive_config(uint32_t usart_periph, uint8_t dmaconfig) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_DENR); + USART_CTL2(usart_periph) |= (USART_CTL2_DENR & dmaconfig); +} + +/*! + \brief configure USART DMA transmission + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3) + \param[in] dmaconfig: USART DMA mode + only one parameter can be selected which is shown as below: + \arg USART_TRANSMIT_DMA_ENABLE: enable USART DMA for transmission + \arg USART_TRANSMIT_DMA_DISABLE: disable USART DMA for transmission + \param[out] none + \retval none +*/ +void usart_dma_transmit_config(uint32_t usart_periph, uint8_t dmaconfig) +{ + USART_CTL2(usart_periph) &= ~(USART_CTL2_DENT); + USART_CTL2(usart_periph) |= (USART_CTL2_DENT & dmaconfig); +} + +/*! + \brief configure hardware flow control coherence mode + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3) + \param[in] hcm: + \arg USART_RTS_NONE_COHERENCE: nRTS signal equals to the rxne status register + \arg USART_RTS_COHERENCE: nRTS signal is set when the last data bit has been sampled + \param[out] none + \retval none +*/ +void usart_hardware_flow_coherence_config(uint32_t usart_periph, uint32_t hcm) +{ + USART_CHC(usart_periph) &= ~(USART_CHC_HCM); + USART_CHC(usart_periph) |= (USART_CHC_HCM & hcm); +} + +/*! + \brief get flag in STAT0/STAT1 register + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] flag: USART flags, refer to usart_flag_enum + only one parameter can be selected which is shown as below: + \arg USART_FLAG_CTS: CTS change flag + \arg USART_FLAG_LBD: LIN break detected flag + \arg USART_FLAG_TBE: transmit data buffer empty + \arg USART_FLAG_TC: transmission complete + \arg USART_FLAG_RBNE: read data buffer not empty + \arg USART_FLAG_IDLE: IDLE frame detected flag + \arg USART_FLAG_ORERR: overrun error + \arg USART_FLAG_NERR: noise error flag + \arg USART_FLAG_FERR: frame error flag + \arg USART_FLAG_PERR: parity error flag + \arg USART_FLAG_BSY: busy flag + \arg USART_FLAG_EB: end of block flag + \arg USART_FLAG_RT: receiver timeout flag + \arg USART_FLAG_EPERR: early parity error flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus usart_flag_get(uint32_t usart_periph, usart_flag_enum flag) +{ + if(RESET != (USART_REG_VAL(usart_periph, flag) & BIT(USART_BIT_POS(flag)))) { + return SET; + } else { + return RESET; + } +} + +/*! + \brief clear flag in STAT0/STAT1 register + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] flag: USART flags, refer to usart_flag_enum + only one parameter can be selected which is shown as below: + \arg USART_FLAG_CTS: CTS change flag + \arg USART_FLAG_LBD: LIN break detected flag + \arg USART_FLAG_TC: transmission complete + \arg USART_FLAG_RBNE: read data buffer not empty + \arg USART_FLAG_EB: end of block flag + \arg USART_FLAG_RT: receiver timeout flag + \arg USART_FLAG_EPERR: early parity error flag + \param[out] none + \retval none +*/ +void usart_flag_clear(uint32_t usart_periph, usart_flag_enum flag) +{ + if(USART_FLAG_EPERR == flag) { + USART_REG_VAL(usart_periph, flag) &= ~BIT(USART_BIT_POS(flag)); + } else { + USART_REG_VAL(usart_periph, flag) = ~BIT(USART_BIT_POS(flag)); + } +} + +/*! + \brief enable USART interrupt + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] interrupt: USART interrupts, refer to usart_interrupt_enum + only one parameter can be selected which is shown as below: + \arg USART_INT_PERR: parity error interrupt + \arg USART_INT_TBE: transmitter buffer empty interrupt + \arg USART_INT_TC: transmission complete interrupt + \arg USART_INT_RBNE: read data buffer not empty interrupt and overrun error interrupt + \arg USART_INT_IDLE: IDLE line detected interrupt + \arg USART_INT_LBD: LIN break detected interrupt + \arg USART_INT_ERR: error interrupt + \arg USART_INT_CTS: CTS interrupt + \arg USART_INT_RT: interrupt enable bit of receive timeout event + \arg USART_INT_EB: interrupt enable bit of end of block event + \param[out] none + \retval none +*/ +void usart_interrupt_enable(uint32_t usart_periph, usart_interrupt_enum interrupt) +{ + USART_REG_VAL(usart_periph, interrupt) |= BIT(USART_BIT_POS(interrupt)); +} + +/*! + \brief disable USART interrupt + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] interrupt: USART interrupts, refer to usart_interrupt_enum + only one parameter can be selected which is shown as below: + \arg USART_INT_PERR: parity error interrupt + \arg USART_INT_TBE: transmitter buffer empty interrupt + \arg USART_INT_TC: transmission complete interrupt + \arg USART_INT_RBNE: read data buffer not empty interrupt and overrun error interrupt + \arg USART_INT_IDLE: IDLE line detected interrupt + \arg USART_INT_LBD: LIN break detected interrupt + \arg USART_INT_ERR: error interrupt + \arg USART_INT_CTS: CTS interrupt + \arg USART_INT_RT: interrupt enable bit of receive timeout event + \arg USART_INT_EB: interrupt enable bit of end of block event + \param[out] none + \retval none +*/ +void usart_interrupt_disable(uint32_t usart_periph, usart_interrupt_enum interrupt) +{ + USART_REG_VAL(usart_periph, interrupt) &= ~BIT(USART_BIT_POS(interrupt)); +} + +/*! + \brief get USART interrupt and flag status + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] int_flag: USART interrupt flags, refer to usart_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg USART_INT_FLAG_PERR: parity error interrupt and flag + \arg USART_INT_FLAG_TBE: transmitter buffer empty interrupt and flag + \arg USART_INT_FLAG_TC: transmission complete interrupt and flag + \arg USART_INT_FLAG_RBNE: read data buffer not empty interrupt and flag + \arg USART_INT_FLAG_RBNE_ORERR: read data buffer not empty interrupt and overrun error flag + \arg USART_INT_FLAG_IDLE: IDLE line detected interrupt and flag + \arg USART_INT_FLAG_LBD: LIN break detected interrupt and flag + \arg USART_INT_FLAG_CTS: CTS interrupt and flag + \arg USART_INT_FLAG_ERR_ORERR: error interrupt and overrun error + \arg USART_INT_FLAG_ERR_NERR: error interrupt and noise error flag + \arg USART_INT_FLAG_ERR_FERR: error interrupt and frame error flag + \arg USART_INT_FLAG_EB: interrupt enable bit of end of block event and flag + \arg USART_INT_FLAG_RT: interrupt enable bit of receive timeout event and flag + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus usart_interrupt_flag_get(uint32_t usart_periph, usart_interrupt_flag_enum int_flag) +{ + uint32_t intenable = 0U, flagstatus = 0U; + /* get the interrupt enable bit status */ + intenable = (USART_REG_VAL(usart_periph, int_flag) & BIT(USART_BIT_POS(int_flag))); + /* get the corresponding flag bit status */ + flagstatus = (USART_REG_VAL2(usart_periph, int_flag) & BIT(USART_BIT_POS2(int_flag))); + + if((0U != flagstatus) && (0U != intenable)) { + return SET; + } else { + return RESET; + } +} + +/*! + \brief clear USART interrupt flag in STAT0/STAT1 register + \param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4) + \param[in] int_flag: USART interrupt flags, refer to usart_interrupt_flag_enum + only one parameter can be selected which is shown as below: + \arg USART_INT_FLAG_CTS: CTS change flag + \arg USART_INT_FLAG_LBD: LIN break detected flag + \arg USART_INT_FLAG_TC: transmission complete + \arg USART_INT_FLAG_RBNE: read data buffer not empty + \arg USART_INT_FLAG_EB: end of block flag + \arg USART_INT_FLAG_RT: receiver timeout flag + \param[out] none + \retval none +*/ +void usart_interrupt_flag_clear(uint32_t usart_periph, usart_interrupt_flag_enum int_flag) +{ + USART_REG_VAL2(usart_periph, int_flag) = ~BIT(USART_BIT_POS2(int_flag)); +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_wwdgt.c b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_wwdgt.c new file mode 100644 index 0000000..d93e778 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_wwdgt.c @@ -0,0 +1,125 @@ +/*! + \file gd32c10x_wwdgt.c + \brief WWDGT driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_wwdgt.h" + +/*! + \brief reset the window watchdog timer configuration + \param[in] none + \param[out] none + \retval none +*/ +void wwdgt_deinit(void) +{ + rcu_periph_reset_enable(RCU_WWDGTRST); + rcu_periph_reset_disable(RCU_WWDGTRST); +} + +/*! + \brief start the window watchdog timer counter + \param[in] none + \param[out] none + \retval none +*/ +void wwdgt_enable(void) +{ + WWDGT_CTL |= WWDGT_CTL_WDGTEN; +} + +/*! + \brief configure the window watchdog timer counter value + \param[in] counter_value: 0x00 - 0x7F + \param[out] none + \retval none +*/ +void wwdgt_counter_update(uint16_t counter_value) +{ + WWDGT_CTL = (uint32_t)(CTL_CNT(counter_value)); +} + +/*! + \brief configure counter value, window value, and prescaler divider value + \param[in] counter: 0x00 - 0x7F + \param[in] window: 0x00 - 0x7F + \param[in] prescaler: wwdgt prescaler value + only one parameter can be selected which is shown as below: + \arg WWDGT_CFG_PSC_DIV1: the time base of window watchdog counter = (PCLK1/4096)/1 + \arg WWDGT_CFG_PSC_DIV2: the time base of window watchdog counter = (PCLK1/4096)/2 + \arg WWDGT_CFG_PSC_DIV4: the time base of window watchdog counter = (PCLK1/4096)/4 + \arg WWDGT_CFG_PSC_DIV8: the time base of window watchdog counter = (PCLK1/4096)/8 + \param[out] none + \retval none +*/ +void wwdgt_config(uint16_t counter, uint16_t window, uint32_t prescaler) +{ + WWDGT_CTL = (uint32_t)(CTL_CNT(counter)); + WWDGT_CFG = (uint32_t)(CFG_WIN(window) | prescaler); +} + +/*! + \brief check early wakeup interrupt state of WWDGT + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus wwdgt_flag_get(void) +{ + if(RESET != (WWDGT_STAT & WWDGT_STAT_EWIF)) { + return SET; + } + + return RESET; +} + +/*! + \brief clear early wakeup interrupt state of WWDGT + \param[in] none + \param[out] none + \retval none +*/ +void wwdgt_flag_clear(void) +{ + WWDGT_STAT = (uint32_t)(RESET); +} + +/*! + \brief enable early wakeup interrupt of WWDGT + \param[in] none + \param[out] none + \retval none +*/ +void wwdgt_interrupt_enable(void) +{ + WWDGT_CFG |= WWDGT_CFG_EWIE; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_wwdgt.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_wwdgt.c.base@1.0.0 new file mode 100644 index 0000000..d93e778 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_wwdgt.c.base@1.0.0 @@ -0,0 +1,125 @@ +/*! + \file gd32c10x_wwdgt.c + \brief WWDGT driver + + \version 2025-08-07, V1.6.0, firmware for GD32C10x +*/ + +/* + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. +*/ + +#include "gd32c10x_wwdgt.h" + +/*! + \brief reset the window watchdog timer configuration + \param[in] none + \param[out] none + \retval none +*/ +void wwdgt_deinit(void) +{ + rcu_periph_reset_enable(RCU_WWDGTRST); + rcu_periph_reset_disable(RCU_WWDGTRST); +} + +/*! + \brief start the window watchdog timer counter + \param[in] none + \param[out] none + \retval none +*/ +void wwdgt_enable(void) +{ + WWDGT_CTL |= WWDGT_CTL_WDGTEN; +} + +/*! + \brief configure the window watchdog timer counter value + \param[in] counter_value: 0x00 - 0x7F + \param[out] none + \retval none +*/ +void wwdgt_counter_update(uint16_t counter_value) +{ + WWDGT_CTL = (uint32_t)(CTL_CNT(counter_value)); +} + +/*! + \brief configure counter value, window value, and prescaler divider value + \param[in] counter: 0x00 - 0x7F + \param[in] window: 0x00 - 0x7F + \param[in] prescaler: wwdgt prescaler value + only one parameter can be selected which is shown as below: + \arg WWDGT_CFG_PSC_DIV1: the time base of window watchdog counter = (PCLK1/4096)/1 + \arg WWDGT_CFG_PSC_DIV2: the time base of window watchdog counter = (PCLK1/4096)/2 + \arg WWDGT_CFG_PSC_DIV4: the time base of window watchdog counter = (PCLK1/4096)/4 + \arg WWDGT_CFG_PSC_DIV8: the time base of window watchdog counter = (PCLK1/4096)/8 + \param[out] none + \retval none +*/ +void wwdgt_config(uint16_t counter, uint16_t window, uint32_t prescaler) +{ + WWDGT_CTL = (uint32_t)(CTL_CNT(counter)); + WWDGT_CFG = (uint32_t)(CFG_WIN(window) | prescaler); +} + +/*! + \brief check early wakeup interrupt state of WWDGT + \param[in] none + \param[out] none + \retval FlagStatus: SET or RESET +*/ +FlagStatus wwdgt_flag_get(void) +{ + if(RESET != (WWDGT_STAT & WWDGT_STAT_EWIF)) { + return SET; + } + + return RESET; +} + +/*! + \brief clear early wakeup interrupt state of WWDGT + \param[in] none + \param[out] none + \retval none +*/ +void wwdgt_flag_clear(void) +{ + WWDGT_STAT = (uint32_t)(RESET); +} + +/*! + \brief enable early wakeup interrupt of WWDGT + \param[in] none + \param[out] none + \retval none +*/ +void wwdgt_interrupt_enable(void) +{ + WWDGT_CFG |= WWDGT_CFG_EWIE; +} diff --git a/Robot_V2/RTE/Device/GD32C103CB/regions_GD32C103CB.h b/Robot_V2/RTE/Device/GD32C103CB/regions_GD32C103CB.h new file mode 100644 index 0000000..89512d0 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/regions_GD32C103CB.h @@ -0,0 +1,101 @@ +#ifndef REGIONS_GD32C103CB_H +#define REGIONS_GD32C103CB_H + + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- +//------ With VS Code: Open Preview for Configuration Wizard ------------------- + +// Auto-generated using information from packs +// Device Family Pack (DFP): GigaDevice::GD32C10x_DFP@1.0.1 + +// ROM Configuration +// ======================= +// __ROM0 (is rx memory: IROM1 from DFP) +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. Default: 0x08000000 +// Contains Startup and Vector Table +#define __ROM0_BASE 0x08000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. Default: 0x00020000 +#define __ROM0_SIZE 0x00020000 +// + +// __ROM1 (unused) +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +#define __ROM1_BASE 0x0 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +#define __ROM1_SIZE 0x0 +// + +// __ROM2 (unused) +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +#define __ROM2_BASE 0x0 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +#define __ROM2_SIZE 0x0 +// + +// __ROM3 (unused) +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +#define __ROM3_BASE 0x0 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +#define __ROM3_SIZE 0x0 +// + +// + +// RAM Configuration +// ======================= +// __RAM0 (is rwx memory: IRAM1 from DFP) +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. Default: 0x20000000 +// Contains uninitialized RAM, Stack, and Heap +#define __RAM0_BASE 0x20000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. Default: 0x00008000 +#define __RAM0_SIZE 0x00008000 +// + +// __RAM1 (unused) +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +#define __RAM1_BASE 0x0 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +#define __RAM1_SIZE 0x0 +// + +// __RAM2 (unused) +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +#define __RAM2_BASE 0x0 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +#define __RAM2_SIZE 0x0 +// + +// __RAM3 (unused) +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +#define __RAM3_BASE 0x0 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +#define __RAM3_SIZE 0x0 +// + +// + +// Stack / Heap Configuration +// Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +// Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +#define __STACK_SIZE 0x00000200 +#define __HEAP_SIZE 0x00000C00 +// + + +#endif /* REGIONS_GD32C103CB_H */ diff --git a/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.s b/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.s new file mode 100644 index 0000000..0d7f9aa --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.s @@ -0,0 +1,383 @@ +;/*! +; \file startup_gd32c10x.s +; \brief start up file +; +; \version 2025-08-07, V1.6.0, firmware for GD32C10x +;*/ +; +;/* Copyright (c) 2011 - 2012 ARM LIMITED +; Copyright (c) 2025, GigaDevice Semiconductor Inc. +; +; All rights reserved. +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; - Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; - Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the distribution. +; - Neither the name of ARM nor the names of its contributors may be used +; to endorse or promote products derived from this software without +; specific prior written permission. +; * +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. +;*/ + +;/* This file refers the CMSIS standard, some adjustments are made according to GigaDevice chips */ + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x0000800 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +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 + +; /* reset Vector Mapped to at Address 0 */ + 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 handler */ + DCD WWDGT_IRQHandler ; 16:Window Watchdog Timer + DCD LVD_IRQHandler ; 17:LVD through EXTI Line detect + DCD TAMPER_IRQHandler ; 18:Tamper through EXTI Line detect + DCD RTC_IRQHandler ; 19:RTC through EXTI Line + DCD FMC_IRQHandler ; 20:FMC + DCD RCU_CTC_IRQHandler ; 21:RCU and CTC + DCD EXTI0_IRQHandler ; 22:EXTI Line 0 + DCD EXTI1_IRQHandler ; 23:EXTI Line 1 + DCD EXTI2_IRQHandler ; 24:EXTI Line 2 + DCD EXTI3_IRQHandler ; 25:EXTI Line 3 + DCD EXTI4_IRQHandler ; 26:EXTI Line 4 + DCD DMA0_Channel0_IRQHandler ; 27:DMA0 Channel0 + DCD DMA0_Channel1_IRQHandler ; 28:DMA0 Channel1 + DCD DMA0_Channel2_IRQHandler ; 29:DMA0 Channel2 + DCD DMA0_Channel3_IRQHandler ; 30:DMA0 Channel3 + DCD DMA0_Channel4_IRQHandler ; 31:DMA0 Channel4 + DCD DMA0_Channel5_IRQHandler ; 32:DMA0 Channel5 + DCD DMA0_Channel6_IRQHandler ; 33:DMA0 Channel6 + DCD ADC0_1_IRQHandler ; 34:ADC0 and ADC1 + DCD CAN0_TX_IRQHandler ; 35:CAN0 TX + DCD CAN0_RX0_IRQHandler ; 36:CAN0 RX0 + DCD CAN0_RX1_IRQHandler ; 37:CAN0 RX1 + DCD CAN0_EWMC_IRQHandler ; 38:CAN0 EWMC + DCD EXTI5_9_IRQHandler ; 39:EXTI5 to EXTI9 + DCD TIMER0_BRK_TIMER8_IRQHandler ; 40:TIMER0 Break and TIMER8 + DCD TIMER0_UP_TIMER9_IRQHandler ; 41:TIMER0 Update and TIMER9 + DCD TIMER0_TRG_CMT_TIMER10_IRQHandler ; 42:TIMER0 Trigger and Commutation and TIMER10 + DCD TIMER0_Channel_IRQHandler ; 43:TIMER0 Channel Capture Compare + DCD TIMER1_IRQHandler ; 44:TIMER1 + DCD TIMER2_IRQHandler ; 45:TIMER2 + DCD TIMER3_IRQHandler ; 46:TIMER3 + DCD I2C0_EV_IRQHandler ; 47:I2C0 Event + DCD I2C0_ER_IRQHandler ; 48:I2C0 Error + DCD I2C1_EV_IRQHandler ; 49:I2C1 Event + DCD I2C1_ER_IRQHandler ; 50:I2C1 Error + DCD SPI0_IRQHandler ; 51:SPI0 + DCD SPI1_IRQHandler ; 52:SPI1 + DCD USART0_IRQHandler ; 53:USART0 + DCD USART1_IRQHandler ; 54:USART1 + DCD USART2_IRQHandler ; 55:USART2 + DCD EXTI10_15_IRQHandler ; 56:EXTI10 to EXTI15 + DCD RTC_Alarm_IRQHandler ; 57:RTC Alarm + DCD USBFS_WKUP_IRQHandler ; 58:USBFS Wakeup + DCD TIMER7_BRK_TIMER11_IRQHandler ; 59:TIMER7 Break and TIMER11 + DCD TIMER7_UP_TIMER12_IRQHandler ; 60:TIMER7 Update and TIMER12 + DCD TIMER7_TRG_CMT_TIMER13_IRQHandler ; 61:TIMER7 Trigger and Commutation and TIMER13 + DCD TIMER7_Channel_IRQHandler ; 62:TIMER7 Channel Capture Compare + DCD 0 ; 63:Reserved + DCD EXMC_IRQHandler ; 64:EXMC + DCD 0 ; 65:Reserved + DCD TIMER4_IRQHandler ; 66:TIMER4 + DCD SPI2_IRQHandler ; 67:SPI2 + DCD UART3_IRQHandler ; 68:UART3 + DCD UART4_IRQHandler ; 69:UART4 + DCD TIMER5_IRQHandler ; 70:TIMER5 + DCD TIMER6_IRQHandler ; 71:TIMER6 + DCD DMA1_Channel0_IRQHandler ; 72:DMA1 Channel0 + DCD DMA1_Channel1_IRQHandler ; 73:DMA1 Channel1 + DCD DMA1_Channel2_IRQHandler ; 74:DMA1 Channel2 + DCD DMA1_Channel3_IRQHandler ; 75:DMA1 Channel3 + DCD DMA1_Channel4_IRQHandler ; 76:DMA1 Channel4 + DCD 0 ; 77:Reserved + DCD 0 ; 78:Reserved + DCD CAN1_TX_IRQHandler ; 79:CAN1 TX + DCD CAN1_RX0_IRQHandler ; 80:CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; 81:CAN1 RX1 + DCD CAN1_EWMC_IRQHandler ; 82:CAN1 EWMC + DCD USBFS_IRQHandler ; 83:USBFS + +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +;/* reset Handler */ +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +;/* dummy Exception Handlers */ +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] + IMPORT delay_decrement + LDR R0, =delay_decrement + BX R0 + ENDP + +Default_Handler PROC +; /* external interrupts handler */ + EXPORT WWDGT_IRQHandler [WEAK] + EXPORT LVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FMC_IRQHandler [WEAK] + EXPORT RCU_CTC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA0_Channel0_IRQHandler [WEAK] + EXPORT DMA0_Channel1_IRQHandler [WEAK] + EXPORT DMA0_Channel2_IRQHandler [WEAK] + EXPORT DMA0_Channel3_IRQHandler [WEAK] + EXPORT DMA0_Channel4_IRQHandler [WEAK] + EXPORT DMA0_Channel5_IRQHandler [WEAK] + EXPORT DMA0_Channel6_IRQHandler [WEAK] + EXPORT ADC0_1_IRQHandler [WEAK] + EXPORT CAN0_TX_IRQHandler [WEAK] + EXPORT CAN0_RX0_IRQHandler [WEAK] + EXPORT CAN0_RX1_IRQHandler [WEAK] + EXPORT CAN0_EWMC_IRQHandler [WEAK] + EXPORT EXTI5_9_IRQHandler [WEAK] + EXPORT TIMER0_BRK_TIMER8_IRQHandler [WEAK] + EXPORT TIMER0_UP_TIMER9_IRQHandler [WEAK] + EXPORT TIMER0_TRG_CMT_TIMER10_IRQHandler [WEAK] + EXPORT TIMER0_Channel_IRQHandler [WEAK] + EXPORT TIMER1_IRQHandler [WEAK] + EXPORT TIMER2_IRQHandler [WEAK] + EXPORT TIMER3_IRQHandler [WEAK] + EXPORT I2C0_EV_IRQHandler [WEAK] + EXPORT I2C0_ER_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT SPI0_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT USART0_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT EXTI10_15_IRQHandler [WEAK] + EXPORT RTC_Alarm_IRQHandler [WEAK] + EXPORT USBFS_WKUP_IRQHandler [WEAK] + EXPORT TIMER7_BRK_TIMER11_IRQHandler [WEAK] + EXPORT TIMER7_UP_TIMER12_IRQHandler [WEAK] + EXPORT TIMER7_TRG_CMT_TIMER13_IRQHandler [WEAK] + EXPORT TIMER7_Channel_IRQHandler [WEAK] + EXPORT EXMC_IRQHandler [WEAK] + EXPORT TIMER4_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT TIMER5_IRQHandler [WEAK] + EXPORT TIMER6_IRQHandler [WEAK] + EXPORT DMA1_Channel0_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT CAN1_TX_IRQHandler [WEAK] + EXPORT CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_EWMC_IRQHandler [WEAK] + EXPORT USBFS_IRQHandler [WEAK] + +;/* external interrupts handler */ +WWDGT_IRQHandler +LVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FMC_IRQHandler +RCU_CTC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA0_Channel0_IRQHandler +DMA0_Channel1_IRQHandler +DMA0_Channel2_IRQHandler +DMA0_Channel3_IRQHandler +DMA0_Channel4_IRQHandler +DMA0_Channel5_IRQHandler +DMA0_Channel6_IRQHandler +ADC0_1_IRQHandler +CAN0_TX_IRQHandler +CAN0_RX0_IRQHandler +CAN0_RX1_IRQHandler +CAN0_EWMC_IRQHandler +EXTI5_9_IRQHandler +TIMER0_BRK_TIMER8_IRQHandler +TIMER0_UP_TIMER9_IRQHandler +TIMER0_TRG_CMT_TIMER10_IRQHandler +TIMER0_Channel_IRQHandler +TIMER1_IRQHandler +TIMER2_IRQHandler +TIMER3_IRQHandler +I2C0_EV_IRQHandler +I2C0_ER_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +SPI0_IRQHandler +SPI1_IRQHandler +USART0_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +EXTI10_15_IRQHandler +RTC_Alarm_IRQHandler +USBFS_WKUP_IRQHandler +TIMER7_BRK_TIMER11_IRQHandler +TIMER7_UP_TIMER12_IRQHandler +TIMER7_TRG_CMT_TIMER13_IRQHandler +TIMER7_Channel_IRQHandler +EXMC_IRQHandler +TIMER4_IRQHandler +SPI2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +TIMER5_IRQHandler +TIMER6_IRQHandler +DMA1_Channel0_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +CAN1_TX_IRQHandler +CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_EWMC_IRQHandler +USBFS_IRQHandler + + B . + ENDP + + ALIGN + +; user Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + END diff --git a/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.s.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.s.base@1.0.0 new file mode 100644 index 0000000..a676bf3 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.s.base@1.0.0 @@ -0,0 +1,381 @@ +;/*! +; \file startup_gd32c10x.s +; \brief start up file +; +; \version 2025-08-07, V1.6.0, firmware for GD32C10x +;*/ +; +;/* Copyright (c) 2011 - 2012 ARM LIMITED +; Copyright (c) 2025, GigaDevice Semiconductor Inc. +; +; All rights reserved. +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; - Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; - Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the distribution. +; - Neither the name of ARM nor the names of its contributors may be used +; to endorse or promote products derived from this software without +; specific prior written permission. +; * +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. +;*/ + +;/* This file refers the CMSIS standard, some adjustments are made according to GigaDevice chips */ + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x0000800 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +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 + +; /* reset Vector Mapped to at Address 0 */ + 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 handler */ + DCD WWDGT_IRQHandler ; 16:Window Watchdog Timer + DCD LVD_IRQHandler ; 17:LVD through EXTI Line detect + DCD TAMPER_IRQHandler ; 18:Tamper through EXTI Line detect + DCD RTC_IRQHandler ; 19:RTC through EXTI Line + DCD FMC_IRQHandler ; 20:FMC + DCD RCU_CTC_IRQHandler ; 21:RCU and CTC + DCD EXTI0_IRQHandler ; 22:EXTI Line 0 + DCD EXTI1_IRQHandler ; 23:EXTI Line 1 + DCD EXTI2_IRQHandler ; 24:EXTI Line 2 + DCD EXTI3_IRQHandler ; 25:EXTI Line 3 + DCD EXTI4_IRQHandler ; 26:EXTI Line 4 + DCD DMA0_Channel0_IRQHandler ; 27:DMA0 Channel0 + DCD DMA0_Channel1_IRQHandler ; 28:DMA0 Channel1 + DCD DMA0_Channel2_IRQHandler ; 29:DMA0 Channel2 + DCD DMA0_Channel3_IRQHandler ; 30:DMA0 Channel3 + DCD DMA0_Channel4_IRQHandler ; 31:DMA0 Channel4 + DCD DMA0_Channel5_IRQHandler ; 32:DMA0 Channel5 + DCD DMA0_Channel6_IRQHandler ; 33:DMA0 Channel6 + DCD ADC0_1_IRQHandler ; 34:ADC0 and ADC1 + DCD CAN0_TX_IRQHandler ; 35:CAN0 TX + DCD CAN0_RX0_IRQHandler ; 36:CAN0 RX0 + DCD CAN0_RX1_IRQHandler ; 37:CAN0 RX1 + DCD CAN0_EWMC_IRQHandler ; 38:CAN0 EWMC + DCD EXTI5_9_IRQHandler ; 39:EXTI5 to EXTI9 + DCD TIMER0_BRK_TIMER8_IRQHandler ; 40:TIMER0 Break and TIMER8 + DCD TIMER0_UP_TIMER9_IRQHandler ; 41:TIMER0 Update and TIMER9 + DCD TIMER0_TRG_CMT_TIMER10_IRQHandler ; 42:TIMER0 Trigger and Commutation and TIMER10 + DCD TIMER0_Channel_IRQHandler ; 43:TIMER0 Channel Capture Compare + DCD TIMER1_IRQHandler ; 44:TIMER1 + DCD TIMER2_IRQHandler ; 45:TIMER2 + DCD TIMER3_IRQHandler ; 46:TIMER3 + DCD I2C0_EV_IRQHandler ; 47:I2C0 Event + DCD I2C0_ER_IRQHandler ; 48:I2C0 Error + DCD I2C1_EV_IRQHandler ; 49:I2C1 Event + DCD I2C1_ER_IRQHandler ; 50:I2C1 Error + DCD SPI0_IRQHandler ; 51:SPI0 + DCD SPI1_IRQHandler ; 52:SPI1 + DCD USART0_IRQHandler ; 53:USART0 + DCD USART1_IRQHandler ; 54:USART1 + DCD USART2_IRQHandler ; 55:USART2 + DCD EXTI10_15_IRQHandler ; 56:EXTI10 to EXTI15 + DCD RTC_Alarm_IRQHandler ; 57:RTC Alarm + DCD USBFS_WKUP_IRQHandler ; 58:USBFS Wakeup + DCD TIMER7_BRK_TIMER11_IRQHandler ; 59:TIMER7 Break and TIMER11 + DCD TIMER7_UP_TIMER12_IRQHandler ; 60:TIMER7 Update and TIMER12 + DCD TIMER7_TRG_CMT_TIMER13_IRQHandler ; 61:TIMER7 Trigger and Commutation and TIMER13 + DCD TIMER7_Channel_IRQHandler ; 62:TIMER7 Channel Capture Compare + DCD 0 ; 63:Reserved + DCD EXMC_IRQHandler ; 64:EXMC + DCD 0 ; 65:Reserved + DCD TIMER4_IRQHandler ; 66:TIMER4 + DCD SPI2_IRQHandler ; 67:SPI2 + DCD UART3_IRQHandler ; 68:UART3 + DCD UART4_IRQHandler ; 69:UART4 + DCD TIMER5_IRQHandler ; 70:TIMER5 + DCD TIMER6_IRQHandler ; 71:TIMER6 + DCD DMA1_Channel0_IRQHandler ; 72:DMA1 Channel0 + DCD DMA1_Channel1_IRQHandler ; 73:DMA1 Channel1 + DCD DMA1_Channel2_IRQHandler ; 74:DMA1 Channel2 + DCD DMA1_Channel3_IRQHandler ; 75:DMA1 Channel3 + DCD DMA1_Channel4_IRQHandler ; 76:DMA1 Channel4 + DCD 0 ; 77:Reserved + DCD 0 ; 78:Reserved + DCD CAN1_TX_IRQHandler ; 79:CAN1 TX + DCD CAN1_RX0_IRQHandler ; 80:CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; 81:CAN1 RX1 + DCD CAN1_EWMC_IRQHandler ; 82:CAN1 EWMC + DCD USBFS_IRQHandler ; 83:USBFS + +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +;/* reset Handler */ +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +;/* dummy Exception Handlers */ +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 +; /* external interrupts handler */ + EXPORT WWDGT_IRQHandler [WEAK] + EXPORT LVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FMC_IRQHandler [WEAK] + EXPORT RCU_CTC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA0_Channel0_IRQHandler [WEAK] + EXPORT DMA0_Channel1_IRQHandler [WEAK] + EXPORT DMA0_Channel2_IRQHandler [WEAK] + EXPORT DMA0_Channel3_IRQHandler [WEAK] + EXPORT DMA0_Channel4_IRQHandler [WEAK] + EXPORT DMA0_Channel5_IRQHandler [WEAK] + EXPORT DMA0_Channel6_IRQHandler [WEAK] + EXPORT ADC0_1_IRQHandler [WEAK] + EXPORT CAN0_TX_IRQHandler [WEAK] + EXPORT CAN0_RX0_IRQHandler [WEAK] + EXPORT CAN0_RX1_IRQHandler [WEAK] + EXPORT CAN0_EWMC_IRQHandler [WEAK] + EXPORT EXTI5_9_IRQHandler [WEAK] + EXPORT TIMER0_BRK_TIMER8_IRQHandler [WEAK] + EXPORT TIMER0_UP_TIMER9_IRQHandler [WEAK] + EXPORT TIMER0_TRG_CMT_TIMER10_IRQHandler [WEAK] + EXPORT TIMER0_Channel_IRQHandler [WEAK] + EXPORT TIMER1_IRQHandler [WEAK] + EXPORT TIMER2_IRQHandler [WEAK] + EXPORT TIMER3_IRQHandler [WEAK] + EXPORT I2C0_EV_IRQHandler [WEAK] + EXPORT I2C0_ER_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT SPI0_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT USART0_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT EXTI10_15_IRQHandler [WEAK] + EXPORT RTC_Alarm_IRQHandler [WEAK] + EXPORT USBFS_WKUP_IRQHandler [WEAK] + EXPORT TIMER7_BRK_TIMER11_IRQHandler [WEAK] + EXPORT TIMER7_UP_TIMER12_IRQHandler [WEAK] + EXPORT TIMER7_TRG_CMT_TIMER13_IRQHandler [WEAK] + EXPORT TIMER7_Channel_IRQHandler [WEAK] + EXPORT EXMC_IRQHandler [WEAK] + EXPORT TIMER4_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT TIMER5_IRQHandler [WEAK] + EXPORT TIMER6_IRQHandler [WEAK] + EXPORT DMA1_Channel0_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT CAN1_TX_IRQHandler [WEAK] + EXPORT CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_EWMC_IRQHandler [WEAK] + EXPORT USBFS_IRQHandler [WEAK] + +;/* external interrupts handler */ +WWDGT_IRQHandler +LVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FMC_IRQHandler +RCU_CTC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA0_Channel0_IRQHandler +DMA0_Channel1_IRQHandler +DMA0_Channel2_IRQHandler +DMA0_Channel3_IRQHandler +DMA0_Channel4_IRQHandler +DMA0_Channel5_IRQHandler +DMA0_Channel6_IRQHandler +ADC0_1_IRQHandler +CAN0_TX_IRQHandler +CAN0_RX0_IRQHandler +CAN0_RX1_IRQHandler +CAN0_EWMC_IRQHandler +EXTI5_9_IRQHandler +TIMER0_BRK_TIMER8_IRQHandler +TIMER0_UP_TIMER9_IRQHandler +TIMER0_TRG_CMT_TIMER10_IRQHandler +TIMER0_Channel_IRQHandler +TIMER1_IRQHandler +TIMER2_IRQHandler +TIMER3_IRQHandler +I2C0_EV_IRQHandler +I2C0_ER_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +SPI0_IRQHandler +SPI1_IRQHandler +USART0_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +EXTI10_15_IRQHandler +RTC_Alarm_IRQHandler +USBFS_WKUP_IRQHandler +TIMER7_BRK_TIMER11_IRQHandler +TIMER7_UP_TIMER12_IRQHandler +TIMER7_TRG_CMT_TIMER13_IRQHandler +TIMER7_Channel_IRQHandler +EXMC_IRQHandler +TIMER4_IRQHandler +SPI2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +TIMER5_IRQHandler +TIMER6_IRQHandler +DMA1_Channel0_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +CAN1_TX_IRQHandler +CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_EWMC_IRQHandler +USBFS_IRQHandler + + B . + ENDP + + ALIGN + +; user Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + END diff --git a/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c b/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c new file mode 100644 index 0000000..225ed31 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c @@ -0,0 +1,947 @@ +/*! + \file system_gd32c10x.c + \brief CMSIS Cortex-M4 Device Peripheral Access Layer Source File for + GD32C10x Device Series +*/ + +/* Copyright (c) 2009 - 2014 ARM LIMITED + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------*/ + +/* This file refers the CMSIS standard, some adjustments are made according to GigaDevice chips */ + +#include "gd32c10x.h" + +/* system frequency define */ +#define __IRC8M (IRC8M_VALUE) /* internal 8 MHz RC oscillator frequency */ +#define __HXTAL (HXTAL_VALUE) /* high speed crystal oscillator frequency */ +#define __SYS_OSC_CLK (__IRC8M) /* main oscillator frequency */ + +/* Vector Table base offset */ +#define VECT_TAB_OFFSET 0x00 /* This value must be a multiple of 0x200. */ + +/* select a system clock by uncommenting the following line */ +/* use IRC8M */ +// #define __SYSTEM_CLOCK_IRC8M (uint32_t)(__IRC8M) +// #define __SYSTEM_CLOCK_48M_PLL_IRC8M (uint32_t)(48000000) +//#define __SYSTEM_CLOCK_72M_PLL_IRC8M (uint32_t)(72000000) +//#define __SYSTEM_CLOCK_108M_PLL_IRC8M (uint32_t)(108000000) +// #define __SYSTEM_CLOCK_120M_PLL_IRC8M (uint32_t)(120000000) + +/* use HXTAL(CK_HXTAL = 8M) */ +// #define __SYSTEM_CLOCK_HXTAL (uint32_t)(__HXTAL) +// #define __SYSTEM_CLOCK_48M_PLL_HXTAL (uint32_t)(48000000) +//#define __SYSTEM_CLOCK_72M_PLL_HXTAL (uint32_t)(72000000) +//#define __SYSTEM_CLOCK_108M_PLL_HXTAL (uint32_t)(108000000) +#define __SYSTEM_CLOCK_120M_PLL_HXTAL (uint32_t)(120000000) + +/* The following is to prevent Vcore fluctuations caused by frequency switching. + It is strongly recommended to include it to avoid issues caused by self-removal. */ +#define RCU_MODIFY_4(__delay) do{ \ + volatile uint32_t i, reg; \ + if(0 != __delay){ \ + /* Insert a software delay */ \ + for(i=0; i<__delay; i++){ \ + } \ + reg = RCU_CFG0; \ + reg &= ~(RCU_CFG0_AHBPSC); \ + reg |= RCU_AHB_CKSYS_DIV2; \ + /* AHB = SYSCLK/2 */ \ + RCU_CFG0 = reg; \ + /* Insert a software delay */ \ + for(i=0; i<__delay; i++){ \ + } \ + reg = RCU_CFG0; \ + reg &= ~(RCU_CFG0_AHBPSC); \ + reg |= RCU_AHB_CKSYS_DIV4; \ + /* AHB = SYSCLK/4 */ \ + RCU_CFG0 = reg; \ + /* Insert a software delay */ \ + for(i=0; i<__delay; i++){ \ + } \ + reg = RCU_CFG0; \ + reg &= ~(RCU_CFG0_AHBPSC); \ + reg |= RCU_AHB_CKSYS_DIV8; \ + /* AHB = SYSCLK/8 */ \ + RCU_CFG0 = reg; \ + /* Insert a software delay */ \ + for(i=0; i<__delay; i++){ \ + } \ + reg = RCU_CFG0; \ + reg &= ~(RCU_CFG0_AHBPSC); \ + reg |= RCU_AHB_CKSYS_DIV16; \ + /* AHB = SYSCLK/16 */ \ + RCU_CFG0 = reg; \ + /* Insert a software delay */ \ + for(i=0; i<__delay; i++){ \ + } \ + } \ + }while(0) + +#define SEL_IRC8M 0x00U +#define SEL_HXTAL 0x01U +#define SEL_PLL 0x02U + +/* set the system clock frequency and declare the system clock configuration function */ +#ifdef __SYSTEM_CLOCK_IRC8M +uint32_t SystemCoreClock = __SYSTEM_CLOCK_IRC8M; +static void system_clock_8m_irc8m(void); +#elif defined (__SYSTEM_CLOCK_48M_PLL_IRC8M) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_48M_PLL_IRC8M; +static void system_clock_48m_irc8m(void); +#elif defined (__SYSTEM_CLOCK_72M_PLL_IRC8M) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_72M_PLL_IRC8M; +static void system_clock_72m_irc8m(void); +#elif defined (__SYSTEM_CLOCK_108M_PLL_IRC8M) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_108M_PLL_IRC8M; +static void system_clock_108m_irc8m(void); +#elif defined (__SYSTEM_CLOCK_120M_PLL_IRC8M) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_120M_PLL_IRC8M; +static void system_clock_120m_irc8m(void); + +#elif defined (__SYSTEM_CLOCK_HXTAL) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_HXTAL; +static void system_clock_hxtal(void); +#elif defined (__SYSTEM_CLOCK_48M_PLL_HXTAL) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_48M_PLL_HXTAL; +static void system_clock_48m_hxtal(void); +#elif defined (__SYSTEM_CLOCK_72M_PLL_HXTAL) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_72M_PLL_HXTAL; +static void system_clock_72m_hxtal(void); +#elif defined (__SYSTEM_CLOCK_108M_PLL_HXTAL) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_108M_PLL_HXTAL; +static void system_clock_108m_hxtal(void); +#elif defined (__SYSTEM_CLOCK_120M_PLL_HXTAL) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_120M_PLL_HXTAL; +static void system_clock_120m_hxtal(void); +#endif /* __SYSTEM_CLOCK_IRC8M */ + +/* configure the system clock */ +static void system_clock_config(void); + +/* software delay to prevent the impact of Vcore fluctuations. + It is strongly recommended to include it to avoid issues caused by self-removal. */ +static void _soft_delay_(uint32_t time) +{ + __IO uint32_t i; + for(i=0; iCPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ +#endif + /* reset the RCU clock configuration to the default reset state */ + /* Set IRC8MEN bit */ + RCU_CTL |= RCU_CTL_IRC8MEN; + while(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)) { + } + if(((RCU_CFG0 & RCU_CFG0_SCSS) == RCU_SCSS_PLL)){ + RCU_MODIFY_4(0x50); + } + + RCU_CFG0 &= ~RCU_CFG0_SCS; + _soft_delay_(200); + + /* Reset HXTALEN, CKMEN, PLLEN, PLL1EN and PLL2EN bits */ + RCU_CTL &= ~(RCU_CTL_PLLEN |RCU_CTL_PLL1EN | RCU_CTL_PLL2EN | RCU_CTL_CKMEN | RCU_CTL_HXTALEN); + /* disable all interrupts */ + RCU_INT = 0x00ff0000U; + + /* Reset CFG0 and CFG1 registers */ + RCU_CFG0 = 0x00000000U; + RCU_CFG1 = 0x00000000U; + + /* reset HXTALBPS bit */ + RCU_CTL &= ~(RCU_CTL_HXTALBPS); + + /* configure the system clock source, PLL Multiplier, AHB/APBx prescalers and Flash settings */ + system_clock_config(); + +#ifdef VECT_TAB_SRAM + nvic_vector_table_set(NVIC_VECTTAB_RAM,VECT_TAB_OFFSET); +#else + nvic_vector_table_set(NVIC_VECTTAB_FLASH,VECT_TAB_OFFSET); +#endif +} + +/*! + \brief configure the system clock + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_config(void) +{ +#ifdef __SYSTEM_CLOCK_IRC8M + system_clock_8m_irc8m(); +#elif defined (__SYSTEM_CLOCK_48M_PLL_IRC8M) + system_clock_48m_irc8m(); +#elif defined (__SYSTEM_CLOCK_72M_PLL_IRC8M) + system_clock_72m_irc8m(); +#elif defined (__SYSTEM_CLOCK_108M_PLL_IRC8M) + system_clock_108m_irc8m(); +#elif defined (__SYSTEM_CLOCK_120M_PLL_IRC8M) + system_clock_120m_irc8m(); + +#elif defined (__SYSTEM_CLOCK_HXTAL) + system_clock_hxtal(); +#elif defined (__SYSTEM_CLOCK_48M_PLL_HXTAL) + system_clock_48m_hxtal(); +#elif defined (__SYSTEM_CLOCK_72M_PLL_HXTAL) + system_clock_72m_hxtal(); +#elif defined (__SYSTEM_CLOCK_108M_PLL_HXTAL) + system_clock_108m_hxtal(); +#elif defined (__SYSTEM_CLOCK_120M_PLL_HXTAL) + system_clock_120m_hxtal(); +#endif /* __SYSTEM_CLOCK_IRC8M */ +} + +#ifdef __SYSTEM_CLOCK_IRC8M +/*! + \brief configure the system clock to 8M by IRC8M + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_8m_irc8m(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable IRC8M */ + RCU_CTL |= RCU_CTL_IRC8MEN; + + /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); + } + while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ + while(1){ + } + } + + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + reg_temp = RCU_CFG0; + /* select IRC8M as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_IRC8M; + RCU_CFG0 = reg_temp; + + /* wait until IRC8M is selected as system clock */ + while(0U != (RCU_CFG0 & RCU_SCSS_IRC8M)){ + } +} + +#elif defined (__SYSTEM_CLOCK_48M_PLL_IRC8M) +/*! + \brief configure the system clock to 48M by PLL which selects IRC8M as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_48m_irc8m(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable IRC8M */ + RCU_CTL |= RCU_CTL_IRC8MEN; + + /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); + } + while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_1; + + /* IRC8M is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_IRC8M/2) * 12 = 48 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= RCU_PLL_MUL12; + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} + +#elif defined (__SYSTEM_CLOCK_72M_PLL_IRC8M) +/*! + \brief configure the system clock to 72M by PLL which selects IRC8M as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_72m_irc8m(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable IRC8M */ + RCU_CTL |= RCU_CTL_IRC8MEN; + + /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); + }while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_2; + + /* IRC8M is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_IRC8M/2) * 18 = 72 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= RCU_PLL_MUL18; + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} + +#elif defined (__SYSTEM_CLOCK_108M_PLL_IRC8M) +/*! + \brief configure the system clock to 108M by PLL which selects IRC8M as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_108m_irc8m(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable IRC8M */ + RCU_CTL |= RCU_CTL_IRC8MEN; + + /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); + }while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_3; + + /* IRC8M is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_IRC8M/2) * 27 = 108 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= RCU_PLL_MUL27; + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} + +#elif defined (__SYSTEM_CLOCK_120M_PLL_IRC8M) +/*! + \brief configure the system clock to 120M by PLL which selects IRC8M as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_120m_irc8m(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable IRC8M */ + RCU_CTL |= RCU_CTL_IRC8MEN; + + /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); + }while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_3; + + /* IRC8M is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_IRC8M/2) * 30 = 120 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= RCU_PLL_MUL30; + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} + +#elif defined (__SYSTEM_CLOCK_HXTAL) +/*! + \brief configure the system clock to HXTAL + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_hxtal(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable HXTAL */ + RCU_CTL |= RCU_CTL_HXTALEN; + + /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); + }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ + while(1){ + } + } + + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + reg_temp = RCU_CFG0; + /* select HXTAL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_HXTAL; + RCU_CFG0 = reg_temp; + + /* wait until HXTAL is selected as system clock */ + while(0 == (RCU_CFG0 & RCU_SCSS_HXTAL)){ + } +} + +#elif defined (__SYSTEM_CLOCK_48M_PLL_HXTAL) +/*! + \brief configure the system clock to 48M by PLL which selects HXTAL(8M) as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_48m_hxtal(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable HXTAL */ + RCU_CTL |= RCU_CTL_HXTALEN; + + /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); + }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_1; + + /* HXTAL is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_PREDIV0) * 12 = 48 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_PLL_MUL12); + + RCU_CFG1 &= ~(RCU_CFG1_PLLPRESEL | RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); + + /* CK_PREDIV0 = (CK_HXTAL)/2 *10 /10 = 4 MHz */ + RCU_CFG1 |= (RCU_PLLPRESRC_HXTAL | RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL10 | RCU_PREDV1_DIV2 | RCU_PREDV0_DIV10); + + /* enable PLL1 */ + RCU_CTL |= RCU_CTL_PLL1EN; + /* wait till PLL1 is ready */ + while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ + } + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} +#elif defined (__SYSTEM_CLOCK_72M_PLL_HXTAL) +/*! + \brief configure the system clock to 72M by PLL which selects HXTAL(8M) as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_72m_hxtal(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable HXTAL */ + RCU_CTL |= RCU_CTL_HXTALEN; + + /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); + }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_2; + + /* HXTAL is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_PREDIV0) * 18 = 72 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_PLL_MUL18); + + RCU_CFG1 &= ~(RCU_CFG1_PLLPRESEL | RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); + + /* CK_PREDIV0 = (CK_HXTAL)/2 *10 /10 = 4 MHz */ + RCU_CFG1 |= (RCU_PLLPRESRC_HXTAL | RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL10 | RCU_PREDV1_DIV2 | RCU_PREDV0_DIV10); + + /* enable PLL1 */ + RCU_CTL |= RCU_CTL_PLL1EN; + /* wait till PLL1 is ready */ + while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ + } + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} + +#elif defined (__SYSTEM_CLOCK_108M_PLL_HXTAL) +/*! + \brief configure the system clock to 108M by PLL which selects HXTAL(8M) as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_108m_hxtal(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable HXTAL */ + RCU_CTL |= RCU_CTL_HXTALEN; + + /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); + }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_3; + + /* HXTAL is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_PREDIV0) * 27 = 108 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_PLL_MUL27); + + RCU_CFG1 &= ~(RCU_CFG1_PLLPRESEL | RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); + + /* CK_PREDIV0 = (CK_HXTAL)/2 *10 /10 = 4 MHz */ + RCU_CFG1 |= (RCU_PLLPRESRC_HXTAL | RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL10 | RCU_PREDV1_DIV2 | RCU_PREDV0_DIV10); + + /* enable PLL1 */ + RCU_CTL |= RCU_CTL_PLL1EN; + /* wait till PLL1 is ready */ + while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ + } + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} + +#elif defined (__SYSTEM_CLOCK_120M_PLL_HXTAL) +/*! + \brief configure the system clock to 120M by PLL which selects HXTAL(8M) as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_120m_hxtal(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable HXTAL */ + RCU_CTL |= RCU_CTL_HXTALEN; + + /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); + }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_3; + + /* HXTAL is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_PREDIV0) * 30 = 120 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_PLL_MUL30); + + RCU_CFG1 &= ~(RCU_CFG1_PLLPRESEL | RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); + + /* CK_PREDIV0 = (CK_HXTAL)/2 *10 /10 = 4 MHz */ + RCU_CFG1 |= (RCU_PLLPRESRC_HXTAL | RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL10 | RCU_PREDV1_DIV2 | RCU_PREDV0_DIV10); + + /* enable PLL1 */ + RCU_CTL |= RCU_CTL_PLL1EN; + /* wait till PLL1 is ready */ + while((RCU_CTL & RCU_CTL_PLL1STB) == 0U){ + } + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} +#endif /* __SYSTEM_CLOCK_IRC8M */ + +/*! + \brief update the SystemCoreClock with current core clock retrieved from cpu registers + \param[in] none + \param[out] none + \retval none +*/ +void SystemCoreClockUpdate (void) +{ + uint32_t sws = 0U; + uint32_t pllsel = 0U, pllpresel = 0U, predv0sel = 0U, pllmf,ck_src = 0U; + uint32_t predv0 = 0U, predv1 = 0U, pll1mf = 0U,idx = 0U,clk_exp = 0U; + /* exponent of AHB clock divider */ + const uint8_t ahb_exp[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + + sws = GET_BITS(RCU_CFG0, 2, 3); + switch(sws){ + /* IRC8M is selected as CK_SYS */ + case SEL_IRC8M: + SystemCoreClock = IRC8M_VALUE; + break; + /* HXTAL is selected as CK_SYS */ + case SEL_HXTAL: + SystemCoreClock = HXTAL_VALUE; + break; + /* PLL is selected as CK_SYS */ + case SEL_PLL: + /* PLL clock source selection, HXTAL, IRC48M or IRC8M/2 */ + pllsel = (RCU_CFG0 & RCU_CFG0_PLLSEL); + + if(RCU_PLLSRC_HXTAL_IRC48M == pllsel){ + /* PLL clock source is HXTAL or IRC48M */ + pllpresel = (RCU_CFG1 & RCU_CFG1_PLLPRESEL); + + if(RCU_PLLPRESRC_HXTAL == pllpresel){ + /* PLL clock source is HXTAL */ + ck_src = HXTAL_VALUE; + }else{ + /* PLL clock source is IRC48 */ + ck_src = IRC48M_VALUE; + } + + predv0sel = (RCU_CFG1 & RCU_CFG1_PREDV0SEL); + /* source clock use PLL1 */ + if(RCU_PREDV0SRC_CKPLL1 == predv0sel){ + predv1 = ((RCU_CFG1 & RCU_CFG1_PREDV1) >> 4) + 1U; + pll1mf = ((RCU_CFG1 & RCU_CFG1_PLL1MF) >> 8) + 2U; + if(17U == pll1mf){ + pll1mf = 20U; + } + ck_src = (ck_src/predv1)*pll1mf; + } + predv0 = (RCU_CFG1 & RCU_CFG1_PREDV0) + 1U; + ck_src /= predv0; + }else{ + /* PLL clock source is IRC8M/2 */ + ck_src = IRC8M_VALUE/2U; + } + + /* PLL multiplication factor */ + pllmf = GET_BITS(RCU_CFG0, 18, 21); + if((RCU_CFG0 & RCU_CFG0_PLLMF_4)){ + pllmf |= 0x10U; + } + if(pllmf < 15U){ + pllmf += 2U; + }else{ + pllmf += 1U; + } + SystemCoreClock = ck_src*pllmf; + if(15U == pllmf){ + SystemCoreClock = ck_src*6U + ck_src/2U; + } + + break; + /* IRC8M is selected as CK_SYS */ + default: + SystemCoreClock = IRC8M_VALUE; + break; + } + /* calculate AHB clock frequency */ + idx = GET_BITS(RCU_CFG0, 4, 7); + clk_exp = ahb_exp[idx]; + SystemCoreClock >>= clk_exp; +} + +#ifdef __FIRMWARE_VERSION_DEFINE +/*! + \brief get firmware version + \param[in] none + \param[out] none + \retval firmware version +*/ +uint32_t gd32c10x_firmware_version_get(void) +{ + return __GD32C10X_STDPERIPH_VERSION; +} +#endif /* __FIRMWARE_VERSION_DEFINE */ diff --git a/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c.base@1.0.0 b/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c.base@1.0.0 new file mode 100644 index 0000000..11a3a71 --- /dev/null +++ b/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c.base@1.0.0 @@ -0,0 +1,947 @@ +/*! + \file system_gd32c10x.c + \brief CMSIS Cortex-M4 Device Peripheral Access Layer Source File for + GD32C10x Device Series +*/ + +/* Copyright (c) 2009 - 2014 ARM LIMITED + Copyright (c) 2025, GigaDevice Semiconductor Inc. + + All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + - Neither the name of ARM nor the names of its contributors may be used + to endorse or promote products derived from this software without + specific prior written permission. + * + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------*/ + +/* This file refers the CMSIS standard, some adjustments are made according to GigaDevice chips */ + +#include "gd32c10x.h" + +/* system frequency define */ +#define __IRC8M (IRC8M_VALUE) /* internal 8 MHz RC oscillator frequency */ +#define __HXTAL (HXTAL_VALUE) /* high speed crystal oscillator frequency */ +#define __SYS_OSC_CLK (__IRC8M) /* main oscillator frequency */ + +/* Vector Table base offset */ +#define VECT_TAB_OFFSET 0x00 /* This value must be a multiple of 0x200. */ + +/* select a system clock by uncommenting the following line */ +/* use IRC8M */ +//#define __SYSTEM_CLOCK_IRC8M (uint32_t)(__IRC8M) +//#define __SYSTEM_CLOCK_48M_PLL_IRC8M (uint32_t)(48000000) +//#define __SYSTEM_CLOCK_72M_PLL_IRC8M (uint32_t)(72000000) +//#define __SYSTEM_CLOCK_108M_PLL_IRC8M (uint32_t)(108000000) +//#define __SYSTEM_CLOCK_120M_PLL_IRC8M (uint32_t)(120000000) + +/* use HXTAL(CK_HXTAL = 8M) */ +//#define __SYSTEM_CLOCK_HXTAL (uint32_t)(__HXTAL) +//#define __SYSTEM_CLOCK_48M_PLL_HXTAL (uint32_t)(48000000) +//#define __SYSTEM_CLOCK_72M_PLL_HXTAL (uint32_t)(72000000) +//#define __SYSTEM_CLOCK_108M_PLL_HXTAL (uint32_t)(108000000) +#define __SYSTEM_CLOCK_120M_PLL_HXTAL (uint32_t)(120000000) + +/* The following is to prevent Vcore fluctuations caused by frequency switching. + It is strongly recommended to include it to avoid issues caused by self-removal. */ +#define RCU_MODIFY_4(__delay) do{ \ + volatile uint32_t i, reg; \ + if(0 != __delay){ \ + /* Insert a software delay */ \ + for(i=0; i<__delay; i++){ \ + } \ + reg = RCU_CFG0; \ + reg &= ~(RCU_CFG0_AHBPSC); \ + reg |= RCU_AHB_CKSYS_DIV2; \ + /* AHB = SYSCLK/2 */ \ + RCU_CFG0 = reg; \ + /* Insert a software delay */ \ + for(i=0; i<__delay; i++){ \ + } \ + reg = RCU_CFG0; \ + reg &= ~(RCU_CFG0_AHBPSC); \ + reg |= RCU_AHB_CKSYS_DIV4; \ + /* AHB = SYSCLK/4 */ \ + RCU_CFG0 = reg; \ + /* Insert a software delay */ \ + for(i=0; i<__delay; i++){ \ + } \ + reg = RCU_CFG0; \ + reg &= ~(RCU_CFG0_AHBPSC); \ + reg |= RCU_AHB_CKSYS_DIV8; \ + /* AHB = SYSCLK/8 */ \ + RCU_CFG0 = reg; \ + /* Insert a software delay */ \ + for(i=0; i<__delay; i++){ \ + } \ + reg = RCU_CFG0; \ + reg &= ~(RCU_CFG0_AHBPSC); \ + reg |= RCU_AHB_CKSYS_DIV16; \ + /* AHB = SYSCLK/16 */ \ + RCU_CFG0 = reg; \ + /* Insert a software delay */ \ + for(i=0; i<__delay; i++){ \ + } \ + } \ + }while(0) + +#define SEL_IRC8M 0x00U +#define SEL_HXTAL 0x01U +#define SEL_PLL 0x02U + +/* set the system clock frequency and declare the system clock configuration function */ +#ifdef __SYSTEM_CLOCK_IRC8M +uint32_t SystemCoreClock = __SYSTEM_CLOCK_IRC8M; +static void system_clock_8m_irc8m(void); +#elif defined (__SYSTEM_CLOCK_48M_PLL_IRC8M) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_48M_PLL_IRC8M; +static void system_clock_48m_irc8m(void); +#elif defined (__SYSTEM_CLOCK_72M_PLL_IRC8M) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_72M_PLL_IRC8M; +static void system_clock_72m_irc8m(void); +#elif defined (__SYSTEM_CLOCK_108M_PLL_IRC8M) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_108M_PLL_IRC8M; +static void system_clock_108m_irc8m(void); +#elif defined (__SYSTEM_CLOCK_120M_PLL_IRC8M) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_120M_PLL_IRC8M; +static void system_clock_120m_irc8m(void); + +#elif defined (__SYSTEM_CLOCK_HXTAL) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_HXTAL; +static void system_clock_hxtal(void); +#elif defined (__SYSTEM_CLOCK_48M_PLL_HXTAL) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_48M_PLL_HXTAL; +static void system_clock_48m_hxtal(void); +#elif defined (__SYSTEM_CLOCK_72M_PLL_HXTAL) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_72M_PLL_HXTAL; +static void system_clock_72m_hxtal(void); +#elif defined (__SYSTEM_CLOCK_108M_PLL_HXTAL) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_108M_PLL_HXTAL; +static void system_clock_108m_hxtal(void); +#elif defined (__SYSTEM_CLOCK_120M_PLL_HXTAL) +uint32_t SystemCoreClock = __SYSTEM_CLOCK_120M_PLL_HXTAL; +static void system_clock_120m_hxtal(void); +#endif /* __SYSTEM_CLOCK_IRC8M */ + +/* configure the system clock */ +static void system_clock_config(void); + +/* software delay to prevent the impact of Vcore fluctuations. + It is strongly recommended to include it to avoid issues caused by self-removal. */ +static void _soft_delay_(uint32_t time) +{ + __IO uint32_t i; + for(i=0; iCPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ +#endif + /* reset the RCU clock configuration to the default reset state */ + /* Set IRC8MEN bit */ + RCU_CTL |= RCU_CTL_IRC8MEN; + while(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)) { + } + if(((RCU_CFG0 & RCU_CFG0_SCSS) == RCU_SCSS_PLL)){ + RCU_MODIFY_4(0x50); + } + + RCU_CFG0 &= ~RCU_CFG0_SCS; + _soft_delay_(200); + + /* Reset HXTALEN, CKMEN, PLLEN, PLL1EN and PLL2EN bits */ + RCU_CTL &= ~(RCU_CTL_PLLEN |RCU_CTL_PLL1EN | RCU_CTL_PLL2EN | RCU_CTL_CKMEN | RCU_CTL_HXTALEN); + /* disable all interrupts */ + RCU_INT = 0x00ff0000U; + + /* Reset CFG0 and CFG1 registers */ + RCU_CFG0 = 0x00000000U; + RCU_CFG1 = 0x00000000U; + + /* reset HXTALBPS bit */ + RCU_CTL &= ~(RCU_CTL_HXTALBPS); + + /* configure the system clock source, PLL Multiplier, AHB/APBx prescalers and Flash settings */ + system_clock_config(); + +#ifdef VECT_TAB_SRAM + nvic_vector_table_set(NVIC_VECTTAB_RAM,VECT_TAB_OFFSET); +#else + nvic_vector_table_set(NVIC_VECTTAB_FLASH,VECT_TAB_OFFSET); +#endif +} + +/*! + \brief configure the system clock + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_config(void) +{ +#ifdef __SYSTEM_CLOCK_IRC8M + system_clock_8m_irc8m(); +#elif defined (__SYSTEM_CLOCK_48M_PLL_IRC8M) + system_clock_48m_irc8m(); +#elif defined (__SYSTEM_CLOCK_72M_PLL_IRC8M) + system_clock_72m_irc8m(); +#elif defined (__SYSTEM_CLOCK_108M_PLL_IRC8M) + system_clock_108m_irc8m(); +#elif defined (__SYSTEM_CLOCK_120M_PLL_IRC8M) + system_clock_120m_irc8m(); + +#elif defined (__SYSTEM_CLOCK_HXTAL) + system_clock_hxtal(); +#elif defined (__SYSTEM_CLOCK_48M_PLL_HXTAL) + system_clock_48m_hxtal(); +#elif defined (__SYSTEM_CLOCK_72M_PLL_HXTAL) + system_clock_72m_hxtal(); +#elif defined (__SYSTEM_CLOCK_108M_PLL_HXTAL) + system_clock_108m_hxtal(); +#elif defined (__SYSTEM_CLOCK_120M_PLL_HXTAL) + system_clock_120m_hxtal(); +#endif /* __SYSTEM_CLOCK_IRC8M */ +} + +#ifdef __SYSTEM_CLOCK_IRC8M +/*! + \brief configure the system clock to 8M by IRC8M + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_8m_irc8m(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable IRC8M */ + RCU_CTL |= RCU_CTL_IRC8MEN; + + /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); + } + while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ + while(1){ + } + } + + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + reg_temp = RCU_CFG0; + /* select IRC8M as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_IRC8M; + RCU_CFG0 = reg_temp; + + /* wait until IRC8M is selected as system clock */ + while(0U != (RCU_CFG0 & RCU_SCSS_IRC8M)){ + } +} + +#elif defined (__SYSTEM_CLOCK_48M_PLL_IRC8M) +/*! + \brief configure the system clock to 48M by PLL which selects IRC8M as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_48m_irc8m(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable IRC8M */ + RCU_CTL |= RCU_CTL_IRC8MEN; + + /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); + } + while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_1; + + /* IRC8M is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_IRC8M/2) * 12 = 48 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= RCU_PLL_MUL12; + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} + +#elif defined (__SYSTEM_CLOCK_72M_PLL_IRC8M) +/*! + \brief configure the system clock to 72M by PLL which selects IRC8M as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_72m_irc8m(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable IRC8M */ + RCU_CTL |= RCU_CTL_IRC8MEN; + + /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); + }while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_2; + + /* IRC8M is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_IRC8M/2) * 18 = 72 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= RCU_PLL_MUL18; + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} + +#elif defined (__SYSTEM_CLOCK_108M_PLL_IRC8M) +/*! + \brief configure the system clock to 108M by PLL which selects IRC8M as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_108m_irc8m(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable IRC8M */ + RCU_CTL |= RCU_CTL_IRC8MEN; + + /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); + }while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_3; + + /* IRC8M is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_IRC8M/2) * 27 = 108 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= RCU_PLL_MUL27; + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} + +#elif defined (__SYSTEM_CLOCK_120M_PLL_IRC8M) +/*! + \brief configure the system clock to 120M by PLL which selects IRC8M as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_120m_irc8m(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable IRC8M */ + RCU_CTL |= RCU_CTL_IRC8MEN; + + /* wait until IRC8M is stable or the startup time is longer than IRC8M_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_IRC8MSTB); + }while((0U == stab_flag) && (IRC8M_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_IRC8MSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_3; + + /* IRC8M is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_IRC8M/2) * 30 = 120 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= RCU_PLL_MUL30; + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} + +#elif defined (__SYSTEM_CLOCK_HXTAL) +/*! + \brief configure the system clock to HXTAL + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_hxtal(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable HXTAL */ + RCU_CTL |= RCU_CTL_HXTALEN; + + /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); + }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ + while(1){ + } + } + + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + reg_temp = RCU_CFG0; + /* select HXTAL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_HXTAL; + RCU_CFG0 = reg_temp; + + /* wait until HXTAL is selected as system clock */ + while(0 == (RCU_CFG0 & RCU_SCSS_HXTAL)){ + } +} + +#elif defined (__SYSTEM_CLOCK_48M_PLL_HXTAL) +/*! + \brief configure the system clock to 48M by PLL which selects HXTAL(8M) as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_48m_hxtal(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable HXTAL */ + RCU_CTL |= RCU_CTL_HXTALEN; + + /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); + }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_1; + + /* HXTAL is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_PREDIV0) * 12 = 48 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_PLL_MUL12); + + RCU_CFG1 &= ~(RCU_CFG1_PLLPRESEL | RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); + + /* CK_PREDIV0 = (CK_HXTAL)/2 *10 /10 = 4 MHz */ + RCU_CFG1 |= (RCU_PLLPRESRC_HXTAL | RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL10 | RCU_PREDV1_DIV2 | RCU_PREDV0_DIV10); + + /* enable PLL1 */ + RCU_CTL |= RCU_CTL_PLL1EN; + /* wait till PLL1 is ready */ + while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ + } + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} +#elif defined (__SYSTEM_CLOCK_72M_PLL_HXTAL) +/*! + \brief configure the system clock to 72M by PLL which selects HXTAL(8M) as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_72m_hxtal(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable HXTAL */ + RCU_CTL |= RCU_CTL_HXTALEN; + + /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); + }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_2; + + /* HXTAL is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_PREDIV0) * 18 = 72 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_PLL_MUL18); + + RCU_CFG1 &= ~(RCU_CFG1_PLLPRESEL | RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); + + /* CK_PREDIV0 = (CK_HXTAL)/2 *10 /10 = 4 MHz */ + RCU_CFG1 |= (RCU_PLLPRESRC_HXTAL | RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL10 | RCU_PREDV1_DIV2 | RCU_PREDV0_DIV10); + + /* enable PLL1 */ + RCU_CTL |= RCU_CTL_PLL1EN; + /* wait till PLL1 is ready */ + while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ + } + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} + +#elif defined (__SYSTEM_CLOCK_108M_PLL_HXTAL) +/*! + \brief configure the system clock to 108M by PLL which selects HXTAL(8M) as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_108m_hxtal(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable HXTAL */ + RCU_CTL |= RCU_CTL_HXTALEN; + + /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); + }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_3; + + /* HXTAL is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_PREDIV0) * 27 = 108 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_PLL_MUL27); + + RCU_CFG1 &= ~(RCU_CFG1_PLLPRESEL | RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); + + /* CK_PREDIV0 = (CK_HXTAL)/2 *10 /10 = 4 MHz */ + RCU_CFG1 |= (RCU_PLLPRESRC_HXTAL | RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL10 | RCU_PREDV1_DIV2 | RCU_PREDV0_DIV10); + + /* enable PLL1 */ + RCU_CTL |= RCU_CTL_PLL1EN; + /* wait till PLL1 is ready */ + while((RCU_CTL & RCU_CTL_PLL1STB) == 0){ + } + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} + +#elif defined (__SYSTEM_CLOCK_120M_PLL_HXTAL) +/*! + \brief configure the system clock to 120M by PLL which selects HXTAL(8M) as its clock source + \param[in] none + \param[out] none + \retval none +*/ +static void system_clock_120m_hxtal(void) +{ + uint32_t timeout = 0U; + uint32_t stab_flag = 0U; + __IO uint32_t reg_temp; + + /* enable HXTAL */ + RCU_CTL |= RCU_CTL_HXTALEN; + + /* wait until HXTAL is stable or the startup time is longer than HXTAL_STARTUP_TIMEOUT */ + do{ + timeout++; + stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB); + }while((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout)); + + /* if fail */ + if(0U == (RCU_CTL & RCU_CTL_HXTALSTB)){ + while(1){ + } + } + + FMC_WS = (FMC_WS & (~FMC_WS_WSCNT)) | FMC_WAIT_STATE_3; + + /* HXTAL is stable */ + /* AHB = SYSCLK */ + RCU_CFG0 |= RCU_AHB_CKSYS_DIV1; + /* APB2 = AHB/1 */ + RCU_CFG0 |= RCU_APB2_CKAHB_DIV1; + /* APB1 = AHB/2 */ + RCU_CFG0 |= RCU_APB1_CKAHB_DIV2; + + /* CK_PLL = (CK_PREDIV0) * 30 = 120 MHz */ + RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4); + RCU_CFG0 |= (RCU_PLLSRC_HXTAL_IRC48M | RCU_PLL_MUL30); + + RCU_CFG1 &= ~(RCU_CFG1_PLLPRESEL | RCU_CFG1_PREDV0SEL | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV1 | RCU_CFG1_PREDV0); + + /* CK_PREDIV0 = (CK_HXTAL)/2 *10 /10 = 4 MHz */ + RCU_CFG1 |= (RCU_PLLPRESRC_HXTAL | RCU_PREDV0SRC_CKPLL1 | RCU_PLL1_MUL10 | RCU_PREDV1_DIV2 | RCU_PREDV0_DIV10); + + /* enable PLL1 */ + RCU_CTL |= RCU_CTL_PLL1EN; + /* wait till PLL1 is ready */ + while((RCU_CTL & RCU_CTL_PLL1STB) == 0U){ + } + + /* enable PLL */ + RCU_CTL |= RCU_CTL_PLLEN; + + /* wait until PLL is stable */ + while(0U == (RCU_CTL & RCU_CTL_PLLSTB)){ + } + + reg_temp = RCU_CFG0; + /* select PLL as system clock */ + reg_temp &= ~RCU_CFG0_SCS; + reg_temp |= RCU_CKSYSSRC_PLL; + RCU_CFG0 = reg_temp; + + /* wait until PLL is selected as system clock */ + while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ + } +} +#endif /* __SYSTEM_CLOCK_IRC8M */ + +/*! + \brief update the SystemCoreClock with current core clock retrieved from cpu registers + \param[in] none + \param[out] none + \retval none +*/ +void SystemCoreClockUpdate (void) +{ + uint32_t sws = 0U; + uint32_t pllsel = 0U, pllpresel = 0U, predv0sel = 0U, pllmf,ck_src = 0U; + uint32_t predv0 = 0U, predv1 = 0U, pll1mf = 0U,idx = 0U,clk_exp = 0U; + /* exponent of AHB clock divider */ + const uint8_t ahb_exp[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + + sws = GET_BITS(RCU_CFG0, 2, 3); + switch(sws){ + /* IRC8M is selected as CK_SYS */ + case SEL_IRC8M: + SystemCoreClock = IRC8M_VALUE; + break; + /* HXTAL is selected as CK_SYS */ + case SEL_HXTAL: + SystemCoreClock = HXTAL_VALUE; + break; + /* PLL is selected as CK_SYS */ + case SEL_PLL: + /* PLL clock source selection, HXTAL, IRC48M or IRC8M/2 */ + pllsel = (RCU_CFG0 & RCU_CFG0_PLLSEL); + + if(RCU_PLLSRC_HXTAL_IRC48M == pllsel){ + /* PLL clock source is HXTAL or IRC48M */ + pllpresel = (RCU_CFG1 & RCU_CFG1_PLLPRESEL); + + if(RCU_PLLPRESRC_HXTAL == pllpresel){ + /* PLL clock source is HXTAL */ + ck_src = HXTAL_VALUE; + }else{ + /* PLL clock source is IRC48 */ + ck_src = IRC48M_VALUE; + } + + predv0sel = (RCU_CFG1 & RCU_CFG1_PREDV0SEL); + /* source clock use PLL1 */ + if(RCU_PREDV0SRC_CKPLL1 == predv0sel){ + predv1 = ((RCU_CFG1 & RCU_CFG1_PREDV1) >> 4) + 1U; + pll1mf = ((RCU_CFG1 & RCU_CFG1_PLL1MF) >> 8) + 2U; + if(17U == pll1mf){ + pll1mf = 20U; + } + ck_src = (ck_src/predv1)*pll1mf; + } + predv0 = (RCU_CFG1 & RCU_CFG1_PREDV0) + 1U; + ck_src /= predv0; + }else{ + /* PLL clock source is IRC8M/2 */ + ck_src = IRC8M_VALUE/2U; + } + + /* PLL multiplication factor */ + pllmf = GET_BITS(RCU_CFG0, 18, 21); + if((RCU_CFG0 & RCU_CFG0_PLLMF_4)){ + pllmf |= 0x10U; + } + if(pllmf < 15U){ + pllmf += 2U; + }else{ + pllmf += 1U; + } + SystemCoreClock = ck_src*pllmf; + if(15U == pllmf){ + SystemCoreClock = ck_src*6U + ck_src/2U; + } + + break; + /* IRC8M is selected as CK_SYS */ + default: + SystemCoreClock = IRC8M_VALUE; + break; + } + /* calculate AHB clock frequency */ + idx = GET_BITS(RCU_CFG0, 4, 7); + clk_exp = ahb_exp[idx]; + SystemCoreClock >>= clk_exp; +} + +#ifdef __FIRMWARE_VERSION_DEFINE +/*! + \brief get firmware version + \param[in] none + \param[out] none + \retval firmware version +*/ +uint32_t gd32c10x_firmware_version_get(void) +{ + return __GD32C10X_STDPERIPH_VERSION; +} +#endif /* __FIRMWARE_VERSION_DEFINE */ diff --git a/Robot_V2/RTE/_Debug_GD32C103CB/RTE_Components.h b/Robot_V2/RTE/_Debug_GD32C103CB/RTE_Components.h new file mode 100644 index 0000000..5734403 --- /dev/null +++ b/Robot_V2/RTE/_Debug_GD32C103CB/RTE_Components.h @@ -0,0 +1,50 @@ +/* + * CSOLUTION generated file: DO NOT EDIT! + * Generated by: csolution version 2.11.0 + * + * Project: 'Robot_V2.Debug+GD32C103CB' + * Target: 'Debug+GD32C103CB' + */ + +#ifndef RTE_COMPONENTS_H +#define RTE_COMPONENTS_H + + +/* + * Define the Device Header File: + */ +#define CMSIS_device_header "gd32c10x.h" + +/* GigaDevice::Device:GD32C10x_StdPeripherals:ADC@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_ADC +/* GigaDevice::Device:GD32C10x_StdPeripherals:CAN@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_CAN +/* GigaDevice::Device:GD32C10x_StdPeripherals:DBG@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_DBG +/* GigaDevice::Device:GD32C10x_StdPeripherals:DMA@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_DMA +/* GigaDevice::Device:GD32C10x_StdPeripherals:EXTI@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_EXTI +/* GigaDevice::Device:GD32C10x_StdPeripherals:FMC@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_FMC +/* GigaDevice::Device:GD32C10x_StdPeripherals:FWDGT@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_FWDGT +/* GigaDevice::Device:GD32C10x_StdPeripherals:GPIO@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_GPIO +/* GigaDevice::Device:GD32C10x_StdPeripherals:MISC@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_MISC +/* GigaDevice::Device:GD32C10x_StdPeripherals:PMU@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_PMU +/* GigaDevice::Device:GD32C10x_StdPeripherals:RCU@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_RCU +/* GigaDevice::Device:GD32C10x_StdPeripherals:SPI_I2S@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_SPI +/* GigaDevice::Device:GD32C10x_StdPeripherals:TIMER@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_TIMER +/* GigaDevice::Device:GD32C10x_StdPeripherals:USART@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_USART +/* GigaDevice::Device:GD32C10x_StdPeripherals:WWDGT@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_WWDGT + + +#endif /* RTE_COMPONENTS_H */ diff --git a/Robot_V2/RTE/_Release_GD32C103CB/RTE_Components.h b/Robot_V2/RTE/_Release_GD32C103CB/RTE_Components.h new file mode 100644 index 0000000..b9d9195 --- /dev/null +++ b/Robot_V2/RTE/_Release_GD32C103CB/RTE_Components.h @@ -0,0 +1,46 @@ +/* + * CSOLUTION generated file: DO NOT EDIT! + * Generated by: csolution version 2.12.0+p41-gfeadfc5e + * + * Project: 'Robot_V2.Release+GD32C103CB' + * Target: 'Release+GD32C103CB' + */ + +#ifndef RTE_COMPONENTS_H +#define RTE_COMPONENTS_H + + +/* + * Define the Device Header File: + */ +#define CMSIS_device_header "gd32c10x.h" + +/* GigaDevice::Device:GD32C10x_StdPeripherals:BKP@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_BKP +/* GigaDevice::Device:GD32C10x_StdPeripherals:CAN@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_CAN +/* GigaDevice::Device:GD32C10x_StdPeripherals:CRC@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_CRC +/* GigaDevice::Device:GD32C10x_StdPeripherals:DBG@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_DBG +/* GigaDevice::Device:GD32C10x_StdPeripherals:DMA@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_DMA +/* GigaDevice::Device:GD32C10x_StdPeripherals:EXTI@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_EXTI +/* GigaDevice::Device:GD32C10x_StdPeripherals:FMC@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_FMC +/* GigaDevice::Device:GD32C10x_StdPeripherals:FWDGT@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_FWDGT +/* GigaDevice::Device:GD32C10x_StdPeripherals:GPIO@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_GPIO +/* GigaDevice::Device:GD32C10x_StdPeripherals:MISC@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_MISC +/* GigaDevice::Device:GD32C10x_StdPeripherals:PMU@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_PMU +/* GigaDevice::Device:GD32C10x_StdPeripherals:RCU@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_RCU +/* GigaDevice::Device:GD32C10x_StdPeripherals:USART@1.0.0 */ +#define RTE_DEVICE_STDPERIPHERALS_USART + + +#endif /* RTE_COMPONENTS_H */ diff --git a/Robot_V2/Robot_V2.cproject.yml b/Robot_V2/Robot_V2.cproject.yml new file mode 100644 index 0000000..2f4b28b --- /dev/null +++ b/Robot_V2/Robot_V2.cproject.yml @@ -0,0 +1,62 @@ +project: + groups: + - group: Source Files + files: + - file: main.h + - file: main.cpp + - group: sys + files: + - file: sys/systick.cpp + - file: sys/systick.h + - file: sys/initial.cpp + - file: sys/initial.h + - file: sys/flash.h + - file: sys/flash.cpp + - file: sys/OTA.h + - file: sys/OTA.cpp + - file: sys/config.h + - group: device + files: + - file: device/Can.cpp + - file: device/Can.h + components: + - component: ARM::CMSIS:CORE + - component: Device:Startup + - component: Device:GD32C10x_StdPeripherals:CAN + - component: Device:GD32C10x_StdPeripherals:DMA + - component: Device:GD32C10x_StdPeripherals:EXTI + - component: Device:GD32C10x_StdPeripherals:FMC + - component: Device:GD32C10x_StdPeripherals:GPIO + - component: Device:GD32C10x_StdPeripherals:MISC + - component: Device:GD32C10x_StdPeripherals:PMU + - component: Device:GD32C10x_StdPeripherals:RCU + - component: Device:GD32C10x_StdPeripherals:USART + - component: Device:GD32C10x_libopt + - component: Device:GD32C10x_StdPeripherals:DBG + - component: Device:EVAL:GD32C10x + - component: Device:GD32C10x_StdPeripherals:FWDGT + - component: Device:GD32C10x_StdPeripherals:BKP + - component: Device:GD32C10x_StdPeripherals:CRC + output: + type: + - elf + - hex + - map + packs: + - pack: ARM::CMSIS + - pack: GigaDevice::GD32C10x_DFP + misc: + - for-compiler: AC6 + C-CPP: + - -fshort-enums + - -fshort-wchar + - -D__MICROLIB + - -Wno-register + C: + - -D__packed=packed + ASM: + - -D__packed=packed + - -D__MICROLIB + Link: + - --library_type=microlib + - --entry=Reset_Handler diff --git a/Robot_V2/device/ADC.cpp b/Robot_V2/device/ADC.cpp new file mode 100644 index 0000000..afa3e72 --- /dev/null +++ b/Robot_V2/device/ADC.cpp @@ -0,0 +1,274 @@ +#include "adc.h" +#include "Can.h" +#include "DengFOC.h" +#include "Filter.h" +#include "math.h" +#include +#include +#include +#include "systick.h" + +constexpr float ERROR_ADC_VAL = 255.0f; +constexpr float ADC_SCALE = 3.3f / 4096.0f; +constexpr float TEMP_FACTOR = 1000.0f / 4.3f; +constexpr float VCC_FACTOR = 11.0f; +constexpr float CURRENT_OFFSET = -1.60f; +constexpr float CURRENT_FACTOR = + 1.0f / 50.0f * 100.0f; // 50倍放大,100倍电流采样电阻, 单位mA +constexpr float MAX_TEMP = 150.0f; +constexpr float MIN_TEMP = -40.0f; +constexpr float MAX_CURRENT = 40.0f; +constexpr float MIN_CURRENT = -40.0f; +constexpr float MAX_VCC = 65.0f; +constexpr float MIN_VCC = -0.1f; +extern CAN_transmiter CAN0_transmiter; +extern FOC_Controlroller FOC; +sampler sampler; // 采样器初始化 +u16 adc_value[6] = {0}; // 显式初始化数组元素为0 +/*! + \brief configure the DMA peripheral + \param[in] none + \param[out] none + \retval none +*/ +void dma_config(void) { + /* enable DMA0 clock */ + rcu_periph_clock_enable(RCU_DMA0); + /* ADC_DMA_channel configuration */ + dma_parameter_struct dma_data_parameter; + + /* ADC DMA_channel configuration */ + dma_deinit(DMA0, DMA_CH0); + + /* initialize DMA single data mode */ + dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0)); + dma_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE; + dma_data_parameter.memory_addr = (uint32_t)(adc_value); + dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE; + dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT; + dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT; + dma_data_parameter.direction = DMA_PERIPHERAL_TO_MEMORY; + dma_data_parameter.number = 6; + dma_data_parameter.priority = DMA_PRIORITY_HIGH; + dma_init(DMA0, DMA_CH0, &dma_data_parameter); + + dma_circulation_enable(DMA0, DMA_CH0); + + /* enable DMA channel */ + dma_channel_enable(DMA0, DMA_CH0); +} + +/*! + \brief configure the ADC peripheral + \param[in] none + \param[out] none + \retval none +*/ +void adc_config(void) { + /* enable ADC clock */ + rcu_periph_clock_enable(RCU_ADC0); + /* config ADC clock */ + rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV4); + + /* 复位ADC */ + adc_deinit(ADC0); + /* ADC模式配置 */ + adc_mode_config(ADC_MODE_FREE); + /* 使能ADC连续转换功能 */ + adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE); + /* 使能ADC扫描模式 */ + adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE); + /* ADC数据右对齐配置 */ + adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT); + /* 使能ADC温度传感器和内部参考电压 */ + adc_tempsensor_vrefint_enable(); + + /* 配置ADC通道长度 */ + adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 6); + /* 配置ADC规则通道 */ + adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_16, + ADC_SAMPLETIME_239POINT5); + adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_9, ADC_SAMPLETIME_28POINT5); + adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_3, ADC_SAMPLETIME_28POINT5); + adc_regular_channel_config(ADC0, 3, ADC_CHANNEL_4, ADC_SAMPLETIME_28POINT5); + adc_regular_channel_config(ADC0, 4, ADC_CHANNEL_5, ADC_SAMPLETIME_28POINT5); + adc_regular_channel_config(ADC0, 5, ADC_CHANNEL_6, ADC_SAMPLETIME_28POINT5); + + /* ADC触发配置 */ + adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, + ADC0_1_EXTTRIG_REGULAR_NONE); + adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE); + + /* 使能ADC接口 */ + adc_enable(ADC0); + /* ADC校准 */ + adc_calibration_enable(ADC0); + /* 使能ADC DMA功能 */ + adc_dma_mode_enable(ADC0); + /* 使能ADC软件触发 */ + adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL); +} +/** + * @brief 采样类初始化 + */ +u8 sampler::init() { + dma_config(); // DMA采样ADC初始化 + adc_config(); // ADC初始化 + delay_1ms(1); + // 初始采样 + for (int i = 0; i < FILTER_SIZE + 1; i++) { + mcu_temp_samples[i] = + (1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f; + + currU_samples[i] = + (adc_value[2] * ADC_SCALE + CURRENT_OFFSET) * CURRENT_FACTOR; + currV_samples[i] = + (adc_value[3] * ADC_SCALE + CURRENT_OFFSET) * CURRENT_FACTOR; + currW_samples[i] = + (adc_value[4] * ADC_SCALE + CURRENT_OFFSET) * CURRENT_FACTOR; + + vbus_samples[i] = adc_value[5] * ADC_SCALE * VCC_FACTOR; + + float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700; + drv_temp_samples[i] = + 1.0f / (0.00335f + 0.00025f * log(R_now / 10000.0f)) - 273.15f; + delay_1ms(1); + } + return 0; +} +/** + * @brief 获取MCU温度 + * @return float + * 温度值,单位为摄氏度,范围应在-40到145之间,如果读取失败则返回0.0f + */ +float sampler::get_mcu_temp() { + tempora_sample = medium_filter(mcu_temp_samples, FILTER_SIZE + 1); + // 检查温度读数是否在有效范围内 + if (tempora_sample < MIN_TEMP or tempora_sample > MAX_TEMP) { + return ERROR_ADC_VAL; + } + return tempora_sample; +} + +/** + * @brief 获取电机驱动温度 + * @return float 温度值,单位为摄氏度 + * + * 通过热敏电阻分压电路计算温度值,使用Steinhart-Hart方程进行温度转换。 + * 如果计算结果超出有效范围(-40到255摄氏度),则重新采样计算。 + */ +float sampler::get_drv_temp() { + tempora_sample = medium_filter(drv_temp_samples, FILTER_SIZE + 1); + // 检查温度读数是否在有效范围内 + if (tempora_sample < MIN_TEMP || tempora_sample > MAX_TEMP) { + return ERROR_ADC_VAL; + } + return tempora_sample; +} + +/** + * @brief 获取电流值 + * @param type 电流类型,'U'表示U相电流,'V'表示V相电流,'W'表示W相电流 + * @return float 电流值,单位为安培 + * + * 通过ADC采样计算各相电流值 + */ +float sampler::get_current(char type) { + switch (type) { + case 'U': { + // return currU_samples[current_sample_index]; + tempora_sample = medium_filter(currU_samples, FILTER_SIZE + 1); + break; + } + case 'V': { + // return currV_samples[current_sample_index]; + tempora_sample = medium_filter(currV_samples, FILTER_SIZE + 1); + break; + } + case 'W': { + // return currW_samples[current_sample_index]; + tempora_sample = medium_filter(currW_samples, FILTER_SIZE + 1); + break; + } + default: { + return ERROR_ADC_VAL; + } + } + if (tempora_sample < MIN_CURRENT or tempora_sample > MAX_CURRENT) { + return ERROR_ADC_VAL; + } + + return tempora_sample; +} + +/** + * @brief 获取供电电压 + * @return float 电压值,单位为伏特 + * + * 通过ADC采样计算供电电压值,使用迭代方式确保获取有效的电压读数。 + * 如果计算结果超出有效范围(-40到255伏特),则重新采样计算。 + */ +float sampler::get_vbus_voltage() { + tempora_sample = medium_filter(vbus_samples, FILTER_SIZE + 1); + // 检查电压读数是否在有效范围内 + if (vbus_samples[FILTER_SIZE / 2] > MAX_VCC or + vbus_samples[FILTER_SIZE / 2] < MIN_VCC) { + return ERROR_ADC_VAL; + } + return tempora_sample; +} + +/** + * @brief 更新MCU温度 + * + * 通过ADC采样计算MCU温度值,使用Steinhart-Hart方程进行温度转换。 + * 如果计算结果超出有效范围(-40到255摄氏度),则重新采样计算。 + */ +void sampler::update_mcu_temp() { + memmove(mcu_temp_samples, mcu_temp_samples + 1, + FILTER_SIZE * sizeof(float)); + mcu_temp_samples[FILTER_SIZE] = + (1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f; +} + +/** + * @brief 更新MCU温度 + */ +void sampler::update_drv_temp() { + memmove(drv_temp_samples, drv_temp_samples + 1, + FILTER_SIZE * sizeof(float)); + float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700; + drv_temp_samples[FILTER_SIZE] = + 1.0f / (0.00335f + 0.00025f * log(R_now / 10000.0f)) - 273.15f; +} + +/** + * @brief 更新相电流 + */ +void sampler::update_current() { + u8 idx = current_sample_index; + extern FOC_Controlroller FOC; + // 优化计算 + const float scale = ADC_SCALE * CURRENT_FACTOR; + const float offset = CURRENT_OFFSET * CURRENT_FACTOR; + + currU_samples[idx] = adc_value[2] * scale + offset; + currV_samples[idx] = adc_value[3] * scale + offset; + currW_samples[idx] = adc_value[4] * scale + offset; + + // 更新索引 + current_sample_index++; + if (current_sample_index >= FILTER_SIZE - 1) { + current_sample_index = 0; + } + // 卡尔曼滤波更新 + float voltage = FOC.voltage_power_supply; +} + +/** + * @brief 更新供电电压 + */ +void sampler::update_vbus_voltage() { + memmove(vbus_samples, vbus_samples + 1, FILTER_SIZE * sizeof(float)); + vbus_samples[FILTER_SIZE] = adc_value[5] * ADC_SCALE * VCC_FACTOR; +} \ No newline at end of file diff --git a/Robot_V2/device/Can.cpp b/Robot_V2/device/Can.cpp new file mode 100644 index 0000000..a96e089 --- /dev/null +++ b/Robot_V2/device/Can.cpp @@ -0,0 +1,697 @@ +#include "Can.h" +#include "flash.h" +#include "gd32c10x.h" +#include "gd32c10x_can.h" +#include "gd32c10x_dma.h" +#include "gd32c10x_gpio.h" +#include "systick.h" +#include +#include +#include +#include +#include +#include +#include + +constexpr u16 CANX = CAN0; +constexpr u16 DEV_CAN0_ID = 0x0000; +constexpr u16 DEV_CAN0_MASK = 0x0000; +constexpr u16 DEV_CAN_LOOPBACK_ID = 0x0000; +constexpr float ANGLE_FACTOR = 25.0f / 360.0f * 2.0f * 3.14159265358979323846f; + +CAN_transmiter CAN0_transmiter; // CAN初始化 +extern FlashEEPROM flashEEP; + +// 添加DMA相关变量 +dma_parameter_struct dma_rx_parameter; +dma_parameter_struct dma_tx_parameter; +uint8_t can_rx_buffer[8]; // CAN接收缓冲区 +uint8_t can_tx_buffer[8]; // CAN发送缓冲区 + +/*! + \brief initialize CAN GPIO + \param[in] none + \param[out] none + \retval ErrStatus: SUCCESS or ERROR +*/ +u8 can_gpio_init() { + /* enable CAN clock */ + rcu_periph_clock_enable(RCU_CAN0); + rcu_periph_clock_enable(RCU_GPIOB); + rcu_periph_clock_enable(RCU_AF); + + /* configure CAN0 GPIO */ + gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_8); // rx + gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9); // tx + gpio_pin_remap_config(GPIO_CAN0_PARTIAL_REMAP, ENABLE); + /* enable the EN GPIO clock */ + gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13); + gpio_bit_reset(GPIOB, GPIO_PIN_13); + return 0; +} + +/*! + \brief 初始化CAN DMA + \param[in] none + \param[out] none + \retval none +*/ +void can_dma_init(void) { + // 使能DMA时钟 + rcu_periph_clock_enable(RCU_DMA0); + + // 配置接收DMA + dma_struct_para_init(&dma_rx_parameter); + dma_rx_parameter.periph_addr = + (uint32_t)(&CAN_RFIFOMDATA0(CAN0, CAN_FIFO0)); // CAN接收数据寄存器地址 + dma_rx_parameter.memory_addr = (uint32_t)can_rx_buffer; // 接收缓冲区地址 + dma_rx_parameter.direction = DMA_PERIPHERAL_TO_MEMORY; // 外设到内存 + dma_rx_parameter.memory_width = DMA_MEMORY_WIDTH_8BIT; // 内存宽度8位 + dma_rx_parameter.periph_width = DMA_PERIPHERAL_WIDTH_8BIT; // 外设宽度8位 + dma_rx_parameter.priority = DMA_PRIORITY_HIGH; // 高优先级 + dma_rx_parameter.number = 8; // 传输字节数 + dma_rx_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE; // 外设地址不递增 + dma_rx_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE; // 内存地址递增 + dma_init(DMA0, DMA_CH4, &dma_rx_parameter); // 使用DMA通道4 + + // 配置发送DMA + dma_struct_para_init(&dma_tx_parameter); + dma_tx_parameter.periph_addr = + (uint32_t)(&CAN_TMI0(CAN0)); // CAN发送数据寄存器地址 + dma_tx_parameter.memory_addr = (uint32_t)can_tx_buffer; // 发送缓冲区地址 + dma_tx_parameter.direction = DMA_MEMORY_TO_PERIPHERAL; // 内存到外设 + dma_tx_parameter.memory_width = DMA_MEMORY_WIDTH_8BIT; // 内存宽度8位 + dma_tx_parameter.periph_width = DMA_PERIPHERAL_WIDTH_8BIT; // 外设宽度8位 + dma_tx_parameter.priority = DMA_PRIORITY_HIGH; // 高优先级 + dma_tx_parameter.number = 8; // 传输字节数 + dma_tx_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE; // 外设地址不递增 + dma_tx_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE; // 内存地址递增 + dma_init(DMA0, DMA_CH5, &dma_tx_parameter); // 使用DMA通道5 + + // 使能DMA通道 + dma_channel_enable(DMA0, DMA_CH4); + dma_channel_enable(DMA0, DMA_CH5); + + // 使能CAN接收DMA + // can_dma_enable(CAN0, CAN_DMA_RECEIVE); +} + +/*! + \brief 初始化CAN0 2.0B 模式 + \param[in] none + \param[out] none + \retval none +*/ +void can_config(void) { + can_gpio_init(); + can_dma_init(); // 初始化DMA + can_parameter_struct can_parameter; + can_filter_parameter_struct can_filter; + + can_struct_para_init(CAN_INIT_STRUCT, &can_parameter); + /* initialize CAN register */ + can_deinit(CAN0); + + /* initialize CAN parameters */ + can_parameter.time_triggered = DISABLE; + can_parameter.auto_bus_off_recovery = DISABLE; + can_parameter.auto_wake_up = DISABLE; + can_parameter.auto_retrans = DISABLE; + can_parameter.rec_fifo_overwrite = DISABLE; + can_parameter.trans_fifo_order = DISABLE; + can_parameter.working_mode = CAN_NORMAL_MODE; + /* configure CAN0 baud rate 1MBps, sample point at 80% */ + can_parameter.resync_jump_width = CAN_BT_SJW_1TQ; + can_parameter.time_segment_1 = CAN_BT_BS1_7TQ; + can_parameter.time_segment_2 = CAN_BT_BS2_2TQ; + can_parameter.prescaler = 6; + /* initialize CAN */ + if (can_init(CAN0, &can_parameter) != SUCCESS) { + while (1) + printf("can init error \r\n"); + } + + /* initialize filter */ + /* configure filter mode */ + can_filter.filter_mode = CAN_FILTERMODE_MASK; + can_filter.filter_bits = CAN_FILTERBITS_32BIT; + /* configure filter mask */ + can_filter.filter_mask_high = 0x0000; + can_filter.filter_mask_low = 0x0000; + /* select receiver fifo */ + can_filter.filter_fifo_number = CAN_FIFO0; + can_filter.filter_enable = ENABLE; + /* configure filter number */ + can_filter.filter_number = 0; + can_filter_init(&can_filter); + + /* configure CAN0 NVIC */ + nvic_irq_enable(CAN0_RX0_IRQn, 1, 0); + /* enable can receive FIFO0 not empty interrupt */ + can_interrupt_enable(CAN0, CAN_INTEN_RFNEIE0); + + // 使能DMA中断 + nvic_irq_enable(DMA0_Channel4_IRQn, 1, 1); + dma_interrupt_enable(DMA0, DMA_CH4, DMA_INT_FTF); +} + +/*! + \brief 初始化CAN0 CANFD模式 + \param[in] none + \param[out] none + \retval none +*/ +void canfd_config(void) { + can_gpio_init(); + can_parameter_struct can_parameter; + can_fdframe_struct can_fd_parameter; + can_fd_tdc_struct can_fd_tdc_parameter; + can_filter_parameter_struct can_filter; + + /* initialize CAN register */ + can_deinit(CAN0); + + /* initialize CAN */ + can_parameter.time_triggered = DISABLE; + can_parameter.auto_bus_off_recovery = DISABLE; + can_parameter.auto_wake_up = DISABLE; + can_parameter.auto_retrans = ENABLE; + can_parameter.rec_fifo_overwrite = ENABLE; + can_parameter.trans_fifo_order = ENABLE; + can_parameter.working_mode = CAN_NORMAL_MODE; + /* baudrate 1Mbps, sample piont at 80% */ + can_parameter.resync_jump_width = CAN_BT_SJW_1TQ; + can_parameter.time_segment_1 = CAN_BT_BS1_7TQ; + can_parameter.time_segment_2 = CAN_BT_BS2_2TQ; + can_parameter.prescaler = 6; + can_init(CAN0, &can_parameter); + + can_struct_para_init(CAN_FD_FRAME_STRUCT, &can_fd_parameter); + can_fd_parameter.fd_frame = ENABLE; + can_fd_parameter.excp_event_detect = ENABLE; + can_fd_parameter.delay_compensation = ENABLE; + can_fd_tdc_parameter.tdc_filter = 0x04; + can_fd_tdc_parameter.tdc_mode = CAN_TDCMOD_CALC_AND_OFFSET; + can_fd_tdc_parameter.tdc_offset = 0x04; + can_fd_parameter.p_delay_compensation = &can_fd_tdc_parameter; + can_fd_parameter.iso_bosch = CAN_FDMOD_ISO; + can_fd_parameter.esi_mode = CAN_ESIMOD_HARDWARE; + /* FD mode data baudrate 2Mbps, sample piont at 80% */ + can_fd_parameter.data_resync_jump_width = CAN_BT_SJW_1TQ; + can_fd_parameter.data_time_segment_1 = CAN_BT_BS1_3TQ; + can_fd_parameter.data_time_segment_2 = CAN_BT_BS2_1TQ; + /* CAN-FD data segement prescaler should be the same as non-data segement + * prescaler */ + can_fd_parameter.data_prescaler = 6; + can_fd_init(CAN0, &can_fd_parameter); + + /* initialize filter */ + can_filter.filter_mode = CAN_FILTERMODE_MASK; + can_filter.filter_bits = CAN_FILTERBITS_32BIT; + /* configure filter ID */ + can_filter.filter_list_high = 0x0000; + can_filter.filter_list_low = 0x0000; + /* configure filter mask */ + can_filter.filter_mask_high = 0x0000; + can_filter.filter_mask_low = 0x0000; + /* select receiver fifo */ + can_filter.filter_fifo_number = CAN_FIFO0; + can_filter.filter_enable = ENABLE; + /* configure filter number */ + can_filter.filter_number = 0; + can_filter_init(&can_filter); + + /* configure CAN0 NVIC */ + nvic_irq_enable(CAN0_RX0_IRQn, 1, 0); + /* enable can receive FIFO0 not empty interrupt */ + can_interrupt_enable(CAN0, CAN_INTEN_RFNEIE0); +} + +/*! + \brief 初始化CAN0回环测试 + \param[in] none + \param[out] none + \retval none +*/ +void can_loopback_init(void) { + can_gpio_init(); + can_parameter_struct can_parameter; + can_filter_parameter_struct can_filter; + /* initialize CAN register */ + can_deinit(CANX); + + /* initialize CAN */ + can_parameter.time_triggered = DISABLE; + can_parameter.auto_bus_off_recovery = DISABLE; + can_parameter.auto_wake_up = DISABLE; + can_parameter.auto_retrans = DISABLE; + can_parameter.rec_fifo_overwrite = DISABLE; + can_parameter.trans_fifo_order = DISABLE; + can_parameter.working_mode = CAN_NORMAL_MODE; + /* baudrate 1Mbps, sample piont at 80% */ + can_parameter.resync_jump_width = CAN_BT_SJW_1TQ; + can_parameter.time_segment_1 = CAN_BT_BS1_7TQ; + can_parameter.time_segment_2 = CAN_BT_BS2_2TQ; + can_parameter.prescaler = 6; + if (can_init(CANX, &can_parameter) != SUCCESS) { + u16 i = 200; + while (--i > 0) { + delay_1ms(10); + printf("can init error \r\n"); + } + system_soft_reset(); + } + + /* initialize filter */ + /* configure filter mode */ + can_filter.filter_mode = CAN_FILTERMODE_MASK; + can_filter.filter_bits = CAN_FILTERBITS_32BIT; + /* configure filter ID */ + can_filter.filter_list_high = (uint16_t)(DEV_CAN_LOOPBACK_ID >> 13U); + can_filter.filter_list_low = + ((uint16_t)(DEV_CAN_LOOPBACK_ID)) << 3U | (1U << 2); + /* configure filter mask */ + can_filter.filter_mask_high = 0x0000; + can_filter.filter_mask_low = 0x0000; + /* select receiver fifo */ + can_filter.filter_fifo_number = CAN_FIFO0; + can_filter.filter_enable = ENABLE; + /* configure filter number */ + can_filter.filter_number = 0; + can_filter_init(&can_filter); +} + +/*! + \brief CAN0 FD回环测试 + \param[in] none + \param[out] none + \retval ErrStatus +*/ +void canfd_loopback_test(void) { + can_trasnmit_message_struct transmit_message; + can_receive_message_struct receive_message; + uint32_t timeout = 0xFFFF; + uint8_t transmit_mailbox = 0; + + std::mt19937 gen; + std::uniform_int_distribution dis(0, 255); + + can_struct_para_init(CAN_FD_FRAME_STRUCT, &transmit_message); + transmit_message.tx_sfid = DEV_CAN_LOOPBACK_ID; + transmit_message.tx_efid = 0x00; + transmit_message.tx_ft = CAN_FT_DATA; + transmit_message.tx_ff = CAN_FF_EXTENDED; + transmit_message.tx_dlen = 7; + transmit_message.fd_flag = 1; + transmit_message.fd_brs = 1; + transmit_message.fd_esi = 0; + + int i = 0; + while (i++ < transmit_message.tx_dlen) { + transmit_message.tx_data[i] = dis(gen); + std::printf("%x\n", transmit_message.tx_data[i]); + } + + /* transmit message */ + transmit_mailbox = can_message_transmit(CAN0, &transmit_message); + /* waiting for transmit completed */ + while ((CAN_TRANSMIT_OK != can_transmit_states(CAN0, transmit_mailbox)) && + (0 != timeout)) { + timeout--; + } + timeout = 0xFFFF; + /* waiting for receive completed */ + while ((can_receive_message_length_get(CAN0, CAN_FIFO0) < 1) && + (0 != timeout)) { + timeout--; + } + can_struct_para_init(CAN_RX_MESSAGE_STRUCT, &receive_message); + can_message_receive(CAN0, CAN_FIFO0, &receive_message); + + /* check the receive message */ + if ((transmit_message.tx_sfid == receive_message.rx_sfid) && + (transmit_message.tx_ff == receive_message.rx_ff) && + (transmit_message.tx_dlen == receive_message.rx_dlen)) { + /* loopback test is success */ + std::printf("CAN LO0PBACK SUCCESS\r\n"); + } else { + /* loopback test is failed */ + std::printf("CAN LO0PBACK FAIL\r\n"); + } +} + +/** + \brief CAN0 回环测试 + \param[in] none + \param[out] none + \retval none +*/ +void can_loopback_test(void) { + can_trasnmit_message_struct transmit_message; + can_receive_message_struct receive_message; + uint32_t timeout = 0xFF; + uint8_t transmit_mailbox = 0; + + std::mt19937 gen(rand()); // 使用随机设备生成的种子 + std::uniform_int_distribution dis(0, 0xff); + + can_struct_para_init(CAN_TX_MESSAGE_STRUCT, &transmit_message); + /* initialize transmit message */ + transmit_message.tx_sfid = DEV_CAN_LOOPBACK_ID; + transmit_message.tx_ft = CAN_FT_DATA; + transmit_message.tx_ff = CAN_FF_STANDARD; + transmit_message.tx_dlen = 7; + int i = 0; + while (i++ < transmit_message.tx_dlen) { + // transmit_message.tx_data[i] = dis(gen); + transmit_message.tx_data[i] = i; + } + /* transmit message */ + transmit_mailbox = can_message_transmit(CANX, &transmit_message); + /* waiting for transmit completed */ + while ((CAN_TRANSMIT_OK != can_transmit_states(CANX, transmit_mailbox)) && + (0 != timeout)) { + printf("sending:%x...\n", can_transmit_states(CANX, transmit_mailbox)); + timeout--; + } + timeout = 0xFF; + /* waiting for receive completed */ + while ((can_receive_message_length_get(CANX, CAN_FIFO0) < 1) && + (0 != timeout)) { + timeout--; + } + can_struct_para_init(CAN_RX_MESSAGE_STRUCT, &receive_message); + can_message_receive(CANX, CAN_FIFO0, &receive_message); + /* check the receive message */ + if ((DEV_CAN_LOOPBACK_ID == receive_message.rx_sfid) && + (CAN_FF_STANDARD == receive_message.rx_ff) && + (transmit_message.tx_dlen == receive_message.rx_dlen)) { + i = transmit_message.tx_dlen; + while (i-- > 0) { + std::printf("rx %d:%x:%x\n", i, transmit_message.tx_data[i], + receive_message.rx_data[i]); + } + if (std::memcmp(receive_message.rx_data, transmit_message.tx_data, + transmit_message.tx_dlen) == 0) { + /* loopback test is success */ + std::printf("loopback success\n"); + } else { + std::printf("loopback failed\n"); + } + } else { + /* loopback test is failed */ + std::printf("loopback failed\n"); + } +} + +/*! + \brief CAN_transmiter构造函数 + \note 初始化CAN通信相关参数和硬件配置 +*/ +u8 CAN_transmiter::init() { + // 初始化CAN硬件 + // can_config(); + canfd_config(); + + // 初始化发送消息结构体 + can_struct_para_init(CAN_TX_MESSAGE_STRUCT, &transmit_message); + /* initialize receive message */ + can_struct_para_init(CAN_RX_MESSAGE_STRUCT, &receive_message); + + // 初始化DMA缓冲区 + memset(can_rx_buffer, 0, sizeof(can_rx_buffer)); + memset(can_tx_buffer, 0, sizeof(can_tx_buffer)); + return 0; +} + +/*! + \brief CAN 数据发送 + \param id CAN ID + \param length 数据长度 + \param data 数据 +*/ +u8 CAN_transmiter::CAN_Send(u32 id, u8 length, u8 *data) { + // 检查数据长度是否符合CAN规范 + if (length > 8) { + printf("CAN data length exceeds maximum of 8 bytes\r\n"); + return 0; + } + + // 检查数据指针是否有效 + if (data == nullptr) { + printf("Invalid data pointer\r\n"); + return 0; + } + + /* 配置发送消息参数 */ + transmit_message.tx_ft = CAN_FT_DATA; // 数据帧 + transmit_message.tx_ff = CAN_FF_STANDARD; // 标准帧格式 + transmit_message.tx_sfid = id; // 设置帧ID + transmit_message.tx_dlen = length; // 设置数据长度 + + // 复制数据到发送缓冲区 + for (int i = 0; i < length && i < 8; i++) { + transmit_message.tx_data[i] = *(data + i); + } + + // 将数据复制到DMA缓冲区 + memcpy(can_tx_buffer, data, length); + + // 配置DMA发送参数 + dma_tx_parameter.number = length; + dma_init(DMA0, DMA_CH5, &dma_tx_parameter); + + // 启动DMA传输 + dma_channel_enable(DMA0, DMA_CH5); + + // 自动选择空闲mailbox发送消息,不需要人为指定 + transmit_mailbox = can_message_transmit(CAN0, &transmit_message); + + // 检查是否成功获取mailbox + if (CAN_NOMAILBOX == transmit_mailbox) { + // 没有可用的mailbox,可能所有mailbox都在使用中 + printf("No available mailbox for CAN transmission\r\n"); + return 0; + } + return 1; +} + +/*! + \brief CANFD 数据发送 + \param id CAN消息ID + \param length CAN消息长度 + \param data CAN消息数据 +*/ +u8 CAN_transmiter::CANFD_Send(u32 id, u8 length, u8 *data) { + // 检查CANFD模式是否启用 + if (!(CAN_CTL(CAN0) & CAN_CTL_DFZ)) { + printf("CANFD mode not enabled\r\n"); + return 0; + } + + // 检查数据指针是否有效 + if (data == nullptr) { + printf("Invalid data pointer\r\n"); + return 0; + } + + // 检查数据长度是否符合CANFD规范 + if (length > 64) { + printf("CANFD data length exceeds maximum of 64 bytes\r\n"); + return 0; + } + + /* 配置发送消息参数 */ + transmit_message.tx_ft = CAN_FT_DATA; // 数据帧 + transmit_message.tx_ff = CAN_FF_EXTENDED; // 扩展帧格式 + // transmit_message.tx_sfid = id; // 设置帧ID + transmit_message.tx_efid = id; // 扩展帧ID + transmit_message.tx_dlen = length; // 设置数据长度 + + // 设置CANFD特定参数 + transmit_message.fd_flag = CAN_FDF_FDFRAME; // CANFD帧格式 + transmit_message.fd_brs = ENABLE; // 使能比特率切换 + transmit_message.fd_esi = DISABLE; // 错误状态指示 + + // 复制数据到发送缓冲区 + for (int i = 0; i < length && i < 64; i++) { + transmit_message.tx_data[i] = *(data + i); + } + + // 将数据复制到DMA缓冲区 + memcpy(can_tx_buffer, data, length); + + // 配置DMA发送参数 + dma_tx_parameter.number = length; + dma_init(DMA0, DMA_CH5, &dma_tx_parameter); + + // 启动DMA传输 + dma_channel_enable(DMA0, DMA_CH5); + + // 自动选择空闲mailbox发送消息,不需要人为指定 + transmit_mailbox = can_message_transmit(CAN0, &transmit_message); + + // 检查是否成功获取mailbox + if (CAN_NOMAILBOX == transmit_mailbox) { + static u32 count = 0; + // 没有可用的mailbox,可能所有mailbox都在使用中 + count++; + // printf("No available mailbox for CANFD transmission\r\n"); + if (count > 0xff and !is_sleep) { + printf("No available mailbox for CANFD transmission\r\n"); + init(); + count = 0; + } + return 0; + } + return 1; +} + +/** + * @brief CANFD发送函数 + * @retval 0: 发送失败 + * 1: 发送成功 + */ +u8 CAN_transmiter::CANFD_all_Send() { + u32 success_flag = 0; + + constexpr u32 STATUS_ID = 0x00010100; + constexpr u32 CONFIG_ID = 0x00010101; + + // 打包status数据 - 只清零实际使用的32字节 + memset(transmit_data, 0, 32); + + success_flag += CANFD_Send(STATUS_ID, 32, transmit_data); + + return success_flag; +} + +/** + * @brief CAN通信检查函数 + * @retval 0: 无新消息 + * 1: 有新消息 + */ +void CAN_transmiter::communication_check() { + // CAN0 发送数据标志 + if (SET == can0_send_flag) { + // printf("\r\n can0 %X receive data:", receive_message.rx_efid); + // CAN0_transmiter.CAN_all_Send(); + CANFD_all_Send(); + can0_send_flag = RESET; + } + + // CAN0 接收数据标志 + if (SET == can0_receive_flag) { + // printf("\r\n can0 %X receive data:", receive_message.rx_efid); + // for (i = 0; i < receive_message.rx_dlen; i++) { + // printf(" %02x", receive_message.rx_data[i]); + // } + if (receive_message.rx_efid == 0x00010200) { + ; + } else if (receive_message.rx_efid == 0x00010301) { + ; + } else { + printf("Unknown CAN ID: %X\n", receive_message.rx_efid); + } + can0_receive_flag = RESET; + } +} + +u8 CAN_transmiter::sendACK(u32 CANFD_OTA_ACK_ID, u32 packet_num) { + u32_union_t pack_data; + pack_data.u = packet_num; + memset(transmit_data, 0, 4); + pack_u32_to_bytes(transmit_data, 3, pack_data); + + return CANFD_Send(CANFD_OTA_ACK_ID, 4, transmit_data); +} + +/** + * @brief CAN睡眠 + * @param None + * @retval None + */ +u8 CAN_transmiter::CAN_Sleep() { + gpio_bit_set(GPIOB, GPIO_PIN_13); + is_sleep = true; + return 0; +} + +/** + * @brief CAN唤醒 + * @param None + * @retval None + */ +u8 CAN_transmiter::CAN_Wakeup() { + printf("can wake\r\n"); + is_sleep = false; + canfd_config(); + + return 0; +} + +/** + * @brief CAN0中断服务程序 + * @retval 无 + */ +void CAN0_RX0_IRQHandler(void) { + // 检查是否是FIFO0消息挂起中断 + if (can_interrupt_flag_get(CAN0, CAN_INT_FLAG_RFL0) != RESET) { + // 清除中断标志 + can_interrupt_flag_clear(CAN0, CAN_INT_FLAG_RFL0); + + // 使用DMA读取接收到的数据 + dma_channel_disable(DMA0, DMA_CH4); + dma_rx_parameter.number = + can_receive_message_length_get(CAN0, CAN_FIFO0); + dma_init(DMA0, DMA_CH4, &dma_rx_parameter); + dma_channel_enable(DMA0, DMA_CH4); + + // 读取接收到的数据 + can_message_receive(CAN0, CAN_FIFO0, &CAN0_transmiter.receive_message); + + // 接收标志位置1 + CAN0_transmiter.can0_receive_flag = SET; + } + + // 检查其他可能的中断源 + if (can_interrupt_flag_get(CAN0, CAN_INT_FLAG_RFF0) != RESET) { + // FIFO0满中断 + can_interrupt_flag_clear(CAN0, CAN_INT_FLAG_RFF0); + printf("CAN FIFO0 full\n"); + } + + if (can_interrupt_flag_get(CAN0, CAN_INT_FLAG_RFO0) != RESET) { + // FIFO0溢出中断 + can_interrupt_flag_clear(CAN0, CAN_INT_FLAG_RFO0); + printf("CAN FIFO0 overflow\n"); + } +} + +/** + * @brief DMA通道4中断服务程序(CAN接收DMA) + * @retval 无 + */ +void DMA0_Channel4_IRQHandler(void) { + if (dma_interrupt_flag_get(DMA0, DMA_CH4, DMA_INT_FLAG_FTF)) { + // 清除DMA传输完成中断标志 + dma_interrupt_flag_clear(DMA0, DMA_CH4, DMA_INT_FLAG_G); + + // 将DMA缓冲区的数据复制到接收消息结构体 + for (int i = 0; i < CAN0_transmiter.receive_message.rx_dlen && i < 8; + i++) { + CAN0_transmiter.receive_message.rx_data[i] = can_rx_buffer[i]; + } + } +} + +/** + * @brief DMA通道5中断服务程序(CAN/CANFD发送DMA) + * @retval 无 + */ +void DMA0_Channel5_IRQHandler(void) { + if (dma_interrupt_flag_get(DMA0, DMA_CH5, DMA_INT_FLAG_FTF)) { + // 清除DMA传输完成中断标志 + dma_interrupt_flag_clear(DMA0, DMA_CH5, DMA_INT_FLAG_G); + } +} diff --git a/Robot_V2/device/Can.h b/Robot_V2/device/Can.h new file mode 100644 index 0000000..f5a7f65 --- /dev/null +++ b/Robot_V2/device/Can.h @@ -0,0 +1,109 @@ +#ifndef _CAN_H +#define _CAN_H + +#include +#ifdef __cplusplus +extern "C" { +#endif + +#include "gd32c10x_can.h" +#include "stdint.h" +#include + +// 定义一个联合体类型用于float和byte数组之间的转换 +typedef union { + u32 u; + u8 b[4]; +} u32_union_t; + +// 添加辅助函数用于将u16类型数据打包到u8数组中 +static inline void pack_u16_to_bytes(u8 *buffer, u16 offset, u16 value) { + buffer[offset] = (u8)(value & 0xFF); + buffer[offset + 1] = (u8)((value >> 8) & 0xFF); +} + +// 添加辅助函数用于将float类型数据打包到u8数组中 +static inline void pack_u32_to_bytes(u8 *buffer, u16 offset, + u32_union_t &u32_union) { + buffer[offset] = u32_union.b[0]; + buffer[offset + 1] = u32_union.b[1]; + buffer[offset + 2] = u32_union.b[2]; + buffer[offset + 3] = u32_union.b[3]; +} + +// 添加辅助函数用于从u8数组中解包short类型数据 +static inline short unpack_bytes_to_short(u8 *buffer, u16 offset) { + short value = (short)(buffer[offset] | (buffer[offset + 1] << 8)); + return value; +} + +// 添加辅助函数用于从u8数组中解包u16类型数据 +static inline u16 unpack_bytes_to_u16(u8 *buffer, u16 offset) { + u16 value = (u16)(buffer[offset] | (buffer[offset + 1] << 8)); + return value; +} + +// 添加辅助函数用于从u8数组中解包float类型数据 +static inline u32_union_t unpack_bytes_to_float(u8 *buffer, u16 offset) { + u32_union_t u32_union; + u32_union.b[0] = buffer[offset]; + u32_union.b[1] = buffer[offset + 1]; + u32_union.b[2] = buffer[offset + 2]; + u32_union.b[3] = buffer[offset + 3]; + return u32_union; +} + +u8 can_gpio_init(void); // CAN引脚初始化 +void can_config(void); // CAN初始化 +void canfd_config(void); // CANFD初始化 +void can_dma_init(void); // CAN DMA初始化 +void CAN0_RX0_IRQHandler(void); // CAN接收中断处理函数 +void DMA0_Channel4_IRQHandler(void); // DMA通道4中断处理函数(CAN接收) +void DMA0_Channel5_IRQHandler(void); // DMA通道5中断处理函数(CAN发送) + +void can_loopback_init(void); +void can_loopback_test(void); + +/*! + \brief CAN通信类 + \note 封装CAN发送和接收功能 +*/ +class CAN_transmiter { + + private: + bool is_sleep = false; // 是否休眠 + + can_trasnmit_message_struct transmit_message; // 发送消息结构体 + u8 transmit_mailbox = CAN_NOMAILBOX; // 初始化为无mailbox状态 + u8 transmit_data[64]; // CANFD最大64字节 + + void update(); // 更新数据 + u8 CAN_Receive(); // CAN接收 + u8 CANFD_Receive(); // CANFD接收 + u8 CAN_all_Send(); // CAN发送 + u8 CANFD_all_Send(); // CANFD发送 + + public: + // 添加构造函数声明 + u8 init(void); + + can_receive_message_struct receive_message; // 接收消息结构体 + FlagStatus can0_receive_flag; // CAN0接收标志 + FlagStatus can0_send_flag; // CAN0发送标志 + u32_union_t testfloat_union = {0}; // 测试用 + + bool MagStatus = 0; // 磁状态码 + bool ThermalStatus = 0; // 热能状态码 + void communication_check(); // 通信检查 + u8 CAN_Sleep(); // CAN进入睡眠 + u8 CAN_Wakeup(); // CAN进入睡眠 + u8 CAN_Send(u32 ID, u8 length, u8 *data); // CAN发送 + u8 CANFD_Send(u32 ID, u8 length, u8 *data); // CANFD发送 + u8 sendACK(u32 CANFD_OTA_ACK_ID, u32 packet_num); +}; + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/Robot_V2/device/Timer.cpp b/Robot_V2/device/Timer.cpp new file mode 100644 index 0000000..34c1b89 --- /dev/null +++ b/Robot_V2/device/Timer.cpp @@ -0,0 +1,109 @@ +#include "Timer.h" +#include "Can.h" +#include "Timer.h" +#include "gd32c10x.h" +#include "gd32c10x_gpio.h" +#include "gd32c10x_misc.h" +#include "gd32c10x_rcu.h" +#include "gd32c10x_timer.h" +#include +#include +#include + +constexpr int TIMER2_PRESCALER = 119; // 120MHz / 120 = 1MHz +constexpr int TIMER2_PERIOD = 99; // 1MHz / 100 = 100us + +constexpr int TIMER1_PRESCALER = 0; // 不分频,计数器时钟为120MHz +constexpr int TIMER1_PERIOD = 5999; // 120MHz / (0+1) / (5999+1) = 20kHz +constexpr int TIMER1_CH0_PULSE = 0; +constexpr int TIMER1_CH1_PULSE = 0; +constexpr int TIMER1_CH2_PULSE = 0; +constexpr int TIMER1_CH3_COMPARE_VALUE = + (TIMER1_PERIOD + 1) * 0.5 - 1; // PWM周期50%位置触发中断 + +volatile u32 total_us100_counter = 0; // 总计数器,每100微秒增加1 +extern u16 adc_value[7]; +extern CAN_transmiter CAN0_transmiter; +// 添加系统运行时间计数器 +extern u32 cnt_test; + +/** + * @brief 设置引脚中断优先级 + * @return void + * + *设置引脚中断优先级 + */ +void nvic_config(void) { + /* 设置NVIC优先级分组,1位抢占优先级,3位响应优先级 */ + nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); + /* 使能TIMER2中断,设置抢占优先级为1,子优先级为1 */ + nvic_irq_enable(TIMER2_IRQn, 0, 1); + nvic_irq_enable(TIMER1_IRQn, 0, 2); +} + +/** + * @brief 配置定时器2 + * @return void + * + *配置定时器2,用于定时执行FOC控制、采样、CAN发送等任务 + */ +void TIMER2_config(void) { + /* ---------------------------------------------------------------------------- + TIMER2 Configuration: + TIMER2CLK = SystemCoreClock/120 = 1MHz, the period is 100us(100/1000000 = + 100us). + ---------------------------------------------------------------------------- + */ + timer_parameter_struct timer_struct; + + /* 使能TIMER2时钟 */ + rcu_periph_clock_enable(RCU_TIMER2); + + /* 复位TIMER2外设到默认状态 */ + timer_deinit(TIMER2); + /* 初始化TIMER初始化参数结构体 */ + timer_struct_para_init(&timer_struct); + /* TIMER2配置参数设置 */ + timer_struct.prescaler = + TIMER2_PRESCALER; /* 预分频值:120分频(从0开始计数) */ + timer_struct.alignedmode = TIMER_COUNTER_EDGE; /* 边沿对齐模式 */ + timer_struct.counterdirection = TIMER_COUNTER_UP; /* 向上计数模式 */ + timer_struct.period = + TIMER2_PERIOD; /* 自动重装载值:100次计数(从0开始计数) */ + timer_struct.clockdivision = TIMER_CKDIV_DIV1; /* 时钟分频值:1分频 */ + timer_init(TIMER2, &timer_struct); + + /* 清除更新中断标志位 */ + timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP); + /* 使能更新中断 */ + timer_interrupt_enable(TIMER2, TIMER_INT_UP); + + /* 使能TIMER2 */ + timer_enable(TIMER2); +} + +/** + * @brief 配置TIMER2中断 + * @return void + */ +void User_timer_init(void) { + /* 配置TIMER2 */ + TIMER2_config(); + /* 配置TIMER2中断 */ + nvic_config(); +} + +/** + * @brief TIMER2中断处理函数 + * @return void + */ +void TIMER2_IRQHandler(void) { + // 检查更新中断标志并处理 + if (timer_interrupt_flag_get(TIMER2, TIMER_INT_UP) != RESET) { + // 清除更新中断标志 + timer_interrupt_flag_clear(TIMER2, TIMER_INT_UP); + // 每100us执行一次的操作 + + + } +} diff --git a/Robot_V2/device/Timer.h b/Robot_V2/device/Timer.h new file mode 100644 index 0000000..ed220de --- /dev/null +++ b/Robot_V2/device/Timer.h @@ -0,0 +1,27 @@ +#ifndef _TIMER_H +#define _TIMER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +void User_timer_init(void); +void Set_Pwm(uint16_t channel, float duty_cycle); +void Set_3Pwm(float duty_cycle0, float duty_cycle1,float duty_cycle2); +void TIMER2_IRQHandler(void); + +void timer1_pwm_config(void); +void timer1_gpio_config(void); +void TIMER1_IRQHandler(void); // 添加TIMER1中断处理函数声明 + +/* 获取系统运行时间 */ +uint64_t get_system_runtime_us(void); + + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/Robot_V2/device/adc.h b/Robot_V2/device/adc.h new file mode 100644 index 0000000..3a65951 --- /dev/null +++ b/Robot_V2/device/adc.h @@ -0,0 +1,40 @@ +#ifndef _ADC_H +#define _ADC_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "stdint.h" +constexpr u8 FILTER_SIZE = 6; +constexpr u8 BLOCK_SIZE = FILTER_SIZE * sizeof(float); +class sampler { + private: + float vbus_samples[FILTER_SIZE + 1]; + float currU_samples[FILTER_SIZE + 1]; + float currV_samples[FILTER_SIZE + 1]; + float currW_samples[FILTER_SIZE + 1]; + float mcu_temp_samples[FILTER_SIZE + 1]; + float drv_temp_samples[FILTER_SIZE + 1]; + u8 current_sample_index; + + float tempora_sample; + + public: + u8 init(void); + void update_mcu_temp(void); + void update_drv_temp(void); + void update_vbus_voltage(void); + void update_current(void); + + float get_mcu_temp(void); + float get_drv_temp(void); + float get_vbus_voltage(void); + float get_current(char); +}; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Robot_V2/device/ang_sensor.cpp b/Robot_V2/device/ang_sensor.cpp new file mode 100644 index 0000000..6b8467e --- /dev/null +++ b/Robot_V2/device/ang_sensor.cpp @@ -0,0 +1,306 @@ +#include "ang_sensor.h" +#include "Filter.h" +#include "core_cmFunc.h" +#include "gd32c10x_can.h" +#include "gd32c10x_dma.h" +#include "gd32c10x_gpio.h" +#include "gd32c10x_spi.h" +#include "initial.h" +#include "flash.h" +#include +#include +#include "Can.h" +#include + +#define ANG_SPI_CS_ENABLE() gpio_bit_reset(GPIOA, GPIO_PIN_15) +#define ANG_SPI_CS_DISABLE() gpio_bit_set(GPIOA, GPIO_PIN_15) +#define DRV_SPI_CS_ENABLE() gpio_bit_reset(GPIOB, GPIO_PIN_14) +#define DRV_SPI_CS_DISABLE() gpio_bit_set(GPIOB, GPIO_PIN_14) + +constexpr float ANGLE_FACTOR = 1.0f / 65536.0f * 360.0f; +constexpr float RAD_FACTOR = 1.0f / 65536.0f * 2.0f * 3.14159265358979323846f; +constexpr u16 DEFAULT_COMMAND = 0x0000; +constexpr u16 FAULT_RECEIVE = 0xFFFF; +constexpr float VELOCITY_SCALE = 1e4f; +constexpr float ANGLE_WRAP_THRESHOLD = 300.0f; +constexpr float ANGLE_WRAP_VALUE = 360.0f; +constexpr u8 SIZE_FLOAT = sizeof(float); + +// DMA传输完成标志 +volatile bool spi_dma_tx_complete = false; +volatile bool spi_dma_rx_complete = false; + +angle_sensor KTH7823; // 角度传感器初始化 +extern FlashEEPROM flashEEP; +extern EncoderAngleKalman Angle_kalman; +extern EncoderVelocityKalman Vel_kalman; + extern CAN_transmiter CAN0_transmiter; // CAN初始化 + +/** + * @brief SPI DMA initialization + */ +void spi_dma_init(void) { + dma_parameter_struct dma_init_struct; + + // 使能DMA时钟 + rcu_periph_clock_enable(RCU_DMA0); + + // 初始化发送DMA通道 + dma_deinit(DMA0, DMA_CH2); + dma_struct_para_init(&dma_init_struct); + dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL; + dma_init_struct.memory_addr = (uint32_t)0; // 实际地址将在传输时设置 + dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE; + dma_init_struct.memory_width = DMA_MEMORY_WIDTH_16BIT; + dma_init_struct.number = 1; + dma_init_struct.periph_addr = (uint32_t)(&SPI_DATA(SPI0)); + dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE; + dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_16BIT; + dma_init_struct.priority = DMA_PRIORITY_HIGH; + dma_init(DMA0, DMA_CH2, &dma_init_struct); + + // 初始化接收DMA通道 + dma_deinit(DMA0, DMA_CH1); + dma_struct_para_init(&dma_init_struct); + dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY; + dma_init_struct.memory_addr = (uint32_t)0; // 实际地址将在传输时设置 + dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE; + dma_init_struct.memory_width = DMA_MEMORY_WIDTH_16BIT; + dma_init_struct.number = 1; + dma_init_struct.periph_addr = (uint32_t)(&SPI_DATA(SPI0)); + dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE; + dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_16BIT; + dma_init_struct.priority = DMA_PRIORITY_HIGH; + dma_init(DMA0, DMA_CH1, &dma_init_struct); + + // 使能SPI的DMA发送和接收功能 + spi_dma_enable(SPI0, SPI_DMA_TRANSMIT); + spi_dma_enable(SPI0, SPI_DMA_RECEIVE); + + // 配置DMA中断 + nvic_irq_enable(DMA0_Channel2_IRQn, 0, 1); + nvic_irq_enable(DMA0_Channel1_IRQn, 0, 1); + + // 使能DMA传输完成中断 + dma_interrupt_enable(DMA0, DMA_CH2, DMA_INT_FTF); + dma_interrupt_enable(DMA0, DMA_CH1, DMA_INT_FTF); +} + +/** + * @brief Send or read half word through SPI using DMA + * + * @param[in] spi_periph SPI peripheral + * @param[in] tx_data Data to transmit + * @param[out] rx_data Pointer to store received data + * @return 0 if success, -1 if error + */ +int spi_rw_half_word_dma(uint32_t spi_periph, uint16_t tx_data, + uint16_t *rx_data) { + // 重置完成标志 + spi_dma_tx_complete = false; + spi_dma_rx_complete = false; + + // 配置发送DMA + dma_channel_disable(DMA0, DMA_CH2); + dma_memory_address_config(DMA0, DMA_CH2, (uint32_t)&tx_data); + dma_transfer_number_config(DMA0, DMA_CH2, 1); + dma_channel_enable(DMA0, DMA_CH2); + + // 配置接收DMA + dma_channel_disable(DMA0, DMA_CH1); + dma_memory_address_config(DMA0, DMA_CH1, (uint32_t)rx_data); + dma_transfer_number_config(DMA0, DMA_CH1, 1); + dma_channel_enable(DMA0, DMA_CH1); + + // 等待传输完成,超时时间为100个循环 + uint32_t timeout = 100; + while ((!spi_dma_tx_complete || !spi_dma_rx_complete) && --timeout) { + // 空循环等待DMA传输完成 + } + + // 检查是否超时 + if (timeout == 0) { + // 禁用DMA通道 + dma_channel_disable(DMA0, DMA_CH2); + dma_channel_disable(DMA0, DMA_CH1); + printf("SPI DMA transfer timeout\r\n"); + return -1; + } + + return 0; +} + +/** + * @brief DMA0_Channel2中断处理函数 + * @param 无 + */ +extern "C" void DMA0_Channel2_IRQHandler(void) { + if (dma_interrupt_flag_get(DMA0, DMA_CH2, DMA_INT_FLAG_FTF)) { + dma_interrupt_flag_clear(DMA0, DMA_CH2, DMA_INT_FLAG_FTF); + spi_dma_tx_complete = true; + } +} + +/** + * @brief DMA0_Channel1中断处理函数 + * @param 无 + */ +extern "C" void DMA0_Channel1_IRQHandler(void) { + if (dma_interrupt_flag_get(DMA0, DMA_CH1, DMA_INT_FLAG_FTF)) { + dma_interrupt_flag_clear(DMA0, DMA_CH1, DMA_INT_FLAG_FTF); + spi_dma_rx_complete = true; + } +} +/** + * @brief 角度传感器初始化 + * @param 无 + */ +void KTH7823_gpio_init(void) { + rcu_periph_clock_enable(RCU_GPIOA); + rcu_periph_clock_enable(RCU_GPIOB); + rcu_periph_clock_enable(RCU_SPI0); + rcu_periph_clock_enable(RCU_AF); + /* 关闭 JTAG,仅保留 SWD(释放 PA15、PB3、PB4) */ + gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE); + + /* -------- SPI0 全 remap:PB3/4/5 + PA15 -------- */ + gpio_pin_remap_config(GPIO_SPI0_REMAP, ENABLE); + /* PA15 → NSS, 推挽输出 */ + gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15); + /* PB3 → SCK, PB5 → MOSI, 推挽输出 */ + gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, + GPIO_PIN_3 | GPIO_PIN_5); + /* PB4 → MISO, 浮空输入 */ + gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, + GPIO_PIN_4 | GPIO_PIN_10 | GPIO_PIN_11); +} + +/** + * @brief SPI 初始化 + * + * @details Configures SPI hardware and initializes necessary settings + */ +void KTH7823_spi_init(void) { + spi_parameter_struct spi_init_str; + spi_struct_para_init(&spi_init_str); + + /* SPI参数:16bit, 主机, 全双工, CPOL=1 CPHA=1, MSB first */ + spi_init_str.device_mode = SPI_MASTER; + spi_init_str.trans_mode = SPI_TRANSMODE_FULLDUPLEX; + spi_init_str.frame_size = SPI_FRAMESIZE_16BIT; + spi_init_str.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE; + spi_init_str.nss = SPI_NSS_SOFT; + spi_init_str.endian = SPI_ENDIAN_MSB; + + spi_init_str.prescale = 24; /* 5MHz @ 120MHz */ + spi_init(SPI0, &spi_init_str); + spi_nss_output_enable(SPI0); + spi_nssp_mode_enable(SPI0); + spi_enable(SPI0); +} + + +/** +* @ 角度传感器类 初始化 +* @return 0:初始化成功 1:初始化失败 + */ +u8 angle_sensor::init(void) { + KTH7823_gpio_init(); // GPIO初始化 + KTH7823_spi_init(); // SPI初始化 + spi_dma_init(); // DMA初始化 + return 0; +} +/** +* @ 角度传感器类 设置当前角度 +* @param angle 输出级角度值 +* @return 0成功/1失败 + */ +u8 angle_sensor::angle_set(float angle){ + m_cumulativeAngle = angle*REDUCTION_RATIO; // 从Flash读取上次保存的角度 + m_firstUpdate = true; + return 0; +} + + +/** + * @brief 读取传感器数据 + * @return 传感器数据 + */ +inline float angle_sensor::read_sensorAngle(void) { + uint16_t raw_data; + + ANG_SPI_CS_ENABLE(); + u8 result = spi_rw_half_word_dma(SPI0, DEFAULT_COMMAND, &raw_data); + ANG_SPI_CS_DISABLE(); + + if (result == 0) { + // 单次浮点乘法优化:只计算一次度数,然后转换为弧度 + float angle_deg = (float)raw_data * ANGLE_FACTOR; + current_angle_deg = angle_deg; + current_angle_rad = angle_deg * DEG2RAD; // M_PI/180.0f + return angle_deg; + } + +#ifdef DEBUG + // 仅在调试模式下输出错误,避免发布版本中的I/O开销 + if (result != 0) { + // 使用更高效的串口输出替代printf(如果可用) + printf("Error reading angle from sensor.\n"); + } +#endif + + return (float)FAULT_RECEIVE; +} +/** + * @brief 更新传感器角度(输出级) + * @return 累积角度值 + */ +float angle_sensor::update(void) { + read_sensorAngle(); + + if (m_firstUpdate) { + m_lastAngle = current_angle_deg; + m_firstUpdate = false; + return m_cumulativeAngle; + } + + // 计算角度变化 + float delta = current_angle_deg - m_lastAngle; + + // 处理角度绕回情况(0度和360度之间的跳变) + // 如果变化超过180度,说明发生了绕回 + if (delta > ANGLE_WRAP_THRESHOLD) { + // 从接近360度绕回到接近0度 + delta -= ANGLE_WRAP_VALUE; + } else if (delta < -ANGLE_WRAP_THRESHOLD) { + // 从接近0度绕到接近360度 + delta += ANGLE_WRAP_VALUE; + } + + m_cumulativeAngle += delta; + m_lastAngle = current_angle_deg; + + return m_cumulativeAngle; +} + +/** + * @brief 获取累积角度值(输出级) + * @return 累积角度值 + */ +float angle_sensor::getAngle(void) const { + return m_cumulativeAngle / REDUCTION_RATIO; +} + +/** + * @brief 获取累积角度值(原始级) + * @return 累积角度值 + */ +float angle_sensor::getRawAngle(void) const { return m_cumulativeAngle; } + +/** + * @brief 获取角度值(原始级) + * @return 角度值(原始级) + */ +float angle_sensor::getcurrent_sensorangle(void) const { + return current_angle_deg; +} diff --git a/Robot_V2/device/ang_sensor.h b/Robot_V2/device/ang_sensor.h new file mode 100644 index 0000000..b2501c0 --- /dev/null +++ b/Robot_V2/device/ang_sensor.h @@ -0,0 +1,40 @@ +#ifndef _angsensor_H +#define _angsensor_H +#ifdef __cplusplus +extern "C" { +#endif +#include "gd32c10x_eval.h" +#include "stdio.h" + +u16 spi_rw_half_word(u32 spi_periph, const u16 i_HalfWord); +int spi_rw_half_word_dma(uint32_t spi_periph, uint16_t tx_data, + uint16_t *rx_data); + +constexpr u16 VEL_FILTER_SIZE = 4; + +class angle_sensor { + public: + u8 init(void); + float read_sensorAngle(void); + float update(void); + void reset(void); + float getAngle(void) const; + float getRawAngle(void) const; + float getcurrent_sensorangle(void) const; + u8 angle_set(float angle); + + protected: + float m_cumulativeAngle; + float current_angle_deg; + float current_angle_rad; + bool m_firstUpdate; + float m_lastAngle; + float m_lastcumulativeAngle; + float velocity[VEL_FILTER_SIZE] = {0.0f}; +}; + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/Robot_V2/device/motor.cpp b/Robot_V2/device/motor.cpp new file mode 100644 index 0000000..083740e --- /dev/null +++ b/Robot_V2/device/motor.cpp @@ -0,0 +1,38 @@ +#include "motor.h" +#include "Timer.h" +#include "gd32c10x_eval.h" +#include + +/** + * @brief driver输出初始化 + */ +void motor_init(void) { + timer1_gpio_config(); + timer1_pwm_config(); + // 使能GPIOB时钟 + rcu_periph_clock_enable(RCU_GPIOB); + // 配置PB2为输入引脚,用于读取电机状态 + gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_2); + /* 配置GPIOB的PB14为推挽输出 SPICS */ + gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, + GPIO_PIN_14 | GPIO_PIN_12); +} + +/** + * @brief 电机复位 + */ +void motor_reset(void) { + motor_sleep(); + printf("motor reseting...\r\n"); + motor_resume(); +} + +/** + * @brief 电机休眠 + */ +void motor_sleep(void) { gpio_bit_reset(GPIOB, GPIO_PIN_12); } + +/** + * @brief 电机启动 + */ +void motor_resume(void) { gpio_bit_set(GPIOB, GPIO_PIN_12); } \ No newline at end of file diff --git a/Robot_V2/device/motor.h b/Robot_V2/device/motor.h new file mode 100644 index 0000000..dc198a3 --- /dev/null +++ b/Robot_V2/device/motor.h @@ -0,0 +1,11 @@ +#ifndef _MOTOR_H +#define _MOTOR_H + + +void motor_init(void); +void motor_reset(void); +void motor_resume(void); +void motor_sleep(void); + + +#endif \ No newline at end of file diff --git a/Robot_V2/device/test.cpp b/Robot_V2/device/test.cpp new file mode 100644 index 0000000..9ce9a99 --- /dev/null +++ b/Robot_V2/device/test.cpp @@ -0,0 +1,25 @@ +#include "adc.h" +#include + +constexpr int status_print = 0; +extern sampler sampler; +void test_1111() { + // 初始化CAN回环测试 + // can_loopback_init(); + // can_config(); + if (status_print) { + /* value print */ + printf(" the temperature data is %2.2f degrees Celsius\r\n", + sampler.get_mcu_temp()); + printf(" the drv_temperature data is %2.2f degrees Celsius\r\n", + sampler.get_drv_temp()); + printf(" the U current data is %2.2f mA\r\n", sampler.get_current('U')); + printf(" the V current data is %2.2f mA\r\n", sampler.get_current('V')); + printf(" the W current data is %2.2f mA\r\n", sampler.get_current('W')); + printf(" the VBUS is %2.2f V\r\n", sampler.get_vbus_voltage()); + // printf(" the angle is %2.2f\r\n", tle5012b_read()); + + printf("\n----------------------------------------------------\n"); + } + // can_loopback_test(); +} \ No newline at end of file diff --git a/Robot_V2/main.cpp b/Robot_V2/main.cpp new file mode 100644 index 0000000..a702405 --- /dev/null +++ b/Robot_V2/main.cpp @@ -0,0 +1,43 @@ +#include "Can.h" +#include "gd32c10x.h" +#include "gd32c10x_can.h" +#include "sys/OTA.h" +#include "sys/config.h" +#include "sys/systick.h" + +class BootloaderSystem { + private: + OTAHandler ota; + + public: + void initHardware() { + extern CAN_transmiter CAN0_transmiter; // CAN初始化 + systick_config(); // 系统时钟初始化 + SystemCoreClockUpdate(); // 更新系统时钟变量 + CAN0_transmiter.init(); + } + + void run() { + // 检查是否触发OTA模式 + if (1) { + // OTA模式 + while (1) { + ota.process(); + for (volatile int i = 0; i < 500000; i++) + ; // 简单延时 + } + } else { + // 正常模式:跳转到APP + ota.jumpToApplication(); + } + } +}; + +int main(void) { + BootloaderSystem sys; + sys.initHardware(); + sys.run(); + + while (1) + ; // 不应该执行到这里 +} \ No newline at end of file diff --git a/Robot_V2/main.h b/Robot_V2/main.h new file mode 100644 index 0000000..a8426d5 --- /dev/null +++ b/Robot_V2/main.h @@ -0,0 +1,41 @@ +/*! + \file main.h + \brief the header file of main + + \version 2025-06-20, V1.5.1, firmware for GD32C10x +*/ + +/* + Copyright (c) 2024, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its +contributors may be used to endorse or promote products derived from this +software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef MAIN_H +#define MAIN_H +#include "stdint.h" + +void do_task(u32 currentTasks); + +#endif /* MAIN_H */ diff --git a/Robot_V2/sys/OTA.cpp b/Robot_V2/sys/OTA.cpp new file mode 100644 index 0000000..faa6893 --- /dev/null +++ b/Robot_V2/sys/OTA.cpp @@ -0,0 +1,120 @@ +#include "OTA.h" +#include "gd32c10x_fmc.h" +#include + +extern CAN_transmiter CAN0_transmiter; // CAN初始化 +extern "C" { +void canfd_rx_irq_handler(void); +} + +OTAHandler::OTAHandler() : ota_active(false), received_size(0) {} + +void OTAHandler::init() { + // 初始化CANFD接收中断 + nvic_irq_enable(CAN0_RX0_IRQn, 1, 1); +} + +void OTAHandler::process() { + if (!ota_active) + return; + + // 这里可以添加超时处理逻辑 + // 例如:10秒无数据则退出OTA模式 +} + +bool OTAHandler::validateApplication() { + uint32_t *app_vector = (uint32_t *)APP_START_ADDR; + uint32_t stack_ptr = app_vector[0]; + uint32_t reset_handler = app_vector[1]; + + // 简单验证:检查栈指针是否在SRAM范围内 + return (stack_ptr >= 0x20000000 && stack_ptr < 0x20008000) && + (reset_handler >= APP_START_ADDR && + reset_handler < (APP_START_ADDR + APP_MAX_SIZE)); +} + +void OTAHandler::jumpToApplication() { + if (!validateApplication()) { + // 无效APP,停留在bootloader + return; + } + + // 关闭所有中断 + __disable_irq(); + + // 设置主栈指针 + uint32_t msp_value = *(__IO uint32_t *)APP_START_ADDR; + __set_MSP(msp_value); + + // 获取复位地址 + uint32_t reset_handler = *(__IO uint32_t *)(APP_START_ADDR + 4); + typedef void (*AppEntryFunc)(void); + AppEntryFunc app_entry = (AppEntryFunc)reset_handler; + + // 跳转 + app_entry(); +} + +void OTAHandler::eraseApplicationArea() { + // 擦除APP区域 + fmc_unlock(); + for (uint32_t addr = APP_START_ADDR; addr < (APP_START_ADDR + APP_MAX_SIZE); + addr += FMC_PAGE_SIZE) { + fmc_page_erase(addr); + } + fmc_lock(); +} + +void OTAHandler::writeApplicationData(uint32_t offset, uint8_t *data, + uint32_t size) { + fmc_unlock(); + uint32_t write_addr = APP_START_ADDR + offset; + + // 32位对齐写入 + for (uint32_t i = 0; i < size; i += 4) { + uint32_t word = 0; + memcpy(&word, &data[i], 4); + fmc_word_program(write_addr + i, word); + } + + fmc_lock(); +} + +void OTAHandler::handleOTAMessage(uint32_t id, uint8_t *data, uint8_t len) { + if (id == CANFD_OTA_REQ_ID) { + // OTA请求包 + uint32_t new_size = *(uint32_t *)data; + if (new_size <= APP_MAX_SIZE) { + expected_size = new_size; + received_size = 0; + eraseApplicationArea(); + ota_active = true; + sendACK(0xFFFFFFFF); // 确认开始 + } + } else if (id == CANFD_OTA_DATA_ID && ota_active) { + // 数据包格式:[4字节包序号][实际数据] + if (len >= 4) { + uint32_t packet_num = *(uint32_t *)data; + uint32_t offset = packet_num * (len - 4); + + if (offset < expected_size) { + writeApplicationData(offset, &data[4], len - 4); + received_size += (len - 4); + sendACK(packet_num); + + // 检查是否完成 + if (received_size >= expected_size) { + ota_active = false; + // 跳转前延时让ACK发出 + for (volatile int i = 0; i < 100000; i++) + ; + jumpToApplication(); + } + } + } + } +} + +void OTAHandler::sendACK(uint32_t packet_num) { + CAN0_transmiter.sendACK(CANFD_OTA_ACK_ID, packet_num); +} \ No newline at end of file diff --git a/Robot_V2/sys/OTA.h b/Robot_V2/sys/OTA.h new file mode 100644 index 0000000..fabc3b8 --- /dev/null +++ b/Robot_V2/sys/OTA.h @@ -0,0 +1,28 @@ +#ifndef __OTA_H +#define __OTA_H + +#include "Can.h" +#include "config.h" +#include "gd32c10x.h" + +class OTAHandler { + public: + bool ota_active; + uint32_t received_size; + uint32_t expected_size; + + OTAHandler(); + void init(); + void process(); + bool isActive() const { return ota_active; } + + void handleOTAMessage(uint32_t id, uint8_t *data, uint8_t len); + void jumpToApplication(); + + private: + bool validateApplication(); + void eraseApplicationArea(); + void writeApplicationData(uint32_t offset, uint8_t *data, uint32_t size); + void sendACK(uint32_t packet_num); +}; +#endif \ No newline at end of file diff --git a/Robot_V2/sys/config.h b/Robot_V2/sys/config.h new file mode 100644 index 0000000..4610e9e --- /dev/null +++ b/Robot_V2/sys/config.h @@ -0,0 +1,21 @@ +#pragma once +#include "stdint.h" + +// Flash分区配置 +constexpr uint32_t BOOTLOADER_SIZE = 0x4000; // 16KB +constexpr uint32_t APP_START_ADDR = 0x08004000; // APP起始地址 +constexpr uint32_t APP_MAX_SIZE = 0x0001C000; // 112KB +constexpr uint32_t FMC_PAGE_SIZE = 0x400; + +// CANFD配置 +constexpr uint32_t CANFD_OTA_REQ_ID = 0x00000100; +constexpr uint32_t CANFD_OTA_DATA_ID = 0x00000101; +constexpr uint32_t CANFD_OTA_ACK_ID = 0x00000102; + +// CANFD数据段最大64字节,我们用32字节数据 + 4字节头部 +constexpr uint32_t OTA_PACKET_SIZE = 32; +typedef struct { + uint32_t packet_num; // 包序号 + uint8_t data[OTA_PACKET_SIZE]; // 32字节有效数据 + uint32_t crc32; // 简单校验 +} canfd_ota_packet_t; \ No newline at end of file diff --git a/Robot_V2/sys/flash.cpp b/Robot_V2/sys/flash.cpp new file mode 100644 index 0000000..cccbc44 --- /dev/null +++ b/Robot_V2/sys/flash.cpp @@ -0,0 +1,453 @@ +#include "flash.h" +#include "gd32c10x.h" +#include "gd32c10x_crc.h" +#include "gd32c10x_fmc.h" +#include "math.h" +#include +#include +#include +#include +#include + +FlashEEPROM flashEEP = FlashEEPROM(); +extern CAN_transmiter CAN0_transmiter; +constexpr u8 SIZE_U32 = sizeof(uint32_t); +constexpr u8 SIZE_FLOAT = sizeof(float); +constexpr u8 DEFAULT_VALUE = 0; +constexpr u8 NUM_SAVED = 6; +#define EEPDEBUG 0 + +// FlashEEPROM类实现 +FlashEEPROM::FlashEEPROM() { + // 构造函数可以为空,或者做一些初始化工作 +} + +/** + * @brief 初始化Flash EEPROM模拟 + * @param None + * @retval None + */ +u8 FlashEEPROM::init() { + rcu_periph_clock_enable(RCU_CRC); + crc_deinit(); // 初始化CRC模块 + + FlashEepromStatus status = FLASH_EEPROM_OK; + // 读取系统配置 + read_saved_system_config(); + + if (EEPROMStatus == FLASH_EEPROM_OK) { + return FLASH_EEPROM_OK; + } else { + return FLASH_EEPROM_READ_ERROR; + } + return 1; // 正常不会返回这个,未预料的异常情况返回 +} + +/** + * @brief 读取EEPROM数据 + * @param virtualAddr: 虚拟地址 + * @param data: 存储读取数据的指针 + * @retval EEPROMStatus: 是否成功 + */ +u8 FlashEEPROM::read_saved_system_config(void) { + // 读取保存的参数 + u32 CRC_NUM = 0x0000; + FlashEepromStatus status_read[NUM_SAVED + 1] = {FLASH_EEPROM_OK}; + float data[NUM_SAVED] = {0.0f}; + // 尝试从Flash读取参数,如果不存在则使用默认值 + status_read[1] = readFloat(ADDR_CONTROL_MODE, &data[0]); + status_read[2] = readFloat(ADDR_VOLTAGE_LIMIT, &data[1]); + status_read[3] = readFloat(ADDR_VEL_LIMIT, &data[2]); + status_read[4] = readFloat(ADDR_ANGLE, &data[3]); + status_read[5] = readFloat(ADDR_TARGET_ANGLE, &data[4]); + status_read[6] = readFloat(ADDR_TARGET_VEL, &data[5]); + + // 读取失败则使用默认值 + for (u8 i = 1; i < NUM_SAVED + 1; i++) { + if (status_read[i] == + FLASH_EEPROM_DATA_NOT_FOUND) { // 首次读取,不保存报错 + data[i - 1] = DEFAULT_VALUE; + } else if (status_read[i] != FLASH_EEPROM_OK) { // 其余错误,保存报错 + data[i - 1] = DEFAULT_VALUE; + status_read[0] = status_read[i]; + } + } + // 读取到全部数据 + if (status_read[0] == FLASH_EEPROM_OK) { + u32 next_address = EEPROM_END_ADDRESS; + // 遍历Flash页面寻找下一个可写入位置 + for (u32 address = EEPROM_DATA_START_ADDRESS - SIZE_U32; + address > EEPROM_START_ADDRESS; address -= SIZE_U32) { + // 安全读取Flash数据 + volatile u32 *flash_ptr = (volatile u32 *)address; + u32 data_word = *flash_ptr; + // 找到空位置 + if (data_word == 0xFFFFFFFF) { + next_address = address + SIZE_U32; // 上一个位置为有效存储的数据 + break; + } + // 更新下一个可能的写入位置(如果需要格式化) + next_address = address - SIZE_U32; + } + if (next_address == EEPROM_DATA_START_ADDRESS) { + // 从来没有存储过,直接返回 + return FLASH_EEPROM_OK; + } + + crc_data_register_reset(); // 确保CRC计算从初始状态开始 + CRC_NUM = crc_block_data_calculate((uint32_t *)data, NUM_SAVED); + +#if EEPDEBUG + printf("CRC cmp1,0x%X_0x%x \r\n", CRC_NUM, *((u32 *)next_address)); +#endif + if (CRC_NUM != *((u32 *)next_address)) { // CRC错误 + for (u8 i = 0; i < NUM_SAVED; i++) { + data[i] = DEFAULT_VALUE; + } + EEPROMStatus = FLASH_EEPROM_CRC_ERROR; + } else { // CRC正确 + EEPROMStatus = FLASH_EEPROM_OK; + } + } else { + // 读取失败,报错 + EEPROMStatus = status_read[0]; + } + + return EEPROMStatus; +} + +/** + * @brief 从Flash EEPROM读取数据 + * @param virtualAddr: 虚拟地址 + * @param data: 指向存储读取数据的指针 + * @retval FlashEepromStatus: 操作状态 + */ +FlashEepromStatus FlashEEPROM::read(u8 virtualAddr, u16 *data) const { + // 参数检查 + if (data == nullptr) { + return FLASH_EEPROM_INVALID_ADDR; + } + + // 从Flash末尾开始向前搜索,找到最新的数据 + for (u32 address = EEPROM_END_ADDRESS - SIZE_U32; + address >= EEPROM_START_ADDRESS; address -= SIZE_U32) { + u32 data_word = *((u32 *)address); + // 检查是否是有效数据(非擦除状态) + if (data_word != 0xFFFFFFFF) { + u8 addr = (u8)(data_word & DATA_ADDR_MASK); + // 找到匹配的虚拟地址 + if (addr == virtualAddr) { + *data = (u16)(data_word & DATA_U16_MASK); + return FLASH_EEPROM_OK; + } + } + } + return FLASH_EEPROM_DATA_NOT_FOUND; +} + +/** + * @brief 从Flash EEPROM读取float数据 + * @param virtualAddr: 虚拟地址 + * @param data: 指向存储读取数据的指针 + * @retval FlashEepromStatus: 操作状态 + */ +FlashEepromStatus FlashEEPROM::readFloat(u8 virtualAddr, float *data) const { + // 检查参数有效性 + if (data == nullptr) { + return FLASH_EEPROM_INVALID_ADDR; + } + + // 从Flash末尾开始向前搜索,找到最新的数据 + for (u32 address = EEPROM_END_ADDRESS - SIZE_U32; + address >= EEPROM_START_ADDRESS; address -= SIZE_U32) { + // 使用volatile确保每次都从内存读取,防止编译器优化 + volatile u32 *flash_ptr = (volatile u32 *)address; + u32 data_word = *flash_ptr; + + // 检查是否是有效数据(非擦除状态) + if (data_word != 0xFFFFFFFF) { + u8 addr = (u8)(data_word & DATA_ADDR_MASK); + // 找到匹配的虚拟地址 + if (addr == virtualAddr) { + // 清除最低的8位地址信息,保留高24位数据 + u32 float_data = data_word & DATA_FLOAT_MASK; + // 使用内存拷贝将处理后的数据解释为float + memcpy(data, &float_data, SIZE_FLOAT); +#if EEPDEBUG + printf("read:0x%x=%f\r\n", address, *data); +#endif + return FLASH_EEPROM_OK; + } + } + } + // 未找到指定虚拟地址的数据 + return FLASH_EEPROM_DATA_NOT_FOUND; +} + +/** + * @brief 向Flash EEPROM写入数据 + * @param virtualAddr: 虚拟地址 + * @param data: 要写入的数据 + * @retval FlashEepromStatus: 操作状态 + */ +FlashEepromStatus FlashEEPROM::write(u8 virtualAddr, u16 data) { + // 查找下一个可写入的位置 + u32 next_address = EEPROM_START_ADDRESS; + u32 data_read; + // 插入虚拟地址到低8位 格式: [data:16bit][reserved:8bit][addr:8bit] + data = (data & DATA_U16_MASK) | (u32)virtualAddr; + + for (u32 address = EEPROM_END_ADDRESS - SIZE_U32; + address >= EEPROM_DATA_START_ADDRESS; address -= SIZE_U32) { + // 安全读取Flash数据 + volatile u32 *flash_ptr = (volatile u32 *)address; + data_read = *flash_ptr; + + if ((data_read & DATA_ADDR_MASK) == (u32)virtualAddr) { // 虚拟地址相同 + if ((data_read & DATA_U16_MASK) == + (data & DATA_U16_MASK)) { // 数据相同 +#if EEPDEBUG + data_read = data_read & DATA_U16_MASK; + u16 float_data_read = *((u16 *)&data_read); + printf("Found data in:0x%x=%u\r\n", address, data_read); +#endif + return FLASH_EEPROM_OK; + } else { + break; + } + } + } + + // 遍历Flash页面寻找下一个可写入位置 + for (u32 address = EEPROM_DATA_START_ADDRESS; address < EEPROM_END_ADDRESS; + address += SIZE_U32) { + // 安全读取Flash数据 + volatile u32 *flash_ptr = (volatile u32 *)address; + u32 data_word = *flash_ptr; + // 找到空位置 + if (data_word == 0xFFFFFFFF) { + next_address = address; + break; + } + // 更新下一个可能的写入位置(如果需要格式化) + next_address = address + SIZE_U32; + } + + // 如果有足够空间,直接写入 + if (next_address < EEPROM_END_ADDRESS) { + u32 data_word = ((u32)data << 16) | (u32)virtualAddr; + + // 使用GD32库函数进行安全编程 + fmc_unlock(); + fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_PGAERR | FMC_FLAG_WPERR); + fmc_state_enum fmc_status = + fmc_word_program(next_address, data_word); // 写入数据 + fmc_lock(); + + if (fmc_status != FMC_READY) { + return FLASH_EEPROM_WRITE_ERROR; + } + return FLASH_EEPROM_OK; + } else { // 空间不足,需要格式化页面 +#if EEPDEBUG + printf("no enough space\r\n"); +#endif + FlashEepromStatus status = format(); + if (status == FLASH_EEPROM_OK) { + return status; + } else { + return FLASH_EEPROM_ERASE_ERROR; + } + } +} + +/** + * @brief 向Flash EEPROM写入float数据 + * @param virtualAddr: 虚拟地址 + * @param data: 要写入的数据 + * @retval FlashEepromStatus: 操作状态 + */ +FlashEepromStatus FlashEEPROM::writeFloat(u8 virtualAddr, float data) { + // 查找下一个可写入的位置 + u32 next_address = EEPROM_START_ADDRESS; + u32 data_word; + + // 将完整的float数据复制到32位变量中 + memcpy(&data_word, &data, SIZE_FLOAT); + // 插入虚拟地址到低8位 格式: [data:24bit][addr:8bit] + data_word = (data_word & DATA_FLOAT_MASK) | (u32)virtualAddr; + + // 从Flash末尾开始向前搜索,找到最新的数据 + for (u32 address = EEPROM_END_ADDRESS - SIZE_U32; + address >= EEPROM_DATA_START_ADDRESS; address -= SIZE_U32) { + // 安全读取Flash数据 + volatile u32 *flash_ptr = (volatile u32 *)address; + u32 data_word_read = *flash_ptr; + + if ((data_word_read & DATA_ADDR_MASK) == + (u32)virtualAddr) { // 虚拟地址相同 + if ((data_word_read & DATA_FLOAT_MASK) == + (data_word & DATA_FLOAT_MASK)) { // 数据相同 +#if EEPDEBUG + data_word_read = data_word_read & DATA_FLOAT_MASK; + float float_data_read = *((float *)&data_word_read); + printf("Found data in:0x%x=%f\r\n", address, float_data_read); +#endif + return FLASH_EEPROM_OK; + } else { + break; // 找到相同地址但数据不同,需要更新 + } + } + } + + // 遍历Flash页面寻找下一个可写入位置 + for (u32 address = EEPROM_DATA_START_ADDRESS; address < EEPROM_END_ADDRESS; + address += SIZE_U32) { + // 安全读取Flash数据 + volatile u32 *flash_ptr = (volatile u32 *)address; + u32 data_word_read = *flash_ptr; + // 找到空位置 + if (data_word_read == 0xFFFFFFFF) { + next_address = address; + break; + } + // 更新下一个可能的写入位置(如果需要格式化) + next_address = address + SIZE_U32; + } + + // 如果有足够空间,直接写入 + if (next_address < EEPROM_END_ADDRESS) { + // 使用GD32库函数进行安全编程 + fmc_unlock(); + fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_PGAERR | FMC_FLAG_WPERR); + + // 确保使用对齐地址 + fmc_state_enum fmc_status = fmc_word_program(next_address, data_word); + + fmc_lock(); +#if EEPDEBUG + u32 data_word_c = *((u32 *)next_address); + data_word_c = data_word_c & DATA_FLOAT_MASK; + float float_data = *((float *)&data_word_c); + printf("save:0x%x=%f\r\n", next_address, float_data); +#endif + if (fmc_status != FMC_READY) { + return FLASH_EEPROM_WRITE_ERROR; + } + return FLASH_EEPROM_OK; + } else { + // 空间不足,需要格式化页面 +#if EEPDEBUG + printf("no enough space\r\n"); +#endif + FlashEepromStatus status = format(); + if (status == FLASH_EEPROM_OK) { + return status; + } else { + return FLASH_EEPROM_ERASE_ERROR; + } + } +} + +/** + * @brief 格式化Flash EEPROM页面 + * @param None + * @retval FlashEepromStatus: 操作状态 + */ +FlashEepromStatus FlashEEPROM::format() { + fmc_state_enum fmc_status; +#if EEPDEBUG + printf("擦除页面\r\n"); +#endif + + fmc_unlock(); + fmc_status = fmc_page_erase(EEPROM_START_ADDRESS); // 擦除第一页 + if (fmc_status != FMC_READY) { + fmc_lock(); + return FLASH_EEPROM_ERASE_ERROR; + } + fmc_status = fmc_page_erase(EEPROM_DATA_PAGE2_ADDRESS); // 擦除第二页 + if (fmc_status != FMC_READY) { + fmc_lock(); + return FLASH_EEPROM_ERASE_ERROR; + } + fmc_lock(); + return FLASH_EEPROM_OK; +} + +/** + * @brief 读取角度数据从Flash + * @return float: 角度数据 + */ +float FlashEEPROM::read_angle() { + float angle = DEFAULT_VALUE; + if (readFloat(ADDR_ANGLE, &angle) != FLASH_EEPROM_OK) { + angle = DEFAULT_VALUE; + } + return angle; +} + +/** + * @brief 保存CRC数据到Flash + * @param saved: 是否一次性保存 + * @return FlashEepromStatus: 状态 + */ +FlashEepromStatus FlashEEPROM::writeCRC(u32 CRC_NUM, bool saved) { + static u32 next_address; + // 遍历Flash页面寻找下一个可写入crc的位置 + for (u32 address = EEPROM_DATA_START_ADDRESS - SIZE_U32; + address > EEPROM_START_ADDRESS; address -= SIZE_U32) { + // 安全读取Flash数据 + volatile u32 *flash_ptr = (volatile u32 *)address; + u32 data_word = *flash_ptr; + // 找到空位置 + if (data_word == 0xFFFFFFFF) { + next_address = address; + break; + } + // 更新下一个可能的写入位置(如果需要格式化) + next_address = address - SIZE_U32; + } + + // 如果当前CRC与现在的crc值不同,则写入 + if (*((u32 *)next_address) != CRC_NUM) { + // 如果有足够空间,直接写入crc值 + if (next_address > EEPROM_START_ADDRESS) { + fmc_unlock(); + fmc_flag_clear(FMC_FLAG_PGERR | FMC_FLAG_PGAERR | FMC_FLAG_WPERR); + fmc_state_enum fmc_status = fmc_word_program(next_address, CRC_NUM); + fmc_lock(); +#if EEPDEBUG + printf("CRC cmp1,0x%X_0x%x \r\n", CRC_NUM, *((u32 *)next_address)); +#endif + + // 检查写入是否成功 + if (fmc_status != FMC_READY) { + EEPROMStatus = fmc_status; + return FLASH_EEPROM_WRITE_ERROR; + } + } else { + // 空间不足,需要格式化页面 +#if EEPDEBUG + printf("no enough space\r\n"); +#endif + FlashEepromStatus status = format(); + if (status == FLASH_EEPROM_OK) { + return status; + } else { + EEPROMStatus = FLASH_EEPROM_ERASE_ERROR; + return FLASH_EEPROM_ERASE_ERROR; + } + } + } + + // 重新读取CRC校验 + if (CRC_NUM == *((u32 *)next_address)) { + system_config_saved = saved; // 标记已保存过 + EEPROMStatus = FLASH_EEPROM_OK; // 设置EEPROM状态 + return FLASH_EEPROM_OK; + } else { + EEPROMStatus = FLASH_EEPROM_CRC_ERROR; // 设置EEPROM错误状态 + return FLASH_EEPROM_CRC_ERROR; + } +} \ No newline at end of file diff --git a/Robot_V2/sys/flash.h b/Robot_V2/sys/flash.h new file mode 100644 index 0000000..aff3aca --- /dev/null +++ b/Robot_V2/sys/flash.h @@ -0,0 +1,71 @@ +#ifndef __FLASH_H +#define __FLASH_H + +#include +// 修改后 - 强制4字节对齐 +#define ALIGN_4BYTE(addr) ((addr) & 0xFFFFFFFC) // 4字节对齐 + +// EEPROM操作状态 +typedef enum { + FLASH_EEPROM_OK = 0, // 操作成功 + FLASH_EEPROM_WRITE_ERROR, // 写入错误 + FLASH_EEPROM_READ_ERROR, // 读取错误 + FLASH_EEPROM_ERASE_ERROR, // 擦除错误 + FLASH_EEPROM_INVALID_ADDR, // 无效地址 + FLASH_EEPROM_DATA_NOT_FOUND, // 找不到数据 + FLASH_EEPROM_CRC_ERROR, // CRC错误 + FLASH_EEPROM_ALIGNMENT_ERROR, // 对齐错误 +} FlashEepromStatus; + +// Flash EEPROM类 +class FlashEEPROM { + public: + // EEPROM emulation constants + static constexpr u32 EEPROM_START_ADDRESS = 0x0801F800; // 第一页(1KB) + static constexpr u32 EEPROM_DATA_PAGE2_ADDRESS = 0x801FC00; // 第二页(1KB) + static constexpr u32 EEPROM_END_ADDRESS = 0x08020000; // Flash结束地址 + static constexpr u32 EEPROM_MAX_SIZE = 0x800; // EEPROM最大容量 + static constexpr u32 EEPROM_DATA_START_ADDRESS = + 0x0801F900; // DATA段开始地址 + static constexpr u32 DATA_FLOAT_MASK = 0xFFFFFF00; // float存储地址掩码 + static constexpr u32 DATA_U16_MASK = 0xFFFF0000; // u16存储地址掩码 + static constexpr u32 DATA_ADDR_MASK = 0x000000FF; // 虚拟地址掩码 + + // 定义用户自定义的虚拟地址 + static constexpr u8 ADDR_CONTROL_MODE = 0x0; // 控制模式 + static constexpr u8 ADDR_ANGLE = 0x01; // 角度数据存储地址 + static constexpr u8 ADDR_TARGET_ANGLE = 0x02; // 角度命令数据存储地址 + static constexpr u8 ADDR_TARGET_VEL = 0x03; // 速度命令数据存储地址 + static constexpr u8 ADDR_VOLTAGE_LIMIT = 0x4; // 电压限制 + static constexpr u8 ADDR_VEL_LIMIT = 0x05; // 角度数据存储地址 + + bool angle_saved = false; + bool system_config_saved = false; + u8 EEPROMStatus; + // 构造函数 + FlashEEPROM(); + + // 初始化Flash EEPROM模拟 + u8 init(); + + // 从Flash EEPROM中读取数据 + FlashEepromStatus read(u8 virtualAddr, u16 *data) const; + // 向Flash EEPROM写入数据 + FlashEepromStatus write(u8 virtualAddr, u16 data); + // Float数据读相关函数 + FlashEepromStatus readFloat(u8 virtualAddr, float *data) const; + // Float数据存储相关函数 + FlashEepromStatus writeFloat(u8 virtualAddr, float data); + + // 格式化Flash EEPROM页面 + FlashEepromStatus format(); + + u8 read_saved_system_config(void); + float read_angle(); + + private: + FlashEepromStatus writeCRC(u32 CRC_NUM, bool saved); +}; + +void flash_eeprom_example_main(void); +#endif /* __FLASH_H */ \ No newline at end of file diff --git a/Robot_V2/sys/health.cpp b/Robot_V2/sys/health.cpp new file mode 100644 index 0000000..fbd5935 --- /dev/null +++ b/Robot_V2/sys/health.cpp @@ -0,0 +1,103 @@ +#include "health.h" +#include "Can.h" +#include "DengFOC.h" +#include "adc.h" +#include "flash.h" +#include + +extern sampler sampler; +extern CAN_transmiter CAN0_transmiter; +extern FOC_Controlroller FOC; +extern FlashEEPROM flashEEP; +ThermalController thermalController; // 热量控制器初始化 + +#define max(a, b, c) \ + ((a) > (b) ? ((a) > (c) ? (a) : (c)) : ((b) > (c) ? (b) : (c))) +constexpr u16 PROTECT_TIME = 6000; // 过热保护时间,单位*10ms +/** +** @brief 热能计算 +** @param None +** @retval 热量值 +*/ +u32 ThermalController::update() { + thermal_value = Q16_16_MUL(thermal_value, thermalRate); + // 添加温度积累 + int drv_temp = (int)sampler.get_drv_temp(); + int mcu_temp = (int)sampler.get_mcu_temp(); + if (drv_temp == 255) + drv_temp = 0; + if (mcu_temp == 255) + mcu_temp = 0; + thermal_value += drv_temp * drv_temp + mcu_temp * mcu_temp; + + if (remainingTime10Ms) { + // 过热停机状态 + // 检查是否可以恢复 + q16_16_t recovery_threshold = + Q16_16_MUL(thermal_capacity, recoveryRate); + if (thermal_value < recovery_threshold) { + remainingTime10Ms = 1; // 可以恢复工作 + } + if (remainingTime10Ms == 1) { // 过热恢复 + FOC.resume(); + CAN0_transmiter.ThermalStatus = 0; + return --remainingTime10Ms; + } + return --remainingTime10Ms; + } else { + // 当前没有过热停机 + // 添加电流热积累 + u32 currents[3] = {(u32)(sampler.get_current('U') * 1000), + (u32)(sampler.get_current('V') * 1000), + (u32)(sampler.get_current('W') * 1000)}; + + // 找最大电流(原始ADC值) + current_max = max(currents[0], currents[1], currents[2]); + if (current_max < 2000) { + thermal_value += current_max * current_max * gapTimeMs * + 0.00007f; // 计算当前电流热积累值 + } else if (current_max > 3800) { + thermal_value += current_max * current_max * gapTimeMs * + 0.01f; // 添加当前电流热积累值 + } else if (current_max > 3400) { + thermal_value += current_max * current_max * gapTimeMs * + 0.005f; // 计算当前电流热积累值 + } else if (current_max > 3000) { + thermal_value += current_max * current_max * gapTimeMs * + 0.0002f; // 计算当前电流热积累值 + } else if (current_max > 2000) { + thermal_value += current_max * current_max * gapTimeMs * + 0.0001f; // 计算当前电流热积累值 + } + } + + if (thermal_value > thermal_capacity) { + FOC.shut_down(); + remainingTime10Ms = PROTECT_TIME; // 过热停机 + CAN0_transmiter.ThermalStatus = 1; + return remainingTime10Ms; + } + return thermal_value; +} +/** +** @brief 温度检测 +** @param None +*/ +void angsens_MG_check(void) { + bool MGH = gpio_input_bit_get(GPIOB, GPIO_PIN_10); + bool MGL = gpio_input_bit_get(GPIOB, GPIO_PIN_11); + CAN0_transmiter.MagStatus = MGH or MGL; +} + +void power_manage(void) { + float last_vbus = sampler.get_vbus_voltage(); + sampler.update_vbus_voltage(); + FOC.update_power(); + float vbus = sampler.get_vbus_voltage(); + if ((vbus < 22.0f) and (last_vbus > vbus) and vbus > 8.0f) { + FOC.shut_down(); + flashEEP.save_system_config(true); + } else { + FOC.resume(); + } +} \ No newline at end of file diff --git a/Robot_V2/sys/health.h b/Robot_V2/sys/health.h new file mode 100644 index 0000000..a3b22cf --- /dev/null +++ b/Robot_V2/sys/health.h @@ -0,0 +1,40 @@ +#ifndef _HEALTH_H +#define _HEALTH_H + +#include "stdint.h" +typedef int32_t q16_16_t; // Q16.16格式 +// 定点数运算宏 +#define Q16_16_ONE 65536 // 1.0 in Q16.16 +#define FLOAT_TO_Q16_16(x) ((q16_16_t)((x) * Q16_16_ONE)) +#define Q16_16_TO_FLOAT(x) ((float)(x) / Q16_16_ONE) +#define Q16_16_MUL(a, b) ((q16_16_t)(((int64_t)(a) * (b)) >> 16)) +#define Q16_16_SQUARE(x) Q16_16_MUL((x), (x)) + +class ThermalController { + private: + u8 temperature; + u16 current_max; + + q16_16_t thermalRate; // 热耗散系数(每单位时间散热比例) + q16_16_t recoveryRate; // 自然恢复率(散热到多少以下开始工作) + + u32 thermal_value = 0; + u32 thermal_capacity = 3600000; // 热容量 + + u16 gapTimeMs = 10; // 单次计算间隔ms + u16 remainingTime10Ms = 0; // 过热冷却剩余ms + public: + ThermalController() + : thermalRate(FLOAT_TO_Q16_16(0.995f)), + recoveryRate(FLOAT_TO_Q16_16(0.33f)) {} + u32 update(); + void reset() { + thermal_value = 0; + remainingTime10Ms = 0; + } +}; + +void angsens_MG_check(void); +void power_manage(void); + +#endif diff --git a/Robot_V2/sys/initial.cpp b/Robot_V2/sys/initial.cpp new file mode 100644 index 0000000..90bdb52 --- /dev/null +++ b/Robot_V2/sys/initial.cpp @@ -0,0 +1,93 @@ +#include "initial.h" +#include "gd32c10x.h" +#include "gd32c10x_gpio.h" +#include "gd32c10x_rcu.h" +#include +#include +#include + +/* retarget the C library printf function to the USART */ +u8 USART0_init() { + gd_eval_com_init(EVAL_COM0); + return 1; +} + +/*! + \brief configure the watchdog peripheral + \param[in] none + \param[out] none + \retval none +*/ +u8 watchdog_init(u32 time) { + u8 status = 0; + /* configure FWDGT counter clock: 40KHz(IRC40K) / 64 = 0.625 KHz */ + /* time = reload_value / clock_frequency */ + status = fwdgt_config(time * 0.625, FWDGT_PSC_DIV64); + fwdgt_enable(); + return status; +} + + +int fputc(int ch, FILE *f) throw() { + usart_data_transmit(EVAL_COM0, (uint8_t)ch); + while (RESET == usart_flag_get(EVAL_COM0, USART_FLAG_TBE)) + ; + return ch; +} + +void unused_pin_init() { + rcu_periph_clock_enable(RCU_GPIOA); // 使能GPIOA时钟 + rcu_periph_clock_enable(RCU_GPIOB); // 使能GPIOB时钟 + rcu_periph_clock_enable(RCU_GPIOC); // 使能GPIOC时钟 + gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ, + GPIO_PIN_8 | GPIO_PIN_11 | GPIO_PIN_12); + gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ, + GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_15); + gpio_init(GPIOC, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ, + GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15); + gpio_bit_reset(GPIOA, GPIO_PIN_8 | GPIO_PIN_11 | GPIO_PIN_12); + gpio_bit_reset(GPIOB, GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_15); + gpio_bit_reset(GPIOC, GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15); +} + +/*! + \brief 检测并打印复位源信息 + \param[in] none + \param[out] none + \retval none +*/ +u16 get_reset_cause(void) { + u16 cause = 0; + if (RESET != rcu_flag_get(RCU_FLAG_FWDGTRST)) { + // printf("Free Watchdog Timer Reset\r\n"); + cause = RCU_FLAG_FWDGTRST; + } + if (RESET != rcu_flag_get(RCU_FLAG_EPRST)) { + // printf("External Pin Reset\r\n"); + cause = RCU_FLAG_EPRST; + } + + if (RESET != rcu_flag_get(RCU_FLAG_PORRST)) { + // printf("Power Reset\r\n"); + cause = RCU_FLAG_PORRST; + } + + if (RESET != rcu_flag_get(RCU_FLAG_WWDGTRST)) { + // printf("Window Watchdog Timer Reset\r\n"); + cause = RCU_FLAG_WWDGTRST; + } + + if (RESET != rcu_flag_get(RCU_FLAG_LPRST)) { + // printf("Low Power Reset\r\n"); + cause = RCU_FLAG_LPRST; + } + + if (RESET != rcu_flag_get(RCU_FLAG_SWRST)) { + // printf("Software Reset\r\n"); + cause = RCU_FLAG_SWRST; + } + // 清除所有复位标志 + rcu_all_reset_flag_clear(); + // printf("cause:%d\r\n", cause); + return cause; +} diff --git a/Robot_V2/sys/initial.h b/Robot_V2/sys/initial.h new file mode 100644 index 0000000..844e8d0 --- /dev/null +++ b/Robot_V2/sys/initial.h @@ -0,0 +1,30 @@ +#ifndef _INITIAL_H +#define _INITIAL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "gd32c10x_eval.h" +#include "stdint.h" +#include + + +constexpr u16 REDUCTION_RATIO = 25; +constexpr float DEG2RAD = 1.0f / 360.0f * 6.28318530718f; +constexpr float RAD2DEG = 360.0f / 6.28318530718f; + +void rcu_config(void); +static volatile uint32_t timer_delay_count = 0; // volatile 很重要! +int fputc(int ch, FILE *f); // 声明fputc函数以重载标准库实现 + +u8 USART0_init(void); +u8 watchdog_init(u32 time); +u16 get_reset_cause(void); +void unused_pin_init(); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Robot_V2/sys/systick.cpp b/Robot_V2/sys/systick.cpp new file mode 100644 index 0000000..533e364 --- /dev/null +++ b/Robot_V2/sys/systick.cpp @@ -0,0 +1,117 @@ +/*! + \file systick.c + \brief the systick configuration file + + \version 2025-06-20, V1.5.1, firmware for GD32C10x +*/ + +/* + Copyright (c) 2024, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its +contributors may be used to endorse or promote products derived from this +software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "systick.h" +#include "Can.h" +#include "flash.h" +#include "gd32c10x.h" + +volatile static uint32_t delay; +extern CAN_transmiter CAN0_transmiter; +extern FlashEEPROM flashEEP; + +/*! + \brief configure systick + \param[in] none + \param[out] none + \retval none +*/ +void systick_config(void) { + /* setup systick timer for 1000Hz interrupts */ + if (SysTick_Config(SystemCoreClock / 1000U)) { + /* capture error */ + while (1) { + } + } + /* configure the systick handler priority */ + NVIC_SetPriority(SysTick_IRQn, 0x00U); +} +/*! + \brief delay a time in seconds + \param[in] count: count in seconds + \param[out] none + \retval none +*/ +void delay_1s(uint32_t count) { + uint32_t i; + for (i = 0; i < count; i++) { + delay_1ms(1000); + } +} + +/*! + \brief delay a time in milliseconds + \param[in] count: count in milliseconds + \param[out] none + \retval none +*/ +void delay_1ms(uint32_t count) { + delay = count; + while (0U != delay) { + fwdgt_counter_reload(); + fwdgt_counter_reload(); + } +} + +/*! + \brief delay decrement + \param[in] none + \param[out] none + \retval none +*/ +void delay_decrement(void) { + if (0U != delay) { + delay--; + } +} + +/*! + \brief system soft reset + \param[in] none + \param[out] none + \retval none +*/ +void system_soft_reset(void) { + /* Set the software reset bit */ + SCB->AIRCR = (0x05FA0000U | (SCB->AIRCR & (0x700U)) | (1U << 2)); + + /* Data Synchronization Barrier */ + __DSB(); + + /* Wait for reset */ + while (1) { + __NOP(); + } +} + diff --git a/Robot_V2/sys/systick.h b/Robot_V2/sys/systick.h new file mode 100644 index 0000000..5294ccb --- /dev/null +++ b/Robot_V2/sys/systick.h @@ -0,0 +1,62 @@ +/*! + \file systick.h + \brief the header file of systick + + \version 2025-06-20, V1.5.1, firmware for GD32C10x +*/ + +/* + Copyright (c) 2024, GigaDevice Semiconductor Inc. + + Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its +contributors may be used to endorse or promote products derived from this +software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef SYSTICK_H +#define SYSTICK_H + +#ifdef __cplusplus +extern "C" { +#endif +#include + +/* configure systick */ +void systick_config(void); +/* delay a time in milliseconds */ +void delay_1ms(uint32_t count); +/* delay a time in seconds */ +void delay_1s(uint32_t count); +/* delay decrement */ +void delay_decrement(void); +/* 空闲任务计数 */ +void idle_task_count(void); +/* 获取CPU使用率 */ +uint8_t get_cpu_usage(void); +/* 系统软复位 */ +void system_soft_reset(void); + +#ifdef __cplusplus +} +#endif + +#endif /* SYSTICK_H */ \ No newline at end of file diff --git a/out/Robot_V2+GD32C103CB.cbuild-run.yml b/out/Robot_V2+GD32C103CB.cbuild-run.yml new file mode 100644 index 0000000..87e74c8 --- /dev/null +++ b/out/Robot_V2+GD32C103CB.cbuild-run.yml @@ -0,0 +1,44 @@ +cbuild-run: + generated-by: csolution version 2.12.0+p41-gfeadfc5e + solution: ../Robot_V2.csolution.yml + target-type: GD32C103CB + target-set: + compiler: AC6 + device: GigaDevice::GD32C103CB + device-pack: GigaDevice::GD32C10x_DFP@1.0.1 + output: + - file: Robot_V2/GD32C103CB/Release/Robot_V2.axf + info: generate by Robot_V2.Release+GD32C103CB + type: elf + load: symbols + - file: Robot_V2/GD32C103CB/Release/Robot_V2.hex + info: generate by Robot_V2.Release+GD32C103CB + type: hex + load: image + system-resources: + memory: + - name: IROM1 + access: rx + start: 0x08000000 + size: 0x00020000 + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + - name: IRAM1 + access: rwx + start: 0x20000000 + size: 0x00008000 + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + system-descriptions: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/SVD/GD32C10x.svd + type: svd + debugger: + name: ST-Link@pyOCD + protocol: swd + clock: 10000000 + gdbserver: + - port: 3333 + programming: + - algorithm: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Flash/GD32C10x.FLM + start: 0x08000000 + size: 0x00020000 + ram-start: 0x20000000 + ram-size: 0x00008000 diff --git a/out/Robot_V2/GD32C103CB/Debug/Robot_V2.Debug+GD32C103CB.cbuild.yml b/out/Robot_V2/GD32C103CB/Debug/Robot_V2.Debug+GD32C103CB.cbuild.yml new file mode 100644 index 0000000..ac0ddca --- /dev/null +++ b/out/Robot_V2/GD32C103CB/Debug/Robot_V2.Debug+GD32C103CB.cbuild.yml @@ -0,0 +1,406 @@ +build: + generated-by: csolution version 2.12.0 + solution: ../../../../Robot_V2.csolution.yml + project: ../../../../Robot_V2/Robot_V2.cproject.yml + context: Robot_V2.Debug+GD32C103CB + compiler: AC6 + device: GigaDevice::GD32C103CB + device-pack: GigaDevice::GD32C10x_DFP@1.0.1 + processor: + endian: little + fpu: sp + core: Cortex-M4 + packs: + - pack: ARM::CMSIS@4.5.0 + path: ${CMSIS_PACK_ROOT}/ARM/CMSIS/4.5.0 + - pack: GigaDevice::GD32C10x_DFP@1.0.1 + path: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1 + optimize: none + debug: on + misc: + ASM: + - -D__packed=packed + - -D__MICROLIB + - -gdwarf-5 + - -masm=auto + C: + - -D__packed=packed + - -fshort-enums + - -fshort-wchar + - -D__MICROLIB + - -Wno-register + - -gdwarf-5 + - -std=gnu11 + - -Wno-macro-redefined + - -Wno-pragma-pack + - -Wno-parentheses-equality + - -Wno-license-management + CPP: + - -fshort-enums + - -fshort-wchar + - -D__MICROLIB + - -Wno-register + - -gdwarf-5 + - -Wno-macro-redefined + - -Wno-pragma-pack + - -Wno-parentheses-equality + - -Wno-license-management + Link: + - --library_type=microlib + - --entry=Reset_Handler + - --info=summarysizes + - --summary_stderr + - --diag_suppress=L6314W + define: + - GD32C10x + - _RTE_ + define-asm: + - GD32C10x + - _RTE_ + add-path: + - ../../../../Robot_V2/RTE/_Debug_GD32C103CB + - ${CMSIS_PACK_ROOT}/ARM/CMSIS/4.5.0/CMSIS/Include + - ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc + - ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include + - ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities + add-path-asm: + - ../../../../Robot_V2/RTE/_Debug_GD32C103CB + - ${CMSIS_PACK_ROOT}/ARM/CMSIS/4.5.0/CMSIS/Include + - ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc + - ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include + - ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities + output-dirs: + intdir: ../../../../tmp + outdir: . + rtedir: ../../../../Robot_V2/RTE + output: + - type: elf + file: Robot_V2.axf + - type: hex + file: Robot_V2.hex + - type: map + file: Robot_V2.axf.map + components: + - component: ARM::CMSIS:CORE@4.3.0 + condition: Cortex-M Device + from-pack: ARM::CMSIS@4.5.0 + selected-by: ARM::CMSIS:CORE + files: + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS/4.5.0/CMSIS/Documentation/Core/html/index.html + category: doc + version: 4.3.0 + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS/4.5.0/CMSIS/Include + category: include + version: 4.3.0 + - component: GigaDevice::Device:EVAL:GD32C10x@1.0.0 + condition: GD32C10x STDPERIPHERALS EVAL + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:EVAL:GD32C10x + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities/gd32c10x_eval.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:ADC@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:ADC + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_adc.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_adc.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:CAN@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:CAN + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_can.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:DBG@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:DBG + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_dbg.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:DMA@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:DMA + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_dma.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:EXTI@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:EXTI + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_exti.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:FMC@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:FMC + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_fmc.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:FWDGT@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:FWDGT + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_fwdgt.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:GPIO@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:GPIO + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_gpio.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:MISC@1.0.0 + condition: GD32C10x CMSIS + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:MISC + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_misc.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:PMU@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:PMU + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_pmu.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:RCU@1.0.0 + condition: GD32C10x STDPERIPHERALS MISC + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:RCU + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_rcu.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:SPI_I2S@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:SPI_I2S + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_spi.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_spi.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:TIMER@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:TIMER + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_timer.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_timer.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:USART@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:USART + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_usart.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:WWDGT@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:WWDGT + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_wwdgt.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_wwdgt.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_libopt@1.0.0 + condition: GD32C10x CMSIS + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_libopt + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include/gd32c10x_libopt.h + category: header + version: 1.0.0 + - component: GigaDevice::Device:Startup@1.0.0 + condition: GD32C10x + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:Startup + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include + category: include + version: 1.0.0 + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include/gd32c10x.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.s + category: source + attr: config + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c + category: source + attr: config + version: 1.0.0 + linker: + script: ../../../../Robot_V2/RTE/Device/GD32C103CB/ac6_linker_script.sct.src + regions: ../../../../Robot_V2/RTE/Device/GD32C103CB/regions_GD32C103CB.h + groups: + - group: Source Files + files: + - file: ../../../../Robot_V2/main.h + category: header + - file: ../../../../Robot_V2/main.cpp + category: sourceCpp + - group: sys + files: + - file: ../../../../Robot_V2/sys/systick.cpp + category: sourceCpp + - file: ../../../../Robot_V2/sys/systick.h + category: header + - file: ../../../../Robot_V2/sys/initial.cpp + category: sourceCpp + - file: ../../../../Robot_V2/sys/initial.h + category: header + - file: ../../../../Robot_V2/sys/health.h + category: header + - file: ../../../../Robot_V2/sys/health.cpp + category: sourceCpp + - group: device + files: + - file: ../../../../Robot_V2/device/Can.cpp + category: sourceCpp + - file: ../../../../Robot_V2/device/Can.h + category: header + - file: ../../../../Robot_V2/device/ang_sensor.cpp + category: sourceCpp + - file: ../../../../Robot_V2/device/ang_sensor.h + category: header + - file: ../../../../Robot_V2/device/ADC.cpp + category: sourceCpp + - file: ../../../../Robot_V2/device/adc.h + category: header + - file: ../../../../Robot_V2/device/Timer.cpp + category: sourceCpp + - file: ../../../../Robot_V2/device/Timer.h + category: header + - file: ../../../../Robot_V2/device/test.cpp + category: sourceCpp + - file: ../../../../Robot_V2/device/motor.cpp + category: sourceCpp + - file: ../../../../Robot_V2/device/motor.h + category: header + - group: Algorithm + files: + - file: ../../../../Robot_V2/Algorithm/Filter.cpp + category: sourceCpp + - file: ../../../../Robot_V2/Algorithm/Filter.h + category: header + - file: ../../../../Robot_V2/Algorithm/DengFOC.cpp + category: sourceCpp + - file: ../../../../Robot_V2/Algorithm/DengFOC.h + category: header + - file: ../../../../Robot_V2/Algorithm/pid.cpp + category: sourceCpp + - file: ../../../../Robot_V2/pid.h + category: header + constructed-files: + - file: ../../../../Robot_V2/RTE/_Debug_GD32C103CB/RTE_Components.h + category: header + licenses: + - license: + packs: + - pack: ARM::CMSIS@4.5.0 + components: + - component: ARM::CMSIS:CORE@4.3.0 + - license: + packs: + - pack: GigaDevice::GD32C10x_DFP@1.0.1 + components: + - component: GigaDevice::Device:EVAL:GD32C10x@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:ADC@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:CAN@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:DBG@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:DMA@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:EXTI@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:FMC@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:FWDGT@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:GPIO@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:MISC@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:PMU@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:RCU@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:SPI_I2S@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:TIMER@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:USART@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:WWDGT@1.0.0 + - component: GigaDevice::Device:GD32C10x_libopt@1.0.0 + - component: GigaDevice::Device:Startup@1.0.0 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/Can.cpp.189F590D64E2E593.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/Can.cpp.189F590D64E2E593.idx new file mode 100644 index 0000000000000000000000000000000000000000..3dc9658f6c096bc2697304d3c525646852ca1e3f GIT binary patch literal 30178 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/Can.h.8B31786D14DBA198.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/Can.h.8B31786D14DBA198.idx new file mode 100644 index 0000000000000000000000000000000000000000..d41611df60410d754acfa7960c9a4db9d72e920e GIT binary patch literal 6226 zcmcIn3vg3a8a_9OuBJbj&%qm5EAl-ua7-w{5S$9{R*;UtFo3xDM_!tM>9d-6UC;5}`(8ZlK z)1Jxy{r~x2=bZ0vo2n}-7fm9h+*#f2QG+s12uXwAK+x~{V+wqspX4#C9DbMDYG$AE zvc*<&=MwYDD~MuuFC`7u4n&uP(1E z=#t&8`&2UoFjqBH*T=lvwBLn(e{)a{b_Q(b=B4H33!9tGKEHWkQ&WA@HQ_=%2SX=% zLt7uA!7A#?etN7M)R5@ZYRTL_QN3AdKy%0M0+nCNN2j!?Hew3^UKjuCBLQi=8sp~_) z#)#@hQDVwS+E<0Uyl(%{g`>l#2Ou%8FQ}T$q5kzFeVbrUq`c6st>NuYg!jA<+H!bg z!yrjEmqyF|MVp)E&;pX?2t+X4FM!wBy?l5D=(zOo|f^w)!sOWf3I zGe;H2PmetJL~`U|!kUMQaL-Oi;97s7J;yIUybJuW_i8pTrf)TtKt#GagW-cmhYvtr zH@_p&p>W^2@Zl#y*XIpYh9BvVH2||-V0>dm z#E2#JV>TH0sw{E|z1H@oyRG)>rpCKuuhXsiDOOowZ&DT2)ul$IX4UJAewE#BJBo=` zaj@B~svXqYzFc0bc1FHlwJqqEy#bFa7>Q<&i_ic#L94yIUG{oacVS{)iHg~YiaNP1 zGC0VRcGd5Z-BHOw6kB%b(z4Q6+wDPss^PbbD6-dT_eYAfx4PxF2oiuoW1?O0d0Smf zV|RLFI~{Y>%-+`F^2H^$&)4CQm9;lOf@*;6Xm!SX`8*ytY();zJE63z%39Lua;r8` z6w7Vm(tzp@h>F7@TDp{uwQZv854u`qB^VI%^9m%TP$?1>pQi(M_yZQ%@1ehnTlThz zMV9r-Sm)Z-C5pjiR2 z%GD-Us9i2a6{{)=^2_tA-S&#g1~JcKwd9FWO{L54`K9bv#Rk>y>VV^w-2qyn*yb$A zSLhZvkA%ooHnGX)@CEH%`Qn25`Xy0mS-$9ugenJfrK2O(j+@%hPT0}A0`>sA+q3{X zJWhMiXLsBShfE>}ys{XAcgv#&0&<&5=*=oCuOWeUpFc?G#b|Z=(EF7*V;079S~h5T|SqSgr3` zv+IV=o*Y@fC$zI?XmB@-&d{OW;XO|do!icw!@#7`V7?6xY#e&2_wv5yhWBqA8T?&% z+c6S;aUitiNchmk%j=FrhDoTeKm6$SsAA;&rqGtBB8rI1p@Hq4#Zg~ppB_2U7uvds zg^9!k4g4YUlXkOO|L5J%lbhNb>VNpUG{c*BL-wJb{)CEtFm-TnO{^Pk58UfURd*7C&T7xF@wg@6M@C~V`{?dAS>*}ie zwF1c_r1%p~_X#&qny;Hbk(koblIm{fB%S_)y!nsMJTgg77EU0NUZ+oD3wrqU_CxZO z?5!CB5y68^XB#Kch3?m~{TKhSX7`wCF-ssdgh)B#bEdI{m?n;Es+CAyMKYLd!K-Z@y(TGqa;Uay%Bjk+i4o>aDA9apSpK6}03&&_(x zTu@ghRqNS;>NoS>PWz@Mt3|IV1NEx0t1{Sv>b^fcxa3lL8L007^-5voWVWFCp|+ao z=hkJc638OxK~`E;E?a018cS&p&Wig3yWTP=DWnPv3>w2&w$OqX69NXF!MRsX6JNVQ zGxau7+^;qEYo|yGuLuPG=Nknln>$d{SG;oZT7zaX9&{t$I1V#d_~PB?2S0k=Es%U@ z(EA$Q`daF?flLFFGdkTF=;1uwJk~=4GdcEgOG(NrfA2DA z3L%R@e!?K1BdtkVW1?B;A&bwxtC=d9nl=bz9@JqnnzGqKOp}bw%)|Lh-G4~Yo!%>u zYA~=&wuo$@ooJ}ag+h}|&(wbR{*1>)X|lkeGO03+EwmG3SSOY}U-IC-<8MDMkPY-w zxq~gJ9`gLcw)JGevwF=eP`3yznQTGz*fCe`IeKF4fS%;Qdr0L|b!NPV!ZBMcr*@EgXyC*JswD;XN3>q`!{yA^_oX?aT zyhBeLEI@-dzL2$G?$Mo>44MouILRAN^0!LOeDio}K>y9(;A+WzbHV6$44NrmFr+mO zX)`4!?_?e*DU`lCs;Xr~0s|Wu?AIFiYtyCW{PNM%Lp>N|z5Le5O9TE71!9GJkgd%& zNOQDv4D=;w?xL4%jUMZ!Cu>NVw1LoHvM#ult0eV}ksV^7i-2FnAq)Ae!VBuOVR%FwYBTyt^uL;IF|{Ix-I3#1t0jUhfml6iS7O>r!w znDfv60~>a9e{ay#Vu<>rdI3ZD)z-lGNpWuEk{KuB)k03>OpFT=MlJ-HF(AaDALKu9 zLdh=z67tc%W)y#O;v*9$NGrG%Q;>#{4#5ed!KnGZ%?};fnYwQ(IN?Tf^rf&5aw9i6 z!iiBB84;W?CXB+R^Dd-4`tp~vbb_Sk^gJdeNXl5nfCM2(&Q#}kyaj@!3Ti682#~VW zX(%DBLKH@((I_nqMaryiUbATgsfBAv!Pg*2E4h^^$aBcIu$QrHbT4u<~E|JB!>3 zFeO%mky8Ptgo-f60GJXf!pNb}D@vfzhy36P;j^P#7glEUb1* z#aFxE_|>K{f@I7y7RG2#GR`xW#wAmpsSrH~QdUuxgpCrU9DU9>yka2b=gf{vxm+%v zAn9`xEG;FL`Pd%Y#)3@UU%u*vdtSrUWFU8<8j_|Yj!9!paCVfs5yo`Eni4j`coU%^ zl%H|)h4fo`|NZr2haqHbdTq=aLxXS1*=UUy6ky8L2qR68NsiESG^QX;$(WKEZ&-#o zM6*q&Z}cCN@>1TCP@$BSetuxH>I1 zNst=21})OFAT@H0T6}qe)WkJuakdCjGuN!ez6jECZn+lg79^RIwKzir$-z0a*jV67 zPSN5c2Wf(mo*A=K8 z!Fs@&&ParDMgq(xW7G-O1TdY3XpPelU^)d6_N#80ZVdR908Da1X456|DZ(%CC)D2> U3s0GMJ#dkqJ!f_inG@6e2g5cZ3jhEB literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/OTA.cpp.50C8AB01C9FB489F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/OTA.cpp.50C8AB01C9FB489F.idx new file mode 100644 index 0000000000000000000000000000000000000000..1a6e88efff00b53f0dedf6c1783fba340343a6f3 GIT binary patch literal 15640 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__assert.E345279A48A82EDB.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__assert.E345279A48A82EDB.idx new file mode 100644 index 0000000000000000000000000000000000000000..fcae0cb9b038ef6873539cc1f7dc5b9dad3a107e GIT binary patch literal 886 zcmWIYbaTsNW?*nm@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DKCu{RW(i#^$;{7-&q&Nm0XmMx_9f@%rDdiA!?7|q z2^54yscFR*f#Lb-w0cXbl_fJH7h?`rjy^~V1j6%`=SMD!U;_%LbEPXn1Q{5n%=8G~ zYkQZMk%v)TPTdkFEWG0Mu9vs?g@CGsIfTVv!UvWAep^_uTpTEz#g%0M6Fzrvyl0vKX?4Pc5sWAhsWKoxbspes{WwVt*@B-KZ z;Jny^xoiGT$xkJ#JqHUGd&{{ zJp=vByyTqHlvMqk%%tRs3jO%_#A2YCC7Jno@fnGEDL{P;w6!leKQApaoyL}wr4}XS z7pKN2Cgm5EFceqjCV@h-C^fA(21plLt!MvqrAv*Ghf$bCSPC4-Kq9ta?wY?-@^nDL za>7% Y83qO>1e0-N|FOCk_X-y>F)=d$0EBXsVE_OC literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__bit_reference.5581F6325EEF88AD.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__bit_reference.5581F6325EEF88AD.idx new file mode 100644 index 0000000000000000000000000000000000000000..5fc189163bdd18a446c89c86ac7536f5822c0588 GIT binary patch literal 60674 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 bN9omBdUcXs?WEV%(rYK_wS)AklV1N1+IYad literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__config.30A38D3F581253B6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__config.30A38D3F581253B6.idx new file mode 100644 index 0000000000000000000000000000000000000000..43ce328a97a8b426362a3f34c8363f0cdbcfe7c5 GIT binary patch literal 4866 zcmchbiC0xs7r@`S^Sx{zYKa4;%udKl^fL!=N=f1CD>a9b6nKIlg9MnOX(%(6nF^`M zlu$|{ASr4BmVzLXVkRJpm4>2%@E8P9?A*R}&wYP^Z!Olk`~2?N`&#pT&R zjppsu3pNINhj}s@jplXy7aA7gH;=*(^3TUFzrC%51v-ZSzP5@w60A6R*(sl4|zu$rymaRaSeIwNz$Ux!*Y8 z7o0E$T})r# z2n=q}+8Z?4r%gxGX4JfCBnBg3#6;!&u3T;Gn}hxyNlC~WtjUTb6vaZ6y24q1w@#U_ zakbO}DrLD+c91e3&|Q|hYb-ahT$8c0%Hpo$G#mqTLv8hbO`o}hEJyD@`mdPc7lYm5o9AH z)j5dEK_r3X%;Sz3%ejclHJ0-bmuDuq`#VgiVQfd?rI(6OD%vQ(k-B$aYHEfIqC_c5oS=XJ>n_v#3l@&SU^omP zs|*Kj_HnJgi^k&NVj7BR;x)IK?91-gZ_A*Tf?A3c?#IC?M_=p>vd3kZj-+&Cr>Fvy zhb;1tlPdSpR=xBLMb7y6sc5@A#U5)+6d+L`6Fr`eZF$&TIUa*}4&pfy2k-cyH-1Zb z-Iu_r1~o#WTJV;VaQxQPus;iB&7Yi)C<)folwj?~k-=j73@a`xrzq z5XF!x*)zKQ!O@*l7R$y(NEEFVRR;a`h%FP-WN-#aXArRwToadUwrlQE9B4bRBMt(T zg&<4y^a_XWGg&6ZAL99KjMT;u#n-nEbDH(meHm2H+6sD>VsWbFhuUjS;U8hpB|w)z zRL_|?`i~$VgA8IBDV8Cv|BrJkJYt%!x?_;YLZX@&Tiic4v0ZAq5`)tsoEAw3HtneX z<;lz#8MGj63nJh;ID2AHLqQEi{J<`lzM^IH1|RH) z-;wk?8m#OCP&Pj+n}1i4xv}$CWxRjJ7i*Xy%^0E#pFXmvH+kHFwRkv-gDh^00&-49 zZpj{fSO#?z)KT(P^xxm54>$QQzVVJf27NU2(PZ(~3r>B!rXf=XPk4C3lb+R-ZIS++@3)oJb6wiSSI+DaNhe-5qFO=^u~5Jr?e% zsWmmSxpJYs?G6kYcxd3s31w|t5Lc^r-HAcF2<_q&MU}HXs~uLaVen3 zoc6KWK(8;np0L!R^=mwTFAsZFPYyDS-*jclYe^V9py2^c7Vo|(-Riy5xiToBp@b%? zR~#E+U%euKKL#m0r0`@{UDSdu4@WMU1yqkr>k+y50cxbhMm6gJ#c|p=j^qoV3xdf7 zfkYEfi_pJCO#{2vUd$b_KOq@gY!RVFB!^!?bH9;kr(9Ao*g;D>XkxL+tjKb}+UK}E zqx&@6r%66c==pi>iDKUj3^GN?6v=^mrZPM3<@|XPzxr^=G}7hEdE zcFmh!ib0JCH6pplT+MRdkexK9cH=;!}C*;*+tjD-d@H;y+XgXPceRT#7j&@PZ% zFi-G*c*JSt6%1}uaGN6e>P5F6T|4{WH4Jh%$WasjqoOtYW-ig;;|Cc8FsS7jHZ`=q zWpjBg2Dd1$WsomIzWT*m=5};X%FgxoF(?tCM7`)#CgyMCqL)0xz!EIUg}s8>bBj-rUzyT%?hiP0oRf`E!r6tKm7iDE&GU>6H2 zYE+svSU^PuED=fUv0z7|0*VyHAo?%CyK_?b{J;NEKYpLhqq+M!XJ&S0ch5O%??P+&p!C1`4pW-7adR8x9yrP^$bGnvSG!Nf zI@eEdB+*w>x(FGqWaDbD{(>B;|UP*%8yzh7XG{i`be05|U- zuK@QT|A2N~OVd8|_w*VN6aZ@Y53>BbYUI;)_xZn6_U|+PbCpV)Uela^ko)HX|8f$q zDYjhcKMMa}USLPdWqQq>Fj>B||G_ny@J;L21DA38dS@YH&E*`E<9{#>#prQ;sCQSJx8K{Z zEl}>Sptszl;od=VpO5zo@_Fm+k)Nm$-Xq^~dq#}+^9b_x_jC7gDzy-Ay-}b(Z@&rt zW4zvajo9$L<*u}74kycjTTp`KI*r_8aMD>EU-!ua~cXz+@+P zPtO3az(D^IZ@;0hDlBzZO1+DB*1=`ebbKS8W~d=RIz`m)qE&w|_;0CXe-c)u&D#?tX4wlVlYk zU)V8Tlizx4|5UfXtSidY{yVMLJJ9WqyZOITY3U>6EsuZRb>)8kL8AivC%U-@26~V5 zD;#BG)x8>}IgRiSnCKqh`SzPuHY#)~y^QayvUlRnSbDPb!FbCp z^C*pg`Muq-laIHr?A*WAyU)*SBH=%_ERt5Uy>i&Ty&U25Y}2Of|88#1rH68-5)=Hr zJ>}@%WZ&WaGz8&zy=KEr0Y~%#(Xs_0<%vX|NWS_ZSXx80GH7_}!@6GWG-D>Z2!x9( zAth=Z619%6eh8MM2tlursB`YIR;#aiwik%zvd|vnum?H5`XN}BEEDn>*bU8Ec5!5x z&;hN(0lB2IA6!z?P`|ldQXDswRToC0Fp`tXeh5~lEh}mC>haf}d~BUmCRBtRisb6b zeh8L9WkQihE(^Kmzx%DMxfB$rh7gG=ffF@ne{8FjC$q6=cq3y z21m$3rL8MQ4#l!i*$=Lckkwk?m8S%uJGA)Xa$zvh#UyRhT5Z!-n)LmRhmF?QO)upk z+q9o!KBl!g2GfH{t6&ny2a`jBNgy9VT1CM0t&G)H2FU-av-wqLi_5>I<8SHom>=m3 zk91a;*R!_k*~*xsSlg&SbJHl+8K>`Ir9G@2=2NWADHhasp0zpuXKr+!ZH(n_v&P%3 zHRfE_CKt*VvNnZ(=0=4u|8&kcodfyzaQq$)v@emfO5{L)?B}fab2hlX3{J}6!1;&p zdIG<}m$7@1oEI&)%ah4wNcD;VP9+VfaZyT>~kL3^PYai0r z!F*oNpVx!-U)1X_!u*%@R+shQd>-ie2T(poug`( z7VA1E*5@M1B$eo@m*{F(5=_!Y&VD0T6Z0y)xJnNm+(^9;2`@yP-abyR$mgZio8i@_ zwN@iY&uQ{G-Jt9}4?*-8;P~~wW)0RdW+{QKp1>+O%+d?K$_u`lrAD(9EPNC!C|z%s zW(uw|h1NKIso=U4a-`5CQfP+LV}#~0f~$omq;HGdU5z6fn513Eb{DE_(Yq#TFEZ{$ z))oU|lAa;kXQ;A8!<(e%$oL#tTU4+~+NZVMr>$(UN+u~uYfREwTWpI-noru!Co5ab zh)G&Z8W)q+7Gq$N4(PZ8I&jS+Sepo_a}IFT4{-LD6PM+=&kt}zF(2e=9E6u9m2*ku zl!lt53mks|>ZBY_%7Hp(D(^Ct2l8|H&*$)<{Dpk&g*PqQN(srGGyUt)K(Ig$#Ss&H`tFf5XFJ?jdI!?ci1Dwhk zQ=!$G${VLbE0D%pr$H-}&s*n1UZLk!=y_a!w7yz2?4ek_5DS&XB~gD#1odALjaNiP z%MbRiz4o(BLuf&eA`lsYs#=tXAgxE_ddN|TjDma zT5=QQI4v0mIbTcWLw=?upFw`9C0}BWecI;2?C>Vcdv}GJjQ{4G%iRNltlnJ-SEc_f z-n^#DD<9r+M;I?}-F5Hdi3VBznMgbnD_O26LN<{-uSFT&yB?a^X8xW$$1Mic+(@dq zsYvD~P)8aTRsB?a<1Sy<1%rR~NNQlk3(^j<;||iz^6(2%7DZ=Kiql!j9kVEqo=tJt zR6{JEO?{9}jli5k8FHv5m`fP4gmHk}zJ&P_^9x4zf>9g*L3+V-d%<|(^p}kAl5w=~ z!!_Gm&(hwqLV|Rh;*L{_-4vt{h6`a7wrXDINse!vH8M+QMdqxi7(BCdL1ZpqzWVv< zOt*u(t>1Vb8`ltHYHS>2dhgWb*k@bLT`c}gqRrASrrItBI6X(W%11b}y099<AZ(y-&UYH&q5&#J){d@GtHHMpV%S8#BpAgpEk9)ZuRym2ew!mpS$tj@Pp z-#aUil@wo-Ss7AIRjsOORpZub+#1Bt{v5YH^LRzroR7b${@!W8U#9#t%<9T1|P z4I5ObDE0a#wdlYBqwN1S9J2Rl)jR*{RC{^YpFkQDNH9zPLI*)Vsy%T3qgv}b&k;u z!|Aa)Ay(JG!kzBqw(3dru1N{fLy~+*TE0ah1nC@2o}&S;W5{(3;B5lAO#pmYBoB)U zvwbgan|{i_mii2<&v1o$hMis%cz%C%Qf<|}R^4mWy;j}pa^36eBc{8CIXFA07EHBZ z70QC0?rI$Qq$r}EV3JZfeJY&7aFjD1g;N-ga)XX?pIV$flYAldQ+Y7uAec7>!zm8I z{GebS$fxmQ8V}|>rSsP5aLPkEKRBHqg3Hh6#e67V$Xgde`9gkhA(lVbbEsG6OULVJ zOwuyF{70F=xaSMcQDX)TsQ=!LY^!f{e7W^bOas;VP@NCe`B0sYa-9#~DIr)p_mwbC@t>$wl)q<)P zRJEY01ufTtPB|U#?P(L{tSSmsQK*VSRTSkaik%5SVT@6(y~>6DLw%+h|HaX(C-&(@gFDlbjV(n7YzLda{` zYHQ(FbCGPdNXXHwOEjx|oF#u{Cv;8_x?9?3`Djg3>D33+mW0YbxP3b0S&oZpGgOiZlxs5={{GN7n zkLw%%E`zS^x_j)PoR;dS<1eF*-Mcn7dlnqhN)C}H>8z9B@aK}w`V!>1tZ^=@tmR;q zqV>jTytac`Iwe}462b84v}k);RK5<(&6(wx_i|rr)j3g}lM3aWu%{byH@oj`D=&K! zqZt{a8EYAL%Zq+!tWq@~AdyK{%OsVLrOnbUo%Jo9a)+Cxd|lOio$~RsSqd>!4KV;- zZm7B(bM2j`%Z|W3efM2x`!{|n zra_k`^wNiSeDA_oJ%2nM&n@27QFUommsWLYRhPD0m-fh|5BYX(+d8R!kLveSD8I+2 zzf=FL>BBn9lesohwKr1ADr~=w=rC?E<<^xZrFOO2DQmHiQpau``&nEGQtDE@3s}eH zDpTz$13oaj&s4h)IhD0ZWfj+H<^C60wZ@+9s#;IgdaBk_wVvf#PuF@SaYg%H>P@HR;U|u_mMjFDjVweWrRPCX$9#z)B8H}F;=v< znGUy^9+K{QV3#xz7q$qJCpY)lW z@Khw8ipsZT4KGZqJYr=K5w>mk<|L)MNVl{iPwfrL%Z%mW_k06-l8 zr~?3X08s7#;KBFColn!pd%khi)PCO3gT2pP^?Kt4x4JTVe)hCwBW0bpi!|=S3xZiT zNRi(dmuPg>qWY?bXLU?v>(83eqxxTP7$Apa{|)LEIxKAG*k^{Ru7!LL197EJ!JWn1a*S z9CYVX`>yqS@1E&VS3mD`tZ|H={7lC)WIUs6e)4(Yny*F|3jXh1i;KUmGWz=s{{E`6 zQk7MOQdWBkiqBuU`sFzF##C?23Uy-!AFaNx`%&+4wD70N4Z>fhGu&W4xWNp-7W5X= z;TF>qb1u^%!2)VQdnIITMM6G3hR=>erRDa zZGN3-DlSl7$afoAdm9Nh5;{fJJ_Y#)s`d|XqoE|KQxXM2Z^=~eWNM(L;C@4A^l#w% zU633~3)R#Q)hJ&D3-XpQJ!jI&YH=Gj8uO>Se=`2Ho66)Tv`MeIIsfbT&PVVc$Srn@ zIP|Tmid9uyp;U3-DHm*0Yj}V6+DEhS^N;uSY#s1=!F$WUxvm-MI_-@IPQE1iKB2#+ zXT5jIVcB=l9j4a4G5fXGU`T>EH|SsA&iP{^&ghx6uSFAAF6w=g{~%?qs$Nv}QlZpK zEO9q1WB9yKIbO0Daf^|%Fo^ux4sjPChikcTEl9tkc!dC3b2369Z_=NbmiH7NV{n5C75b}J2Cad|5ZgI5}q%_Eaz zO46f(KM8+r2=g1SB~@;HofR$*&q6hwLNy;)N*wUXcXP@3e#_r@*jWGgYnK5Z9bWa` zna5Fc0}sTed>ElRq^d(&p&ZhxVKt}6J^6W!>bI$Wo9efzep|VI+qX}ThHtMkZ|!Tn zhW3lc4?ixRSgVz%*=oG^X#6Z*L+LbIhXeu4ojD>@IwC0B1wLpQIOE~!A0ye)l@%S6 zbim=6%Ql?L0*5J)w-&stbA3DTGKz65ku<9t@r38!XitTQzr zZ=R-Ro(9ZI`T_AjAZ6)1K{|jLoRjsm^q#zY*`C^mwnra&AH@8cQ;|BS|rZ5tPk(@6gqi z{e&j}P)m@0)Nns)l8Pg0QH`?AhafGW?H16=DxZS1l(t(6c{y#j9P%pKZWZM9 zwB35hn`yhvkmG2(ILO;+yX}zUX}fsH2WYzkkdtYoc{{OZUy8B z#x4T#8pdu7}Mfinj^j~+~X z?`DvR`jb1(e+LMp1ljJvsMaZEDDeJ;6n?G^b!QXQay*7X$ zj9zE%-s_vg@7*&yeJVeBigx8;IWkj1T9uG>ERmUWpX{R4{n{;#p+yslIMx9*ECrVS0sF_F+RrIh?mZVHlDHOeyUinzwB<1sBK9n!ytqY-iAwRef%SUY4 zxoSdk(D^ssL%r8k|MJ^DeJ{N6f@8-2oRwqS>(|$YVS`!+UU@j>_(h{2?I2xtkR9+$ zyImx`i?qU=K+*}2A5irkP|a|9KGiy(>WcX}ML(xN{>==%nE{;1(3z0$GTrVnAL9I3 zO#dwAGtAGKPS2U%n4@%kqI82Whp=P_YruS%?Rl8}2=g(KJSKwle38umGmH6nOSOV^ z`+p7UUFFhFIb1sg4Y9@L3`Ii$eTBXPG#m{FN z7Qqvw*&1dxXgu+ zA#@G$4TNq$zJt&m$XN(wLC!-c4{{M=i(vi5h%JUZRg0!-LHk#0(Q3$RwP-Emjasx3 za;z4`LXOv>c*u!bHc<=uKi_IiE)PkPB&4 z2>A((okPUM`38e- zK)%JGTaa%v=r-iL47v+Bi$PhCa~YHiIgdekknr^0{>>?lI0bp9K?U$AJ3pG5+@$*dI*GYzFjKHshPk z1mOH7Op6i*Y&TlM_?E!*7fibsu)Y_J-wP%X=YPqxe#vye9IbPX*0qE@GFs<@IY!qy zMhE0$bfaQ)zBoNr=NhYPi#ddCAHpi@QI_s;<{iR<>oc2eGn?&*<&)WQ$t<|PQdq|n zyj+vKohti93JdzXMBl7L?~3y;HMCx8P|mM))&RGe{-d+s_){0Yqka#{9Gd;wNZ5(H zUmOV@MdhgPOVsxz>iZJ)eM!0ROH9J{u(inrIqDk2@|weNjbZE2_O(2ZyX2~a0(DSO zp#}w4{a+3Xyz?^mjXM_${rdz=`+al1JcwvcG`F@4A-F!SaXFi==l{Qd@wxa!c$Ym* zhywMAR-fn!^+ZQ(aBSP`(2T#eebwZv zmY9Y&8t#J0qn8JG>%9UsT!EV7)cvUEel!qs25OptT4TP3`d>psFi+KfI8{3s^J;C= z)mk8*qV1ldg>UV(u36fSSUyKPC`UUC^K!D+auS?h64@|`1m|~>-HCfVX9Og~FCJWGN4E>KPvC{W);s_8`vwC@tt z?h@4<*LQ_#c7(d&T$O5KHHf#+ZiwmB$w%%%M8Nuc}%xFrXS{f z#yKD6&(VFFqjSUQ#kv;7I&gk-IOjPWsBb>kbUp{J*HW(4QV#U@D$aEk2d+;f*D{jp zgv&q84L!|yVcx(u*}#Km>#U*sS%Y$Y5_-1%^z^f-Pu}`cT)KK;F1ejUe}8S*BFAg( z4>v2XE0$f50m1+!ipg4Cx!ZQ9%}dpCtCqV$S#Bc0%g4R+aSIIa2;8QT50u5#2tt`n zMi7lHk0e1wiZJ^oh_AJ)W&j`+}s4<%n}{_m4-R?*ZJ zt&EkdO*Xc6m8(=WSF2vbzGki34t46*tKXoZW8)@HO`AD4A{yb0*7#7F5j zgRi@`@182yY&L)RKdXCYT0>v>!}u2)-K%uvTAflen?Nu0`*%rD(7&^Wd@Vn1 zklww0W_mNMgeSW?U$gJZc#CM-J+*uLW=0up+jj5St-bLF)E{c*`Rv*z%OFVU?)|=W z`IPSe+p{tW|NArJ=j@eC=^0Ry9=0}JQqw=TwaLinVryGDx_ZOvS>4;g zXG%&!^`_O^X0&VHwnz7rHmO8V|T5)1Rd#1ykdQoMaxJR$|#p>0N&E>HvbjVDb^ z@w{ph;*>U+W!E-o=>}QXZmF3@YK%`$M?@5{dBy%zueTn2fqBE9|N2QrO8azpskHQt#t%EBcFAh*c~JlzGc&&I=6%p9HLH_B zke2TG%rZW^v`_EY-SchN)UPclJvB2k<12$A<4aFfd(Iw-n_L=n0FS~W~{+XGYp4A~Ev#aO(%rDLQeVLxsDXoJitFO}9 zwNJO1Z_*wrkZEi0nO!MHd)Yb|vlKq@^*W?=XJprMK?fA~i^UUP#nWyp;JXMDQB4`9K}==pzEWVg(;9>xOZVRM;Zw(Xt)E5ti*Y`T`d(-GVD z|6oG4g@vzO`ws8+J)jI@HF=lZ%XkmqmhZZZOk?$Wr|;nrW8P^IhBymv(XmTLo7670 zj+v?5I>D!RWrk%L)@);G^DNM5?QF0>L+62{N!LACbl#i_I`D)yvh zQMn;4i)NmdMOWdpESRb=4j}z9y{(aEb%UZHrAu>K*4OlhUOB)!{OOOore=L^vxo&< z+h=8^c5I(z>za`cvO36Q9x1~sDtN`bba-Y18L)jONNAAKa`6w8c``n?Wq@dq3XCJN zs`+PZQS(psWmWhSL=X_Gx~Dv-h%*VS`qdT8}zl_mB&61GTsNWl} z@EQp=;{O|!w^`mGrtGpAz5?Afn9#!sSf%Lp4;tdNy-W8r*c#&Qr91FuW9tHfop;~T z9XBnwW1$3JW`UgPVcvB6;$^4bd#9TX|G)wC|GU`);@5YX_yxZ9_jD&o6Z1=2{`X$q z{k_?u=3hve)w64x6UA+|DV?kQ@*r)v%|$->nX~E3)Pl>@7;j=zsM6)(9wDtv!hV}f z3J&F*`erF&vlQb^kmklO>Gfn~HK*D>8wL4nm-26y!n_I68*`KEKd%d&|FyHzD~+*hGAOPzX3EL?OkL&Sx55d$yj}Y@LTeDI3M8jbc%6VzU#@ z7Ubq6aY==KK@s~N@4zpbG+R5P zrw)rDhs7vw!g?yc?6z_nd%SXZMwVUART6WRTHXY63cSAi#!p#ss*BX04mnL!qbI5* zyb01|M1<^LwXQ1A^x=$ZKNZPSQS>HA#I@7&Pn!8bJ{L(J2{h*va!yga3DWpI>@$9B z;2fumR2+f*a7OkyBZnZxh&I8|S=Z{jAQz*g$r70?Dc%HWwxyomumaP=uUm1 z8nqDWOcNwh%h^ZT=a%<1h+ydGlStGgQo@@cQQHF-bFY0i(%0Hu$!fAMKL54V^5p3s z=J>iuZ_XSRt>jitBxv?m-w1xEJ->^TgqNlR>mSAWk5UjR@}foQ+ql9810?no`l*vL_@Fr$CD{`7vs#wTR zwbeCfCd$ryj0hSzH6XZEfQwW%+vT=GZY$sonhaKh%>NLS}icYLm?54jv*hPB48|hnwuq{F% zZ-O+v4>gzTZJp_sNwJ}vOYb8_^bw1D6Qs#q`Dw~kp+Nx;jkgc(2qAZb7-MqJfo_4x z{cL)Ck0H?&LtLcRkJwRTMQyC;kJ;>L%^z7(VnIkC=`{l>4y)>6wE$9NNdCJtzvYle zrqNBCro$ij(VH`^O7lQ@G7FD4O-Nt`#axox)j zw5R-^7SD?bjV+j;d~8nJ_OAAUm`%vA#GJbs(+dKZF?wO0OxDSYH$j@~ledleEoXRy zXL)kzXVr+a&c3WvMv9{q_a^>*t$q>BwuCb{^$9Wh zgjmd*csRAM4c64kmA3sh>Cv4S7s)Z!RQ)<%^g3V4n_ymBHyqb5U9BA(Kw3kWQbsXZ z^`ESo?=@h`^BVlnnXxkY##ju8sS(4}SZ{*43|v6Ieb}RYQO(xXsL(bsYMU76P1w>A z(K2|_wcdl{G+UZMHA9S=0ipm+7**oR9XoTr91<5qws6^4rK>8r$`)3BfEp4(78cWN zZH$a|i&48FBbu;`T<%xC3$k3rU1Yguh3PMm{*qm%3D$h(&Geu;Th5fgM!L#JUFD1F zG(nyiWCH~)0T z;I5?tNilP_4;0mbVi0CDd0Bb?<@r(*T%?TI`|DNT^=c?mJUX8{EUHynSy=9kaW+Mc zoFd116Qpq*=|836js9hgHZ+;WF_j!+ZTQ!tamjHVDwlJSMV7^n@W!A8Xfrn zD5{#n^(WQ;CpI~nZu1=y*gCdS5Lw5K$Kf-SkfFq6W1SmaN{w$5jMZkRdj@R_B@E_e=;wioH{h_B&8EvMP)&b2aZRliqA}B zn;^}q%j4S?Xr|S0k%69!vW24AkP%IgsNhfUH#ryG4~Qz8wSFRzCz81upWc?9arv7Z zpr~dJ_K~7CQZ!l1oX^)@?@?)I4b9fxc(2)F)NFV!ny~l!xW&0lN2i#YGARsWkg}*3 zT*wQqsIiXDhOb}{_L|+P%IG0q)q>58F)Jp>eiP(yZ-P}`e56_-arF9H!0XJpwNmw8 z$#~u6TV0=O??u(I%5Lwe@0qgOm!T)~z8llB4!n{%K>G;(eb@l~qH7ho(B55j0!Ws* zO4L+pnp=y=YhTr9TJhJqE|Opl;2CP*4AtB)-Obk3QSe;9 zjjYh9CRXWku}7B4I6c{{;G9(c)#EV)-`sJ;2b0bV`EI|Ugl-;_sx?*MmOZ$ z6>9VfkauZ7?Q=U#f zd<8_+&B>Nce6oot3DtfUvc5vX7mWf)pxH3%i2pj)FjMX?>)c1})yPE#dB*lUq3ArJ zv`!N&D7n(DuD$yA`~YNQW5X~+B10s>n;^}VU-Z@^Zrp1eKvu9$$R+-{tgJ&XYA<*h zxvB|_H&bA}toUD6%n48{^jMhh^s-GgTSsF8>=&c_ z-jyqD9{sV4ls6~qP*EN#YM955U;G%CnLHOLdKl8geLn0yU&xyv&6JZZzu%v@5NMWp z7M0~{^m6D%njlfiANNxB4f(aDRiHhjs)v|Bd++h8OP%VK`Xqq#G$&ED=G9tZ4u^_M zmnZi~_{2qiFrPPfH8;ohnyEi5`D}mLRxYyABl+Crqwm6^P7}-|>inse)oS1V)DRC0 zmN8c*b7i|XL81=}X|+ymY16c<{xM8B-Fwv}yTDn`Q ziA^@9z=CbapzD>$^-8Qa!Ezcz?fJ@i^-w#Q^rnPyTJ||Do0C3yd$)A~K39Mu(-@P} zq|j+n5pROIZ0q8?uYcu19Rf&Evt6o1Rx5(f#b+blU*F5Wql=Us2YFoQ04J^qCr4IwblUoQ)hzy3#1K%k7>Uge%w`N13=Fr)>ZU7NeEbCRV%&X{=r>9< z*R`4#hyCp+KC+XGls37?O37!XWUh@@TlEi%y|xD^%A4%;B_HyVkH8wIjqIP^wP(f7 zMkg6d^>K+D2N{kgNc1W__wrwxS_4s%xx_vfwC95PQZ26j@Lr#)sX)ON;irQ3lu@X) zV^5Wv`+4U;Qg0fR^Ihb3MLZu^#=P?Vl)h~np`K9pt zT|v4t>+w)f9|~qCN<}+Y%G}VSt4vxOGj%W*JD7{}CYa0QWxkJ!E$-jdMQWN0>mb>8 z5YuP;{PN~U$qSaJ2apmbms?HzS2NC&J^OD*Mc=>-7l|=CdOZhfHM=*#a(c^~l({!1 zWCBkxXwGl}XSjm;0gfEt%sD@QQN?O27jDV4a-PPdvB`Nh*7zahVDCdctZ)2CP#>{3 zUQAxJ8KkCt1w7j*C65ct105GluqHDO-Z(cj=I~cALCiPaEvdVu{7CVnP0b1ioPEBw z_V5eA?*$X0hTMMiV$iano7wpV<}E8g6h zj@mb?eV?b~8{qrKU^^|5)4=y>f>k+{8}p#|lZ!x8(HzxlB%d{sscx#^uN~g`bM;AE83hY4gPmI;(l;>CFQ(%~; z`cGpLZ^cWG1BUqi(#z0F8Ew3Zi(18%@FrO8q6-ASDZf1LHN@5-v*HloVf@L5y=qIY{O<#OC)wXmH3@iLLVUb4-m}l$;Z3u{9R#w@$Wra4~KqF zh`1*d_a<17v&ogs`>S^Y8qlwL`)W5IvK!{T9d;-lfv!Sm=R!rQCj4M*%#7`Qt`LL(+RI|J0NMsHZQ)~4&bJE?s z_yF&^_J}8sctxiPmh;8k#|4(G=mj)Xw9XNta-cFaL8931CCTT5)(((KJ!5kBitSax z^MTKc?$0;r>Z0cZfeD$Kkw1ixKbU5uX^kp{UnTnt3M8$6f*eM1aih56-UM^m>i7Qn zPD_Rj_G+iL3uL>X=rlo^rDwkQ=g)hSfo7$r?bZoV>x3AcCP*}`OP}G#^S&4oK*G(o zTS5F+FfLN&*zsNdQMZS{Uep|V(^cQ;Y%l76X~ti50-FuhY#j{wWsMlM2ILo-F!^QS zsz3XwXTBL`3{cpO>UnBZ9>|(B!Ridyap=gTsaYx5LJlCYVd3dCxxzZ8K+tp_Mo5JXIxA*~XWA-g!XHV|zxp$oED!%^~^bkN~|6 zY2(05f(}Lvds;8wNRNtJ(Z|Y(W93@j1Zfg`ES@&d|IkR-^ctGri6s9-65>se=4a*m z`F!T)Q30e7TaKk_`SAJe3zhVFWv`ERkpP3;T$94CNpao;Y35y;ezX3VkTIIAm9YVz z$3@NKis>anN<@1$;Ba{2BZ^H!E+-9nHU@-!bJ|W6$wbjqsBLJLC+v=2JvM-RZPp}7 zN;2Pg^0TeG3(e^^-nxzbk*Ghiu`ty?A?(CkSQ(uPZU>(TUdETBH ztcDC$3mMz#UujP@?KyLd9QN7I&=E#q*ObU>AhXg0Gitc1&fk$q6Mpt^ahJZ2kJ!f- z_9jTPA%4ZQ^|{x6MoIiOA9b6L(P@H2;gbebEYagnD9pq5#&Bc|C+IXmnuX0yd>k=F zn*oYkW3KFwoI9if-UMj^$3D68V12(Cfh59MQ7?$$0N&|eJWZjopWxq*X?!vgjbEwifg99Fq(~dXkJQJETMgPLlVYP9xRGg}KC9yYWWb7) zbuRK9j3>QySnI-`56q!N?RMdfrx8$YB!d z{fM(43HB!VK0WeRDw5ar#nvFQhBMS$SL`LO*h}gc?Bs&ooB&;#mFzL)WTEYlk5O0DR`9J@-^H$-&cHjwS`!812#f&FhIFr9!wS(X7fZdb-tDw~MRz#SSKw6WifAO39nNq1KOMeaGUYe0XE9dv@oK^GV9!DmENtP#)kpB$XVYM8#T8{H3m`nMf&QC8q zu5c7MgPBWjA*8opDs`Oi`CVzY?!%*?`8Jm7)r#M0I4h+I=5k~6$gVwevLF}6fkunk zXr_vPRxYRWPeTWvfHyKk^aHB%037Yo1aq06^Ot|iBY&TO`Wh`WK?<7y@+wV`=C}84 zy*_*Y8PL=+IqGG>|1#SkPJZ;Da-$Q4Pr|q{XZBFpXDCy39e>zL^chkAB($8l{BDu` zx5#G8tv&I@#0e84P9Yb%$QQi`N1HUksvOz=;@z(ZT_|7s-rBR!#70S{ zm9W!FoHxOeo}^AGeyG>y=b$sqCcY^6Ut~+t^{klY-#dq&mq~_EmxPFfBAyS=r1R9H zY4xznM_afrz@Ra@^1kT256cNnupIZKKQ?eJ;x9lqnC0vi{C6{@S;mXi)n|QC>Vmbi zuLyxxSWW8u=sZ5@PyP?q%Yg^J`NeN`M{j;%V7CoOoEki=t?=-n_x|9G;Y?l zXZ{L6Gte{pPx3`iLU+>yiB9cZypD{uUjfbuuS6$*uH>7`6f^4!C;vTYTCFR_KGZm= zyr4#1fPE-UFq_UL+?QL{y?8Z%^kbuDIq_f4xZ|G{k}EAdGUgf_LYiEBo$9}isbm(O zn3rN3whJh#nCtm)(Qi0g@&D}E_ukO~@z-IyYjV$5iq9*?=RbZlVSoII#@As_W=e+x zi8_$gW8U_Mm*#CadR?^@FxKiSK2-ueANVRccV?7H8u-NxtHR-e;D3R2&r80(9@*;o zEvt0XUkK^Xy61WQ;R_m%Qg1^Sn{P5s^clxE$CSAxPmf#i2q^k^HYS@CvPltjnqXCS z#yv}}URAzha8;w5C&~Vk;CzlINOW<|-(7m#Z+HiK(46-tW#5xb1#oi8x2@~Or{4vs zz-+Y_iq8whlnSzEp6u%268{8!kD13Fne35G$s)8}=ja!Ie*I@4i8h3SHC*HxF4mi1 zO%6=RuKP`q@%I8qcXOInt5~f%KL29d*!g=`<=q2rY2>kz^Igdm@FqxexyQiq|4jPz zFYB&+yeN+s%`IJ-4`$X&&3_XpN}F{(CHtIWGR{}_7S)bsmcDO{SVKDLPonyR!5K}k zpmo3exZ#su#@{ziyv=j5p9uMhop>*=u(NfMj2RDMk{Q!|oD@0^%&TaE*;Ml%QQ}a> ztcONf#yUJwjT#BFgC`viEzE|2@fM z-pK{8{qb{Do5x=9WGYv9DyTF*2>!t2f^EVY&N(-A&SN<1Fu34FCG?_F#G7DEHu_C{ z65h@AH=F?(y0X!nJQ@sLX@WG>e6QvUelYk62*l}NIbXC@Hu_^eN8uTCR@f@;b( z2++F$G02x z;`TF-vPIVKi4ph27;l0!emYq;)Lkj` zE*vS*1haYg@w5rzP#>UK>e>5k2<10)lL0UtC9t_ zw76dN70ee{O7wApbDR+DO)wK%X8R6V1$)_S%I0w=Cu<+scz^vI=RC*x;z@}@U%kG0S+8m1yOibgROt)T^n*97|OVHfTen;zUx)9E<_5@cs}`PK52nkSAYGL-Sx`ui#_14 zk8!xhI4pRP!?lQEG#`gPrKaQfL$ny@e06Fkj_Rl$`*UWj408yaQ8l0QtSW_ySKM>r zYGL86$JMb}$A%tGnII5m|o!yK^vG0fIc zTGaF>V(=3&9Ic@>y`L1^PYOrdHBBEZ1rL_O(IP?9XG@ORk_(SDG<}ieSR}d7QbW^o zB}cC0LSabL_e#NgrEoSbk4eGDq;Nb})%4$`;NPWiHV*%m9DhqLHqKs2j#rY4jiW)b zW035^LrP7bDhE%M!%+{a>2u`ZIdV82u50=NIe38_j@HI7;bg~d*@errrXQ3Y2W1yp z*lGGn*>O^Kp(vo~8m7$&sh zc%ZoO9ADF)D~{)i3%A*tKFT4CayW2QL46&<0xLe@5KdU}1BdW{Ve~fu&O&_+SVq*O z0SPpn+Uzn6ws^1M-b`?Y1AhAfvf?`qa))8` z%zzqFuMF%8bjDB|UJnd>pn2^}kU;b5?iq%I@f(VR;hBzVGaYr=?`Jtm%yN`v_?Dyk zEk`|uZ#zofc9cVm9v@Ic>g|D6!^qg+0rl{}RxkPGw@1rf-Jo%r9&3vY!KOiv51^;s z9$3Qxl}D|*Uwo0z8=cXt=b(MRM&I&*jJ9&YTe%XLRhA<7j1BqF`OeoU^gscFkWF&U zO>!eN$am}15d{wv(Gdk+jyj=WW1#nm=*I#-TiE81K+ey&{EitEmm8#BB}Ru{>ESTjvuEUSyHI7e1^hh;ZgQIE(zN38g$>~qwLPs$}v%9YrP zds41(Qhv{hTbz{JGJIMtc3Liv7HgV*TCQ_i{s3`;zP#l0)gSr+6YNb$Z{lEVdmJI- zh=Yy5zXbA^;K21s)BB2~ujoM68cp9Kku6O2Mn@wU6FUTThv1Kv5N@6N8{xutw&hQk zQ#P&id*|~W9h+eAQKu#x=jhD@52z;-j%yT4_)vYPqV80DQLb_8)RPHw2-TN4v}KO` z$Y0U330{7+Tz9qnA?l9ZI(2Zu;r(dP59PNvc@Xdhn?%nis1tQ}!d32ONbN5sjNBdc z)?zXGNkNX(M+!Rtdk{nx>KKJ@0lN^-;UyAiI(2?v7)*_Zh)%@lK?S=K>NtfNJseq~ zYQ3x%1>SiVqk9&xMe3D>RYR{Vc<{PlhrAzJg*swk&!7huJfLn@xJ07c6$oaAvla4K zbhd)EojO_}y#_j&ppj|>Dr`U=QiI2;kywBR))2wt)JQay(DZ4lW18xRmSmd#lj`_M z^+R6@P5(tDzo;t9f2K-iGJI>}ib(m#L1Aw_K+qM;7_@@AS_r_?UAIm>!f?Q#M;H)3 z=GDi%KiXu$y5MmP!?B8vVRnbt84Tx(2Kq*6lj6ep1p6Mvu~+eD`-D72%u}3fpKwmG zpHuu$+|XeD*>5X;I6*c2p`tug@>}-}q0f~fY~S!w34WRYLbFG3<@@D)D=j%2r%=uhN*|gNk}k31n}4 zNKp@2@nJa@g?^$t+=So|KUn<33D&?^UH2tMg=cV!iV)W{B zIlQiX$U8Kzw+j-$_Jwb_k8gov45pWmJW^B!U8eTblTCEhzU!?MAM;2&lMAL#YEF3N?$7`tQ8YYTRMG{n6ODqM9l{b z3^8H5m}vUg>3hV4Jz}Ei1g9Sm6Ap-prZ0hhL`*m$CgP?cuh*W|u3ay}-&hgQp%GY^ z;m3%4CvfEcqjhh8TJQ~elt^HVQ|CtHZ0OYp{GPfpvZkhnBuJp?)Y^k#aO%6N=0{xp z%Dsy9ZF(e#@}CNy`k^3ifA3^Yzk?Z3Z`3IM<->Nv&VF6!tvM6=SOUXYqSjcVHbx&6 zw@zIxQT{&Pp@}XM39UniL7W1F#DRc;h9H=iS4taC}g>{zte&SMqDfBG$ z`@}LeotiQs0qB8LekxltU{a~o_Nnzyy@7)lil)w?m{Iub;;$B8`L*ar)Jy7Rp&ZOfgE*|Z+SjakVb+Ny!W35CeYG7EAAsoeMHOii=uSVitmZiJuBWUNt?la-^_2U95q(1 z!f>t)3ns3GXRB4|TpH-!^ z3?p}h4yO*j*x~5j3(^jC>cz>A{0x3UJ$dmLBVTYobUC%5*c)>Ym89?s>eP$7!nJj3 zrj7KOS^TXB)n|Xl-M#tbw-T^(n(FxpSy~&fz}i2*>6`S7oRQ zbx+0z=$s7e!Rul<`XmFlT&7l9rq;%T7Pn4alaX8YI z2Rlj(W_qYl{h*`dL8fycEBDqpqNg=9IQ6c^=0fl4{BDm&HTFZOK8q_oi>r)oeFeO3*X;Q`;xmr~p}sQ| z1QefXVh{=_p&+36WQ##K1w%nV@tGqAp@0$!0*cQ9F$e_|SOZ0$C1MZ?D4`&r_~eQ~ zD4>Lbfa0@O3_<|~v|OUkCNT&Flu!^*e71{0$m2snK=Iil2H}Jb1p&q9fEa`VN+<{@ zK1akL6i`C-lcLW_F$fp9Q2ngvb5;z(f$CEu>Dg~PSCxO~n>}=72W1&`Vn@~lr*mr1 z1vLT;SO4Vw&=V1+l*f-9r#0FA12>vanj%JTci1ygM|V_4XmF}5 z{U*8C+0b#xaa{6eXG5nY@wDV*XG1q7`%TFY54z#(O0qwZ{McDhZ&~Rr=eM2}g$|O7 zu(P6}a_~?&3Jt*S-5FT?{;PGB-k51P5TSXgzdbfDdfNksqE7axOF}1mctCyYQK?jD zng8WU)z(*e=VNExvJTr1jD7X)3u-km>;BWCdlUat+QV*u0di4NFS4^_w@#xA;5a}& z0L@K93Se`G|8!&H4?m2k`pz2#chlLpDIG8<84t7mJY^pw}+&^)K*E&~V+Y(|`@gi7{XU zvFk>h2K>FI*R5Q)CYnWH)CS0HqFQaDnvCaNZk+~iKz5D68-Q?%q)w6i@yN%m(-;mY zqGAjO!LHND4LCsI1c#5_$QMO3Z%yCE!+(v~^G#yXCb1T-zTcN0w);`vG4^n9>Q1@&?fi!#`pP_7)ijb(~uO{6?mux^MuBsz`-F*XpnzL(@&D$n6zm2 z09lWg)X|a)?IhefjZ=Zmjd3c#ZH30DK+E5z+2uy8pA!1s8(E`904hU6RbXW>R0TYs zQ7X*7_lBo{kw~Lb;Oc}?DR{e1gHf=)+{S;hjsJ|{BVy7Ku@*{37_0({q5&$9C*fc)>jodkxbcT}*#rvHw9Um&r1g=-%ZO>aS3l*O+#J(Z-I2*XrB zMP4`Mz~~gfF^r%T_(s4niqP##y*R7tbwhBtqOA>d{w^+M z7uNxO?BICI6CMPObwG9Ki5h}m%HgOn81cncdAA-XN zSkCUp8lakSj*{#zsBG{A|Mg$0t@#-<&g%&+-okkPENrpQc=nNV`1VuNDAOdxu zfkSZrfPq8c0gV@e4=`Q`L=!Y(g`n@hKll(Q9^`AHf3ZK<8YMjzYoqazKZIOJ&XyWu zI0k>vcO*@bYoh|hAN<*qx66&u*WDjxPSSd%Hclmfu;WR-rZh(X+?3DO7Cv(H*5_|5 zUl^~Xki#3KgfaeQ#JP<4p^qL|m=Nc3;)i|@U|~X>D~KP42LOvg;>;y}xUy*aO5$8e z{LqO^(^nDaD&mK3kea@lI9C%t3{s+jeB)e0{7~T0^tHsfmiVD}4%j;o=Q`qtizFQT z6XzD<$LhO*cW&VQc6dWQ81j*GBk#xLqpf_ot$Za$f0&Or%tzySw+2RCpC08?aZG@P zAz%6=Uk-grG;ktIIK!7m4>L{whY$FNccbGhoGbB7Uh*H}AOmYOzQ`*+4x@>HnS&71 zTPTK(T3}HqD5C@omugL)AOuYiLeRro183uiNkTL_B7^2!_;jj}ivF`2Y(Gk83*~S> z0@iIp!aSio$^sf3Fox#|QF!7A7L ze&~7!)~15*Zov;dnKXU6V*^@J3F30((R2Ege8JH*%LwtF~$ypfn)mxgc~sfFpHJ)F8|l!v#SOuUqe9lpuIOg9BmK7#s+MF&YvG z1reOYQ06IKJ;etgS8&5DHzEV!%7HpCXlEJ@2z#>j56SiFr}zBkKi5Bu8w5p7lWIaKWPSeJ zQSdo?j)p1FG-K5oW7WoJ$>Ijf6(iCS?yxY@5gbR-AV)YP4Aak&Te(U&WPnL>jyx^^ z#}qJ0PCdv4B7WSz(bO?5R`xP%M){bnd|8}dxGqCK)7VJZD;OIIh7gU2gi;DdM1soS z=4;&M8(_!_w@w2i;ShS7Esh#H`_Xr*rnm8HQxMg&fag(;1fpFh*xQrvIV6t#el7{0YsDi~$4E7h*$ORG9ShY!G&qHZQXP3}Acp8M zG~JF1Y9MO5aRxz)(@0KiOuW82X#bkcpd1$XCxR0*z>rT)yG|oLv5cmP!PCSrJiUPR zPYli$!|?P1-cSslBZi?84Mx2fyg&@YjjINy7r{%!FjN|YydnnYieadu2YEvbUMq$n z#{^3uF?f?0hWZo3ydrqJ7>1`8u*QhNd&Dq2y#NmbG5CNOhWlU*PA`Iwh+()#2YEsa zJ}HLb>4gTT7r|%6Fg(4;XzUo5GHvtsZ!lI2a0Nq+2DL(o;rirn&vPBi_j%_#16*W4 zSwMqk;Vdv@tk8{oB$KiBh)H|ITG%GtIv(xNc~@Sax89$j+X_sU-jdo|@VhpZRn%=E&w>XBf zl&pMAt}%jpv1isDfTsVz|Da%|AWd^+S8$aWqgun&UBe}#6RKf+RDB;`2Wtt8im!c; zZ-Dy;!x*XRNTDWH791L?~E>~b1 zCmbM0AZSFb`D%Ss$uv0Bb7RJf4+p;Uv5mpjV5BV*)MY{do-w#}8gmU> z6l1QD0^UGtD13q%#1k(Bg-bLyh5!-E{v z23fseUbjAg)zVQt&*}y9x-|j@g@cOFfN-b*HkR$6NhE?T+cStZg9M=07dR!5=ozGh z6(`Ohb*#AA4Du<%*(5TX#G&^FOnXu>o76yzk>?DZ4+NaU76zSH&s@4=$$hZ#%?Y9vf56goyc`o04E)W|CqvgT=j|R!ZrT}TeUgo5| zG9FKWcZFR!ZFl1N1xOcm<*eO_vFUI{g7S@ z)jw$V!%$(x`;*`KDuu_mP&FDk5INB&i-U_F`ef-87+y<=wuHoE^I|MPV6rrVAW8zL zUxF@v-7gdk!l4WrGZ5Eu9LgZu(?Ef25Wa3*q5W&@!yz=`e^jf)MN=sa2S zub=*NzHXZxH@rg&=kzyn2pJjKZ{gzu)8BfaqhtfkN5dat^Wi9h=A)qx@vRLR&Il)o z1R6M~^DlUX;XY!uK4NWTUbta|5@=jRBt*3rJfOi4Q8d9|h~QK}10f;*VTy2qu)44;wIGg2U`Lx3Gg>RBs3C#mPG z_@)$jQ!36(hHgq#Zc23-ej(XkNd9PJ0m@g&{*M*El>=C0~0!N`SE|CXej7xYx zBU|EL-rv7i-1w#HoOk}RM@~-sdTLJTIdA>4kCzU3@c!(EbAa(w&sW_%_pLc>;f&3W zzVE)`V?*04{GrD+qx>Np8N#VJb1^6=aOu|#=v{piN4GgOa_$?93xkBhFKBE~JSZ

MUBD_czGa}_C9vEbYGz}xoH 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 ryb(xkJ#JqHUGd&{{ zJp=vByyTqHlvMqk%%tRs3jO%_#HFMO4p1ObohGE067Dn$D9pvdB?}WSO3g_G iv5Sk6iunS% zpuz~Kcp#cu@fZcA3e|d`7F$K@Xs3d0F&#!IMZCILmt-b??2J3OGfBQ*-uvF~_ul*V zB|ASRDoWu7K{I7BdX-#<@gNAIA*9t&gi9~zy#hxVCPYXiQcO$W5;ZB4OVTj4Oevo- zhh8UTY2+fG=}IMui+mC=&0H!`u1nO&aY8}h+DM;~*h-Pl2t&|^2av8D4F!HUy~yW- z_ew`YQ!;dflF(&ELU=?bq#%^?2oyzUMxYC{a!QNhQYk9V#5GG(QH;_N3Jlk2(Vz*z z;dlrhhT^13L+_xpVvJJtzHlX`PDR7SK_TMtD51uc88SJlB&4`rk4hw%mX4|GXA+!L zD~Qy7CQ->%B$b6?y{7`xk(5M7VT4XAPWw2#8j?`!Xzu|{4&%sxk94CaEjFS zD;25H5u_SZ(t|)25dmqJV;U%vBxLkt$WloI=%L_e98zDpc>hcRG*AE`#rbQk^R$A6FAGbGmy$p^FZK@5X4Z%PKa-z; zu4nQFfLZVs;JpP{*^9y4VzAI+F9E(KAdtar=c|1O>|Q^VMaxaYk4u~{zZ%B5TGLwE zCq+ZCzH~q0cyX>wH<0*yrrcYkALsb!n@-v0hkAdOd>$!s!;B+>MsVgERv~(Otfg`^ z3!m{7$Wb=ej^)gE`*n6*DM&_H_zbtJ37NYwh{esX?C_#1v1kbFjbw?lf|x_$jcf#; zZUjOGd+wJkT=c>m!V)d-Ovh0lC&y6ENlsjHkbG(!8p^_F?;mzbv%ox&MSZ(@o#^@7 zbK#t2MW47`&CfqMl|@!V^Bl)164Nx!e9R;U!uRu+>BsJxH*J2JrkN~4>U5Lq*9Ip= zv$$Pz4W1hJt1_0pC6oEdeNE>T#0+joOo`*1Mq+vB)|y@3@tgyl828gtRY&(iT4+jG z$_%C&DdO(46^`e>pufHjpzFYs87k59Aou7ewKz-uk}uB&G~H=i%30sbuY~EF_mL#$ zK&Lxj{`}zK;$@rz?W=I<$i0(N>n@P;EM7 z-*(M?JBwS{WOdd3yx<+2Wj%i^32FUaSjfV6vGVneLu-#=U~zL^GiAH9*?5q1S}9%e zJ9jSaIB28y(&fu*Pu-B1U;#4Ue!h^I8Umyq45$Zve=SFn!_7yc>r6KLJyNj9&&=b_ zuq4u<&fcMQe8T1?+c({ZNaCMmiRQ#xHZRSPaE^0X3b!p^a-pZa&L*upNhh7pca&eG z@6Q}w&M2lV%IkklGVkQov*-(5y=wdMy@70Q3tm)C91=OJfpZ#gxdu-l-LG*D?&@NN%}xSD2FpB{vI!6ZCae$zQ&uPw&a^^$SZ{^0 z;cP3E2jDzlh4TTNZ;cCpa{=gme0z5ZkRkvVS=-A1TxN|c09;{>s{mYOjjI7%ZH>2X&NLrlr2@9J!SH0+X;A}hZtf};AKOY*N4%{VQFIyuLWdiZtP#PpN866>YYQn)s;cQK&%?f=VxSwN7zWr>7~*PD9286R(NXFtHfkqC literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__posix_l_fallback.h.3DA06B8078D52A15.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__posix_l_fallback.h.3DA06B8078D52A15.idx new file mode 100644 index 0000000000000000000000000000000000000000..bf387949fac5087d9f2e7220b2e591e2254c71e7 GIT binary patch literal 5466 zcmcIoeQ*=k5r0mA!}uCF^KE0Si!F>L%ZDsk2wAwob`(ovITsrtKI|Czkc@(43rSQ4 z3ZbQZIFr(lDVUY0=Z+G9WMjbw{w_`FP%`1F^iAW|qiV!jh{?eIL%*erlKC>&=TV2Y^ zaLQm>5lLq@)EFw)*SVB|{&dEWGpADuv)Wwg*t$qh#?a4HyDL7RgyUe?P_1W4=PB~w zM0ha&ww^OOkV=Ge&g^+-u&Xsn#*j%EOqm3GrT$hA`fXYBj`Y0gy1cVn_Qu}K(i6c6 zOxg6vw{;)T;~116`&fV+dV zYAz9I8SL#Pq1vyFU(#dZXV3Z)Uf<$VaIdZhl5 z@8zSXH!3b4iN@j)mn2EeE-9Ffq|%bo+bh+6M@g>glftP?EE-laX{pX?o2S?nholT7 zlJG_Pv-_E7>YOkd36+Dhc7veVSa;ujE$g zWLSx?Pod)SxUA*`mgpth3)f;5gJw04S9; zzy8Z3g*>SvLPn-aVR7NaJkiu_`$t6o1 zyfO6C69?DwWCj2##0nD=8bj+tS?~3#?(g$t8URYgQWFyzpkYR|@2SQ7V>~edz$<#q zOlZekQu*cOEn|nC;7KU}L{T&`p)pL~`okleM&0owPi6t2QEW6bp)stO@`IxLCQRPP z6B__*qRqsF#&B)(`mtN~>;b@B0EES`i3w6zG%6P;!_f!)3r=Pa@T437)nc`Y360@D z4(Y_EGs|A$i5&n|(Q0Bs14JJB@ZZL>hQmCm2Y_5D*D}F2$!hZ8^=((ShAeOKq!s{@ zD4Chi7^8Src!I;}@Tg5ia5|kHHCuwq>GG)U zLU23X9<>Dujm}1oTHk`l>G7x$7Mh$*9<_@IEzTB?nqa}}^m^2rCA2zQJ!;1i{7%0| zZ7xFFytV~uT7~w8_GYzx3UY(otQM}&d0%HpZ7D)%Sx8Zvz0h@k*AmPfFN8zk9`#NM zk#Ho2jpV|Q*NKxhW~LR)5Ig}-5D$X~hP2a$k7>u8fSI;=G~))rOq;uE&UbY%)0U3r zKde7?YWf#r=YmUbz#GJ+Tw_RD<1n3H1g^bl$_DS~n-IuOXb9Yhq zL<}RA1d!12fh5~TzjMW1we4O&_ZIaQW0)JR9cn!C@&!MbodIVMs|)J`Na%<`lAU{( z%j+J!(E;d%MGK2Dt5_9)rt=2Tc%{Hhrwp3gI>b+!KYK0&B$8k1z>9!nfTkk{(L<}d zue~xo8Y$p~u6w(Dc*^_FM$RvvdprgtHlIz#8`FH`^c&AM9FK!pmgU7*gk8fYdI}#u zlK^vTpf!kb-v6sP3+)9%tHJCJxPw?tcu`>|bhhD6uol5gCmNbD9bl$&49(Vf$*2FE zvuho2i#}1thJu9wXgbsoy^ptCdL)zD3TUIxC}WGc_{PoskKMCqCz#vi_QhDhSc^bH z2OpAn7k5XFozLt7bhWQq#$Gh5Ab#?D#piwwW`DpR#AM-)fP@Z5B>C5ZXU91%fB6KU z%|5e?EeuN(&~#EFddav~AAB=*;AudY`^sg^IHm*8bZjCTiw?|mSfcsCXC_R&e*Mxu zAgS_I$#{F^ho2rgU3u)+U|w9bxEPxT9t%k5Kt&R~h+w8;6wSkfdpx7(pE_7DP8dIS zJPg^~gM|TTI#ba+%S*0&uzb}~aOns*f_Qr$8I!DkegB0&g1IHo62x|il?xbr#U&NPIGZCo#y7;I<1jw)M*~hqtlwWCY{#8wdgc2 z=hbPgT&qs=bAFxH# g9X}g0p?KnyNs|fuI*QK}T;zTv&1(}iYq7TcFT)zl;Q#;t literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__split_buffer.4058F910FA3FAAED.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__split_buffer.4058F910FA3FAAED.idx new file mode 100644 index 0000000000000000000000000000000000000000..a146f70f57ead961c1e0fc5f97658b2b822737ce GIT binary patch literal 43160 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__std_mbstate_t.h.4C6E89C1BEA8FB5D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__std_mbstate_t.h.4C6E89C1BEA8FB5D.idx new file mode 100644 index 0000000000000000000000000000000000000000..46f1c0378f1e7dce315cccbf31ca4066153263b3 GIT binary patch literal 724 zcmWIYbaOky#K7R3;#rZKT9U}Zz`!5^#Kk2=nMW9b3=ptME>F%#EV5$=$w*a5&ri%z z$WK!!$;d2L$Vg30Ni9+UvP$w53X1Z}GE-6&ic3`<4Y9EGfOh^OG^}r zQVUBni!$@l6%uoDxPT_uB$tAXRmd*_vLROJF{EYYq+03g>pNTNhZd(673(J_CF$#x zB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk}o`HU5 zUUE)pN~(TNW>RuRg?@Z|a(-S~W;%^6f%{!AgT^)igE}7BHaHs?fxt+Jk2kWiVkoZ6 zO;Q9#qo4oxTbJIM+>~NsV+Y481FHmwgdl??0|PJxFfy_-6s4vWcLAmJN^7o|Jlo5| z$ipheASMk_%)l^Ndi0O>UA{pM&9NvT2}r|G-gsP);COD-_8J-4G+PZ|62G%4Ku%>3Y>J07N3f6@-wR93!k_=6-17S?DlAV@R zBcD~3G`UQqpWOqD>xI-~@`Jc{VeV&cYagf<8L{Q(p&cgNyMTf4@GoshbNd zv=M?36GS@z<90#2hY&Wuo?MOX7_V8_PY59h`RrhK@LC-%op^g{`1GT9EVK|p1R{(b zY(kSoxG|qy{_v~rGYhSRz#rgacCaP(SrVWt8RMG^Ab#eBu=H}W&BHQ5A((K?Ga(_A zaEve!6d7_<89v2dbtD)83ntx@Z;^XC{c)Igbuu0PjuzUEe!GH|v#|d;0A_;QiMaGSus((|Bh3ELVBWz*LLw#Gr>t%u8>%rn7ta{K{rpp(MHj<>s}3VXvf74PM1D#0r_ z)#|Y)JM$&?Ht~e~sEr;CnKqWJ-i9t4$V!}Dkn3^#+(hQe%H_juU!xxyt+$nrpC$mm E0Z`1h{r~^~ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__undef_macros.57D3C71F3A7CDC3F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__undef_macros.57D3C71F3A7CDC3F.idx new file mode 100644 index 0000000000000000000000000000000000000000..8e8873d5fa17a128cff9576ee99d8d1ef7a9d0cd GIT binary patch literal 188 zcmXAiK?=e!6htHF%B|8j6@fhC1V|WeE;MPP3hW9qZ z9ILW?GRBIgnyvC;8GI8;-sv&$msT5<13;0(iIgKiDS=;bJa-_R*R4QLknHvcOfdr- z>=+h~xNtTWjp#ebc#`rh=pN0~C@@;$JVRYieWTji3UmW8x>^}OooeY%BO=Kmt)nbn L{Ihzz?>EN2(1tgF literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__verbose_abort.F5A053E88C7D8970.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/__verbose_abort.F5A053E88C7D8970.idx new file mode 100644 index 0000000000000000000000000000000000000000..d935753a0d45a195398f48f83a4d2719ef152697 GIT binary patch literal 510 zcmWIYbaVU0$iU#7;#rZKT9U}Zz`!5^#Kk2=nb&|c7^G$9q+03g>pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|a(-S~W;z3HEh$SaO3E)zjZaLKV)AS+4*0+ad64QglAZO*mdvCBt@WV zF+nk7nD7H`_S`9(^i_bWb$E0XVZtXa8YOY=Utk4PEzTe=0TZtAtddk(+~*1uR%ch& zg$YON{n)jXdtW3_*pR_c5+?j|<0nV6hbOZ^R+@+fz=Rzay8UruzkCEF%pfKJ69)P# eClSOcE=n#I2Qip5+BDrWf<3Yr85w}F4Fdp|;DY7= literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/abi.h.FF4E2174A05AF0D4.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/abi.h.FF4E2174A05AF0D4.idx new file mode 100644 index 0000000000000000000000000000000000000000..6ae2c045436985bb6a6e531d2bbd8ec7cb58c372 GIT binary patch literal 1038 zcmWIYbaP{4VPJ4h@vO*AElC728AO1%xTGjEl@Z7Qfwat=R4aXbeP=8E(BjmhV*TW# zBz?WIOU@}xN!8EEOiHe((2tK#&d*EBOfM};EXmBz(@#vw)XSi&jWFlZ+1i4f#FDgp zU;t$RL%T9J2^7#pscFT|ObiTrPj~xB7qT%jaxr>vc^HGFKp@!R+lyHom8?KvTP|Bu zh#&*QCd2+2%OA+_0)@S}yx^+a{ob#+ANq?QC@jwXL-E}PZwW?hvl)39H!<>TVuZWAz92L*;q~dYK=qDXj=C`Qkyf2dx7Y2s1r(0r zigJMoKUBHPGmne=4p3NyOT`i_J)p2Em#R5T_(kt?jm=vcLBfGtfz~kL z(^EHAu(gK10=h+lMM4}V-0P*~#;_&oGf*`*2e&Frc*pD-F9-hK??7Q`E@`*}-=@xA z@=$W&Z=kR;mohwPfoUlx5u~-aD7jb}#9+Lq!@W9Y=N<Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd~$wXT4p+pEy+zR$BR#!1|^&_r6G=ur`CXB+T3-HFhTDv&mZ-xtKUPIAvhMUl#7U zUg9Nn6XXg>Nj;b_&=o>5>Ij~Kqymzhs-!BMXI&s9*74u-8^{1xNk4=Z83!3p1WzGQ zAqv4$by4+&@qpo!lL+Dz7bO?#gBY+}0Azx42NW=|?+kL#cip{?nUR@=0hohe006v| B(fR-Y literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/access.h.145E1499C171D131.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/access.h.145E1499C171D131.idx new file mode 100644 index 0000000000000000000000000000000000000000..a37feb22ef6daa5abe7d99b3c3f7dea98ac50a30 GIT binary patch literal 1816 zcmc(gL2J}N6vrp+rrph^DA)Aq~}t1><7kX8RpC^i`4(% zU1!Y;cYYT>e)axrG6PP#2$}6egd>jA#5(ja($M$Zmii|z{@$3F6d$jM$qu%I7 zQ+}TO{`_h9^_eSQ2JAAp*-Q{>>DdsNj~=%CVWp@6#x`2qX>rhE+~Q`7;q7bZeDwCi gMI3Bw_O`bBgJ>A(ffdhpq7r`uX+OS8KopvD+Y zGZ{lg)uEo)`N67XCskzdYn#2%N%5nUVpE9)Ofm*gYsHHd@J8>87N;<1ZChT zT@x94+|zUJSXEBomAwk02Fjfd;HY3`a!a6g)>X%Ws|Jt^a*1W2yrdZ1RG`h=bS}By zoaSIH2@#S*-IlQgl~j-}J~ci3X=#pw3gSW8tOP7$396{z{UTa;a_QFdoQI$s>_*gB zIanTEX5MY!XP4%40-;rCL(~+ixE8r{{o`cA*IX4o*{2|CtPoZex)wKPiUGuVQ1@_WY%X>Q*%^@G}v!Ng#w4o3m$|E*nQXQQyORfPaBg!5&UV_p}wt#xw zz10kjSL|P$S9YE$Uj7w!l{AE|42vnuj(?czKK!(ZLp;y>3bhElkVpQfV^?Z#o_$8b zEq8!y2T6%^_gJ{)=gW4KIH0?^atDjo?=P6U>R*(R%7D+0nnMBzHsl4b4f()lLqQ1I zPzXXc)CFBOq=1q~?D3Gy>7yxRzTDnz&m#W(@4;_$CIkG4Z6^J~FhjbQQt8>yv0-f{ X5`S%YaH-k-u&CMt)l3H9DIEU*H#gL% literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/accumulate.h.5466F2AED9365208.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/accumulate.h.5466F2AED9365208.idx new file mode 100644 index 0000000000000000000000000000000000000000..19702e67ab35126b0544791cd0ae299b3e962f51 GIT binary patch literal 1248 zcmcIj&ubGw6n^>9+TAWfO&Uzn!;1ZhVJF?js*8xWP)t1tS`XqOY$lsJy1$&6ZByDJ ztw)QXf*`2qLA{741rhasPy}sHUKCGK&_Wdt?xx*TMK4MR=JDQ}@4fH)VE0&YWaMoe zV7OAOSq9hr6q5dBoRZb3p9H73bGlzE+OEfo+@Lyls9YtK@!6c*Ij#QoV(RM;1KOA? z6PxhazW?435EZl`V(WD3s2gY?jxCq#b;)r9hCk@b$-g!OX*qda)jy2n zSvsZ;+iWUMOv0y-bF%;w}tJ4@0a%;hS42SN$7}oB*L~N^u~J|)%43pq|$y#jV6U`TQ(6&NeVq}J&92H zDP{HP-PRW;eS$pX)8VG@Ig+Uxs$G2dY1ggo7Z%vgtJfFL-;9WY*dlg^=y0`<4%~(4 za%}m*nL{^T`6|Ve zl5cc&$mjMi>6e}wT2^R(mfRqEnurfC(5g2@P ztn~N9_b;&GX5ivvU>8*p)c_L=9N@rZFi(B*b!zb1dTu6G4hD89HYq_c!NAD`3V%js z)`|^&_r6G=URefNNtj-kG$R+- zu@&79-f7R1Xoi^qG!o=am@v>tSt&J`p5BuOoVHqkwTE9MSg*9^ipjIRJd8Z-f((Mv5c3fZVB!K> z46~4jT}oX_8)mx0(+?IN3|@*ry%H=E!Z5wjdOvn8<=z(w6qaR>m4pe~-uTKsiFIZ_ zBNsa-2d5fL7-lrkCXh!ex*xpLo+r@^v`I=z0cO+TP{MajkDAQ!R0oW;Pv QzW5;1uh$%re;C;q09-oKuK)l5 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/add_lvalue_reference.h.2BE6101D7483F1A8.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/add_lvalue_reference.h.2BE6101D7483F1A8.idx new file mode 100644 index 0000000000000000000000000000000000000000..8164ab3f57b542348f46d53c4587d72e3aa7b053 GIT binary patch literal 866 zcmWIYbaRVhW?*nm@vO*AElFfyU|AlZhP2F_R4aXbeP=8E z(BjmhV*TW#Bz?WIFTKR!M=KQApaoyL|R`CT8I*Yz^!=zz>(M3^Tg z<)i{FFD^;3vVxGf!zbM2Id~1 zFvu|#-4EVr&y#45*88z*DfhlepdrQ##*#2YV7h>+K`w)-&RO{=B5ImfD^Qq|gVO}2 z`k42c$#eTkp92li=GB&g2^Xd2fC7r4xG1?;8N^@%5fH%MtEqcUV*1qpCN>UOkbz_X DjH34v literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/add_pointer.h.5A03EB062085C90F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/add_pointer.h.5A03EB062085C90F.idx new file mode 100644 index 0000000000000000000000000000000000000000..6ec3a0bbc2674e78a180a99764cc688c83eb9d77 GIT binary patch literal 1096 zcmWIYbaQiHVPJ4h@vO*AElC728AO1%xTGj^BNLDT0yZkuhE~ZriN(bVAqBN|3^p(} zkXce$kQ!f7l$cpkY{!t8k`iB#pP5&ZT7=AwFJVZ_%t^J<*VlKp(hn_8Eh^SePD;|( zD@!iOPS;N?D#=VsOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$^~Jdjd|(%W_m^@dItKL zdC57YDXIE7nMuhN75ee<$@zI{ndvmP1j(oRNFLS8prgH+#qmX{X{kl2dC94XNja(X zw!ADqGli~p7NzFqm!%>+4Ya(tB*n@KLLx;2PzV%3z?55=o0JGlw48T*w6Y#X@N+Y< zax<_SvKb142?kCkMxZPsGpo4KiD1T!FGabTczGDubvSf*zyt#aD9JN0tQTV3ZR-AS z7aJ1`P`@_2wh)*==w|@NMDY%wO1;vWD<;qO@-XtSi!g{tgLMN5m;)HOz!q0@KX|7- zPof!SEl?O_C(Ig$ryndl7`zmLhUl~C3&RYF*88z*Dfhleps)#pi6l%IrVD5Y$Yn6I zWmakL`)K##2vC@lgHs!(`k42c$#eTkp92li;nk6W2^Xd2fC7r4xG1^U8pPlN5fH!z dV=yqVi%tKZKUq51orR5qlM5C+AbC!NA^@~ZJmdfX literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/add_rvalue_reference.h.F9D3F9E30C668025.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/add_rvalue_reference.h.F9D3F9E30C668025.idx new file mode 100644 index 0000000000000000000000000000000000000000..acf530ad4badd6a3535913f4ffe88d9d53d47722 GIT binary patch literal 844 zcmWIYbaQiIW?*nm@vO*AElFfyU|AlZhP2F_R4aXbeP=8E z(BjmhV*TW#Bz?WIFTKR!M=KQApaoyL|R`CT8I*Yz^!=zz>(M3^Tg z<)i{FFD^;3vVxGftxb25{XD=PHkf|-6TIg{?d&A`RUz%HsTstqO>IKTnTa5I?e+7WMsJ#0)Y91QFtG9nsaf`O9> z6c>!ltmPX`FK?>w`o_(~3RED)CM5zU5DFNIQqziG0~PC))?6`pwwH&Ihh30CP#R)B z1B1iU4;CH_UW!0r2^I-qm@v#;Ok801z}&&ZE@dob4zn~`@5ipC-1{PddSw}8C1H9G zA3xr*?QHydps)zL2;3%^89*aJ9;xVl@J@T4L^IGx1t}evkr#X0);e+Yonz!;=j7nj zff;$sd(GszeWlNVMv8KY!fk@-0;&di9cCoZ&pC;LK)o<48LoHTv%P%sqZ~tVQF5_3 X$W%6%(F_diT`L+(y}Q)?7}*#A!qVHt literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/addressof.h.904B359A9449298E.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/addressof.h.904B359A9449298E.idx new file mode 100644 index 0000000000000000000000000000000000000000..5821b93f256a49332a4422103753ff12818b7479 GIT binary patch literal 666 zcmWIYbaR`;#K7R3;#rZKT9U}Zz`!5^#Kk2=nfi=C1_)@VR2y1_6ey@w)M`RF$@zK3 zB?=%RHINWk4oD*jYckm6rsn1sRoXECWwjU*Q&Ngji;MHq7}7FxQmyp$^_{KsLyJ?3 ziuIF|lJxb;k_)oa^%ILqGSd>1ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-; zOwY(f&pELO(tp=!CS)bQ)U%@tHo{PkI@^086p50)|^z9&c(oK&T7sFCKxzbm>Ad?7+F~ZV_Kg-u65r9Q6TCs8o>!77&w_3 zAqt98(~8dnP0}l^xnlBcFApORrx1gXG$=km0A>NB6xiU3?g#I*=Seh2>;2fZlzU$! zP_-322#Iz4_xuJDP8Q992{RO><|KkR c#YM@*;vfbGh=2f2%Tw`%f7-<+GjcEh0Ac{K_W%F@ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/adjacent_difference.h.86AC4FED5FB91107.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/adjacent_difference.h.86AC4FED5FB91107.idx new file mode 100644 index 0000000000000000000000000000000000000000..1e6f9f9f7b0c4a061f7b1a58eb15df719cfe467b GIT binary patch literal 1598 zcmcIkO=uHA6rQwcZ6@0vP14YQM) zQVWXWMG(A;Rj3qE1VIt&&qYM9RYCNk7mFt;=s`TWn|6{`>Pa)OZ{PRkz4^ZP*x4gP zgM;0b01Tvta%qK1P5^+{dQ3|2t8&Y+S4Z1aS8PbnWa$u9h(ry-tC*N{I>@(8MgG{) zq?L_mY$Qup*AT_bYIM5uKc8od5M%vVm&oKu#@2@ooloX*!pPWs>u3-1YlF7zAiu8S ze?B0{|5aTl*sW*N3c>PTu$CN1sc}hGbec$ERaJWD*Gz za_00Hk_g4BBvTVbx}rU@D0d^-NN21HVhR#T+mEbC`WWgKBBBsRSeLbINC2liIv4-g+N*fc3 z)t5ndklZBG_2ed^@EhH3yCL8B*cfUDdADuJV-B0l@_&ca;Fp5=tl z{?I724RATjmJ^7gnvWa+2-&mm#KmWvgM&WcYs~*BEVJ?By@y|qo~g0IeV}g>3-9}~ zwDSOnx0Z3R)!FJ{VGfE;v4EI3hd(bWclq}gqr^m;V*xMqv8)oD)hYr)X!{-h< zIoMR)6kxR+N6b|=N%Bj zDu`G(S-y04yzkl@Yfk-_yANgPjEY^{bLVsDQ2-!{q$0x$hRQ u7kCRZ21L;$yTT;0xyyE{Y_q&L<^TY<-5-5X`&gWIR=GGga20plMfW!scjSZs literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/adjacent_find.h.D96FBABC9AAF3B9B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/adjacent_find.h.D96FBABC9AAF3B9B.idx new file mode 100644 index 0000000000000000000000000000000000000000..ee428f7293913b2319b040ce0b8089bdbfa60add GIT binary patch literal 2524 zcmWIYbaT7H$-v;8;#rZKT9U}Zz`!5^#Kk2=nZ6(n2xzEO8(O*L7nLU#rFfR47A2PC z7b&D=78RG&>L{pG8)3-hBm$*0$G?&OB^kMP3~076B&K8~Ca30=#HVHEr7)yr=A>Hb>+3sP z>4z4l78UC!Cnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c> zPGVlVzL}npiJpOeW?phmX-cYoPG(YaMTLHRJlq-jD7NZl(9K?ugXw5pCN!nR=NEvI zTxNb=G0kmH&d*EBOs8>(!aSxAW5kyfC1#e;-gl*WDXD4kxrxa|`NcH$V`)idPG(7^ zer|qQDlpcHOH!|2gz_UF91NyXexcA%+FS?s8g z8N#&-O*rSwON+NNSdO3xhyGk;E@9_#6wPeGeE({>(ghdLR3|ZiSd-;A=MpHJXvnz2 zq6nBx^tF5tJOh0LIPc5CJ=aUTq;7(=2+61;6lqCn=^=Oqk_K?z)A*+X6~19N(cE^zE^CVT--c-ybJ*F4la8D literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/advance.h.5266297F85371B8C.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/advance.h.5266297F85371B8C.idx new file mode 100644 index 0000000000000000000000000000000000000000..fbf4505fa8efc2c4b7f88645a528d1d5dc8de1c1 GIT binary patch literal 2726 zcmcguOK1~882-1WwcW0*Z8ch3=)*K9rWyOdq(Ry(mTFYQx2T7(*-X;WeT3Ob+M)$T zJQWX~1fO^iwNP&!6dxd^UPT3|B8cGQAR^dCC(xKp`$0=&-ETpUWFbim96<EkJ+ zQAU!Q&K%U;)zhc<>YI>mn`!<9b%Gi--A6YxD}^=%yL*Eh5wUb5lfcLzaeZtI#bTPn zIa!fKbekuW=23DrlCre8frBHZ(sVQv^E68#m?WtpXC<}>THGN;&nhP<*06Mne6Lb$ zVvD)^CB~>mSn*dem#;8NCCtXtB1wc7j!29oi$2+fs>F#Ai{TX2jH2sitOQQROiib@ zQ{*F)VZEGeA)Z)p~B&IXm47$+xe^R^_{z)_l?$Ycvga0sa|xb zAHIdR!S*)Z5%okH1Ux;8<_~$Ieh!EChb_VWrRjpR|IKB@;eo~hpNRI_?mg_qj#E3! z71{6e_lVIvGGAwb7hW6g&i4&A47LjbMIQDI_XzK3@W=fd)sGHyl^F?Uq(%|dz1w?# zUD|N*m`9O2yd6CPR^)&;P~e5Up#o3!syT1u?Gg29=aj{nhsuU>y!DY=U47H3bCN8} zm9kIpig=_o3yUB^A2|JFbo1|uXPm@;&_5#J`Rfl}vF&T-+~A;Nr6A$KL7>13L8!n} zLCtyDPc8G$L*M75X1RY?{{f+X-rhk^|GfE~%e6pDgW#pu&|KT0y7SmIay$T4uK%y) z#se%97(j0M0jl$8P2Lp0g&dK8Pob8x{^l#S6-z6ts+DCmwRQCkD^@Ot%KZ4cyy^a0 SF1A`>04RC0B5y9wn|}fSQ8mH< literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/algorithm.B30359D947B69808.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/algorithm.B30359D947B69808.idx new file mode 100644 index 0000000000000000000000000000000000000000..99e62dd7759806eae78cafe6993b9c9a4a34f378 GIT binary patch literal 12966 zcmc(mNmmp}5XTDzL`2$sSHyk6E|wMnQBf2DcN7)3G&?)1JBO;QGBXRh=QOAJ7UN;Q z#@ziBzUOJq&eM~($?S#T3siKy*N{De#K$+40=*ZY4E3k2&#Zh8^L+LzK zk^8Wa%CbM6A1&mEeIZ$xmbf2^BCA$?LTFfyl`xgar={O0OAe1(^L94Ed>gAe>M8=q|Cx{i{ z6g4ilBvEHdnMR=np8N&%* z`o}O{w`LdP6g8oU=qktd8xgG{&K;{pc*rAL%)nGd_WqH;^hZ{$9c?Nk^3bUZw#8B% zQG=R>M)4Y^w{vpsDA!0{HEjyw(q=2Tt2SvWZ5X`u+{}hhmpveQ+|9B!e4`d0H_}mT zdtDydHe*Q=3)G;R#0hq;k|@5`CV!D=gSo0oQeDArUB!{ZPD2oT#%xl>Eo(Q0Q44p9 z*XtjMp0KHi->Z#65B?5N%V6YwU9elwj?%K9#sNSzSqk0Cxi6E~wo4 z4Lc#!h89B(<$c5~qA88MYISAq#yJ4YJt|{Q9%#Gq7$LT=ou8jlOqbXY#15-zVz-Ep z%J?jnfhcEsHgDrZV74kIjs(k8q9{zJf8X{6_Z-eE&7q`8Buc`|r8J z_uOpbZTJ4qT;V6&cTaxq`19MqmyX_*-k#pWt=AL}sbj5}{>L5be$o2I^9}-D1)Krg z0oVoD1Na{B4d8~j=iP><1Kt3<1$Ykd zE#L%Ty$2h&@8Ic1S9sn=FEx(MH{Th8cMkxb1k3{-1$+Rw2)G|`7vMd>9N<&HSAfR> zSN{HMJRYk2F zg^QOi4_(Ro!y}_(g{$M&CZ?`W-?({e=JuW0yZ7ei7Zx8peDwIq(`QT1Uo5|T)pcO< zJ|}P9zI*@SBQ3I$cL$UQ0rvnt13V4*7;p^m6yPvm0k9Xa^{)%|Nk2SY0GtE73HSu? z7~mA(PQWvO9|5-lx=Gi(rdwdAFW?ct4#0W9`+(O0p99_nTn2mycnGirI0;zy5slj| g@bnrW2iy)g07w8C;3L4-fIi?7;5NV$fFA(=2jvF=^Z)<= literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/aliases.h.E1DBA59293C59E0C.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/aliases.h.E1DBA59293C59E0C.idx new file mode 100644 index 0000000000000000000000000000000000000000..6fd0af9cd5604dc6457ddb8bce868baed2c37452 GIT binary patch literal 5354 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 Xtv7x~T6#ui7D;1R=w=g=$-MsoZ8M== literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/aligned_union.h.8B4152DD83941B69.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/aligned_union.h.8B4152DD83941B69.idx new file mode 100644 index 0000000000000000000000000000000000000000..6963b3177dc7b2ca6df76b32f2682c98acf5a503 GIT binary patch literal 1424 zcmWIYbaU%qWngel@vO*AElFfyU|b%E6&Ox009G7y>Fet|Tj_@urxq3KCnqK8 z>y;%JWT)#V7L{bCB_@{?>l+ywTPB+%o9QR#=N15U6cy_w7UhC4(7k!-`eu4YCVB?? znR&@Mr75ZUIhjex6&3pN@yYplX_@IXwgk!d`Y_KIm*f{Erl;y<41nF>fTyd?nRz9t z=|zb-pztm(Nz5yuvF*vlB`GPXX}}DUVr2y(VF3^JJWvo6DZm_5nVZxA%sg!y)=Rn< zHuH)yaqxpO69WUcs+g)O0|$iTwWY1v`}mPeZYFj<25wz8T~RQ>z{$b{RKUo}x`A!} zY2%IMN7$IyfC^NURSduc11B>hM1hO0g&D)8sgJlB1o#=aH5@fu!34~LqSUnFD4vm(6YMOQZ9Lo>S{jxxqaB`pu<&5;QUvPNX3-Xg>5bO= zv1=*!zDS_30fT`gOc>@RMlP^dD!L!M)1D{Md@7>o_Vu%y%9(h$)r8e_V5)&UGc|uW z@9L$Ut9DMR02-+wtf2&RK#7X)frfKli-CGo*j1F^s=0N=bPZuVnA@4Sz##;)mxo)| zR@V#Ws56h2Gp{gzcoAfQjfMlvg7iIKXQbcJeFStfCkLl4%t)9t&`40g!fXH<8LOKJ xGqNZ(ClREfxG1^U8pPlP5fH%b&;4cZY@H9gSva|Pco}$L;tUL22qrIr2>@SgrP%-g literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/alignment_of.h.16160A0F7457F061.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/alignment_of.h.16160A0F7457F061.idx new file mode 100644 index 0000000000000000000000000000000000000000..e87c0894f57d68488e86e44e4149d1d2d0036798 GIT binary patch literal 950 zcmWIYbaPwB%)sEB;#rZKT9U}Zz`!5^#Kk2=nIcR;1_;=wR2y0)=Oh*vD})r(+A-L` z*g$4UWkG6uNl{{ENwFP6VoqjyUT$h$Nql}93MamdA=%24AuTf})k zSU))_Nnfulxga}TKe4DJGc7T>q*&j`(AYBBB-u^Wgn{gQx8C0A7F$Hyn<=cQ$))7TOu|LP-qS1*H(7H8&_q^1`o=779h zT#}eqLSx&Li%U{cQqzE`BE`yzp|~+`0d1`(`R{PWlP7iIam<2d0{#C^aWh5Xgf$5FT(0#YM@*`XF`eaK#K< X2qq_j$?-kCpxatH-kzDAlZycW0PG4{ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/all_of.h.5995C1323207F3C0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/all_of.h.5995C1323207F3C0.idx new file mode 100644 index 0000000000000000000000000000000000000000..21a0adf8fb084141d3bfeb124a257cc4e36a952b GIT binary patch literal 1036 zcmWIYbaP{2VPJ4h@vO*AElC728AO1%xTGkvff2|60S%RELo3g`g3=PtlGLKalKdit zw9KO7l3E=Fm1-k2nVdwZgt1jXQEEzNa$-rULIIFftI42&#Sk3@R6&q_9R*aanhZ9H zIqCUDnI##yb_|I*Iq~^v3`zOH3L9C7Ef7$tA`5Mux_g$tKBW`pNmZ1wb7|#d?WFxgeaJlbDyTZ>DEtqGzC=nU|bX znv$xYlbMuUQK26n54Tt!Vy|8XjV(;h&r8cp2gX2(l@&vAWp0upFba01?^tHZe^rEs zfrXQSU5r7D4NNd_GBGl+vN1BVG8Cnz6$>&kFmN20d}9VrI0K^yySSjZFifLfY0VXr zXM1@VdDw**grvdoiexUM6xh6q?g#I*=Seibl6EPa+IK=6%@F;6UsAg7Rw$zhv+vN1 zIQ5T74QRF~gQy_P?COhKGE+qRjL=j|E{P9|`1#fZP1s}e#VuTux7wo#A1JXt(qbIq zfhHWS_hZ*m?tPI!D`gpEC1F-_+MTnUKj%RtBNsat2bT&=c+2_~Y_Cs?PCzr{(}Q@E zX9uOGp$SX(DK@Y9c5WV;@Z}rRDrT=YT!tq6Ij?R~G53=lXu>Ir9ThS|xOSll=bU+I z@pcBw5j0`JeE({>(ghdLgp-&*tjThma|sl%`l3EC?|fOf=X!~k)J>4Eq^KTD_|&uL pqfHsCZ_x|^ri`3KkecG6%;amDXG_dA65_k%vi` zL0B3j1p*FFKUjD$cqsyfMOj3JA%YAH>^n3gPW@w20}87$s0zY_PYWB{d*8|N0t&0? ztJzm{KX|7-PogkwXCh9-iCi literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/allocation_guard.h.C0FC9EA0DABE6EB3.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/allocation_guard.h.C0FC9EA0DABE6EB3.idx new file mode 100644 index 0000000000000000000000000000000000000000..ff5d7d15ca76f3254ed7749b03fec34b6d3b065e GIT binary patch literal 1832 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/array.823BB78AF2DC6FB8.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/array.823BB78AF2DC6FB8.idx new file mode 100644 index 0000000000000000000000000000000000000000..975a0f2ab9b607353325d43003c081f86a3d2af4 GIT binary patch literal 20154 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/array.h.4A931171DE6421B4.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/array.h.4A931171DE6421B4.idx new file mode 100644 index 0000000000000000000000000000000000000000..255a663533c277e18305bde4da1f46c4fcf6b1cb GIT binary patch literal 1558 zcmWIYbaUflV_=b_!~0wVFh##HBDfKd-n%fp~*)s0SGjcdeZUrg;S9QKfNM zqDGV|O@@#H1vN0C#sD!1EP!CDF{EYYq+03g>pNTNhZd(673(J_CF$#xB^P9;>n9eK zWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk}o`HU5UUE)pN~(TN zW>RuRg?@ZI(5AG^bQ)WdR-OWMDlk3hWzf_nupKnDA-T9DB_%bDAw9JOmI(ldOreEcX5Cw;s z9S$=)^GR4r*f4OiF)?s5FbF=BeQajRl>i^J5-^7WRfC)ZQyn3(Tu&-m+=PvjPgF)!5hl#TCt)k$1k=OAC+#Wi z2lqRlyq&x=+#h^OUP}IONAqclX-dOPxt?ZMIGHuxnTdr@O+rlxCd|U8siSEM<83>t zsxHZ=;RAFpvT(HCk6lZ-_eBDQwHdS}VcvjQ3-ksk&|ro%9h2MbdMvXLs2bU(!^e-e zY&#pj9w;ozE(#9|m}`NCfC3g~$d`qCu9tX8-DCm!oPc3m+4&00RJdYO=5Z literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/as_const.h.583845552C2B6EFC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/as_const.h.583845552C2B6EFC.idx new file mode 100644 index 0000000000000000000000000000000000000000..53d880918991ef5a7c28dc78e054ff599a5d51b2 GIT binary patch literal 1038 zcmWIYbaP{4VPJ4h@vO*AElC728AO1%xTGj^1{0700vamShE^d33Th>_nh;KMeqM2j z0!T;=Bm|ZN(n!LZ3^t`DnK_vym39n?DJk(_srV9`kODgeHHO4uhyX*fRT)ECW=^V= zzP`S*m40Y(YEiL%a#E7MURiQMcDjCIQAuW6Vsc5bzLBA^WwJ@KnSOG9ZUIn7QL$cP zQ7#B4=OpH(>znBrndlklXXYj6l%}NW=VT@&S5)Z7gX~GmOsBCWC6xuK@g+rxnLvla zeXEy2V_TsCtPcxKx>=Z(UsRr0ltMTAa`VelftD4Qq*z%ol;vlpFceqjCOH9;fs>h$fsFyE zpeQx1cn8oVz0#U1CeQZrF!FGVFo;Nl(me>kEMSxZ8(h)-;GOn7iDrkVA1pi=ycB_| z#aP6IA!->IV738OgKUARj@J9JYbp1>NT6y31_eo&YV*`5U#AAItp^HA=t)?@G=EvR z=X!~k)J>2upM)|@_1h^EZL8eo{bS_f=H%d1fe9C-<|KmH#YM@*)*uEKh=2f27=wX< Z7s2Efa(MJQ<&$?Y3nv#3F9Q!k1^|5QDjxs< literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/assignable.h.F6EB480E6DA2D825.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/assignable.h.F6EB480E6DA2D825.idx new file mode 100644 index 0000000000000000000000000000000000000000..6eb1d34b55c69262a030b3433887f34dc9c4dfea GIT binary patch literal 1066 zcmcgr%Sr<=6wUN$wF^Nh6*oSxf{Tf*rP!{7Lb1A2T!_MuNi);X%!4G;2e|MDT>Ay? z`~VU3EBpmric19-Cg?E!Kzrem!?{V$$>W}MJDrUT0PS9P>=B6+1j{Og14GxDatk9fYNTwd!6I*Kq^lzzfw1E=M0TP0`KC&4x`?JziUcJD#IB^Ik%7-LSXISGj+Iil(ZkiJ?4beCUrI=e4H1io_Azw_k)({u33LKJLcFK+fS7o; zZXP8sF4bs8S1%#>GQh@ICKkq4R0to<_4o(QPqOawd-i?$Z0o)E=y)``*8&)Z$Mcw5iU4584P&)< z(QqKMNJxH!F&-Y_Cx&Z-SrFjfj7=wFOtlpeW!B*St%Eykzz#7>;;GxAO^@n08%$C) z#)rNBpm!4s#pJV)V<`eQpJPI(O=7_?m4X^>dMBRf{;~RHBY{)snKF`e?3q$1VLemI zgiT1Kx$o08sbapQvJ>t^#yn1RN)jD%?TtB6mMbd~MZ8_C%MHuSKtw#1zNAK6F>jAZ z7((T9ni}H${Z53GB;-@BLZ>+Ob-Z3*FH2M;#-)~%%i2{c1&gUIwjczC_q?k*5opzSP} zS-X3R(CPp43pBVu!^QNBeo;cjN85 z$^AE9D(&tWx^Y(gNOMWEMMg7It2offw*X|*rB!nPP%mJ!fLjH;5&@9)pG)h${`B$j z;zR$>Zl|(RMXPJIdZXEDuW#&aZf)=ELOWjwuv)-c0k1>?xDGeB^&9}?{jKwC6yD7O Rt`#tAikG&M1AyHE{sp}>b}#?{ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic.h.796FC25F2505F6EC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic.h.796FC25F2505F6EC.idx new file mode 100644 index 0000000000000000000000000000000000000000..477c76f018edff70ae66ee53f26b9e52c68b437b GIT binary patch literal 17184 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic_base.h.4017A932C4226FB2.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic_base.h.4017A932C4226FB2.idx new file mode 100644 index 0000000000000000000000000000000000000000..76cca42517433107a911e922e8f13d7cdcdfcbec GIT binary patch literal 5810 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 F{vTG90jdB1 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic_init.h.7B0EB7135A1804F5.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic_init.h.7B0EB7135A1804F5.idx new file mode 100644 index 0000000000000000000000000000000000000000..4a923f462e01c0c6ad56a1bf27668d65dd8ae23b GIT binary patch literal 426 zcmWIYbaPw8$iU#7;#rZKT9U}Zz`!5^#Kk2=nRkIS7^G$9q+03g>pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|Vo82(X0kqniqFi;EYZtgpskh3`FUxX=|Epr<|cuB zSd^MpTnwZgo_?_KVDM681ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&pELO(t}u_Qk?Gg%)(#pmQFXUC@%rKaj-FwoZCq|)tYWj2MTj? zaB9PZdr!Yg^yq&y7bq;lB?I@)sjoMudzj7N3=|gT5{3)gZ7*ZbPS^Yo6qewUfV;aW gH75~dU~y4$u{emq1R@}SaqE`4n7g%!OBk6L0I@WXiU0rr literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic_sync.h.E5D7BA1914710C56.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/atomic_sync.h.E5D7BA1914710C56.idx new file mode 100644 index 0000000000000000000000000000000000000000..9cd983b50938d0a6688a3092fbf9b2ab64a84663 GIT binary patch literal 3190 zcmcgve@q)y9DlErL4Qyh!{T5J2@W-}_BqN}Da%4Y5D@3sGNT!KUf*5Yv)8+Fcdc!l z{xLHDnAvm^V@SvX$&7K1RQ+RJx=k7Ln`@x1mA>S_^PI>q7{2`_OKg zm1Knde&mkhXgG*yN#O!CR%Fz&$(WH&8Evr|r3xEiBcha~ zM2TUgQpHq6Du{83V&ae_3L;`+60J>W(Q{PSPJjy*d7ZAz8lo9SVr5wj6g?{?B(XGu zq9V^zuW(9;^3ymh21*uKjzy!QRQ#7wNk&;pk!Vicx73+@IVRweteV2O42$Vx@n^Ik zQ%;DBVYZ|p<08kDU~`Qr9M369q}G&=)5YFZv35ENLG_eOM*P|VDX{_hIrZp_&!;9& zY_OVP4a~wFS-3Ot=9NDmJ+f}p9ou`c_4*k*w8KWwxLzBhwf(-g(zjgG4#NJztLI*H ze)(?$Ay@`~NR56iHW9)vfzh@@8(TIK!r_y*ryHwnn+f5sKi+WNx_hdf5G>z3X1&^T zvcpubW>J@g59(QHd{Y+sbUvHkZre(wItdS#0^3H$%BgOX8G6=xnss|K^!58zYhr%4 z|GwE>d!8aj@0!|t@bq~7AR(NXZGO1c@yMWB#X?7W+;=kX+dg|(@V?WUH<8X5klCPYdF=D<3`j7h53j>)-h@# z`#ND?duQOPt@rE!LYV9jj{kVr^9~_|4#;OdI=g*>5S;tAzU|K+`hXCIhWFq2?X@Q} z|2s>&|2ej0-L@xY2@lJb$)n+(Bj?nt`YQVx^ztlCoxY?D)a5Jeu*=kSzus+!DF{+< zt-;d}qziclf=nTwfncVP=b$ME3;fN&x;cn+f7hsM&cxHt=84CQ-*{l@+by^AW%bbO z@_O{eq_RHmGY0dye5=~{vF|T9uQ0!s+o21&I&>pD^zQHu8?4jR=`dId4yRzq;PVj8 z!_~2l@y4vQ_~A{pSm$BudDyNSx~BIYotg+NLhbEvWMPdijD7W9SK1Ahh=eAVtHus4 ze*CxUY7T-qW4&6Om#=qxy7n$HLSlJZtCK8Yc}4?P?Y7cvIsicbzpnO_8NJm8ghQX? zGEM2vo2pG^=JGWal@_bbUgfBE0*hf}GNAS~aIaPB0Dy7>It}PB;2Hx~8BqPo(A$6X C!5Civ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/auto_cast.h.8CF9D0A292C2A48A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/auto_cast.h.8CF9D0A292C2A48A.idx new file mode 100644 index 0000000000000000000000000000000000000000..96aae0b558c0e04f3590e6d90241705d1ba3b51f GIT binary patch literal 480 zcmcIhJ5B>J5cO^-qNPllR1}ET17Q`36f}{7LP3El;jQ0oc}^-_V9KU57-)ni3Xtp3+N@4XVE2pk$8DL6%|L z2w9TjirAs!nbl1CLko^AiwlB}8xA(KZ>eJK7IJr2`nkyEt(P+*CIQ+-M(ffDu1ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&pELO(t}IX^EgGo699mgJ`9<`-4!Czh7v#}||o>18k!SLP;x zd{>m3R;&l4r5X&|^1e>uX5?bx;^0ySdmKnOJpEwd!QiFH$ipPWA|wnGE=tWw1hI>Y al8ePb3}6_-08_>d)wC%wa~Co)G5`S9sbY8l literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/availability.h.4A3E0FF96F5383BC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/availability.h.4A3E0FF96F5383BC.idx new file mode 100644 index 0000000000000000000000000000000000000000..823fe88e5adf1b21d27b0660d2f76ace5dab11fc GIT binary patch literal 1982 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 CvSPdd literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bernoulli_distribution.h.54396DDE7A3A5D77.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bernoulli_distribution.h.54396DDE7A3A5D77.idx new file mode 100644 index 0000000000000000000000000000000000000000..215a39571dc76a818f23c8db2523d01a1b93cb92 GIT binary patch literal 4200 zcmcgwdu&rx7(cyiY;7;2XB%zTbz9e#(%IU}M#o$km2HlWHl0;rZc$clA7dB#nD=(0 zL{SMo5{-YD0176EA)rRZM|{5@K{UZv#1J(^LgW#R5)>0P0-k#>U+-N4>@QfdFXy}8 z`Ch;8agyG=Z0XWf284Q3%Zk}_fh|J_)slaqz;nmS$wB;cJMU}_Bv^q<#yKKLv)QiR zF_vHMwJqmat{?<$E>76swK?x>3nbEfEkUl3m^F?8{wqC`HQLCHV@sT)VC0~+Nr z=>Wqpy#Z#0kmdy@nMg3c$>jLj)eOrQxKTD)5SX^s1)WKMav_tf`5d^S#2MrO)BxZ(j!} zt3;4i@~zR9Z@)bidGSzqF^$aRLd+TSN(5;uW}sPB8eINM^}(O;*XM39P&VQq&=9ao z1RQ+y#0%Sxf20{OP(~t-I3x2U0^);*JCE->`|eG8G@C?kci8SP<6z?VDDfA_c(jJ;Gj$Y>_GQ(AHO5(N1ahG7Ks9_ zYv<`DJNp0oK(2geb7uz@3Ft3JzTbvt9QjlRr@x`!jzt3EPVN35pK0qpDtiw)gI+8W z5Z{rR{g$)(nWM7t_U85uED{i(7S5lZ3=f>3k(Ff6A+Ay)NL#K!Ix&0KVefqB*%PPa z#_+g2J}eR?doo3%g1tiN?->@Uuc2sG+#YFP0by7%U&WijEA+g^BK10SDfBwABsRKY zsjs8&I;gf44_k)o0ej!XT?hTg-=j4&HX&2JJW>eZANIa>@|JZ~zYC1mBy70MP)=kVph0Sx>Y9NAOKCZw0-~$SU#jr#LWZg zoqGP8ZQi+yLd3zCam)dJNlbdK)MGTx>ar$~LCJ_EaY=zC0GiZHTu#t&xB32ld$<1m zVbVU6XtEAUdDPLnPoMFQkk3QZP^kxDixJ!63Ip3(f@3RA%}E)digQPHzyEmPz$Vh_;}zptz#fK&;3IBf&;>23 zT3WnN^QmL)vGG;XYHv;qf+llBw$JcI&JP*_^*5O}q;>w$y0BD&&w2VH=lBrPs=xD8kn9K~f0 zpUHZxQiwcDx~82seTm~rot*NLPb%vpT5q{&pPyb17*P_}Qh?!4kSn(|INg*U2N)qx? k4L`8?XU#*dU&{^EHFIha`Pl&eN?9UQdcou$5-!~MA3$j8vH$=8 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/binary_function.h.0270CAD7354089A4.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/binary_function.h.0270CAD7354089A4.idx new file mode 100644 index 0000000000000000000000000000000000000000..cca500e8382c4da001b13cb3d1d50879a05924e7 GIT binary patch literal 490 zcmWIYbaQ*e$iU#7;#rZKT9U}Zz`!5^#Kk2=nNNW<7^G$9q+03g>pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|a(-S~W;z3HElDfQOD@UG&r8hFPs+?oEUJu$iRfhj zeOsBE1oCN7YFhDXAf0~K^SJcoFcwBGCN2&xJ#ZiZ3BA&qD<;qO@-Xr+2{8ys!-O54 zez5Rh@KR*vVG>~x5rzr#Fe$PqBJng>G~m2wy&t=la_@@-nqdBr6P0Y#}PnaPPI zsS0WZKxVBbg9cU!O$HmVrkup$VuYqzI|iF%R3V^9T4`Q#NoIatVvZd{Qf6LaQDuBy zYC6ykRGtmoZZu^!@klahnK`Le`uh6LR{EjEsYS*5$w^82dS%H4+3EU;MJ1VOiOD6! z`bLJvmdPf`X8OtbxdlKSMa6oFMY$jhbY5P%zL}npiJpOeW?phmX-cYoPG(YaMTLHR zJkYOcnduC)wFD6!`q1EjiRfj}-D*fo04>hTFEL`sFGwv)EXgm@&;+KC6e}wTi4ti* zL5AYW+@uCz!kLj4vngSlST{Qp8y^F=gt>$Zm|);$VFt=Fva)g<`f{V|y4DmiCJufE zZh3ooA27kd0h9&;{qvVw^KdIED48O7nvR-bFrHG<&D7aPkKSYgnj|e@1``H4l|d687BELL zN`ZqG=DR;Jy=xVXPJ9AcrzmfS(5u9xB#+=}Dr-8xctxo>i6C}yQF5^|h`|XWAb|VE Uo8-3OIcJwLadI(m!9*Dt0IY~jTL1t6 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/binary_search.h.8C6FD15D08393FE0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/binary_search.h.8C6FD15D08393FE0.idx new file mode 100644 index 0000000000000000000000000000000000000000..ca05bbed8118012b15bdb481fd1be22e37978142 GIT binary patch literal 1922 zcmWIYbaSg>XJBwn@vO*AElFfyU|y=QanpiixNxn zixko_i;7EXbre*pjWFbL5}{JYR>}E!#U%L1Iy= zLNbsBS%B54Itu8*AXn-DHK90=LhU*V$d1uuuu05G&o9a>$;h>1NXpDhEUJtzPE9OI z&R|H&&(C2^$C|P?Kom$aNb+)m2nJ3TCWr!HbQRBGVqoAnF!{y|o^S?65l(4AX)1nj54EgjR-sIUqscC4!(tV1}YrdVEhbDaa#kXHo3B!B~3|&whVh`QVd3BSDxu5Jn)0?u`Q6V#gYZsbu&Y71MZ)dO^K@%3t_pg>K zU2p+SIEnegnk>gTmq1aZFX00V3SboJ%foqJ7Vf!T;w5zxq)1Xi4@r@vJe;Siepz8# z_LAp}T%4R7oZ2u&r=CS0ZOUMMi)L?8YEB|ZNpVqfu{(&t3nCzZ3&vnz;6pHZ5KK;1 V_N4k6$#Pa!E^Z!PJ_c@t6aa}qYRmut literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bind.h.58C1F5CA64878D61.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bind.h.58C1F5CA64878D61.idx new file mode 100644 index 0000000000000000000000000000000000000000..a512273019b135ea9f99ea5d14f2503f37bf7e93 GIT binary patch literal 7712 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/binder1st.h.FDD57B15FD661708.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/binder1st.h.FDD57B15FD661708.idx new file mode 100644 index 0000000000000000000000000000000000000000..d523db96ccb9d9746a73b9a9dd58f5af310f86a1 GIT binary patch literal 538 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 Db=og% literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bit_cast.h.BAF1058F560618B6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bit_cast.h.BAF1058F560618B6.idx new file mode 100644 index 0000000000000000000000000000000000000000..9647966378144f150e4328e64706cf813839e580 GIT binary patch literal 584 zcmWIYbaQiHVqkDi@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ}I+AABf|V6N^jqGH7gBa(-S~W;%^6DXA<-jV~!m z%mju?W-*YJS(cfYlT#U=oL^9xn3R(W^d>`bWo{BEaEnsYio1ZcUTMu0lV^K*7;?zGTHK4ErgM=VVI9l(=uBF`jB7wr1 z44RTK;V%pKTrcsGx(QM(B%uxy=3$wnaddz0Pev|AE)FgQm~c^QP9lh1T$Eg_3}OJ& Z2MjRkvRzKvoodv_#Kg?N3=?Hw006?5plbjC literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bit_reference.h.7E0EAF5F9323DE3A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bit_reference.h.7E0EAF5F9323DE3A.idx new file mode 100644 index 0000000000000000000000000000000000000000..affbf794a609f841669c224a7714b5fc4b93d1b9 GIT binary patch literal 378 zcmWIYbaN|WWMFVk@vO*AElFfyU|1ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&pELO(t}IX^EgGo699mZX)Z=qF{C#22Ner52^;C8z3TFceqj zCV~716f1TG(t4#eS4^Jm8^~#$ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/blsr.h.6DFA61E449FF7F15.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/blsr.h.6DFA61E449FF7F15.idx new file mode 100644 index 0000000000000000000000000000000000000000..d91e7f580d1ed51d62665bcd25f2a25b4ed22395 GIT binary patch literal 522 zcmWIYbaP{3VqkDi@vO*AElFfyU|1ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&pELO(t}DYHaBDW|wdFN1-$7A5EBrDdiA{Z^Tq1oBr=YFhC< zAgxzgbH(J@ULHmsMnMKaX|R`pM6}+IT}!$5MFNH88RR8l!spK}nXfLdSIWr6$jQMe z0~40+%6_%dChj~l52LWGupUg9hf!Qs9Em3_D-Gv;S-9tViI>z(kQR1fxJf`Q?BYl~ zX?AHi&$>WJtmD7uH;|SP;aDVF;>3YIg8&{z=?v*Y7_TTbClSOhE=n#I2Qh%L4FinN PHPVijyl&59WMTjSDBXA~ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/boolean_testable.h.763055A39DDA24B7.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/boolean_testable.h.763055A39DDA24B7.idx new file mode 100644 index 0000000000000000000000000000000000000000..f44c09ff3d674550ebb13799436ba59ea6bdd6a4 GIT binary patch literal 664 zcmcgqK}rKL6wP#IVQY6|7or>Ky7^j5(XNETU%#1vmlo`{+LkO*yQd;si#}JEz3)TaG zeh-cnlL}}Q0Up!gWeP-Uo)D@Pw70f*X@_=!7TM5rNQH^aY*9h-6uP+G!JEKyDn>B_ z!6RCh5QenKDI1y#qM{It{pWBa%>~y}ND4V2 zGB%;qG>hzaN|vZIv*Xd#d*}11?$jM0`D^ybV(;T?XCEDG7`fp!{F#W*DgJ)ATYf$< zauYRI=koQsQn!z_d#C19m#VF~ESVsdD@het;@V{fGj4M@ujr+99vuF-71u*{`2O$< DJ>S4j literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bounded_iter.h.2E95ED3788A69ED6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/bounded_iter.h.2E95ED3788A69ED6.idx new file mode 100644 index 0000000000000000000000000000000000000000..7f42ecf72448652dc2a626ad55f694590b555d3c GIT binary patch literal 9214 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 R6NGtdBnVr}00&F={{W_djqU&d literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/boyer_moore_searcher.h.78D863651A13F341.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/boyer_moore_searcher.h.78D863651A13F341.idx new file mode 100644 index 0000000000000000000000000000000000000000..58749644c96b69a3f63599451c8b4da14e1f2b67 GIT binary patch literal 18366 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/can_extract_key.h.DDF8C1F767140C73.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/can_extract_key.h.DDF8C1F767140C73.idx new file mode 100644 index 0000000000000000000000000000000000000000..4e3a5661eb9b1cb771badf295045a79581246556 GIT binary patch literal 1256 zcmc&!J4-_`6i$0v`><|;il9S5#llUkMbM!R#bQ^%K^#Jw=GNeS)FiF9;H0B&Iykwg zlY_gjvEU#sqH8BdSKTzBmih-;KRC&E&dE6+Nl4a;g+eO?K)zh`9V)S+U|5-uoLw7= zXjsgqOAx~R5?mLQ3rI>OXx2$}y8bk{mO2A_TjL`pO{^ZPP}7 zwLQ1YB=cNs_f?m0ElX<87K>H%(~GGpyZ0QQ>`w<}Gyqr!hz51kwhKL#5YDx923&UTt4r|(|B>-JS3Zp5N7*lEJ4 wjWrjX2&73=4{ZcG1b~4qHD;cc6DO&yS+oO zVs4*RZ76XILy3%`L|jZ&EpLv$^|~+@9h#pE%ZFe0?$a!uM^DqHC%GgS3#7o16olH2 zS|e{-E=RT{;(_d>x8FK5u>IEl%Q*%kODs|4V@XrWy7`Pjb*yu^Tm2H2x;u%Rk8+|| zju!jI zX1miN#QErSDC~#|L4Iz|5ePsPBEskjACgY3<0k2_k9|Hz3u0h~iwdF7>%8f>5J@Cs z0hmG28)nRkJ1`v&g(HC&$0rlwisqJ&ajBK9o{$hDv!N9YA}Yk-ULY}Uj>LpGNlb>5 zTq=>Q?#MiDux1|J?#yF{vY@k*$m1m~)0|C)#c+y%oQ|f_Z^Tr{<$~J^WFW8+A8*2l zB~{8CgJndVj|JCe5puO|;?naU+j1yVd>f%1)g8^UAbIIqvBDo2z4ZMTb17q~C$!#F z-yjQAHy?iIj<&-W^g2=kYHO9XQ5L8^+@*Wz$^CCvrj5G|?s_T-R9ji{l}C2|qejoH zhO-CE0~T4J+Wypc&%Cziai({Bsy)qA5~x1+M$d1Lo@?F8l9~;K4x5KrETS*e z(43A+X?!4==VXT;9JE&Ij-9we~t$-~q>8`q^{u z96kkV7Ss*34Rx}}sHrV-`s*M2^o$w2_nN#LWP$2`9eVfMzu2*NI_;jb)@i4bAlkg_ zw0rIGyz`$Fo?OUfiokzkh0!hxqRrPr?lrocgU-_1pXNJ`u*3xZ&yv|ZSrBcGh7?Ht z-#vcn*%yUBeM8Swf(L%HzfKnDL2X$0;hWnJoY0XvP}h{ytd|9O9@9FZ}gvI{LxN!5S(FR3Fbd`OqJ( zbe&_#dI)aBJYtiDQXJ2&{IC8x8hjy_v4DAVrMXTPxPLM6>aXryH}N|?Qw8d7bGJE*-y#cCm)-UFe~+gs{+>R)skX^ZC86Y=$<@FA`n@}@rOgK$ zgKf0e+-t-Az`lss31vWbXo_T3V9AgbnsS*97>j*+@9�pJO#FEhA+WX$BEe_}0nO z?+wlt!0QJ!<923Z4#N^HSHPhHuc_=(F{lT|{ea;LP|-GGXwN>r$P z%7_RF#+1v%LQ6(ERXtUMi%t$aTRM>QM=N-t&C}Y^xzfCgN00Pa8yF+?-Q^2lI~b|o z@86A`hZF@@C2HaU#m65Q^#167?ktv$({U4?#L@}fgh4^E{8%X>WHVTjs66-3r7QK1 z8}7UM^lu)sS=zUPr5QS7%20yN>ShfJ+MB<(6cJj?E|TevmOg#fa4bM|rI~o1rjUF*N zSCB7{8r;uPD{Ebk-N@e1b%30154I$G0}a?4iq6vEO~c(-M?k*eF$Ilm8tKjq1v=sz z8Be}oBFpY4&VSQ&@xEoFK3LT+*x#S{+GijR zo{?1~k6cXDa{0wNK`%(t7}I^)+P+@@J#s9&gvKl48Fm7)#TzhGK%Md16|}EnpAp@_ zNnV^UPjIx$QcJdF4K^Z6YqM)rsNP=RhJ%Ww^`81Z1vQj6Sg@a2YA?52u<4<~n>y~m zxd&)V$4&)x8@f$6npxUw=rt*I>o@e9a4xfSz%XFK@dGVw@R^jB_HFYGDadc|n=o0ZOV-oCf)yl~sgXFo%q;4KK2q}vZIVQT|VrK=Cy2P*~ilP)}54aI@)Dpa!6+3MVk zOb68G99B?MYt!b;?M9pWnuZnB%CxeI&Cb=GrApyE?VdYvSVQ49_x31h^%}f2$F5H? zmJV76n=mYv2K$1;%E~=udom;VJ5%4f_EYzsiy9-1)I=<}2)hG9mu_wJ=btCezMk4% z{^nW;HoHDE3|ZQc-JnADY`Y3MbScOWsGsRqp#f$T2gVIM)^ zq;DncSyVHH@)r{BEuzv#6QYL`J;{Ur`N4;9r%^)TKW*t>G92ZkCo##30qMaYiS#c+ rMnW=C6O#F6A|#VTLNYBuNQTjb&=cf&*O9khcrtfwsiC~WSVsO2_WtyU literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cctype.41E40031BAD0B66A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cctype.41E40031BAD0B66A.idx new file mode 100644 index 0000000000000000000000000000000000000000..7becb3f742e700051f0d80f73670cdad7254bf45 GIT binary patch literal 1942 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 z zIFL7QsFgz-0PPUQZ=E?Cf zbqyr;8H|G1d_v)A&n_p#zXug=KA%(jT~tJfNQncdHQ|2A0Uv%be!aZ-199;H5m zNM=#D?UaWy0{zl-*3bfG>NBJFj6T#^=lz~f{>A*A+H`}j%8vbo_QfY}Z`8Ys(pq~z ze{RD5ES+^ya_BRo-_F@&>pg|!)CE2kr#Y%h&TZIronR$Qj;>-8qB*xpnxV=s@xYIp zyfzzrD;ay%+q8bq!p%DS#p9nv-p$|IZPR;Yh0aP&=ahux_BfM74lU!xp*gBd8V5P5 zj0Ktl%0xg8DEBk#JeW+r=JF#MQ@Q4#dwWBSTuvBsDP+oGWp{2 zqe7#?S(5Uk{m7CFmoFVG9nMnn++;D?@8|MU!Gu&Wm86=B6WuEf^rcyt27Fmg2SMo| zgk+zKb8nmhcr-g^05_JiKu{J4A$^I9yOMD>;L+@u4cu7H0YNz+giK4hcvfnf3#@1! zlnXprRsmlX2qeQjm%j^`?*i5=7lM#NFo*1*kYnJub~J~-$r9Z&82l`9gi#)zg)T8( zGJyEhy&k>i9XjLNJe@rxE?r*ndF`}(gSQE_d*A#dc5d$igU?9+Oy|@C&n^_`-DVXp z+F2eFBiya`h!aky1P$be?$J5+x_;kOaXdJFFZQQQO-x-$W50ZD+p4@n!;AEu@V7D! zsH)9Uih7)t=cSCzj=G+?&)_@5?o8Oa*XHKF|N0{?wWm*~9jy}`;&A!Xji+nRsB`fK zjd2U0csn%S4k<2&#^o%NXNB-MqIpn=j3c)5#Qtx$3_YgzKJ+AU?Pj@oll~(n&qQH= zTJt0n*)Xx|dO(VBOktoCeiufW-iwB~Ot`Yt&tnnK>&uGzs+dz%Wje?9-kfD&ace@p zF?cJm@8;mvchzbvknWy6mrZ57vLg7lX=f zcsZ+1=q$t8FZPe(`v;vg_*MgVEsYM5*_<=@jPy@m@@w(fh2LA?nUp{@jJQ2`?&KOZ ziX|m*RRW4tz*R+aA#g3Exd^xx(Oe8%i)pR|f=WQeRs#ezG+zUPYc$^gf*Um70)ksK zHv&N;%}qei#ImJq`WnaOs*8H>kMD6!X{r}EM^Z&DR(ov}G zz~aFCdLu4B9k`~`J6&18HH+pP;F?48DIhpS?{u95f^#(213^8@`3Dc@t*BA_(BqoY z!>{BaewIx?;8g<6Lt?~gOy1?VVC|HtS9@HFYt~nZCO?>V6+g=EVeFxOvh0ytLSxqb zZyIn$ia~TSh$R{Exyd`O=`aJ>6B_pqOlTeJI`@<%JI-+SqjRq9}?p zjnf`N1YSV?mYfHgFq0`L^g=KwrMb3K6dG+zVo8qGHVyg~CV0B_OU2w)@4 zO#n90+zL!v>GEp_rtLJp0H!Z!&Vw)yQu$LtsHAx(gga@jgs_t4Y6z=ou7R+I=0@nz z2m{&jYk^D)v|)J*^4NkX`CjC)m*ykL;|R?skjDv{FCveNG&drTMw(lZM=Q;*kjE>U zH*h>QaH#mVa*Vff>`D6With4Oh0M8b@Jbv1} z@U!7~TX=W`)$m2(qA0c-L`6nPS&~kc&SWV$E_oSCX<&RBn8b1h@XG)}EN271Y?^a{ zcP<#m%9Y?WgynW1ZU>85ehJ3Eq{}xS2IWIaUkSxZNa?HKcon4TV?PYv52>0h zfsrMUs@p0UR7HnZ4aL=Tc(rhREgfDR46mcZYk-jrba;2*+jk&-3z+7Q%Ws8It&l2@ zPtn{@k(iYip?8YVbe4~z@S})I?@1&+iKzTtLXnpcmHsns{3NfO^#^YWx<`73o5IFWi_82;G(x2g_X--)#DWzm~w zY1PNtrmt;3J9`I5fwNP8rWdQJeg}Hjp9A^8FxtV9VfwP)YA0t5!(+d-WIt+Wmkgtw p*fNZEla67u&kit*Gy5~`q65R&vEK^Vj~495-t0&1d#V`b{{U@}^Vt9Z literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/check_memory_order.h.45FFDD340ACC9CCA.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/check_memory_order.h.45FFDD340ACC9CCA.idx new file mode 100644 index 0000000000000000000000000000000000000000..3ee15867609b57c2cdfade4d2ea02cfa6b582e87 GIT binary patch literal 432 zcmWIYbaPw5$iU#7;#rZKT9U}Zz`!5^#Kk2=nNNT;7^G$9q+03g>pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|Vo82(X0m>AMrv|)d~RxPeoE)ZV1rs foJ5eC;-chYaS(%%PgmKZytr%~BNGD?NB{x=F%EQQ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/chi_squared_distribution.h.AA839B6E0FF025AC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/chi_squared_distribution.h.AA839B6E0FF025AC.idx new file mode 100644 index 0000000000000000000000000000000000000000..7845e64236e1ce4bd3dfb2954ee4d2d15a9fb495 GIT binary patch literal 4652 zcmcgwe{2)?760Z4BzCTlA72tDcEE|91ULQ_k^;UOr^sy`NU$4|RPl;%&SxiFV#ndm zriKz@B2+f1+a#dVBu2H3ZCX(`w$XMQdw1^h z9hS26A8IL2_rC9a-}k-G_r1>-5#9Xo!}fYYg2~N=Oe)7$5<)2a$vH{9unazw-x~W9 zJzRp9MIkPNA;o9>!JWJ`;%)=p90=d{|NSj!1J#kjmH&r7LfJgIn#iF{7X z&iJDv;8xh@&_~NI5G`AZmYtDv*3TJJSj0KSr$_e8rqnb(OZIc`*n^1|51Hj9J`>MD zG^HkeFug_Hv>0yA#mWQ3iZK>O3t}u%i3&bMTFg&}(c(ch=RKv+`uYnPLca*E{s8d{ zX9n@tmeOOSdW9+2_)TKrt7Ul+G)tOLG8-jhjO zVhEYNvRXVndE8UWnAZ?GY#;7Y1*tB+b^oeMoZfzK^nqH&0_Gw6P=_keyejruujzX0 zKrPb(=BPc|r3y5k+dsS~|GIT+4XJk!+SSpuP8Db_%s;s6-LWIXwahBm9kd6Xsz9^< zM<1-4w3^1@Y}no1+1;fIG+Sdg>gS%hJeCL<9rjEV5k0q$VnA}=E`YrnW*d1sK_*8-BPbMsm6HjtS zYe)x}+i2TrRiOFZBbP6ny7c|ywM;vh!?y4mRiOE~HwXPI*zdkl#n`}XYqfQ$0?lvU zeCBTl`>)OwcSl+y?NkwHZuEZV?1lHfJkJs>fZn1sq5PwUk=NA$zJ#u zU-5US`kj$8PESJxrOB$K0bAsa5BFzZ=Pd1I%gKJjH@@b2!3oP!m1Mx0o2oA!Jv``e zRaj{B(dZ7G5uCJ&7Inf9WriJ@Uh3D)?Z{};BBZj^x{1{=Dzil6E$aJ za6JW5XvSq^1UOQm1B{JK0I?MsC>*-_VfTxsgE;@-tqebUZ{7ZM#F2R_2eG5RXb8(_ zyFIu5gEJ@dusl#R(2CRjl>eoV|5WGNTXsDNCsVJI1|E55+aQ5J0t$Oz%^f>VoIS=} zJXjVIPlPHI9zk#95m;781eXt3Bcl7S)88z+lmp(T{&`{J;j-AsHuo4+mcbw_wO86# zATTU-xE(%3jiuc!-5rQHOF52v2#1!XK~vC%SIW|mDP+U+0lrlO4ow>}4cV|WSvqVQ zw&5TE{-&r6@ds@nx=qv4&1pM!;3>!bt7~5-FH}-0m<0=h51LbO>9l~*uW7U9Sqlb0 zI)$51xD@Nh$^jOILva~^(De&TUF%(&N`ypRVb_?ZdDnY4VgIqz8}^QAS|8KLYB9Me zw_O7;@IYV-UM&E)DKw}-7B+?3F=LiS9Fblmbe3kCGo_)$Rj5j#cRUK|9XdwgcI?f! z&Yyq!$3KssWLRomW^TcmVyUg#WO03r(Q<6f3_v0Zi?ZC0gPbOr4`-&W*fXcVAv z&8F{JmX0=zc4K;=Z5Vw-(_#&=?$WzLV;f?RXxjMt@d(~5P*u;=X1rOJP8+A&QHzG( zf9S1y-#%S76&MH*QJyKR>gG$QFXgthTxoy{uXL1H20Fj8Tc^2dTvo&fuDHgl(|nAt zNwaYbr_%yVK&SOH{W>kk1a(@73F)*UW=N-nnXpcaFcF>g0uU-cRwFE3d>;dd~ z0AJr4-_8z72R?b_@8G?XtZcw^aI(N#dGIj-Y%f?=o_UPzI`drbufFoyf6DF~UjH<& zM3f~#-llw%u9J|`QG}GrCd8z86@QKR0sr^2v&Yl4DL-Re*08eC)Z9c$02A^*#g4kj literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/clamp.h.8681AE4D76E3C110.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/clamp.h.8681AE4D76E3C110.idx new file mode 100644 index 0000000000000000000000000000000000000000..56bb5e81bc0e068252c180dccf0dd820ceb90ddf GIT binary patch literal 1194 zcmWIYbaPw8!oc91;#rZKT9OE4GKc_iaY<3;4kjQ21T<8t4Xu*%^NLFpLJAbr%4&5K zRH}`TL~`=MLdHl!8JV@3Mq~{l9mSp7GF(l_C<`ys@Y+*>t%t^J<*VlKp(hn_8Eh^SePD;|(D@!iO zPS;N?D#=VsOfD(bH!?J~Og2e2(+4>ksH3P@FR>^WgngQx8C0A7F$H&8M)(2axmq9=KfDWa-b;ZCSE1|KUfRUA!nGQ_3DOOet#g(~9PQawg zE2#6!Oz>0~4+9$y1BV2I1S^WJ zKw(i9QDK-c%sEU_U}scxKX|7-Poi0dLzPce80M5{y&t=la_@@->eXb>l!WQ6jj88W z4dahv?zzG${Z8 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/clamp_to_integral.h.96582E5A141DFB65.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/clamp_to_integral.h.96582E5A141DFB65.idx new file mode 100644 index 0000000000000000000000000000000000000000..9f1949ed97c6fd3989c4198db3a4c5a6b553b950 GIT binary patch literal 4854 zcmcJTdpJ~k7stn>a+zx6+RV5$x~MVR{Y)rb5M|0CH7_;O7=ytWW=2U;=tebBo#-4y zrBXU7$)Q9^DqTcxHR-Aw<&vn5LwSGuIq%Nz`TgI19-djBz2>{VYyH-qdGPn~^6H*Q zA}t8@Nsx+_LQN8hWB`5?O1VUz3|`<@m?T>4f??PK7c5XAmMbt(NC?JWBZ`d*$AogF zBupq$DlmIHhgl*=kuxTeNn^n~F2#RD(ZZN;%$aTP$hO5KF{0@BP%#!Q2@xeE zU;=?i78523|H(zz$`Ac;|m!{x$gcEnFE93K-Z4iiX)BDqZQQ%i}Y zLgmkGCR!quC>3Bg)=5L~wUCR$6k${nDZo|x;px^@Bn<S%&&bIjb15NY7{kT!|bIA-gxDFhz+r7hjKX~AfK zY3{VS1b%l&%SrIrAIGrB$*(RCwr8`)BH3kkJG4B!JGGJQf<1k&l1>;?0ESDl9kBRW0+{95__cFx??g&@0rq8C&A?95X92yZ7 z=rA^8cxgScp^AEWy&MH(!~oA?ck+D3sMe#L$T&> zJ`?K$f)|5qc!B|iPP;B1VE7_flV|&dU)$pgPTrJiYDt{@ccbyc>9?+O@siN`Br@J7 z=(X_!0fr}dy61*N^QoTYcsBG2q0}>z*v4kB0NU(X?0Lk8QZW1Psv_M>{{h&UMz_L&4n3PhfZ-+Tt8}?-d8`k|@L}Zce(}w3jvxsU`P!8E!Xds2 z#hTZe|BlQ#yaCsSR!;V-&R#)oZ8E^{c&G4-F6Fq~O2f0Eb$(9EE8Q{Abu&_OOIu?w zf9^#b!ymw_NWNdjB#zk%FzlOGIUz&2Avt{%gUrO3_QV81w3O*T5@C9n0TE65d(lf> zueuDN1iMVJSSn$6MePC@?&(73rdGRIwK#@{o?>h4ULu;U!n2{Cy6f6=dD0WR0ftXb zMXUU#ash^0IaYMY`(Sc9j$x6yq8U5GcoXuGY@?L( zCx&%{a12jR+K}pDW#V@P!2=j;Fk-0VD8O*z)Ks_35Vh(UqJ2n3?k+NXieq@KwiQP@ z)66PQ0t~m4mYkV9HlXV?qHQhn;U$!noJH`9$X!`)Tq?^DJl0y-%F4QiV|b%ZS2x#$ zUaP4B7%rK3CFlD+!R!kNo}d}`Ys7jkj^V*J_1mbpQ$uhJH*cEVXc`;Zh-UjQdF)v? zqy8euhMlY(2z^?f>v0KSc-~bS39hVi_ZlR-=;()_-Ui-f1XCgl8J<2#IELHldv8L` zGwizpFl?~Nqw0x+Wx-W|;gW#^Cw?)R<53SV+@(*TjR?N^Min>B!4Jhptc)#hGrDmM8ysDmrE&}2a0`4tnp>N*iD!eJ5%s>04gXx>HOn>~n8264@_X->H0c69z zGpw^^uFRL60K-l=8|qfiswnG5@P$K(DJ@$VJ&1^Yq{ZaW>y94*hP#}$sl6kv{YbXME}whf z7ixV57+$8_!z@?3+RZqIOK!b(%fBf{?+YU08avTw`>@X!e3|?i!9+>0Ol~thiHI|S zv+7(`%K&&UJUE-=)B<1O$w3rX?{R2JJ@E}-*w?$K^!Wi{lwpA3L(!(TzI8ooh+}x3 z>-FxqaV8hw7%nLnM+?{BP literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/class_or_enum.h.08AB965AA082F9F6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/class_or_enum.h.08AB965AA082F9F6.idx new file mode 100644 index 0000000000000000000000000000000000000000..2b7eb5f33d6f4a0a49f10270ebda08a3cf43500e GIT binary patch literal 924 zcmWIYbaR`+%)sEB;#rZKT9U}Zz`!5^#Kk2=nLC((3=l}m%t^J<*VlKp(hn_8Eh^Se zPD;|(D@!iOPS;N?D#=VsOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$_3%%oW#6zeKS2H z6Fmd{%)I2B(v(#FoXn);iVFSs_~iV&B*^oyL}w zR2HPhmlP#t0=<`691r#(&3%SuDP2Mn&Cb%i%=|pMdbB7tH@_@3KDn$YH4SKSab<22 zDCq)u#W6ryue9ch$+NvYj695@45HE?DG+dY`oY43!AlV+EY2b>3=w2th}QeDYbp1> zNT9F+gMuVXxc0sIxnKUfH!*TCa&mBL!Gw!aa}q)9;-chYcMyXyDk0$E%Y{Z4S(%tw dSlJk0`3NY*29k#WV6KA!Rv3eU0h9ru0011>6?y;w literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/climits.E28CBAF95D6297E5.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/climits.E28CBAF95D6297E5.idx new file mode 100644 index 0000000000000000000000000000000000000000..f46f77c3e172699c0aa284ea833eddefb63c64f5 GIT binary patch literal 424 zcmWIYbaPw4$iU#7;#rZKT9U}Zz`!5^#Kk2=nL0pmFi6YHNww0~*LSwk4=qkDD%MX< zO48RWOD@Px*H0`e$xKU3E-BVGGBmbKHc2+qPtMOR0O}|z)=MnP1>xkJ#JqHUGd&{{ zJp=vByyTqHlvMqk%%tRs3jO%_;NCX0kQgaePtm2~NVr38m7S2E>)56qcJnNp$UCzYF K%)ktiga80`#d}i# literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/clocale.845299ED330323A2.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/clocale.845299ED330323A2.idx new file mode 100644 index 0000000000000000000000000000000000000000..b335d2e767362c13cbc807c5f6f806702409318d GIT binary patch literal 838 zcmWIYbaS&~W?*nm@vO*AElFfyU|Wt@QQv zovrjki&Kk=^^=p5^!3V;3$oMo6N^eR(-MFTKR!M=KQApaou-yReL_<^Ac3Wq!H@&= zP#FV+3uYFlmOyyG@J+F@ijOz4vI2&6Wo}Y3FqqdQxVXOb-j*rF#Kr**cLrt)4hta$ zPB4d&kyWQM-8VJ&TdNckD@=hIhZ!$IL5ZXJp|#il|B+&1hbb`UFc(B9U?@sWE0zSt zD@T=_&Z)Nh9E?27AR{WeAH36^C(*1|T64wZ*oTQy67XRNs1&Aa&nq z;VYmpC@^4#z`_b>2(mCRgmMx=_7@i=7b}Appez9eOfUum1M}6H!5PKxqCYY*u`mDt Dt>@-C literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cmath.897A1FBCD85B8687.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cmath.897A1FBCD85B8687.idx new file mode 100644 index 0000000000000000000000000000000000000000..dbce0e5f2d0c0fd5826ba62df4fd29c454882760 GIT binary patch literal 25450 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 OntO`E+9s_O8o(dIpXK`i literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/common_reference.h.53D18AD8F96D0322.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/common_reference.h.53D18AD8F96D0322.idx new file mode 100644 index 0000000000000000000000000000000000000000..e3ddc64012b31d69df2f3d55bfc9fa8f80fdea0f GIT binary patch literal 1596 zcmc&#%Sr<=6ur~;Yo{PqiuePQT1(NcghI8t6BR^o$fTJX%uI)5I&{#D_zix7pWsHc zOL4Eiplg>dO=!n{fztywIh+vA<>qp8)a!PeIe<>TH+E@&GXSuxLI#3Wvx;aqjMFwk zsMAI#k_w54Z6h-z{?!0s5ikdnK%&Ox)(&Zs79vB}S2u(-v2b+|j=ceDnT@7dN6aI9 z)Tf9un~cZEvdGYL*x;W{g2<;%H6em1m=rDi(_MSQeCH&7~mnPLq;erZ8dx5KnBS6z8fQ>NDhH0#KOK@|>!_AVxYS Y04e+N?cP~`JuMmOOg5J<6ia3J1*!h(?*IS* literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/common_reference_with.h.D237B3CB1BE83226.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/common_reference_with.h.D237B3CB1BE83226.idx new file mode 100644 index 0000000000000000000000000000000000000000..741207e99dcf453f0f1bb7915dfaa5d0630d2064 GIT binary patch literal 808 zcmWIYbaPW+W?*nm@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xIkf<208n3UeqMZ0YFcVhDo`xGJhLQ2FN1#8 z=ar=beUp@v8efu6KYNQ4b5r9Ji|JuuT4p+pL$jo^02q2jiJ4g96X-*R;>z44P?7>h za&Zih)+?>KV)AS+4{`mbFA^xM z$e<_*6F&9#tZ)>&NG>B6BPR!^5lpx!H760oE-p$gwgxdki5m(Sr#-%W@KpQti7ZUa UEUXN`8~_8bL=WV%!o(OD04)3O>;M1& literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/common_type.h.D1E41E04223A2EA1.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/common_type.h.D1E41E04223A2EA1.idx new file mode 100644 index 0000000000000000000000000000000000000000..38a446e0cd6f493af036156fbd31829f9f597191 GIT binary patch literal 1922 zcmcgs&1=(O7=K&4_2bPxE6!?ln+OFbNi%2X!dB)gvsH_*Ze>zgnx^RtCT&U5()w|l z9;ToN!HeicJUJAGco;ZD!LfrE*+uXm!nTX(U>>}PzHjE+^dDG5^6>ng=Y76@Pk1L{ zJ(IL$hgkwNJz4XvBc%7$FX3ra)lW+hRmHngIw^SYo)4Xvq3YN0IgVp)@N z4J}+Q$XVXl^^zq+R%D~fplvE;^AFOEEXSd{p{iz<(Y3I2fBD6kd8)P9?&@rUaeq8u z3g9v?4G@3zXl8yp7{YEljQXPiQxLZ}cw}|)vKGT`2Tb@A0aFn7oxkpu^)7b;EZFY zhREb77LQG0$;8Nv$0gO5xML#PL! m)l%Cm703U7D53z+ZmDp!czf~P+l_}#57pAz*4_bHEayL;uQ>_; literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/comp.h.33EFFEB59228A79B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/comp.h.33EFFEB59228A79B.idx new file mode 100644 index 0000000000000000000000000000000000000000..6f6b5575127d73c23ea2e4406417d6175746f8b5 GIT binary patch literal 760 zcmWIYbaVT_#K7R3;#rZKT9U}Zz`!5^#Kk2=nI{>63=l}m%t^J<*VlKp(hn_8Eh^Se zPD;|(D@!iOPS;N?D#=VsOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$_3%%oW#6zeKS2H z6Fmd{%)I2B(v(#FoXn);iVFSs_{5y_{G!Z~j9jory$l*#mzLwEpqd1eeI82y_QJqO0&T~&Xb%Vv6 z|288RBPR!^5=_ybnBKLDMkhXj^h$`E!i0f(CDh?Opf7R~K~lv<$;J901~3i705goi Yz`%I4zB{poqs@nziJ64~l(?Y)0DWuOg#Z8m literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/comp_ref_type.h.7C830A33ED20669F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/comp_ref_type.h.7C830A33ED20669F.idx new file mode 100644 index 0000000000000000000000000000000000000000..98b79726fe38aada2b5764f6c2b6536062f6dc8f GIT binary patch literal 900 zcmWIYbaSg=W?*nm@vO*AElFfyU|Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd}2;|eoLX!Kn=qWMC+?TF?IJN|zc?wFQfX6ihg_VD6f~Q}T2` z!g3Z?FyUyuAG?-v?~4QqJ1{s%!h}ye-`pGKajFO?tjD6K4io;eaL@G;FR7cXJd6?w z5~eU=9!6;eX(XPqf-(|MhfN3WW*$ZpbrTzyzOv`?UoM${zR4`ZsAHgGUeW#Fo%TG5 zW+2Z?ClHC3sFMNX{fX&at7vrM6UYTj67n#UfG%K?M&c!IQ(^;AEsnrl#5cO;~LBE*@W;a8sG-a9f3|=a$896Vwl2#+svSP6k#CFbH|8hPn z^}H;L#EgnynY`EgX!CP*i|&q{o>ODD#s{Wp)N@uiT;XWzj9=q$-FTdRzn|=X{bJwo zJ^yHTOt737mV(OIfM=GiIy*qf`S?8DJk_r^UF^B-POFP>(`+|r#{6I19U#3=l}m%t^J<*VlKp(hn_8Eh^Se zPD;|(D@!iOPS;N?D#=VsOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$_3%%oW#6zeKS2H z6Fmd{%)I2B(v(#FoXn);iVFSsc#!hMqExUpARS+lQIwh*U!GX0mq90+;Wk3ul9-f} zN(amH(lXO&?8DNM%$&@UO8vC_qVmL|6riUViYs%IK#^LMnpPYGr1eT`u9!UA%fraS zD8e8j4Uz%@ho>JbJQ%zbfx==eV!{wX28L+8AG?-v?~4Qqt1_rc!h}1&?)jfw^0bhV zi;;_iOBW_wl$w(WViy-B7wdx<%pd{+fQb$UK#2|t7@N;9>~eZsC(q2p%)$TwEHT77 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/compare_three_way_result.h.4A4AF3300AE42C79.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/compare_three_way_result.h.4A4AF3300AE42C79.idx new file mode 100644 index 0000000000000000000000000000000000000000..810c7c24f26d9215c031b43312600c4942f6f0cd GIT binary patch literal 682 zcmcIiF-rq682zp-*lM@hLBzqeLq4rXv7LlMv5ta+C>*&o*M{cKBgxes6n}z0LU2-W z7xV`>yE@j{(a}V`pU?*%dA#J~_CZ8SxNeW{pExs9D@6UZ5r z8MjHJmB-ACkiz6R;>@{PKhSv`x(~MY`qHi>TfF<9FLkf(HK4KWwj7R@Ux&wVvTNmL zrP=rs0WQe*^Zmx_xs_Yc+A8FI3a2ktq?F8}}l literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/compiler.h.7B172C72923E4560.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/compiler.h.7B172C72923E4560.idx new file mode 100644 index 0000000000000000000000000000000000000000..2b794915393e2d183ddc152fcc43f07a47010881 GIT binary patch literal 298 zcmWIYbaPW;WMFVk@vO*AElFfyU|>`p#DRp~b01#rnxf zN&0$a$pzWz`iVs)nQ4j1CB^zihQ^l3Cdp>{$@#ejKpjQJdWl83Ae@|&n3t|^re|cL zXP}>%mz-0YlB%DRnUq{np&uWgoS&DLnO<6ySdy8a2iL5Z!BAY8n*_4IC^fA(5lBz= zUHVu^a1sL}7b7QI$_s9>G)NP?Lo5zA<@z pOE6-a4KzuLOG*tU474c+WD!GgQF1Xih`|`D-;?)2<-#@w1^^%WM!f(4 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/complex.h.BE75731799287E48.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/complex.h.BE75731799287E48.idx new file mode 100644 index 0000000000000000000000000000000000000000..fa740551df8ea4ed6d2f7244057162d6bf25d560 GIT binary patch literal 638 zcmWIYbaN|XVqkDi@vO*AElFfyU|FV!6^?DhFQnR3AU!9`@uWyc@oXhdOvn8<=z(wG(??2 zT@t4H@bTj<+s?+X2MUX_iAuqQi&AqELG0q9gf zqGszTgTV3v#gvp#YB%F3E2U`O$(d=!DNsp?$*GK%Nuj(m7klu6n&z$Ehq2JMQYuBA zq*ZGu&c;|=CYG{rB}_#H<(-Gk%#{Y%h`HQEIb9A5tNu8^maMGR&R4z)0;w82jov zBmP8O?Kp7f!}2h(c^3q`;7Cc}s7^4weQs_vjKy1EcncgQS$lT2tKE9yMO+Ypr^cm@ zmzoKDfo8!BKUIydnvBq_syPy^Kl%H?eSPKQWT*RCQ^J!h!+Ck7zSRYbwb8fZWk=dO z`)bcIuu3DVG`_WMVRsg#6_u)Es^5^N8jCNFS?;5YcMoZLpFc{G9qGgk;(m8YN0zKo zvHIEJ?Zb{1ic#MI!45b^iu%Yi%1py1)gq|C6`_i$QuCbM)r3BH`Xbpu54FwzZ^N|p zONJ2mOmgN7sV{*WNCQI4$Ynl?_#^IS$_#}?c3gh{!qb;m+;Yk)N!uF6^lxSYP-! zdBFUOpXM|-mp$G&K=9?PJVS5q-8R`d|JoSVam{e0U0l)BkW`;-G1bN_P)oK6yeg#1 zC)>60{0C2u7{8Sr_u#(a^iAW#E?K2JosY^Y6E+-{RoeT_f#+|QWS@{#>RH^qIwxbw z53)*I^T$q%UX}f$=xb7ZlJBG=@VW7G5i*CG!zItht}gq#E$yRo;RH^Rl*+&1HKYci zWHK2cJ*h`1o6JTihs;4Jm&`>dkIX};m@GzUDY+CO7wJN%7Lv6P;W|jxp z-Iv8YY=$AtaD+eDTVc>v7$)(PEk`anvtq80;+kMowA4)C8cc&wGM0?cOl&4X=~y~K zdQ6W{HkOT04wi#ZE|!Z>9+roY0W%;}gcTuFj1?oa6kCdr3v(f~3|od!4a907!nF{q zMcD%}56X2At3$aSV)ZCDK&%1fCWtkm+zRnl7%N5eRQ8^RuhzP5iz~7ue90S9Gl7?d zm-)!u_%vt!pL=eL?-^B!N-rf&Sc~!)|4-W;v9IcVRhHB&QmM)!Q6$m1cJuKk_XBcZ zzF4%TeOyxaqYwg5C)0iJBLXiXix8@TWDP{v14$3cO^|FtxfRB>LY)+gb@pt2W#7)n zqW4Om6u<4fE^j$TMtNRlK2?aeGt%ct%>=H`&?8ioQG`%&MlnJ)u&@S}_)uCJu*?MU6%NwA%0oo;2?%f}CwlM9vY(|DoUaNgLYfayPd_LN~xwH35 z&r8|fJZqu7<^-M*&Uh=q-k;aS7bpNmOKkw)C$}YI=C2oPM+Aq24pj^zhKGfZ7&$6( zbOadY*YceU07&1=L}9pJA;e!L{8jIVw*E3)ssJF~f2HEPmIB~AYQ)Q{BnDupzxqE- C5#750 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/concepts.5626189FF631F015.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/concepts.5626189FF631F015.idx new file mode 100644 index 0000000000000000000000000000000000000000..800efcc190a1965d674d523da6646465bb0e00e7 GIT binary patch literal 716 zcmcIi%SyyB6iwO=NSU23TYHctwlnltIB0+I0}e zw5~Fq4{D+Z%X5W}UQ^2U&nS@!7T ar%=9rO!A2Fl0) literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/concepts.h.04CAA957A0692B88.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/concepts.h.04CAA957A0692B88.idx new file mode 100644 index 0000000000000000000000000000000000000000..ae0d6810e015fbacb22aa783760cf2efb4ff4e33 GIT binary patch literal 1564 zcmc(f&r1S96vxNkx_Zk?h=(W$I_xVGG4T)yk{tsNQLxO8PaE1*nHfc)Ti5=L{)r&} zilAc<)VX7a4$WZO`VXu2s$Rap(#$RFz!LfTaLW-yNq2T-#sReK-! zka?3Hg2!Dpn}Or7(U9R-Zy>3U4wd$G^uRtJL=52y1yv)VtFcTk^0fYlfpCdWTs3Uzkk+G$=Q~+%gOS_(j;UT z-YDt5?!>ILm9@45`_le;e8?{@^xsX=+zf1i9yMADChv^Mn#VFyfgmIv%HVR=PAqh- hQ079J4`q6>=eF${$j^+)n@i literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/concepts.h.259B56F1E2A3749C.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/concepts.h.259B56F1E2A3749C.idx new file mode 100644 index 0000000000000000000000000000000000000000..051f28d941c2bdb8fc2372da577ea608aae2eb4c GIT binary patch literal 4062 zcmc&%OKTKC5U$y5UYm_cHt#2R@FYyf7=q>`1cLD>cn}XmZ%@yr$;|ZF-LuI;{(`?i z5Ip!B1i@TAdN6ntJm}eDPQhxjvn}4YQ!wneHPiD=Rae*J`O)Fw_ZfhL_~OB$OFVb{;%@%y!uxVKOUlh0-Ba znY~y_^A6bycXq>VB660NF(;{Lv$Hc2MNH<57x)6IggM5K5G*|Q#;LXF*ts&(dBWJD4F?lFMnOqRG1#dbyiU2*JP1* zCG$&}$*y0*Lh)EIYCN7;#XDt6mA@cTJf%j++#jQ+8IP#;NXRqc-LFO(nx?%-DohSM z_F-)zIzujINtt6ZmpM(bxOU~q@DGMCTu~zxmin98J#xKS;9MUGe0p z(7&VqgrNU{H~#`b&w7!92YuP@H2Mcje2|$BZ!-Dv@?IW!dUSXgwh1{%kH#4o)*yt0 zIJ8mX-74>S! z4lY?fpnK77FSCQ0yJfugRVcNGc|7oJkv{=VYMHYnHJ>J^d*H-#R;VG)a_Y(B;drCq!w@LKbK}w zR&9r}G>ywb7U6zJx)m-D;IQSex`(1?-g#FYt~=avxahF!unpa7KhB@u d`W*&y^NoeYrRH+0v$EPIUxrJq3<%^U@VQijI=rI-A#wBYt>7qAZ z^=7GPahWuLN>S(SHuZfTwK&A)1;|418G46(141YiG!w~GKcInV=A2m&sgP+i0lhz( zds4r=UgyV5A=v5E(AN30Pa3ob?h8sMv4q@7T?*}9eH5pC0Cr;VwPM2TKY>2Rzy*`y zlxY#Q@=x~5tYrX&vOz$OU z&(+t5N}=LRlF12s%f{-<$I=Gbnl|>7Gd0>X33+Q=ecip|Lcw+1qC1n?``+jMW%+T> zjINQ|cxo$<%xY8|FRU=NKaIgu5HgawWe*jmL1783D literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/condition_variable.h.FB8A7741F32CDE7E.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/condition_variable.h.FB8A7741F32CDE7E.idx new file mode 100644 index 0000000000000000000000000000000000000000..0ad3878efee1f1ca4e554402d98826217b8e683d GIT binary patch literal 7936 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/conditional.h.A60C42E31A26E14B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/conditional.h.A60C42E31A26E14B.idx new file mode 100644 index 0000000000000000000000000000000000000000..ae7c01eae8f9774e2a846583897a9f8209104a1c GIT binary patch literal 1226 zcmcIiO-vI(6rPr!w$rVG5QRvj2)3p_J6oWj4IyYFT0NM6KQSKacDoB3w?FPIrhpm~ zJs1sKJa|%19yBHz4@618L=!j|Z+bNl19~v((Tj<1)=sIBcyp6|nR)Mh-}~O1Hx5s<7%Fzm-!=pPR&m&VY4`t;VI>+kfq5WAmUG_G%#hPHCa^CmMQBN z9YjhYpVckBke7|>bJ{|hZm0=DNHRfAQq`nH$z+IlQ7N7uBeH4fnygrqbjN!3E4@k| zQ3|;tAWSOCW{&-!J3mJH#O_{EB6?miCbB9q^o&v}k#rjBYWmoJE>hJg=&Lj;j>CIq z6N%rpDzJ%*PmobXi?S)hR;XrFib@gxU%uENFfcEolex@&Se0$_Gw*wz&h4sqy1WPn z+5$n_AWscjCP#hU!cfbFQy;$__Byxt5DvS;f^CqSEgC|zyVs_D1J7o>PB-ACda21a z$W!ZpDBu^j>Q|<|D9-^eARKfD1>11^qXR2Tt1oYUX7%fEs4Wz<4G$wz)#x3d5+^Rb z>s?uR>Tl)Q$q#S3r07%@vOR83n7esJaI;bHlCPJSug|?r zKXD2;;0jd43pnHoRc?Gx&YFXytf(l=Chfdwl!u?8GORfLj|{+qnt> zw>Pv`-8yk+ML0~~7i`p|b+=#`u$M^6Xp9gft9*HY}_c7!~Na6y~!>RRi dSCa*TsHxB$4DR6^2;te)ju%D8&l?U8`USrrQ8EAk literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/config.h.64C4A69BAD8C2642.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/config.h.64C4A69BAD8C2642.idx new file mode 100644 index 0000000000000000000000000000000000000000..dca53ceb1895fa677f33e21d0f414d0498c4a18f GIT binary patch literal 1238 zcmY+CU5FD`6vxl3o82~>NlYf`A_%707Al3@?qs{LLC`TD61HpB7>j6Om`svwG?^?j zlkG0}AbzvDp!n6|`XUQi!EU#x6k5e61%2?%589VPP1F`z3O>{q?YVbyciX`Hne)s4 za?bsq$z{^%hur{)VrIHlvNe2#AU>9DRvruZLVq7=M%|dH)f-kAc|*51#^W$JD35N1 z!C@3-d|Vw%hgS1sYks+P`5#uXm)mno?WLRT`Gc*6=I~JK+lwz|5B+uPRQtr4 zXFpwger_=)JIt|$KMr?1t%Vye4=*~MULKu$etQYhV+nO!*_LvKqT`I?JgK}>>+uZe zno%yQbz4&>HGO}{R&CJhhGmBv6~m6nv^4dY3`Nb>pj@ez;)IYyob0knrbYBZfkdbD z$^8>VGwn)Q(`}2$gRv2PNFOG8y*7y_Oe?CHHTvjP&6ps=QF$o(38@%*wNWgQYNeo0 zPZP^7V#ny0D^0e=Nv>X~+v=1|XuO^3bD3B(*tu?$D-&q%jBPY(V9nGD$8fvR>tFxA zZ|+047v2*f+z`{y zIOb^~rcrUsQ|fX%>2$a!6z~Va{ES(uYV;4w)UAH{vN9SbyMF%q{miA;5g`cw0#6+} A1ONa4 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/conjunction.h.C3C8BCA48E138593.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/conjunction.h.C3C8BCA48E138593.idx new file mode 100644 index 0000000000000000000000000000000000000000..67a4f812496cdbc5e5ed7cab01d9ef4a07abff7e GIT binary patch literal 1494 zcmcgr&ubGw6rTKQnq)Vv)kte0)@Z9(*>T&@)uD!Jv|4{42!i5a-Ap!db+c)AHZ`>h zMQ>VrDTsoK7r}y1@F1d8yqKdWK@bElt)5gohzCL6E>08w0JAV}-hA`D`QCf8b7E|C z^i2q%Y<{d-(j6^`5LyR=Ikqtp0LT4?w@k}~ni^w0d+j2-l4(HPg$n479@jESlKuiP z)kF9KW@l<#R~=h39F{?pZ@6V@rgW~ky1cg^XsW7VIeO97O!t17qghUK)tSn)k`9{8 z$rFOuR4F$DPiW!N%GsH08MpW&YXYJYRysU`THW`B(4(xpe`c`zxVw!+IV^X021Q!@ zut9Oha3qF%Pu8y~;)-|xKku8^6S52;yS zP?QsLk|+Q4b??@$__m{dLG0}6OmVjG4~dflQLn-}NjavR;(CHe`iRVnIwSpj{xJ6P zG$fZnnJ%8(gYV*dB5b!HxkziIpTk#c$rlG|#ssjFC>iAfbE)NNarntifR$clfGhF7 z!Xa)`Ih#uZ>^76bwIh$`@6A;{!6ALIz71S5ey8V^{dM6pz+?~E$AfL%)Kb9V?OMHM sp3CZA!EDM7x~GZHW^dn(UYxxZiV5+yb`;|h2({PUwz@0S-FV&o1EC|!^GV%;nlNk|0VwWzhg9F(g3{CVYsJz<;X4hCIBypDRWPl@_C=A}5H5 zb-R(Zh7GUsAx4mRFT+YAvfF07$QH5=#D)T4e1{-f86hAate*+`ki%*(v`$BSko8AA z9P;ySHX21V&4z+r-Z#Kb0$d;@)FQ^?5jar{d95o4#~}_5r!vAyG$ReTPq}C~(NBGH z(Xc?Xv^NrDB_4|yaOYBOn4=|u;c+W?7>N=2cep{wv(_yy(u{vKQ!CPLUSb(hV%&ai zPy?40h$8O`4u$8Zb!UPS&DAje2qSTx!HzxA?feiVo~w>9eqO4@FO)!-5r(1yA`=+& ze#2|NhG+bKIqq=nP(-aN@N-d~4fzBnypm`C(KIBr5b*21hNIb<0bc2eVaf2Gp$OLx2ux`7ofvT0RNr zq?S(sI;FBTvi4%(onsVGG2!hrD`7#bQdAPmUw<$bN|;nlL{Oeo4v_>HNH2c z(66E64@!G-_k)St3eRs<>)ab$zeP0OI+E1o>nq;7`@_1IkN$6)FMa%ZQSM9gPN$^p zlS)g$n7Re$amE*qUz}J%cn!}AYqEa{^p_w@sYZ5a@tO&dUEN7_=Z}sxjM>|G0Z;nx z*Q7iBLG#-sJHEk7pbgAzFhi|X7nr+L?%UmdSt=iQ)j*Lpoh?tD<|169Rq_!&4aIem^6FD6ryJvH|kfvw?r!D-2^UBQ+v3Yb24bPBN;d@^=D0V^GiPRWnUB{|0w$ BS_c3C literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/construct_at.h.8575EA892FE66828.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/construct_at.h.8575EA892FE66828.idx new file mode 100644 index 0000000000000000000000000000000000000000..af414279537f1c9df7fb65527669db4e0fe8f14c GIT binary patch literal 2950 zcmcguYfKzf6g~?JvdcgjSOyB4uoe<+WoO!DLuD1alz@dM1gs)`#P!aLj-8z$b7vRU z6{|5MMiYp}=nswc{YV;96HN-*A|@IWe?g3<{bNmECPve={Ai6oyu)&LC-{m#mYdAo z^PPLn`Q|)kW*->n?|-rqpjRH4N-8$;0ziOV*tWEH%8B5tJKM6mV*REyi7a`*RxD(j zR!G$>Y)`j`+OmvVa39NB#Hu`mL`sk3&^rH z6-hQ0BD*@eq^Q&>NM>?^cvzT6R?@j79U0?7Cm)IOI|a><^pva!x+Y3fQ$iwvFo|gw znM5)TRU0odiMBo-0+J*JWBzE7`Em^vkStq-&Qv#xkQ9?lOG>iIm~0kj+SFuC%@m!^ z&P*r?+d>+dXvILHt|YYL7uL7kN@swx(-#MvxUrPb0nP zU8HW)vBmifUqC`GZmu|K1ed)6~lL4j)Slow));92! zl|Th}ZY#U^=u$&4?mf;xB{2}Y#NM?HeC4Ik>>~z;pNh@Qn)8bc_=$nhWyIGu@OeEs z1F#eozf}q_Khytx@{eO)55w+h+tWVv{Dt4{dcETRu~YK9fOf(!L|`&=mDO}LO+uGUk(?D8j?Tt6Er39!TLa2?Gj zz>d|7)l#(WjSt7Z85E)=LDmeKAzCehcA8O&e9K|~PkpEFDGjnC%_D8pH^?4pKIB5F z=2RPP*kS(W!n>7c50cEYkj>YL9($VB`bZ$KWq-lN&(WP&;K9IWlwg;`IFs|09)CXI2*FuNN0Q0oJav zt7!_fIOLw4siM66<<9fFFD-rH@YbUcoqVk4wUr8nmRr?S0B9_T`N0FoKYajP!5|+Sfc^N}v%`-p&Yfhcs<+hC c)&;nR#;x^GQ!s8Qi1{=DstQ`?Z}$576KIKRdjJ3c literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/constructible.h.8305E16F97D03B92.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/constructible.h.8305E16F97D03B92.idx new file mode 100644 index 0000000000000000000000000000000000000000..2d479476858b98470aecf32a2eace4a47d6c45be GIT binary patch literal 804 zcmcgqyGjE=6rD{rU^JaeK(t9~F{A4eG&VvYm|&$?1cfkrcXl1zO_rHS*nnSRpUTcM zpg*CFAE33RrFYOR`~Y*{GKVvd!@YCP`@P;ym5^@KFEU}cO9=6>v{CY`g2W=0spv4q zx*c|@h0+YdkkJ|Bw+Z9Q$e4rC%-=saf&khKCRvU*l%`x|wjkx>gte(3&^;!{kWM4P zQW-)~u+a!6V-Pt$fCO!)U}TsIdb2{?nZPd4bYv#0^Nqx6yNzY?&m%SS97m|Q#Ltx4 ze(awP^*jr0oRo<5HLi4e_ZoaWHJpay5pUaWS;)7=a`4jfoOP$ZR^R;*2|0QHJUk_X z7M^ap&COE2qF>9!#`6&6fCO8mtVGH!*9!EpB~Ib{j~By-d$&?`YXl=-!bbiVwUQ80 HW*?Pr;D_x? literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/container_compatible_range.h.34DF8E0859E8CA0A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/container_compatible_range.h.34DF8E0859E8CA0A.idx new file mode 100644 index 0000000000000000000000000000000000000000..1c0921a47547c9189a8d862e5a1e1962d5bcd317 GIT binary patch literal 672 zcmWIYbaR`*#K7R3;#rZKT9U}Zz`!5^#Kk2=nO7Kr3=l}m%t^J<*VlKp(hn_8Eh^Se zPD;|(D@!iOPS;N?D#=VsOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$_3%%oW#6zeKS2H z6Fmd{%)I2B(v(#FoXn);iVFSs_~iV&NT9GBgPbHxxG4Umit;a= z7mQpiTpV1caN*RPL=d~UD7jc4!~mu>7+^6jsA6^Pm{!Wn$i&P5OKd<{W|#^F1^_#0 B!$SZ7 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/contention_t.h.94CE35A00C98221B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/contention_t.h.94CE35A00C98221B.idx new file mode 100644 index 0000000000000000000000000000000000000000..702455c3f8cbc1fb502ce93e0fee11a1a16f47f4 GIT binary patch literal 624 zcmWIYbaTsKVqkDi@vO*AElFfyU|Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd}2v{Ze}u2S6)eKUP)$tUVMpO2A%AzsDN4@pP5^b zLvw3^eoV_ur>WnPi%U{6^Gbj*SecsyioBxKv|?8vtyfxe#pKyu9!4HUVFqDokQ4|U zJlUf-qa?+Gk&BU&gHs(M$iNV-_hZ*m?tPI!)v^q-k}zSQX*r1?PH|Cku|9~w3?d)^ aly;ziQQ_d4-x>QD6quQqSr~xn3kCq#*0qoT literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/convert_to_integral.h.BB55A1173E0E5D1E.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/convert_to_integral.h.BB55A1173E0E5D1E.idx new file mode 100644 index 0000000000000000000000000000000000000000..f80a0fa94615fa4786fc517a81be4372dbc27bd1 GIT binary patch literal 1290 zcmchX!D|yi6viiMl1(-AVndAELF0l6T6WSHDwahofl4JOK`;niHj~+O=w=gUXG?;D zhaLnyc$8j*A|B$!tB95&h|r551@Rzwv511bNbu+^GIjoe=E1=GeKWJ)+c(49SYBF+ zCjqFnmiryTodf`2T8w}*x*Hcs6fX710z#;^fNlna1qe5r$Xv(0wKj4Xr>=u}fGTqr zFXJknN4VSRi5)C39oC5k_8h;B=FLjgEFx6NecWv>@q|F>pcn5<{GrG)-xWUU90A_f1ue$#x6U(HsAgf1HQH)+p-7jaqofh(J zdKUf@0Z7~`k5+aL>OwA_D_-h9{QB#{lam{_%|EZ69p7#Uc@Zq;3J6{1Q&T7jpGP^{kZj2Wvlu*2;%;CY6IZQ+_0q%EP=uI@A?{5GquF1%(V~ zC{%(ag)C?t(xV#P-l~7xiycc%rYDg!{=N136Tg1yb5xI(n~}1pN6RauYq~;Eg9;V2 zf0tjX2i->0fRZS&{$% literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/convertible_to.h.AF7FB873A9C3BF81.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/convertible_to.h.AF7FB873A9C3BF81.idx new file mode 100644 index 0000000000000000000000000000000000000000..5633e4fb9ad410bc375fc8d19bb615c960ec4e51 GIT binary patch literal 666 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 ID8`E7zr;n|=l}o! literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_cv.h.F0B051EE47E984C0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_cv.h.F0B051EE47E984C0.idx new file mode 100644 index 0000000000000000000000000000000000000000..6671ccab8a3bee525e92ada8427d332da5fee715 GIT binary patch literal 380 zcmWIYbaN|VWMFVk@vO*AElFfyU|1ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&pELO(t}IX^EgGo699mXuT$q{f#NC1wI0nw(!y8J}FHm%&h6 znVSUiVNq&Yu`7_)E3LU=@@y{;BM*}xgP=6n^FSh6@5ipC-1{Pd!UhZmk}zRjX-EJ7 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_cvref.h.5E9807E6078DC895.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_cvref.h.5E9807E6078DC895.idx new file mode 100644 index 0000000000000000000000000000000000000000..d70651d8091ebc02f6a3ffebf93e88c5f9745706 GIT binary patch literal 794 zcmc&yO-chX7|paZV6`imjktADT;$VQ3)YnsD+O1Ah`1Os-(=cg=7(fjW}xTr1|lB7 zjbKk99>FuXG@+d%SRZ`kdoLvKOL#Zq(P+0x$S@k02``vS2=PtnLW#SEX)IzP`2YZh z1Gv>(X}~Z9I>-ER0!$SmW>{$G9-o|H5Bq>wlA9AsQ>GGIC|NpzKJE7C5r`D!EaD(V zh-C>ufLR)g$sd~(RnCJ#F<}N}Q548IlQSMD9&^Q00n~pEfLUGzIN#`_*PiCb zjV;kt6541PsxQq-XN%9?_ea}ldp_~^?Uuy@{ds@hS>7ADLppmak&x?y>GJjJ>C4&n sT3fBdS~j;yW{Fm)&u!xY^)61u+l%Wonl5pywt~rgjXLIr+xV~X3zwYjJpcdz literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_if.h.AB9F6E505087491D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_if.h.AB9F6E505087491D.idx new file mode 100644 index 0000000000000000000000000000000000000000..ed2cefadc2d022e42f0b507d3f7f79720f862c38 GIT binary patch literal 1072 zcmWIYbaT^SVPJ4h@vO*AElC728AO1%xTGj^HzSY%0vamShE|?=1*IjPC8Qb`pHR2`g&!_1=;EPiA5!uX^F`t#rj5u#+Jz@$!7Y=`MCu^9Yw`@iAA{}oSc)G zm#%N7XJn#hpr4tSoKu>Ts-KgYlw47vA0H35AE*&*pI!!yZA{M3OUq0LMqY}Q6)+Af zbCVQ-(dT(0JnB;Nx??;HtQ-t%q70(!V1j{@iIIVYfsvV&p(r)2_!ls?ISx#|F@qZ_iS>~d z;}8!t;b^@dyOwhAiv&7Qo8VNI6foJ&AoipYup;~fINEZlRw#7pWXNSIwj1}1#! rS@hAS4A!@3h7_gdB!ZL_7bO>qgBa`}0s`13bT$0B6MlCeBRc~CZY5!M literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_move_common.h.D563070E7254EC13.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_move_common.h.D563070E7254EC13.idx new file mode 100644 index 0000000000000000000000000000000000000000..bf4b382ddf2efd8067b545615b803fb7367dc074 GIT binary patch literal 3190 zcmc(i?QaxC9LHzx+UwKypcM;Bl`4`DNpEVqy_Dv1Cf9h_0tvw*L9Xp|Zg1~)&V6!b z?s^+}f#Ie4!sr_?F*T8xlIRN(UO<50JACCENCU5kFAVxZ6E%UTiOvGEyZ^u)lkDdE z`E6!?PqRXnDHQpZb$IA_}JmdXkn{~xlw&45zwY+`!h&i z?7$YmmgOVN7^y$r2i-0}%eBN4y9=#vI#r{FY^+n4b@)lv6bTXT!{BY$@p?*U9wwcB z|LBZYMG*n>?Mm=zL5&(qB>`Bn-&)!EYd)b2Dg*rkncz||GR@PswV$u6imL1ddv`xE z0x)v#yUP#WSx*bI3*1p@esyE>55>aD!V^54=VJUW=O6F*A>n`BqbfNq7v`xdMXea4 zvR00fshJ_o-8r-|?-wqJ1z;Z>l`#q02d5&+_GM$&viq{(wXI!8&{5| zkH!e4QAp`?6F2Gan-5Z|GC4CDCafy6%d=PpCc?~@7Gh+U?1)YsJe7~AK3{)R(!a}} zeEZ7utv^K8xv^Z>4pH~9Vo0C5hv|oZfAgnk>;#y2PGWPP!eoX!+=1!(2Uy@6T zz_i)JlBi+fU;?8$+X_T)aC$PfO94PClHuM5U@)?dL{i*aatufTz;GnxN4~K1Mb_Xy x;OP*52XZ8&0AMJR=}2yir1JWshr7~?mp4Wd$)4U+U;n`1kUE^+J~Fxu{0}#o@?Zb} literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_n.h.0AC42427849132F9.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/copy_n.h.0AC42427849132F9.idx new file mode 100644 index 0000000000000000000000000000000000000000..53733f2e5e5ca4df2b854e0c1bbb4ed1c66e1cc7 GIT binary patch literal 1792 zcmWIYbaVT`#=zj5;#rZKT9U}Zz`!5^#Kk2=nF-851_)@VR2y1(<`tBdc$TCVC6?qD zDWqi<6_?cND5z8$Sp{cSr7GkXWv0jHfklk1{7Xxa6&Ixzm*$kzYBFeGF+@iJNxzN) zR;`*0HipNTNhZd(673(J_CF$#xB^P9; z>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk}o`HU5UUE)p zN~(TNW>RuRg?@ZI+^^XM{^64^YhX&(`oFhOla!ShcV(yiV`zRifQh< zlFEWqs9pN0d5K9msqvXkIVY}qhLOcwtJPhnc3`T5Vf`OBXk%5JQk(u>pGSi0%Mpbhl3gj5% z*w{e?LP1e#TJcpT1_r&-nky#H_VO_Du!}N?N`o^nk_C)XV1p~VAH36^C($f8k0D!r zX{ZR32)iPeA~(zy5q1?36;T+^gnMRNoNApkUParZQ!=tc12pg|DsnLBSBx;TWt3qz z<1-V2`FegpV990g1|OiCjfIVsV8T^0uPOu|#f9QEGFtD)uBF`jB7u4>87w7X{`H-5 zaoSChSs8fsMtz-^koA=(AFra%JFU(tF8^GGS5Yj3&o{Ozwl=(qveg_ojI7RfF>93(M+Sd-;A=MobSyR59N70k^%?1r+2aNd`Nd#;ywN!t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xIkf<2Kw@!mW_n&?QckK~2EFVAS`PGTX>v&> zovkgXq_0PF^ULUEVOnN7Lvdwp5-8~urKT0f0BOC_nky#H_VO_DFpDsVNQ0z6z~Si! z3l9b_MWC=4iT-L8*>`p#DRp~b01#rnxf zN&0$a$pzWz`iVs)nQ4j1CB^zihQ^l3Cdp>{$@#ejKpjQJdWl83Ae@|&n3t|^re|cL zXP}>%mz-0YlB%DRnUq{np&uWgoS&DLnNDL%auZ83fDS9DEY3{N)61Z-Z6%cjsqrO6 ziJ8D)NzF@4%1MpSOrxu^n3g zPW@w2W9DI!W{?(y3G*;2fZlzU$!&=pz?T9PnxzbxEyy~IoECdfKTX+4-Q&^k$ZB%X?-3Y^C`Q{h0- z`;{+1);TG=!z=*u;+0ciJnI4>v5x@o|Hk|+f literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/core_cm4.h.CC705C8F3FEC8944.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/core_cm4.h.CC705C8F3FEC8944.idx new file mode 100644 index 0000000000000000000000000000000000000000..d73544e233e5f4e2fb73bb154e0c16bdf18ff507 GIT binary patch literal 37022 zcmd752Ut`|vp0S?GiRnJI)iJDDOlx*cD2j?AU|d~A9AH+`63n`0#fUj#06{Tg zL{JnlBN$NEoJGN`sF?kC_356Taozjwz2Ef1O8R3JgQzZH_z_D1H4CsTFmg*nCjo;)-qQfRlixJ zH8`R{{Q(i?&@gLAm^ESqlePgK6zC8Z5*hj*(64NIgjp;>p%Ki&7=Rn_B)uXB*&v$7 zzokla?6S!e1T1^=8e!$+Q!U47P>@eiV*9sh6j z=YZK&9WL14>=R@E2-sQrs*UWBe@MYMz}_rrlIlVm7Y|STv8&APSaB0)Ut*zjKAs3Kxacfr>e(J$befVi0xO8db=I(-Rkw3iJdkZez z+&!=u{>5_m7YpKFEZMEAw`aF5asn|IyN)jK+sj+lYu}q# zYd<`~5*F+eXddblX7w2qXfa2Gn8Pf-7VA)p**Cx^%*PiCggcx6>7U^0iqmw36kOe0 zyVWJX^#s>$UD`ozT|HddkRJ?tK%KdIwDTgQhnx>r@?Sl=x_G;F>x#AMU)TcutG?~8 z211ASLPto+txa3}e~LQkN+Z7?dI)1z$L)qJH!Ro0A{)m@RX~B|M&2=k$!#_8T7IQ54IuTCPX3|4l}fS4R)Qt4sU#9?-^K9=MO;VcWio;6+BSm$w^cj0pF} z-hY5gNU)#P-}axRklunfHtUW1r?-cjoQ^lP;qB?xp#x_26neJlBJ}j`<|*_Q`V9)R zTKvpr(kINct;}x0c$9`khDK<$-T@Y~Ut}xmfZ50FkIe?#VhgiB z#1PnFX+!160DRV0iax=E&Eb)Q9J$U~H(WJ7;TBR6W?$SSfmUD0e8e!z-x9z*6z6TQ z*=MMaH4w%VPEHPPpf1DB)dmb8qtwIGt=oXMZr)ziNqvX=1O*0K!f_}R5*}^^&uUYX z^KHeGxFzCSRgNp(gC$}2C#i~B=3xO=-vFp@sO&Hc4%aM0EraDMf`+y=e!no>QApP8 zhH$m&&VOrTmKYh3W^<2lY|b&WTqh(lqQCj;zz8x)VzY0wK(+7)pRfq1M8B|*Aah;2 z^ocF#W%hBD*^K9HTk3N2|J?@fTe8dJ9rT}u!eCht_cQZg%TTMYrFM9z#nR#|7a0lZn5>-ug16~7*OhnSl9Lo z33D9uWRyb}{?<6J_0OZc78#%a*N1tn|HE7aL$VWgFtydzs}JP}tY_7x8<2TA**Ua;U*JVBtczK4MJ4}ai zZm{?KhFZOEt5Fq)(({b4=K5-U@$%a|r##2oW>jZ01O~SM)XK9rn?~>)WhM27qkq{g zj)0+Qix8^GE|X$b-|AYMrCMe@jM-?)(NcN&`EE2KR z__u0~OR?%;{R~&TPoUL57F&A-;G+pI}{GmhXocy{aIVfKSm?K}`(0h-Br5dYF8@mFQ=h1Fs>j?FAM zn|NB|YiDo;tTmw}p+i6}s2jAcyKzVNGn1tzU0Q-)`npKi)pQN9vu%q>ztKwAzu0oi zgIDfWp-^;L%LTtGmNhsu5{J0<#Tjb#A-&P&8~%GGz%4=(9n8z|_uSXUxpye(-+C5g z9~R#KnD>Y5}3pt&vyAhi7gt>#XVIAWJ;owQ~!cH=l+#M>?Y zFqwqIVjV|3m;|2R zFjUJtC^CXnDPG15wZi5e&X~OMf>#K^aw78L3R_{t!ddvn%!OA5yh4cAqqV?$Q@Fk3 z<2?jCB$KrbUpyn*&24Nbebq_uD(0)m?(4Y+_hg)Z3z>p!E|#wtu>ms-4ZMyC8-Z&$ z%x6_-QlJg8T;IhB7b-2c(~*=C+iZ2w}}43*ES z-24x|^Y3;4mFtWQhyDk?GtBZwq%{n8)W~4ymbfbZh{SQZ#hGjwkY&FGA|{q3NfEld z4_?2LDV0v5#5Q6FIm8a)3u+ob7Qj)Ze552|F;+6G&&E$)Bpc$74BFM zwrcrm96*~q9YQ3?iu-F;JJG}qaoNHhR4v=v7@F3QD1mmrtYOWqV{;j@SFnl3^ za0;8jyG?Rd+_xf%pb|JEYjdc!-5 zW~y#(OL{*{|Nlb+Q0s2(cV~ZdTmlR-XvGF!wQs%VJ@$0ZV)Zj2hgDWd=A9cb6V^g_Ff$PZMeu z?`cMckzVl4Bm%7?>FVF1+)$G+LF2wGZ$Q$OJnR_BKY)$Xf=3cl%rHh9erAoFCpwl;>|UFT#x63qk~_W?MYfVo=Kg1A5|V zCnRhD?I3bZx2Q9yB@`c83YWGXadkvlYg<)gWvWBBoSBl`TYUo~A(wb`;WV)+*bS9E zrXS9k8Edz&wv-orE$UcXItPHdHVC34UmSG%;F|X_y` zW(2-6{TowWu+iufSlc5q3@@}{lkA%%!}%L7TO0s`E)4JL))j1j))NK^zRle5|Aq?C zM$PKfspHbD4&JN{3$NolXiy#Jp}wI*{OiDGEA|Hw;dScQYtYp9XWvG3d_#glu?GH( z=MxqL|MLy>3HGnk$hrQ{&UNcpgGpzo6KEaeJA8PZ@Cdv-iEs}1b|SceU=pg+B?Pal zaauujLVfVUr%oGB_c|`_UT$7>es*q%jmm$!QPU984e$;6`G3difN*Qj;QtlVFkb&x z43nAjziYXJ)!(Nb*}AUNp&_?i4L0lK67Jt}-e(4b8}2*SV` z9uF>enkE>9Af1ryv_N56peW9$faFsn8$(9n|2qQ)r9bpojaYSRIA8Ah2@pS6wpxNT7A^}9B;;mMKd+G(Oa2&ZJdEj6!Y5;6}A+qZ-$mOqtN7)^kpuw|p=egDPCqwqb{?NZUOR5UWmgt{J{ zy}wo1LoD$Fq&HbIO_p$`WXgm(&E4ofa%zhoj6yFEx+|LQia0r$GNFlG@}0LAng63v zs0Bh36{d*_Y)Pg}$j!auaP`0~SSXI<0(XiXV@Yuk<>D>PM&Sg> z`yo+zNR+ajWXhxp-Zl=L`SJ>u>HwzVRHir;PEV#xXy>Ao9Z#ZKS2hZvko64FkO2)S zQzlgL+Lp%Mugt(g7E@-lPMDl z^Z&BnJn>R(qfilq&Pk?oAS6>J)N0!Keb>;(21cPb2t5!@51<#zlnHgr>$mrG+wg|0 zC!|WIR2a%KWm4sToN{d3g!PT}!YJ?!tMnyS>3?EWD5Dj3+1yC?{NpPZzBM#63RNN1 zM3pHKs$Qnd-kRLdno){Bo9Tt&U~h-M%np5ZM!_v@wfUNmMw_iYJAL2WDE#H5$FjSn z;=3j64Q0v<{ux`Z@|adle=!O(Ni%Ixo3?;Alqr)MY4{=UT<+P{Mqw6_N>ZDWKuV@e z>PG7)Nn@kqU5vtcl47z{JXyjWL#9mXVcWM2JG`3fO1(|GXh?_7DpMxpG3vO-uM1A$ zJ|F7@148EP$~LK#6w$9(XSgUe{%kD;@2bju`Oc^jbWy*xw4evMJ@VU@kC(I|UutXs)QQ%gPDYQZwZH0!F zHlE6JQFb#5<4K}fk|_%YmQ0zw4w1#$c28@KrEu=Dol-Nex;{T zs1G@tp*79W;zG)l2@N{m^1|l+BfMC*-6xs$!RV7IlX^c*y*<9^6D$=)a+M-UDUt>! zNGOxKn%8@K-Iis%jlvK}aEr>c1sYVQOz6)&?G_|=+Kq)efzVc!X)E|)nKGdlwMX{8 z|7%uHqtG9O_Nq;L)p*3olnEWFwA^cIkEd8@8R@X6MZ;v*Vgqjz(9QdVp$G)tp)~ihGA?q?_ zQtjtYn>)$9OJAK(9eUw;Q9KW$NT$%zhiOau1f^sI%pTZJhgTsWD2eAK+$CfRf_tgp zZS*o}!N5oTSgi9{G(CpVBvY1d;;GUhi!bW>8-Zisbc%7i>Bd=B3HN8xWq zVFhW&XQJsDcx0I}srpqf#?)>bGEgs!ft(fUOB8~yl_?CQgSIi(HemR)nRA-?=!Fp= znyxF8uB*o=h;FmF(TD(j;p0Q&e2l_clJ+jOX_p#1HJP%s%Qqa<#?-#GuTHp1M#>RU zJR<6{on#8ta+Fp}>qj9o*C(|d%v|Yy$+RDOu1uLdzst?<<^LXrrIwOZx2jEBA-t0* zllrvp$3H@A4f8V!3y9QIg=s1T8Zu>4KCeG~4oe29X+-LzWI73BQ>IL6+^560T76!R zr2?QKVpXPC7zHwALj5lUKFiwH*WW0V1ECoT(+ud9GG#)eYDb4GkM|zJ=JXs_1Nvn6g=b>-UJ23-ACpx45G3BPSLOvVt<)3dn?3A zr6w1N3T8pxS7H`+)2|^1MriIXoGPMbnow4uYt|G&YLU9nv`8LS~tQd zc!AIp(ewnIqD+~PTknKnC3kKgsTabb&s^4(xU8$pDD;_)wh_K|#+Rxozcv|V6!7eo z?es`AJ%W0dDYJKTb?XXMo{SmIVz_&v=^nT!nKCICXN$I0+26+)1y3+_NHQIQc9tm< zdVjU?AN?AC9BULhg3vmZX&pFOnKGdUf4yA1_{Pj}Mqxd1{Rc(ELGZFNWm1(-%^Nsz zyz6+q5CNsk(v`^4RbmuMxye?_L#qcA{pHUClXSvZ5PdExo4GAkjjk*QFom^#BYz<>4AzTbO&<3hbK8j7(= zS7MW{HlsorlOowx;^v!|lu5lYYN<}B3!<~N;%qJU1u}&a@1Z6BQvG9w{$RCbMqw~C z$PvkO1Tra8mdOjX_7x^ftAT}Dfl#X2lnS$tOqo#mSC?BaFSQQ~T_9oY9;x^q2y11^ zq`VTn6IwMXTy7LRz|%013*JNsZp=RZ2Q} zG{z`&15^2;DIfZ-OqtL)UG|>H=*cT}P-tAOqPP+!9GL>|5Uq%!m1Z4y=elU6QE&!p z6C~3FXj7RoYcbKckDqa?wc04)i5*AmYEv@A_cCQdioGkZ8-^xfA%75BsWPpE?G>3a zq1+RbT-Uexf`!hJK7L9xoPv=oQzmtH_QN}MPmPN;3O|FXbhRlR>OrPVsQ+iD-zzlL z#j)YCOf)Qm;UZHewLUwy`M^z{>)3?4NoCpuLrdl5ju#~)Tzos-@Q(`HZ zGO5Ly_w9q1bYE{2rjyJs77dFbMVT_GimpBSHO-DoGztwM^Ru+3S>Uc^%7m`W{i#Bu zAGamyh2Nlko)}6$G2m!KrVwImw}tf{l~z3IQ8YbKCo~1oB$b$?!XcGRp(#^nQw9~O zt^C2S<0e*!O={C7XeODmlrtN~9_djyaH~=14%xe|G+kHX2A3%ln!V`8lSbF#lZ?V~ zQqqN@VIfSHGG$VU&2PorEd6+!QD_3DrfW^pp`LDU~0eGv|nACQ6}`v@^k+7p?#BCTjq(TJaEV|Wl}8S>rS1O@>jxp)}rz5)Emvc#$a+T8nBdJ#FoMh=mS^McrZW$TDS8 zrv^u74);HTrMf^}%v6|Wg0GM%6WZ1|Wk`+j?njKmVv_YJg((VxJDD=6?0rwu%qRd$ zH3C!f6sCC~BvU4IKWum6nX;RY=!Gz-uv~qKTzxf0g)&8?4L1M!;pg)OV=p#5&Z71` zYSSL*Vlrh0PgUyVHvfHgCL1UFMZomAu%M|)` zD(%#}P!rZpN|N|`dL$+ceAxHF^nUq+!6 zBp9tQMME>mlnKQ|8r#GTQeHF))j(*o%Cs56GMO@=vtQo1bgDNF3r!-qIxU$_gAK?p-ko<-yb$$#e#UWXgnQX(K8J9L~o=ONgl$l_^Gr3n)`2HS^4uoxV-R z-=I!^sminz>Pn_e$Upn4_pnuCZyJT4AiXsz(;CRSOqtNueqUbf8`$zT>(LuT-3I8< zGG$VGk35;%G2S0b$y+DKB-1g7FJ#K3(jG0}^nB5hJ8ZA!fM_@X-A1NNs&`^(>!B4z z?y*?qp=f#tPC%wiYVXoF&D%z;z*3bV^J!{R8u$~LGNBOd(zH&ef4FZH%pi1DGM$AQ zl_?Xd*KT;DiiXD(hV zQtLd|2`lli#JdQRI7PyZBU2cz2k3Bh-r94`g%#P)jlv?5|LF?TbXY~nl-Zk@QhZ$8 zwOlMkHl>$~hUL)KGG#)SZzo=AbSkvKC^Undtx%a(Ku94|CgeK*_`ODGF&2_L*FLpr zALL)AOsdV*I84d*+x;^ z2mz@~p$tc8Nh?+GH*M(K@Em#o2N|LGP<7NglD026-rnANUPfRH4_l| zQzk<$O=y{8nXhsJBvpx0mESYOki2xm!N=tlfb3SG-P{`c>M*Bq-@1Pg zop}h&LuDC~wC1I^Mtn|?r)u<6U5OzR8s&Ky9uyMfhJdv0@lO-Yd|1g_$Aj+cM-p{;4X@b9apso=M{j#p4WSwq9nR zr$I;lG|kdkTv=25_t5(qKrTw?qJ+P~%m2!^8aku$m}WXa)@acht*xXd)1J<3RxX_& zNlKKYEYEZb*F3oA)chqucHoZ;r~*USr*EgSw(s2(Vqdxekw0@YodLf7n=@AbXn-8- z)1ZACTi#sbMqll)E_Z`J6n+ScRQ$8bRC2XJbx_@+_DvlUtt0VF|*5|p;Qu}|ZG z(C^_?$Fi%@{LD9ACP3CAv=-S)+U{X|(%OCR2y#)4F7lqpzM+E-{cujLu@C2fWRs8P ztfaRC3e(s1d|MQd{R*^SVN2)Dh^f8GS9JLfkmV9uF4>SiC$1ftd1NO+&S}s&UOOG{ z?1MKg+n&Px?~sj}71f{wRZ zPH5p=0+3fCdL`P%LicGSmtPnXLy&`7bWm&aF6`q!=*VCGSq^TWij7Y1on8u%GzCiI zC4Jz(DZQZ46@tuDqj}s{ec!4?ZcgH7f;?29hg|1C$DP~Tk2aMic~hWQ3fn08tybFc zmYw?&BwvH_HMY@sOk1__bYUDpK55Y>t&ZibOSK|js^-TMWFkTnk*z#;9#+0q)oWE5 zNav{*J=L0+P7OuZ)D4$!mj&dy8eLc0`skVA-d&qteO33UQhPBT6AgIWVRx#OV%<847WR17oH_oaw-rr4VO1FlH;n*$#|33UQ7DBU&Lw zJ1`b2#KjJb8%ptp(!R74Byoad&zLBQ6CD_nByo}hW3MFcbzr1PVwwZvfFvGpU>uUf zLk^6kDsidGKG|g|ahU^Sxk_B_z*wOYS2!?YRAP(+W2H)5>A+Z}5?47e)~Lia4vbip z80)}@Q;Bg7jChq8@4!eO{CjLm9svjbzRTHNZu*sd10J23XD#k~%UG_{!Kz}T-A z_d76RHDavBJ|A%!G0uUpRwJ%;U`*GF)3x?0GqvJO2gWR|IEyoeoLw4JVP(DV!GT;+ zqboerC^xVN`lE6LK{jd8Chn|DTF%W2n>>;ra}b)t1Ej#HBYNURdY@;TJMh1lA?lhcoY zoKT|^yclhU_%>@2)Se(6QAgYC@oT5%{q^rc3IBx_z2H8To#g^s^Z*yl5IevH2tBk# z5q4+`5c$9s1q9=mP7h!B1(pLOON+92T=r}IqlMe@hZ5wr3f<?EEUNBYJ0YXobQG}f&1B9L)qe%OPQ4@>QN-zVGqeVGdTLIa*GC=5IGODw6$Dh$#b5s=o z8Lvd+dB>R;UjA0`J3|Pv2%$whWUS==D6DGUD1uB?p{XickTjuKsSZ_pc2x8r$e+ePOS4q`-v2gx=YgYyzZs#;$QCR2dzPPntL}4x+*6@@ zDqH;K-mm}kS34?Hf}Cx`hXZ)}-88qyyxiWLAZxW~t=1O5`IoF%>i(`41bLxAFL=De zPV0d+dPI+Ajvdj1%A)7;D1s|1)}V_u6k*GRu#YpHT&~Tn3`VYK&=rj>0Ghe=`Ixl2 zU48;1rxoZlPZ%57t}D7-SB2F@`QJbHTjyQ13K%)6MMrt=**QQ!=;1%A#18)fLQnir zBy)K0)fJjGtqRCT34P@2lahI!71xwHN06yH?NptC<-o5XYvg8g^J<_oLy2Z6ZLPu1 z4?;2MnL(3qnsBrNaT zpe`U^)aVPhc7Ce)wKa1CL8eP+x@4>3LyH4jg#8&*4|MKo&|OVcnv8JwbwRFEZEJl% z;uR=fVGETbF0Gy$<(4uULL0d5hoSxpAuxZ7VYLppb*#O^qlbxz}jssy3H5w zrAznCegA$xK~AgCX_akbft|sG<7V{WCCwae{ztkW9_h@s&p`N$j}8^;^lagJQZZ)6 zigFcxhV(ut&)5x%z8T~)hZPXZ$2O9K% zyBINl*8^>a3qfuu&<%yH)sv>5QuJ>aK#(aq?G)X2EC=jBsEC))@@Y_p`~W)vVw~YS zHpI(6%^xtU4{8DlAJCu!8e8X$iVB()@~K!87#pu7^onmdWByISe4!c@@`ZU|#ZP4-^_vN@LxpyzY^|SDeR1{ZMY?97 zbI1uDatj@3iQhwg@wVMPm(OtU+VPh&PDw4vYkYn7|pDQCC{{ zotfAIN^wJlZm4V_5IZLe2t6B1&946|v1at2t6Bo`K|&w6+tYa@FL?Cgr`CX+QlV44 zceC@ffY39v)Y_JyCe=o)yG3+1YtUwmEeGyyr&ZBsinRfq+iG-MZJVAfo_o8#_@z8S zq7aJWi{ZwL#>{%&dKp0qRH%S&6_hDq86N+rQ(Lh1NQEBpfQp^s1%#g5rFjdOI3iQr z(ySdIhqdT1pDrqwD_PHSzH)m&CLlC{=U~AtY3jrER|&F5f%fqJmmBwFW0knNuAnnd zLi2dPc-Pjr*|kbjf)r>_fyTB~U~Twndc9qv2=Y)u4|&IDr;5QEJxWY-ov>W@u0Wek zbe>4)iDawM&ILmcU#(TE1L&Moppyz4a`eMg!QkJGAbS;PFW<&s2a`cZK9o$85jwg! z`#vsrpXkg+Xf}`ZKP9!3?q7I7kOCzt;9h%P(B_`r$6Y!?KfkI#R~5E70C(O``l6ro zwwRTjbB2WJ*=CwDJKGEhJDeoBU;4?`_KJ84cvD3~lkm(U;ie%3&UF6xx8N}Lq4SKJ!ISlVXS^K^`oJo*$ z1xn{m+Qsx|dV0yV1X+X78Xj%!zwS45$^8!m$=0B39yYT>)Q|&ua+>CVotcJQ(}U6! zasA`F_8v25b^Z<`J+(b;`{20hH|c~;I(tWwt`pK77+E?Y%YkuOCtP-5j+ouw(7or^)tMtMu2gVM)u)~3ILNAUMO^6tTYHK4fe?% zGYH2V7*`C!6$i!>gYbki*a>r}QhKVKR;fih`gUKTm^&boRA>_SpX|IjAoP$q)nSLs z5k~02a*8N%w5>C3(-mXq!!TpFPTZ}N>=+q3U53uc4)kJ)SiLe?@f>tB}(Dn zf+mUM`fS+SgCN;zl&!Y)^SjP7nzxJ_Mvxs!w1e-!Cv5L?Zcb=AL6$4faz6OkX?n;3 zJwZ>agq@%VgdUrxNRiD0+6~Fs)D4hL2yNo)n%vY%v)cdii6HSx6weoQADh$~tGgt6 zfX+=Vy2%}SvD&4rcb6u22V{y0P2mf==MNI*3>neG6ObegO5&?Dc5ojMdRm|6jh)s9 zgr3l+2s@z@9KDA&Y>kY-$^Q{1Ot{;rh!~E1pV}t2H%7%_T09ma>t9ip6{q0K4)9b*u5|-4m?MMQARc9oVG-Kl-iWSU{|uRim@KyRmx%phGVUP@Nt7rsQUMHth|_RTa9*qdInt01lney8~1QSJyUO ziEX;FY`|g0Zk>9!PH)G^(3vuHCD;hW5+C&H4|+WtPMGmgU+Sa&2gWE9Tl$Xs+hCHB zX-YJW_s3JMdp2sldmBNHYS2+W@t==3cW(PGk06r~n#{Kz+6>$K<@WeKeV|wi)o3AK z_!JL}y1KJ%EI|&a&;i~|>`Daa&}$I1!0Z|XAoT77MHV%^`Qy^rJ$?mbvJy?^xsHns z`#9oJB0=s*=nfAs>U!OdE;#Al4|G1L(FdM4c8kL9>I6*(yQ32Z^$CNPb#u(fG^jHj z7+D5gmceKzk!?_B8`O-!u3kX8^tuJL&aPVkLho2mJP{R2|eJURbEW| zvQ>wA5agf&9pp20_q0{lKP_8Nkc%pGk?)wy4hSDGulWOlq^eLV4}I5f|7nMHWaMv< z&Ke1=;R|ne%L5R4vxDZX`d{Da3Oe-}0LW4$TFQsw?ux%HPG4Xd2qS%#gl6%@E$(&+ zhGGeZ+SG=?x*voH^iBwc=4SSr+ws`wfna`t7A@coUl$Y9d|?f(4G}{v(@hxTlhjMDH@c* zR~GE@3Lx~t3N=^cNwW)+f1O8k9w^WQzL&(Vv49S}x)fGVKbrp)R>necID=HLW zS5yF@*HS3LuB8A%@1jtI-9-U}UO=Hp>&ND<{W=%;0}>^nDBdZ~k84sgbD&p%0{4!w znz1FR0_;UD(nyOmwq-hIOx8)0`MUkUfH~edKlca#n{PDe4L?xvw)xbp<_bSq0lBJ0 zS9$Ld?sv|=)n_$9lC>zAx1RatfJAG{YQKX{iWa4C#JH?}_w^6P5~NUp3VC3Df8dY> zBLZd;U3iOwMf^tMbo3*K3CaAkcUe2P-$j0Tl8`{ zrB~at1lgcL8+fk^Ek3LJ>T351vPg**ah*5k?sR&)yhI@6;F5$c@fG!2=O;&F#}^W0 zvKme1C1ux%U_8=0L^KN#^!5-~qgRF~!mbPfLazx?B=C>I=*wHRA%L7zp_3{z1%y$5 z{gOWOLQR4^R-?z z>6}-i^L!p3SmF1vPV3qdBu+ZDgdHp&; zo@voD{-KE7g91lQFF(8WLOXeIQ?R6Vr{U8s5acf{`il=wcIyh#p;xVFmKJn4w#4O_ z^H4x$DbXxmz(sG)`|Q1JCCFhVI?RUvyPgF)^iCGF#_nVRLN8)bgk8h}gx6VQ{gQ@5^Iue;iyXntpP_4zp>tzdVmHBHNkFfEQ3#8!)oa)4^=xs687cZ7QuO86 z;tod?RRUi&9|6bApE~KEI@vFCpNZl#QDVtp-JO!SQ?h65mXy0CwVgz=q)c{T?2(jv z92f^B@t}i^Ba(Q;fiXiX&d}OY>3#m>9M9iJkATWMqef@=h%XUy$A1obL6Fx9^qSAL zBfESG*9m`&1f3;nv_x(5)ojRs*OPCB}>h8MCx#)q?G9 zMuGW9YV?S^G)YB%oYuRZ*7vkyoYB`l zqyNQ$;d4fhZ{*AWaI%l|^&dIdc%*lI4W8;|uqj~#5p8LGq?8Zo0AuYF0i z{x)VTlz+Dp?dE6xBD;_5kmIqJAZIn`EZ@D#E^%vVA9S1`nHrSIclz12La;{f64Hd& zT|z+U{XvS1?=<)1hQit70Qsm!A9;Ivgyb&l-|9F)7D;FkpQ2vvp1C@+Md|UNb47)& z*!jHYOf{`3JgAV`6T3ixR=b_M~urF?yn)lRQnRr_qLR%;@p zb3uhJ@E~SK@oqh_g&;NIBKYw8gHOv0a_L=*VBYeb#(UAC5wnFO{@DA5U} zZ3mBCiv%}7??TcH;KkHwop@TOVp+tDt2*(jPQ`{2W<1iBe55POJ}+TLp-wE+so3Ww z%$TSbC+byf+Y>Y9=}XMhmti9cGuG;rYxRgZD$GdHmrT)@Wsb^EQFlv7)fST>?>iCN z$=9=M-n_Wu6*h?=*CcdJvVFNOqwm?qQ<_SUvkG*U`}dfG%_>xWTxJSbTPdNHyj@4+ zzc{g@rgkbI9Z(0`Cxd#mN-XxMQI_yutI=y77#@4G)&JA?0|~NBiI(xT7P~_Vw&=Z4 zTC0a+-`6Y9FPjF)87(@)1Dq>M$K9P2mQ9ei3iOuG*tK(_s#h6bJPLHqE6{n4uv@5r z(3__;ou|WFCw1%_H64&~Dm0FVWnElnJWu$2({xx*f6$^2{G=crfa%RxY7S>0 z-k^&&7}27xsL>1_YA39Jo;2-jYyw!@tVEl6%Z0z4 z^cgiwBFJ+kdd@%Z=5)$xzO39cf;>~8XZ#q=iMc;MaGmou0X}-Y)uOi!^OgM3i!~+g zi1J4-JBIwx%Z?#`^s-~fAHD1t@<%T_hWycsF>XbBj&$8sYaN1-uB)7-tIZ-L%($%k z>9Wq5MM#*Dud9`>Ysexb%y_M<_F7kuMM#)2USDIpz5yFMm=Ue77Ok(xA|%XMrLVF| zUx!6Vn6X1&V~4&0i;&p0eyDGHm7nI7UF8RaUf-w4@IO+^_0mjQ2S}a*E&8aa|KZ=bRdy<4Z#J&;TIx zbpdLPy)FO~8+}rMBJ42%(4j8~P^6z!J~O=A!i|6&RiUGNd|%CZH|&M9awEjc@3rW? zR!>!6V^ofp?HF>rY{!t}Wjlr(FWWKXc-f92$IEsMIbOD7$ni2`v>Nzm;DN>oB=3i` z=n(hq$s<#w?pxjvB`y%;g@j&6wpGm}@0vr6*QBjr?Xv=X=J(myiw}U% zXC7!twYk>#{l6_HI++TT$&a{{Zkjyl+>xyW$x@*#9!s;QA;21a4uV=^&p`k}-+-XV z2cPSmb4Px^1CSgQ%HgfhE@`Hzbko}enW;uIxknwFx5&R$&V7R1QlMMh3$qs`z#4r; zf~K>f+`f&ogM)Sgaz~Bs@Iz3wtPM^LOPNiOEG5d~J7z(1hJL&rev}|<6=*H@!gr?( zsiux|+Ytd>xTG=}mfXI(n(5wl^vRj{uQN1QQ$CT(8 z-uCO_HFTs8O$`MnILQ^oyRC!ZNFQz4zV5_-$i2{3;5 zsY7=6G(b+M&bHFtK^|++V}2yEMD0mO>bH18kYieOjE~cM#ZuSzT~=a0 zSo@+vUsSe!?P2zrcXr{J{gp8C&`JN$VbgA+LY%0u?Ve$GG*=i1Qp6^A+NJ z2gU-0xWIw2P$4dKU|d&<*Om6EOqRsS4!d|6l9=JZI4X%p9T>+Y@wfxyge0DDU}Q>S zrUT=oB%X9&WJzL{10!1!vmF?xB=M93cB#c(4vgJuakm2_SuG|zFjCZFiUT86Ev7m!($!+R z1LL4tJm|oP*NE{N`-~-M#01WW`PAp9!*g>;ue+x~_js&%ZhF##DYt4Kfd2Sci5@G> zY($vuPp{vs*?fX5R-?t-W3ks{Ake2T$WSHRF;5uuC-|9k_M{A$m*10N=Jy>B`jolN zHyw}%O7wsyoHF|U25YB0g3OW79KPlLa>4@T{pc42`K(2swMCh=;t36k6}>p z%;hO5d1*&L=ZFd&;o;KK-zE1(+e;n=WTyu0j$lp3Alt>N0x`)TaX zY=R^ql*AWG*Q4T=w`_i&AR85EBcBG#94qo`(}xMiAe}o(bcZi2*egAN(3g2=wij&9 z>*c`8Xi=HRwKf&2Br_gjG$2N3$y4@HKTS}^-d& z$YLd0%*RCWrLh(N+|!I8+Z1RUU#_x8gFuHq6hzaR@IY_YDn=5W6$-S1Z?GO3WZk_{V975yxwmI_r zInHO#oAZF|(4ZZBOdebpU1MEb#|wZQQlLY;2fZ}^I5c(ST!Jh^Xc_-h#a?~_9s1l8 z&B44CnaT!9GyVePwg%ni^~N580))Q)M0Fnco=f&WHs&HA8xY#S$3A-(3K04h6xB&O zwPaI5g~vqamImG8>3rJJt^Dw0bP06UN@y+L*61{B^dJ4plqSeWE&9ke6&g3GXRTAv zk05IlXbtz?HGMypj;j|%knKveoo{R8c=k#PcvJH-q;pP-&hdW#^Z zT%`Uw; zNsx^iw2}9nKesm;SZ{2N8=&(-jb8B2B^Waq;pwyNFH#LJ53l+3iPX zpJPi)-2|Ns70Tcqn7zaW2z`EwT3cJJ;KW-0IHHrTMd^HJ-Ydx|*#AimK{hGTCf;%@ zcTL{){!QX7u(nW(7V;wxt^EFs8m@mskn<{Zp67r)^94HeX)l_Cge%&7*Uf!y1F}qw zmT@1#9{mD@KJ>+Mt&d6zN?t^CW~ zLLc~i%bpE`bm&uIG@ZA%+&7p5D&7U;i4r~Gt-bn3UCpdxl?k#*fj043wRU^AGQIM{ z2(m(nR&bqL!$uviQ7Muj=QZd&A9D@9&u>{IaRNcsY0)~qT)*^3l};231LZ3UMC1uZ@0Ycw6qsYY? z=Zoyg%OloelqiOmXY%g>OPV}0<$}&r1$xRCzNvrBfAFVgD}p3xQ4(K}RymkcqRw#- zf+TBDG9L>!U*1Wn-gPQLt}D=We%p<`vIgnUr`2fQ`fpykY)<)p_W@al&^kUA{L^1q zs}2}Pkn0+BU1PiXa#ve!MVE%F39?FoR`Izct@wb==Su7&$VCmh$b}h8}9=2IEre#0>k1I@hps_=Xc5pwjY{|~w zrW;D-12P4nDSY-BL|=ykguVzzQ;9lo;{H!ZcM_d+4NB*q_Ssu;phMq>qdM$;I6&x| za1<#zXmjI&i?<&E@=}dna(~2Livxtd5Jz=NDjWCjyfx`DAkVevIX{!d-i`x=J{U)J zM)?WKgUt><0px)SJ>b2XJtYSSeLs%s%&Z)l8P;&$QxRWee5V)R>DBDSEoOYyi=R28 zc+9=%Ywg^hfsq?(bc4Ud^19;K;(fI*39?*`mUCyro~MI*e)LH?nlS#jF5mNG-wrWD zzUODhknj0127AE{GC*IgqsG{)b%4;P>L~K!x6!*(FS@?~BoU!RK8t6c^GTWz6+nCe7RTz?cWEUV_d^4LZqNzewo3a_@eeK#*rD^o-A;1*N4PsMKEsNmig_9A&=&by^se8eHD))>{UEK=u>zUVNc-!Lf^lm2z&ny5c=pHMM_<{@%d_m*DFA7 zXwVHlY8xJ(?k>F<{|X+onq`n?8EnUXP8@P7-s#gZqLZvd$^1Y}-&tLAu5Eu$koPL| zo_qZ78^_-dJksnnq%%p0Ch?8AU&duTP1yDeL0)OlEB?7>a#Wbs2TGHtW8y-soYwtx^xLK|nRM!pPv72(3al@dwVJKn8 zxM@({G??rd&kU+(hVR(NhARc9OIxeNyoXXuSE1=VN9?OGtfJ{tgfw0D2qEaumj@}r zULFL5J~v1a_S_&K^o>D^48B|;BdJTk2S8S8(Mlc-JzjCINf$ z!=eYwO+Z%?oGXdwO5%${RJU2U-}SDkv5+m{x?Qhh3tvi1LOriP=`Z#iIUKf>>-UG} zL@ON@?UDpc62XUNjQ<%O7LCM&Ulf00{rRvz5n%!0QO#0^kn~5hqNn@)(IrKB{`_hA z{^)753jL+|GYdsCX%0XXt7<|bJvQiwDm7-j}tdy|J2fdvO;fA{4 zbn~T+3#%E|<>&7^9Wt_R>(^q`gE*Ou` zcwhjhdzKy#P>q+RI|Diw^jfYh#jGTIVzORb_C(cyA=HM$jqqx-)PAzAZPjTxir#9L z-YTHps?%~T;nR0^pA~NDOU?mh>5~UEy}~WW0*7rdSvRu7OS$GW#%t@(QtS68Ws+(6 z1$jvxk0&+BlU0&eT;lOhnc_(^ye0Ma*JnpigNwWlz5USJmN`x#Fy#w z438ZV8>icuh5mwBQ}aCjnZNt(?(@sj}%$Ra1l92J!*BzJ1 znHDF52uWWWA(uv^Y9LXaEb`D;DWhp zfT@Mb7MiNTHQiP6l6Uowf4hSd_{OGJGFiz|HMpiVdHqX!wqG2|$v`k2vE>mvO#_MQ z5mTNd@C)#(Q}9^PJvn$!5!|!5yjhQhIh`@23+uNdVI+Do@cA4X%l-;O#Gr z>Y2#NjbLiAWDAU>z%}_onf~$i^anV(A50-CLvWZ1T+_Qte%JcM(WjC*=?mFx?BLdMfMT2o$)csJOz3>2v=wiIZEw)IenejHJLd^|0Eve?4nl zHYbC@be_rc@DwO;P1Bb4efR!>f11L{gJ23U832<4*Cb!$-Q(W0^Sh8tFzvP@ciY`G z5O`0*zlceL1{V(ORK!UtSoT|TKRmn&+;O~7|NY_*vlh?cq%W9uS#lTL6a}v7uc3v# zTE>>X$jO~x>R_^ic{R94Id##@PkMh5^D-yVV5+cX1>89W?oBE0|Ht`L%R9ZwNpCQ< zS+dPa)8J0G@7t@%>&h}JIT-+^23t13NDADMMs)U{Jve{e0#0rMQyG(GEJcGm(sD9s zKW}WT;UpPM)l61{Nr7w1=sV*-?Qi#7%gGQh1#B6B2StHvIvwk699H+>T6NyX?8swq z-U`flvpvW1eD6n!Dt=bHCci$pc_&vSbsCq`)B2=3E2iG{5hr876l5|8w^xCCd-t!L8L{)jw?mxt15+!Lt*|BquBk_3;;e~< zr@+L)blH}d;X9zfovv!spuXP>Td;+bcrdN9F8=O-2$d84!9GsBVA{vzJ{U=X zYsyY5wa5QEbeNO-z|>4-GyKa?;F{*%X?Om>|L#dn1eoe=Sr4y)0{6uCHf{eQ>-m$X zIOzkX!&DxIkrcQi<$SpK=BCswUve@GOtnuFA8*u-Ql++YQ+ z>4l*M#bc8B8BRunsglY{IB^B8Y0~*%my*FBeZ|Q=VA^cS&2aA&xTZ(TZ+Ig1+&M6% zfoUg`JK-=Dkf_d7eV!-A>^SgbOs^L8)~&E3SHN4Rz`S*@C;V{m+5Y`oIOzrBT(IQ@ zJ6VG}*{>%(HG;o(&v%@7z;uYoLok^Fce3fPzTNG|bvfU2G73y5EqM|i6b0@`9V1fS zJUEU1$Vm#Af>Z|KC>6M-JzawvKX@f@m6MynR7YhUm=w6C^2RrN6b<_Rs@hwn9a#x` zQ(*R1oHwoH82oQGRgcxj)H>nsJN!(g146(lbJS%*Omzc-Ds7BlDjE=U9itUf#emS_ zlrW};sa!x%Ws4C^wE}`FRg7RN6cAK-VuZ!Lyg&Tr9~(VZm-O<8$npsIPO6_NSD?o! zr&ck7DN#Vsg^5=F`P(Vaw-yb)7lzu#BDXR4C!l_&UV$DVr&uw9sZl^s1&R?&T>^rx zMzmsT5fD@%VtSbR0|Z@lXvNeVAgF@F^f>nW{$Fo+xoZY2H^d@C?s8250zKNC>cjLf zMF$A=PQ_t_vCrO|HooeOhm$zmT2Wy^fv0{P?xukKWT}Rm^WLZ8S@rPv|!$5i8jp3s3@aozm-%} zVqQ%}HRiQc)M8#oMIGh=Dgu}XsR&{oq9TNOJr(tsH&D@lc_S5#m>;I%Fy^PIIE8sL z70sBpP|<>U8x?JsmoZVs@cx;o#Jrk`YRqeysKvaFi8{;!Oaw3wG7-dlClfm{-^av0 z%nvbf2=fz6oWT4%6X!9%#Ka}cTbXFZyn~4j%qwhBVWa)l*rEpWfGq-;2W=6=JYD-vk`du5{oXu{4I;V zh52fWuEuBIk6H8>=4UK=2J?#+y@>f0 zi(bL}sztA2K9ACQ6z#W)(kjfCQMwHCm6Wc;d<~^*FkesUddxRbx(V~Gly1d*2cBBd8Gze4F1%&$^<74vzF&SQB0j8SgX7n=V?Tof#UT)KJ z8|`nAO&4KaXVW^&*V}YG=9_G~3G=Ns-HQ1Ro9@8;Q=5K@`DvS;#{7~^FJazl(^kwo zY}$c&O@vhw(aF4z<|6`cuuj)nG1(df6|7AUlczz@DOxKgLxZ4`vldKlhVPI{%cg2H zX&HJnI#JooVG=S3Iu~ojq+$?s7S@7E!XW7Us|DYr+3|BH=Wc|_Uyq1<-K{rGEQTIs zP9`>!nFl6K6rFcCxI#PE3Ra zK?hf@nAi$}%B-e`iK-yzfT|S}PeIV3R0}4Og3#>bQ8Sc@p&;n+sTC7FK{)K>PSeB0 zO%Qa*)QX9iVZq6lriY1@Am}iu6%!>v&;e2lCO(3oL!%ZOtb!{9|T$XGKF|F^C5YnqTP|d{`u8zs&E{@ceVD`>?&MN1- zV|ULaYUxKxQ^`${Lijl<7xc4f z<9D`n6^)#I|JDIpN#}F6na@7cQE@+`6|;7qW*w}K6s)vab+=#|zHB>R*q!Oqj9k*z z($&eFaNNwN{lg<#wy4v&pjAp1ZNjH2u? zEG?DQm1t~FL&M$!hNWbRxwLKMbIPC_vS>_!itDCXEZCNkI;>c_Z5z2E#XbNdJ5z=Y zaR)@=$wZ(bqUDr)E_+x>>56_xPZw={kTT+?F=Ax(Awa|VLEQ>e$%rNPD6!I1H5E}> zZAG!0p{OTUt1h||@heL@t83;>tqW6e?Xqw|)m8Bbx+!JZsoP37EV7c&hYSn$MCBTp zx?MDLma`k^@zis+lFvBMGcM53@VLuWydMusakgt|o6y-G(JYj(KT%VRKix-F#C4(@DNE(hnqn%6J~E>5WF)cbqC~TK%{kBUJe(>8+{`Xo zK|bAzMY_J>erl;rE7W;cFS#^yK?*Z3y%+r(4$lSv}t@%BJ|W3JAfHe4hdyy1^ag8CSC`9#+Nd$(4Lkvn*qXx%7}R zqUYQMik){>$lvy;l!9hz!^*df+r_QAL&u z@KIGcx>`?~xp37)wI%sF<_hJxKEtb)m!a=;igNAY?&As;qOy2p8>@87mE>0YpN}?5 zqE-z0%KVyQs?BDVqN)>=-O9Vkyl=S**iofb)?QtYcdSyOXKd-5S68m!etA$zFC~s) zdiK4qxvW}_kIj`0%BNv1$cs6!R|y~Fw&QdC4<`n4+J)|>sT(GEe`6zbl%hl(!){s zq7^uR_%}l|k~aq7+wS4v)H;ID6YttTd3fj?kz>{o z=$|T#uanWeKw2W9CGri{p|<+^CWq91W&5MYIwx+CQ74e5BxpNXM@g*@bwQ>rFLkyq zKXF%+jJ^t_84{Wy-K;}xx72NLGS#(Aj$S(U$=x#g5|FNv&{fjQI-2RT4(ZNkfA`a0 zpP!D&Xd93gacB|uunx7YTXUB~Qa=9GKVIALn_V*M0Mass7G)jH)a+=A^nVa|{%@D} z$mlCT8k3;)vW}A0JEV70N2VITj=m|Qtw0(j(4wrPq;`ii-g@p-Lwi$RMj;?AkkA6@ zVI69dCDqZi{HN^bzgk{AA)_roI!U1Qu#RTB)5-M0!Trk@nt%9n8GRW@^B7u;b(D0w zL+aZ4*XP&1^x7|FbPtebacCAw;C7VsIcK_U)-hJg|3S;GTIEJIRY)lI!gM2L)!S``#Q$z`p?Vg zYe1SHp$S-Ew?l2WerBVi>BTp%>>q#ZdlzK%0FX{gq0_Kc+zz!h;JY1C@6x$rzi*y> zOGZH;O%iB5tfSN2;Y`>0-^I=k{-XXzM)w2hxD+}r^{@`L-M03NPNt5xZwoKHfAA9- zZ35C+96F14u#RT>yhB2!p0W1Sl~2T)JNP+pe-c9c6hOc|0_;BGJ0Ak>w&wx9+acg? zbspe590Kn4=7H9o_wIX?^l!j&cv@RAlim1mg6>a2+8u{tl}MXWB0_%c>6i+CBU%OV~n>L?NNpCsx@5l;|xLd26q zofPp5QD;OvN7OkHFA#M>#7jh767f}{UKQ~XNj)M7dX7u#aS@M6>X?X6OX_J6Pf6;O zi034Au8g^tK*e1n;f3Y?0Rh)Mcz}Bb1YE=5fwQL`dVBvLbLlk=;q~?F;kQWl^VSbS zx4-dZ@_@7Wb<cYN4{+m!fa|(E@b~&BGw;0l-9N*Id5<){ zM_PD54o^yrlTrzDSB4DCiy4zUF$9?ZvH*8q2)NeEQ*+0KfNQrrz+DysuEp{IIBQm; Wz%tWTBfSW#5ANIY%yjTu2>lOKTH%HO literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/core_cmInstr.h.CDBA5A00B6B2E1D6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/core_cmInstr.h.CDBA5A00B6B2E1D6.idx new file mode 100644 index 0000000000000000000000000000000000000000..6db6da8182d3ae2d7e9e357b82bff0e22d18374e GIT binary patch literal 6680 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 E0Ta*81ONa4 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/count.h.BDE8C409E04FEAC3.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/count.h.BDE8C409E04FEAC3.idx new file mode 100644 index 0000000000000000000000000000000000000000..801d0eaacac255a90bd0a0eb66795f634b17b859 GIT binary patch literal 4404 zcmcguX;c$e6n-F#kVGIFKoB)3xHV*iAclZg7L_0QVb*JI(Z+I=_l@PIB)3=6?5n@4h>4 zCR06jtV|3*qE>A)>KKh106+qN7KWzQx8xL>jDG9d4lVNSh5Oh<~&|BCIAa zcy09@3wP`QVJ>nQ6m0QptZt-CU0yAZVqn9Ibu>dz`qxse$XxV#wh<1sp33jyS2L2AtCBObo@$>+&vgYnqD9g}Sb~<7YvW)&GkZ}Kr9f5fV&uAnIO~sQtwfHYF{G_4ZHG78GWu4}rzGJEk4&`Tjd$8)R@j%3S4iHd=xu z$P(nNC-rZvEjzMJ4!PX9D?PW5()!vXczY4Br)BxUgAEY~H((nvIj6HNl9#*UK>Kc~ zw{QgHa`&L6YEFs0(5mFse6MY>?7@rAqY>`f$(`X3zG6lpLy)}p+&;mo`q8{{np-Cb zV~M&qk(9Y(FENrEtqz#mov6XjYM+>2Bq5d7E(~oE*NqRZS3t(i z1#hSK`(EuLzyuzGf$XHXtycGJo-}PdqHEHY5lauP4@yPglAv2Q@vk$pAkIyc@qOdm1hcLIhZYRz^nZ0gn8HBlQG-n7_5u2LI5donyYmTf_ zovGv%FaxAM!b-5kh=716DZdEE9(xZ-xllThlD8EuMFcDy?mxPg9A)RNbm!QOO*zJ0 z%OID#rhRoEVYk2ZUCuiL)iI{piz^f>5jhX85Ruo82Cm`d_PAdXnVxxcBjj?ozK=b) zvi8x}RlHo|$%>?q-s#&A%@FES@w9CK_~ z^C1Xx=c>WQ79*=4-H5<7+i&OIKbdnBfkm^o1dUP8cfi~}8_wKRwykqJ&Z{fCbJxh; zaY@aP%RTeN=82{Ktkq|Exq030)y|IJbly#b1^Wdn*k@RT$^2v-Pwl7Xco}#`DjV6c z<yGGO_9^|a+*F)^G|ct&GeJ=a|?hvii-6Ti*i9YIVUkMUEfU4$VAUTKQk{mr!*y1KPNLO zxuQZpJ|1o(P$R@by$l*#nVg@OmYGgtOERHxs1IYrmlP#tmJ|bhS6q@}WyMfZS&*8S zn47AAroaXzqU@}!QZm!hQj1dal2hYBdVr~>GB-&Pm|!lq2Rm&!5&D{kfrW#CRf0i+ z157Y*GBGl6GB7f;G8Cnz6`KLm7sr9gH)imJGcby;LZ_iS>~d;}8!t;rRi9C6~P$e3*Dx#W}?#VBXt^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ}I*VsHHToBu6iU4ptTAmn4>?(%h=#{JiAU0${Kt z7G;)X0E0F&nI3kgWv0_O3`;5tQsYaC5;K8*%PfvB%`47K&r3~-&&(@HO;0VNxhG5W zQc~06a}$$`@{4Ke)tt;+pdT5ED|3@TnV={&t@tS;1A|^^%@vbpdwCdn7^NAcr9o04 zAb4xt))&F$d_dtmhCCsNAOpj<^?dCHqEF?4!kQeKvM^zXryndl7`zmL!f`Bd!Z2a> z9hwoR{xPXB^DxRX$O^)Qc^DNL6p?tU461NmwBCu-+s6L~W z#mL3T!@(m56ZVa1@z>0)F9E7{ly%gu=zj1{d!9sdP3jb>M^&$Zz z+Qgj)IY(dC0cHr$Ir@r7JXL*FIPc5CJ=aUTq;9eRwMfe9A!(6RMB=GRsv`0180ZX1ldfOYM{eY74r~0)hyLw1kcXjE&|2_#&%93h*MmYTpSEyu!9H)0F{wY m04zCSfH9kQ19MJ&kPRCXGYcy_8w0HL1S(*HDPmw?Lofk?0dpz< literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/countr.h.23679444F87C5A17.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/countr.h.23679444F87C5A17.idx new file mode 100644 index 0000000000000000000000000000000000000000..8be2ad4463a88ae16274b47b91c5942b5b175e21 GIT binary patch literal 1232 zcmWIYbaOkw!oc91;#rZKT9OE4GKc_iaY<2T6BCdD0%@5!saE>>`p#DRp~b01#rnxf zN&0$a$pzWz`iVs)nQ4j1CB^zihQ^l3Cdp>{$@#ejKpjQJdWl83Ae@|&n3t|^re|cL zXP}>%mz-0YlB%DRnUq{np&uWglvx7QQkqv%q?bVltBUeV5=&BPZdG!AUUF&yFjx|c zGD|XmL7SOO4?EK`(`g)rrFki-Y4N#<$wm3aG_@)xGdHuOn4!2bHwlyoi&E2yk1{ea z=#|!7F?qI^hmnU-ia|;mBn1M3x7KZa5nRp(6b@tv6oLpcFgQH@VBx{wr3e&uWN{RR z3A69ej5zg=NsWbvQHDWA5GKsSsKB6r#8Y8VLE>pLXu^5XdOvn8<=z(wG}oWOUlL}3 zZ%m87W^R26P*_`5Tf3tB!8`4F63quv7H>Uh`=Wx8i;;(eM-HaCCUuI`qpH`_L8^_k zEnuppyRu)cw23><40N2ni~~$H&~f?-NIVsN6*%w9!adhZyrgb|{39u&honVP0g0y~ zse;7Q6w*|Osr(buyH?TY#3!IrG&M9`VZsyhy^9)uE&mJ@7H1HL2cLC;kXXlm&u<{> z5@a%As(~&{Rmel|RI*fx5j@RA%`6xX7@IkXAWm^nau>#HWnyMwV`YF9PCyl`2vq=k3q2PA literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cstdarg.8B2752D53B87D8FA.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cstdarg.8B2752D53B87D8FA.idx new file mode 100644 index 0000000000000000000000000000000000000000..d7d2cf8461976cc4ac53d1e37c74feae6159ffe0 GIT binary patch literal 602 zcmWIYbaM-0VqkDi@vO*AElFfyU|Wt@QQv zovrjki&Kk=^^=p5^!3V;3$oMo6N^eR(-MFTKR!M=KQApaou-yReL@>MAfcp}0Svtq zE35c;BP%P0vc&kD%;FMYh*st%DFOp?`pLTwdyq*^tAKpMew1VPs@w zC`wH$?gH}kN^7o|Jlo5|$iuA9pf3$kj4*(a6RfeK`@uWyc@oW&HBP)((`OM3RBb3= zs18#dt@mTsQto|`Kw)DBV@a6sy$y1W9+%bQL8^ha!wm6V7&~j*&OPmnT+Cb?T;ed* mMX5Q7Aa-$4a!oXLV?nDcIzEo*KJ*?W6PSBq|-9(peUF2_Vy$6W88bU zc3IIF`2z+B8bV^wXi$G?j4@z9zGD0##`r^td>I8%;}61z!NeFoJok3zp1VX7|BNPm zbDsA+=Y8LE-jAjmgMRg6CsvQ6mm?qka9ZG z^XyBSp5R$Yh-J{D@cCFg%d?r}BlVh*dq9X~<+l~3SYCRx-bEG%FwcHx%XnV%S?QE{ zzQ`2nmP{cJxmbyfWizQfD?xrTo1KsZv?@&SLQEIGbS}QA3gA?&c>dkDr;QY>u>l?G z4D~1i^p91+qQ$x;HDCLJk%QL*Z4_7#f$QL0iU57x0%(#6W6yUV@85N2RSh&Dg1^Dv zqzKR}!(O+r=G&j{a`y}m+9_Ct2+@wHOA(;2M@M7}vHd51+lqiXgW*+CH#i(Ghrq z0y826Isz_5kQlBor*98mYyFUd#}Ogi5q2qp5bjvUzS}>1_80}L5rOSwdlW%jym|k~ zfh*^_PPA3E;UIl=z9l5czd!ltkLJS%Pf%b&7K&?%or)mW^!45;IPQhdP_P0K(w4MC z5umTtRdTVfr}S{Si@_c8@fB0{;hyj~HYry8IUP%d^? z6->`uX#AzEYME{JCHw38H7_afN%1)PrFKk~&%1s*Md>KI7kZafxB#woU({cmjD8+@?QgZdf~!c^tW*zHI-=_Xe1OQC~OVe)e4})?yyILhQfY= zHX1e>35r-FcD45CNMFROK_ihMK~Zbet~LT4bw@oKG!*p{w8gN+NDymf?P}@KY#-~@ zpb<7m5NGA=_`xZfb8{Yo5{874ptLD%R%?w;JJW80a;BVF?MFJ-m2(l4H{^{32`0g; z79=e=1vf!OQ_-xJJ6-H5x(F&6N=AapLuEg%T72uOW@SL&0%)PP(c4<_MQGC*Er~ zy%{-J59^JXy~(>gaOf!=huGR~!&QaaN*;AMoIUrqpFRBG1rZsM2M<4-@<&qyuLM6AC1&dCeXhPF!- znjjD`;JDBvfRF}-A*?|Wh-gq0q8h{kt3e!a8kB~#2IU~9K>`RGRD_}il^e^eab&nA zb#2Pj#`ie7>;0QM8h*a4tEcPh>S@fzqZ~b?Hm@M?*_g}`1x_537iu{H`e~d#lgL+p f%GEZv7?v7ap;;zWK59?^OR=uMRp literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cstdint.A28258D7D90B4F09.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cstdint.A28258D7D90B4F09.idx new file mode 100644 index 0000000000000000000000000000000000000000..d61ad88d9fb079c8f129454f7450cf66ab669e8e GIT binary patch literal 3688 zcmcIn2~Sj46n^IcdRYn#!XOXaYEZ0nMvRLtH8Woq&N*sq_SmF%g%vdpMqP7;T z)TF45(Ut-uOIeCg7Fh&YYN4iTD@IL?wTTPWmfEUSDK@<`mox9aA0P>N_vHJ&d(OM> zp6_H5mM&hr!B-F#rYy}i8*O@bK@bAzztv{R$Q9|r@fT;X+EOwyZF7Xw43jZdtJN-y z)vmD`Emo}|Ia#ZD-;lL2O{=%qGE(&hn^hY%ea37`@o*ksP43X4^vx0oIO29rKB zO&g<$iq=fiW@H*nTT+Z#Q%15OJ6o&M88&66W~9B)B*Sm=LUXXg(xeOY$fn2WY>wxQ zDE5qrX3tsdp-a_UT^whCL}!3(XMhruk=HmQm&h5pRL*EvX4Yr3lvy?lUCZE@z2hmD>WW-sxmXwGlF8*dF}Yqjbmh{yDt3UZWXEc_=56NW zJ~u%~m^b+BvEAk_iGico1$8R{QUd;hr!xfb*zNh+-G#Z+Mo8jFq}YMj!B3`md8{29 z9v(kZ5=S7V2uKl6`C{6#H;dMsC6efelqw)q5G3#Nu*(t|zbL_55zUrT&@UPO49WsxL~K}rpf8c@rL z_U}l_85cTlu_TU1N+*y`P|1{{e;!>ZcxC1iN%TcZC6G!!(VE z|3+DL{f}lOtvfD>FCnD@NCm%3%k-vMv!idEkwkB#Gy-YlzfsG@q`=KR`#L2t04Z%i z+W2z)HeB9i+O?od5<`&E0;Gjczv!_TkEb$q6bn6ffVxhrEvD%id`RF`c)Fu zNGStS#=lXL>G@6b)=Bpz(F-XJKpOaS$r|;EPw>+x&n3|xDdj-Qd5XoDYPFA)dmB85 zdpi5T&4H=;qd&lorU2_?1h9`O!1@;f>|P46u0>#6?~=3U;^I8P$BmVN05&sKuqH-8 zvt>tL^qtc_RFMxtK7=yc5d`dQs$e~hioT0`#{ZcZ=|>gp;~_AxH!~pH+!{s!)>a6_ ztp6?{bZ`223a}f20Gb2M!At>xK;zNnCx$AfQiU=(dIeQ5k3a=F1O=EgAb`F=0p3Ywa=Is)h@RKc7CfkP2J{gnr2tqSvTD*(R&n1soF z+zP?J5GKoU5%?GJu^s&Fd|V9v#e7@>suGBh^`)RH<>N9?mGN;o1eHUi%&!1-1-vT9 zm7uQV<0?>B@o_b%tNHjO1fK+rtgnIK8a}Rt;95SegTOkND)Z|hsGhH<0fHL%xDkRH z`M3#!n)tXG)XjW7Eue1U<5p0&@^Kre+W7Nmhk$mNBG=Oastz9Sgn&*N$ALhHfbCAP-0$jK(9; zd^=StxigSQ0cPg76%I;TE*p>t45}taWSTD?qY5_j5LkV$D zrT^i8rV2KgvD`hq`}}fM*E^{~X+k)!sY2<>IHf6|H2AIOSM1;Ua@1M6l`;noZK_b- zD;(7nU?Uo+-_ZgcN`8nx5tzE>38h5rF=>jHNG literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cstdio.AD9B4EC480E77860.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cstdio.AD9B4EC480E77860.idx new file mode 100644 index 0000000000000000000000000000000000000000..876d842ed17aa05d5bd91b764bcedc5e37c8950e GIT binary patch literal 5632 zcmcIoi(6Gy7C&nXwpH!}L#2(H4^k0_i@=Z)Vx_5+nUBvVpNN-x^(I{KKDb;!o(d|0 z;sZf28zI4*w3mIO=`?0Jj?WyG94jqHi?N)vEFX=|tiy4|K7T-b-#zE<{rm0T+I!u- z_gago$>YY|?x84S(vovBY@XBrMNvZV`AiC1!Z+NNb!m-eS$n$ifjWcT}n?L;YCOQ=JPe z@li2xQPCEM)0*y0vsuy|^Q}2KmXs80rqk|N@S7S@-QmdmO-;00h(iBmX4#yI9i5lr z!I#V7^q`BgysA_2iOzJ{Qq$C@Ms!U*Vr`_uwTY9=;_qiM%o6`P!sE>uI zE+tF*tscm>tE!K7NELV4GBUGm_;RLZs4t(xnWktaP1= zKVW;(5)x8UViFP*Pezuy0n|6DDqd&%jIwEM*>-J2_5*?J2hCrVvq?JJtwD<0pD{nD zv!aw%FTPl4@PS~D4bwKRp%Hi^7?dvUO<;k2*{#sdS3WffHk2p@yuj2!NV+!iSnQ>L zh6wf$5jFtd0LBhVoAczxN&V9M2sV%?^}y?8$`hA1i}(Sp0|e_$lr6xwfMm#DQ?c~> zy0(FW#S*0nc$2KMDDg}Q?23*M%uEyy_ee8YdB%5q)nBJX2^K?y?ZCIoW=;!jIcq?|u^U zqF@gbWjXNW@@ig6>^ouOXs`-4geYF_{nZQvHZ@Fs?{aoPnqYm2unqV&+3~)qpVYQ0 zd5Z+=LX>5|m&s=8Bf5;=mcw0w4Is)U;G1NX4HY-eHF}dhg7qLu9q>ANJ&xR=U1R;H zeS$qol$F3&LQuzUQ<5VmTJEP52sW4~xja{Ly?fq?yB~G#QzY0RBKW!g*9Eh{#@aiz zhF$}T1shI;V&KK{JUVxqz5MF-=~aS-5oHDN74kejy)yZ9^o zus6Od_^N-kU=c)F!k0*d$VFo!*Ob*G!9s)z;1#md5>I;ftvEWVMX)|ZsR3RiQ$9|~ z9BPQ3u~V?$6J;szrSeRE>Urx?W%Z?9f(fEj0D`fneQ;QU<(CrVRLeXWO)i%^wQZohaqN%VkPT zRbp^edHzAc`V*xEc#G`(d9AfCzH>X_uwb2t;^uB?msqZ?d(%I5?GeEqAwo6qYT3-4 z(4=W^R(XyI7D<#sUMMa2_7BmgZn^?L5iF1hKJJqUNwtIbjvhVlQ^DehPzt;hf;+ar zi`S0-P|y^9MX)HMYzDqrcKn}5wEQpF71SnJFQTjlzFMBDaaoU-OLHo(3l>h4wZPZP zDu<$DeU3p9HwEiVl=Z;Z%TD|3tEWbO*AjbIuxO$b0WXsG$;Xym-m<@MyeC*cqBH|< zmXAjA&Rfr>hhMla*zbta0K7q_xNLTJVNgf>fi4f?PEN&_|A~AhwDk3%!?%vRe6tJm zHfWof0C8Z}y~t&gyCIhSvl z^)>ep|48q(=ga#a3PV71Edlp-MU{SCGOiB-dJ7ah(XdVbm?lfH7cFQpmqt*;ML>(R1W=qsK#i}| zJ$`58znI~}VQ5&rajBbvF0%C#y*ljHIsf_57UXM}Cym&%Km2i#7djle8oKhXJ!zs8 zno&p#$;79CjDQx12^e2o-K^C6N1_G&3QnEu6!^D`14kjC9$DfqxElD@(twFc*sX>H z>RvN{Zs?#B0b{URyEq9bIWl_IGfy;(MW4!!py-eDk$-`s{`YP!`L;P3Wz>s=L>zxy z_{P+nuhnk7|N91=DRNa$c@6gNW2UN{wn^!{8oL4CZ2x*d<^tk=v!vy%Zuk zw3kBgQhEF`FfN0~I`A?umdWjMFqX^h+*FkmkP%jH~4F zm0+rr@hUJ^$@5-^4Vc%+cr_TSWqd7|*2;S8Ab6d;-t}NuFVAlSm^R4#8Zgz! z?OHI_%KCL+u9NL=0@Eg$Uk|2wx!nNf2ARJZOq*qV3z)aacq14aWqVCvYLfZez_d+n zH-ouZ9^V3n7I}T!!Mwc#r%W0Th?YUq$)Wri0WEJP;MB+U8*?AtKLgK>mNyVEE9&;% z*Sh^>23`p}K-mG0&>rfX@zIPo`=rgn5qhb(eNpc(+#5X`0WCo!spo&_9~Lv~Llw}< zG6KGRzUJqr>#|Z1&=O<0{Zz=dXIoUF3&!h^mE&e z-F~#7<)tJ=**=btV-Dr`*eze=l-XmqmeG^UmD7RWH>OmTpuUzB5zz3(ytBueKVOM} z-W5~eYAWI^RMY`n2P1n3?e7(T(pSpyje;oazIV zlJ^Ex1=y|6*r*mjK&t^rX#Ih#A!Qe)A3zKGZ9}C2j?hX18bJjC0$L$Jz#IY+D|42`@Vh3*`hCSgg)4tBOdQLeNOKS2*}%P(ZQ$Re(tTX z%h;_I7~~_WK+u97pt=JAt=^y!=XbtxA@a=FYbd3^EvXE_5&F!8iVp^W z<9ba&WY7G`&0XBKw( zT0RsM&`8#ggjA!k+E~BR`gM}1HN{x9Rn||`}X*EIA>?( z{qAq>eeb?E_x^Y-YtEeC#c|y1{4Af-s+c17uOUOAbp0XSTRK z3S4E*EII5hYkrT`fy>ASgY@a%S|7peCmaTeKX_J{?XsJ)o) zDCOXnr*OTm*c_5|n#p9EJm!<<^uofgUJ;+z&)ahHiQJg9fBL{|5f z*+!4qmCt#s+Bbv!!Qs3D7!yO*{vSM{| z5L|J?G~hwK!>RK-EsjWzdw6*(R~*+6A@C!f(~e-QkNR}nz}^8Nk-?6Vj-HfnqXfP` z5-Ml~LnzAm$35}oS7HVJ86>n2+CmH=A0>g?J5Hr7d`943K#ELdhLF1Z{BwV(4I~LX zkA!ks9ux9#V(`R{V!J0(;0Gb0hR_q!iI2CP>vr%iZ5* z`wInr91==s2{Y04eEqA-4;+>Sek2l_2yG(FJoX>UnSAmuvQOZXk)lwA39{hA#ZRN{ zOMwtMs&Cs?5W0d42`x5iZTdT@Gj{p~el+@UQYRB+-{aGN)HimP3w#0+8VGG*6L#6V zceUYjXNABgVVG7zTgl*1n9Xzi1Fc)Ss|5ae^x~#&X1Ok3=AriM$<+d{LxPRkn2hed zKku)Hx(fpWKNbnaw3wOb<^FF-XB_dh0w05f#e^;?i>W?(;JvVKG!1qH+9ieqB zrR|cge9_%8?+bi1Qc7tl6DFOzF=OM&s?7rb6C~6UTFY*JeOj0F{DRdV3VaGuywuCA z<-z*g?Ygh3_6fXzgaTT?WP^4$UsGc3?E)Wx8C^-}N_OM=T~m(F{QYg9M4=CfN=%T_ z9glZqa3>E7`~W04sDn8jrn6(Jt2_fv3jDK3@KZlCiyYVH;HeKzcL=-*3C)Byvq$i3 z#*5O%4NFf8{7|IWshvsJm46=VcPH-T8G$zdBZ2yXjrREa0zV!J9_nH8X}Zz5 zOSzZ+oxmp|VF{s2*dS2eZSuH5p^8fe_EuV7^Of7<*A1(e4M!UOJ$HKqNsQGFHyX0P z?}@B&?2810S`!h@ZGCG?^19sq0IT&FVJz3+orUAR-2P~)dEy{oYpX}T(OY>Y^{WHX zBsx~)#1UF8;W#Yn;6^Lv$WKi_9CgnBn|R<`sr84j_3dfY~L@ynbg&CYPNIzJnwpNI)!Ue{a7%{fiT6juh~&ZZ5i+bT8#j$9FeI13!o6 z3_~_;P1;s=Hhmnh)zgOTHgm+>^!IO023Y;>5ng*dNwD3XG8JI0VxYljc^p|8-0>24 zS3hBdyJmVnwFI`!CQ-3bG-@aY#RdgS(i#);u`Pi?Ye#6nW&{Sc2_YODd-UeErbg$0KL@(8sGCs><${40k?_+F! zgP(~|t}AD}ROl-hW@Stz3QcLZl62Y4FXX>)v0?emZ)F$oRh5D;N-|(;QVb2Vl0NzV>Lr%~e6=wl zjQR}tsxCtqRT;pV8bd=*jqiSB^Cv!VqiQgONBn1EPvGiQKfqeMKm%$waK!Rau>q_p zHRPjC1B0f|(6FbYu6(OfRRIyS=8T4izxaCHpGIs_4Q%y6H3yE^{Gf&dSk-Rm1eF`W zs$xSJ^%}t8t<3(~wRU~+$XW=hHdy3;{iw@1G$pG6V709x{I6QtnO^$ra)8x;Ne~`B zt1~mBruj{P!waf0^RpW>TasJBz-~&*>E`bKSxZ*|9GpN4cxPplS;AKdUP( zxZbtC4PaGvA&d$W78QQdP*;M1?JKAz0S-U1s3F0iYDe^M*YDhuF@EbV2pfI`zsOBJ zP-f`b0|qw9s5HS1+n#(+#$IiIV*3c#;ko~K%ZCYxhKfUA(4-y)9wFu>tv%TJcQAx6 z>_K4eEBSMKR0I17p@N0LnsP-)s9V9nCJxmqz^Y0`HfmIWRc(qeDpP>Nr&)EG9NWC+ z=ck^UCJI$}Llvm#=z8+!M`s@xbq4rsno+d^JN$!a^EDe!tQvO~_~8w_pxLwd&Bmg$ zQ1sZdkJ=U-u`1)g2iIj>^xirTZrIgs+`s0%gd*t@!0c*K|AG^?yrAj@m_3=Obpd8& z5Gq`N!?oRlBf*L>|I6uupy5^dtv5*goQ30W!;;vPp$-N|?B{vxrL7Mdy#4Nj8&<@j zC{_eplwCC%jW2v0PP@5^gD>naL1Ce-;vG%7*`mfvl9U`TV+p7jJi#ib7h6dY)hS`)szS?A;$9Qxd8V(9momB&!wdHmz z*KY^93XN$0%?320rc}v z)}NaB0Du4liuqz;*dfF6?V7yAacqsqjYc4yPbX8P$4_e$u3iM-H3ahbJOXt7km7hMX?Ba8 z9|D5Qi;4O->X~wX}+yfIvQ< zPk_dngzL%ThlfPY3jqUfAXDsZ;GZ4!ZMz_H9tg<1On{j?dUo90KIN9kxg(In=MW%q zddQKeYf_iU`6E!o7m+m_Zkm5v-`;djOP#^E~5vsy7rUqzR5cSmg^QYT#vqg%G1Tub&h6E&|uzc zG|`FYJZ{w)d_hj-Q@xSK8vrIO^HIjU2btwN%1wF1@9^3eSOZ+36cvKV-4__%oPCwfdkqI)(F*NC!GI!j+9m}#nrhB6F88@e{yU%2HZIIru zuQa26{c|R>R7ZJJ_{H7>Yh$zh;VgyJFg#*U*EAuGMCsb}iNk#vLI&x})Mk>tEFp{Z zWoxrZUyhJN`f`O_66I<02$`?VCsBd6fJAyhPsSMp1BnW?g@i297Llk}TTG%7p@fVx z3Puu@3Z*2H1(`%9A5-}7PAG!%e;-#Yn-^}oQvf?m)2mSTPkZZ_(|WiqszwdOu^q>K zz6*}C8h~cE8qcF3Vce{yBo_tJi{35272P$>eeMd-G|{V)+|;=BkC;r;3t#hK!d~y_ zjW2hQ*-IVebDp0$@A>sF0uw4vT5Qd`TybR?tUHNM3cz(gZ@(OUCnRt=&@}6?E`T?y z2k8C9p3aAc{jsZoW^W#pu}A<-?-rH@kXcDU`u9-ptx?jkU0_0GtP?=fM91m?GOG$` zf;9nTRtr$ZN&qsw7SrN#pPDaU`W&XD`;BD*XjTr;Bx6;}$DQNP90r6k1)ad11q8LghLvSS>0V@ zFO4wC9TWX_=vv_h$aGJzMu7>dP53x-TW1+t_J4H?X!aWi<*c= iO6&{%F9Kgjv3T&$we4wLf^|dEi&5MtH;o(08qI&}ysgUs literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ctime.9CD23D8851A90920.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ctime.9CD23D8851A90920.idx new file mode 100644 index 0000000000000000000000000000000000000000..ac90e0f26c7689f0c8dea433e67c4470f2067aa4 GIT binary patch literal 1926 zcmcIl?Qc_67{9$M+gaCFwk7PsKoN1vuoveftZr-9HGSLKRTm-~LbfqM$YWlPR8uaRr^XaV8#YtMJ!O5AN zJW_tf^IREAq?1X?;*#l%;u1x%$0hF26jc-D;bGDFx;!?L5+yaCPD*lK6I-8qzFlsU zw~2BtI|egU%_*r_ddnGUG$n3xwzfI9is?}~GoDbyOnO)@6vTL3&W$G1smHoV`8<#1 z7&Ji6*SJ)+6e)nb-iCxIi82aS1Ju zz?+cJNBS6r#GVUNw~Sp!1il6d5fX9eduTs?p=Gy4m=kzA5<(wDKMMRRROltW%rQAtNovwU=c2~|Q*RM&{B!@g znR|;~I0d_bnGN%v+lj#dz|?4DV;+DA3)>I3ve8M3FEzMVh!?)CwjnYiul zXY}oQY@W?}uiMtm^t?6Rjry3+;cL=+eyjg!y%%r+h0L-RJ@&3i{oEw%7fHuqit5|H-uBQ&dPT1r)dzC-7_sz<;L4-{XELsqu#fnQ> zJ@b2Bdg0$=Ai~0Debb+xPaOXOU^XUL*dW3t2bMFyw2V<3ix^-wRGZ(c+S0tXX8S9YsgRdfFXZ1VwU literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ctype.h.A859AB71FC1AF149.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ctype.h.A859AB71FC1AF149.idx new file mode 100644 index 0000000000000000000000000000000000000000..762eb73eab2b4b9c021ec084bdb53049cdeb0caf GIT binary patch literal 424 zcmWIYbaPw4$iU#7;#rZKT9U}Zz`!5^#Kk2=nc6^cFi6YHNww0~*LSwk4=qkDD%MX< zO48RWOD@Px*H0`e$xKU3E-BVGGBmbKHc2+qPtMOR0O}|z)=MnP1>xkJ#JqHUGd&{{ zJp=vByyTqHlvMrXlFEWqy$lAL7@m`vlw47vA0MBbpO==IPE$)@9$_f1%uND?S5azO zu{e-kBh>$7iQEfAMlNP94la-g1Qey_B!XDQMajj=AO;hNfB;yK19{B5T@8}zBxc=W IVq#V-#O?0oX_i8R;;*oDO)&VIPE-UvqA z+TM9NC-XD=&a(5!J(?ET6Ve-rR^LK8jDTM6^?H}pdw&(y&9GP7w#{3yQw#0zdwpia z=c0K4e^+=By%=~t1-KMFBL*2o4Bj|TK1Kqpw zCoFJxBh1`oAO)MIRk;7(L$F+8gnfZvPgmB4w)@a-!&G;m)q)W-fVSQ68yTG6^o20j za5f^^kZH{i^#rxdcsS(KbhOzL(C)S-2D^g`7rBiNUZcBR*NiS-z?~g-g(k(FBx`@&YOqPR2l$ z!|DZi^VK?;ILj~%a7Ce%8B%x)kSr*4WinTDV=xYAI@i~zNN_rCy#3?E#blXsM2Q-w)Ru~ z;?~-~88Vs9>l%lmajdJbfLbY62Gq+}7CrTlOr~I{IJn}Nk7Y!t%kO$ueczUNM5V<% z)B&m-u!mZ{b?utstuywibUKF|rpjSEWJq3^?vI$gGAYJTNpK}Glx0Myfak8a7q*^z zQYJD_`8X6GhqBC8lxA0X#m3G0sf&@PWKx1W!{8c59?J-xKf3nz-l@-dMy2IEpMI+J z+w+;Y_Z4T&*FQZc69sujz%_zAmJvKB8t?wnv!!iNrA3_QQK~#@=lPBEts8ip#EFPY=oDHUy=>l|qnZ1nBD4e`!x_ZhA$fnYNXA9EYfK$R6zE zmxl(IBq~m+RJIVrv7ajY?U1uY2kxSQH_oZl$sspExe2yAF+o#*XnVo?ZuAOCd-JLK6Bg)M~)r+ zRwh#sGzzX!1X)IaOuZvKLn0&!=e{^Ie_8=J9ko&|&y9R|GxgAsYdakHx>PFV*O};s z0|wu@^ze^oLU$K99j#JpE`DZVHpHNf=Obg|+MEEt@YB$mhK=0k?GWo_ZIF%dCWwhx ztxqJ9zc9aBH1=KP2kV=$;;GV9ev?Ug;pIn8_^xMOE0V%HKbf`j?BL1Q=z4rzBh}>A zr~3Q{G=BQ&%=fZ>A$^?gvaJj*QXvvIN zQKkh9cwzSoa}Uxpop|2wm+rT%=m0bfh!yJ}JNn<#AFB`I#x0f>=k_!F^J_TMmrr|(-{#?nB+R`sUozL*`Ki>TN zp785YtYD3_CYLG~Ib0}9+{Ap=%vlCp>M)QcZ~~aW^jz*R)%-ipMGhG(X%h_jcajSo zGBAN-IdFMH220cg0}})WoYQ;a`I<}riQ~SsNG-WyGxwr11rdfKTnUlS(m%nM-!7YO zjIa02`e6tcuTHAVZ9f-DOq7WuV{T0z`fEL%d2*7|v07SfiywszQG3^lLt|XD>r5A0 zmw-(?zf8UxQUcEv7vtq`&h7A0^EdBIdJpqkA}z_~$K@CC`CXNZE)L`$KrXd7kiVig zHeG!G-8;3tMV#pjM^)RL1WDBC!i?-YwZ=ar0jw=3Js&;rf?m{9kJ9~>`4Am zAOmj{P4Peb4eoH6RL1|KU;{e<_{lXiF8Ro33BBOU-?2Tf8M^=S-U(d6Dyb^Bf}fth r?}<4(_x*&gXFF%JzkyhcsRw+Sn!=_Q&i)&7B+EYeXWNsfab^Ao1J3(O literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cwchar.E408FC646F0D5547.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cwchar.E408FC646F0D5547.idx new file mode 100644 index 0000000000000000000000000000000000000000..bbbb4b5232aab9a50140df6dcb4cbf4e2e1362d6 GIT binary patch literal 9008 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 Zpa+G*x$Uu2+avqqqqVPW`_!@R@&7S|EffF% literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cwctype.38212B9A6D9B3D46.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cwctype.38212B9A6D9B3D46.idx new file mode 100644 index 0000000000000000000000000000000000000000..a5c7e61681946f73a340b789fbb8583524f379ca GIT binary patch literal 2804 zcmcJRi*FQF6vk(#3*MHNc1n@$AP~S*3}y#P%VU9}7TWH%-M-(Jc01iIYj?Nf%#;?v z5<-9&2~i-17(*+D1Og={JR%q#rJb_SqFuKsz zc=)0Ty4=baYRJ?Bkp+K!e9`Q0@tb_nqIdI~)xS=?;frw!yRLo{+&;(Oj^I-hfx0{x+CG^tqq@@EA(MkFhS;bR4E_ z%M9k|I(sxx7N<^%j-EA_;Rzxx^PoMR0@RBiG784LCX2k@Uwe#-9&6jsCki|Fz zDp@4~MmAjX$xGf}B#X}>kk9f7pzR5_e`2buWHAweQdUZUO+DK;?%MIhkj3W_s9`k( zxUx0(uU}96ZOURS0)?!Q09WsMlV+R6fG_@xduHg+fGkc%pqf<^VAJ07qeI~X z-^gML0=2A`JY-hNrTN3NGk=uDWCSW$1p#{M*ZQ``2|vrCgg`kfCnZjr*B|^My>d$y z83F~YfB=nMHUE5JrBq)$5#>JkvAyP!`7{;9@S4LD0QEW6d~0u(xmc zHsj{$cuTx>rLb~pbb!Z(+7cTX=Fa!7-J84Dwz=PaE}>^%UkcEC#!tzIBvw&VlChjq;c4 z`@c_pz!m|`hZbcVdZ78RqrCh^_jIGb%K$0DcXoHG`=Bo~SDrF;?g$GO3J2|4R86kcNHrv?O|B(b>XPbS!oAno zM^EjaaHa+(YqhXC73G_&4vbE`+FNglv&ONwDJW<6{V;HF>BRu_oS#m7ac^`FHN<`t z4uZ^&J<7dD=9Ony-hB&XZa664FZy@??binlD9LRGW%Mz4&D_6GM)v}lCPB{vnI^Ht zcHcSspK}Y8|Wp8?oS~JJyyoK$Bk@-^DxNtL_EoDJWzjg_%qo2Vz$_ZjqO)8w%lSn3NrUaEQz)W zC8?a2Bm91)vGpwE=Jta0_VHTgSG^JVnscHyva)%jYC7&A`5f2}~oU?xETf5y-M DAAkg~ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cxx_atomic_impl.h.F57C898D119C5E18.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/cxx_atomic_impl.h.F57C898D119C5E18.idx new file mode 100644 index 0000000000000000000000000000000000000000..37f96e30bd24023e8dd05504988c2fa208884185 GIT binary patch literal 4142 zcmeI#{ZCU@7zgmv=cx$Z>X^C-!mUj%VuU(n5Qq|qS|mba1>BUuKurXMM5DWvb?5m9Bw4bXG&!Gs z`@QG(p2JN^ijRw%70%cyQ+&2fb{e&ev8n1yaXKth0tg)G7OT8e6vb6b#Vv~LP(&#$ zP1I*enY+!R(c!eD8zrYAE||Y?iL^*sEJ}7;rrK~QdZWV@cu7`chFM&!U$96&Pqbu6 z);%U!v|7@n>}=6sFgoovizKS}XK1k4GOhZZV>7Kyw%Hvy2D`%~JH~2Gr`=$dq%oRP zvS*}Q%y0N+j^0JlXfiouMX{&9@jL0v$&?LFhtZ;LJd0v5DvHINVNA2iV?DF_cami> zTCF(-$)1@r=2zfQw{MoL&Yht+-|$zL6sO4~r>oC~99vr8vEY!?l?;I~{hsey7j<9O zX>^(h77-PQ0>|J$vVG;^CGV?m4`KKa&dlE5^>|KkL~fWjcEbHN)ytxzHOC?HIK%{l zXw6B8JV|{Trk{oxJU<81&rx55n2Run=a(VoGIb-wG*UN1Of&Uu5N^X%-uHpvqwWKt zkNO!1cI$V1Z4MPi$UsV|^#f%*~(m#FJdsH47$!d2=U zDBPfKMWL1YE(&+4@1t;^x(9_G>c=QN=1$R%cuomdwyG=q9NBY>99?+EF8-i>@om!+ zMGf*`QXb3-2L8?!HIrl8bJd^==5@j9;H`H*n)tq}I<8m^4g(y98No(kYTloJe81N7 z|7Owrw>L|}=P!N{HpVtcxeHhJ6~GVerJSZO--6eK9)CK7f5NEg0xD1;7g69quAvMbs`} zF6t6sCDdiW%Bar*J4@{b=BD-l^HA3TtE0XK>>BkgV7I960J}r&2j-`K0PF$vQ(#Z2 zUjlnceE``3B;WrivZK_+$cm{?Av;BV2H6?v^T^IqS0k&YzJlxubpx^n>g&j^Q+ttl zsoRmYQ+FWipniz#A$1?JKI&nFVI=E6f-u5ec>2!G@GjHu>P9JmyBD;*)B~`305!u?ZyN*?bl#j4ei%raxLvQ;)X`rZ^p!C+|JL} zg6mpvGq(>n`7o8c6W4a)m)zZ$*iHNWxUQe~Cl!A1o8w7&kNN}}!ns2@KUiFrIr-fm zU&TLDchG)_+7BP`M@v4e%!l>d1&~w#DcnVnR7C9p$pu!Pm%z3XkhsgiP!2n}DGGEC|Mdqhql_Z2_i)~4mn5> z;A8^BA&$~W#0xf2_61x6L*!c1o8`FKWXLnKG{4Y>lp>86p3h7(J~WC6`|UPlD2y1T zOj=((O#;_4ibwj|&UAb~Z-2j3yoz5X)h)N>aQyXia7xa0tX%VJYyTo4pN|`jaQn64 zmHqNcc{i7@=>g>{R4PKm3o`$^7l%eeQdOVu_S;ow#Pt Jk@vS<{{hf~;%NW? literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/data.h.5D1DEB009CA3CFD8.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/data.h.5D1DEB009CA3CFD8.idx new file mode 100644 index 0000000000000000000000000000000000000000..9940ee1e1f7fd4aed3608796c746dc7025808227 GIT binary patch literal 1182 zcmcIjO=uHA6n@*Lwn<~RKWQ;lVoGe?ZDFTBp=cfB~E5Hb?D~D*=b2y zJ@^NL;L(GK;Gq`}>RGfNJQh4iQA7|giYM#AgT06|UB_y`V+Q8&-ka}z?|rkgC#R>T z?gRkR_H;S#a4cMii0yGkuht1iF5|$;P%2$4@OU4&Z2IBpQrzgnjNytocWU{ZN|R#2 zdKnmNa0lxip)P;BK{AJ31gHy4D%uz2f@-0e&M8a zZOk#)4sm&<Ns>`S ziusbLV4j6pUT)&z!aN$ahLhGHq6OkE+75DQmXymVlMw^t=zNWvDA7o2vM$uL8}Ybp zJGq+nsQ$d-4ce&`c$Iwix_E>y3rp>rZz{e?DGKoaH_s)*CZ*X&~5G?=x)O2)?!k8@GHwqBmjc(m-%m z9fTwUb8_B64ZvEww2}P$JgkNF2t@X7|0KdRZg$0v-kWXJ_UUGe*`WrS`1I}2F_`HQ z=&nFlhe9hsTKBe)@~w|w2k!5=HfQ~Ky4t*UMxZUQq6)3Z1X`+6Xr)P{r52UGdu8Eb z(|Y}FEu@EoEz> Al>h($ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/data.h.80DECDAC5E7932D1.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/data.h.80DECDAC5E7932D1.idx new file mode 100644 index 0000000000000000000000000000000000000000..e62078a01573714317959b7c2c0eec472ed8887c GIT binary patch literal 1954 zcmc(gzfRmh5XSf5;11s%DWE}-2x%gv@dP-bKo#jEl%qtX0HRpyxw&J(|FpYCXNfv* zKtqWXrB4+_3Qv&-NCS0}DkZx*JAMK?Bdz??w`+f%)r{tFxW9kXVr(!PPD9eX$rxKT zOKB-SEE=#e76I)6z+eyFDUu4%_rblyM#8?_wW!0OK$*Z%E~G8QO&b zk0!9=ZuQ+)AR-LX5kVk)oKC^>FpiKC^8s^ADKC~DMQP}sRc|{MlZs7*CdqXy&7I7W ztURrMjs_%vA84jd`VZf`jc#k5tv|I}Hs0L-di|CiJU8-2b7N&DGIlh)eL4O3=S9P5Ic?`z zA)mT`zkTZ59h=k0aIKIf1>CZds6Jb04Zfay`F;KKNv|Ksl(<}CyTnJ*YFe=X literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/datasizeof.h.AD464932AD7356B0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/datasizeof.h.AD464932AD7356B0.idx new file mode 100644 index 0000000000000000000000000000000000000000..d9eb80970d09452b516751a15ba078ae365e1fee GIT binary patch literal 776 zcmchVK}rKL7=<&_DOl}BaAWOWagkqZDcI6gp)y-RK`IQHOj1Ktq5Mljav^O z=n-7$2?ST-+NB9~j?jMaCyy7x3*nuH{XQuX(o4cwCJYM*AzOCPXa&9%4yjVn27q20 z&QNFs9>+kh`D8Q%rj3$}8-&K;(J^oG7VvR4u{ShQrZYD@W%&?Vw9%vopmLs069K7; z`D_MJ#K*Z*!zG89`9wrUGi4u|FvC#Yim{|uD~web*^fY6b*NN1OP3tV(IknGwm0)E zc9qdW;-%fsKklEt-*y9U-LI@w_T7<#PVe5EUoTa!>eonZXJHaDpuf+L8?P7E?vn0y zVVA?s;AihfTDu<9Hw#;flsS!>W5)^4EepzpAjI!Ij6U;|xD|M%pzO+C;L85b9|R%c AqyPW_ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/decay.h.F6682406F3F8D668.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/decay.h.F6682406F3F8D668.idx new file mode 100644 index 0000000000000000000000000000000000000000..89489d9496facc4ee2000583985550cc7ad8e3cf GIT binary patch literal 1746 zcmc&#&ubGw6n=?ml1(;kwW0kM4v*{TB0k;G5@y)mM_IvN`?(BtyYV~~* zpyDoc8&u!~0PK~M3+8R9g&H$QZcLVmk2x<~YTcTJ8OW5#k?%RA+eNlbnnBI0|7Vkbszcay?N-wZ1ZCFM2z_Ott|z=^fc;2)!-pBE zqsMK`816-FT5AVHH8^TtMr)MOfKcrCG*WX$8_f>2NoOZqX;;ud?1b~*hD&oU+;X{( z;hQcO>T3tyYdBaQde4^DjVG&%_mlC&C>VuQ!3+V6cuZc6?Hc;z%)`d-)#usxp50&+ z(?v4`NUI|gVEN9;cdxcSZ)W2|GQN_mgF=7-YyYcpmVdB`6Oqa~dA zwt4C-oGVIsE-^Qz0|abTstv7@a}tY-6+#MX?KCtQ zY+yVvr?ez9C$pr|jv*yAIj5wuAXTHdB*n@qJ|4s`OU$teDX`Np(9{IW1NjVTnK`Le z`uh6LR{EjEsYS*5$w^82dS%H4+3EU;MJ1VOiOD6!`bLJvmdPf`X8OtbxdlKSMa6oF zMY$jhv^_6f-%QWQM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmO%Zi5A~v61~ABg zeg=kIWp0upFwn}L%YV6K{`n>k11kpuyR5ma9hhL?WMX7sVPIrtWhhEbE8YQAxhl%l zd+k0~E=C@9DF!KdP>6$oUTMu0lV^K*fWm?dg3=H{28R13>0jD~cB?URv2${8D#L^m zzH7aE_2aZIP_-z7r~*tlTJOiMrQG`>fx^lR%91eQFAMivFY%JP2^5xPkQIdq!`#d$ z1$Jvi_k(xZ^CX(B3xvcv{(F7{sdkk0f~hV_%}E5Yi;I$r#X$@<5CH+~S0BFS-Yn`Z I#mL400HBtrwg3PC literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/default_random_engine.h.B9B906BAD56E3609.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/default_random_engine.h.B9B906BAD56E3609.idx new file mode 100644 index 0000000000000000000000000000000000000000..932723bc3094789158ed28bdac01fe6f73330058 GIT binary patch literal 648 zcmWIYbaQK9VqkDi@vO*AElFfyU|bL|*XQqvMkb4ubN z{P@(o^vt|ehP2F_R4aXbeP=8E(BjmhV*TW#Bz?WIOU@}xN!8EEOiHe((2tK#&d*EB zOsBCW5D)2N^`Bk_eJsxbhGk+A$iL}DrKx!(nTa{j5C*!SxFp5OilMkNH%So~ApvU+ z?VGZsYB4th6B`4Ih=_Fj_g7k&A_sgVO*e9If|b*HZ3%kwDdA3}TWn;kz#vy)kKeQw$Uq;Sdpq*$$(D zhJc(<(f#0^_B@GZpxrr%Ag#qk$;HYb2FoSR)hz6~PgR+iSs9o?A`rj|V=yoP0Dd;W A=l}o! literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/default_searcher.h.E240A1A8B768056E.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/default_searcher.h.E240A1A8B768056E.idx new file mode 100644 index 0000000000000000000000000000000000000000..d22803e85c47fdc6cbe528545a7bee3393b65d98 GIT binary patch literal 1624 zcmcgsO=uHA6rOC`B)i?%Qj2ZchNO^!r6topgT`2@fns_piU;wqPG&dh=w>&}PBifc z4;4Je7mZ{K|H?fc%FH!~;F z)6=tF08)Cols6b^1^{&O=`c!wyKqM`dU-T~P2@O{X`5a|R8KR5B4*R8lOXw5!*HYu zA0rl`C2TGat69e8Kw}B9ZDmQW!6fyzz*<+fo6ztAcW@Kkuoz+G z|H)|=+{4U|q|o=Pu*MS?88P{`!U7_cS6MCDruzr^P1h5Ns@&ap7cb{C z8h-+ozOR0;(~o7J)Y1mzP;Y3cB0x~`@K?gq)bi_o(ck}mW2#-+(+=bTX+Wt6;IF(O zVC%_^OT8m)&-O`PZjMNij*1XwK#i<}J$0TYr4qk%bK~34LifB{@fJy_GK|0xVT%>7 ze4O~Yq%yH7!L~XW#8btH)mCg!+nSQQo=iM`&Q?wRDQtW zXgrz_F~yef*zSG^@8y-1>o4AF&$)NV8|o3UGfkUM&mFzDCaH3`JA6REJY;utd$qOr zYMssWd~%(naMuneDZ0Jldu<}upNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|a(-S~W;z3HEy*lNElMoOFVas*O-n4zDTyym%`3^w zOU=>CU?{H4O#=C|C^fA(21x6b)?6`pwwH&Ihe?P*NE#djK*Hha2MZ4dFGZlR2#bg? zOgLKa$F8N^`yzqD(hSm)FyX>n9aagQ7f%_vn7BB&bYa3psX2)tc5zX1u{ekU40{-0 Qn*8LAq7mDrIgE@90KZmmg8%>k literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/dependent_type.h.ACCA67AD0B14D4AC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/dependent_type.h.ACCA67AD0B14D4AC.idx new file mode 100644 index 0000000000000000000000000000000000000000..f92cc4b445841485ce4c2a82f543c2698a12aab5 GIT binary patch literal 410 zcmWIYbaR`;$iU#7;#rZKT9U}Zz`!5^#Kk2=nNNW<7^G$9q+03g>pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|a(-S~W;z3HEh(uiNR2NkO3Va0G$pklH7_MKuOuEM zs+R%uZDno}$frfAX~i)>I!sdJK+cujY>Zq?oE)5b;6MNpdZjg2OrGuKVdP;FWDt~w z2}kSw*tL{ P)nPw+wtbn;$jATyTU>M) literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/derived_from.h.C6BDD379E985EA2E.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/derived_from.h.C6BDD379E985EA2E.idx new file mode 100644 index 0000000000000000000000000000000000000000..45c93fe0023e5bfed1b80fe33ee59671fea03384 GIT binary patch literal 670 zcmWIYbaR`=#K7R3;#rZKT9U}Zz`!5^#Kk2=nU@%W3=l}m%t^J<*VlKp(hn_8Eh^Se zPD;|(D@!iOPS;N?D#=VsOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$_3%%oW#6zeKS2H z6Fmd{%)I2B(v(#FoXn);iVFSs_~iV&2#@oyL}w zR2HPhmlP#t0)3ZR9G{d}oEo2>MsvTRSqlu{vQ%I+CFP_7tuC(2O#($~QEFOo43O3< zt+`_IY%dQZ52G-Hurx>t1S0;%UeYP)lwjmyNT9GBgPbHxxF|Iz5yUPoN-ow1F_=LF1OO8q3^1Pfv~BYIm9ih1nV4A^ IKuHh^0AR_)l>h($ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/destruct_n.h.92E52D2853C033CB.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/destruct_n.h.92E52D2853C033CB.idx new file mode 100644 index 0000000000000000000000000000000000000000..cb758548b2bfb80371bf45504a4043972b52e9dc GIT binary patch literal 1326 zcmciCL2DC16ae7KBn8_p6}41rL>hLxD=C>tH!;~ZwJM3#)*eIY)d%MG*T7gz8N_h$lr5@usutIQs|cz`%SnJM-QfhP}ABu%HeA zP;D&sJUg^f0Dw`}X&5*)$OchsI<7s7F|N+yOVkc1CiOZ-Yov3%g{>fTnidHu)~5?I zq)1Abw7m}75m00WUet+e`7K;RdJ*NZ;}f^ru(9jZNw0@ZleGP&)7s@Ap6#`RK5p2o zur3KrA6?t!h+)5Dn_*x%>}ni8v|EAYMzzw=^27fdow7WfHOF$@zR7REsk`H6^2Wfpu6%#HsE z4ZzLqqtDK4JFD!Z^mMwyzm}k^$Vf=V>I_%y>e#;ZEp#`^S4MMun&qn%P6-)PMvd#+ zqs^Ug>G0bj76qmc^586cn2AY-a!d+TVp5?RlLobzvM?J{4(4Lgp&nBimjCHC-rT4? zdGkIo1PAvFPV%Hi9!$IlzC8XEl~+aQcnPe$vxQ|L>ig zE6>QB7LxPwjF5sALrATtH6g8}ofOK>W~)LuHHU@tt^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xIkf<2KuRjm*3#sX%%q%Dy$sshnwFVPV@paZ z3sU1tiV`z{zRN6*&&w~#D9SI7NAqZLWo{BEn2S==ierGZUTMu0lV^K*74aZz%yGKj$#vN5R6%w+jnCMISEU_yWaW*CEk0RSjLn~DGc literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/desugars_to.h.2195A466DF580F14.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/desugars_to.h.2195A466DF580F14.idx new file mode 100644 index 0000000000000000000000000000000000000000..f911541f0baca82bf24107e57731bb0b5d1a7799 GIT binary patch literal 384 zcmWIYbaSg1ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&pELO(t}IX^EgGo699mXuT$q{f#NC1wI0nvz;vnx0rx9AA>J zm%&h6nVSUiWl?Hcu`7_)E3LU=@@y{;BM*}xgP=4x0Dwfa-j7{Nx%Wi^g$)=CBw@mn yUdjgVVmR}fk&B6wgHszO3^Xk#5yUAjN-h=$F_=z8t`)o)b3vGqkpURqFaQ9+0Bm~z literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/different_from.h.BD0F6307B6F0B6FC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/different_from.h.BD0F6307B6F0B6FC.idx new file mode 100644 index 0000000000000000000000000000000000000000..fcf1d6f5f21500879a01e2dcf6987776287a5e9d GIT binary patch literal 664 zcmchVF-rq66vuOI2df=~vxC@0Hxcr*Ek!#Cg<>5A1yMM1xuga!cSn*QE%+hyLx`In zK&Xp@i=&gfx;nZDCe-@~_79Kz^9wJJm%O7vzkgjqs22^!k{MD#2(8%AMu`{C8YeDd z)&+oG7mhVk8fX{-&S`cz1fq=Kgc=Raoz@<0(+<#7W;R1{c_8{``ny*i(Yl1x>aDsV&c43RD(0#)5*=-kJ)%Gm&z4Xc4#IyaeuON GSm+n}dciaR literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/discard_block_engine.h.8093DA26EE4C9233.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/discard_block_engine.h.8093DA26EE4C9233.idx new file mode 100644 index 0000000000000000000000000000000000000000..0de1c79ffaf7b2a3b6e81121a8a711182eb00d57 GIT binary patch literal 5630 zcmcgwdr(x@89(QO$b~Di%W)w*7i1%lWv{#pth*qJpl%gI6fp_eF1r`Fbsw0O?`~DmL#q1G$yT8n@1BfO*4&YW@5FIX_HPh?KFpx^=X;*rmeq}opDjRWg=clYPmo>l2q8khk{lGT%%v~Nr>JmynYF_u ziEgJz8G_4aThZ+bZZI1+1YM#m)f(>=r9rc?aC^DcBT8;p(Btgz2Habmg1<}j3$~U1 zF0*lckJ;GLLuLC1i=&qe++oQ8Ea?vTCD|Cu!ZFMU@A|GM3@Ce_$rR?h+H7Q@I~%}k zyz7ni)8+17IEIA>ijht6zuW7QBqQ}Cb?CIOC2^bJl#M+qtgueQ;9xDXMN6BFAQ*WI zQjws`?+N&75w)hEkpB~1)9gDL3WbAB(SkYx0WWe}JJ58z!1I=XyzQXP89toZ=ycLh zbvo%LJ4LTx<#~REmER}{L5X*Fbnup~?w&1OyelY+oi4X5@#SR|HSS9H65bu~_0SnX z$>Iw7lrJ@dzl&dDDX+9F=0(5T8}bOeSL|^2_w!CC^;f6ZHOorEX6A2~K9=sUMz<(A zB|-2|(i;-|ZeiB-$^$(#FxA?`3w~FJS8$4*U#V7lWa{0m0*w)>eb!Zn{2rmx>2tY* z0cn@1i*{Q@kQc{feZI9I&rcP%$ zyxuPPDK8|^q*QAsk_LPo#~6ej_CB}!l?M*SEnrHD5wR3m%2k3A!#9B)i@*N#Qy={^ zF&UXCyQHY3LM6Zs;n#mTHE`5mVDyw-pI=|45@54myKrLUoj?JH7A`_$7^7jFIQ>9u zLL5q&kI9_v=U)&zViWTZl)7>!b)@Iw>&^5EL zW|pMYj)ZkLEYnG`5*vEeG_lK^XYkP%51x1LAV>C`p8-5^m4ud#E?eDKo zIFq=4z-atttvtmsQ)q7aXZ6tFeJ? zIa0r*z8)f-BaQ+`DIA9*tr@KgAwW3NSKem_WC`tfukx>FILwhOl$90ECxmnte|+-F zgMBGBF+;tH8h3|V|XFhlcOn;JdQIoyay-k!Rdgn zK7W4FY+Bkx7xl7U!42Xe zGF{M}a5Tm2EvSq%C6uxV-e*bgs@_OSKz*bJR_Y=ML0!a|YCVMEhb^C z7#+v=K!`%2r1DCY1o^d(>})RfJuXvuQ@Y6n!;jmJ-1t~mx@|@;LB_=C)WQn$3E7;m zIR$j;)yfOJ_&47D{2LQT2V*uDRBL(!rBuUuP^IaxQk`Mg^ysm(6V~63%y@*hU(A0( z9(-&!4OEla#KZg{W3y=a$Cj~}w>h*pz3zFpeSAj6P_yX9mF5A8PZlrDOFfGA)A@UG z*52si@eIy-24_RuK}ylcP#O!&hvG+-0h3t$y3e_=nQK+7&k3x-1V-#v) znxc?{aYUi@%=#$Q%CttIP0Xe!)Xua=p&>kX2xn{i-i7DxipFCYjbZwiRQSV@35+H* z4A#j=Qtut$P)@xd0F%3=tZ}!5GVR~=UaCnpSQ?gtZMj<((q=8aGkIpRulEwZk3 zw2bdEXHnGPYSWOACM@dO)0VumSxtctGgc>|7b?RYtqeYTi2|+ zJfmRBr19n8)u}5=x&#_za4B5PXysCFnBe!l0Y`A?i{sa+bOy>ugJ@gYqc@D+T>Tjx zZm(>&!*J=Drz(Cw{Oo^YErJ!5tQ(hwJflwqf5Q-!LLXjOJ t6luQ*MM@7+etp0va<`;^<=#K)im$nPB#lj5U`W3wGb=j-89)x9{{e}e#;^bY literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/discrete_distribution.h.0801BDF957890E93.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/discrete_distribution.h.0801BDF957890E93.idx new file mode 100644 index 0000000000000000000000000000000000000000..a21c1f32e5ba2a940fc507a4d2fb031df449927c GIT binary patch literal 11034 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 U-7LRUxBJXw=HcUK;73RR0QTX>fdBvi literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/empty.h.AEF655102DC8EC54.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/empty.h.AEF655102DC8EC54.idx new file mode 100644 index 0000000000000000000000000000000000000000..162ea89647772828b12df1d4f71dae19dbacbee8 GIT binary patch literal 894 zcmWIYbaN|XW?*nm@vO*AElFfyU|Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd~$wXa%ut40HCts;`scc_|&}8T)hn1Tbq`dPGd_l zOHzvxOY)0=VFK|a&An9w4C>Tk{lw(t)Z$`#*_N7HP*O=R%Zf9rQh|0ASLP;x5@%6r zT5$}J)+?>KV)AS+41ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&pELO(t}IX^EgGo699mXwxc=46&s>Zj%wlvL_vFceqjCV~7` zl$uuT3Z(T)Yp$3)+snhq!z9QcC=K>Dkcig%v1=*!zDS_3D1)dZO!%n(^F6oMFG*+Q oV&dfBRD=lwP0L9Haf*wQi^V|pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|a(-S~W;z3HEhz%JAhlROH7_wKCpA7Pzo;m`JT)aA zEUcFS^lxQu63DMbscFSAKw7V~=8DO)y*!LOOkxaT(%@hK5)My4Sa>jaDFTHhSR{mD z!qIv^b}i-J7YP(rWl)ub34f_N-Fm;B@gyS`6Bh@U0Zh0kH760oE-p$g76&na;SU2$ Q8&@7{aVmc3%*e<905&Fa*Z=?k literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/enable_if.h.BC3C82D5E21D7639.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/enable_if.h.BC3C82D5E21D7639.idx new file mode 100644 index 0000000000000000000000000000000000000000..f873debd2b7a2ddc76780072fa2356c26c9aa447 GIT binary patch literal 912 zcmWIYbaU%qW?*nm@vO*AElFfyU|jzL}npiJpOeW?phmX-cYoPG(YaMTLHRd~$wXT4p+pEkW|7KHQUf z8NhH&v9f}YaA6xr@PM@F79R z?A#1oA~GVXV1j{@g$XFj$i|v8@kRNG#EIhE47@xHT;hD!xFwBBzy&t=la_@@-3M(-vNy3DA*Dd&{lR9H5&=5`zPEDBb;p4|! zww;Y%&&0ze!Y%@LB@dSvyBM4Yvk|Bl6do{F!rTWG289Dm_?Y*a$#eTkp938rEh4Q9 zv#BUGCs7H=fdv4AyPmd&)s|LHxB$2RXVZM$FH4Gxl8ePb+Bji)85p?k=g(ifx?rjs HBPRm@Vv+vs literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/enable_insertable.h.C29A8AA97AECB407.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/enable_insertable.h.C29A8AA97AECB407.idx new file mode 100644 index 0000000000000000000000000000000000000000..6a183839edb5fbf9b3a77d0f38e28017dfdf9cf6 GIT binary patch literal 408 zcmWIYbaR`)$iU#7;#rZKT9U}Zz`!5^#Kk2=nU8@q7^G$9q+03g>pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|a(-S~W;z3HElJBS%1tcMPt8kA%1MpS%maF(1jN+K z0Q$8uHwom=qSUnF7$B`zT64wZ*X%n7BB&bYQ~KdOvn8<=z(wRIR|EAPEyLO3g_Gv5Sk6i^V|i1Z*MLx-rgO%m-7M^ehzy- zf{mabz{cLoIS3ry;kLiRkLf= w+D!t57VJE2v-&%&d|FLZvxcb1cvC4{BFAivR!s literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/equal.h.2A6141FBF10917BC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/equal.h.2A6141FBF10917BC.idx new file mode 100644 index 0000000000000000000000000000000000000000..e3b22850b9a2c144c84a2f70e6b4394750899d1e GIT binary patch literal 5286 zcmcgwdu&rx7(X2?tXsKzb!^>+lsy~^*h|}OtR0eWJnRO>#evXJx!hOBEw}fUdv8a} zMCWE=0@=bNAVjka4e|&|VlW^uj$n(XBJ z-SeIA_dU+}&dFYES+r=t2*7-*B^;n7Tnhk@ArK{j*_|Z|%5O$xm(|(A1w&GcL<_jY z3s$p_5k$$lahAEV%Qkk7#o?5F^pq{O%(k&64K@{5YMspthYOK5fu`?> zS~|(#+71*KB*ur6l8D-@b_ZEY)}tgJ2+Au2(Si#B<&R`>t^=*N*lI1aQHCSg5JjUb zLy+MxieYiy=t9eyaifa{H;#NEZoPm9F-C4fX=f#Q&c}45IhDQ;M@kIO;VjBfG$%1q zB<+EzIk`@LEuD5orC!Rlfl`bp;T$=RjF1|W1e}q?w1=u(obpMPH;*XM;h=z#7|eJ2 z$)!k;eiSH5(PF3r7eq|r(;l>%m*#MSr7^}guB?oRMN^J*5=M98Y)HQQsqyw8+70Cs zEV~j2;)0Tg@phq;XK_isInvG>;wajO1#nW}#WeTGkQ|VlRW!hNDshPt<#fs~)JTAM zLw=m@Ur^Clj&v6pfMF^?Hh>Mf=m7MSCV;GLjb3-o_ptHSroGiMg(lFXLzDsNb()xh zzwXY#16QxnF$EHkIz$F&DZ{zIZ)hdL|XG()u^U*W@64?suc3E`9j%&Gz+({JBR1dNlcP0tTN^5)B#}EknAHt^zoDt8~G-9sOsDQufMq<8Ff+ zv`&}l7it$4Kyv+(i-&v9^W_;vq%FTq6<=FTTRcAW!3eeaO1L6r@}GUZ_5GE$%A_ol zj@7I<`yk`#OaoE{s`8+R2E-2RD&znT6>g}lJ4LIfaGC;}pJ1UJ`&lIW&N z6rdStE`XDx%W=}}rJIJ%RLcR?wbw0$ON_{>_EmAz_1zJMD(ttVoVKmU?tNg+$*xPD zHc#f9cb7j?ugOBPGP5dR+O#`b@=v#~T%2@m`<}YK6T8cnBvo2zxqp0b_Gcb>=X7g8 zx5fl1;D(nsu5#935=Lk0=*YhpE?;?hT~dm0-|DaN*RFPFlp+4f{z7P2MpnNABGdiW zU$Pf{u_>vgBZv1-{QaB4Eh*=Gu#r1-X{&u(QkFljVYS1bm+VZLrL=!~@1eiW4Ww+K z;lgu+&PelKtpS<6Z1!rHdjn#fYMqflo@YI774mo}h<>=ZGyL{p>-#BtklQnN3o+Ec zFKMFgaj$L@v#%dZnT2|<$;>RxI-art*!Shbt@L{sei`!Q!_9vCTf^;L+AmY)T=w_D zImPo9oKBjWJpP5Qr$U40Q)VG1+&$!PdgptkU!qk@;Hi}RC2Ch82kKBE7wS?WH|ka) zFX~kx0wq)^f=1$KWY3A8q}Gxlh1gVOQ4yQ$D&#OZRLEs=sgT>`Rw1v+t3rf{P@#w^ z5=S?%8@b`8;*Svk;_V%PoP>p< Vgjkpm%MxO7LM%y$@z)Ok{{ereshj`+ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/equal_range.h.70732B9350D3CD9C.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/equal_range.h.70732B9350D3CD9C.idx new file mode 100644 index 0000000000000000000000000000000000000000..309f4a6b4d8c79206e8922e32e636066ee9d08c4 GIT binary patch literal 3936 zcmcgvYfKzf6u!%Qc8BHtCb|d~2)G06X4|fH2rd#}OKd1rOn*%7&dkEt*`4j3*<}gV z)Z)KZqP8~mk)}qhHbMJCYMS~8jhNKdsI4Yejj@SJDh4&u7;9qn4sdsH+F$Cz$l*i92QB`vd#atT_P>zdxn*Ud8I=t5(P$DsiL>G_WI>0Sm zZFQO1x|gk3=^qaMNA*_MdS{x!7ATJ>NYX|lED(3cq0Au|9T7oTl0`qmFabZaLlu$A z@SzanPVli^BMd~E6o$N}G9B%n&AgZQF?wWJ1F3F^BKpnC*bL)ycX-`xj1=YNxF9mJ z6ylRfhT~G8D~j$>OW`;qhB<9KCR&KQF0~e-jzT%i#S~T2q=c2xN^5(NQ)2pNlyC)G z7`3d7iHHj+@u*-SYCMKxwFng-31Mj@&6_41kMjD`L79;RF{(-0c-qss9y6LycBQ{) zNvSeWNWds>A)p|snze`|R!&1u($c>r2_6#_lUmwqM?cZmB4Z?#L`sI6eDW90#;OdF^Mw(RWfO@H0v{&Qw@RiG1eIw<`C zsH}`t0o*C5-)91lH+S&z5&A)3E2UZrT8fhUul&?F(+mZg27_KUaaZf{mj(43X>7$#x-I8*U5SlJNI<+@cA1V8!~8$1#A&9 zLQ_EyOi>dTXC7sv$FUQ`=lU6MRxK591PVx)wN$sGdmS}!`#?R(Q7tv#8Q4gu zs%h?l;pNMG%)9#*s+%wc`ViRvNs#n&HWF5Qe z9H=6bJKevZdD-#qLpa&nz_u!qClWK()tB_vy6ji`4qb1HC2V$z%A=Zz?(E4|bAG%~ z_N2+3U$1c9g|pR%P3)Sfy2+W}K00b*=N~#y`a#C{bT&;jdK)(p2WZNd?@JXBP5CK* zzA?x4u>HhyywW|veiG)Vmk%eOKiPiVgt8oc^l8=c-DwkBc&W=J4cX6_*pqu5;}eS_Z^oRz0SqVI_W%F@ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/equality_comparable.h.E7D218DA88BB04B6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/equality_comparable.h.E7D218DA88BB04B6.idx new file mode 100644 index 0000000000000000000000000000000000000000..4616910f8d7c348b155204d33ea4d3f7ab257d01 GIT binary patch literal 964 zcmcgrze@u#6wdY9Vzrw}5hq8NORa6uPC}ttN5Mf9j$Hb#4bA;9$<-G8FZ>sDcNP^K z9NcwQ1jR*gbP-I@QgLq|Jo3FSB=6;Wc{|NU#cjQNa1 z4P#ud;av$rV(NL=>Cw2`#zZLQ6RIRGt*oxoGOc171+hLMq(ektoN^Mjan&i6og!u- zZ`?fz==eR|&#&cmHcVc6t9M4@eixN0Z9sJ;D<(z19^VIS4%S#dRnT z^y(zX_vP2Cyp^}-(fp#>GPd#Zv9^V_mo!~S7iND*g!Y}!i?f;QJxy0oWnoCiaQpD} z^nPbe+qtP+aYzf`#9%3?+%&*`duHdSCpXI(E0xYU8;+h1ts#d{b_6pc_zkY+ BCkX%m literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/erase_if_container.h.024EDCFF0B1B8EF6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/erase_if_container.h.024EDCFF0B1B8EF6.idx new file mode 100644 index 0000000000000000000000000000000000000000..6a3320601821a173216a2290170d272dd21db900 GIT binary patch literal 1244 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 T6WMLkmJ?mi1uB~&8nS-_vzL~c literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/errno.h.10371C1DDC4BFC92.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/errno.h.10371C1DDC4BFC92.idx new file mode 100644 index 0000000000000000000000000000000000000000..108eed103cb1838a1ff9316bf6bb2144febe4f7d GIT binary patch literal 464 zcmWIYbaOkw$iU#7;#rZKT9U}Zz`!5^#Kk2=nMptz4AL@lQmyp$^_{KsLyJ?3iuIF| zlJxb;k_)oa^%ILqGSd>1ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&p6551=qF2d^Yd*!a$ArX`1`1p|d81SBM2!X`gnREc-!ECLGaap>{Fgc)x8sz%Ke zUk?3FmALb2>Zg#xbC9I7c{K_(N@=x02|Vvq0erjtaQ&W>w>)4F_-E1quss z35mlD`IGgSN5t6YAy7DlBL%LSVb&&YzVsQdnYbAFIru?A3kE!l^6c`$Fy5J%-y00~0=}5fB_|t@aNnT*y(#4-+m*%}E5Yi;I$rxj_uZ?Fof^%bcdEF)#oC D{=aAd literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/errno.h.42779960C98FC621.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/errno.h.42779960C98FC621.idx new file mode 100644 index 0000000000000000000000000000000000000000..104ca6b42538e3ac6da3b43c55cddb0975b65e03 GIT binary patch literal 2378 zcmcJRiBD8l6o=>DL6GsN$WDbuK}^gj4^eSTqk>MrrO2)jgTnwLvN{6-;*N-jic1Ma zPy|$5t1==%wjf2svdE%UQ7Kh{h{&RnO4atfntAsx=uKWS?|kN%gMztWl`1mI zZqxr0JUlc|5g*S51Sp~+Lqe7RYZ9#xkvbtFkZ+eNI7D5lClYCU&)`RWjf_#B0E z)QE@tDxlfV^yCZ1A!ww~NDaT4MWX4=w)qK~nMMdS1T=)7#D6PnNNUp>U1vlk;uRBC zm}|`-zE33g*|yrZ+gy?^HJG6PDGI0PB<;pK>wY>rt)$Wn!E*}FSw{P9<|}igw=59! z5$Gc(T9273_v(sOB|NxF;VKK|9#nty(5_fZ1n&vFCqnVET1(62y4!e=EQVyU0Jd!G zc;s`SdEEXRGc-hm%dq7I0wyX z1kzZs0T$irvccaLBKSn%6YKOsZmHDNzGx|e%LFd7PHi5aBFQrxk|8LjP|O;VFeV~q zOwQgP5o8m{X2l*gIlkqyNg5B-pf=U^$<;OfkQ-;PU;HY=6HIK_P)cBB*Yi-mE|SP?a3PMG6<0hyFyP=^Mn? zHzBB?P{BY<loDzV-8qy?Yoz z0f7Qyrme{SsfHWpdn6q}6@e-SGJoE_JE-mV;|TgG^s}05%fY$;mY+ayn8IPE`t+uN z3bW3J34gXspb(yiiVs@{_IZ0=Kyw#`E~eSZ>z^UL$*orq)KaKr8k#v>Wo4cE7X&8=oM5L_ z)Un3aFU#y20dX&t^il(D!y6L6*Z7&+T}O|H6dtl1eTjZ^75?Wn2%b=Q!g6%nic49d z9O1zpG3;UT>X+^J_*GB;Hi8}kJxm^VMETCxKbHq71X9>jm$E~l47BnpLr_Pcj!k>4 z!G+wd@t&0kvM6M+s(NiYd`DfPst_a*NMfOGmS1t6FL}-b6nTxkJI+O4C~A0@QjOpS zg&R~DYyEFZ|Ru0xL!0wt`8k5@L=jkBH4gD8j+0y$(~ zGTnP{XFZzJ38XU>scz$I5}v)nce2nC6cc!)NnzP?!;Lh-RO}^AeXgc z>GE>O-`vInfAF`^9)r~%yv62ui+j-ALZO9CyVTNP_q_-Ed5}pUlQl#0bY6RR`<6Ed ze8E?EqBz@1PDjjXV~k!L*{kf{E@;(CQY-TD7izL@D9IZvI#OPZ9O1< zL?n-hP+!^CM$0Cbu>9+l(&3a+J8uR_b(BjB7pz^ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/error_category.h.239968016733BE57.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/error_category.h.239968016733BE57.idx new file mode 100644 index 0000000000000000000000000000000000000000..95ac9aee1a868a3971e6eaedd793f33425337b94 GIT binary patch literal 2426 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/error_functions.h.9935817FF1F33E52.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/error_functions.h.9935817FF1F33E52.idx new file mode 100644 index 0000000000000000000000000000000000000000..1c61c04286cb4c023253b2264e90703c880ecf60 GIT binary patch literal 922 zcmWIYbaR`;%)sEB;#rZKT9U}Zz`!5^#Kk2=nP(Y+3=l}m%t^J<*VlKp(hn_8Eh^Se zPD;|(D@!iOPS;N?D#=VsOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$_3%%oW#6zeKS2H z6Fmd{%)I2B(v(#FoXn);iVFSs_~iV&w9IrGTauetlA)hkRFq#7pH`ZeT#}ieSFD#o zV@pda3sU1tiV`z{p_7`In3R(mpP5EiTQiH}GxJJP(~A;wfc7#JSLP;xBD5$qtvCi4 zyLzQHS4^Jm|^&_r6G=UP}f`Nr+AchA#{ETrcsGy2-)AB*`u*0~6+9l3|b$Mer2Z6_DhV*_Dxa zn(UfLJRJrdBz*?#21s(o?8a~&?I1W(ye*$TnaG}g31@O1Qa%n>{Tdjk&y&)CQqZbMOOP9jLAxG1?; iAH;y=CLojP#Kjb5;VFA=Gcz)?Fo5zL6aaG~3;+Nk%HQq) literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exception.738A51C043E5C14F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exception.738A51C043E5C14F.idx new file mode 100644 index 0000000000000000000000000000000000000000..8bf99801e3ea7ebc70c6f668d3b7275fe93dafcb GIT binary patch literal 1334 zcmc(fJ5B>J5Qe?v9Z}LyQX_dFL=mI`DN;lz0D)-Iti0aYV6iXkA#85K9XJFH2cV{) zqo<_AR+Q`sHjHKa8(X7aV~^%$G9L2=W210VBuJvp7~8SakXF~uaTci%)76UVjBycT7V`RA9&%S?-&)LPEx80uhrz3ae?DFb; zKY0Cp^tx?3c9(}PDi)57mgd<((=AI|H7o1cezr1i1&q~7?3UOmu~p($iS4gX|Mv9b P<*nmw)#{CAx7A^PUNe}w literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exception.h.D8C5111A308F2692.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exception.h.D8C5111A308F2692.idx new file mode 100644 index 0000000000000000000000000000000000000000..1e373529be1a1d1fbccf1e5ea09da329a60d91e1 GIT binary patch literal 2200 zcmcJP{ZCU@7{^a9a4Dq_M4$zoUK9cw*gFs*h3ZfzUE8&;^o6;XG?(`FWwyP|y|+>v z!x1y112dOwOvXZ7GMBl8ZBZaGafvYoe{r2=8e}rZ#>^J85Eq?U40}2EHs{>(2dqg? z`u#l5dCob{_er}gU0o;C0PGG}QZZI!asdEk@GFRXY=Gk64IrSROgxliLM#U{z&+cY|Og z%C^%qy}OP@ZWPqikkzRi)Mf-eyE*^}8{^vvRV`%)#5C&X=B24GiK0=zV{zHwC?a?@D;2{1}~=Pvocp>7<-nJlQq0Fa(K4=pbM&Xe@{df22I`>3U;g2>eX(yF&s%L@wsRyw`{y8m3830w4* zYEoKI_>CkN*7#nl)DcCROg+-Bu@|E7O7YK+Yi6gKD~KF;woC7-l@}CVbEsn^{b6TE z2~mi4J1QJiDE!jB*8IoiOZzjs-FkN|DJ>{G@NRT$h^`*g5!%dS0qG^YIVk*S!>>2K zzdJh%i=%K)aZf1<~A>|1ju8y_F3`wsREHpaHu z)*vrvKhFk*zhEZrzeetRYIt$EVM2dcD?bzkwerQYRHNI7UZ*8JdQUBK392^Fvx@TO zcuUYeL{+7-g9sxBRaLTc=wZk?h$Y7mMvkf0$W9>~dp&5qzNC7J(2{1-yfNb?09w*X zI3ot?3&W`?5Ap1^#iJUYZGdgmbB?@)yQM0w%SaJvKQLR&=If&ZO%?~ACv<< zkVXO}J^c8>oM^3@C$*%7u;|b=;hBUrOW6opmU0oUEafKLS;|9ru6>qU_SCs7;+jEMt>+F=G9Ge}DigMMvniS#0GC zXQRvl{Qtr8q^nuJ(=|Ppi$O5wkk$U;&ISw?Cd%Ke|KOG#gQDR}x`3xRgaMij41Sot z9lWsTv!fU!pZMbK6_U7w!R4vs6m{|NZ4A!td_KDG;E_c_tvB??3;L8Wz^QFu8$1s>#7fyd#M^0jZ z1{wpeDSe7fw=bZX!G9eX{P_2QGj7wE8iVtTj*Giq{k9&1hp+5#4x9vy81UCRzq)bt z4<81OxjT~`#B>aUbc5+k&-`TtY&tjbeye%CfHOvh2J(Nu-!_lI#^NF4G4<7-1l}*m WQ<#Tb2Y|ft`P`Dx*Lqf!2mS+fvyoZ= literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exception_guard.h.D545BBEB7909E6CA.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exception_guard.h.D545BBEB7909E6CA.idx new file mode 100644 index 0000000000000000000000000000000000000000..57532bf7da0c98e0b1cf7ff72f1e99218e4b9126 GIT binary patch literal 1720 zcmchYUq}=|9LHz(ZcnXM(mLBqqoW=Qgq_su%0EGIcHHUHbx20ou{$@nuHK(zcUDjG zq441(Gl(7{sHlesK_ZBHhzg&=CyNNQBIv0k$O4g0T)(wbc8H%Gw8&RO76E!0t zV!*c6_6`(6VTcMjjb`YEDCs%tLs==Wz_8dB68A$jkFsVO!>lT!ViBfNl0nxb6&68- zd`49&EJDULoFclU(r&0mDqkQ&dSNU@wP`y|L{vG8#i0rpVdm2~lgdd*FBp}UB5GD8 z;}91S)`(ijrxa7t)0N+1S$Bw@tpCu{4Z&Pt)Di>6cuux1hK@5vExje8Iq@p=;R(<1 zoB)I-%ViDZz0$pOxV4t$xj`_v>#q?2o|^y@4%NT8`(PzGR!4JZ7%;;$*kM6*sCVt% z*&xl1)yKr*^!wG88^R>dDfNm&yKl}8EcC*Vr2WYwIT_sl)V|&gNf$$>G5A$Re|etEsNp zYezSoANe%fefl|#E-{TI#&O7=uXDpkuf441xrh)sV8`=ZREWALAtYRs6p}7NEOOe) zb6CJGpC)K7A_8%UbQo_}&nzrkefGt+l!Xryt79Ck{|fD+Us^{4UJR3;@@d*B9=(l zW}edqG|47I(Gf z`+eW}F6aEdqjL*q&UhgJrwa>>ilR$<008^ZtLbVf--Q(8nRajZ1JOFCT$*X=a;>WA zoYIh$x?ZYPb9G(iJdI0U&b=`k*wxuILX8yYv+II}m)q6eoB_|Y3xzM}p?n?2?`!k4OYd99%EDq7C1%$6y2iN6oA=7gYI4mcCA+b z+V7=UqS{Gcgt{J;I5-@o-m<1H5KNAX#AcHR_#u~C5Op}M-R z*+0De%J$L?Gu~_oCg?;zj(?Emwy*t@{-%d!P<)UJ9ySGF%%v#)=HWknz5Z$N`&Rv! zGj`I5zTlsHaqXd#9!Bk@UFjK9V7ICiwQp?zc(xqd*VUw*nt*F?Z31_V50@G= z54ExR!|#W#IxlZcmXr79J{YI^Ak)hnY8@m1m5pNJvj^1EHWmiEgOk|I!VHr+K+qzy z*hZKf%5IW^cZ*3uW`hiDzA}Ah`n>y=OtWyjdwh$024`#ngrt26XNQP=fBI}L_K>L z&mgJ05?c{)s=wa6{gs{=`?`mP5hn5!SrnsVBLv0ixCN!@v;_%_V2KkM(SoudJB+j7 zzJ~hDLBid$FvNr$*ooShjCgT(EQ}tA^2BG%7eU6z6J*S;1vwH^_*__+q?7%aaD-e* zA3-TwYJkKEbHXXiBMXJI!V*E^oOlY)B@4x~;u1lbsmu{P$}C(AEXM4c#fxvevvQS% zSx0t?>_~;G6C-?u5TVws;j4oN$+$PTyI_6L@!Ee2k6CnNp->E;D>|}hBu!9kI_4)R z?vDouN_Y}HK}mno;!6#s+5^bK^zn3;hh?DrL#gHC5Ku z4TUvC>)D4D0Q!guU;W7O+Y9TX9Mi|{-Pb>09~=S$#N8fZ0QM5=5K-+!?I-I0r|>xe literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exchange.h.300D90E40B3A7734.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exchange.h.300D90E40B3A7734.idx new file mode 100644 index 0000000000000000000000000000000000000000..1dee3f9cd2d5257e6b395e573093b133f2420261 GIT binary patch literal 1442 zcmWIYbaR`<%D~{9;#rZKT9U}Zz`!5^#Kk2=nJvsf1_)@VR2y1_7%HgcCuP;@D5z8$ zS%nxWsHx?pmdBSR=9H$^YBFd*<#iNLr8F6AN=q_xGD|A$7(xsgQY(@(67$ki8PYOy zQmyp$^_{KsLyJ?3iuIF|lJxb;k_)oa^%ILqGSd>1ON#Z442><5O_I&@lk;;6fI5nb z^%9G6K{z=FXpFv@o{@>3fqrIQa!zSVs(wypQgTIwetdj#eqLH;I*lzUsVqp1FDXjQ z1UfXcI6g1GB%>(5JU+3wI5RyjF)1fiFJoX_0Q5aD{z{WeGU?%n(!7+^wD{b_Lrc=9hs|PjN|#l@&vAWp0upFdOP{s~Q-8PDF{lZ_gcXu4yguJ;PyiXiBC7~9#Np`&3l9b_ zMWC=0i5huL#O&Ddk%^J+0Zxt(3iJp zHcia;E^7R>{4>xlL#`uxG1?e7{uTP5fH!zV=yrAAedYq8r?0LmE&aC U*w{I^c{mx^5ptXeCI^BE0OBX3>i_@% literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exclusive_scan.h.C4AD492DBBA992DB.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exclusive_scan.h.C4AD492DBBA992DB.idx new file mode 100644 index 0000000000000000000000000000000000000000..67fd55c282c03047b7d4be3c4deed3c500ede739 GIT binary patch literal 1552 zcmcIkT}TvB6uzr#?vC4Lw*IV+GRh`d%iMKcwWg3#lGXwt3yPp+_U`O;SL=nA36cG_by%a)JPZ3ft6+u5wK@XEi~4y#EqQA;!GndGl`VOgtGCl6dH^Eiqvz3QH>uwt+o{mDLDFJzymCWMG#ZjmZ&+4PHB?K^-SiJ`WQKWEyFl zDKbggG7!V2q3Y1g*&i0yseG!)tV{caYxh}nTFXdj=|omV#H2-@&|+A}Y!qhA5slA9 zSxQj=9nB_t`D6CXEWA*~Y1IeHHv$0y=wB4TTj~NEfUB%*D7y7><;!WS5YPx3{emrk z*IiNwAX=JExd4!@bMIr{pZQ!qp%&COEdDCE*!=my;~zt3{T%KF-Bk{}_uJgg17M(; z!$Eg&ivxQPeSA3i#%yr~giuu|;E<2KeS}lhm!ceQ@;6mFaLdhm$7Tj#tV9%=YnvM! zSQJ_Vt#yudLjLpQPQ~-%oT(FZ1|6nM;_B3e*Rv;Gf*^Q=?GEhhqojUu5BZBXbKc1QNZiRymd@Qjz3=+F5}zQ}h#d~EPmpWm zW$X8?rytlr{U^U<$KT$s9_IQ02z`Nq9SW*81A&k=% literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/execution.986FAA929C11DE44.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/execution.986FAA929C11DE44.idx new file mode 100644 index 0000000000000000000000000000000000000000..cbbf72a7933843a647fdc6f5567ef523f1b03af3 GIT binary patch literal 1008 zcmcgr%}N6?5Kj8Dl~QkB6fd4Fn_5fJUQ`OD^=75#B|Dp~p_|<$NtZ470v?3EgfHML zhz$7yt%zR-o-*_|_yq6K`d!tk^O)ChYE#pc{UN!j2d>*hK zA*A0U6UC$=;JU<4Af8PLm74n$v?A?;!(-?`mp~+9Qz4a2rN|rt8cs>qZg=b!;UNTb zkCA}8kfy|OAPRjxMa7cnMaDK`)0%3&#kx#m&m#8JRuVPCD6Us1u<$|;$M66Qc6 znO`t5DD8R7FLa=P|5qqWVs_Z` gEnF&BYE@Lr&>zEjfKcf_%;fuPxp+-l%`t?&0YvO94*&oF literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exponential_distribution.h.280BEB34D99FDD75.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exponential_distribution.h.280BEB34D99FDD75.idx new file mode 100644 index 0000000000000000000000000000000000000000..f34aefb64d316e484a3ac81842ae180e439e8467 GIT binary patch literal 4986 zcmcgweQZi0!C1%Zc<@s(*avQ&Mi&@xy&LqPMY%-E1p-GXc zovAgl(P!n*d1pbA?BzVIoH?iY&f}RO{_bM--MF63yH@9723)8I$y8rE@qMH?x(wBsr8fBW@o+kGehEGKk zld(9H;JN6`3=@fvQyJk$(dsUeOE9xi8r);|X8qB4DlV|ucqGcE(kVX5ChpbBycn5c z6MXDmtv8wCN76zvLK^AqJ#y7IFqw+QMm@fYk&%c89#^W%&(5A?{ zC2KXf@WWI4H0Pg=8*>wwdd7_JbMcEt(J1h>DEI?f} z|NHmfD_q)BN?D0@$P#Lh1*iju=5Btv-xSa7z0J_J1xo_d$*W60_5btOw@az@#JbPg zw@DVDzS{G8*KSN7FQUpwYE8AKMp+=8UPn@+DK7l=Yyar}#u$CJ7;Pf<7Hrud3$VZ6 z|LF9=-yJ$jqYcE~Q}1!hLdpE~&NU5}hJ)vF+w*PowPHzty@BhxcH&m|&vL=_ntJQ7 zBtRYfyHWG!&%gPrQp!kDUHbE^+gLwYO;g&37*BA1`~{u5V= zC>zEDkZDiZT4nafV%O? zqH}X6_k5H)R=?Hn#F7BD>!q(X{^rr|{hLM`2`$FZm{t}@w}wLZOSB-BG$J|(1%cn1 za+%jNUwQkw1QUD@UYcCyL?6JEvMjYN3eh8=!6+(PV`=aq!@t8qD2lNN30YM>A zWpV+*a^-SO0lIPW@-t3b+fL#)Qb9JB_&jw;x>2`=0&Rdu6UU5`{X? zwuhcS`?UAcW6OpY%)Pw(Z{vrT#k{bk`hkgE){AYe?URgwbMq(JhUg0G^sa1yzpD1m)j8#h{kr>ZiTX> zZ%YwDpKIF<`J?4718(TsNs9+61{_dyG#=PCutz~d6+@1EU%^A$hW03ESU+3`p%b3A zjP*iPgk4)F0uU9A1-(!Q=#>i>9{=&HkyGUGOlwRvaMU!mX>CS8;m}+DS2mwNv+Ova z{jSx^ZC44XzMy_B5R%3Yx1$xs8-{7}EL$A!_w^l8G$1sPNWL~e1H7xnK!b#YTm3M87pw)i;iThz@9euzJS9Uh28&siDG+L?XGANTrkTFte()9>=B?(e>JQ_1COefqg1cjJE1$kOL zop6{WT_Mk)f|{vjTJh=I?_=S7NlkWi?1FoRP_Z-6qYx!z2-QJDrE#ylw-E?HGzMx3Zj)IzC#ApYlrsa>IWmvy+3XUyk>8{fS~s&sw(`Yy1g zG26`MyEe2Q()y*>0Z1Mc6rr2+1^~8SP4@^3x4!ccX`0ojn*3#z`@DO;ulpBEJ3f|f zgtc5bgaZ2`m!|Zx0Gz%3)+X-^3086=3Q=)fddM>Xq5PpDlz&@5D8DX3`QC$2m1LXy g7~p~YkM^LsFwwB^PPw+CvZ{JrO|1dt>jI(w0-KQpTL1t6 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exponential_functions.h.55D5B21C0FBB1C0E.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/exponential_functions.h.55D5B21C0FBB1C0E.idx new file mode 100644 index 0000000000000000000000000000000000000000..a0f7210db94e02d2ba2501260b4852ffbe34ba28 GIT binary patch literal 2178 zcmciE&ubGw6bJBmTidA`Jct&xg$PS~(7I!r+NQ0EjhbqrU}@C0@sMt&n{?Y`v+Qhb z)SM~>i`Y{!NX1mapMQafiWl*sH$lXUC-ES95z$l4R^z;Xzz!_TXTEv7&Fn1faBOh! zVk03(CSt|B;p!U*A=|2#a2@kNU3KD(jF~g~7-L8J*co9sg7I{kY3I2;on^Y?ni-wD zf^~KTdU+S`X1tKMs}+vWbSLj!Jf~Y()~$7RY5SRJ@!ZUW!E$Dr7mF;F;sq;XX8&`O zyzWjiqi7c_!*WeMm&(jo+%*f9&?f(LYxja}q+CZgt9xWvdOByM%*?uWHAPByOn0*S zfK9&MolVO%vW}ix@4iCM8|&KBb_)4|>-8k!LO$)iIF6AKkE^egHdA`r_34=pd`c5( zYW5;;d}%I=(;sd!>Qh?PR;_sT5sMVIg-+ubejqiHD+o!b9mX_MGPw^A~b}5yrC~Ko_NbR&8i4lhC0yKcKAPpjg zX&5O&BB(A(qbQ5hIMNUuLQ0SXsvDsrC`-~L(l{MQ;)J8REX|^9icTTf)J76Spt@N) zi?R|eAfG*&C5$GcJ63`{=GLSN^Uk192^A(^g(pzrqe&Kw3_<8Nb z9In8z+6nPaP^tnGHTT%8(R4^1AlnRH!NReP9BC}{LIxH1G7>`N~1%?hvCA373)X1Tc<5J1aB>G3=UE?8{ zamIsE*@0|KYAP^=I@kj?%0$07Dt|e9a`uc==}-xEpM&rmpq-hA-g!WKvjFi0K)bUD zp+!JDvIL@xJ0as4u!T82^CeFe_0K&ocP$m!l(I9#kX@jeg!4ya8CX^>N;5*T=s Y^plqjP`9DJff6dSdO59qSyWek12}xvj{pDw literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/extended_grapheme_cluster_table.h.7559E4A8E1B3D831.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/extended_grapheme_cluster_table.h.7559E4A8E1B3D831.idx new file mode 100644 index 0000000000000000000000000000000000000000..d7ee06b7eed46681a5f201c0e58122055ba1a48d GIT binary patch literal 908 zcmcIjJxc>Y5Z%iqLG(H;6e|TQ@m6C98VHDi=$S5HAwrJ5y}8TceX+Zd6D<7`R#pmv z{sBQN5$yd7T3cGAa2GxD3+}tR$f(x7QSO<+r65^KKXxf{Y zB{UlQfFtJ7Jjbp}qA=x5j$+JJ83=crWx!o89Vfm$D%qT-Nx;IAO@friL}JJ#BtH0V z$VoPW7+f_8Ayu!EcoCG|D^pfPrW_MWL5Pz5sF1!7L8+tF9xRbaT*RLKs2l<@RHr?@ z{AhkXTZUyi$XV7YjlIwBokMiAqU3(HKmR8pbZY-R-Ojz7D0yO`iM3QD25+kmi?8>O z#;n9h-(Lqs$eoQeZY^wRvJSQ&LSuZL?JH}CuFHKS6k)lt2uL8vyR#+3d720#w| literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/extent.h.BE25866992E84088.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/extent.h.BE25866992E84088.idx new file mode 100644 index 0000000000000000000000000000000000000000..8b503caf942812906f97735a4acdf761bea0f8f9 GIT binary patch literal 934 zcmWIYbaR`>%)sEB;#rZKT9U}Zz`!5^#Kk2=nOaOh1_;=wR2y0)=Oh*vD})r(+A-L` z*g6WunN_LrB?>N?xhTS=dBvIOd8sK1nRz7&o&`X;lF9<0!lJ~?l43iCWGhdG)QXbS zyb>rCU&fG@nUiXzudnZHr5{?HT2!o`oRp-mSC(9movxo)RFavNm|RkW^JpEwd!QiC`6qaI>5`_t0PqQnW%o^_u z6qZnxFoQWGTJOiMrQG`>fx^ZN#*#4AFlk0Eu?VBkV9xe-hNSx*l* literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/extern_template_lists.h.55C2C02A1EA324F4.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/extern_template_lists.h.55C2C02A1EA324F4.idx new file mode 100644 index 0000000000000000000000000000000000000000..c08db8df6692afe8710f16d282d00491791a947d GIT binary patch literal 390 zcmWIYbaSg?WMFVk@vO*AElFfyU|1ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&pELO(t}IX^EgGo699mVo>NbVF)INorAEd`W6xYJ5&+ zaY?aW2GGBixk(_u7Nw>Yy8`LU?;@*y`R!t3EDmA-LmCE{T+5lihwA*D$H>S40NT-R Ar2qf` literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/extreme_value_distribution.h.C8D53A1B89F27E5F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/extreme_value_distribution.h.C8D53A1B89F27E5F.idx new file mode 100644 index 0000000000000000000000000000000000000000..471c2694e42c6e31992ee1d3be4fe741d31da60e GIT binary patch literal 9630 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/fdim.h.11A70B93B7E85CE9.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/fdim.h.11A70B93B7E85CE9.idx new file mode 100644 index 0000000000000000000000000000000000000000..3dd241ee626f11d6617ce646fe4d600564ced923 GIT binary patch literal 1094 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 WVBkbBc@Rtv1QS^GzyPq_3j+Xb`I{a9 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find.h.D1A43C182763EE7D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find.h.D1A43C182763EE7D.idx new file mode 100644 index 0000000000000000000000000000000000000000..246ee049d7bdcd760ef97cf55ed4b4a968b249f9 GIT binary patch literal 6934 zcmcgxdsq`!7QcfGVu(C6gr_thRB&UaJVfN>3n)QQst~ggjYAU1kQXKsL|ztrY?VS4 zi(qT{U==MauGYu;SQT7F`K;DQyIt_HTD8_ku_{`1-Rj;{CrRfkvtRxQ^L>H)J9F+m zzjN+6XKp5QgefVmegMpn3yU=h5_bduaNx&4>Iv=$I51tI!KLA`LT#au6p{)(PU`f$ zJVI|E%lW+E(g@leHU8#CWUNf5HITflLf+d&xZ0>F4+EjUvkIU0TcK$IK94px48-H= ze4U;km6}BGn+YI~P%C0F44V;)Wg8TF118JO#RNsNLRCJ7>q#OHmyrf6B0O@kEJ_xQ z$#j}RI74p`;ChYeBU9trd@NcJ5hZvBBeXKLQLez$M6Rs37?VoPX0bd%D;Fq-)ST3y z$k!;eq?E`TLdzOLJA~GZ+9i6tP)fkmvb)t>f`t2T)RIGEiqIA*^h2_Fuw3$pd^_i6 zo>40!37r;KV}u-LB|$E=`;J-L)E4Pf3j14JBFA8!NcD<5g2+CJgEkk>2(G>cLyU$s9{IIG`b>tM^m;$ro{Dj^+!!;U{*pC zS~(~*=Bf!9Z(61ho{QwMvB0oYlN$mLMw!=>2JV$Cd&vggz5s1UKs)02<{$8JKztkl zG7JT)j8frnsparL$Pe`xYv&Ow!)N-qkX%=ihsFY9weIH+-? z(Tx%}*A3h#YxiQ)!~$d4H&M3^vk^8L3PRyI?)Bwy@vnPt&t2jQ#k&x&3mHY-FgQE9 z*7=Ft;4%_diFx&E=M!0n`PgVER)wn~DWe`uK=oE@HU|=xL`x=7Vh&o$Ds`dI`;T3p zI-gq1r7=5{yuCZ}hmX7vf3zT|AcWGs>zA~+zP87UF$Sj-g`)Z!slLM?odDHa)Le+( zRi#=`nNOK7g`!+Gu38vU;m1hz&w?N)L#C2PO&gNhs%>>y?iXMzEV7v(Yvd8%cE<9BZ6&M_v~K0^)r{i5E{eb`@_Vi zUOK!Dx48`gZHNc8&7G+^ifMg4tnJ%rq| zHiB_ae7@*id*Hyq2%3SQ<~DIp8W!c?k2WA74M-TZs0mMQKoThIvqdTrKktuXG_r30 zz;>RS%S0PC-f3*~-wLz)C;eXny-kZtYE{M<#xOqUU&Vj)>hF_nATV|p=Vrr{Lvb)L z)(xXU^gR6088U%ZNdceTIkIe7O#)3jb@%x_to3`RFh-}lZBWS*eVi9qWao zy64WHX#?lEEfZ@FZS+sKVM>Yr-C~dH3$r1W!Q1eB!Lx&{E=T?dd%;cw>_mL10vrEr zrH?qm)&XngQyGjJgGOyITwlhWYfetK^0wMgT^G8h8u$F$>#3(pD~HZ-88pWBUPSCRbaN?MFV7PcN~j6J=a(Srpb{b#2Vr&Wv|h!41}AB@J!rgX>>Y8k2CKX!YQSkwLyEslG3eC~Ab zOV71%?%+qI<~VJ~#dVQ&Hc+j~P+pFBk^8a9=@3aM<@BR#(x_WUeK#~e#h>m7-^w_5dUZ#07prP3Eic@w;@9T( z)o!yP7MHLi4`zJly&XR3>oTyCzP0c}N{!R6+DMuzgu(|AM{>mZ}j z&chcvkB#p>L`$rLNO2s0@03oOxOMA2$-|T4qckzQpv6B~Say`r zlKS+WnEpn`bY8NL$nx8QmN)FW2fO^8Di;$^wtf;hBT z<2J;n4G~cHzn6aRUYsH7vta|dIl;!P)vo`BAs_sS@nV?oKTeK$ew|Ut;qrt;mBW%7 zLv$wJ9n&UMN@{N~a(ZZZ^{^;y)(?zIt{Zt>`k&fvJF?LjL5%s!AsbB=BwL{@L6#L- zfh<~qD5xx(d@obFQdjUJEnQCCn%`ZeMEjxn!Ml7+`LRWl_wBw9=UP8$|C>{@Jusr@ z5eid{%eP9IIBuL3O68_nAu(5Mh3XM*Jz~b|bTjpp|JgPG4^SZ>WHgmCteMdr{addN z(CTLWsfOwM1mLj^skCV`KQ6p$#S`f5;4N=LMOAY;{+AatZzmkCi~PE({TC>b&t7lP{{SsVRu=#O literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_end.h.15FDE6E17A82D31D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_end.h.15FDE6E17A82D31D.idx new file mode 100644 index 0000000000000000000000000000000000000000..e91bc046a727afbfd05c1cd516209bf0ca055321 GIT binary patch literal 3692 zcmWIYbaPALV_FlBQRVUot^l131%MqsTbn6e>`p#DRp~b01#rnxfN&0$a$pzWz`iVs)nQ4j1CB^zihQ^l3Cdp>{ z$@#ejKpjQJdWl83Ae@|&n3t|^re|cLXP}>%mz-0YlB%DRnUq{np&uU)w;8NaFN1E@ zrDf)&#HZ$^(9z0FX#R=MF92nv%>2A!I@(^Gnpl*aL30a}^YhX&(`g)yX{C9|pzuq~ z(a%gt%`3?)sie8bknPMX%g;`wxs9;&qMw*jmYA1JM+;##$Cnf(W|q)CmBQ@P&r7W+ zpOx^)$D+v?MbJm{#=*5;KdymO;uOV3nI0p9^lZA2qU!^M!mR77-3(eq+Ik?g#I*=Seh+aF`35 ziz0ZAf{wxnp1YtsoOeI1*{n~+NQG~SJ%n&RHa~Kat215oCuZW=t z&YQU7^I8RdZd0=D{P4C-=hOe)mSh_Mix(y-aD2dmMuww=uS5(MCr5AkaofbNcOcsq zmZ_dXM}woi$u=N(p=s})nKC|P8!$g0u;j9LgAWrAN0L~QD$Jie9LZwIa9*_Dk6lZ- z_eBDeRyjktBrFEEfBAj&_TAV*vMtXK>7yOY$@ z3-rDoi=G6+`}!>UaNYvzyfwEb8c!nI7Tzg6A}5(Dm$2|~s9CGoBWy9@HsMF`Ech+p zxsHd!gWm(r6KJxTkaV+eIoU3NrC4Bc29+K#J5iH!=+9N=5_T>}$+jhl`NNtl$2pgP zp_!qd;R8!2JRC*(MR4Aig?p}-cuCy^1qOqfC_+)NWUwBBmm!&f#4D04g7conKNYC( z4ZBIUGmm^?k-R!1^#LOn2M}t)?EDkcyH?TY#3!KZ)nwIxWi$i;OD+9ixa%jMn(nk+ zkKqg1mU9Z+erCN%^gr1K6s6`Qf?QTylw8~oVsL>72!I!$3=G^bF$M-$2M;L1i4f&M tFo8Wo7~q957#IW)OnwAY2*Kp=iB0J_Wl^)4o1K%3n}?T=UqDcZ0RU7Ev3CFf literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_first_of.h.2BB2AC66B095CEBC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_first_of.h.2BB2AC66B095CEBC.idx new file mode 100644 index 0000000000000000000000000000000000000000..85d39f1d1812fa017f72c7c1c1ea8e2e7a3d28c6 GIT binary patch literal 2026 zcmWIYbaQ*e&cNWD;#rZKT9U}Zz`!5^#Kk2=nGcwO3=q&zsW!B7%P%TVEK2b#Ni9k& z$uBZgNXslLE-|dtQBbKi!j#QPgh?8sOBzA68iBQ%V9J8D8r5nJjI|)|m|8hy<|P(Y z1{9^HWF{w;q$(5uSs)kT2m~Dk3<#n%#w^; zI|g*$Fr;PXq+03g>pNTNhZd(673(J_CF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk}o`HU5UUE)pN~(TNW>RuRg?@ZI+-9&wy$rfp zmzJ5A5)V$t@%d>qw>LRIFD)~j#-7WB=1+YXBfg|4F|(u?>^mgi0&{qZl@&vAWp0ua zFpJN2xX~phQE0=%z|F(Jp&zfG111gSm0Et)9E`?M3PKe{xtN-syO84CgWxR^mcW6eO`p2Zk#KWP=pehKnfQLh$ zK_AYmzPKebMYPWduSt?i;=>|-zBR$C2o`*dQs7{NdDCO_#VuTux7y>?d!WSnNQ-fZ z2VO<6;0Ia&3U-(Uk~zEP=$fX5GIDVMp*GB$(Rx32E#=-92@GBn1`|n`@Rs!}*j}F& zoq*S-PY>cvo*k5$hF6hvpJMZxZ|COWRdo5rw2Im54VU3n^f|9?QZe_F9e5R`EOu1L z4B^^^S5eNHmlkhlupGgwNHE{OTCQ}#1-y!qm_Mw^a-4Gslz8-2ePF={Og#GfaNd`N zd#;ywN!?`T;SgsK7ey#il~mP3@bo41;k;ANqK`IZu)f7>`Jb5HwTeb3J^|xSTuj^; uW)eeDYEB}EQ(Tl>tPf&vf(QrzR^Twe1!Dkn;tb|9)t=^OMVQ$+xflS5t%WcE literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_if.h.3FC9097A48E94ED8.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_if.h.3FC9097A48E94ED8.idx new file mode 100644 index 0000000000000000000000000000000000000000..ca8e815f7821115a16bb19be46614b31984fe873 GIT binary patch literal 1044 zcmWIYbaUfjVPJ4h@vO*AElC728AO1%xTGkvoe{_Y0S%RELo3g`g3=PtlGLKalKdit zw9KO7l3E=Fm1-k2nVdwZgt1jXQEEzNa$-rULIIFftI42&#Sk3@R6&q_9R*aanhZ9H zIqCUDnI##yb_^)$8PYOyQmyp$^_{KsLyJ?3iuIF|lJxb;k_)oa^%ILqGSd>1ON#Z4 z42><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f&pELO(tp zZmoV=W?o8sW}03GjcrWM&r8cp2U-HQ4j2(BR#w3HsLV}L1V)AT|7l!SFA7idFtBql zu!=E=v4aT)P9{bM76wLUR)(U~v|>Rf1_q7;lW)x631?swVHFn?7lvunE3LU=@@y{; zBM++(gOD^heu2a*X_vyOeJ8}xRO|oylG1&*LK#h%eTQbmseeprKtn_sL+uuWnK?_mdrH!YPX#6*5D(cA*L9oOx;Sb_UB4G+|hDFiL^rucG_G zJMDQA&4T&<)pDf^E}*GSV*aou%W=*nP(R9K>#7}*%uKmrf|05`fzA^-pY literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_if_not.h.9B02D1BECDA57157.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_if_not.h.9B02D1BECDA57157.idx new file mode 100644 index 0000000000000000000000000000000000000000..95cdc941a5ebd79891d3209c46b19a65809839ce GIT binary patch literal 1052 zcmWIYbaNA7VPJ4h@vO*AElC728AO1%xTGkvpApCa0S%RELo3g`g3=PtlGLKalKdit zw9KO7l3E=Fm1-k2nVdwZgt1jXQEEzNa$-rULIIFftI42&#Sk3@R6&q_9R*aanhZ9H zIqCUDnI##yb_^)$8PYOyQmyp$^_{KsLyJ?3iuIF|lJxb;k_)oa^%ILqGSd>1ON#Z4 z42><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f&pELO(tp zZmoV=W?o8sW?Fn+eu-WNjcrZN&r8cp2U-HR5*Q&VR#w1xsmx7M1V+i~E$->uYnmSL zFtBqlu!=E=af1m4P9{bM76wLUR)(U~v|>Rf1_q7;lW)x631?swVHFn?7lvunE3LU= z@@y{;BM++(gOD^ho`J+GX_vyOeJ8}xRO|oylG1&*LK#h%eTQbmseeprKtn_sL&=R`+ny_@AV)L4B z=jNdaU%oM|V)lB&WoW{m^XeuQb3fUECY-X^Q6V#gYZsbu&Y71MZ)dO^K@%3t_pg>K zU2p+SIEnegnk>gTmp}olFX{vH&XG_!#zBPS80wYVs`SRBM)J@}EuUgz)w7e+P)Hjn@W0059kPK*Em literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_index.h.B72F41E58BF0F68F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/find_index.h.B72F41E58BF0F68F.idx new file mode 100644 index 0000000000000000000000000000000000000000..e3087af53c47eb07ee749cfa9f4e5e3d30efa146 GIT binary patch literal 714 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 Ca-7fr literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/flash.cpp.8F9E316F74D04058.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/flash.cpp.8F9E316F74D04058.idx new file mode 100644 index 0000000000000000000000000000000000000000..2849840d09621e1d8104fc9dc155a9b67215ea2f GIT binary patch literal 21026 zcmc(H33!uL)_=~ufOMslB8U_U$Tr%h*}4E#(=;s^)1)RTi*_ax+O&2mP5BN_=^Sd4Gjztp^Q=S4!n#=N{E+n?xN zbEDl}<8fCXzTy7EtGA)7JrD`B5vkGJ8C2BPyjrsW;(+}^wPj>9X~ z_O9HVniqHI(9@gHn$2V5c6wLbUl|T`G{;)(2rLLTi0X$PU3~c7Er%E1$!qbp=0{rd zlsficd!(&JH2BfVhYv5lLT-xtd*sgRdLO@ow|3}>Yej45G&9r~ZVN=Q^O6#p$j`^0 zXdu!QjFtr=E&1%XwXHRn9}LV3>GCV8DojS3p>QF-^*fw3CS#d_z4iF)e)hN4YxjG7 zR-eP>cetDmmz|6K)*74FZ!-G*qU@=*+5EHY9U zosM$boH_|m|{A9 z`y8L&QQ?@?SK{zm{l1yC)#YWePAF#m$h}JJO4;P<$*~6P)^dl&M5W#8tM%CZHs=NL zzWQUR8;#h?3KurUEC^ABw`h9b2 zWL0FDWRr1j7S>i6%813%QSI>B%l!U%^F!fisMR0n=$PLUj2ZVjF0i{R{nZW^w&C>K zUA5IxbyYgsHq+|y`=nfBE3-7@X6?>0X|l`^a~$!ZCpIMG`LzxY@{xNG1N|Pmv&<}m zHn+=LTOI2x*F-Jr9E`0><``(VVkb>6_vnXJ>qpHg8_4$?DRNGxX^s7Xb z_#9ZQw$7RDsPN5X{u)(@+wJrVP=)5=uy=bZaH#q*ru?1L;qy7|7`h6F)#X=a1wRWI z=A2~gqm7|4S5~SZIP(bEK|VgAyFaJ8W;Q7U>0sF8K`x66>2djxfQ3?Rpqzx zFqAWYoo?HC{z?z>iAUHbYY4A?UW>W*^I9j@U|~I}J5Hw?y^pIT=~IG6l0MbAu^l#b zo~+~EnQqU|IHPjBuN|bJ&x&2KReF6MhpWmPi+)A9(_dk?DFdg%QN?gRt8jq}2R9p7 zh?@&a&4oplBD1B$Y%rROEaqUo$;j!hDD&E!s|>K$cpcbxtZFPU8Vk+lqC#`2(NbtK zm<+*u1D_n2;!LX-eNdVbq!6&fRf(h8H&^2?)5j5L_xW9ntSXOKm1@>W-VF;MNgSQy zHx%MZP=m^*LOu+HfTM;&sV6v&nAL*f(&D00^wwNbWHcEp#lbT*l`$$Yt5fn#g~d}9 zJ}ZV%#tl!&N7Dwaga^b@SZpe>l;9s@p@GFxa*T)l=iSgG&hK}!wl&#QJhD40V^Oku zZB}JGD-tERb_^R%8g7>}9_C7?4~M?SlsXFuiNp*`K`ExT$ZReywwOu_i;R|Feo3X8 zU{zls2Tut{;_N6bC`MYbN@i`PB)s5tnV=6d;-bFX;4+CF20l&&F7bmCIxbN8!Py#z z{bfZ37E7TycxHmrY_LeQF!R)_6=hnO5+%%}q0nS8@L*W9!H_7CtmTAUmGbmDaWwFO z#mBIrz+7lBmX?@{FxZyLxRR2dSRbXKYbY?38VgH}rG>%#;&_GRsZmC9vcxEYq-l|d ztU3fSR%|JYN72MbtiaWbs4JX6ab#oXj3q{snGMvExUUHrF{$HJsVFDJXo+P+o$|2r z#TIj^*@WDbElRoQuThV+!og+{KHFE;;2P%j`dxP10#)M92zSmZ(c%(j)#~Izwa0Ox zx3*l88~ENqGJApD<5sE~wW1ogS8Y-3o<${;#4Q@st+gc7wph}~Y^+7IR&+j2%DfZW zzI$UhAA41JmN?m}FUk8|^AmKEuJ{Q$eHKSao@}+3#L3rsSwXuO;Qg26{jKwoO7c}+ zQt&BTKv#v|i|e1yQ){1voaqzM{&oV)5ZjbuMVrqt3(tMHcP=a9Tx7xuG~b_WrWGqx z%(i+ejkuF=_^n>C&t^3hsdui6HBen+#iNmxc{$r!<2OhSop1+%R5?h7>d;qkK1FG8Px{jTyI~Zo1=}afFfn zNt#1cG#77;gGy`h#t`I<84c!QbBU?Q9BUCpYKvlbkL?wi<@TIT(G|o+i{Ws*O%5w< zhQskz5$3Iy8jU6sZiY-nB^I`oC@Cz~*i;<|x3xCqDKC;MC9)^NkCK=h%~GHhl*hR_ z?nQ~}guxi=bBXA(dhn@l4n%}$=CKs(xSvdrtn(_~r}qqJzy7k5cAu%7tp7|dj(O^6 z#st;)JTYhDc~H@WXZ-5rEt8N~@OiBkB47~xCa`t z3z6!8hVeos+)($N*mXscl=_k+Ap}CwUl@eEZzzOB_>mBfeg=e6tDjLJWZajNazm(| zj2}WrI2h-MB1t|{;v$|dX}G8&?wvGdR9xhW-x$aPM^zAh@O=);mlLl)`s0lx>q8tN zOU4`_6Yj)rF60JY7$gZ5cjSqchxC_C zuQA<|l1Q{Byp&j^i29*XT-KLIs;n=ORDnoc5+-_iCx zJd3LkRl;`5C%+5fDSlS`6ga4 zL1nOdMTa+eoICx`w~A&W!PNHH?q3*IDOPQ-cH@n=*XG7cmkRqVhfQ1tYb1C^tHKW) z`2JEWnd|l0tJS+=jbygxyedzPx}()fW>tDzKJ_XYFRVRo{7gpKxwy-JYx662tPZd8 zS2c{@xomiSCVOjjI{n^R)vDKC)m$=7wO@P-kW2xOlKv`>yS7H{VKSZBZqIqD5t$6KUVaJ;^ygr}fb6I28{kT7>zz;uTJ0W!kCc*LwBH%=B@%B|y2`h)F zli-#IZyAs^9{l74{bGAd#fVqAf9LkalI@*|cgh@!Z@Lsv*i@HAytEgm^`st3a#2$q z0_x{474F({{DeV#7NDY)PB(sbBu-W;$X4eBNEvp?O~l7;f^9{RU`He}5f<@HY?mL$ z#ko=SkNv@q77}cTBX@%GY}OmCGGheG%J@0_oTu1Btc_u9T5LYU=4-Kq3|lB+JR@df zskyYM*jQ?*<@r|JO!)LhoSBq16Enq5zV_;Jdj-DMD3|V>{>qV<3o6~Uc&Zn}O%k}= zxaU@d{6a_(&U7Oa6DrjDD*bpu&=_GD?zl9VdcZ~yZ^(-cg?yS-%nCi_^IPczuaxm_ z7}>8(C_=9mp(Lkq6&CquRudA3m6SBAIf=tcR+`nc#9<{d&1z;;nCGU*VlnYgMpRfG z$w@v{V+t4v>2%4{sp7&{$yL5nmDv;5mH87#Wd^Beat^7&L~jL)m>4&hvajk1h`4t!TH^GGT|C5m zjGdsEJFL(BM4X9|hFlf&jkzl58+29BH|k8lesO61OxT&$FN-_V6qAvWQ9f$gU{$%XUecgzl0w3Ew5D z;=PveLi!6CFVue_Udi?fFDa33k&eSrcjh`&hhCnKmLeKC_f=2vRFMgB<$1U^yTtCk4B2 zO*w3+J=A`N!;c}n5kW8o6Bg7}3?Cg;kJ9)q=6OBqT|y}wiUuQrus_&Z-_{UP#N%-n zpI^fJ&a1QpE^3QlMfFo@6%4g1AU`H>tUVB|Zw?0+1jDE;3l;<;9ig^XM90UXnsw)#L= zkMYpA2kI~G(BngidRw*E;nkZ9ECq$?dq-=1czy#umH5kyRE3%X6~P6e`k-Dsp6jou ztkL6zWPw4iN-9HjrzK)^Jl>Bou9KIhhhZzpVFrg5hAGBj{IyXtI@`tV)9t@snwE zT$boF-k16Mb6O+Q|1yWPb&`6dRZ(1WW4va!w&jPBF|8fJ{FXp#pefiAWDi?1yd_W{ zY0HlU8-k4?d`y#r_~1M$GzU9^9r?ja@Y(rL^fFZv2{g3?@)@By5D7MgI&ehm@{wJQ z%Jh>TY@OeN(NIg5@|{3a12VEPACD^`bSxUg6t&d1&o8s#W1+!?`PF!v)}lP7o{tZo zm*Hoo=u1l@Dm1n)Fz0u)=Qps)ss&w%hVcpY)`n1^RhQqUL*F~v=11y-`3<2+nQdB~ zG7#%u@?T6qM9))UTGpp?MrZu}(7^6fCH3zqkpffoP~PP#^8k z8x5w?dUJh|zP_!cJru@SqX6d!_N$oG7Zn)II6L5QRpy2NOJjO;vwq=1bWn;Ccd#zz zV4ZNVF1dqs+`+nep;oNKoh}G24C-uFSD`-|3AA>!usL35s}5Woti&F6)Kx{==C}JX z?**8ox+*`WgpcexMp?Bq%UFjRb&c$c5(RBKyd1UG;xk?Nph~S>$G-}pe7{3}KW!S8 z@VgD_*DRDTaD24k(cWbb_AY-CL0O7ll+cLe2}T(?(Ux|-L02{H=e?_MZ`a}D;(jka z+ESt87jf)LlE1CRMX?e4Jx#CI{|f2T*LOr4LT$f#6G)a{yNw7A%U`vPmO!+*p!rvA zf+eFh+Fv96Z3h0I)^UAPgUMKr-^}sXN9zASwcOb9>$I$HD`H)gy4PpG@>yh-QO{RH zy)DrCi_~$N(er7B4P-G?`!^rgM=G)D3BLrUYix@kyL6$}P*fKQ1{#zXWinFU`ElzT z4)V9kx4qc(hs&P7zOA(})TFx<_bEaCieD4sZ+LC-^)2J^z5K+1 zQFDKnHZ()G4~zS0Rz}vT{8jmm9=`l}U(SY4*8Fx%hVGw=Mp}AW&VI^Xg~sfIMSnKB z1{<=-`@AJnmTAfXdiH>`N3(VS^{Q^Z{-yz;Y3F2-gIpyyD>vr=EgVodn5i6Qu6Vxh zneQLH+ml89#dQvmv4_aS19Zl)8K*I=kD1n@Ipo~vXQSJ*$h%yt3&wTepMFvfH%|wV|(C?1Jp9iGLpIT5vw=b_T%@(rx@2{k@vXPPh{9nB=-P4 z=ah4XGA*Wb^9?Qee>(R0t*4SbTq!3bXXF8z5Bcd#~TO@?qttGdq}c-HWc*d-h%Q)<;?79j>%! z?4k(=sA-sK1XJl{P2I6$-PS9%ANeRl_lnX~W=7_S{gl0mrXs<{jun{Sl+(}I_uWf& z-GI^i=}{m@AzefTfgVD7NV=dI0-q50grtcyBCwg_PloVYXaZ(}b8&a%@P_}ct1`d; z;PTgQdb$E2eLpQ5U6wBhl|CX`@>tGR%J4C#jmZ-%I`{bf<)g2!8$b}hJmvE7qSIL1 z2q_z3ydcT8U7Ppc6TBmJ07||D@+D*m{}FhOkmpF2@Ct!m0=;C2@E?IK6n};a|HV)l zl&T#ds8}?%XiCiK{j@l}c(_!w=2&y3VxTy1u2gI~wP~ym;n zq38($H;_>`kg1Zt-Q=`xGDQNmkfB>ho&eT=)%)lLTeHVdta}X1$DmxK7lGZxyqm~C zH??$Ao6r!09;w@Dtf4AkW_5UX&fOHm%yMUkRowu8IWZ#Py-BK1|ub)8wPblij7a?% zvug;fAp-0c7=4hC2Q@}l(kUzHnPR@czO15ySJ5;HSWO45rYRDz zmZq(xnHpfyS~^t%)={#K4wQh6bnr%v(Oq=dE_$la5R7I+bOKB`O-!0N>#}uO%(>!k z2D+K1OG^_Yo)t%=jhBi!x|}qzf}xbHU7|7;b7^j-Xab8SYRVKIU~y6QqFiabbU}6( z_a41%ra>5CoulH5;;LF&r2G~-%2PI!(sZlS|(i6>u#l`WWTza*l5 z@u-)NOntYpl4W=s4A=&#BBBVaC$K(F><=2we%jzIa7C07{K+Y1FB(bd4=Sje4kn@>Fqm$%xl1ZXJ zSYMvfTu{#Q*jN^+Fi!-uk$i=ekGP!tm_Svx_ z29@u5rJ$Z515c1lF(}0Dm+e&KJukXnF|=Zg@Cl2RLo4NCb7pg_8I&F;LynWt!YTrb zY3gD+LIBQ{6<@F4bNMp1!Y?u}DwaaO3NltfmIU;Gr3Xqxq{ZeNQj+hv8RPkOTlDci zP17GNx-(-rw%$C z@QwpH9-l=}V>QvOCPSs*y-CQMWS9gTBDzClsF+T$%1WwR8J~?2c!1(hj_`iaY1^DX z{cCa;<3Rc;>B9w!*5;D3omXD732=}F(gSCRZrGm9r61(1-OP>&Ge*ytBycRAAVW@& z(?kNr>c%EidGW)%%B$UwKQ5{KaDV4*gHY{jAYVhO=syB45b^>^6}>~?b3#5RsiJoX zd`ZZc8sHlO-;fkZ<5o&_ z&n4*}+8!8$Hm@Y9SCa7}JO~^hsRzh-5gr7-ASqvvaia4Gd__{e(f~W@u$`LS)WbCG zVLCy0e*N=*p1z~v$440(rld@X9S+4oItM2|c8C^d3RH6$T%}SZ+IpFF*7wY zUEDKZaY*Wrbg?R7F)KAIT^y&en5)Yrf<;&~=}bg4fko>e>tLzaG`LAV@hv)Ik-X-w z0J=hRW?KQ7D>N%n7fkJfGo`F-1-eypBHId?TOmu*=z)nnnx$hk`ORu_mI(2(j14VM zw!Qc^JGHNXF)QFKi6&cN%vLx{GPVzf?SpYrif|Ao$zpu_bG#rhM8$Iq!DKQg=Pdq~^PD+_HQYsc1isX9@`&hfY8lN}fJb42CUFz>* zG{T0$+2L_gj<12VYhaYri5-x(14c0s0nwgT6^$r*G5O z=-=qy=|8CM4R+6|{(Dn;|F-o0HR=89()+ih_kWY#ACTVvU3!nriGTGi4dHQE{40Hh zK1&A<8hjtUjowcGLhqpW((QB`eH?@JINePLK7m7cSM1NjNSjCKqx2`(NgqQ_JwzYG zjnDn`Y5F{Un4Xf7nwF6{Bx`8)u$W$JIvJS)FI zkN=Yoli5;KTv9r1`i!!(&pFpxZo`jZt7bZWd!Dn}<*qs3udifu*nvu7c&T0u7mY(J=_2{!cEW#U2rpOfQ_&TZh_6v4O`$=xD9THzrY=ECv1hg z;BL4F?uGkc8*GRB;Q`nI55hyR6CQ>~;8A!C9)~Aj7d#11!PC$KyYV9IS$GbfhZkTE z?1dNMCHO164Ex{}coklQzro+(b@&Io0dK-v@HXs+1MpAy7aW9l;9YnR-iHt1LpTJz za2P&zJ>4LKkz;L0RM#_;W(Ut#pDWdC0Rn2 zl4ay7vYf0SSCf@w6}g72CfAZRWGz`ot|RNo_2dR}Be{umk}h&H*?`wfo5(F>GwCK< z$gSiyay$78xr5wEwvxNZ-Q*r}FS(CwBiqUSk+?~fiLJITZ35%MT`j66=BAiKzu zlXQ*+*U>uaeiu-^ky|>*OEg4cu10McyX+ z$pP|D@-K3byhGk4?~(V(2joL?i1d=fi zqwDGQ^agq(y@__xE_yTFKsVA&c#W|cuT{3-W;Xq<*Z{bb-b3%ETWJp+@G{l?FBDoX A{{R30 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/flash.h.5DA166015EA23E7C.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/flash.h.5DA166015EA23E7C.idx new file mode 100644 index 0000000000000000000000000000000000000000..8e21c0ae2d28c0d889b1838ceeebd0b1fd561774 GIT binary patch literal 3648 zcmZvedu&tJ9mmhTNyzIac5ZwfJFy*>lP3weiG!0RWFb!Mq!E4~$2?T3S&rkRUhO2< zCWUovv_9pffP+4la(#DjVD$Ee9S#o)PazFgx^ng3e)gRvHWp-a2sP z=E;-9(EaiH_D*f&cCQQgy`$-HdTWYkgAgyU4ocg38TaVu z63-~~1%1MT7J1x0*Z)gi=cdr;$ir?-eo)@R{@vHlymDjLFBYD8mJE5EqYs6$O*lOx z!#=Ou7Yw-r0e@hr6Bhd*nK$n92SY>t^*-0q6nDTm>V8nth;IYTrFFkF#lLpxIN)}= z9#mmtU?h02bUd7Tbh);M8>c=XLu{-K7eDv(WJl4N&ql{dq^Gvu z?d;dm7Y9XpX30b>9_>+8b+AWWpNb|^YGiCoZJmwGJT|F@lj+z*IFe4O_V$kM$f`)E z8ktVaKt?jv8crtIClZIL)XrA>s@66&HWi6)9gnK<*jQxSHZ_$Vk4>dpAH6rpaE}_8 z9-B^wX6@>L-yh75HrUnF_LMro*2kjRcPPp`4Mn$w6Em=sL^w7@CZ>~#aGJ!XVri0$ zhR3-Xicf>ah9SOc?U64%1ZC6FL?|*nH4&R6OGeqvnVpV}lgE>>bX2o&9JB|mZ03a{ znYo{4Z$swfuWp^$n;k5?_|f(EcV~9aFC3g-*!?!qj^D!0y_sFF!r*7Oj=X`9hhAGa zxHI$0eCF6QYDTq~iqN^Lzi=h_F2$s#yJ4B3j2kw46(KPDALewH_%Ba%D`FXxuP|1u;0E(Aew-;FV{3aPQmd_&PB_h7(Th!3d`tZg7Hk z0(UR%+1L2FUTnqo2FeGj&|Uof!xsuJw_Yn1n<0C}vK3}-(0%nkPkvcnG)_2@^!@qV?|$&v4ZYZavv-ttRA9dM=R+ec z&-dO`#1bfPGMZFw&^`6r)pxG_aPBJ|`*lHeg06xaR=$9jzj=CRWJ`n z=7t5d@qlD>A{EWM&n>~sd4(uIUI|5+KxUB2-gbg?0-2!+qmfD=GbEwh|Gl$@ z!{_d_6iT#0u22vz5;e&t1s5(+vusxIc1pBTu2k^0Nwi9?Qt*06)GAvQoJ*oM*{0yz zk!ZDCt>8hB=zwLQ8s9rY5mwG%h~440SfoKPyGDt!vx`pb8CJ$ zaHwHFAvs&y+-|ObytNL~G?*1Kw$g*2#4SJWmp>m+K99j3nA1 zHyH3ONwisL&cQw<+9tH+;9-XSGj&uh+CQ_SYSI2#yQ&xMpRIfO{r&3``f~8{;njpy zF+k%U;D*AEF(#w@$Qxg)4>`p#DRp~b01#rnxf zN&0$a$pzWz`iVs)nQ4j1CB^zihQ^l3Cdp>{$@#ejKpjQJdWl83Ae@|&n3t|^re|cL zXP}>%mz-0YlB%DRnUq{np&uWgoS&DLnNDL%auZ83^wV+^^)hH|QAuS%YJ5piVkR&| zQu7j%a#G_n)97kzW^sICQD#X7Fgi1n>1}gyVs0v3?JOwD&&@9Z*~w5`nVSSku0^S7 z#V(8t40@$CS4^Jm9Xs>d9T7b@}wkt?lW>RadB|Lh52SG94LCf@&(A@ zIy#0h#{qesI(|sJG@Wc1&$>WJtmD7uH;_|2qyiC^%e%_^A$TeYDwznLZi;R$j8~MJ xlL%rL7bO?FgBYL!0t$dZ3MYR9` literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/for_each.h.035278B724E87AF0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/for_each.h.035278B724E87AF0.idx new file mode 100644 index 0000000000000000000000000000000000000000..5c4c26fe61d5de9ffce87d5a5db22c9aa1cec87c GIT binary patch literal 2202 zcmchZdu$9r9LMLh*IuuO6s7HPy?Qil)Qw(Gal|8~xe^iYM-yvrcK5pM?VjB^t|{V` zkch@3M35F$r4b@3L`o{DL=aIGN+SG0J(?njc-P#ybusbpnPeuv{mk$8`|fY&k)2ys zTDsc=KnYhC^7EKY1ON;mUBjwaAASh8yx~=a?lL(L#ATRQS*)mbK~y!ouE0LL%1O;g zY;>Z?T^f`T78Thptjh;^|42|^{~Ly53+%D5d@zxfe2OaK3jZXab0CNk?}iYTxZwhg zS2c*dUg%hj0xNxxRk0|r2y4(;STr8FP%%V`KR_Z>&B3bva7Pj=`(Uxd>2i#QqKu>< z$3scv}%<%%_XOXICabC|L79|l^lC#4E zBo^`UuPrJ_Rxu(LJ(%R0;@oa>TUGkKIpm_cpXpqFVSLg+3+U4q7_&jPDKdbRUIvf| z3<*Y{@`5%Z0RU6Wo{s&NMZhq?Xiu~E*8?5Fwf9_|mn{a1(F&~A$n8glv`44Uznr(G z55dKtxSx*oC_`36Cba$On~^mcn_pX}t=e0CeGrwq>q=8j@`0^GC_Lr)yKx>cBZuV9 zP0a1D=Y~H&a@!w=hEd+O`huR*&l~e8-1cLAORZrkq;OSRlgOo4J1Lxbj9Iw&OSg-{ zW0y53FRF)(p|Iy%Ta$Uu`N!Yz10>z1PV9txK`K3}R&y|RQ<=>o1y zy-LpLTU+L0-RGOMOOT zu5PMboNvBFc}urmjqBc@*h=9s8#nAcdo+*6Y0B&>Tk!B5%G;ap?$nB@hwhROYa3`Q z(qHi7k>&?@M%KeH2DWq^-{>sAwyDC{O(of-%v3jiZTLXEGeE|lJxETA#D+sP6=^HO yMsj%g-FoW=0LGNowCSUJvfrALl1(XQOYc;W6q~ig%#@f({yFq!)(rqsW9Ba&dX>lk literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/for_each_n.h.E4578CE2562136A1.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/for_each_n.h.E4578CE2562136A1.idx new file mode 100644 index 0000000000000000000000000000000000000000..29197a9073c6ef22aca1feffa6520eb6173ee9fe GIT binary patch literal 1256 zcmWIYbaQ*a!oc91;#rZKT9OE4GKc_iaY<3;XGS0c1T<8t4Xr%$3Q9{nOHzvxOY(~p z(lU#ROKNo#RH}`vf-|d974nNR)8q5NBF0v3rFqFEnfZANX|sj7;Z?lk}E3o zZj!w#iu4FXT;~}Wzg8t30KLyst|k>7m6kv zt@mTsQto|`Kr7W4)Ffe6`cAnx?WV}A3^djA_9t>5@tL28CLHy3UP9Jao_sXn&pWNo zDlY$Ag(e)!;PZ{GimeSz*yf}O=cOfalhA~DKUSFp1Rb1>CcI(qrTr<#_U}Ry=E+(p zC!2^pC1>+)FJBkafTFmkbS zad2tCgy$^Qu{J!=@)gZ&STbUi0;ju*?g#I*=SegJQ(aCXNNaIXaHb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd}2;|eo$6292#w z&d*EBOsBCWnI)-3i6!|(`cPk`ro_X9fF5KhuFOpW1#(epTCpG#0|Uo_$v0;3gflRT zFlq^DiBxnyc&9y2qFJxB=8DO)y*!LOj6w`T(jXlm@JiaHaBANPaWvJOJ~!4kU&vPi z3M=v}3c?K0|Mw-O`)-9Yn(F&$&1QWnMk;8kt1oWJOcCufLQ_3)$LF;Q{M@E!s=bqy zp3UOl?##%=$jQN}2XP()L-0b=-aRvAe9%-!>;2fZlzU$!&^ty9Mv^eq+rRw2di!o{ zA)0E*A6^f+-41u52`{kDTXSoo@gy|iPY>cvo*k5$1{6jPLFqol<~85W%|jCwXtJ4* zbhB?cnjxR_>LwL)KiPq%I`ro%a|t__qiCuH^Zl#kN*7!}Q~hP(p6exEQa6FVlw^<; zh57Q-v*@Eu8LV&7RR4+TU8`tx;uA=<{9 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/format.h.990F54CDB6C0B18A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/format.h.990F54CDB6C0B18A.idx new file mode 100644 index 0000000000000000000000000000000000000000..ee6ccc58734505ebef04f18c1de1f05a5ab52b25 GIT binary patch literal 520 zcmWIYbaP{1VqkDi@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmZX)Z=%?iuKV)AS+4;jP2mk;`c97fv literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/format_arg.h.5F776F736041F9C4.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/format_arg.h.5F776F736041F9C4.idx new file mode 100644 index 0000000000000000000000000000000000000000..864c0a7a7e55739a958395b6e1ef318f5aedc2e1 GIT binary patch literal 2432 zcmcguL2uJA6n2+(?b@ze2bYNxld9cfwpA1KgfwYla00{uafn>UNzD>FvYj-QxbO#% z(6k#@v>P`hgap3=39&nfBZv!d!lujo3*0AJ{`5U3pWn-Ko*x_?9+oQr9E3+@N))OC z0IupGm7wQM4U9!JAtMOk!3aK*L`aCoW9Sz+JB}d|ibe=433qq)Zs8%`hnT0CenLne ziPQ|7AQr=Ye|PBLfRy1R4+%`@7?&js0wnc2m17ai877(DB@$Fkbfgsf6Ze`CjU9_b zT%<_poX_KP9@K^2dlrt_BQmz%TR3T+<`=IISEDj1vra;cp zv1#stMDm56U&UwT{ZZMhwHuvQXJA~${QTLc;kOUnTDLI(gKKjVfd2WLx8EO5dzwD= zz^S)UIc|Ubaq|widtE!W>)Tf<`icMh{p-%h$C^Izz=^k6IbQO6;`!gRU)r$+wl3ET zk|4803M@YxU@j&Xwq5}MJPUgk_AR{J7XV$$Ru>!1v@E-1;hKf|a#UI4-Ogb1>CZ2J j`n4smzT9lBv^%T4we|i+7pzu`0BBpdY+=p9j)ngKv1aD{ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/format_error.h.E08DED97442A6F4A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/format_error.h.E08DED97442A6F4A.idx new file mode 100644 index 0000000000000000000000000000000000000000..2ecceaa4555c5f765bbdc3e47ad780597a2d19a9 GIT binary patch literal 636 zcmWIYbaN|VVqkDi@vO*AElFfyU|Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd~$wXT4p+pElJBS%1tcMhfwjUMMe2VdKomfvn;hJ zDZe;1J~1i3sD!3=6_=!>RwSnulrR)m<|cuntSB|DI0i`TmDXG_dA65_k%viyK|~rP z1p*FFKUjD$cqsyf#aP6IA%YAH(Rx32E#=-92^7|6(3gY>JK0TbRE^B)VdP@s;^0z; t2^Xd2B!bw*MajkbAO$kkek){Ri9)}_#eC=8iQW(>}YB&}2I@3`?31pNwE z?sZ*op-U6$d_p~Na}VcoISDzJMW{?|v4mzZ_DQ!#_E2OjnT8w_5wNmE z-)DIiiFnN>Q7%)ean*b-WiH9>zj_u_DsCUEd8ya#t>*>zwWPv)j8N8AX_{%D&uB8G znulw?fz3}A`!m7sLCw>^#z^u=-Iz|Mi?`nAOVeq(ZD{Y>$%Srt8 P{ZRLu4X*}O=FRjM^BwDD literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/format_string.h.7BFA80B3ADA1174E.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/format_string.h.7BFA80B3ADA1174E.idx new file mode 100644 index 0000000000000000000000000000000000000000..bdd4a62f7468cad6a2b7cb780297370f4277cc85 GIT binary patch literal 1130 zcmchXJxc>Y5Qg`X%Lg%?7BNu(Y+*+A^iPgyVj}Wngw*-eLDChS}5MVBp#a^}XRN;)-gCHgrk_VqDb1gfBwg zBZTyO+ zu8x?Z9R*b64rWq$9`|#dp<#$v>7BcdT(fS#eR-iPp5AqH-CHep` z?8B)RsDVcj&}%-uN`Rq}G2=!40)c#GMRHooMXxilr1!Qn1v|xOc{DP=VWOFGLxfwIEqwchDAz*2AMS4rt6zD za-WPM))%(Z+3iR0{nGTBev7nL-NxkJ#JqHUGd&{{ zJp=vByyTqHlvMqk%%tRs3jO%_NT9GOgQ+A;cr%|-kO%+smyBFYTpU~~FyW%qoJ0`2xG1?;8N^`nUFI%5sqiBU R6C*PNEJ}gm%pge!000BLkKh0R literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/formatter_bool.h.7AF1073675FDE69E.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/formatter_bool.h.7AF1073675FDE69E.idx new file mode 100644 index 0000000000000000000000000000000000000000..05bbc84caf17d9e3d3cf6fab0c8ca8657672f59d GIT binary patch literal 1538 zcmchXJxc>I7{^ole(k1<2&IlXT(p*=brA~1id_T;Q8;pG?i$U#kfhRzo3mfQRon#8 zQP9E7-47sw&W_?_Vtd>txIPf_%RfB)d7hAGuhVY-W&vpRIzx|0lmP(DsU;+*ANruf zp^P*kgsmpr7laFlZ5x`WI6QG7;*vTDO95-EYa6(Z8xRLxs4}=P5%=`M4EZi>n63U1Tr*3H3LBOW(N>zJZj;7}P|Ek;)vS&@+S%d^9UN;LcVkF`J zGLV!}If4V96NLN7W<(VxMxL#Q94C%AQoA`gf2)5zl~d(>1ymOFm5!~?@AYl4v#8{1 zraC(o0XQ^&9&bv|2TJaO?tCOKUtisAzP=o%jJ#1WmLi!GhBOO~#f64w!Ya(^^ElEG q0AR#ejIk7>n%z+pA^;#2<4lbC-3RaN^7j7SNX?`(*<7JmGQc0vbJhF+ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/formatter_integral.h.9251ACCA130A9567.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/formatter_integral.h.9251ACCA130A9567.idx new file mode 100644 index 0000000000000000000000000000000000000000..e6c228bccbe2d9a12df67a84b83151bc1b31058a GIT binary patch literal 3082 zcmchZ&ubJh6vy9ox9$GwkKOGL#FIA*b)t1C+LKT$t=<$5;$g^Uv%9e~li?+^-32fH z1A>2qiXOZPWkC;u|A8kxd9Vl~2wudK8Fyv}|A5ScFdtqf`SOyy_UBaXv znh~fRihkUfM}t1ub#~g$Wg-IRMO{uj(P5(zaa}f`$Yd}iTK;3@ia_%|QqLLWE{$A8 zp3YGisnE*4o(vcd%_dP4dSEtMu>3R?^|?!P39={pmXAzNqEEFsOuGSXpWKOYm_kfOQYT&25ivfwJ@_A^D8NU4^X->I4@rr_#)E+S7d z>T%0C>T_S>n1nKZNHDL^)L3cmPg9hbM74iz^f=^6bi}8}+>HVy`T_4+zagTa%X_X* z8A@e&Gb1fLp~oZ&kW*7DbUbc3Jc>xiR-^KSZ(eE|L@5OaY*rVJ$;bU#B*g0>Da!#S9x6#^(mFjHk)_NB$W$r2ltF2z;CMT&>Quvk!Lst^oir{pt}?-H}b&%#jX(k%_tTq>*5 z>&x2e3=RdU%50k1s*I*gV=<$~2DJYP)TDw}rJf~{t3Z@4Cvhj4RhsyWA5fW~WlJ4d zoqA=b*jXbEP%N<0mS2Hl5i8vzEC{qPMuny4b|9E4ncyB*Wiv|x5z?4(txU<~HnTF4 zwnt*sE&o4pVp*aEI;1u;M%v}S8l+~^Ej~9SX*@TL+|hVS5qG! zAbnhiLon?Y z0OXH@s5=0V_o{;!aR6YpfMW$*E?}#G*!a4baR3ug!0`gQW*C{~?K79vr+;v-U8|2Y rM#sh{CZ}4{GqZE^i%ae01sE+>4ebHU6>Q#N4`RXrfMKEm+6DU`#7&n` literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/forward.h.EF526ED9681BEDE2.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/forward.h.EF526ED9681BEDE2.idx new file mode 100644 index 0000000000000000000000000000000000000000..4300f0f31d82cf1fd288313f2f30af3f0f58fc65 GIT binary patch literal 1206 zcmWIYbaPwB!oc91;#rZKT9OE4GKc_iaY<3;0VW^=1Z-5Q4Xu)M5{ru!LJDf_G*qgM ztm5NyGLw=E3gU}WbMwnmfmB**QEFatYJ7=JNP(S#np#P%CV4u+8e!JiX%Jx(&>|Al zmjIQQmSpB+mQ>m?gcJas%8-_slWL`}ukUQ7A6lGRRIHzzl%%g$mRyjXuAf*`l9`s6 zTvDuWWN2)eY?5rIpPZjt0Mt=bte04n3&KF#^V0Rr^o&gO4D>Vel5Zz z+Qgj)xl&);0cHr$mHM)9-j{`Yu9tX8-2^F;6xTyiBq><1*-vZ+QK#m_{fpPy`(x25=1ZtFZ=Wo--aa;V z(cYqw%h~eukBHC-{(88bdO9|81y$w}`Ra0ZeDJb#=M?gV$-;6XOD2frN>a6BiAh$1 gTtX0X{;18{FOsyGYkuMS^M1U&vY&G%GT9vZ24s&ILI3~& literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/fpos.h.51F847CC42CC7FB0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/fpos.h.51F847CC42CC7FB0.idx new file mode 100644 index 0000000000000000000000000000000000000000..581b54b398105dbdf017fcdc7a8637abc7a7f392 GIT binary patch literal 2030 zcmcIj-EZ4e6u-Ho&Byh&EZx$iaf8#Osnd0KmxPtYNt$X)L=b%_P$4u#LzT9ixD1olXmB*$RDY zsL^cIv$8Co%*u;KT{mQ{R+FXIwAELaWmWGs8>-edu4t{brMlc|*0f$vu2yNFjpp(rcG5VrB-6yCS01q+>O(gBXF8%E z2DvJ$bOCi%>$=+Q=t8Trvdo|_ist*rBi6|h9_^24IGO>l zvtC!*okoLB+BATJXMA{ws-=jOU;yfw%=wQl{UfgV@Ik7MMPdmCpgw>1%hN9xx6g6NPh(dm6qy0? zU0p|N_HZQQ%(yM4%qU8~xY%D!D6L! zX{KLvQkpL<0NY92y_h=nNB#guLO4XM@cB_b0fnTg$^4TRi$o)nFkm#%WGrP%bV8iA zrIwUZw$vul)3#(rm4p?3&Xe=o*hnsBu{qD2-%4gKJQufE*;DpIG8`#~%W+^3g~QJ_ z15$&)sn}c#5JOy4Y_0={A$Te_*8s$)r3ar}BG+G}qftSX5R3+tfm)ke0oITS6`R`t z6Z6@P8|Oa$s`>%FBrq5lflDBMYHh9tSi?>@M%XUE-LMN(Z0-Pvp;`12a{)lS^X~Td z-KR%>B($ZN9|o5kiQtHh30SbPD301#499Ft#G;K!ShBG+PTQE`Qh3W>(N(mulB?8b z&{`U~xtox_cPpRy<>62NIlRQ{_V%sydP_BLHFV90nFo&vyAQcCcqaVsoxk1K<3(PO GBJ@8WH#rdi literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/from_range.h.1813980F34DCA66A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/from_range.h.1813980F34DCA66A.idx new file mode 100644 index 0000000000000000000000000000000000000000..2420cfe3a5211c5b828879469001baa74624eaae GIT binary patch literal 400 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/function.h.49D9C8096C2908A3.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/function.h.49D9C8096C2908A3.idx new file mode 100644 index 0000000000000000000000000000000000000000..f784605bf70602a4483f9b61e8d91644809c1fda GIT binary patch literal 14632 zcmd6u3sh9s)qv04ckVp{Tomvs4+k@Vf*N2H@CAtYOrs_eW1Co;;_%Wjz>r}uQmYkT z4Y30fU(r+~p@C@PD-TIYW3j2^;Q~#dAfk;ijqw*me+k;OnEYp$IrkjvTCxAX7W8K= zxbxk8?s@EU&ffd%J1l&7&K%~+-0VT(J^t+<4l&^^z4F+OjEWcEq&E0Q)(*de5TFb&y5gm zW?7c?b0e9n(lhg%Yuu!LieBE&ZPIBoXPeS2xn^6THjx9_H0{MewrR;-X?;3#AX_XL zSp8b;nKrZCYBSLfsdk&$V$bjQA?IY~SZ#$Sb4G?OGe6&&HDC>9XIs;qBOdSuQ!_G& z-zrG|kF-6ovzk_5$+lZ^Q*$$)O(m9oU={9k4bC-{nUR`jwhY)j7vx%=DacGEp+ zEISEn-22pI&bBPeB}2_8%gVg0|4kL&c1C8pxo|*7YspVdx7sqvpWKzipFeu)EslV&6?lOv7I|UH)UCE&zf!huU6V#j&HeGcuz}imKD(hh4#Vd z4EITJNKRMr>}HNN!;)noM@{aY-E3QyX*ZhF(@CJg?k76EV^p5mW+vH+Ok32rsBy;8 z_uL!bmytl$JXh##>^lcj3Yn@2Mvu`xvYS(MZ)$1`{dmt= zn+oWV|2G|VK1d(eP?H?!zR)_BMeY5d_~Nx8!$6se)TDr?NF} zI&icDPeB0)#gdlF-t9hU9PBkgK~oZu+KWSb@mTi-dB`I29weyJM)Zj#;Z)l60GL4P zxg&?%k;k|%w5f%wmpnP-ua3FHAdVEN#=+Hil-ec-w8=(VBmScfq0Nw%`8THJ)h!)5fUIKeUFj%CAQDhNPwYz$DU0I}T~bW7J}7D8?h5 z;~7uJBcIlFPF+@-gJE2POV8@!;fuqNhX*D|w7TG#HCJB@d%l3o3{hF~gUPXde`pgQ zzTWHm)$Y_y&gb=NjXb#h+cBZNTvjq_bUe zXcz0OJrK#(1vOv#z(k^#jTmplgWVTe%TH>rd(|EF{hO;FEpkAMY*bwrTI7?mMqF@4d~DU0i(LGX*x>oqA1ks3lP9`iX*XEt6J6y; zrfe23`REk&O+ojjFo+5iwH%-v6viE(?*Ko>zmfF6ku;`O9)j-Dt3l;8lK0EVjA^GA z_=7=h5WO12!L&AmdRp>0EqPPEI(*hMJ4!zCzh`+Re|2N>kI>u@y`o-_wtq*JF7-=HxrDyo2WoELZTnAItlBehbTQ@%$~8zh&$(|LoxnXRM)ERd0dsEf_+( zuBz)q-*qC#+eP2)Jijh_zs`oPsz*idqdYf@-pxF>i{9;wP2YW!vE{<5uzOVVdDe!B zB_m@-4tS4pR%gxq^h;qZSzL*7;sbO>sAGpfw>zhcG05%ZDKEV}w(IKOPeqY^@)^Kq z5K3!M)VD?XZ84nk>QCRcWDG5dxo7C175kt3Xs#*F&!FxVrtTG{)5$QXmBQjm;VH&d z!qh5WUL|By3Co%MlK1rv3z(Vw3XHn~ zaf~}5x)Wj;7fa)dr3s83QnW+jscw4#Gw4vstaM)yQAhqbb2tvs6Q+~djG}^5Lt>}R zJD)vQR@6g+a)|j1(iuUi<#`Wy?qNPdQ4fRXVV*C7auGD2qp0g7Wu2rkRTJ?UuCR~x z+0PvfQhxm9364MPHq0OJy>#s4sEEKpqvsPH9oD5B)-9$wqBBam?g~d~SN+J8JEK&} zOQQc?`>NOR#iWKZJu1@&(wXeNn)unG_jfKKrhc#By;smYtD;s2-W5Do3f`4GR|(!# zjHzD~g6?vf%U@o5AMFyKqD&)XG89)_OuO#q4worUZeLN_ zS+sK*sqr#IUIs08P}Hx%^J|Ep%9;I#rL8%Q)0Y#&@JI0aBWQkvM%sfs`XX#vUQr9f z3!@no;eaA+r16hJ0=a;V*hphMMcswbF05zecj4e&cogG3813QZd$8{wtnC!yns96n zPS65wviFjD@f^At6%z8r7U>hTXpls`Nt^X^w1AjI(-986Nei?IKkU#yM!DvjfBvQY z!c)%-_+njOKjOXF^_FMIQmfFVROo(6HB$MiZ}$fCqJsPSc^XC$BjP;e&^W55>ULh% zbD3*N#cdGK2AT(;DS zLMCsML)zpq)PgAgvI`Y*muc*Y%aK!)^x6m*dEC9LMC<7*%6E z8;|Qa%*t2e@M;{*w$ATD*|)dl=rso{Z}- zs>6Dwk2)M&hez=|s}9d+T#r#b)-!$8QO7#guB<0g!n zu%4cG6>`=c(S*a9K3cHUg1wo(TW~}RHZg9;x^}Ek+oq5hXV@h?f(Ai~dId{Yus1!w zlKI76U3dsRr>}e9!zW)@yKgfwbxq*a#JjY2#KG?{C%W@j`;*p%U3^Y=zYyA>o{>Dx zu#noIekyr<%6Qh#hxxvGJi3_dvFl>eb@2(hm1vhp+~!IcP#pxh^9YowJtLdfl{TO? zJnogUuDGUYE2;V;S^tqdm_AXFko(5Dve*{}+)@p_8TE_PlZWgiJ$e*9I*fXvn-^2# zE}sb6c~3w|mjQ86u4D%tfuB1ELV3o?cb_kPZtN}(gL*(P9S|l`9T0U35uXa0lQF38 z!jN~_yc)rufecu5X`tlGL}f1cQ>f} zq@nv*6z8)(acf#zN%erQq9wQHzxd+Q-PQNiP`l~)jhSBr9F&}gJN;47gAPqqU(xAb z(Q#a<(^vA`tTQz0G*zhTZai-{o==~T4t#M{$MWR|iJ6#!NtVX_qo}jwS?)|0LLYqi z;l^VPsfR^HT`VsSVudaX@@0YJ8dvq#gEB)LTN>Eg_ONs;IYxp|=HX zDJtqVn7$3>GWm9h-42P2kHhriy!<41odlK1o5Zjtk*mK~^zIdhF?p*L)+%vw2M%-K zNM=hfVXsSAr5tX3;M(gysylq&X`#-B>}pr)k?vwY;=P<1Ny>j&e#E@(@Fz8T=Xo+> zuP}*r&B>4M6@JdRLWro~*a zICH49AWfbMzN#~6N@F%^h{*GJ7d*Q@{Pf2prF30@>w=cRP*ewi12`@LDB-yjpp@sW09$!311RHp8^AW6 zw*zcv{K}%?BmFnbYapBZCWPMv?R-o&oD{xI(zx>a-d}z2i#BJ$CNMQYEL|0f`i?m6 z9Z^d+_&knse)6r_NNjz(6xl9m-snZ^o2K!_F{eqQ&{OXjLFeFi9*d718?o~YnVQ6e z#94G|eXR>tk0_`(bC1h7P|(yl|(9CnY0PQ?q z5a0sOT>^CRya`|vaQgW*z^{2O1}Nrv3&0kh+W^{lJ`Zr7=g$E?=eZl8o97;Y9-hAk z_@3u2B5V=4{=Fc=3p`hdP{H#75f1QtM1&(epAq2<&rKpU@qA8%b37O6ph(BHzexw1 zc;2Cd9X!9JgO_-&&_M;yhjnn6=hHek&2y6uns`2|gR?xJ)4@5OKi9$MJpWS%|K#~Q z9el_0b_upi+<1N`!S8rJAi)8i-<04@o@*qi;rWCFCwTruf=_sEl%SF4W(k^kZk3>w z=W`OAAob3m)i*@?3K+;|)q96Xm|DCM~fLmAIK824ZUvx~hL_wrn%$3=Qh zzFChq^X$-L2Va>& z9Xx+1cz(!u&~9U$?fU*JB+GjlQZ9p*WOrus;=YC{%!^$YCtMffc}~49W-z{}n|V?9 zBgP-eD?XB~w1+g0M!N2Lmr4uLH>pH$cQ!~>j+E^C(>K@t-<{%UdO;WHew|ClXi(q7 zKJQ`j(#!Q;-Jmw&utpp~qp%?NTVPtg%sS6j^pEOp;@M5eG=wgnggn1t&wc;!t?|S! zMz1Rs`SN$cYv4d+^d8Y+>Asm-g~pq+eR3 z=j5C9OE>fE&_C_a+v)Q(e@IR-t}jQ>4dh2U?)=UKWqm|R+>Pmuf800prEe9S)~N3* z6|@HOU5ae8b7QP2urBvZT@fhIlNAla5e>leZRz>H5=hbEw4dbv^FrruTD5fbSMd+{ z`1%bQI?O*HFle|Tc*Fz7kkGJ^qryjz8T(*lRJ17qjbRUkv5(pkLP+~!0YaK(KxhOj zJC=RaPDA7$0@+5z;&sLc#1YEsjU%L3UTO9te$O ocQr?ZkY;WWie?40v>!rR(gQiaA47ja=m&(f1&)yRH4TLR2eh$W2><{9 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/functional.22015D78C09675A7.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/functional.22015D78C09675A7.idx new file mode 100644 index 0000000000000000000000000000000000000000..12c1843076ea4ec3c0ec0a0c08418118ae150c7c GIT binary patch literal 4254 zcmc(jO>){W6vvg|5Fq3`AtB#f05z1!w5-}PlPO(xrfXLS88opaSCR=VdV;RoUZ9g* zc0E9LIZ5|DLZyPETtMQ@c>J>@&)?6_($n+D-u3m5EdaWM-XtLk1pt6OeMlwfmkkZZ zA{vtpgs|IzpCl0y;(i}C$2h$iLL?N85LOblE?>UJZF~hWPf~q{kWC~KbKn@UA-rm~ z+RYb`G8|_E0%O|8lL-t%%vnT-jzyx3VMRGZG3--@#5BxXnj`Phj0}+?o`na#^@zBX z%D-rf`Sp}fi3k(U1qmfV0*{FB>GXg^D2vrXv==djMo5l)zF*45{Ko5CO-K?(%%_k4 z6*CqJ68V&6TzPhsr$iu=2Bc3vQ%;%Ei-h9g0&~x^r^ptT0QDC}1Ywwjw*sX)8b0H& zIJalYUeZ2NJfYa>mPT*bFiDkkD#LgxuC zrcNbv)Mrs~s-m(qCTgG^WaJ;K#aNG&2#%Y0@`Er%n~} zvp&E1^Y_(z@Szb@>vutL7wno&W7Yb75Zph%ehAtRL3h?``X7V#qrLvx`(7xPYrmE% z^-8I7ln)amMuw%p^4pSza^3^Lg~g}w036uXeT&Bymn|MzY*<{kShQHMcxEv#!gY%& z%;#nvbZ$F208p{GX>rY>DevdDngal*7N6cO04uh2+v17Eszv<=A-D4!0I2_lKf7;t sJMS)*mJ7j3u~J>%+}hsR-7Bw_);1dZwS&W>pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|a(-S~W;z3HElDd+(N8PQOD@UG&r8hF%K-YYGB*k2 zyQ0*z;u%0%ue9ch$+NvYj66(&41&^Nj{^zin1oIVlf|x#oJ``<;yM-G58i3dlW30C z`>|^&_r6G=YDor3Nto)~M&S=#HgDClSOhE=n#I2Qh%L1p`dl#y4zZ8@7LAWMlvU D-JpR3 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gamma.h.565E36029249C60D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gamma.h.565E36029249C60D.idx new file mode 100644 index 0000000000000000000000000000000000000000..45ae9ef994a92cc58c90111cb4a445411992f480 GIT binary patch literal 912 zcmWIYbaU%qW?*nm@vO*AElFfyU|Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd~$wXT4p+pEy+zR$I%b>AUC6xuK@g+rx znZPhf%}Y$mNsZ4;qpPi%#qpVWC8_B}i8(-f8Hy`&lR(i}l$ur?1B_F>(wZwK&-U^# z@-PWA2up*cK;Vt^^x}})bM%>bn3R;2^eVa^ywjd1(aghSqHF@^MeF_8wUm2bBv7w4 zgS8|?Cj-Nt2RmlGUaDTo$i>9T!6^q5{<3h-^%5_sn;bk$lI)T)Fkv1h83q|q1W$oo z0ZC4oT^Wg|&905a(__#>(r3hOgd}ImZVKmF7YK=U{P+9@ve;D84q=syfs7@Br{JjI zh2SZhDBB`<+NRn_`t%I+kn|Zj8X@U3H8F+jD@x5t1esA>lw7P2V!-kckO|6LPyozv UFu-*0HRHO!B02udjLa+y01*$|1poj5 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gamma_distribution.h.A7A4BD8575E0DD0E.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gamma_distribution.h.A7A4BD8575E0DD0E.idx new file mode 100644 index 0000000000000000000000000000000000000000..513a914dc86599166795a4dfea51438b5bb583f8 GIT binary patch literal 5792 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 N`qlY1N+&5o{{bK_)L#Gq literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gcd_lcm.h.1D27E93FE773BA29.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gcd_lcm.h.1D27E93FE773BA29.idx new file mode 100644 index 0000000000000000000000000000000000000000..43963211361b8971d3738eb84ac6252b9f25c666 GIT binary patch literal 2726 zcmcgue@q)y9Dgl^^&LlljBZrQW``J{KyPcYu(E7M++^!;154tB(cE3H<)rVf++DQ< zkucyNH%44EGtn&3i6$mEC*w1&E|UBPhDjmDeZbz{C@ zU(zj&H-d%?)$GooMzBXpAwd!Oy?~bylBI|?niL}1o^Uebu@}U|gb-vHrZdR&se+<1 zJjXHKr}*S>oM9DBjIq3?GQM5@-Fzz_U~rHmo}s8-RzaDMPq0#)33z?2-kppn@rhJa zU=kw7r_)R%!Y1OfB5Fg3L89axDt0y%SD+O+2`6fJ6;hI>6ull^mSSSO$o2exKA1Qk zjU;$f^rG&bKZOVN;Fep(3bE-}z>)Hqt7ee7{p z*%o=YHNI{(P>?cH_YvBgdSq& zmp=LZt)_F%sgvd_;pJwg(%^uD6@yknFYUju;{R!`%1{H3ZaL~C^n*9o+PlD^9XPt% zgU#QC6zX_;HB=D&Qm~o}Ik^s{LZ}Mp%P$|p-V{&8pQ9)IBhLq!CSMIIhR)*+!(Au6%Xp$(PQL7pRzY9}&I3 z4bK+PC%T8e^ZmoUfH%?8;AtX3t}~a{I&U~HVDI$dbT>)qI5s`_`ONJ_oHA~SZzGy} zAHBB!1JBA*LF`3Cx}*8hzV`~~`8R%f;`WD+zh6N2y#B-dZ20^~MjF=ctL-96XxL_N zt0w651L^g#7pad+9I&UX2NK!=d&_$B&;T`1LB@zkV|DgU5xNGZcBcHKu-C$_x~i$r zXLvKB_NbH0p`lUsOUB82DG7WvSFAs4PcdtH% zD3n9b%OPd*?>GOzOX~uz+_h<0KI8xT#9RLsES4f9*i0N%;nlf}Va;@RTLm!yu<52* uH)-9p=;kKfB)^fEDc9LD-NgT&q`}3xmY_>E&y<&zZ8B5kbcMxc1^)rGm0z#` literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x.h.CA3FDA6574B06FC1.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x.h.CA3FDA6574B06FC1.idx new file mode 100644 index 0000000000000000000000000000000000000000..90a50009d83dfa522d2be5ee5587883e10dad368 GIT binary patch literal 13158 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_adc.h.EF4358569067F517.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_adc.h.EF4358569067F517.idx new file mode 100644 index 0000000000000000000000000000000000000000..7576743c077121b79e2c28ce4b7b06e436c39adf GIT binary patch literal 11932 zcmb_h30zdw_kZ`|*agO1&=A)_2&K?LP*fBXSrl*o>pyBtJFq=-jt#MPiVwJ{s*yr(a<0CWtR3YuiK$)q!?^cJ%{_2tHU zzN#ZB{!4uR$*!2by0NhMCbdxo8LrpsEGnznZqdBt3cS<^Mx9A-d&$l5B7+qF5B6Su zJq#wR&SKMP*?Rs5&1$>boRnnMz2uIe)3vBgqn#4GT7;akoZrt@bxNvHr?MGRo?SwI zt3WctA94Am>h*kSfPzw=tyxa;s^#jR%!n0-7O9sailym=?5YLng>+Vi0u;~RVJ|d5 zgXt6mzT`N5cPtuIju+aHYRo@TtF8DeP#s0+l@9ozA&C#Uv=fWc+6dLHwBl(_Z zQm9Q@1*DqJRz=E1_6b*L%%&uRUg4%QsYe=h3M#Vb-nZ+lHU$?Ao7B;lIo=7$qRK&c zh=qRV2&T$mkVmTS$SR1=U^3VoB!iWX%zg%So55r^+pQ`(mnuprYKKhgtips&9y$M5 zy}3EL_cs~oJR~hsDveR6w($P(zv^`k$Ez>1v)(h9W8t4m;iF{HskQtNqNdfHWE-Ql z=u}pl+F}E@(^S=l7tU-d=WvMS(s_j>VYT^G1K7-}2i}~fvk3Y2BFNd7>S|8QV$tdC zMzw|YR_C}dsA^c4^hHsT3aYbBQHvdMoLsS{>NEy8{jh#eMQ@x*Bc>q)!KUI5rz&x^ zY`T*@5g)Ld9pw)vWisE^)kp`O;0KRJ2Ee^68PLF22 zg1N5XT~`Qxy@)KjSe-}{Kp|c*s-tZ4Dug9fI8LqAX>2?Foj1?mj*VK~jFid>x&x}i zLU#V$AW~8~E3!~qA<3SxNZ?-)f(IE<{tsu~GPDG{mu4#0hbZZUNL`viqf_>X3=WED8#q=K8QovmwoPE0wn_ns zHds<pGl1XiZnUuSNx(ARk)2(8^{Q}EF;m=sQhrD{0oaj@Eej)Jam zt6JD$CxAdWj|nx3-3B>!4Cm6!1}!HR|L0q(UW6RIOI&?;UmKS)GDya8k3C{z-!Q2- zIoHwg*2WpjuxlA^&Uv+{Z5z`c8D%@TUDntelU(GSKcf_3SrKl`dDTaL;|2i5H^I0# zEx5o_&V?|_k6892R&ZXvbrX2X#vP|8CLY%|lykipWe=9^!7Vs150BA2g?wW8y<%Od zmz+~F$_XqxfxYNJ8lE!q$Efj9L$?RXxnM@Qh-DXXOU|pgdpu7$I{ng>*|GMHaxR=v zO0cYi&Zs_0<|+3SuNNQO)4Q{r3uKgISau9Iq?DFC!Xo8rN;UX>qE;-tl|R1hS39Be1EZYl$tX9m>rL!W7r;K2u5|p6H?^Kenp))C zTa0oR%g)kCE94{ifnthw?LW9sQmwpv8!d|1wph-^Fv>nG+lPIqFIs+}Q^%L!0QJVDa;__*Y{jyzxIX9g zX1zq7V%%X4Qha`NnVfrvQ4V6+LAuh7UK`3&vaTmR+DJoWt3f5whPy$lTP9(V|uUp$}8OuC{c{EAItXRMx0k;GMuOQhxP4%&jcTkbMPe2 zf5y{TcA9Py?^;2@)^&5cFn^DTK ztQ`AsUQJyG@m9LmZ!u|9qsl{at_!22yU5aAno=tRdCHAn;)jl#6@F6A^}eHG zS-kc9>i$jt_)*RUFiJj__~3$^>&__Wu~xTvxb_dz){M&vw>7Okr%6&f<~b1fbysYA>?MvL?jb=3v!MXQqT|zsDN}F zzU%AUi8(HyF^CNEWc=HoEV!?Kuc9W1XCpEj(f=3Wzl&{}DZ8xd>&psx38`E2c!Isl9yBSbTyEz7u4`!Wv@A4TLSYR>q*6rWzGxp_r> z076M8wA+ioNV!*NXdN1z%QVPsPWG;f}IKHTi@SwCwEgAqY8Ij47 zMrd%YaS`X|djhZmlNI<4rolQ1#7O8M0`fuQ2c5eXFfvS>18Xb57ut!yXUzlv zp@|5<%`Y#{iW_Ea42ITXvKC5#@a;X>F1>rNc})PwK_myUhRDsl*TYwKcO?ZjAhH29 zW*Uu7y<7T5U>9!yt|M|Cc`;yg*o-w^ptN`b_D6uIr2ek}md60Nw>6Q-B- z8FzGzABfjrvPSZ0M9rrK?*|`i1;9;2ZXz*GwM+?3JUqF#0C`;qafZ2;Je$Y%5=(-x$3xc1%@7)Qp5N$`>X=L=fTPNm{}MDiv6{H=eT zzTf;P1yn>O@>_bom1qBbRR<7H#$+-UgU8Me;E`}<5ImaL;?%V{d$)yxhMK6w84T?o zq6w(nA6i3hti)U;b`#s9@e$@8VK=ca8=qkA33d~^y>XHYH_63~Rdb)~hwp`C9iaBl zB61ehWiefMAlLZBL)IC9UlI9LiYYt8fUCmUMNnZU7XXA4ivZ-WcJ*6wqPPo~nuEw3 zX_wxOyke=$xk7>85&2yj z&vQi>1v-+BB7efqd2zeTmQZmp2^Oa|YTug7PCtdc1LAkcJEHjTog;dmHXl&&crsqB zVLu#rBgAm3jEYYnasnxYS#j(b2J;n;Ujo7oUjPV)E&+)A=+M!4pX5j|m5WF&YQaqP zJ{k03a=W!X0hoiy95}HEpZeXjOY_3BVgT5V$adt%fQt=&-kUcpx)%WR5Sb^%lr1z2 zE*$3smHH=J2Wme|j0KGjq=Oivd)|-tubH{LH;5M?vH*!ysnsSw|H-JZ4*+`**&_`t zGv1y&U%90(0G&x^F-`-P-;Zy()Vm*u`;b0jrY>AxQR?;C94c;4+Ka=oqb0a094Q4i zV?OPiVKEjC1iq3eMeF0r=1kWu)y9E%B_b=ORGE2ko<~UydprP{m}E*h(PH{O|Mr<@ zC~zB*+mc4f_&Tgb?H|2|f_McYE2Q%L zxvXSYWyd8HSc%C>sh3>)_-$iEO?uTD z4&oVz%#ga(_FW^&y*W<`Ohsg>1YEMmd+$2+Km|Zg(o?LE37Oia%fHHe55zkV*&(gj z?gs8_bDG{v0$?sCbEO0;duQa>BJ8dQU;r5)7AjUgV0nb&ys$i*k87ht2gybOKanJg zePrE<53Uyul8*-QmzaDB7aHO7YB~4n=E(_00KP%w8`P2k>{b9H2)6+NDfpjZ=kk3y zDWDNVg2dga`EzQnSnB+?QQ>#K+ml|7BU^ODErA$f+zt;R-UVjQaLF9?l^7h|7^QY!S z@e}|KAaX!D7$mQ4Hq5LtuR6_1;Hvrfg5#;(%s0GGzt; zMTithfZzA7-+7BH2J932?Uy$)mVm~3Ox8<#NTts&F4);J z6M!fZB^oMv^9Q%#WH}XgAzj2ud3DLT>svW3cye@R7?SO z-vxh!d#>P57taXXyOU=&@B>MpXrEnvfiGNo1-`#IKfHYR)aAhMM!JbLX<@f9p0W33 zIUs(3$OGgf(79P1Lwd#5SU`acL^7mX#?jK@;lJf=qCgT!68Gm<6JEcy*jhgq#LF;Q zCM`a@YlBC^9a|V;?~qxm$c`>6L1Q{5)1~9qw-KwgeM|!>@F^yrN(H*vtpQt&5t}J6 zoD3I3edw)^H=bMeWgdvPAhJbDdjCO&nxj?)d`)+Pd>8 zun3VwQp)ES`R*Qf-w}5yjB0HsZ*g4=keNee#D*!{t5HT;- z?K%@-?K^8LmKzIjYynOXA0wb+54em+uoj-WNZI02QZdz!B#~mw)^)!5Ne@-eZ6NMV zdW&YG#%(Fs=|8pr#BE7ivAl1H>6#K&aE6MHAaXv9vpi`akt~ zobbm{07jCLqW#LBz8bb^T*xsH|A5F3(w(De_Yis9>B#Q^$iXB>+Tk}d!^{1rt0?dn zB7aG}rQzDcaZfXAp9Ek5CJUsgu}36uR(L!ToIS$TDtP+KxBml;ex#pR$JvV#@P(Ho zf#2@bENl9L1LuH09g*o$Yc4ISOg=LEI0e2&Fu9u7 z$~Uv$&mgWuq*9vkjTyDeYSf%dfj<%XQv&k7$j+NmyqN+eh?Gcs`iOg-d$9#;uK}PV zI&p;a-|p(YE_ud+G_9yix4sMaKaV!H2(!6glpNsmF} z0wNcX_*$9nlDs2vMctqPSE=T5v^C(JEqXtrWzHporp9!F?(2DB?CKQl{q%Hg@lqz zb*J-%R8C3t4fNJ%Pw+4|m0K|NzomUr&6IN;(+ARh1$&)Rs3G>b1r1DQvdJ^^sZ5EW zE1gRv3+ZfMi6oO6ETf+tDD)2$iYzriw}XkyK#CZFzlS!=LsmSgMjHni9JJG(`M5+( z8rNG#61iRr`PY~2OIcEhxoOGL(%Ry5c?r3gALyE^6^fftbHr^Zb z=$+YAZ+KMdeIbJ>qNDg`$CW@!prce0hG zfWd^{=ZUvReTp}DhCWtBL&IRi+hm(RPqV;9EwM1_PnLJ%J_ub) zz|*GCs-Td7!JL!X0?mQGe7d_Y)m4-4$>s{QTcQBvp;!Uxx+YdgGIKZS479h!D7A=_ zOfBeXYgIff49&#fVAy+_;*SEKScJWz2KVaVTEw-3YYneK!aA%w!C)A?*Hy}lsYs*D zm?B~5hm_9Y1|FLkjvmArmE)y$fQE4o48`k@#iN0?)|eLkmgb<+;`7qPX$iCvoK+Pj zXoKV?i3PZ;w$Wv)bJw}t4KBOGRp)l4EKUcbJ5^?_8CMD5i^Kvjc4+FTbvSG;SDnq( z=y2PdcBegMv9sbp6lZ#3-~;W7lY+y6Ha}!_e2&3iq7ND9iz{t}tSXO4lMops8-|-@ z5<_Pzb{nh&5m0v8SQ>BvL+v(UB#=kMYHfXEeO)7X>uRWTIPLEG)HFk5h>B+Q1dG#F z4+}A@h14*}nBfyFVA^h!uz?D?gV=U|kcf&AoiV`G!8)lPw zDEVSu56x#Pp~3Y**q~^H+k$$S{lPe-zQL4Qg}6juhP$>Arnb)Is;_rD8*OzCcgoV> zS0`B2r{rK$!VsMujkWbaE7HhiY*dC9tSu3gFhduWa)ZePcGy{-a$MjCBeX71`N7z# z!%913dd2%Y#5xQ!Qpg~L~YQ0Et(Ohny0j(I3W(VHX~}ugTdFk zU5zd$a8tA>%tfV6qn?%ksUob}`y;T1#bQdE54J#l*crjjStXh-Ayz#>CR9hP3uEog zg51vb4uaV;e9M)8T;h5SZ-#zn2Aki(_)vdK4H1^m~Vpi+XWfYwbMVSr4IQE!^ zv)pTiv&3+#z96r-<`?OdUGa-_N)|^!UT(D)#O2p|QNg$uVB;6$mDYJdrTi){D8%U& zu&qUj!TJ}Ew);AOGbItNv=bnP$fgt;dgFl(IQPNcxv7qEkqBGBd?ndT4>V|*<%#+o zu#*TVo*3U}la^E(o6|-*2t_<_H1ZHHXL%xuU2t$1HGUL1h&9)tS!>{GZS7u?&tbCP zRi}hN5l`GZGwACO&Y!IWkHuT~IapgYsQ|V>v|zT*o~@A6AV1GS?l80TXsxvYGQkoG z_S*e^S_)`mhWbPCE>N7@(>2+MrYV{hQMMa#I_m4##*A4|H{JSX9AKb-neG7P-RZqC zkoKl`1|aLqVRzNL8k}`5tw#{4J@VZ>^jGH+`wIs7PypvWW-@x845oc%GJ3B7vtAn= z4yO|~L(aMeH`z)w*y;^7RR=QJzU~_OKf#p-(G%`RgXTt$5NL|BIQQsYG^kG49om>1 z_>k3uPqHVGM1SkKLreTLqRE8Trk@I7on$0jlk$6;dMxO^2 zEt-6SGDk{hpU6t5pP;-?rr-ttw;%moZ<4CzI-U&IQ;(V^yje(drssi_e?Q_U{1>yRm5^n@q330fr9CNsgyQAG)h#hiQ z1n$sw<;f$6irK?O73sqj%J7GaxHAHQsHhTy1R-@tEUYY~hgM!S-C;?@d*faTETWdG)l)!@$PRH`@uT$M+ctkt!)G`piMJv{TP5LH5U%fsJ=uoaN0 zi?<;Z(GR@kuS0~!WlmSrMA>t%CMi8%QIT-!RqsSpSUh2=cMqDR=vG9-D_)BT-WQ*@ z_{9h_BA&Rkn-NV^@oGe{&*p)ynHBD6RAu9xrn((un|RIymBH#29o*zG?o_U~RI`|1 zYJX(+&kd^-3;9A}xbcp8!*J=+;_C=_`DL&{0%x>V_`refFO8BpvA8d!-W3}pv!bW9 zMkDHu)+p)lN894+RWe*yN5k-$4Bfeen@{yB^o}(Uqd!%{;9Z*+uFphoJ;9(7>jfnusuDZRR8$J+0SQOqfe@TvNFuWV(tB;V zDc7#Dn_NzZC@Z?@hMRIH3p=|AkF-SercSu%q-OcSt!Q>5QBP~g1K0j7KDbGP>+{+1 zHjj4Q5BsAQ_@GtW38_0U0Tx#f4i|Ha^{<*LS~+-|BDbP&%K)s2!Y3!-7uj1>o=+Vj(TSq}v{Z>gq$`uR&sxV;%ZVc?$ysHi^}hR=@p z$w~#u>RbfTv@35y&)p*1R8VAxPh>I7<6GP>JC5^nqv{{|0Us?C+2BX+BIQ|RG)85@ z2r?^^XR~u2wFg+1U|AzJK(GNLHlJYg1&qyz%hBj+tgCl4y4%@&Q#Xq~z2Rpj+Gp`h zk&~}4)a+}4|3~PhJEK265;K86+zzLDo^FDmEev~ZRmd)csBmT&m{`=HJ?>ZFgkUg2 zFxYV!F!g{9Al#7G+ik4OQnOr-ets*Q;OR5m4FmgWLE(Ds0F^n7t1zFB9(6)=m`+KL zIwv|zXQfA-79FM&)1%Ie3bVPXbGx1FlMxkGGr7#CYD57dA)GGRbgDS_RdAKDf+4&g;fdnHj@$jWt&;*Zzdzemf_UnOhyPU!>P}i zj1XPGnb-CP_;9J-<$_OC>TQi~x4q8pZZ|rjjzGUW&>}C6rSuwsjDv1#X9Eo<_lOLk zFe8Y_5DGJbhzy}HBZ$Zle(&IL>-5kr9yA}d6BKcWjJZO@iKuMIRY7UYRY7UcRY7Ug ziGcir)H+DmiPoXTooMo6q;AQ`NMU``h9mGtg^LNV!o`eNVLA|jJOpOLD6X5l=ix|C zT62fhb&fQnr(1UUK>{>cq>CV9q!E}e$QW}3_6ssP29Z5n#s*?6GF(ah@JYM^{=5k$q|7DUA%=c3AC=NiR6i#bYlSV^EB8%m2HEakc&Eakf(q<$MJ4Hq)c z55{}0eQ4aL+O#^*;TTGcE@PAt>x?dAlo5-KE~8`VDd9}HvZFRCj=iDwh}SgCU6C;K zM9%16N^wD0%5g!+JQgxl>$5D&dCOwAi)c>OD)3y8QMbj!6l5h#7i84w5}%>JVYtql z7kh3XJ5{R4c0pQ(?t-)o-vuf4-bi>ZJw(QH^+TjQRjf%dA9 z4M<#W8NY^GbYtY*98WXsGmR%IeSu+2HVJ*L24z6oU~gklz} z=Z2zvx=vpvFL`Z>!F&x;Pige9p^nh_84f#!uueF^D8?^3$sYR7D`<;? z!Bj2}Z~Fo|S&MFs*u~lDu9Q;A8G9X5&144k(ex*hXQsNE*bjPCD)hj6%=+nrKCF;lW7kaJ1Y%-CtLWHcuNZtysDO$auSRiI~)w*kK>hFQRWM-fX z-cvj@BdzJ~L`!NgolIHz3%g2-KVpR|%38ZsmH5-S-m??Alr@sdrTcrx4CJlpzU2RD zC;uOgw-?edN$FG`JZ+tBjb`U&3(BCw>WM_uhYmPwRuox1neJ>ZUFhi@P6^&@(b;#Va{&kXaASA!D1e9vM}rOJRuDtiG%z1B~g* zr!2jRzC?GbH$`5*BzSKknaf&osjk$#G`zUUz<%IPU!fi?noaaV?dkMpyHZr#*`3MGO=Mz)EDR^rN%Gz@n72TQ z0?YFY5GW`n`P#ueMQH8m>P+|L3yDmo6AFyIwxN@uiu#mE&t(XRB}=~0)zsZL0Pl|( z3PbH+vj5C(s0fAhyhO5)w>s?3#-uA*XH8~%`_maHAhl2~$Ukb`T373EL7{-mr6s~J zIA*LxOK%$CZ`9a8S3}}o1NESgsxb<*DKe<2Q%R>wb|qFrIp~pi&n2~h)tC+kT`*Zy;oZUdZ8VdVc%sAbp_;O+hNRB|Us#571pr|U zNfm0KsA*qX%hyPdUgf4+fc3D8e9+P37zu=q)cBW9TP~I8q7IPnf@xmVNGy3O)F>_g z%IL97G6;02P{ANgdeTN4IpGh>t{R$MHInK(5mc_Jf|9^K{slK_Fq`g@XbCMl=5u=I zcFB@t3Wi55xc1kwS^5y3_R1e2(?@91ko*=hy@e)8)gwlHA)jBhTSh~&>Ezfw(-$nr zPBlw!Q{DB*v>sW9QDKk%Wn-C~wrr@EJ7)1|n2NPZ8Q-b2;I z?l+q5SJ$2V%Nsh*x0$84sBXWh|M($!8!~M}#}m!ZG|eqrr!7l1T;VWFFH=p6$ueq4 zehir&L!*f1SDI#X>#7gNy!!K#&CPNqMw71tRy+n1JOif1)$(xaBGdfbL9*Hlg;*ov-u*k1|eZ^7zW@#tY zd-SLdv9mQTm-r=Qr*b+BjbkT zC(!qwK;xw9@1y0FqFXOZbyHVa>BR_9n}%-pBZiN^Dkgf9ZqKRbRramxc8@E`*GYN&wk<(%Y1Ht=Q@$F zJm-?B(ww#h<`1pJbocmf(TCiGoaO;90K@=Ee%}11#T_G_8{B3?6ZgvYDtk3g|4GyK zt(4Y2X-8moH5#`X{e-vR8pIMQ4jextQkOhw-=^urk(;q}Gae~~el3>P;*mV`ymAl| ztZHy0&HL+q_3pK=dFsGO(@&dPc%Z8G%BPGtd8T zG;TmuH|R}3V-=dT3Qg5AZLfScs=6DQIRH)WMI-M;V>kd!RwMIjG?oLPu?AJG(VKwA zdSqLV8aPD(*np}wATtM`$)jlGqi75VKw~2^Z$x7`02-T6)h4|OXgr6io!CInRn;_G{0zt2qEomg1_V*sN7_0*qdYt2qD~EAZ$QxSFRH0Bdm78f?~< zAp(qEgR40J8td@rb-0=*9{^i%)mCiQ)?@;V-ioU^(AIJ6>-)Xmc}OOcG~>w$k0f*W zBUdL`%+_-*;aw34TfMoYWzoNX^ZX89jFcN&mF865b7w zkPRHic~K`g+pcj5DrCQ|i#zWl4lNkJKwFdHaS@uZNcV5xhMQ)#EZlTIac4Oiw_K+U zF95_i+uw2Hyb=%z+s$#wBYW?;?Y_x_uaa(?#x|WOge!7%#KOn%?ZUAuPKdqwD(Q4P z8n+!C%MI{_jF={yKaTT4N^rK-BzPVGY(oKk}Z> zw*7SZf%j{n9u2d!gY?iBZ%`&%pbCpONXd?pEYULG@ju+A4oss2*sPP@qhk6?XxSt zAkEoexCDT$nE1|t!`5H+rn%*aOw6Y{h2=q>VA`AO}^WAan-z49h`Gn|w*%8x_KN90H4zsVcqhvlc` z=jF%bBaa$)boKZN6OZ}Pk837PK6c7ajywK@sV7c5$!e*EuZ%lg?z;Mh#_1>jwCUex zoZ@Nr!W+-6GXtld77Vq8Bd14W@%D~cv*(=gv(EqcPvz%{xk>oYsko^U($9LUa+j7+r!Ep-a(aXfe7RU4gDdSE1jctI;*+ zTC@aRhnAw>q2HrrXgRtb-GFXHH=&!+EocS072SqbqTA6O=uWf>-G%N(e?a%3d(moi zA6kR%M}I^Qpg*BMqX*Gn&_ie~`YT$8)}x2f2J{H}8+sINM313OXft{oJ%P5MC(%~) z6nYwML(iaR(R1i|^mp_E+KzUh7tu@TW%LSq6}^UDM{l4v(Oc*rXeW9by@TFG@1gh6 z2k1kz3w?w>M!V4`Xb<`neTF_qU!X715Za5rLSLhO=o_>j{S$qQzC#DlztDMjAwC~p zfG@-s;fwJlcoDt~FUFVSEAW;0D*Rh~HNFO4icGj{3rZp{2=}deh9C{f5q$Y zdi*fnfFHqs!;j*P_%XZ*Z^n<~C-4^hB;Jaj!cXIE_!;~xehxp6|Bhe4+wl(kB7O z!h7*o_-nime}nhqf8uZPclZGQ7d}s3D4#E1AYUk7Bws9FA}^9Jl`oSQ%a_Yn$XCi& z$-kAamambom6yoZ$xG$m$-kGE$;;*I^)xDmKO0n5mbVVp3H>I?|>9!G^gT67b(=q7B@SI|w^qMNWqH(`rz!WP|xExHL?bQ9JM%&MEPRX1U)Zo*c5UEPGO zx(Qo#6SnFmY}HNJs++KG2$8x8N9rc58?A1zy0PkpN+ZomjL(SA3Ww*AevQz4)xuib zqTyII-y=2O`)I!R)qL-#`5vYD9$o)kBX7}!V9|tN(Q-5)STrG6G$B|tAy_maSTrG6 zG$Cjtt(p+5nh>m-5Ug6hCIqV{1gjm zdw#m#?l1PCQ5gx!DeSiUow=sG;zIRJrwOd;8^GkSyInb6JG{tD^kg?7 z&0ENxtNo>U_142vy)M6#{&czuU4Hdzo)Srx!|k+t>wo4usZDv`I=$ZFB7at{%Ln18 zlzNoL_yqWbU_DzkaA~jKk)_Efi)QqgpJz}sPM>6`FX${Ei(a)tQSg`}@#<7~Zlx|z zqpzp3IG(WSqdr%Dq22wg&>y#IqW0Shij=a*uH5MoXO{Zb7BMqhuG3FTmd6(4DI*hg z#B_;EijULmDTZjahjv3aVp5PJrUa>X-9%MQaCb~TWlK6uj~m1de4OGbRLF&XpDEXw z2b)RRmddVux~`!0o(ZuXq;6=t+wLtedAuf{)8Q%1HPNLKyIMQT0@S;@m(WLN4= zbFwSnp6D!bIh^L?M5`qsBD^#!(KgZ?(L20%gqc}vE^on9yVq$R>GZmaUUhoyZlBpz z=rHH!S}hKkqTI6HucH5d&nbltcX6&$I07f^uu&Grq1+JlWKnLRN7_p7xF$6Ql4eK-J^l)Z;Ez%)uW+wPiY*nyYuu-^*ZgjY5-6lizrNpKB><*C&k0A z!{cYDMxY+@KSNMGVL(h|4!es!$|m(uHX+Tnd-l1mA!+s|FZxl5$CZoJ^IA9OX$3he z8Y5 U+%j%?L1}X|w}FmG~QM_y%`GA%x7utMLq6i47*pQs)dQqoIt(B8Bk>Ed2q? zd_*A#_0E3{ct3to)$Ul#6;L#Cy zk(75c6rBnl7TZQf@xYsdr8&T(Bk+PLuO!KKG^lxl&N8wAuS6<&j$VP&j&jEAud)4m zPE{8f#R6xBG(%B>D{xv+P7)5v?bKmcsEmdHX91QLfIm6{?*+;meedHhgUsW*%P0+a zOR=;Rcyt6_XUglJzCEVA+|$E|d}4XeVZ%9WMj=LJ4qINQ|7hUutE+p-CwM(nIbr+XPufsng~4cBl8+^xl2Zb0SvsGLoq;WA1Dxp`Qc2Xb@-xi(bp z!Rr3gH)PHZH=-gTcN80r;%*=}hs(9;HX$y(_-urXMu6OMEG-8)I)YqRDtGX3&vlNd zB^D!c3AxX(;WMnPFd+-L+~DN5Z?w3O-QS3c1??0zoWgBT$a4*sbK0Wn&HkmO6JljF z7`(oYrPskL9l`7K)awVg*R4tO*ajO>p^&?S4R>&R@H&gj_1u=Wt-pOrf)RNHtqwP- zqZ@q@&MkxeYY*PL>%f-gNiwp7(=w?{*+*~%hyAF-0{`7#)EZ zLU}Lm4O;ix%CR;XWdU!RG)>WhD{%Ty&U53!X7{MUX);Oy&O$6L1T8uOuLI?Mxh?M8 zub%7aGI|MkQ>Cej7F>bTjdH@Ae|#^jZs;pA8U~!jSXvBPbOc^U$_vC>FGK_^PAU1O_tFp;H|{cO5o8Ec-<*)U&4bIW`0^wU_`HqJ5_@XHMk`T32d;2 z-_XzlJKDG0BNfSLB*?A6(h88HBglnPx$6x_zBXe?>mnoa3c2&xa2|I;A#$S?T<&aE z*qh-~KP#6}e~>Gdij@_HD@ZkGncm*A>C2Dz&NZS^A$1uWE@Kl4X=+%>r7F)aUHA9M z@JbmuK&o6SSES$yQqfdu%C-Arw*0(X;S2@NA}lR}=;;VN6Xj)uWgZU==(|ov6M(k? zOB;YkN8nj0Z+}Qp-qkZ>HyY6-5!x+mxCM(w$V_(5wC{B7il@a~g_S2*2XNy9I0%I_ z#!Hj~ryQOFDb^KKZF_E;j9vz(>#?*RoYE1ThEu0~Zg-vcNnG4}MpPo?PGZAJSXx46 z^YxJN$9qnHTlb!fl0j}hmga*T9YL-=m78!mzjf-hSs%zK6?jXqv;=r`1YRe~YdZ9u z|NT@xS}mjDz*~l;Wx%5&@VZc5-M#4JVRPCZF(S7J?*=y9fP;pR*Liqb!{nP)HKsF0 zG+EGY;wCq7FwhpVlc5E^|MAux+t11<6P&KW(i(6|M{pWOo$kB8eantcB^R2YeBix_ zmA_y<05 zuE1$YIiI+m|K+31liwK8R1yAhY&cF2ws}0ucA1}4RMfP*BBN}Onl4RO+`$#3`ckQJ z=0QVh%G+KsqUl2FYi#%$EBl*}DlQcf(ZO@c7I0lgaUeAtOS54q=m>H_Ec&pDX(OWB z)*6vt$eqE4Ga%O_U>TQd)4u!R=>@)j%4iVCRbZ(Cu?3*7Quw}WdZr1?}! zf6`xQ@d6KKu&Rzt;UyhdSRKbK1|2+NR+slgE zfW=MRt@(^Yo6A1jbE`pHz@tgDh^kR=UFFZU1t!2_NQ}UFSqM1Pgj|Q0f`F?PATwm# z9br4VsC`$!<4L^GX*RmgKciBuaNye*~=3L6&&b0SHkSXW+60?tZEHiOrX zpvCG&X6b>(4KFv=nqf{B$r3BhOG&_4{m5qU;t{l1(a0u^kg`%I{|0KCbJwYnh|oWRa!b&5=er`eO_3icUEnoid%_Q zY_`cwqBixIaZ<(8NxI#*+j*;l|anv50?)7{T9zx3^#IRWrLVe%&|yp(llSH0lTcN4)9K_WyJ)*tT# z--w!+4fqf;L}bBhV8B`7%Y5^y7c8vQWtM|)tQoqsd#M8~qsS6(2+f z34F!v#gnS1waNp2KFJSaGHB1c$v>Y6Sm6SE7bd%uvW0zW=Z2)6xYuqHSVoeOLWx({ zfU~li&EPdP>?u}DGs~gW?;kWj6z_pKsU%fs@$wpQR#USXyr2dxR!B1o*?%>!MeSQf zFlP)IBko6+`(#D4DMl~g?_=`5QdzOjo-XaoUBk0gO93em_i5?rWvi~||J4UGdXwJb zKJ7JJX=E&0HWl!25-#w-l(MCRJbzK~9hmIE&vOrxp1)W#;r-N7m@$|P7WwgdA8@tI zXA`D$-u=a+fBdlma0hXSNGJJjUL>VyvjNW_8A7Mdmb&Ti!u4|i&m@^5qSdTdfK_5W z0`t(ca?LNdF4fM38BrukDDk!daJ5_D5wTVQaMm9%OS2*Oho$rxKOZc4Bv0&|Ch5tG zh98Sv26#WxPk5N#@CWQ(Rj%S@VivK!vj3|B+liEwz<(Q)x3RGN=DU8kgJ0ywnF1WZ!3S_J zzEgg!Xtk+(`h^RiIgv~hWejh&09Sh~Cb{+MwL_g7oc#>-nW!1WfpSqP?gBiofFcA}P zy8vgs7Mro{i}W`_2i>|3mX9#`sQ!Gt$67G(!dfpjr%Ad!=Yt`RTA0&^^buY@YTBhw zgN;*^!l@E(#$+=VYuKRku#(}s?%V>)a57xX;QbrmtZ8FD_7r#R@^0gEO3hV?Um`Dw z8N8DNTy5YOpLcH%E$iBtCG<{h;N{?L-@}Z~q_cQRt{KV`0wWHn_&b=qQ{TY6Z@as* z_wlViz>K|^?5%%(c=rbu*77kgyx#*0Yx0;khN%4i cOIJMt1bh;)z+!T5h>=gjU*2X0>+rzfdI=QLRDgooF@wck%Mg>ug)Q>1N}MmTxg_P5%DygBH}!Q4*6=RN#;Q8CW>b z;qS=looDio?;IZ*5*Hja6#i;YN=^?Ai3!Gk&B#iy<9~O}Ot5EW#bzbN*^^R}lTs6i z*dCi6muZI=oSi;rq{PM9yCq~~CZ(muM1+I|1qFrR2<)*SNlQsjN>0eICnt4^>(PS= zLIuwVn2^jS0O@r~%F@iy&B#cx$HpZm#DoL|(bOQtxGph~+@n1*A%%+y>(~=|WZ9GA zle#@ENy?11XLaeC(kVvIgchwmJtHj!5Zft0Hmhq!f;}#|myuVy zPSYTgxR{`!ef1cqC_Xd2h5(5vu{BU^cnvr?J|m$AL~i7tM*bQUUJU^IDc~42 zsCP|`O-|~Znh?**(!m{LGdgEhXNhSUDX~z-2?=b4C8mRY5qjoR)9gtpv7M7rV>5c% zvwEhps^DczoY?2OL1@iGv18%tNJ+{}h_Tyy4~7w5-ava!aq-{+haP!mQm=%xM0-k7 zDx{HYPe|>W!UT6pyT^5j&9G-Nbq%R>;(#y4a2zGc{AI zfv%~UnrmSriCS`OYG->aDTYqi-sH5nSM7-z;7_E4<5&%9)!%Dj)BaxT`5L%bpKDHX zavE4~sML_BY8o}ZKpw zDcK&M5T`Yq_@vI5lU{`gQlW9l!x!J)wp|6tNNV8t%6nP7vK6m<%UlTs6*RcH0& z?8W-f0u!?Asn}VaeuRUh;7pQigp-y;Xb*dE5WES}K{+&tGy^IiG&qRK3A7^|Yd~al zWJEMr8x|E25*i#H>1f9VhEmaEZQ~yr6bUb4co%9BgN#Jn#vh^%<|U*+!h<41qr#)$ zUm-!kxGWjNNU{ID8C=EL?a4T8t~ND`5|R`3QcB2-i`Ck*CeaEv0g4SejkMHcqnHzu zv!Lm7Q8{}dDq%b$JRlmXHXP?2$KpGZl!@&VzLBS!>QDG5K z*x`wWl2$!>9+{>a91t8G5)>U09pvzjGy>FIHCjuqsbVxijn%?7S!WZ3vcj)2qZC6) zi>2IIBhEJ*rO>h=b0JY7p<%e8Mj5tNtC3J=JJkZR6%rDz*NC&rgUm;Uhed~lf^V`h zGIjB+L^ERJlW;FWdi%t5c!yZxe;6vKGYYtSi^Oz?Tn)H!K; zonbEVyth6hf95;Cnof;x{AxN+y&M^NO>cWfT=To0Rp7@0B>#;3S?_s9rRKLhqmZQy z0aN4cnehJ0%IKQV4SeRQ5`ET407rxer4TSKE2$gI`(W%G6G40t3*#aBXUV$6LV)=0 zu^EXWFp@~J$7a%THV&ytGkd1u1X9vtVQLhMt?V9~ZVzS*e2yBOiu_G%VgD?)D5{p) zH4eAuG(6sQRtZMwu~~6lk`uZy^UuzhXJ*CId9eQ0)C4dD(mKq}J$l&jY>>`pq3w`p zwW+lp2Am0Ap%7o!#6+zt&;k>hn3B~86utZR@#blsM)O!oMkApikr8BIMq+Rdx{bj& zU~vB$k^@SUGg2c^OU+0OAW1AFI4m+ODl{TYPZ31U6zS+5(u)XV(@RdKSpiN{%+EK{ zBv?x`Ki^0dFiAB!BqTHx21B6{QQ>$f5fv24#pyI4zi?nbFYW&rQ=(W)s2x$d8U2}p z)+j0G{)QD%P9uUt^gKt=EITJYx&3pBXw=wZrmPJ+v7n~RJNZ+&#~lA-k9ltPvC8xE zkL7fl=WNYTLFri;x-mvQIBB)Y$CMcIbnRo=)76hDO*7Ql0$})^7@LV5pB4gB@{EX- zzft^DL@eN(or;_Wa2`)()C}jC6SA&JYIJ=@QmqK6?9)4C!n25iG|Do{JfI0x5P zGAw^Q%WoLjQ;tJrHF*w|QFHW_3pPP&3gbIkxSE}Z5momdDte~-P=y-&hl;2%j00(+ zXL%4K)XZT!R#K$@tb5gUpX)?4HEJc}MVjatZe+-w_9Lh4X-9GjXw}u=Nlp!FjNwYp ztN^M?OBcVZ1A_9%8tv1QXSx*Pl;F|w^VdSi8<428t05XOCcHH-hcJO_m|ba6)Hv_e zB~Q<3^$>EY2ojo9g8DG4cQu;QH= zmj;V2@d@3M;^<;9CxJOyXV`Ec<4a!BGczk8#kp3@NxEme+BqZLIilqy-4ZiWvz$xG zuwb2$275Bv$R(}QD{*#hjWsD#`?oVhN zgq2lW>4uf^P*Ut2fW)#BC!)#9NQSsl~zt)4EKj?;Og(?0w!*jlI-2c2?PQ|^v)!z*Kt zz_sGtgUs`^_<$8+R>-r#m<{IHP|SuhjMPY2NOV|qL}W;Gcvn*2nwiyhZ|Iy!OS5`S z;hAqjN~eT)`2Tcm(Ve)zHYFy4#I&w3tEbJ45u~QUnA<5N3qqQ(OB#4$wE$hS674WU z;3B~cMqC_oPOt&O3VCF35b0*MXsMpIf6L6^wP#ox2JhE86sp%1Pz|$jC#Ln$-&r9B z)~ckxvrY`G)k=S7wHR2dnEuY1abi+85#iyXWM{;Qoh`YBT{Wx#CBe)tNp(6owUsfI zj8s|gF?3n~F(~UnPFk}MIfd1&rCx-^Fu-JObxwty5^8OJK4UK#%xd=L=QCwXxMp#F zK2x}aYc}WSGo=fhSREV%n@f>lVX&hT85A8J9vl%I-jz4RnFC|-KreYVFHbKc;CyJq z+8*GB-u+n*(J*lk)HtI7dY!1%zGfEtbYAkZ6 z;OR1V3Z5=>r{L*Q#{&EhG_AiWcC7W!${lOc&d50=!#Rcbo1PuUf1J3w!#i$hVgtxMm&e{enzI{f%P6L zBN^d487ixu4PyaCx0rMwn#D{pYZ27kw=kmW#m$JS7daI@yV$8lb(`5Xs_Bp}L9>|a zS{UKezRn1r_IF08+0FGdR7foUJHMye|IGI_ZLN3Evcq*ThK#rj+s_y>;xcS!W5~3; z^nc1{YU*~JfvT51*Y~i?G{juiVYC@JasQ`XoDn|lo7dz(-)yCggThUXbjG`7#tmSPNm^*y5+ezch#Qq^WZ8$PClIb&MoYNkC4Or4o30* zQ6%pqNI}lqg+(B7?n*mh-arkKX#!z`a!PXh=R1Zt@|{=M@gbvFoMl#U}A? zULS}3S;hoM5Y_zrAx3Tn<>U@<^ob$=(xyr!{oxLPG5gRSAw^g>NQ!G8*tHmJ2+Zx> zJ1}<8p!l4UoWSJ5+?@PCD4{?cNpT(%ykkgSt|O2h*tN$erU$|jWk7JCQ<9ihRPb(2ks~l&yKjPPpg1sZVDA6bME+kG z-nAqTDk;xV43>6oADB_tyRgJQBqT64J>B`x4JMn<6a~iS_bV*QE9qbGJS8~M9B9vQ z6ShQ@VzUXVUoi9b)H_`T{j!wOo~vyA3sf&a`PK1_`k@hX~0X;5C>2NwG0 zgU1XkcK8?M41}9B1rB`t67zzb+@eDNB1a!b-#j?DNg!Mc0EPaJVn?yR zB}F;?3Ud6hLlaQs=$BUvZQSG!-qly@ko@r_4=4@i)4ODB(60}8WM6-nz~q5pB@U>f zg4{uaW8&bTsAH&q3aqac^vy5KDe;Hn=rOR13bqvV1%J4d@3wLP=iVoZOP)z>wh3=-jZ}h``*! zf(smKPQj3?7)5o1-O%Zx(sw77py2*Kcr1e zRuaxjD3qjtY9hE_aklYxv6EK`?H`BQGfVm~ZxcIsjXl^NWDg2}W|!UB4vmcT)!Dcc zaz1qn$%eiyn?#jubhX+2`hI~6B^$`BLCgXtYp z5IgUyVQkm@*-re~?ySkD1*8t09J{ghSJn{SF7Q@O*td_Jwp%Vw#02$vWBx1_u7$e5VD%t1_=Jp#T4~$l=BOtk|D5PB%Ki|AQfRAlJ1S`Fg51 zBmHH!5N-5FdPtfa3`Y5Aa!s^-L(Ra@ph$bGL0$E6;FhMn=p0_S;!MzRzzh2Jak^{? zeodS3YYj{3>qm2XFXB-U#3`jN<$Os#Q>=NMm#KQn)t>Q?f(|CC>pHKXnxHXy;SLkt z!+4%ZF8F%k3%xH)LHvyH^dq}z(KrN3hF1xmQ~Xu{Wc;r{=71-*-8lgYK&my54{ z*;uxj#!4pBLTQ33Pf+WXNfT9hqFT??sIm1A@jGdlgvuoO{(}vs*Afq#ZKg4r?h?Ve zL;&5JiuI-fx^<;x(gU$l#JX9(!i)_b9Z|DSxGz+@_z+{60ufU|Bk(=<)vxU3$RJ<6of zsybTrFg0qZu9Ci${?cM=Fx2|y_L8C(Y^F(??kS6W%F?Jzny1S1)JCR8jVw3x9F>2w zI&bU52JLL78Jg}2i@L(nvP_z-sb)47sZ`VbRFppz>y}A>DDodlT~nhM&?Q~B)BD|%V~_NS zvzaDnx{IwYi>(dHqy?(W0=0puQ9b#pUQ)Jfbb9sm(s-NcQ%!fS#dWR)%3-GJIunRyU!2j^TNLCYBT*u z(_Nsd3)I$S(qvVgthUBpa7(1+`<_Rs-&Z*od)Z8%X}ar?bv>$6CS6yo*OfY^Mh%pu zx))46u_5N`PUCWIrqP=2Nl88_H7S!GDDnfP3AXpVZiCR$@82Iue@wEOMrpd2CHb-h zd3&VDj}$F$=XBlJyrA3e=c^{$Ov5$Z`{0~7-Y1Iu1jp;;wnCy_yYJgtwZp{q^K7Ph znr@|PtyG~drmNQJD%6F$cvqxeyJ$f|uW3@dGMj0frh813kBLpoq&tdyM`>zm)Xep= zZo?>#*NV@!YPP~=nxpA%w5S^`t;(c1syat)h2veU`_BA#X3Rl{KKssQ`cl)~q*^zr z5bspgI#q>uo7TRk+mKjZc>CS{zH4o!iJI#=mA_IOWBIlpASc@Eei>LK9 znPS5~OndlV3qi0gl$Kjvms{)TJ;6e0n2YN$mpZf)?UNiCIc-6nh(NW}td^SHX~%f> z%K;ZUjqD-eNG6Ezvr-9wO`^I|T6h-MaFO=@fvG?Ufy_;Pq zRm!oI2B2>V)R?{@Xspd{2{(IRxFzFQhpFl?wGNd4n4+pvIIv7@xC~0p`Db$@dBm7= zxn^wq`@ZjoGWKj2Vz&#g&=(H4%(Wr?eSj7F%0jz6%3 zj6JBNTjD!sL%#d&1q;O1Exy~Uj6-zq(7hA$*rP)a_OVxNuP%)A&6qdinMeCe_C)5f zZ(QG3n8zV64PmA4g}>L4N`LtD2S>->+Sb9jJ0iFp5gJiTLr-6;=>6xn?zma471gyO z+p5=#>Usn0IlLt@cHUccvFhh2(!vlrVmnB2E6PH&hwZJ4vPrOQsGJ1tQFyOb`wIIvskvYP{YlrDQXa7$@;OYvdixTkpBQ}kw;uxm=K z@%s)mAQc!p%$!VB2aojp&*w4S8euP(i$dn2XvPcHDUH@CUepWDJo1Tp`1P4aE}%LI zStp^EjOt`$oy>tL$U21s(^2i|s0|ZjCbG`tG-e^|EDp>@*4Z5R99ci-z#L?q!-2WT zI+p`WmAIwK8#E6Em*=;c+}7F{*V!nuI?8w<16XBtTV-xSO9sGdbKTYEW)ysIt5!GQh6dmq)$v zIL8N9-j^2JmzKtKn)hI;&#~pPCwy=uvrxz^u2uc0H2TqKRV$L8RP_EL*%zxGLf(gr z=mDHS-X{z|C%yOuMJBw|v_I7A^B#8={cI4Xo3&e0rj>QKc4r@ZSbMOKJ*_?2$6nT6 z?Bna!*V)HxYc~7%hV>2h@lETS?4#XkXCL3PzQsPSM{U-lj`YR;s&Bpbnvee350}BO zW}jcp;WT3au9+>@%nc~`a`-1#FZ^)B4?F)@6grk04BwIc?#RK^KS1NL9Q)W93{N^T zC(hpd4}YA@E!5(cQRx6~qn5V~w>a@#h)cxcMgh2L4-09B1v@pMi)&`ow=?BHEZHJ7 z+ak24lAY*{pBfB(s7c# zivznA&)po@qj>J&z+T03F9-H1p8GhkU-8_}fdh)?0S??yB5o)#)Q(qP7`!~D{MfZgqST5FC&IMT| z)>*}YwW9l4F35V(eLV*@iLRSOeO3pCZ4+y4<1+V1s`W@>b6Y9Zs^q{Esn!z?R7tg} zI519D#>s3EejzJg7~rG8jV`s`4GO`du!7KnmznAsD@KkLHp&7yqWe;+#)6-%S5C%^h17&9=)5sPLmuFvX2OT zso!|cdGOYIZQ6(7H_=!WKNe*&l|389%|;mvxFaifWY!(NSCsD+9SphGdCno*op5Zx zD~(?XpxGbs@SCf>rzb`>1HKu-k1fHiNZQJQ3&?f>u{C)S*)DS63bI|{z%^vM#(`VN zc8deIk?l4I?jzfM4m?D*ha7lgGcz)@8_%7JsLdX57ZRP_P}hFhfJ7Tu1Ahux2b`W=tLy<4R4w!xXXS2=iqfiwtvk4Z>d&a&&!{mS0RY&E zTz8_n4ER=X{Z^<;dkoOnAh>Sez%il0F~Nh;xFxvX5*jjKqf~dJ)JR_!T`29A8t#@n z8L(e++b`8)z!tUM7PYay@C$=`)qTI(kO3!D_Y)krqPkz9+*8YPZVU8lUXPGKhsKPoT%$bpSY)J7x7*$yZAy_R|JWo*b)rTJ9OkZDToX`CU` zl;~-OA)Ova{OiJ$ida_&drW-enCPI{18_z3xgrKK;JWB@odY+;);GlfM&rKdbDz_A zB>Ft!K&9Bak_$3I@);qqseB^&e8PcGC7(|@Fh=qj!-0vC&qNMPmV732V5;OZl>;** zpBV<2@?hI{%eEAD!e!XguV*;pheuJ$QPhq4A;?dol+y-iTs7+U|17BLggtngs7^E1 znE-qxs$Utvqw;XA7LO9+uw!2{PFJf$s+|GBtHbXnja%&vb%^g@D6CCk7l55|0SI7;sd0>8OxNL6bExU(b54 zG!Zw;OLFZ?GFw5H%l&3rpLkD9z3#t; z&FX6D+K?7=_L4Sj2TXr86R+QGRw6blu}q0Hr`mjTG!+KYqD!` z77lYv>~Ks>qa768V8*SAY%bG;Kl`xbPu|~rpM~5184LVsQ3-%27WlEC%IZ>O#s5tL z?GN3G79m!$4NWCb)%UEf_pJWZc>z4Ix;`+#tfs5dOE-4yhU=rqw}{;W*d}z|CUm9s z(O}x@wR89M?}_Kqdy>q_2Eyz<)35KvM;E9M!C8SFIh_|8 zo;RlS5XWiB^R(2CiS(+}^s1zv70-W)KV0~5>v6F9KK9K6CDMU$O=_Doy9-QV`cnfXo0`pu|;U-q@xKJLw5 zd*kVN|Iq$%w9|mc*4NnOA4#NE%KBMk5@81V!Zh^&f zfu${tWa>vRThyUV95|9vxk;(4uYUoUBYVt|^+;;pTrR)8`^SD*b*Ip9CzsxCp}}sW z<$3hE6?kSrum1RTKJ>+*>@L}PRpKwA;WFC&-B9Jq;GZgSura=FKWO5{?>f#HJ7 zaDk0Cp9$b``za1w zQ{As|V64S;tffAkZOjf-cK-F?Y96kaNho9zw}yH_X>>tpMi&CVzj)448gqRB&cy34 zzplT-`n$I|mUeYf0gj^5>RM@KHyviXNV8qssKX3j*MIl?0S^ms6l2V8V~j?BWN~bK zor?8^xc{4tLS}Ps_BBeqHO8AAG`?5beXj&j!<)Cu8 zBQ+qS-jIzRHwG7B1BRL37-sHIC5Jcci=8yfw*(J#W{7Sx#HLgNV7BNsn*$3(w*?$n zB)Tm!KR^e?7$ta(68xFi*9uM63hdUxCBf?wuOYQrE9vif zh-14HyIs<20KiVQ%}$loII6}RRoN-iIknw6Reu52@4D>c?^k#K5NG!w@;-?4Mh&0> zc~@{?v(#d<#13z_NZwl{J%}*>yFK$t#DC+;t5Vb|I6>z817MP>PU6mwELIyXHqMWf zCoDU5{qyi)xJHf$Zyym#Xjs1j-{uQ{SvnjKYwwC}?izbn047LnCP?~b7J$iW?a6S` z&PaEOT6+lx9$4Eyu*=~2Y~dAm^awRw>rF~@9~2aZ{IOt`*rE}8uOSR zo1aA=A>Fa4<58kX1kioHAQZ85$7B7$sKu9 zP}@yVL+If>(3q$y6IC|`kgkscDD?%ZX@RQHNtgyYE>Pnbuuz4Al`a%Oq>EH#k?KYP z1X--QE>`PP02-t}r2sURsjkZm4FH?euuW05lG(wGXSF z3?TCf3LwY@)$4*01i%W5X@y0h``-XoS>WfwfYlb4)s{L8*l00rv?%&nUzj&r;OD}C ztrnN9mO2!GVfU=;(XMdr&aDR`+pfTc?f0hwb*D278bf^X55#YzGj#jD8H+ zj&a~OLH$i&*N;w1Fu7#s(^ny0(G^EK6K9#%aM&M0+-TZ*Ss!;p0tYQ?-qh9m264vaw75gZtaYL7&1nINN)bu_0j23f~& zU@WqZp-f?lO10-#D(s<^$v?TX8GW9#Ft-1LlZcK303l(rt3)*}luv-lao zwnQxkED=mg1Pe15UoM%JOBUvxvr>{)O0^iUNi}U!EsQg7QKc<`0C}%6fOIVkAUz2KNH4$u(hMl@-_~a0 z$B~~+!1Z!RwA>M!(3iB&ZPzVpu1@+4OYpdchKRB)-|fDo^+Y_%I&Jnj&7J1BYqs1q zmQ{uSwl4VhN3Tx8s$)>-81A&sBf0A%Ir1X6kXd0)so)keZvh-M_^xr*t6A-(Gg5m#{10}ZVdmgr zW_{Oj-^v{=la^ecgC$3Wu15tsZG#K)CN3)JK4303>?ra+irAI7)5!ZY2et{#wh8)_ zC8T!FrU$csnu}w7H~if$)MURV3r=Qc!|p8b1s2~07Iu!Y+Ty+1Sp5KvtrqXC2H4o3 zS?S{kGrz!L$smr#3V;ma7(fPb6zq%a{Q33To#ttU9GcJ8*HSThDR*q+tmt~ys2qa!M&5F3<-mwC>;`+yroH9{bQ}s` zzZrf_DEMycYTJmsYm0I8KPmw~D!Log_1cs^f9ZKG1OOS;Gk}b@ z89)Zl6g*h8qIT0di&x-m-ILqjGY)X(wJJMQUUf~AydUwtK0Vz(;K!4ZF6~$15SPtv zm(49{5&b*H^_O;k9@ZqA1$DD=P$S{rmsd}FIA|3PLne1L{T~BAc%k#$@vCr&ELMXT ztDUF>z%n&>nE~j_36}`D;Y3y2Pnxm&?dY@L;pjiIeAJYV3Ep4++w}J4=+!v#!^rzE zx7cwKd7m_Z=ZAX-U6{3JHI5=xN!3qbthn_imgJkt;Rwky>o>vC-<$Wm8IxTfd)qk-s) zoW^C<TA{mWQmR6%Idb7J)SacwAMD2CBJSwH;mBw8P z53fZBZni61hjZP-uLrx4auc<^iNa~F>7*DJ9Jzc(QyXBlepIVh$`7~^TtF=@aHk|M zqLvqpdI61Z9OTfR#9={k%z;w3{Cxh>;(L}ZnbGV&-a%w%^6`Uul^W?_#Bq4yW zWc4cp4EgcuE1MpS{1In%qvEsC*jW+m4^szzt^SNNJ3?qNLeLNK0{BE|`H7&PMYy~B zxBAWdZ~GZXvPSV)V?^R;`T92(zKGgT2PD5Bk6%zrY9oLhsNoLe#elJb*H~`Z?gzo+ z2Z0Upv(WHofemt1@Vd$cSuc65m)NDh4U)$OiH)ONYFy3@4R%TOcS-Ex1DVyY6SV%Qs-lf{sMs@ zqb#*YS@d&vAH0~{yS4ki4Y*MEDPjAJ74FI&gKkeOk~iX-8R|Q<1MN28afjfuLx`fU z^SeDi{4};+15L3?@vc(XSMMa%dy=XHI>yGXL@qW`OV20%7!|!}^=7;o+b^_V0+ZSr zF=&n0i5d4?65THuYxEG{uIPT31H&ZuVUoUz4;m9B_X!4gVc5Sq)!81o6~9KuDb2@m z$4tg6wa0VEOvWqG!okOg*CjtZ<=eVO%IF%m}h}s9R@70)LLL^Lcy-c zK9}>`eZCDBX&+0U#!Mzpij7W+zVuyOKI8ttDQk&HC?|e{d&`{7t_%*}>L%)b>1zr2X)}Oba)rx9GA5M{z(2J773V)@R@D z+VRe`J-D_URtGzS?`!SLKK8TrV;}ol`?HUE);#v{ZR^|Y;{fXb_A%d@&psAd3)sg` z#d@ELK}>5pE=tG6X4Lb}XEvSKq4!JsaHdO9d?`w!1qEOZikpM<-HWz^4_?UiII5`* zQ@w{7%^XyxsNPcyVEtn3t5=Ew_v2V6qmaqmZq;u}qu-3(s^QT&uF;>KIe_0P5o&}N zefz*;v>L5H4h!0OH{qR*a06zcv|kC^Z!n!b2&RBWJKzWcy{a zjrlO@eAt*Mf&3)ue9{1|)$eUye|9*BQzOfs)WYo2OX;@H&z!@n38PWyXl~_Wgt_Sm zv%Y}<8XudRe$0W9=Gc+kz2GV4=2OgVXdyz7Y36`w-06jx=C(78(8- zXH{L)QVDSjX-In=SU|=XUzkU{=s@4wAjNY(=8@ckU;ybu89**ZFo1Nb6o9Skk^6eo zgvr)V2o|es6hNY6>52jfvH`)5)gV_Ts0IWfH_I77?oMz3?{_oc7v%B_YQO_Ey6$R$q>;B9{jz_1F`u7b-Pxr4}PoIt)OIK#+%pV2spd{1&3-4tulbz;NbxN^aKOQl^zb@Z&5IS z-0|T6zDmdda_NTy_--Ks$Soia;7h3tc&J?q;sCy-$^ddthy!>Lg#lIC#UT#hRTT!1 zn?xMI(`W{et3@2Z^J)f=yG9(qXI&UT7RMPdR&X6F=)DwFC7D)p8j)j#I10cmmk9Nj z2uhEc!>c&3(C)eI|uL*0S5wq7CJD1tnqQ6*=C_N1(3PTLYvJ(5CxDIau<~X(AXlh z*}`d%l`}?TtI%dEr$Ls>8I5g%-!>tP0!W1%<6{6h#>W71u#f@d`YZ#;7b`e`*OWPc z&jc}m98P2aIk(FIa&DIaWV@9C*DWc~Tu@wangk0O;0KRm~0CMAq19)7>0CI|s19+gw05YcM0KUn~0CJ6q19)u7 z0CF^s19-5>0CISl1NeF{1(5xDqQ^Y3B?XXua!G{)_yREl$aN|X;2|vo$Pqyf;4v-( z$P9)9_*OCl$Q>;X;9)TX$hkuf;Bhho$l*2);H%CQK=zl5p3Aw~C&%BY29yW63{3$9 zStWX`;!2EsV1{Zy5OQ6b0tm8JY`Ru#O#x_-Ptb4xU#O-4f~*%k*K>xEk6}>_h=W|Y zrT~I$5*uw2n^OQ9n;jE<=t_nL{EmrX3|KBTTh1LfTO~=W zBpY3pgk;H%E(6wRS7<4KNY_Z-Yb0L^Ajlf+lS~XCmuxwJkAX6PY!fqJz2v%HYQh1$ zz|4Wj^->%IHb^cTqy`+oOVAt$-5|Zh0P-~u4&d{l3?QEe;Q&4`$^f#V%>Z(Pm;xxE z?NY1ll0OAdK;#ou9Kfew89)}xIS^7Vy~qK)tHS`YoX&xOT~d1v;C&woz_62&$4RLr zJzEckk<&XIz!ya*fFPG8&&yIPdTs%Nkn=qpz*k8aKt5hZ4>Uj!^6>x;;9J2AAfGqm z0RFrH1z<;|)UZQ;Tc-dbJuZ75 zH;#z{I4#4^#;oC-k!zii>oMT0ES)tpzz%Z1n`&qP-AfbR`5;I=H?=8nzYmfPKyBNz?x*#`#Plhu2&D+N#<_vD~^vVJ26GDkMr zsRn>YvigV%@<n^2%E@kF)PGfMH`9lhzUdUby1rTI~x&8`sQwl(Xe2t3&&{$>exXK()0ceoVb5Q^q ztIaR3=2k`5n47IJ`!E`7%)V>PArwFy8_n=z4{vWYx7%pey$~YZYxdh~4x>xw01lYp zXQKe(AeV_bfWKkHfv8{2uW$f=Q-J~G{xJvemJ|o@hqE|<&#N(jTv_IT51hW^06vh# z0epFv0p!dO1IXu>IMDc-*^dMGa}W$5n`a!rpZMYcK3T^Aax9Po_@o#I@U3DBpc=*~ zO~xoK=pF!61G%8h0lYoS0J1&H0epp<19-od0pw0M2kA26T*%44b0XeoE@e7PbmS8Q}w2sBnGwN@zg7_d^2RvH>m zgyd)h)zAR`Dgy(^mv<}9Kct*8L(3c+sQ>r zKJUnAkWX!J0Dte10c6XH1NZ}w3?LT@Ie@Fo(%)Y<|qg7 z2W}WZwyZgTzj(s{vRT3beD|FJQew3aGU2SR30erZe0tm9v(t4vMfSyo>AmjuW2k`N8 z3LwZSOXE`(Z~F0S4FsODL{b28kS}>q02+@iO&(iX(6h4|2zqRZq5y)BZ+%bz8jGzB z7hApP(GSodU+&>R@G@%{2kqmKAGfA#RJ%jc#(x>@rIBi(PpQpARN;cxn~^GDBwonSV2YOt>hB zZ|fD6{=$pbajJuT2eYYe72>uUskRrrnqOO0dL0{n-&+5^@u~MkEB`#Vz1|f~vRS~} zWHjWa8Z0ST)=$yd6EX0gn;QBmC&&kFTt{ zeEd=KJJ<@+m}vy`3jd&}C0alk*Ub^qYN2p888E_JEK`+xS> zKVo^EM>yTXLi}MNnO5jHx1YmXtX{22$mo?CfB4^rd)0S)yAp>X!+I)Nl4;IOX|Pq3 zkOc!ODd_cuZ~YaoJi#Ryg*4ANMMp zNH4!$?ER}s)V9(%H`Ly3%bYbc->pK>nhz`DVZ}m+>t}Bd9sa?cn_3jZQODuj-PFmb z!(`(gQqp$~eh>AjtRl@DzbmO7ko-X_e(^D&(u&_v45+f=HxL76yWrOe1t$2<9p>PN z;-cJQtr*KBU1plk{C$D(ceGF%aL2ym&}v6du}qpTEs$~x`sBYTnoN(xz2aHXyG5&A z;%0G+xK-RH?iBZkyTxPT8PWTH#0v4a{;$L032}pXL_8|a5)O&Kil@c>;z99%xDVnu zDc%ygT&0_dod8hyVU) z7#fa7ppVffXe9a+jY6Z*7&I1@qH$FiIFLj1k5PrNTI2yf8udOqeK4 z5+(~%gsH+bVY)Cw_>VACm@RxR%n{}aUkLMrFNLp!`N9IBOjsy{ag8VjjHqBlLxU|ab7Cbt@%gxI##Mci0HLiwT<*{{}jPUpNw5t|C6*8$1Z@=Jrb=`vPP=A0| zpm)H~e}hz2#23%O=%S^6l$PJE9~sD}#m9Y!>gizRU;oXr;;~m?U`Rl)8_N7&rGFe* zPW|t`2M4+b`T2SWyZL$r1-TF5p-=$7pnSmp&XyJ=EpPu#rm<3RgS`j)yD4Qo$Sd&w zn-G>pJyQ7sy*#|UM|k}$L*LQ=yBS}1Z=XT_qyEqC`TBc${dX%P{R4-4`wemXp_I2L zt^Zn#ecgkG6PlXo!Ty21?n+(4Fp@Ttk3iV!H$l-l4N0s?>->APu^@ti-2;Q&2D$qU zN7vo`{QXAz`iBH5bZo&6O_~T*f7posXA4)fq2Lc2cMUtscCGMg8Rbp-$J836(GUI~ z4f$VXEgImzacUL&yGHwOGQ3gd4-uzgQ~fvj|J*?TNr@Io&HI1j{H`(nA6V6b_^y>{ zJ?nS$|E1Tm&HYbqrKSBZp8V}AKd-lE4LdDF*s5rS`j-Z!3jDn-QMH!M$U$&w-N8=j z>-_`mgw{@-?OfW}kwM39aEPBru(!XTou_w@`yd~$e}cXIEKt@lE8~Zqr59!!m?RIOtC9ryS34e|5#P*r2sq!{xX>^&qT zkZSPs8Wb`_$&i=V7%$6=kSqtO*3}7t9oBUV0>;~ps71)z-N$>3YKlaPO8rBQFfUa7 z5U=3;5yqe2=M-uGoKIri$J<@WgH}BMU^XA?KXTBa-7+5Bdj10C)O`7&jm3_R$!f^H zC;E8#4GA9lV~ln+B#MDvO3?>-ks(&)4)*r-vQs8*Lxw0-h(zC_2L2t+?=Y)=nsfPW zF)-N6({8XbY--gcKcLiAPi3T|zR+m~N(6;?cqp?F6&UG0+$$tNsagKMc0oQ~UID77 zBulg{bBddD_wHS~yD2RVar&!OJJ&W{I<@QU)Y;X!yCuE5b8F`wJ=*nh&PQ(Dy>-4{ zF6}yY%>T1X_fAf(`Pn;n>74&(k1j5*y`2=jE^Sq@KCaH4+c>vzb7|+&rS{)RbqL8t z!Mi(ka(3(C+P!CMSC!VTqvEdxrK3|@w^m)0JgN-%Q~A-(h5u~Vy9fW#(MeI)hyU*6 z)KT@o1tpbV)HwZBHy@{~bAC=&=lqKnYuqj$QMIPx+ZYfUceLhe7$3Po?rJpPR0o zI`+tyGyG}6+p$M}=6v4tw#Z-ap46Lmo!hzQFZyYl&-S&&qduHBtF_voaA+{LL~N9Q&qbQ-O5mre?`RTs4- zY2+?yAEW*5s_OevAz)%0yF{)i77uDJ&xd#g{s4FG7Lox(3N^WZL4UPFvjQ==XO(9rq|5 z2Y&L;{F&Bbpv*4_IM~yT&Fd`m=BMXVtB^Il%D;m>J?M;?D$Bn;p^|WgM~8GuAgej9 zMcsSBnH5<}=F|VE#C*sT}pYiVi z&5iHq%ptaMLFY%rV@6}OLnZnvCFmchMkR=rmo|sXA9t#XR&RBo?8fXdkl9e@VgCrL zm6td`>oJ<-5&L`PR^o|MFgH3wQ~k{!&cCDi!b-EO^Z@?2+V&41rdc3)59eH{bbJ%$H4w)Gz3-o|T$w}+Qw+cx#;wyslqlv^8@u8wtT)vi^?ks>bMfxaW% z1HBx(l1)>uKzE-YM{hq5$045e>UyAv(plCT`u~IFc77f{A)a2EA=QWv8>HwCvNE12 z;ZXZ6TF2?Hd>e+0!N)r&*lnoy5aKTGIunAA|47C_`o#PUgpi*>S>Q5ewd@6TAB_|w znp79h$`Xar)tV%*E?=o`9zII*#+A5I0X@C2V-=7i3@TA4LAX zH}!8)-$hw5`2$Ou7vGuuyYT-u?jJzf9PO*fOwdlirG+|nl7C|M$Ul^oAx_V}n{!$G ztgE7QKI-Ku5Y4pV1$rv8Ijvj7fkxZ4)Tpdus7)Ic=jVtzz|gHhWl(V)MJ7#(&3;Qm?`T2T;BCUV9HzBTG**8qVV38Om~r2O$AWD>6^>1TK9ZaX}w8U zC#n>Mbsp&FK?%XOOu;65bkRiH0bBj#8TUL4*1~HMwH=bI4oM|h%Cx=zuvh5ja>-y4 z61cW(W5H~rqOF9SEryGWh`QZ5e^id?zqp`T7=rouq?14Cin0{*u|ms-!e1F2Z1sHV(v;TMC?+QxS=nS^cJav~H;gbIRfDMOuEVk9xVbC%8M^pZPG zW}ycfo+ioDFeqw@hTn=TfbW(+uHCm<9cyc0KMCL&$#h1t$rRO;8Llxo*0*xwbZfKF z3l&b0+pSwc7)y;R_{Y)Uz#=ALGiQteeGJ$NwxtU+VC8rE(!oYfF$0TR z3rk35-bki5=%<>p%nUkwzg?9@rAt@~_eiXBC97PiY^JEDjLSLw*iQlX%PCwB2v?qD zm4{qv%D77Osqeb~aP1OiVXER;rWh&9k#Z@PVs={`5toxpyog;}%0-e(nT5f~`Ccc# z$J(H#$hk_Z4Ixv@EneQdm#ww1jO62mWc5NSo++v+vwi22edCV_cWes@dx`D$lI}fv zsHUj#7eT;AGWJ!!pay@nD{U>DAz3*f6+IwT&J@*@sdES{HhE6j;L>Jc1p2pHl2>EF zsVQpvq7_^bg8Mrl@eW zj@5*d)=#Gm`0TE*wnNq#vOGgpVxy+W8me0@Mv*XnSZIGW)#--4wGc&YXGvCBXj@I0 z?a`$jQw(DtRy7MQsBo?<&y|&mpr)vBrpOeguifl@XkMx6CSf}dN)@qyxm96w0iWUyTa;+tnYO4JDr)O$ht+V*b^N06|x#xyRNnH zi1;{Bwwfp_KB_76vB1z45#CGO>Y0VfB+yB+oFv;S#z~4Ae_^4ySR?V%$gbP#Sqt$b zG}|T9cC2J-$`p=x*LKB4)7u7xg#AQevMeUcN^aCtC_u&pY$>guhJ*!esM**ojKZv> zNpc$IT20Y#n3ijgh+BDaQNx>B3v)3J@TQc5{;jNqX(S(4C9A8L4>e`lT8-)5(J8~TwMj_h+Tx&49F!7l zOX_R0{@>JJyuCRqyp2hS<9tiNyaYSe;*uk)`r&U!e7OJX0%vPs3bA@nDs@n*o++v+ zvs$a`%|0J$HgGWu!!Rh{bn-WyQk&HjgR)U8-_3Q0wcI_!ql>k$lqk%WOxalT)s!i$ za&uY_=SnNPn1$a_VYnoRBa@n;9;pN!Z8@XBi7-8H)(ctUZ28?R zbVHq=b@FFjVV0uKEKTRI#;wLjr_Akd7QB%4jZS`ptZIs^vo+Rg9+y{qTCrYX^+eVj zot%SxgPIagwYu{@=I8A3+dBMV7N#klW{Od=9EIhhrpVip4W+IpriXMD+PGN@S4or} zNv1~_05xS%dRyg}3ayjppX1NsZdv8PUzXkg%25-YAJ1 zaTcVe$lFjY?=$W0CtkJdI>;<|qt1zvJQ1s|nj&ACmY=iR_FNwM)kk5SM0Bo{$2=DuXQk3GDavJ4$LTlMIyKdvZTcS*LtNLF8@a+#u< zGOmR;_BKywHOs>!#PbsWVAOvwmchnfnN`VUj>Z$;K0Nof7OoI&Ig%*{gQ%uVTY95rPM^;3R%I2eM1 z%)&TS7%$23s8CH&;cP7`A0+ARqF)}5H4DEXYq%_jV=GisWPPFy;^p>z+v^xzYNA;f zj;wh)IS(gSYKpAuwQ_0vJofIZz-FOlp$)Rmk>xqE(!$gfS?6n7OZrG<`u575Viw$x zHByozF+*yKtW!0ugKqz1)_ZrDY8Kp)b%7)=Kvp$H);SvMnKz@;%HI{HnS}sk{h*US zV1KHn$QrA$Hknedoc>Zycp>2!sY8z?@i9*E)D(G}tM#(x;i~gO8_k_#7N!u!7+H>y zmGMJOkugTML0m$n6T|uxba^zh)!aftBH`UBi9502)f9PuR+Z|GRq-7^p~HM@VLK_% z+mh97oNB2lD^OkK8sjI(ujiYDHHtd&r>t>|`cFnO*i>Tm&B?p=n_~C#B22_}PTDV2(@MPI) zvaGaQHDw-FxL7~t=hhpe%t8<T66wGS~LjsDEqxNwBpu*IA9EB{k`Q&Y^xW}R9S+DPG^ zKV?lxFbm_6ah)Wu!y-{rWQ@>?WW|jVsdI{aU27KFBkMd_o`-WcHAU8FZ7M&lY`37h zKbK!`5)N}eR{*SlpE1|ZwVC(1;k#}&D%2#+EKDbkE|%rR=%|{a(qGxoaHiZyuhr7& z4Q639nop4A1oTu*k#nZz>FPhDR)`npZZZkSx%q`qa3LsRDsSD21-;4qs8hp!xx2|M z%plg+$?`hPlA5B<=4|319-2A)*RJh1n}t8n`gBR2j@H!_IVWjN+a=xq&B&qEwwZ)Y z+`gmnZ>$sk7+pL9TQsh^pqE~PRq^7LMdw7p7So!0*ZDzqA4M$0G z6xK*JMZ_ABrpUWb3sG6S#PiwJ*KD^I=8@WaNh*3t z`YBUXQ)c|aj_mFay4+JV_D18Ok{pW0)f5$e(wf8jj-8uTbt%2WBpl?q4h4NE?qC#` znz3B>Ig>Zy@+5zSFP8H?HR_)l&B*suWQ8mO3v0XIEDS}3lO%Z(DpXTcn5spxa&+H) za~gEmZxVKLC*K(hzQcC*lT}q#f$qEPYWz#$<^$Hk9b)*KWc5udugsuH$_zibV?J^Qb8rUa0j_^_HK1n-xCra3NteDZ=@(IA2z#Rcea7)zo%-vXSRg zpX$pGn}yD(Gf|ckaRgOUjhWN?C>nm@f@3W zzLQMvaNtx^rtagZxiibYFLT~3v_=1B%JNLy%TQC)c2k>QwDjvUZGf=g0^9X_E1BM6 z(AAVF%&0Z?&9z#aE|>*pR5)9fXXBb#O;KTlrm$F*iecwJm%L~aw(}Y}2lR8mMzAeg zs1a*5NkzY1E;-ZhqO}l70`p2Ty+Xrk$_)33{k`O#k#jOk!YZ!qn^FHw9of%njj&C- z2{D1S&S#i~f#~5pNuGyAqNeEK46RQ1cw9}L-T$Sc^C;Ij6KrNeb-}ir>4nHT^03Cu zzckHWaK$Y6qRw2MoQpL=O;P72O=pd}^Y1QN^6`pENaZ@?K_3sra9Lc1<=P>=oqwTT zEw2_5)+>C<@F6Mxvt}vktfdz8ysni8>Sy%3Y8FBX<4RdxiL)s+MaGrdZ0gplyYu^m zjaPVmQ0G^j{1yFFQ)Jzs`I(|Wan5n+jH_(M{ZKMJ#QLMAEb3dgU3WTgzj3BnXpIVI z$?`1Rx>8eASdlH?^R}OAQ|(do4U=$)=X)0DXW7Sok3%5xx8Y&kJm6cvpO&M3C^I~{sQFvw+I$%~;$?_^JIW@(sW{7MaTzK)b z3V*t%KeHB25rs!3(^2e})s!i;lJATUo6+)xSr~u{XGro4?8MX*73ONOYvW+oxNDIX zS=Pd7qVSkxI))0>lqqZ?*;RP4Aw0`0{DlgWB{>-tswpa*r}c{O_qKR1*RPyo687-` zJ~!&087&uF<|sA)?*t#Qc z6_in1Fa&G5eya2&>`XvMLce8%Tgv_-{kywr_=8qc`w*lnD0^h|um9CEc@6hWBlHXd zWEeCX?4ugmpdZqx%&*oJv#b(65}8>Bn8hQ*KCy{7*H^!+QJJJ=#h$m@(@&4uK8x^K zEXq9aYJAn-ao%u(>@~n%gO-2u?b*RcBUEI&0k(6bK$V9l^?gnfnbihZ%{_1(>(Zj; z0Tnr6fD>G%{3~7dpa-vrOl_#G*=L{o&@=T@AM?!HrOk})C8ik=c_+d<9)I@n5A#XC z`B9o`^4PF1z$in%`ck1<&WZlM@$HGW_RwClGXGiMVL2yL z2|Zi~;X17Z*mq)*Px6tN*=L`H5mCPhGo)mTU0a}hycv-W&_T1Z>rkCLWilTTx+i#Q zH88DOn}TD~I~7L$9Xi;d(^>}mo{VKlKO<8k>;p0)^t&-dw%t8@t>}fnilDZ4dU(fM zfO&T2wkGYD6J(wd=J6=UdCzE?@^B479va~x?`wC2?eJ>$(4i=5YX}XCuspg{ZIgb` zRE^N@>ERx?GU?^`eUFmr5agvEUUFo7qI~qaJcl61L^#H4lk?5=M#4y~ zJ}qmquU7qQJ|$6Cln7DWXZFP&5&D^)I&eSY`ox)AT9rcNjtF=7$nAV`fz|A@=Lxbx z2P=4NI(;iS=GbE=8J)HlLWV0|SWALjqI@ zJ0ySzJsCie5n+wGd7rc`gUD6`Y~@Abp7d#I$J@KhB63286S7wM(u$pXw`1Nhf_%`! z2cGe}A0Ka6v+pE9PRnpw)-rf>>Vu@y@2iwUZGEAyR`m*5uRjnR{1>5bFv139jY|KX zgvK0smz_b7dZ2tNrhksrw^eC=$@M4H)EF9T777fka(#QLN9B>eLxdfoawJLpW9J?a zp=TW^GXDBcFNUnVRRNJLB5dIkhWeix23IfsgdlfxaEDijfQWH1lY9SEv4|pbPY3sS zN2U~2v}7ACRb_@1!b-_@r3E2IvW>AI#7efY7KGK3?P?1`oMankL5P=Z<1GjYl5K(o zAyKkTv>>dLY}Z*3k|f(C3qrDFn`}Wym26Wj2-B1IB@}~1g%ju=39PUVv7!hK49j^R*Y2>QGPL)Vm8Q>O|`E~Bj!W-+As*K1H z9UReVL+tL}?>m+Q8r3@YVw)@X0lVX4ruI+sQ!_FrO@>UOTxo_-z4QiujYN#DK zw{Af2F5jw%To&On?kjHiEns;k8(TDig*(h(3ApY>jFt^GOe%xYz4D=4K9B*^wYSW!T9h%8vKo z&`(eGP<3xwd$01-=T%2-zrk->S+jFK*oD%wJyb$zhFQj{S;l7Ut9plOB}P}6zNZGN z*d)Rx-t5^KAVlc7AF5<@tv|*%?H*MVkq-v=z^l>#W5(8~q{Rd|tb@b6V&=J>d%FG1 zc7jYaz(g)HKVwB}w+gQbvPy(iyaC+URJTyWb+)z8PN)t-b=u4-rGJyiQ)_wEAr zdH;C!+V-u+)J6p#4e*f%iXD$agdT~as@ah!tReIy6h+t}D3qZmpD4o4JRzbUc%p#t z+SqYniS-leAW{{onixItk4xA4SD#1d8}+b}FIzl*pIz=zp%{WJG{8dc^VX+(hn>1? zu8X>QKo4!KW5=kFPLEDeGf5TSp6Z_5o=7C`)cT(1TP|hMl28gr1wC$hyQM ztxYfO>m$+!`e^pct@to-bk!z=zQPDA_#~^(?AI~3TdW|+bv<0?E%ai+;T20hcvioX zqU)9pZt+EfQlf8kHg9xQSf~`jTb<2Y3qp?0CdY#CPG|GZg798v^WK8+L1**9g78si z^U;FvNoVuPg78^q^Vx!stFy_qAbi!?e6=9t>1^^W2;X!z-z*3dC7X#-{>)91Y$jO{ zCQCMxEeN5KO{fK7iexjzf-qIGnQB1@lWf8)2-75+X%>X(lFf7r!VJk~h6Q1!WHZx( z5H8t-TM%YRHnS`Uvn89^7KFKy&0Gt@JjrIB1tCJRiLf9nkZcxM5Ee-`i!2C{l1-!q zAxg4|;sm#8jXhF6xi`Riy2b!&cnfkqQ!}jAvFils2|cwM%uWPiA5TvK(%Pp~zURi$ z&yBU%=Ig|V-&zGr_6XI#{LC zWF~)H`+QKOOC!`)18Qi!XyDmq&vmtSL@Zd-WZVw zI(WeQ(d({@lTZ76B*;V~Oyq0Vk=H8(HpuP$3(BPEA%%BCbuvQsZ9F@kAT6P#HXW`t zH|g!6QkMvQu?UO#uzx37niI7!gCHk#aDvDD{Zom|VHpm~+9LDY^|LMO{kggs%6yjLv#iZ6Tg6X!*m^{p=7=O3AyK(3K>xP& zDDg6)S~fv07~ulsv*U0I!4I3eN$PFe+9l~j1crx!a2J;4A8 z+~b5(RqQHtxlNGmdf3jZ1UoN_y672M8ky30)81T*%WH+md=cjJ?dDdqv#XEjQNJ}J zd-brFYb*QZl2xToE(E!)gWG(K#;OyR06l0+?F>olQ{Q2dT^rO^3u zR3dlnfscQ*mz+_e4Ybi}V8hTSP7%642t8SZWF9egJ{KkEnOv%ioykRn9>k?cnJvu| zmW~d0LF9-CN4U023rsaP7ym|( zYYniL%jie6X&8F&4nZF1;Q^24mo{hawb2nK2OgPm?h33{TL zN*tcqQr?i+wJRc<4X~M)TkmgOG7}o46Xd)e&hu{Gblt%+pL4*3G%`KFSwolNmU(&M|S9eGLa%g@*b*2$DmQ&eR>fj zM}{0(TMGpL*<#81cF_d6C&N8nbJ+QA9R2B;Zt68oJ&jG@8oRJFbnJjPHfMUSo3b7) zbMxYvcGFzZrE>;2$9GQKv^aLOlgAo@yfnZ|o{hQVn(eN*b}K>ZKpm~qIHa!{XWj7t zq2CkX9$%T#g7m zP)=n=myS61^~>a5h$I^znR{&Ws`KDkLDTyn5@moWj%34ta_z2OC&(2YTv5KP(m&rx ztG^zrTCgw5q=}Hmn?#%9M3KwwxfF^{|=eGs^30RN-Bl3G&VW@3_yy>t@ybXlmCFJ$r6|=Nw^2 z>Jg#m=vi*MMy{&iwUEdh*TZpchwTDj8PFs3RK|OhRmT(G2L6uP4(Q+jA0F8;dqmVT z_AF}bR6Qc}C_RO?jV}B9WNC4KM6wK!#l2?7>k*-6>Z#0{!kc4nUD-fnW*A@wmnn9n z>%7x3rwDRQ57&5p`VI;Aawrr$0JQ}|pjOu|=^u|uun#5lr3P5abu}MWd8s^WJwe_Y z;4MekX@1m2Pw-REYD|(b3>#vbk^$NxuEy$PVcNT5a~%eNa9x5wE#ruT>z@9@wSQ`Zp23unS(|+ z$cF&8v!=QQL-rCR#Rw@zt&VFCT4w-l%!?0y0w^iBdr*lh$v=nVvlMBcsQP~+6bL5OVA!8RUMb~gbLdLMzx z+>1I`H~T?l4@C0xkjLwrd-TOC0X0i?@ za}VAhx1aX5!cb4NGgl9D_1XZsa6-!hFsh6fB5Oog!v~LfXFHBNeRe59-W%XOkLSEE zi;bxp>kLMjR1s3SOtVR;xjnkIBFGK{?BIj$3EjS!F*k=3WRD*9@ccC1GId9SOEy7P z7+?jrQ@}30aJ`s0L(tAn9qi=WB6D4DPdRVcNRTUfxWctrXQ%3io!Ui^i8`3bWs*9F zOuFjvi6BWLB=PA@&49<#9lbsiWUc|`at~&lD0gqy!lpyfgBH+2i(2BY5|Kxir4ss0 zJ>2B>50%<*&FFBDAd?L+nd>T4_w4<|-De5X8+vQ4VOYVt(_S9^Lg;CFNaNFyqdVqg z&)(kH8?8^&!$ki5J3ZSaVr9uc2r?Q*YkskND=0zls?fS|zHN`xnZlUih{TBy$8*2+ z(Y*rU&9exSq=zJK-)7_S@h5AI^Ff(-9mMncwDD~Dh?jqjC&&gpY~V6Oi&eea<$0nn z%G}q%eLlS$+FZ9YqRm=@Ts6W~egxXPo+ z?%t66kc&4oqr&bk#`<;Nr28S#7TRh%yZs6}H=8x*C7~ZM!U1DNCUGb|<7imf-~3Tx zvIvv;nEZR)t;Y^L>`ag^B7ETpyU>F&^b!wMceiX#pN~(k5}BzYOyx3{yS4aj;?-gS zC^JcfNgNpzU@GEp?{|WDgSS?mDOnY749Xl$=rKBo;n8eXbL5``w#+2RQ9T^xHSlQR zf}Zc7%%5oGk{&McvRRTo@UQ-djuT|72wV9KqixYOpX**ZOArTe&^BfV|GvEEk@U8K zsB5kf=JJVZ_Yx!am3&M0Phjm{2A9})}0*%bHPBeor>6AjlRyY~je85AMOuHcTCfGXCJN=}No&r|JNQ7G|D56`%+tcd+N#}5=4jYy~wLV3hei%ef%!1^3PP8r}7&%fMyrCa@{kH?_Q zIuX|Ka=F>2)9@3U%8fX@u2DtB_U239?cTEBP*7=fhD+2yr6G#+If!BLyX77`xhuINyW(7Qo5E&gu`l^nTs zZ*@Z7r-yw!%F)$N)H)C|l^{C}u#?B~PSFJqW5S;jWVZo!bL8o`{+<`>)|i0SXBuH9 zpTX=~bZ+s^*ieF;(8CFCXVkrGTi%;?6Xd84j`F#xi*2LCFze3*d1Qb`Jpb&v9onIH z>}Uz3JEvUDTHatHB70@n%RlxXywLsQiFJ($vQ7uGzoPbF~SkPS6IWhT7~!{$pnctLab4n_r;|a+0wVceuDf3e`&gAjQKMB&E-v# zQCBDEr196vDs-ys*lmP9#{hG99@#xXl%SUbX&$Rh__3vcHbka)Qh@!ff8k z*tJB|M(-k0&)6+QMCjE+iez=V)oiB}HWiV0J;dv^FMG?Zde7=|Xc0l`LwzkW&xdaO zy}j!;LT>_1v|Nt5+96ihIxY+~CFmi6*Ccka5fOTuky<}+JEU3Z551=$@IL<_5rU7R1$UHFpX4N>$B^;6K2Dr`B;TseAT%Dq& zh{$X;bq*=mGk2XlC6hq zUZU*&F3QkLyVQfkjO(K-m!G>Bk#^8dt77G?lcPHK{YdD`b+BBgeQa5EWYD|dIw-e-|9xn1K9vtRv$~|0nDQb%|Kpc9r-2~ZdguT41Ym|w**`xm*g4Bh&+80fBNg8$0o6*$% z-R9W`+P15@5|Mp6*vDraH;V<<_Iv9?kT3&;@qF$pRX+Ulhb07AYJ{b{bl44R)JAVr zQ#(6-);`gX854uZ1wCBg<;FTzY=`ukHI-RAvhTEr>gZWtg4{F0J>K4X-p-4xRk7J> zlo<X!Wn)f?X;8S%4uVWJ!el;EsCsCPwCbQfj@UQA7GBb4 zqkAnay`d#R{)9iZ9-?gE$Ar)osf6waej1(ahhxO(RdSkpc8eUlb9!@}B1(5Y6NH&i zie37v+pO09`RP65(VZoFSi&daY5Lk*N>_NVA_iE(LpXVc-u$w95cW%USb!X=5(`hoU#rS2O=f=NDD%gWFKWgNR=E? zrAGNg)=LiSEeL6nLz)F)gXFM*6E+>%Y?|!-g1GuzhUc=jbQ7-JDU58m9`xOcZ?M3xy~8Ar-Db-L>u z;YEmc@_-by^34F> zc;E*dweuR-qI4=Er;Tu$&j)h~4yyO0#dCrz*TZsNpV`v}*j(s~1~k&~QthRAE$6RC zZBa&u;y!;!TyOnT(RBnlC&M{@=Gpt_H5b$KUJ&H45f1atkG+h5+URQt)Q(Hl{x?TE z1g0V44(?h$$2T`0ss8m6p*Mm?T6g{0<80bbc77X>|Ck<*@!{8b{L{^gJ_ZmZ%?N4y zWc4n`u|?WO&nCzkBdp=e&5n2L&MW?KDM7v(;46P{D#L4u}g_WYiOCP5pAW0suAcRtASpWKSwii!$C%WIkxdN0Y({MxW!T71owA1@5TUO> zP&*;j+l(yvTW=zB#Q;}$&0M!LqjgZ{nVSnL?RlRh?~{tKGm8pgza;OMim)dP6v6>X zJ|GogC-oJ=1xdaj6=7H26~aYHz9aF3gL<*Uy+KiHz*WBs4R!dMc7^3taom!j!wKsGILcAS9#FZzuM8d`jrA(FaRq> zSjiVAE~`HFy)tD2LAJ@Tjqja2s9L+4`{ersd1ioTyrFM?(rv=q&jq)lwkLXc!tI2X z*|loq^Lhk1DZ)vosLc3_pYja*z7d&J1Eli&bS!)}?B_o6c9hwnhaEgWk57Hw zSp1HPtQBD`?>e9R2cB;<*_z0l)WJ#K|3@#KbmLf3CxYBDz#VR9eEgrqe>>KPAn78c z^XRZwK+psF@(1`U9BI7t;!+DCLL_zUmK4VyDS;)Lm#NO$TWlc^P$}`twNny#mRTTPG&FhP?z+ObMWHd9yrJ6u*2%U+X1W2UbC0c``Y)W`dlo?!7+?WMa!x%gSz+j5f^5*i2A=<+ zk+(C;RH?of?c5aMCa-B;m49FRU}a;1)P$Pa`s6^`g5b+>eF%M*4t8-}ood=Oaali* zAp1nv$7|r&799swDR!11VR{JTUyE4Ji1z7&E;OGxeaD44l_<3jkuxHk;hvSaylHV< zs24$w7~lwR)9eu#l%X%bP;G3}2J0Yw>V+cgl^2wuFS}5r$i%-|6+PPM5F*<|*v9k2 z-h4rXKJ-Fm5?c-|-!Enlk-2Dqi+q^a?i|po$&9{-QRcHAKJ!|@o`u1gIDHC+YEwGy zB_J#TYj!&A&u_WkCNBsjN=_Q!B+oi~G6vPtcVeiLqMbadm%8xF5k!I@NE?OgXN0}b zFBwDVU-j^nJCq*v-tYQn@hD0}=pjO{EyG9tykYzP#svrxt%qnnbJ{ma%&2L$A;<;; zY~Y^x4h#r5@BS-6-iYvq&mGz0HJEYwU=7cBwy}D)u{qm)GaRm-{2^-GF?8vf2+#OQ zoB3Z;OZRxSm>{WoNaf?jW6x0@H^Q2R9rP&ObD=_r!oM3{a86b_fABT_&4?N0VCdd^LuJA$( zd|qW;nVGe8tK@U&TZ{o>c=58wkPx8{AkiQmYMZmZN&UM-=CKHm zc_Ff=kx+)dheTy2);^Kr{AaTZh|JK#3|?65jU+_qyGT@qy^DkheGG{raVG#4r9|y?Xgl-4`Q8gN(9QxQEa2S?dtV6=`lu3> zVLL0RjlQBpky0xQS8%;k{4&a%(ZdCjq0hD@J_LDUfG6DRBG$DZ92Cb9WT6oj zat{`5nj5*N+%kgf*Ta6EABUXTGkbhVCCDfkrPb;J)pG^O_17zCKf(YJ+zNZy2@(37 z6ZQG<#njFEj1(d>O$XEXN{c=5g!!Z|J5iaSYJCf}DqwpRwY?YNJ@07Qb5D2#OMU8z zir^Mb9Mp`1ChT~(LWl>4cxcG%YzP{@HE3H~qIIzW7IW{}+fZnaz6V9svX`I`q0c{2 zggyL(2z~5{BEiv>lAPT-UPELE4AG+J<1}^Z>;BIPJw^{Pe0)^yx{MvQ$oo1<Y3NWLDpr$JTprw z$Wt9W<n+0K_WIvH_CMilMN%oU02$LoI z$rglA$v)JAFh#PTVnLWH*-y0~gh}>c7KCY%{WJ^0bjg0Y1!0C{Kf{7BQ?j3FK?s-Z z!z~E2B>PzwgxQk)YzsoHnb<2l1Vz6|y!$a)dh^FgGg^0?uNf;S10EkZV*p0zglKfc>|`)$;g zXMntX6?1jp({0?Q+(Bf$9@g_tDtJWG7ulCm335$_Yy9(Uodp>QO&**e$U_}G>Zv63c^b;a;+yKY9oecvIuQu7fAjozjY*(I$q<;lV3_Ct*M$moK zc2*B(c?>Fk>$3e!)*XU0g{E4$v3J$5r0H{NRM)GN1BTkA-V%vrdRWGDlaRi!`jy3- zAE1?82H3?tD|;dSP~M|E4-q-2hl9LpPj~5)H)i6nM~ECXz)>#4UTh;ilh@idg+uFRSTySdW=R4-B=@H|S^(*c)_+(1+(J64nL! z%^X+y86uGeh~zO~kI^AQAE2W$4W>*=**g0*kr@WVv|7L(rb7w(8Xc8b^4m0h4X3mh zh=hv}&Q~QHonw2~v^_$QH+p!(BT)D0&+C`oJVTIKI+(>*EIaO zL1FLR5rn*TM;#E@8+VA%hwUhonD+JF(Gt&ywp}vp;=6x=Yda3zT=)w?G7XT)WAl4m zyRN$2mM>A;Wj$QxUO(LGQ+RsWeFX6WFD*8=PF3Bt=WX6gD@Edo4xZ?=EnB7MeWSB~ zqie`qRS0i&_HQi+IXe3s3&J~{{W}Z7d!7Az3&IDT{Ra!eN1gpg3&JOz{U-~;XPy0L z3qrKy5N+{UX{F?_(t;2pImB>+)xezJ=k)f-#<(of!6JS>ank6u?<40*uMxSghxtPY!8~Am=umbY&7X&$@gEPD;x;}HhIOONI z1leeSjl9vb%evSl(gzZ00e>BrEBBmG;vL#qqk}a(!|c&SMCe0_ROZ6XC(V6cDbq;> z*{XxBJQVElL`3L|iByKYm52y^Adw<7TRTQwd$*iun{9yEykfWfni1SPZ8t$;4G_x_ z>!q!($5(qykhwaTtJA)%tsQB6y1aJiN3=5>hHF*cddTz|V#Ae$K2d~;e8b%*Z05=x zBW@GqwE7~K0K)D zmRv+G8Q>D%_L(=z`^lxphY6A>LL$%Uny2q$8)QBr$aNiD=Tn{ePo~wGVJi0(wS5%f zBVYBfuQ`a&S1_puEjm7SD1OX?$ovAoXdAIz?6#+N*%nIZH}r6Wmv!8Uz$ue%6v#te zj}7pc*PJEWiyXe&!I~gTjIe|c%Usr{-+`;J$CF@eZL>L8MzV!Qih)TFU* zvk7wE2T3QA8W|Ym;e9( literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_crc.c.F6DDC6B8B8993B58.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_crc.c.F6DDC6B8B8993B58.idx new file mode 100644 index 0000000000000000000000000000000000000000..9a19b465f3d7dad233c84c36f200c2f21f856b0d GIT binary patch literal 15472 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 Oa=r3XW$B}e?Y{wq#OHkg literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_crc.h.BCF9DD097BC0E558.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_crc.h.BCF9DD097BC0E558.idx new file mode 100644 index 0000000000000000000000000000000000000000..d1215bf80b8997f001cfb80261b29993930baf57 GIT binary patch literal 1588 zcmb_dO=uHA6rR+kZfdOB*w$#p(fZTcwA-XYG_917kP?4D#U4a3Og7VY>}C^ZH?{tu zc(S6P2!eta5qhYXf}Sf{MeyiBJgJBXf(JzrMbI~sooF$7a$(`|&G)`H?|X0Aed$yx zREJO^m!8N|htwj3mcwg1oLyf4fq2^2p9sf{f@M3n#4M*bl5y~6!Z|s1Dumach{P(W z&5qMk9p!{yV2(KCcXTV{4|7U0>HspT%7=c{6UsoFFX{sG^g56cOT#;k3}PB3lQgOB5G|F~Pl&t}Jt~xB>nr)55Y-k>%z{6&td+k;$3`V@&pusg#okLO8?e z2(ul^At1S`uuYvZPMO8ZVa1s$=~d2-a^_H}VKZyQESvh8mZ6X2dLxEN0cW~L(f_ZUwhXhBqm@FUNXarBRZObI%`{NzhDaZHoe>%9g6zVV)3oQ6NvlbYf!MZwmGPI z0^a6r{Z}>>8vFccS@|3VQr^^B6kNEVb(IeY1NRTt%sy`1;YUjqA*m(XghISz+ z&Gx%zFWm4Wzas4P?F0p{XOS#1cWb8Q{UhJBA2ljM+LvC3f^{|Zl5nm2$g54?CV{X- z5&FITOGJq#c?W!T@8^&A1|R!TgCY!g2U-PTg(SexhV26$gkHax-8`55u*_2*2y5Xc zmtC>J6D+sy;;MOoWz#Oa|K#QGXY$Sfh(xt$K#9D0a^5&t{E-BBi?*dj!O9>Ik;b^V zwd>irn;ZIufZeHeD(}#@nX^;D2hmZ0Lt03Aj$(JdK0nhieH!3)t$mTwKJ@9`)7slp zlK^*VUCJG#EQgZPYL~8z23Q*G!pdHNrL8U;^8GkBHg|CrwA-|{W>r#o4Q%PL!Z|gG ah;44zviHEk_q)C6hhM&Xmdl@lOZ*A(0kxC> literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_ctc.h.689D2BB536D5AB9B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_ctc.h.689D2BB536D5AB9B.idx new file mode 100644 index 0000000000000000000000000000000000000000..7c064bebf1f396849c2f84834244a6a70fe611be GIT binary patch literal 4940 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_dbg.c.77F06E5A520C4FCE.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_dbg.c.77F06E5A520C4FCE.idx new file mode 100644 index 0000000000000000000000000000000000000000..77ef970fea1d26ea67e07977556a04b2d24ef8f9 GIT binary patch literal 15126 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_dma.h.E55AB735911EF4CD.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_dma.h.E55AB735911EF4CD.idx new file mode 100644 index 0000000000000000000000000000000000000000..f49b350eae611eb9d7cf5e7429337b380d46d3d2 GIT binary patch literal 9632 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 Db|4M3 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_eval.c.594FB0A3FEC0397F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_eval.c.594FB0A3FEC0397F.idx new file mode 100644 index 0000000000000000000000000000000000000000..0339c3f329675499a8fe7bab083961419a2caadc GIT binary patch literal 19850 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 I;u$0KKfNS+x&QzG literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_exmc.h.12FCFBE39F7C8EE1.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_exmc.h.12FCFBE39F7C8EE1.idx new file mode 100644 index 0000000000000000000000000000000000000000..5fc6c380fd3e3140c8c3a6f9b0bad6fd8706ebe5 GIT binary patch literal 5260 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_exti.h.325FE95D190A0DD5.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_exti.h.325FE95D190A0DD5.idx new file mode 100644 index 0000000000000000000000000000000000000000..5dafc3bf4cd47df47e7b91371437d9ac3251c3fb GIT binary patch literal 7990 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_fmc.h.085216A0DF1765A6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_fmc.h.085216A0DF1765A6.idx new file mode 100644 index 0000000000000000000000000000000000000000..86976bc0fe07df84211b018a0a011c0d19cc321f GIT binary patch literal 8436 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_fwdgt.c.86603F7A914142A9.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_fwdgt.c.86603F7A914142A9.idx new file mode 100644 index 0000000000000000000000000000000000000000..4f85bbea034f879c5910a27c0b16589583f8cacb GIT binary patch literal 17074 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_gpio.c.7D9C99867F6F9BAE.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_gpio.c.7D9C99867F6F9BAE.idx new file mode 100644 index 0000000000000000000000000000000000000000..f483b7304d79cc2f1e21ab296685c1f87c83472e GIT binary patch literal 21688 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 a!{U_E#WZm|%kW{|_wmzV84&sp|NJjT--{an literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_libopt.h.E4A1E3DB1E741BF6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_libopt.h.E4A1E3DB1E741BF6.idx new file mode 100644 index 0000000000000000000000000000000000000000..814af097ed3974785614cec0ed8625751d482499 GIT binary patch literal 3174 zcmc(iyH3L}6o%dV{eBZ8>cUj_vUNkPQbl5@kdRmaIgXoJja$o3X_W zE!aq)k)HsaBSraQJNb2vqmw_^wq@Oy5t_O7QLuod5kl?o(1GIL#So%cai2{w#_@;ctHE?3Ie3e zjsmLO>=LvjfOablm zUK0h?PY(aq%j_-n_bxNG)921kMtLIrB%H|nDz?(S@ce%F`f~d=T_lRVe!hPeP5p*q zK8Zjps#}Q=A`5+rY77YF43-S`p4;c2Umx~Gw~u#S$n)HdeG|Zl1+rIRbtf&3frHFZ@CNS$5)?&J~f=s;ZjVG^1Io z>q~jHR6paale;3zttX!8S}|LyHV4(F-a(zIYw%O5)l1DyXAvEDyG~GMhuMl224$LAQUs1B06elBBMrvk@0pU zlJ={a(XrUDPY;5cRgjwkQ#`tHDXnDX#$J{e2$G% zx&;9R)5#7U!ZCjbDRI1mI2ufaCcwB6zc9WElGmX_+TT$ci2*S>sE@_{(a1 zaTB@8xZ`e9m5Ib-NHX9_0LZv%ERq5~G7og2nhHgI9$6Sj#M5IjJy@m*TK);hEhn=s z4EZ5Qx7#&2wTXq|8Srb6Bbf*^WB!TNkzi(&`0L_GA`w-E zkc-y9v`?ghFjZB^Df=rL$z-A-NL?`EkE?W5P)Wj|=A>GnIa_U%idC&(ZA{ndO*$-5 zfaRf80TzB8R>@=*Zqf>j#nY5p#7U+W^~Xn4KTE?f@i&?XtW?7(;1kPmK-Lgm9axLF zc3`c!HAq_LbSD~3fcJ(eMrz&K>-oGbA3Xd-n0XE?{(?Enokeh4KHPG?e) z_()pMesDOd215Zlae|Q%B4?`#1L82b$;1M=r*FvP==b(}yn`O6%hT`mXg0Tt(VZ%@ z-i)h65K5*a5Ib~r^|@RQkEh?^8FG0YZl~L+*_>=~Ac~{@H26S=5~L8~NIVR)IHZbipBP=0a$AEj#I|#pA4kyW_ z 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 za-njOab%7 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_misc.h.CB5209240ED995C3.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_misc.h.CB5209240ED995C3.idx new file mode 100644 index 0000000000000000000000000000000000000000..50b3aeb333ba35953e2bd76e0259586a13c72e71 GIT binary patch literal 2062 zcmb_cU1%It6uz5elQA9brfq&U*6l6HLsK@H{Yl%nEp6;Bo2)T$le*G~ILyx6Bx7cG zrgvuZV+=l|AP9nmAY%Jap_uvuA|awtAL>I;X$ZcQ25GGzRBIoElvHh{-nlz>lCoNS zaA9EQJKz1z`OZ0a22#mnB?mxUNloOCB~<_bc96%ku==9?V*mCuPlaQtf&RSs%%p)} zeoU1`6`z=H`PWDgHcv%j1vPJVh?aXmG%zBMs$R*@*u`u5xS@|DEar5D z21^@3sw@SA@PYRKA-vf+k-Xm)GhGs3ev5*etZrtOxO9Rg23vp}8v}}JN?8rTzGqW$ zNP3SjE*KWX=tKdT76d5&!0?c&p_m{D@tBY?5jF)mn-!igjD%!K!c)2|X@Z1vf+5MH zrqHDhO9@0=AfYP}jl{#D2{DmO3*ojn&Uba*{4;3V95|-@$Cafmw1+5VT*@i>9r4X?DB06o| z0E&GqzOz#zJtY#cB0h#>OUL#`Ylxy4u|%dNSqSPwG%MLtNEa2_iwXfF(HRy+AQgdG z$wW|66e479@cxsSvqw|}&v-eV2G&sX{>LEo}_ z=KS*dBo7{AgyY`hjljRf+eisn>$}T?;i?Nfc$5(`-V7n|mGzWxsy~;zv^IE=2epjQ z?d{$P{126HqlDj#J6N;2S9todv^l;WZ_f_k=gPKH!lm0aTSv}mH+fLU6w=-_Nl{(V zKnVb&AyX;a@aypxeL8gJlEBoR1JBim=7aMmqn>KtUT$xrgMyo{y!!pc-#)pi`q-*+%iB9SC0y!JyqVCz5xxl@p zZHr$LIL5`;fB~C1aY1M8RKO-pU^-z3KDXz!{!hm}%S7Y|cf>816++l_+z$Kc;73iT z`p;Y@?ETz+w~~%4Km7G;)vc=pKFA$(Mbg_p5BSz+t`T@2x6ft2lT4jyEpPvszzHtl z&g!iTvwz+#fBpu6<6OLnHID5Usf6y8gRl1GSJ(X?t`T-8*Xe3wq)9fz#Ii{z(S62W4 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_pmu.c.7F8D1B29C554C9FD.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_pmu.c.7F8D1B29C554C9FD.idx new file mode 100644 index 0000000000000000000000000000000000000000..1f4730c050a6e61cfde25fb3d7b77e57600f7281 GIT binary patch literal 18274 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_rcu.c.228F9724BB392EE3.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_rcu.c.228F9724BB392EE3.idx new file mode 100644 index 0000000000000000000000000000000000000000..6bd71e7568adc145764cc314f3525ec937a78ac2 GIT binary patch literal 32986 zcmcJ2349bq_W$%f9R|V?gg}5HTpolZlbe;_nqv|IxyU30kac!Q1{le;IS|)%7ezq1 zFS!L0IYeMN6g=?a66H`t1qq0FaHya{Kmi5+ud2Gbt0xom^Z)<;Y$K`fd-dv7)vK!a zUUg^lGt<+LPPAB3OEM>vd22kP#bOD8ztuHWzVoT@1Nw7!&&Q(sR~6T~i%Tnt$GJyW zdH><|me-cqaryCk42IFAo-u@keqt%U@)|;@uJMd=L&=|rs}`4fJynDcRWPuC+*k+7 z$8uCu7yH~bk5+n#C{$$0mEI~}QHmcPXwN=I504#3L*iixD%2CnH;Eq6e^`q4R;ELLsD0g*L zQ{76c$5)g#so--|-&tQ@RWWqQQ}Xb5Pt)3^6KXuA?vg5Bv8S?$=*rSkcUf)IN(iq+ zV;`7=bnk2L`Iw`>KCI13s`8eMhu)Hr_OC>UCBE@ZHAAFmcOX(#P4S(_qqce!oqAX& z%`PI1W?nxUh%6kNI$b&pZmbZ(LRSMQ1uMy)(X?PRVt}=xQJO9jGohIkVrFWxIDo8A zl(sHdsOge0Q_*VhM_?f|g&ckmn7<4 z_qFQ-6{sp}%q**J$0m`w3A3ob^|Cb0aPP51M8H$ysT$+08Q`fZi$H(NE6TkQUe73> zB_b^&Eyj@=9W?=dbZ2Je#W)5;qaX7NoNn}Qq08xZ6(kpArn)n8vNCg=gzQevOLe(n zcXZQoes*fAd#E$tm6@9}Al?xh6&2+`0^G?!$<5Bo%yQBR|`noSNkv;E0N%twD>a0|z9SitYqwwn-G?aXW_T9x#`fA0e!Oj=nXiNQ!-5=(w)f#h51f*YSsv&uWlX91tF;eq9%;i zB~VhDD=$EW^z7sSC{jECoRyaE90tOT{!`&YVDJJ|a3u#sGqb@k006uiWjauC6Wf>cU-_Bb>SE?(EDQXd}z*%qh%fs%zAu z)Pc$Q?gD16p_QQ~<3{ZcjWNwKLShZ105nMjV;oYLnGg0zG|)kJzB6k;EDNUQ=C}&8 z_0AGb;7T3_W2+gn4my*elQC>{mve|a)m1Pc4udI~85vGjfg8_Fwlk*y^h(qy1({IH zP99d2nN~0m>Fdxaxw%rqpJ3SxliHvY6%R#mJV=koHA9LNA0}bmP)yc}r1?>%%0Dbb~2+*gzTxbVv zop(~sQ9?}*to>lXh&>(T&y=D#zD*-Gn3lHRuSOLb7ex`p{k>w!x0r58y^*$ zB=t)GvqF_(&6NV!1*wY&O)SG8HMI>wW2_^Z ztW%0J_CXBVAZYeMtkr@AFd{Ef&TsV#(BN60@uwh>(NQsR(PS{< z%!9$0M4*=a<|>IyZx*ZuvarY+j_wy5741k$jE#rEj!QR~@bu_?WR`Apzvv`KRFWep z${UejR0upZcqIp#7)%H_E$oujmLQB3I?9Yuj3FzQ;@XU8Cmcm#Wkcs2iH?|9v``Zb zUHxVxMq8)2B0C|DIDJO6Ee|@M5Eq*i8w0ki)DU(i^`|i?lvi33{mblZY&(NDa^Zj@Np7?$|O%6wf9_X}Z z$brv#mci@`kp46D=FWMBCGaWFFce@HFelCJg7dE+ztA}pY^KSGHs=W-LC7hEim3&e zLm}=1-+4ehu|-5o1M$t#1|~y=w4&tvbO(46neJp4^|Mh;Omz*y8I5nb+R8p8s5*M)f^Cqh!q^V37ua|hlE3v(QnThm z83Nc3B~fJ<1Hz={EQldub=ZxS4C$ZSUUl9(8WC-cYROm;CN*P52Cbq!H-U z1+XNIgDPW~QnM34S?TDav$|iDkK|~Z2G2AVqEV2yeCJ#UIRObfn+?H;5%301hcJ}` zL|0fuz_?eZG>xw?iHUl(oQMXq5tf#F&?$ad5gl(fEy8H;A8*mb2ob_YTzY0iCpDWI zVdRr}z-MMNIU0@GoYU0YLE^+yOVBJ>OVL3lkJwK0`z_}5H!!U|g7w%-R=aQQ;DAkQ~teGzSuO=9@%Snaw8LMq_R+if}G+Wc!rHKo~sr8Gv0D%}F zlyqn0=N9H^Jq*NCl$$?TV$bLHc}HK~A!s?g#%U4c^_* zJt55lV_^0Kp|HPgk@huFekTX5c*3_1OcK?!=TbKej4D>EQL({Wz;qHh=RvL&-XFmupyTBrh zwd*Gv6a3`RiS&o*`1-d?!f_fmYWksn;A+871`WCWn2S(v%*@Cl(5!?HBXJ&<2UrEd zD$H0d!fMUf1cXgsFft>tj-=S6_yk8%Tp^intft@X4UL&_oBlI}B41~AiZc!Vn}?I` z#QbqcObF?@g%H)#<;D3`;h$JC|i34-N68$O^7Nol&LNEzI748zB=7J^}7AgqO8m>39a zAs8kG!deK;J2>JD^UxCyx{i7Th15ZPZf3+0Dd3Q6gr;Mz5t}2Z-SFQxY0GyqdQ_V#tetbH z8jfyB@&gS}IBPBpjTjAM`3#L%4rBcc4flby9!et}F>f-I=HCq?fud_nHV~{aGt5{( z;Jt+*`42Zk@*i?aYJS)$hriD38pS+hOTZeNwibri)YchdQ+sEKSZ~u#Ly1K5KeBtu z{pV~SbK~6scgM8F7&Kxs>^@`Ah{>>YucD%Kj%!9IeTD?>K*Sb z1#Xrw-dk1et0)IFTpwLK+r%Tj60f^CWuoH=Yia3tqc@eF;&I-R0puSXD%FgwEgNM- zAGk=mo0-}_valL-h%6p8Dl)mUGR;%tiOi}f_LN4#2t^_x)sgU;Vq|KzE7KJj+b^zP zl=gFGd2wlN3B0HH=Y(YV#(2`a<9)^6NczIAJ1spg5>k}?q9Zj*y05D25l@vjG7od@xBqZ#8I|(LXZ3VpK(qd%PnuIWJEu4258`SyE(j>6nTt zU(MLEJ2Al<&5`bWFT7Y^?R9H|7?YZErz$0Q#P7rbuciBuA%j-XoYE#*TqmGL zW)`ecE{s=Ec|}AiSWJ1fH=@i_?iu4P^P<-;5nkpguBwQDx5~YveemKY0V~0F%4^2L zw;I(E-hb43U``&@C{>;@Wu6FR&;+RRj`3B)8n;A%b&bXwQUv-u0Y*bBJwkkgF(qJ; zqaz@I@quDBUYMe?;>y|qsqmtxcS1xq{+Cm(eU*Rc(y=P=< zMTr-aM~*42809H-)l@)tyd%-Nj~HJa0b3MEo=^h=1)E8Azwy-=!Fx~1NMAX8w^3R; z5;mCVeu*Oq>efo7zEK1LvL&LrrewgF@>+O*%(OA|8(&;GZVc=QHNMfF;+pD6M|4b5 zacpsXWN}4VrLPn=kbbaTpubppWPCqIENm38a`6^n>KqX^QWrLo3L6<%*hnI5- zR7WBk)Jj7gBf+#s5>X?Kl{RurNsOZyJ~eQ|cQpMfEY7MbSBoUz=$^vdbUa zbxm1iWV9ut|Nlc%#g?pL1<6@`?V0(hiP?Sad0AO@PkD*G0&Km?j=rENE%ks=*o!O5 zNBhRqR(b8CYs-skkTuwY3=r7uSdtySfg10%!)H)nv}l#sEyewNKHyA#!03|(FkLI| zp9yT^E%@6WI}!$mt+%SGwz9^KJ_M=;Dd@8wOu}F1U>KqB-JZRyqTJW4lHPL9s8TPk zIS}=geA}njv6wrNoR(^b&!K$C-tEXHq3`}I15@ni(-t_(V2t4FEiWFACTw{r(SMT9 z@n`r_2gfF6Ysxp^#;FOjp#ic)M23&&YJ8QYk2W(Qz(PCW*FB(6o&70r`!F=B$yB2jO_~R)7Tu(p zA6I@ss#%KBB|pwWS4z5znSE+;CBABGwZzuZf*{|lA;-mTp;UyY49>HcRFrvq<#xhs zq6V~hwmP%KM?G2zUx>iMDDn2S;}FXvpR;F z)!Go4^l3_dWURN`j=!bDEt{pG?*d^L`KJeMILw}4VHWlOMh_TqO*Ld2Yf5dRKO?JI z^+&_u(mygX(sUR$=Or6w(Eo*l8)-UO##(60O%4-sTn%+#--{ejv^j7E&0>lzXj8WL zW@dyr72tC^yxVH)$TWp$eHmk@nUc1{QxWzOFC6w&c+TOFG1#d^89O$u0&FE-9~=Tc z@XY>6HhVab?Up;~VjMAe)sHKqM-8n+yfX7j)+MsUzV=bI)p(mVl+~)CPs(c{)`N2p zeIkp#3&rE&CY>PQ*iivM_&69ZXy#jS!VMpV24Js*K&*-6QR6B#A=;Y95)72sDhAol zQyJZg$KkI@S;Y8M9tH~6ErHL($>*@}WpxcWkZ$8D-())c|7vXn--$r`gnifwE$$)8Rkn2Dhmf`X}MAGrHlk@LHqe`lqtv zy>7!9VrLzHo=o;!H`;Se>NO!UT4Gwo=+StfNTJ;L8SOdlM?Bh~6MNJQgB@TKfe~)P z$(%M@jeY@*PAaT`R+*S>fNF%mwpLmS^N3wbBA~PsX3$jjE0S-DO(6L!n5{)V31$%E zb6^G}D_9#F;;6841CgouqECp;iw*rw1-$Dq=dpzx$mY`?O;n-b!1DLyRQ+-o8a`rZOixyUkUsN zFL%4qyx~9@J0IFlnVp(;ABP<98zde^eg$4Vb_+6GJ2)0>=wUuZ$zkEEw!@43$U9+_ z2F9wI+DbbRYkXy1*tqQQ`#v5m8#P0*Sn^*RG48vBFwSP#4!;VdUVPgsy>0DTC)UYQ zo!rwB8Wy%#JSjdYa&@Bg{wuv|(#LPK+ARAqZ#^f~bK!O3DM>mdgvwzvyz4RV24330ht`QdNYW2d zs3r7n+frS5g&R=LGixw|E_yR=69RhWqN?R`Ri^vQ#@ zs?D+k^S*4AUbgnA6IaU8O1TH>+hkqtd!M%5GreY48=K`-%sWw%CQ6;^#Obm$UG8KF z?bmju&iicG{s+>-9DOFJRtjqBKneeJ9D%BpLMW9W+Jfz4VWVk6H5Ez8aQyW5YN($!{p4f8IMr6n@x@QN(Gf^_I6EZ2F1t3GSJyX}}h zHp?!|drFZ`DQ)V+MY6O=ZiB}6GoANH?YjB@Ie++Wo8@iHJI5-`vBH=wlci;7%);d* zI`4|lhpKpH;b=qivQCG4ByUIwIUv zC;lc$ze#slLgPZ`>%8L2;-n7uolde@Uc|h+C26`0kInKC=AF(<(|MTV?%^I|G*j+u3GLHjn$CNoNBb6;OO?Sk%SOz5f|pJpxmP6V3X*$ot7mjx_rxV(M~jC6 z@B5hdASWHG*-lv4 zCpxcv&__|py(bjfEN@}n^|G{H?p-I&m8H3IZ%b%Y$ZdhH;|IUlGW@kYTT?_l2V z6zMy~UMFIEvm<+WPM5pt?c?Xx?hY%nSzf`smqh832z`4-mYyN&VusH9SgTu;PIP{( z%4T^T^G=qf$uj7>U6!_^dFv*u(s`%4Dqq-t_%HvqS>DCGTR3S82lIAXl1`&}>!mK! zc{^Qvv3KHv{lI$w^PUx?vqDIncw3TgOCgrf==O7T-pl2`)o%Uasiii{AcpQV>1U~(B{ZhPY@N3-^yyD3ZvFc?o8=(pZ4{(NBzK}LO_Z_RxjOIQpTeKpIMcb( zX89QN?h&Ou$RL!y39ONmtPt>f3s{F1OEjV_Su6`uhf(F| z^>$N|ZX({;j`MWhoDZK@$4;u>X0yD6dH*W?HMmYZCP~MnU}QO~bVPTVB7*d%wb zgm&eh*H4zlfnPQBEl{u9Ec-BTtyBy1`0h}j$TSh>JrSmGrm^^&}~TXA@LN4;(Q@$zVHA8Y*0IFQ2S6|<;2JG z7Oj6d2o1onKEo0y4#h^%)+mNipndM-#iD5c$) z6@wp|{B;{N8G9voT2acwMHQ1eI48H2fU-yKvPX_&6njr;^PbX!&I)jxQrezUdg^C? zz4)Ed{W~RwQGJdze2z7is(x|nC*8*#x3x#@E>(k#|1qmkx%)$p-o7^+8BkHrq8M5OipK=oF+raa z0G6q}m#J}-!;#FP;?Ncpr(=q=Aifl((6K}m;yF>u!PKp9{CoMNen{3K zxz8c_eoCQU6ski!C`zF|6QU4*iBi72d*IvCZXJtm3DO=B9|@*76c=*vu)u0gTx|lj zapE=;aF`Phn}7?Pc)Np}H#A&2LM&!j8_r1QiKQfqYl4Y9|#B7|$CChOsh;C%Sv0sL# z6}A7?-jmaBU+?`Fr1ZP;UGK`BDdpPoYcrjNp#u;F!k3S%`fyUW6lp?SQmVboEO@h7winMT#Z_;{*?kpY@_2Be3+ArT6<1x`J6F$DL3Q)_09Z~ z$&yG7k!lFQIl0d{`F;kNsHzjywsa{0$5X2MlnHoRRi9Q{Qx57jNnfA&1o^ubh8G$rh zE4ExK>icWjiFx-`^?wjk$TZSACtIE3UYK+4K~(1}Ys;^!`i^(I;oI=xAH6aX^=gKq z&QRLXfd=5VqTW{8QB?p~ZBjdo=00={_q^K9)m1Hr5*eXXKDGCg74Ba>)eTltXTsfT>EzR7GF2AY*|N zvcLq?DIs+xV3QKE$pHTL%CE}!q8;Oqs?VyS&#Jv>_h@v4CY3}+ltT9?MA2ddjpW{w z^g!=U?^dC~9M*OiYj(SYmb(OYFc+&m7aL|5G^S+4lE3<@ksj;Bj_V9>=U)duJ$&r> zBab4Pzsu_HGCS$F6!n&A(x11g&l{5-HvRZV=PuvW zd)v^5T7R0c=W(RKD!#)iURR!mbEvx{l%oSdgEvGWfg7dFd3Ijs*`ZHOL=6w?Ka91i zDUxl9aTK-w_eVW8jyaDR^ZMuM#s&4}3*F`m5mcge$vv}g{oemcq~8+BwnWm$@^dxh zo*An@oP;T2%O!@jO})PN+kzp#JSDM96i-P zJ8l*d;tF@^{$|IRoR0il=UjvzQPm@cJM`e5j0IO4-d%twLz0GM(eb#r`BeA6-M@7S zGK(dOxH~D0% z?|UpmLs-xCsOJ)CBm=+}uICmmiJD>X;8q_`IN*5>b^J3~{mkU<|E#D#o80~7R&}}I z?$fLQQjKH;sA?%Ex2NuEd-ge`Ky8=WzIqf0TME~80T)3--raLsMFda1Yb9#_imYBS zEyv#!^*7UUthcK5#&V>I2Gl%BGSKD++s}$^?tOR_lKO<&{t4AiDFCch+pjeNJJt3( z4d9!@?=S4}m;8D(s$W~-(H&oRcEaNsOZPtC87NNCX=7v#5(lxxJTZ?g&gO$=^X!z* zV!ym&SiU{$@UCv#H8Uy!eu-%Da5fyC#kUym-LG@i`y#xryUTUi{L; zaf1)KVdA*Oi?>W1bA+Hd0;~E$L0l-Xs?Qc%%of`*s&5s=ts={@UkutWvN8^d;vo~q zEo-}5#<>jLpQg5*rgmb4zNm)2sOqOZaBNU*8&r10-cj4Vqv~fnaO_jt?K1%f)OH69 zpjFq@lVRaG?d~{Jj2`0@VYzv?!nhDcD#`A0%E+ObiSeJTQ&eItzj#z z{b*g`qr{)?y1wj%yMR(87O_LVRtQ>anzoICxY0CiZwoh9f;yx3{CqmFCCXNO{ zY%p=07r+r`o4p{27fir4LA+)Heip=^O~72S#axs5Y!k(8CgZp)23?AT1l9{Aay8J+6_sBu#H=@laB{)TI zZTQ!-UVAO>^G(Pq8suILrXb-9x%(GJkU)(S2}h|+D!O5-Ewi-ck1rvGhh-0Yh~iM3 zC$^j?>TLnAUJO|;>aN?yYf&Ev#cf|kjSp@+m|cZ)#PB&H@-d^}fLAjRCM-x@Wr-%Lr|d zA{wMb256M}G)fKzm@0RlD)(i8Wpem3nVseXN|yu5-3-TRrR!p(68jHl1iwv(U%a`-oJMFi>g=eSdU_J5z#@~3`Z@fOQ)LBEC zlWa8AuTR?2_v81zx*Lfo8dy|BaVTCB+FUaN?UVN%3@#b7bsu7ULh1E{l0dgc0H!G2 zrzkNLNUMo1zW3|i`;oa7wJlN8DU1EeR(gj0QJ?i*1^-kVZN z9w?q&Q=NDS4bN(^Ynyx8)2LuHzZM|DUVp4OpK+W>_m-6;i5ro(c_!*WkL{s0`6LypRJ2568w zHkdfRkVC#Oah#Vso;Pt^ltV6>IIhYaubMb+$n9^)-I-RNP&z)LuzE~ULZ&FJ9$2{S=lO!t=7d>eTRlBORUx?vf_d2RF9bvR#WIbYBn51>y|yG&E{&GGNoQ)^;t2A)PM=c?T6s?09-8*=y! zIhM})`2}|ksg8K?G-@QHM~1$Xp}4~uyu(QL0kF&3dY82e)pzg<7wv7=_Bw;+X|L3F zFT5O~{pmk-Nl@(QYiCjOlhyW<4G$fFd1~l9RS&6yHvV+@{-w9iE$1OJMRQ8eKvaZN zlqn*=oh`O?vQ%UM3^k)ohJG6YqEOFRDx`gwA_@W6V%tHiWON(CQey_CvPJL+nIbx5 z*&^)fY!T8*Oc7ZrTZD~^DWXV(ErJEGML1#DB4iAh;*hpOday;feqxIdJu^kLI@n?x zS2wl@!8ubz*9lA!Ij?LHjtjO3w-#&>GQn&S&MT&f(nM?#F22|z=xcE6n~QogeAS7Qw$^isasb9$mn`kPBPLbu$6T17ZMjGeHA$sIr>tyqfE30+5fy z0Oan1hVD>h8yB{X>t+Iw7sUYNc7x`rpvqyc`(du92|#`p1CaXYB%Wu0_j%j8|e0G|RN;{@ON1mAhGR9vcNfD9IWy0P!;!fTR&9 z05WC>Av1(9n##gJ?-@cr2ACy?vjiIjpcRsNU;uJlnE;g0Gy&*FoB>F(f&$QNz0j#% z2&Xr!0IU|^u~7h;C6O}&kP8k5AfYq`K*mm?!%m?a4eBruxl>4BfHwv4O~FP1XoW=I z3_$YPCIC6f3_#*@3P3AIgbqi9ZuFKEfTIFDHVQy1B!XuEa^uSYB&4SR$T%ysKPz;h znP`wfVtf;TuHG1c1pO2M8I3~wMxhH$4uTAl1uy|9s$c+;7N7vgm?n0bCWg~XasXzC z@YpB-LP_3<0m%J|2|&Rq1CU$;1CYR%0Tzla7aGk%Dx`qNUQG3Krd&F>>n+0H>2#<{dFs39Q$N&dK+X1l)1CRtE1wclF z*r`DbrOV7K2WU?HJ&UXgec@F~FCi_@&sA0wCj(*!hy!gI-Jl@S_Ni zjRGK)q@Eanyg9=FBo{>ikTFr}JW=XF-){lnNeLbs1wbgtRxtp%!eIcCzM=rgm@kFR zmwM7WWB{I(;IUBvgpz~<1CUD{1|S&-1|V-W(2x>jY?pd%m+m$JD8Ir0Sa zE;|E|HzVj(4sbL`_cTa-O#sT#Fo5>%g!Wz=RB4oYG)lc`u#W+p#W6U@+ZFWU5ICmF zU8c%*6M*tO3_#w$psznbm1S~Qc%|0_piB@2V360#eb&p7^qv}k4Kh473V@7Fa?mEZ z9RrZp#~5I%4DVaFqyWg+C&Oc-ffL9$A@@09dg-81?$apuXE-J*eI_a_FjMI>(*!J4 z`Ybg8Yn480O#pe@guWjI%^pxf4=7A?UbYBm8V_rd_bD6M``IxxU>#d=+7V**e((02$ybrN$k07)9q4;X-h1mP5b?jN+;4_fc0DMA1aTj8-$ z0IHBY0|SuPco={r9!$UkN3BH^0HJ5B-OgD1&=e{NB`;(!0J(9a093hbwOqDZnS13% ztJr9@F~C);c+~`4vx?VDz|U6kX9Iv{$t^9FfdO;@#Q@~ikO4>vf&s`Cl?g!E69yo8 zCk7z55GDYWWdL#mZvxQOAp?*rc@u!{5*dKp(VGBtxk!PR=KcMhqD8O5Wf-K5Ad5tkT2Q>A zpbd`!7F*FaLV@=;y?*)ibv?dA2{Gc0QcC~nu^50veavR$%K zKLCJNrQlbk5C&+Flm^L04|U-9TnheN3Sof#a_9XSI41|6GjUv$TU<18G|It^CXO4j?S|ZjX=S1kJkfM{H$`bNMPc=r zsRYk7am-g*%r|i?Rf3nAI94ewR+%`~D#2?_92=Du8x4-$2iD#H?Y*$gLAMXe>Os?6 z7(XfMPo}pp7FyMX##K ziY>QoKp{yXN&$f6fEa){?F>MCbOszyQP>U;uLXGXOb-8GxL^3_uQD z3S0>3x<0Ipd>hS<6EemWhvFbe^D;$}kfH$H4e)&x{+fYOGGFR&KBmvFx6vg8N-R0@03^U<0OIR20P)iqK=Z;i1Qa7aHp4+YXa*oYB?AzT zkpl2FYpDkn;Qzq48o%68C+ai~F8f~palbV`W;lH8Q(RV3S}0g7zX=}**M+41_kSgP zCY%r&gp%5x1CI!YzeYw3c(vaVxl$+$ye)tLL8QR(wcI-H z1#Ug}BDaCt$Zg{O%WdYia9g=;+)Lcc+;(mU_X_ta_Zs&)x08E=dy{*Mdz*WQ+r{nX z_HcW-ecZd;e(pW)eeM8vkUPX3=04y)OT6@YDF|{0x33KZ~Eu&*A6t^Z5Dv z0{&TkA-{-U%rD`W^2_+;{B!&YekH$(ujA|a=lRwA8h$Omj(>q)&%elT;5YJ{`2X^o z`7Qi5{w4lpemlQ|e}#XQe~o{g-^sthzsbMFzsY`Bs?Wd7N!VOg{OsQglWQbVTLeMm?g{><_L3zdBS{Qf$*%bP*@}^7M2K0g=NBW z;W=T2uu@nh)Cu*%^TKLjjj&c&C%ho67hV)L2pfe>!heO$!WLnxuuXVLcv;vk>=0fN zUKL&wUKe%>ZwPM+ZwYS;?+Cku-NGJWudq*eSJ*GSC%i8l5Dp55gu}2_3C5ftEpucahAqNT^D^Qx0fyvoQ1cmqo_=FB0>~ENY zueS7H|KNbZ{SD6eTmT#FAL37oOyvnufMiIZzyIKZtcB@it6Rq>)Y-R>pU>bBKc;Kq zegoAK(7H3xo&vuKh1~or3U?;UNXUL1Ce_d_sahFI%6Gp+SM4 zDFoCB`S0=u1pDb#^6m4-P~XqB1BZqB2Kw{~4)F6G{F&*&fq^~)!#-C6d@!_q!4#C; z&AIZ3I*rX{{Z~uD{(Xk(wKZD$Qze7!6EO7ik^xoQrywdg)bGFBBP^sh>w0~j{Ocs5 zoH&0d2qT;fbvAWua6Ur}5jGq2Lg_Qk7n)7%xyk%*0ia!>@#EAv~$+ygMV;v*x*oSm?6*UT)Y{+Sg-YVm73 zQ>jI8uy?3$Xjq8Ul7lU~dbaB9Y*;Z$D7DlJN(EbW^y<)z6~*=o%@!cDfo;Fo@MiwN zvoAKhr>%YV#fEQT%d;<(Z~bfMW^J7%BO!+Y=aA4azX6{#JClI*De(YD6eGLizT zRS;!Up8uwe^89ZZu{>_hq?T^Z9ox2b_8rv6IViNhf3P#`p@D(Ep+UjUenEr!2J{OH z_IK_ZHpmYKdWdro4(j60MyC2HXsExleh?yaB6PU31UAWk3al-#B4Jb4|00c={x1o$ zp1NRdQjFT4WJgB<;s2{3pX%{qnkD&f5!<5FAw{Y4uSNNk;h8~8{yS?H<-bLEQQCE3 z>tILoBV89dd35oCO;TbXI(c_ypKF^ROt7T^wPXNnfCPdM41~RofbhWvH0;4%XM&wP z48hK3$|!xuB9xw*kiJnFn7&Jq53og%4=vj^Yvt3TBaHkyoVskX4EDeY+sw=m%r3?}VJVAzJt4~&N0hk<5Sd$sTEL%PMIO*@0M0en2# zb`n9Mt4v*nel9O|q^V%S1#9qL6*LH3phm$8{~|Ap3Nr(Ses14(%$VX7EKs@*8$hsv7&=@Ot4e4cIFi9 z?A5MCC&QZYkx7wnhDGC}jZkefSA((@GxIhmBYXN;v|X2!%%JLul<>{QgjoloWn)0p zug5Ld6HI-}iEjm>J}2r6L<3GV5Qv7HXebbkIMIj^U7B_3Y?PLKvW1PZ0&Etwi?{yG zXl~=9DG!9v*n}|KntU_b$@s`Mnz!^O1?u9he_}9MkqOM#X8y#bk2AXI(w!E@8QX?! zK6BPQy~E)9OxJwogi-hjtB*xyne?fdkMND=WQ-L-{*&Ac3DHPx_EoUL6eUB2eHCO_ zVW|xJD#+9oi^IO!$}l~{4Ets)!L$qs_RUtJo{$auW-IZnAi=)bO4Ju5*f(2=27(0p zW-HN9kYL|zB^n75>>HIJ!=DM*ezDpGs4(Nn)G!U$ezTQey(t;fqyQVN7YqsZ z&9tG<6`l$ILU}T27;pPU;EgZz`0g91Ux*Cy4du@#O#fdQYRs>3<)$r~HRabB6llrs zD=1RHEvIBdK}pDMr7fr*+zZ5rF#lQLQl~Q>pukelLzb1#NdYU|4y#X|BakS8@O4a z)%&+h^((^;T{^Rs-S}yN+zddS`sl^|q%K}{yxF2ah5xlax+q%@{+FnJj$;KSKW>of z{acYg6Xqp=&IVfl9VRqjaNuy~z6Ev&92;qVpHxq0SeZX%I<@fprPgO%O~x*n7PO89 zsnz~W?Gq_}QutpjMUEdfz0WGhMyD}dVfxuj5{a>Z>yPQqeS!x11`MK;M_>z_w6^Lt zcSXI25B3cS(bt1M{%*!>Z_(aaAO7Tgu74aD782^*+n;9B+rMv+eytP`>MUf)iwQFl z=KKGk|LpHS$eFBWBxg}vTr2oAmTcCg{~tB5F;_qZ{*(Qz{5I16Ui@KX+Y5B==+$0a z^ZEt^`Zumwv!+Mmnq5NtgF|Zi_3mA>+2FyRzM;M~+Xm@tPEFt7fi(yF`V9!F*(#u) zuc!ae06+hltvu`M&*-&=`FOVMShMywwZ5rclQJy>f(QQT8|+`RBl(>fmf4V+0fYQ% z_Ulu(jvuJ#8{{|rrT_mqdkyjn4C~`>W(1kQ4Y{lB*1)eN`}v2Gji#U#9OfnOnNOOG znsDyp?-%GBOs@0wTTU*{Mj~J7Z7xIm_y_3wUx2UvLx8c*>DOk?(tnkO4@0tA=sO+V zWto!x+g_+Ybw_Y!>qtSQn{)555VAb;!qQm-UJYUXgZ%W1Sd!l$eRHhW(79dfznt}- zgKWn9zmBp0H#NG81_u4ja&%LODZ5^ zeTaVEFmSMg-)zZ%@iBT=B4GdC1%Ubw_oOm5ejJ9h{)24+;)8qF`5f&%U@$d87g1t? zqekrsX#3N#P1*bgkY9Rj5m+X<8;haLF@4|=sE_W}VVwGOPl!<8e*QkXM+jwL2$PTe z01E9uzA^p&#M{AWD|&v@eF(@Qh^Q9C+f+yY>A8Sb($NB1NgsN~xfKclUr0f0j?DrN zZUCeNWW>U+qe8hjYFiriL#mDGPizR4H~m2LJ5qz(81xy=97Lp{K>>aA|Bz+MnHPqiuKD%``=ZTu%$kVYKiqZZ59WM`b3ll*cZ<$&bhRn8KHGvr!v+Hx8ZgjbUxb}?zrx`Idsoua zl0GN56pvmnS*3TfB;_l+6m^$UjHOapN!p}rMkf_HU(q^k?>69Gg9@^pG#}~Si13%M zEVXD$EtRFR6)HSdj-azd(9R*W;dc8q$STbzMiUh^Q7M|Q7%3S2iP=osS|zmQ&<)s5 z+Qe< zHrH~Svn|?eOL3{}SC&JFm2<|KMqX>TWa)z8T=1c$J=DrdWvkjVi$eUhn2Y~gUEi@{@9_0LEo0JO52ERj-uu$x>+Ly*&eI}N6wVo zA0C=o!cJPqYZY$M!Y$>bvfq@vY1ZnGu0i7*T1+TeR9deK<|_}7`~a0=DcBsZ<1m!G z=e8{E7h_+_D%~ZyKTy;MN^xD1q#(IaFZF3sQup~^o*n+%FQu*0LV~ z?dA|YI6ZGp<}cy8>{?=X9a7gJ`+UVnL3XUnTHs~zjivLP+c{XJ<3x5ZQuiWP$XARML{k(d+p(K<$PVW^y6iJzHdRqm6>Gj? zq#(Q6EJC}L!%h`>Ri~U)8bjbd-o5Me0$Qf<_9Wf3YbzyTak_w+a_?w3DXtAv4aRjkD-8%eBZQ zbI9Zk`QxnA(MK2D#syz%+H07Cb;{f_1;fs5+Z1`Lqmxy7Pcnb2sBaa$PDTouZ#L_6 z!@l;u(!D1-*-1;d(XAG3D-76*=(%b1=kxVaSGV1&8*K?A>nT#7q9QB>n@yt7G167r zX0(WMNeZlJm2Q#j#~^hK(wpB%L3F;E{n|EretuYfmM;5}$Zl8E?XadADafuhyDGQd z_e+!$6DnDy14K3rscFb5UoldU9mv|$8hpO^zLNdEwv*QITFtd+b1fxcSvzPhYbU~1 zM~%9jQPoab#RX$5S`4gKUs;}*)i1QXUX7N+_g1$`GfC!W74@v5*WXAX^CMOGM3HvyI8-mO6Q2|MWkMYb-+kLcCx$(Ws-*d zVBb<(eCC)gd!NWIKa`RQB7l_f5fSN=o>a`<6OZDU0Nujnr&dFN_p&@68H2bVn6y z?)-|n=qw^S3#qeU9X3)BO*0F6_s#Sjmy0CpvS*2GE>d%$0gM!6$C(Wv_j;7Jyv3t> zR%scLO+;!UEZRm2vfgaPiW_h&amg~bhE^$oh@Mx}^RN;cDTsDuYj#ND-nNZ=HtC`- zi0CUteFf9SNI`UoS=xW5|J*J$bV4JmbdbpIN9ul5E?+THkR8l=R!vgJIn=n+$WEHZ z8+MaL+hlQs9yo6{Y~mD`GVb-RH!3PE(gpLC%SgTqt!1QO^P;{q!B+72;j5ypGm{$I zNjtg8NfvDqEEV<3Jupo^D=}qTv!S=Yw@T+pF>{cbgG%Z<7D>V6Kdi5Qy5Uqmc|fTj z?4(`X<~>cjr|J7}4eNe$s{F9;*FO$;SNy>$O(84gM5IoH)z3)5<}S0DHo2Tk>M(ia zk5=gv$^Q~kFF{8cDaejNtN@LUoNE_ey^e>S6u}GdSkoTENUiq86|+)rD^5)2 zT22bE2B~YH0gM!k`m&K)*Y3NrcgG#mMb{D0^+;V0^U6p;bdtFbKPw*j=cw3AKUt+X zBAbBJ1n5^I1=)Rw*}dRWx~SKJLT&7%NM6>bn)VdhwR*9uW?6kk&#!RO?^j(gfeT*I zv@2Q#scdDOVvc~YhH;~YyzAKBD%~TwUsBXd&{9SUxi2zXYD<-qucV5-I$5RtM0O`q zcfv$5QjiT~6UB4#4{x&0wD7i*X7K!PXxa_f*D6%lYvz9?CHRXsBYy5|l{OKZd5W3` z`?`^W%}(qfPa}$8!5;}o9*-=`|el2Wo`Z4DqSYBcaeG*>1}GHAp18vvNluh^z3%^Y~P|%lwQ_+ z---6hgI55 zWYZNj9nNb;3bOs!tlB>CNXw-ax9Ot$i0Cn-9)m-Tk%DL+X0=CV>Y_Ry@^sPZWKxYs z>Uh|yj1)xonG>*c>$_eXW|dNj=pLl*L1pt5BLz`E zHmN4R8CHMjhOdWPrK?0V0;v%&u8b5!r^(Fh-|1&E&MrTp%U&R|caVAqWQ`PL1K1d> z5PmM})|0A#6_pan7+i|vrKpVlXiHKMokYjrku#NtHGErqq*a&f~pjLX0~dx^<7(^nd1GARoX*rPDbivXeuKGoBdgx z$~{=;+A#XCZZnzN{Ge$cG<&IR?b3Hln{C~fJa|!lIjH&PJI*2gf+>$hL$bgaDaRJc_dM@DrlQe$CO87W9^F=y4V zmSNUJoS*u9~sH=qrS6lAxWvR~G1 z|D`gs#Z0T@1&h!Vq&|V?03!v_1Bg8c{61{U*njTy*F|R%v(FXvIXt-U%|R1S1966{hT8;Y)s>*?i9&{YHS;9gWn{Fu9BrWDl9Lv8P+d zENkaI*D8%BvR4%K3RKNVK{nB>+K%8RZ?YW6&a+A>qzosJdIHYvMhdbm*!oueRg<|Z z0_W+X3yA0`MLh*eype)v8`ixKHsx08(IkGpRk}z-?;-Ub3>qT^(J`_)y^eG^QnEsg z1y<=Jk$tDA@8H~Gq#&DM*6h1#emzeO{9cz$BeJ`Yx(gNqBL&&vY%zE;=v`R+!|@C3 zq^*21ywtRpS}Cb)U5DG|WC+TtKlq#O>AKC?#Ab$~X27I1Qn1;KRcrL-LXR9D$T3!_ z6^w&tNPUL%1~5{P{GJVirUNGA6ua*dQ&dVKYOWhb8wdjHQNJ827VsnHf~w1q4icg>cnSft9Weq|GMn>UEf z7^KEPuNo=XoNM+}^PFUl)RH$B6_qxV2Dqijw_qL^DacNs4X`!l&r%(`Pl~llZ;91> zMa_r)H&T$?Xj`%X>hnsZSNHVeyE9zlrEF%TkRI{=6%`E0_om6JARmvuIZzJ_K ztnfw(vV&L)w0Zp1q74x(7TZaCcneIhXcJ(IYfwJVY=N$sy?P$(9=gOTT_HA4DC!C5 z03!vP;WF!iXRX!+yqH^Pg`KpH8;!CQiL&TN%&#m*(a%T86Ye?J<_D+#C#_II-z5d1Q<9e;PleY7+=4)C$ zl(pWM_sp^m$XPqHafTXam5vdcnMloqqoa|6%?akw@we-d+qZvvQI}mqWH%sn13Whv zDaiiG&iB9H_0LREp&WH9lQjqs`mCENR%tAey{@R&Vf-5@$R?YzGkv^e-{xNX?4%XEUMnryN=rqlY|T<> zX1#K1q+9#+i$7?UR*X?D^Eo_)5aWo!CXfJ>pLX8V_F(6g~Mu0pz1+CXf^BQ+i_LyQz`PBx$K zq<}rX-3~lTx09A}qlp$R5$+e9_0tA>#;Le`XIkB}Pmk$Wr^INkqUJ(DjTDSFWCeY2 z+sslyInb$|^l4xqnpDk8ofyQZTv3tkkA=e{ap5 z_p>g0n8@x%>TcMojTB@;Skjgsg2NC-7P3*4ZxfdUvzG#(JlX4~_H5nFQBZbVznIpB=Ymd-+ zp{*}jrIkc>BT_fQq%u;F4Pv8ehUEbE-oH;5y-7q5DCz+iRYnS;^UO(IWnOHB4)w-d zwn`_7>^Y>KgTZQ~AUl8!m3hOy84?v_y<(MOi0E{rPKQ=CQV^YOHdWB`}5s046R_KAUnsDom6_b*PbCI?^>k?M0T5^ zZi8jeNI`b7DSLlW=^iW6f4Xm#Vu@_LqQ-+=BL&&^Y|gIz>Nn>?8O6!T}TBNRp zmB>gzbR_GuyYE|`e_XxFWBs<5jKlqkx*ry8BL&feW(i96+H&OGjM%4EX$~em z3ZgM)_xAX!ZG%&RcCYl^h?F*2QInyxMhdd~&C)Ko_Hy#&U#jY|ONrghNZkyB+(<$8 zjrk+t{zkr~D>rf1Ww#UAxk#N0L%~QvwkNCE+cvjS_tb8#i%uX#Sd7%gFma6(M7Np6 zbv?Se$=&MswN=_d%-%ri4LG|RDaiV;liRb_*RtI@7k+Ig#qp_oUenIQJ)TRUm*&#- z?bx!tYc|Z#ZDtUgsYp$Q=Nuyin^Vl+Cr%z~yzA}R-``lJ*069sN9uDp<{K%9{=km; zo2E?N5nNw=TU3hGv)6CCkbDxX8Yzh8>a~S6RvJ`$X}P0a-&&;)B>&xtx*LY9k%DBr z*##YkM8@@u*rdxoC9)qB^#d%kMhdd4%(kji<4N2p>rq|y1d+`^Y6dE=KfRC?WJj9^ zt%2PZS1+^ar*~Fq9+3@4YB&rTBL!Jc)?Kerg!lc{c^~YgXx^@CErr*@rLUtr8nLxg z_vq*wa=$J26p-}?<6Xo{z;FT3FDR*BfUK|n)E$6Qzps9~c+TJYGm)+{U&iz0@=RxE z_w(<6axZ~^8HR`HMKk_dhxA$>u=6K^&sOnl)znCK-!!G+l9hzXM>rpqV>-;;0Blhg z14=msZIZV~ydyd>DvsgSS}dsa`09)28tCj%@gB7_vsSZZyu9;S4@?*h@6jrnO!zlN z%0&kd=7Nkb$Yu$c7X!2abzY!K%xwXzr4yG0W{r6%fDUy|pcHdU0ET)aP=@&-07Kmm zD08P_^V6YrT?<1#k5&9wb!7Q4p9IjMt_YNBbms@J-MNIxQ*oYZ>M&Oautwb*sI}@@HP8Mf z&-wzGaT*?{Ik0@@-%O~ww_>egz~rbnN3Fn^oBf7|m3nG0Ng7V#Wn+F4phJBls1kFF z049mJL@;ZeE2R|Ak7{8BX1R=)^ZKNoTv>cxq&HzUYj`uy=eO=o=c<=GO_+@u-l&-) zCwFCqqdkjGEe_TqRUFAn-TvL`vo|lzBFsY-KUB?jo1Jy{v_qj&gqbGeX|maG8)vWi zDy-TUCBWLx_-C_izIg65AUM&D;0sl}kdJBR(g7Md#GQlHvq#pwp_BXnMRYF9_%fe| z%(nwZ2X*P7N~QY6w&^+HI?<_z>y>1-B3-<1Z^?W?@VzSD%V$nNo4xKXDUC`({s&}y zKsI}gIfhtt#&8N@*7UtE%HkMhscAkApUfv0q5*WgU${O@6h)o`p0}$fT4aWlwlq!z^p^yox*fl zR9v~LjdYJ#tBR`@W%$4!$~Jz8dzS%?EDdLA=90)fSb(8kD^!U&tN=ruR48+<uQA%YcBQ@qokbd6q?rSo z`L+N<{aL6r=E(vK^O*w8s2nz}iCM8$$~q1w8+4BkJ6X=+wrw%|Xw+ zWI%&@#!wYU_mn^IuiMLm-^2n1FHp=}^nv?aaeb~dV8)sM3>Y~|d}kQL++|=EQZE@w zG5;7~s9OwWm_rO$qfRiCVeT)WL%m)o!~9)9=P7Y^p@hWzTY#ZHEtF#3EWm6ho-9nK zlU6DH?3fD`f!VL({d^^u^YxOe)4>u3)ng?nZIvq7(=KE*7u6?6-P-QT3R>f!4QjFPnXhF)5p<@ZNP{RxP{5g|- z<rXn3>nXm&5DPtZd;~Cu{(sBqTwlAhpmv%@zgPhX2e!TV5lb$Wx~HXUwva< zPF2Wfi;TDMt)a~6(BFS7=Ufe#IWnHZx2DdSn{soTcOguahNJkLizx3BIH%daCFFICLLhTin6k=tt2m^H8ttU+#T1Yj+4TPpzTklQ)|SdZM+3&0KJegl1HWAqks zza;>7k^5Z%xQE>D3BY~iexCya9v#Df{^0EfwYwtYE4<#!(+Zdr;$_A1oj9f9i>Lig zx&w1W#YgyrV;)z)TqNFBOo#bb0YiPNC^hBzt|mW3)T#;0G7T@|lXP^+!4>5$`v@~Z z#uIqYyZq2>a*gp%2$QVhWYyfgm~R%0FzS*;^O>=9#gb-?Ti1qsHp_T3pN`B;3v{S= z7S*|0we{Yq@6QsQ=?b2%m@|fXY=JfErA2j^gBCEeh;tStr0Nr#@T?d%kD!#2& zVhnTC0){$gQ7W%j*_(Gy`P2nwm5NuX=KR}pec;V`+d}FAldR!nel%pRT)-p}H!hZs zThff4Bl?y67MRAku{mBZ_9z@x>C8fcZ&C3U-k!5gjZKx?93@PajI;QR+0&=@!T}jQ z>VvJ>8lKH(pSsg=q(l9V4S+c$<3s!bC2ZxuLk()$Hw5OrjNkLo#(c_vIZyn_SeegH z@R_pfL<^#GUB=hBHRfCfI@F7xfH#Wk z8v)2yT=NCst>XGt0NyFC?*!nz;`&|yJ}9mq1mL6M`cVKzBiGT$wqRqB>lgtTi(JPF zz&PYOP5{Ou*YN@{0l7{PfQiU;q5w=nu9E~{GIE_P08^3cQ~?M_uHgbO4Y^JefC%Io zApnucHIf6&a}Wjs^%kTZ!W;!*YE%C}$}rDB_<@~z15!rs!(>ajWQ(imkpkzJ@>?xm zvl9*T6$Go)MUd)t>sa5V^x%u8Q*RF>i`McBjh?n=jg{jvJ_@1W2L z8cyJ2^w0T`w>u91rwK5g*wZ}AzF7DoqD7ao-vizZH#2eOkqCH>;e|+x!yFKypw#b> zGR)%;bf}jhWoCRo^j%*1iXVV^B;!YXom}&3vt#*H<$nZbi-x!G5;LDfU@j4VL~2Z` zkuE2WT|TBMFvIb1^Pn}*tHUGKY-ipxo*E;FwK8<5)ue#F&*o5=kp`kqNJZ&k>KdZ!JAu%JWzUTF!K$15~7b#$f7^i>0{J=@mM3v{Ao9L@7#&ac3%A&#%C zrp(tBnDxZZl`+NQC_H8_)?04-zV+0;yt^pgaQg`$rMxpoS0fNw8>o$ll-U zZvGiIl;sLuE1I z=GqJGO+9+4&XON$&-aNe)){o7H5|>S7W482hI;l=o!1Q(IWMenp6EL;01|916 zOPTbrXdgT5c_VoG`xF*UUesSgyQg#;xw4@mj{OW%K+!u)>;eR-LK&J20^-j^(zP4>K^- zZ<*#lsQ9U_L!PA&om>^?@>MGB<&eK8hmGz5Itw(sfG_$DN>?72e(x$_#;SNMKj$Yo zbPcL9<2GSh;a28lasMnOCR<~3u$-O2birg-pbdg)ClkP|J3#C z1x%8PlekXfZF?__4!c8`bQP!bGj<`*cj|}wV|_s$m6(8ib{=Vf^e_q>?eSyhVaW-$wDItH4tA@P@GeN@>c*{6#f0FMT zKASLOH9VHjnc*Hc1|NHRk}%zHH#2|cG7c9n)J>fBj6S{BS}Lry)MUSIrDV6+w8XbU zKPb?06))$NyIJntqZvy*2{TW_^LT+0g1t`N@mkvt9y(Sjc$ILuuoJoM6fOpKA-7!u zup7DU7Jxm-ZI1x#MQ(cqAO*Rl2tX=wOBH~9$Zekhq@h}Ad==B{eH7I?Dgf!IR=NNj zL$!_xKnALnApn`ER;BmJAeZ2P__VVUApR5LkFkciw81t1BzB?&+>a!VF~JIMVGAIwdYCl@<$ZWbwdii}fuZ9ldscdE>U z^@JHC<1w6JK^9P38dyQwVOY@vT_(P76Aa8&6>sG$F?+U!_NGA=RL5t3qo%Iq4iTLv zGJe8O90}VhzdZTlHNxCb@eRIzW|kXXZ%EuN!tB=YZaun){;^;UC;<)7piFM*oYXN< zPeXtiFXQq2y!I+h>bc@lgHT{b%Xl)9NyhydAA-B-j7e^DnSE zMa5Hi>0^}WMia7|jR5ATjF0lx+hBbe>F+j`FcB(_;JfT4HN$IQOpU)m=Y)z+@ST|j zt^h-WRcIL#e(72KOsoAPf$4}ln&%G|zXIcwhOJNy7O(;uG)RRqhqf>89^N(KA7FN< zcn2T#EOG^`(SQ}I^TOV1bJV~&qd?~y{EhikGwH9W2VF}g5`2P+C-C1)CU%saE3WT3 z8Z=^M9Lwj)jM=lwPcJ*3FwbQCjQ>jL*(vm|xwWDQ^G?O@_~UT#f3jRQ^t(-%uDGjt zGIV_q>vXqBtuc^GAKb?rZ?&7&acp?GAHmPb_#Dsu%EpvJZsli>!MaAYf}@4U=Xk{> zUU+;?P+SrOAW?Bi6o4efB}o916_;cIc%ZmGQ0mi$l=Q)sr?}>EV9Uan!+KtbAw?a4 z2bkLtiw+{)L?VNj2|T~r^!Fbdj|JwfjNkG>$D)LQp^-sU>0P5d$2CnR5S>{Xp2asx z&)l9>?u|V#4s<>u{1KI4`CKe)Uv1io?1 zUC*?Le&3Fs3`~-YllTHO`b&o{fA0Kq3NXuLyo?X7!)=~4y549QVdiUiK3~pu?{4^L zzgGrf9;x^dpQ?){`F&p_;EQmumMr6B-qI{`3XZolT8h?2@8EdLSMip*>?V_iPJs~` zE=5HLZu+k6x>4E0{9ruTd=h%DIbEs#d)H~QZY#b0G-&7+wUy?D@8#`kHXWEa8OQObUAdK4MncV{Gk}TJ za4heTk(V6~%(Ka5=RLjr%Uob?$@muU z&$FTwQD2l{0bj7o z(;zR(=u;_IbIH{jGA}?KxTICSq%~rDC<_4tt2FG3>OQFF+G}>J77KxyuHor?cCk<} zU}*Rk)frzp`9Y@uc@Z#wGykJpepg|+Ys0ND} z1Lih~7o&vqu~p%SrcpH(0~3Nn%vNQgW6(l0VvMT%Ff{sQr*-ca!*%&;1+NyKY4#(x z{le2m7OItnnz7tqh#>b%{PCmGZ#9A^KKgwLWWQ9yOZil0A!)$SFf?lAMn>8km+v|) z1Ev9PU_K!JIIpMYfsgWXz}IMa4L_2HeT*rzq*hhJTvPEi{vhGguEEGw3l0#*4ZE4w zaK)TFaw?R1LGZIOKFbFc+c=Wn&-JM3w<>8pV8#@^;B=0ei5vsLCFC-`v{ALj!m{o|sl6@ETRm}43~#xDXK z>tyYp(z?iMur*7@v-lFXN4_(D-J;TKfY~PFZG2HWl)mG^mvlnh+$MwxN%RG8$)#g?&2_7Ni2)>z(==oc<$(5U}g-q?`Z**fBJDVoUi68c&=hzxa*Vhl;U!V|CrzLX1glm zPA}LDM*hNonQOxETaT}OJ!?xm;Ndb3=N-)A7lENMi?pbfzwCFtVhL*kFq>q&iJw-w zZ18)Vwdi}oT$AxNKE+swBXkLkY^2ua*zI!bx@t=TTvEB2EdYBJm%RdzqPV08K&s-BDggTxm;C~8Kyf)B z00$M9g930!aXBOahZUE@0&qleIU)dQic6XR993M73P8Hzk}d!lic5w7WGXJ10&rY$ zIW7Pv6qgeMkfpd}ao}{{zVBPrSd~bIh=#-Y5i~pA&MWYXM}&DUS#1f~McyIFwG9cL={j z=DO)oe?)BehbDJ;*)pEZCr|6B>Y)v8P1_F4NIcS14wEhJQ03=U6Z@*rEZ*v@KcaF)%dTm@-YG2Zt`0 zaVrIwJ1V}z>t8J|viO}#U!(#vR>os_EANiha*UbRbviI;IaZ?%|@ogaUVD(r)N{IS0|GFS*Sj7%E&Ow0VW=Yq8Q2euK7 z$1;A*m)p}vOBIq^U8fz#LZbVO|>+ehsWoc(2$15Kxd7L*YGhg$Kl2|quhTcOooaxxV4HjMjLc!TsF1FLb8FOVc3*$ z{9{n{FGGf80Mi%uHCLxef9%>iF5pjsx4`KgFKDWrj}TMHZU|On=&jM8yFgb zO&Jz_4GfLArp$_YM36 z-}1Wc_7UcoijQ%I1$cwbM-tpkjY%w=8yFhGO{s2g(o%i0=bQrO5B!I@luXDd^kC-E zbp-zwe`{85j{PqcV|>3j4f1tx9TWffW5>`-gXR(Zii)rB!!L^u2aQM)8_r7Q^SDHG zdFzt1z^sz-Dn5w|TSM1{z(|1H~)C9#oK>!jJ`$PdqQtXoi zAX%|b7JzMv{WbyEuGnuEfE|kc4guJy*zXj8U5foK0obkB?-qc)iv3;zNKx!l1Rzzh zPZfauiv4~8IH1@c5P*Y<{XqdZq}U%4fWwOYVF5Uz*dGyqG{rtm0FEm5M+G2Vu}>F( z48=Y}05TQ(OaVBq*dG^w6N>!_0mxG9vjpIzVt-NqPAT@M1mLVj>M*wma`&}js*k2ZaD~kOU0l2EzUloAs ziv4u~xS`nJ5P+MC{Y?RQpg25Gs<0`f5B@yGAx{9FD-O>E;FaR=N&sFf4zC5^jpFb| z0P+?6UCFk&yj2|D3cx$X;hg}yR~+68zz4^Ef9ORTE0J+F1R{$;|r;7q`2{~O7 zfE&o^h5+0|PB#VM7IL~J0Jo9TZ2`E0obCv~UF39E0PZ2DdjfDDIo;;~dvy*Ri0JEb zXv?%NnmM!on_lOE3BUp73GTMFO4mcXOI`r{n2e9{tIa{RUp(3QcPqlIR`F_n+-EP{ zf%7PR*AC5vomhdPFV~?=l|sF4Z>e542l81gXh?#4tmx9XQFdY#`pNe=I!V* zKZm$?CrnG+(tJRQ$bOOQo}57NL>VV?4fgsW$c4Ugi1iD7*$^=F1w)i!?-l}vzE6lU z8-7myQR`Ox3NQ<0ypZS9X3YcVlB=o^=BkXZ@(YyZ=gYX=%B+4BbXLlEC4aEDTzd0` z-?z;PGe^a9cuTW47J&|ZOA#%>p*6FPjBj1)8ZhHEJf8n%#@<{641HS>)%m;CgS>7z z{fW*3886_a_EU$=Y3THrFehbvl9&4Ux%P!u2mgE>ti4z9d){wnm*@QYw$y6ETvzdR zez`HaWbxfqS~%YVol`14rJ6qquvaAkLtl?X%f?=e1Ppx{5@i;D(fyxu&xhRxCRM|! z+`DU4OY0BPhG zbeiMlW-am2wwvD{Iz{jt8Rzh4(qD%B`Tfo{n;$_m)EouR5pLzrDlTXF{jh#2Kc~2y z6M*xI%XtB~ptxKRfNaGjTL5wtmmC4eRa|lf;G*JkQ2;I}E|&!0vf^@C0In!5R|Mdy z;&N30t}8Cr1>lC_azg-aDlRuUu_#y9x}G4Bu85>MV9BTQ4=)V#rBuLJ`P`Wi5r|ApHhzP=K9?gcQbHN2YN6?aZQ zoOmh!p25g?HE$dLGmD!nDHi(@bf(LAIuGDs?-K)tzC(=W!`>bS41Hr5Wpct$(GmBG zzXE2miYIgTMD`XjVCb8}s1AE)7%=obVU%I72m^+`7K}3Ngc9E%*|0Ik17A`W7i#$N*^f;Kvr5CO_!tO}T)Xf6^(BNkq2Uwy z{{eyiv6q&??IL|q8D;cUC(+`RX!(|1^s={>LB{k=WmJ^CqYN1OUNXwCH9a-ymnRmdfQ}8;zE3r3|0Yl$LMsElP7J_%c9nAL+u#gWJDD*vMG=~F~iofd+?D>(DSH>Cq^s#DG`7g_K r*+>{4>|^e4`a918eL*`U*e`@MYrfLq;e?ZMA)Ph(ts?3Fu)qHU1f(0D literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_rtc.h.A18544EABA387F40.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_rtc.h.A18544EABA387F40.idx new file mode 100644 index 0000000000000000000000000000000000000000..475b9da482f72ea8c3827bef849e34c2c1393da1 GIT binary patch literal 3210 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 HF!=Z%6;^Cy literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_timer.h.0295D8FCD03CD7D6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_timer.h.0295D8FCD03CD7D6.idx new file mode 100644 index 0000000000000000000000000000000000000000..d989c0460a068eb44461f5674ac6e3cdb3098ece GIT binary patch literal 27238 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_usart.c.E3B04A639D02B8B1.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_usart.c.E3B04A639D02B8B1.idx new file mode 100644 index 0000000000000000000000000000000000000000..4ae30657b638545d2b1649a09b10a36256a10265 GIT binary patch literal 31992 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_usart.h.0EEB29A2569AC05B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_usart.h.0EEB29A2569AC05B.idx new file mode 100644 index 0000000000000000000000000000000000000000..30850622780b2bf3819593b192806295ba6a5851 GIT binary patch literal 20382 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 F{U2E;;wJzA literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_wwdgt.h.0FBAD93D1D95DB21.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/gd32c10x_wwdgt.h.0FBAD93D1D95DB21.idx new file mode 100644 index 0000000000000000000000000000000000000000..812d89188a309968577304db679fca2973d6c770 GIT binary patch literal 1846 zcmb`GPiz}S6voGKOa{ksNZORTDQF=ErHSi}ZQ=-{CXV86ls3?`xT#X9nDOq|Ub0@B z*|nXhR0WAcktjtKr9uL!EfS~##0km)QlM}EAw~RAgvtRB5Rf?a5Sk)Xn4R6(P*f@o zSZitLx8Hm7-ZyXdOh{6+1%NSSVy=u$)C>SvPydEV)KgyiV*Pr<2V<$4s++N7&J^TI zO*b*g)sa@ihqhe*>!FAcJ{VsMYN)zWX)u~#G!dt%sstM{(lD{o(C43fL~-So+O_~mL&XP8WY!EIr^4y&qv>l%9mpjt&k7h3ZC+@gSzN0Mv`tJ%t!fGejl@Ew zAnenN|`e=BmWmx8L{lqia0DRHlXi6P4Qyf|8|W{`=*$qGFb5s|W3 zMe?j6j;lqK!F5%};&>(zABzplf=>W1{m#Qc1ai2o|R>QL80PkY3T5d3uDuqoWgPW#xHUZB?i zksHg|T@XOMqAGwjn6ppKUD%hUR#oUQIZ(l>uA0umJ~3xepaYv@bM|*o#9ZtSXU+*T z=F9n?=@sqyZC+ZMJg_bR*0C!KKybHjcLxYHH??*`Pte!=(2H*`Tza!B0J^wfhi?ZJ zc)hnU!RF4r`@@_7PGkX`AXIWlbA6#%#L4AZ{pE-Qnd2?kD% z9X`5vdNBY(TrlIC>9z!IOhAr}u6&SK_#yx{azVB=OSkZPZ@#I87I|Rh(X)57-2Zz3 zY~X@P-y|!tgJl2&7mVp90Hj1|=aGlInmqpC2prkusKMtKZ~Nubds2|%6io3t!Lc7& z5xB7Er??;XcW`x2y|4d?bKhHd7!JEhxR;)g?V%&*4pPjVbMSNB;kIX9|8O%+vJGx) z=efC^RLyL3I5&}EW}bsrzL|UJ{QPS}G)WxBxjSJ0R8o$tew6YAf?1IDbN@ccCO2J~ z*f2uX5|rF6A9y3Y{hh&!8H#&hZyT?q?QVJX&!^sfn&LD}yIp>~{_%USM!!2w@gN-J zLjg9fzWV-?U*C6v;!!y2s)LU`fArZA@eIXDm~_?c>Gyv9@r9iW6lY+@t)yxBZ2INP zOXn$$z=-QN9}wC+8w{sH-WJ7d92}f$`OJT!z4u$1WC#xNfdJi=E4L5yt^P#uR=Bm3 zcgaVGCSfDv@bu+9eUG58{-Ej}*y9?zJb3u6OG~G&QXGRZw;h5tWCa>THrVh4^Iv-K Og;$hwo_64N2f$x18~20& literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/generate.h.E9B5F2A10C2E7224.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/generate.h.E9B5F2A10C2E7224.idx new file mode 100644 index 0000000000000000000000000000000000000000..9b1fdb5e0df1292df38b2014f1788b88e3df4af7 GIT binary patch literal 1252 zcmWIYbaT7I!oc91;#rZKT9OE4GKc_iaY<2T7bB1X0vamShE{I*MdgV_DV`;%MTsT( zMG9$|Ma3nxItnV)Mi_EAiBKtHEBDkqsD|{^yjo2L4XozqD4+|2jL=a)(XGi~lbDm9 zUzAyrk!#10Y*ogPmYI`krLV8=Y^5JsoLW?@pPZDWuUD2_ke#ldSX7dkmY7^ptZ!s! zY?*A5Y^I-_pIZRbQBH21RMkaa&`k8sjIi)G7`Z<|N$rTm)@$qoW z^np$Xc_LLWgT_`S=jWwmrZd3o14cuNl@&u-er5_oab<3jA}}&+G6T;}TF({2!@$nL zz$(fh$^j-AIGGq3I9V8(Ss98_(~2K3F)(l(n0#XfPdEdk2&fkruy~1EsE^3+GWv%_5XcI>AqW`j3z9%ROkP?r>iv4 zgfITBJ20OyN*_(Q`r?+%6wy8-G-1gl@nI1^-{`mbFA^A3QVdd( zu%Pk?WDxauvNsvckUy&y%d9+lzZXq-%lZ{;uTP6kKokD-Al~HJL8)nI!qR<;&1=4$ zn};U6GJXCY-xU2tXu_9oOskl^-f$V3uy}N$o$FiO9caRz^XeuQb3Z{BPFd`zkQu_Y z3r+QZ`3*NWnF;J=RI&BrVQ4%XoeJ}<|KlY6c;5I Yi-Q=fjW-sWn@{`K!N|tI1`>b(0HmynH~;_u literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/generate_canonical.h.331BBBE2D2A0ED98.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/generate_canonical.h.331BBBE2D2A0ED98.idx new file mode 100644 index 0000000000000000000000000000000000000000..d037751a6908144bae17b8e350bd3ac8ff3b050c GIT binary patch literal 1278 zcmcgr&ubGw7@f6EnqL+C5lJHnD+Fn=?j+k#aVfbJqE%E#?V&0xliA5SxIeDbK*5V3dMY9!2woHsPtGFW_a^>-}m@nUTvXT{XPo7 zytUAAi9iy9-STk3XnRD0pymqQl7St>xmqL0Ila;(y=k@3)eTNpi7C`N6}(rOEOcj# zrP|3O>VCU71?K+lm{$J~S0;b!q>LfY^4$suM}r1+hyfv-H{cQ{j6+|k6&%ngq8^=vq+>1C}5sfV4GMW93LxYL2AiG8m@?ID}= zcY-$Y2t$IH7e3{<4+=sc{g^sX2Y?0u$Sm)F@C!B7l(w zegNvA=2S4hjf927h_!+bFS(HHkiH;yVB d?Pz2yo=C<(GGO}^2>}4{0UR5^!~n(y@E0j&eJ%h1 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/generate_n.h.6FF61CC2C0AA4587.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/generate_n.h.6FF61CC2C0AA4587.idx new file mode 100644 index 0000000000000000000000000000000000000000..96a308f10fc9dfa965154f53345fb1e44388fe55 GIT binary patch literal 1240 zcmWIYbaT7F!oc91;#rZKT9OE4GKc_iaY<3;A4VVp1T<8t4Xyl3OA1O$JWEoG5=-)n z6w)$_ic4yB6jZ8>tb#MEQWf%xGSlPpz#_(0?x}fDb?K>jwVDhX*mUbCAZgT5K+&Vg zV3U}W4m7hQBiD`rRX0OgW=^V=zP`S*m40Y(YEiL%a#E7MURiQMcDjCIQAuW6Vsc5b zzLBA^WwJ@KnSOG9ZUIn7QL$cPQ7#B4=OpH(>znBrndlklXXYj6l%}NW=VT@&S5)Z7 z$HVQ_2f7{Pi`4i$y$l*#nw+1PmYGgtOG-;Jb23XRfdP_NmReL2Uy>i6nOBmUUX+*v z^dQ2wz}Qc*vSKK%%uP}RM!(`o$<%Yz@1F87aBwoPiZO_Bfe8jqCPoGp21aI9hN9H8 z;xHx#hCk+yI>j$IvoeaXO7cqb!8ES^Zgs6=x*j{4uwH4+6_aOsc^G+Eg&2gS!AT8B zFfoZP@VK{v4^6e;JcexfrJ*8d!Y14^+u~H~q|t;geVp0X8C)ZWCcHg5B_lgDKm$#9 zQ;@==FKbp9p$UtG-YoOvoovxKvO+$eNdQE>=zsP7Rm?c|TT}1Oy$Nji!3T-b?#aj_u!tCd`wyP{!4> z<{+AI67z>OS&nlq0X;7&D{2KZ`^&;T*Gs&lZi0l_MP*>Zu!O-V1x`s7-4EVr&y#4L yvslO4@IcE~G_#9Ra}q&1i;I$rl|c+P5CH+KOnvi%4shu#V`5`xV26n^FaQ9-ACfWv literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/geometric_distribution.h.91DA632C425405E7.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/geometric_distribution.h.91DA632C425405E7.idx new file mode 100644 index 0000000000000000000000000000000000000000..856244b78b69c7a5bb478cce69a2319361787576 GIT binary patch literal 7770 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/has_unique_object_representation.h.8C81629C4A36156B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/has_unique_object_representation.h.8C81629C4A36156B.idx new file mode 100644 index 0000000000000000000000000000000000000000..33e21b5f263ba02b6eaba2c6ccb114a419017481 GIT binary patch literal 1026 zcmcgqJ!lj`7@hmS%a35r$OXgU1yd#Ln0Q39#3OhRauyb%MGzTg=VmWscK0?jbH@f1 z6~!W!*4l}sghn$-oScw{PG3zK`#GV_{({g;2fO zhah(%K$mU&b1HKZ!ZQC1KA=f z9s#Cz=D+?pwTRAEfF4c{7Y%K46MenB=-%h=6Aw$bH{IIm{S2vtx;$7e8`UN2_wz^n zFPDHGN8=;LfH*rZXuY)oElY}|SFmOKHvlq+o) yXc`2QxI0q`lH8*Q!P1npJu0LmQ#cOGn?!^%J21Bcvj@tHx8(ZMU#UzkkNyJTrZoNl literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/has_virtual_destructor.h.64567FE18BF6E3DF.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/has_virtual_destructor.h.64567FE18BF6E3DF.idx new file mode 100644 index 0000000000000000000000000000000000000000..6637394a3de6d712fab3ef538dbc15a44cb0491e GIT binary patch literal 830 zcmWIYbaOLfW?*nm@vO*AElFfyU|oM~@P6~JdA__%oLmfSl46p2V1j{@ z2^i%pjLfWaesTTh+U|3ojfn%OKvYK52uwf}FaQ-4rKT0{0Ggy%T64wZ*uGj{lUd`Pfx@CTqP{R&V9sIW0z0Fk`@uWy zc@oXhdOvn8<=z(wR4v0GBMCF)@bTj<+s?+X2N}XH3b*nq@42AD?{AI*4dLYAG=r&z z*#Q&=c>`v4QEE=2AW#j=MGP=?48=vs#mXSvtS}=O7}ya^HmUa?>z}`qsAghiX8-`Y CXZ$$; literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/hash.h.883B556D9DB05764.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/hash.h.883B556D9DB05764.idx new file mode 100644 index 0000000000000000000000000000000000000000..1645fd7f507ed27ac8f4eb2fa979822d2218bbdd GIT binary patch literal 10014 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 UY&4g^{CAg)>ev4p&3OU99~|iHod5s; literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/hypot.h.6188795359D07194.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/hypot.h.6188795359D07194.idx new file mode 100644 index 0000000000000000000000000000000000000000..ea184630df5361f1be09e894710b14d6a14bd078 GIT binary patch literal 1096 zcmWIYbaQiHVPJ4h@vO*AElC728AO1%xTGj^EfbId0%@5!saE>>`p#DRp~b01#rnxf zN&0$a$pzWz`iVs)nQ4j1CB^zihQ^l3Cdp>{$@#ejKpjQJdWl83Ae@|&n3t|^re|cL zXP}>%mz-0YlB%DRnUq{np&uWgoS&DLnNDL%auZ83^fM|8@=NqGXlzwUWkG6uNl{`Z zFicYO5|eUL<1^FfYHMb3d}2{%Nd_=NGn46Ub8%vBDqZa?D9X>xF9F%fP+Xat1WK?) zscFT6j0_BVr8QSfp6%sf?K~EB*lYxQp^PzUdEBrBxTufXXTyiksFAMivFY%JP$-=`V z#V#cS6Xs!(Wsns`@D$ku3a)!;n7nFE(o4tpkfq)rxu}>2;%`mCI`$ZE=n$T2Z@3*JQOfVTFNGhs7Y>P ZWn^YyWn%yaAPlg=7z_+-2qrUv2>?f8Gsge` literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/id.h.8E48E9BB85BAFEDB.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/id.h.8E48E9BB85BAFEDB.idx new file mode 100644 index 0000000000000000000000000000000000000000..e9243988a0bc2494365883058e0620cdb2b335ff GIT binary patch literal 884 zcmchWze@u#6vuOIuhv?eq*O$AmwQ@kpo%L^UcN1JpsP`wFUwFyOH!pk$$vYkN`@D!y&l}7_s&EM*w4p;P!R7^>82OCT zE&%kpa3-mcKwKA`DM=;)V4;|giIULVKj@GaX#8DX1?m^z5Y9AFa=qnpLywsJ>;kjE2tl^J4AwT-#GL-CUXo z{j5GbPLA&1wB4vQb~5|+Yxiz`xbkjQ?P{gEo!NqNY;q}xJT^($3`=FLp;vZueepEB XX`I+rp;#&-E2}}sbkm=7k7fD=Oj!cG literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/identity.h.3184AA958B4FFFC3.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/identity.h.3184AA958B4FFFC3.idx new file mode 100644 index 0000000000000000000000000000000000000000..72ec8ff07ff41eaf9e6c88703bdc7baf2448c76e GIT binary patch literal 1102 zcmWIYbaQiKVPJ4h@vO*AElC728AO1%xTGl4nhD4Nfwat=R4aXbeP=8E(BjmhV*TW# zBz?WIOU@}xN!8EEOiHe((2tK#&d*EBOsBCWX{C9|C7Jnoi8=b2DXDoSnI)Ba8ML;u zJVhU2FU_qhsVqp1FDXjQ1ja>XUP)?tQDP1#aEnV4^GaxLdud5#4lq#l)AEbT6N^%S z_AwM!<|cuXPf==G@iayT2EEdnD<;qO@-Xr+i86>vgQP&f;pqnp4+bwqps*H;mM}z+ zfq{L8X2hv~Olm-3873LHu-NTc&iZPeYK&Y=TpV2LFxA)7>)3hA!wS1WDe&V#~2OU4>z$d`qCu9tX8-2@4X$Y{cZMR+#!%|G;2fZlzU$!P*{mUNfIUua|O_B zkP|ApAH36^C(-<6;hyUyUQ#!Ks>PYa#bK)d#PqIJG&=DKBrG9r3KIspG$#?nDK1Jb X1}g?73MgPbrBZ&FO>3JoBMSonsXCbS literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/in_in_out_result.h.512579FCBED28C25.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/in_in_out_result.h.512579FCBED28C25.idx new file mode 100644 index 0000000000000000000000000000000000000000..122510142466a9c03eb7893ceae8e3831f74b812 GIT binary patch literal 828 zcmcgrF-rq66wb9*kXi(5p%f=^aJy(dk6J~9Lb19jg5q%G(%dzeyDLeqw%{T-xe4Mw zkZx`+f`YTFle^+5xQLSpdj5m@kw-qh_mYksuGV8SH}O5 z*QddVi%X(5@!b$%9*a?@l9W+7fMMJt>hpjYgr063PJD5ub}Ko4vS05CM!_h9^0ano zOg>-VyzLxKD7gk|#UBxX^_TbB2H2cYa>cAnrSgIGd3!Z}zprEmIF(d(PcQ0^iGOM2 zjr>^NO6Bu-i=TWAKU8!Hl>RQ^gdrUwI2J3KsNPSJO9=o*aX7p8u(mp9X0kaGq=TRW I^nm>08wmaFA^-pY literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/in_out_result.h.2E5990760C39DE2F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/in_out_result.h.2E5990760C39DE2F.idx new file mode 100644 index 0000000000000000000000000000000000000000..1f9c97902fdf7bb080f979229a426e3fee311581 GIT binary patch literal 824 zcmchWze@u#6vuPz6{HqHt(4;A;3QmXf1z~|3dQQCIEdhJm*%d)TvL)0H>*S1 zCZDcv-nI@V6s~~E)DHw;_2qqO4Xn>8oHz5+G2XR4Z!gC0cN8vxQa;A^^WOZ-FnMaE zjr3T0A;tr?!H>T#KU8)WWd9D~m^wN|a3of=P;(z!Di#35Q?H0|{(2Ri4UQhnL^5Rp I{W*T^8#%`9(f|Me literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/in_place.h.33FB8B5B562FAB34.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/in_place.h.33FB8B5B562FAB34.idx new file mode 100644 index 0000000000000000000000000000000000000000..19253acbb475385aeaef489de50c53bebe9a2ae9 GIT binary patch literal 1818 zcmcIjU1$?o6uz0JO>;X{`;(@|CT7;DM$^og{-GhnNLjH(T-1tx=$K9>budZe%(SHb zfcOLA!ulZk;Dh3#^wBpT{6i>f9+rJrQM-!@f~YT|J_!2gnVX&_tTedX22pLEZ7IT`FauPyX;WsTq|IER{{^H_^XiUwfOfxuKIF%^-rhZ>l(g} zXd}1_%gP2gLIjK z=!`Oh2_6+r?iUaKVm1;U;(Z-Hks0EKXjdJ?_tN;D8&lrXja(BDgw;Y1GnE8gW7@Uo zw=Wm#xFtXkJH#$#DkUBoyt*Sl6?ss{EdzpA@P?UTDOib@GNthJ-!)I$xMgjGwl}nU zn86YW46}I!`jy5{KI?t|kazI3g|w_FD?~{0-Ionp$&diB$LVQ7ICmm5^zU28I)J?{ zZxCS=+|kU0M*UD|2W0{me}D5Se7*fFZaXQH6=8l}EKh|dA&5fpG~$nRA#)~^ICi;K z8E`sjcx8Ak!cH3LizF&uPq1fQ#p~P9w;8>=e|4@|z9h7bgLA7wcv?-uONOTG8^$X+ zAbr1gyW!D3kRVRt%Ta}Di7$Ar}6<7{-39vm22xCUj$({g& z`FZ8=G}IIlP-*BO&?g~tx>P!M_aEgB)Z};h=kAuLqD!3faFS{$n;?wk*|^{)Pkl|k z6<9vb7U!EsYGq9!>Fdo0GuDvre@GtS0$$V!s^>cAyqUxMTlfC=`XhAiu6K(_g6Yhr lY{xWIQ??hgPuE^H*rxp14{G+K_1{AuJX3$HuBmr7kRL|l3KswX literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/includes.h.8B6877206B612D29.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/includes.h.8B6877206B612D29.idx new file mode 100644 index 0000000000000000000000000000000000000000..fb637dd61515ee89530886c5846210c60aa81a5e GIT binary patch literal 3628 zcmcgveM}Q)7=Mce>9z7H%9o@fLy6d1OTk$Xr&vl6T$mqIiPr12h0|-V-d(Yd>87|X zk=Ut3=hP_5oYSdf6F;J0*p$ra=5#tI8ly{;Z4wrvWYOtlcg3UKGyg4ba@Xhiy}#${ zp7$et(_CDf5rt5Z&FppBc|wj58ZJB>&r)R(f*_7@8MRu2+2!`|X5P*cJi}_$4vOV? z?aFL*My(Fc(S$UW^WQ05znRW&riXK)nQmp);D!?m$Tbu(PB+2Y)uiw%X7JKtv(*6h z*9lOm#Q(wm>O$x`TOC|P7Ahd^MzX zNv{{TSOy~c4K>w+8qUJn9Tt9t+dhbKUwi>B5W7s*qMi=c7JW_R%v zzar#?1;=#NFiS(yoyIaGTf+2E?s!TBixu$wE^_Q&ir4xeCR_BTR>Mk^UD_$iq;? zP+55RwZ-#~ZlCh>Vn3l66-Q#?3n_-k`U%2T=emU3DYCuc`c~CjNH!eHjLRJEt-tf< z_??M$H9s^r9vg+p1$b=i*mwz+;)W&r<4JHTW{NV6kYZ{)?_AY)wW(w(ECr>c`0qdA z6?^0G(cfn+j}qWAR2C<}?;Ack{xJJc6o_;`W%{zszH=i%Ufri#Mi1Tg;V1zASo__g zm~Wq@0Vj&G>&sZVwMS@{)|4Bh8BOLOZGmZ#q$Pc7nLF=E zj~?W+@x-G;>S$#yC~D%OeavsZQ6e0?k|M_B9dpm=nK+|k(_mv{RZs+sQuFaWU0$}-Ob6m%)${E1PtlhcmTR%xH z18}A0@yWf))ANN5QHn~Fq=i*dff7pYwvoWMW%0>Zu3YV23Yy~0XfAlQK#F^=^p_0 zMrH=P`tN;@gk6$|662*v4d*|ec3gvc0b3Dsvn&6rggyYXcA5|^IhN#>ivp(Gvb-fc wZh~3pmQpn=Dmpd>DaDEYF>tO67o>zCqzZ^J0a5ttCyil}fRG{}MhC=y0fTs}vH$=8 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inclusive_scan.h.0480AFFA9E0915C0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inclusive_scan.h.0480AFFA9E0915C0.idx new file mode 100644 index 0000000000000000000000000000000000000000..6a062cdc778ced775e2696cdb2e32fb0596271e8 GIT binary patch literal 1790 zcmcIkO=uHA6rMC`ZPIC~ZPMB_$O`FC>XI=(*1G;+Er@A_s;D3y!e+9mV>i2DcDAI% zg6KsMdh;g!iwBD*4hDm+FjY1mUgvyv5eex4(PTO|l^4>D2e1)$NXPR6(MY+UHMkLl)lQohQCO1^ zi;&f^Wpe)`fhg3vU)N-!P;D{{_Go5Kp#<*(t9t-hqAC(XXk0=k422p9r_(4hi}N$n zNT!TrWy}l|i^g~11Rg^+B6!8#1fJ1h-g?fGYV2k8W##EmBPA~ zCDRQC$(kBwMAu{$>3RDDw{#<9hcvH%K`YYGf-~1aQX9(ZPzwm48q~g zVSyh8VcZ)J@*bC7ewti(zH{E;fu2^+FwgY8H+}m{$CV2fKzwg}j7O)PrNy&jSKl}x z40H$LJQ~7Kcc{*ac1Kq%-lbKO&GNt0#L=1pW!`I7>I?sQ^T~TQ5%^%20s{WJQb4HA tih}5hMHN-H;|z+8-L~SkMP;>f1%S4i>Zz&l&XD+M#<6tL<@U6-gFmV5Ed&4n literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/incrementable_traits.h.D1DA584B5709D41A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/incrementable_traits.h.D1DA584B5709D41A.idx new file mode 100644 index 0000000000000000000000000000000000000000..59b2fa478371d7b8160e36950ce903d820bdd62e GIT binary patch literal 1444 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/initializer_list.967A8146E450D645.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/initializer_list.967A8146E450D645.idx new file mode 100644 index 0000000000000000000000000000000000000000..4cc7a6fa11f416c51fe4f759072cbba626165640 GIT binary patch literal 1974 zcmcIkZD<>H82{&Nmo~ZGlCJ5p*p7~l(yfqlU5zG90$rMPInNlotMmq?(*W@ zZL~@mx_z*U9~3`rBKY!Q17BdE?1SGXR1mky2AhZ?`lVldt3wbR^Z8%)^g==Ww1azi ze$V?ozbBc?W-=eU2}xD5i*?m1brC}P;WaHoJIa7UpRs)}9*k)X&C*J`_JV2@b)!jjf62SN@IkwKB9h2(RABz-n^!(fu3xz7V|GG$F(FRd0^KW@ zM{DO!&s_5o54dLnGy80T?y+mnoex|%`wdIn&|S(%kJ-ZM?tir>y!^-7buaNl{%l}& z$QGEtG4kl018TEF_8o7n;7qYp;MZ9#gw9)Qiey1W0p zK7Xn5{`Wt7Nk8PL{ppY`Fdt69%s?pe$AoO&u!`$dIA`Y?7KoX>x-}b`0MyP!8155w4_{P^p(}sv!8uk{KUm_(QVNX z*2ejv2<0E6k$PxJc}Fv@3!*9C*b<3`Xv#81Bf+qF$}XA*xdK=40Qfk=^np!U4KH_9fx;(70ny&=`KC7|L>z zC>_JkW;t1q3phC*0(><+K1})N*y|tdo%nKteo!#+urrDf6grR?6gyBZnCn3KV7>!M zLsHDCA`i)%XsXpW@XFonU$m8y(48P5E6h1a6vU$r$~}==a8Um7{8J8+o|T?=kX)6U jhzwOPQQb5YbA&1^742s`Dg^!?TWigg_b#n4>~``mU4lS^ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inner_product.h.02CDC2358617CC13.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inner_product.h.02CDC2358617CC13.idx new file mode 100644 index 0000000000000000000000000000000000000000..8de10562e832516e9ac48e7846b195a4d1c32b0c GIT binary patch literal 1440 zcmcIk&ubGw6n@*JcGGT)rfD>3534j{G1)QOq^*mHwpdJi5VRh|L)c64W(Svxgp45V<|ASHxJ$X>^qy+`Vle0-TZKHTHv&``3d*7SyeG4jF*?B-mJs;))TVu?`4O)n~VHrk2xgDVONPts=u((3r1HKH0@B zDhj*5RiiM;u5Rk9y>%J=2n*070H2sh9H}o53UW8}xLLB0~ythCo zz%>X|D>+#XKq_BY$$WYtZ~`BN=wSU}V9U05kDh!!alVhi<1ilfVPBVv*Yzq_-hbJ9 zXUC=5?p;s&ZuCaEZk~N3KKsze)rq4pv$I3shk`@>J}mI5V5+&Ry?RWF1J~q^2tODe zjQEX5_+&U4@%2tiKcC(2d3lPplZ9-|KglPvc06}}JB7gN!?TBPzh=6zXl&GH3w$D) zXzsq>d;Z3qiNEzo5F6M)f<$w7-I}Ere?9odbo-&d*)vd0SG@{{Vh4EvznxpUIx$;Y T40Lsepv!|AquUPvLhIpgt(d0b literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inout_ptr.h.A27C06B285DB600B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inout_ptr.h.A27C06B285DB600B.idx new file mode 100644 index 0000000000000000000000000000000000000000..d3c89ca3c2635931072d4b8e8952f7582cdca016 GIT binary patch literal 1820 zcmchYF>ll`7>2*=-L=JVkoByIw4i6C~P1G#1Q!$=i(!d!)NDuhgcY4 zV`fGm2AE&~!N5NNvA_;utb~LR6SjIG5_|GWc3!=<^T<}>@7n&}-ueo_ZnQs>+|UjH ztlOpyiq~ChoMMsk9YVcsdrT-A5mRO~**bUrA{(-8!j#PI3e*8b z=^9IEHYVG_)-X6rM8?u0;v^L#Hk*+!WGairxMqmtQsJD?C_=8aii4yXpvY8V!rWj} zz+8#Ua10GnVRTbeolxXallv?(ai`#o5Y0U2i}NHxhnh-W`?>zl%sCS@6?dr-Dr=fP zRU)dLS!5B9LrEDbUGu+L7?BDyC$YiMGv<^Yo{ky#X8lUV=QOZi+^xA3M`?-H}?Q z0q`r^PP)%ue()zB{nk>ayS&m{?fYvUxI(qia%lk8Dr<{csio2Y^ebCdH=C?hsaM&* DZN@3^ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inplace_merge.h.2A9C5DB1304275FC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inplace_merge.h.2A9C5DB1304275FC.idx new file mode 100644 index 0000000000000000000000000000000000000000..05bff018f1eb4276bc04247fe42c35b72ef0aa62 GIT binary patch literal 9786 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/insert_iterator.h.66B801DEC63CD811.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/insert_iterator.h.66B801DEC63CD811.idx new file mode 100644 index 0000000000000000000000000000000000000000..84a4f906cd64d6eb8e66f0bcc880f113bc963e0b GIT binary patch literal 3316 zcmcgvZERCz6n=XtTl@C14;b5JTd|Xmty}4ZeU#D7(NfB~E}^Yb(7B{^x3}}c`jLBY zaTBKTTS7u&x^N)YVO?vvC z^Stl*c<*yg(+B(3thve(;!E_6rbIPvB!pDKM^R;I+e}z!Pt(G!%iO+9T8&F-QMN4} z9e3CkZf$kPVp3WWWi=+Lq8wK<8n&-KoaR;-sNm`Pe-RJo(!1eZ-h5$0b#n_P{AIm66Bzcp@Q-ijqlAdq5dz zB`SPe5Fp;PN6V!XVltMB3vx!8X42$TX+%=T_*7<#IL&nlikg7B$dtaAsuxYE|3I<) z#OayDM44y}rwe`532{{%26B*0c4GK7=T|K)`Q-y7n~~DmL0Oy}KrmYqZuf+ok|LP5 z#7A#v=9@(o#mbLb%F4TwgdGy&J6gfnJR!+ zGAk=}f$%3m>#^Nu-teffWy7vkS-A3zh_tSwG-{{SV#@PZS&iBT_F6!`Ht*2 z$+gET7!Kf2Zz!Y-gkM^x{JDcac*;WR0CtzVt95}e_jY$f#nJIw6R{(`kr34c!cTDj z?6`A#{O>ZR8cr{5T-u@wgn=!}3HUMIKj7~_c+5`?EOjuBhKV;$h%>kCT>GUjSTNU- zx;ivhe*gZbzdiJL8JGvj;A}J_fef>C;^3tpJ$$-(*Uvetfl_Ls4&3ee<$7m;1RG|s z)M~WOK{HF6j7>#ahp{8CAq9<8ryd4ismJ80L<+IgXYo~GE-VdNf>lTlBq^k#F%%ta zyw!Z|^6k@0pq@o!kquM1fA6~wp9=ErhI$%o3Odk9$pY7*Z1nf#Q_RS4@U77seVflL zp%?t0b-`{=jmL&r;y2ut#&+C|L^ssx1Rve;4i>=DR& zfDFvTyb(52o#p6+y(i^A8ghmF$V--nU12|RoTU+0#E-0FX|yXE z#H?Am!MuS(4SNbML~AI_3VR96S|gzu{X>ab1ECpv2X(~cSd1Faq zEmj^GeE!#qYy!}WBaZ@4hdTcicJ zK#>;WLPc7b3m0h-E>fgLtx-4n{P1k+U(P2tonu&PueRGU1D3YYHY=8X^Ucq{RfDzP zY56ccHFy^CVZ23JfC&_7AtqF$g_&@X7GWYqTC_A;k3KJi*IioN;yDl3YM*7Fi}}2q z>6f3rv+oZubA-#cBa#5FRU0|D8%K_b>Z1nD(4|ct2l5`e)aWx6=;yQg8VcI#lGU`J z1&u*dfto>Uu%V#!m-JKA;J0riUJ12e83bb!MHZCJT9xHkDk0{=vZAnrKPmWVt|p&Z fxFCeS^3kTB4s1`4namb;R#`=5Ik6PbvcmFTg)Wv9 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/integer_sequence.h.E5F0501589D243E8.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/integer_sequence.h.E5F0501589D243E8.idx new file mode 100644 index 0000000000000000000000000000000000000000..c90b93bdf8dc48b110cdd1c16578811e42ee3f6e GIT binary patch literal 1516 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 H(%An15$=o3 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inverse_hyperbolic_functions.h.B3EF4DA55939D92A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/inverse_hyperbolic_functions.h.B3EF4DA55939D92A.idx new file mode 100644 index 0000000000000000000000000000000000000000..dd6408bf4ec240459903d23874c06fca871e5472 GIT binary patch literal 1060 zcmchWPixdb7{+I_g;e=P;yj1$5uV%~Lc|0u5EdK`HvJF>cnjijHIW44 zE@G8hxJ303Zn=ZN^&qWrIXxt>q&c3=V3y%=UC`kvhg3+6Wb~1oie#hX31RuTq&O?4 zH5PPSb9Z#g69^fa35KY=DpI4oBpEIKYbxa#tpyn}RLWd_T;=L<87a7WX?J?>UGU|# z)v}Bgu(GZ!RbSU1@mrrB!?tB?I2-Ql;pcBxo~+%sjDa)I)Sk1qPY826b4*85 zJ+r5&KIm(lXL_3Fo4%$(Gt^WBB8`j9So0DyS*YE~g-a*D)1PYKpmVJm(T4VRqq=c7 zZIt6XQKNc6PviQquW?@NX`Ju-8W#qk#zipFxHyhAF7cBE$4H4(HfNYa)fnGbfoM@1h_Eyl!;WU#Sew9#v8&NQuu&5Au-QyD>CpWVXEq@P z!GjmUiw8jz5fnV=pCGn)^W;qs@gfM~LG)6Ko^)2-?)(GIgMs&%w_m>RJy>S3WEhQc z0E(^Bz_kNw6acV~9~MxekMJanHgW8EgivuFU1Bz62sfKZ?c?rp2U#>AZ3_nsWshkm z@C?o&?7LmApiH%>8y@UfUI*pW?2LL85f3}PmW>?J#Df7cP3(JZ(%E7Y*9w-nb)R=- zn|!v8@A-UQO0e1Pc{m`x$JC`QZX#IehUOOG+p;~Y>DVS|57m`0)1o9;;-eEhY-i#H zc86Nduzi{3+C%m1Qs4E1&=ar~w;BFI)NZr85&&xN`rDb$t8zk?Cc)%XSPJ9o)IE0b z!$UM8OVi4Es{VZO zbjR9dZr1>fga6C`xVGN^@##t9O=7z=v29{5x?X?$@?CK5(EB~Il!VD-bS+CMklG)U z0u`Z_hG~H^Fe4BGNYH6e6KXk_6Q}?S0_i{(bVXPcY6dg}D#Nls6;Kg$Rag~jby(k| zUH1>aqTio=33qp@b|%^uC$rXyDBs;XdFyv+Bix3TEX4Dt)YS2q6kRzRQ#zZ@$CS}B zf)1%j&}q6R=yKVdpetwvL8q&_peyP{L1$zQL08txLamaooQ`{`UZ`G)sa~&J5mDRu xn=^`8HM|TTf&Y<+5&-xs5e1AA0LJ1}THUx|+}ZhH_jqDtbZi`g=>6cI`~fllmURFC literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/invert_if.h.F0EEC460CC1B74F1.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/invert_if.h.F0EEC460CC1B74F1.idx new file mode 100644 index 0000000000000000000000000000000000000000..54d499a10fba0872b007f6089e58f2a9a9e2d259 GIT binary patch literal 570 zcmWIYbaOLeVqkDi@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ}I*VC|H(SR1%+=rk6ou+miG1l2Z$S&P^=JEXe?R zIWw6acBW;fGZa_mCV_&pC^fCP3rOpg)?6`pwwH&Ihf#<@NE##s0%zm^=NH-V}}8AL^4!hd3V*D4yF_yiIb6E%hj7p3MTg4o4H$;HYb24n5=r(brQ3i!ap P#LU195`h3UR<+x7k2mJ1r#iN5ewhI zN{GIMjaq9h*x2c=dXJDFhW+`5-C=g-pxfzO=Ll&Jx@pJ_D-c3fY-ppzqi2m%AS7=A zK)VHpnkxi+9u0vhBLap-Lw$2=2OHP~jKi_Lp)_SGbb*pZLuk@^gKmI`P$mNo zQuvsr(C=d$As^cZL^O$!`I6Jq`IijDaLz@7Btj$Nh{@m1M)PkgF+vJ6g&cY$G^XJT4@`{Va^$aU6ne$qq24}qQ-d*eLvUiiu Byq^F7 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/invoke.h.01F7682F585EBC75.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/invoke.h.01F7682F585EBC75.idx new file mode 100644 index 0000000000000000000000000000000000000000..10f36ceeebda62f403b56c43447f63b2e6cad296 GIT binary patch literal 1004 zcmWIYbaQ*c%)sEB;#rZKT9U}Zz`!5^#Kk2=nMO=N1_)@VR2y2k5L(R+B*kBCVr2eq_0<&T#%ivpIB6qnUQ^)hH|V@YK}YJ5pi zVkR(X=wxMSNoG!FNu_>Teo=X1Q3}wD5R0Kyd{Js~X--LeiH%zxB*uY>zz&#ZQmm{P ziYs%I6oHB6CDX(7(x}O^co;ai7+9qkq}ad&11A$B11AF`Gb=+;YFe>6BLjn8Y0VXr zXM1@Vd00glM5Mt<4oEmW{b1q2;HAjK!z#uiCJYniVO3yJfb-7Yb7%hFIm-p8S4vOH z1!k$sbG!7;#rGl@xmdY4xKv?!qxF95TFSjI5~$jk!B`R|{OkXV9^)Ag8-c=-CX&uD zL!6H8=<4s#n$9G{DlH?e3=;M=_k(xZ^CX&+m_Mw^a-4GsWTcp+ zG0dhf3-??v@shd;5@wJTg$axBZ0MVR=*wHYHUYycClREhxG1?;AH)Dn?F-vw+HZj>mv#ajLx*M_!XiN|lm+G3-HD6#J?Gqe-plN2X>LC6;<%=cmi~yWi#Cqq3h+9%;_&)9 zDJ*JQd2{q=WqHNn4Jo)y?b41mvV>i-zJQTZsQ!ThwN_c4oEe7DP7#J*}8flXt z#UgRkP&J>ZMvOmn8SN4_`8L$}sstq}g%5VfLRbk&{ry5PD8-_kO4rZqgoz3F7wu4V zB^DLKzWr(R+aXKhKw3S@Q85&jgGy&wy(&>%?o!3DQCUqFqk5XX_r?y$>2;|EL!u@J zV`zO>|WJ`7iK6T?s4tfPgJB+?$5BO#OAn)IL!)@~K3Pwh>fi?O<46h=PcbsdOOP}Lo+-FJHE`|>D7j^6o8#YIS+SBWnY;%{v*4M9s?=bRJhw=fC;b^W zAAV|wgI|WEc_^BP%G8kDli}{<!`jr4+_(|l+|8*+s-O5Ek;@k&X_(I(<_lAUm4Xa6_gv(Qy_Yk2FOufKGY1<| zgJmiE=uF?qi3_t1z6?nTz9_-_QiGKz>_FOkc8>EMJo0wUM}H?k$TDtO>8(#X{P)?j z-#!@l@@_{4A8Qw7`&)Dk~+@qN0UlMX7*bu2)Y(H7&!||9!ssZf@st+{1@p`w;SJ zJhb9yAz5zA!aNA`&_t^}(b?E@dQq^+M$px|DX6Eu30CZm>(EGxNzhRBEbO3`3Hc5( zzk_00B5DwWNuC|*@x_ZPSG%3J{}T5&2D`>!4;9cLP$PMes9=xpo0rbz{^NesIKgu# zcsGrT?ggVto+_$AFoA1k;7*#+hc1& zU$49}^y1~BVcS z`r7^ELzS-^o;Fu)w`dKu4NM;WoBfO|P#Z91rN<9^@=X1{D|SLc-jI(*K#1a17!>!$ z88qM>V9+3V2Z6!E;2mc1D0oLL9Lo6oPu<&|ev2pM8kAgvjh4$vD4DddUaP$~efZUP zaA&ejc3QNsEzBUzrZMP( zhe&yn+2jyaNb6{+5!FgtE!3UY%`m&ycCTk-Te_Pq)U%|ggh8u&dYnKVfK)5*g6h=OFjTX^THTl6C3^7-$a9aL{pXEO|8MX6V@4$V>`NzSu)7K_!AvAZ=&E5*y{q0t zcg0;rBR5-Sv4y_?D_(#~dO)djYK|Y4n}O(RZ1-Kwn&?lEplD`n8koo%MxEzb%u%=6_X`VGTn*)9rTC0WD6n~SV4+(6X ee15F#;(4b%D?2CG;mljS#FbxA$StM}j{6?k8Qm2C literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ios.37D749D0BD5969FC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ios.37D749D0BD5969FC.idx new file mode 100644 index 0000000000000000000000000000000000000000..6e9f3b843ae7132e2f80cbadddd704546695ca39 GIT binary patch literal 28296 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ios.h.38DC8C7C5E8EDF72.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ios.h.38DC8C7C5E8EDF72.idx new file mode 100644 index 0000000000000000000000000000000000000000..1dc6204afd686ff4676ce80fd14311d66bd690bd GIT binary patch literal 904 zcmWIYbaQK9W?*nm@vO*AElFfyU|0|aa`^NZ~m(lT>Wt@QQvovrjk zi&Kk=^^=p5^!3V;3$oMo6N^eR(-MFTKR!M=KQApaoyL}=m8a+f{i2sa2YWyvn3oQ; z3TPoPI8&^wK!KW?n46!L#!wCxtjtYH1_tk}=D$MsL?1A7GjXsnFiW#ZbAbs4PH^Be zGO~VAd$h#J<%2CZ6FX3WDw`@lm_R6azU@(Ggp=M?ZYEZs0!cPWPB4K`z)+N$R-6os zPncbd5IZWmAH36^C(*1|T64wZ*@K zpdlc~zzh-C`73Pdw&jjMVNMQCxFOMcKXxtU-WLfpM1w&?5@yKei-!%8*Dh#e;$fC& zlb3-B19`Uc!7$#IrjvYm)lw5#IGM$z#Z_Q7@i0sBNQ%OI&BH9sD=h}|87H%Rw0sIo z<>BMUTeh8zUk|igoK0K`X0G%ZZf5nBmdAm@@=EeHFyYI2ou|sBADm_6WEN2n(SR8O zvk2%hP}stR4>j(O_j>7f4QPm%hL|zTt-!F(Nd%c#T$Eg_3}P^W2nYb>FDPKH`)zMk M6~PhD#Kgh?00Kz*9RL6T literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iosfwd.FE59745E653D39BE.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iosfwd.FE59745E653D39BE.idx new file mode 100644 index 0000000000000000000000000000000000000000..6e010635f5dc4ce354c40892a82cb66452c990ee GIT binary patch literal 2236 zcmcgu-Afcv6u)P6*V&z`X+~}?6^4c&&EyA`i$q{7Dba%v^zpFl&d#orJG(M7er0~t zE+VXLM7=~%O50cPRlDH2q|vRf3z4!3wgmo;6K{C-gw zkotNiLF9Yi*Q_2B2u_NAd6we zFAWWeUau651eH*pNiYvFh}p?LRp==I7nZItJO#{2mDQ*=T#&S)1x!mXBvemgQA$yHHvt?USUVq>L>|9DTg1s={cBeZc_Kd!$PWl^LcPY(H zrZQ-XL?2fD_po_(EYI}}kZUJ+Qc*_eG&rZBHa8J_ro94KSGH3z&;8U@o|Gdf0nP-1 zvXcpl$Q`}v+pT9j*^8h_a8AOJ++>1Uzm>l*TrHn@vIjwNaK@n~H<=(!4(bOjgb4lD zKecSWraE%adXSxM`rQI9(s~b#dWX9WqV!j8xx2ixfCg zP{}ra&se+b7AhVf$CzvEKZB>?*XI0s?NfB*;2isz|97ja@#i1Cb48Sn*~Y5bGR638 z6R=B*x7(3#Fs=qs=TBO2_NRn_2p-;AovaYi9jt_SJ^b zRs996=fE-tRc1W%V3{}d_Sm?m=gh4w%svT6lW>j!i6)1AX+_s0{dQU?O~0~(T@6sf z?}!b&NU*^(fe@Q1(qx^wbN5l>25%`Uw%STKyMr$!4iivfis`FJZe;(Hj8eqb2>Ayr C@R%F` literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iota.h.FA0A39100F813132.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iota.h.FA0A39100F813132.idx new file mode 100644 index 0000000000000000000000000000000000000000..c891299282fb3601da9972c1ec9d06685adc860e GIT binary patch literal 656 zcmWIYbaU%qVqkDi@vO*AElFfyU|sLC&{04a2I$r>r8^_Xori&)gMm$q zL5u}VFmN(4GH|jmGP5!irKS}x1gg|4t+`_IY%dQZ51SB!kTfXHK%n~Kmdq5{`mbFA`{oG=sDx#0Un4B<2rmvK;4J0t$%X}%z*Z0B6!H` z_%dL0rC3=3W34hb$q5)?s+C92{ETTAWMkssVqh1Q5mg5h44h1$C}m`372S8T&~T2j zBQFytP=TbFq%xR*C}069C`wH$-T_prS6Xw$qo2qy=pHca^N@#8Jq&c?3?8Nx0KcVJO!PNE=C4a^RB jkT4V%B^N7$bhE;YU|?Y9efE6W)DYz#Oss4SYzT1xytU>f literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_aggregate.h.4FD07E224BFB7AE8.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_aggregate.h.4FD07E224BFB7AE8.idx new file mode 100644 index 0000000000000000000000000000000000000000..b1e300999970672f7011ebe969559e4dc5ca70f0 GIT binary patch literal 800 zcmWIYbaRtnW?*nm@vO*AElFfyU| zlEl0cy$pKVUL2p8larsESdw2vSBuN?GgIPe@7L0j%$&@UO8u17Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd~$wXT4p+pEh(uiNR2NkO3Va0G&8RxHN7Y?2V`?` zNn&1!UIsmFFOE;lDNn2{j!()gNlpYhASox6-Y$Rz0ln?bPs&P7rh9l7C+5;Ugn{{| zEHg1DrxKXT3M%Oy$3>~R`DLl`$z{M8F0RZ?0%hZ()U@KgKw7V~=8DO)y*!LO%;F5< z(jX}i`0_a{-_guc9w@ACsP0zL{otMUJc;Hv($kAWZqLzY;$imY@D_#%^Dz5x_`rG5 zdOvn8<=z(w)EmSQBndH)fkDf!aOx4w4RaW|m^nE(O<}@|LZns1o4wBhjZ|k>=R+9j z%jqis1ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&pELO(t}u_Qk?Gg&{gI6g6_Jh8GkJ|{mpJ3g%_HB~QzfwopB z=jWwmrUQLjnVSUiX;Ergu`7_)E3LU=@@y{;BM+k>gP=4x5P(Fq-j7{Nx%Wi^g(Vpz zC1JulKZR~)Gsi(0gQ_q|9eLN{aD4w!~g)d C&Takx literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_arithmetic.h.ACD8E5D2A9FFFF1E.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_arithmetic.h.ACD8E5D2A9FFFF1E.idx new file mode 100644 index 0000000000000000000000000000000000000000..ad41a1c2134fdd3a5f1443372aa491de7019d88b GIT binary patch literal 1188 zcmWIYbaR`-!oc91;#rZKT9OE4GKc_iaY<3;N+uu!1Z-5Q4Xu)M5{ru!LJDf_7;Io{ zAhV>hAT_?EC^567*p4CDDv2R2GbhzbUtizZNIVnkBuPnJBJ6%7qs3bEj zF}b8z-^kF|GT9{AOg}k4w*aW4s8}ztC>Ml*X6L2ro9P*u=o#o|<|XHprljiUWF{q7 zROrXYC+Fv-Wv0{E5+pwXT~LymUX+*vvbnei#oPded;itvE?BlES*_gO^ z7}&*S#5KVL11A$BP?nLI^?%UwQuZGAi@Z$SKm{^lGOAz#qJRacpeQx1SQ4mMue9ch z$+NvYj6Ccj3?kB?oB#q2Pd`|AFnB2fg{4@egdu_q3~!{T7l+)QqYo68P?a!%IRi#B zae^3uBX`*PG*gF2I=LMkb~)Ai7@yUci_DbNZ3Il5GEY0 z_hZ*m?tPI!VR;65NtgrHem3@Ny)b@$`?#PD)?#|GGIzbv9e+)uFOqx0w#r>t!~$H|75eUF>!J;uuIBFs(=XwP9{d6EF&{( zy?4fn`!cT=^D=P(708OoDu4-y0v4cxqSUnFyGSN6a)C{#=zj1{d!9tIUTMu0lV^K* z704ZkxY5)KL literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_assignable.h.3E3CEB4B8D4D4214.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_assignable.h.3E3CEB4B8D4D4214.idx new file mode 100644 index 0000000000000000000000000000000000000000..f8ccd496675533874950f72d1c8e88d828c53f7f GIT binary patch literal 1648 zcmc&!U1-x#6u!-}cIlG&v(j#?tktbxYnRwL#;m$J3dL=2;=o^GdYg8^^v9d5bk4y* z!J&^niLkdls1G87f}jY3dlEr}!C)eci4&YYi9QIPwBEMP;hQs%!#(GI=R4;+H#f(I z6Nzyk$5f{#9 zB!!q-TEV6v^+xs|zek?Y^MCi`qUGa!VX`h|lTZbh%@@@TxD6q|8D=UPg?l%dO}>CDck$GmBX(|u z6_{-kf(yAiDijDES^Y9_6pid^;DvU!y_JS}p^NRR^TKSn z>Mf=RFWhL9;|wqO1%D@%!3!ZF)Jey3TKx8SzWM1%C>KGIcFIe~3e8zFrOiEGSh(`= zrF;*%@Hjlx=6J#9@YQ)iN3iPALX5LKcgn;IVviW3W#}0|IqLu@sO6^r8Tows11Jb2 z0;3cKxe0NU=2Bfyz&ab63n@K;7)?P$)s@|#jt&LUzN!JrV-Rc{wC2FkVIU+p_N=X} Uy4iJ>b2jscukAF~md@JpC;2z+yZ`_I literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_base_of.h.B131E5198F7EC50C.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_base_of.h.B131E5198F7EC50C.idx new file mode 100644 index 0000000000000000000000000000000000000000..7fca40dc3e2b38382a5d8e6a6fc57416a87d94f6 GIT binary patch literal 834 zcmWIYbaS&}W?*nm@vO*AElFfyU|xO@>L{pG z8$r1)1+{hzHZUn21qjQf04P{eS&$lEQk0lkQf$YNY?Z{2mYI`krLV8=Y^5JsoLW?@ zpPZDWuUD2_ke#ldSX7dkmY7^ptZ!s!Y?*A5Y^I-_pIZRbQBftxb25{XD=PHk28BsMb0a3sJR8W+fR(uR-l3r=e6_aOsc^G-v zg&2gSL1_d89G-r#@L=##Wa42LXAu{M2r@A6u*zCuev9d9+ L!mMFnU_&qg$c^f} literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_bounded_array.h.F72A3BC59A2990B2.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_bounded_array.h.F72A3BC59A2990B2.idx new file mode 100644 index 0000000000000000000000000000000000000000..9c4694ad14b8d7a9c452c1e7e2bf431a3ea0388e GIT binary patch literal 782 zcmWIYbaP{4W?*nm@vO*AElFfyU|Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd~$wXT4p+pEh(uiNR2NkO3Va0G&8RxHN7Y?2V`?` zNn&1!UIsmFFOE;jFU?CyO^Ht|DoU)RvE|9dB`GPXX}}n*%uNDCW>IQd@f9GgS6Xw$ z!6T1YQSCpEQ2+~kolw7P2 hVlcODw!Ugq`D`XLBNGb)EIk7yK zlEl0cy$pKVUL2pCn3I#3l#@zxdrM0)b23XR^;1%lbIKBPfc6zv<|cunv?w*Lcm|Nx zE3LU=@@y{;BM-AMgRnG63Iw(tRaKYd)9?Wbi!q3CR&+mjr#(-iIa=?>uBF`jB7wrP z46>3CwG0eR$K-aq9?L8Q3QI6ZaKTiUJ(vG-$^7$8CK+Z?TTvI7Fpw848U^EJEqY}5 z@K*I#MlNPf4o+>DkwvLFi6C}yQF5_9hyhEBKqfG`!T>0_LILxg<4?1=&x$ZGGcvI- F0019_-`oHI literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_class.h.883AC9084E09F8A3.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_class.h.883AC9084E09F8A3.idx new file mode 100644 index 0000000000000000000000000000000000000000..689579cc291521aebd3a41ea74dced964b109373 GIT binary patch literal 788 zcmWIYbaUfjW?*nm@vO*AElFfyU| zij@^Zab<3j6EK?0=hRvJpKT+>%f!jWz%D5!sQ@MzIGKPE$->CY`tyg#irt0|Wo%3w zKn0>QqAFklqJROYpeQx1cn8oVz0#U1CeQZrF!HbqF$hV6(f|mE-AEO*`!GwKk&B&^ zgHr<{h_DwZ46?MM`@uWyc@oVIPd`|AFnB2f4H0J%7lx_6o@Q4#nKj-SC@iWcY7cW$ zwBCznBrndlklXXYj6l%}NW=VT@& zS5)Z7$0z6KrDdkm*b*c^0bNj%nqHKc1G2feBr&f5F!AR!~64kjQ97=Q|jQqzhT0!`8@t+`_IY%dQZ54$jf zurw$gf`G%*4;CH_UW!0rDK;rlh#&()wBC*jv05s13n*aa+ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_const.h.B2F55503C8C40DCC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_const.h.B2F55503C8C40DCC.idx new file mode 100644 index 0000000000000000000000000000000000000000..c09a834dda1f7512e2e89d1a491fe6eef2bdeedc GIT binary patch literal 748 zcmWIYbaQ*c#K7R3;#rZKT9U}Zz`!5^#Kk2=nM)Xf3=ptUsW!Aq&PgmTRtPDmwPUb> zv4PBz%7WDRlA^@Sl43iCWUC~Gw9K4TD}8-^XDj{C;?$yI{p6%1eZ8{eg6wqt#G;bS zw8Z3+Vtpe+W6NZdWHbHb{M-Vdj-q0{#G+gf2AZ9hu5YGiWTI!FpP84OQ<{>hpOcxC zTv4GPAD^6`mzJ4MV@r_y1av`3YI;#(4#?)>lEl0cy$pKVUJS7pXlW*t31`HY0b?n} z%8H@5GB?Qy7){DPFJC@S%hd{q>)f^@#*_b$h z3dCi^Rlo#90RvD$QEFQ8LZC@{r8QSfp6%sfNT9F|gN`Ij`0(-LE!)npNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|a(-S~W;z3HEh(uiNR2NkO3Va0G_x3FXK_hlUP*jv zSz=CUVo7R>UIs&PWo{D4zeTBO#S4M7UTMu0lV^K*7;Kjo_?_KVDM4| z3JbFc3&Vt?^?vMH%DpcVC@jk$D+v=${_Y_7(M4z#BNr1V2d61aSh_3w)k>SV^FY;- zvXXi*;V%pKTrcsGx(O0ykQ9XpTNen4b^Q1I1`-aHjDraSU7C{!;uIGp7mI@!z?g&q RruiQ~KRdU_qlA%>0RWJdgWv!F literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_constructible.h.96B6728AC672B2EC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_constructible.h.96B6728AC672B2EC.idx new file mode 100644 index 0000000000000000000000000000000000000000..eb31ba69b3d188d653cadea66d512adf9e427460 GIT binary patch literal 1890 zcmc&#PiWI%6#tra?b@Vsy4hMbY@LO5Y;BfpmRZM8hdO1bo7+J>gfvZSSlZPjEh}?u zFj0mm3@<9;P0)*?f(KEVh|J3_qIgje!667!P|$-8Us7LNomVxG*YEwl-~02uUy=^) z-nsLTosi!6?y;1l3syo%9o(9($|ovdVO-sTaV{ze_>_t%3xUP`HaNtsvzsIAx2{)AuCdpW!c^+JFH2n#)`2R8_tQDkt8dqx||S1 zU1Qt1j?H4H7-7ZHR0bkcEi9-hdvX;D8!^jbJEIyl_;<^Jsyn`EuV^2SqO=Y z%$|8UGf3O0HFbmzHUv4-5Qmk5*VIy3xwJ9&Y-Z~HNf+e;LcO~_Xd2?EfM^>KhTpt8 zeg4{$SsPUY1g?SWG)*bPz0dNEkx!v>Hi`j)r@_-|nnDJnMB)~Aq-O7dn=WcK5H`6t zwV9@n!6-33Md!yWEY~_3wC+(V@vS)*pp}kgbEy4`lXl*R>TC6Q)UWc`#=si#L z96ejf_d)_s#Ip#==?=6bk&D9z#U*E^T#`v;-lF4E=24p3U? z*U%NuictU?Y9fqf0X8&5_~HEg@!Jdhb)z}Er#K6S_St=9UeF#a^Ef+K^iX}sYeSP{Tk6#+aA(Ns~}Vh8~Lka*EYuT0J@e0$`z+N&H+ O;zXPfM`>AATK)jKA~ePT literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_convertible.h.03BF5079F7A83C51.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_convertible.h.03BF5079F7A83C51.idx new file mode 100644 index 0000000000000000000000000000000000000000..9709a8d04fdd5413bf5c1ad136bb48ac5c29ae1a GIT binary patch literal 922 zcmWIYbaR`;%)sEB;#rZKT9U}Zz`!5^#Kk2=ne0qJ1_;=wR2y0)=Oh*vE4UTq=ho^d zs8kz41w!&`?T{6O7@|rWfus?7brc}%kbJmsh#_3i2q;)mS&$lEQk0lkQf$YNY?Z{2 zmYI`krLV8=Y^5JsoLW?@pPZDWuUD2_ke#ldSX7dkmY7^ptZ!s!Y?*A5Y^I-_pIZRb zQBftxb25{XD=PHkB!VHbtF1ZEgeHOLz<)kUc}iN-(^VOBH1)WK+mTBV;ZwtMeR sf(z^}OVygxHuW|`aZz%yGRQUTFefoEa3GkRf#w-4-R`W{nbt^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmXuT$q{f#NC1wI0nweLUnqHKc1G2fe zBr&f$6AWEIt?C-9kR)zuUVV}8L60X%MqK=0GE|`NcZaesn zVp3u1dDtG%{!SMYsd+%CR=BaWe1$gY3Z}iV4=1Fui44;PxuY&#u^UZ$5%Y+O*k@R9 zk0uFrUD}HR-aTZIzj}fSH0w$tQe~w{r0x6DR9CLg;4NaRxhL4PwSzbU;a)UtUC9C_ zSwyGXuw-Fxz+57P%M#5Ztq#5KSaZSk5c`aZ0TH0b|9$cQzuf_hrtdf~p~KKygWJ_LT%x~$RRVILufWPQ`lczzT0VCd}QRSK(J0*^^qGB5D?(D)eFdE z#}7X@zrU;Is>K?rS?T1bc6I;fVPxA)}rC-)Vwt)lg(5+s=*=}{%A px}Ab@>c$2?vCNDNAY@KpWde&ky9Xb(zBZah!6=#K3Mx(Zegjm9fQ0}6 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_empty.h.6D4DA0DBD064B226.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_empty.h.6D4DA0DBD064B226.idx new file mode 100644 index 0000000000000000000000000000000000000000..164ec7758750de5d78be4413edb585e490ff52c2 GIT binary patch literal 804 zcmWIYbaRtoW?*nm@vO*AElFfyU|p zz*tJLvSKK%%uR9vMw4Z^jHo;Rxf8rhoLmg-l46nyV1j{@2^f(qjLfWM)4urxJz4Xd zjfn%OKvYIl1x!E`FaQ-4rKT0{0Ggy%T64wZ*uGj{lUd`Pfx@DCqV_ObqV<04TFSjI5-2RgAR`G=efaqCmThO_*Mn5E zi^9#;G4HYqmyp}W$i>dd!KndL4f7LF804Xf?g#I*=Seif>;MXbya5v~O3g`B0&0c1 whykV!Ml)RIeRzNQ+QICM*88z*Dfhleps*T)nj}mw%*~8k zV7FFuKX|7-PojD4)R1TA-><9&3UhLBs>4(tK7PDq+u8W_AhX#;;qHRj0aOk06wHvK t)SN^?pjMcR7+~rcii?tql|hEG!c1mhU_&t3V^r(knDJ|AFtM^R003*q<2C>Q literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_equality_comparable.h.E27628545CB3B306.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_equality_comparable.h.E27628545CB3B306.idx new file mode 100644 index 0000000000000000000000000000000000000000..bf230b91882b7c9e311abd98b47ec433dac16de3 GIT binary patch literal 2312 zcmWIYbaP|iWMFVk@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmXuT$q{f#NC1wI0nwpoGl#?2tnWmRP zM_V)VN>bB{5_3TQEiOsSE1|FL#qp_yrHMJ2C6z!2{^PJo30z3nYd%%!_u zi!;;nQd8*d)3W?b`r28Pnwwvi8lPN7SD%8s8BhBhR9cb=$}##WsmVEIi8(+o7FXsb zfr`YU)U;w_W(Eem(wZwK&-U^#@~}uTNJ)dFK!DTd#`@+9`ASS8ED8Y%K^5H(-f7R1 zXcl2{)^OH>@$RQJoAs#}so+)gMtXX2$n81$Ogt=3LQb+Uy+EF>lLd@7amVMi3jExr zcul&VW>+|wHQt$>g+*3LRtKh+g+(D(p$x$@vM_Rj@pxFw+04aZJQfz`6z5z7&&|cn z7slgZ@n-Xes|;Rf+Pi0_j1OM-Y&)u|F3G3i!_0%?0v;4wcvz5aiPrnEYbp1>NMLA( zGK5M(!kU3$`HY9L1|BaLJRUy&;QF0Nvy)3I~ebuY3VC$voG*2qw(K z;%ne*3gZFuPEH~yWQ&WEi+~%xEwGY^%Tkta$?DvwX9i7qH>S f>U1tfCT3PPb`DN1ZU!!xLIwsV1d|=XtX-Q^&o*hH7RT2Z7%aE3tlWL`}ukUQ7A6lGRRIHzzl%%g$mRyjXuAf*`l9`s6 zTvDuWWN2)eY?5rIpPZjt0Mt=bte04n3&KDP^3wIq^o&gO4D>Vel5B+R1>^z&yBe38Fasxq^E<|Tw^6Rv zBVHy>E(UgSF>!4$!NAD`jByr5W>%n0#a%$PdZjg2OrGuKVdP;KVGxmq=w@JWc>2M@ zgTYG?C@jPxBn%Ud*88z*Dfhleps*Q(nIud&FZ1NT-zOYzFmkbTa&Q{Mgug7@bG^h% z>LyUN9)q4JOc>@iplXoAD!L!M)1D{MT$GxV2vSm9lw7O~VzA5K&+NY$Uzf_n#=*b_ M5`h2?7=wWU0OT*wsQ>@~ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_final.h.2C12464E43993C97.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_final.h.2C12464E43993C97.idx new file mode 100644 index 0000000000000000000000000000000000000000..8905b819df7ac44d2756e0c686899cf5d439636b GIT binary patch literal 830 zcmWIYbaOLfW?*nm@vO*AElFfyU|p zz*tJLvSKK%%uR9vM$^xuOlDFG8ccYZIJp?u<;3I^zyt#)6EGrK7@1iukIuEJ7Bij2 z#>4?sASolM0wy2|7=Q|jQqzhb0Zq~?t+`_IY%dQZ54#Y9kTfU_fPll(4;CH_UW!aS z?BXoq!Vp0Q1|D`978yA2IqL@F;Hop~j9l!T9Gn_3MKH$!g+VT>=zj1{d!9t|^)$P} z$*l3tKqE!XMLl4`JnWKslJ+q7M(h39wUm2bB+xmE42qI4BVp1&BSC(F={c+0l4 z@#{fGvWvnU4>Xcp63#11%}Epl8U(YS0cIFOaZz%yGRO*6m^};(YzQX%`*b}e@ejv) InONBv0Hjjnd;kCd literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_floating_point.h.8EAB90A2EB9CCCBB.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_floating_point.h.8EAB90A2EB9CCCBB.idx new file mode 100644 index 0000000000000000000000000000000000000000..aadcd8f0d056c504dd939e80b46c2a8b64267b04 GIT binary patch literal 1116 zcmWIYbaM+~VPJ4h@vO*AElC728AO1%xTGl4l?liI0UMQSL#yPR#NuLwkb+t}1{)X~ z$SkQWNR2NkO3W-Nwqr=PN@4)Y<)!PUpNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf-u-TeKS2H6Fmd{ z%)I2B(v(#FoXn);iVFSs_~iV&w9IrGTY}_ApbJV;(~A;wKsFbbB<7XqWzf_1;`p?j z{KS&Xy!7~je4tzCYI{*?Zhl#6d~zAk)=YGlV2Z?-0h3XRl@%~GRpur+0TU8Sgu%DC z1Mhv+|wHQt$p zg+t6&EWD!o!8`4F63r|e;=bZx2%dzm1QJiuR}#+Kc2reel25~jnFmD+4+pXq9u8zJ zFuyW!f&B=xg@;2?N6{AM&uG0LyOwhAiv+q?g+WCU=H8}ba=TrRWflU3k==Xv`0!4 k;6cJrT$Eg_3^J4zW- zv4PBz%7WDRlA^@Sl43iCWUC~Gw9K4TD}8-^XDj{C;?$yI{p6%1eZ8{eg6wqt#G;bS zw8Z3+Vtpe+W6NZdWHbHb{M-Vdj-q0{#G+gf2AZ9hu5YGiWTI!FpP84OQ<{>hpOcxC zTv4GPAD^6`mzJ4MV@r_y1av`3YI;#(4#?)>lEl0cy$pKVUL2oRnwOH8o0?aWm_u)? z^Gb7a;tTRYK~O|*yUX%3Q-F46q67dMH@*y*PE)L`7>X-%lbnDFRq#*1{-j;Y=d&?! z@i4GU%1CN~2?kCkMxZPsGwUjg*2%W4sb_eZxPb~}#bnjM1VjM~P(e{@TJb`lTD{Vm zD<;qO@-XtSi!g{t14Y2V;pqnp4+bwqps+NXv?xqCTJOiMrQG`>fx@~Bx{@$qm~$Ap zz|N@Xe(+9vo<#HEm69GnaQ28l6j literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_heap.h.09FD231B17C39C83.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_heap.h.09FD231B17C39C83.idx new file mode 100644 index 0000000000000000000000000000000000000000..b36aa73aa296b7a96e2dbcb924f8450d33bae0d7 GIT binary patch literal 2058 zcmWIYbaP|kU|?`g@vO*AElFfyU|%)xBwHmhq-Ex$TIuWSJ6q|87N-^!>nA5A z>Fbpx7i6dFCl-}trX?nq6zdxq8e1ltB%A4jJOb2FRIHa+lncViIf;4c`eu4YCVB?? znR&@Mr75ZUIhjex6&3pN@o*c#8uc>hYF&I$YFd0rWkD((?aeHX&qz%ypudgrrFkWp zIW)I7IX^EgGo8lKmTrqjJmxqyuOO!!W8eGNziB_xr?Vohk@}a3dUwtx8 z;P@XoG+|Dk8|#}dr*jOK@(=*p&4=NACnpr50?akgdogH9xgcsIXJKH z4`Y4K&Ar-adMEDqyjFpq+Z0Xs!`n8UPycsYq6r_p>Bnsozuo~&m}RP`(9z&%Z#3cH zg{HlGX3F@W2}kSw*tL{JRmi*!MklXEW7n<+_>%29$CK^vd6VB)=-n;s+-yAeyfhL;? zNjLkJqY3k~6b5Eg`|d^)4*j{xT*A)fD4HQ zJ%%r6!khxPpIL7b{f{PGl$w(WGO)NPx!4`V-~ka30IbMifEUJKVBjiSye7Hx_p`06 Q9Gu)dybPQODQ*N400w-wy8r+H literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_heap_until.h.D53F19D7B71F8B50.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_heap_until.h.D53F19D7B71F8B50.idx new file mode 100644 index 0000000000000000000000000000000000000000..7215251e6011a36f3b8962c37a661270d84823ba GIT binary patch literal 2614 zcmWIYbaT_=VqkDi@vO*AElFfyU|a~+eDQ;Ul| zOHzvxOY(~p(lU#ROKNo#RH}`zE67O%%4}nqE9d;&g2bX!g=8QNG8DIybQG}4 zfm}nbJ{<*Q>opl{5_8h?i!w_xa_tzfS;ml-nUiXzudnZHr5{?HT2!o`oRp-mSC(9m zovxo)RFavNm|RkgLq5v3u#jjZz7(T2ORz0=o z0~4bNryQ>wUq$zWciQtLn#<0vU$9MKV)AS+4Sl@ghUkOe4ep<6xpNf$RnlSqg&4^R~nADhfI1LyK1YzFc;WT3~ zgYzyr3#NbjF-M(Agi~HqUJK@25l$^3EnygMzeh}}mASxsWa<7@wI89JDO^ish&bdgQLCCR0l6K?cFm|#s^J!en4Q! zW$y+bV5*Q5mQ;dyK3ea`uBF`jB7wrz4Azpc(AB!uC>aqd5r<~wt8T$f-_Mq&pb6Xd z#O(LFayJ!CI6h&Q>g6l1v(a4gyGkmndvSg~n(+27zpviD8(WAboFB+FIeyN8IyB)I zGivTLrkgbag^{B{@`u+$Znwi-XsQ=j=dHOl(RdP?a6m|X7t0pk8EA&Qkmz-L+-5(A zk&Ba)gHsz8CK+ADdsiR!n}cSEQ}>z$2e_J+p&263WHTY@X5Vr&)r&o7Vf!T;w5zxWC4S?D8fhsNdr9u&rH$`&U+gFRG`8)>?WEwVZ|n}XaW_Nu$1iI z$gX(p%K8Ur_A=ekwaaEIe+(2x4sgrY0r9Q*S#Qu(3uh@PrJOMNfM(_0{Qq&qPyd62 zkwcct+icC-W%obh4cW=3raNudWB7t*B&WdbXV#lU|Dy>r6s6`Qf`X&CD7n}g!~nMX gV1OOQU|`@zFge+eykn5yNnOgq&cVgaz=4nf0EE|PEC2ui literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_implicitly_default_constructible.h.3A4377990962FA8B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_implicitly_default_constructible.h.3A4377990962FA8B.idx new file mode 100644 index 0000000000000000000000000000000000000000..65bcd020ab5995818a140982bac08fc410647324 GIT binary patch literal 868 zcmWIYbaRVgW?*nm@vO*AElFfyU|Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd~$wXT4p+pEh(uiNR2NkO3Va0G&8RxHN7Y?2V`?` zNn&1!UIsmFFNWA#RGM6pnUs@CZ_6`t3vx1(GfQ$R<5N=85=(PRFx&~!|0x9hRYLS`Nm>v&i+bT!NoCLvoF`siNo%ypM0f*ful>jP6% zVp748*V_J&k&A_sgVPyiK~ZW>B8XjFlw7P2Vz7Mlt=M^?Ws@i~BNH6zl*1 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_integral.h.DAE94075EC5D66C3.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_integral.h.DAE94075EC5D66C3.idx new file mode 100644 index 0000000000000000000000000000000000000000..a8273a09ca73a5924369b479f66c2f549eb6240d GIT binary patch literal 934 zcmWIYbaR`>%)sEB;#rZKT9U}Zz`!5^#Kk2=naWH+1_;=wR2y0)=Oh*vD})r(+A-L` z*g$4UWkG6uNl{{ENwFP6vQ-j8T4qkFmA<~dvz2~macWVqesWThzFt{!L3X-+Vo^zE zT4HiZvA&U^v1PJJvYCEzer^F!M^Uj}Vo@##1I^A$*EiEMGSM^8&&*5CDNRY$&&fkK7PDq+u8W_K-DJfCU6JN zQw<3!cKvb#sG5_5QyXRoLs4o@B8XF5lw7P2Vz7b;2w;OT7#P?O@9*>u^y~{_W@Y1G I;6O+K01>+lMF0Q* literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_literal_type.h.6A7166FB738E9FFE.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_literal_type.h.6A7166FB738E9FFE.idx new file mode 100644 index 0000000000000000000000000000000000000000..70f8c69205dde9f45f3d0363c34f1e3014ad091e GIT binary patch literal 862 zcmWIYbaM-1W?*nm@vO*AElFfyU| zbbfppFzQmQtbj3CnVaMUjJ#W$lLUXZ92Deb;^bmrmo}1i1``b2Ou*=6VPs~t_`#ZM z>L7BNjfn%OKwL%#hHFaQ-4rKT0X2AZT-T64wZ*emzjN7`qtUT`W*S3rQF5^|$ZA%Y X{R|9j2qt^PXE%o@ET+$xSlJi=y)*BD literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_member_pointer.h.DC574E93086B7A9D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_member_pointer.h.DC574E93086B7A9D.idx new file mode 100644 index 0000000000000000000000000000000000000000..d799756b89dd9428ec22f17da601d4f396368a64 GIT binary patch literal 1136 zcmWIYbaTsKVPJ4h@vO*AElC728AO1%xTGjkn+eDO0UMQSL#yPR#NuLwkb+t}1{)X~ z$SkQWNR2NkO3W-Nwqr=PN@7UM%t^J<*VlKp(hn_8Eh^SePD;|(D@!iOPS;N?D#=Vs zOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$^~Jd*?H;uW_m^@dItKLdC57YDXIE7nMuhN z75ee<$@zI{ndvmP1j$c87nG!?7bWI^Y%VTI%q!8$pr`G{@wutFNvTEg1^FPC6aj6| zgo~w><|UV8=I6mA@kqs&AxY*ZWu+#UV9|vtfuaX$Kawd>5umE#k`yZ|V4A7SO*#fl zE>X_sPZnR=#lg$O$;ZI1DyC`#CKx!G7#SE?7@1k$um2en^4Wuzjfo4WKte{s1WZ5_ zFaQ`Fl zY^T_mcz_B-Wkhws1j34C%(|^&_r6G=um*#MBup6QeV`#AzrzfHc^W7T@-a;K@bTj<+s?+XXXarSWfz6Jgoj;% zT>^ fE>;FH*zNsP1%LS6sA6JeV_*e|KmZ$z!N33jrpHCd literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_nothrow_assignable.h.DA66871630172DBD.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_nothrow_assignable.h.DA66871630172DBD.idx new file mode 100644 index 0000000000000000000000000000000000000000..84321931e3e11ae5cfa157f3c9e54243be6fc08b GIT binary patch literal 1684 zcmc&zPiWI%6#tra?b@W%=~#6uBZG||TAM9fi|a;F2E&Os89I~+F-_Ahn5OmnvaVz9 zqSJ$pdC-doy(ta^ZyrQN7;J)we-J!)5!}R+il8Wn_>%gybxd#0KpyY?zTbQA_uiL` z3=Iy>xeyvi4HdJhDLWBDjqnl^YorDo>*;Tw?uskAObCB4KNIHLr^R34Zk(A(tT~66 za>IPd16madt~r%gB@@eG6GAY)TY%Zf<^ zv8%gR=}}^WlFQ~H1Cxl1v(^iJjEoSAh&_=`K{FJ6BBcttmQ;#GL6Vf5k=8Q*xJlJa zf}Bc8dO_AFR0*qT6|07#M#eW-0REo>G{aOgSk|rG6H_+K4IN)2l94mVac)wAuU5+# za#FW0U|oEDR4P>CN-jTDRq8KCzvpFh1@#YkYmOj~n5lRi{=KPeatVIBZx`l1XP!KC zx)^Q?V*LSsmu--z#sQ~}+S+H6Exq+KmyY@v9}ogffgQFf5nMoMS$#F~Y1mC%%w`~j z0-=~~kjKfCDkN6U99}pu^v1_D06}aLMcb4JR)w=SW*gX%{a<{{CLjcxf}(9Ighx+* z++?rxe|ItUK;Q#>%r=!4@coko5KO0Wc6qjT3gjul$x??O9IohM3F(24+C7em|CU*;d+4-4-Yjt!0m$LIxt zicxWl=1>%JtvjQ+bPF(nbyF0EO3~mj%|Tezh literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_nothrow_constructible.h.2CC908809464F1E0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_nothrow_constructible.h.2CC908809464F1E0.idx new file mode 100644 index 0000000000000000000000000000000000000000..53ab8c039dcb7248e5a728301194c89e8f715102 GIT binary patch literal 1972 zcmc&#O=#0_6#p;F+I30X)VXdNN5y27jOEK`r1yNH#LyQ`}qBT|Mz~cA3L^f z*>c@WNG!2!JgwOZO$cd(*RoB0z8W0o+0Ze$E~*-eWeLN%=`NvTGV~+dWTvd?fu8^n zBe+W_dJe844X!T?;kf{{?7*VjIE_i#c;H@Y$ap=)A4mn&SdRYK`tyTv$YnP7v5Y5+ip4{dM_@zGQf zaN^t3&dJr6{T#&sfN$d0x~9nB0R};h41RfaSnyEG01)JZ{jMo9+#Q>J6uZ4=7f00t zAkY*DyQTsnbvBU2=$=qTph+wzW%u8Qu9%k;k)@E997IuJ@0vYkF8>v zM$)*-`C)V(l&Y%El?cz`DM&l&U>aqCn;cCr%`##{9KnG$zWE&4N(S3#mRU)!Twc6~ z5SD4D+bg0jx~n1z)8SI|A~|sIOpP1^f@ZF{6~|+lHm=QiQt)UT5*hyX3rZ-~4p#T{Y}> zlvi*|(9>u@!Jc3nqoRVH5mPgi%`g# XWw*BMGKcoxeE*X$*`z(7lCT?B^4k;NaV=%$M$;1ehWn^akE_=UfnyG6uFB1C^aWh5NIUKZg{{k6c;5IyMruah1tl!z=dG4A()&9CP&S~69+$tR!?GO NWn<^$Vqix|0RSXGb|(M; literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_null_pointer.h.AA29EA114199F3A4.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_null_pointer.h.AA29EA114199F3A4.idx new file mode 100644 index 0000000000000000000000000000000000000000..7262031278bf794eb3c7e710e5fd07e39092a0d4 GIT binary patch literal 936 zcmWIYbaPw4%)sEB;#rZKT9U}Zz`!5^#Kk2=nX*hk1_;=wR2y0)=Oh*vD})r(+A-L` z*g$4UWkG6uNl{{ENwFP6vQ-j8T4qkFmA<~dvz2~macWVqesWThzFt{!L3X-+Vo^zE zT4HiZvA&U^v1PJJvYCEzer^F!M^Uj}Vo@##1I^A$*EiEMGSM^8&&*5CDNRY$&&fzPzkW>Yeyc0Gy>TFD$+zjkeGE&-Lf`OBX z5h%;Z%$nbQwCA|_-9TO@E}#NAF*$WG0a3sLR8W+fR(uSoR2M@gTYIYiHBW+MM4-R%)>6jCL;>t!Cb+}1-8AS`@uWyc@oXn)9eZ-v&K6E zjg-=pvWKaHISHs5 zv4PBz%7WDRlA^@Sl43iCWUC~Gw9K4TD}8-^XDj{C;?$yI{p6%1eZ8{eg6wqt#G;bS zw8Z3+Vtpe+W6NZdWHbHb{M-Vdj-q0{#G+gf2AZ9hu5YGiWTI!FpP84OQ<{>hpOcxC zTv4GPAD^6`mzJ4MV@r_y1av`3YI;#(4#?)>lEl0cy$pKVUL2pFl$DwcvNaRNMzG?` zfDx5qWd)3{%G@L;U{rB#EqZKrTrHK2iGz!QT~tO?6-+R2GJztKk(u?KhUe9mD}HZz znK*$8B*i2Z!30DB3s6B(YFhC^pjy4snky#H_VO_DunRE=NdrZ|z~Si!3l9b_MWC=a zi?}dMI9l(=uBF`jB7wp(3^I~1VVH9mxxmh-=zj1{d!9t|Ri%K4^Zd4JfWn*{oSHDz zhmRj`*>*O5JDN&})vC#0 zlbDm9UzAyrk!#10l%Jo&kZhI2kd~Q~YNfBQ?`)+XTAW%`te>2eq_0<&T#%ivpIB6q znUfioJ zXDuI^>Q~Y(g;V=Zh~u^C^}a2N?6cZs@hUoBeKJnq_#Zhm3pjmltZ%-MuY@M7|L;pm z_uUF*yhh$nYc}gsF;YR(%f3T1;?zGTHJ}eg7(@hNK9pOk^MBpbRhoE>?EAx5pL27s zHky$a|JEIt&lshTS8w&jEtx5zeMWc{NiK;Gi}?B01h1lrJ3g;f;O90)bA@@_^8Dw0 zvZi?Tet6ra^XdO?OEkS6n=fwRn!ME>uim3K{kU!7*E^u;oweuRYo&tA&Up2jEs~IT zK03jTk&BI!gHs0<>IX`!kF*$vc;MB`GSyS)XmGSQn!UjbO?&sul<`3mhNWaiDRBO% z=zj1{d!9sdwBC9;%S8v~qEkqN}59FF0Kj%Olny};#uZP@jhr7^(|EyXpv-0TuUcBzwvVH~I z>(inW@G4qhoww%JMB_i=+9N=5_T>}(JWwE zSdi?SFM1kHSTNteTCQ}#1-$kqF@IQ-lW>-TQpyRF4`_NPpPKHpU60`lnlPup?Pu1TME|1+ j18cCHM38HWi;|1QK@4^f0Re2Y6K(i*s7AkLWM=>XqRRL8 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_permutation.h.0A91444E8F583F1B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_permutation.h.0A91444E8F583F1B.idx new file mode 100644 index 0000000000000000000000000000000000000000..626080c1ad251db3cb7d68f225526ce8d60bb080 GIT binary patch literal 11754 zcmeI2dsGzH8NlzoE-1`~Wq7)?oN5X_R0Yj4z6$DaHOtdChhTR25mtEKy5KCj! z^_2+7qe*e~M8pRLH5}^$>m!FALTZ#$P@9Np8q0~cDZ%4WPETkoc6OK98KnN#oijbB zd(Q66Z@zo)_ucRN?##V+c3IZq#lz16kfG12E;BHs3;+~Mh z5*AxX8cWO;iYYBi2SsMH5$IBjKrv-Bq!I*?kxHzf4HlZv6%`RNRl4%EB?M_O$&}v;8 z9Tj6rMN>!7+H!-Xtdb!a%4`x-@npEPW>&vLIqi1sIuCn)Q>P?TGs_9cx z*%{mVvZ7zIlQnJ5mN#|f=^1hm77p+&2y8({+Qw?})m?5@gl7P6sb zHdKf^4?sCfCU+FtzNIBxzhkYsboqONoR~6}}B(+n|C=I2FDfV%vqh17bUb{4T`a z6>>Mkx~HkmL|K*)m-8x-2&#u(d7S+GImt`FO9N$quZkIKRWlkh>4teV(_GQ^QoUmGLid+ zUd0w_yIvI0AKYpfg-ou2`6tF!OvqmLW;+_AqImY>6+(l%#R8_p|)^maonhG4#v#C)S|h;^OZi4IqdXX zm^O0!G7P=U&t~@JeW(<>pVr&n^0ts+b|4az~TntuV9|&gHU3j(-8ezJT*NHs^acYxnkS5Yf`= zy28)McmBK)sqlV?^+SKo7CRIDFqvcJ4@>`oE$)3!MB5&A9#D1keN!jNv2(KP*PbJn z0~;i1Tx*)?=*`CXCJ}>m|CTo4&hJ7#kfc9K-=i-a>3wyti2ewzpJP4xk3W1UNq=;d z>^q;UC)y-w+_f7YRPX7EJuFG%d^ay_C>pA77crB9SCi?BMxQ++Nq;;rZD^vgZ>4FR z{=iFWs=)iKBt6INN3qKz=Q}&@Nvp!AE{_zliu}@=+;bwPoU#AAl+hO1Cz5nr;--xa z$J-*MY21qO&g9wYuk?u+tm_H4;O^(X>x167_bl&dZsmdYm+NxPftN+Jq^%%S6Ku`? z+`hQ-PYU4@nq6G^C%XtY|FkB&vUNa`xm7gd-qAHL?Y-(H$Cm^xiRXODzA1{N7xB~r zgIb_K+6#kvg**&{hJ`#1Bgdhjz7-Kxl*6}Ii-=kw+Yn*nd2IjrFPWtwLw2LUl0d#1 z?MKh&sRe=-D3JC-&@1F&2!@3`4*kZVpuQC;ttf_XuNEn5g=|Ag8_&13w|%Q~UmFrJ zy)NBZ-M6{aV^orvd^mFpFA^QB+C+#LhPM6|@q z_p3W;zX^OKqDqUwNZNCiw&>_R_7hkC0Z`f5`SImWod2z!q+tH)Z2r_Wb^r+Cui}5I p+xvod)5V)|UqAnVz@XsS$`Dm3aQ!g^0M}*@0IvU$01(1A@o#{XEH(fD literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_pod.h.E2CBCD869A86E300.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_pod.h.E2CBCD869A86E300.idx new file mode 100644 index 0000000000000000000000000000000000000000..3aff1312aeb62402a91f7fb747ab58886c72ccfd GIT binary patch literal 782 zcmWIYbaP{4W?*nm@vO*AElFfyU|2M@gTYG?C@jt* zE({T5V7Q)US2&q9-Wez?sv~L(vjyfHMlP^3D!L!M)1D{M9If|b*HZ3%kwDcl3^I~1 zLk=H5-m>j%{Cbcf?4och&pCA7Pq?1H1!xE-2d5fLHOvm6FvuG)vx`!55(R;3U@l^S jsbeTEN-kCg>1Kr)!N9znBrndlklXXYj6l%}NW=VT@& zS5)Z7$0z6KrDdkm*b*c^0bNj%nqHKc1G2feBr&fbMwnm zpNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|VorK~QD#X-E?A>p2Cc0t26~}{#+D@K=cQ$))7X-d z%7WDRlA^>+VBn|bB_`#h#%HF{Jp7Pt&CDxFO)pB!i3j?(xFj*Jgub>H!|jbvElbQP zO)N=Gp{onZ@-tK7Y47RMlFXdUl1lxQ)Z`qXKWXkon0=YW@df#yI4+9M%!@AqX5v(O z+70w7FnD3s7FXsbfeNFd)U@I$ObiSS$seaZ)aPeq;^9;_QFaGOfdCJuk%E98ZcqyO(IXG+wZZ)tM|pD(=oZ-uE#P9fkq-b=f#Yg`;6&kjd=BHNhz`v@*Q0P)T_#*sswY+g)h2&zG_Lk z(VU|w+SDt)e8xq*Mt)hi=X!~k)J;%~$|)Pej0DE0oDrN?_FVqUCG*cWnPfQSo#Z`X zfd=G7$j8HYd@~ge6un>h0%(#_qEZ@6n1|Ca$uJ$p+r6l&@p7xodo-v1iRoRdXmsKe z$Q2CAvPiCAFoN@5OlZir|77uxk&Ba)gHs=-s3>*T@AIJbJQ%zbfvUw>#D!tP*VF6@C$q*o1BFFR zL|tKyj@J9JYbp1>NT9F`gN!6h_2J{kTeh8zUk_5vE(*62<`bZmAaB4NSd^NRCVN z&^r{wBM9E0OA~63U?2SC<>&wZ5_qHGU~m`%^e4kY3&+X;Q1@Y-kvAnz0#d0&4-xx4 zytTqu{uqJ;zoCw^h|34%978O~UAZewHO0xA%d5!C<_ z2n7q(J68T_UiO=pi5I9qLrg;(OdzZP21~Iz(7}48HCIfY?d4(QVHaW$k_IPqAmQ-z zgM|l!mm(7nyEu!uFie<-U4>0W6vl&v1S1zX1S+~8ywjd1(d=kicc-Z9qZLq?lY>(S zrWzJ3Kw(grz*I-;{n)jXdtW5b0geogk}%bLR$h=%%xy33A{+U_W@t%lF>ndkJ}qvokZi34mgGHu9;&5CD)-CM0L` zN#$s`%%funq2d@?5|j%>90!?o5^huw=90OXNP+UhBcsG31w^WTs4BQHG556*4+j-g zF!Po5>z4%J)t%ZrO4-FEgq?$(h3N3@Yv44y51~;q=HpXt zb?qQ)otIRtku$8AzJBcOGur#-H2o)g#r(dxNZ&6jx*K#GvC`gC&u!_6Z7TY&lIq*T mI!ACK#jelmb7xY!EI0 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_referenceable.h.2139A342F9598D63.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_referenceable.h.2139A342F9598D63.idx new file mode 100644 index 0000000000000000000000000000000000000000..7614e9fc04477a49d12b473f3a7ede432327de98 GIT binary patch literal 678 zcmchVF-rq66vuPD3axglP{l$XAaHyD6K*JF5CC$!bAX4*)P_3Z7wY@_<+5tLDGV?+zOk`q<3X;aq!EFz>fTvW9 z1`GrbX`Vw6&|w;ff@d ziPSg=?dO_h)QLIq=<3OPf2cV%w~p#7_R4Bif1ZB4R@R((w_2&TewzqAM|&5ybAfNB z8|w`(zj>Q(PL{5Z@z?#`!sC%?H&JuBn3hZs>y@MmtSORZtWDgXOb!dV8&hw$^bPy2 HQ!1k$()Y?K literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_same.h.AA5B651ECDA46A9F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_same.h.AA5B651ECDA46A9F.idx new file mode 100644 index 0000000000000000000000000000000000000000..938bb82a43fa0ed5b9c502af9e7b5bcc135a087b GIT binary patch literal 822 zcmWIYbaT^VW?*nm@vO*AElFfyU|L{pG z8$r3D1+{hzHZUn21qds&04P{eS&$lEQk0lkQf$YNY?Z{2mYI`krLV8=Y^5JsoLW?@ zpPZDWuUD2_ke#ldSX7dkmY7^ptZ!s!Y?*A5Y^I-_pIZRbQBftxb25{XD=PHkhAT_?EC^567*p4CDDv2R2GbhzbUtizZNIVnkBuPnJBJ6%7qs3bEj zF}b8z-^kF|GT9{AOg}k4w*aW4s8}ztC>Ml*X6L2ro9P*u=o#o|<|XHprljiUWF{q7 zROrXYC+Fv-Wv0{E5+pwXT~LymUX+*vvbne z$V`~9!_yBI9t>WJKttr%emzjN47&{6B@9KWIf)=O#YM@*@gN2}h=2f27=wWUSa!ky8;rrgz>Q$? bC@FXyWp=BUW@lw%=iubxX5d0dav+!hBIu@v literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_seed_sequence.h.8289C146A170DBCA.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_seed_sequence.h.8289C146A170DBCA.idx new file mode 100644 index 0000000000000000000000000000000000000000..a6ff6429f1bb375e1a37015dbe531906fef3c786 GIT binary patch literal 870 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 MUIuQ26eofS0PB>rr~m)} literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_sorted_until.h.3BC318266FB99A92.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_sorted_until.h.3BC318266FB99A92.idx new file mode 100644 index 0000000000000000000000000000000000000000..544086f8cbc30c285711d8dec9c0a88b80202e1d GIT binary patch literal 2302 zcmWIYbaVU0!NB00;#rZKT9U}Zz`!5^#Kk2=naRvR1_)@VR2y2kweqvEc zW?Eu$NwL0>p|NGMNwS$f$n8KKMa6oFMY$lHoRgTBu5YGiWTI!FpP84OQ<{>hpOcxC zTv4GP9}l+}tWht6uGYmDrKZJ~R2HPt(caAB_~QJclGK#=(!7$)9GcsloS&DLnNH(i z&4gwUeHbIYq$n}7q!{QsH2(rKS&EevFt1hSCOHAKnM2#V&TS$~&3PDjco{g=7}WT| z1Oq1v69XFqBP;9bw_>HYGmd?PD9~Zh;pYSq44ll25Cy-9e)g6{%UPaPwv0F`Ulvqe#AP9n&T;-chYYY>AAL_h#L ejKRRbjbL)RGBuyscp+{r3p)oFHv_P>0|Nj;6z0nS literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_specialization.h.E433D73BA7A52FCC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_specialization.h.E433D73BA7A52FCC.idx new file mode 100644 index 0000000000000000000000000000000000000000..669d857d6b07e3dc6e5d6253f76da6aa7e49dbdd GIT binary patch literal 412 zcmWIYbaR`+$iU#7;#rZKT9U}Zz`!5^#Kk2=nJ<7e7^G$9q+03g>pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|a(-S~W;z3HEh(uiNR2NkO3Va0G_yFqxF9t-GchN# zDzPLpKTj`%p|~c$AiHSD0POUv`e2iR7 zTpV2bFky$MA1pi=ycB_|6<8F6VZzaRKXxtU-WLfJ)?(0-gb5d=<|KmH#YM@*;vfbv U{9%CUL)E4=$6{|iW@Kal0QzcjYybcN literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_standard_layout.h.3377C5BE8672CA3B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_standard_layout.h.3377C5BE8672CA3B.idx new file mode 100644 index 0000000000000000000000000000000000000000..8841b76a7d12d553f0b245e912f5167e984e16c4 GIT binary patch literal 818 zcmWIYbaT^UW?*nm@vO*AElFfyU|JR!BihUe!OMd+4%J!v)M)AE-6aQ rNfZRCfmzJ}GnJvZD7jb}q?>(J8*~2hEtb2OSlJj@VdgO~upyWLk4*PO literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_swappable.h.3BB2ECEBD0A61D48.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_swappable.h.3BB2ECEBD0A61D48.idx new file mode 100644 index 0000000000000000000000000000000000000000..0e28ce0794bda13ed28fe9b1a014b4bb41a341e6 GIT binary patch literal 3356 zcmc&%eM}o=7=K#|U7>}sapkLwG6)}~_Gp0$-G-B(>0`>0r3KB^$ z(?w(4KV~LsqKPw0%=X_B&0H2W!GETP80WH(5EVZXgLBMf#%O%*%5#Uy^gmdWd;31W z_xC>EPd|E&c61cj2ni;R&W!OgYa)acz$3|`P;Z8f@~W+x^9G_RXZ6gy+gUZ|Q}?s; zb=pB~HCxwzEH$7X*H*{V2$0m9Zm04#n--C;f=I0+2NgS9l9ePNZ|X{my{Y-OJB~p{ zs@sXIEg)>=*%Z&nA}h!eNRzUV6y(`9!Z6Y_n_@&>noP=!d@!17BU~U3&lDLFl6-)s z>0p5Fm3UF2xpo zO`Zl?80V6c37$?0ac*XYW*BZ_d`KAHW+PjorrAV-NlvlJNgl!-;zfR(<2@rg=m0;? z#*;iF4DF~@L1LhZgkjbAPFsc|!}LsYvH+3qwDIu?c|@F;zK7wX2lq4$%7CYo&fC%a zPfZ93M&5Rln;&F!g6EXk-Z6VhQn%R{C&`HfKSW@Fv5&M;-W6n~?ha22^2mRmq;LI8 zvnJee#-Jvhpdi2kR|5f}z(grLd}q#%#lr?dzCC96>-fgmOq;QMKcTwpT~+ErEW5G@ zu^KFy5$Z?du;3eXU?hwIcu*U*3KkyEEeH{MHYpxfyX<*)SD5R1u3s%)U4 z@iE)w*1_+-v>8i5!+?FjtuDHgBZD9Req#B7)huHP5LgG>pe|_wfhY!&;`!6YFV?e+ zP9Q`ak^9so?Sn$7sGSg-=WcIg867}~IbzM~q7&9E)E}Q;`uoo;<31on9no5K(M`a2 zmh@(Zo>61An#q}$R@dv_Dq6Hs(bi}uYN?N%UTpjNgDgWfW!YtMr+>N-g2~RvR+FsX zjdjFWbkRx;ng+`;C;risudJNt$uU?dSGDT^Uhzym`&H8qA6Wq|Atj|~z{$0QH&zy$ z0Q>TMZmeDV+Vz%)NVo#vPE+SzWcPb+fB0_B#U}vf315uxxyOs%src>XVUv}LG(-+z zZXv?@XbVPYrD83yBf8IQBioK;DqXwQbK_C7q1vf_H!HGrge#`X7~KK#bA(MoyC zya6nNmGTpR8A@`ibZvd^vu}XpGx>5622$7`Md{|-7p}hTCfiwmM48IN?1+MtIRK6!43mhnOcOg4FOhW6=5RsNj3zLV-FK_R|C+F z2A~BEK;4qaNsCGrwR{tjk69&TkG|DLhmbrSE!4Nl-t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmZX*DC6{F8=OyOoXBNko6eZ>r7bF&? z=9TDW(AegZ%7Rpog_*!0D$CDIi3eH9P+Xat1Pa=s)U@IlAgxzgbH(J@ULHmsCSe9) zX^<2MI6VDe;lbdg2ox4&5fz3AGB8Bz{n)jXdtW3_Se`*%5+-aYVzV%+eflj%E+#Gx qE^U}_QEE;ih+SNiT&xUYz~U9iWUBh1?e!zdbSe`gGXpb75&{5xgO<|( literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivial.h.5138D1392FAF839A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivial.h.5138D1392FAF839A.idx new file mode 100644 index 0000000000000000000000000000000000000000..5cb618f1774b9b72ccd5b3bd2b2cbc561aaa2e62 GIT binary patch literal 794 zcmWIYbaNA8W?*nm@vO*AElFfyU|z44Ctze9N!9JXdN3`Rmx+^$fn8EeQVC2ja54d-lZBC)wSak9e)Q`p zS!_%kKn0>QqH16QqJROYpeQx1cn8oVz0#U1CeQZrF!HbqF$hV6QUVA#JpEwd!QiC` z6c%R@7lsHjFkDZwE1b+4?+g?cH4t@#*#dJ8BNx~i72OZsY0r~rj@J9JYbp1>NT6yN z1{q11AxaaN7c^d3m&qUbvDelkqgeK1a0k z;>-E;mqr(}s|jH?!1h}Pc^nKxZBFO02d_%|9*rOLF^!PGwQw=ZloMQ#aO-6A`%>wv z>|*vnLO2law@ejbJijuWIP~P2k7D{oBeeVR)gS$*(CMHZ<5ov&Q@Ii$j5{11HM>qnXJtpVv3V^`DDFx+ zapkU)9{?nO(9co!7zcg9Hp&I#h%eGc#k&yw`Rrl+^YcKw2lecy&1o2jo5Iot7;}Bx z2<=Yw1s0~bG-+XJ>BiI7{2YTZ>t-ujU>tUbD?2(o)S9}}+IK^t^^YBISK!!F=jo$# z8t$<#wC|7C0Wvfe;%PC^8RK|LhmH%i=9{9BNRw2d8<40vmA6tkpwm_kC=}8)Q6Dl{ k)KMx3!Jisk_0&PgTXj8E7hk-(u(moo&pX|99&bJR4H6PCr2qf` literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivially_constructible.h.8D31EAF5056E6907.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivially_constructible.h.8D31EAF5056E6907.idx new file mode 100644 index 0000000000000000000000000000000000000000..318a34a15a946115e512de602c08fe6efa7647ef GIT binary patch literal 1962 zcmc&#OK1~e5dO2KdF`fZ80=9_&S z+BYz8*-1!$YF{ZU8={>M;)7c^H08xASeV!Lwy_RDQbk>759i0**|xFhcXyYT(Z~C0 z0N^9Ion2m;xT-KLjnTZEFf>syU_%m;B(12j!1H{+z#q|NP3NU#lIMz2{zQfsHA6{@ zlA-g_j?QgTmlWfr;cOmGXgViqS@VWOxeOoUqFvlpUdc&nAtm#wl9Wm%K9P`yb7>{> zkCRmO#EYp^LM@7FK~89LTGr&8By-1CxB%^c7NFz|IircHsl9H9Ib%iJS9Ex~l%gW4 z>gaL>T0t_Dq-sv#_nUv%N)&51^EJ$W+plFv$!W2m8b6lzBgrozwLID3qWmY4pZ9@5 zH&TK?^wDh6Wh3O$(M{}})a-FkYkY)`hN69zA#OVb9{^ij-DGV3>(s(*gO~CGAmk54 zEkoR^;Isn(bCW~CFD=d;UTQS}!v1jFGRq7m;N{K1`s~u1Jr1fK0BnfuwM-?&#D!O% z)}6dE;-wk^!1=kjWhxAwW7Bu@%#(tHY5+ha6zR20h2cTd#};4Y?5u-g01yZTVwPDh z((K~k%p5_Xto_4*t$JiL! zM|>NsuOk=~2hgT6h~D}7W6xf)ztzsrP4=cnL^Je8`^GA--QHg1b=$kk9%>4_rl82X zl8Gz^)m()!W*PGBfmM@8)KdjG;Tdoz2)4VknO_0_0`run-=^q>p^p z-(I{wegKlYU2XxZKgxZ+Geh4W1PKHptj918576f1kP`DlCUagGW@t{}2Js9w0B6ma zA?V@a;+b2I6E~pEfHP1Qo1s}JTjfQZkt#3hjFvr|Ht?FGM&9}fWUPs3vMTO|?ojOVBT){Zisb+{TMl4jx+dwprc&^y#fyI47VBAhckPhf>2iCB N2jhgeD@#{p`3(^QO{xF@ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivially_copyable.h.91C68C48F2E17D15.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivially_copyable.h.91C68C48F2E17D15.idx new file mode 100644 index 0000000000000000000000000000000000000000..5c71b6a5313add89a4de50ed3c65b179a1cf933e GIT binary patch literal 954 zcmWIYbaUIp%)sEB;#rZKT9U}Zz`!5^#Kk2=nfgpX1_;=wR2y0)=Oh*vD})r(+A-L` z*g$4UWkG6uNl{{ENwFP6vQ-j8T4qkFmA<~dvz2~macWVqesWThzFt{!L3X-+Vo^zE zT4HiZvA&U^v1PJJvYCEzer^F!M^Uj}Vo@##1I^A$*EiEMGSM^8&&*5CDNRY$&&f!J;u#3rv z8G;E0P9{d6EF&{3%lQixk7G|e@iK7%6-bFm>4FJ}0v4cxqSUnFV?ecfr8QSfp6%sf z1!h^v}k%@<0f<;0YrkaOcmPHoMgV_z# z3$hrd_j;OL;bhi$XP`}D)?z*|8>01o>{`mbFA^xM#GoVzGxG59<1O3H#;*sdW*39I zD|p%+HOB9segMtp019h{XhyZ0ro|2nhhQr7cSU literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivially_lexicographically_comparable.h.45E47625872B5DCE.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_trivially_lexicographically_comparable.h.45E47625872B5DCE.idx new file mode 100644 index 0000000000000000000000000000000000000000..7c34a1b5fa04f7bed7bf02b09ac9f332e694bb41 GIT binary patch literal 1398 zcmchXF-s&d6vwkV>+Y(BaDppqBZyZB6Hk{_7Yk7kS35Ziu^2L$%oxnftVwp51v^0t zJ4-=9!B1ePC|FpD*xUyYM7c`D>bf&ghW!LP58mXTU&#F5B*R;+EiMLG02Z8D>=TI$ z06@P=Avyi2CpuipNEJf3P=#xPZ~?JxLo>qlEe|3tsf(}_aN^hG3@+me#GzkTJGd|r z_jO{10uNTqiLyBkX@FV7A&^lU$1$`l90o4++H4}5bz(`5s4A2Ol6V|3?JOh;q`8@< zyRZcEN!p(3J|l`4Yg&xN6o={n>YEgQ5q)8ZBb%jORU;783y72IX>j6)5wUQTs%sQd z$7=tt){vA@*@Oz))k%wvx5mfzFmIv_Fs1tp2|%PC3xcm zw%QjTJiU#b6nD>lmqrG5R~{6u7?qv`UzCnUH}0R`Gu=iZU#KN7QI#^JCxTX-%lR$~PC^fBk29VY(t+`_IY%dQZ51S~1s5D3l1hj6yPK!9;C(X#k#>v5H z0TEg4S)j0rxr!ak5TLUYK}w2?l8fCz3`P(E0ifIp1;9KE f1FSFx0|P7v14Y;b&T8+U`|I*jRz@af7FGrTi}E{E literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_unbounded_array.h.CC460754E1D88DD3.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_unbounded_array.h.CC460754E1D88DD3.idx new file mode 100644 index 0000000000000000000000000000000000000000..b5bb77f4dbb52c2ed9cf543b51b6ddb8ba956935 GIT binary patch literal 672 zcmWIYbaR`*#K7R3;#rZKT9U}Zz`!5^#Kk2=ndyu`1_-2O=A>Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd~$wXT4p+pEh(uiNR2NkO3Va0G&8RxHN7Y?2V`?` zNn&1!UIsmFFODzGOUf_JOG!+|wHQt$tg;~@})TN^P!8`4F63r~k z;*R28Fy6MKs_K$_8a_b1$imTjKXxtU-WLfJR%K9?gc<2H>zZIf{f;C?E@n;+P9vCb z(=oZ-uE#P9fvS;hI(+zRPU?4oez0&QX!hx3Y3a}q)36c;5ID}xxY^aW%B VlOPN*-z`*pqHtekI};-l0|3&?!i)d_ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_union.h.A0EDF5E23D447FA7.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_union.h.A0EDF5E23D447FA7.idx new file mode 100644 index 0000000000000000000000000000000000000000..4d068461bdbbb1c691b545fe6ca016d1ae3349cb GIT binary patch literal 788 zcmWIYbaUfjW?*nm@vO*AElFfyU|p zz*tJLvSKK%%uR9vMpNOpPY$}C2Ge+%IJp?uCB-Bazyt#)6EGrK7@1kiR<-|))qS^{ zjfn%OKvYIl1x!E`FaQ-4rKT0{0Ggy%T64wZ*uGj{lUd`Pfx@DCqV_ObqV<04TFSjI5-2RgAR`G=t$Ffz^SxR2v5Z{o zoE)4QFkzVEfx;k{S9Cvkr#(-i`S9`ME!)n*%$y-66g*9 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_unsigned.h.3C53D2566F0C5879.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_unsigned.h.3C53D2566F0C5879.idx new file mode 100644 index 0000000000000000000000000000000000000000..899c89dedc8b428ef697f48025180684067ba82d GIT binary patch literal 1024 zcmWIYbaVT`%)sEB;#rZKT9U}Zz`!5^#Kk2=ne&-|3=ptUsW!Aq&PgmTRtPDmwPUb> zv4PBz%7WDRlA^@Sl43iCWUC~Gw9K4TD}8-^XDj{C;?$yI{p6%1eZ8{eg6wqt#G;bS zw8Z3+Vtpe+W6NZdWHbHb{M-Vdj-q0{#G+gf2AZ9hu5YGiWTI!FpP84OQ<{>hpOcxC zTv4GPAD^6`mzJ4MV@r_y1av`3YI;#(4#?)>lEl0cy$pKVUL2oTlv$DijGD}3dfN>1 zI=$^J%`47K&r3}K+M8J%591-TYiZ+N%^SQ-+&~4gVzSC$0-}HgsGuk{t#~0&tzK!(6_aOs zc^G*(MHob+fg)hw@brU)2ZNU)P*|ExS`;RHYLW69qmSo&7`Zq(IXJap!qIv^b}i-J z7YS5t!C)Z?6Fz+Wc+0l4@#}%YlI)TQv!RX$8Uk{8MfZbu+VdouVNM1LgWL-fW++O{ tNd%c#T$EgF4Pvl^2nb+>F&G%w5KImPlhab@+)akN?+&oAvaxe8007W{F$w?x literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_unsigned_integer.h.B68D28746FA9E591.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_unsigned_integer.h.B68D28746FA9E591.idx new file mode 100644 index 0000000000000000000000000000000000000000..94fbdbf3c945edbba5abe6c36fd3ff3e68eaf09d GIT binary patch literal 748 zcmWIYbaQ*c#K7R3;#rZKT9U}Zz`!5^#Kk2=nHh{g1_-2O=A>Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd~$wXT4p+pEh(uiNR2NkO3Va0G&8RxHN7Y?2V`?` zNn&1!UIsmFFODzGE6z;MOHGLfyCk&;Xn%2KZW1V{i&E2y<$>X@S6Xw$^6G)y$1qWi%+?RgT-EX-nI zV(|!`c$hd6Pa;eLi6X*JwsAW=;-HW0-K$F}dBY$1)3ns*!yL45yq# jkecG6k#f846{kiWCm{x)Ro&VYdXaA&sVs_b_eS&3_&b5XwSASc++P6 zpKsgcCU<+d&Zy~qQGMp5!mWGr1fplv{2$U`4e$9Yj>dp@DFqSSL!SNz=?5%W literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_valid_expansion.h.733378003B825D17.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_valid_expansion.h.733378003B825D17.idx new file mode 100644 index 0000000000000000000000000000000000000000..e5493ff0c7d25d6c308ab3f78ba89d98625a43b5 GIT binary patch literal 598 zcmWIYbaV4#VqkDi@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmXuT$q{f#NC1wI0nweLUnqHKc1G2fe zBr&fHb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd}2;|eo|`8Zyf;rY1?pXk9PuiO*88z*Dfhlepan_{N|G=O zT+<>7FYughN_tlf1E59b0#E*4G>PA!<;3tx2meASY61tK};5=7Z{c~i6BmKQF5_9h`|IRAb{mNAMf^W ViZ@>|GcqwVz_Juj4w&m;003!;6A}Ob literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_void.h.EED11160F0850253.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_void.h.EED11160F0850253.idx new file mode 100644 index 0000000000000000000000000000000000000000..4199cdc63a2fdbce8ff52e6e9a02772421917a9f GIT binary patch literal 746 zcmWIYbaQ*e#K7R3;#rZKT9U}Zz`!5^#Kk2=nF|?#3=ptUsW!Aq&PgmTRtPDmwPUb> zv4PBz%7WDRlA^@Sl43iCWUC~Gw9K4TD}8-^XDj{C;?$yI{p6%1eZ8{eg6wqt#G;bS zw8Z3+Vtpe+W6NZdWHbHb{M-Vdj-q0{#G+gf2AZ9hu5YGiWTI!FpP84OQ<{>hpOcxC zTv4GPAD^6`mzJ4MV@r_y1av`3YI;#(4#?)>lEl0cy$pKVUL0SRpP2%*GZVss(eY)# zC`z%i0>)HjZjuu)l3G)2cCXkUFUiZq$;H4fDJCfoCKx!GfYHdp$jlnd9njFZ{qh7h zCJvwiQ5jKXFac4(08~(vnpV6JXp&xO%@vbpdwCdn*o7E`q(LbF1Yj00a)Ax5=zj1{ zd!9tI!_yBI9t>WJK-J=G;-V0>3=GkFKXxtU-WLfJmSK>QgbBkO0W<{U0+=DZ+%*cH z16&pWg*iDm)nTd+A3xr*?QHydpdq5{qHvcm6s6`Qg47fjB^N7$7_1-y0@z>-1_pMM QCGT|2&YrbrVr63h0LqrplmGw# literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_volatile.h.FF8E1D441994F32D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/is_volatile.h.FF8E1D441994F32D.idx new file mode 100644 index 0000000000000000000000000000000000000000..b31a269b9e1ec4bf0d7d902096483d31c3d4b12a GIT binary patch literal 758 zcmWIYbaQ*h#K7R3;#rZKT9U}Zz`!5^#Kk2=nQIw=3=ptUsW!Aq&PgmTRtPDmwPUb> zv4PBz%7WDRlA^@Sl43iCWUC~Gw9K4TD}8-^XDj{C;?$yI{p6%1eZ8{eg6wqt#G;bS zw8Z3+Vtpe+W6NZdWHbHb{M-Vdj-q0{#G+gf2AZ9hu5YGiWTI!FpP84OQ<{>hpOcxC zTv4GPAD^6`mzJ4MV@r_y1av`3YI;#(4#?)>lEl0cy$pKVUL0SRpOaVu3?ZPsnFt;- zJH8AUT`5*pz*wuyO>zQ8n6*dhg%>|^9e9~Ixfs}`#iW(N1Oq1%FiKe%nOQBax-YP* zbXv;B!~s+wE+eiECLjtJfC`FI(~1`YP0}l^xnlBcFApORyAXqrG$=KIfWy-d79I>< zia=pWHc3&4Ai`coF0g$S-4EVr&y#50yJz+hwO8-lfx?^|oZ2we(Rx32E#=-92{c59 zK}QlM409V$HOOHwLk=H5-m>j%{Cc2jadvUIOBjk$a}qΞI$rl|c+v5CH*fFa`qy S`wjaYrkSVrZD(R-V*mg%AKHZg literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/istream.h.57D0390027A936D4.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/istream.h.57D0390027A936D4.idx new file mode 100644 index 0000000000000000000000000000000000000000..ade10829de3010c8d6a1e7623c823531f73ee255 GIT binary patch literal 1216 zcmcgq-Afcv6u&#Ja~)??TwL6CVn>)7HYYS{@D1kx8vej`+E7$rBkrQYJnU||Q<7ZgrrayQ5 zX}vCTm6QoxAzB@A+ zl%UG1+nJl99`%HeG+x^h)Ang6S&UUm^SZ-ja*In#m*$s^dz=Krd^pP35{&SXO(ee& z%Nl1pmnccq)V)4QYt(ueV*8;H Fe*qCXPgVc` literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/istream_iterator.h.206C0ABBDFB3FC09.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/istream_iterator.h.206C0ABBDFB3FC09.idx new file mode 100644 index 0000000000000000000000000000000000000000..84ee97d0b81b248140b5699c9bd2019b9f0fca74 GIT binary patch literal 4590 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iter_move.h.E14FA613D5A041C9.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iter_move.h.E14FA613D5A041C9.idx new file mode 100644 index 0000000000000000000000000000000000000000..b467096d1634ac042c76c0f3a714dd6731b3bc5a GIT binary patch literal 1466 zcmchXyGkTM6o$_@qt3Lmg1X6|2quPIUIy_3A`A@cnkfd0K~Y^@Jr>)S;Z*fpz{FHc ze1{dY4Hh;L+^5)RbH%`5VGYD+t8m)E2WSse_1}M;u8+F(+23t8e~bb&{M}w8G%EqX zN7Ix>*|je=0vU=;LP%qi94di|aL*%dhqu4B2tzFc#jojn>v4L#m43SzO(+LtQ zXq0qB?(2Gkv}~%8Nv(1R>wa4dSVSs{A`mFd(Y`Afh23PzI|iRSIE{S~(1>wNRL&PE z)iRX2Pkh0{4h!>N+JF}%*k$Oy8*lK7fa*t{Ej{KK)tPy^>B;Z<-A%PnEzZH*tR1p3 z_2>J~`-ASJv3>BTUrd0V+rR6d;PZm9=S%Z5nZ5D&L7qPxY!#fMQ+5_J`^bH|zMS~= z#bkTn)iV1c*~8Q4tAEC>LG5)C6d|)I3c2c9QLx=hjAQ~JtDVLvE?jRPFMf-wmBL7A bbgW!)#$jxjX{v7)}^vS$z9l^@$ryJggEd z5_~XWAdg=H?usu9_gpXWlDY}f%PuAZQ&jd`{>vrv&o@E#s!HgtPf(afd~j-eV}aqwB*ghkEK3>B%?pf7DL+G>r$ypDZpv0oXr9wR@+K@J z5!alT&>X4G(6nJ**V@xMb+o`wvT^;D{NK`cu-PnafqjisXw{rCavIw2v?*gf%S$hU z-1gOHW8_io85e2DBR`=GGgb3$DYTG6&q&Cb98+0;Y74(8!wJQ(F~7yG1T{+n`%5=% zR4>fgE1rHG{P^Iu+|DL!Ua_}qoc;dx-Ou}zGlmu*&do`H=bw*Gu6{eY*m62f*SS{G zw~l|^ybX8yM%{1s&zJNg@6Y?!y^jwK9YcJ%q+e!t@!8)uzYVedIl3IyEre0aF zWDoOLE&+gu{v;s zk`X-a9rb(9AWd*I9ugSQ0OvXMeVisC9a$Ekf-odf1`)=D^WM2Lz2O8Un79)R5Wetf zBG*ayI%;?7LnM$xHOhtC*(Gr%rtSg^S(?aYENeB(6PERdptyttmKmj#gK=1fcu}R? zC77-dzF>$7hjlSdC!~ZKPDn1?&2Cy+8W+mtq;bZ`#N8xIG1+Sn-}Rea>*`0yUBsMz zcGyr{GL-#$QY{Cl+D62P)y7QrnwVsQ+ZEwrD7#y$8YEY7&@{2CqEp+dNJ1{H{=b-J zq#C2R}~3OeI)=}25Sc8W?9>u1^^BWdIon49va*=*fQ8P*#7bL;i2{`{@AI^%vR^> z^Noe(;?nZU>e@zY-K%YOx3)VwyL=}HVRRHS7 kyI^qEp!!HqSVsc@`ip_|G>mu6;Nyw{uxz~Z1~(1<1++9I?*IS* literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iterator.h.594856F054C605A1.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iterator.h.594856F054C605A1.idx new file mode 100644 index 0000000000000000000000000000000000000000..d824e3d66cd8dd6cd7cc8f298b2c397f9c1b8b8b GIT binary patch literal 1234 zcmWIYbaOk!!oc91;#rZKT9OE4GKc_iaY<38BomMU0yZkuhE~ZriN(bV&WRG?&K zwK@ta)kaXkkb+t}1{+ibItmbeNCAxHl384mn3tRi;|Jtt=9Q!t!MH)GX{kl2KzX21 znLzQxlKdh&hLp@SsBnBqWkD)KT4qkFmA<~dvz2~macWVqesWThzFt{!L3X-+Vo^zE zT4HiZvA&U^v1PJJvYCEzer^F!M^Uj}Vo@##109u@u5YGiWTI!FpP84OQ<{>hpOcxC zTv4GPAD^6`mzJ4MV@qJ3(}ywiGH7aJa&bvYN@^Md%sMzDJ{cOB3z5lJ;20qM(2iY*R>16+zgz&3~bUO(yCyBfdia$7>tgY zeX?K&A25u%s zpyL>sS%Lm7{tIO4mDXG_dA65_k%vu~L0B5%a)j3yxxik683*$cP#EMNm@v#MKw*$S zV8Spj0EI#BhY554I(Tm*&z6O+qs~RZ1#TTIjyQUZI|VNAN{n&2go8FhV7H5phvjAV za=41m3s{3xHwn&$3vAAP^z`}4bF1M33#9}k0t>r#!UeqD{g2G4*FD5gT$Eg_4Dtpm Z%r6WK>Fb)NtL literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iterator_operations.h.C497B84E2783FF11.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iterator_operations.h.C497B84E2783FF11.idx new file mode 100644 index 0000000000000000000000000000000000000000..310a0f2c0d58526589a574f3ee04b8881d943784 GIT binary patch literal 4202 zcmchbe@q)y9KhfA(E)`H3M=CTV#j2IG3+^DI0=cyO&qXAbdWhDDc9?jUTk~a-O-k@ z#4Y?oU4~g0F=5126A}LylSBON1p|upxw8~n#_pCk` zrRRf}BI};zfaU43US-XzN&!igGSQO$=U5ZM)}K+AZTJf)YFtqL8S}T%)V0B|Fa39q+(m8gCh{E)FaC38 zB?}yQ9t!7SSK`b!zwCa68}^KPj>HRy`X->8P<&5~ z&|}~Iw(lTnuOx;#Tiq6_z7*%zj@sIG67@0^E}QEQefqZSFBz@Ra^YFnISVz^u?sIi z%>vY#ya>&U&_a28>dj}bweyX*0*jU64yvxeacA5`>0;;8`sW>|4&^#<`?hwTsvY=n z_2DLyI(Kw7n$*+U(`{04cd*%{^Kk!pc+lhvurTVLX*f#l2YgrlE|XUeK?R-! z=Oh?$-74MHbtBdA6fum0bKEq1{NbIPE6zWTKpwW|+V{}%J?FXe-s|}v93$mh1+)tH zQA6Tv-;(gc*Qdxrz0O{aI)41>+>0-b)V`ce%26KQPSq877>b6$xU2#vflGqhv?rk< z2}Zu@=*q^S(zH)P*`&#}WtFz$1y`p@Sl7XJ9ja(pMPHSmkM?eR%PGJq zmZtzuu{;BKhUGcHb1W|bUNSj$%f0s5!?#z+KJR;=&o~Zb*Vljb0$*3`QUCw| literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iterator_traits.h.D23B20C46EDA0250.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/iterator_traits.h.D23B20C46EDA0250.idx new file mode 100644 index 0000000000000000000000000000000000000000..9f40782861e57c41ea67a41673108b4ab622e8e9 GIT binary patch literal 6158 zcmc&&eQXrR6`%84?(Fk|v*sgqa=-#624ilGp>ASPIQ$t0h*IR#iequw+nux5y}Lc{ z?%BS6Q(NsHu@i~JA(*O(rO>8AO@tIBQldtPs-U(>RTZNMNEIW|q{<(rje%PCI zRZFP0E%!Lo`r!exKiZp?8?fbf5f~^`9n(5MVuo&5RC5e7r6!{6e$-J1iEhN>)S@Yk zMxAV$lDLtet%{>9$DH~t5O6qs4qUI=dlg%z|z!~xA z*D~Ev40cJ0M@L`_+Au6Y+?ND8Im$5Ay@!Yw_J-W2E z7R@rEpe)OD+_3R2L6$ocHkFGi`Im>~Off2}DH$t~la+JlBYduR$Uq)jR$XhjVsP3? zBQ=PI9hzIY^4O4}4axX|XO7vjZ6>Llw#-3GP1>?!;v>0Z4;t3x7|l&XwOw28WVD2V zuQO;Xjinc9a6RH?FPm{Wu3}7)MsRW*&;_R=U6 z>l_{s_14z>b-6oSr|x!N$MLvDt=&z#oA9WJ%9vD{!l94Y*<|b&K0>Ty^5TD=xd#5S zRSiVy40X2TE~FxN@bn3*emkao(I@mge_0*cn1aw0>?$;*7JS&ke8ww3m`TM21GpB!k>U%C#nKT2T8KlZLOywN; z6PrCl8@Qd#GK>UAO`U z+fMpfLLG~aD7_8+Z+jgX>85X5i;NUCpIG4}CqjS*5@h#YP3z|9p6q-MU zLmYnwb)Rv+iP9p}EJ8h(--hbju!ZB#q2Y7zjQtMmyyNxrUD$jV!d(9zY`q727=Ai@ z_notq?>&X7JS~uEp_XOsPcLnHxAT%Q;uocKMS3mM7o`)viW5E$p7vEtd-2k|5SQhJ zC@swkR=F_K@@0!<+O6=9?_By%e+C7?@?awy7As?TJ72??K5J2sFIjBFtYqN=aqAVk zElQn{&R$l+Md>{Bo`)eWy$an|;c1SqL)&%u4#R9AAzQx2G5XanOs)H4S@u=*=OPG; zP|lwC{pHJ(Z+#Gbqg<3Cfk?4th*Ddi&4bzl?H<$-=!G8fGIO;*y?#O%u?_1g_%NN$`Yf4w~lR0GGc8%4_f~hS!{y zFIcyK^G|f`1kec>W&+pH@FbWV&qLoluj8V06^>s8jmxjYQ`g}*$2UN~0S3nl5MA(2 z{3hr(xtv%uq3*?0WoboNb!M(CN|@tGQDR$~{Y`wUATrB!LLT7V)x2BHyX$#3z`H@- zy`Oj8PveCjel%yl;>JVR=Ict>*K_PjBYzH9@4f3kR2wL-2v&-#*HqnCy>{LD4fog7 xKJZ{@znBrndlklXXYj6l%}NW=VT@&S5)Z7$3raA z&(6%riBCx_NX<)0%}cJ-%b>Bf$@zI{nduB@)&j#N#mb7IxH30M5g0Igv@*2a%Ovjc zFtBqlu!=~DXo3j_P9{bM76wLUR)(U~wBjzHO1;vWD<;qO@-XtS3Ni>vgF+PqV%c}5 zGCw<}$;idZ$-$`w5oBP9*88z*DfhleplS&Q2}zjnmxX(-mv~9t1PY5Vh={_3VXk15 z0^45E{otMUJc(xO0wJ-E|DNAKs*Oc#V5*B!a}q)9;-chYaS($IL_h#*!VUYqQ`l3O H8QB;BCcKY5 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/knuth_b.h.D8EAC1EF94216D5A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/knuth_b.h.D8EAC1EF94216D5A.idx new file mode 100644 index 0000000000000000000000000000000000000000..b7280a3e0a90a75b91c4288d47cfa2491200e064 GIT binary patch literal 778 zcmWIYbaP{3W?*nm@vO*AElFfyU|>Fet| zTj_@urxq3KCnqK8>y;%JWT)#V7L{bCB_@{?>l+ywTPB+%o9QR#=N15U6cy_w7UhC) za!z7iy1tp7k%^vxer8^BPH9T2eokgmaz%xHe0*|#URq{4jV*zAML#>Qv?L=wNiTyw z*5zd8r6v}Ee3)KTnwnRVnV1uwnwJg~rI!neGfLCaa#G{-i&9dH5Ozbu0T|yYR#ptf zmAOfZzzFYS7MJR*>Js5*U}I-s7Bvtx2NMjO;N-x_$jVTZnpWHe~;#rZKT9U{DWQzcCaY<2T4Uh(dw9K4TD}8-^XDj{C;?$yI{p6%1 zeZ8{eg6wqt#G;bSw8Z3+Vtpe+W6NZdWHbHb{M-Vdj-q0{#G+gfPR>cpOV>BkGcwUL z(9g_E&M8ev)z8UHO0KBTkB?8z&r8cpFD*(e$;{8w2PrL0Oi$IzU?{H4O#<0pl$uto z2c#XIez5Rh@KR*tVwB;Lkp?>rNHn=_mEwAS@e5Fxn}b^mCR~)7lL%rL7bO>SgBXnE O88tz=Tw7-`FaQ8Jc|$z_ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lazy.h.FFD84FDB223282BE.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lazy.h.FFD84FDB223282BE.idx new file mode 100644 index 0000000000000000000000000000000000000000..0a85c6c17f2843993e18ab9fa834554d116b2f55 GIT binary patch literal 378 zcmWIYbaN|WWMFVk@vO*AElFfyU|1ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&pELO(t}IX^EgGo699mXuT$q{f#NC1wI0nv+;nsh0utV`Xj< z$bUttX~nKUTCcR`ipjIRJd8X{f((MvV6Ov-XuTi1mU8cl1PY5Wh)KePYqpqhzDrB| r&B(>X$-$`t69$@=lL+Dz7bO>qgBVOR#5YZ|`Ro0Hk&yuy(l7u3F*Rv^ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lexicographical_compare.h.F87D7565F6AA22D4.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lexicographical_compare.h.F87D7565F6AA22D4.idx new file mode 100644 index 0000000000000000000000000000000000000000..527a319728bb9c71f540a84a609e8ea77fb5eaa4 GIT binary patch literal 5826 zcmc&&eM}Q)7=J-Pj@Cl4<$J7r42O{3C?B$-+XPmn)Cd$9gt6v&cZJhy5AUwE1knlE z9~+a2M#XFzaB*%6j>Nb~2!1S+#JRD^Hb2l9U7}1~bVk|y*rt06UR!UAe_h#|^!h%} z^SqsO>fH+%RJk3?U}O+=P@8(U&7d1FqYKd@ZY1s ze;S*u5wWN36mbO;|HYoRE`Ud8Yy6GK1dB1ciD4_s4 zA|yxI35%1bXl@okosP9IrWOiToq(g_jKfAX1vq7GP6y6Yj02-liXa_4#kU6BFpu{< zH5(Ns7M{f@KJan$+##@9K*w@C>26^yxJ9r(@ZfxF3;D!Qlpr~06UK5Do(Z_O{c$OW zi&-7`D)ba2XCc=(F&ZY;lPZW==~-8Sa_}Uq#`NrZ8^)KVTogvrtrpRZ068;v!vEn7 z7eiyPa0WgKP6t8SEOrcM87`oO3}1^kV=NFkS-5s#^GN9Ru!n55TZ>`)_;$@5Rq6;T zlY@jrfDly#HT?icNH7SS8x$HkbT8xR(Il{wkjj!ugFxL#EM2p$`$VkBx;@&|Fs`Cm^US@kUAqWPcf;`jBI80d;v*?lq<@kd{mX9%8#m7*T?!~4XTD1fkGcm z5nUJEX(A0T**Xil({gjamn@`*xj%o?$j&5_L?{i~ z`@?%>N9y6b+XmX=g?zVa)*XCaJ6t(Q!hxg{9b2 z!Uc~#U5XD){dxMr#l|%f`R`iqx=TS#1sf$YAtv))R%Q0^J3$c$5{~2x;fTL){8?uB z`aOx1J~;Sk*stHJH;c+hUy)`>opr0z#6-h#pE18vT z$mnf@{s0))t2h@)xLSac7^EjMiaqg^V;=Nb^fUUGJ6v6}mZ}STq zZ67z%H;wa6qkL20D>3BE^Km^Nk)I52&jtYe(ku+5&yd=mhtpxo@CccFo+2_z89iU6 Yj){$r19D*z0NxY=AlAqAh6aFt04Nf%S^xk5 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lexicographical_compare_three_way.h.682A24580EA4ACD8.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lexicographical_compare_three_way.h.682A24580EA4ACD8.idx new file mode 100644 index 0000000000000000000000000000000000000000..f1045cc58e68df9ad791c23d820566e12115fbe3 GIT binary patch literal 1766 zcmcgtzi-qq6n<&1?fp_ES{90`ij^UTa;l&UNR=uI8;AihM2^pwv#^us*=ciC7giV$ zBYyy5V}b<96pYHq{fHuu%n&(` z4(KQx*0vTU(i)?kWjM(>LOzJhDCd>0V7kMTBdd3(edG-L97USckZQ_!Zgom0V&g`z zI${n)Qn6-*;Ydw}#DmBn6-HN{om1#EmJ^W5(t1Sue_WyMjY(~_Dwq+mtp3InY2RK> zMHyzg;)5-Wkiv|J%JyAephqfp<=9pS{nWn0;^?^d<3l&-2J5hX(M>tK{JHn#_*Y{& zXa}uk>*gs5aPH*IyPx+DmaX?89Ikl!*7x!C+i>TSr8gQItDb%o{(1kZ^YNjjODHdR z`bBmZpZtCO+tO>WcIJ&-Qs<(P>E{k~+~d^dJpfpm!S)RLE@K(nh`a@F$7A~P>!*{> e+5{Ws?qvsH0FlX=e0>J7x8Flcvv_Z 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

j zG;K9O|D@9NRD%9lL$lTp^iLYiNF(T<0tzi47_UMKEkrJ&DMbY1wT-53Lw`zXW-0o! zo2KnXfA-S!z39&YnsosEsiYZ|=uabsHe&tfDD)iid75$_{b{19P3X^Mnt2)hxkb}% zp+9Xjy$${8pjjR0PbbajM1L}QXeNjL*}y|LAZPI@SseN&n@`Q=FkU%)W)6q(D&f;g zIE>eJK7Bif@hao9$~cTyIiFF^VZ5q&Xf@Vf!$WJ3Yx$H~^rwMOZ9sn-`OHT2rNZ?>B-vP)PMrfW6N7UP8akQxV1c!Jt;uUj--& z-tPl-fmELj*jbJR{rQ4Y^nNVpC?*LzNsQF2z8Z`QAF3ii&k6k|zUPE~qtkOjzlSm6 z<09g_N6R|7^{wB%WaU0`?*k9|eb;>WA)_bpHH-&zd@+oNox`4RXc#@Q*!zFDd^$Z} I8yd#{0@^g35dZ)H literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/limits.h.4667C41B0CB6AF5F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/limits.h.4667C41B0CB6AF5F.idx new file mode 100644 index 0000000000000000000000000000000000000000..907e95162cd053f3ceb1588f21f3c4c61c070c29 GIT binary patch literal 660 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/locale.7DCC05AEABC92EC6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/locale.7DCC05AEABC92EC6.idx new file mode 100644 index 0000000000000000000000000000000000000000..522f4b13874df243c1a2632fceb54e16b470bc75 GIT binary patch literal 180238 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⋘C_+AdcdEOdyWod|V)o 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 JX9h_^005N6d^i9A literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/locale.h.5DB8185214B4E86F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/locale.h.5DB8185214B4E86F.idx new file mode 100644 index 0000000000000000000000000000000000000000..afab89ed8b764431d1536d7e060490373fc59018 GIT binary patch literal 4534 zcmah~4Qv$G5q`VD-1>Z8h|deQ1Lgtd$Hut>JGFv~sKEk33RJO)RN5%#y}k9_!rkt9 zchBaWxJhY(6(s}#1%;F%69`FZg_^W9C@57EpiTKrV+WLi1ZwyP(MCpTs{YW~eLHtP zf)q=>cW>sKdEd;N_g&l4#f$epNJwjJ>DrWP%cBS(9akq_R$p=xSB5X^&V@{-P zxVg+s5&|HNOEhDeK$9j7MNX)U-`ws-mUjWF&29x?M{ZXomaMp)+Mly|ZX~OjDe4?SyQ*wA@}$ z&7!(tLr1!0Eh$HnDj@H}nnIHR3P<;S&&~-H~+gdk# z&$tyA*5GoDsXm%{%_#=O;qn`u%;`?OiYcreT=D=Vro%m7d5)!F8s7j zwKJwp-EK7d=>pa{6=s56Wv7-*0v@`;=8F}bzc07Z004M2>vqm`Gx}LdY9-`k(&;gU zGE+uO>(l`4L17Bxrktv$(Tq(~a@N5BFSEzgY+KbGnCz!kCTgi&8E1xIf|AIL&67La zof%!RHA4^4r8<>kF&J1wuXoY#SlmJ&jcT(Hif}e;&RE0^(;4w)t&s)Gmeo7!^6#x! zv~oe)s(R<@VZY*u<%`;uwmK|f_C1cyI5{s-2eRxPI{RF6;3_C3Gi#on)69msub$RC z-OvnE>V9i%hENNtawom7mO;_ma9=M=P9qUnm7`jOJ?=V;^}Hjjkd&pbhdZ>PCnHV- z-~DX&KLWso*=xx>g*9|OiNsZVBqL^UX^=>+@ez|K&2=>`D_Sf&*3#a>{9tMYdpBV` ziQ?*ol8so|RMbe4g4a!89@XY>INaJCe!>C;2`kZPIMl7A*TloJX=|ObVq4*cIgN9b zN0g?pqmmF|S|Qm?IsZyh*5l!(P{Sjk*hBnoAuWkp4k7S}2cNFTDYa)eA?_oKTA=CzsuUlndxtk|& z;mytL(=Fnj%}g1jGMfUXG^4}Yt#$n)e!l8RVIAFu7K7hLn2yNF!AdDt7M5HcXSHS%s#jcwxDH_=F;S0y^R*NF3ha4|+ z!pofGEtun-_xe|SVYXL@q-r*i2D#EfuG(7=k~vZNou)&lrix?|KrVBom$?bvf{@QI z&EL9m$DPJ1elnv*q-%We8b2}5W#>oM7c&kYY!b-?$a0e_y$M;^f>}z2t!sPw&I6SeHnq!$G?_-)?9dTkxP)2I5~H zJokG`Br^cAkMr&0%De?3?FXN;zFfWP8Ieqcf=_a#C!w=!K}g%0rch9*?yuql$mJFv zyv0vNE>e;Hc5iT+mf08}B39HPbxbD3KAx0~g?iSd_NskvHEt2fcwo{a^o(^s@QA+F z6Yq7lt^H|$Ovd;qe>-jm8igs^q zJd^mtryq)>0kYVFEx8|<;ZVivx0~MI{6~>Y1^0`b@FENmTM!aB_}Hi9jgu!uG7}&h zIbkDQKU)yev2eq12q6Qj=Ulw=uL~lX z0+8o9;dy|t1tFjB-acc=-ygjul4$@L;Cus6G+Pkz*IOM`7Z&ci5g-raoU}+S)udQ> zz?rj>qUVAq&ek=Y`${BrkYfku+W}o+3+6Z>e)sgMSIhqwAOXxV#Fr28HKe$B6megl zsdie=7Uk8A^Lv_xS~ht1gWgSd*7$sWX^b#tjMq96kXn2#*lXBz_&P@HhB@CbH)7w< z`}%V?1L#5CH#l-X#QTQwdpvrS-<8j`FI~JnYiGqz0@5%yZkT&0_kuu5ruXx+avCFf z_vvv&v4xVD(qdkeSa2|XMF$EiIGC!U1Lc$}Mj7?aKoNxqCY>08(g_YnH_`m~<8L3G zml0aPT;?yUz;14sef=MEj<+uXbE!~TiDnd7Ff(<B%YfXoBQDKQBe&`Q!Ya z!`s>+Lq%Cd6(+WS_XDZsox6^CwlI4vno)|OOizM64+=2gnd~AFlwEKz%|!=_EjXCO zq5~xs&hVtwJA?0Oes|}^gD*iuNC=f7C)8Ug)zR5}q2BxUaHzTv?MN=3hO+|EOl9-& z-tVCokD3edj^JWEYAu+V(4qqs7931o(J|>j_D?^$(eMU1o)Vs#fMuZEf|-dd;^!a9 z_69yUwhtV0g}J%+h1v^drnrc&xE7^9eCGUbz%fslmwRIq`%a}Vy>{}qU_Q$WXLG+_ z1Qi(FF%nTy&t+f`bVxI`($1Sv36X!&ku(5CXa4Pz0q2e1wqy0|^!-9{>OV literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/locale_base_api.h.20FE6B0B0588F0C2.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/locale_base_api.h.20FE6B0B0588F0C2.idx new file mode 100644 index 0000000000000000000000000000000000000000..0104d4854f8a4e370216009f484e902970a6459a GIT binary patch literal 368 zcmc&wv1$TA5S$V@kG#85F}k7^<{Q$PnYcKv2)6$Ns}r~>U?S1WbYFE z1qU8);LY%O?{T}?>=nSe+_u3sGz5T~1ZkrCN!(B6yj>yUdWBD7qaYiD`posq4k-p0?bu5wlI~ZIfP{a4P>GI>@ HTMghBTw`mw literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/locale_guard.h.2C2E448EDE025341.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/locale_guard.h.2C2E448EDE025341.idx new file mode 100644 index 0000000000000000000000000000000000000000..9752be5dfff8ccdeaf85722dd23f133952580958 GIT binary patch literal 736 zcmWIYbaT7G#K7R3;#rZKT9U}Zz`!5^#Kk2=nY$T*3=l}m%t^J<*VlKp(hn_8Eh^Se zPD;|(D@!iOPS;N?D#=VsOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$_3%%oW#6zeKS2H z6Fmd{%)I2B(v(#FoXn);iVFSs_~iV&w9IrGTauHXoS2hJ7fa$(GK=&f_QfY97N^E1 z7G%Qs>7|K9DS8<+bw@JPuMEYNxk;etD@si(-U6icN^7o|Jlo5|$ipnmAS?}%0s$kh z&3f~8gb6e8FpKMnn^kl_c&9y2qM3(Tj!BLS#uI)~^EvF%OF2d^W=;-HbBIm`hG@MX zyOwhAiv$|!&EPEw6XuH8{l@FN8mBh}{sx%*e#T0861j31A|I0Z<}_0sue7 B*meK_ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lock_guard.h.335C023AEB5BC60B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lock_guard.h.335C023AEB5BC60B.idx new file mode 100644 index 0000000000000000000000000000000000000000..ff13c89cb94ac86bbea75b5c372ff27896d3a238 GIT binary patch literal 1394 zcmcgsU2D@&7(P91wzbRrnC-fDG;XG3&FT`j)q=I1gGpiHL_+eF2R9;Lbd2UiHjAwX3(d4usYAWB|)pI}$iD6#M=L#r7Q8_`$={FLc$nasV zJH+kd-{Vy8XsC>kjB3 z0l{u#n+yZ$jHQEz%YAn)u8sE913PlNce+~)gWa3U>+O?^&ZAAR4!Nl|Drgw&j$LNt zxi;TI#Z7n6AwoCUeW`t{=XiN|)eRd^G}Fv@41?W0Q!~G>vcC07bN~iOLO0kwGAzw{ ze%$_23v25E;Tm+EFbuFm{gt&?37|-6^)xhlv@{yM;Xtl<_FZV>DQO{zM$p(&X&3;} zb}hOR>uNxB5CnH)x^{sbdG!l2kR*K2w+quGK|^{AZO(Jy56*G`#nN$l2=|YtXmc3T z!v&Cp7kWt(QG2N{o+uL7Panbpm_;4vL&hQ355KT3=D;zFgRs}x{kW!6-1oz|!O zRdj+*52jx(EzLZ7ow$c+SB=YyX`BOT>&wB~UvE8G(T;fETST=Soi5SRi z`S3oGlDkSW2Te&TMva=tU*l&?#4t=8BP?Wh7>h4m z`S>|F*L)t;TQwq7Z&gzy!FU)N2UgyvD%22g<6=pIg)E7`4uqQ7Jthja20L&*Mal|# fNva~Mw0_WkpMS3!d;ox$zHoDGW4`np+G@Zb3tVHb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd~$wXT4p+pEh$ROOUcjG&&f|W(#xQ+T_u$TsqrO6 ziJ8Da0eUVavm`S=FENM4_9hpXq@<*#F%(zkCV?WYC^fA(3rOpg)?6`pwwH&Ihe?=0 zSQ;b+0-6isXD^Im6lLUM;^g3zhX^t-d|S`gZXo(po{5J^gF{0WCd|WR#$g8MMeF_8 zwUm2bB+y8E275`EqN3ECL=d~UD7jc4#DJwAAQP0Xpn&PxiN^_BZci{^W@KhzV1@}Z GFaQ8On77^l literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/logarithms.h.CB1AE45B0B2702D4.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/logarithms.h.CB1AE45B0B2702D4.idx new file mode 100644 index 0000000000000000000000000000000000000000..83b81a75d73f3b8eee5cc59b15d2979eb4544456 GIT binary patch literal 1420 zcmchXPm9w)7{;gR>bTmItFm<~l+CGFGu@=rZMV901FMk=rCkrjLYvH{?O@u5ne5tv zH$4b`06mD}LGUw(?pcq5e-J@Dc@i&*c+&)J=luff3j^q}H)QJ8=H~4K2$|c~ zc;E*1975<=xJ1C&%UIY%)n%SrB7~SFa#gro5b8KY+ok^X9#* zqk$hfxX^4qh!*wiVUH9vJ+I{m8&Yp)+a(@z=y*)pZ8{ouS#O_126oUV-l%7D7W4-~ z>+f@3F!9}Xz-<-|#vR&@=eAk*zos(LX2ZbkaoY=X#bn?_pOU*>u@y&1+qwBB|K&v@ zmQWVZ!crtf^>yi<*!uW@984(7>asSz`}y1Hhl{roimvK_Hq;G3b+r!2Q5`^BGSD} zlGGKoBq@{6oRgF#*;ProO3spG7)DuAQ7?kLGARRJWwmlaK56F6q9iMCfxIfI0$;6C z19=Uj0rHwg6HrTQot0;H);pIZQJsP}V+I30PxFA!U-yAe=wjyMu4hLl3Qh%yn(6%+ bwo3WN+r6i!UVng7-nr-Av)yyg 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lower_bound.h.9E9D47C95A91ACD4.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/lower_bound.h.9E9D47C95A91ACD4.idx new file mode 100644 index 0000000000000000000000000000000000000000..dc315d5f1ce03cb5ca3a8ad710949525440dc9fb GIT binary patch literal 3980 zcmWIYbaQLrXJBwn@vO*AElFfyU|=0ct{VAcfj>6p$UG$zYS1lb&CcS(1@!$AD%(Lt17|s+GRJ zzO$8nXmM&$v3_z=lD=M9azS>weqvEcW?Eu$NwL0>p|NGMNwS$f$ag>;Ma6oFMY$lH zoRgTBu5YGiWTI!FpP84OQ<{>hpOcxCTv4GP9}l+}tWht6Zq{Wa=A^|Jn%fFYvT2#=G>*`;(!69)ASUMMXQrg) zm1LGw(%fUncIK7kXVX6Uz!HsqVoF(JUNRjmOvx-Rp|6cFzs8poC1#e;K68{*7NkP$ z($6f8PfpCqNleP2eGnttTa=ocUzQqQl$w@WlnRMoq?`(@=2EPzfVEv^ZjuwQqO%aH zuPoXTX~@GMEW*H*#*oGhCKx!G85!6Z7+G0wsam&BR+3MID2QW-x#@k-jIaBANPalCpteQvC8zL2lPEW%~aXDC~DkPZ8zC$zO)ITOQRvs=n201~PH+Z;g7;KPuVGLnNyjX@coki~F|A_udc$RS6$v!iOh~%fx10nQe$K0#RLuQk2VQei7CS0rhH&k|tH{p$ zW4_*>!2Q6&z}ei{3YG$z5}S4&uFO5e$i>CU!Kn#LFF9vkTD+aXas;oDp+8rdOW3&_ zCBZ*}`To^%r3)_LHTSe6^S&(HbG^h%>L$oIAvtw~78@ZOBwmxndRx%cemnxYG z=RJ*oDp27Yc9Vp_V7jAgm(5iE7_EFh^(^{mQwHl>ykW%UZMNp^viqOW!f5iT=}z1A z7`~9;3QmFBz{wG08QEE;iC`^irl8gI640x5pz#s(TLjX67!N35l$YFpJ#$aIJ u`qT76tAD%5Hg0wfPHrAvK7Ii~AqGB#0v-gD7r_)jFo7Lz7~p_07#ILY#}5(! literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/main.cpp.0E43507EBD398BBA.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/main.cpp.0E43507EBD398BBA.idx new file mode 100644 index 0000000000000000000000000000000000000000..f0d7998c190a530f45655c1151e975c322f35d93 GIT binary patch literal 14602 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 i&Q{J*&Q;D+&Q~r_7F}+z|5D{jh>j literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_32_64_or_128_bit.h.6306278CFFAA9DB6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_32_64_or_128_bit.h.6306278CFFAA9DB6.idx new file mode 100644 index 0000000000000000000000000000000000000000..c6427675493e7e3a892e86348550b941b5f8c68c GIT binary patch literal 1208 zcmcgsJxfC|6ivThwYaDhks=NqT#~jvOYKxB6zeEBh(pNBOKa$RuQf@f1t$mn5svC6 z=qxDy04MP;R2-ee(Zu@bFYq0>$+_ne&b>qKUc1%0PXf?%+asSTqA6I?A(i0Q2~7+- z++%fwP_vHqB@+@+$3gIf4tiZggyJ1Sl|+^D<~Fry716#w&@Y69MEEACM}jV@!io(` zhzHagx(s>Tp`#JPnD&DX@BXui8V?v&f^glaHgvh-{eXDzC_-N@u_Qi=+>>_$=0@#0 z3}p1aKIt*MS;18s_XRFjYS`f_(#d~2h-h{ymCFMKt^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmXuT$q{f#NC1wI0nwyxN3bM7hBtEAs zF{d;&z9=s@p|~fx_Yp;*t*=O$XJFZ#g9#l*?MX$lhtnwFCY;uIGp e7b}Ap%pd{+V9^WYG5vb1py3pGbq5n8GXnq`zMLxn literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_heap.h.4511F87A5D6C0634.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_heap.h.4511F87A5D6C0634.idx new file mode 100644 index 0000000000000000000000000000000000000000..7d51df3a7f4404b741f317b8dafe871b45d9d1ac GIT binary patch literal 3138 zcmWIYbaS)fVPJ4h@vO*AElFfyU|a~+eDQ;Ul| zOHzvxOY(~p(lU#ROKNo#RH}`zE67O%%4}nqE9d;&g2bX!g=8QNG8DIybQG}4 zfm}nbJ{<*Q>opl{5_8h?i!w_xa_tzBt;!hEGILU`^!4?ft@J~SQ;UlAlarG4^~#b9 zveWewi%K%n5|c}c^^FXTEt5@>&GbQj0O}|z)=MnP1>xkJ#JqHUGd&{{Jp=vByyTqH zlvMqk%%tRs3jO$axMg6CdKq-JF1{!=Exx3(AeD~xW9!V0y^4RoS9Y=dH!-;= zznI2;EG@~*$th$L5Pi!l~vx zOXd*YHkZfL1kGGFWwUJsp>NH}HdiF{W|=4NbbB;!M7iBA5qWXb0nNJk0f8l#y&HUh z$wEdoS%zIktZnnoZ?DQ|@k^^P zGOnIA2hmhtaM^XoSaHD-G}Wgi8IK%3&u|GSjGS?jm_Mw^a-4ICiHA!^R>unF3mz^b zStB^_%fda^OT46RGV^fBvdhXK6zQ<*An}aYjo>_{JGyq+Oy!U9`nOASdcL*t!#8M7 zwWvLuV7YzsJ2c@xF}-UQjZS<5rZ!nwS-9gS=6e@4{#yPSC@jt(E(~)Vm$%uPx6AH- zM)U8S#X8o82U@-Yg^|lt3x12(ExRuNM6*)2u4#c!;_BaM!qtN3Y%G)({6`aJC`!#q z1leC)lw6z*VgOt8Fu)IEFfgzqn4AbEmql-&$Tz7#ISzIXPHrAvem(|nge)(D$$?<< GA(#M1sr&o@ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_projected.h.18D5DF92FA25D85F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_projected.h.18D5DF92FA25D85F.idx new file mode 100644 index 0000000000000000000000000000000000000000..9f1b01786682bfceed95b0243f5fdc5f280f4685 GIT binary patch literal 2122 zcmcguO=uHA6rN4nv}qPEwzV|{wMas(?zBy*npBXM2AdYaiU)sinM`KWG5Zr{Cou(Y zUZkQuiU^8`hu#D|h^UC-#e;$f(wiV^5wwCmD0py&I@w%3BoAhJ-+MFjy*Kk_X6I)z znaK_Srt&jYhj7#i0O%6U=Zvy8p-8c)O;QlTsT4fn6Xrvl%R!@pOT_|2j8h9??!(cM z>^*M5RbJ=~!uNa)5fnyccV{F3Ud}@`;>X|<-?`rOM9-h^lO6?gHzSZAHEOW z?7i5pC5Muub?8hIE9B%KyjZ^ zv4PBz%7WDRlA^@Sl43iCw9K4TD}8-^XDj{C;?$yI{p6%1eZ8{eg6wqt#G;bSw8Z3+ zVtpe+W6NZdWHbHb{M-Vdj-q0{#G+gf2AZ3fu5YGiWTI!FpP84OQ<{>hpOcxCTv4GP zAD^6`mzJ4MV@r_y19V?OWqfj(UIrcQ%q)&i%`45Nx1E`JC8_B}i8*w&H#admHNH4A zJufwduJ-07meAF{qSV~{vQ&DfBydX3$t(u>6)B{V+3_X7jGkg;1tF0X0fj)?f#pDD zZc-w!2++*-jQn6zRm;sJz|X+p$Kl5VCKx!t1q4It9}Tn8&<1mQBdSv$L?Wv2${9GjJj# H*$_+sdEL9P literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_tuple_types.h.DCE7A337E608B7BB.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_tuple_types.h.DCE7A337E608B7BB.idx new file mode 100644 index 0000000000000000000000000000000000000000..f1aa5d9a8515c0e5e503d292adec001256f5c66e GIT binary patch literal 1792 zcmWIYbaVT`#=zj5;#rZKT9U}Zz`!5^#Kk2=nSQK51_-2O=A>Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd~$wXT4p+pElDd+0XnrPu~ILC4mOpP7UZPT+$OLs z`nieOsqtWDd`V?NYB8Oxh1i&ylbV~FS3*}iGxJh1lj-cw;>;>~#V1{(5}07(ONtUR zf!Q}Xzo0TcxvVHPjrOsLWNlGuZhl!R(Bgrx73kU2qSU-(TE}g2aY;%_Y8pdvWo{Cv zKn2=c{0KN^)|b~;feAdWu7lO%&V8ZG(pa=j)VJ5}^ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_unsigned.h.1DBAB563162F8611.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/make_unsigned.h.1DBAB563162F8611.idx new file mode 100644 index 0000000000000000000000000000000000000000..4b4cb01f5c2f8b5f754d99aa79c3839e084ae4cf GIT binary patch literal 1802 zcmWIYbaP{3XJBwn@vO*AElFfyU|0G zEycTEs@a(M1Q@vd+5JVp1Oq1%BT$x+nN=jR zCGLFd$6ee^{6GbvY@woH0--=+?$>$Q?^k`}W)c!);0oXf-~kg19H5dF2#QkEik|^# zz0#U1CeQZrF!FFoGDu2;<$#34(+?IN3|@*r;b4|vVVH2V-j7{Nx%Wi^g_9VPBw@lZ z=Q47EomtWS;GOn7iDsB1fx;jc!h{_@iL{;Hb#yn-kOZv+Q<(6Vg?p}-cuCy^3P&+S ziNef2=DlX}+`iK1K;Z!102!F@HN%=W9UkxA1I^~-;M9c)!@La?2KgE0u%gtQL_we$ z7@r~hL;LR|^8daw6c;5ImxFZkz>HvE;CiLdn|+HvC61GYm5rT)lbeT^0ahsiRq-NJ YvLTqTfCY-MB1Ab6Ol|}dSo6UE0CcP|9RL6T literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/math.h.FA63853E54A56DD0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/math.h.FA63853E54A56DD0.idx new file mode 100644 index 0000000000000000000000000000000000000000..a9fc909a7245f46db765ae30564fd1605b56e73b GIT binary patch literal 6006 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 WbuqUjzo4iP(wz#hB;%HDA%NeFgiR6v literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/max_element.h.5F6E46DDB4549D59.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/max_element.h.5F6E46DDB4549D59.idx new file mode 100644 index 0000000000000000000000000000000000000000..a7da06da5bee3e0f23951350da2f331bb44ec8f9 GIT binary patch literal 2426 zcmWIYbaN}>WMFVk@vO*AElFfyU|weqvEc zW?Eu$NwL0>p|NGMNwS$f$n8KKMa6oFMY$lHoRgTBu5YGiWTI!FpP84OQ<{>hpOcxC zTv4GP9}l+}tWht6uGYmDrKZJ~R2HPt(cav|iulx=)ZEm(5}MnZoS&DLnNH&%&4gwS zeHbIYq$n}7q?qQu14SIvF8$2n_~gW#oW!IYP+TH~F)&l7SXlw{c4cmo6EItcd|b*^ z`_4*@hk=)mfm5GBpBqdta56J8urV;QvPzb9&T3Osp9N8%&Y;fC2_hIcS(qRSfN7@q z4zS4JI57Ff44!ZXCJ{~MUj10yDVNs`v1P9bl)7w-17YAeX^!_72Rrz^j{oWZpp~S$;rW~2@3*`%@?i55j3wc&2xJiTc(OMcuiiha z7R#(WdcPO1qAlxJu)RJlIsvbuPY>cvo*k5$hF1|R9{`gBDE(tk4$^&!&1=4$n}^q= zmFe^M_@?MD!mH@=jcFCL*BdUwt4KUL(a!a)?hd?)KIhd>OO&JPceQK?q=nF&G%Q5ljvQlLx^B0FY(}m;e9( literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/maybe_const.h.9C98AC87F7791ABF.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/maybe_const.h.9C98AC87F7791ABF.idx new file mode 100644 index 0000000000000000000000000000000000000000..4229d3fbce3dece1ccfa43e05c5d458d36f934da GIT binary patch literal 516 zcmWIYbaVT|$iU#7;#rZKT9U}Zz`!5^#Kk2=nNdJ-Fi6YHNww0~*LSwk4=qkDD%MX< zO48RWOD@Px*H0`e$xKU3E-BVGGBmbKHc2+qPtMOR0O}|z)=MnP1>xkJ#JqHUGd&{{ zJp=vByyTqHlvMqk%%tRs3jO%_8Y3i57o3DDl+%G@MS=oY1>6}tjyz0#U1CeQZrF!C@9F$hV610F~$v3&j@ zxXvbsk&Bs=gHszO9If|b*HZ3%kwDer4C0b7VW4R_i6BmKQF5^|hyja3Ad|WEUSf_NLwtO0YHoa5o()We9Yb1XPO6o@zP_`SerR!OQL%nO#v0h?PE(j;*B<7{-o9P*u=o#o| z<|XHprljiUWF{q7ROrXYC+Fv-Wv0{E5`+)+lQQ!Xiz?$`B6=D0vpO@cEI&Jyo;E__ zlAbn}rzU2{7o`@L=9I*jR2I5R#w2AP??*g z2+RZ**BaITmu!E^!@$kMz@Z_?d8B0L-V<{$d<7R^o81wvvS|2@Ak0WI)U z3W6EJ!=az9UjX9)LnkK@#3?RHE_MeoIQ)G@g^m`nXtT1iv2$`Uu!003fD^`GU|>fu Kxe!b?1QP%jOj(iu literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/mem_fun_ref.h.8CFA00FEA2165792.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/mem_fun_ref.h.8CFA00FEA2165792.idx new file mode 100644 index 0000000000000000000000000000000000000000..0bc68ff894f5b9c86bc9dd6141fd0297cfd9daae GIT binary patch literal 676 zcmWIYbaR`-#K7R3;#rZKT9U}Zz`!5^#Kk2=nb#PB3=l}m%t^J<*VlKp(hn_8Eh^Se zPD;|(D@!iOPS;N?D#=VsOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$_3%%oW#6zeKS2H z6Fmd{%)I2B(v(#FoXn);iVFSs_~iV&w9IrGTas3qmt2yWpO=`UpOl%GSX3Dg6Vc0{ zpVhgkxgdMvi&E3*X>BRGhl?w7lRyy*bVqRhzUak85qvIuG+A1>U3*HE@mzcE-jdFwBCuFh4+EK=2VI`QXyLG^w{&mzQ5x0O*BRqm(G*0RT4iA(f!- zmNXO*(S%$;2zwXsy(B_H-0#Eo4bHA(h=igM!b-x^7cb9o2X`UnX{MhLvW-Mq95_KN zhTZmQr~MpKhLb!bFrj@s8o?mIoJBOYEJ;bq#TcS66hulMwFi!b35}UMS;8?=TsRj7 zNW_71uT=t3C7pS5#e+;a>t0?D#k%Sk0Ro%UUEhmRTL%klTH{VF&9(~QfKpn_J7QY%bw09 zkvdT~)4m?GDaBU*H;bi%9<7!g43kVryAr9wkVMuUdNQ-_&?`0D4ndjS6(Hp@8irQW zDCc#nl81GyRRtqMtKY9HgN%v_v}#d#me`#~)Hoy4WrW>Kw1={YTb1OBCRB~BI&Soq zka7m(IPDkPNJ4&0F8Q_1BAwMKqcd-4-pFjrmypxol>mPaiBzPVx3V9VgH!C8Y< zgWCqz3^xBh`}O(UKdZJXGgWVP&Y!O@G!~bZS5|8$>uVdETiZLkd;156N5?HtH;*kC zJTa(u?PV;N0KlrjJ%dLE7Y!DDF^$L00${&v1E6>tFpWkD0L&XaG*~luU~tCZj=|y$ K!!(Xd0N_8k4HvBd literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/memory.h.38E36F62DB1D52EE.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/memory.h.38E36F62DB1D52EE.idx new file mode 100644 index 0000000000000000000000000000000000000000..d3867b1c2f5040e8fbf2333ffcbc2ccd5aa32f30 GIT binary patch literal 418 zcmWIYbaR`<$iU#7;#rZKT9U}Zz`!5^#Kk2=nOA`{7^G$9q+03g>pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|a(-S~W;z3HElDd+(a%lI%`d9d%K-YWGB*k2v!c|r z;$k4JS6Xw$}Cr-6ieGuPAo3)1)*IhjPHMN}%fAH36^C(#_O_hZ*m z?tPI!)nW`{k}%aO2RCnEJMn%3BNr1V2d5lN`0(-LE!)n%=DO7=2ffA9mXN= z7Fm`MGM*);1>=IyT#gtQ=*;;7vAOT&ZR!g$cqlbW(= zW>CVHSFF0Ff+cONy)om46U(Nv7H7r(%)sTW(ZuLP;B7MTR=dKSMiNbCi%q0pvlbOT zZbT=Wt!cxoKvcclC)}KG-t{r_i@Ir@n1ctTYWGHnYw)T1V^^QL; zb!bB%t)-Kp)Pc2qH+#x-vfZ*PjCgaG(;Ye#V(UKTY z_8H^n-G#RM(@2lOSdX$*mPpGW)udE{Xv_GNt#U(KhNkT4DRXfx=z4_D?(OeQRj#go z-G8HdPKAiHOiiz(m$}aY;6Gf^oM&gIZ<1`0JeSPD_;+@mY#XZO&(-d%JwDs}u});FLJ~*c2})T0SR;n#zX` z9Uc_>#4s-w3$xTiQ3HZf(7*ITGgEvx5b6sA`TUG1&u1lG&S%8MMLwOToy+B??r@Ua zLYA-SMPT|4=d8&0Kj#-I7_w3hrX(#*e}#EjGuHvk(N@$56}-0xW~2q`FH4$KcAuG- z<#dH96lWzx(29yLY96CeQ2#4EEiDqE0F6ZG0^_kF9@U+$5P`Z>$h^-03|^lJ^?o98 zHn!diqId#u*ta@gnzXTYR0kV_E>!0e-~Bn=CO%Zl?)3n154vLp0VhB$08>-F{$f&iVe-Oj z9JoBU!ykiV4zN~Lfs>;KZzP_1^7+lxH#ulQgE1H*;H;{$8V0XBCO+Ky;lfo8_R$n! z2-g_|oEE08VGl#9WEj!*NnBaAj%W>6TNMZrRvI^bgnqZuDRK;+bU zv%AzpfRXRF2V#)$u^e$&91aw7BvKP;My{}&OMLb%(^Jh6x5qtzVvdYPM#sxsEE3zn zC6mc)S(i$tOb($$E7Wm>6(WQfy8#^(BXrm{;(yei$1ypH4j?qb-#zsPaQ1!_u)2I_ zpWuk6!DAY6#NX?`7Xxr4=nnQ^bdH4WVXp}i66V9hWiD!udd&flC?6dzbE6ZZqKQ5d zn}~_#EJ?gM-dX07Qc^R4Oj1%xL)4rI{QCCG4evfohcgc26!oR&J#LHn>dFUmwY2Xw z?)@m{NPlhrZIl3TWT?_`viuEl+F*b~CGIk5agbdq<9oRAKKkG8~3n$k`j&vOHV}zeBzVoG) zaBWb;wX^N5SPnv8*TtMUn-*QdJREUOzPHr1Y3u2Vkxv U{aTwCaP7IOCPy>;4PUa&LI3~& literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/memory_resource.h.DC75938AB83C7CCC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/memory_resource.h.DC75938AB83C7CCC.idx new file mode 100644 index 0000000000000000000000000000000000000000..5b1d780c3644cb659d745fd2033b649db762cff9 GIT binary patch literal 490 zcmWIYbaQ*e$iU#7;#rZKT9U}Zz`!5^#Kk2=nJ<7e7^G$9q+03g>pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|a(-S~W;z3HElDd+(a%lI%`d8qFG?-WFD*(=)yrTg z$Snf;G{wq_p|~Do-os*^?vMH%DpcVs9J(SLK3EWKhI0X z8+#8G0)<7{MCD+@hmRj`*>*O5JxEwy)EFilYCTJ0SAyXmMlL2!4o-ELa8YVbB8XjF alw2$hVgO?k2AGmhRb5O`Ul+&7$N&JT(1Kh5 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/merge.h.AEFB228341672878.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/merge.h.AEFB228341672878.idx new file mode 100644 index 0000000000000000000000000000000000000000..cdd62ca633c681638ceeae95c7d73bcaa2a98b0d GIT binary patch literal 2940 zcmWIYbaN}=W?*nm@vO*AElFfyU|L{pG8==ePB*LVOQKgI^+Kj;3Owi>(+8|Pt^h1kNi;DG=laloH%90DR)AbXJN;10mBqv~TcluX;hP!IdPaXzdJ_as*27OjA!NAGF#K6YD$jZ7? z+*<9i^o-vS1y&4JtXv?1fs>gLq5zmYijT1}FmN20d}9VrI0K^ym%Na?NJaO9ciQtL zn#<0vU$9MznJtqHm!goO7%X;VxU~4RgkU_6%@?mAUH zoVDlQYo&tA&S22C^U;L2fBAj&_TAV*G~xU} zuF3Ip4%DFuOaAbB$nAEx3r+aXs>L!ZkKXSE3L}U9mh~&xUY{17fF``aI&aObiN=%A z4EgjR-sIUqscC4cGrEfRu0HHH2TiqfpJMZxZ|CNrsa}~re~)j9{vtHt%QvP~%wBJ} z3{6;|$!0>*&A#PmW{XEB+PS{f-GQe1b6(w~V(usC!YPX#6*5D(cA=@}XDJNKsP^5B zW_He*mlkhlupB{CZQ9r{VdEkVbm7pStIQ?rT#lj{!nCj;**9PGG@7trzJIk`>4FPr zW+yR!Sd-;A=MpmymxP#vF)aD;aOuhF0n0=P;Nh~AwS@D&EZlRw#7pWXNDG66C_<4Q zyPgb!XUT2}=RJ*oDp27Yb`#A_r=CS0ZOUMMi{>WbECr>M6DA+fR8KxN-D$fX!xuDR zSaHoH1umvxIaG$rp3hzwR#d}ipdwIFja?C^!0l(&n?(PkSx}UklL+!waZz%yJBR^n lFT(&kjKRRbgJ5#~e5Q3^{)h6Dtn3_|+&l~%2q{hk697dW+Ux)T literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/mersenne_twister_engine.h.32BEED209FC6FC30.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/mersenne_twister_engine.h.32BEED209FC6FC30.idx new file mode 100644 index 0000000000000000000000000000000000000000..aa6379e8a6ed0db8a30cc9a7e707c9278ea37a91 GIT binary patch literal 40120 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 WOIK5~Zsr24Wxof8wJaN8*#7|;N_KAm literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/min.h.8DA5F299BF82516F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/min.h.8DA5F299BF82516F.idx new file mode 100644 index 0000000000000000000000000000000000000000..340246e91b12b1938513e974bc3600b3f4a89a27 GIT binary patch literal 2054 zcmcgsT}TvB6h6DIuB+qqw{qR3c2~1zmAUIrR*M#7KWGL0tWp>)v*V~kvp>v?rI|$3 zTSfF#4;3Ut4`mP(L|AV@6h#j~RusKhK3P}~_M>(0E_a=zs23fWJNLWiJLfz1+&gDi z%jV59c7W#2mcFQLh&BKyA+K&|N)nJctgINQ2}<#pZg@foPo+3m?Wq{3HLXMj`TrqN zx4K|+Jem+S*&~rJ^HXAqp@^z-Sk}U-q8p8#}h4{Iumx#3KCRuc`DbcAF$i^Shd z)gE&YLi}?&e>KeYZxq$;xTY9A(RC0?z^p8EDXJXA7&ixTn=WfQmLd@>9F!6Vy0NGk zN|z`ZIHvMNXAm@)6FHbn;`+Qw&HbN% z92{veoxvdKH2u-Y3DRUnHVr?h`*3Cn2gN0TeBjGS4&cbNKrUDunL~mvOW)DsNfG?u z&p>nlN45=eDB)cD*P6*EMpKI526qOc130p*sR#`#rms)Me{M_>@J<{;bO47vBNc&M zVf~a9KO1*vqUuuVaW^VQ<%P`1TrFkEtud1Q4!`HojJ49nAs4s` znJ$OC;58v0coV{a(}-1uh|`L&xW9|DOo=$H3L|w0Q+KcA-rq|$y$V)2nfSBtRl9ie zWru}qGe1zqoCo(E&0XG}zn`S)wz<=6g8c6F%$Gwxo6ltP`F&~I#HP?#!TDRNB?mdO z9bV=#S-xi4f3|Xz*0{B5J1Z0suMS`){^jz>3!}B{C9RXwB`{x7C#TnhcqeZ{*oo8V z?enkFGcCXJ^-gbCEN%>#ZKb z$0+bQiXuXKs0a!ws@Eh4jDj)a4{C~-YW5?mSWlxaQR);A zBcjV{CaEBmB;>g{6pt5#bB^NFuFA!!l8RgNGs-UNYDAAKs-h{nRdiL^&{HH`U0>AkE0yd2P8NtRyF+QC6AfwM0KF%4_izH@>qzDF9y$fIXnc zlj{K7;{tnutE}wObMh|u<-BE~ zAo;kp0AnClV2dyAl4RWliTMVq0zU5BdgaE%>ImvAZH8i-7~;c>b&E$F7Kugrcv8(U zay&B5*`&Df@Ve*8N%pDzpud5O^Cc>2%q@)*sn^@vz$X{3jT~DTz4*XY0bw}|a^LS) zAHB9l8rMq&*y3(!=EDLEfl!^pqy|ZJSgavdV82eCzj;tv{b~m|(84w@-&lbCp|Haw zB#k;OhGGS_Y#gO$f2@3CN!5e;ecXuW%#yOVbLXT0Ra9(ym{c}rZBS)*`BuRJ0M!n3 mJJ936N(TxKgipuF&um}&I&_y;c!WxCbroPg5xjXh0N@Xr9)+0z literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/min_max.h.B8043771CDCF322D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/min_max.h.B8043771CDCF322D.idx new file mode 100644 index 0000000000000000000000000000000000000000..423b5844da0aa18f93b5fcae121d0d5e131f8732 GIT binary patch literal 1386 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/modulo.h.FB829A77FA8BF72E.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/modulo.h.FB829A77FA8BF72E.idx new file mode 100644 index 0000000000000000000000000000000000000000..7d4febcfe7c1a9c15112a7beb740b4912d398c80 GIT binary patch literal 1180 zcmWIYbaR`+!oc91;#rZKT9OE4GKc_iaY<3;Iwl|k1ky5dQmyp$^_{KsLyJ?3iuIF| zlJxb;k_)oa^%ILqGSd>1ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&pELO(t}IX^EgGo8kk!W; zOkkj-<|QWOq{e5a(bd+>;`qd(%#sXXjAka&+veiL+*G>SSx}Upn_mL5v$!%h36x-q zQqzi485tP#N^7o|Jlo5|$ipPcASw-#0s)7g7W=Y~uhM7YVN%mmv##iV@J@T4L^F`* ztrh{}u~wI<)UJE&&&b8Z$-yZP(aFFNt@mTsQto|`KqGA!Y$RdAUl#7UUg9Nnlbwf2 znq683Cd|Vm#~>$);3=^yA<3z;t0VFB+4YflMhr$s`pnqP;BtI36%G`=U-<&$dM7n^ zn0tY|c(oK5&$>WJtmD7uH;{Ymq}>rNkh79=M(~sZlp+y4^>FnB1W(^y-vhxjvNm!- z@XP|uqF_8=Xy+t?IK@TD#bBF2g$NV?BLN0jVGITaHUyJt>g^*-oafxkWMyP#VP#`r HMo0kwp8hnkzy;Q57mdhh_HxI7HWMFO0h)*5xsMF?@a!I4b0(u z_ug~AbHDH2oLO2}*opw0YA&t!3|9*Sz&`RhuH8xQA&K{!JACPAv1gf<<7%$)PImV2 zC3y%7Fy~KZXZ=)wlAl+gbV0K_n(0HlWq%8bwKxP8FrI zj$u2J-e^eq3wr;2TheT|)6#U;k>sO=mvlu}CEe=vNrmm?HM{41dRH^slA4#5{0maY z)VqVGA$2P#2zFclxJyR^_Qj1@Y6pZtYMfW^k@2n9 zH_jb+>)r%6K?qb)EzrOSrrw-=zWIal7{e41D3whqGz0|1rIz!E1IQ2F{#p6`CJtc~ zhj?mRpTL69B$a;s)2&D1mFf4H@MPFioeeX&xfqq1sfUqzNIk+@tv-BwY!Q~z97c(7 zVu~?gG&4FAXNWmN2s~RD0oySYqdu_V)%@Q#zCyR&AkCMdoMf9Yd&nl9H*7UCg>>mT z!uBLxmeeKIC9{UqdcLsQJ9qDXaQ$BW8`69-lJsT5NRG%pVy^9tQMXtvMydH!)wcwt zYN?d~W#%(gCM!mnT4p6cyvmVp&;R;upA(9UaT?^FcNFxN`P|n zxhhi`qg*Yw5+FG(9|>eBOc&BjGbRs_#k*{5(G@ZNhzEWM2_Ot15yT;sgWM2O$JFN-6%&#)=3R59`SJeb{*V7#`itBQ w^^Cg8R@+8b^K!@5o#S4z{h+)IFpV_q{7rZ{`o7NBR)4b=!qKr9hFGxZf1(y8m;e9( literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/movable.h.18F69015A5EC72A6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/movable.h.18F69015A5EC72A6.idx new file mode 100644 index 0000000000000000000000000000000000000000..043ca6c6911b0701dc8621711fabc94e7236c406 GIT binary patch literal 916 zcmcgr%Sr<=6wP$nVzn!^6me6*b)t1Bwwo3T)e5>0T!_Muxy_8xd6A^G6+fZB;o7~R zU*QLcplcT{T$-S@U*H_LFV zNXR`HkBRF-5(7*115`>L#MBEJzR1c`o9j`Bpm?UXQ8LPQPI*n!G%HJ=2mkzkYLYTn z3CeYBxO5Zml7Z5xL2?p#CbEM0@?4*Ic>CDZJbgJbVs;&LWFU|JnA-k~_?b1SNb0!NGQp2SHxo601UoZL1-dZ|54tS;h@OJS+F?WMHrK|BnZOlCJYnG8v0cL%%_ z?}gq9o~1Vrg(LGpdy`}X$si!uN$zdd9` zp%MUKRu8EJ{bd#=0veJ{2w`gzb|euJV$Xw4AIJM$h=ig6!b-xGm#Z7NiPs?JEY^Pr z=^(+(z#)pdaLrk1I?IqoI81y3L+at-5V|hr5hk%dKm%=?U`4%eYi3Z1}2!iR@*Jw7blQl&9*l|WQi29<8a zRZsANsg@BINfP-aa2dja%YySLQ8c6~HFsQe@$*dpfX1AWOiceg`TqCA;EAShEO28zy{7?q_2=LE4tTSuh56F_Oh#WUy{>j{zjZ9T zVpr|w8NKJ+o*vhJ?CRZD7PzvWWx{9vR(!nsdaZ>zs6QSfNQlf9DX=^=z%rlv&@DTQ ttV`>)opAt+<*=5+i5ynGENq?qW=HRAYiztUQLfsxNl?x8@f=R(@ISWy-#GvP literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/move.h.7690FA5DD03A0CEA.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/move.h.7690FA5DD03A0CEA.idx new file mode 100644 index 0000000000000000000000000000000000000000..396aee37450f723fb64ddae6621fb8308a67a290 GIT binary patch literal 1664 zcmc&!T}TvB6u!Iu?(R6cR^qO^vcLnU@6PJr?94DTtFxG7 z`O*&s5d=j=Jw!-9Z$b1&Jrq(<4+T*X^i<+QLRLgbb!YXu(YtnG&YbhjIrlr?ojKFp z+0kJZ1JIuAG}D5?7Xkn_;!8I)@p%DutQBS^8sfcbAQ&_zBl*a*f@OHcF(aTQV~CPy zWLp8pNn!%2DyIo)WlX@gl%NSR5;&u!S8c_+;gsAHF~!M>U?M>^aF(8tjO7%N5+xxH zA#9Jsy}F?35G4|j9YgBqFyu8uO!3IjVYH#K8O2Z&L`qu46`IcSTH3mh#LL65iH*kC zZBUevlt~KE>dG`B$00>diNkA5Vq{e;SmQ<9C?-sbhN#HA#Ez^Zuc%vE@hiXpIuqW!-Xy`)jQ5JSXFEpl8#G zHayTH zbcBvn5*Y*Rk2_af5Bf1dJ*fAPohAnly0-2sAHoFwBEOfw6diVlgCrt**u1$TAOzD> zuIxm?xkpydZOncG*Bl$2pJ^F-fngu??IN3ey?pPr(dB((N%8nt0%Iwj&}#H#_w~~k zPG&yg+FEDrYM1ocz(Z|eW)9af%}gs{!qE_eNVGI~;>PCa>=#@cf}uTx;FPjkJM{DF zB8IC#)dm9ZP%EpB{Opi^<#q#4w#7Zy9gz)+|l@11`DC z^LyUseSY`;p69(c_egV7Q+Wyi4RrHBfRRWI0KfomQ4&~70yM&xrD&+a(aZ%yQnSPe zq{ItmFDr=B!BTV4kS%J&Pp%DAI`)Jl8&TyJi^L;aH1$Csq zhZk6>H?RZT8v?wnpK;(g-r&GHL`D#C%HzSUeN@obgOh^9dPzzWaa%>DovNY;oZwywRgj) zy}aONNUGN@GCcu?lQxi=U8}#F4~83o`kSyGFcXx_A?AlOXR)m|BgP*hzC9xj=`jdw^n(?{=Bqi|TI@dNN zv3^z>#5bf{5m}IA1z5o_Cp;-=hXaU%0Z%?WDiR8bkAfXHYIGny17IQ$HLDMRsZ~G& zRB`b@V7#IUo-9dcU%K?Vt`n#Xm}Qe?^T6S2zi&I5HDV17U#MF6M5oeWCSb~0J%8XM z{mQ!^UfIFUmYlnO8LEagcvKb6~&x8^z{cUy?M+Q zHMd~umet6p_Tkzl88wtNY?D!Ye)|>$s&2Q-s4K5ak<(S^ zDv`%rPq;iX;(r z4z!fzW3v~f7UN|M%9m))MQ$jcx;RrtgocQ;gATK6>fi%>tX$Bq&kIu z4~DiQ^uj0;R&ljL10zu*BfHVAK=oPmib!Xc zQ-SC#T7i5fUxZ;Hd4cnyH_$Y0Dylk=t@Ke u0N78=ozW5T$!TqTLSj;~R+o~dPX*|22F4}Hv0B;G%VwHv>SQxsHva>Wj4xpT literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/move_backward.h.8235D363C9EEEA34.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/move_backward.h.8235D363C9EEEA34.idx new file mode 100644 index 0000000000000000000000000000000000000000..39a3fe709b38bd725fa725bda11362e854e29989 GIT binary patch literal 5386 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/move_sentinel.h.09059202E0D7E3BC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/move_sentinel.h.09059202E0D7E3BC.idx new file mode 100644 index 0000000000000000000000000000000000000000..5c2b4b2da0968af7856b307745e894402fde87d8 GIT binary patch literal 1080 zcmchWJxc>I7{_z=&6gthQqVf-D0r#0lzNj;5MMUMK^%@;nmdEJyOQK;3ofp1PR?JO2MRBLUNi< zs6>ZL8L=RQRSWJ2!Ue>R1I-4mA9xUPNnM1cfW^h7Wn98#h(o`wUT|R|?(2ma3Orag zizTxFX@FT&Bal%CH=EG5aTs7yR}GL5)C-Wqh`HY{O(otS%7PNLW!OJmL43-I7cs>9 zA?i}E$3IFX;YfxY`eB3Ef&`KVg!SB86x4`o`v~(;^w?n}DWkIWV^H}LE#J|@!HFwQ z)M-XXPo=l}tdUJkfvFi?(lPdYefz$BII6G(tnn@cVCD6rvIaJ070xH~6EVIicg_lP zkCri<8X6p$kMW-Qb$2oHu&ZuYKxI0{r{N|)?zBG@&Vk%t6HXY?R|LmmTPJC~bwkhh hZ)D;GfOyaq8ThBEhlQ)o<$3!hZ44xmnKUr|Yu_<8KU)9* literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/mutex.E453ECB8CC08EA8B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/mutex.E453ECB8CC08EA8B.idx new file mode 100644 index 0000000000000000000000000000000000000000..e327d7b9f66bb13822e6dab8d3427eef724ca251 GIT binary patch literal 3898 zcmcgvJ#5r46n<&?bG=^w|Nq6-=?vvmK_{e&ik1z85MqdYj+3*R#KCrYcL)hFF)*<) zAqEf=3`i_UAU4FnR;iR7#8{OMs4O_;a*^15Pm1#0`*QjGUi@soYg?O}tHS^r?p7nD z3U>p*gubK_>}yGb)I1i@b%fByI=UgLkcd>PsJu(!9Uoz#n1_jyX!YFri=;x<5aD60 z{~=@%>YJ4=YR*ZJ>1KIDUeK z+abYI*$!#(h)~B1u-_p)g?&dgV=6nOmqhGNLY*}D5w9?J0H1&Bl zbf^$q7!^`U9GI<=^c3JIflW`XREI?#H=3?p-InM>ILKyLO~J~^2jRA6br@4%>AeT+4G&tPe1GD53It0wUiN$`Bm}Y{+m9jc0@&b%4_!QV=OE4W`=^jOMVI!>JtFIcx_5pnJf~mNNj*m&5jW0fusKPYwrj zm=39Bg$w{>?WFd!(+iMxoGly306}}$WZvZ5unr;Q(1tcjY&}aHQX%;S0HzbT z)?8`8I0kx$)iML7j7S+84a3v3a~$Cqu*@qvp)_SGcY%@>8I0+0L{C5zDC>lS6frgp zL=l!nDzcVE^4jnQeluOPtYsF8vjlWqRi!fR%dILN8O4P4KUzuJ;vqL5KVwjqSN(`oj-`O}Z8U literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/nat.h.6F825F99E94F81F5.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/nat.h.6F825F99E94F81F5.idx new file mode 100644 index 0000000000000000000000000000000000000000..4dface8f78ae1340ceb450cf40d064533d88dfd6 GIT binary patch literal 376 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 Qz{s`)fQN-hLXP$EKOa}Rvj6}9 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/nested_exception.h.4E1A59394FF72293.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/nested_exception.h.4E1A59394FF72293.idx new file mode 100644 index 0000000000000000000000000000000000000000..4fadf08dbb65203bc8172f4fd0e3d33ef49e2882 GIT binary patch literal 3496 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/normal_distribution.h.884FB25FED1AD797.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/normal_distribution.h.884FB25FED1AD797.idx new file mode 100644 index 0000000000000000000000000000000000000000..60f8f015005591255781ee8dadd2980da03132e9 GIT binary patch literal 13814 zcmcgz3s_TSAAiqj2xA8X4vdQ%Oc=;zYz_trEWj`>qL3go#J0u;Y{D3A0}(+#O)*h0 zO9d|}>StQ$XJzSENoI;x-ftyYR$5y5sgakjtA6jK!G}kB#robKz%~8yW%zrbH z8BL@!*H~?$!KZsbzjAH$l$o{VcIFQ0{;$q6k))2^wOWhTq_M$?C?%NlFk9?{2D6dm z0s27eIEMedWh9~p$ZxkXoa6yr81{JJRCK?Y0~0cJZ9t=$4`EkjDp2aGwN|UB08Igu z7Hy5*Y)Su|`*2r!SXP z8_RSJ4Kj@enzO=K`H-17Y$P*UHTBwRqh4xYhu>dpF1A?L)fg*aq|m@%^5{Ds^6)ib4r zjsoV|a*Nhxwv2ofppTJJ10R*jfsc>U9a2+)J-#@oW3OAvt>rcVX`#E;NI)tg z6jD0@TsIEz9FCDLvgY3Bms+X=z3@OdzC>Iy%1+SuxYuIdv@NL@x#D8jEEbAK*$HZ1 zQ`B*9z547(FFXb|7m5p`?F2RJel@v#ux#QuFFYt3kkSZgw4I>l+V+lZt6i^UIAl)? zNQ)sUf|?7fPfT6n>z@Zl!^sQ81(9}wnsd5->>T}#;z@^UYOz{EQUq{aA91L5W&Y!V z5$n!P^}<8ocvG|~j?5S5OVIcot1p>O9ht0gH0O$QB_u^q^N4Ys`Cp#!)Vtz>QGgVT z5J>F=aNW6ZVKAP{dePSSyP5+AFFXuRUldjpX(woWY;8{~@O!h40HM(GD=@GEbG!cs za9uD!0BC*dV|ky5cYX1^!vg6e(-kB|&>R~p4HLc^bNwX(jD&N@Bji#$p;xc*gTwEg z{bTy;JP-k82=xsOu@f|Y({evz*4n54?HFGwE|riJp-p64{A*9se*7RG7sCaL35$uf z6Ewa!Y^D12vGu13AcFiCVqhWE!SM%hhvC43(xLsjWa7+_V`q543(gTGijvz2nq!sW zPVcSgAI?G-fz7fAnZ!;|bKTzLgVEn`FF34NEG!NsDT12eW~{I(V*sc>x}$5C(4FJz zOU4DpjX;)xC@C(5Mv59mE%JF^a+>cnKC%Hs>S<5YNaL*`kqh~fO@gLi$x`J>0agxbVhNxhrkFj5Co2J#5Vw@ z-96fwK5wfB3xaun_OG|TE1cm8CD@LE?U)ae0muEivM+4)bh6ok6LA1qg z2dDH%WF%zOhPk$3T(tQp?AM0*GqJD@3t{5eHcZCE32oRI8ZX7TOEDf3doRUEguT~+ zs*ue^zD}y&UN|T5K*3Ev7F0($4D+$)F61s~AH&B~;%Zp@)%BQl0neh01)YmZSE#pw zx2i=QK6`|d8j|en>|pux&W}&^uWDaZ*c9y4`}nMn)Lw^v4`xAWe*4igng4kzgauY8 ziF>-+lQ*&$VUP8wks#$`h)wR5Tikk0t0i$9atNM`?{9 zGgC4jN6Sl)`Q!3)QJf^mqJW}Mltc-#II1`vB?E#qWtk?^Jv*_$PAm*%R8(}}LH1$; zu@=C6B5uQ?kzc=geYW}aWI-tF8;U#e+>U2Ym?_2&J5_yI@oZwdI8Mw0tK)BJH^0Oi z8P2*nPiA;m-uZd$s6o>4-t1}R{H!2nvkg6wD z8l<6sEGaHgqo_ERANHNw$Qg1L6nmpUbn(`_}%pdvqd%$(uS3 zqU3Y=`#XtCeu#byO2BUMgN~rE#-NU#D3{#Wc5;;@JS7WSzmi+Y=g)a}*Joj`cM+t) z!w^KHXX$kmwpYRn(uj=ACIym#bgv94rk{_h!c*Z;vjW6p{k zpWedKToxRwa6>}do>hX0EU>!E_q@00$bm^ijymXq0~RvW?FMo_s*v$)!+g*#ZWR2` z;C)eDNwon ze*c2h^s!&b3?S>Z$Q8XCN{4LJi(whPylROWiecl}goru1?SVp5w>*gL&e$I%jXVF) z4w)^Q(97L^O@xd>kWoZb2)ZI6{uE>&8l9GbA`oG}`9agb${Ake(Wo?`G#lMr5M*gl zsewl71a&rA6M|G1sSPyJC+R2B*}@QS$fTo}$=x(y9x8K;S%^(QK1ane`3h`2id_V` z5_4aP2@zgkF`P+KZKxb1i%nX7a%G?IYJ-#OqN*Qe0qWiisi}GTo$%9Vu2!+Ihu7`Z z@(xT~U*ja$)Z6Qxo_?D!J3aobF=+bYO=dF-g6+Qb+u8G9JoO9QawoUhF`;bkGu1sKl zqTT?Ykod{hyrbQp%9jn|++8U(+df+s{{jo9R(_=5p8BWy1*gT{9~jg20@ZM_H^&hTg!q)w`|^+y?*whwL?|~UDrV$qTUsuNFB3yn*E!j zmsF^RuVX=DuX)Pn%lg{4u)u0#JAQq$-xph)LRQerRe|Cz-PS>DvhbDZi9x|{cRM-9 z{zHf6?>eg40W+sym>>uhx&$e96AKVR@8$yC?eFB!jwZ-(PWW(i@FmCyP6PwRNMn-F zOF4Kyn;A2iM$#Z@I66NQq%24lj^3>iWD=g_L32n?NKZ!r1=f{0=~HNw8;~1@ieY#o z8;~D{N@Rj82q*|chZ2G;3@8jkcdf8Q2vCL5C4wqPHHAhc0VQFmV1VUAc1aDgug2!{3 z_Br`g(J!x#2}m8^%Yt8_$OTV%)He%I$P+G@)Ou;jkq?~&6IEUxKiW(7F$;p>8)|iv z%zlSiVD<60?az#ge}WBGmeIwp9ozBtu|ZPW;Xv%b{^Q`(Al)K|?<11rvj^*z^&)R} zfY5ZBb@xVfp_|YBFQlL_%XYL!cRQH7{cA7C%invWSl(+nc7_EXLsbCWXVlkgkOT>Z zb2-UD7d~~`XSX)&`P4QcsLv0U7o3=ZOFDv-a-<9-fJ_8lt1q@V(7cx*0Uc^AfcrgR1a1{fU;3W)H$}J71 zw7R--sU5`aWA25D zxCAZAytCLj_LUsN)b>k5R;Ay1ufKjm-jyLw2YeE(ihFM2wrekcd2Zi^iIzHaB1c(>ZlacEJa=w-tgFuTI)6Fk4ZnLV=x8ag)>1xcwdkxG>I3yJSoeR(@t3<# od%3@Q)z#a_m+v3o2LezN0N(V+fkXhpOcxC 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/once_flag.h.2A5C4B7BAC4511AE.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/once_flag.h.2A5C4B7BAC4511AE.idx new file mode 100644 index 0000000000000000000000000000000000000000..b51bf6d6e3abc637f8d6528e38bd84e7c235a4ab GIT binary patch literal 3800 zcmcgvdr(wW7(aLA;ax7sBJxjdFEu+iEe4~k!2ekZVwtdg$>RX@0DO8gIX~;Hc!vi40 z#)%2BzNCTG$G(sTC=d$?!5P6hq&7>N14sn{ro=!35ICp!7!2n7v-i8L{avw&Y_cM~ zLLGSZ>Th#C%xHwDu;Ouq-U*Ob1FcFWmZbOBT`=GLnj$E28km+fx=#R9SN0va{X$I= zoNgsRE0Ka0T6b?q?n_op#u{C6Y{gsahPP&5NhsGuN;tcxeAf&2+5EZ98>C#U<*e<>vHTxmZi?jn3lp*NJ=>MF0dc(e68nuJnHc z8s}nlXMEINda9T<%cPkVv(Rxsw5(z!LN``z*fl4wt`KXftCxw(X*p)Wk}eJ&o*R02 z4^N7lX*uXCxib$NQ&rWT&YQ!X&tTp4{zTn5W#3nfCB38{KC&yJrwpdAg#azYSOS;s zuA>&k7QBqrM%Ro`hp!i^4Ar%%*DZxg9;+*KmG)iQbVI_DW(?PyC?6WE#ge|$p9r^tB|&4wfZ8Kgwm+U48Muc`KiM%CxptLb)Mgn{@x|5 zrJ;|H4oJo7%ki-CfOZNB6$Y*_rbo~k#hP)bR8cw(*%Y>MNQ@QL5xro1FdLysU4ONn zej|GjW~D5@%#6YW{nCWm4+?(8hM7urzTS3x=nf>|@6`_P3SrC0r}v?gERZ!B`QBzX z{oe3L&wbg+fA;<-d?{&7kCs1>kIiCy66tC>y3)>+EqI6xuxD>uXXtYOBP)=RXA%+sNQj8>5iv0${_|lZPf(Fra{H{ObjiIH+m&(g N6O{>xNt2Q(@HZ0I^TGfC literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/operations.h.0D4ABE387B894C56.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/operations.h.0D4ABE387B894C56.idx new file mode 100644 index 0000000000000000000000000000000000000000..c042fb3587490d263ad36d45322c2b21900197f6 GIT binary patch literal 1464 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 W>1@B-;q0P0rLK$o2>(|C|NaI4Vg>{N literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/optional.BF78B44765411FDF.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/optional.BF78B44765411FDF.idx new file mode 100644 index 0000000000000000000000000000000000000000..72b3124386460c2b30bac5d1e02b358b20b71a98 GIT binary patch literal 38168 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 Sz;Un9UlV9{7|ph&+5ZAhRW<$q literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ordering.h.652ED507A57E28CC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ordering.h.652ED507A57E28CC.idx new file mode 100644 index 0000000000000000000000000000000000000000..81a53851a5a49e9f81d1344b5ed4a94991c48b24 GIT binary patch literal 660 zcmWIYbaU%rVqkDi@vO*AElFfyU|Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRJV<$BQL27^QA%o2W?s5p2F)$ZOUq2Bu_Yyy1*!2R zMTwcfkV(x;Ov*`(&rGAa*N|<^ERHWu%uNN_$xvLGn*@r;qSUnFI3TT8T64wZ*;2fZlzU$!P!E)7KPN> zG1wq+brc|+kfOxQl477-K2UdRVy+!SQetstay*pFkd~Q~YNfBQ?`)+XTAW%`te>2e zq_0<&T#%ivpIB6qnUsj7;Z?lk}E3o3Vad5S*NJ9-&(unQCodFeo_U}0EXl451W zP!8iV6j$aZB?F^Kcz$be(CU9S>`W}2;5cJo6O|U#VBll|MIs|J>xqA1FI;aodT}#x za5Auovx)P92?mI2paSvmeVXF^C4JmXTtEdpe8lbr#XTyY}^?vMH%DpcV=n4e}1xc87n=c+VNM5_3k%@;* zj!jMmCJf{`%7w#tFpGdjf;HFE!)nYHw}rpb>KW+WSL7j8h|o^2t|HT zAMEo9Ofb;R_xCd_%SXcgKo44668|TQIMpFf00AwrI^nr_z}d%@?1>lAs(PeG(M~5`IW^ozidMP zP0ar`T&y=*UCz!u1T4G(V5iJ}G!h7tCjp7V+!H`v8K2V`mv9nXBm42{$KQ#qT(EEM z$w1OTsQZ!%p;6;+>90+VsS2q)Ey511qe>AdJ^pIFxNGVg9cnAfrm_g^HoNVL0Jw9b zSo!3syLya@32e)?l_>(?ZN(p7)s-Kq&!(~o>@j=niU2smOl{hIzju8am0N_cu2g4H z1j?X@V@UN#%HtQ-)wz$o%wtqY?5ne?wTb|HHQraB^MrLzHkCtQm)T`k1i<$N_DW|) z>kvjI1g^-cC{_f(%`=y%;ZNV(kCB?d)*NezA^_eV8hYo;rk~!8``%)1v13^P+g)ayjFu7Ds5df-0QlkY>*ox&^`r5uH)tEGuq*)1 z7~LV>*xWmgQ30{GWLXLo0q}#&BVVjT9+i)q@|p@D=lQs~pt%S% zXcNLD_XsdSd#E%@Tfp|JAMVz-p*04I#%1cVJYb@6rMhxn`($QEy{j{X^f*Sl-vZLjS8qw9*f7l*TTt zs|u1$W4G2_1u3U-i?*c-x|PNrt)~h?d)_uXeh{B{j=0%|+KM4^7%Ng1d8U9xedgk9 z@7o^^CiNbiAX$?K4s2o8$d&S-!S>GbrvkQLw!EJ7N*F{+qYNO}(zqtQCI>VKknqZ5 z2-`4*gjb$H*gk#s?5oGVVn;~ex>Q{W1P)V4PRk<+r=hCkZg~n}`{@^U|M=bD>hYwV z0HaE-l;;#|yE?9WPMfDDk_JAm>Tj$bYd)Fu(7})HZ20x;v!{|Cf(BG;l$QX!ps}5@ zFH2|+lcNqAnsk_{p$MZrZ zp?e=pT#2nIxt2;=m~s?BvIzmzut0NBt_7N#axc(YsFnqqhw{v8H#@zzDlMyS5Keuj zz5qB6c*D!D^xnBc(ymF@Sb?)Knp?Q%@AltG7!H@i1KY%vXBswvW}Vzub7|M`!=xD% zg&>zhEPx*YGm=DJV&%J1;X;Hm6H85EiNBvv9m?E0U7VJhmY$)ZGZFcd0H3)ZSXoVj KJ%ln6%YOinXp0vB literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ostreambuf_iterator.h.645371D68675D6AB.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ostreambuf_iterator.h.645371D68675D6AB.idx new file mode 100644 index 0000000000000000000000000000000000000000..12c4fdb630ba00422c7eed9573315b1543913055 GIT binary patch literal 3250 zcmcgveN0nV6u*5S($^{l1WNg^0?w4zz9-lgr5{odw1{LwST>!j<+X(>(C)pWs8ci1 zWz)^gxlK*f$=qV5Be*Tm>A-D4W2Qm3iP?}ibqOS!n^9&qKiJ%TuN>RF_^&qU$vx+H z?>Xn5`#YylxZmxE% z9a*DPy*8}Wa&CW!$Cy9l<=mkFXGbjF?h366dXdNP^LaUM3+oN*KDWQg>p?y&iy4L~ zD`x6=FUK=%eLX|3V1vsW7&jO4``m1ZX9^2u%wmnKnPCIXL41PaX*bs_d~xKK2F6Sm z8tLhbzlCjT^>~>ke?8mQ#<*N;pvC8Jc+5fIwhS!j#wQ)o6%tGT`43kV^>ArJW7P-~`w^vq4bkPY zy2Mt}YhBPb!GOO7HxA;wV~v8F&{JF-mXGi%LhuS=kA+zfPGg0;sdcQ?_*KpIi3CD} z+sf<6;Zdam#ik*WN~AQRK=I)&KdiI1<}O*9p&}+?*kZ7lL;-N$uNz`GJ<3rLDh!(q zW|JrYK9DZ|V)NbEv;s}Qa87m(BMN|bHS7LOo3L+=iipFoJV!D>gnYFq07h5#QbXr%btzCHhG`vb5(U6!)%vyCEo+X2ld~CY zCQ=Xp+d5Y-`vHB_tw59TXn^RG02AF|fGE$@!yxFGWw~mhJJ10tf1KVUtBFkX+`8D6Ys5(8GE!kZ% zbaUoBR5^uEk{PiX$q-UW=Edec)PSMbr9e+`DX;putNr^xj>P2^U%Pp0USXcZymeHz zzGe|2gT6efw2n}5ElA9?WAEQvY! zgG~!-4*h4vzG;$912&!-s8(2AT_uv;@HjG!*g+5yItX80Xdf`gzUNFjwQ%u#iIasL zrZ>BHWmZYda7s>!{nfVR>J4hIx?L%<20*1q(1>PMn<*&0lC-ET6uhmHw5qKXWTqr- zY8wU3q$C}a9fgqyrE#U{pe?5F9RFBx;(1(@{*S%=D;)LcGvE2)=A9icPg(bDtb3d%=;`YpI+KF;~k0lxc5@+%A~}d z_}R&Laylf~xS8)c)LXq-!u9qfGqk(jQNCYX4GuVw^Q*WFJqXFIn^F|nIunC45jwDPpFxTBZ zSfsYkIVH&pW*okuFyLUfk}OIt%8qcO$Wc@U8qpDC7X(tyN<3X?dHu}FjH`Y4Dy1)! zdVmq1{a83kuUpoS`#&=^Qx^%4L*`^b6W;FV{wY+c8HmR>B#dcL2FzE&6s4I7bChNw zEK!=3utsS%!WO03344_0kUO#=!jNl7)wbZ-0m)siJzYEe6jkyIzDwqW%oIo(-WXS0 z824a?NslWojCnA_gvVxKyo34Pt(p*%zi9;fHjsvNpxE{^J4%nz=(Z#iOE4+*wFl0> zV{m0=8|OjZxH1k?Wkj>_lCj;WjRfEHp&r=>q0^nbgCU+t}3wK6v0P!5l q&lS9m2iFKGB1?H>iT@3O&)AsV%)MeAHcyxgW0Qf( zrWmG!1vKiCd3&~FKPMt$LE>=|2$%Ky#BrF6e9d*v9)L_4v@ zvg~3hBF)j!NQG8qxvD*i+$-~*NhJ0YUW%h0#C%v!B9xd?$~^8TiC z`=wQBRi|OPoi3#@@%_{J&#i+;Ms~q{{7(c}`f>kq4PHMp@=R^!Nha^uzb{UkU*8yc z7j`Ezd1dkQ$42klUB#+eb?f2mW4VDJ{+#_XyW7xyI0Sh>(@cd-9i>oRyt+P_x{fcK tm66)$*m&J)wi=K&gkiKY0I1~H%+d6bEE*XAjO1wLnDrK;jOS`S$G`Ki|5^Y5 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pair.h.3C5C0AC1D8B5C97A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pair.h.3C5C0AC1D8B5C97A.idx new file mode 100644 index 0000000000000000000000000000000000000000..1080608a31d2799937de1369999ce402ec39cc7c GIT binary patch literal 23962 zcmeI4dt8-8`oQ1091aIx1OXNCpx_Nu1Vlvz1Pw%iN?+8}RipzP>?F4UZ`l@#nt&~RVmDGOo^71gly5{zW^v6#>AI{A8%)B%2 z%slhVGtbO1HYzf5W1J*~Cq*quHD{ZsBuOspFDpCKvb`sZsQ5XzD>el7J^6PL8rA{0A=6+1&M zcIkgAHGtJQ{H}FEYI~h`d(n>H-z7V|T*u7qucdtrRq{^g_+=}_gr^~hi;M3u9| z6jN3fjDKr9R7=RRJZ+B8_K3>(V<;2IfFPlXysMaSw3hPUWWHP8jxRsxzssiP@^5Q+ zy!t-zY!a|HXR+4u#P8yxGXBH2tqo@*r?#0rc*j%iO$z%~9$7l(__t>MS|UqZ zm~Bb1WG@YsRH1GC7$nV6i^%fL$}lI!`FN;-#gxKEDapf>GCw`jlKn(#mXwg5o+2d% zC9uCmk~U_oMeyjLwy(37W|-4Vsb-Jtg&8U4cyo$5)tr_c(%xBZqZ}F(q~>IAp%w94 z9~&ekTT;wHetv%8L4Gr`%$Zq!i3tgQzKaqw7R>iEWoBEFO^MlAegVTrj7=Pw80eRn zo|?g)U@bLermBBzh|=c!1^Nbz^!4|%q$Q>-OfvhWSP~MKEb)tvSF@Wk&FW*R>1l0f z$x@@HY%}YZrM^#e(ko;wP0M~FKKqGGvpIgTsWa+LOEhP&zDu$sCz~_b=*1^zrl)p7 zd()CF^Y3$~CNEB6(vjH--Kf^2PObaiZ)!!YlkL9O)LM&QR~nU*qlYJ=7F=l)m7lz)77rpdzeOq-6) zG`DJ-#NVZIb^Yn&Ml-p}wxp+-QaZKXBy(aXC_lA3VR$WRY{ASlrLaYm?JrDe*`3;6 zOIAEH#VqsFObIESJHo8y))r?jOw6|YK9w&rGehWisM?a6kzz@-WTz~RPckQ)7N%tX zzFm=)&djIu#lNE@z#IIo5|PF1^3I-oS&K~>8NbKeW4@0?Y$wA+Fw>lp&aC!Me~C0x z=c>9)b87k`b9~|=wvu-0FfUA7oN3Bn{e1tcU6{rcN_?s*F*7~uK5rG;Hp_l&#Y|b$ z39B^Jmz>B zW*GBXFdd(5&K%}Hj5)II_-=S;>l3Y+TfH>#@qF^KwVK(6%=g>ooY9`YYqo&4Y@t$? zne}f{TcEX<^+Qk)b3n7t`1k;bsxJ!h4m-MbuiG7O{GVIFs@4kcSPJ;*eoHBAeUdtq z(njhwNKy-G{rF8TE%mA2^1vWzQMx6G`RkXaCY0$V$@cFr9@`?%lw@g^SyHNrR84H# z0?FV&rNKjxqI)O2`pdsdx&E^BSdye%qtZ1>MtMnIL^61~N`8_w{N|0xgTBRqJ@Dhn ztQ3T+kxg45*=lD3M=q85pS;l=sFl%3rAAgpf2lt!qraP!CQ0u#dpHhtNDb4<$U~3k zp(I5Mpo|rcyPlVx-89|?FG%uGim9=f4r&V^%f~*qM|{)YVUkwL6xS(6Mg4%}^6H&+ zB`^PBs+L?p!U{;Zq6Ls8V0w8s#|?q8T9!S?W)HGcv;eXkF?-V9laW4(HwNatDCYXR^2$hV%6 zLv_REYTfpdF5o5IC`Ah-LpK}AN0R<-DzO}X@8fw|RVzv0N)n`K0aVp+Zo_Bq&dE>g zf@iQ7jp(FMI?2me&DRI6kk!TX4fq6LuU?Pl}y>rWRv zrd#a&3H?a7Yu5 zP_zKb`QW{ZPds&fR%>sQL&9>HAZP((`Nh9^Xh6b&!Y(-F2}#*SZFf<*Er2X#Nj=#LEszY(w$dO;Dk?J0D!uU6SG0GrB5Y-Ss|8TXN53dlN9K@MSw-_D zWe2t0!79=M$TIH5g$V~8zAWmBr?c*#WHYHt>jxy;|Ib>NFYwa8*x-29D`CbkkJb;# z&{sW@Lj!gGpI5w*V|CxIHTMV(JA%U%Er2p!nlN?7$&;6MXl*IdjVRIuDq0{J9Cgw# zNpkM{66xn!v`1@83kqpL5sDT-DPy)xurA-zdv6z<$X;}!?L_C+4@iFVm2V!swm<$| zt&+1;I?J?xo8-o{z<}OTsw7?9-MnC_&&wZZ87@=lGRx3M>ccYh>m~V0(lrLy$9h%^AWQs* zCkHN8+>U4!E!PDsXPQ6@BtuuCYJ#^GR{l`mGwM58Vk%zAqvP{vL|Y&kTntkBP$mkq zrzHRH@}66dY2_5?Mij7d)&j|3kJWK5S#Emu{oVgOrFGvS9C(N+FD-z#$=dtf*0;RB zJtIpqSykJpw2d0t0?8mF$)rl1=Z#;InjdPmYON|HA%#p&Y5|n-Vs}vNEMObA`;dXK$bCo{Kw;COZHunrFraa>WEawMoJ5~ zP<$9!GP=x^+^khK)pe>-Q9q!J;G`dApO%09s3jL6n<6GNS^!zhUk~1>d+*9MtvwfU z$VDbIS^!x*-r3iqa(2iKt#?=JhOK7epaqh_Nw11SpW|Ukr>fq)rB&2|16x?{Y5|n; z@y?>%Cy#&mi&jdZ&Zki4r)Ys>=+Q;hD-zoRWsM5qD>!m$Tep`KoW3&jRoC2J4u4YC zXCI`tGHZrU5sH8o%1SZvDHeGT^4o(Z!OABqdy(H>kxS5!67&$vDp@H-LrO)iK{hq0 z4_E=RQiI0Vpjp6GUtcW^`f{Jn$*5Ff=StiI~vM+4a8{!=?-#jR5lW)jUsO$PFqNKun&yNR^qf(q*3VqHx|s25uq&&`?>~L?&+{Gk`ZO zF`QoVik;nq5m$bF#C;b&^X-o!j^ECrHS$ zrCm4ne$2tfMX4puwZsMNA(j1ViNDCvwIqh~1!8}JbOoc+MX4ta^~4c0r;BoxI9w%; zu)KyB&a6!Qc(5aum3(BAj|PExuJX8i6bHPzct^$*7mE{9mIhmc2fS#;Gd@XSUr*_Y zjLK`o;Wgq6TKsxt>CV*8Z@SybY=h9h8hL}3Q2C*1G>P*e9DE3m2jw6$dnMusjsj)C zv4O)J zjM)8tA2tT7k;7`_21eHSbB$vrOVOTemTp2en^1RXv#k6D+5AQ150TA>A|F6D2Sm=p zHhEZh{vftFDDqzk{VQ?i<$pxzMnL4Eh38u+ZQ;D_z=@K*EsH%L z%+h+&4Z3I-lL-o4HYbOZN8 zOa9Ebkv%UAdLWAT=wWchI6ttZetl(iYx7fqH9X68yRX}vo+E8!W@`tx;PGIF%WT^p zkwc=uBOo*1N$^TC9^5K2^AAN7kSK5+$!rG`Sx92IEwq_LZYD8c`}8Z`G3#Ko-$*9P zCve{rxIZjVDo32alQ~;)Un}kp3zllFMp*G=&ds<_GwufqmTHamxhnE1;=GFVgcmg` ztBCI^62N&aab8P$!iyV~wZwNV3E;ei^w~oC!HcWbYM-qlH_`r0)C)X!M&)0$|G%gg zh@eqpWl94TK%CQ7P7W7V8FrqX8Crb>q_NF@yyc zDtsX0_fQ6IisnZJ83&t;^{D1Jg&qaRDKpYEuPHq7U2^DCFY4mMnUPaWClu3I$O(Q_ zR+Q>Lg@QgmBiA2H*cJUiPv2u`V3M)^)7;C@gRseF37S(G5?~s#1kIxi37{`ng62Sm z1hC~Ki)g4P7s=Ai!*%CbJoygB6{&m1(Ab3XFQN5erLW#&wtz5&exKeOtPm{^3SaEHVmG!{y#zMU>6LyE~r*uy|OSZ`@wa%lLNnkU!SE#EYs?V2{Azzt{` zKXdl7Yi5%uQ%{TlLq z4f%2j+lSotArCHL`_RCBXej40G^`Ab;1XAcqRY@!&KD8Ai0rt8H6hxB?6?HoMD!-I z;}Uceb-Rgra$be$Ds0CkY8CFk3J>O7i9IW^7vJn2#hyp87vJojz&XHBvz+u?PTaZCvx@XvMZ7@|$jnygx0ZN= z8e{TH=tg44jh?N9ZY6f0v}EOVVtAc6zzk8j`|G4P=Q3hjM!NFNb_MaOAj4okAhZ3! zs0tFyxt4_2k|=Or$jrSlwU#`_`D^O%HSG@iOIE(64&RD=oO&LoUOfF2^*Tj|0mFF} zTM)IwDoE&kt|qp5iav|Y;48@W3JTyO+<;sgIA`vgRdMXubJ-7O@I7WQ3^`Ml+G!um z;T0QZRnY3dXCCz6J$ew1MVYW_hoK;>FdOtvZAYMxaKF8SpjOzJYR9TDrl3z)f_9h+ z37ekV5t`Hg^qM>TfpE&o8mAqx!fDxzGpAnIy6f-;HWL@wFB%91F&ee#5g<5#Wd@CQ z>I4UBM&%Vc;1xQQ z^JmoYGujgxW>hMuV};1aspD~xPf^EHoIm=}vS-27VOyBLb(#G#cj!1qW0ys7I*fZC z#zXmXa~MxLjAwE_jonV;A$++xjl)jkDV%R%w_A7!48N@0!jZS|W1QCzw>4x4UryGL zur*`~Ff6M~Y_y|scriE{XVRe^h=byO_Fv_jcMn`!bcZ~_Nx7F@>j^m&q#6vi1;}1B z7;Ile_M*XH`x>$bv5=L0$aWvH=LW()YiOj@iKp7g$`2wOBkO5l8 zPFN6aLR|5B6iM=^jV%th=FB%NCN3lI0 zu@l(#1hy9q23sq(=OcCr(@WUE4Tfe+o3R0AwrViUY{7FygTZz=vF9VYirB6q_M*XH zyO!9)h%y71&<(`E4Tdd*ZXpJ4F#MSq{!F@Z1L4oa<1S(NA7<$!`J|YjUCB7n$swF|3OQ}OCb%ALnD<4sZk3{~AdVWR+ z@$?GnRY84#LC&VxwcfmduVv-o9uK#l9LOE^(u~}vc)~_oZas{KVi>tk^@I~^`QNtl z>h40lqr-D+=hU1#ZY^cD)$FndIdI|C?n3bVC8$dYa^S+-(IF!%Cy?z4B=h~(85DR1 z1##g%i;QQH2j@BzScihRu-Bvc^=JX-78KZmg1E4^pvV>!%{dnb=HehO?728H7e{l} zE+g>w*RHZ~?zmA_kA~EX1w8#C4!nqixbQdOz$P3d3cq?P&+~U&%v2YlddrHZciiKv zF2cY<62ygnGYQ;Gg1GP(k?}<&f(v^`%Scu}A<`#=aw+jk57j4#PK|F0SAN3{0l?R6F<&% zq+1>74u^*_yKCW7NBlWAlWxtVI~*p;?1GL@Gx6t~M&X2vhp%DyiDym7gMidIux8$Y_~!EUZ*3#P?DKZKkQ9992N_i-L@IFlMV;dg83I{ zWC@Mt{kfmU?x&A&{*+Gol*Vu_r_;*mOwN@wvQm7$ipExn&mW_cj)~8oq|;7{&s*tC zE1lDR8%jA#=~-&a`4Wx0L{06Np_I$i?lSGlxq;4XpmV@c$`%(&8>ublpJ?1q)C8Vd znfb!)uF>r~21Lev|6o6nQ7r@8k@+j`e|dgASAl+@NC~H}(1) ze9a8D=w&lF<)D}x^cd%SG%p`nxOuY?P2Y&(xp`BJCKjWq+`QR~ChtYl_=-@9!b{Pk zdrreyisKr-0gY%tp`4qLTN4_{`8t|*9nFJY zP%p5=uE23z!xs~!n9KzY2{Yrtk-$Cnif&AmsFx~1%s+OpJo|KAVrlCwhMB9;9FUlj zz4j(+d}HZ@-S<6u6qN1*(Yr@Sxv^DBy{-$Q2dh2PaN7M`NB||n5<1$UF#B18b`uwb z^_{=HcVl!y%;yh;^&VpY+ac=Ic2ODn{I_1nfTf$Qo7!b&CeEwR_VYbfJqaO9hn=b+ND6AeSz!0***DgN8;3tsAx1XHw z%3*eo^*C}pjz+<07BlOS>lu;jkZYaDEy%S+xn&!a(5 z-;N)=O65jE~tZy_>U`IKV;x1N7(NhtTe((6(Lfc^qK*EE&IAkgv+cfzhHM-EofEsgf$VcoZx9xhN9Ul4oWH_uUtw?VC;19T ze1&5<1>PtW@EcDm~S0Wa=*%L9DN(l;+#tc<&u%y&yq``a>-22dBh`+_;SBX9tqDQ z3NUP`*idM{2Y{gfTb?Com;WIldu&$Cm1PHyu?bsDY>J5^h(EjeNohXq3jE`1`@hSM zb~_%zCcMko!SJ=L1bGArb7~5n0{<_Z#M~Nqsz4cCGCcTm3%e{7=;u48mtbu0yy^zdjK~);z9@1N#!Vu(VB8{d4#7D@sDCBFD@86KxIpAWf(u37 zOz>uriwG_fc`w0xMLt0E2Z)jP|8b%}F7o$8|GmiPi2j_&KM?&7A~z9zlgN2gpGSrA zw^02SkxQtdg!bX}@27_SB7aH^pNd>g4do(NQbVQ4Rn$-=@-b>SCh|#YI4QD~>aF7Y zT%!6*A~#TdgUCNo{ZAs_r23m8FW2dp>xA~M*6CM^T%gkzh+L@C7mECnPXCg~+jRPE zA{XiOMVvwRv6Z%?9}WB~>Z0HJiyqJk;K*W6Xg}Wp^$Kc^C3JMLmB+mO;-A(nyg+1S z73#4H4djEhgWB&98^4R%@8aBbtH<9n8+Kd_l$Ds!7{O&1lOB@|)ym3KW1k8YDD9~% zPK$gN4HszoqS>65`7awKP~5TvPC3Xo2aOPUb`F}yIUkM8M`QUGJ0GRwqo+7;K&A~S znQyr_qJ)iTKIbAdvk1-QTkv8us~E*`-h)hgP%__=??nlF(R|J&Xl4nT3)ZvxE1X%S zD2{Ut8eM}z_?Eo}W!9j@oUJItiYD+ayA>r{(E`rr(BtQjne%yMI**b$*Q3CC6byEn zYR^4hkIbB}pz&AGM9vLpLIaBA{1p!VO1#hi6*hl`p9E=?mBTpnFb?M{?_vDpVVusn z3O`hZCyAU=g`eVFjYn4Fv3zB&#xtw&T+XL);A#G2Am;SMb57&OL4?_f0S>Gc(`)hU zT0D=Z-@w5)#CxMRu=xgllCR{q@VHy}A-;0o!j@Y&jq`0h;WmyGdBJU*!8wb1=Oa1 z+JULyBJW;T^x2Q~|L>1Z!JVz{NLqhV2ptka8O^a z@d^@7{#Qgwi-$t=*9C1G`^7q93 zdy&r(_j4luK-_;2xrw+piM*9cTd6zm?-JU#gtDJTYX4+qKkd6;ZKJxkala&T19fi@`6ufB6Xy--F`3I-wqIo% z=>RF9eIpI)1QWWBr+vX0PCeHA5_PQyv%{muPUFoEjtri{sf5lcq3nNt(Eh2NGJikK z;QT3#`;;bgE~l1qn#sA6&Z!iiucGs-#OIIExMSk;C#mJ6`21Pg>n!cZ%ezebUZ&oh z8>w3(?a%od^|(fbUByj0@g{wgr!UvB&E+3Buhvakt((fZKsT*GHX0F zJGBs=-=>?iO?z>% literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pair.h.E6D9FC01B6CFDFC4.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pair.h.E6D9FC01B6CFDFC4.idx new file mode 100644 index 0000000000000000000000000000000000000000..ea118770b5ffaa45e7d2998683fdf1f88a56e0b9 GIT binary patch literal 1862 zcmcgsO=uHA6n<&8Hc6+g_Gd9^6Vpw*X=}-*X(<@nTmr=ul%TO-6+*Jv#HC3Zb~l<> zduk7YiWhH+C@6T5_Mn1Vf51ak5Ik5!LFl1~_8_H5P!x2wVe$k1v_iWu%Y1LX`QG>5 z&dx#K(2%DJz#H*p5`q$<0H6^MS&_tA6{ycZ+eD9B7EcL5#p+8AxT%VTBP$(FY{MOvRDdmjv4D8<)J0YJ@$)<#4C?Qyt zbSf?cg}9IqlFEQD)m_#pkK3&>t?YkpV<9TW1vkfWUN?7G79^SD!(q;Gf=`XbxR9iX z(Gai5oU5mI58uc4bNqNBg?C7@BP1o%!N)_%7}xJ`^*NlJnB?Q>h``0gFrUeA!5}Us zD#kWBN%UldQ(Npfz6FWazQ?9#N-JVqRI*!97B4H2h!BOCpx~c1;&#J^&)!Biupnm> z;c0v!%y{3ucmh*S1lxB&ZH|H*rA2nIYe8SB0RzCor+d!#-&XtcgcS-_Fu?{kOsLXA z1HjG8uMXtqg17U8B?^`>!2~8u&{0qi@Nsr^EZcqQex9&Q!7?UTz=8?eDnJh)2~pWw z0pLiVe%<%sA<`h!01eG+7gmWyjd9Ib=Ir9<-B)%_5o0*4+9Bbij<5G`R6ja`MY^EN zNJMHbo@;zwk-e_hBf5pQ5;j6czcElK0huV1u87Pd=Fx(CWHDH3i-_?v0b&6m8)efK z5j(<;78;A}274_*Pv_^S@4gJqV0UyCT_};H#I>lMBko8x99H{9!jV>Ctn$0@d@puMSj`pi#X4hxu?OqQa6 zrPap4y} CcO3fw literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/parser_std_format_spec.h.84860ADE692480B6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/parser_std_format_spec.h.84860ADE692480B6.idx new file mode 100644 index 0000000000000000000000000000000000000000..2ad96cb2fa13fc9f9c545c290228fe13d8244ee4 GIT binary patch literal 3240 zcmcgvOKTKC5U$O8A9+8;gLsxqC+iY4Cm|3_#EarVJT$#MJ)6dP(cSw3Fa7~T@an;f zc=P5Vg831m9`vku40uok!RqYJ4*r0if@VIdd-%G(>Zz`|cd)feghiA!KitJkUaE!kbOvb$I%?MVK-&VBBa@-@bm6H~0?WNtEInN_$L2 zcJPqJEwba)8{QU?F%R3mAfasXUXM`9!d9ZBIg0Sbv`=I2s4&7v7Qm)aGUGTTp2S?F zm;`pAq%e{@mvO|YStKaaMGywEenF*U3ix@VV0C}t9c z<$O?-oX0z2%m6itN#njEMIuU6pD^E7LhB@O9;xZ4Vi=sgW+R(abQQ`gwJjCeu-H)1 zVPTsY;TOFFtQsB3!my8fN&AJI>vrsmfJTg~L_5BOI(Utvyae-`pwPy3f;kpM8M|## z28G_Ka03e3k)n$oY(Hw+=2eM6Kf|Zje)6&L{e7)et8T&8WjkeU@ynaHKkj$u(0x*d zlk(EQ4RGt*`HkCfcoiq=6ZPfH{mA?M?p5{dA-a#ta9qBWO`Ifm)YCt&f8xX@Y>w7n zTRT16`0)H!sZy=XRJOC#N`%Z}t+>8YLNMY5SkD##OyzJbhx0ky$f0f9hc=r5fUz8o z_5^?(e`Yfo0H~h-z5Ds=i?dJbrLpme$*Jj?a-}vqH@~pBw7j~uzOe#x`C|L0Fto`G d0N7B5wweKeg&a=ju$;r}PXj&Uxpy&#{{T1=?A`zX literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partial_sort.h.5087978FABD20AD0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partial_sort.h.5087978FABD20AD0.idx new file mode 100644 index 0000000000000000000000000000000000000000..dfd9ac2f6c184c08f69adf079abccd2270849ab9 GIT binary patch literal 4592 zcmcgwc~BE)6#o)I2pewVfk7kEQ88v~2#AqE5p}{5+kj9i>UOi6gq0*4cb7}7rP9_J z9aE9fs$~=pN}(!Ki^nKf9Hmn2p~X%`>u9HnwhY!$rla-hF1Up5=>Ao*GrM{3?fbpo zd*AW$&1R)7TzDrGfK)uK)L~&z9{@lEd(#X>O!Q|3?wS%)K0}{{I&spGf?*b#PGc+- z%8-=GN>DWOu38mSu6?<99)(;$~qwECJ@KXAu;wK`94!V|LVOgA+7bo#u6zaANi%+ydJPGgev( zBgi0GKTuQPRXT*SSP`boW$_{}@nV4^q>EeW1nH!`$nHQ3El7a{b$OAK-4qOg+7X(h z7%$S&gq1;Xvc&04PPRnv3@=7Ht%PlucMEPY7uk>^hOpBx)!(FvRThMmY{S1}_V%z!3_Uq;rhV~E|{PZl%@%r6E)k1zhnV3JH_mOWf8^@-XJe>;%qZ?pcqBc!@R7x z1w}Aru!Ah-26bqEU{43QUJr^%0%uPOWe)Q^_K<)yC)vAJe-kDLictVE%r#{8KY+|f z3Pz8V`1)$#bsZ(CnY9BBSs+UeaStFHAsKLB`#immJ#+ZCRbSpFe+x(=Aa$TRxOBsf zyVG`#sVx4!srE=zfR8i+iV2Dd;mr|{K1e^PX^K`~(sj4WC30v2m@uyY_`*IyuN*vl zC%YtwHRpl6Fy8#3{^O(f)dzw^L-K`5Bl`>Dd6iJMUv@ZO)Su(#uiWD97%j-T=VbFl zza8tM1m+*hzg-@3_Q`lrURmblrpgOsw5SvOtPkICt#p!r;JURk!5yQG5ygIOSZYb> z>X^)8V;9Hf@P&=9Q$Ig=t8uCzr2C2FJ$qN{G|`Y3pRQ@!C0POsu;mw<30&dU3e3^9 z4S5~uu+CQrX=Aig_ykxjQJdt^j5=c?KM6|6XfS3D(UuueUK_g)$<2Gzs}rzP9eZ#< z6%56TCO&g{J$c(56)(V!oRo0HmD4-(f6DM)??>wU&ri$}O~vrl#pZzO!*c|ww0A9n zl8~mkqSzfR&w8R=ov8wB8#DXN2XTuH0<+JSw6ON<{0z~M*}LO6wrp2siaPCj)5LUU zRAjRID;A24?-5`-FK;dVv}wj?0&~dPq)p~7cfDvjd)(5yb&6~CEOuy{8J&+N zFX)|qOc3&cbIoQNx+yf{ds9@z;(+49E1F*a~?I$9Fsi1U6d(2IjW}Ww)Lze0FwF3V)^wh-R;7R zq~g3NHk5p$e0)*u1wlII5%>15NU8bBM-D}gijLz$%Av$ji9<9)ltJ%#XNocnYJIy~ zeqquhySM-#TH$d@1c^g5gP%d^d1vx74QjWLTOp;!+%D1VrN2&3E|ix1&SpP!l7qIZ z+Ni%8?nv38Pfa)QLobIi=4LG5wR7G1?Q08sdj*w;uTVwf9lCp>yj5fd_5MHg57@a? z0%bT~LG`&$<{j05K2dCHUY(?3>71u5HbapynNLR+a8y92revbUh~o za*u(F`+oA`3gQI-{5)caM}&It$xCV*59tH_{AB_1z@Xre(6ESbAosYiUuXDh@ZbV~ WjJE+0>=6SzBLDG*wG0jm0RIBvRs4|v literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partial_sort_copy.h.319611E93B8A4CFB.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partial_sort_copy.h.319611E93B8A4CFB.idx new file mode 100644 index 0000000000000000000000000000000000000000..0f9b140c8ca70aa0843a4406ece5e0cae34bfd03 GIT binary patch literal 4960 zcmc&&YfKzf6u!GWcNw6RU1)i^w4@fHI|2*T!C>gF&C>b;TSal5%+Aa%Q)XwjGqbRW zZKyT%M|Fetk*1o06hxY)^+AnkXp2dk;3Gz)Mrv$I(uxm4V=NjqwK@aL4kD@XCc92D zGv}Op@Autv?>%QuroMLL#)fnN>{M;gM@vL30Kg>Qq9icS7-T`Y))usvV6~h-Ak|8= zKuEk`@i2lY?I^Ysw3jYwVTt*MGOV89DBf2?lC&s>M+&qUU?p4wu-&%bEL`FLKLy3r za?H;A{DeSTNcp`(p4AeIQf&FVQE{Ny@~=yA`z{Jdl2LO;gdi~51GZj|9jHbBuR%ecv45XJE@`|Ln#Q&j12f%f21o1cy%FEbx%IPX_tj^Q~m zitIk3nZ}!F!XIr;zrb&!Nr|SSNGyl6#1Jel@`8kuyuU4q+#=(VaEfo`qRFZF8I{c? zdCtRlBOI%q07okEL9i%8(VWCck>9|DoLmdv9Qn+k<^xm}a7iE-De_4{$$Rr$C?nz| z!Lo##jl9DFj*_#kk01qJjPMBxNDM2V8q~+PM8U6lGC#oxa?t-H`N*{wg<(K!^SL+3 z#n(I5_KBP2J>v+-TmcYQoy$G@0EQSHhzGj3ILDPvZsx#SSLZr7>zr;xc>qJKey)T3 z@e+Fz0Z1I)H+~3t9K@QC3S$Kl+&gi-=*WuQCZsaG(!4+`s9d9IRq0jXHf!M7i?+!# zhz>#WL4NjZZ74s|zB+O0yGL77WV07|m#gL88#O<|iC}Ar~3|y){Ga zy&PN(4RFr+6kT&^pTa)iBJ*^58c@Y}QvnzQohe*W7~ZaFkS{OXGL z{9C6h|HGu6?~V={_no>An)C3`t*KT1F*`KCuvB&a`LZoeXn?Lq>ZGyF9S_Lig(YJ- z>gF_Be?8roboL3^OapqQ8g8N`={5v4~=_++xd!^bPXPWI$C34wir)C&w%~p z`}Na@V$VYZl<(^3e7k2YJV2;x&&8j0`$u#}#E@t})$mH=A8yYJbbkgtF?Y<5$G6qI z_IZqaGBS$FR9pmc<~lJ=bLG0inpy$qvu3~i>hZ}z+$rum)W(_DhrX0HWnEHmL6KQQ zawa%)G|iRZ3TyhW*Ht&`TdyuUK59K7(rzagiu zJdh{$65pjnq`Vz?jyAW5?(Yhs!vBHPI? q8a5<#ccdmH8jMNFDXGiSmZzIDOdvz+r2ZC@Ek?~6c0n$*H0xhgc!(JQ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partial_sum.h.7A19825E94E840CF.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partial_sum.h.7A19825E94E840CF.idx new file mode 100644 index 0000000000000000000000000000000000000000..3528f584951fe831f2204c23ab0f5ea6c8c62c0b GIT binary patch literal 1516 zcmcIkT}TvB6uztD&+Lw3wQ8*^P9T&t&UM#CYRW7HX*IAPdWar|nb}#pH9yOpJL@hc z6!lO9Lhn)ZAiYEnQAAO`_!RVFMNv-%75Nf^Jwy<6XZ5Zc_EdY}9?m)Uob!F>FlSDr zhlfAa05FtE7i^Pg8~`9nuSYO?TuqhW?CzXQC}}6>lQc20MqDgr5%$QGBz8_F|9G*q z)rVeX%qQz}u<7|0ndiKrXF?}avW>s4=u2G3Iyc?4{I+&sC7>I0NBBSho~v33z-HFV zhX9cM3vW_io(my?Zw0Mwr5^(oTRz->^!4OKBXtjefvwDa==0LvBVc4_mB5RfxQ)35 zKFKA^*5v#{lxdz$a#23s7;j=+qkM8v1)0xQZY09u4^zUF)CSGz~zn;vyp)en=5AR}bRwEQE4XSW`;oF{D z+b`?YOZUzlzWItG#ad#$ELz~D7O8A~zw_)J8Hv3QfweqvEcW?Eu$ zNwL0>p|NGMNwS%Ka(-?BP)AX*USd%$2q)(x=B4YK=^2^m8R%!`CFhi;r0VBnCM8!? z=*P#yE!NM320?s&0Vpgo^Ye=JGU#S|0mv&LOKEOra(-S~W;%^M1`A9?sFoBZW|q)C zL`(BhQq$sd6O)Vbi)rk~(vr-a%#up|-2Adsn#UT$ux)U@JaE(QjU1Cwve;0b47 z6k${2R}-x0e(+9vo zcPo_9EWe-DY}Th@q(Xv8a!YmouY0;m6V0T)KaBM`H}`6jVA93EbqD4%M(LxORDE$v zW{PN^5t^{lf|U^`y!1`DWY~0MbrfN73*;HxsC7*BFZd|1TKw2>TIL4?mR$C3@Bx+` z0g3?zu+$N)_hZ*m?tPI!;ZTN9Nm!BM5y&9w@nml@np0uA7^T2PBP{vFC+t$aeC2gE z3C{UlC6(2^I6t2RE!)5RzIyv^Y#|9+@&mah$Im%XM}ii~A6^f+-41t=pk+0~v%Wh? zJ-xs%lnIbYfrZMSRf}a-9=+d-7KU5auV8z9T66-M@B-_+HMb@jPa?tIPY>cvo*k5$ zhGtSmSMlD}hyCV|V3Ks7V)L4B=jNfAv@(7E9^VxGMQFmjQ+h;BGF2{N=3$dIk+y*O zmxs;3!~lusZtZRlle>IlTE*=3hRe`Q5@@oSkaV+eISEb`k5066eXF|z&7{wHb(4y@ zpP&n;EOu1L4B^^^rkbCnFfgOqcQ*<4KEHN7;a<_X1B_g3oE)6$u#A#(=B35k87xQ8 zEHG_sn6Pn?2D)(Q&sF9Ub}mOru$O6JL9%bY=xGwP2TqR68uuU>H5r78dn~%$gs%^$xFl16R=9<(-BATEJQ415j=Yl zdpPgZv*@Eu8LV&70z)`UK`G^g$p;dgGBMw~sPWhG&%kUh${;EX^Wx-F)19{KF?=Dx zBu;_bz{wF~TutSP@Ka1d|iN1OVAk5B2~6 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partition_copy.h.21BD3CF0FB1C9940.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partition_copy.h.21BD3CF0FB1C9940.idx new file mode 100644 index 0000000000000000000000000000000000000000..5f43a6019de5e026a919c8d4cfc31cdaf05b43a4 GIT binary patch literal 1696 zcmWIYbaR`*#=zj5;#rZKT9U}Zz`!5^#Kk2=nHVVLM4o?{7Xxa^cX7SmzKnr6qTle^_iea8-b>Fet|Tj_@urxq3KCnqK8>y;%JWT)#V7L{bCB_@{?>l+ywTPB+%o9QR#=N15U z6cy_w7UhC)a!z7iy1tp7k%^vxer8^BPH9T2eokgmaz%xHd_3GD{Q{6-C7Jno@yYoG zm3kR8wm3OIFD)~j#+GD46OBHM0ZasmnI*+E_g!g8W=>{FB`{Dki-4AaC>yktfsr8W zfXa}g0GJa}tgIM{D|3?+fmvaJ@C4~zKu)&x!1JZ^dZ^FCQqG+~d;7q@Ut-fE8~JZsOt*GdJKoza93lvp2WF%I!S z6OPvVv1=*!zDQu0XfS9^#8yhBUT%>_6EST?KEmykW0-EY1<_~MK9OqmD2D6x$m@zDvzbxEyy~IoECPZpcXl oaf*wQi}gVaRuBOJz-k8uSnhq{=&L!rB#oJsjh%rVCd|M90D&G;NdN!< literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partition_point.h.798E326AB036052F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/partition_point.h.798E326AB036052F.idx new file mode 100644 index 0000000000000000000000000000000000000000..6ae4f2f222b255d0c68414ad0b72459b22be367b GIT binary patch literal 1930 zcmWIYbaQKBXJBwn@vO*AElFfyU|2eq_0<&T#%ivpIB6qnU zi791?dC9a7Pq>9CnZ+gawGn1@d`VGaW=SzH0@0!rnC()mtbn<%GB-&PnDI*b7v~5) zIJJ_8ft!bcO_D*9A51WCGBGl+FfcN+G8Cnz6=wnSDaV1yH)imJGcby<$?(ev!ZhlY z)?6`pwwH&IhfS10R2rO{fy66mm%^!iC&bZIzuvb+k$qOXESj+Xzb`4>cPo_9gfBV^ zrhoe}M;$1vB%&k=vr=xU&i{2!S81ZF{#$ooK4X+VnsD{SEtx5zeMV@)l1t*lB7VL# zK@&EQTb}>CPu3JoIO<+ySmNbYD@HChP7Y38m@hpxU);hqd8<8|>REgKy;dr??2IOS zpv3w}i*bktn(+L9z>>?}4L-mSloFOwg84F9@5ipC-1{Pd!kP@4l5i^n8ALsv>`g{9 zq@p+BWMcij21Xe+X?baNm?3{wEtXk%^nNdz>MiS6u)RJlIsr}i(}Q@EX9uOGp$SX( zDK@Y9c5WV;@XGZ0dwf&$7oiDXzA>$0_Ikr*Xu>cTF-n0GSVi}PciQtLn#H3N?OfmL z?m$!hIj?R~G4~U6;grRW3Yj5XyU$PJIcHv4yq&>v1WmPR zW5a}vi!{)M1@rx@_vgjIRIy literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/perfect_forward.h.79E69D5FF92240D0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/perfect_forward.h.79E69D5FF92240D0.idx new file mode 100644 index 0000000000000000000000000000000000000000..7e06a7db530acfa5ceccd43a5b902de0b7d84011 GIT binary patch literal 8402 zcmdT~|4$QV7(ZV5TIwQ`fz~#nlqm&zEtJv$<68yGwSfsOv)Nd4J+ACRzu?^!=*E^Q zMmLsiF=1n4Y`P!JhVu)NIngPjAuc!GX9Q08@;e8x$w9OvnVLET_`!~$%FnD+T-$(6dT~8JfK0I@iKe} zZ=oq~2kDJ|X^-+P)Pxo5WBfebO0zDG-V~($)B=p*qe6Xwj%X+2gY8}#<3c`nc!6VS z52ss!VL$zFf3$dfBu=gbMukz;_2!j3IUg_UQGy~>QHF#}X{O~8s!&uw%t}=y#H>oI zf|!JYfS6X56=K@bY!K6~utQ9T$^kK((wZX7_qvj6EJ<04OnKEOtbH%cZe50q;F<3l6N*D_rO^1S z%q+b)t7p%T?(>cPqXKfU2CPXC-EyE=r>PZD#q?d11tV4o$F7WBxl|mqfz!VnJ~-dG z3Yi{k>(8Ab92d|LJm33lvmyPDCz0v!0rTYeNvubQjNsL~hBlrha6`Nj5ZOeYIOCPT znrqcb$d+ZxmXJN$4ly0M4v5*5)f8b)*KOLJv$nesnQn}Xk@4z*6GmhNPux7Bo0_|a zj^OxA?!qO(A;dVM_6Vwpd|h^y)N^jNsL?ou`^-ZibK%{Jr+n)KK>v;YCkgN zRh=H~edl#e|6(P`U6H$5tV4LUFEvK05?<}gi)y5p$z+Nwu1Zi*S^+UD%PS#fm8lA1 z66=XN=`2>lxpS=1H?)vN0v)SzyFkW=l9paY*Dnk#Z!$B^mUc=Op_n`P}eWCRc0T1&ofp1z2T zVAoeuS)Cgc6UYd5)_Z>3oc_TjWCYKAa_ncGP+S(S{Tz^!F20(`ffi^XgaaHxdZ33; zKFEhqAt;1UIVguvEvSW1BWR2uY@A;d`Y7*DWcrpWAAWo1w==g9eQengu(F%yKfNzJ zJt{CoEy<}KC$5LER*oY7RJlv8+1H)n@GfpyPl9?cxiINHG_TE@xe}x{9#Vm@A WOGr$TCC6inq`3I^1i_OedH)A9>zh6R literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/piecewise_constant_distribution.h.5C5063C93FFBA74D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/piecewise_constant_distribution.h.5C5063C93FFBA74D.idx new file mode 100644 index 0000000000000000000000000000000000000000..c582ae4e7d70fe58604fd87d55ce46fbac865c1c GIT binary patch literal 24346 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 CPl>hw literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/piecewise_construct.h.968071A7FCB194C3.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/piecewise_construct.h.968071A7FCB194C3.idx new file mode 100644 index 0000000000000000000000000000000000000000..b7ab95104e1d7cacf4a0826ba070b6f3ca51d806 GIT binary patch literal 812 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/platform.h.9519C817BB8896B2.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/platform.h.9519C817BB8896B2.idx new file mode 100644 index 0000000000000000000000000000000000000000..f1e95fecbd9751cec5b67d81b2f885bd43bb6f14 GIT binary patch literal 270 zcmWIYbaP{4WMFVk@vO*AElFfyU|>`p#DRp~b01#rnxf zN&0$a$pzWz`iVs)nQ4j1CB^zihQ^l3Cdp>{$@#ejKpjQJdWl83Ae@|&n3t|^re|cL zXP}>%mz-0YlB%DRnUq{np&uWgoS&DLnO<6ySdy8ar(ckhSdx|x)R)0fT$!5$vcD)b zt=JVv&pqh%F1`I(4I>w$F_*DC*l9q5(Z{4|(uI&2Kw&X1F=d!=wxsK+lmDCl0fo6a gxV2!yK+|#(L7d{Et<8 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pointer_to_binary_function.h.115E14BEDA96E8EF.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pointer_to_binary_function.h.115E14BEDA96E8EF.idx new file mode 100644 index 0000000000000000000000000000000000000000..e9a288a65b05269c73943287b455253b633febc4 GIT binary patch literal 556 zcmWIYbaPW-VqkDi@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmZX*DC6{F8=OyOoCuQa(7FEW>MD#M~ zXLUh-W?o5ZQG7{$JfJb zJQ%zbfx@CJqQVeC1_nFVhmXIqJ@I1XV&>xDvV;jo>;2fZlzU$!P_-t5rX);FHU~vs(GJk1VaX_wrGB*<=69X`9zyJVpbD)C& literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pointer_to_unary_function.h.A5E8AFBD5CFF6753.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pointer_to_unary_function.h.A5E8AFBD5CFF6753.idx new file mode 100644 index 0000000000000000000000000000000000000000..b733b8ef78c10be6c62e7243eca58c4f7394a45f GIT binary patch literal 554 zcmWIYbaPW;VqkDi@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmZX*DC6{F8=OyOo7vyK=m82HMm*mHn z<|P(Y#>3?FGU(?B44WB>D|3@TfnAiERvZJQ^-625m^|Cd!^p!V%pfcck^%vTryndl z7`zmL!lEpq!Vp0QhG@MXyOwhAiv$X5GH6P|gv|w#yqBAPxW&lD#Kpm70TV7t%}E5Y hi;I$rl|c+<5CH+ONC)zmvi{w1{O^AG1rsAP0|4hnpi}?= literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pointer_traits.h.A1E4352FBFCB6789.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pointer_traits.h.A1E4352FBFCB6789.idx new file mode 100644 index 0000000000000000000000000000000000000000..f8f6f2a36a63bae128806f2abfb1651115c0538a GIT binary patch literal 3906 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 I>40JX2Rnii;Q#;t literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/poll_with_backoff.h.C9DCC4B7D84C81B7.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/poll_with_backoff.h.C9DCC4B7D84C81B7.idx new file mode 100644 index 0000000000000000000000000000000000000000..5f50f23e7b0da8a39dffbcadfd755cafd8baaaa2 GIT binary patch literal 1024 zcmWIYbaVT`%)sEB;#rZKT9U}Zz`!5^#Kk2=nHLy=3=l}m%t^J<*VlKp(hn_8Eh^Se zPD;|(D@!iOPS;N?D#=VsOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$_3%%oW#6zeKS2H z6Fmd{%)I2B(v(#FoXn);iVFSs_~eYD{Jebql+vQalFa-(y$t%;mywyC5nq&AoS#z) zvNk?BCqFrx_Lk@8rDdkm*oP${UA`OxPfjx(B=49lg@H6qSsL89DRCGUhr#(-inTJKs zNY5R{`?!I}WZL0OVI~D@eieRdX5wVsxq0nBWvdwUz=Y#jJ5J6OO=@E0VNo?wwS@@-d10!F2%a8~o;ZT1uc)ts;MqFa`oee} zt6nq*w9V-RdQ&x7H611_!=kUJZv^9MzPoJJvY_!G$UkEG5-?%uuIyJUZQ{-Y!%>V~ zOakT~9u`{(TTK}6%fda^OT46R0u`x9sp!Lmfr^-H#bLZTzj-J3zTfa27&0mhD)5jg rO3g_GDJd>WE(Ysl;WH>_5OLqn&dkWf%mB>UFu(+3FfhRKHBbZqo?Sa- literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/polymorphic_allocator.h.2B50CA2ABE4DDB31.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/polymorphic_allocator.h.2B50CA2ABE4DDB31.idx new file mode 100644 index 0000000000000000000000000000000000000000..600382dddee47ee9e4730bf490f4773f105e7a9c GIT binary patch literal 8758 zcmcgy3se(V8lHdT&7izS0tN~4R!9(2zzA5eTEXY4th!b)Btas9U=m(FDi)8gg|@y6 zbx~|<6)PfE1-BMa5oCQ;)T*brs});o-Dhd+yi}N(Ud3NE5 z?nQnJ-;t6RQ6bBO;}?+$*Cx7n@ti_p!e|7QVAiotX*5cD`j#e9394UyB42VeWCM!R z4H~09-=NYYQPZ=uMv1;aW6C0diDP-&DX)oP7eqR!Vy zOnS+L8LtkDjUOhZW|Qfp+^$M{wo__ebIxB?RB3XJmQJBVH>g7d0m-cJ|9$=E#*|*?B0pEH$xP2tstkH#FDpFXq}6Fn#WGEi zN|R^O>T}cQ=PM2BUKUYhG!c)_>{Z!x+8nK^ch#4xDeP4dO!;{_4W-Z17`RjxnAr0w zcuS<7YopKqnvmWTz>_G9(v(r7)2K}8Wba8ZF)6jV8UuODE9M}HlO%Q$yC7*-tx)9U z7!(S@>vPv86a`#*OgEAINb+@YPR4DTqFh(?d++mrsjNHQH<)7Af&V%P?QSS1OEyos zkr{R``G}aI1_n{=exUb*OLs##+tC!`2CV&eMK!Z)POk~H5Oo682~Mn~p?v#*iEAUfaoJa9+6^xP`(cK&J+cX_R90|O_%4*pXE-wlkq#j ze=ZRPuc zT80u6E*gMtAiH8|C|^6;$*l0%?GNr9T54BkA?gCEi|mS}p`81GW$Qe?nRIyg@z?5H z=@7zhq*J7)`GE`Vo%nrmeRku13#)OWxG0u;V7KSJ`x>{in~%8DgUIL_kk-Jo?gmNR z9*AZhEB%U)xDt}2m?VYyf!&wv0(_GPcU-qD5F?6-Vz~!)d;LB0+bd6(+;pe?$!LYI zBGCN6?$xOm26c?OcH5l}B;B>4cY2A z|ENLHe!#wum~Dp8W{AKI7PDR{@Uoe$!jY#hXVsQ^^%k2Nh}lZ8s{}U;0b+I=*lhzh z^!G7M<2TNIvO;9De3Jr~J#C77+n44z3NME!qA?SV@HO5j?x2 zqNr8s>=#(R{K>h7y*Vd;_IF`O6pJr`L|#=TFsTHl@wf>@P2i8BGwd;t9RoR!TR_wz z>^}vvQ^NjM@MwkpJpCCEoe|QX1=(34{Wug2PQ7SGIg{xc*sTpv{|v`K6C%cUD0qd$TuS zzzy(60&n&Xc-#Rm41FuNL_SVUyI}i@Xy^8R<|Ku>wKiK@&GgyY8FS=5UxnJN0W=oE zk0mGmUL2uA{g+2ti{{szY59d;?2(6OtFyAxri5FWRrZN(4D%`#K>}ABxVQ0Ux^MLL z_G46Ow9TripDMZa_@iAhRtpW-PLDj{wLc{9ZGg0;c$ zHb~_0c?dcWVTijXE&O0e_>z}wX7s>Gr9*IKQ>@JcFW+s9?tJ>a?E^77{_5shhgZMu znh9mL4z~_Lv4`@~?#KP^%EjW0gj23E!}Yz>t`(%XZ5e5`$5^X@pSeau>W-k8<0}@g zN~RgM1qQZ2&om6%3O=n6iiDqMCN11xpFWx-w`1Ua3_`GjVNZegDIq=!-e-B7o&8bW zohNm#*u0e|Z!!1VGHO$89*CUzxtQxs41kQea>P!?Ts!eds6vL7%jGGkU&dU<@sx4$ zxD>4Q7*;_me6aE&C_<6MqoVMlM2wDH6)>U{rl4zaRltaqLRL&kzx0M>mHEs zct3dUhj2`y49TH!`(Xl)8^Egp!h6bHQsc%ozyuz*Kx_+)=jCVxSu4E4<1;Y$427v*@I!XL*MNXhyiD8%@QWbKI%1_%^Z(L z#Q(V?5lVo3ko0Fc2w}(nnvf@M{A}|z@5(HztwIAMY*i&Mu z61}(B%vN$s!`io258gsD>|(dY-WYMk>_&*#2+`<>Vs;ZmY!c#Xh^U5Wv?ejT10r_t z*zMsW`IM>6?^>~$xFJ8ItzY{#vvrQHgmJueR>O#Dcp2w&+gRp(nl66di96LWCE(6S zjOF07To^&hAgm0Apyx8=fETt7h9Kh%DJR1!U2~M=Ot~hiyeIMsa0TIJ+V=>l~P+++` z=?MkhHz%}<`NjlYiF2)(4oET5yOn0 z5IqkA=H;w9<%WIjhaEW!@!AMMsA$eYyfz7OB}7$1A}X3I{iamHJRVnrS2YBo;yDZQ z+9AZv;NA=p6y$KdoAS%_2Msn0f<*vHSC)$-obl_r@3V^|-#udUjCDsZHmOfF9kDWQ zyhx8%h=n5gO0=i0wcLKdrh--kZ5#m~)YlXND=sF=j4D?|kZUVYVh+BYe5#lpIpAq7V zKwlK%FTn8&5c3+m4UV^YjKv}eH{3lc8avkSwA$Sh8|n-gH^=1cK7b;^2K+! z&yC>U2mvUzWZ!}Q=Vm25wOOoB_in4}yw?72n+KAALDDHX(=ZxT#!~L3r`D&ap37s3 zV%;X+Jm3(#b%%?Grn$k%T`f2!vWnWB0`rYI3Ni{~6ObEs G{QU>!mpCy1 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pop_heap.h.DB1B1B0698AAE775.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pop_heap.h.DB1B1B0698AAE775.idx new file mode 100644 index 0000000000000000000000000000000000000000..0c7c18eafc5fa81194c8a0f573c600d855736c8d GIT binary patch literal 3906 zcmcgvYfuwc6ut=vWD{PRSb;!;LQx6X5+jU}m!tyGz$lcCRU~dUfh;81xVs<^tG2XG z)sfcPmO&YWS_YrB<4nb>6dh~DI<|`T5v_e_wN6{D3bwY=vAgIc>7CXe?ZD3L=ALiQ zJ>PfFo_o)v(3q2>4+X$rHP$$79N`ZDkn=aoF;rL}KM=0TarMdiLc(RGowG>N#OuLfn5!=}e^+@QycSsTORq{V`3s!4ZcIZiMfRYs5;i))jo z%^-DT3NEaHpTV#if^iBr=^$L?c#1}=(>#e&F49qDwc!rRLe|vaX7e!F&_s=WRO!r& zt<22Tx^1J#OFb+xGwl{?jiO!bD6+e0x7ltZ+@ncZ#o9-klcmZyvz1=v8u@jy{GQ-O zxN1q-RYsMMFbOP791hGJLr~nvSEsN6A9CRoYbIEhDt8eU$H?zWgqcq>-yW(+jv5W} zDwmZ%eVhcz(Ci3*+A5B6P+TqUq^pIb!b5;>hE}~ERMV6du(eK0Hs2C|C`nxTec{^i zG9Xs~ECXZ&4LyLwUkt_vh{lYWykh?+rBNsEK5)nbc|n-)01`jZ0|)+0W#xQ_tvMj>%P5_*gBzMF!j=!$4(o@@UU8@4u0+g6mp^bn{N-RZ@;$s=68Z?ksi5W5s z*So``pFXQ%8jJ=JnO;+xHL7Kse>ao@!%o zQzo+fW1a$Ont4wa;_d&2aqO|8MRO6jsD1kSL(NJP0&kf&pF2BumB~+r#mnO-!5qr4 z#F)e+uazy$j)YmOQ~p>JeyOw=k+Vp1_dtjAgJ=0#Hvv-wto8iY&%Ei8Z?Yra<|PN> z&z}3K5|Pu|Lr6a~ZE+#q_KOR%jwkJK@v#%c3B$1$-f3M@aYsfY-uLPvE7onL1=zQY zy9VxkcH!dUr3l>rzW!8fXMY_Mgr1LWG`AdHfp{+lre6c<0#+m55qIZ&C(Sv!7V&PI z>DqOE!?f2BIPHW^()V_$0Q;UT!MEyk^9qk_Mqv9|wtMH%f)*r5*b8Z|T0D)N2>e!~ z_(q4~V&@~b-@Dy?J=TwU4j@dS{!8cE>+=sHA!QZq%Gt){M-cCZRnppezfDK@kCLg# zoC?dM`1c*D6EdDUh6E9}yUBc7aT0;I{+w*eGuNIGVVERH@&v3Ji{H&%6|-9U#4;>B zI$aN88I~KJJ8TWKANqou6Y1e=H#RU<>2*pEO!u*J19OM1E9NUt zuV4c`mwEn=&VC+_0#W1O3O0V+l-;EP14xjTt?HS{hhMzI!@gw$Pb|I>2ptY?+P^mf z!-5Xcs*=n2!R*?@UJS5 z@c(AvC4&P1u%|BvnHtU}H^~BnBvM&$NN8C2xUoR$^$7D0CEj7UcR1WX0SNMOU@}xN!8EEOiHe((2tK#$}G_@$S+9FFU>2_%bwxbz5Hqm-7LIT^L-1Ac71G4o^Q=crbV=0);hL zG=yQo(Rx32E#=-92^4l>aFT=xmoDS!De-K}XXIk!;own#2}^fnzglS%cb=JtQASoq z4<^jRs35C=#8Z(~f%CpB+;hFeOX?;_3%iUAk`{IaB%TVp3Y<4F-@B;s*YeLmH;FTd z!<}kfASBlD-}4*Dq+ppCB$FZ(5)nL=Sd}yw4;WTCV5#Dwvag0hGs~fEmVM eU|?JoQ*h`w8mVqu@akbny%9gCUPMWQLh}hl75<>?7104Q4SjG(ZSdY-pqSPQem~hzr&s zg!DS(NHe7ggdxEhq?0kB%J7JS(WJ52+=dpk2_$i9e<+Qqid}%9a!lH|(ZU;qOAyl$ zBZ7x8n~~uV5(zA|1;Qi|jLM;5+R#uid_J$vTxJQ(w`Ho>hyyiqnKI(ze_mxYm0)-x zsjvsml8GBjU&Nuak7AKNwJ)AtKDXZP%U;>9pvsy{Iqbf^Z|$Rlx|ORzb@@j`=mdY< z-7Y;GTe*g6E4ln~{q;FH%dWgdzqC+V&t=5~bzCdZT}N{7TIxLgi(*a?@^6}cef9Ba MFYpRM5qW=^Z)vpVdjJ3c literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/prev.h.A9CF4EF00FA09869.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/prev.h.A9CF4EF00FA09869.idx new file mode 100644 index 0000000000000000000000000000000000000000..4b2d2ad87dd6e39456d0aebdcc6fa5257cc2aebf GIT binary patch literal 1458 zcmcgs&ubGw6n?2mH_66c^bnKPZoooI?T)FT=u$(WKQy%mt@NNC!t7)=UESS;*-1!I zK@bG-KTuFSc(5nIQ$_31i#G*{B8bo)#e)Z-7iUs8(LW%0Ftgvh`R08)Z)Vu2@+1k8qOiqK_)?YPuL2+f;lEubtw#IlglB=s9r zgc)~iOn88%^QX>`0+~Ui=GDat78sa$vJn^iRWxHv7mSn0@rm20P~Xq^XxQxwO@s7HN{EmvHj&IKEw`u{h3aKd#) zn|)W45AttHk$A~6!Hz9drMRdC71M-Z!?SXt7%W&@dl~2RN(v5+fU1EO?R1bBia-=1 z2V%ge9qbCG(YW=ou=^$zNvUZ_XJsXkHn;Qh^m$m$3HMlZ?9jdw;K{{H{KJJiE5fZE z)22e1@Egf=WLgit{g`~5zI)C1{py*zeMPVrVev>9Wb66r-lNHf*M&QKG;4&TmjJjCjfRUgqK}vS}HXH%~r3aHesNT=DN$tycQHc#J@kBBOiQc3r%b~?X0PqKK CU$)5r literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/prev_permutation.h.4E2079A766740303.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/prev_permutation.h.4E2079A766740303.idx new file mode 100644 index 0000000000000000000000000000000000000000..39c80fc6dfdd7e2a4b67b37d296105ebf2288734 GIT binary patch literal 3538 zcmWIYbaOk!%fR5A;#rZKT9U}Zz`!5^#Kk2=nTJ_{3=q&zsW!B7%1p^DN=+`w%+E{A z@hnL#N-W7QQb@}zDlVzjQBbKi!l5E35vV|u3TA*TF}8Bf&n-wSN>xY((ja5;I7>$X zyCld(Ts-KgYlw47vA0H355v)-!gRa)a7p11fmsA#{($U^bXmX3sF94-GU=l2* zqwNJnsb%p%i*rj$z;@HoYM{-)R6+ZoPR`Fu%S@+nI)cTbK8z7xQk0lkLi?yJ%}W8M z+1$kBqWoeS`?0hnGbgj8Qa?ApjP|hxv#cO7vj~_d(bFlg5KpnP0+!{Kxk*mIV*GLb zM~j#OJq{iQAz=n?Ck7`0Fu}md%*epT&dAEzD>qF+tR-p!M1d89l>j%0VBln7f+zrH z{bCVz28Ob;>lbX3vL}I)h0oU(t?!{C%p7c zSY^0XB~)b)A*wH>FNfe6OBo~aY=msYV9_kYZKGzR1>;TJ@p-KRKes6fE?`qO+g1?z z)|^T%`0%z(=hOe)mL#~~=uJOvoA~t(Bxqro>M3+IINF;8Ex`*-d-u$g@gYG=wBCRz0mPlA^1Uw&V`eK)p{1TFc2T$AJH z9H=8fi{uZlhum(5yGYOiOKZSF093Fb5-D;au)sQR&8>;XlSnW(qpNuD>cf6>NYKJN zrAOo>Q{@sS9&R}kISZImc(@gW6vSXWfhL;?NjLkJlVC1COJQI}weM~cw1oa#WiDao za+CxuObZK=ee*?6lb|Ju`NNtl$2pgnfgTok(<%G!x60}Ur_bzJuwfr+M(@8K$2*aE*`P6i$?RpGfNHB?0;Px}?O``uv&{C9| zlL)f0xG1@}9K-#$aIJUcNw9F7I;kDqx6m@$m8q2=X&Qo9t0Br#(R9W literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/private_constructor_tag.h.41E10EC5CADF5751.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/private_constructor_tag.h.41E10EC5CADF5751.idx new file mode 100644 index 0000000000000000000000000000000000000000..68d654356da4acb0300a456c9a7497fb21931a72 GIT binary patch literal 392 zcmWIYbaQK9WMFVk@vO*AElFfyU|1ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&pELO(t}IX^EgGo699mXwxc=46&s>K7DcmL-;?f-D7ku{60P zzbL*WFWv-5;*t#hcighW7h{BM$&D7L+k))*s|Gr>6EKZ4Ga(gaGPZ>gONP*-UW4v}NH7`? zI7A}A=@fh)(Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd~$wXT4p+pEh(uiNR2NkO3Va0G&8RxHN7Y?2V`?` zNn&1!UIsmFFOE+v$}GtMhIVE$U2QHX%FoR&Nd?+jT$!5$irAvmwBpl1TCcR`ipjIR zJd8Xn5)2a3ASn>|ww|xuK=i3RP*{^oQywD7z~J!HVqf<0Rr)|-c|m!(itY#RwC71Q zmrC<{{FBjhW8q=p=i!%ysRr_t_>B=fX3R!Kn@t=9{T-py>U|7a&)t%j>{g0rXQ&B1lbfQF5_9hyhI9FaS%? ZKt7AYc|9lgleZO^8JUt^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmgJS@rWR!;>lYN4jaDFP)# z3`Fc9fnSu}W#rK~47sSNK%)ktiga7~(2A5m_ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pstl.h.C8221DABE666DA14.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/pstl.h.C8221DABE666DA14.idx new file mode 100644 index 0000000000000000000000000000000000000000..dfa697d21a87650d95c226a2063f5d42dca1494a GIT binary patch literal 542 zcmWIYbaNA9VqkDi@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~1afzbLaLBUitmxFkm}gT~e+=jWwmrqkGx(!7+^ zwD{b_$biKF6U$9VVuIsFojhJBnbizPd`|AFnB2f zB}5EF>>+{-3~MFZwu=R|#xQa*a&mAg!GtH~dlxnSTK*ZRT983d7$$r?@VX4+>9c=8 thVY7L!-Rph=OltS#YM@*${+?X)?t8=Uqtc1Iq4JSOiauS%rH>~1^^=Jm3;sJ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/push_heap.h.C7920352CFA83778.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/push_heap.h.C7920352CFA83778.idx new file mode 100644 index 0000000000000000000000000000000000000000..34f186529967c453ea2b1a455093666fd26d6d5f GIT binary patch literal 3726 zcmcgv4NOy46uvD#wXfyBRelPq2%>;}0u^GdXeknbq5{Dt-CX-ENXq1UFPDM9YopW>3xGg#rbZ)Y^_s~b18)xDS+@!bXeDB=z zoqO&%_qBPM85#Ay0O(DbRW>t&c>(}r?1yG3qQ{FBxG^cJHbIkz*-fNPhvR0N&ScCK z#*mb}QoQo1&$wv*@49%U zJN;y!#jGVHMKBgyD!?@rpqQ|lH7JVeHE02Crf3u|DneBixTCBD#VCd-#&Cv46BClA z<7zw^<@Ug?plB6F*|-mG#q1?$vMN!nnu-#3+*)ojqgJ8_uc|_g#$mFdg(}Oa(itgp zv5~2Em`9P9cv50U(!tdlLE7n2WOtO)7NfV$p{}OpG=e&j0}Yl%*bby zE1D-OuLZQ56?hiYCAt!4zZ*|^{-^0P~kpwh@vX|NlWRSI5(pX;@y($cX`|dP0tj%8; z0l}whPZateALL+n-(tged+W}Skq~^PxGuRNDlrOz&*}q8?muXX5z3I5*qAszCo&`< zI3a}By5}x6>zutY9x`O&g6-pqwAEh8=if}1I$5a#Wh z_3?Kf9h?q@DJyVRWcqBG1?8{DIZvWB?wt);d%l|)*pt5`8-nv&r)@aYs4zhA_651j zx$M;j4=EBE6dB2S{#Es(Ww`GM$j=YKDQ!fEctB*zTf?U422d(F#B?@37repnM)x_$@A!R|fM zIq>kCOP80efZ+bmHK)e6_t!v9$XsNzvFY$C$XdKHaeQ;-@ihVj5swka@Y`7i4EMcj zyz3z+ArG>Cl4KlR2RUh(Veh!ODd}wp)}By{`#vb-VE3!a=T41!LEe#V5NugTckMnp zuL*ME|GIW#k+Y#4g5Pft-fELyZhww${-mp~+w^7k0f^Vnb49MDHs>HjAT4cG%*kAN z1hTGMEvc^c*m{ILe!W~D%ePj+Umv9er>6HnPK2!vJcpE@gy54Qf@4QdgT80pS4AGT zJ4$s;eL^Xs3)gA*laV4>;aS5P-@R;Wb8iv8cG+vet+fYQ4_#ogLYGk@#eEOtF z`t0;MycSfdj5PJCZ$os0OE>HppV)hsT^lhrBFPoFCY*f@KN*|IZ0fbY+xyw`2?oJI zJd9)~cijB&O8+x6zWJ*yX`L!C0P!~Mh@X*g_>Frk>|VzDMQwuBOK1JVGNsGYWBB03 z{+F)L*e8DkIibu}j0=XQaJrHcB;53PAP-M&i*^Q+G@j+IN zw1Kyr^YL5$ZvY>-$}&Ejsp&zL7u(hX_fm4)dwAU}LHQ z5A*1u0x^@OPGf;WhY5I5Br$&}t4gL(1`A%|s8iB9tCci;`C17MCo!*8l74HO!xZqt zMv>_ldUkdlL;#Gi0Y2AYRc`_Az}9ghvcBH2!PqT*lQonc`}u!(={KSqS6b(*MDuus zi4|B2A|7H2gW;v$&RZyD)HA>lo-mn7X#c4O1!#He_JLo8F`@3IoFVy!W^gA}$Kim(qAssI%yC6)O%k&SjXd z`=g%YYHf9alZw!Z;z_H&a4XDTM0uRYIp5d#`~3`%Xl^|OtO%H1*XPod&f}n~IxRsc zqbtlvyVa;G5=%Z(`ae=#K}{q&#assoLgNx zf8pY#%j;LJUb}u{WAo;%+js8X+uFXr_x!=bM~|O8efHwzaA$YKPSO87C2Y1G7VS|B zj5Qk)i}u?Lj9qNcF?ODCm9VkyqHVRn*ki(V!h3|L32zc!CA>@clJEuLL&7J7xWm%6 qy%rd2_gC=Db2>XD+$CHhd_Z`I@HXKF;R(V^gd@T;gl7rw6aEM6|3_K? literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/random_device.h.D6A5729AEB02B7AF.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/random_device.h.D6A5729AEB02B7AF.idx new file mode 100644 index 0000000000000000000000000000000000000000..3e3548a80899d089026e851888832932a95152b2 GIT binary patch literal 1790 zcmcIl?`s=n9DnY~)3ix${gKq`n!2W4E!0l)q)G3<=33^4C0#Hyo3@oP!{u_x!g7~z zcWF}`!W6+e1jm#O#G>FB3c44YFr0IHC%zC7gyLQdL71B_e4%3ueWA}?_%_WS(1ZKt z`F=mo_vhz(dvcH6r)6? zXnZ;vqh&*_)C(G|l=Et%L325^Y81<*T~5+$i8g<71#PvgYSELsoV0Efv|>(IRI_UB zYAT05ql9#&f%LM0sx{42?5a8O^!9NUwY82+&8k=IoV{Mt82N>nnWk*J#Eh@E8Q7kz z>-l94q1A<9qjGDE2sqG<$Rb|saRusXZVsBT{?57vt_`M3NcG><9m)A8vg*akhTQ&FAT^rUhHSy+0JZ_ zD*$G+6fMEinlBf2=L!RZxiYgeR4_;Dr+=Qlca!IMA|PR?IWdI#?tJ;x{bOt0%)EkD zf?x)(F26hV#@S#0Jg~X05)cfKtw85jny@$q>%o)kK=vtU zT7Rv0ON%5QHc3(fBhhEiszd zp@~zX4B2@iO-V9P$&)lr?}4>>_~94)$<4_ttdtDSgrJnuZ)~nj9uux}e&X-)PkpNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|a(-S~W;z3HElEjDDou|sEy>I&)-OuTOUcj8tV)ds zveHxaG8l?0bCWXI9mRB}VfK^jWp*x#O)5Fc7OD4jE zQ0cylDq3TUS@9zMV>!zb=L=b65siZs6Ol{D+d-iiXKJlCI>Hy2yDzQc#kp8w5jDn3 z^M&gTJflmH>ohduNzhn6(^tQE@@4wte9#(n$1uKPZka%PFWawYN5hua^?IIPngAER zz5DR<-g2a~8L-{jzWM#v(Ji<=*7iZ?;9_k*^#6Q()Bp59+X*C>Yx_lhM?C%e_P4h8 zVgG-&pd6bNDTsV;#D+PQF{%ZC8MamI)B>QpH#z@$qy7BzsI}4VY;N_oy}@v_(}#i0 c*|bs*?>btw0H{Z|c0B90tsGjpZDrree|SE1O#lD@ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_copy.h.EE9AF5D32E59343D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_copy.h.EE9AF5D32E59343D.idx new file mode 100644 index 0000000000000000000000000000000000000000..8272719389d2439a24fcab85c0c3432a6e12efe1 GIT binary patch literal 1782 zcmchYzfasS6vurK;O;n(3f+*9I(Et9mk=-^kZ7SBh^^4 z&z{Abc+rER;D7MsT@fz|Uc{4$c6R&&GcSZZ^W@DuyvdW~_U`uf<ovqur_Ejy4fO z=Y6vd#J83QAyOgvCdPPc6W_HQEM`f9<9(Jr9AgSjq?9>}*RHMKU<0;+nNgXa0XC+f zLSvHZG2V#R2JuxaG?V#=V<{3gonk_$92*dBqWr|{FrL&VCp0m+BfxDgU7fm)19b+7 z$pR2Y+Zxru?*+G{=C%G$mFUW=Wk#oBT(ObTT(huwRAMpW+6h;^dBv%9{87=2XRdnV z%oP2(1+ILZG?AP*prTIoTmz?U@>ko2#nxO_ZlhW42S76tzABf@^@yiLQ3l3V?BCo8 z={<{;+2_74d#I9d*#l4QvG3#j=;PqayQmShR?td6423xR>BXzBcMi^YdJpZL`$r;l z^Yf4EJ7{>x)2q$Z<$}H+|9bPR_x_%zhiG`Qpf6v@PSEk|4~=fC)9zd;=o51b9{+y+ z(`WZlfA$mLl7ZCWOj31!0B>25aM**f>d4Fr0HPOI0M|Ifn?tftnQTQWWDOqv!suS)yGu@PsQv zL&=E&D*hpTtOh(H31yIK+oIbfbOiz)=}UXAygk2soZpnZC9j5RtM1C-@cnc51obzq zT=6UAUlE~)$K%}c(X{U^dc}oeHIwhtQ@Hzn`m*jaD$m@&C3O}JOz%08wbxQ_dO$X| Ws;}#QF7FqREBPO6^)nPQg3u3Bi{@|u literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_iterator_concept.h.7C37EDF27CC317CF.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_iterator_concept.h.7C37EDF27CC317CF.idx new file mode 100644 index 0000000000000000000000000000000000000000..f24446cb765fd5b6d5ce97c5a508c8737aa32f1d GIT binary patch literal 928 zcmcIjyGjE=6rD8>jEJBHf~7yOS7Q=1l^BRdyNI2z%uZ%EgZtvnBqo(uNNPL(z)rAG z3qM1!&|0t*?5v#8Z2n*mT;_1*4rk6Vx7%sAZ*qjRdYw_o70nYu%DSXN@jR!AfhPjq z1b|i(P9#SO%yq#YvgFJMib{BtDGAlhtsPcl4PbGY=o2VyilHeM(8z~|U9H(0AR-nF zdK?1bve5_}hX#I(LiIyH-NvOO6i2FJbXXiQo+!JY@eQ<(C;W^}(p36+{!+=zW6c~> z;wYp-WpAv;37>ia@-QB9hYgW?nI|4ZJ?=RnWf)8ShsU97zOQzcr+Qs}yLP}uKwfD!uTrOWI5;J2{6jDNn9>NsGlo0X@;)oWZ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_iterator_traits.h.D7913F4F66CD66C8.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_iterator_traits.h.D7913F4F66CD66C8.idx new file mode 100644 index 0000000000000000000000000000000000000000..4227617876c20b61f136d3f8119830bc288270c4 GIT binary patch literal 788 zcmcgq%}N6?5YBeDAZ>42ig@aw*Gz3o(dt1c6zfs&APP%1o2|k9W0GnMK7co$!j};I zc?iKL(3{}FgLpEb-AAY&O!DQM2_M7E@pv?_C+^jjDMP*!4jXsdIDF>CJ2J``6APIcgfY;WgG5 zA|Yq==i$EkbZX=lX>AsA^R4vx{C)T9RNTs1rCZ1-VrIEQuJ$Z(?6H8GIMtVa`!@8P Sl2<0hR-0tGC?Uiy{t|y|mgb}Y literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_operations.h.262C5ECC38C86002.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_operations.h.262C5ECC38C86002.idx new file mode 100644 index 0000000000000000000000000000000000000000..c6c81af1e3ce84cde8cce8b242570507ec656eca GIT binary patch literal 938 zcmcgry-EW?5Z*JFATfoYg!t3=0=F@SpeaNML}Mvfh>>G&Z!d1L_v7rI=D@<|uoSem z&_>YC(#}`V+S1Zp!r>DnAI$E@H?unoGjr7IcJB%Zb^P8qWQy1bp=E7S0e_#<#30~; zwK2w>Ha?aNB&ME+olBaG2AF{20ijCb#^%-zZPFH|ahT{AARPjsF)Bzjz%8fIbn2K# zRHQz`f_rp4#;!}_h_Xa~z%EiExXQE=CIpBlm~%d>41QARXp{)sp4jea1g^40n2DVpZ%as;(KA!N+KwJnXVnt8AC&%k_zf(B9Y2_5nKF(9t!!wv@}K z&hN|p!rO_KhiJHx%fJLNTmqH*hFIp9KrdR3VongUAD{YXH@DA=MQg55ETPiBE8jq^ F`~f~{83zCW literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_transform.h.9FD3703E515515AD.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_transform.h.9FD3703E515515AD.idx new file mode 100644 index 0000000000000000000000000000000000000000..d543747b73f159c2f2894a607305b62a227bcc41 GIT binary patch literal 1926 zcmc&#&1w`u5bnutlHJYjf17oNl*9E-Lu(T1Ro*f zA#w@cd;s6TlLrri2f<@N@Zia6lgao3vliX-M^!Z+Ulm2Y*x%cGyUN%k+n<-{MVB#l zm#*_x?ye9BmP>^@ob$;Jf923R4r$8c8BC7~F07Zi0Ppzb!$(hG3${6!a!Nm}i-j%2 z1toOBx8u#N_yLz1RFxrDGKKk^Cy7vnvCYpF8m5>Kzo z4V9~H$zU|#l-fmrnp}aGslr9j=CWwHoq456j?qGKnW6U5pR_LQUrs$UN9~tVdbGkD z8#?&6m91;MVVqiXh~P16o$_ifxBx)s7R9!(f?li3X!w=XMeF)1onfAo0<3W@&tT=H zqPgRxnT1hsCuJH|h{fE!q4(C8_aA<|JRV2G&PBv7qT3-DZ1?-+G%3^?LIZn?YrOSKPh{it>0u@R3fA}3+_CCu+FZn^X>4{B_{VL zqiCtSyt3Ns57vg`5nHYk7_0XkdB%;GwqtEeHDIjQz(E814U8H%Y~Wf0M-BV~taMPc literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_upper_bound.h.3BD163831FB6E89F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ranges_upper_bound.h.3BD163831FB6E89F.idx new file mode 100644 index 0000000000000000000000000000000000000000..a7a1e0c8ab00a5685c323264bfa62d2f7d840f85 GIT binary patch literal 1648 zcmchYyH3L}6o%dVb%U)FGa{#yQb8xAN)_#hgcu{oaZ*#q4z^p`iH((K;azwE1{NkB z0b6Y-FOd9_<4-5De)-tv_-;0xF6szP!r3OF23HY6$98C=*i+4dQ^YtO1Hfbq_nImV zBnZG;lXMvaR)$5G7!8B-i)%6@BOo$K?FywmtP(c}$0CN2HyC<-V1n>fNP)9}Y&PKg zn8#8vvq*p$s<4sDm#G6Lh4vPOxpVnUl^@8J2n%#oHZ@fHtJH3}Aaf!`#NwRu8m$Cz zCx|()kP5@hHutRl_Y`Znq(wUJ53<0ko0W?#I6-J?@-LP@$5hEjN({}vQg&$tObFHa zZ*cEcSVH%Hp=|=3iP+v(q_;`nny#Xe_UwG~^>cNL<|n0YrC048xnE9~-}L3|;p4s3 zuC$u1{x0ZNaqL(tqTd{J+-Ij&1_-$}zgH;(gvtl(9TNE^_w7a$_` z1z_{u`Yr8zf2q%}^Z`o56RH;g1$_WLzEH?t{QNAQ{PzwxP>yL>lfOa>IB9#W4;Ke-YSfT!ZlDu#N-OAPTXAVpNf9t!;>$BjGU9=rE~=!Df0K(#QZn;O7$Dv? zGJ!MVlM;(lp*#}{I0GUK)MRA^On;TRNiD#n*S2}L>Vx`bD{cmMZUz=fQ%PGe!N3Vl zn2e09kyFE$3khmFaWilN6-b#%*@6j#g2bnRvMX+!UdzqE1ymqzEA9m*5DL2Q+MZN7 za_l%a0|!unn4Oq6m_R5fN=++fXJlZ|E3LU=@@y{;BM*xRgNQWP1xQY0NTAs=3^I~1;m^+Y$8Sh5 zPh;X?5#tb3f;p9kMVv!i3Fb2x&BO)v8O$ag7AaXNEtoT4T7il{UPLI8l$F$ig)$dk zyV#{w2W|tcljM+;fe8am;*gSonZ!_(nv)1}U~y4$u{DUn5|z`zpkfiH&BDaY%EkaI THh?m0AZZ9-g)tZym=R0>&Mr}h literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ratio.5533D3494D735EE2.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/ratio.5533D3494D735EE2.idx new file mode 100644 index 0000000000000000000000000000000000000000..e411e17516de185eb6441a0297509ddad3b74332 GIT binary patch literal 7228 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 Mt-F5!@)x@N7piXlmjD0& literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/raw_storage_iterator.h.61BCA162BB248280.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/raw_storage_iterator.h.61BCA162BB248280.idx new file mode 100644 index 0000000000000000000000000000000000000000..c51cf5e5c403d31d12ba7fffa3abe0f555d7138a GIT binary patch literal 2838 zcmcgueMnnZ6u)_D)SIV?wrbScChEl2=X>+(C1yq>&Nz+G=`6UdkiNXUq?!5ZdoO;_ z*)g`kw(g((F*aHlE9@KEvO>GAY%*4g-A3uUl@&L(DZ{P|EQJm#Mau4b@tAbT{?kBC z?)m-BJ@=lkOGXB~-eMC%y}^O0n4}812%+udtEh5hMN_m-SN-7@mlzck#kM!4CR6Hw zD#?PHkY^ZM{o&R%YBV|1jk-26V{B=3G)W9%QY;})ccXxyNGKQyg(O*ui;`cRPD&^g ziApYx<9c1(K1GrhP7DM%c0x>!hdDu3BOyUl6|S|Vty63lc}`5kl4OUhu!0=ZzT}*E znB&>jcJ@&&5*MSXpu|NZ0dZ=I^ZUg_JQN9U@*$D6+;Fg94{r5|epMDCs{IqhulyCzFIWs`Z9om;d3niLv>$_ePf1 z9vJeZ1zoPR+{h{6CWL5e?IBX8V}Z8}2(6wvaAWzk1zR~)W<{8{^BuZC1?iXZ!J+r3 zoXgXF7Ro|s2kYQ<0kp&Nt#GX|nX*u&gm$t{UKc<=xI6yGQtyY8CX`3$7IVu^T>x!# zUcERxJ9Z|$+s(RptO=kk@8on^zOMY-LgkX(Lybd>E`WA8uI@L?A31MAWpFLY0JWHaA!50_fS3 z$Ho?ugLl%qz0KYZtO=mCqAK6zAoS@oeZG^keb_+b2CBiHt_ebH>iO&KH@~6@T#c%$ z0WSIF)Y)54O%@Y)6pfYw3?(*{>ZOIm^eo+RK7j`9c{Hxct=R_FG_Ez)mSr^7$YyC> z#;z>QXY{RW2kz~;{rAfE&E)W1XqOEf)V}x0*yTa4-LM09w|4VTa$_BTF1c^n@gKPG zS~FhkJO3E919w(*+MvD2-imG;?1i2r@n{VR@jT0}T=>8=`!u=02pXw`3xE$|t@S5Z zLu(qa-jV=coSS?3+!g<6;>2#WSAi2anmExq6s(~`4OMz)0t}r=d~0n9F#Hx^y%VR7 zF5GT<*ZLCuP*rH`usRqBk;YD|lYtOu?6$fYxC@OvRu2PxNMoZa2U*W-wC&*@BTFF12|9qkm3(c|#qnn$IVBqWB897s(Ul$kLpYGfQ(* z?kvqid9pMw<;~KDsG)VOHZU(8zjSF{D}J?|hocss9KG4l)bl%m>x$~i;9`(n600`5 z0Kb{=$uHjj=q|CgBJ28C$x>7(As)dQ0(+#$qB5?XMgFD2#|R6A=*)8MP1b;-3|gF7 d7G{?DnI*n;ym8^^1mDLFHT}@!MAX7b8!)0 zKtaL5(M4Q*0G%BjO(>V^3$z|MnShSV~SAn5zA{^d&L0TFZu4UPR16nfCqgk%WR^)!Y_02&9%Ck*2@dZPV5RKn(e zfU%=7vV~UN(6=qh+(R9i(LK9(uYNs_=f?A8R-U#?Hr77BS2o%9jIk?)%0$m(?9lyr zxEXsoFm|2Qr&4>iGO@RFS-#3Sd8g>ir8Z#zRx1+f+=~3|^Znb$&dX~lH&hrN87-C^ fHe?riQA!14xlB5l9LZ$bYK=3Rxy4MH9-YQ7b!@;c literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reduce.h.428EF05B8A1A4A5A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reduce.h.428EF05B8A1A4A5A.idx new file mode 100644 index 0000000000000000000000000000000000000000..e293f6b56612312c4e186afd053f0284f34b2a91 GIT binary patch literal 1830 zcmcIkT}V?=9RJUc>E>}}exPgWl4&{Dj&8&1Vp2)gR4CJ+=waR6-Ra4@yKz5k!-75_ zh@j}9mxyvmL=ZmJOZ4&5L-f`MMBzgeM)?pzJxEX8vw56K4P6!cTIM3K{=soK}}S6Ev`7DL{YVK9;a*4w2ZQvB=B^f;FQZ=l5E%zBmq$(i5$kbm&3E@mRvB zP*g9k#OM?xULM6=USGi5fr%_gdPKw$2@A<24uyoc93`W9ZW7gHK_hXQmvB5mZ;hd= z-myG)B}*3+GbN-cJkj#sc7vj2D!+n&&OmH6jr$g=6sv$}3CI zcpxGi2U;p2%6v?8uG#MHRsU2E$4&5(E{15j@wTL5VZnG-W*lv@ee6pMf{IOm+M(T? z5nw4YK_!?Ml8u$L6VK!QKPc=cjI^cbKfmT54@(wUciikx0!opQ#!(RyI~K zYRyv*j=$>10h0qY)i&9gn|%xI8OFIzt+v)`#(H(%yGMq!cLV1K3lMVeaSt*$2zjul zhgm1Ri%;&AJwIU(>wu1W2JT0Fc=~I_&5MS+)!(|4H3%0jJUqSc_S-^)9JLNV%SOmm z>sn#CYu(G%@AT6TTEG1xEdfW(iV|?Gu-xEYwpcfVD?PmRaJ>;9P%iwr|I5Hz12xO% uW1P0c)0V0ts0XQHp&~nMOaUm%sc6_g{`%#W7qi6{YniPathrEmPW=mT*B$`? literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reference_wrapper.h.977B591177265425.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reference_wrapper.h.977B591177265425.idx new file mode 100644 index 0000000000000000000000000000000000000000..236437475979b3816614657b637e0a2dd0b35a3c GIT binary patch literal 3766 zcmcgveQXnD7=Pbex31-Yaj?;KEfmI<4cA^bXAA8Z!^-$@gh0TLxLB^&>p19F?rz-* zmc-4EPO@o49DYP4s4>PUe*qzW5Wg@Qq7sb~5~3kU`~w6Xs3ZoTyW88V4FBvd>HFUA z{dj)Q*ZV%b&Fi|m-<^d}D7tPiAt;;)Av6zuvLcB|GrXuz(~{k-fh}oQqmpaZ0iR0B zic1}8oH|rkB?&P>5|X?S9+0?nT97)nq&r>Ov?dLN6$$zeQULwW_GZ+f>chu5S)Bp%UT|s}6py4*ae+&Q6+u?GNL-i>=9t)5V)Kkhg3B|houxOch;d5R zmE5OAvd*PY8*Wlx4YS6j?PDx2FHOt&^HFHqY1j+4ndtHr%*`{WsmWC+@ed>r>uWmC+iq`GsrZRUzF^vWS zdOL*_Ce$rRjT4fyiOBO9D(>7%hyNU$UrnP0^@th9Xc(7GcF0m`LN0`7l-Is+p?B{t zd3hC8w*)c%4*yE6L6us~M)kehMr`eeR-37XAj4JXYS9{Gv07jO?B96t;Tm`7%^sa3 zw>h_!Q5$3_$2!5M)}!A{9JwmmCb_UP54^s^hz>5KCCfjsVI^bT3fWk_3e;)%1*e2x$PT17d5 zsDtXTY7HSeApULs`q02N-52|C`9569=$&B;#7_Pm{vdh!ANj8Rmk(%6Gfw2J)7@@F)(B;+{hIA?D>{xQ1ZD1D;khmZD0O%fS1S^^XE z?*8o9Q%~oYj)VU~4WSm|D3aG8T~BHvpEwD`sEJI(d~)*SV@FPf-ve4#h09JzH}yV# z@qBL0@mr!pGQPs9WjYZ;GmTVZg@Ia4t(An2W_&AsAz}p0_>21p`1DAF!l{$^AIk=d2G%X<56rLHE`zQ!im%VKh97N#@*^(Mxx+g zybazKf=H@@r}e9bc$$O)l0>~_NJQt+hsR$1c;eD6xkm0C5ToBVL`*Qv)Z}ljyKbhL zCVNx8VT*5r?>+m83T{uMPqm=!BFPnoC;)#mtRs} z3h_Xw;900l>XiO4H@;*CUmJRB6+LTq)ttHWs%z%kYVBwanMbH_0uh>Rj8+@3HO4D^ Tgpx=70G)ga#|a@D8AIq_b5%%M literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/regular.h.605F1F6A3685148D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/regular.h.605F1F6A3685148D.idx new file mode 100644 index 0000000000000000000000000000000000000000..b0c44641dfdf90da8be6d383f11463eaa60996af GIT binary patch literal 666 zcmWIYbaR`;#K7R3;#rZKT9U}Zz`!5^#Kk2=nP(Y+3=l}m%t^J<*VlKp(hn_8Eh^Se zPD;|(D@!iOPS;N?D#=VsOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$_3%%oW#6zeKS2H z6Fmd{%)I2B(v(#FoXn);iVFSs_~iV&5! zl$u_elUPJQ3yV{8GwEn)T4p*hRx5LpKoMG$npPYGr1eT`u9!UA%fraSB+MWz4Uz%@ zho>JbJQ%zbfx@CJqQVeC28L+8AG?-v?~4Qq%Q47F!i005JT#Ns6}X;}i;0tiQw1hm sl$w(WViy-B7wdxIe2FvA!O3{38yin@>XEpB9HWM*Li03pZ1KL7v# literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/rel_ops.h.BFBF1E87258219E0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/rel_ops.h.BFBF1E87258219E0.idx new file mode 100644 index 0000000000000000000000000000000000000000..1dc64b828701ce51694b5d5bf9a7b801ebdfec65 GIT binary patch literal 1078 zcmWIYbaT^VVPJ4h@vO*AElC728AO1%xTGjEn-RzW0S%REL#yQcyy6mtkOBp@idr27 zm1-j-k;+<41`Q+yItmC*r6xmCetr%^vQ-j8T4qkFmA<~dvz2~macWVqesWThzFt{! zL3X-+Vo^zET4HiZvA&U^v1PJJvYCEzer^F!M^Uj}Vo@##C+8&QrR$sN8JXxA=x637 z=aigQx8C0A7F$HxQhOv_BCu_dJ?nK_vymHI`gIq~@g#d;YG`30#(i6!|(ineg3 z4T5P07qqiwfNBDUZilS%$rOiVyEV8ABKB`nCm3E?n%XWy)PbYL|P0~b)gs-3DEm_X=H z*>kuoNK$A!4+95Kfr6ca8<;>Sn0asVu8Gx}e|Q+!feOUz#N5CHLIKbxX~pM&=>z6g zMj@~pVJ_1vt+`_IY%dQZ51Sx^pfto?Kp%3j@J*5q<7XCOli`)&gJ~9FQ{-0^fVoP9 zO^sho0Oko!pBw9&FXSsRim-|EiwnYB7OnSV*HZ3%kw6Qy8MGx~7PR)S;FxEam&M4% z#>v5{3=@7aqvk$ix>+L$_6juFOh~%fw;au0=IqSNZ;;FK$!g(-%0Rs#aGq3=Ic^)VXiVv7@=+9N=5_T>}(OmIm;hyUyUQ#zfu22@U zKyrn$G!joiSpkWss;mmt^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xIkf<2KtWMzN@j9mNvd83y{s%s%}FfD%+I5T zjcJ+bz;Lb1O#%gJQEFOo43O3t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmgFXuWat;A<|bz5rKA?=Wzg8VlFEYA z_>!W;OklXA<|QWOq{e5a(bd+>;`qd(%#sXXq-G}5+veiL+*G>SSx}Upn_og}J99E~ zff343T$!5$$`(bbX~h>985s0RYp$3)+snhq!z9iiE)9|b0f(O!`?8O((r4je($Lee zuIPU7PJ5n2Gmz)45rN=2=s6(CIe0t3<)Za|>{`mbFA`|3CxfRX#8d``<2ko(J$vx8 zjggCqi-SuECVVCEN>`ZPhlxPdRy$~ z$pJ~uA>IKlXI&s9*74u-8_4C(vOWm6D%dM{Ab2XFDsc#&W{hSkf@kPu7>wYVxtaMR zc-Ar2NGctZ9dlrEMX5Q7Aa-$4axqvts8ECgb{KHzbLaLBiD`rO$$R>W=^V=zP`S*m40Y(YEiL%a#E7MURiQMcDjCIQAuW6 zVsc5bzLBA^WwJ@KnSOG9ZUIn7QL$cPQ7#B4=OpH(>znBrndlklXXYj6l%}NW=VT@& zS5)Z7$HOhwPs_|p(aWH#b@7>LbhNQ3H8;O3mF5-#BR4HGoyOrWBRZXO19X$EOF zFu}md#K^$Hz{t$XP?VZhti#U0z;R&mjTt=Q3``>IvV5`vFpVPY@`CchFkac&^$WJi zax4FyU6K{_UT1 z*7Bhl@=DsJaBANPal8(Ay>E*m`>b|Zyo%0OpNtbY{zneY0#2VB>zgm+E1?PN|ND~C zeYZjxuaWoDn$7xDj8xF{vhUE0IQ5T74d_ED1}Q<959OBX{9pHUl_p*z`~EQ2=iJ<@ zjb`MK& zUL%j*^y9XPU+;jXch;VNuayceJLA=Rpv3w}i*bktUPUZZJ%x@2M|-1L5WLW|ch5{2 zA2i`;y&t=la_@@-M!P11rX(!dJpvg-J)Z1M#%oi2!Y(inW@G4qhoww%JMB_i=+9N=5_T>}(JWwESdi?SFM1kHSTNteTCQ}#1-$kqF@IQ- zlW>-T zQpyRF4`_NP=6e@4{#yPSXp;zoh%n5i$)~0}ZP#P?f~Gp)k;~`TRrUXXWtNPfj3_K4 zaSGgiX1z)DKbq>I)SN_+fyG71#qJ;m8;F1a4j6-hfeXQ8MKIaJ3-5W?{^)RJWo6^w K;$+}NNC5!O1k~;T literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_all_extents.h.229B5F6BA2B9205F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_all_extents.h.229B5F6BA2B9205F.idx new file mode 100644 index 0000000000000000000000000000000000000000..58f5e729d1f25c5f98c8053cc9d258ea8c430125 GIT binary patch literal 834 zcmWIYbaS&}W?*nm@vO*AElFfyU|s+yCj+Y(yO<=HVBll|MKmKb>n|Pi zOv#^0bGex~fC>!Q45YvWLc!&IHv2YQZ+ODZ#LdOPD$XI!111ic-^xcK~U< z(wZwK&-U^#@~{dq2uXwGfP}--4;CH_UW!0rJr+G-m@v#;j9g&%RCGUhr#(-iIa=?> zuBF`jB7v%n8H^=is$q@` literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_const.h.87C5B951ED53AB3F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_const.h.87C5B951ED53AB3F.idx new file mode 100644 index 0000000000000000000000000000000000000000..fa4e52173ac323138d86e65657eb9cd0d83389e7 GIT binary patch literal 698 zcmWIYbaUIp#K7R3;#rZKT9U}Zz`!5^#Kk2=neL201_;=wR2y0)=Oh*vD})r(+A-L` z*g$4UWkG6uNl{{ENwFP6T4qkFmA<~dvz2~macWVqesWThzFt{!L3X-+Vo^zET4HiZ zvA&U^v1PJJvYCEzer^F!M^Uj}Vo@##1I^7#*EiEMGSM^8&&*5CDNRY$&&f23ApaQDHE_z{v!P z3r1#EvuTSJWKRWEax<|56=<_*i+~A)0-(dvigzH{#K;A<0cNsZY0VXrXM1@Vc~}J* z1f?O?GB7wi{b1q2;H3x@)@0EXh6%%T0Sy5;rlR}7JMDQA&Cz;4b}i-J7YS6Y$Dk(( zQw?(*P&LS9FxABsYfYoy%-sqU=H%eifvG;`y=L;r)x4)u%^|Q>F@x0bmrv zr9o{#rYZ1+tZ#D=+Nw-QYhZAAbSxt|1UV~fI-w00x^yKAQROh?gNTQqDp|~@2!%>z z(?F8QS(T~$pCNWxV`8;X^iYlEY=MqzEWgrIpX` zKccUfuGjT@taso>PS^bV`C;evitK;|`@be*A)fC&?gqKH?RU01;o7F#3gI?JO9QU) a`%fqDXYt#e@3q=&ohll*wEc-PxYiG37s9Fl literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_copy.h.59E1E2FC7ABAA199.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_copy.h.59E1E2FC7ABAA199.idx new file mode 100644 index 0000000000000000000000000000000000000000..cae3c622b3adc6a221bfce852a57d6ac6042dc7c GIT binary patch literal 1910 zcmWIYbaTsNXJBwn@vO*AElFfyU|VVLM4o?{7Xxa^%SKRm*zk;nOG&~=M|SIgcK;Kl_lnsrq*gQ zXkf8HM*&q3WVnt3R&#X}(2Ue%uu05G&o9a>$;h>1K-I&LmYI`krLV8=Y^5JsoLW?@ zpPZDWuUD2_ke#ldSX7dkmY7^ptZ!s!Y?*A5Y^I-_pIZRbQBH21R zMkaa&`k8sjIi)G7`Z<|N$rTm)@$qnb^@~z-^UG4>lk*EI^)hH|E71RGnduBjRsy3j z#mWj8o0Yjqiol3`Jwu_>=im3&JPhm{46LFIqTFDDfs=`mfrWvQnH8uxt=No}fq~<| zGexw|2u)aWNqktu&$lLM!V`CVUaP>*ZHi{LdED~+=Y6suVdU`s@U~6o)BoL; zXsSInU);hqd8<8|>Z3RPxNYLsJD{nawddb!rGm@OXsQpCSRZLI4)H(}W|`_KbTl~H z8_kg5g{HlGX3F@W2}kSw*tL{+3^XxR4-q7osDM5 z?<%RR?#21}Xu{jS{JwhoZfqf%aDE`yd=HGe|SCQc01gKCj4jBVwsgk@Am?Q zkpp(i`W0-iPm4}K6JB7Qx8~MF<4I_Se0mUX^6a40G&I#2UB!D>ANHGrrdqmBv3bq6 zbMw$tuS}o6$2UcP5t{Jj8`COguQyzVCM?ioGa>0_-*Pmw#iJALT;J;MKvVrWuWnK? z_Y-vCl*Nt;nIT-e&{XrY6b5Eg`|d_FJLk+xi?=gaj-aVFZETpZaghePaOlrf<`Q-; zN6`#nT3C?mn=g7AO;|ABzgn(z!38w4lbAoO$#R@?37C9DWJQ1_6$F?cVw&lBw&p4$ z7b_g7M$iRf3#y=IP@D00(W+kj}Vw3_GauwYV-f7R1Xg>8U z`e;)I>svIJ2xloMrJOMNfM&?#Q`4Qc>oI&m6Xq1S{mgok=zlcfqSTy3kgJM|l8ePb W4Au?X-sXQ{6WGGY#=r&=fB*nT!qH*? literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_copy_if.h.8F73042FE05B63F1.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_copy_if.h.8F73042FE05B63F1.idx new file mode 100644 index 0000000000000000000000000000000000000000..a49e501487af566c2400d9e845c95b17386fce55 GIT binary patch literal 1316 zcmWIYbaRtoWngel@vO*AElFfyU|VVLM4o?{7Xxa^%SKRm*zk;nOFrBrKV&iCzhlt6aZPZnhY9P zEYMLv6$F{Bqkz>|9R*YqH5qIYbJFvRGD|XY?HEwCFr;PXq+03g>pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@ZI++O{n)ZF~C)cEB5g39>JG`$QOTb!JqmzJ5%fNCo+ zDpRbifH7K`o1_Sg%#8G(_c`)EsPizeb1<-qGKlhl2?kCkMg|rJMrKx^{il2#bd@HW>WhEt4$Nna(nk}n zzPKebMYPWdO;~bCd|1TKwJ@>Y8^;aPkBy;dr??2IOS zpv3w}i*bktnsBt`Fng* z^cSHCU%oM|V)lB&WoW|U(TR4hZ*_N|34hM3n^esG1YI~~v72u xyNC=-_|&uLqfHsCZ_x}XO3g_GDJd>WE*1wd*gymXu=csHa*b_y^^cK_0RUT$xz+#x literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_cv.h.CE95648183D95206.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_cv.h.CE95648183D95206.idx new file mode 100644 index 0000000000000000000000000000000000000000..e135cfec4e12946d5be215718a5986757489b9b1 GIT binary patch literal 686 zcmWIYbaPwA#K7R3;#rZKT9U}Zz`!5^#Kk2=nbwRz1_;=wR2y0)=Oh*vD})r(+A-L` z*g$4UWkG6uNl{{ENwFP6T4qkFmA<~dvz2~macWVqesWThzFt{!L3X-+Vo^zET4HiZ zvA&U^v1PJJvYCEzer^F!M^Uj}Vo@##1I^7#*EiEMGSM^8&&*5CDNRY$&&foK}fg)pa94aU>H{BCM5!c z&nTuQ-epg48aER=2Lr1To01@yVBll|1u!Es>q*ASwNo4S7qT(20Tqa_iwJ-Tgo5KO z{pUkn)gN;+ad9%RigJkZfC&Z;Q0xFfQEFQ84j`>pT64wZ*@|MlP^3E4m-N)1D{M409w<8012j zu*~Ddr_&b8HUNb=IXE?8hQM456b3mLrumrnn#ptfN}mI*6y+6_fvGM^%>e}zLvc}Z Yu{ekUN`_Ft8q1$?m0QkFfRTj(0M@U$NdN!< literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_cvref.h.20D11949D987EDE4.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_cvref.h.20D11949D987EDE4.idx new file mode 100644 index 0000000000000000000000000000000000000000..c6d7dc9564c385f0bc0adec1a7e1e60bc648d557 GIT binary patch literal 826 zcmWIYbaOLeW?*nm@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmXuT$q{f#NC1wI0npqrQoS2)cmqAB6 zi&As*%TnW$%Lc~QqSUm3uo!4CFaz$(TrCITiHIGI3^%E-*>#}(^qCha|w zn~4Lcz<|v_6igr#@U(0w@hEt~L!1XpFmQlU1P~OZrWNl1(i@KaS}<)% z2rDBOD<=o1E?5po=#|!7F?qI^hmnU>h(SmiChYL^gM|l!mm*MDk3~-yCLFEzW7ksd zeUU(6V+LbMm@v#2K(j$!sOWz1PJ5n2GtBKkVUWXN!Y~&Dg+b1RX+Gw?X7b#=(&s?4 u#d*bLU}hJk=70iSU))_Nnfulxga}TKe4DJGc7T> zq*&j`(AYBBB-u^Wgp+d;^V0Rr^o&gO4D>Vel5F=B31Ers-wS&BmhC-2Adsdf1tqpO==IPGgUi=B1>j#pfm_7v&ez+NzSw zoXnC+eNgxTBMcspzyzLRWd%&_!=;Ka2%L?V+Kz+1Ct1w44;euOrr>!oS>XAj0d9`rNG8ibU%2fJx`)p zue9ch$+NvYj67^&3}VvY%mpL_Z>`(_8H+-q_kjV#0f8b6Gj;}1qlTiSU^fHi4TkT`PKxlUh}x+`Oo`gP4OyX zQ#RXH5c<{}%>s|j7q@Ut-fE9m@2oxlUMm$`cE+pdK#BE{7UK{Pyo#dre(YMxy)P0N z*cuEPlCZ$`2xJiTc(OMcuiiha7R#(WdcPO1qAlxJu)RJlIsvbujH%nQRts88VdP@t zg@Ij?R~G4~Vvic%IkDrAOm?ZRtP&Y71MZ)dO^!K=u$v0=i-MH=`OdH zNy4M;)U)WLO&P3j@ftZX-@B;s*YeLmy}}H_!Z0I?QgaeP?Bb&2VrvkC6+}P)JB-1= bz=>e81=!UHh3wnV!oteV$-w|@L%;w4`+tzf literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_pointer.h.4FC2EF010B5D012C.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/remove_pointer.h.4FC2EF010B5D012C.idx new file mode 100644 index 0000000000000000000000000000000000000000..d429ffe780bddcd98f08c8250ad116406c513982 GIT binary patch literal 706 zcmWIYbaUIq#K7R3;#rZKT9U}Zz`!5^#Kk2=nf{DG1_;=wR2y0)=Oh*vD})r(+A-L` z*g$4UWkG6uNl{{ENwFP6T4qkFmA<~dvz2~macWVqesWThzFt{!L3X-+Vo^zET4HiZ zvA&U^v1PJJvYCEzer^F!M^Uj}Vo@##1I^7#*EiEMGSM^8&&*5CDNRY$&&foF)+cv$pi{?MrKyA>eEI#+ve|QV`2j;5M>t? z1rrDb{i=Dv4L(x8xtX{)8CbKV)AS+4;2fZlzU$!P}qpUND?Ltb1own*qIgG58i3dlW2xH z5-1FEAxt>Y)F&`idD#J=FeeA69?Xzq-fJe$?JIo_G+T^UOa>+l^9WEi$QLj(i&Aqy e0mV>Ulw2$hVt|q+6tFtx7wHCXpWn~O!Tk6bD%V z4ByJ!q(orQvQ(7@-g2)Md#{}U_jhh4E=~qkF%B^vFu}k9ia8(vy1sY^kk%`$xnlBcFApORt004* zG*}Kuz#PEH1-7`N`@uWyc@oVIPd`|AFnB2fRjae83&T`L>;2fZlzU$!P*{gSM-nE? z7cBKr?`lB-&=5`zP6L=Q%U zmID$n2QYGhEw1Q(@J@T4M6<)w4;CH_UW!1~nk<^aFx4>E09AvW0#hBW_hZ*m?tPI! z)p`tik}%Z=`1M!lUvh2&s^;Y2)Q1VfTnrQjITz-FW8P~f&+RLH4m3oJS4;+`x+paV e6i^JsMajkDAOy^!;smiHfTjSr`Cufxg%P literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/replace.h.3B2DC15CF8D44890.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/replace.h.3B2DC15CF8D44890.idx new file mode 100644 index 0000000000000000000000000000000000000000..1f17b6208048f571e42267dd003c05913564fe72 GIT binary patch literal 1908 zcmWIYbaTsLXJBwn@vO*AElFfyU|sMN(NRDb23et_fW>rVLAb%13^s{5>G?&OB^kMP49Qky3~8A;saE>>`p#DRp~b01 z#rnxfN&0$a$pzWz`iVs)nQ4j1CB^zihQ^l3Cdp>{$@#ejKpjQJdWl83Ae@|&n3t|^ zre|cLXP}>%mz-0YlB%DRnUq{np&uU)w@kk%wIC-kIaM!%#x?>&A}uqW0cssE{!*;0 z7|QZ9Q-E<vgOd!9 zXtnC!{z+#oADZe{(k_Kl`%Z|Xnf-d-7De`1?XqaX=c`Y~2^{|;hh_+;&yDrX7xIAPx`kb44wb4|=0)bHq9BLKa z58i3dlW4y9x9-4v#wdL>L#i)s$xIRLGeQ%VToNA^@$;<-n()LOpVunzbDN@BX&$#c z|9PJ*NEkU9KD=$y`SgFcC7NoF%@?}&^$uvNXYKj-TB+c&Gn(oH zCDun;j6*!ogjuF~3LOoO_C_-#c%f5Yi0NlCT6(y`?rh z`{1N_MlM!P4o+2=uty++sK=AN$!J!_C+t$aeC2gEn%Tdrq_Vmf=jWpdZ~yZ9>g~I+ zg=oV0fn1a0=Nza*6PEnp^^n``a2J~JpH+)xRvx|I3lv5U?=9)q(aaW)PPB7N} zxzYs}(9BL^{;(#?an2=RsuGbEv4SO^FAMivFY%JP2@+-(k%0+6jejao;Tv`n&FoXp zqK`IZu)akzTR2NWDdmL82Q<}_Pfd5)uE+2NO_)>Q_A~2EqW{r^i&AqELDm-+B^Qf> W7;GQ{0$3%lEaLYT{IQRbjR61{_qhZB literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/replace_copy.h.17A3741966711320.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/replace_copy.h.17A3741966711320.idx new file mode 100644 index 0000000000000000000000000000000000000000..6a6377bd96b920405e846fe331c7eb0c9eef59bb GIT binary patch literal 1966 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 I9*k@Z0H2nUC;$Ke literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/result_of.h.F09E247C7592CD85.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/result_of.h.F09E247C7592CD85.idx new file mode 100644 index 0000000000000000000000000000000000000000..a609fa04afed57a159b43e98a18cc920b50181f0 GIT binary patch literal 912 zcmWIYbaU%qW?*nm@vO*AElFfyU|x_ShHNK=MF|(xDjv*~GC)G+{ zU*FkEKeRZts8~NaDM??iEV&>%T|cp?Br`2BxujU%$k5m_*(BLaKRG|Q0H~v=STC_C z7leTp<)!PJ=^2^m8R%!`CFhi;r0VBnCM8!?=*Pz==jWwmrqkGxw9>rflFaQ^)hH|BT@+J7o`@L=9I+ervYt+vk|QL5@3X;SXlw%wK6v;5g4VR(F~<)U)M8p zGja1UaLTjE3xWv-ZdN9sEF&AMOy*jHUC$Y8*qOL^Kxu%1fm1?BLYsk`1(Yg)3MQ!a ztabE`y$e#n%qcA`tpX+(IKYY-fR?8f{{*sOHZgL6ZK&ve@J@T4M6+IL%@vbpdwCdn zIE5I5q@kJ^9G-r#@L=##Wa8lzV-XXE3G;BuvdN0Vcrdpyaf00hGm?i>-csHPW?!`4 zk6lZ-_eBCNP-ak;gz4RvUU+u9pu#esb2vFTHDSVsj~{Q@b~b)JP_;Chv=mHODd}eF z?4w6-0-YnlCZPxu2HGSfuM6YBLIP+cC>UVQ0fs;hD5x2Vi;|0#K@4^f0Rf!5z1AtV P_*!3QV&{Md8BhuUf0gy> literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reverse.h.CFCF8DA94D88AF7C.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reverse.h.CFCF8DA94D88AF7C.idx new file mode 100644 index 0000000000000000000000000000000000000000..360340dcac8afee80f52c59341ec02d6f2110b5e GIT binary patch literal 3606 zcmWIYbaUh5V_cpOV>BkGcwUL(9g_E&M8ev)z8UHO0KBTkB^62rk@G)V|;OW zVu4-;UF`&gYkYnID1d=sT}(&Yi&D#g;gm{q8HN+Qk0lk zLi_M6%}Ys5i_c9=F3K;au^&rIGIKIZD)n>o%RsRPjXz-KO|i0KD9g`GVJNQ5O;QAA z;R7G*z6a^Ehw(7*@G`KQGMKW12?kCkMg~3>MrKx^=CtAkoD2*c2PWT`!4uBFB*HE$ zC@Wmi{otMUJc(uzb`3ra0T}PYT4B{wi#{+him+=6Yl^^xi*j=h{p-HT%*ewo<0q2= z6D~Wue!(_bE*79_IRQB#n6O@H%@vbpdwGDWB^V^6!9@*_5WKZ+>xxxU}eM!FMSgh8FmA818tb&fIMphdj!u+(@YnZGG*A!Y|R{DJjo^T zVG%#yn&7o%;*QU275KSL(Y#?Ew>3sUX+Y-%9%9})w9g{ggrK2+`=_^t36&H9KGqsZ422C^U;L2fBAj&_TAV*G~xU}uF3Ip4%DFuznD>TpE2F65h#qD+&f+=Zt4 z&#J{TE05mq#p}5(>sPS7J}o){uc8Ikd24P>G@gWJ!KVlDCeIE^O~b1-F;hyUyUQ#zf*0D>=AdFOFS3~0IG3bdRrJBn z(S(aqa}q&1i;I$rgFy@q5CH+)Fa`qyuq6irY%m4`11o~bg&RQ I$<4(80EL;p&;S4c literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reverse_access.h.3BC7191EACA4E2CA.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reverse_access.h.3BC7191EACA4E2CA.idx new file mode 100644 index 0000000000000000000000000000000000000000..3e4570638f936fdabd9f31d54cf4aead76a08991 GIT binary patch literal 2440 zcmcguU1%It6h7Nco9t#xbMrIl{?OgxBO=4aD{SW}EvLyfbuv)Qqm z%{ns;iKbW;eW*SdN?&XZR8UbA>`TR>Mzk*yP_O|jf>uEh!79}Ur4+q)CO0#QEcg-^ z=FEI&&iU>==X`V7BZmeDPk8|P@`vW86+@~4fEIk|hNdpK@dNoqxF`0f`YPcL`6O?F z`zql`hoouJJU?+yIa;EUCKDGf?Rbt0j_Q#^L)WGVF2i zU{r;IhaS~XG|8CJdO_B5%9L8hccq+%ydsy3`HB*e1*Z+f7W z^X7LJ12@J!fQYe|IQNh-vE#z&pDl)TGMz@mm`j)pFMPieoQ;0^Hv{#!ifl65YZ^0P zCs{&M3i=>E;)D|mtMMN{U|bAph1P&|$^q2=%I?mdA8&L8QM5Ct)nS>AyJR&byg8*`up zn{c2sn|7cKn{l8ln_Wj#Yq)BnvHwyvRUb|v(z8>tk7V<7WX4?; ziC`w8KI#sl>P%FZIECoZPN_bnk?i3s=bzmBaUJe^+}}^<%%FfL;ImOE9_pv1F(~W_ z`)tI;x&C!Mqjpcb&qjQl@27<@DC&v&C|dEku6*)2eBo+Afk=R-OWnLPaXY%$aSh9| zy|Z1QO!R}om5~q0uB>`9{lIBAqV1sb08jg2NFPVpcup)C;-ciD?feq^)?1^N4X*`k3szXe1W!xdU3JjP_T=wK1O<6;1qI9 z*eTWf;~nXK>zCKQ{e9B_s4B4<$)Q4-G^Hew7V4U;-$fo8iLrjo^Z}sBencSU))_Nnfulxga}T zKe4DJGc7T>q*&j`(AYBBB-u^Wgp+d;^V0Rr^o&gO4D>Vel5ay#ZX+Co1_Sg zLbW2rKYt2VXYnwwb1<-qGKlhk2?kCkMg|rJMrKx^=CtAmObiSh2PWT`!4uBFD8ecx zC?*Wks8?EZ#pKyu9!4HkK?Xr-aJm2zucTcHr}mu?M^pWJ-xfvoS?#iD!utQdq;%h{ zP(~A$TdMPa-P2W?Xu=o&)*YD77^ROUTzzp%W{PN^5t^{%lK8NQpKndjgw5lY=Rfb0 zHANHl*nDvd*W|7CXu`Ah{CllbaM>A6_&|yEkrv|+4>aLuy&t=la_@@-hKV$Tv?MG{ zJOUX+J)Z1MMpF$7Nk%Df&{uRnc&9y2qWRCN#WE|8-tR?Iy=DChw%4acC!h&`dJu2& z?4Z;%G~sO5gUa_j&dz4!V&&xE)PlK0x=*or&9`&&&{VHXpTEa9MSl^R@Z}rRDrT=Y zT!tnr9-V0C`c`)bn(*hmx=F>{Ptb)^7CS0rhH&jdQ=N0>rN!GBEJx6UO&c2~Y+R&) zE-aYuUoBU<-~yWJB<2rmvK;4J0*1GUtcVrNmtPj{xnANWbrU4aE+PXHKJ_g6Xj2C3 lTQoz8QgaePN{Wk;i^V|;tjonc?UpXk&tPO@005FWwyyvH literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reverse_iterator.h.724E40878F82DCA2.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/reverse_iterator.h.724E40878F82DCA2.idx new file mode 100644 index 0000000000000000000000000000000000000000..28b55f1227667b372e4cae575c85da87cd136c98 GIT binary patch literal 10846 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/roots.h.7034EC9DF151E72D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/roots.h.7034EC9DF151E72D.idx new file mode 100644 index 0000000000000000000000000000000000000000..68f1e8989fcba083a454abd5002e365344d510a6 GIT binary patch literal 978 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/rotate.h.F66B1E4029766689.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/rotate.h.F66B1E4029766689.idx new file mode 100644 index 0000000000000000000000000000000000000000..2178ee1beef4b7f5c52f12a9f61a04a08759e737 GIT binary patch literal 2230 zcmWIYbaPwB!NB00;#rZKT9U}Zz`!5^#Kk2=nL12B1_-2O=A>Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd{SnKeo=l&Vo9oA292#s&d*CuEdaVTu_&`71L)t( zWO~?{mYGgtkCjvwq{f#NC1wKsmRTHMnpd2eo|l>upP5&Znx0xjV^8K}<^nBdD6Y&+ z0wtHC)U;w=HUb5*%BdTMSOd?~0~MYii% zj$QhZHDhrt*{)ZOTe@$C)tP3pUC^lDpQ-mYyO(SiG#ZH8uSvG;BijWvsZ*pLRlS}L z3Tbs2U09L@hP1jioVQieT3%o=!z_?363UV=MZg>&t}21x8A%u+$(e|oz~xwcBl7=D z+q;gDi;#KF;-aXY_;D{wgF3*y^i{LJmMhP27Fn#=X!~k z)JS|R!05JEOqF(?9WGJ8?f18rDsM|-(#{3 z_*ne^W0{xVbFvNKo2hW1=>5tUz<`oAmbQSU8XiV1V=XxEPfYJxMWYj+K%prnWsDS> zVw!NCb%Bsr$A8anAVq;vQAmmcHQ_wny_1YDH?8^$axYnhHn3L6Nd%c)T$EgF4Pvl@ k2nb+?F&G#?4G<`RH9vq{#_!7CExwiHZew9$W?^Lj047ha#F#P#u$=0iBNqeR{o_W1*Ii$Ba2dtOLIzUH5oLp zTBf6bE)1~;QygT4jsjNGH5qIYbJFvRGD|XY?HEv%Fr;PXq+03g>pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@ZI++Lu@f=ay%x>;A0Uy@jo8c!Enlk@Y^GSeB5tOTZ| z6e}x+;>z44MPOpuBG^)Ws^$C@9tI9h1~xGUF>Wxyz{$kOz{0@D%*s%dnpV6Xs8X-A z=8DO)y*!LOY(fk|(x8+G0!0o6{fZH0woEc?;(X#lF!O*sZE<}VFIw-%uBF`jB7u6P z7^Ea2IvE&tGds&IZk0d7$i>FV!Kn!oPGbJBCd+ZoC7^0iSy3yPFw8JUDXTylr?KpoBE|+bYXR_A-!DEqsg`0 zrP3CKgeon{R{SA|MFOt)L$yMGXhFmd=?@j!p9%pht{@bG6lwgyNQ9y$ll1xg1M5NH zdEGmo`#gE>d45QLsI&6}iLv%rXdY+-ZR(yA)j{ow>q*V0C`!9exoK&p zrKm$giu+x4Y$TyX&9okms%cB{Txo7qTU4*2j;6+{6{h8mnyK1HO-7A`;&ppk+?N&I zP?O^^O-brQ>coT+iKwGSTu(gaCaGw8STRS(jhJpEBJpuUP3xnE_ebbX;S|n{o z_38p?Msz5tMfCWwcGay&)YQ|%)wipw$K6>s(ptidCXc(X6-{Z!+H=etO^v2&J*~;q zQ0>r|THM+=&6s=qy+TWIO@btxWoOUVqS_^X>$M~fFx&l_AJ_I|Y&I&9m9R1$k&wpyY^~>kV8A-V4xagkv_}7C= z`E%2f;B)whdK^7OF-MGO(lJSN4~}~vz7NNJ>P>@j{N5r-~W{Ee)i|f)jcdXx%ngP zHv98jPT5H^m+T@^WQE9M^N>2P>?N6B_7erfzy;o+gLOR36%s=v>lJ&6!eW?cfDMqk zL2-~|ny3+th$BP>Gf15!S|pnir-(8TGa#M@n+Bxm+Et*SVBV zrH9KC@N{!|`@Ofh{6RnI5NHkD;8{m=$4gwH>!B{L-mATBTw!0hook?F;AO7Cwm~v$ z?V1+g*+}yU>0rEQczI^ET4XL$SEhVC%b+C#(qkI#XqW!lK+@{|zpsfJ1$~)-W0ofh9=-36>AA9KB1KA-(1d1SgWFP(eAiJc5 zV2SoCqq9uwD+p9*{UQ1fX?<1*W`(2mHML~4wicGDT900Wkh^PrefRyu`YD`fIC)BB Y4fUmB419Qs4@Eva$%pm-7}Y!f0WPCx4*&oF literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/same_as.h.57D42C3DEBA8BD43.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/same_as.h.57D42C3DEBA8BD43.idx new file mode 100644 index 0000000000000000000000000000000000000000..c9ee7e297f167d921d4dd383f2013341763d539e GIT binary patch literal 528 zcmcJM!AiqG5QZmd52^N4a}iN0ipL$Tp=eKHp;|A3;6W6^X1j^2Ng8%HB?Vu{cPIsY z1W&$#o;`YW7s(^^hhcxdWoP(jZ^omM=K>5T<0|8tHUYplrL+{+jxkoTNcjK}hXcG- zTq>VASvVirGO|!zhkcv>5*H;;+@IPIp^lP z-#O==bN41Qr(|Trg#nOmn&Pq%EG`BB$hi;0(qw{!6ZnysP?D_6p&U*t&XSaU3QN#9 zOVLU*Ni*z1l`^3u<$2Rqyk|C5Hw(8ptb_+hIa!C3#Yk=;H(aBeOfoEPHxf#_+b~L( zYbVVVZJUYPO_c3zr_DgnnS{NEc-Sz@!Vw_xMJ}n7&za%9Q7K>Sh)U`8L8bgZ`Vn9} zZnaP}$rjosfd8%v%%qjjp(vWJLvtB|W>BNSfU1j)j*l!TPP3#LH?jCd`ad z20%c=$}82fcR@cnq6$@oxhk&x`TB-Ii{%I!iuTgj6)%|O zNU|)szgNqYWqLHVbHPPT>rt6VhA4m{+Wjiy9-+VOIdF5^ z%sHKnY9tE85M&4u{N=PE22aIuT8csIohw3%QiaY@AVuj#nZ2~UqPc<=`4yHo=V7}B z!k^Iv+o>B>gGWI?f+tOQboTp0S{~BJHj~6_4?1$&NBbn|_RNn85<@$8Gu1O((}^@6J+i?$2`vJ13U{cc!V$z>&7obEZ49`D?u z*m3G=B}9mId%u>noef_G0l9k()3kmUwF&}~C{1zc5C5@>^Eclwf2gpFIkOjiCa#-a z4H0>CRqW#02S09rAYW*{6RhYwvQZ>O0s{gQ1o9o0jrG$_Xbr?l7p|;wt=*fv4Fd93 zMeU{rX}KHH$Fod0Y(-J-tBY_-chnB~E6Fx(7negU0Ye4z1Y}g%$IHH{ zNrZt+EITo8{A0;^E_EZtBL@mO3Z-V0#5gydhais)FRzT)Ufsk)`na8EBSnoTe*!;0 zbAed5d*9mP6YMV#D`jtv`Ji;_v`Y|>`Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd~$wXT4p+pElEjDDou|sEy>I&)-O)X%Ph&P0y!{) z#@3cp7No|P6eVT?!zVMZBsIM#F$d(~;*!L?68hR+47WEvwJb5GG_fQ#1?U2X;>z44 zP$UPC#|8^ZC7ZWE3ry)%E%fda^ zOT46RGVw5(FqnwKgn5{P8G_-wKQX;)6^%}O0vZ`C7HkYtRFs;N2x1o(B^T?17_f8< cWCD{q41kh46fg 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 GA?SZqmGm?K literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/seed_seq.h.79105115AE614921.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/seed_seq.h.79105115AE614921.idx new file mode 100644 index 0000000000000000000000000000000000000000..5a757412024de80a6467ad13e6b433fdd3a65cd8 GIT binary patch literal 5506 zcmcgwc~leE8lRa$hJ>iBk^l+BAfQM__Lx|ZhYA+ZA}%OBrsE`p(JVL<+KBJC*XGqH zYWr%zr7qO9K54D(d0N-!`lQ7o_Tf@o>rxTl6MWXCrSDGgnjFvRz5in({x)9N3oS4>V_`oxN_2vD?a6b1!?4 zb(lEXVdp5=F*rDyb@08uyY76Xc$3L!;7zl7-JWB1h3Wa;D3&)=+IZG%GZ}l`Zl%p= zDl=GVhO_g%8cT+E7+IU6S8cF1*1^&iw#vjAEG*x<#@;e9ATcqs$tI+z33gbUIl8RU z#yD8JjmPX2-TC_}RzY*L72`~NrNvla)1I6t-N@rQF`#ugJ`T=nknbptTKrv@3 z>5eLIUxZ&{Kh>^2CtUeWn+(O&IJt}hby9y);<_s_( zBn&h_bv-mLZFQ=Vy4UtK)lv4p4n&fgasthd9g+pe2C1|f}{z4DOxCA4dhD1@Yw=wzr1&iO!rf;bM0b|x?4##i)FNj(G3C%dx4apu2UT1s zE)0UYZ!F-)em&-k1bA_kcT9#f4#`joIk$+1X2^HNr$16lH--*6QQ#tF0Hz5^|M0cOfUz)F(Nz@ zpg&4AkN0i%KR5-H%|;yCh|A$A*l{oA-VaaZ^h^Hx`R4W~3g2pBSRbsHLASt13z%Ja zq`=wpim=eU9}h6dm6g{vHBTuXZbp*c;mXeqE7>TJ&~Y0%FF!ZWHoK}vBBLw!<4SJN zN1ClLpDUYj^2`Dx>7DBhrPD_2U;NU!_}(V{skUhk7bA6HM1kYH&x&7m)J1MTeq|X_ zw@ST3>zdyg-T z)sTAYNcbwG*_f~AW565iTj&FTerTH4B=a5%40S#+kh_G-%k~)v5tiXJ#+4#vILwn1 zx4-i#jFEqaw50l)Xt5mMz8hF75tqDp3O$G|ZeE^q_$#1Wi_2>9aJYmJat$t9XBRWEsoY{B$Yv7OKfZ_;bFg{W+u2jz-$Lp+EU(SdMb zQqn1MdLb7sa^YUM1{c+MFgJA4XN~oH8^JcvnHFdtH%D2y;XCAh8|3)0qi3+QJ^(b?ML#y5x? z(>triTtT{#_#rWKCh_)-mrjLs(NT^2pEcbkB1!E?Z63VpN0L(`r$)o@yVQrQm?HkJ z@W}PPiGG_{e)`V#Emt~w)Yn%8^>_U?<`KB$#HeG2Kz%8x9imNx2;PnH zAoqJEtdyhF7dul%)I1iPqteH~`v`c!x6pzr&oTTWq0{{iE%Y$>u@iJ9?g4ir@^pny tqtAa**ugM=PxtxTzA!*|MqlxC$>Y~kl2dEnFOU$g`1p$aB>qw{_J89?FKqw- literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/segmented_iterator.h.CF53F7E159FE02C1.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/segmented_iterator.h.CF53F7E159FE02C1.idx new file mode 100644 index 0000000000000000000000000000000000000000..33a18d3780b507284d77d74b1dd8bf8376a057b6 GIT binary patch literal 720 zcmWIYbaOkw#K7R3;#rZKT9U}Zz`!5^#Kk2=nI{;53=l}m%t^J<*VlKp(hn_8Eh^Se zPD;|(D@!iOPS;N?D#=VsOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$_3%%oW#6zeKS2H z6Fmd{%)I2B(v(#FoXn);iVFSs_~iV&w9IrGTasClT9jClU!-50nx31QSCX0%4-?YM zpt0R0l?AEsB}Ivuz(C3bTAf~$m;>^4aYHb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd~$wXa%ut403ZWsZE12zW>QY7UIzWFEvQVStBu8} zxtT?&>7_Y|MfC7yT4p*!ab<22C@PCm(~4t&v|ee=6_aOsc^G+^g&BmUK~f;#@brU) z2ZNU)P*{{jR2U-2z!0tXW7ksdeUU(6IR-gNm@tp))2M>yGk-C1F>`WoYQThxQgaeP m?Bb&2Vto(;mX3f-Q2K%bW`jRv>-w6~SeY4_SQvn55C#C8v%ix7 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/set_difference.h.6530E96BBFF0E494.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/set_difference.h.6530E96BBFF0E494.idx new file mode 100644 index 0000000000000000000000000000000000000000..39f3b29354c7f59c6e9ff642b2964ec73ace857c GIT binary patch literal 3716 zcmWIYbaSiWV_DHci;7DOYjqSHzbLaLBiD`r)rkygnK`Le`uh6LR{EjEsYS*5$w^82dS%H4+3EU;MJ1VOiOD6! z`bLJvmdPf`X8NEY1nMX%)=MnP1>xkJ#JqHUGd&{{Jp=vByyTqHlvMqk%%tRs3jO$a zxV>PFdKq-JF1{!=Exx3(AeFB67F5#Fx=d(JkIydvW%OTQ>JH@_@3KDi8-PidZNOY>5Ir9p0Da#4OUjgwGmNoEc(+316OM|*!k zEh|XOECO1Fnk9h^gcK_)U^}5QH^~XuL|F5E_wmbB;#+taL_`_5O}tGa!2|;*3ljqy z10yTz@`Vf5+~X5{1ySJW?HI`oA{aQC86gUQQB~~5%D}*JVDgO_JmCyXBHSuMDk2r# z58i3dlV}F=G*z@=JiXGID<;qO@-Xsn%Q47FgIg&;Lh#nQtuKPh`GCSc3_e0I;aAcw zg;V=Zh~qW#^}a2N?6cZs@hZ~)_a&wKZiO;lMRH4Z{;zwwN)xZ5i+}45%x8?!$E&FN z;+D)5(LN)*ij)?tj5y(?Z^A6YZJ=hL1q&h|&)UEqiRW(+4C6^Ii4TkT`PKxlx#n@p z^Pl(0n&MT&rfjyYAoQ&{36}r9U2-FAU8*%B7dIydrw%NVJT_n4!ZmrTJznc(?fLgw zso=6RUPT8=tdF!9hj`#s6s`AT*HZ3%k-((l#o#3gcSRtBsK=AN$$0htS+!VZ<GSvarsyxitB7|>kH|@; z$|XQgE1D=;z>>q|8`COguQyzVS1&AwGfIJTHcYR0bfTT>TiqRa^?uH)n^esG1izw` z#f}P@AzZugnv`?qrN!GBEJyGvGHq;_uyK(Feno=${?&4&3ohU_DT(>Rnk>gTmzaS8 zCZ=c%OC>zqCbA~L(hmZ7xE*C3;k+*k_gpXWlDY}f!k{RMP-MbxB7@*LvOB_gu(A;t zw4gE(7PP0HMIUX-V10|%g%k6=iyD6|{|t;$X$EOwm<2_tIf)>4aZz&dY!HJ7L_h$% zTx4Kihlw#T@FJM}2qv&=2m^4l85jg$VhjwN2qyOq+1xFGweie6>>Qk2JiL7T0z$%q Q3|t5mf(Rz8ZwV9u0Hr0xQvd(} literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/set_intersection.h.83EFDE2F3D7F43C7.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/set_intersection.h.83EFDE2F3D7F43C7.idx new file mode 100644 index 0000000000000000000000000000000000000000..ec52e2cbbcd90e28947ee38aa1b4b83c7466fe05 GIT binary patch literal 7262 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/set_union.h.ECEF752AB3C4B13C.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/set_union.h.ECEF752AB3C4B13C.idx new file mode 100644 index 0000000000000000000000000000000000000000..0d4cdcd26dcde54db167b9eac493690d9bbae6ec GIT binary patch literal 4202 zcmeHLYfuwc6u!ZTBpV4t-k=jPrHUa-LIO346hj$afk6#gqbzyCYLbn+8x5t}Dz?t( zn2L_uBToS{Opa=T#OWI6 zOz`3qfgN|)v?z+|w5WlykrZk%n^DCwi+f2mY9eXeZnDr6s#0c5v#2eZs6U0w2$E8m zNT>g@I83f;G*h8cE7DQiWpQ|{Hq?QeEnY8*VMB2P0~IwR8V)0Ec8sod+eS35yLJS_ z;eYRRjBxw6JWjZ%5sXgRXw2hcf)0C33*oZk)x%spY%)>Sz-ZEh)5D)pkITwbs?%g4 z32K<1(L>`7oUTQk#IoVv7HlxL2`8Bn87dd%+_Gx5fU0$xXE6uYJWbVsLrL50A`mG7 zh#}9Q58QxY6c2;~-ssW2&0Qf~YZ87R6zKAFdc=PN0)EJ#fZ6EO=V1VZbu?bzDw+p) zQHWe3kMgd+^V`&2arMi-X=yq!UdU(Yw8*q^EUoaoeO2AlF5-!hM39&mI7FFS%-8mmdv>ocx-Yw{)}bLM#-r_iXFLG27RUhv@I>zN(D)^2r3q ziJ;_qOZ{ac8KTi=1J?Doyptd&x9#uC(ITXrBtAlbf37UnoM=@kvNZR7xD1K?Y@{WO2~!l!_oyC>0tG%2yO| z&;mte5T%RLhgKyCNuQi9=k#T#=LS)BTDFpdW@YDdP(}8FAj&~<#2h5ek#W$poa`Vf zmK4XZC6;JXltj@o`R`>hfm-jzE zGYwjlg3qqB3LB5-K#S7ZU5d=WT3(0L+uNS?CcC?Ikh+7Oetu2H+yaQ^Z!VN{&M_84 zPUh^v1v#wN%~{~b)- z^F_iINL{mzYXA6L=}t(U=$lx7Ibfsn<(TiOk4NmO7XeE(~w%sUs_&Mr#}Pvc6|NIYkgb!=OMLb z)w>%%**h7g4UZ0I#m&s?gq(!zaa;66^d*RnB+BY0c$zLlzRjcVA6cBc^LxGsk;Tb0 z>{^PD)R@$aAkxL?ILHuV7(xSk+J2ym61x2kLS(VQA*moWI*4>Y$3X^Q7((~3dl6oJ zMK?6xi#^89)itC0p!tqlEKRmvP~V5t4MZ`y>d%7@m>m=c;>NLY8!vu1>!bn*VD-NDy(eXZokn&!Mq^v^h+E{}gGVmivux|81~|SOWlY&>Ryqg+X&{&}9BE hU>mYd^R(aSDQ^&r2@?oKW5p5Sfcacvn}9U{_zTl3inss( literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sfinae_helpers.h.4998634B7566175F.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sfinae_helpers.h.4998634B7566175F.idx new file mode 100644 index 0000000000000000000000000000000000000000..bf69ad4ac45d12ee5877c1858b513d5db218dfe0 GIT binary patch literal 2712 zcmcgu%TE(Q7@w9dW!vQ?XnX-RMpFyjEu|7|+J={e*TE1>Bpx=~?QB`u-Im>LElN0` zCrQwRlZnrR2NDf8V|-zvfs-aC8uVtOh$kP32M&-p+cIqV1GPI`aJ;TD!Pd6Ze28yn_>`PRJyeb6RN44=iBpnHI~@$s0Y+4K zDU*PVB*yt%j$v6or3hlO#3aI{1d~@qkCm7y&%(&uIArsX)hE+Xvxrs`M1_Ow7?je+ z{9B{7AQMVZhKg<}rzE0ThB<3VHSsdERHa252yIhVS2+W{laFJ$FEAXlrG~YVj{(!$VpLtQgU0s0D4rS~~ zIUYmFx_Nqfs$u5us2l9914MKrdOlx)ihL>ux0mL=+qbe?<@WkLHX?F3aw1>h-)J7R zMH>KgX6j?;$4kma5lx`!P@yjX8}FY!mfvnRAa{g`gz#V;YkyAlfq^5)J?t2+!>#2j z!oY`bHXm|#I6FMpeRA_U^sUAHHWxuwkY4Ow6=Di-rzo zWJg{gdjE#+*wQEDjvkE$FvGtGFIM$|gI@@W=p;KEaR3z2MRpZgJ!DUj)kpRfSwrN| zj2lLehl)0hbU!sQ>@~ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/shared_ptr.h.D04D3318B7ABF73D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/shared_ptr.h.D04D3318B7ABF73D.idx new file mode 100644 index 0000000000000000000000000000000000000000..6d010fed9186e6638f72724581b360385dfc2f67 GIT binary patch literal 33680 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/shuffle.h.FAD0CA60A22CC9D0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/shuffle.h.FAD0CA60A22CC9D0.idx new file mode 100644 index 0000000000000000000000000000000000000000..3cec90cf1983a2f7c77aaee3421be565d230e03d GIT binary patch literal 4066 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sift_down.h.7B94369BC0C2E4C0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sift_down.h.7B94369BC0C2E4C0.idx new file mode 100644 index 0000000000000000000000000000000000000000..62650481915bf960a19d78bdabad91794ed77224 GIT binary patch literal 4318 zcmWIYbaT5Vz`)>~;#rZKT9U}Zz`!5^#Kk2=nL^A!1_-2O=A>Hb>+3sP>4z4l78UC! zCnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs765e=73(Dy<$`c>PGVlVzL}np ziJpOeW?phmX-cYoPG(YaMTLHRd}2;|eo0Pc8bu#3sU|!K1-j(f#0^ z_B@GZAWvCC1;Nu3(Gx}R>?Q0a5j;0BH*o|nQ7jS8`(ys7Q~ZK6E29WgjzEqeOwsD^ zR@XYF>#?H=>y_4AF?qI^hmnU#fj@z7?DXsr zJZBkaSp?5T!UZ`U3Aza(U`g%O&t(t?!{ zC%p7c7-g9Jg#5%{hVVJs{W^VYyBSSlkWJZaTS4esb2K}ZH;Fu%ZokKxCU(lreYvl` zzSou}hKq#WEc4`@ZjTnWb!OcszBWyCr-_|2OUz0+wbVTrxtKUPIMrcA%>01BlFQx= zKCC=Ua-wqZ(vXKqNmxk<7P~x5%EHP>yindy8H8Mza+nc}S0(eRLhw;sD4Nfr^?vMH z%DpcVSiTi96iUJ@*Sgjy84)TGM-vaf>K5Ge{cLFpO$@i~iP`UUU*{!cedWnV6aKu@>a61O&sAu`FJ{!-XG}M1q>00sjWtpW zzJxaeqdA-@93IWF3_jo3s@U4loMLm*g!9spxJhWj0U`BWEL(hM(8PtjAFE6Pf)36` zv(u@2&4L45P0MIv=b}EQcS}X@E+@N$-mv%5{*+_;ccD3&Cu^aMt7pwYG+{;2re5*o zGcMA^FQ+9Lj~qVFaB0X?k8{>;nq79N{4=n)6J-z;hAHCmHe2&{+5OK$ zCyy-Fu{J!=@)fNh0rsDA5<#9SE=n#A1~EWG4^Y4kV=yqVBAAQ_Cev)snGbdHWBS<` SnORub*%)9$6+k6y2xS1Pq}03s literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/simd_utils.h.3634D4418600B905.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/simd_utils.h.3634D4418600B905.idx new file mode 100644 index 0000000000000000000000000000000000000000..04550124c126ebb3a0c8a6978c749d45e35ebf4d GIT binary patch literal 2150 zcmcguT}TvB6ux)db=`H+Tn$alpYT7Mn?HyNN?^&V(4Qqm&@g*Y?l{hw!C*^PMyIyXT&B=g$7_ zuCAjQ0Cf7ghcuZ=HUK~#8-yB4ot-JB_!U)dLkM-Yp@T#=2*O@35{~20u>g_`s`w>L z32JO;+K!uX3&KGy#NIH7AQ_rDuqx>R)FL!C3)_&QV>RNFk*av{&=3+uNeu)Ig$`&) zQ*>cq&De;d`NRlSRFZO1uR;+UB9;hU6EYl(=u}-hDkJ4oIH>!TK#H4#Mnkel4M}0` ztPoN9+m_JS_OA z)LYE>!sTIP!PkY&>16Lf*{X?leE8bx0X^j`zQk6NYY{u{*B*Md$W__c>Od&Rf_ZKb z46d+ZAhyDaLlB1vTfZpQRyY1=O>=RjuG0GC6cx6L#P;x9ovkimUFrYXF!zGCuUchG z_3v8?!KIz69Fd}I&tkFAWiG$6q{Sk+F}ta4arDA&Rt#r`v&Mpt2n!ExWhW~^ApprXiwp5JI@6`V1os-dBr6P&iQ#I3Tnx< zn#h771qvE!n$f{ku^@32g>XJXjV6OlW=U#MVo83H9YeB}CqqhVa!yHQL8?ZwUU6ns zs)nW}Lt17|s+GRJzO$8nXmM&$v3_z=lD=M9azS>weqvEcW?Eu$NwL0>p|NGMNwS%K za(-?BP)AX*USd%$2q)(x=B4YK=^2^m8R%!`CFhi;r0VBnCM8!?=*PzcU6_`cPGd`8 ze$)r~NiT!Owt>PgzN9EI6BsPO(8$ftiw6nO)!y91?9}+;%=Em}6dK!`TwIcplA6W< z3R*A`Ujj_ADOOet#g(~9PQWDl@%NpEhQ7zbJPf@244m@n^4eg6fs=)afsc)mmG#XQ z(}{l{GzUWzNU2I`a)Jm3PG&|1b_Sq=qSUnFy+D)nN^7o|Jlo5|$ipehASw;Y4NT5v?3>K0w)q(Pp8K=yan#IV)$;H8?2owIYaL@G;FR7bAo1_?|;AZo1$}`Br xc??CVIf)=0#YM@*)*uE4h=2ed7=wX<8^Pp4FgX);J)g`Nv(2A{gNvJo0RUJ!F`57X literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/size.h.9E931F8BA0582D89.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/size.h.9E931F8BA0582D89.idx new file mode 100644 index 0000000000000000000000000000000000000000..def4cb1e7977207587634fda5519417ae770d04f GIT binary patch literal 1924 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 DI~Q+g literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sort_heap.h.ADCE49F00A9ABACD.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sort_heap.h.ADCE49F00A9ABACD.idx new file mode 100644 index 0000000000000000000000000000000000000000..30bec1887a2f95863bfa7318f274dbee3ab8f240 GIT binary patch literal 3068 zcmcgtZA=_R7@j*mj$;=J<*-UYx0Zv_9y{J~aB(F?ytIK91JYblEwb+IE_cg)>}7Y4 zZw-c~kr>-(OdD!LTa`eyHl~T166=-382n+PXjB?C1`~rORx41Asfn}Dxx-EUQ^Ret zv(Nj?JM+Br?mIK>&3pGQ699OH=DvuiahU)B8+uhukrLSm=+BPwK_}DBMFlz1$n&DA zHfy57X|h6fNs6jH?V!pBUAK1#bEv=Sf6t&R)G%H-65|w+;?Y;1^uI%LP`B;Vqq);@ z4r;x86{zRJ0a=l>U}QJonI6z3g+&HJ=w+Z!6%`foem|sp_*f_aIYpDYI9^ks%USav z@8;{Ez6LZxQE5(z=r14Uq5)V(yWI2xP>S;5xFEu?AjRtM6-w92uH*u`r7 zF)@w0(ybC><(OV;k{ngjs2-DJY*6H4X_QoDMN5w+FGstizy?>4Ao}A0Hm*rw73zlx zud%%%7h+{a5EUsJVELfPhc-OFxQrkMtfp|1w(+&3ZdhYtz(a{4#_ZsL#Q-|0%KU=BO6GsxY zWwl9b`Rw~&Y5Pj%Gf0B6P^Bp+hsCkZsHP**3FI=-rDAx{T+o$l~KtkUX=GM&;B*Jgy<4bQiP*8^_t@$=as`NhV^<6 zPMC%}8vaJ!uozb2xq%{vIentPOn@tj}Vp|Yc83Wzo}qzAt3dxwPzCs e09aDcnt}x>n4f~lGXQ|R6q}QRg(;Yug8u-x?9!b8 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/special_functions.h.798B540E1A4DD74E.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/special_functions.h.798B540E1A4DD74E.idx new file mode 100644 index 0000000000000000000000000000000000000000..b3047a6312ef77d8620e171a5e36982392d17588 GIT binary patch literal 1948 zcmcgsO-vI}5T5c^3d{0uq10HU8Va}zh(#M~C6HQLj3O}x(KOrbZo9hOHoIF=0>l_i zj2Jv=jENFCc;M-9651x!M#)CI~ul3Plh@4=PozBer_WS0|^t}`P zUhfSfKySD|6%%x>003&xtLdsVf&=_C+s8XxNkx+)iV(I*if&UT+idpnPFKI83lTxJ zr6wK!L51VVkSuHf66H9jZ-9~GO2n4SwzjA?+iE?ioPXEIck3+u)m~?1jiLh%@-a@2 z9s=GaLWU1SNfulz%l5k1lbWDvEFTK7%qX8YA7MFFmqd=&HMX;3?*YDxcd~pumOx*q z8pEkE{PHrVL|7-&*~PT8lETZ$u)xYvh)<>1V33b1q7>O=5xgfE~S5?x2=$r}>m6JDFSC(R^ zrI0>C5EWDu3FKEKjtn^m30*E>mkZr7W3kXPbiGVBEVO*g*R2%P)B)|byIa!+OhtK6 zT4FF2j$R#?-P4QR6x1Ssx5?X@HefR5Lp26ao^vZZ_w9&Munhrx4qr#wfT_3u%oyOG zTY7xc@^m625!fEE)7XHi(2$XMKRBH0~xz-@T&T zzVqhd976ls{ceI{R-Es;KQArf^bUUuN&lRkf35p1Z;cdf1#9hUCA8b?OM1AZUMuYj`b4sIG7AL41I~iHL*CP*$)E}{hl|rx qUK_$r6*ifNA`U=V)-BJvm07nU>(aXyjtu{P@S~@QDl4z3tb#xC#y=qd literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sstream.h.125C3BA0793F4F64.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/sstream.h.125C3BA0793F4F64.idx new file mode 100644 index 0000000000000000000000000000000000000000..3824903a7b7be4fac3a593603e007b89f553e529 GIT binary patch literal 2092 zcmcguZD<>19Dj1jF1_b&YhBu;>9r;;OLDF8o;5EU3$vodj`?AP(SeyC;^p$vU|!~3 zy0&iXoKqB?iuQvdItn68MTQJT9B$%}DmqY*i44TofnOBC`SMBscj>>EfM4Cg{dxW` z&+q^CyO8~RXJ)qb5HeldyI3!^G!G%9A6~O%RNvy@U_HCH9huDNHO(}`({q|Jdu)pA z?oi|5wlZsI)s~6c9kp6h*IG>jf=z%cY4s^m(9EiyuUhDhO53<@YyO9=Z7R%{*JHXu z%GFva!x)>+umfhvFqvK`F!iv0=>7`Rj8?U*=`E8bCX>7Ll)i)M&H5p@VVJ6B)U6k4 zZdBL~HIY)cvuZ=H%@<3oRxRj@i!7hln~id{LjK<*<%J@vm+DPpNu9d^sn)k}V{+LW zhE(0V?%uN5DrPb^)fyFR%U%0j=)SqoeRaX%#`+NqKrvwMQoV4>MaXwj-|e?)>AOVE zw}sFMAL+9N5o}7k+?%ex^7PVj@|k^J&a=g~5gL?(DiJuiO(5Xo)iYmxz5j!($n^q3 zh!6GJ!a-O9 zL~b(#jPj#CTQ~uyucnS2UwQBaFSiL($gu;`}=#glgj}K!y(5B-#M^kyV!^c7_ z?f547$qrv4l<4rK_*9249ZGNbkeyJEMNO;+cL04_Ttu@(NByJYct@hKKx_g#5@=#i zVq>g0dcd^^ivX9_)*gB1a{esPz|Z@Koa%#outSr1xkDS_M>aI1I^bG7M_eR0m@Rgr zS^i9P$6njD2I=BT{7xqw^RSy8E#XOYXlYM+L;LW=#r)kr@4I5rRvAd*`hm8}U=q0p zv{in>EjkGlpZG`*_(egV> literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stable_partition.h.4C959889C10A229D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stable_partition.h.4C959889C10A229D.idx new file mode 100644 index 0000000000000000000000000000000000000000..8f177c2d37b51607d734687546f9a0d79820c4e2 GIT binary patch literal 10864 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

^5T}H zl_uH9@edpMiOZ5zjBBOkwlMI)QPMSK@=l{UTgc(F6`-xajIycz+Uo4@ z%7$%Y!KOEu&%3nukG3(cdi(h!mnS#qN*GkwCLP+m)#+AAm+v6t=Pl1Ok8j$;*eP#i zRAP2{>0ZWyx6_xcxG(sroUx$uG|{N=Cf@@rq`p;=w^D6=j}6t5&7p46Nmd70@On@6 z#UqjvM-G|{nRc96v1z$6hZq#}g*IPZ%%Ehw2(yPin7)x89yRBvi4n4&AAQ>NE$0{u zfeD)Tj3bUMpGWQ(V>`#FBIUW8e;xXKB+{j|jw zSV+oQ7jUfhJaVzycY7=Bb0_bs`|%>kDAX%jqpO$d?AhR3-8-!$4qWukb7}JV{`U`HP?X^w6w4!-^A)T(3`%a zGSIBMT|Oh(u63&+p6z%@PW@FNs*2wHp7ra1+Pj$96UK2q^I+QX`Ds0ySSZRvn`Y0e z|BC;NvCWR@ZXS|TfzKHvZiOVt=--)3eT+he7_&k z#=wR3n|($Mt0{PCGT2j_UF2?9#~<3%dXNwQdpFF|{>Fn5d!0TqP)gu3kv>>zLaaWk zCv5aT9S4^p5X77&Eost@CJmhwL9FSkwlvv`CZVS)ylwHlEkE0vTUc6I+t}LKa~&L= idO7nDL*fv`@Q*NpIMcFLG-*$h)T@!?75(dyoyYIl;O+4M literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdarg.h.91D8E4F4F2AB368B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdarg.h.91D8E4F4F2AB368B.idx new file mode 100644 index 0000000000000000000000000000000000000000..fff90654b090aeb945a885e14229909c1e0dd2ea GIT binary patch literal 574 zcmWIYbaOLfVqkDi@vO*AElFfyU|2?fhnK`Le`uh6L zR{EjEsYS*5$w^82dS%H4+3EU;MJ1VOiOD6!`bLJvmdPf`X8OtbxdlKSMa6oFMY$lH zoRgTBu5YGiWTI!FpP84OQ<{>h4>4RX188ZAl@&u-Vth_!aS6~3mAOeSKnFDDE4aBD zNb*ZDfm{ayOnr>PeT-5JoM0X!BkR2la*ZCB)#JGtSeO}@)MeC_!3074fb7XVV-YtI_mt+Dh<>%s;fGN{?cFHv)VoN7bn45ze?sooX780Jq^>={6 zT3lKJFx6i^c&9!16M7dYtiz=v2owJ6e3@Zu^2RqnVNEVgxN3%?)SN_+n&P75Vr~$F P>8x_d&8W(VT?`BWv^{!% literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stddef.h.9AFA5AD8EF66A96D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stddef.h.9AFA5AD8EF66A96D.idx new file mode 100644 index 0000000000000000000000000000000000000000..29720037601111c5e464c1b49726859e061b7f5e GIT binary patch literal 518 zcmWIYbaVU1$iU#7;#rZKT9U}Zz`!5^#Kk2=nT|klFtAB3E=fsAO|xT2%gjl&(%08_ zw$cwRPAw|dPfkkG*DFgd$WGT!EGo%NOH3{));BUVwoEojHq%ee&n*DzC@R)VEXoDp zyVcr<9w4m4Sg-LrOy#OfYbQgP4(#m7yp#t=I-hB_kI^ z1y}(C!_Cq=x6ZMh+Q`Jitiqup0TpH7Vpio+m4fk#QgaeP?Bb&2VpR|W6roVS1Y-d0 SpE=$9!YQs0I~FD&WB>rWhL05h literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stddef.h.CD0E280344C76AAC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stddef.h.CD0E280344C76AAC.idx new file mode 100644 index 0000000000000000000000000000000000000000..b0dc9c9be66c4525cca5a8d84a996b8a17626d75 GIT binary patch literal 664 zcmWIYbaR`)#K7R3;#rZKT9U}Zz`!5^#Kk2=nVmoy3~Z8%OHxu&)9e`1GILU`^!4?f zt@J~SQ;UlAlarG4^~#b9veWewi%K%n5|c}c^^FXTEt5@>&GeJ=a|?hvii-6Ti*i9Y zIVUkMUEfU4$VAUTKQk{mr!*y1A7Z#(219OQMSNmTW_n(H2}40iQA%c78juB)wz2}c zs4_RH1?ZfJzw&H)Vi!cDm_Tj?0j6x>Y#9blFq@H)wVtI><;}HxKW+vVRt6?jQB^rG zfl$!(H~YYxf3d~f49q|Uabj_bU;?4wm_gv0$2V%;NHH;k4Fy_}E1Ii-P*9YbR&2+} zz+hr~gzH9Sln4_Sldhz$d`0(zciQtLnt7PAgtH`}THy|6xDZSj z=3k(ZAkQL<1bYgqYNZBe?TRYv)j+)xToQ02WoyqBJehTN3s5+iBbWzfWNC)|M_!54 zy+A)9dleRNKw)IF>m+kKv_7%F1sWp4Ap&<-QEE;i$iU*FWMEtX0TW}V++&-9{mU2_ E01+dcO8@`> literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdexcept.54D08763FD1F5E48.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdexcept.54D08763FD1F5E48.idx new file mode 100644 index 0000000000000000000000000000000000000000..cb612553da2455c73ddce1621abc6adcfd0ef384 GIT binary patch literal 8642 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdint.h.43B2D76160AC52CA.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdint.h.43B2D76160AC52CA.idx new file mode 100644 index 0000000000000000000000000000000000000000..fd447b865e2b463118be9ba0a1e0dc4b3be38fd0 GIT binary patch literal 472 zcmWIYbaT7F$iU#7;#rZKT9U}Zz`!5^#Kk2=nYuu6Fi6YHNww0~*LSwk4=qkDD%MX< zO48RWOD@Px*H0`e$xKU3E-BVGGBmbKHc2+qPtMOR0O}|z)=MnP1>xkJ#JqHUGd&{{ zJp=vByyTqHlvMqk%%tRs3jO%_(nwdg=A=ZbmL9J}y2fa9{$7?YkCwY!8l{1{5ygDv^Z=e^CqW-`V-`I#9Tr st6Tvl3^Xk#5yUAjN-kCgF_^9#$;|w5*K0EqBQpatNCX04@de}o0QupGF#rGn literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdint.h.FB0C6441DE3EED80.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdint.h.FB0C6441DE3EED80.idx new file mode 100644 index 0000000000000000000000000000000000000000..9065babcc260fff43e1d37e061448e5b56d7be71 GIT binary patch literal 6922 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 D=6p#C literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdio.h.34DE98B629941C4A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdio.h.34DE98B629941C4A.idx new file mode 100644 index 0000000000000000000000000000000000000000..1f41080116c7396749d82fbf943e574136dfd6e6 GIT binary patch literal 438 zcmWIYbaPwB$iU#7;#rZKT9U}Zz`!5^#Kk2=nc6^cFi6YHNww0~*LSwk4=qkDD%MX< zO48RWOD@Px*H0`e$xKU3E-BVGGBmbKHc2+qPtMOR0O}|z)=MnP1>xkJ#JqHUGd&{{ zJp=vByyTqHlvMqk%%tRs3jO%_tPEnnLLJCtnjZA& Ry1ipk6%!*f12aex0s!s-d!PUS literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdio.h.E6D66DA0CB3C3122.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdio.h.E6D66DA0CB3C3122.idx new file mode 100644 index 0000000000000000000000000000000000000000..dcec9809ab0198beaa2007172c3fb0d9d7d3253f GIT binary patch literal 33270 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 aSra9}WYVz=^QrKaUp@Rx;{nskjQ;`qh5r=* literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdlib.h.6AAF2D52688EAF4D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/stdlib.h.6AAF2D52688EAF4D.idx new file mode 100644 index 0000000000000000000000000000000000000000..6630dfb870f4cb59418eb07400c8288e26ea86df GIT binary patch literal 22632 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/streambuf.66A76306EEAD9E71.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/streambuf.66A76306EEAD9E71.idx new file mode 100644 index 0000000000000000000000000000000000000000..a392a671da6db978dad3ed0a18d5ea16a74782b5 GIT binary patch literal 21630 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 G!~7rfvmx;S literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/streambuf.h.F4952FB8C61AAF35.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/streambuf.h.F4952FB8C61AAF35.idx new file mode 100644 index 0000000000000000000000000000000000000000..2bd09af8b5ff4a783d9f3e7cc328244fa02ffd2f GIT binary patch literal 814 zcmWIYbaPWOU@}xN!8EEOiHe((2tK#&d*EBOsBCWY2_*Ua3ASq(8spS zymX*d#U&|LR-nLz1Sdl|f>~Udo8$xxY~jA!l?(jk(zuz}Ss9q6*rWu&1Oq2HDi|4A zD^E`JDPC5)j+==Ms6d=eoF7ae6cnYV70UtRPOr4)ipjIRJd8ZdLJUIEVEsTMTJOiM zrQG`>fx-$53X(8kn7xc#VEZb%AH36^C(*q5;$eg2wF?@Vc$nqbgD9%RD=n`TnZEhITL2&;p4|!ww;Y%4|ISio2V2_we%ToX7!bp$AQ9f z8gihZ0E0t~`{TV{`dtGGi)e@#|N0nIqOaBZ2}ZMUGK)%!YQfCrVHOt>SA<#2!z?8% zr3CXCC$n6-Tp3JdQEE;i$b#acxJN&ocup_RsoUP(mIZ`betR5p zphlucW@u1iYt9H;Jt27$W87-uSDGu0ndf15#D;?aQw5?&8E9Nv-)OKp+r%smhh~S; zE>)o&OwuU8n{KV{zQ7`4GVwWa3*r?Vn%IFHhD+xd+9{ ze5H}%-_uXuq2v58Z#&3YO!42HqmQe#ZxyLel$))kcZnhY0l2tRTmS$7 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/string.9711B4DED4D835CC.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/string.9711B4DED4D835CC.idx new file mode 100644 index 0000000000000000000000000000000000000000..14240bdd6be4e01ab3141573305b39e940fea4ce GIT binary patch literal 191260 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

0aNkdsdy-S$P7qK z$AhQip)iCFz)U=NCLRhsZUAQC;#oL}fZ4d`Y}^k4NqBG)9tuwxgDi{jR*UhD2uQ*G zQt;+*8UPYY@s3OJUhqi|0MhWrX?QT41^`%#4_J%8gWQ)L_<$YwJ218cB=+IG_Thuz zVMqY7@t|xx1R6sCj^K@t;K9%s0#J$fuf&JJ$=3!VD)A2x@CesG!ad+@3?v@mzK`%A z1U$ieKfwn>I}RkC;mx1n?cf>_fLeS&t)S|Kvi^m#VbCf7i9%UKq3i<$l*sfYG7o4b zfJBMRw?r0%fNQee*JOj?!#zOax~%ziSvzR10GL8Zrw}R_Cj($6A)QI6V00XSBtn`* zsGym!0c#S`OaR&@5nU0GOh}Un6*M&ei2sMlw0*Mm@dxG#rKpuhT5o);e3ncOgHjnT|Kt6%z6KZG!fkZyR z<`dom&@G?nF95^xiAV$#5_ln@hGrA!C?wcI!dn1B3W+WP(6^8nihv>lFCx^?d;=Xt z1XDzK2|&jpq89>+iQr-)6h6}mvJ?~Dii!RR_>lHvXl`aWkeSQR1m!?h(YiXc_2|qm@A1!0?@6J=#PLJ!dyc%g3q{uEHy;8 z8lpb}9udtR5pCgyDUf(fm>(031fbhvqCW!Wla~3U5A+&9mic7+`D70P=r^By8v#kA zG>KHfXPH5kB+`^bHblU;Wbn6SC|rpEi9Mvp9@2_{{p7&?Huj$Ko)7q zB7I=A7D!}~U9-r30x&d-d>;V^$>4)zC=AYmEQd(bA+jL?4wII{qz{bN0*S+9=wY%u z0*;WuN61hZoCOj`NzbFC9|BI015c16V6+xUoFwU!q&os~NJ|ds14F<-B8TjjL-rSd zw{yq{1e_*=Pm`fA;tR6mlIC2p5d!i^OCIS1L%={Hk8Gbu_CUZ{GWaYR3M0Ni;v8u` zM>a!1J~=R-905bXK;k>n@*U}efbU7m_oNSuD+7s3WW!5j69H&>iR^%Y%Vh9nG8Bf9 zL6!otVFB3$0fl66AsGrITR`FpX}LoBAfSj0E+Ru=Tp36dlfK1d5CTfbfhFV!7-$9( zrKGu(Y=nR^(o#nH!00uQxK1{>P6h}-i|b^21l%BlZ;+udSPin=Bpci$0}xP72A7ke z@S!;%af>wHA{!y#4jFuh4298aAaR!rxJ$M~Km|Flf*b+E*+8O_^r|EqBj5pPc|iKW z7&(xrBCS4wm`r$a^N#^1dNdbiRYx}bJ7n1FG$M^(gz0KfkYkYTSo>7K$|+U zGXj1kgMTGMVVoUgnI!j}Bo9KsWO?vpc_<9L1Boee&na?01k9D=bLDFI_#u#(D`)4* zy%DfLjxUg_VI&?%EReGcoGK0@CGv>GJ0A1TxT(E^n7E?}mUCa(snc4Hs@e zVuhStA@>%5PAlZS5%8V7?|1T{h@)66A6YCPhk)Di&bQ@#5O81K^1i$S0;akdrn-3w zfX`Gn`)(kp$22$bG&gjq@s*qSD*>48CYkMK5ASjp=hi>nZ5X0-wVQgi8;gJqZX-6h zMI&IFTd!?ygAlOOEqJF}C<1o7b=~dO4*{8OJu}?~A|Tr>I9rhAo?Fj*0*R+Uf!o_i zmdT1flNCb{FiSzqQrJ%%fNPnpXggcc6_J>&2%D`Kj)3`!w(|uN^A!W z3VU!LC{0q}NeX)u2Y|&2@nXj|5CCb4o@om7;?flFq$%t>M?hkkqUSP!M7km*Q$rOMrg(OP=4k{!E1>lfEa!3FUD

n;D|zU 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

A~#5O5n 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 W>2N9?MWwT;^l2&`Po;zIrT-VTRQ=Te literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/string.h.626939629D08384A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/string.h.626939629D08384A.idx new file mode 100644 index 0000000000000000000000000000000000000000..1e651c02c88c7bc8ab5ebce3c51e123fd513197a GIT binary patch literal 1796 zcmcIkOK1~882;1OHtE)9yS23|5v$e^vL>yS#uC(~F-?R>q=A63Np_RX(!AJ>r4LH6 z(u;@}!RJX2Lcy!O=t-y#TD*veH^qAJu7Xm;ncbaadMJA7!2X%<+kgJ~{%>Xz9SsCF zngE8S(WyeFl4<~eHuPu}Rk7Ej2_C&Yvu>}LOR08;=ALufduBaeu~gJ5c9ZnX9ov*- z<|sv!QGG=(_(v5wb?aJ_B}GDtHYH$jeO^tO$&6R*MY8w*Wtz=6?YeH%5oy_J-`p*J zMN6bs(6oEYb*3J3ozqVAqQYCh8WQoL6lEWXUWa>FkCQm+Q#8{L2xw&{Fls_p$!ENR zAPjqjF)gENf|yPVu1T>xAqy$BqGVHIMH4*kzCp2H91z4(p^R3jnk%Ii@FV6^MOhed zdHP+)1*ItFuSgjoucXDPDPepZ?VDBPZQaD^-<8{*O{&!knSz*8@h4#Zl+)@2h6JN2 zn4W6Wg>=XQaA)!GGqe4qkpY#KJz5kn|<}dH^fi1pIDP;j{DnfsM6=C<|REA?k~c=mD(F7TB{3 zC7c=@`>CwHSu(bW`{E-U4q#>KjD$-!-#>bK3*F&wstL2<)vG?ptLuA6A2yr-owWSf-b|MWwx_@7AoLm2DR0#TmAr6OHn@?u$ zx7|1s_+uC)`(!_dL#+!nlhsbt)f}~S8BQ91ML>K+G&a#>fw+fgY#pJAXNbmz5!x|d zh^@+R7c4f;)@(z58-o~#vUTH3n%IVD-7b?RW+56oWwJmlLbPs;$$x+N{6i(w_0h(1 zK_-YUi7{9%%!DZvVImZYGEoY}m>7lPOq@aqCPASjlcbQuNEDJ8xr)eXA+7o;nWC1O zUYG7&hhHr$7l;MQHLXEDc(R7Ve3(KJK0=`=AEi)?k5MSj$0?NH6BJ7FNeW54L?M}% stB719q+Gu~M3tJ!r|?`;MePutwBuk5F137jU4HOszOKCkItUB!7qo1#)&Kwi literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/string.h.797333FE765FB5F1.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/string.h.797333FE765FB5F1.idx new file mode 100644 index 0000000000000000000000000000000000000000..c92877f5c1d96c30aa51a44ddebc5a1aeb5bea60 GIT binary patch literal 2008 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 H0ss9cjzm+i literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/string_view.05ECCF7139A44305.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/string_view.05ECCF7139A44305.idx new file mode 100644 index 0000000000000000000000000000000000000000..f8bc77dd13ac8e97dac6e6fb74ad5de877b9e476 GIT binary patch literal 39368 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 @uD#58K=N3bb%H#d2L7H> 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 Ap#T5? literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/strip_signature.h.6F11072ECC5AB7BA.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/strip_signature.h.6F11072ECC5AB7BA.idx new file mode 100644 index 0000000000000000000000000000000000000000..df2287a7725626851e8f5cc575ef95cb0d944697 GIT binary patch literal 410 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/subrange.h.A51BAAA20BF1ABBA.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/subrange.h.A51BAAA20BF1ABBA.idx new file mode 100644 index 0000000000000000000000000000000000000000..71dcfba55e7b7bab1249ddd3eb544de129bcfd57 GIT binary patch literal 714 zcmcIiy-ve05O$hWY7raRffw*WsVXQ8NR=wegpe{<&czNE&W~&d+J%?l0s0P%h@F`M zW=2MALLVWYbh^)XI-l;-ce|L+UwVYhvc;<4mPLe+*oCoL?z{RQgj9SA0JAA1hHC?u zra&LCzR!VaD+NPqV03(PhGU!nRz>Y5w4qEFK2WhThY1~x=@G~hRg-a0GR4&jmP@Qk zOG>l zFx2I*w@vf>^gal7!r@?e;9DM-pWmlflGE-0 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/subtract_with_carry_engine.h.F1ABEDAA7C06F6FF.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/subtract_with_carry_engine.h.F1ABEDAA7C06F6FF.idx new file mode 100644 index 0000000000000000000000000000000000000000..a40c52d48d3c1e1845074ec4b083900a72912491 GIT binary patch literal 34970 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 Za+TD5Sb#-87zVF;~?sx7vcYX$Y zy1VDh0Ca_VQV~%Vi~xXga$;4H?iCQA9bC<1qdyR5ovEpMwr0|s!RaY?c7SsV?%_-E z5q+3*1`jO6DHB=GYPa+OrT!Tsb#;UGgeu9Bn(hERk0*pUuZTDytGwDCh<55|uD7U@VPBg`g~Y#tv7Rtd?{+ zfmG=T#G^5FOo>e#;qqw)M_LALm&XsK`H5&q4D%5IDKVVmefIAuh9MEjNkPu}zNUJS zSTgqy5f#%qm*bTotcFO_$h$b?_XAB3Bx6zt;B+L|NnXnfH&i&G`<-ZFiSZvxBL%)iOG(v(;tUu;=HCr$w)?l9_zKS3w1; zK5Y(u?>Avhpp6@%vGkr-nW+Iy-obc{UNbGhpY{Ascgee1Lm^`^TUa_J9VW3_dHx@J z=F8UB?fvOBqRaNNBh)FF|LxiJa}UZem$8F&i%DN|eV=I-R`2javTxngRz zG7ZLtEc@~J<+|EixuMNuayfJ-Xo6W*e4l-zd|lo#k}Nve3p5MDLad}Su8C`*6(O3} zIDxYHSf6t1*U}zYMg^!SqbiCh3mV1>!ZRAkHWUEzV?YlJ1ppN4utbM;9WpEI#*>A& c<`acxOJR}KW-lo%23CE%NQX8ZX3GJ#fZ2$lO literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/swap_allocator.h.98FC7D0779E432AB.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/swap_allocator.h.98FC7D0779E432AB.idx new file mode 100644 index 0000000000000000000000000000000000000000..aa6254501db2ca96992a3a21eb3464ba36361173 GIT binary patch literal 1510 zcmWIYbaT7M%D~{9;#rZKT9U}Zz`!5^#Kk2=nR}Rk3=l}m%t^J<*VlKp(hn_8Eh^Se zPD;|(D@!iOPS;N?D#=VsOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$_3%%oW#6zeKS2H z6Fmd{%)I2B(v(#FoXn);iVFSs_~iV&w9IrGTaufan_pC^pO}-ApPX2dUldKuEUDB7*$A|(xH2~hlzfX)(~1`Y)3RP^%@vbpdwCdnm_->xr9o04AYiQe?QQNF zVMZBdd0u(JitY#RwC71Q7u4va*q`?oM-z5<`oY43!Ap^ehgp(EQW#QYk*9@??Y-~hc!7kq46I0EH#eB=TXx(Rx32 zE#=-92^2PFFqVYb)O1X4x9hRYLZGm!vZ^jj_2Q+1pPLgyO3|F_Q+-YRhQ~w|C_m^xQ+;UF-?J;4LZ+h$*L^=WeS>Pxd^F+cZ$2|-WPe_cCajh( z|8}*ABZ$#XYa134d9*=X!~k)JcpOV>BkGcwUL(9g_E&M8ev)z8UHO0KBTkB^7j zte*)Do%s9$P%vfY=N0Q^(9QPZ^2CDpBA`oCX>V(CeqLH;I*q+nnwOHA7N47#T$Eo- zYpY5!b23XR^>g#fQfVG#rBKTX5;Kc{mKB$zSXnV3#U3#KRpurs0<)g*<2?(mI5!6I zFz|3Qu$eNLa)Sv5P9{bM76wLUR)(U~wBmWdY|C+A@{Jih;S9_oY_dYKA{E^a-f7R1 zXa@2$WwjAJEg>zqoL*_o6_aOsc^G-v#2Lh;!Fe4>2;N$^^+j+wA5hqu!CD9={7TxT zaBANPaS|-h|Mw-O`)-9Y30kTzZplm$?K2`li_(IX5huL#P1t4Flr5EQVSWYj{FH+b zJOfJuBsl{=10*>!6Eh1~P|L8Hd7Akm@nX#qVLVQ`_NN*v=a?~av2k*6YQlnsP1$T) zLFij^I=BGl5=JR-LV$TMTJOiMrQG`>fpKQZU?~Z6*p~Gx*j}F&oj^ipetHmZ^6a40 zG!nE(_bE27`F3s|30iok^oX2fs$9at!zOJaZ2|KJ51TTlGB1LsVWNQ~XTWIym%Dsp zTE*=3hRaB>^K)L^q+;$TJ4n!yve;1}GlXjw30iW_ytH^bgXIVbS_Jd`tK~`;Tp&S9 z67z>OS&nlqF$2R-OxhS0-#ly@Vj4(16Il~0nB13zd#;ywN!o&!zwX literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/swappable.h.13C66D84F12E1CD9.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/swappable.h.13C66D84F12E1CD9.idx new file mode 100644 index 0000000000000000000000000000000000000000..e0b88efbbf522a64189cad732548447612aeafc7 GIT binary patch literal 2246 zcmcguO=}b}7|yo4?S6H)ejtdluoOH_YF&!fi%=+5J&2+p9zrIY*$vJlLz4Me5X7rD z{SV^Jn;?SqFL>}E9tFjtAc%PK9qgE1JkGoj=HZznPm=e^$F2Rny@NJFyVLzV;+8fM zLMNdZtHtG207V2MS8CKi%~$&}+z_$<#cAxufeW9WbyBW9BNA@}BWX~NKqAxaZ2lc+{n z6-7!C%>%AEOrK=J&g+zykl=(_QR`xxjK*=axAcjzMWi|Z4NX`aB>OCElhe0|$*^jl*z zK2!WE;@GE`ufE;R20-U1KmM0Q=*pMx7q6mgW1u&h8z)NozW3|R^WMQdpi`8dF6oaq z&z^ek-FVjMwmR+3xsraWuItCYU;KdDBQ*NgiRK|Ksu<18y8;x~{$UJCfKco8&%0Us z(dhHAv9#P=S#5W^{k6exy@$H4(u#xY4h|jcI0z4oG8!d7Xvx9y#R1H+W7iz)JJ@sZ E50r4SKL7v# literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/synth_three_way.h.732CC0C95E214BED.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/synth_three_way.h.732CC0C95E214BED.idx new file mode 100644 index 0000000000000000000000000000000000000000..ba51e6b0d09ab98ef3ea8d49e6395eacc75e2ee0 GIT binary patch literal 926 zcmcgrF-rq66wY0H#cDS#r8qeYiLIq*C!tWS=pracg(H{CU4yy1lBBf<{to|vtByiN z7dLVAFX-gp=x9QF{sZrW_ww<*gpcIqo%DOXn*sn`zdwzr!bJeUnhvQ1o7tKe1dP)T zLa5t8r;-YZi02_VA*0I>VWC)niIS+<*xn^A(nchSM*4)15R1qJ;W!Ra8#Y^T3$d8+ zu}=|a9+^&&>zeIYP?QLt3KoZOn3JJQV>NWuP*Cb#;WRhjKgY$@vBzl+<}slo-6k(d zIK{E6s8o452Q2*Oo{kmcOr^-DgikQn&neT$GoM$`Kwjt-j<4TapHCI5VplzK$_M~v1Q+-PXW$ft literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/system_clock.h.77D3BB677FECB43B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/system_clock.h.77D3BB677FECB43B.idx new file mode 100644 index 0000000000000000000000000000000000000000..6b8d2acadd2350e9478d73671a30b9e0519e55ad GIT binary patch literal 1656 zcmcgt+iTNc6#v?0-I~^I_OjWfm!*|CcWKscEi;|ss0=soK|#b_sA-yZVQo{A%ynK6 z1i_bqp!gztP}o3FP!S&#_n(R$`J@5Cw>)G7Uzsu(VjkjT$T#bA(Wn!IaQPjC?n9zMqKQoe{YWF^GOdF|zMTp`QELXn}4zc*?{Mx0GGQhr^4`|YF0%jTI#tlC(&3lZ*ScZV*JMaMQ6 zs+i4>y$9#lhONko^SzXp)&=CR)*ts=np!wxMfKS2YxhNU0q*`=FUF`lS5&*P2AT^x zgMM%iY{r+at+}3Akqu{i_IM~=fE!buQTp)r3=A3EIy2BTFk>KfM!+1Jys+5w`MJ$t zBV5Qum03gxh{8oQf*`v4`{KJJ8)FoX_StATquo8YWssykVTOC%D`+R zXbbHCvTQ`4InW0D+lZhg=zyidFD6u5DijC}+vnLE>-TUM6iGDz2QV(~LR&OMbK%lR zg6({RqdiVfBSiffow-j(UaexY-{Nn9QQ}2=!_~io>n7Y~6CDII?lK%;E2m&bFbXGG o$Z?vk$h;EQ6#Tyd5Am}-I<;{MUwTuOxf)f09U)Uit*)s50AG*Hu>b%7 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/system_error.8DCE5C30978940DB.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/system_error.8DCE5C30978940DB.idx new file mode 100644 index 0000000000000000000000000000000000000000..f5027bef6e725c64e0c80fc6375fd9c8b819e9b4 GIT binary patch literal 1688 zcmc(g%Sr<=6oxascRIz5OE+D(5+=2lqFsnkDAuLmddOrlV{k6zB$m#$+iu*u>1OYr2Qeu#|ej@kmQ{E*>w8SKxh)omI;%jh7dYdLrCE3x&p0`$83x- zo{aH>U?4E{ee5pi{3*f&Bo7Id0uRnFuIP}CFwK&=$^hXKNc5mFNh3UR2Sc}yc}nBw zfZ>??bh*TyN3%5Kkzo^&3&|3X0c3#HOx?#lJ7(ZfB3YC{eh}|0V2ANd11@=%?$>MruHZUG3XHdClw076cQl@k8| D9B~G9 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/system_error.h.3B0DF7000664B9FD.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/system_error.h.3B0DF7000664B9FD.idx new file mode 100644 index 0000000000000000000000000000000000000000..9ac181fecfe3936a8bead10105d59b42afddf416 GIT binary patch literal 2216 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/system_gd32c10x.h.22477223D94E8216.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/system_gd32c10x.h.22477223D94E8216.idx new file mode 100644 index 0000000000000000000000000000000000000000..126dcbc65050ce75645b5667f616a4004643bdb5 GIT binary patch literal 880 zcmaJ1gh5Z((UxtI&22q0H1MWm$Q);?PX+#qDjmVp9+ED(xxTJNpTE8icxdl!eA zSD-|B01E0*q@_qh!3(570!oDFkeEB)2`NI1G^^Qfe!kh+c`_OdW)~3Zd80+hHNA)s z+6Glx3cLbFF1vf^>7mj*?8TDzf|$+E-^YnZH80UoBs5~(5om^{BH&#@NUuxAic3Y< zWJ2tWC3Bxpsl}8st%%cX-DPdoAuJ9P$dJmWGR&0)H1bKucG`A>h=>KL$4MY2Y_T9p zdm_^I?B68!lcY~IC68i81KEtX%R=*VjN@e2vFMfxkjM4a^TW|QOUvb55ZH(U#2`_hj^F4FW~~+!zhIbwH#NY z|Fm%+^bE69N*-zaHycY1Tfj5!LG?JqEJ*?K1#E&;7-g~Wpoehs8dk*kbaM6E@8gz* z@(s$xbS&o@svE|}l{Ld$9Us5_zW?jTGYi$0eq?sGI=AwGOPi|@@bKfk_ooluJhu?6 zVSGRgkKz;b-obevr#j5%pIUEMe=~=rjkru&yDr`Sc>`eba-<6Z2!nu GM}Gj7YW;Ws literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/systick.cpp.D6965781E9E353E3.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/systick.cpp.D6965781E9E353E3.idx new file mode 100644 index 0000000000000000000000000000000000000000..9ac89820aecf6dfcf73258054f98f267eb9fffd6 GIT binary patch literal 14910 zcmcIrcVJu9xz{-tC#593mZZEw3zz^e$)mEiEQe=aWer=P6%EJX87_)^Z7XOPNj9eI zvG)oa!k%I88N%LsBuSiA0Vec}F zB`^}1E@}1LRu+q8A^g4lEL>`_ zTH$X!R~^&py}4@1N`A_fvS!tCs|prtus`T>1|0Tj_^3vrNtd(NK|ZE3A(i~jrbB8v zR>39jwIr}UZ>k`w>yae)elG_mW)J0DK#4D z3k(fOO$5-UVJIqh0R8nvGSnU2jZ{qa2cn@~r`;}kgB}9|z1^lqwL26unIbxBXegsb zf|0>yB$D>4nSpGquU8L(npKmjL>NNpT^w7icM$UTMNB5bA%7;D3aNqUenzaSE=_=u zK(BpzRJS0YU^>~NK{)1bAtjEt5J!Wl&=43m;upr3L-JZQNc&q#BQYRG3-xT=AC2_K zLqQo!I=qmc{&b@(oJhs|kmFEDE?77T{(1G_;|Vnq^Y=&M{?tk}voa~G0?Qb=72{STB^-T&*@)(sbkL$bO+jSdB&E&_`4a#j`P~IY(Cn2K*^C zBh?yu88nfb^gHM>RhdZKh9m=?1b~dovyl|=k$IpC)l?|j>z0LqL_D31>A^Bh(DDyK zZaJBCVaN|by5#2R&~i19&h&byurJczA4+FbTANrXo&mpn9LYrBG3Fmy5ea4nh`&yb zBoa|o2)Sq_4EsbX2t!qcoU%{RNG1~vLF$4Le_W-rf=UtwH7C^q&B=1DFjm$^I&0&V zYMpjV6kvL2RDc;vhgC9|g`2bj*?5{#i#W;DqW*Zl>St-_BmPDcfqm6*3i!k_9FR4H zS6kL1u5DRsW(|_o8QqCS6X3m}(juk?jTSK_6VMNtI%f(zJ&;Ik!5Pl+W;;N`j2}V? zgwvT+B;KFavmfk>s=-iz4xC`5pUBy)!hkpoZZfby?(XVw+r1vI+v9UPoNlkjtyx`8 zMt7>rS~IQ^K`5DyKU!o5qFqBc_gshxLq)Chf$-?lkk;J4!s>2Q|K@yZ*b~X$Iz@!el6bXzYVzsNg zr`y{D-nxBWr_15#*7h_thOFpTmsnl)Zdiz6Eu@A4V}_Sl!L-ASu!MN*-7cTU2fv(l z2g#-67)$$>-7pnSRimVDQ#Gkap=emoQYanp)A39Zn%oei4JM65JZhvl9L>PcH<{wI zkU%76c)EI^v|hKnyW8XHv3s2!&FTyD0&{&z4ptH-G1$@5)eW>Fjoju&EqKA&5}=70 z2GqH02LQ$SlHU`*0H0uyk6DhhPg7 zhMf`YoH@}9gjn@Q8OS3xz;w1x!X0eyAer4SluFR1PBWBDq5NG6?5B*gN-n z85ao{1oQ2%0Y5YduJEVAPS{CARDW9Rvq?*erdP&E2eG6djz)gsauwAR}InP3S8d)aW9P6f0vlZIoN5l~z-KC;LxEl_Dema^T5%h~N^8#88s zZ@P`mIEaD%ExH4#=+5Yk32AReXCP#qIUVk9x6kEu>pcR*dlb8S=+Enx`-?_JC?FR- z7K=uoOicSM7L8s(%zEu{I$bW<47t2M57|oi?A<1t+<{`HJl0A7kzDb~o(MmDx*OwC zqN$YSdED^A$DMFE^_YDkWPb3;kLRkwH1SxnJqs@Szt=fzVfiYiZFHiZG9agHEwabq9$6Ndv&Dwd_^JY)XVQgxL7`6@w*2dX}A^9 zVg^1iX`>JC{V?J^_{9u}0GLH#ZF4#RG7CCVT6T zM%DCSjC-Bt=2~g;xY!n;l>!_k)&5i>o8%F;(piy6?aP(eX{N1G#7IaYnTf>U1VaWg z3y|Jx!%ew7qhmlP`;KX)jLeEj^TQ(UK1V{{AJH$o9b-2JtR{OT*Cw zygL#nD=s9fbAyNuyVfR*vD;vq0u6RVAsfXazm5H}v_S_s~7eW*qNB|QX8e}tJ6;22y zBSZ!}E|ZKOut5knw40pr8embEDy)1}YoW{9W)MK0%#1PYx zjPsfpVp^4PUKT@43p36u!^NyNUXRDc-i&ZDAIUA=su2aqgmk)O<>YeVtK=%%smkmz zbY=b+Qkg+q+L}WgZ1h&Jh`_MHlzrt#VU7rIi$%#_wwa~=7K>7DnVfoDEK12`a_V!j zC}kJq%xi}aUM_XJ-S9@G+uq~xIJ^!|*6aw6z_>inGcU)|e2qZjpxfFZpy8r%nITln z2qH6tiWxy4QZ+bWqf4I1j@Lb%;crK=aNaP`67DnT|DSDoX^rW?L zn6GoB89m*y%MX&EMKWC^jFCoSzJxL6NbHv|8iULpfw4f$lZ?O`!!RyTbdT8tLOqt! zObxW2TO_D4-4fK8asjnZyU=L#SstTQhfN98W7E_kfz4c(z-GQnAobfc(+H4xz9rrZ z?b&gkYSY<)hGUvy42)4mo@We(g@*jCG#3`iRLG7AOg53L=f{iMlvV_78JNk447oa2stp=Xpr4_YYO;dRiU4g!tnvBql&!ka1 zw9#j{FUz!Z+JxC==a9KgOOMPd)TIREYel(YEdpc8HO*Sem2+cSNh4pjB=S-&U#(cH z+K4t%{o%3_6C*>(}6e)196xS z#NkvWSAv;lI8YhUC_Fq?tgOlv)Ab63qYaZ$Zk?)GVL}4S({)G`OdYkZsT!5gnPz0T zP_ET;#o{nbCyp-PFq5kMsaROWBmi4Xvq9HXe&V1pmvpF5Ep1eEnwdE_N zi9!)(jV_oY$PYDX^L9DiFgw6-rSrnS(wGh0%ui2)gHo25gTuOm!@|Mg)(#Fc2ZvV` z%Fu{8-K9-ymViHQSL@YWxmF@`yd@CJ9i)XJ!rE|uwK6%OLfyNdNW=Xql!T4!VM1B{ zH0T@#4f0bjF+-Vunin&AC zzn!_xdZDCs7RsHa0=xyQX`nw+<2n-B0E}q)Djh{!Q*{92sa@3}KIl4@QAolvo6Tmb zWxHi!Rx>=Gd~IVRE@vM87mcoQy_2S_v0M*2ZEVi41#;zCsYAYOqs3fpeAe2cbR_p8 z=JxIo`=SN7PkIW4k`^M;N@}e#T32CgYjr9CMyRZmmZ?f%#PY#y>pxh3@rN63dhd#p z-`#L>Cn%Lx{Rmks@xZO;Ua;Zp?dDltR4kT_%5cZGL`=8xC@SbO$*sxQ^nA;shM^_fFWEyF+I{ccH-EF^TPMu3yg&{4JN)xEDYg#Ve9I0B zdR8}d*-sqL?DFvDv*%l$rh1EaSiJK_h5Rcl{WyEfUVFc^=Kgt>=cz`#Bfjk>#oA%r zmRNd5x0HT+(K`ozI{)K&me;8sM89B@vS-Jh3yAAa>3UUdv^ItRh}@yA%_)1R`u^I@Yx>>9&eFL{w-b6ImBbE7qp-8fPRBfP z*b(cx(GQ_t)bm}@@A@=OuH8JiF9!K?ynK5RH$0|rN`DMa4Lub))R6?$s(i$GQaa)M9-ke%?#Xp? zPbbd1I$R5c^P-F$-!>Nyx=WzM91#mVCbvy4kRJEnX8-Sqj01WAK47kRoU_A?(XZcL zd>%>clDSL1CwzTs%}yVLPyO;L8X9Ck_y%eu1LAQ`(Rc4c{P}gHxoe?oH{q)2oa8x( zgWCwELZpORqWQvQ*Szj~?)8^QqzB`J=ZcI8GbA&FVnY9<-6x-}dhYv#=$BAwj?lMM zVd5o9wQ9Z=gx_eRGPd>2hpfn!V_R)fURGXFUQ#SC17*b@c+~%Fl0Ls;e9o6fio3$& z>x zdUPM!fbK^Rpa;=I=wb8-dK5i|9!F20C(%>rY4i+w7CncaM=zik(M#xM^a|RDHlbJ1 zYv^_K26_{{h2BQLM8876M!!M7Mem^Bp?A@H=za77`VjpdeS|(ne?WgkpP*0CXXsDp z&*(4cbM#mAH}nPi68#NPX(P8*-d;~rcABB&`$KYe}ark(A0zMI+gipq& z;8XEwcnv-spMlTBXW_H)Irv z#n<8M@eTM!d=tJI--2(&x8d9I9r#Xs7rq}rKhG(OG+r>O?T&?x%a<%uL4wx3*|}?R_fB@^4zH-k z1VJMx>p=*qhkB_nDDk)wf*y;Yw}K$N&gh}2M=P4y+ZC$e=9vBdK0CXg->}1j0|RSS z0C9bA+9FJ=27n-+l-b5>A76;k-gYq@%Nl7Gji^k)nQWR}>VS6s`#bCa92?{_2RM^X z8mX*J6q={Zz>^B-#MJVNrZB@Iijh_qf^A}vG;>KcY|+Y&YS>$B zF_1J&5<>{ZV`!8TnCMo}ajJ&e0?FTxpXir-<=kY-zAVpB_} zP;V&G9Xg1NG&Zw3L8g(w)6Lb-5zqxi6NcW%8nr@+Si)6&(2_^HwL;`8$Ld*%5Vg`aEQ zN|gDLo{TTwS}ZQq$smgp<|7c6!a-=>wryun@&%-c%lp2qoGA6ku(wi&K%dmtD1b%> z$ZjqMUp~1Imtl_wM5U;+LxTgf^|x*QZh1E=!!8d%67oZHm9NGDj*ebA(*Ne#GZ|_< zpiAls2w;Z;jJ3Rdu{JXPN`~DY&{NaXAl{*=zM8+}nfLoYPJH!$k)h55I;GBf0c>}6 z0GlM~3a@#-zUGRji+h$lcI@2PbK|k&OyiG^SMRYu_K_n+tPeE5;~`QZ;U9}c|$ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tables.h.87D2B8EEB3F7FB90.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tables.h.87D2B8EEB3F7FB90.idx new file mode 100644 index 0000000000000000000000000000000000000000..733307d11748b527bfd82c83ce0413eac3ea10c0 GIT binary patch literal 974 zcmcK3PfHs?6aes<_ztpNdWiw82NCH>*zr#g>p^0oYa;%Qi7|;9W+%IG>1GplR!O0! zLh;s5(1Vv;dg)zgk6yj_72>(4syAnm4ety1;KBUf%t6m~kn(pIeLvq3duFO13b+_(`P25)++vSM3O- z!Gm^`!sC96Eg1`GV~)AL@GhD*^IS{xdaTh9=R6P{|B{8=@@#3GzjeQk@3^fuZ6ajY zbp4RXFKsKjz`%CoY=RKu;_H3-;g3#rnk31|Xex>yPvg#V|1PQNGy@s^wMd9g*I*4P z3t6Nb z4$>~{BJIH*(mw1X9l!xn5sFBMaEMfb5>gq;NJnslRDlZ8F&raRp^8+48d4qVNGEWD tbPA_PXK;qpfW}bj&3HVzEg1+o6Aje+i9>zZIOw2jZt1n>$3$X;yZ~h!uk`=` literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tag_types.h.7EA08D2FCB5526FF.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tag_types.h.7EA08D2FCB5526FF.idx new file mode 100644 index 0000000000000000000000000000000000000000..ad7d803a72a771489c32f381cf485e61f1702eae GIT binary patch literal 1418 zcmcIjOK1~O6n!&Ilct%c#z~X3Nz<8BC9Pzpwk6mg5-Akhg$s*_bTLdOlNg$xGZRU) ztEwPGD1zv&2*n?CUl8h2k*)+mP#1-u?)>bEDEQ`u+a%Dffw{cWWp~&zDQ4C3JVBq3$j;)QxNxp!ShW%;pPvQkLb}qe9Udzn}FSLD=W<1*k!Nt(Wrqxs>?qtH+#d&mn|EVkk}xa?>=! z^sfG0Z*C4ASDdVe6!0P+r>0#HUcW!|;6(E-Mn_43I3kWyLkrwa(xLwG@y1$Y>!F|R zIgD`F6An-V3|=?Zya|{32%~<27a~H88jA1hCHTg-H{8@yYsbm*q#z&$Bx>3W_8K?B z=dQ&*_*veIaL^MBQUe3{fgiV*<~MdRVhKJPiN>g*c$b3=K!%<*o#ekGRaf3mf8FL7 z4ttR|)KaJ|Av;8+14Y7Ehzm17KlSD3>GNnoB-jzh2oG4$*U?XPtu=PPpIi^#;;00W z6XypSuj?=4AtFQ0f`T_IG)(AXeA zfH$FHudz+VeiV@8u;3Mj;ZnrwxFT$t>8Bfp2C!cukG)*DRJiLJ(2-#66$5tV*QYyw z_=z17cK5kQfhw$=P__3B)g0X`Bsna4#R!lhUR+Fq2Ty`Z3YcQ( c1=S{E8k!lf51egUKb*Y$c5!=?d%>`p#DRp~b01#rnxf zN&0$a$pzWz`iVs)nQ4j1CB^zihQ^l3Cdp>{$@#ejKpjQJdWl83Ae@|&n3t|^re|cL zXP}>%mz-0YlB%DRnUq{np&uWgoS&DLnNDL%a#M5jiz@XKQ&Ngji;MHq^fKsVVNOnd za$-q-QG7{JVrEG(z3eSX%`J#8OUx-vrMZnIl?AC#-{~jjWTxk(roy=Qh(#-f7R1Xg)1$Z0~(1#|x-hl1owwCLFEzW7ksdeUU(6a|Uxs zh!G47+n0SWNb5+g0}AU)=&QkmosRD4>hI8+4m8_P+t3JRNMKCs^T)OByU?smV*aou z%W=*n79JKA2^CYAAv`QP5;{mceRX{ogq(?l30&^W!adhZyrgb|3}8|bM<~)^(m~?s zGwCDoOqfjIJQ1D^ee(}}d5h-W9ji|sEkC&U10xp;CkLl0%v@l|<|KkR#YM@*?jQy; oh=2f=f@LBzWah^UvobO&$3TeC?lqHRF;L%7f#43upM;iAc zjngHma!?cmziN&kr3ZVxWxE`R5A)%u9QOjwH39@N#JeDbJ{Rm&cv*p5AOM*WPC79J zSy>eYmQxkzbkrW<>bQEyMZ*%>Au9|khqZ}vM228JL5 zjR@jUij!=W164jOMP*iw`vWmS;ALhw#d%|@7!uVulvpv<$v8y~26-W+1x5IiV2D@! z|K20e>how_S7qMrBQKD7H6};?SEG}1iMb=rS_i5BD$h4bFe0z#b%Ud)>Xs1sDh&$jd|mnHLlly@&b4@5IcTw`l}L z+PZB6+kr`YtNkcOQv)rXkLFwSI*M!|S}e&ogcc@tdb#e)9EIp2P_!S@S+nJRiA|yu z(KMj*F+I3mvHES}bv2@!h$bth$1j$@T&p-!tJ9O{tHktiX5-mC!+bwdw}CbzriX7$ zeBWdm*))o@SS&S|rbw&ZTDOBd(Bs8uc{b+QRc zgL33!ADEjR8?JhA2Su`%+8IpeTs>d-iiqDu|AFqNk71f3O@t{EqiN#yV|jWZfkf6! z>vl+ljMfq?`f=;|JGH~Kg3d%2&^Z&@Eyl^C4EV6`51qnn98c dlfS%6`5)4=vh@a#rEyzBj|~6}J7)Hd`4>1Lv6%n> literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/terminate.h.4B5AE8494DB60358.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/terminate.h.4B5AE8494DB60358.idx new file mode 100644 index 0000000000000000000000000000000000000000..0b3744b3b355ec7790468d98f43d3c0bc346fdb3 GIT binary patch literal 500 zcmWIYbaQ*d$iU#7;#rZKT9U}Zz`!5^#Kk2=nQTCDFwoFsut}{*PAw?O%+Ir9NVY0t zNXyJgwbIwucec_GElw>e)=y4K($_0XF33*TPb@0QOiN5IDb_bKG`37ONjB3@&d)6X z>L@DKODxI-;pCjeymWmtJtGr61O3drz44MPN`oypnvloKq%|hk>095;Uwr211q$ zoQ#YN9L$VNtPDk|X~o4rsY4(C->RM~%*DvX%E`g04pGd&kXxPRb@4Hy79$UIS`OOck~fLN#4d3DzlSVh}P; z+W^pQ!-1qi0`Yxt#$C1BrPCmJk%XRI#|S}2**hTEvM0RR)Hmi zj{*vu`D8i;&%-=Q1yh3<)Id<`O>pL!D?C9%Ph~^u3}*ZSD%#BxKQy zry427naUubgpVWFrTP9)u_{&#)t1eX!Oq*~ z<}TV>(Q@6cFaC-M9XVh3*9(t_T6U4Ul*|2#lbfrLvs-K4D$kWSa#>K04VQw*Z9}Z5 e>fQeH_v@uyDB2~YL!KkgwceY&|DluLs literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/three_way_comparable.h.AA954713807061E1.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/three_way_comparable.h.AA954713807061E1.idx new file mode 100644 index 0000000000000000000000000000000000000000..35a5d9f8ae8fcf4993fa077a55d8e8cd77754b8d GIT binary patch literal 1492 zcmc&!%}yIJ5O#hb*}yHmL^<^Z)|9Ry$f+t4A{>!8ASzk2&g{mDcQ>`2pGD90X~6YgC%@Fr@yBPsT9?WkdwrXuAF8?Jf^^kMb;;*d0pypc2=(gfyl- ze>?EEs7Se-4v|U`^2LHO=9Ys(w=K!ir7N_9U@*>9?vF}3LZ*hOL>iYSXhsT=%^_cg z4WYym#8ZwF`(n!*R~Vr}%dxpIqw?hO;}oPYFB7|l1R3b^qBWTTDRcIaV>m2BI1=$Q ze;kufkQoKyKiTx`5k3`9V2t(;rP?q#135)zv)Z0O=Sk>FnDz7rJNnb}`{2jbW@WS1 zA)T(9a`x`~@0|m3_}bFldbj;Z5_0PQx%|5E?Znan2|5LR@uf{Z-TXSMv}#_{+bU>< z5**fw>$wA->mIFA077iFEv#7pLaHlRlwHfLuh`n{#ZUA3@B7HBRO@T&ji%Qkt<`j6 G1^)qg5X~+C literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/time.h.D264233BC10C47A0.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/time.h.D264233BC10C47A0.idx new file mode 100644 index 0000000000000000000000000000000000000000..d2d2640479a7368dd6c050e29e7327349fe65495 GIT binary patch literal 7388 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/to_chars_base_10.h.05E0EB5B5EEB34DF.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/to_chars_base_10.h.05E0EB5B5EEB34DF.idx new file mode 100644 index 0000000000000000000000000000000000000000..a6d2f42c80401a092ee0e04e3cc09a8451b12044 GIT binary patch literal 1586 zcmcJQ&ubGw6vyAT+a|^*8Ki`?*y_tQ>TwRjo z^P>QZwWW@!xhf9;aXN_W=r@L`@S?68+5$poaRFT?nnMt-R*|@lTQ?g>bzHr!Vwa#< zX|9O#cphQfY|$MK5mm?Z1~ycyf#${8yqH6}g^hMiLxx_(oeokI)o9p`?lw)jvDH;9 zu^DtiLJ#2voCG&j2iw*l)g6$4NH+7c)>6%sV_j0s4DGULud~$mSA6Gdp%CC*Do%W`@5Zkvu=YPJ7 zQab^OzCHeJ^Ubeox5lWw&A~P|akLuXcyA_l5${cKNq%~4I^KEs<6!3L$-BK*WA}3> z_NVCjjmXB7zxvYt?+ce<`7E`Qd@|H%>uQ9QvXHg{7WUSElYxS`>ZP5B;Fef*<}%K>0tOa)DU@ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/to_chars_integral.h.ED223F62FCEA7398.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/to_chars_integral.h.ED223F62FCEA7398.idx new file mode 100644 index 0000000000000000000000000000000000000000..bc3225551b14d9555ae427bf26e4bf60546d8487 GIT binary patch literal 11918 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/to_chars_result.h.02A779CDBE37DE87.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/to_chars_result.h.02A779CDBE37DE87.idx new file mode 100644 index 0000000000000000000000000000000000000000..c6bc3ad8665af9cc8ee2e3c9a683ad280b2c4aac GIT binary patch literal 836 zcmWIYbaS&|W?*nm@vO*AElFfyU|nA5A>Fbpx7i6dFCl-}trX?nq6zdxq8e1ltB%A3c=jRpxbrcor zB^Kp^aB@y!Ub?=So{@>3fqrIQa!zSVs(wypQgTIwetbO4D*cjtFuORuD7CmWr$jG< z))wdIrDdkm*plMP;*!+d_|&4J{33lInGEz+K}iuXxKpgGAS9Z7a48@hXN%6pF zvG#wy$IAAU1sek=I|H-0qPPK=VBiEt8Y3gC&hsU)+HYGz`52fu7?>s5B{{(a0|!_E zLv{Hk84Fvhn|usxKxqjM32ra}lV&JNO)Gv4RH|26bH(J@ULHmsW?=?lX^3V928X8~ zEIb&z6q$LLMOj3JVZuDjQfyM92%apPES&esc=|WN$w!reCP^|$vccS!Tb<^0@iC(o zP*|K@TmhyR=08R*u)iw0AH36^C(#Vk1r!E(38pGq@5ipC-1{PdhNv*8NWu((c@n4^ zw;ug_VI7 ICd$A706C!Hng9R* literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/to_gcc_order.h.CA3D0ED367860B07.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/to_gcc_order.h.CA3D0ED367860B07.idx new file mode 100644 index 0000000000000000000000000000000000000000..1874f405199d069a5d0d6980d385ee163402a800 GIT binary patch literal 804 zcmWIYbaRtoW?*nm@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DKCvV}H#1p3H#IlEs4_mkC?&N>FM~dImgL8$CnwX% z&gA^Ow9Isd;>z44P@op2rWNM`Ls+l0=8DO)y*!LOOhODo(jX}i5GsB&)9w2?VMZ<{ zP7Y3Wh#&()wBCek)ocW z6GD-mo*ta{W#OLdC0etw+IwC@$ITYz@u+n53l(eFWdYlLueG zgNK4Xg%^(^diLl=FrhB`0`0&g-+UpNpUfP0+U*A$p_bnnhM-6uA+(}ZD#2cI8W;%} zhbG3j)x;+fgv8YIurr`ZuZxLLEFe@#T;1N;r8Qc|G!7GeLr8~+&?x03>f*XntvOqm zMU?k_z?^w>IK-|?Ny2y}k>ucw~jf9E0TfoUAOByF=U>pa&=PZbGKw)A>xoQhEp>FWMi|GPHpXI!97VC%l3nOnHSlGhvv5 zy0j$l@2YxgSx^j1ODd{m3I|*V-%!U@kD%rRhH5TSxatfSIv|a zL$l7=cT`iiyK^#~Q!FjJEbBQfYi)OTyJce8P}1Ao*VLA?iTJj5)s0*xXCv7CgxlANI!E7EqbI-nhk11`%M6p@Jx@;( z!ZIUd1Zj+nA-RYP$wNFyUgAaa5g$^31du``gcKnWq$r6Z#YhY(PU1)@l0wpnj${!F zDNpi91t0}LE&?fHmw=S8*MY2KSAkTq>p<$*8$dR&H-T(ow}G^&|J?V9Is0=}=wX@t z&i#D;qhJ1d?fOfXSZ35Yij;HakgkC93T%1u$?LaM_r4IGXBp8cinN5==|&1VgGga# z7^w_=87An;GR&0WBy|P&3eGDqQ^9!+_!`b@FjK>M1Na8c8!*$rc@y|1&YLjP#CZ$& z7S3BR)1rCLN%8TSI}eZVV3{H3&^Z0ESDY(IYv5diEywu3Z{2wA_JX}F?gF_BTz3Zq zPk(S?H1ob?-w|$d^&XR%g#le6BT+H-Sh4xs^DA@W#Reo zR`yQ)*BhnT+I_~}C%*jwx@7dw=v!Sq`mFt(RGB* z^oSlLujD;WGoR!`3P=H@kQhSiB4Pw7Dn-%Em=r^bOL3%>m_qAxQAe^Q3(d?+d87hJ z1wbx>SOm1T1Y!w$9k_Ks*Pseq6}t{x9eV?~4eU+eHnH2lwW)Vs8@^*ay!rbJ_I{ig zn(W>k`_@b1n^bPejTDrENMR|Av@)@Rs;t4p8X%X!Uk3C4$$Q7K| zz+c084dfcm8{lu?ya93p=S}c8aoz;EiSritTR3ll+@kq}?ieioJN>xx%pMsI(Whhb1k}(RGtOT|9|m2XIRFY^yX+b#ZA3J6-WopQ-w~2RI12)M5c5Qz=wMpVv_pOSMpyi-Q+Yl>%r5Ky`|+SOoN2m0+=iy$)}$!vgJF zg}Ex6p{_%)4)fF-5Z-_o^(M@2!XkAW!fl%0?7g46c9}fsWtl^LhhC=BCduSps?&X^ zQMO1HQMTH*in0sj!d7N~7fUOhBBr65sm`GLADcb2zoK;y=ne?!r$c72k-qwe^U-ua X?C9Cq+t)updTF|Y4*TeECmsF=m@rvC literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/traits.h.3A3A7EE63D605587.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/traits.h.3A3A7EE63D605587.idx new file mode 100644 index 0000000000000000000000000000000000000000..adf40e2af642734cc3f000702dc17e95294344c0 GIT binary patch literal 5010 zcmd6rX;2ea9KiPlmXHuGSwJok730xnB}Ay4QmO(51Z*5dB@Ib{NDd~uATTrxsHmah zQK}LZ#0!UFEr=I|pj8}O>!^&yp%rgC)>ex})Nvf`rp~ha#o5^paom|?-tWElKi~ho zw@GI5+_`2i2uf5Xm*~{E!V!WXg!o{%QPW`q+mox&s-sX8O^iZinA(V;%A6cjRIDs4 z$U_xIT$8I%;utCp3!kNwC?im%L03pf7%`E;sIz^PT7^CjjSz_?q8X@0uhbT))TmaI zqbw;w<#Gi^=)~=8Bu9f2eii9)ttj8lrj+>#qtc)+MsY=sR*k(!dj`49HYU$eU}|~T zjQ42SsLHb3Z>D2*)_3B3|DFN_TA=MjgBZo2rJd)*p4luIv4YEgP@^9UZFql8R9q~u*65= zTT*lD@$`nVs}MNNCyho&0CEI)lcTR9@2vN|oCtFexC*#d0XK30fz80xO!2qRqx#ov z6LA?Qii*mwO8)2;00A5X1qIkVv^}1`eRuT1!j*1BcQ1f?!I-z*5X9kl?@qdL(2Y?s z=IrRUC18;|tM~@9cHNWr9P?r&g-Tc0HfKyC-t@K7nYA>ocQdp+u9l4_k)R~XYsRw$&}B&KlDiwloCR8 z2RjB6*W%mfN}^}pvllysJfeWYBx0%((!$bcWC3v&5KoP^fC(*NBAutSfT?tz*#aWy z{8W6>wSqBL;6;x2BrQ`X44fAdu}a(}9%MIB)$VDdbbP5Qzd)8gg)t%R znd9#~Z9OPvoaiyM#@Oq-CEQT}PvTDUCQ~GUgy^ONd%L1E4d&k4*Kn{z|{ava#8$%s#B~Y=3^SNX1Gh_N!$*DOU&8tb|hQ zu52AZEcuK9HuNZ5&Pp5gj1#j)8opRDA}}ycOkK8m!BkxZ?jRt}Z1*Y1+YxEkHz$`(#wShEFUh0(_Y7%nu`2|t%HN|? zqk}#6LKZ@Mcx-qa=>!6&#-@&v>yt7`dgkdJj4qsbz4oC=oYch1h0Y75n0d|CJ+1;+ z%o9&0*GT|J@*-&z&5NdylqaQ81}}p~GM*Q|EXlhsic&va zjDz%1D=T+?N3BDNx5pkLZuw1M+9oiatcmZt`+8L8dO8`aVD`UA^`*|~D_=Gb6E7Y9kpJilFn@kT>!SlVhd-?SvG=3suv4o?7=sEr*p?|Q z?0iE6WdSoSAeKC2h+l|Wg{^=vqY_(XYjAB}Zy)l{FM?diJ_vH6ntZCsp_)9Z=}a}@ deRI#XHkWU0<^zs{qZ8Me@4|xsHSRz){{u`;O$Pt~ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/transform.h.7020D2BAA4584EBA.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/transform.h.7020D2BAA4584EBA.idx new file mode 100644 index 0000000000000000000000000000000000000000..82287f21dfcb991d723ac9f38df47a3870384a7d GIT binary patch literal 2022 zcmWIYbaT7M&cNWD;#rZKT9U}Zz`!5^#Kk2=nP-@Q3=q&zsW!Co%qu7@@hnL#N-W7Q zQb@}zDlVzjQBbKiLX*i!gi07&`InX;>nTbtF3o{xGO-HHODwANF8~>rnV+YSUr?)w z#U4Y5MTXdHGE@Lr1(7mFb%YT_n-N%>2_AQtS~+E+IwT3qkB7Jii=TBAPz6D5&{4qZ zQym2iPXhgjq8;WxG*h8oLlcGh3a52A{i4ZWlbDm9UzAyrk!#0*>R5)f%$!s!eSLjr zEB(;o)S_bj~#IaqLR$C#N?7fkSMTe6TNK%6 zwaemFr2p?rO84CgWxR^ymg@Xp_jHveUPTxG)*YD77^RO_QT4?wnJJ=uMtBuTE{P9| z`1#fZuOjof<@wM1WKHoZ^4NTF3)keW_IMS|+Vk(VQo&_syowH#SRZLI4)MUNC|d8w zuBF`jB7w1`&Y&&{i!F~p22qbEdz10%{j+MZ%*vzpd+{oQB@#v{aAK_Je(+9vo<#GO z^()w3pB9~fSMR3>@g~m>N=?J7NV-q4dCj+T^YAKyB~G9#Kq(&Pik0c}_xPshFT$($ z@{MT~v)3Cg!>dRMct?mxIiazJnO)BPof?rX}Vn>C{5UyQ#P0Bg*(&Ft5mLqr- znKm{|*tkdozaqhW|7y9?1sCv|l*IgDO_t-FOH4fMBC;Y@uvEgsE+Z=g=Y3hY=X!~k z)J>2gb`cpQMeH(g-l=ENN1HNO-{Q57p(r&c5v0GkD7jc1#9&u)yQAMH_~!>B2LlI4 G00IDGq>vW? literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/transform_exclusive_scan.h.B5D5D2F8F5AEA094.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/transform_exclusive_scan.h.B5D5D2F8F5AEA094.idx new file mode 100644 index 0000000000000000000000000000000000000000..1a10887f34a9d79e954f52d96177f7f0af78bf26 GIT binary patch literal 836 zcmWIYbaS&|W?*nm@vO*AElFfyU|&}4EFp%TVc{-q_zdWuquOLHKaOsql*6f*NNAv{wnr_8*>qDub) zg(R?%q4erc^Hg9a9>bretqLAL5BV6{+30cw|y0>T;{1-K2G3^sYCxv52&$#x8= z1~8;$=A>Hb>+3sP>4z4l78UC!Cnf3Yl_eKsr|Tycm1L$RCYKcJ8yOl~CYvOi=_lvs z765e=73(Dy<$`c>PGVlVzL}npiJpOeW?phmX-cYoPG(YaMTLHRd~$wXT4p+pErEJX zzoaNJuQ)BgC^tT}0_cw7%(B$@;^f3Uy$oPnr&w7r;8Flg3zfM^ioj%0HtW6RlaiPY z9tI9}1~zdQ@fa|{z{$kOz{0@D%*s%dnpS)as8X-A=8DO)y*!LOY(fk|(x5a10uE0< zSa>jaDFTH>SVV*&f(#7R7q?`li1ryViLgoXNeaNM5n)phSCEA9>NkAeGgp6iI3pJu z7YCOKOmDQ_k6lZ-_eBDYRA*3^gbBlRF-n1*Ske99o%TG5<|O71YqA{YTmq^V7ZW#z yss6HX&-D^7shc2S260iCa8YVbB8XjFlw2$hVz7b;2w=OQ^d#_*>bhNwtPB9m9REB3 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/transform_inclusive_scan.h.60E5341877AD00A6.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/transform_inclusive_scan.h.60E5341877AD00A6.idx new file mode 100644 index 0000000000000000000000000000000000000000..54589a6b99074be8528a1bb2a2c89c5b913ff04c GIT binary patch literal 1318 zcmWIYbaRtqWngel@vO*AElFfyU|&}4EFp%TVc{-q_zdWuquOLHKaOst$T^Ad|H{RH3L9C7Ef7$tA`5Mux_g z$tKBW`pNmZ1wb7|#d?WFxgeaJlbDyTZ>DEtqGzC=nU|bXnv$xYlbMuUQK26npPZkU zmYGgtOERHJPanpJFDXjQEGgE@ps~f!Fx3ZImsgyYUz8gU4uIm!vefwE0I#=ywRx=_~7W!7R1 zKZpWl7v&gE5W&F7%m`6Xl$us-#mK;*S6Xw$#^&N*88z*Dfhlepk6};LrIuZ zcX{93)#IPGg^`Psi-XGqCY;3lVNI6foJ&kRoDyOZ#xP+XPGvD=IPc5CJ=aUTq;7%~ xF-V9aDPmBD^NLb)5Majj=AO>fEo6DK)FT)v_*f|*3K_U>q0b?*Q002BKj)DLH literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/transform_reduce.h.C4F0981BA496A189.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/transform_reduce.h.C4F0981BA496A189.idx new file mode 100644 index 0000000000000000000000000000000000000000..53a3d016ce05fc76496248f0bb3f8880a9c0ae70 GIT binary patch literal 1898 zcmcIkO=uHQ5T3NvHrZIK#@05mtfq*yAurj+SfhwqthOEmt*9u3-Iq;W&F+S`yEV1; z;Lpt;@E{2OpjE4acn}2<6{HuhilFvXkcxT`K@TE`?#t#SHRNa(cJgNCoB3wGM|Nj_ zU!PPD(3|Sdsj?~70f5hb4U;H0sY9QY9i!1izm~Pkep4o*sS`e}5W^e`@g1W=StcVE z65WZxEU##a1B)d#E1F0~c4T=eU$;83yWm@6ofRme4o9>SNtCB7POAG~e!(dd@@28& z2-RnxTC6TE8RaEsym&Dr@RC3`tsrEG|2Igt3-JZ{LVQWN5MLCnyc5%_tXDy*vM5uj zNb-NXl}4sIlsqayC#=^jRVE7F0E1abD;YU~5b8~!-G)pIge3`uhjI4s5E6;0q(y8R zNQic?#W5U5SXZ-l1u?=RQR#~_qBex$VIdZdAVtF&D&PC6id!(#lYkNz#^v zO-0wl4AQgo|6!kv@WCpx7DPlQ5j7*N6E#WXl!fK06I)tJPA63n6Wyrtj+Uup6mtZr z`Y_$gFjI*HlrId%h$>g4;N1z&*Ft0gP=OKl6q3O*w!71e!Q%z+LBZ06^rlG2;RVTgTqSK0fohyj%;k z`17Ah+bo#6|LD`MBaL>r2YME=@Wz>MJ=`qpuz+sm14n8XvcG!O}&H z-N&t3xXQwMD8O~Kbom)5zzLg#EldFRTho>oAa{EDYuD8! zCv8xp(9V+k!#|(g;-2rbXNp6-mCf|IRl4zE{)H2ESQr%cGBhKyTT;m?x0LHA`tH2D zbj9W2JPn=@Yq|cxwebVo_et6k3o2_V)qcBoXw&7_wO-EO?C)l1FBfbM&hjG7k)rqG z`qQ`OK-+s-0{+FbN+3APi$J94F}>`;=~Y%9{Jg%M9RGFuyFH-~e8u~*Z#yGW5`$o4 h9X+_Iah`eX0N^PdIsMnc;fv=da&>OcJTG`lnZJ!lK;-}c literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/trigonometric_functions.h.3A9AC935DB747FC1.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/trigonometric_functions.h.3A9AC935DB747FC1.idx new file mode 100644 index 0000000000000000000000000000000000000000..50ce56212f6d5ef6cf10a04c14f600f4aee952f7 GIT binary patch literal 1056 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�J{irz%4>N@FpTN zVWE&d3&hX&y=Sg?+wOnVbzRIx;vVa|*hPqQaf=Y|;!U(ASLZtQGx8Y=c=HD#r0pVGB(5j literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_element.h.5EBFE0992EF5F6AA.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_element.h.5EBFE0992EF5F6AA.idx new file mode 100644 index 0000000000000000000000000000000000000000..03cb8a57816e76c49b5bbc2a8d2278bc3fc91339 GIT binary patch literal 1924 zcmcgrU1$?Q5Z7x7UGCOFY__QcS4;Ayi6!!_?Jh`D8=CM(;pP*iiQSJ;w>v4BYEsEXezRp$SF@0n zoMB~)pah8x^E}@Y<~s~UH+Z?TljnM6ZFd(h>86^HWYge`gtz5^;-6@Sk=msb0 zDf*KW(_MTWC)9EwUQNr%p18s%)lRvuj~7K!bVBW#<|I}pe1<(Gsic&&$?crMoN79* z%H*a55^=*Y{DiQ%G-*@d>bv+{AJr_yf;RFrx5UzNiX z!`DWdT&T1JVYZdsXbFJt)|G61*#3PNfr}CLZSut|0r2re<9Sc9?Er!2Anac6ZnFfy zLkl0VpPDBQx@_}iAuJRM^DTjJAt?;yIqZ+~%kx`=X6*ss05ba9-*c3kDD@>>GnZ?Vr;k8XMKg~B!*@C5vp02t{?!YH>P z#P#fbQv2=}lgHpvRO-&~@{71Ur$t!bu{UFZv*m}H-i|NdfLa$3?@(cAK6nF<#G8@` zrJY-RMOtuY!h!vHM9>b6Eme4ZWP!hW=bs- z2%Hi#B@|eI!-$y@3Ep=`M-N|rAYQRExXe+OZJxoEj>;UZ%2Ac0c^%#yE#L@bwb07p zp{2gtPwg0&dCIa`80_}D>!1$?v(;<^Fveh?;9CW)Ggzn*BGB5sw#z5aoalK^s&hNt zS)RxNPBusLIej@=&>76pgav{R_=Q^`9MEY24uB$Jrc(lDT}etb($HmN1>HEQ$b3Iv b4^>=0O=MwyZSmNt!TMLRc1J;x)5V}4*0~{l literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_indices.h.CBEB5740A14DE2F5.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_indices.h.CBEB5740A14DE2F5.idx new file mode 100644 index 0000000000000000000000000000000000000000..0126dbf47ec8afb35f97818095bc4bce4affcfe1 GIT binary patch literal 626 zcmcIiu};G<5OvZH6gtuYv6LP8phT7EhAJv`MM4NMM9Jk63{INb4r(P926i^Y$iPQX z1XDkOZ{P!%*uVz*34PMp&+p`WI^7)&2ZIZrv3@d~XMrbs2cK7x%z%Jk@FYOPdd8Bd|D5D~SF7E_<2SkCgN(iKg zaWa80#8HuoY{@33DkZ`18HyqiNSdE7*|Rc23Ny7G8_Gz9n#L6sNJ}t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmZX)Z0G(QtSgDsm2b&5KGmGeAQAue* zPAbi90^6bwCgXE5vs2?!D@y2UX-Q>4YBB9?1lkf`Qk0kpOw5^iC8_B}i8-LuSzMBs zM{EBk7nh`@q^2+|wHQt$(g;h#QN(H8xg;iBc z)fmCk)YddX@O1Qa%n>|&BYkTaZ`)B-bxA%A9~PkHNCxn*A{zj70g?ectjGpL>;2fZ zlzU$!(3yq|hLR93F)%b8liTfjEVB?OjO=&^75#imuIY~Kj7-cdZ0sBiOfV@1 S26hA!Rt5q^*bt%|2qpli?4S(* literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_like_no_subrange.h.D64033078CC151F8.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_like_no_subrange.h.D64033078CC151F8.idx new file mode 100644 index 0000000000000000000000000000000000000000..5b7463919027c00676964cf45f2c2cd9ec263b19 GIT binary patch literal 1254 zcmchXJx;?g7>1qxCeRIrQl?%YE~Tm<6H=v$G9nldNRi_>t=0U=PSUhu;{+Un1&IlX z0SQ(v0Bbi`VPwQ^iF$(OlWaeFBkM`5d_EoY`|}b2J$sOPBtingwirBObY2u7%b_kY zAcQ>wo^!%D#Fhp11c&1xL@c5X!V!njzM>&|}3AiN9#T6pTauG$b_@=d+78baeO_z>| z=?5l{Ehhe;eC3?Zau7~KVnz&6(LaoMK|)NNFygHFm@$uRn>c_^JxeyYF!C$0>hbk^ z=j)}W)GBpQ-<6MK9ew^B9D|dlh#RHG)-nX(QvZFv+kCwcu>p*oEWRCmBxeuCjj~bE zRIQc8jJQZLXPA#AC~{g>IRgL+E6lDRkyK{ik5Bi_H&0ax#ZtMdYCzsp|5eQZ0Ck1h G3jYAp9C(EQ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_size.h.09CEC8A002112EC1.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_size.h.09CEC8A002112EC1.idx new file mode 100644 index 0000000000000000000000000000000000000000..5448b8ffd90dd05d6dbb163120056149247f55c2 GIT binary patch literal 2308 zcmcgsOK22X6n%-NKgsLF_`_y8u{sIe9j3d=))=%Xy48Z1_yNr%izrf4U7w_w>PlNx ziHVLIKN|%VTq(ogMnqIx2rA+SKM-a>XQQ|i5fx?@BCfJf@x2#rSBslj7#r&Kz3<+4 z&$;Kms=nkfbPvqn2z# zu}sCEs1U=m_7ksMk+gBg^EqXxlI6b2l9HCEOpe>CZ`p=K;ssHhRP70)kmW4LH%496 zR@h|}SL@P9}E+8mqj4)S&RZ<}S!e5X$51n{RThDR&%JWmyX zkr0z5)P$H{K$tUC{G?X-ZB$TQ-!fIr_k`8?HS4t=tyj>- z%N26M^?21S(}$oqqe3sgx`$sSSdL~-=!RfhC2eX-Q0T}^YjmDL%ze7RI^xIX8Hu6H zVX-^?Ljl=*=O2;WBE@%Ai%gxolkA%QXi#`}<{4M>d|fw8@-@>%5wY2_sn(dvB=V-q zrQ75)H};Qt;6>ZfWT<{|YXdGOiYc}r@_D4clex2M+w8>=8m`A&f=jUl!k3%Zp13g6 zyN`w!;2g>|vIWBJcPeA|4|QFM)h}s9SY9D_u?0m#bqGc4A`K6gZgcvcTzEjwhq089 zQfz_qq1j_+%J=Snrs0J+l}M%70%6xMz5VqF@e{v4?Rk3#*I~RIE&pkbIYP5fZeA%r z`q)OcrL>d0RqF}^+Uqz%$eAck?Vzc>Ospf=${Wd}aH z`Pp0No9>Pf_Wh_o4(y>K$);0)>~+sJpA)AyohRAJ!Q>vO33DOYbSRMhaAxMn^~cK9 z5XSLvys9I{T$rozQsGpMmknoYJSi;Ic*StB>UDfb@+-Bb8w4{NiFN^TXr64-@dK6r zUOkIkiuC+Nh^GhByFkpAYoGpjd@Av8B#PsScr}~MM(=Q-J2IPeXFl*Udd7hQWH#yU zeBkAF=M2z}%qGp}15ZxNc~A;Y5SsKF0!`Pj)nU>K+>+|+RNVj?)eWd$-2eru8-Rs8 qSMz?MLM;Nd5NZs}rohD8|IP{euRHWmV^gfTWf6)6v6jGW4$Lot4%6}g literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_types.h.0D5AD9E137BC2B92.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/tuple_types.h.0D5AD9E137BC2B92.idx new file mode 100644 index 0000000000000000000000000000000000000000..d810e89e24be31161c6d27c80d3d9493cc5928a2 GIT binary patch literal 378 zcmWIYbaN|WWMFVk@vO*AElFfyU|1ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&pELO(t}IX^EgGo699mXwqh;2fZlzU$! pP_-C?m?TUXXj)Dph*MmYTr3V^Fm*1N*u~(PSjfo801Rmu001g3Xi)$F literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/type_identity.h.E76DB18F2B2B3CCD.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/type_identity.h.E76DB18F2B2B3CCD.idx new file mode 100644 index 0000000000000000000000000000000000000000..2ea977d25e2f12c5bd8c180debcefa9239b26f33 GIT binary patch literal 432 zcmWIYbaPw5$iU#7;#rZKT9U}Zz`!5^#Kk2=nNNT;7^G$9q+03g>pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|a(-S~W;z3HEh(uiNR2NkO3Va06wJ;{NzE(CEUDDX zU?{H4O#=C|C^fCP7)a}t)?6`pwwH&Ihe?n@P#PQrKw?t;D+#^|9X>`bCQc4cU6`=L z(+?IN3|@*r)zU1|!Z6`zy&t=la_@@-3ac=vNWz4Vd9Rr~x3Ba$P*_qzQXM7?v^yse d#3?RHE*1wdfN=r?Oqmxo-0$6A+Q7)j008aub!-3t literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/type_list.h.CEA1C7FE77FDAB85.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/type_list.h.CEA1C7FE77FDAB85.idx new file mode 100644 index 0000000000000000000000000000000000000000..1a0bd454adfcebf7a24d68d932807ec030887b00 GIT binary patch literal 530 zcmWIYbaUfkVqkDi@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmXuT$q{f#NC1wI03TEeI7MJK{(A3uC z;*yk<)HH_T%G@MSFczhz6=wlyz0#U1CeQZrF!C@7F$hV6q(Fc%Qee?M33)X}E+$S6 zPECj)14Fdlk6lZ-_eBC#t23xe!i0}`ubDizuk<++50gBXJY1NENrg)V&MQjINd##q gE=n#|1~FhU3S=^a_z=K!W$k{;gMVzom>8KE0GBn9EdT%j literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/type_traits.9761DD2E1700AB2D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/type_traits.9761DD2E1700AB2D.idx new file mode 100644 index 0000000000000000000000000000000000000000..0baf3f5c69600a4b008aae64aa177a1d97fe1155 GIT binary patch literal 11052 zcmc(lNlzR(6o5^dB!rNS?0ZNckgba?ge?h#gaBC^Dd&>A%H24)Ts3x8L!aj`$N39$ zoc}RDVt&C$bBQ#{J<>cwRUUtUXG^XAx?0`O&-LnU_U8KP>hL4RR^s*DMC81eF?Io7 zHaGIG`v7jVq!RN%5Uk7xU#u`Th?>oy-ifm9cEC+8TRh5bFgYiitBbTQ=go!j|Wmms)$9PWHZ{`4Z<)=bxXDnSx9Rq4qAnda+zwb>RX2_F7IX{ z%ng^YEPp(2*dYK$c3K3qvl~_*T4=DxSk*N2|G#Z7t%^ z=BeRrKe7uA&osT(iO_kNwnznoXH8NaI`2X(SI5$W>jby?wRGB~`o<#SU0R9KdeKy9 z-c%x#w010Zb9j147kG=?5In^%5S-HHR}tk9qcS5b%mdseu>*0F=}40oT!pcKT&sw{ zfs(F=i;`^v^7m2`PJB0{?xfqaK1|w>H({wESEXHOklSt>(dIe5!bav>kk-qHTxDa3 zJ*d0C)V)j&^l327z!(EsdaVbU0UdvUM_VF;A>q;OaIaD(SJ_88@3aPo#a+op-24I2 zRi;I~)Jj4h1QI;*Y7ul!MA8&y-^7TUF(6&1`Ibp{Jmv${47`SqY7#zuxh|CQWd{3o z9`$3FrR15BkDezyW?8DbNouk!`trh0e;IVP5Jadg%0^sq;_d)wy4Tqy*EQ!5s7)Ly z-c1YgO5N`8Eb~!7!ggCn(&r|nSk?6yD{&59qvgSAWL=Lo05`*D#HQa)0k>LcKklZJ zO7dv!Wuq?P+ro!S-;?X*?rPU@rEcsSuD3};rV&Zn5g~^xdw)}fwjEfC-*enP^p0px zIF#yo*uE+y`^fZ5(SB0yQn(kN3A=-ZBH!bOMwKwC>pFDgof{Vp!^2Lx51frU)Kgf{ zI=A5e;VfG>X}V)?7-Dsf60U6GRc9&XfCHG-_-R#) zovp4h_5rc6F#2co``{nHHF}QJdXFAE-glz^&lBf;sj=PzBEd-Hjd zJwP!_h~tREh-VO|5LXdb5PJ|WBfdvGhWH%uG2#&7OT-t5ZxNp&zD9JXTFbFk0b_N< LSBTdT2N3@UCneVP literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/typeinfo.FE0ACDE9DB83EC79.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/typeinfo.FE0ACDE9DB83EC79.idx new file mode 100644 index 0000000000000000000000000000000000000000..259c1c3d95fa116a77f09266ceb80bb88c924f8e GIT binary patch literal 4802 zcmcInZBSI#8NTOX1zhgMl_D&Q8l<#MO=J}brXVJSNTSWeCN+*9(~{lgu55StaCbFm zTVsQ5V%kZ6bmFvTCN*fMiB2qoW{0A|gb9KyDj%yfw6PABw6qh_&Zt=1)Sk<|FXtrx zxih=xJokOidC&WCo^$Tg>#C|cG8Cn-qXECi z7mc`!R;>Jnuh>`O_BGTs@)6-kp(k8t{Cpu#{dRXrVNr46a(AHK7us2)yF&r5uc^sh zUF~bA_XoDmvJt(>r#D6e4fXDsUSaJl+cbh$9SwT|JUD@f;b$c3sgG9cyF8(to~T|k z>nqr$hrJCEz1rh#2uEktTVEtvQ=|K5-A15(_Wj_MIjeq1busI9jJ>VYdLp&F{AzTi z-czS54UKx(6Kx1DDWB;|y>iYFHKnEIKaqlrO>Uq!)6N)H_=}mo@?5Pas_doFX3rd_ z>=jx{WOtqS78E5EIG6us#($P&0R~0!M>`Lkhh0fE;jSybtD!rainEZkK+%Tb97ev? zkjmk|{O{Dk4_|x00p|j9kah*>SCBypHw%6r>s@-PeAqBeZlYDmQs9QgUaHs99yELqk{jzBwt z1*EX{%(EkP7b|KV$l!CdqpTg3RzoUJj$D1a4DZyXAn8krHh{bVEVUYC?)0RL&B;Ic z`l}_6EsUf9T&V|nJ-F9ugwn*0EpInJ+Ps&qCR5Sk$dB`x%!Z78^v)msXV$*?QZ{lZ z{QW>bl1O3U#^A9{A9;V5f^2T61ywEBU^T)}&%N8cr{)y4Pv>ZQiP{h_1eIpVeCoH~ zdGYD`_p*^oaXA6|38ayN}<*P6oTE)#*_H4V_vE%OaDzxKRa-4_VY)B=n z`y(ZGMJe3*gGBMi@2X7IZbG?q#$-IsT;npHV6F)nPcqk}jHj4uO5nu6 z3wfVzzJDI~_!?8Mu?0;(y*7E@>(1ul@(=8P*u6C~S=GAPs%}xB@Z!G$S2sU30WS4Gls=fKM#-p^TEfJ^-G{??<4hnWQ)+=Me$u!60ZBcfBoQf zwlqoQ1)to4dq|-2otE4q;{hZO2uz%Y9E;0nw=UFfBlR{Mv{d3Y=CT-#_C7Hh%dwb@ z1jJ-~gh^vGHSrhAuvm*mjQH2=_{E&+N*?fiQ1@XG87Dg9Q<+>wTYX#M?T+81b#CD! zK7;ZZa>(yaEh+87hQE55U9+d!o%H%g`3DYb&pCD2wL@?m!UH5Q;+EHfwSr&8<|Ba${&EssIMl>S#<>24nTK(NioIX0(@(xx(BMfF<-YGEg4c}kpDMd3Jox3F# zTYPYU&(MRS9+Xk0R9@7@11Kl=D4yK!&js=q_7;CU~u$didtijeP<8Ef_ zmT@n$^~yNTY;hS6GTWexN0@Cy#-q$OD&sL`8P*NPRbkoIyL9%;ijg*=88 zFutDJS;ODS)AygEDk&F6JCggFH$5AD4Khpc<9A7~01r!MR5atbG z=J+#?mXcvSB;*NHB(PrK%WzzlYx)XuuZa2RM#*`?yhjpG&^?k1%-bUg!g|Q#=hOdi zXG5*M`g=KyxPRsamD~L1%YJt8(8FbnE)+8_s8WfH6e`G>7gV~DurCrcoUuO0jP4xc u&wR{JlIcFb(9)Aa9sWJHr#@2La_5(qQs*S6q|UXcsfsG3X`-7fy8j1)=MDk@ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unary_function.h.3AA202CCD04741BB.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unary_function.h.3AA202CCD04741BB.idx new file mode 100644 index 0000000000000000000000000000000000000000..db7e946209e31b8612be5575b764c79f301c6219 GIT binary patch literal 474 zcmWIYbaT7J$iU#7;#rZKT9U}Zz`!5^#Kk2=nNNT;7^G$9q+03g>pNTNhZd(673(J_ zCF$#xB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk} zo`HU5UUE)pN~(TNW>RuRg?@Z|a(-S~W;z3HElDfQOD@UG&r8hFFU?CVs*HyT=w&bz zSLP;x{8^NmRy-F->y_4AF?qI^hmnU#kU>xy90WkZ;pqnp4+bwqW*#PC7GYtSFb|VF zi#!rfl|>cKi`M(GYbp1>NT5ju3lnG1I5{|VVZusDH&bUHJ$jRg xhe<(9!4M|Q!=xyps1M@-U73>z;uIGp7mI@!OedNb9i6NAM=)=66}&75QzV|jMYp=Hd;V7Tp~!zn|drmtxYwrNRH>Cl0& z9fToz7aSgBC*4hks23S?f;UA69z0C(q@p`0^Wc}1*R|kPUw9wipWpZWelPD$jE;=l z_5lp1N6UHL(a?oGxNXNW2#=1tl!I5}30g31M>=KcX@hExF3Cl7XSzW7YoQAUyr!IH z+uKbugD^nrQ<%w=OzIc~Q_BrP#>nXjLdbA}Oxn6-6Pij9^$IOs&JxXXjEqJdoAkyH zAESM=pU^_Sh#i)#YF6IeINi*WezmtxJwyzX=1OUudLVNjE5rpXR=(uM0V{CkjCb?(@jeFnQc=PZnbv`uOeWNf>KKbepd&$k0qJ7x7e<=RbVuz8ji7ul{^| zKk#e{(LK-;W@t9d=l3Ktv{=U^3i3IbvcaODv?y&XdcL|k_vlq}3Fn5ILJ>BXoftK{ z$7M9Di|^xG%F-I=7x3$5=*@di-a2EE^#!I%4%W`z#pb1NqYbQ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/underlying_type.h.BE08A4C00E8C173C.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/underlying_type.h.BE08A4C00E8C173C.idx new file mode 100644 index 0000000000000000000000000000000000000000..fd24473de540e2c3b96a91be3ded5f512e8a4b5a GIT binary patch literal 820 zcmWIYbaT^TW?*nm@vO*AElFfyU|uHJ6)-lbwN0g-t~qOfYaVfg+TVnKjbKVddRYk>hMk96$vM z>NNHLds&P_15R%@vbpdwCdn*n}8_q=6z};PCW=g$IL|B2ZX~MM)SY%w>Le z-Laj?&Wv1aoE)6`FyUyuAG?-v?~4SgR%cL`gbBl32~-VoVnz3ZciQtLnww?o7tfr2 z>L?Qrn~02vGEA6dYjIWj-W;3y{GJtXe6tKb=3=9CHi}Z8= literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unicode.h.B83D5D46FA0FD2C3.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unicode.h.B83D5D46FA0FD2C3.idx new file mode 100644 index 0000000000000000000000000000000000000000..f9b53385b917487eca5466ecd0ab18c2a3fd91a6 GIT binary patch literal 1548 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 Q&hSnU&g`$9IUPa#AEl+B#{d8T literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/uniform_random_bit_generator.h.9CBDF3225CA92F78.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/uniform_random_bit_generator.h.9CBDF3225CA92F78.idx new file mode 100644 index 0000000000000000000000000000000000000000..9ec3fec6246601e3afe06589d399d88981539e19 GIT binary patch literal 1228 zcmchXze^lJ6vyZEygQ==G$Jflr4pMRqlX&P2!i;dGo+9d!`r#pb#Qm)cr$xBAx%25 z%U>WV#Li9xK`T28i=;{)u``fHQaQtAbAQ3zgPHlx=grI;-u&3vTwlK_6SCIa>}0}% zlVr*jV^Mw^cEVdMQ?WuRU0b0aj6g$q6w$EFTl)zGv@!;64V{0p@Rm3DBIP=3xfy6e zz|0q(f=cLOINu28s8l@7n}Vh?;++m zFffA%7|W#3iHvi_t<(xqcd%`}-~T)!sHVNtRdur`LOE8Nd z-K~|%iUc9`_t;oaw(rq%)f6$yfTK3GkjuLLBhdzZI~ zpJ(R}??1hCc$Umgb|E3FzkV-okgeAa*UR-+1^yU5U7n0x?>am~W`Y9W&IR8C`E*=* zQ5mg`E*1Ez-o`I~Pye{l(`5SpA}CVuLkx1mycqIT*Ze>8&q{?Lr1)?gsrKkdPgdS- VKOWy*99F8Oq2cmKwMJ?^=QDy{Z(RTY literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/uniform_real_distribution.h.143AE5D861EE4E8C.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/uniform_real_distribution.h.143AE5D861EE4E8C.idx new file mode 100644 index 0000000000000000000000000000000000000000..0167dd24460ba334e1feec441246fe51195d5008 GIT binary patch literal 4740 zcmcgweQaCR6~BIQ)7XAZov#}wcBm8EiIctf5jVJs*?8v-hT@dpNsu!|N~S)2Tu+7l&2ZctT#DUMQE+ zg?u0qg>{vC`nB!~+qf&BJF$?LO7B9 zk${*LB*`AZgpoi|$R`T9F(Qx!^67c|zk0ijkcC1aOGN(y(YB$|7bKO=CjC6m2mO3Z zN){zvTv*^etKxEIkr#@kbV?9Q67L<_J0cE?K3**3mcgPZd4yt4{zBCGMc(J}4ts9p z(|IvlP9*tkdO@sI_;?)Bn@TU<0OfolnTqEGu~?99YHrg7DYcfksas^zIhfcaCsar-ohOB5xqAx5?)|k# zcYp0M5U4%wR~L+p5oJnLWtC9Hq?9ZXkmYQt`bH`x{C>DcK*r-$!!tIzkq?7yB-~RnfD=<|5SF>-8vt7>$8s=tSs3B?&p{}qaui* zL0@(M{FQqP&-raVEV-qZ&S;0C$b z#=*b*?E44IOed&g&RCx!P@VbhYS-y2r>3jNn`h>YR2J&~w|Sp?_wMW)(Q z-lqt(zw8KJFlD)8JDGln-)glED}oq|1~|XYv?F}}z@0UFl3)C~t8J8kZ?K*b)?6>_F?_-G_lCw%y z8x%ndJ9MN`PR_}|wO1cHkvIwVu=`-|V4ot;e(0UqzH{Z4Z&b6-_wpVp3$?hvd~f;- zzIVTNiZVT5Kj0V`R0P@!|9Q2mo_pR2HZP9;YN7bU3m@*Q~Ij^5EN7KKF#>KIDY1Q{e(O337pHQaFIGn-y9h@{~9K zF#O)jtd6A?VzE|PL`c({KR)yR;k8D1eL_c0=-?-5^@9w85M=sb2*?|Kv%(jA-AY#) zSInpc)UjgKpzak1qL%L-KOA}HzkxcIF43jhYnEnA84E6AY0j8yM}$;tGAb0r6S35( zckae|vDBq^Y0!XYUYG>0sxe3mclHfziMu78%eN14mReWtnnd zcd;~N2{|zJEDc-24y-;)XDl-gBpFMimZ$@3$I_T3=D_j6Qqd=lt6nM{6(_O}*Fd%9 z`GUv3`t0u>S(d+7aP2f?CQ`2#ba@NM}@L4`%X_hrM^c z{m{jT&PG$tln;YD>iPFCPMgl&37v9WM~>?{uv0Lw-9}|bp?8+LS+@)KU=@<#Qb4}Z z8Dt`)87QRcWJarKu4RtHW@PEy$XrB4^DXln9*(8+Bl8gziDt1MV`piCBsx@-*_Szl z-35soTD=2P#nLt7S}m#ABv1l*#A1ei@9OXQ!A~EPAaRBU!!Raddj9^I{@hjxGL)J~ z9m4H!7K0Oc5aY?PJ?c7@*^94jG&U0RW9@Bp#l6yxp<DG&pRC@G<~f`6j?T z;Uxek(Dn<`6JE-k4T>^R z4T>=_4LV{ta*G=0QNvLUS|Uqrs;*4RHH39*G%9x@W)YI7DJo0(ef&5!7@#mery}n@ z?>OFWki4*WPDMV($ErT}@7mw4j^2s!i4c|?M(=nigw4s)S<7q>-mEN*^hfq0<$(9W z#I(9{y<@$`?Z!v#zban+;rq~hwlP~!-8kt>j-m+$0DYsKQC}~FieLTs=?{S?ZKSOQ zvxV~?C@o+8=+Z``BT+wI06^)s6^cB;xS_k{Ujk?XzXY;^>{cp@(qZ|5UO4si`ZFiL m@?d>SYn!E`UHP|2R=}s$oP^Y3A;eNu%Cc5LLTXJw$o~L0#(m`g literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/uninitialized_algorithms.h.C5EA7BE8E6577109.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/uninitialized_algorithms.h.C5EA7BE8E6577109.idx new file mode 100644 index 0000000000000000000000000000000000000000..9e9c7d4d4dfd9a8205552c0ad0b23a4eaf9b771b GIT binary patch literal 11796 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unique.h.5A62E4947B508F2C.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unique.h.5A62E4947B508F2C.idx new file mode 100644 index 0000000000000000000000000000000000000000..5259d4f5c9622786e2d88b031da3c7ed31474bad GIT binary patch literal 3040 zcmWIYbaT7G&A{NC;#rZKT9U}Zz`!5^#Kk2=nJTP61_)@VR2y2kpNTNhZd(673(J_CF$#x zB^P9;>n9eKWTqu1mlW$885&zAnm?TDf^c$9VqUtwnVyk}o`HU5 zUUE)pN~(TNW>RuRg?@ZI++zL2l&r+$)Vz}Tw9LE|y$rh93vw_Wt;>X_t@!)`P$J9B z&nu>*?WK8{g{7%9w=g+BFD)~j#!(0hNqrb2zN9EIvxN4+S(=xUniij%m|T=!Ok+Qm zmSpB+mQ?EJ=9kev)?k(uBxV)?lSpw%ij@@uB*ickSLP-;0gK7i{c>Mhtg1P97z70v zxXc;M*}wz?Co>}h8v`RNYte>cM`tPP;}8Xg42Eo6AcBFDg$b%4HLdt8u+-%^F!{y| zo^S>x5iTV@C4q|W2k*4!Ni>Uasfnpcz<4n0n54kgz=UPEEch%$V3K;JHCIfY?d4(Q z;gVvIk_H#&Ktk}=x~(sQ%lUx9whXpHFyU9yE`?M3PKe{R_w~LlitMx6W$`M~|Mw-O z`)-9YUPbIXG$T&^V^U-0;gV;N7lgTjhs%J$0EuVDUxP@!-R(rg*%-ZwswNk-l zXS|9Ilvp2WF%I#-t0-FU$F8N^`yzo!%$mVk5*E20fefM^PxdC`)w}WL%|1PIgA7J4 zE=~?k6`0;Xs}{?wJbJ$uuih=|SFpW4Ejj_OqE8RvO`aW;nub@Abf04Lns4Xk;Z?LU zef}Qb6#Yeb74c5#5jn|JxdfEZz2*I335SPEOF&Bm!PDW>5rXk9-V6vT6PKM`&Y}AF1Uc#x+LZgYqA{YTml8HhP*2*sQ}9m4Fe>enZB71Ozz9V zJ=aUTq;7(=2+6C%gn?Rw43Kzcl4g1^xl_-gk2YnnzQya5iTU0|jlY(E2Bvs%2617S zUWTI7oJ0_(xG1?e8^mA-5fA`udcy!8i~%hF5ll`5lLx`%M=*I2OfHuBUvIGef1}R9 N&cVse!^h9d008^H$prua literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unique_copy.h.1B4C888D6DF1AA59.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unique_copy.h.1B4C888D6DF1AA59.idx new file mode 100644 index 0000000000000000000000000000000000000000..a30cea09d8380d4453047b1ad210eff4b98e8529 GIT binary patch literal 5320 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unique_ptr.h.1D8B108D8DFC5B85.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unique_ptr.h.1D8B108D8DFC5B85.idx new file mode 100644 index 0000000000000000000000000000000000000000..3288a7be58ae109eb1ad9848a06b93f9ab107d64 GIT binary patch literal 20372 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 IBjn}(04!`v?*IS* literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unordered_map.7B3D663F7BFFA563.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unordered_map.7B3D663F7BFFA563.idx new file mode 100644 index 0000000000000000000000000000000000000000..654c4928b4c2ca008db2f00811a0a4a668293e87 GIT binary patch literal 62054 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 Vduvai<+As-OpHtnuoME61ON%*okRct literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unreachable_sentinel.h.93E8A07209989F81.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unreachable_sentinel.h.93E8A07209989F81.idx new file mode 100644 index 0000000000000000000000000000000000000000..5ab3591c990d39edb72127a51f423723e0768b3f GIT binary patch literal 538 zcmWIYbaNA8VqkDi@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmSmQs7A2PC7XclYmz-KqQmmIjFB?nq zic%AkGZK?>QsawL^GY)FQgeW|7gy#cfdaQEHLW-XNb8l>TrqjJmxqyuS(rgs8YBe* z4o^Q=crbV=0)<6cM1>)O3=GkFKXxtU-WLfJR$@?+gb80Xz1VR)h4Bz07c&;FHU@;41GC$n0_{cBMruj^aObo!300RI^(V8*< literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unwrap_iter.h.83DA630310A3AC8C.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unwrap_iter.h.83DA630310A3AC8C.idx new file mode 100644 index 0000000000000000000000000000000000000000..46c766ca64d697e32ae6c7354cb1844efdfcac14 GIT binary patch literal 1738 zcmcgt&ubGw7@bYiHrs}Rwf47-meL^NPF%yPsY!*FV%rpIRj?|qo6RI0xdMMI^dh#Mxw5Q$#5u~2HsI>`V*~ z4K3CHFpwQC>&RAu0DvYsESumuhd7bL8cIM22NLj@g@^^!Oa=-iwJ@EB3bAocQEdx~ zyZ7u@T^mdj9<6)kTPY)|R1Xv`3$ zAY&U5VajJ$)iiQA@3V>1iDH`sG9cST!M5dlcRJEdQh@~%8}t+Ym#bYVpbamG3?-u> z8RvZO)$58anI0^?yhYW<)ZcgWqLD>8SyxnIT0UQ6KwY-y0TH3;@8pFyun+*2m@51$k~U6sQVT*M#_5Q0>mv Gy6_K^vFM!u literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unwrap_range.h.61BE0D73AD25157D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unwrap_range.h.61BE0D73AD25157D.idx new file mode 100644 index 0000000000000000000000000000000000000000..c3ca8a6fcb4685aa99d134471850b8c6588fbfb7 GIT binary patch literal 1654 zcmWIYbaTsNV_1ON#Z442><5O_I&@lk;;6fI5nb^%9G6K{z=lF)v-;OwY(f z&pELO(t}F(*C0D6=FZSHCo`yeP3CKC>jXNH2rlwiW^1m`ZbN zlk@YEQwxBh1!MrjxHP#WGbx8I)~02q(>O>$@s?PUUj*_S*poC5O}LGDsTCzOx2-fU zB{eNRH!-;=znI2BSz3~rlUY)!pOTuKQ{lyo;?6Sxg~dYDVXAqUBE=%%ye|v)TrcsGx(QOm5F(1Ch#?ZrD|;^g<&yd5n~X9{ z!QR0^Fbj$|U7xv1I81nAzIRdMujQYC&XHh{fCoxZYEB}^_~N4E;&Kp! z8ALz;)3p8b^7dWcvz?QXnT3^&gOiJ$0agJ3RdB-8F)(l-n82C?27nO<16(i$0|P69 I$&O$G0Hg}^k^lez literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unwrap_ref.h.474FD90C3321EEB7.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/unwrap_ref.h.474FD90C3321EEB7.idx new file mode 100644 index 0000000000000000000000000000000000000000..62c2cc0ad61b54b66c9fc6ec4028532b63721ac1 GIT binary patch literal 728 zcmWIYbaT7F#K7R3;#rZKT9U}Zz`!5^#Kk2=nTHsG3=l}m%t^J<*VlKp(hn_8Eh^Se zPD;|(D@!iOPS;N?D#=VsOfD(bH!?J~Og2e2(@)ONEdc5$D%MLZ$_3%%oW#6zeKS2H z6Fmd{%)I2B(v(#FoXn);iVFSs_~iV&w9IrGTas3uqMufpmt2yWpO=`UmqBCeN-7Id z<4cMXGlAiflA4@YNmm<7^U8}73*w7X(}30%SLP;xA`!?dUIwJ~N^7o|Jlo5|$ipJc zAS?}%0s)7oA1pi=ycC&uSmascg&~3r3_L9QEc$Ssa!f*}gvnx8pk8SyY3+*c2k*4! zNi;|6{n)jXdtW3_*qp&!5~la4;I3oIFFFr0a!DqZ0*#;U)m+uaYO{mU(2A*n zKgLWvJESHxt7x;(j#8+JbcI#(?}wOGD)=4HmHrXTn@!5T4~=H!jzFb)|ib3)~G{T zTuUI49gm=P4AX*mG!qxcP$D)EkF7?esF`KmKqkp)6B8(#tpQg9W8)2j8^>loTe57z zNX2L%E}5;&tW^>vO8B}q5WQUDsM(xVF6wnh!~gw=m@u*s4!i-m}t)v#&eoLT=*JResa z@U+Z}xe?%e{~P&i0c+H<>%2qDjF@~^qJmXDXKkh@lQ8ET;(zhULT)4ffd_6>ejMBS zJm`nTU7*Av?yGj-ZF0i`a5Xn?jy^uqwD(qI#$i3I_bH+Sug5jxK#jcp)&;QB^WpoE z(>L8NMe(+JBh~8x?_%WxFXQj;`(1ve7kZaTbMVcLJ0G|24{&n^G7F_y(s3`X(wI2@ z?$fG^OOEy^=|H+$Qfavx+4c0NyWj0sR8WI5)~}=>Rnw$1pGolj`%F{MZxg-i#DJ?) z>1*!`N~iFpYrCFoLh#+Md|=dslo9 zcJo|^VYplJJ$lGDIpsO`h?^4~i9R_~&hzE^-r)-`Jbop-IIK!78v#&GJ{t-@Q_df1YiafR{B42uj^M)1Mc@;DGfi9@XPdk@a@8+w0PT+0 Y;fQUHSSt`-v5wX2h_!VGXmzZ=08+|EU;qFB literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/uses_allocator.h.9281CEA1979A7A9D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/uses_allocator.h.9281CEA1979A7A9D.idx new file mode 100644 index 0000000000000000000000000000000000000000..04483966581ad977de1bdc4adf9703be95eb8311 GIT binary patch literal 1066 zcmWIYbaPW;VPJ4h@vO*AElC728AO1%xTGjkhY8340UMQSL#yPR#NuLwkb+tr1(j+e zDAzG3CqKE?j==^dtD^v6fhBQb`pHR2 z`g&!_1=;EPiA5!uX^F`t#rj5u#+Jz@$!7Y=`MCu^9Yw`@iAA{}3^X|}UEfU4$VAUT zKQk{mr!*y1KPNLOxuQZpK0Y}=FD)~j#+E?5qhDH_S{$DU@_S-Qevw`VjcqNdEJ%$n zDN4))22W-&$fsqg!0<}SNu{yX$;BlpDXD3|)R1Cj#enK-G;VwuLvdwpk`pkwFx!h5 zG3nP@@iK99GO+21>8XJU22LhM1_l;JX4ZyhToY>wOB>jjxPS_@WVE!v1VjM?P(e{@ zTCopMv0iD-6_aOsc^G-vL>NS*!HE$_I6VDe;lbdg2o%;~(Gi9T!|Y|`0^3*7{otMU zJc;J(X?BH^S>v6Vc-WK`m5pG+ENtqg>h>_+wxg=*l6)FIKqF;1WrSeD(Rx32E#=-9 z2^2PDFqDMZ)O1X4x9hRYLZFdSoKnIt)jTLh!hFfZ1@;|6k)EcWIn1qfE2A64qN3&l z-ORU|7a$+z zE0@58dD!&a^t@p<6{Y4Rf{ZUNN-ow1F<3za1aQC@3=C{(3&VC>3sy-mv$AtAup=Y@ Dd4)Di literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/utility.AB477ADB3300132A.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/utility.AB477ADB3300132A.idx new file mode 100644 index 0000000000000000000000000000000000000000..229ff1e81a1f7bdcdabbff703895e623ad4c9de3 GIT binary patch literal 2970 zcmchZ%We}f6o#GYG)>d=mb9tFjy;N@L={v*LW-zb*deiEF>;(U$)TPLwsT{Jy2+-C ziXE@eMIVEA-~kX@Htex!rp^m^j%3Yu#$)~Z?U^~}{l(eYw=F_?gNs=LnuUar12dGC z_+!(6jTi--Qc8QL^n(JaDDU@aXTtN#A!Sly%(zzc_}TN9yvt80&yw7%kgCIEVh0y2 z9nzD|akul7V#>vM090U~&t^1=c$UUE^em#sxd4j8G?UO7l_K_EG6De!q`Fj1gJ*%HPic&!s$>47PN zUNta9jZBz&AR~cF`xVPnJRNwI5SXA=UM2KAhe%82TW48byn30KCJeKbsCm-2jhuv7 zeKptDzy7>9CvP8D8||wgyb4-&(nh1b2*Sl`ejS9@tNBe3-mK=gLH9Q3-LJOm?}F}~ z%YS}+^zPN-{ClO|uGi{E#bf4=!7MAuRjXpaww%k@DS!|=vkcRs7SaCuyZPzO<&#mn zQmt(@ws&?n>g$_Fd(B`iJlJm?65GQrL)RyAB%;_Z;p!tUFwD_+W~V Tz};PUxb3j%u;y^X;i1ES9QT7W literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/variant.67131580FDDBB730.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/variant.67131580FDDBB730.idx new file mode 100644 index 0000000000000000000000000000000000000000..6c6a0e38b6ad8731739df96e30b52a6334d29aaa GIT binary patch literal 36014 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ǽ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 IwkOU0AEr|ptpET3 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/vector.F0ACE3709BA75640.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/vector.F0ACE3709BA75640.idx new file mode 100644 index 0000000000000000000000000000000000000000..286d9a617658ddc7daa213145f9165d07b9592f8 GIT binary patch literal 150180 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/vector.h.4598AF5F599A3548.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/vector.h.4598AF5F599A3548.idx new file mode 100644 index 0000000000000000000000000000000000000000..c544ec61ebd2edd01634d951cd2654c47f75aa87 GIT binary patch literal 558 zcmWIYbaPWt^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmZX)Z=;x;9<`-4!WzfN@vee{~{34)L z#g(~9pdc(tO)KsK(t4#eS4^Jmx?n zS7^a#Mowl?X;H;2fZlzU$!P_;ONxFo~~28Ni8+c;KzzmmM5SQDMX5Q7Aa-$4a)>WFH8}|Y2lz%aV%qAHUuv-n~Kgcv6PFI7D$T(1r;+A zF9~Lfh=3qyRfG*t6cuj-k=CkAhbST>U_>cOrojxAgzc-#@#7y@lauD_ukU%j%X`ib zK>-1M0|jA0cu=AtB3>gG1YtP4Oz}ot9s7R&iPY&M{6tY);3uv$MHo$@HY`l^PSD0h zM~NC^ye?9sjW>xirmMfu&eYBpwXudcR$(-GYm5fRrPXU%&{V4M5L*8fFRs?W-l#GO_Iq5<1y$l z-2PjyAeh%SiOoIR9dHzM6y6fx%PX#-c~#B~4uK9~iUjMXEt92POC7-AH0U%wm0-`^ z721$F?!#nCT!!j0R!JbFcj~_}>~LWf7eE)_DnUuk62sM$bt4(v0^Py{2}X^L@-6MN zJ77O(Kc8;b=)8>RGACCCr$DDLQmTk4+c~ie^i^!b`f&`3LB%{{ zZu`qQfx@B*&Pt?1o{mqX3MEP)FX=z-g1oE$*y<#=I`#X1uamr&kKLLUE?(-=;>i;4 zgYNUG9G0oqjoqc4!XOuv%U89={oRYTNqZci7^L{Hp^wUbU%4tsoffZ!s6-_HPZ?_E(_GeH9 zs={cgqI`*EQTUM%2V{aW;U$3=js7vdxpyvur=X|sk)Y32!oL8^6^f|x|vh#4ooSKfeSF4vZr~}pUl_y7ad#zadDwx4}(0PoK z!lPjhd0SAqhCw5!k+*BWK!5AYxHJueGEf=RQpJdC6|0svYQq`SgX;No>y+xpTiqLs z3~qvM@>vDF$o{3-i{cra0iEFoE2`!P_x&~90r^nmW0I7S*?Z!W|KhA<26v&j3y%+A z*_fa)PuRks0#t$V66Ehrv1kGU9dHqJ5mO~NcENnuXGG{W2DPACzU`~6fi7z7O=XYW z9XQ|N4L-Ty$%e0Osx(${1&S+tf#;Gl_AMFz=N<+fpbn^{4138>vtlfjdl@_gJ>(B+ zTuE-iA3L6BFvtVt@eIn@+UlBKoyFiR=q&G&>YggYkjX`x$3>>hTQ zK{XWB5G9beg~v}#vY8olf;xHlz+lfA&S8be7@Py0gQrvxlBsB2_W74SGJf4v?U|UJS;L?W z)W*ZhdOE)L@I7W_&;V-S;g-tu)Sdoa4!8%p$G4=H^3BoT=G|~o!i=G2-V91KVQ5qT zaSMjF@bSIAYwrr))Y>o@CqXB9Zx2R0sGX0U0@6h5EY)omZ3Ef(i6{O%sHSkJ)SnaZHu@ruHntikx9-{xU(yD@@{479x7pma3uxO`vTE zrhMW#Dy~sdT}U(07fJOV)_=tYVl64x{`1-BK`F8F9;QH1$T^e+&rOQkicy-yi3%uV zsQhQNR%@+vYCROCo_n9bT1@db*p^ns@pb&KUd%4+UscabtP2ykip|d6Ld{$j74!t- zX|DJr$HaS*FDpy4IxCEs-3N%8i?KZ#C8p}wJfrF9x6#iJ{h&YCB%3#Em$gSfe(gOb zPi`9bR%h$Vg_Drq-=Cgc|9t;e5Dvm_c)M}GjQ+fT+xz&!j6M&@d2p@ikeE@+N;37y zf<2~dTW)}mb%$#X7aaB+E;(FvXl??H4I3b2Fun8j-NP^Hco-}!c9xb`x~pNYzcySa Si*8WgVRLUVp3r#%hkpU6P?&T8 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/void_t.h.C65FACB8D0ADDC26.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/void_t.h.C65FACB8D0ADDC26.idx new file mode 100644 index 0000000000000000000000000000000000000000..d8c49f98b1679be54eb72e98ed408e3a13c217d4 GIT binary patch literal 508 zcmWIYbaVT{$iU#7;#rZKT9U}Zz`!5^#Kk2=nY=)8FtAanHnd94Nh~g|wPUaWGk|nS zWkG6uNl{{ENwFP6T4qkFmA<~dvz2~macWVqesWThzFt{!L3X-+Vo^zET4HiZvA&U^ zv1PJJvYCEzer^F!M^Uj}Vo@##0}ahf*EiEMGSM^8&&*5CDNRY$&&fo!Z6`zy&t=la_@@-3QIFcOTvU9}0CK5`#{d8T literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/voidify.h.D1E9E7C00EA3ED47.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/voidify.h.D1E9E7C00EA3ED47.idx new file mode 100644 index 0000000000000000000000000000000000000000..5413e88e40da4ee6239c21376cc9ed103c808473 GIT binary patch literal 614 zcmWIYbaRViVqkDi@vO*AElFfyU|t^h1kNi;DG= zlaloH%90DR)AbXJN;1*3xGO`iuDqUazQvbCowNw-%QWQ zM9)A!GcP%(G$mC(Co?IzqC!7DJ~=-xEi;|QmgJ`9<`-4!C#Iwnr4|?Gr|D(T$HKDw z%#_TuN}zScmAOfvz${8lE8YR5^-625m^|Cd!^p!d%pfcck^+H{%Jws>R9^D|g~b@e zL?MC<44fBrxgNUiux6BDmT;2ruIPU7PJ5n2^R+6*Jhw|z>=?P2xj49#V5+0_e(YMx zy)P1Ih%|$=BuqFkruF&bTK8ROh9oh6Sd-;A=MuMslTTrcsGx(N~%6VrwX n7p3MTg4o4H$;HYb1}v2TnatA;?e|-+RrQ~Vk%#m)TKRZ*M_#6_ZBxd zN%YO=%VcRNhNUbGnbtG}ETo!ANg9oh8W#HYdU z-|zdrbH3l{OwBrMDS_ghqV9L-rFNYego> zbS4oo3}Yx_yly2-%b@YN5qOtQ9v(MhWgsm{uTWX6+Bn z#B$@tKp?a)@RX6x(ae#tgpoGZTQI*Qej>G2IMV&%ui63IYnLyO$*<3`mG$y;)g zDQeM_X`9KodDyll$M~xyQ`tn;hSq!8xCw+rcSje3+rDd4$xcGFB1DTY%nfmMb&wry z*xK<~_~!BJ^G_=(*^Q(+MC(XmhPc#CjP&7!)jz(xv45vZdXaPq$R$v?A+F8sWcxPE zH2ET(yZ)!!r;-PdbPC8RBr!u=E?}gY`5#knYtJpHWEYYuFkFF`xgjp4jgdOS7gE0V zCrd0-8KPx)USr1D(~%EOe{}0gvdS`5AzDQeGtTM$%6W|K-+%fOYe4~q3-FT0j8o2M z4Xm!*SowvWt_jg5W@3i8wsf);n2b5;*O5NM{~0me?Esb7650fhENeBxOO~3D2EQN z7kAuRT>drxLhog_svQI680_KeM8ynBLB>T;iZVV43ZBy8mq01WxC}~J#!H|q$+!Ya zMaET7sxm$c%2^rLK&i>N4oY3d%b+aFxB*H-#!XO~4i?uGJHjs~Kgk!JKTMqXnEbs( z)#l*P9K7S4umE}i_B*%;dQrwD&`UBdgI<<#1@wxHtDsk9Tm!u(<2vYd88<+0$hZl5 z)4^X|I{s(7GJI&e&ip=m!oTuLd$*^D Jc*HUx{{dYeFPZ=V literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/wchar.h.81D3D4D24961BC6D.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/wchar.h.81D3D4D24961BC6D.idx new file mode 100644 index 0000000000000000000000000000000000000000..b9f192576604c9e105fb4c4d92f6a55e97a7dce6 GIT binary patch literal 15632 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/wctype.h.8D38237F4025A01B.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/wctype.h.8D38237F4025A01B.idx new file mode 100644 index 0000000000000000000000000000000000000000..d84b4da0ef495ee946537bb2c5259b4505a0410f GIT binary patch literal 3840 zcmZ`*4{Q`=7XLa9&@CS_?6lY!w#?GjrrmCL_OIRBEhrE=Sf`DWhC$0fH( zx8Hm7d%ySQ``-6{+nZal;_StQEZ>>iJ5;FVMM6kD{F&8C@uM18SfBRR@mR(f88)jy zV^6*k4BgOS`^JjH)$P^)vBJUD@pxv;s8;gB=Kp`XuUxPn^2ESvbGnOg&}F*N$KpFk zj{(nNy@VK<(Dm?@BfE;FLPpp1Y+pEMb+xchN?8M-F_YDoS&md&_uKkPZC#sE< z)Gx3Pn}(%uBk|1?$eh_Vz8Uv@vG~O$q+L@5#ePoc26@8*;$s#7CLjL&()suNxmgvO z5wKET$pI#AJa~HYg*mONun+;)$k%Xye@(o6_sGqqR!TIiAu~VIM0_)9NU#o4yfHrY zk@8b*Hzk)KAR^oFfa z_+7s$%tgQ&c?}2n%g^hUekKn5Mim+m&@cCMfaQ~)9Dh9frxGPiSVK}y0ss!H#X795 zM^0|{-S@X4N*WQMOFCEN(Wj#Q$(q})qhuZeI;Bny@ZH*w9le zg+^rPllwS^lZ$gd?mCmXT@|cJWPRv5c^wD%{P?+}cV4;i4oVhcij~B`tmsi7wYg_Ny9J}IWRhW+q>*e(vL)!{+ z`r{pguTyd{*3d4sbFX=5W;ylt(dlE9%tt_%)WrcFy5jOvuMRzNl9C1lM5QPPPy-DU z)8~6XRfPc7uua~^ZS|5hH*EV#TlNo1RAfj<3D`-TFpq4x$A8f)gVU-YBf~~{Bli|x zOr;+S-}dV-RpAl@^vb;);M3K{~o%3D=$t1E?F=JT@%`QZE;`|mh2I7_ahw3gyUCX}{|?X#UwusXyJ z&I*Yk&gv99IV&uNIjc+T;;e`m;VfO$IV&ngIV&c{I4ds3IV&M1I4db8IV&ZmIICOi z=B%`s=B$jE;jFBfb*-t$TXPC)Ubr4c2fxpF{tMc3S!N25wqbNiLXl$hpTa~fCT znyV5tp(cWEU(zH^`rXk=lYwNjXQgP$?~WUq3Z$AnE3Kq8_mf&D&I}|{c8haondrksue*jsE z?1A`KL3I}Em?|TP(hSWs;Bix$jbyvM=3|r2$%5()Z^u;IaU&R#TUw300m??X147+~ zSiW#nYj87_cF=fDfYQ=tkCN|D)MH_V81TCmKJ?1t2kMpa;88;U3vaSYl>h($ literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/weak_result_type.h.9EDE35462DD9E310.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/weak_result_type.h.9EDE35462DD9E310.idx new file mode 100644 index 0000000000000000000000000000000000000000..67c13a29d891883e0ce0e224e56d21e68c97c30f GIT binary patch literal 1830 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 literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/width_estimation_table.h.F4544BD901E48883.idx b/out/Robot_V2/GD32C103CB/Release/.cache/clangd/index/width_estimation_table.h.F4544BD901E48883.idx new file mode 100644 index 0000000000000000000000000000000000000000..7af5ebfa9fcdc87a1a6719645a87673dcc4065fc GIT binary patch literal 776 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 E2ak<>4FCWD literal 0 HcmV?d00001 diff --git a/out/Robot_V2/GD32C103CB/Release/Robot_V2.Release+GD32C103CB.cbuild.yml b/out/Robot_V2/GD32C103CB/Release/Robot_V2.Release+GD32C103CB.cbuild.yml new file mode 100644 index 0000000..1d8c97a --- /dev/null +++ b/out/Robot_V2/GD32C103CB/Release/Robot_V2.Release+GD32C103CB.cbuild.yml @@ -0,0 +1,354 @@ +build: + generated-by: csolution version 2.12.0+p41-gfeadfc5e + solution: ../../../../Robot_V2.csolution.yml + project: ../../../../Robot_V2/Robot_V2.cproject.yml + context: Robot_V2.Release+GD32C103CB + compiler: AC6 + device: GigaDevice::GD32C103CB + device-pack: GigaDevice::GD32C10x_DFP@1.0.1 + processor: + endian: little + fpu: sp + core: Cortex-M4 + packs: + - pack: ARM::CMSIS@4.5.0 + path: ${CMSIS_PACK_ROOT}/ARM/CMSIS/4.5.0 + - pack: GigaDevice::GD32C10x_DFP@1.0.1 + path: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1 + optimize: balanced + debug: off + misc: + ASM: + - -D__packed=packed + - -D__MICROLIB + - -gdwarf-5 + - -masm=auto + C: + - -D__packed=packed + - -fshort-enums + - -fshort-wchar + - -D__MICROLIB + - -Wno-register + - -gdwarf-5 + - -std=gnu11 + - -Wno-macro-redefined + - -Wno-pragma-pack + - -Wno-parentheses-equality + - -Wno-license-management + CPP: + - -fshort-enums + - -fshort-wchar + - -D__MICROLIB + - -Wno-register + - -gdwarf-5 + - -Wno-macro-redefined + - -Wno-pragma-pack + - -Wno-parentheses-equality + - -Wno-license-management + Link: + - --library_type=microlib + - --entry=Reset_Handler + - --info=summarysizes + - --summary_stderr + - --diag_suppress=L6314W + define: + - GD32C10x + - _RTE_ + define-asm: + - GD32C10x + - _RTE_ + add-path: + - ../../../../Robot_V2/RTE/_Release_GD32C103CB + - ${CMSIS_PACK_ROOT}/ARM/CMSIS/4.5.0/CMSIS/Include + - ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc + - ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include + - ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities + add-path-asm: + - ../../../../Robot_V2/RTE/_Release_GD32C103CB + - ${CMSIS_PACK_ROOT}/ARM/CMSIS/4.5.0/CMSIS/Include + - ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc + - ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include + - ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities + output-dirs: + intdir: ../../../../tmp + outdir: . + rtedir: ../../../../Robot_V2/RTE + output: + - type: elf + file: Robot_V2.axf + - type: hex + file: Robot_V2.hex + - type: map + file: Robot_V2.axf.map + components: + - component: ARM::CMSIS:CORE@4.3.0 + condition: Cortex-M Device + from-pack: ARM::CMSIS@4.5.0 + selected-by: ARM::CMSIS:CORE + files: + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS/4.5.0/CMSIS/Documentation/Core/html/index.html + category: doc + version: 4.3.0 + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS/4.5.0/CMSIS/Include + category: include + version: 4.3.0 + - component: GigaDevice::Device:EVAL:GD32C10x@1.0.0 + condition: GD32C10x STDPERIPHERALS EVAL + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:EVAL:GD32C10x + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities/gd32c10x_eval.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:BKP@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:BKP + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_bkp.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:CAN@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:CAN + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_can.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:CRC@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:CRC + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_crc.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:DBG@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:DBG + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_dbg.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:DMA@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:DMA + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_dma.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:EXTI@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:EXTI + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_exti.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:FMC@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:FMC + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_fmc.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:FWDGT@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:FWDGT + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_fwdgt.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:GPIO@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:GPIO + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_gpio.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:MISC@1.0.0 + condition: GD32C10x CMSIS + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:MISC + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_misc.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:PMU@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:PMU + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_pmu.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:RCU@1.0.0 + condition: GD32C10x STDPERIPHERALS MISC + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:RCU + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_rcu.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:USART@1.0.0 + condition: GD32C10x STDPERIPHERALS RCU + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_StdPeripherals:USART + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc/gd32c10x_usart.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c + category: source + attr: config + version: 1.0.0 + - component: GigaDevice::Device:GD32C10x_libopt@1.0.0 + condition: GD32C10x CMSIS + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:GD32C10x_libopt + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include/gd32c10x_libopt.h + category: header + version: 1.0.0 + - component: GigaDevice::Device:Startup@1.0.0 + condition: GD32C10x + from-pack: GigaDevice::GD32C10x_DFP@1.0.1 + selected-by: Device:Startup + files: + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include + category: include + version: 1.0.0 + - file: ${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include/gd32c10x.h + category: header + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.s + category: source + attr: config + version: 1.0.0 + - file: ../../../../Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c + category: source + attr: config + version: 1.0.0 + linker: + script: ../../../../Robot_V2/RTE/Device/GD32C103CB/ac6_linker_script.sct.src + regions: ../../../../Robot_V2/RTE/Device/GD32C103CB/regions_GD32C103CB.h + groups: + - group: Source Files + files: + - file: ../../../../Robot_V2/main.h + category: header + - file: ../../../../Robot_V2/main.cpp + category: sourceCpp + - group: sys + files: + - file: ../../../../Robot_V2/sys/systick.cpp + category: sourceCpp + - file: ../../../../Robot_V2/sys/systick.h + category: header + - file: ../../../../Robot_V2/sys/initial.cpp + category: sourceCpp + - file: ../../../../Robot_V2/sys/initial.h + category: header + - file: ../../../../Robot_V2/sys/flash.h + category: header + - file: ../../../../Robot_V2/sys/flash.cpp + category: sourceCpp + - file: ../../../../Robot_V2/sys/OTA.h + category: header + - file: ../../../../Robot_V2/sys/OTA.cpp + category: sourceCpp + - file: ../../../../Robot_V2/sys/config.h + category: header + - group: device + files: + - file: ../../../../Robot_V2/device/Can.cpp + category: sourceCpp + - file: ../../../../Robot_V2/device/Can.h + category: header + constructed-files: + - file: ../../../../Robot_V2/RTE/_Release_GD32C103CB/RTE_Components.h + category: header + licenses: + - license: + packs: + - pack: ARM::CMSIS@4.5.0 + components: + - component: ARM::CMSIS:CORE@4.3.0 + - license: + packs: + - pack: GigaDevice::GD32C10x_DFP@1.0.1 + components: + - component: GigaDevice::Device:EVAL:GD32C10x@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:BKP@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:CAN@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:CRC@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:DBG@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:DMA@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:EXTI@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:FMC@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:FWDGT@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:GPIO@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:MISC@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:PMU@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:RCU@1.0.0 + - component: GigaDevice::Device:GD32C10x_StdPeripherals:USART@1.0.0 + - component: GigaDevice::Device:GD32C10x_libopt@1.0.0 + - component: GigaDevice::Device:Startup@1.0.0 diff --git a/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf b/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf new file mode 100644 index 0000000000000000000000000000000000000000..202c2a590dc36737f71325273d15f1a81ecdefa9 GIT binary patch literal 183508 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 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) && defined(__ti__) +# define COMPILER_ID "TIClang" + # define COMPILER_VERSION_MAJOR DEC(__ti_major__) + # define COMPILER_VERSION_MINOR DEC(__ti_minor__) + # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) +# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__clang__) && defined(__ti__) +# if defined(__ARM_ARCH) +# define ARCHITECTURE_ID "Arm" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#define C_STD_99 199901L +#define C_STD_11 201112L +#define C_STD_17 201710L +#define C_STD_23 202311L + +#ifdef __STDC_VERSION__ +# define C_STD __STDC_VERSION__ +#endif + +#if !defined(__STDC__) && !defined(__clang__) +# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) +# define C_VERSION "90" +# else +# define C_VERSION +# endif +#elif C_STD > C_STD_17 +# define C_VERSION "23" +#elif C_STD > C_STD_11 +# define C_VERSION "17" +#elif C_STD > C_STD_99 +# define C_VERSION "11" +#elif C_STD >= C_STD_99 +# define C_VERSION "99" +#else +# define C_VERSION "90" +#endif +const char* info_language_standard_default = + "INFO" ":" "standard_default[" C_VERSION "]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/tmp/1/CMakeFiles/3.31.5/CompilerIdC/CMakeCCompilerId.o b/tmp/1/CMakeFiles/3.31.5/CompilerIdC/CMakeCCompilerId.o new file mode 100644 index 0000000000000000000000000000000000000000..1b479d762a376c5b1cf6326fad15d97b71371b94 GIT binary patch literal 2440 zcma)7L2MgU5S?8+X_}@cwF+rVgsiHH(n?(%V-g4wG^9ye)TF2?62dLk+Ph9oy}QJ@x|Pf`nAw+xrjzkED^2YN}@C2%?{E*{f2@-LSv3zK|QI{t)>dORn0tmM+W9 zvD1(5vv29$dgr4ao$-JCax=fxJ;OHH|GD+m3yaMt=(an4TwA)hw%l>UjVqbI+i{at z6bChh-MD#G+r7jMJva91p5JmeJ4tPBL1p><#1DJzDC}*=F05Z+LCB7J^>_W4iM4Vj z^G>EKRb`aRic@!}chuWq;>V%esg>s|RqU#uz#;I@V(}fUW63hk6@`A7ES8qyphU=H zmT;!hO3?5<&-Y66PNiD96h)oIk{bt29=}w3zV+O~+zTwfbQVOe?>5?Ey-d!EQ+`oK zno*qi{gXjeM)&Vo8Rq*CoDgZoJ`4G zKvJ?^(ay=oDx8NtV2{bqJMe@|tNK~IAYZ9?CCwj~2MQlg@jh8mILn{J-N+=vMJWJ2 zi?)i;W$2^CVkZ}u58@zX=?6s@ahwBFq8p?OPtv6IG&rhPCINxbxzQxyW!U#y$HLe4&Np@ z23kyu<0eVmZfqugZ+Nf167WZZ;_60a$t3XmZLgm;>;!H*%mVD+fP?M&#{Vnn_N5ai zj1u2Dv;M|OG~T?Hkq%h+olri%vAI!i#ctrs@|t_iU)GoKoaZ#f=_PUEHlW`RQmu{x z_nb3_C;iy+8fMa*^a;GzwwhCtXp@?2luk(Yz0Pd@s&SAXU=QcAlv65j z8BKIyAI4%o%)J4g8i>z&lf zei-BWP-$J~G@QB?GqwF5Y_sl9MqSp|bw7tqUUhxsEP(C-?leYyU)ehE1LPfNKnXc0 zd=9jAf42d2PmF8(9&EF}Uyc57#kc!=3j0mIJG<}|;Wzp28+`m8>GQq<+vNLZ7rvK< z`g>sTO&WX$hxoR3;o}~&zdsE=ekXN*{F<}BG8W}q0R6osW{k_m54D!ROaP~b8?aHT zYv#SFfsuD&i0=|!^sJGm-`foG%yaw=a-NOzJcXstaS?fXR!DOl;5TUY#k>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) && defined(__ti__) +# define COMPILER_ID "TIClang" + # define COMPILER_VERSION_MAJOR DEC(__ti_major__) + # define COMPILER_VERSION_MINOR DEC(__ti_minor__) + # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) +# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__clang__) && defined(__ti__) +# if defined(__ARM_ARCH) +# define ARCHITECTURE_ID "Arm" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#define CXX_STD_98 199711L +#define CXX_STD_11 201103L +#define CXX_STD_14 201402L +#define CXX_STD_17 201703L +#define CXX_STD_20 202002L +#define CXX_STD_23 202302L + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) +# if _MSVC_LANG > CXX_STD_17 +# define CXX_STD _MSVC_LANG +# elif _MSVC_LANG == CXX_STD_17 && defined(__cpp_aggregate_paren_init) +# define CXX_STD CXX_STD_20 +# elif _MSVC_LANG > CXX_STD_14 && __cplusplus > CXX_STD_17 +# define CXX_STD CXX_STD_20 +# elif _MSVC_LANG > CXX_STD_14 +# define CXX_STD CXX_STD_17 +# elif defined(__INTEL_CXX11_MODE__) && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# elif defined(__INTEL_CXX11_MODE__) +# define CXX_STD CXX_STD_11 +# else +# define CXX_STD CXX_STD_98 +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# if _MSVC_LANG > __cplusplus +# define CXX_STD _MSVC_LANG +# else +# define CXX_STD __cplusplus +# endif +#elif defined(__NVCOMPILER) +# if __cplusplus == CXX_STD_17 && defined(__cpp_aggregate_paren_init) +# define CXX_STD CXX_STD_20 +# else +# define CXX_STD __cplusplus +# endif +#elif defined(__INTEL_COMPILER) || defined(__PGI) +# if __cplusplus == CXX_STD_11 && defined(__cpp_namespace_attributes) +# define CXX_STD CXX_STD_17 +# elif __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# else +# define CXX_STD __cplusplus +# endif +#elif (defined(__IBMCPP__) || defined(__ibmxl__)) && defined(__linux__) +# if __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# else +# define CXX_STD __cplusplus +# endif +#elif __cplusplus == 1 && defined(__GXX_EXPERIMENTAL_CXX0X__) +# define CXX_STD CXX_STD_11 +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > CXX_STD_23 + "26" +#elif CXX_STD > CXX_STD_20 + "23" +#elif CXX_STD > CXX_STD_17 + "20" +#elif CXX_STD > CXX_STD_14 + "17" +#elif CXX_STD > CXX_STD_11 + "14" +#elif CXX_STD >= CXX_STD_11 + "11" +#else + "98" +#endif +"]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} diff --git a/tmp/1/CMakeFiles/3.31.5/CompilerIdCXX/CMakeCXXCompilerId.o b/tmp/1/CMakeFiles/3.31.5/CompilerIdCXX/CMakeCXXCompilerId.o new file mode 100644 index 0000000000000000000000000000000000000000..93c0162c21c2ba34d542723a7293e8d0325774f6 GIT binary patch literal 2452 zcma)7L2nyH6n?vLTsNdv5{lB63av_2rAS?D*CY@GG`LAxk)#z0QdGB?wRfGEdUvh$ zh6YgyfhrDMD4be}Ge=a3KhOh54jedu1QJqv;Lr<*0|%t?eY-o!;L2)WJNw@E-kWdU zjNeQ?UR+r+3`3L{G9!CP9S^xR9r3>?|(C>A+UQ}Ord$rbeg3T+bzt?r* zb{P5f3_DS4OWFO{30x;~8?M)Ow!3k?JeOs8JFyq^J7Lh@ja^u~!UZ9RFlI1#PHPzd zTfgyv7ja^}l*+7~>Pj^;N~LTKRk51U=mfDB1x~kKnypkZtAYh<*j5;LK|F6QM7~AH zU0T?ZwdglJ*Y#X$)~-~o^)T$tTTbM+xO=PqQv38=`DL!Qa1KQ}p404z@jA>}#V)-f zqpdKCy`58jRq_Y+trldzIhHTVq%oB{Xg(v;#v$Xdam0MqIBGnXKV}>^P8gGzjN=t! zKa9LFfy1AG^$?PioEX=O;|GB0Q}Q*8H;cL_jeMaJpmXx)Lk-FZ{<*pX_}dIupbeRl zLe{t^6a4f*_Pzl;E%%Z<5!N$hj>sojMh<$?EC`#LlHxIWE#pt|xGbjOEMCOjNF|L= zND=Tw9Lp4R3HliEn8*oY=vm^YMCOU1SBNqBA~E#4#JGP=V(5T)TqGif{*)Mp`x!A0 z8S;XeYBT?M&7L)JEJvw1&&F>bi;X7q(OqIkUe|V=*s(i7J8ZCpww+C{@#sYunmTx! zIz70)w$}`Ha1j$pLgw6uZQ$7si|>krCdo0%WhXnL~?JZ zz)WG#@qNsKFDe^P$K z7|i2cP@?jFfrGdEOcuC|B6_e7W3V3P6)?WX0AG)NN%;|jepR#Ly9=Mr_X84`M?U_! zQG8nultj>F4tG4z~2UvAnZ0?2m&>g^?FjN^HH zsFnPq12`4jgpJaBdfp`kw7j-qo(KDR8bh7Sd&pCJCCzn! M-=SHT>Oao=56*2;qW}N^ literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/CMakeConfigureLog.yaml b/tmp/1/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 0000000..b6ab8fe --- /dev/null +++ b/tmp/1/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,328 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineSystem.cmake:200 (message)" + - "CMakeLists.txt:25 (project)" + message: | + The target system is: Generic - - + The host system is: Windows - 10.0.26220 - AMD64 + - + kind: "message-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:25 (project)" + message: | + Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. + Compiler: c:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/bin/armclang.exe + Build flags: --target=arm-arm-none-eabi;-mcpu=Cortex-M4;-mfpu=fpv4-sp-d16;-mfloat-abi=hard + Id flags: -c;--target=arm-arm-none-eabi + + The output was: + 0 + + + Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "CMakeCXXCompilerId.o" + + The CXX compiler identification is ARMClang, found in: + G:/Robot_v2/BOOT/tmp/1/CMakeFiles/3.31.5/CompilerIdCXX/CMakeCXXCompilerId.o + + - + kind: "message-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:25 (project)" + message: | + Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. + Compiler: c:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/bin/armclang.exe + Build flags: --target=arm-arm-none-eabi;-mcpu=Cortex-M4;-mfpu=fpv4-sp-d16;-mfloat-abi=hard + Id flags: -c;--target=arm-arm-none-eabi + + The output was: + 0 + + + Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "CMakeCCompilerId.o" + + The C compiler identification is ARMClang, found in: + G:/Robot_v2/BOOT/tmp/1/CMakeFiles/3.31.5/CompilerIdC/CMakeCCompilerId.o + + - + kind: "message-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:1250 (message)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineASMCompiler.cmake:135 (CMAKE_DETERMINE_COMPILER_ID_VENDOR)" + - "CMakeLists.txt:25 (project)" + message: | + Checking whether the ASM compiler is GNU using "--version" did not match "(GNU assembler)|(GCC)|(Free Software Foundation)": + Product: Keil MDK Community (non-commercial free of charge) + Component: Arm Compiler for Embedded 6.24 + Tool: armclang [5f371800] + + Target: unspecified-arm-none-none + - + kind: "message-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:1250 (message)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineASMCompiler.cmake:135 (CMAKE_DETERMINE_COMPILER_ID_VENDOR)" + - "CMakeLists.txt:25 (project)" + message: | + Checking whether the ASM compiler is AppleClang using "--version" did not match "(Apple (clang|LLVM) version)": + Product: Keil MDK Community (non-commercial free of charge) + Component: Arm Compiler for Embedded 6.24 + Tool: armclang [5f371800] + + Target: unspecified-arm-none-none + - + kind: "message-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:1250 (message)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineASMCompiler.cmake:135 (CMAKE_DETERMINE_COMPILER_ID_VENDOR)" + - "CMakeLists.txt:25 (project)" + message: | + Checking whether the ASM compiler is Clang using "--version" did not match "(clang version)": + Product: Keil MDK Community (non-commercial free of charge) + Component: Arm Compiler for Embedded 6.24 + Tool: armclang [5f371800] + + Target: unspecified-arm-none-none + - + kind: "message-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake:1237 (message)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineASMCompiler.cmake:135 (CMAKE_DETERMINE_COMPILER_ID_VENDOR)" + - "CMakeLists.txt:25 (project)" + message: | + Checking whether the ASM compiler is ARMClang using "--version" matched "armclang": + Product: Keil MDK Community (non-commercial free of charge) + Component: Arm Compiler for Embedded 6.24 + Tool: armclang [5f371800] + + Target: unspecified-arm-none-none + - + kind: "try_compile-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:74 (try_compile)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:25 (project)" + checks: + - "Detecting CXX compiler ABI info" + directories: + source: "G:/Robot_v2/BOOT/tmp/1/CMakeFiles/CMakeScratch/TryCompile-gm8kpl" + binary: "G:/Robot_v2/BOOT/tmp/1/CMakeFiles/CMakeScratch/TryCompile-gm8kpl" + cmakeVariables: + CMAKE_CXX_COMPILER_TARGET: "arm-arm-none-eabi" + CMAKE_CXX_FLAGS: "--target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_CXX_SCAN_FOR_MODULES: "OFF" + CMAKE_C_COMPILER_TARGET: "arm-arm-none-eabi" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "C:/Users/cbb/.vscode/extensions/arm.cmsis-csolution-1.64.1-win32-x64/tools/cmsis-toolbox/etc/CMakeASM" + buildResult: + variable: "CMAKE_CXX_ABI_COMPILED" + cached: true + stdout: | + Change Dir: 'G:/Robot_v2/BOOT/tmp/1/CMakeFiles/CMakeScratch/TryCompile-gm8kpl' + + Run Build Command(s): C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.ninja.build.ninja/1.12.1/ninja.exe -v cmTC_bee6c + [1/2] c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -v -MD -MT CMakeFiles/cmTC_bee6c.dir/CMakeCXXCompilerABI.o -MF CMakeFiles\\cmTC_bee6c.dir\\CMakeCXXCompilerABI.o.d -o CMakeFiles/cmTC_bee6c.dir/CMakeCXXCompilerABI.o -c C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp + Product: Keil MDK Community (non-commercial free of charge) + Component: Arm Compiler for Embedded 6.24 + Tool: armclang [5f371800] + + Target: arm-arm-none-eabi + (in-process) + "C:\\\\Users\\\\cbb\\\\.vcpkg\\\\artifacts\\\\2139c4c6\\\\compilers.arm.armclang\\\\6.24.0\\\\bin\\\\armclang.exe" -cc1 -triple thumbv7em-arm-none-eabihf -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name CMakeCXXCompilerABI.cpp -Werror=return-type -mrelocation-model static -mframe-pointer=none -menable-no-infs -menable-no-nans -fmath-errno -fno-signed-zeros -fdenormal-fp-math=preserve-sign,preserve-sign -ffp-contract=on -fno-rounding-math -ffinite-math-only -mconstructor-aliases -target-cpu cortex-m4 -target-feature -vfp2 -target-feature +vfp2sp -target-feature -vfp3 -target-feature -vfp3d16 -target-feature +vfp3d16sp -target-feature -vfp3sp -target-feature +fp16 -target-feature -vfp4 -target-feature -vfp4d16 -target-feature +vfp4d16sp -target-feature -vfp4sp -target-feature -fp-armv8 -target-feature -fp-armv8d16 -target-feature -fp-armv8d16sp -target-feature -fp-armv8sp -target-feature -fullfp16 -target-feature -fp64 -target-feature -d32 -target-feature -neon -target-feature -sha2 -target-feature -aes -target-feature -fp16fml -target-abi aapcs -mfloat-abi hard -debugger-tuning=gdb -fforce-dwarf-frame "-fdebug-compilation-dir=G:\\\\Robot_v2\\\\BOOT\\\\tmp\\\\1\\\\CMakeFiles\\\\CMakeScratch\\\\TryCompile-gm8kpl" -v -ffunction-sections -fdata-sections "-fcoverage-compilation-dir=G:\\\\Robot_v2\\\\BOOT\\\\tmp\\\\1\\\\CMakeFiles\\\\CMakeScratch\\\\TryCompile-gm8kpl" -resource-dir "C:\\\\Users\\\\cbb\\\\.vcpkg\\\\artifacts\\\\2139c4c6\\\\compilers.arm.armclang\\\\6.24.0\\\\lib\\\\clang\\\\20" -dependency-file "CMakeFiles\\\\cmTC_bee6c.dir\\\\CMakeCXXCompilerABI.o.d" -MT CMakeFiles/cmTC_bee6c.dir/CMakeCXXCompilerABI.o -sys-header-deps -D__ARMCOMPILER_LIBCXX=1 -internal-isystem "C:\\\\Users\\\\cbb\\\\.vcpkg\\\\artifacts\\\\2139c4c6\\\\compilers.arm.armclang\\\\6.24.0\\\\bin\\\\..\\\\include\\\\libcxx" -internal-isystem "C:\\\\Users\\\\cbb\\\\.vcpkg\\\\artifacts\\\\2139c4c6\\\\compilers.arm.armclang\\\\6.24.0\\\\bin\\\\..\\\\include" -nobuiltininc -fdeprecated-macro -ferror-limit 19 -fvisibility=hidden -fno-signed-char -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcxx-exceptions -fexceptions -fsuppress-licensing -aggressive-jump-threading -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o CMakeFiles/cmTC_bee6c.dir/CMakeCXXCompilerABI.o -x c++ C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp + Arm Compiler for Embedded 6.24 -cc1 default target aarch64-arm-none-eabi\x0d + #include "..." search starts here:\x0d + #include <...> search starts here:\x0d + C:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\..\\include\\libcxx\x0d + C:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\..\\include\x0d + End of search list.\x0d + [2/2] C:\\WINDOWS\\system32\\cmd.exe /C "cd . && c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armar.exe --create -cr libcmTC_bee6c.a CMakeFiles/cmTC_bee6c.dir/CMakeCXXCompilerABI.o && cd ." + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:182 (message)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:25 (project)" + message: | + Parsed CXX implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/bin/../include/libcxx] + add: [C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/bin/../include] + end of search list found + collapse include dir [C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/bin/../include/libcxx] ==> [C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx] + collapse include dir [C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/bin/../include] ==> [C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include] + implicit include dirs: [C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx;C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include] + + + - + kind: "message-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:218 (message)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:25 (project)" + message: | + Parsed CXX implicit link information: + link line regex: [^( *|.*[/\\])(armlink\\.exe|;ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(armlink\\.exe|;ld[0-9]*(\\.[a-z]+)?))("|,| |$)] + ignore line: [Change Dir: 'G:/Robot_v2/BOOT/tmp/1/CMakeFiles/CMakeScratch/TryCompile-gm8kpl'] + ignore line: [] + ignore line: [Run Build Command(s): C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.ninja.build.ninja/1.12.1/ninja.exe -v cmTC_bee6c] + ignore line: [[1/2] c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -v -MD -MT CMakeFiles/cmTC_bee6c.dir/CMakeCXXCompilerABI.o -MF CMakeFiles\\cmTC_bee6c.dir\\CMakeCXXCompilerABI.o.d -o CMakeFiles/cmTC_bee6c.dir/CMakeCXXCompilerABI.o -c C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Product: Keil MDK Community (non-commercial free of charge)] + ignore line: [Component: Arm Compiler for Embedded 6.24] + ignore line: [Tool: armclang [5f371800]] + ignore line: [] + ignore line: [Target: arm-arm-none-eabi] + ignore line: [ (in-process)] + ignore line: [ "C:\\\\Users\\\\cbb\\\\.vcpkg\\\\artifacts\\\\2139c4c6\\\\compilers.arm.armclang\\\\6.24.0\\\\bin\\\\armclang.exe" -cc1 -triple thumbv7em-arm-none-eabihf -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name CMakeCXXCompilerABI.cpp -Werror=return-type -mrelocation-model static -mframe-pointer=none -menable-no-infs -menable-no-nans -fmath-errno -fno-signed-zeros -fdenormal-fp-math=preserve-sign preserve-sign -ffp-contract=on -fno-rounding-math -ffinite-math-only -mconstructor-aliases -target-cpu cortex-m4 -target-feature -vfp2 -target-feature +vfp2sp -target-feature -vfp3 -target-feature -vfp3d16 -target-feature +vfp3d16sp -target-feature -vfp3sp -target-feature +fp16 -target-feature -vfp4 -target-feature -vfp4d16 -target-feature +vfp4d16sp -target-feature -vfp4sp -target-feature -fp-armv8 -target-feature -fp-armv8d16 -target-feature -fp-armv8d16sp -target-feature -fp-armv8sp -target-feature -fullfp16 -target-feature -fp64 -target-feature -d32 -target-feature -neon -target-feature -sha2 -target-feature -aes -target-feature -fp16fml -target-abi aapcs -mfloat-abi hard -debugger-tuning=gdb -fforce-dwarf-frame "-fdebug-compilation-dir=G:\\\\Robot_v2\\\\BOOT\\\\tmp\\\\1\\\\CMakeFiles\\\\CMakeScratch\\\\TryCompile-gm8kpl" -v -ffunction-sections -fdata-sections "-fcoverage-compilation-dir=G:\\\\Robot_v2\\\\BOOT\\\\tmp\\\\1\\\\CMakeFiles\\\\CMakeScratch\\\\TryCompile-gm8kpl" -resource-dir "C:\\\\Users\\\\cbb\\\\.vcpkg\\\\artifacts\\\\2139c4c6\\\\compilers.arm.armclang\\\\6.24.0\\\\lib\\\\clang\\\\20" -dependency-file "CMakeFiles\\\\cmTC_bee6c.dir\\\\CMakeCXXCompilerABI.o.d" -MT CMakeFiles/cmTC_bee6c.dir/CMakeCXXCompilerABI.o -sys-header-deps -D__ARMCOMPILER_LIBCXX=1 -internal-isystem "C:\\\\Users\\\\cbb\\\\.vcpkg\\\\artifacts\\\\2139c4c6\\\\compilers.arm.armclang\\\\6.24.0\\\\bin\\\\..\\\\include\\\\libcxx" -internal-isystem "C:\\\\Users\\\\cbb\\\\.vcpkg\\\\artifacts\\\\2139c4c6\\\\compilers.arm.armclang\\\\6.24.0\\\\bin\\\\..\\\\include" -nobuiltininc -fdeprecated-macro -ferror-limit 19 -fvisibility=hidden -fno-signed-char -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcxx-exceptions -fexceptions -fsuppress-licensing -aggressive-jump-threading -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o CMakeFiles/cmTC_bee6c.dir/CMakeCXXCompilerABI.o -x c++ C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Arm Compiler for Embedded 6.24 -cc1 default target aarch64-arm-none-eabi\x0d] + ignore line: [#include "..." search starts here:\x0d] + ignore line: [#include <...> search starts here:\x0d] + ignore line: [ C:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\..\\include\\libcxx\x0d] + ignore line: [ C:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\..\\include\x0d] + ignore line: [End of search list.\x0d] + ignore line: [[2/2] C:\\WINDOWS\\system32\\cmd.exe /C "cd . && c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armar.exe --create -cr libcmTC_bee6c.a CMakeFiles/cmTC_bee6c.dir/CMakeCXXCompilerABI.o && cd ."] + ignore line: [] + ignore line: [] + implicit libs: [] + implicit objs: [] + implicit dirs: [] + implicit fwks: [] + + + - + kind: "try_compile-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Internal/FeatureTesting.cmake:34 (try_compile)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang.cmake:315 (_record_compiler_features)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerSupport.cmake:70 (cmake_record_cxx_compile_features)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake:83 (CMAKE_DETERMINE_COMPILER_SUPPORT)" + - "CMakeLists.txt:25 (project)" + checks: + - "Detecting CXX compile features" + directories: + source: "G:/Robot_v2/BOOT/tmp/1/CMakeFiles/CMakeScratch/TryCompile-4p17s0" + binary: "G:/Robot_v2/BOOT/tmp/1/CMakeFiles/CMakeScratch/TryCompile-4p17s0" + cmakeVariables: + CMAKE_CXX_COMPILER_TARGET: "arm-arm-none-eabi" + CMAKE_CXX_FLAGS: "--target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_C_COMPILER_TARGET: "arm-arm-none-eabi" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "C:/Users/cbb/.vscode/extensions/arm.cmsis-csolution-1.64.1-win32-x64/tools/cmsis-toolbox/etc/CMakeASM" + buildResult: + variable: "CMAKE_CXX_FEATURE_TEST" + cached: true + stdout: | + Change Dir: 'G:/Robot_v2/BOOT/tmp/1/CMakeFiles/CMakeScratch/TryCompile-4p17s0' + + Run Build Command(s): C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.ninja.build.ninja/1.12.1/ninja.exe -v cmTC_aa3f5 + [1/2] c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -MD -MT CMakeFiles/cmTC_aa3f5.dir/feature_tests.o -MF CMakeFiles\\cmTC_aa3f5.dir\\feature_tests.o.d -o CMakeFiles/cmTC_aa3f5.dir/feature_tests.o -c G:/Robot_v2/BOOT/tmp/1/CMakeFiles/CMakeScratch/TryCompile-4p17s0/feature_tests.cxx + [2/2] C:\\WINDOWS\\system32\\cmd.exe /C "cd . && c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armar.exe --create -cr libcmTC_aa3f5.a CMakeFiles/cmTC_aa3f5.dir/feature_tests.o && cd ." + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:74 (try_compile)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:25 (project)" + checks: + - "Detecting C compiler ABI info" + directories: + source: "G:/Robot_v2/BOOT/tmp/1/CMakeFiles/CMakeScratch/TryCompile-scu6p9" + binary: "G:/Robot_v2/BOOT/tmp/1/CMakeFiles/CMakeScratch/TryCompile-scu6p9" + cmakeVariables: + CMAKE_CXX_COMPILER_TARGET: "arm-arm-none-eabi" + CMAKE_C_COMPILER_TARGET: "arm-arm-none-eabi" + CMAKE_C_FLAGS: "--target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "C:/Users/cbb/.vscode/extensions/arm.cmsis-csolution-1.64.1-win32-x64/tools/cmsis-toolbox/etc/CMakeASM" + buildResult: + variable: "CMAKE_C_ABI_COMPILED" + cached: true + stdout: | + Change Dir: 'G:/Robot_v2/BOOT/tmp/1/CMakeFiles/CMakeScratch/TryCompile-scu6p9' + + Run Build Command(s): C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.ninja.build.ninja/1.12.1/ninja.exe -v cmTC_76306 + [1/2] c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -v -MD -MT CMakeFiles/cmTC_76306.dir/CMakeCCompilerABI.o -MF CMakeFiles\\cmTC_76306.dir\\CMakeCCompilerABI.o.d -o CMakeFiles/cmTC_76306.dir/CMakeCCompilerABI.o -c C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCCompilerABI.c + Product: Keil MDK Community (non-commercial free of charge) + Component: Arm Compiler for Embedded 6.24 + Tool: armclang [5f371800] + + Target: arm-arm-none-eabi + (in-process) + "C:\\\\Users\\\\cbb\\\\.vcpkg\\\\artifacts\\\\2139c4c6\\\\compilers.arm.armclang\\\\6.24.0\\\\bin\\\\armclang.exe" -cc1 -triple thumbv7em-arm-none-eabihf -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name CMakeCCompilerABI.c -mrelocation-model static -mframe-pointer=none -menable-no-infs -menable-no-nans -fmath-errno -fno-signed-zeros -fdenormal-fp-math=preserve-sign,preserve-sign -ffp-contract=on -fno-rounding-math -ffinite-math-only -mconstructor-aliases -target-cpu cortex-m4 -target-feature -vfp2 -target-feature +vfp2sp -target-feature -vfp3 -target-feature -vfp3d16 -target-feature +vfp3d16sp -target-feature -vfp3sp -target-feature +fp16 -target-feature -vfp4 -target-feature -vfp4d16 -target-feature +vfp4d16sp -target-feature -vfp4sp -target-feature -fp-armv8 -target-feature -fp-armv8d16 -target-feature -fp-armv8d16sp -target-feature -fp-armv8sp -target-feature -fullfp16 -target-feature -fp64 -target-feature -d32 -target-feature -neon -target-feature -sha2 -target-feature -aes -target-feature -fp16fml -target-abi aapcs -mfloat-abi hard -debugger-tuning=gdb -fforce-dwarf-frame "-fdebug-compilation-dir=G:\\\\Robot_v2\\\\BOOT\\\\tmp\\\\1\\\\CMakeFiles\\\\CMakeScratch\\\\TryCompile-scu6p9" -v -ffunction-sections -fdata-sections "-fcoverage-compilation-dir=G:\\\\Robot_v2\\\\BOOT\\\\tmp\\\\1\\\\CMakeFiles\\\\CMakeScratch\\\\TryCompile-scu6p9" -resource-dir "C:\\\\Users\\\\cbb\\\\.vcpkg\\\\artifacts\\\\2139c4c6\\\\compilers.arm.armclang\\\\6.24.0\\\\lib\\\\clang\\\\20" -dependency-file "CMakeFiles\\\\cmTC_76306.dir\\\\CMakeCCompilerABI.o.d" -MT CMakeFiles/cmTC_76306.dir/CMakeCCompilerABI.o -sys-header-deps -internal-isystem "C:\\\\Users\\\\cbb\\\\.vcpkg\\\\artifacts\\\\2139c4c6\\\\compilers.arm.armclang\\\\6.24.0\\\\bin\\\\..\\\\include" -nobuiltininc -ferror-limit 19 -fvisibility=hidden -fno-signed-char -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fsuppress-licensing -aggressive-jump-threading -o CMakeFiles/cmTC_76306.dir/CMakeCCompilerABI.o -x c C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCCompilerABI.c\x0d + Arm Compiler for Embedded 6.24 -cc1 default target aarch64-arm-none-eabi\x0d + #include "..." search starts here:\x0d + #include <...> search starts here:\x0d + C:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\..\\include\x0d + End of search list.\x0d + [2/2] C:\\WINDOWS\\system32\\cmd.exe /C "cd . && c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armar.exe --create -cr libcmTC_76306.a CMakeFiles/cmTC_76306.dir/CMakeCCompilerABI.o && cd ." + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:182 (message)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:25 (project)" + message: | + Parsed C implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/bin/../include] + end of search list found + collapse include dir [C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/bin/../include] ==> [C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include] + implicit include dirs: [C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include] + + + - + kind: "message-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake:218 (message)" + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:25 (project)" + message: | + Parsed C implicit link information: + link line regex: [^( *|.*[/\\])(armlink\\.exe|;ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(armlink\\.exe|;ld[0-9]*(\\.[a-z]+)?))("|,| |$)] + ignore line: [Change Dir: 'G:/Robot_v2/BOOT/tmp/1/CMakeFiles/CMakeScratch/TryCompile-scu6p9'] + ignore line: [] + ignore line: [Run Build Command(s): C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.ninja.build.ninja/1.12.1/ninja.exe -v cmTC_76306] + ignore line: [[1/2] c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -v -MD -MT CMakeFiles/cmTC_76306.dir/CMakeCCompilerABI.o -MF CMakeFiles\\cmTC_76306.dir\\CMakeCCompilerABI.o.d -o CMakeFiles/cmTC_76306.dir/CMakeCCompilerABI.o -c C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCCompilerABI.c] + ignore line: [Product: Keil MDK Community (non-commercial free of charge)] + ignore line: [Component: Arm Compiler for Embedded 6.24] + ignore line: [Tool: armclang [5f371800]] + ignore line: [] + ignore line: [Target: arm-arm-none-eabi] + ignore line: [ (in-process)] + ignore line: [ "C:\\\\Users\\\\cbb\\\\.vcpkg\\\\artifacts\\\\2139c4c6\\\\compilers.arm.armclang\\\\6.24.0\\\\bin\\\\armclang.exe" -cc1 -triple thumbv7em-arm-none-eabihf -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name CMakeCCompilerABI.c -mrelocation-model static -mframe-pointer=none -menable-no-infs -menable-no-nans -fmath-errno -fno-signed-zeros -fdenormal-fp-math=preserve-sign preserve-sign -ffp-contract=on -fno-rounding-math -ffinite-math-only -mconstructor-aliases -target-cpu cortex-m4 -target-feature -vfp2 -target-feature +vfp2sp -target-feature -vfp3 -target-feature -vfp3d16 -target-feature +vfp3d16sp -target-feature -vfp3sp -target-feature +fp16 -target-feature -vfp4 -target-feature -vfp4d16 -target-feature +vfp4d16sp -target-feature -vfp4sp -target-feature -fp-armv8 -target-feature -fp-armv8d16 -target-feature -fp-armv8d16sp -target-feature -fp-armv8sp -target-feature -fullfp16 -target-feature -fp64 -target-feature -d32 -target-feature -neon -target-feature -sha2 -target-feature -aes -target-feature -fp16fml -target-abi aapcs -mfloat-abi hard -debugger-tuning=gdb -fforce-dwarf-frame "-fdebug-compilation-dir=G:\\\\Robot_v2\\\\BOOT\\\\tmp\\\\1\\\\CMakeFiles\\\\CMakeScratch\\\\TryCompile-scu6p9" -v -ffunction-sections -fdata-sections "-fcoverage-compilation-dir=G:\\\\Robot_v2\\\\BOOT\\\\tmp\\\\1\\\\CMakeFiles\\\\CMakeScratch\\\\TryCompile-scu6p9" -resource-dir "C:\\\\Users\\\\cbb\\\\.vcpkg\\\\artifacts\\\\2139c4c6\\\\compilers.arm.armclang\\\\6.24.0\\\\lib\\\\clang\\\\20" -dependency-file "CMakeFiles\\\\cmTC_76306.dir\\\\CMakeCCompilerABI.o.d" -MT CMakeFiles/cmTC_76306.dir/CMakeCCompilerABI.o -sys-header-deps -internal-isystem "C:\\\\Users\\\\cbb\\\\.vcpkg\\\\artifacts\\\\2139c4c6\\\\compilers.arm.armclang\\\\6.24.0\\\\bin\\\\..\\\\include" -nobuiltininc -ferror-limit 19 -fvisibility=hidden -fno-signed-char -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fsuppress-licensing -aggressive-jump-threading -o CMakeFiles/cmTC_76306.dir/CMakeCCompilerABI.o -x c C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCCompilerABI.c\x0d] + ignore line: [Arm Compiler for Embedded 6.24 -cc1 default target aarch64-arm-none-eabi\x0d] + ignore line: [#include "..." search starts here:\x0d] + ignore line: [#include <...> search starts here:\x0d] + ignore line: [ C:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\..\\include\x0d] + ignore line: [End of search list.\x0d] + ignore line: [[2/2] C:\\WINDOWS\\system32\\cmd.exe /C "cd . && c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armar.exe --create -cr libcmTC_76306.a CMakeFiles/cmTC_76306.dir/CMakeCCompilerABI.o && cd ."] + ignore line: [] + ignore line: [] + implicit libs: [] + implicit objs: [] + implicit dirs: [] + implicit fwks: [] + + +... diff --git a/tmp/1/CMakeFiles/GigaDevice_Device_EVAL_GD32C10x_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.o b/tmp/1/CMakeFiles/GigaDevice_Device_EVAL_GD32C10x_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.o new file mode 100644 index 0000000000000000000000000000000000000000..1b219156f616ec7532b9960598fac4def215b7c5 GIT binary patch literal 14528 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 literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.o b/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.o new file mode 100644 index 0000000000000000000000000000000000000000..b0b7a988b03b71370bb076f0535782199200a888 GIT binary patch literal 12840 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 literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.o b/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.o new file mode 100644 index 0000000000000000000000000000000000000000..639576251909c950b0f219c890542cdb9b7a6a8e GIT binary patch literal 33724 zcmb__3t&{$wf5fUF`49qWC#HQgk%yz2q8=!1Vo`ac@jcMLI{G2O+p?d8j_F<&w_@4 z3W!z#l_~|>a$DP?r4;W)#qv;FTG4_i4s zxz5AhizD*gg;)Rj)m3-l%jaEQqz;=JNmu9dtA47bM85OEdDg3@MvskTWxbu%8>^YS zsJiSj%WzhAzWmk4?C@6~I}6JaNK5C-WtSn*h0-=>7k6*;F*kDBH@1a!9{m$%$5F#s zSSn>jS(elH>uP6p5%hMx9I)N?ywd2ssD&r?DvDCAHvZ;|t84OlxvEyz7Unj-6`~!^ zZLI1!)*g1s&Z(!^1oeWZekOC7yX|H5u6IL{PNA-%EZVX%Y~@(((LUZ?(6eD^&KE5I z&6Qh2j$Dk?S}w&d8tYBXpR5=3+@Fj%=|?WM=^pRwOinB*OqKS4)rM_$i;W1s;!rJF|PcaVlLBcVZQG*%_{ zb}FT-9$Ix`6`$Zd+?l0RD~;Tf*y~l$BPKU7vDXdGZE|Uey)Gr@unSz+YPFH4j_Gx( zF^8R#)ase5QFnY|uLfxi<-9SW7vrKjr}0-ILr>B<_HYg&b#!UO$=t?67g%IXVa#Ek zfC!!>F8qQPe*ToRuh=H>Rf)SZ2rTj{-5slODF*tLjvk3nAO$}#A7 zKHhnlXDN&9u^A#_;}YjVh|JHSb*YSu<0Nqr7qo~!onqZQ;pOxDyok^YiVn?-eKe11 zXddNn3TrIu<>9%o5?1|sQ}~zK=ReMSz2=ootvz};pWr$<=B3vg)t+$m_3C|nj_$mT zc|8$%Wj(J(@K0XV#?+~WgSuaDoRCMQ?3&W`qc?0Eg&JBO|0F`Ity{mTq>)X?@6oBR zd%~6CYGu=`CWbian)5KMXeBjl4Np-{9dAm>J6_{#boX-Rtlnqq*Usnf-}h`^L}!6Pm{0xk ztlkfUmRp$F_hF5Rm)BH;Rfjd^_As}z+KPQYU4^XCd$}_U^}QH9Y+WwaNtg35`obGl z-GA-nkahp7vW+>tooM^Xz72zOE_W_H0zBEbU8c7qy+@|^4DRO-VrJD#u+=luW<4|A zzh3Y2>-On|osC}ZJpD`~;~_X7VUE+PoA2v=nYop2?q=PJTmSsX8kH~XQ!y{OQUVNH zJ@Tg|h|sGV?+$CM)QeX?+Bd6vZeMtHVqR7r&AL2{IQ3-eU2laXociix{qtkK4;Li% z9#%dq-@H0BHR-T3adUgzZCQCE=bY*@+<%VwMc>AR$jq|Kzwm`Nrj9sO4r?yzMObr@ zH(OSRrX?1pzx8NeN%fyHSd65%gWLEV=EMkw2IT_chYWnA|E=@eip5$p!jklMxCzT7D!nTe&_1p!nq;>DP z5U!lrzm@0qJg&U8KO)unR_?|0P+LF=9}KJp#ccPsi5T%C#El^hB_v`P3Qc>>u?q0HOYdzcsj8gGM8D7kkLj_t|n!2q6K&H zw9Ay?LPiOtTt&(xD1y6q+CCrlJ>RvDeZq(Qwr}5@p}m?uv>mCVBMz7KoYUu3m-Q^1 zH?*3{^j<}uhq426CWdwO%_>LgXw{cnKL0GVtFNS7zw5J*ai_|_vx&8*NlNdH)E|TV z!8vb>^Te>B9mGuxpJ!skW57dm-WF$+`iMg*VdkiaZN5$2Qcw7y3(iQ#SwtB76Q9+Qs-EzAzBT4#Y_F<}JV{>hoji4HHUGALLDTtTQK$A|e2?uO|6Q%nRX9lO6~`C4 z3%&5@U;=+?Wc9S}MTJ9&Lruk2Q$bBdahh`9POauoYFT{iUNNG#e6CH5|E*a^yNRr6 zllfyN|IfH+hw0e|r(B5)SN8D4bqjKO-F#iSvTxtZc{!!-!hCnbvX)w3Q)`R6uBoGD zQFDErd(kqVC}^))QtxiBudQ!dUSCI}-yGZHf6B)zr(6k&xW0uarBO@3{&gu`DU@pae)XE&>v(=a z^NBs2TRCRmZ4PxU;JxwuxR+tS6OcuovMH4IXU2l?FO`cU^TPV|XVJyi zl_M9q@@TH>_rV;yUCQr;ar$h`Os=X(9~o?rJ)ANr`fHhZz-p?8wne8;0=2 zC%p>xVcsUPj(yaZ{DRZVQZc_0Sqjc>mu!jYC+b9n8rSzH+!Y<;&hSpfsMN7SmSRXv z#keX0HGv)heFt;^bPBXYVeEd;6QKV9{TZ|wYwNc`dqHo4{s7W7#zup7>x>-+odh*I z7~2Ti0s1%4e$X4B^Pn$46G9l93u*-&1Dyh00vTAe$AG4QDna*v9s}(KodorOu7Z+r zEvW`Q1v&_N1Jnajas9~#)q>{ZI`jbO3D7RkXQ01>3|yN=fyRI)fu@0Gf$jj^4f+P? zLC{m6AA?>1odINiDcr|Lz# zTnfz5qC9+#=E+8_IlHy&+rivkZ8FvEd=BFpZH3FVqAwJw7#TlOAoe3gWX*vsO^Ys4 zGInc4e^wy+XXPT5Uqm_CL1C=!x_VXJt;NO->0pC5bgqdVtc@DHCT=it6L)KINovQv zyWyqUanEioElcfKyIae;IY{!V9$DuI< zqg>ks?`7XRw6Hj8Ufh1p=V2eLu@nfTW#g2cD`d3XaxmrXvVxG9qouVVS}l}Gu@adT zTAGJfXr3%&R_xYti@+3>2u4VRBTC^Z;OC<8RCBJVsf8c3umQ)YZNgasnTm`a zYl+deD=*Tr`l51B6%tg*0iR)cFFzpg06&6N1KV+u0PDeo(&{)Mtx1#DJ#sA@YFlpX5#k-&oTef1y`YfW<^ z9&yQ*^_^T<%iv|FLbzS|g}?)-0iN+_^HLR_WR9tnLK$-8hoQw`l#hsrd>T^Gni4_n ziAX|+qfkVV$CWLl3>yp;6jBAH)Er9(C5f+82KHBgk54JP|mlfe~nj<#U6U>F~! zv8Snu_o3OEC@CgKi_4*MCx2QjsStl!^ySn1IUc!;J@ezvPWH@CaJpqAseevE z6{>p?1A{MwD~AY9D`&`VuhL1q)2Tje_RhoVPP2D*!l>Ch!?gRAhp7?!m4j5}2(Fvp z-o?cd+-2noaT`?h@;q%TdKvIE`j`gkaE&<;1ZS8TxiAsakuq{IR9LP#BfyuVZ(I~N zWQL7?KEBb(`BX35j$c~WyMYw`mV0z~oCVU$fCp^Q}j{Hi>2$GdvjgsrA)3n0D zJID(Mh7#kkveY3Qh|`PkcwrP!)9TFS?1OhZp=lu!K}PfP3^&0&sL#@$q2u4yi* z54;%9#FKo2lpiMfM0u@ikn-S5p|6y9l26paZY6JTT|{1iOCl~Q8S^MPjgsaLC!3Pl zQ;<8Qh>}GMY2i)8w$~CTE;)s`l(fip+nk>?Qke1hRWP0$Fc~8SBC)t<7Vgi5^q@$gEW)o0)gp&* ztCDMwaE3HYh4kRbLK;6r29Jtzcw<(NFdY~-;+7GN4bhpBXl9Uu(M9auAzggLIzEcA zp&l+u^l>Am3*lk9P&GWDDid{LNChQEWHW-1fnv)Ng$6&uvdLC5wVrIn2FbyUDL2~h zlTLDRf~9JLjrVI2tovFmWGg{PQKW@bqHKymt#&8i*X|e{QL5Y&~m)-~_L-ev}J>06rZ&DpUtdPVl)X|LNx3M_zTO9{+kPxJN5TYsXhu{(C&B#$w zmG3aE7%BY@oI;qRj9@-x@S7FQ$(;^oNa$kl%G;{eLHQ(@$&?T$52J`FYCAVVw?rFZ zole78=QP5*oW`K_P9tK2(}=v!X}Iop8iOBj8c`da#*hb{M)bo@W9T=X#;`}7#_+99 zBW9b^7_r@HjC{;#jC$N@#D2?ZjDFH-#69IS;&(a?_qUx!!c%QVVyD9x)8#Od);o-` z8yrUReGX&X{SG5#lfxLl*IeF_jrNawe5jXnk&{%gF0=8~L4HqoA{s8-<-HozaQnqE3|0?1VsZCnRQdLZqaV zWM<>+GD>lF8)Z0qjdGk(Fo!@fDhROl-W;MySB5IaTxL{qW1eE%irt#oE~jG5XT}0< z+@=_}tHvFgu~0YebQoU`v08M@sA5JnS|qwnYvV@EgNm_evtrb4QjEHdic!BoF&fq@ z#^Nr;Xk4clO|XC0Zq2xRmu577TQipI)Qpy=G^6!N&1l=E8A~73jP~`K(XmxCe4906 zS(j!ke^fJ8Y|@OC>ojB4Bbu>#qh@>q5mHbc5^*|@w+DNh3w7yF&=>oema4nzwQ9pmDfG6_J6{ceHnTWVrSQcWtM!uKfmYEIcMs zCpmXLE>fqs;(9`)-r}lj#~xJEe#TT|D?G&jqJjC^Fk@`>WbnOzU zcX+64H{BxB&hju8ax*;nmVPvZqW?6%WzY-c(J`EUtm#T*6z&PQzAL1!z@zVp)ZgL9 z9+CPA*8feUuEOT`MGB+Z^#hT@V`0}bBBdzdt{;k&szkVcB>d167aKGVi$g>PPA_V| z=8-Yjw7B+)(j&0;tVkV2`=1l3W3c;^Cn2o80=oxBQX5`HyPg-R*Lb+=-$itO!CkKZ z5UF4C!LEZMb(}}JUJxGqibu0SyUFe|IQ>j}iAOrMf9I}!Ld!we{i&$&0&MITsTaA< z2A!fB@8a~TcAiI;Yro^Jmqd*ZP~(tDb)&}1qQ>vx)z3xhLqz+qNd19_xsKd~s~>K> z7_Ort?~izGLW7cX(WB2pjo*-WF9Skk;~&@9x6sKn`n_E)m}33t6F?0p8yzYwWE z!}2dh?Z3eCagpkUe2+H$Dncm7^^DIM2>A?jI0M0JRERe329nn&RRqWql7MmacF zUM6d!LKLnXrWA|SqecBcC~2I8Mmx_UMMZI;DjrQ@GsRduwkb-w$c;Ck#3Pc-?bt6o z`$&0!$A#-0Z~zq(2EC_jG9?mEDznC%Qf9pmSI7KTne{O+>9jJNBFG}f!tz_%L}jcy z#BAapm9so9!odN;gUAqn(&eON5qUWH2T0LKjE@TA%6pt9Trx$+Nf$)reXfraVM)(8|yqIP*LIOG#HmD~Fs#O4x`t&@_b{iXV!mWr^JQVd1!cAw-!w40oGR_haSj z%6MLW79b+$Hq89<%3WsuT{1u1Bjo?2tWe^H58?pPT=$?vk>8_iQbxy|#hKJZ_u#&G z1WSF}v2567Bw0v1qH@O37OKT)1iMvpj)vk)JFHo92qe>zr};_ktwwNLS5R(SWE zkc%G~!Igc|aFi+XnR3(=IckcGg2*eTNbC?yTeR`d%6lSXbnIEAM0`d^BF4%I8U=AK zu6$_LjUUXFZjqdTUyI5IqE>?YH12DNP$oe4@62T45U%`Qp}D|fvEd{$e^JWR8>lPC zoJC5QNkWA(mFgypeNU+nneoZdT$v*znS1DJQS}0DnTU37HtUT;z0IN?a}Rq}G~%N2 ztU5a7EY75P^!Rs?BE@m3LphR#@Fac$oZ6?7Q}JnN%1=yt6NhnSzv+bMwDL2NiccTT zm7j`o<{my$IB`jd)Pxg}nlO>^E;2+X50Amm0kkk3d&rnf+K|U&<=~t)sTgM#JL0q` zzO3YEVjO0lMM~(Hyd5bKyD1ok1tK&42F%?&A<1G#dPUXGl{IG7sb`U*s_{2M>K>69 ze-rB7D{|TJQ8XR+ot5Oov^&X(=?%h(Seg_3&M%aG!r}a$0 zUzH=K&@E??5<=ehlw+olJI)m9Q$8@`@qv(t%Zb5|Fuicco3rGCaQxyYLrJEf_s(GMe5Mi>abT;b@)g%CPp1`nyVwd>L{lg z>rh8K)i|dbAEvrpYQiuzu|Y*!R>Bgk33TLx)`Ok|{RBjBoV^A*3wj^)8R$!p6CMr& zC4sU)UQj9MPEa%G8=#G#?VzVY&w&nseg!%M`VjPI(3ca9dnFYn=$32AT<)4_XXb0eS%R1nA#D{|@>k=pE2`P#-810maX0HW8Ey zx((C_S^?SwdIIzu=og^VpdL^!=rV|7+zkee28{tkf$Bg@LD+b+Z-RD#_JUpn z9S5BOeFVA)!jDZB0g45AKweM9JCO07wCS_H$mS49RU3b^cLuMp!1+FK^o@qAW#yB)`1ex z9iSG_a?m}X4WP}St)M4C-v#{;v=4LwbQ*LH^daaxs29`+`U*4x%TNj^2Q(kl3|b1h zAM{PoqoD7Beg^sl=#QXY&=nB9vlRh~1|@@T1m%NfgXV*3K^>rnK;H$u06GOa52E+G zMu4V(DnU)4wV=m9KL#BJodo?6)Ceb-1>Fj&1+{?Ig0_R61swss26_YZF6a}` zCD0&T6kMR8pajqqP!6aNR05h0Y5=VOb%Hj59s+F#Jqh{|=mpR#pf^D8fi8jiKzXf8 z+FD!cTYNXUbJ~}Fp!E^75vEze5NEi0>(+^t#Z6_o|)`Sr`2YU|Ty) z&r0T1`ja_@R_2WInPoY4CfCmRE09>ey`;cma`FRyBJKA_^o`$B#KWH!B{x|0MLhbK zO|{B|fm^HHgm);`hxiZN?bmsgQz-=$Jpx&cSCp3)%U$sx$3ObThLFmz$Q7n(k=Kdu&{rbtzJc8p^eKegI9qNmiOc4Tinc23~1`%K+pNJ z{JrPTK`q&X{;b)Rg=RzSIi?%-9Mfrkj=xd19N92ijtsLcrz}XbzsWWk*;W1=I9)2@ z;Liz!#-HU6k3UC*h&BX13SWx3e~Q zSX+awn%D(pPC)}`ztmPk?`8Yy+p9W!?aOL?tf8ryxaOt~UsYq%;>La%&8;geeo0No z-TeeahD|^?)UphF!gi}pe@?_rnp@Q5>#(HiTg28)?B+~ou644ms)77w^($-Js_K_h zi0jY__+MAwT(hdG7W>lrmW~>F6`i%A?3zqpU9H)3lrX(ultjoo>dn|R)KyWA3`|o8 z`lPj^wvp9$G?`WFYJ4^5pWvPs*+JcZZC(}=d4Ya0x38jImQCNvs*Z-HItHwl*w8>+ zgOAR%*A)mq7`$z0u31dDs2#zqtAd}Rk1-ZHT9!2Vs+QDubkr=ys5HB}U1|pk?LcU! zvyaX~J0WSOTvMBTg+Evsd0*e&-r8POk8Wn|wacp7>f4*z8Yw{a=pOTXfNKkcIMp`2 z5+kyzsig@mT-8=D8X!xEH?_A}O=x0uixyjkT zf_X8=Xx;=Qm$V{Oh`PwNja=(P3HUrllMtEsEE<=aCl#=KnAOowc>t}V1zwT7lxw=h)z(Nc``sK2Rn|E1`#4}J zt`*2%*5F2h=1 zSL%TD z%_ZA#TT;{1yr^}hHPie-mHme++~O+oht$)`*1{SwM%v6gF*@iXNS_v2>yng2?((Wy z{L(QOU{c`^mFX*m*S`k&%fwo0=Hn`x1?|2}_B8I}(A{3^NVF0`NVl5@I^txeg#*d_ zPxDAuGRR|9{J*$ElT!q3HT5-%ni#(s$-FF2#*Iv`#Z8g=l@pg_GsmD1+*u4&!W)opLqi<-nuu_^Hx>=D z4r)tog!5s(LFt!Ik2yvD0}7)DMb<&jaC0ME599NJ`_v8i_{1sz((~D3DtqACGJ5_h z>J3n4vy~g+Hs2Dm)b2on?gd&0?pgjrp8CZuPh;jE@xk)M$AYW_A6mihXlm2_>V4V< zJvSo8uCEe;cAlR7+3R1n;$^lQwfoD{V>)|%il?2Yr*L-O8^q&Ya=&uAuWgqPE)V8| z<4NPiUZ3Wcoo@)@shn=S(mZ_)Y0mlIaMKomhSPHzB;s+?9=FLsb)fB_zk*aAuSDu` zAu~y^>xq=F$H$+!;qJfHr$nAx+DXqw_`Y+Q-<)yf`DM*}iXQmo=>2maMWzxgNl#DI zJAS<~&imTZ;jisTN}lz1XW36E^S&<&KXCk@>%{l8?9tyJeE!9sBU4-aVE3uVcOCid zx|gPps5v@nD?M;glQO@0=D^2c#mRI2E#_I@j2)W7bUY|Q$s``8mYl(xllaiepZPjI z;Bkg!>iQ&yy7%5L-Rn@_W4rX}rTR^cIycnUn8%^MdyhvCb>M?V?ojvLi;O+oqfb*; zcu2zNG6imOsFzr=p1WATr9{7Zy`G(^do%RxLXz=#^yzAy5RaAOxeoPX)}R+;Q2E!o z6s4bAFLADq2+KaCkA6qj9UgtON7sw>(G9w8rAIj4)txBO9ftZVD2h>Ey4RzJr|aWO z^f9wC(=sN`T0cRb?`Y7+I7;+8ChB7{F6j%>0Q!P@-914cldXrQgH2CQgP4cJcGnLi z$k1K{Al0FMgl30BG}Td_ovnwfEqJBSq3*n=0l8`qFDCBsdv+1mYjTg6+!rRd864DH zff`6|fYNZ2L0Xh_DWc@7wNxS)^{chJ^wAD=BT5qPLoWb|^-!GACB=F|gFXX^T?oVb zcu7zFY^}#ow<#VOPIRr+`#)9Cd2d27;0vW#AEA1S|9N=TV{40bw?jRq6fd4wqAyI- z-6ga1+X(dA>h+ZD$@*w@DSCa99zI+5Ou%`QKCVf3Ig0fH$722NS$gSAeFV5va7~Ub zeH^@ZOwxyD=qaTlnDLJ9>7z3p>Jw|b^aO|cslx58G}~Hiwo=``_M+*3gMv$dZ5ThG za(!ypcl78CJ?fA?B2|wn)u+wYhfdI)v-J^;`r!L!>5UWh(3yHZd~iBc#BM}}KDcR? z-sI07?8v5m`Oh^T9fSE<^$c;p1?L2VjzRiG9iIL>F%I?DqC_xAzo<`isE1KPgK`*# zT=ZQS+3SPG^;!5C7dFSC?q1WS<00*bYO$`D>ILe0^h})kH>FG0OC0KxYZ~-%4)t@j zfebykhGM2(RL?lnhu2{G?bLAk=o=oA`KBhEx$q4rf?Caa9A;<9@YwqQXByW>mmJa) z&YI!1hL3+JjmCt+;8u^CnodKn8zX$Zo^ZcDYJ)xq%^Ky=2Nmn18uUR{dbs0rJq;y8 z$a;%4>PGoT-3PGBtsv-u{7>xp))4(GGNZ#b=)*Jh=oyXcHw0>05}R~d7BVO(msdOY z1`UFz0;L}YN>Rb8z8?Y;@53uoNzs<8fx_3WDYUA+hmuiYYG{M#+eGwjB$`a<%yy`c zt}e!yG}Kod=#-aN71QYYqmJ}bt341@Kc@7zkVf}h!tym9OVUKgOG4K)jJPW3n&wzU zZQ2Y~7)4hh1#TTUCzvjbJS$zSM?3KJUk}f4sGq^sAcy*r0~1Cq^q^+39`7)FY8+BRacS&-7q(MjmJQ$PU#HwQT0BV#tz)#d~N!Pyy@oaF@fU(8;U`HBS;n4>d z>oE?s0YUh$RZh41q@x&#Gx|`6`aO7Fq(-9T%~f5Hhdz&9^3TU3$EVZb@7( zrf#BG6BES*PHdoSK|DI=e^vIwnJ=m}F8M8Cc62FaTzu7mD?`28=39j&$8ULk}<2vq~URtS1-ilOZ`C$;s$J zng;{p^~*z1KWT~{UIHB{j=RulU3vrTbYTn+!x+8+ zVZsK%HIvSRCh4OW>v6O6L23Hf3_T+q#U4F|M*ajbZn4s74z(Iuf4tJ8z8&HLcHvT{ zUI=N>N6x~v3O(RJWFA6*Fb_Wu!PX@GpJ*J7hQsDq)XhLrn8a*>$w3&p55fSh^*bju^-O9gOV~ zbQT*-*uw0&=)`_ctw;EOxT0A7PjJH>w3>PJ;bPHlNu=BXzj^%LRTCgsZ>qE?)=Mb^;93pm}W;)XGu0!ox?$MLfjd0x{ zqt-0K#ofAU?12utXzGqxmVu%E!UHJO2grYg^3xTE*&~7LWjFHqVoOgT{|e>%udh*l z{m+JREZH=D-&#hOC-rAx9!qPoU+OJL=@@s^$^%fP3nmUfD6qpdL!h3)4j5OCOj<#@u+NySCt=ZB2W?lw za4n^)CZGL}3+dI;0 z7cENnEU#_5dvQAMRyH-%)cQKovoa^$SesotC7o{k(+epb9=v%%B;Gzrr#DhO8R<K1`6wEJg2QKAGgHQOIqy=jyCZ!@)8d-`FR!eu$}cQW&-7$? zGOgEI3Y*%Otf* z>CXx(&l2&Yx9!a%%Ss4T+2kPk$wI!!FE!bpqJ+w(2FXtiDxVfqK27MO7v;@knw1c! zvRi`WZwV^T4JywKDlZ5sF9<3x3Mvn@j09CSE2w-{Q2o-N^3tI4IYH%fg32p{%IQvH z;85B8pmO>MFL0>r_Mr0H1BFPb?9QO_JA=xrgUYLe%4>tlYlF%c2l0(T{M|u(a}eJW z#J2|Vz94>i5WkYmKn@L`WKfi%vJ~6;NB23$iu;mC;2@s<2o=fG{pctqgvHsGFe={+ zqH?+i9;F!Uza>xiy`z)})*$))z$j%fdtLITzG$`?a#VkZD34*4@P~N12OFh~VioWw zz{jx(c=SO$-II<|64=kAJl)fd!dKpR2es#btZ$a5u)BiV_kpZ$>Put4m+~f`&T3$c z?9rT$QnFY&E&;^T$d6JcvkQ`^d)!gVREFFCqMYVvlroL|7kD}-Y=e~s_8Z&vgyOeX z%F{jXDCHJbgL2YOD{YjL%kYA~;OU-slv2RnlJ>lUFJk9pxl{17Sca@mVTe*n*;oC_ z=ddBNy{3F6i|iNQ`RuT)PrgMdw~LqE$sf9>9i`mKw#)Jc!B?{`>5o}nEBp?_v`s{L zTm?=zQc;KE8HVXfGmemsR2iF8a)x;7bV6J}?*fW%Xo-)YTws*MXo+MLM=F9vSC+W1 z3znrKn1ZjCynOhODlb2&ZkbO`;z%7UF$FIkBbknA`W!F=NFOWUZ@r2mHC5t7iSlxh znko5766G?VdV}O|lqi?$)UQciF3+hslFyS^V16C06k*IDODV>S)P$w@euc0EFSrxV zq>og9Go(D0TZE1&KH4xDe<(#cO;&Z*e&rRiRUGLDzR7MWr=+fuSldt zf#Rh}q>pQe50^*}I*F%sm@r0StVFj&8sAi&A~8*3hQw@%bR8hM=@PvX^CcEZERk3) zu~Om!i3=rGORSUFD3Lw{B0FsoeG*qnTqChl;s%KuC2o=Uh{Wv@cSzhR@o9;BBt9c? zuf%;44@f*H@sPwL5?_^gT;d6dCncVi_>RPL61ydSB=Nk&PbKzByezR#;uVPuYbwPF zPv8VPC5B6MNsN{lBQaK@TVj$#`iP43rAegg2=Unxr%IeI(JL`uVv)oWiRBV2B`%P- zP-3;jI*E-EniHiB8er0*iV)dy756BVWQmUU_ZH#co?fD#J;hP5c|ePLhKux39)Z%BgDSZ zM~HpnNV|ko-=+D*Ghh?#2-i${fqK5#KYDngcv_v)GjAJd?ouBFZ)#>#>wp{ zqw#T?5aR-O`o(y_b80aT=;LPU|8EhZ-~WRU{rwIh`uTH0H~wZCez#J;PK6EX&rO6W z_$Zc;8fO5}ZxadAF)sAGQ)A{y!o_+>a3=-taZTm`b?on7Ur%p9>-7}`y|CTi2Wey=nSnIQ*Tb*p&NZ*k_cu0h@c?$LSEj9Z zaIYKJYu-G+o@dv*Uwu76^A&1(v-)}xmQ(Um1KYdU*Q?PkUkkqG_3VFE!HR?JyMXIe z33_YzA2q=L(smMFUtWffUgVH&Z&^&A-1zzC)>_Has5XZ^x=?p42mXAPc~R$skmM(MnXh)3<+*Q;7(b-o-urksEA7_fAJsnqXF1Dn?r za#N+*3iDegPkSr9r0yB;L-y-MC(s$zw*=Sy^5%Lf@IL)DUxf_t&CKa+j9`r{?ux0QcYnpJWMV@tFdm)ZUoGDHB zx9JGBfo+C3aOu8AE?JflSaP`Ji+}sbOPM%!-fsS;ScNqCLvq++i2W4owsj#*$3hV0 zTRvO*ux06|Z!h$b9O=VW#;=e50FJ#Kbtr2GS%;<110nof6Xul#2W>biR7qWHOOvv4fO3t zo^@FIZbgQ@z4SYo>eGFCIxM*gr0sUk+3aE)?6>c)>x$*u=K4q<@|O_FxV+B*xHN3 zlA|$Xw|m)UcLXF!j_Q?Sg4^v@LLYus_zz28zA5LoTP^L5l9HC37jkyHS8R6ibHi_! z{I=VrKfpAQUHSt}kn`L1NxL-v>9FkHjC{LY?GCejv>wp29IL%!k+9ocgL?E^%{nZ7 z__N^s?CzCz6QrOeHyjDO-Ef=TM97jH#rfHwIMee|Dz^?x-w%W07j4s*1Yt|xx}g4` z-*IGzWazN;tqsx_Ytxr3<*43ssBe!;_jUaH5%TTrO|t1rvFTf9>ht%T20zFS$tY_I=%6b^o%e*29n=eIju+D#Ky19o3WzP%mUHoN$F>$m%!*$%&5 zng;{fJr&empR|jg$l|ctOMg?(Zg;xPF5N4#+It5&!`>fjppTwaScj!=jw$DFZ!>~S zan6#0mK^=jJGXnB018BKS@pc{BbG51)B0nh7L<#MUXz9%|F^JS^Bhq63 zy5BNVXfjWhzMZC=-)^(Ci(4$>u;g|iVQ5f-9pG(?WN}lcDrrR=asq$EW7jv2_fgVyHDCJlCqZE&x6L_cAMRqQXlzy#%zbb ze-BE1Qk~x}-T$=PJtF011=*$hrS|sjwAn4O*`;?yAnLb!9Qv@t_z$ZcZd1q0^+|R9_R=4q#Q%P~-BNCj6twL2K*(-)ugxy) z4K2Ha&^WtYy6;H-Scj!gHRb$v=??;uoV5m8a#w@a@dGxy^B`~8r9U=lx7!DO1MPG0 zk#xWIYPb(dcIQh6ExUh1!rtCPHoFUKc3%kUU;6mkC3O*4`hF7Bzp>ITwr%3Dxwn-j{yoT1tgXW;Bec>~HhdJGd0EPBWrnm% zGIac4H2&}^#qHbJP2Xpxj789J`ug1W~{inC?+ z>p}f?rOtd-Ms{04mffL9+wDH>4P3KOB+95f7Zohsl>bLBodbteX234~Z?j5Bj@AL| zu;l396|mA&=FP#gN5slH$Ui#XK*AosY)m5BcTziiAd;hTe>6zno;>_P;sM6h%R%~* x8qH^hq;I)RUnv?v{#pG|gN2@+^;riciH2d2+uUZ;=i;6M@~EsFME+4X{yz}1na%(J literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.o b/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.o new file mode 100644 index 0000000000000000000000000000000000000000..0c78a42d159bc5c39d3f8485c77aedd9110d94a7 GIT binary patch literal 5800 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 literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.o b/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.o new file mode 100644 index 0000000000000000000000000000000000000000..f7ae5add04b2b9401c58c9032004b76e5cd21741 GIT binary patch literal 6076 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 IsuzI%7a<5bSpWb4 literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.o b/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.o new file mode 100644 index 0000000000000000000000000000000000000000..a40e92a05e83dc152f7f26d642ef48768dc43044 GIT binary patch literal 17092 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 j;>q{21DnuurUX=K}o~8^qXS literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.o b/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.o new file mode 100644 index 0000000000000000000000000000000000000000..db109cbe9072903f4cf6b351b25e0ef7d6247841 GIT binary patch literal 41656 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 literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.o b/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.o new file mode 100644 index 0000000000000000000000000000000000000000..0c034e526f9654e6d6e2a0d67c9eac056820bed5 GIT binary patch literal 7268 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 literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.o b/tmp/1/CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.o new file mode 100644 index 0000000000000000000000000000000000000000..52d295f2ea0124bc83175170fd8ddc200ce64f0c GIT binary patch literal 15224 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 literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.o b/tmp/1/CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.o new file mode 100644 index 0000000000000000000000000000000000000000..34589fe5b351a06603a0df0e772e0bf979cc15d8 GIT binary patch literal 7200 zcmeHMU2Ggz6+Sa-dndoxA*K0i*rXFkNxVO{lemVKu6M`wVsEnDT{{j|_Nx11 zcGo6BQ3;S1LjnyFq7mvt9|8&xp$PF1i9{*_sd>mlA1KO0BzOQ3P$U|G)Jjx@?@aEj zXYQu_2p)LgS~K7M&N=toGxwgmGxz!n#>9xCDC8D}cGC)jbhD%B9B^PaZKMynrvJzP z;s~f4i8|m<-9)4@V%*mz@p9>6>@<}iLEnrYLf?#!V(j26fI6~M86ApbYlT|VTjw(4Syq+cC%)(fd+mZ%QvttHXW1r}=T0{ArJ3hj3Kni-Mbe)2JqZi(`@p3Om-+#*hVby0nFFsd28n(y_!|Om z33S#1?EWnHI|A2pjzPXbpp&cMPObu-oCG>K2|Oa~jtOiC{G7nE0$&z*QQ#$k*9HDe z;4K5ILlPC;5Ou124}4EiwrtrF=-Rv;<+1JCQQHz&RyM0@ zS63H$o`VsO1-Ic0QF@eswoBWp^(Y&ZZj3yB6ax-{66H9q`zQfq_sq;5QckVku#SQh zRDx)ZmM1@Fg|)6;)eSwXdq$ z*HrDSs-07{udCWORPAMi&2hK|p|v>I`KesJvj#kzg*C3S24y+-!bkM!~+dUkKL|ehdQiK^Ci4p<^TC?%s-4LL4 zu9|M3-vDyME&TieT1Aft(O!plQnzb@*aDcr)q-c7_5tef=@qj02ccE&-9P5zopcbK z+j8kv@7>?$(f1(UC%jx$X&ZAfE)Cg!K$t5E0MW&VBeH6H#7IFG8Ue+e8vhb`U!@A2?CaQ@PD?We%;dTjAg zaJ(K{`~WzAD)aMl|GU8PiRKjM-4cHfhF<+0iN7WB*Cl>g;uj?TqQuJ*&q;hp;yWa+ zN&HXvDDcMrD~Vs1_(h4Im3Up^M*itHjqx{I6IX-sk&+#BWOc#}Yp;@utKJ66dw;?eA%c^LK$) zzeVEw`|8#I5i7^b-<0@|B>qi_pO$z{;>RS8ZIQ1(eD?eJZi(}I&l?}Y_i;LWI60a( zQ`u+T&(O)-@JP-)JU*Fem-@`&*?gbh1d>>rB3>4s5ITKE&G&o4sM&hLL7(GzI%8zLl3XU`3l!WJCb+NTY(C*_&NN=er=d@nm^2f9 zyNRi!*CK^omuXD3i+r)cD%x%Zk<$7WziVnDz&gOvhvHB>5unDtwW66~2hP3SVSig)bN=S{dR?YOligJYIzyZp)P% zZc8DD+fvBkwiLc_6Y+yFGe7Ok2}hKj_O%zX_NK;R|JcJ2OGx$?HQW8MO!kK?ll;Y# z$VOi%^43<`0=Mmzy*uiM?7Z8y>Frzk_Wi&2n81IMP_)a|Nwa9r)a?q+Fvv73R;fw| zx@lKZ)e=iefRa@<8w(&)_Dr)@ZMo zfRWaxMlz*-9V;st+s`D2TRN_13_U(H(bqRQF%X-a=!@yoLld!>o`WO@Ne+^fVHh#} zh16kvGH2wb_UkX?^5co|T*EY%~U=70Fu zwNP*BACH}xwaYfr$y_;#+nX4QOg8L#BQjGcMB)nzNvml^CTcTQIbzl0IO`?LwhARu zqNsMZMgS)(!SpJ1byttFQGHa|tZY@bDcd`CD!LLty>kFd<)?H*F|`xUAa_6vlU*d&ek4q zC+S$@$;1b#iJ1S@@?9A6UK860r{Gw&wSVQ~ zb4v(zd=}vrw|WW!ufIER!r$ubkB=PO_!dxi+n`EU5h%yv7FSn>!0RswC;WWukL9jE z9IHF~b%0YQJa%l$c6=GQ9N%J~^RNp+<`%c#K?vMB>zc6Rb9%S9Rh}nre9H*#3S`_T zpD(!a@z}d_iz*GGQ3%i6jXIyHu^rcSTyCzQO4D#uMBi?4`^CS1eDPhw!P=Os^yqjU b!XFQ}Q#vrY2VDYmn=pF&&BE@753&0@1_E>` literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.o b/tmp/1/CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.o new file mode 100644 index 0000000000000000000000000000000000000000..5dcad2e15d7e5b21a4dfa8d57190e550cc316124 GIT binary patch literal 8240 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 E|8iibEdT%j literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o b/tmp/1/CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o new file mode 100644 index 0000000000000000000000000000000000000000..056573ba471d0fb86340e6589aa35e8343285ee5 GIT binary patch literal 9180 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 literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o b/tmp/1/CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o new file mode 100644 index 0000000000000000000000000000000000000000..f6fb3193c0e727d85529b730986b58955b50d65a GIT binary patch literal 80276 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 literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o b/tmp/1/CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o new file mode 100644 index 0000000000000000000000000000000000000000..26f6e748fb580e84ca30b28c2989f1a289697f14 GIT binary patch literal 22908 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 literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/flash.o b/tmp/1/CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/flash.o new file mode 100644 index 0000000000000000000000000000000000000000..1accc664c41ee9bfbcc6ebb1eb4770c596856375 GIT binary patch literal 55868 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

    EP|7zkfO$f6K4vJD}NL(J~{IVFull8;yvvcz&) z60$5r+^sDOSrsB@BIv6_)`jRZIq2&`Hh@FWH->Bm$3fp5vK1VHzAa=2I1c)bkhj4h z=(|Gpg5#j?4cQM4K|c_32pk9fP{oC8V<9KNA?TlmoC3!|KNa#hI0XH4 z$XRe4^s^!7!6E1uLN0^jpkEHT3JyWP7IGaN2mN|TeW;v?pwACo7^=_Ypf3!45*&iQ zD0B%p4*HVNW#AC><)JIVanM(Wt_FvouMJ%fj)T5FbR#$feN*Tba2)h4pfmevYdjkD9S7YbTruj3#TG{Zqh zBNW8G(QyI_0)E2L1O-uUa-4;N(4KW%go1cpbX?G$|BhHku{{gv`UHNns)LplMQY$lPz56e2SBnkEH` z%w48Q(IRuFX;R3@+-{l_H!`=fN!@C_V}k?p=w`Sr~?v2Z!aBo}%g?rWj~ zZ`9U1H#@~xMPR>bV3TDmRkh!WTnx8pt!Tc_tC;!&O;=R(Q14i&wacapNF7+jwQH0kLSMg;v)PI z-;3f$a6I?@C~knGxeqb=Q6NYS>QYtQPj(#aF{X_TK{PMKX-n103U8w?ysap_xmsK= zS%vWS8lqQmc!y-kDug#HU$5fu=8ugb7d96I~T#L z;`nm#su1DDh?ri*Fg1lcG1;;@? zDvpCgkdKSg;5f*%Tai@=@>%Rl^ePVWRm4YDA;>?9234=(AUCLsR9S@}FQTnSmHC39 ztw$AtyjtB1j)S~e-3kst-m2~f$3fn$?gd9dZl%TTMs&49*icZA+gPDIX;?iK#8Msa zg{4@|fw~*(d3}QcVuNvleC}SO$TrPsw6@V 8oB=9mev75Ds?S_pmf}Y&hTEL=@ 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 I@h#x{58S0|PXGV_ literal 0 HcmV?d00001 diff --git a/tmp/1/CMakeFiles/rules.ninja b/tmp/1/CMakeFiles/rules.ninja new file mode 100644 index 0000000..455ce67 --- /dev/null +++ b/tmp/1/CMakeFiles/rules.ninja @@ -0,0 +1,244 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Ninja" Generator, CMake Version 3.31 + +# This file contains all the rules used to get the outputs files +# built from the input files. +# It is included in the main 'build.ninja'. + +# ============================================================================= +# Project: Robot_V2.Release+GD32C103CB +# Configurations: +# ============================================================================= +# ============================================================================= + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__Robot_V2.2eRelease.2bGD32C103CB_ + command = C:\WINDOWS\system32\cmd.exe /C "$PRE_LINK && c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armlink.exe $LINK_FLAGS $LINK_PATH $LINK_LIBRARIES $in -o $TARGET_FILE --list=$TARGET_FILE.map && $POST_BUILD" + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__Group_Source_Files_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__Group_sys_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__Group_device_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_EVAL_GD32C10x_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for compiling ASM files. + +rule ASM_COMPILER__GigaDevice_Device_Startup_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -c -o $out $in + description = Building ASM object $out + + +############################################# +# Rule for compiling C files. + +rule C_COMPILER__GigaDevice_Device_Startup_1_0_0_unscanned_ + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\armclang.exe --target=arm-arm-none-eabi $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building C object $out + + +############################################# +# Rule for running custom commands. + +rule CUSTOM_COMMAND + command = $COMMAND + description = $DESC + + +############################################# +# Rule for re-running cmake. + +rule RERUN_CMAKE + command = C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe --regenerate-during-build -SG:\Robot_v2\BOOT\tmp\Robot_V2.Release+GD32C103CB -BG:\Robot_v2\BOOT\tmp\1 + description = Re-running CMake... + generator = 1 + + +############################################# +# Rule for cleaning all built files. + +rule CLEAN + command = C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.ninja.build.ninja\1.12.1\ninja.exe $FILE_ARG -t clean $TARGETS + description = Cleaning all built files... + + +############################################# +# Rule for printing all primary targets available. + +rule HELP + command = C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.ninja.build.ninja\1.12.1\ninja.exe -t targets + description = All primary targets available: + diff --git a/tmp/1/ac6_linker_script.sct b/tmp/1/ac6_linker_script.sct new file mode 100644 index 0000000..252b79e --- /dev/null +++ b/tmp/1/ac6_linker_script.sct @@ -0,0 +1,42 @@ +# 1 "G:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/ac6_linker_script.sct.src" +# 1 "" 1 +# 1 "" 3 +# 411 "" 3 +# 1 "" 1 +# 1 "" 2 +# 1 "G:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/regions_GD32C103CB.h" 1 +# 2 "" 2 +# 1 "G:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/ac6_linker_script.sct.src" 2 +# 32 "G:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/ac6_linker_script.sct.src" +LR_ROM0 0x08000000 0x00020000 { + + ER_ROM0 0x08000000 0x00020000 { + *.o (RESET, +First) + *(InRoot$$Sections) + *(+RO +XO) + } + + + + + + + + RW_NOINIT 0x20000000 UNINIT (0x00008000 - 0x00000C00 - 0x00000200 - 0) { + *.o(.bss.noinit) + *.o(.bss.noinit.*) + } + + RW_RAM0 AlignExpr(+0, 8) (0x00008000 - 0x00000C00 - 0x00000200 - 0 - AlignExpr(ImageLength(RW_NOINIT), 8)) { + *(+RW +ZI) + } + + + ARM_LIB_HEAP (AlignExpr(+0, 8)) EMPTY 0x00000C00 { ; Reserve empty region for heap + } + + + ARM_LIB_STACK (0x20000000 + 0x00008000 - 0) EMPTY -0x00000200 { ; Reserve empty region for stack + } +# 85 "G:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/ac6_linker_script.sct.src" +} diff --git a/tmp/1/build.ninja b/tmp/1/build.ninja new file mode 100644 index 0000000..3c95700 --- /dev/null +++ b/tmp/1/build.ninja @@ -0,0 +1,659 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Ninja" Generator, CMake Version 3.31 + +# This file contains all the build statements describing the +# compilation DAG. + +# ============================================================================= +# Write statements declared in CMakeLists.txt: +# +# Which is the root file. +# ============================================================================= + +# ============================================================================= +# Project: Robot_V2.Release+GD32C103CB +# Configurations: +# ============================================================================= + +############################################# +# Minimal version of Ninja required by this file + +ninja_required_version = 1.5 + +# ============================================================================= +# Include auxiliary files. + + +############################################# +# Include rules file. + +include CMakeFiles/rules.ninja + +# ============================================================================= + +############################################# +# Logical path to working directory; prefix for absolute paths. + +cmake_ninja_workdir = G$:/Robot_v2/BOOT/tmp/1/ + +############################################# +# Utility command for database + +build database: phony CMakeFiles/database + +# ============================================================================= +# Object build statements for EXECUTABLE target Robot_V2.Release+GD32C103CB + + +############################################# +# Order-only phony target for Robot_V2.Release+GD32C103CB + +build cmake_object_order_depends_target_Robot_V2.Release+GD32C103CB: phony || cmake_object_order_depends_target_GigaDevice_Device_EVAL_GD32C10x_1_0_0 cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0 cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0 cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0 cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0 cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0 cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0 cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0 cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0 cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0 cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0 cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0 cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0 cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0 cmake_object_order_depends_target_GigaDevice_Device_Startup_1_0_0 cmake_object_order_depends_target_Group_Source_Files cmake_object_order_depends_target_Group_device cmake_object_order_depends_target_Group_sys + + +# ============================================================================= +# Link build statements for EXECUTABLE target Robot_V2.Release+GD32C103CB + + +############################################# +# Link the executable G:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.axf + +build G$:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf ac6_linker_script.sct | ${cmake_ninja_workdir}ac6_linker_script.sct: CXX_EXECUTABLE_LINKER__Robot_V2.2eRelease.2bGD32C103CB_ CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/systick.o CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/initial.o CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/flash.o CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o CMakeFiles/GigaDevice_Device_EVAL_GD32C10x_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.o CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.o CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.o CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.o CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.o CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.o CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.o CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.o CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.o CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.o CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.o CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.o CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.o CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.o CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.o CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.o | G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/ac6_linker_script.sct.src G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/regions_GD32C103CB.h || GigaDevice_Device_EVAL_GD32C10x_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0 GigaDevice_Device_Startup_1_0_0 Group_Source_Files Group_device Group_sys + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard + LINK_FLAGS = --cpu=Cortex-M4 --scatter=G:/Robot_v2/BOOT/tmp/1/ac6_linker_script.sct --map --list G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf.map --library_type=microlib --entry=Reset_Handler --info=summarysizes --summary_stderr --diag_suppress=L6314W + OBJECT_DIR = CMakeFiles\Robot_V2.Release+GD32C103CB.dir + POST_BUILD = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp\1 && c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\fromelf.exe --i32combined --output G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.hex G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf" + PRE_LINK = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp\1 && c:\Users\cbb\.vcpkg\artifacts\2139c4c6\compilers.arm.armclang\6.24.0\bin\\armclang.exe -E --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -xc -include G:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/regions_GD32C103CB.h G:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/ac6_linker_script.sct.src -o G:/Robot_v2/BOOT/tmp/1/ac6_linker_script.sct && cd G:\Robot_v2\BOOT\tmp\1" + RESTAT = 1 + TARGET_COMPILE_PDB = CMakeFiles\Robot_V2.Release+GD32C103CB.dir\ + TARGET_FILE = G:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.axf + TARGET_PDB = G:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.pdb + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target Group_Source_Files + + +############################################# +# Order-only phony target for Group_Source_Files + +build cmake_object_order_depends_target_Group_Source_Files: phony || . + +build CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o: CXX_COMPILER__Group_Source_Files_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/main.cpp || cmake_object_order_depends_target_Group_Source_Files + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\Group_Source_Files.dir\G_\Robot_v2\BOOT\Robot_V2\main.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\Group_Source_Files.dir + OBJECT_FILE_DIR = CMakeFiles\Group_Source_Files.dir\G_\Robot_v2\BOOT\Robot_V2 + TARGET_COMPILE_PDB = CMakeFiles\Group_Source_Files.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library Group_Source_Files + +build Group_Source_Files: phony CMakeFiles/Group_Source_Files.dir/G_/Robot_v2/BOOT/Robot_V2/main.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target Group_sys + + +############################################# +# Order-only phony target for Group_sys + +build cmake_object_order_depends_target_Group_sys: phony || . + +build CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/systick.o: CXX_COMPILER__Group_sys_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/sys/systick.cpp || cmake_object_order_depends_target_Group_sys + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\Group_sys.dir\G_\Robot_v2\BOOT\Robot_V2\sys\systick.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\Group_sys.dir + OBJECT_FILE_DIR = CMakeFiles\Group_sys.dir\G_\Robot_v2\BOOT\Robot_V2\sys + TARGET_COMPILE_PDB = CMakeFiles\Group_sys.dir\ + TARGET_PDB = "" + +build CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/initial.o: CXX_COMPILER__Group_sys_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/sys/initial.cpp || cmake_object_order_depends_target_Group_sys + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\Group_sys.dir\G_\Robot_v2\BOOT\Robot_V2\sys\initial.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\Group_sys.dir + OBJECT_FILE_DIR = CMakeFiles\Group_sys.dir\G_\Robot_v2\BOOT\Robot_V2\sys + TARGET_COMPILE_PDB = CMakeFiles\Group_sys.dir\ + TARGET_PDB = "" + +build CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/flash.o: CXX_COMPILER__Group_sys_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/sys/flash.cpp || cmake_object_order_depends_target_Group_sys + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\Group_sys.dir\G_\Robot_v2\BOOT\Robot_V2\sys\flash.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\Group_sys.dir + OBJECT_FILE_DIR = CMakeFiles\Group_sys.dir\G_\Robot_v2\BOOT\Robot_V2\sys + TARGET_COMPILE_PDB = CMakeFiles\Group_sys.dir\ + TARGET_PDB = "" + +build CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o: CXX_COMPILER__Group_sys_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/sys/OTA.cpp || cmake_object_order_depends_target_Group_sys + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\Group_sys.dir\G_\Robot_v2\BOOT\Robot_V2\sys\OTA.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\Group_sys.dir + OBJECT_FILE_DIR = CMakeFiles\Group_sys.dir\G_\Robot_v2\BOOT\Robot_V2\sys + TARGET_COMPILE_PDB = CMakeFiles\Group_sys.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library Group_sys + +build Group_sys: phony CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/systick.o CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/initial.o CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/flash.o CMakeFiles/Group_sys.dir/G_/Robot_v2/BOOT/Robot_V2/sys/OTA.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target Group_device + + +############################################# +# Order-only phony target for Group_device + +build cmake_object_order_depends_target_Group_device: phony || . + +build CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o: CXX_COMPILER__Group_device_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/device/Can.cpp || cmake_object_order_depends_target_Group_device + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\Group_device.dir\G_\Robot_v2\BOOT\Robot_V2\device\Can.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\Group_device.dir + OBJECT_FILE_DIR = CMakeFiles\Group_device.dir\G_\Robot_v2\BOOT\Robot_V2\device + TARGET_COMPILE_PDB = CMakeFiles\Group_device.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library Group_device + +build Group_device: phony CMakeFiles/Group_device.dir/G_/Robot_v2/BOOT/Robot_V2/device/Can.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_EVAL_GD32C10x_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_EVAL_GD32C10x_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_EVAL_GD32C10x_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_EVAL_GD32C10x_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.o: C_COMPILER__GigaDevice_Device_EVAL_GD32C10x_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.c || cmake_object_order_depends_target_GigaDevice_Device_EVAL_GD32C10x_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_EVAL_GD32C10x_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\gd32c10x_eval.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_EVAL_GD32C10x_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_EVAL_GD32C10x_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_EVAL_GD32C10x_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_EVAL_GD32C10x_1_0_0 + +build GigaDevice_Device_EVAL_GD32C10x_1_0_0: phony CMakeFiles/GigaDevice_Device_EVAL_GD32C10x_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.o: C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c || cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\gd32c10x_bkp.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0 + +build GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0: phony CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.o: C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c || cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\gd32c10x_can.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0 + +build GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0: phony CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.o: C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c || cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\gd32c10x_crc.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0 + +build GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0: phony CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.o: C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.c || cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\gd32c10x_dbg.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0 + +build GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0: phony CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.o: C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c || cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\gd32c10x_dma.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0 + +build GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0: phony CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.o: C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c || cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\gd32c10x_exti.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0 + +build GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0: phony CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.o: C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c || cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\gd32c10x_fmc.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0 + +build GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0: phony CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.o: C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c || cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\gd32c10x_fwdgt.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0 + +build GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0: phony CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.o: C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c || cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\gd32c10x_gpio.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0 + +build GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0: phony CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.o: C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.c || cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\gd32c10x_misc.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0 + +build GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0: phony CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.o: C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c || cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\gd32c10x_pmu.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0 + +build GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0: phony CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.o: C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c || cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\gd32c10x_rcu.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0 + +build GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0: phony CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.o: C_COMPILER__GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c || cmake_object_order_depends_target_GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\gd32c10x_usart.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0 + +build GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0: phony CMakeFiles/GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.o + +# ============================================================================= +# Object build statements for OBJECT_LIBRARY target GigaDevice_Device_Startup_1_0_0 + + +############################################# +# Order-only phony target for GigaDevice_Device_Startup_1_0_0 + +build cmake_object_order_depends_target_GigaDevice_Device_Startup_1_0_0: phony || . + +build CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.o: ASM_COMPILER__GigaDevice_Device_Startup_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.s || cmake_object_order_depends_target_GigaDevice_Device_Startup_1_0_0 + DEP_FILE = CMakeFiles\GigaDevice_Device_Startup_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\startup_gd32c10x.o.d + FLAGS = -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -D__MICROLIB -gdwarf-5 -masm=auto -O2 -Wa,armasm,--pd,"GD32C10x SETA 1" -Wa,armasm,--pd,"_RTE_ SETA 1" + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device + OBJECT_DIR = CMakeFiles\GigaDevice_Device_Startup_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_Startup_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_Startup_1_0_0.dir\ + TARGET_PDB = "" + +build CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.o: C_COMPILER__GigaDevice_Device_Startup_1_0_0_unscanned_ G$:/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c || cmake_object_order_depends_target_GigaDevice_Device_Startup_1_0_0 + DEFINES = -DGD32C10x -D_RTE_ + DEP_FILE = CMakeFiles\GigaDevice_Device_Startup_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB\system_gd32c10x.o.d + FLAGS = --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 + INCLUDES = -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include + OBJECT_DIR = CMakeFiles\GigaDevice_Device_Startup_1_0_0.dir + OBJECT_FILE_DIR = CMakeFiles\GigaDevice_Device_Startup_1_0_0.dir\G_\Robot_v2\BOOT\Robot_V2\RTE\Device\GD32C103CB + TARGET_COMPILE_PDB = CMakeFiles\GigaDevice_Device_Startup_1_0_0.dir\ + TARGET_PDB = "" + + + +############################################# +# Object library GigaDevice_Device_Startup_1_0_0 + +build GigaDevice_Device_Startup_1_0_0: phony CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.o CMakeFiles/GigaDevice_Device_Startup_1_0_0.dir/G_/Robot_v2/BOOT/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.o + + +############################################# +# Utility command for edit_cache + +build CMakeFiles/edit_cache.util: CUSTOM_COMMAND + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp\1 && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake-gui.exe -SG:\Robot_v2\BOOT\tmp\Robot_V2.Release+GD32C103CB -BG:\Robot_v2\BOOT\tmp\1" + DESC = Running CMake cache editor... + pool = console + restat = 1 + +build edit_cache: phony CMakeFiles/edit_cache.util + + +############################################# +# Utility command for rebuild_cache + +build CMakeFiles/rebuild_cache.util: CUSTOM_COMMAND + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp\1 && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe --regenerate-during-build -SG:\Robot_v2\BOOT\tmp\Robot_V2.Release+GD32C103CB -BG:\Robot_v2\BOOT\tmp\1" + DESC = Running CMake to regenerate build system... + pool = console + restat = 1 + +build rebuild_cache: phony CMakeFiles/rebuild_cache.util + + +############################################# +# Custom command for CMakeFiles\database + +build CMakeFiles/database | ${cmake_ninja_workdir}CMakeFiles/database: CUSTOM_COMMAND + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp\1 && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E make_directory G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E copy_if_different G:/Robot_v2/BOOT/tmp/1/compile_commands.json G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release" + +# ============================================================================= +# Target aliases. + +build Robot_V2.Release+GD32C103CB: phony G$:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf + +build Robot_V2.axf: phony G$:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf + +# ============================================================================= +# Folder targets. + +# ============================================================================= + +############################################# +# Folder: G:/Robot_v2/BOOT/tmp/1 + +build all: phony G$:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf Group_Source_Files Group_sys Group_device GigaDevice_Device_EVAL_GD32C10x_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0 GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0 GigaDevice_Device_Startup_1_0_0 + +# ============================================================================= +# Built-in targets + + +############################################# +# Re-run CMake if any of its inputs changed. + +build build.ninja: RERUN_CMAKE | C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeASMCompiler.cmake.in C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeASMInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCCompiler.cmake.in C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCCompilerABI.c C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCXXCompiler.cmake.in C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCXXInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCommonLanguageInclude.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCompilerIdDetection.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineASMCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCXXCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerSupport.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineSystem.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeFindBinUtils.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeGenericSystem.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeInitializeConfigs.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeLanguageInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeNinjaFindMake.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeParseImplicitIncludeInfo.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeParseImplicitLinkInfo.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeParseLibraryArchitecture.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeSystem.cmake.in C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeSystemSpecificInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeSystemSpecificInitialize.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestASMCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestCompilerCommon.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ADSP-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ARMCC-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ARMClang-ASM.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ARMClang-C.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ARMClang-CXX-FeatureTests.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ARMClang-CXX.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ARMClang-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ARMClang.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/AppleClang-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Borland-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Bruce-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/CMakeCommonCompilerMacros.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang-C.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang-CXX-FeatureTests.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang-CXX-TestableFeatures.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang-CXX.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang-DetermineCompilerInternal.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Compaq-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Cray-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/CrayClang-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Embarcadero-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Fujitsu-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/GHS-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/GNU-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/GNU.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/HP-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/HP-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/IAR-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Intel-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/LCC-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/MSVC-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/NVHPC-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/NVIDIA-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/OrangeC-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/PGI-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/PathScale-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/SCO-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/SDCC-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/SunPro-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/TI-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/TIClang-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Tasking-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Watcom-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/XL-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/XL-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/XLClang-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/zOS-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Internal/CMakeASMLinkerInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Internal/CMakeCLinkerInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Internal/CMakeCXXLinkerInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Internal/CMakeCommonLinkerInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Internal/CMakeDetermineLinkerId.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Internal/FeatureTesting.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Platform/Generic.cmake C$:/Users/cbb/.vscode/extensions/arm.cmsis-csolution-1.64.1-win32-x64/tools/cmsis-toolbox/etc/AC6.6.16.2.cmake CMakeCache.txt CMakeFiles/3.31.5/CMakeASMCompiler.cmake CMakeFiles/3.31.5/CMakeCCompiler.cmake CMakeFiles/3.31.5/CMakeCXXCompiler.cmake CMakeFiles/3.31.5/CMakeSystem.cmake G$:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/CMakeLists.txt G$:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/components.cmake G$:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/groups.cmake G$:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/toolchain.cmake G$:/Robot_v2/BOOT/tmp/roots.cmake + pool = console + + +############################################# +# A missing CMake input file is not an error. + +build C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeASMCompiler.cmake.in C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeASMInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCCompiler.cmake.in C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCCompilerABI.c C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCXXCompiler.cmake.in C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCXXCompilerABI.cpp C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCXXInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCommonLanguageInclude.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeCompilerIdDetection.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineASMCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCXXCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerABI.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerId.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineCompilerSupport.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineSystem.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeFindBinUtils.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeGenericSystem.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeInitializeConfigs.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeLanguageInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeNinjaFindMake.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeParseImplicitIncludeInfo.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeParseImplicitLinkInfo.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeParseLibraryArchitecture.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeSystem.cmake.in C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeSystemSpecificInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeSystemSpecificInitialize.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestASMCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestCXXCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeTestCompilerCommon.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ADSP-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ARMCC-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ARMClang-ASM.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ARMClang-C.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ARMClang-CXX-FeatureTests.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ARMClang-CXX.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ARMClang-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/ARMClang.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/AppleClang-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Borland-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Bruce-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/CMakeCommonCompilerMacros.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang-C.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang-CXX-FeatureTests.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang-CXX-TestableFeatures.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang-CXX.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang-DetermineCompilerInternal.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Clang.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Compaq-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Cray-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/CrayClang-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Embarcadero-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Fujitsu-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/GHS-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/GNU-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/GNU.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/HP-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/HP-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/IAR-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Intel-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/LCC-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/MSVC-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/NVHPC-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/NVIDIA-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/OrangeC-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/PGI-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/PathScale-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/SCO-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/SDCC-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/SunPro-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/TI-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/TIClang-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Tasking-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/Watcom-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/XL-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/XL-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/XLClang-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/zOS-C-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Internal/CMakeASMLinkerInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Internal/CMakeCLinkerInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Internal/CMakeCXXLinkerInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Internal/CMakeCommonLinkerInformation.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Internal/CMakeDetermineLinkerId.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Internal/FeatureTesting.cmake C$:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/Platform/Generic.cmake C$:/Users/cbb/.vscode/extensions/arm.cmsis-csolution-1.64.1-win32-x64/tools/cmsis-toolbox/etc/AC6.6.16.2.cmake CMakeCache.txt CMakeFiles/3.31.5/CMakeASMCompiler.cmake CMakeFiles/3.31.5/CMakeCCompiler.cmake CMakeFiles/3.31.5/CMakeCXXCompiler.cmake CMakeFiles/3.31.5/CMakeSystem.cmake G$:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/CMakeLists.txt G$:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/components.cmake G$:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/groups.cmake G$:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/toolchain.cmake G$:/Robot_v2/BOOT/tmp/roots.cmake: phony + + +############################################# +# Clean all the built files. + +build clean: CLEAN + + +############################################# +# Print all primary targets available. + +build help: HELP + + +############################################# +# Make the all target the default. + +default all diff --git a/tmp/1/cmake_install.cmake b/tmp/1/cmake_install.cmake new file mode 100644 index 0000000..09bc67e --- /dev/null +++ b/tmp/1/cmake_install.cmake @@ -0,0 +1,61 @@ +# Install script for directory: G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "C:/Program Files (x86)/Robot_V2.Release+GD32C103CB") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "TRUE") +endif() + +# Set path to fallback-tool for dependency-resolution. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "CMAKE_OBJDUMP-NOTFOUND") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +if(CMAKE_INSTALL_LOCAL_ONLY) + file(WRITE "G:/Robot_v2/BOOT/tmp/1/install_local_manifest.txt" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") +endif() +if(CMAKE_INSTALL_COMPONENT) + if(CMAKE_INSTALL_COMPONENT MATCHES "^[a-zA-Z0-9_.+-]+$") + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") + else() + string(MD5 CMAKE_INST_COMP_HASH "${CMAKE_INSTALL_COMPONENT}") + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INST_COMP_HASH}.txt") + unset(CMAKE_INST_COMP_HASH) + endif() +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + file(WRITE "G:/Robot_v2/BOOT/tmp/1/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") +endif() diff --git a/tmp/1/compile_commands.json b/tmp/1/compile_commands.json new file mode 100644 index 0000000..ca2a3c7 --- /dev/null +++ b/tmp/1/compile_commands.json @@ -0,0 +1,134 @@ +[ +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\Group_Source_Files.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\main.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\main.cpp", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\main.cpp", + "output": "CMakeFiles\\Group_Source_Files.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\main.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\Group_sys.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\sys\\systick.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\sys\\systick.cpp", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\sys\\systick.cpp", + "output": "CMakeFiles\\Group_sys.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\sys\\systick.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\Group_sys.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\sys\\initial.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\sys\\initial.cpp", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\sys\\initial.cpp", + "output": "CMakeFiles\\Group_sys.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\sys\\initial.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\Group_sys.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\sys\\flash.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\sys\\flash.cpp", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\sys\\flash.cpp", + "output": "CMakeFiles\\Group_sys.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\sys\\flash.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\Group_sys.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\sys\\OTA.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\sys\\OTA.cpp", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\sys\\OTA.cpp", + "output": "CMakeFiles\\Group_sys.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\sys\\OTA.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include/libcxx -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\Group_device.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\device\\Can.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\device\\Can.cpp", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\device\\Can.cpp", + "output": "CMakeFiles\\Group_device.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\device\\Can.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_EVAL_GD32C10x_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_eval.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_eval.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_eval.c", + "output": "CMakeFiles\\GigaDevice_Device_EVAL_GD32C10x_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_eval.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_bkp.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_bkp.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_bkp.c", + "output": "CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_bkp.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_can.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_can.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_can.c", + "output": "CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_can.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_crc.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_crc.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_crc.c", + "output": "CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_crc.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_dbg.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_dbg.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_dbg.c", + "output": "CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_dbg.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_dma.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_dma.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_dma.c", + "output": "CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_dma.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_exti.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_exti.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_exti.c", + "output": "CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_exti.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_fmc.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_fmc.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_fmc.c", + "output": "CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_fmc.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_fwdgt.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_fwdgt.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_fwdgt.c", + "output": "CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_fwdgt.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_gpio.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_gpio.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_gpio.c", + "output": "CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_gpio.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_misc.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_misc.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_misc.c", + "output": "CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_misc.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_pmu.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_pmu.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_pmu.c", + "output": "CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_pmu.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_rcu.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_rcu.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_rcu.c", + "output": "CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_rcu.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_usart.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_usart.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_usart.c", + "output": "CMakeFiles\\GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\gd32c10x_usart.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -D__MICROLIB -gdwarf-5 -masm=auto -O2 -Wa,armasm,--pd,\"GD32C10x SETA 1\" -Wa,armasm,--pd,\"_RTE_ SETA 1\" -c -o CMakeFiles\\GigaDevice_Device_Startup_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\startup_gd32c10x.o G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\startup_gd32c10x.s", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\startup_gd32c10x.s", + "output": "CMakeFiles\\GigaDevice_Device_Startup_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\startup_gd32c10x.o" +}, +{ + "directory": "G:/Robot_v2/BOOT/tmp/1", + "command": "c:\\Users\\cbb\\.vcpkg\\artifacts\\2139c4c6\\compilers.arm.armclang\\6.24.0\\bin\\armclang.exe --target=arm-arm-none-eabi -DGD32C10x -D_RTE_ -IG:/Robot_v2/BOOT/Robot_V2/RTE/_Release_GD32C103CB -IC:/Users/cbb/AppData/Local/arm/packs/ARM/CMSIS/4.5.0/CMSIS/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include -IC:/Users/cbb/AppData/Local/arm/packs/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities -IG:/Robot_v2/BOOT/Robot_V2 -IG:/Robot_v2/BOOT/Robot_V2/sys -IG:/Robot_v2/BOOT/Robot_V2/device -isystem C:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/include --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -mcpu=Cortex-M4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard --target=arm-arm-none-eabi -c -mlittle-endian -D__packed=packed -fshort-enums -fshort-wchar -D__MICROLIB -Wno-register -gdwarf-5 -std=gnu11 -Wno-macro-redefined -Wno-pragma-pack -Wno-parentheses-equality -Wno-license-management -O2 -o CMakeFiles\\GigaDevice_Device_Startup_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\system_gd32c10x.o -c G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\system_gd32c10x.c", + "file": "G:\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\system_gd32c10x.c", + "output": "CMakeFiles\\GigaDevice_Device_Startup_1_0_0.dir\\G_\\Robot_v2\\BOOT\\Robot_V2\\RTE\\Device\\GD32C103CB\\system_gd32c10x.o" +} +] \ No newline at end of file diff --git a/tmp/CMakeCache.txt b/tmp/CMakeCache.txt new file mode 100644 index 0000000..ce74a15 --- /dev/null +++ b/tmp/CMakeCache.txt @@ -0,0 +1,134 @@ +# This is the CMakeCache file. +# For build in directory: g:/Robot_v2/BOOT/tmp +# It was generated by CMake: C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/bin/cmake.exe +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Enable/Disable output of build database during the build. +CMAKE_EXPORT_BUILD_DATABASE:BOOL= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= + +//Value Computed by CMake. +CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=G:/Robot_v2/BOOT/tmp/CMakeFiles/pkgRedirects + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=C:/Program Files (x86)/Robot_V2 + +//Program used to build from build.ninja files. +CMAKE_MAKE_PROGRAM:FILEPATH=C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.ninja.build.ninja/1.12.1/ninja.exe + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=Robot_V2 + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//CMSIS compiler root +CMSIS_COMPILER_ROOT:PATH=C:/Users/cbb/.vscode/extensions/arm.cmsis-csolution-1.64.1-win32-x64/tools/cmsis-toolbox/etc + +//CMSIS pack root +CMSIS_PACK_ROOT:PATH=C:/Users/cbb/AppData/Local/arm/packs + +//Value Computed by CMake +Robot_V2_BINARY_DIR:STATIC=G:/Robot_v2/BOOT/tmp + +//Value Computed by CMake +Robot_V2_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +Robot_V2_SOURCE_DIR:STATIC=G:/Robot_v2/BOOT/tmp + +//CMSIS solution root +SOLUTION_ROOT:PATH=G:/Robot_v2/BOOT + + +######################## +# INTERNAL cache entries +######################## + +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=g:/Robot_v2/BOOT/tmp +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=31 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=5 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/bin/cmake.exe +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/bin/cpack.exe +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/bin/ctest.exe +//Path to cache edit program executable. +CMAKE_EDIT_COMMAND:INTERNAL=C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/bin/cmake-gui.exe +//Whether to issue deprecation errors for macros and functions. +CMAKE_ERROR_DEPRECATED:INTERNAL=FALSE +//ADVANCED property for variable: CMAKE_EXPORT_BUILD_DATABASE +CMAKE_EXPORT_BUILD_DATABASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Ninja +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=G:/Robot_v2/BOOT/tmp +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//Suppress errors that are meant for the author of the CMakeLists.txt +// files. +CMAKE_SUPPRESS_DEVELOPER_ERRORS:INTERNAL=TRUE +//Suppress Warnings that are meant for the author of the CMakeLists.txt +// files. +CMAKE_SUPPRESS_DEVELOPER_WARNINGS:INTERNAL=TRUE +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//Whether to issue warnings for deprecated functionality. +CMAKE_WARN_DEPRECATED:INTERNAL=FALSE + diff --git a/tmp/CMakeFiles/3.31.5/CMakeSystem.cmake b/tmp/CMakeFiles/3.31.5/CMakeSystem.cmake new file mode 100644 index 0000000..52688ab --- /dev/null +++ b/tmp/CMakeFiles/3.31.5/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Windows-10.0.26220") +set(CMAKE_HOST_SYSTEM_NAME "Windows") +set(CMAKE_HOST_SYSTEM_VERSION "10.0.26220") +set(CMAKE_HOST_SYSTEM_PROCESSOR "AMD64") + + + +set(CMAKE_SYSTEM "Windows-10.0.26220") +set(CMAKE_SYSTEM_NAME "Windows") +set(CMAKE_SYSTEM_VERSION "10.0.26220") +set(CMAKE_SYSTEM_PROCESSOR "AMD64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/tmp/CMakeFiles/CMakeConfigureLog.yaml b/tmp/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 0000000..df119ac --- /dev/null +++ b/tmp/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,11 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/share/cmake-3.31/Modules/CMakeDetermineSystem.cmake:205 (message)" + - "CMakeLists.txt:4 (project)" + message: | + The system is: Windows - 10.0.26220 - AMD64 +... diff --git a/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-build.dir/Labels.json b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-build.dir/Labels.json new file mode 100644 index 0000000..bc4584b --- /dev/null +++ b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-build.dir/Labels.json @@ -0,0 +1,37 @@ +{ + "sources" : + [ + { + "file" : "G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-build" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-build.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-build.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-download.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-mkdir.rule" + } + ], + "target" : + { + "labels" : + [ + "Robot_V2.Release+GD32C103CB" + ], + "name" : "Robot_V2.Release+GD32C103CB-build" + } +} \ No newline at end of file diff --git a/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-build.dir/Labels.txt b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-build.dir/Labels.txt new file mode 100644 index 0000000..0179d1c --- /dev/null +++ b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-build.dir/Labels.txt @@ -0,0 +1,11 @@ +# Target labels + Robot_V2.Release+GD32C103CB +# Source files and their labels +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-build +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-build.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-build.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-download.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-mkdir.rule diff --git a/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-complete b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-complete new file mode 100644 index 0000000..e69de29 diff --git a/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-configure.dir/Labels.json b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-configure.dir/Labels.json new file mode 100644 index 0000000..fb95d96 --- /dev/null +++ b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-configure.dir/Labels.json @@ -0,0 +1,34 @@ +{ + "sources" : + [ + { + "file" : "G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-configure" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-configure.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-download.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-mkdir.rule" + } + ], + "target" : + { + "labels" : + [ + "Robot_V2.Release+GD32C103CB" + ], + "name" : "Robot_V2.Release+GD32C103CB-configure" + } +} \ No newline at end of file diff --git a/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-configure.dir/Labels.txt b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-configure.dir/Labels.txt new file mode 100644 index 0000000..a578dfc --- /dev/null +++ b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-configure.dir/Labels.txt @@ -0,0 +1,10 @@ +# Target labels + Robot_V2.Release+GD32C103CB +# Source files and their labels +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-configure +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-configure.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-download.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-mkdir.rule diff --git a/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-database.dir/Labels.json b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-database.dir/Labels.json new file mode 100644 index 0000000..6c4c7d7 --- /dev/null +++ b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-database.dir/Labels.json @@ -0,0 +1,37 @@ +{ + "sources" : + [ + { + "file" : "G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-database" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-database.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-download.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-mkdir.rule" + } + ], + "target" : + { + "labels" : + [ + "Robot_V2.Release+GD32C103CB" + ], + "name" : "Robot_V2.Release+GD32C103CB-database" + } +} \ No newline at end of file diff --git a/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-database.dir/Labels.txt b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-database.dir/Labels.txt new file mode 100644 index 0000000..63595cc --- /dev/null +++ b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-database.dir/Labels.txt @@ -0,0 +1,11 @@ +# Target labels + Robot_V2.Release+GD32C103CB +# Source files and their labels +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-database +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-database.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-download.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-mkdir.rule diff --git a/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-executes.dir/Labels.json b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-executes.dir/Labels.json new file mode 100644 index 0000000..e1c4055 --- /dev/null +++ b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-executes.dir/Labels.json @@ -0,0 +1,40 @@ +{ + "sources" : + [ + { + "file" : "G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-executes" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-executes.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-executes.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-build.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-download.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-mkdir.rule" + } + ], + "target" : + { + "labels" : + [ + "Robot_V2.Release+GD32C103CB" + ], + "name" : "Robot_V2.Release+GD32C103CB-executes" + } +} \ No newline at end of file diff --git a/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-executes.dir/Labels.txt b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-executes.dir/Labels.txt new file mode 100644 index 0000000..972aa36 --- /dev/null +++ b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-executes.dir/Labels.txt @@ -0,0 +1,12 @@ +# Target labels + Robot_V2.Release+GD32C103CB +# Source files and their labels +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-executes +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-executes.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-executes.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-build.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-download.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-mkdir.rule diff --git a/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB.dir/Labels.json b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB.dir/Labels.json new file mode 100644 index 0000000..f86afaf --- /dev/null +++ b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB.dir/Labels.json @@ -0,0 +1,52 @@ +{ + "sources" : + [ + { + "file" : "G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-complete.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-build.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-download.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-executes.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-install.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-mkdir.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-test.rule" + }, + { + "file" : "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update.rule" + } + ], + "target" : + { + "labels" : + [ + "Robot_V2.Release+GD32C103CB" + ], + "name" : "Robot_V2.Release+GD32C103CB" + } +} \ No newline at end of file diff --git a/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB.dir/Labels.txt b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB.dir/Labels.txt new file mode 100644 index 0000000..8cf7ee1 --- /dev/null +++ b/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB.dir/Labels.txt @@ -0,0 +1,16 @@ +# Target labels + Robot_V2.Release+GD32C103CB +# Source files and their labels +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB.rule +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-complete.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-build.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-download.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-executes.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-install.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-mkdir.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-test.rule +G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update.rule diff --git a/tmp/CMakeFiles/TargetDirectories.txt b/tmp/CMakeFiles/TargetDirectories.txt new file mode 100644 index 0000000..2b59f18 --- /dev/null +++ b/tmp/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,8 @@ +G:/Robot_v2/BOOT/tmp/CMakeFiles/database.dir +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB.dir +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-build.dir +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-configure.dir +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-executes.dir +G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-database.dir +G:/Robot_v2/BOOT/tmp/CMakeFiles/edit_cache.dir +G:/Robot_v2/BOOT/tmp/CMakeFiles/rebuild_cache.dir diff --git a/tmp/CMakeFiles/cmake.check_cache b/tmp/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/tmp/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/tmp/CMakeFiles/rules.ninja b/tmp/CMakeFiles/rules.ninja new file mode 100644 index 0000000..81e4b2e --- /dev/null +++ b/tmp/CMakeFiles/rules.ninja @@ -0,0 +1,45 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Ninja" Generator, CMake Version 3.31 + +# This file contains all the rules used to get the outputs files +# built from the input files. +# It is included in the main 'build.ninja'. + +# ============================================================================= +# Project: Robot_V2 +# Configurations: +# ============================================================================= +# ============================================================================= + +############################################# +# Rule for running custom commands. + +rule CUSTOM_COMMAND + command = $COMMAND + description = $DESC + + +############################################# +# Rule for re-running cmake. + +rule RERUN_CMAKE + command = C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe --regenerate-during-build -SG:\Robot_v2\BOOT\tmp -BG:\Robot_v2\BOOT\tmp + description = Re-running CMake... + generator = 1 + + +############################################# +# Rule for cleaning all built files. + +rule CLEAN + command = C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.ninja.build.ninja\1.12.1\ninja.exe $FILE_ARG -t clean $TARGETS + description = Cleaning all built files... + + +############################################# +# Rule for printing all primary targets available. + +rule HELP + command = C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.ninja.build.ninja\1.12.1\ninja.exe -t targets + description = All primary targets available: + diff --git a/tmp/CMakeLists.txt b/tmp/CMakeLists.txt new file mode 100644 index 0000000..249795f --- /dev/null +++ b/tmp/CMakeLists.txt @@ -0,0 +1,80 @@ +cmake_minimum_required(VERSION 3.27) +include(ExternalProject) + +project("Robot_V2" NONE) + +# Roots +include("roots.cmake") + +# Context specific lists +set(CONTEXTS + "Robot_V2.Release+GD32C103CB" +) +list(LENGTH CONTEXTS CONTEXTS_LENGTH) +math(EXPR CONTEXTS_LENGTH "${CONTEXTS_LENGTH}-1") + +set(DIRS + "${CMAKE_CURRENT_SOURCE_DIR}/Robot_V2.Release+GD32C103CB" +) + +set(OUTPUTS_1 + "${SOLUTION_ROOT}/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf" + "${SOLUTION_ROOT}/out/Robot_V2/GD32C103CB/Release/Robot_V2.hex" + "${SOLUTION_ROOT}/out/Robot_V2/GD32C103CB/Release/Robot_V2.axf.map" +) + +set(ARGS + "-DSOLUTION_ROOT=${SOLUTION_ROOT}" + "-DCMSIS_PACK_ROOT=${CMSIS_PACK_ROOT}" + "-DCMSIS_COMPILER_ROOT=${CMSIS_COMPILER_ROOT}" +) + +# Compilation database +add_custom_target(database) + +# Iterate over contexts +foreach(INDEX RANGE ${CONTEXTS_LENGTH}) + + math(EXPR N "${INDEX}+1") + list(GET CONTEXTS ${INDEX} CONTEXT) + list(GET DIRS ${INDEX} DIR) + + # Create external project, set configure and build steps + ExternalProject_Add(${CONTEXT} + PREFIX ${DIR} + SOURCE_DIR ${DIR} + BINARY_DIR ${N} + INSTALL_COMMAND "" + TEST_COMMAND "" + CONFIGURE_COMMAND ${CMAKE_COMMAND} -G Ninja -S -B ${ARGS} + BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Building CMake target '${CONTEXT}'" + COMMAND ${CMAKE_COMMAND} --build + BUILD_ALWAYS TRUE + BUILD_BYPRODUCTS ${OUTPUTS_${N}} + LOG_CONFIGURE ON + LOG_OUTPUT_ON_FAILURE ON + USES_TERMINAL_BUILD ON + ) + + # Executes command step + ExternalProject_Add_Step(${CONTEXT} executes + DEPENDEES build + ) + + ExternalProject_Add_StepTargets(${CONTEXT} build configure executes) + + # Debug + message(VERBOSE "Configure Context: ${CMAKE_COMMAND} -G Ninja -S ${DIR} -B ${N}") + + # Database generation step + ExternalProject_Add_Step(${CONTEXT} database + COMMAND ${CMAKE_COMMAND} --build --target database + ALWAYS TRUE + LOG TRUE + USES_TERMINAL ON + DEPENDEES configure + ) + ExternalProject_Add_StepTargets(${CONTEXT} database) + add_dependencies(database ${CONTEXT}-database) + +endforeach() diff --git a/tmp/Robot_V2.Release+GD32C103CB/CMakeLists.txt b/tmp/Robot_V2.Release+GD32C103CB/CMakeLists.txt new file mode 100644 index 0000000..55f0dd9 --- /dev/null +++ b/tmp/Robot_V2.Release+GD32C103CB/CMakeLists.txt @@ -0,0 +1,166 @@ +cmake_minimum_required(VERSION 3.27) + +# Roots +include("../roots.cmake") + +set(CONTEXT Robot_V2.Release+GD32C103CB) +set(TARGET ${CONTEXT}) +set(OUT_DIR "${SOLUTION_ROOT}/out/Robot_V2/GD32C103CB/Release") +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set(HEX_FILE "Robot_V2.hex") +set(LD_MAP_FILE "Robot_V2.axf.map") +set(LD_SCRIPT "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/ac6_linker_script.sct.src") +set(LD_REGIONS "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/regions_GD32C103CB.h") +set(LD_SCRIPT_PP "${CMAKE_CURRENT_BINARY_DIR}/ac6_linker_script.sct") + +# Processor Options +set(CPU Cortex-M4) +set(FPU SP_FPU) +set(BYTE_ORDER Little-endian) + +# Toolchain config map +include("toolchain.cmake") + +# Setup project +project(${CONTEXT} LANGUAGES CXX C ASM) + +# Compilation database +add_custom_target(database + COMMAND ${CMAKE_COMMAND} -E make_directory "${OUT_DIR}" + COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_BINARY_DIR}/compile_commands.json" "${OUT_DIR}" +) +set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}) +set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}) + +# Setup context +add_executable(${CONTEXT}) +set_target_properties(${CONTEXT} PROPERTIES PREFIX "" SUFFIX ".axf" OUTPUT_NAME "Robot_V2") +set_target_properties(${CONTEXT} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${OUT_DIR}) +add_library(${CONTEXT}_GLOBAL INTERFACE) + +# Includes +target_include_directories(${CONTEXT} PUBLIC + "${SOLUTION_ROOT}/Robot_V2/RTE/_Release_GD32C103CB" + "${CMSIS_PACK_ROOT}/ARM/CMSIS/4.5.0/CMSIS/Include" + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc" + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include" + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities" + "${SOLUTION_ROOT}/Robot_V2" + "${SOLUTION_ROOT}/Robot_V2/sys" + "${SOLUTION_ROOT}/Robot_V2/device" +) + +# Defines +target_compile_definitions(${CONTEXT} PUBLIC + $<$: + GD32C10x + _RTE_ + > +) + +# Compile options +target_compile_options(${CONTEXT} PUBLIC + $<$: + "SHELL:${ASM_CPU}" + "SHELL:${ASM_FLAGS}" + "SHELL:${ASM_BYTE_ORDER}" + "SHELL:-D__packed=packed" + "SHELL:-D__MICROLIB" + "SHELL:-gdwarf-5" + "SHELL:-masm=auto" + > + $<$: + "SHELL:${CC_CPU}" + "SHELL:${CC_FLAGS}" + "SHELL:${CC_BYTE_ORDER}" + "SHELL:-D__packed=packed" + "SHELL:-fshort-enums" + "SHELL:-fshort-wchar" + "SHELL:-D__MICROLIB" + "SHELL:-Wno-register" + "SHELL:-gdwarf-5" + "SHELL:-std=gnu11" + "SHELL:-Wno-macro-redefined" + "SHELL:-Wno-pragma-pack" + "SHELL:-Wno-parentheses-equality" + "SHELL:-Wno-license-management" + > + $<$: + "SHELL:${CXX_CPU}" + "SHELL:${CXX_FLAGS}" + "SHELL:${CXX_BYTE_ORDER}" + "SHELL:-fshort-enums" + "SHELL:-fshort-wchar" + "SHELL:-D__MICROLIB" + "SHELL:-Wno-register" + "SHELL:-gdwarf-5" + "SHELL:-Wno-macro-redefined" + "SHELL:-Wno-pragma-pack" + "SHELL:-Wno-parentheses-equality" + "SHELL:-Wno-license-management" + > +) + +# Compile Options Abstractions +add_library(${CONTEXT}_ABSTRACTIONS INTERFACE) +cbuild_set_options_flags(CXX "balanced" "off" "" "" CXX_OPTIONS_FLAGS_${CONTEXT}) +cbuild_set_options_flags(CC "balanced" "off" "" "" CC_OPTIONS_FLAGS_${CONTEXT}) +cbuild_set_options_flags(ASM "balanced" "off" "" "" ASM_OPTIONS_FLAGS_${CONTEXT}) +target_compile_options(${CONTEXT}_ABSTRACTIONS INTERFACE + $<$: + "SHELL:${CXX_OPTIONS_FLAGS_${CONTEXT}}" + > + $<$: + "SHELL:${CC_OPTIONS_FLAGS_${CONTEXT}}" + > + $<$: + "SHELL:${ASM_OPTIONS_FLAGS_${CONTEXT}}" + > +) + +# Add groups and components +include("groups.cmake") +include("components.cmake") + +target_link_libraries(${CONTEXT} PUBLIC + Group_Source_Files + Group_sys + Group_device + ARM_CMSIS_CORE_4_3_0 + GigaDevice_Device_EVAL_GD32C10x_1_0_0 + GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0 + GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0 + GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0 + GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0 + GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0 + GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0 + GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0 + GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0 + GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0 + GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0 + GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0 + GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0 + GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0 + GigaDevice_Device_GD32C10x_libopt_1_0_0 + GigaDevice_Device_Startup_1_0_0 +) + +# Linker options +target_link_options(${CONTEXT} PUBLIC + "SHELL:${LD_CPU}" + "SHELL:${_LS}\"${LD_SCRIPT_PP}\"" + "SHELL:${LD_MAP}" + "SHELL:--library_type=microlib" + "SHELL:--entry=Reset_Handler" + "SHELL:--info=summarysizes" + "SHELL:--summary_stderr" + "SHELL:--diag_suppress=L6314W" +) +set(LD_DEPS ${LD_SCRIPT} ${LD_REGIONS}) +set_target_properties(${CONTEXT} PROPERTIES LINK_DEPENDS "${LD_DEPS}") + +# Linker script pre-processing +add_custom_command(TARGET ${CONTEXT} PRE_LINK COMMAND ${CPP} ARGS ${CPP_ARGS_LD_SCRIPT} BYPRODUCTS ${LD_SCRIPT_PP}) + +# Hex Conversion + add_custom_command(TARGET ${CONTEXT} POST_BUILD COMMAND ${CMAKE_OBJCOPY} ${ELF2HEX}) diff --git a/tmp/Robot_V2.Release+GD32C103CB/components.cmake b/tmp/Robot_V2.Release+GD32C103CB/components.cmake new file mode 100644 index 0000000..363f381 --- /dev/null +++ b/tmp/Robot_V2.Release+GD32C103CB/components.cmake @@ -0,0 +1,306 @@ +# components.cmake + +# component ARM::CMSIS:CORE@4.3.0 +add_library(ARM_CMSIS_CORE_4_3_0 INTERFACE) +target_include_directories(ARM_CMSIS_CORE_4_3_0 INTERFACE + $ + "${CMSIS_PACK_ROOT}/ARM/CMSIS/4.5.0/CMSIS/Include" +) +target_compile_definitions(ARM_CMSIS_CORE_4_3_0 INTERFACE + $ +) +target_link_libraries(ARM_CMSIS_CORE_4_3_0 INTERFACE + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:EVAL:GD32C10x@1.0.0 +add_library(GigaDevice_Device_EVAL_GD32C10x_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_eval.c" +) +target_include_directories(GigaDevice_Device_EVAL_GD32C10x_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Utilities" +) +target_compile_definitions(GigaDevice_Device_EVAL_GD32C10x_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_EVAL_GD32C10x_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_EVAL_GD32C10x_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:GD32C10x_StdPeripherals:BKP@1.0.0 +add_library(GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_bkp.c" +) +target_include_directories(GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc" +) +target_compile_definitions(GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_GD32C10x_StdPeripherals_BKP_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:GD32C10x_StdPeripherals:CAN@1.0.0 +add_library(GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_can.c" +) +target_include_directories(GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc" +) +target_compile_definitions(GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_GD32C10x_StdPeripherals_CAN_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:GD32C10x_StdPeripherals:CRC@1.0.0 +add_library(GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_crc.c" +) +target_include_directories(GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc" +) +target_compile_definitions(GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_GD32C10x_StdPeripherals_CRC_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:GD32C10x_StdPeripherals:DBG@1.0.0 +add_library(GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dbg.c" +) +target_include_directories(GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc" +) +target_compile_definitions(GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_GD32C10x_StdPeripherals_DBG_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:GD32C10x_StdPeripherals:DMA@1.0.0 +add_library(GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_dma.c" +) +target_include_directories(GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc" +) +target_compile_definitions(GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_GD32C10x_StdPeripherals_DMA_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:GD32C10x_StdPeripherals:EXTI@1.0.0 +add_library(GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_exti.c" +) +target_include_directories(GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc" +) +target_compile_definitions(GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_GD32C10x_StdPeripherals_EXTI_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:GD32C10x_StdPeripherals:FMC@1.0.0 +add_library(GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fmc.c" +) +target_include_directories(GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc" +) +target_compile_definitions(GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_GD32C10x_StdPeripherals_FMC_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:GD32C10x_StdPeripherals:FWDGT@1.0.0 +add_library(GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_fwdgt.c" +) +target_include_directories(GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc" +) +target_compile_definitions(GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_GD32C10x_StdPeripherals_FWDGT_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:GD32C10x_StdPeripherals:GPIO@1.0.0 +add_library(GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_gpio.c" +) +target_include_directories(GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc" +) +target_compile_definitions(GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_GD32C10x_StdPeripherals_GPIO_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:GD32C10x_StdPeripherals:MISC@1.0.0 +add_library(GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_misc.c" +) +target_include_directories(GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc" +) +target_compile_definitions(GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_GD32C10x_StdPeripherals_MISC_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:GD32C10x_StdPeripherals:PMU@1.0.0 +add_library(GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_pmu.c" +) +target_include_directories(GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc" +) +target_compile_definitions(GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_GD32C10x_StdPeripherals_PMU_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:GD32C10x_StdPeripherals:RCU@1.0.0 +add_library(GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_rcu.c" +) +target_include_directories(GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc" +) +target_compile_definitions(GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_GD32C10x_StdPeripherals_RCU_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:GD32C10x_StdPeripherals:USART@1.0.0 +add_library(GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/gd32c10x_usart.c" +) +target_include_directories(GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Firmware/Peripherals/inc" +) +target_compile_definitions(GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_GD32C10x_StdPeripherals_USART_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:GD32C10x_libopt@1.0.0 +add_library(GigaDevice_Device_GD32C10x_libopt_1_0_0 INTERFACE) +target_include_directories(GigaDevice_Device_GD32C10x_libopt_1_0_0 INTERFACE + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include" +) +target_compile_definitions(GigaDevice_Device_GD32C10x_libopt_1_0_0 INTERFACE + $ +) +target_link_libraries(GigaDevice_Device_GD32C10x_libopt_1_0_0 INTERFACE + ${CONTEXT}_ABSTRACTIONS +) + +# component GigaDevice::Device:Startup@1.0.0 +add_library(GigaDevice_Device_Startup_1_0_0 OBJECT + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.s" + "${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/system_gd32c10x.c" +) +target_include_directories(GigaDevice_Device_Startup_1_0_0 PUBLIC + $ + "${CMSIS_PACK_ROOT}/GigaDevice/GD32C10x_DFP/1.0.1/Device/Include" +) +target_compile_definitions(GigaDevice_Device_Startup_1_0_0 PUBLIC + $ +) +target_compile_options(GigaDevice_Device_Startup_1_0_0 PUBLIC + $ +) +target_link_libraries(GigaDevice_Device_Startup_1_0_0 PUBLIC + ${CONTEXT}_ABSTRACTIONS +) +set(COMPILE_DEFINITIONS + GD32C10x + _RTE_ +) +cbuild_set_defines(AS_ARM COMPILE_DEFINITIONS) +set_source_files_properties("${SOLUTION_ROOT}/Robot_V2/RTE/Device/GD32C103CB/startup_gd32c10x.s" PROPERTIES + COMPILE_FLAGS "${COMPILE_DEFINITIONS}" +) diff --git a/tmp/Robot_V2.Release+GD32C103CB/groups.cmake b/tmp/Robot_V2.Release+GD32C103CB/groups.cmake new file mode 100644 index 0000000..5755c55 --- /dev/null +++ b/tmp/Robot_V2.Release+GD32C103CB/groups.cmake @@ -0,0 +1,70 @@ +# groups.cmake + +# group Source Files +add_library(Group_Source_Files OBJECT + "${SOLUTION_ROOT}/Robot_V2/main.cpp" +) +target_include_directories(Group_Source_Files PUBLIC + $ + "${SOLUTION_ROOT}/Robot_V2" +) +target_compile_definitions(Group_Source_Files PUBLIC + $ +) +add_library(Group_Source_Files_ABSTRACTIONS INTERFACE) +target_link_libraries(Group_Source_Files_ABSTRACTIONS INTERFACE + ${CONTEXT}_ABSTRACTIONS +) +target_compile_options(Group_Source_Files PUBLIC + $ +) +target_link_libraries(Group_Source_Files PUBLIC + Group_Source_Files_ABSTRACTIONS +) + +# group sys +add_library(Group_sys OBJECT + "${SOLUTION_ROOT}/Robot_V2/sys/systick.cpp" + "${SOLUTION_ROOT}/Robot_V2/sys/initial.cpp" + "${SOLUTION_ROOT}/Robot_V2/sys/flash.cpp" + "${SOLUTION_ROOT}/Robot_V2/sys/OTA.cpp" +) +target_include_directories(Group_sys PUBLIC + $ + "${SOLUTION_ROOT}/Robot_V2/sys" +) +target_compile_definitions(Group_sys PUBLIC + $ +) +add_library(Group_sys_ABSTRACTIONS INTERFACE) +target_link_libraries(Group_sys_ABSTRACTIONS INTERFACE + ${CONTEXT}_ABSTRACTIONS +) +target_compile_options(Group_sys PUBLIC + $ +) +target_link_libraries(Group_sys PUBLIC + Group_sys_ABSTRACTIONS +) + +# group device +add_library(Group_device OBJECT + "${SOLUTION_ROOT}/Robot_V2/device/Can.cpp" +) +target_include_directories(Group_device PUBLIC + $ + "${SOLUTION_ROOT}/Robot_V2/device" +) +target_compile_definitions(Group_device PUBLIC + $ +) +add_library(Group_device_ABSTRACTIONS INTERFACE) +target_link_libraries(Group_device_ABSTRACTIONS INTERFACE + ${CONTEXT}_ABSTRACTIONS +) +target_compile_options(Group_device PUBLIC + $ +) +target_link_libraries(Group_device PUBLIC + Group_device_ABSTRACTIONS +) diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure new file mode 100644 index 0000000..e69de29 diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-.cmake b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-.cmake new file mode 100644 index 0000000..50c4221 --- /dev/null +++ b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-.cmake @@ -0,0 +1,56 @@ + +cmake_minimum_required(VERSION ${CMAKE_VERSION}) # this file comes with cmake + +set(command "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/bin/cmake.exe;-G;Ninja;-S;G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB;-B;G:/Robot_v2/BOOT/tmp/1;-DSOLUTION_ROOT=G:/Robot_v2/BOOT;-DCMSIS_PACK_ROOT=C:/Users/cbb/AppData/Local/arm/packs;-DCMSIS_COMPILER_ROOT=C:/Users/cbb/.vscode/extensions/arm.cmsis-csolution-1.64.1-win32-x64/tools/cmsis-toolbox/etc") +set(log_merged "") +set(log_output_on_failure "ON") +set(stdout_log "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-out.log") +set(stderr_log "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-err.log") +execute_process( + COMMAND ${command} + RESULT_VARIABLE result + OUTPUT_FILE "${stdout_log}" + ERROR_FILE "${stderr_log}" +) +macro(read_up_to_max_size log_file output_var) + file(SIZE ${log_file} determined_size) + set(max_size 10240) + if (determined_size GREATER max_size) + math(EXPR seek_position "${determined_size} - ${max_size}") + file(READ ${log_file} ${output_var} OFFSET ${seek_position}) + set(${output_var} "...skipping to end...\n${${output_var}}") + else() + file(READ ${log_file} ${output_var}) + endif() +endmacro() +if(result) + set(msg "Command failed: ${result}\n") + foreach(arg IN LISTS command) + set(msg "${msg} '${arg}'") + endforeach() + if (${log_merged}) + set(msg "${msg}\nSee also\n ${stderr_log}") + else() + set(msg "${msg}\nSee also\n G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-*.log") + endif() + if (${log_output_on_failure}) + message(SEND_ERROR "${msg}") + if (${log_merged}) + read_up_to_max_size("${stderr_log}" error_log_contents) + message(STATUS "Log output is:\n${error_log_contents}") + else() + read_up_to_max_size("${stdout_log}" out_log_contents) + read_up_to_max_size("${stderr_log}" err_log_contents) + message(STATUS "stdout output is:\n${out_log_contents}") + message(STATUS "stderr output is:\n${err_log_contents}") + endif() + message(FATAL_ERROR "Stopping after outputting logs.") + else() + message(FATAL_ERROR "${msg}") + endif() +else() + if(NOT "Ninja" MATCHES "Ninja") + set(msg "Robot_V2.Release+GD32C103CB configure command succeeded. See also G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-*.log") + message(STATUS "${msg}") + endif() +endif() diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-err.log b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-err.log new file mode 100644 index 0000000..e69de29 diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-out.log b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-out.log new file mode 100644 index 0000000..8cbaab3 --- /dev/null +++ b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-out.log @@ -0,0 +1,17 @@ +-- The CXX compiler identification is ARMClang 6.24.0 +-- The C compiler identification is ARMClang 6.24.0 +-- The ASM compiler identification is ARMClang +-- Found assembler: c:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/bin/armclang.exe +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Check for working CXX compiler: c:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/bin/armclang.exe - skipped +-- Detecting CXX compile features +-- Detecting CXX compile features - done +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working C compiler: c:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/bin/armclang.exe - skipped +-- Detecting C compile features +-- Detecting C compile features - done +-- Configuring done (7.8s) +-- Generating done (0.1s) +-- Build files have been written to: G:/Robot_v2/BOOT/tmp/1 diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-.cmake b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-.cmake new file mode 100644 index 0000000..6161ebf --- /dev/null +++ b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-.cmake @@ -0,0 +1,56 @@ + +cmake_minimum_required(VERSION ${CMAKE_VERSION}) # this file comes with cmake + +set(command "C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/bin/cmake.exe;--build;G:/Robot_v2/BOOT/tmp/1;--target;database") +set(log_merged "") +set(log_output_on_failure "ON") +set(stdout_log "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-out.log") +set(stderr_log "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-err.log") +execute_process( + COMMAND ${command} + RESULT_VARIABLE result + OUTPUT_FILE "${stdout_log}" + ERROR_FILE "${stderr_log}" +) +macro(read_up_to_max_size log_file output_var) + file(SIZE ${log_file} determined_size) + set(max_size 10240) + if (determined_size GREATER max_size) + math(EXPR seek_position "${determined_size} - ${max_size}") + file(READ ${log_file} ${output_var} OFFSET ${seek_position}) + set(${output_var} "...skipping to end...\n${${output_var}}") + else() + file(READ ${log_file} ${output_var}) + endif() +endmacro() +if(result) + set(msg "Command failed: ${result}\n") + foreach(arg IN LISTS command) + set(msg "${msg} '${arg}'") + endforeach() + if (${log_merged}) + set(msg "${msg}\nSee also\n ${stderr_log}") + else() + set(msg "${msg}\nSee also\n G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-*.log") + endif() + if (${log_output_on_failure}) + message(SEND_ERROR "${msg}") + if (${log_merged}) + read_up_to_max_size("${stderr_log}" error_log_contents) + message(STATUS "Log output is:\n${error_log_contents}") + else() + read_up_to_max_size("${stdout_log}" out_log_contents) + read_up_to_max_size("${stderr_log}" err_log_contents) + message(STATUS "stdout output is:\n${out_log_contents}") + message(STATUS "stderr output is:\n${err_log_contents}") + endif() + message(FATAL_ERROR "Stopping after outputting logs.") + else() + message(FATAL_ERROR "${msg}") + endif() +else() + if(NOT "Ninja" MATCHES "Ninja") + set(msg "Robot_V2.Release+GD32C103CB database command succeeded. See also G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-*.log") + message(STATUS "${msg}") + endif() +endif() diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-err.log b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-err.log new file mode 100644 index 0000000..e69de29 diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-out.log b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-out.log new file mode 100644 index 0000000..3da3bad --- /dev/null +++ b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-out.log @@ -0,0 +1 @@ +[1/1] C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp\1 && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E make_directory G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E copy_if_different G:/Robot_v2/BOOT/tmp/1/compile_commands.json G:/Robot_v2/BOOT/out/Robot_V2/GD32C103CB/Release" diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-done b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-done new file mode 100644 index 0000000..e69de29 diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-download b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-download new file mode 100644 index 0000000..e69de29 diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-executes b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-executes new file mode 100644 index 0000000..e69de29 diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-mkdir b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-mkdir new file mode 100644 index 0000000..e69de29 diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch new file mode 100644 index 0000000..e69de29 diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch-info.txt b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch-info.txt new file mode 100644 index 0000000..53e1e1e --- /dev/null +++ b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch-info.txt @@ -0,0 +1,6 @@ +# This is a generated file and its contents are an internal implementation detail. +# The update step will be re-executed if anything in this file changes. +# No other meaning or use of this file is supported. + +command= +work_dir= diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-source_dirinfo.txt b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-source_dirinfo.txt new file mode 100644 index 0000000..c057e85 --- /dev/null +++ b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-source_dirinfo.txt @@ -0,0 +1,9 @@ +# This is a generated file and its contents are an internal implementation detail. +# The download step will be re-executed if anything in this file changes. +# No other meaning or use of this file is supported. + +method=source_dir +command= +source_dir=G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB +work_dir= + diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-test b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-test new file mode 100644 index 0000000..e69de29 diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update new file mode 100644 index 0000000..e69de29 diff --git a/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update-info.txt b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update-info.txt new file mode 100644 index 0000000..31617d1 --- /dev/null +++ b/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update-info.txt @@ -0,0 +1,7 @@ +# This is a generated file and its contents are an internal implementation detail. +# The patch step will be re-executed if anything in this file changes. +# No other meaning or use of this file is supported. + +command (connected)= +command (disconnected)= +work_dir= diff --git a/tmp/Robot_V2.Release+GD32C103CB/tmp/Robot_V2.Release+GD32C103CB-cfgcmd.txt b/tmp/Robot_V2.Release+GD32C103CB/tmp/Robot_V2.Release+GD32C103CB-cfgcmd.txt new file mode 100644 index 0000000..e915b55 --- /dev/null +++ b/tmp/Robot_V2.Release+GD32C103CB/tmp/Robot_V2.Release+GD32C103CB-cfgcmd.txt @@ -0,0 +1 @@ +cmd='C:/Users/cbb/.vcpkg/artifacts/2139c4c6/tools.kitware.cmake/3.31.5/bin/cmake.exe;-G;Ninja;-S;;-B;;-DSOLUTION_ROOT=G:/Robot_v2/BOOT;-DCMSIS_PACK_ROOT=C:/Users/cbb/AppData/Local/arm/packs;-DCMSIS_COMPILER_ROOT=C:/Users/cbb/.vscode/extensions/arm.cmsis-csolution-1.64.1-win32-x64/tools/cmsis-toolbox/etc' diff --git a/tmp/Robot_V2.Release+GD32C103CB/tmp/Robot_V2.Release+GD32C103CB-mkdirs.cmake b/tmp/Robot_V2.Release+GD32C103CB/tmp/Robot_V2.Release+GD32C103CB-mkdirs.cmake new file mode 100644 index 0000000..f235e5b --- /dev/null +++ b/tmp/Robot_V2.Release+GD32C103CB/tmp/Robot_V2.Release+GD32C103CB-mkdirs.cmake @@ -0,0 +1,27 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +cmake_minimum_required(VERSION ${CMAKE_VERSION}) # this file comes with cmake + +# If CMAKE_DISABLE_SOURCE_CHANGES is set to true and the source directory is an +# existing directory in our source tree, calling file(MAKE_DIRECTORY) on it +# would cause a fatal error, even though it would be a no-op. +if(NOT EXISTS "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB") + file(MAKE_DIRECTORY "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB") +endif() +file(MAKE_DIRECTORY + "G:/Robot_v2/BOOT/tmp/1" + "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB" + "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/tmp" + "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp" + "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src" + "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp" +) + +set(configSubDirs ) +foreach(subDir IN LISTS configSubDirs) + file(MAKE_DIRECTORY "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/${subDir}") +endforeach() +if(cfgdir) + file(MAKE_DIRECTORY "G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp${cfgdir}") # cfgdir has leading slash +endif() diff --git a/tmp/Robot_V2.Release+GD32C103CB/toolchain.cmake b/tmp/Robot_V2.Release+GD32C103CB/toolchain.cmake new file mode 100644 index 0000000..53ea12a --- /dev/null +++ b/tmp/Robot_V2.Release+GD32C103CB/toolchain.cmake @@ -0,0 +1,6 @@ +# toolchain.cmake + +set(REGISTERED_TOOLCHAIN_ROOT "c:/Users/cbb/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.24.0/bin/") +set(REGISTERED_TOOLCHAIN_VERSION "6.24.0") +include("${CMSIS_COMPILER_ROOT}/AC6.6.16.2.cmake") + diff --git a/tmp/build.ninja b/tmp/build.ninja new file mode 100644 index 0000000..546fc8f --- /dev/null +++ b/tmp/build.ninja @@ -0,0 +1,272 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Ninja" Generator, CMake Version 3.31 + +# This file contains all the build statements describing the +# compilation DAG. + +# ============================================================================= +# Write statements declared in CMakeLists.txt: +# +# Which is the root file. +# ============================================================================= + +# ============================================================================= +# Project: Robot_V2 +# Configurations: +# ============================================================================= + +############################################# +# Minimal version of Ninja required by this file + +ninja_required_version = 1.5 + +# ============================================================================= +# Include auxiliary files. + + +############################################# +# Include rules file. + +include CMakeFiles\rules.ninja + +# ============================================================================= + +############################################# +# Logical path to working directory; prefix for absolute paths. + +cmake_ninja_workdir = G$:\Robot_v2\BOOT\tmp\ + +############################################# +# Utility command for database + +build database: phony Robot_V2.Release+GD32C103CB-database + + +############################################# +# Utility command for Robot_V2.Release+GD32C103CB + +build Robot_V2.Release+GD32C103CB: phony CMakeFiles\Robot_V2.Release+GD32C103CB CMakeFiles\Robot_V2.Release+GD32C103CB-complete Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-done Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-build G$:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.axf G$:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.hex G$:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.axf.map Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-configure Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-database Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-download Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-executes Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-install Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-mkdir Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-patch Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-test Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-update Robot_V2.Release+GD32C103CB-build Robot_V2.Release+GD32C103CB-configure Robot_V2.Release+GD32C103CB-database Robot_V2.Release+GD32C103CB-executes + + +############################################# +# Utility command for Robot_V2.Release+GD32C103CB-build + +build Robot_V2.Release+GD32C103CB-build: phony CMakeFiles\Robot_V2.Release+GD32C103CB-build Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-build G$:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.axf G$:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.hex G$:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.axf.map Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-configure Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-patch Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-update Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-download Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-mkdir Robot_V2.Release+GD32C103CB-configure + + +############################################# +# Utility command for Robot_V2.Release+GD32C103CB-configure + +build Robot_V2.Release+GD32C103CB-configure: phony CMakeFiles\Robot_V2.Release+GD32C103CB-configure Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-configure Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-patch Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-update Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-download Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-mkdir + + +############################################# +# Utility command for Robot_V2.Release+GD32C103CB-executes + +build Robot_V2.Release+GD32C103CB-executes: phony CMakeFiles\Robot_V2.Release+GD32C103CB-executes Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-executes Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-build G$:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.axf G$:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.hex G$:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.axf.map Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-configure Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-patch Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-update Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-download Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-mkdir Robot_V2.Release+GD32C103CB-build + + +############################################# +# Utility command for Robot_V2.Release+GD32C103CB-database + +build Robot_V2.Release+GD32C103CB-database: phony CMakeFiles\Robot_V2.Release+GD32C103CB-database Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-database Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-configure Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-patch Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-update Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-download Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-mkdir Robot_V2.Release+GD32C103CB-configure + + +############################################# +# Utility command for edit_cache + +build CMakeFiles\edit_cache.util: CUSTOM_COMMAND + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake-gui.exe -SG:\Robot_v2\BOOT\tmp -BG:\Robot_v2\BOOT\tmp" + DESC = Running CMake cache editor... + pool = console + restat = 1 + +build edit_cache: phony CMakeFiles\edit_cache.util + + +############################################# +# Utility command for rebuild_cache + +build CMakeFiles\rebuild_cache.util: CUSTOM_COMMAND + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe --regenerate-during-build -SG:\Robot_v2\BOOT\tmp -BG:\Robot_v2\BOOT\tmp" + DESC = Running CMake to regenerate build system... + pool = console + restat = 1 + +build rebuild_cache: phony CMakeFiles\rebuild_cache.util + + +############################################# +# Phony custom command for CMakeFiles\Robot_V2.Release+GD32C103CB + +build CMakeFiles\Robot_V2.Release+GD32C103CB | ${cmake_ninja_workdir}CMakeFiles\Robot_V2.Release+GD32C103CB: phony CMakeFiles\Robot_V2.Release+GD32C103CB-complete || Robot_V2.Release+GD32C103CB-build Robot_V2.Release+GD32C103CB-configure Robot_V2.Release+GD32C103CB-database Robot_V2.Release+GD32C103CB-executes + + +############################################# +# Custom command for CMakeFiles\Robot_V2.Release+GD32C103CB-complete + +build CMakeFiles\Robot_V2.Release+GD32C103CB-complete Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-done | ${cmake_ninja_workdir}CMakeFiles\Robot_V2.Release+GD32C103CB-complete ${cmake_ninja_workdir}Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-done: CUSTOM_COMMAND Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-install Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-mkdir Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-download Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-update Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-patch Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-configure Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-build Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-install Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-test Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-executes Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-database || Robot_V2.Release+GD32C103CB-build Robot_V2.Release+GD32C103CB-configure Robot_V2.Release+GD32C103CB-database Robot_V2.Release+GD32C103CB-executes + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E make_directory G:/Robot_v2/BOOT/tmp/CMakeFiles && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E touch G:/Robot_v2/BOOT/tmp/CMakeFiles/Robot_V2.Release+GD32C103CB-complete && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E touch G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-done" + DESC = Completed 'Robot_V2.Release+GD32C103CB' + restat = 1 + + +############################################# +# Custom command for Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-build + +build Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-build G$:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.axf G$:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.hex G$:\Robot_v2\BOOT\out\Robot_V2\GD32C103CB\Release\Robot_V2.axf.map | ${cmake_ninja_workdir}Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-build: CUSTOM_COMMAND Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-configure || Robot_V2.Release+GD32C103CB-configure + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp\1 && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E echo "Building CMake target 'Robot_V2.Release+GD32C103CB'" && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe --build G:/Robot_v2/BOOT/tmp/1" + DESC = Performing build step for 'Robot_V2.Release+GD32C103CB' + pool = console + restat = 1 + + +############################################# +# Custom command for Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-configure + +build Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-configure | ${cmake_ninja_workdir}Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-configure: CUSTOM_COMMAND Robot_V2.Release+GD32C103CB\tmp\Robot_V2.Release+GD32C103CB-cfgcmd.txt Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-patch + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp\1 && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -P G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure-.cmake && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E touch G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-configure" + DESC = Performing configure step for 'Robot_V2.Release+GD32C103CB' + restat = 1 + + +############################################# +# Custom command for Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-database + +build Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-database | ${cmake_ninja_workdir}Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-database: CUSTOM_COMMAND Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-configure || Robot_V2.Release+GD32C103CB-configure + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -P G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-database-.cmake" + DESC = Performing database step for 'Robot_V2.Release+GD32C103CB' + pool = console + + +############################################# +# Custom command for Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-download + +build Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-download | ${cmake_ninja_workdir}Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-download: CUSTOM_COMMAND Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-source_dirinfo.txt Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-mkdir + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E echo_append && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E touch G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-download" + DESC = No download step for 'Robot_V2.Release+GD32C103CB' + restat = 1 + + +############################################# +# Custom command for Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-executes + +build Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-executes | ${cmake_ninja_workdir}Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-executes: CUSTOM_COMMAND Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-build || Robot_V2.Release+GD32C103CB-build Robot_V2.Release+GD32C103CB-configure + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E echo_append && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E touch G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-executes" + DESC = No executes step for 'Robot_V2.Release+GD32C103CB' + restat = 1 + + +############################################# +# Custom command for Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-install + +build Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-install | ${cmake_ninja_workdir}Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-install: CUSTOM_COMMAND Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-build || Robot_V2.Release+GD32C103CB-build Robot_V2.Release+GD32C103CB-configure Robot_V2.Release+GD32C103CB-database Robot_V2.Release+GD32C103CB-executes + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp\1 && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E echo_append" + DESC = No install step for 'Robot_V2.Release+GD32C103CB' + + +############################################# +# Custom command for Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-mkdir + +build Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-mkdir | ${cmake_ninja_workdir}Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-mkdir: CUSTOM_COMMAND + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -Dcfgdir= -P G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/tmp/Robot_V2.Release+GD32C103CB-mkdirs.cmake && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E touch G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-mkdir" + DESC = Creating directories for 'Robot_V2.Release+GD32C103CB' + restat = 1 + + +############################################# +# Custom command for Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-patch + +build Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-patch | ${cmake_ninja_workdir}Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-patch: CUSTOM_COMMAND Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-patch-info.txt Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-update + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E echo_append && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E touch G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-patch" + DESC = No patch step for 'Robot_V2.Release+GD32C103CB' + restat = 1 + + +############################################# +# Custom command for Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-test + +build Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-test | ${cmake_ninja_workdir}Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-test: CUSTOM_COMMAND Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-install || Robot_V2.Release+GD32C103CB-build Robot_V2.Release+GD32C103CB-configure Robot_V2.Release+GD32C103CB-database Robot_V2.Release+GD32C103CB-executes + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp\1 && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E echo_append && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E touch G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-test" + DESC = No test step for 'Robot_V2.Release+GD32C103CB' + restat = 1 + + +############################################# +# Custom command for Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-update + +build Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-update | ${cmake_ninja_workdir}Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-update: CUSTOM_COMMAND Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-update-info.txt Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-download + COMMAND = C:\WINDOWS\system32\cmd.exe /C "cd /D G:\Robot_v2\BOOT\tmp && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E echo_append && C:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\bin\cmake.exe -E touch G:/Robot_v2/BOOT/tmp/Robot_V2.Release+GD32C103CB/src/Robot_V2.Release+GD32C103CB-stamp/Robot_V2.Release+GD32C103CB-update" + DESC = No update step for 'Robot_V2.Release+GD32C103CB' + restat = 1 + + +############################################# +# Phony custom command for CMakeFiles\Robot_V2.Release+GD32C103CB-build + +build CMakeFiles\Robot_V2.Release+GD32C103CB-build | ${cmake_ninja_workdir}CMakeFiles\Robot_V2.Release+GD32C103CB-build: phony Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-build || Robot_V2.Release+GD32C103CB-configure + + +############################################# +# Phony custom command for CMakeFiles\Robot_V2.Release+GD32C103CB-configure + +build CMakeFiles\Robot_V2.Release+GD32C103CB-configure | ${cmake_ninja_workdir}CMakeFiles\Robot_V2.Release+GD32C103CB-configure: phony Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-configure + + +############################################# +# Phony custom command for CMakeFiles\Robot_V2.Release+GD32C103CB-executes + +build CMakeFiles\Robot_V2.Release+GD32C103CB-executes | ${cmake_ninja_workdir}CMakeFiles\Robot_V2.Release+GD32C103CB-executes: phony Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-executes || Robot_V2.Release+GD32C103CB-build Robot_V2.Release+GD32C103CB-configure + + +############################################# +# Phony custom command for CMakeFiles\Robot_V2.Release+GD32C103CB-database + +build CMakeFiles\Robot_V2.Release+GD32C103CB-database | ${cmake_ninja_workdir}CMakeFiles\Robot_V2.Release+GD32C103CB-database: phony Robot_V2.Release+GD32C103CB\src\Robot_V2.Release+GD32C103CB-stamp\Robot_V2.Release+GD32C103CB-database || Robot_V2.Release+GD32C103CB-configure + +# ============================================================================= +# Target aliases. + +# ============================================================================= +# Folder targets. + +# ============================================================================= + +############################################# +# Folder: G:/Robot_v2/BOOT/tmp + +build all: phony Robot_V2.Release+GD32C103CB + +# ============================================================================= +# Built-in targets + + +############################################# +# Re-run CMake if any of its inputs changed. + +build build.ninja: RERUN_CMAKE | C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\CMakeGenericSystem.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\CMakeInitializeConfigs.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\CMakeSystemSpecificInformation.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\CMakeSystemSpecificInitialize.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\ExternalProject.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\ExternalProject\PatchInfo.txt.in C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\ExternalProject\RepositoryInfo.txt.in C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\ExternalProject\UpdateInfo.txt.in C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\ExternalProject\cfgcmd.txt.in C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\ExternalProject\mkdirs.cmake.in C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\ExternalProject\shared_internal_commands.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\Platform\Windows-Initialize.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\Platform\Windows.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\Platform\WindowsPaths.cmake CMakeCache.txt CMakeFiles\3.31.5\CMakeSystem.cmake CMakeLists.txt Robot_V2.Release+GD32C103CB\tmp\Robot_V2.Release+GD32C103CB-mkdirs.cmake roots.cmake + pool = console + + +############################################# +# A missing CMake input file is not an error. + +build C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\CMakeGenericSystem.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\CMakeInitializeConfigs.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\CMakeSystemSpecificInformation.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\CMakeSystemSpecificInitialize.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\ExternalProject.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\ExternalProject\PatchInfo.txt.in C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\ExternalProject\RepositoryInfo.txt.in C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\ExternalProject\UpdateInfo.txt.in C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\ExternalProject\cfgcmd.txt.in C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\ExternalProject\mkdirs.cmake.in C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\ExternalProject\shared_internal_commands.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\Platform\Windows-Initialize.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\Platform\Windows.cmake C$:\Users\cbb\.vcpkg\artifacts\2139c4c6\tools.kitware.cmake\3.31.5\share\cmake-3.31\Modules\Platform\WindowsPaths.cmake CMakeCache.txt CMakeFiles\3.31.5\CMakeSystem.cmake CMakeLists.txt Robot_V2.Release+GD32C103CB\tmp\Robot_V2.Release+GD32C103CB-mkdirs.cmake roots.cmake: phony + + +############################################# +# Clean all the built files. + +build clean: CLEAN + + +############################################# +# Print all primary targets available. + +build help: HELP + + +############################################# +# Make the all target the default. + +default all diff --git a/tmp/cmake_install.cmake b/tmp/cmake_install.cmake new file mode 100644 index 0000000..a359f93 --- /dev/null +++ b/tmp/cmake_install.cmake @@ -0,0 +1,56 @@ +# Install script for directory: G:/Robot_v2/BOOT/tmp + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "C:/Program Files (x86)/Robot_V2") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +if(CMAKE_INSTALL_LOCAL_ONLY) + file(WRITE "G:/Robot_v2/BOOT/tmp/install_local_manifest.txt" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") +endif() +if(CMAKE_INSTALL_COMPONENT) + if(CMAKE_INSTALL_COMPONENT MATCHES "^[a-zA-Z0-9_.+-]+$") + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") + else() + string(MD5 CMAKE_INST_COMP_HASH "${CMAKE_INSTALL_COMPONENT}") + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INST_COMP_HASH}.txt") + unset(CMAKE_INST_COMP_HASH) + endif() +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + file(WRITE "G:/Robot_v2/BOOT/tmp/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") +endif() diff --git a/tmp/roots.cmake b/tmp/roots.cmake new file mode 100644 index 0000000..f2477e2 --- /dev/null +++ b/tmp/roots.cmake @@ -0,0 +1,7 @@ +# roots.cmake +set(CMSIS_PACK_ROOT "C:/Users/cbb/AppData/Local/arm/packs" CACHE PATH "CMSIS pack root") +cmake_path(ABSOLUTE_PATH CMSIS_PACK_ROOT NORMALIZE OUTPUT_VARIABLE CMSIS_PACK_ROOT) +set(CMSIS_COMPILER_ROOT "C:/Users/cbb/.vscode/extensions/arm.cmsis-csolution-1.64.1-win32-x64/tools/cmsis-toolbox/etc" CACHE PATH "CMSIS compiler root") +cmake_path(ABSOLUTE_PATH CMSIS_COMPILER_ROOT NORMALIZE OUTPUT_VARIABLE CMSIS_COMPILER_ROOT) +set(SOLUTION_ROOT "G:/Robot_v2/BOOT" CACHE PATH "CMSIS solution root") +cmake_path(ABSOLUTE_PATH SOLUTION_ROOT NORMALIZE OUTPUT_VARIABLE SOLUTION_ROOT) diff --git a/vcpkg-configuration.json b/vcpkg-configuration.json new file mode 100644 index 0000000..4024b20 --- /dev/null +++ b/vcpkg-configuration.json @@ -0,0 +1,16 @@ +{ + "registries": [ + { + "name": "arm", + "kind": "artifact", + "location": "https://artifacts.tools.arm.com/vcpkg-registry" + } + ], + "requires": { + "arm:tools/open-cmsis-pack/cmsis-toolbox": "2.12.0", + "arm:tools/kitware/cmake": "3.31.5", + "arm:tools/ninja-build/ninja": "1.12.1", + "arm:tools/arm/mdk-toolbox": "1.1.0", + "arm:compilers/arm/armclang": "6.24.0" + } +} \ No newline at end of file