From bf10cec2f12aa37403067e5e7ff588bafcf1d9d3 Mon Sep 17 00:00:00 2001 From: Matthias Hertel Date: Tue, 7 May 2024 10:38:13 +0200 Subject: [PATCH] Updates for 24.02 - Test Framework removed / needs update first - Added Hello World csolution for simple integration test - Signal library added to pack - devcontainer using Arm-MLOps docker environment - tasks for VSC --- .devcontainer/Dockerfile | 4 +- tensorflow-build/README.md | 79 +- tensorflow-build/build.sh | 29 - tensorflow-build/build_d.sh | 8 +- tensorflow-build/build_r.sh | 47 +- tensorflow-build/clean_file_list.py | 13 +- tensorflow-build/generate_cmsis_pack.py | 11 +- tensorflow-build/template/cmsis_pdsc.tpl | 16 +- .../App/Validation_CMSIS-NN/App.clayer.yml | 46 - .../RTE/Machine_Learning/debug_log.cpp | 43 - .../RTE/Machine_Learning/micro_time.cpp | 67 - .../RTE/Machine_Learning/system_setup.cpp | 36 - .../arm_nn_softmax_common_s8.c | 141 -- .../App/Validation_CMSIS-NN/retarget_stdio.c | 115 -- .../App/Validation_Reference/App.clayer.yml | 44 - .../RTE/Machine_Learning/micro_time.cpp | 67 - .../RTE/Machine_Learning/system_setup.cpp | 36 - .../Layer/App/Validation_Reference/main.c | 37 - .../App/Validation_Reference/retarget_stdio.c | 115 -- .../RTE/Device/CMSDK_CM0plus_VHT/RTE_Device.h | 50 - .../RTE/Device/CMSDK_CM0plus_VHT/ac6_arm.sct | 76 - .../CMSDK_CM0plus_VHT/startup_CMSDK_CM0plus.c | 218 --- .../CMSDK_CM0plus_VHT/system_CMSDK_CM0plus.c | 74 - .../Target/CM0plus_VHT_AC6/Target.clayer.yml | 22 - .../Target/CM0plus_VHT_AC6/vht_config.txt | 8 - .../RTE/Device/CMSDK_CM0plus_VHT/RTE_Device.h | 50 - .../RTE/Device/CMSDK_CM0plus_VHT/gcc_arm.ld | 279 --- .../CMSDK_CM0plus_VHT/startup_CMSDK_CM0plus.c | 218 --- .../CMSDK_CM0plus_VHT/system_CMSDK_CM0plus.c | 74 - .../Target/CM0plus_VHT_GCC/Target.clayer.yml | 22 - .../Target/CM0plus_VHT_GCC/vht_config.txt | 8 - .../RTE/Device/IOTKit_CM23_VHT/RTE_Device.h | 50 - .../IOTKit_CM23_VHT/partition_IOTKit_CM23.h | 585 ------ .../IOTKit_CM23_VHT/startup_IOTKit_CM23.c | 506 ----- .../IOTKit_CM23_VHT/system_IOTKit_CM23.c | 132 -- .../Target/CM23_VHT_AC6/Target.clayer.yml | 22 - .../Layer/Target/CM23_VHT_AC6/vht_config.txt | 27 - .../RTE/Device/IOTKit_CM23_VHT/RTE_Device.h | 50 - .../RTE/Device/IOTKit_CM23_VHT/gcc_arm.ld | 301 --- .../IOTKit_CM23_VHT/partition_IOTKit_CM23.h | 585 ------ .../IOTKit_CM23_VHT/startup_IOTKit_CM23.c | 506 ----- .../IOTKit_CM23_VHT/system_IOTKit_CM23.c | 132 -- .../Target/CM23_VHT_GCC/Target.clayer.yml | 22 - .../Layer/Target/CM23_VHT_GCC/vht_config.txt | 27 - .../Device/IOTKit_CM33_FP_VHT/RTE_Device.h | 50 - .../partition_IOTKit_CM33.h | 637 ------- .../IOTKit_CM33_FP_VHT/startup_IOTKit_CM33.c | 513 ----- .../IOTKit_CM33_FP_VHT/system_IOTKit_CM33.c | 149 -- .../Target/CM33_FP_VHT_AC6/Target.clayer.yml | 22 - .../Target/CM33_FP_VHT_AC6/vht_config.txt | 33 - .../Device/IOTKit_CM33_FP_VHT/RTE_Device.h | 50 - .../RTE/Device/IOTKit_CM33_FP_VHT/gcc_arm.ld | 299 --- .../partition_IOTKit_CM33.h | 637 ------- .../IOTKit_CM33_FP_VHT/startup_IOTKit_CM33.c | 513 ----- .../IOTKit_CM33_FP_VHT/system_IOTKit_CM33.c | 149 -- .../Target/CM33_FP_VHT_GCC/Target.clayer.yml | 22 - .../Target/CM33_FP_VHT_GCC/vht_config.txt | 33 - .../RTE/Device/CMSDK_CM3_VHT/RTE_Device.h | 50 - .../RTE/Device/CMSDK_CM3_VHT/ac6_arm.sct | 76 - .../Device/CMSDK_CM3_VHT/startup_CMSDK_CM3.c | 421 ----- .../Device/CMSDK_CM3_VHT/system_CMSDK_CM3.c | 78 - .../Target/CM3_VHT_AC6/Target.clayer.yml | 22 - .../Layer/Target/CM3_VHT_AC6/vht_config.txt | 8 - .../RTE/Device/CMSDK_CM3_VHT/RTE_Device.h | 50 - .../RTE/Device/CMSDK_CM3_VHT/gcc_arm.ld | 279 --- .../Device/CMSDK_CM3_VHT/startup_CMSDK_CM3.c | 421 ----- .../Device/CMSDK_CM3_VHT/system_CMSDK_CM3.c | 78 - .../Target/CM3_VHT_GCC/Target.clayer.yml | 22 - .../Layer/Target/CM3_VHT_GCC/vht_config.txt | 8 - .../RTE/Device/CMSDK_CM4_FP_VHT/RTE_Device.h | 50 - .../RTE/Device/CMSDK_CM4_FP_VHT/ac6_arm.sct | 76 - .../CMSDK_CM4_FP_VHT/startup_CMSDK_CM4.c | 423 ----- .../CMSDK_CM4_FP_VHT/system_CMSDK_CM4.c | 85 - .../Target/CM4_FP_VHT_AC6/Target.clayer.yml | 22 - .../Target/CM4_FP_VHT_AC6/vht_config.txt | 8 - .../RTE/Device/CMSDK_CM4_FP_VHT/RTE_Device.h | 50 - .../RTE/Device/CMSDK_CM4_FP_VHT/gcc_arm.ld | 279 --- .../CMSDK_CM4_FP_VHT/startup_CMSDK_CM4.c | 423 ----- .../CMSDK_CM4_FP_VHT/system_CMSDK_CM4.c | 85 - .../Target/CM4_FP_VHT_GCC/Target.clayer.yml | 22 - .../Target/CM4_FP_VHT_GCC/vht_config.txt | 8 - .../RTE/Device/SSE-300-MPS3/RTE_Device.h | 84 - .../Device/SSE-300-MPS3/cmsis_driver_config.h | 25 - .../RTE/Device/SSE-300-MPS3/device_cfg.h | 149 -- .../Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct | 78 - .../SSE-300-MPS3/platform_base_address.h | 271 --- .../RTE/Device/SSE-300-MPS3/region_defs.h | 44 - .../RTE/Device/SSE-300-MPS3/region_limits.h | 45 - .../SSE-300-MPS3/startup_fvp_sse300_mps3.c | 344 ---- .../Device/SSE-300-MPS3/system_SSE300MPS3.h | 48 - .../Target/CM55_VHT_AC6/Target.clayer.yml | 27 - .../Layer/Target/CM55_VHT_AC6/vht_config.txt | 9 - .../RTE/Device/CMSDK_CM7_DP_VHT/RTE_Device.h | 50 - .../RTE/Device/CMSDK_CM7_DP_VHT/ac6_arm.sct | 76 - .../CMSDK_CM7_DP_VHT/startup_CMSDK_CM7.c | 425 ----- .../CMSDK_CM7_DP_VHT/system_CMSDK_CM7.c | 87 - .../Target/CM7_DP_VHT_AC6/Target.clayer.yml | 22 - .../Target/CM7_DP_VHT_AC6/vht_config.txt | 8 - .../RTE/Device/CMSDK_CM7_DP_VHT/RTE_Device.h | 50 - .../RTE/Device/CMSDK_CM7_DP_VHT/gcc_arm.ld | 279 --- .../CMSDK_CM7_DP_VHT/startup_CMSDK_CM7.c | 425 ----- .../CMSDK_CM7_DP_VHT/system_CMSDK_CM7.c | 87 - .../Target/CM7_DP_VHT_GCC/Target.clayer.yml | 22 - .../Target/CM7_DP_VHT_GCC/vht_config.txt | 8 - .../RTE/Device/CMSDK_CM7_SP_VHT/RTE_Device.h | 50 - .../RTE/Device/CMSDK_CM7_SP_VHT/ac6_arm.sct | 76 - .../CMSDK_CM7_SP_VHT/startup_CMSDK_CM7.c | 425 ----- .../CMSDK_CM7_SP_VHT/system_CMSDK_CM7.c | 87 - .../Target/CM7_SP_VHT_AC6/Target.clayer.yml | 22 - .../Target/CM7_SP_VHT_AC6/vht_config.txt | 8 - .../RTE/Device/CMSDK_CM7_SP_VHT/RTE_Device.h | 50 - .../RTE/Device/CMSDK_CM7_SP_VHT/gcc_arm.ld | 279 --- .../CMSDK_CM7_SP_VHT/startup_CMSDK_CM7.c | 425 ----- .../CMSDK_CM7_SP_VHT/system_CMSDK_CM7.c | 87 - .../Target/CM7_SP_VHT_GCC/Target.clayer.yml | 22 - .../Target/CM7_SP_VHT_GCC/vht_config.txt | 8 - tensorflow-test-ng/Layer/Test/Test.clayer.yml | 23 - .../Project/Validation.cproject.yml | 91 - .../Project/Validation.csolution.yml | 172 -- tensorflow-test-ng/avh.yml | 49 - tensorflow-test-ng/avh_exec_test.py | 56 - tensorflow-test-ng/copy_sources.py | 80 - tensorflow-test-ng/create_tests.py | 98 - tensorflow-test-ng/exec_suite.sh | 24 - tensorflow-test-ng/export_test_report.py | 36 - tensorflow-test-ng/generic_tests.yml | 44 - tensorflow-test-ng/kernel_tests_cmsis.yml | 203 -- tensorflow-test-ng/kernel_tests_ethos.yml | 203 -- tensorflow-test-ng/kernel_tests_reference.yml | 203 -- tensorflow-test-ng/record_test_results.py | 82 - tensorflow-test-ng/test_r.sh | 23 - tensorflow-test-ng/test_tests.yml | 12 - .../HelloWorld/HelloWorld.cbuild-idx.yml | 12 + .../HelloWorld/HelloWorld.cproject.yml | 47 + .../HelloWorld/HelloWorld.csolution.yml | 95 + .../HelloWorld.size+CM55.cbuild.yml | 736 ++++++++ .../HelloWorld/HelloWorld.size+CM55.cprj | 71 + .../RTE/Device/ARMCM55/ARMCM55_ac6.sct | 32 +- .../Device/ARMCM55/ARMCM55_ac6.sct.base@1.1.0 | 32 +- .../RTE/Device/ARMCM55/startup_ARMCM55.c | 164 ++ .../ARMCM55/startup_ARMCM55.c.base@1.1.0 | 164 ++ .../RTE/Device/ARMCM55/system_ARMCM55.c | 107 ++ .../ARMCM55/system_ARMCM55.c.base@1.1.0 | 107 ++ .../RTE/Machine_Learning/debug_log.cpp | 40 +- .../debug_log.cpp.base@1.24.2} | 38 +- .../RTE/Machine_Learning/micro_time.cpp | 80 + .../micro_time.cpp.base@1.24.2 | 80 + .../RTE/Machine_Learning/system_setup.cpp | 164 ++ .../system_setup.cpp.base@1.24.2} | 15 +- .../RTE/_size_CM55/Pre_Include_Global.h | 17 + .../RTE/_size_CM55/RTE_Components.h | 32 + tensorflow-test/HelloWorld/hello_world/BUILD | 84 + .../HelloWorld/hello_world/Makefile.inc | 37 + .../HelloWorld/hello_world/README.md | 94 + .../HelloWorld/hello_world/evaluate.py | 140 ++ .../HelloWorld/hello_world/evaluate_test.py | 64 + .../hello_world/hello_world_test.cpp | 159 ++ .../hello_world/images/hello_world_tflite.png | Bin 0 -> 27649 bytes .../hello_world/images/hello_world_tflm.png | Bin 0 -> 27448 bytes .../HelloWorld/hello_world/models/BUILD | 40 + .../models/hello_world_float.tflite | Bin 0 -> 3164 bytes .../models/hello_world_float_model_data.cpp | 6 + .../models/hello_world_float_model_data.h | 4 + .../models/hello_world_int8.tflite | Bin 0 -> 2704 bytes .../models/hello_world_int8_model_data.cpp | 6 + .../models/hello_world_int8_model_data.h | 4 + .../HelloWorld/hello_world/quantization/BUILD | 18 + .../hello_world/quantization/ptq.py | 116 ++ .../HelloWorld/hello_world/train.py | 141 ++ .../out/HelloWorld/CM55/size/HelloWorld.axf | Bin 0 -> 2078464 bytes .../CM55/size/HelloWorld.size+CM55.clog | 60 + .../CM0/RTE/Device/ARMCM0/regions_ARMCM0.h | 60 + .../CM0/RTE/Device/ARMCM0/startup_ARMCM0.c | 146 ++ .../CM0/RTE/Device/ARMCM0/system_ARMCM0.c | 56 + tensorflow-test/Target/CM0/Target.clayer.yml | 15 + tensorflow-test/Target/CM0/fvp_config.txt | 6 + .../RTE/Device/ARMCM0P/regions_ARMCM0P.h | 60 + .../RTE/Device/ARMCM0P/startup_ARMCM0plus.c | 146 ++ .../RTE/Device/ARMCM0P/system_ARMCM0plus.c} | 144 +- .../Target/CM0plus/Target.clayer.yml | 15 + tensorflow-test/Target/CM0plus/fvp_config.txt | 6 + .../CM23/RTE/Device/ARMCM23/regions_ARMCM23.h | 94 + .../CM23/RTE/Device/ARMCM23/startup_ARMCM23.c | 159 ++ .../CM23/RTE/Device/ARMCM23/system_ARMCM23.c} | 152 +- tensorflow-test/Target/CM23/Target.clayer.yml | 15 + tensorflow-test/Target/CM23/fvp_config.txt | 7 + .../CM3/RTE/Device/ARMCM3/regions_ARMCM3.h | 60 + .../CM3/RTE/Device/ARMCM3/startup_ARMCM3.c | 150 ++ .../CM3/RTE/Device/ARMCM3/system_ARMCM3.c} | 140 +- tensorflow-test/Target/CM3/Target.clayer.yml | 15 + tensorflow-test/Target/CM3/fvp_config.txt | 6 + .../CM33/RTE/Device/ARMCM33/regions_ARMCM33.h | 94 + .../CM33/RTE/Device/ARMCM33/startup_ARMCM33.c | 164 ++ .../CM33/RTE/Device/ARMCM33/system_ARMCM33.c | 172 +- tensorflow-test/Target/CM33/Target.clayer.yml | 15 + tensorflow-test/Target/CM33/fvp_config.txt | 7 + .../CM4/RTE/Device/ARMCM4/regions_ARMCM4.h | 60 + .../CM4/RTE/Device/ARMCM4/startup_ARMCM4.c | 150 ++ .../CM4/RTE/Device/ARMCM4/system_ARMCM4.c} | 158 +- tensorflow-test/Target/CM4/Target.clayer.yml | 15 + tensorflow-test/Target/CM4/fvp_config.txt | 7 + .../CM4_FP/RTE/Device/ARMCM4/regions_ARMCM4.h | 60 + .../CM4_FP/RTE/Device/ARMCM4/startup_ARMCM4.c | 150 ++ .../CM4_FP/RTE/Device/ARMCM4/system_ARMCM4.c} | 158 +- .../Target/CM4_FP/Target.clayer.yml | 15 + tensorflow-test/Target/CM4_FP/fvp_config.txt | 7 + .../CM55/RTE/Device/ARMCM55/ARMCM55_ac6.sct | 123 ++ .../Device/ARMCM55/ARMCM55_ac6.sct.base@1.1.0 | 123 ++ .../CM55/RTE/Device/ARMCM55/regions_ARMCM55.h | 94 + .../CM55/RTE/Device/ARMCM55/startup_ARMCM55.c | 164 ++ .../ARMCM55/startup_ARMCM55.c.base@1.1.0 | 164 ++ .../CM55/RTE/Device/ARMCM55/system_ARMCM55.c | 107 ++ .../ARMCM55/system_ARMCM55.c.base@1.1.0 | 107 ++ tensorflow-test/Target/CM55/Target.clayer.yml | 15 + tensorflow-test/Target/CM55/fvp_config.txt | 11 + .../RTE/Device/ARMCM55/regions_ARMCM55.h | 94 + .../RTE/Device/ARMCM55/startup_ARMCM55.c | 164 ++ .../RTE/Device/ARMCM55/system_ARMCM55.c | 107 ++ .../Target/CM55_Ethos/Target.clayer.yml | 15 + .../Target/CM55_Ethos/fvp_config.txt | 11 + .../CM7/RTE/Device/ARMCM7/regions_ARMCM7.h | 60 + .../CM7/RTE/Device/ARMCM7/startup_ARMCM7.c | 150 ++ .../CM7/RTE/Device/ARMCM7/system_ARMCM7.c} | 158 +- tensorflow-test/Target/CM7/Target.clayer.yml | 15 + tensorflow-test/Target/CM7/fvp_config.txt | 6 + .../CM85/RTE/Device/ARMCM85/regions_ARMCM85.h | 94 + .../CM85/RTE/Device/ARMCM85/startup_ARMCM85.c | 164 ++ .../CM85/RTE/Device/ARMCM85/system_ARMCM85.c | 106 ++ tensorflow-test/Target/CM85/Target.clayer.yml | 15 + tensorflow-test/Target/CM85/fvp_config.txt | 11 + .../RTE/Device/ARMCM85/regions_ARMCM85.h | 94 + .../RTE/Device/ARMCM85/startup_ARMCM85.c | 164 ++ .../RTE/Device/ARMCM85/system_ARMCM85.c | 106 ++ .../Target/CM85_Ethos/Target.clayer.yml | 15 + .../Target/CM85_Ethos/fvp_config.txt | 11 + tensorflow-test/all_tests_reference.yml | 256 --- tensorflow-test/cmsis-toolbox.options | 6 - tensorflow-test/generic_tests.yml | 248 --- .../SSE-300-MPS3/API/Include/led_port.h | 69 - .../SSE-300-MPS3/API/Include/serial.h | 33 - .../SSE-300-MPS3/API/Include/timeout.h | 75 - .../SSE-300-MPS3/API/Source/led_port.c | 76 - .../ARMCLANG/SSE-300-MPS3/API/Source/serial.c | 55 - .../API/Source/systimer_armv8-m_timeout.c | 73 - .../RTE/Device/SSE-300-MPS3/RTE_Device.h | 95 - .../Device/SSE-300-MPS3/cmsis_driver_config.h | 25 - .../RTE/Device/SSE-300-MPS3/device_cfg.h | 145 -- .../Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct | 78 - .../SSE-300-MPS3/platform_base_address.h | 261 --- .../RTE/Device/SSE-300-MPS3/region_defs.h | 49 - .../RTE/Device/SSE-300-MPS3/region_limits.h | 51 - .../SSE-300-MPS3/startup_fvp_sse300_mps3.c | 344 ---- .../RTE/Machine_Learning/micro_time.cc | 67 - .../Pre_Include_Global.h | 18 - .../_template_Corstone300/RTE_Components.h | 35 - .../ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj | 85 - .../CMSIS-NN/ARMCLANG/SSE-300-MPS3/packlist | 1 - .../ARMCLANG/SSE-300-MPS3/platform_setup.c | 10 - .../SSE-300-MPS3/API/Include/led_port.h | 69 - .../SSE-300-MPS3/API/Include/serial.h | 33 - .../SSE-300-MPS3/API/Include/timeout.h | 75 - .../SSE-300-MPS3/API/Source/led_port.c | 76 - .../ARMCLANG/SSE-300-MPS3/API/Source/serial.c | 55 - .../API/Source/systimer_armv8-m_timeout.c | 73 - .../RTE/Device/SSE-300-MPS3/RTE_Device.h | 95 - .../Device/SSE-300-MPS3/cmsis_driver_config.h | 25 - .../RTE/Device/SSE-300-MPS3/device_cfg.h | 145 -- .../Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct | 78 - .../SSE-300-MPS3/platform_base_address.h | 261 --- .../RTE/Device/SSE-300-MPS3/region_defs.h | 49 - .../RTE/Device/SSE-300-MPS3/region_limits.h | 51 - .../SSE-300-MPS3/startup_fvp_sse300_mps3.c | 344 ---- .../RTE/Machine_Learning/debug_log.cc | 43 - .../RTE/Machine_Learning/micro_time.cc | 67 - .../RTE/Machine_Learning/system_setup.cc | 36 - .../Pre_Include_Global.h | 18 - .../_template_Corstone300/RTE_Components.h | 35 - .../ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj | 85 - .../Ethos-U/ARMCLANG/SSE-300-MPS3/packlist | 1 - .../ARMCLANG/SSE-300-MPS3/platform_setup.c | 10 - .../FVP_Corstone_SSE-300_Ethos-U55.config | 1656 ----------------- .../SSE-300-MPS3/API/Include/led_port.h | 69 - .../SSE-300-MPS3/API/Include/serial.h | 33 - .../SSE-300-MPS3/API/Include/timeout.h | 75 - .../SSE-300-MPS3/API/Source/led_port.c | 76 - .../ARMCLANG/SSE-300-MPS3/API/Source/serial.c | 55 - .../API/Source/systimer_armv8-m_timeout.c | 73 - .../RTE/Device/SSE-300-MPS3/RTE_Device.h | 95 - .../Device/SSE-300-MPS3/cmsis_driver_config.h | 25 - .../RTE/Device/SSE-300-MPS3/device_cfg.h | 145 -- .../Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct | 78 - .../SSE-300-MPS3/platform_base_address.h | 261 --- .../RTE/Device/SSE-300-MPS3/region_defs.h | 49 - .../RTE/Device/SSE-300-MPS3/region_limits.h | 51 - .../SSE-300-MPS3/startup_fvp_sse300_mps3.c | 344 ---- .../RTE/Machine_Learning/debug_log.cc | 43 - .../RTE/Machine_Learning/micro_time.cc | 67 - .../RTE/Machine_Learning/system_setup.cc | 36 - .../Pre_Include_Global.h | 18 - .../_template_Corstone300/RTE_Components.h | 35 - .../SSE-300-MPS3/RTE/retarget_stdio.c | 53 - .../ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj | 80 - .../Reference/ARMCLANG/SSE-300-MPS3/packlist | 1 - .../ARMCLANG/SSE-300-MPS3/platform_setup.c | 10 - tensorflow-test/vht/packs/packinstall.sh | 11 - tensorflow-test/vht/vht.yml | 662 ------- tensorflow-test/vht/vht_config.txt | 18 - 307 files changed, 7710 insertions(+), 25196 deletions(-) delete mode 100755 tensorflow-build/build.sh delete mode 100644 tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/App.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/RTE/Machine_Learning/debug_log.cpp delete mode 100644 tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/RTE/Machine_Learning/micro_time.cpp delete mode 100644 tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/RTE/Machine_Learning/system_setup.cpp delete mode 100644 tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/arm_nn_softmax_common_s8.c delete mode 100644 tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/retarget_stdio.c delete mode 100644 tensorflow-test-ng/Layer/App/Validation_Reference/App.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/App/Validation_Reference/RTE/Machine_Learning/micro_time.cpp delete mode 100644 tensorflow-test-ng/Layer/App/Validation_Reference/RTE/Machine_Learning/system_setup.cpp delete mode 100644 tensorflow-test-ng/Layer/App/Validation_Reference/main.c delete mode 100644 tensorflow-test-ng/Layer/App/Validation_Reference/retarget_stdio.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/ac6_arm.sct delete mode 100644 tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/startup_CMSDK_CM0plus.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/system_CMSDK_CM0plus.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/gcc_arm.ld delete mode 100644 tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/startup_CMSDK_CM0plus.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/system_CMSDK_CM0plus.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/partition_IOTKit_CM23.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/startup_IOTKit_CM23.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/system_IOTKit_CM23.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/gcc_arm.ld delete mode 100644 tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/partition_IOTKit_CM23.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/startup_IOTKit_CM23.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/system_IOTKit_CM23.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/partition_IOTKit_CM33.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/startup_IOTKit_CM33.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/system_IOTKit_CM33.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/gcc_arm.ld delete mode 100644 tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/partition_IOTKit_CM33.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/startup_IOTKit_CM33.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/system_IOTKit_CM33.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/ac6_arm.sct delete mode 100644 tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/startup_CMSDK_CM3.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/system_CMSDK_CM3.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/gcc_arm.ld delete mode 100644 tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/startup_CMSDK_CM3.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/system_CMSDK_CM3.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/ac6_arm.sct delete mode 100644 tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/startup_CMSDK_CM4.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/system_CMSDK_CM4.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/gcc_arm.ld delete mode 100644 tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/startup_CMSDK_CM4.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/system_CMSDK_CM4.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/device_cfg.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct delete mode 100644 tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/platform_base_address.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/region_defs.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/region_limits.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/ac6_arm.sct delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/startup_CMSDK_CM7.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/system_CMSDK_CM7.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/gcc_arm.ld delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/startup_CMSDK_CM7.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/system_CMSDK_CM7.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/ac6_arm.sct delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/startup_CMSDK_CM7.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/system_CMSDK_CM7.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/RTE_Device.h delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/gcc_arm.ld delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/startup_CMSDK_CM7.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/system_CMSDK_CM7.c delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/Target.clayer.yml delete mode 100644 tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/vht_config.txt delete mode 100644 tensorflow-test-ng/Layer/Test/Test.clayer.yml delete mode 100644 tensorflow-test-ng/Project/Validation.cproject.yml delete mode 100644 tensorflow-test-ng/Project/Validation.csolution.yml delete mode 100644 tensorflow-test-ng/avh.yml delete mode 100644 tensorflow-test-ng/avh_exec_test.py delete mode 100644 tensorflow-test-ng/copy_sources.py delete mode 100644 tensorflow-test-ng/create_tests.py delete mode 100755 tensorflow-test-ng/exec_suite.sh delete mode 100644 tensorflow-test-ng/export_test_report.py delete mode 100644 tensorflow-test-ng/generic_tests.yml delete mode 100644 tensorflow-test-ng/kernel_tests_cmsis.yml delete mode 100644 tensorflow-test-ng/kernel_tests_ethos.yml delete mode 100644 tensorflow-test-ng/kernel_tests_reference.yml delete mode 100644 tensorflow-test-ng/record_test_results.py delete mode 100755 tensorflow-test-ng/test_r.sh delete mode 100644 tensorflow-test-ng/test_tests.yml create mode 100644 tensorflow-test/HelloWorld/HelloWorld.cbuild-idx.yml create mode 100644 tensorflow-test/HelloWorld/HelloWorld.cproject.yml create mode 100644 tensorflow-test/HelloWorld/HelloWorld.csolution.yml create mode 100644 tensorflow-test/HelloWorld/HelloWorld.size+CM55.cbuild.yml create mode 100644 tensorflow-test/HelloWorld/HelloWorld.size+CM55.cprj rename tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/ac6_arm.sct => tensorflow-test/HelloWorld/RTE/Device/ARMCM55/ARMCM55_ac6.sct (83%) rename tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/ac6_arm.sct => tensorflow-test/HelloWorld/RTE/Device/ARMCM55/ARMCM55_ac6.sct.base@1.1.0 (83%) create mode 100644 tensorflow-test/HelloWorld/RTE/Device/ARMCM55/startup_ARMCM55.c create mode 100644 tensorflow-test/HelloWorld/RTE/Device/ARMCM55/startup_ARMCM55.c.base@1.1.0 create mode 100644 tensorflow-test/HelloWorld/RTE/Device/ARMCM55/system_ARMCM55.c create mode 100644 tensorflow-test/HelloWorld/RTE/Device/ARMCM55/system_ARMCM55.c.base@1.1.0 rename {tensorflow-test-ng/Layer/App/Validation_Reference => tensorflow-test/HelloWorld}/RTE/Machine_Learning/debug_log.cpp (63%) rename tensorflow-test/{templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/debug_log.cc => HelloWorld/RTE/Machine_Learning/debug_log.cpp.base@1.24.2} (64%) create mode 100644 tensorflow-test/HelloWorld/RTE/Machine_Learning/micro_time.cpp create mode 100644 tensorflow-test/HelloWorld/RTE/Machine_Learning/micro_time.cpp.base@1.24.2 create mode 100644 tensorflow-test/HelloWorld/RTE/Machine_Learning/system_setup.cpp rename tensorflow-test/{templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/system_setup.cc => HelloWorld/RTE/Machine_Learning/system_setup.cpp.base@1.24.2} (74%) create mode 100644 tensorflow-test/HelloWorld/RTE/_size_CM55/Pre_Include_Global.h create mode 100644 tensorflow-test/HelloWorld/RTE/_size_CM55/RTE_Components.h create mode 100644 tensorflow-test/HelloWorld/hello_world/BUILD create mode 100644 tensorflow-test/HelloWorld/hello_world/Makefile.inc create mode 100644 tensorflow-test/HelloWorld/hello_world/README.md create mode 100644 tensorflow-test/HelloWorld/hello_world/evaluate.py create mode 100644 tensorflow-test/HelloWorld/hello_world/evaluate_test.py create mode 100644 tensorflow-test/HelloWorld/hello_world/hello_world_test.cpp create mode 100644 tensorflow-test/HelloWorld/hello_world/images/hello_world_tflite.png create mode 100644 tensorflow-test/HelloWorld/hello_world/images/hello_world_tflm.png create mode 100644 tensorflow-test/HelloWorld/hello_world/models/BUILD create mode 100644 tensorflow-test/HelloWorld/hello_world/models/hello_world_float.tflite create mode 100644 tensorflow-test/HelloWorld/hello_world/models/hello_world_float_model_data.cpp create mode 100644 tensorflow-test/HelloWorld/hello_world/models/hello_world_float_model_data.h create mode 100644 tensorflow-test/HelloWorld/hello_world/models/hello_world_int8.tflite create mode 100644 tensorflow-test/HelloWorld/hello_world/models/hello_world_int8_model_data.cpp create mode 100644 tensorflow-test/HelloWorld/hello_world/models/hello_world_int8_model_data.h create mode 100644 tensorflow-test/HelloWorld/hello_world/quantization/BUILD create mode 100644 tensorflow-test/HelloWorld/hello_world/quantization/ptq.py create mode 100644 tensorflow-test/HelloWorld/hello_world/train.py create mode 100644 tensorflow-test/HelloWorld/out/HelloWorld/CM55/size/HelloWorld.axf create mode 100644 tensorflow-test/HelloWorld/out/HelloWorld/CM55/size/HelloWorld.size+CM55.clog create mode 100644 tensorflow-test/Target/CM0/RTE/Device/ARMCM0/regions_ARMCM0.h create mode 100644 tensorflow-test/Target/CM0/RTE/Device/ARMCM0/startup_ARMCM0.c create mode 100644 tensorflow-test/Target/CM0/RTE/Device/ARMCM0/system_ARMCM0.c create mode 100644 tensorflow-test/Target/CM0/Target.clayer.yml create mode 100644 tensorflow-test/Target/CM0/fvp_config.txt create mode 100644 tensorflow-test/Target/CM0plus/RTE/Device/ARMCM0P/regions_ARMCM0P.h create mode 100644 tensorflow-test/Target/CM0plus/RTE/Device/ARMCM0P/startup_ARMCM0plus.c rename tensorflow-test/{templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_core_init.c => Target/CM0plus/RTE/Device/ARMCM0P/system_ARMCM0plus.c} (62%) create mode 100644 tensorflow-test/Target/CM0plus/Target.clayer.yml create mode 100644 tensorflow-test/Target/CM0plus/fvp_config.txt create mode 100644 tensorflow-test/Target/CM23/RTE/Device/ARMCM23/regions_ARMCM23.h create mode 100644 tensorflow-test/Target/CM23/RTE/Device/ARMCM23/startup_ARMCM23.c rename tensorflow-test/{templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_core_init.c => Target/CM23/RTE/Device/ARMCM23/system_ARMCM23.c} (59%) create mode 100644 tensorflow-test/Target/CM23/Target.clayer.yml create mode 100644 tensorflow-test/Target/CM23/fvp_config.txt create mode 100644 tensorflow-test/Target/CM3/RTE/Device/ARMCM3/regions_ARMCM3.h create mode 100644 tensorflow-test/Target/CM3/RTE/Device/ARMCM3/startup_ARMCM3.c rename tensorflow-test/{templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_core_init.c => Target/CM3/RTE/Device/ARMCM3/system_ARMCM3.c} (61%) create mode 100644 tensorflow-test/Target/CM3/Target.clayer.yml create mode 100644 tensorflow-test/Target/CM3/fvp_config.txt create mode 100644 tensorflow-test/Target/CM33/RTE/Device/ARMCM33/regions_ARMCM33.h create mode 100644 tensorflow-test/Target/CM33/RTE/Device/ARMCM33/startup_ARMCM33.c rename tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c => tensorflow-test/Target/CM33/RTE/Device/ARMCM33/system_ARMCM33.c (55%) create mode 100644 tensorflow-test/Target/CM33/Target.clayer.yml create mode 100644 tensorflow-test/Target/CM33/fvp_config.txt create mode 100644 tensorflow-test/Target/CM4/RTE/Device/ARMCM4/regions_ARMCM4.h create mode 100644 tensorflow-test/Target/CM4/RTE/Device/ARMCM4/startup_ARMCM4.c rename tensorflow-test/{templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c => Target/CM4/RTE/Device/ARMCM4/system_ARMCM4.c} (66%) create mode 100644 tensorflow-test/Target/CM4/Target.clayer.yml create mode 100644 tensorflow-test/Target/CM4/fvp_config.txt create mode 100644 tensorflow-test/Target/CM4_FP/RTE/Device/ARMCM4/regions_ARMCM4.h create mode 100644 tensorflow-test/Target/CM4_FP/RTE/Device/ARMCM4/startup_ARMCM4.c rename tensorflow-test/{templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c => Target/CM4_FP/RTE/Device/ARMCM4/system_ARMCM4.c} (66%) create mode 100644 tensorflow-test/Target/CM4_FP/Target.clayer.yml create mode 100644 tensorflow-test/Target/CM4_FP/fvp_config.txt create mode 100644 tensorflow-test/Target/CM55/RTE/Device/ARMCM55/ARMCM55_ac6.sct create mode 100644 tensorflow-test/Target/CM55/RTE/Device/ARMCM55/ARMCM55_ac6.sct.base@1.1.0 create mode 100644 tensorflow-test/Target/CM55/RTE/Device/ARMCM55/regions_ARMCM55.h create mode 100644 tensorflow-test/Target/CM55/RTE/Device/ARMCM55/startup_ARMCM55.c create mode 100644 tensorflow-test/Target/CM55/RTE/Device/ARMCM55/startup_ARMCM55.c.base@1.1.0 create mode 100644 tensorflow-test/Target/CM55/RTE/Device/ARMCM55/system_ARMCM55.c create mode 100644 tensorflow-test/Target/CM55/RTE/Device/ARMCM55/system_ARMCM55.c.base@1.1.0 create mode 100644 tensorflow-test/Target/CM55/Target.clayer.yml create mode 100644 tensorflow-test/Target/CM55/fvp_config.txt create mode 100644 tensorflow-test/Target/CM55_Ethos/RTE/Device/ARMCM55/regions_ARMCM55.h create mode 100644 tensorflow-test/Target/CM55_Ethos/RTE/Device/ARMCM55/startup_ARMCM55.c create mode 100644 tensorflow-test/Target/CM55_Ethos/RTE/Device/ARMCM55/system_ARMCM55.c create mode 100644 tensorflow-test/Target/CM55_Ethos/Target.clayer.yml create mode 100644 tensorflow-test/Target/CM55_Ethos/fvp_config.txt create mode 100644 tensorflow-test/Target/CM7/RTE/Device/ARMCM7/regions_ARMCM7.h create mode 100644 tensorflow-test/Target/CM7/RTE/Device/ARMCM7/startup_ARMCM7.c rename tensorflow-test/{templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c => Target/CM7/RTE/Device/ARMCM7/system_ARMCM7.c} (66%) create mode 100644 tensorflow-test/Target/CM7/Target.clayer.yml create mode 100644 tensorflow-test/Target/CM7/fvp_config.txt create mode 100644 tensorflow-test/Target/CM85/RTE/Device/ARMCM85/regions_ARMCM85.h create mode 100644 tensorflow-test/Target/CM85/RTE/Device/ARMCM85/startup_ARMCM85.c create mode 100644 tensorflow-test/Target/CM85/RTE/Device/ARMCM85/system_ARMCM85.c create mode 100644 tensorflow-test/Target/CM85/Target.clayer.yml create mode 100644 tensorflow-test/Target/CM85/fvp_config.txt create mode 100644 tensorflow-test/Target/CM85_Ethos/RTE/Device/ARMCM85/regions_ARMCM85.h create mode 100644 tensorflow-test/Target/CM85_Ethos/RTE/Device/ARMCM85/startup_ARMCM85.c create mode 100644 tensorflow-test/Target/CM85_Ethos/RTE/Device/ARMCM85/system_ARMCM85.c create mode 100644 tensorflow-test/Target/CM85_Ethos/Target.clayer.yml create mode 100644 tensorflow-test/Target/CM85_Ethos/fvp_config.txt delete mode 100644 tensorflow-test/all_tests_reference.yml delete mode 100644 tensorflow-test/cmsis-toolbox.options delete mode 100644 tensorflow-test/generic_tests.yml delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Include/led_port.h delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Include/serial.h delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Include/timeout.h delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Source/led_port.c delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Source/serial.c delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Source/systimer_armv8-m_timeout.c delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/RTE_Device.h delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/device_cfg.h delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/platform_base_address.h delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_defs.h delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_limits.h delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/micro_time.cc delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/Pre_Include_Global.h delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/RTE_Components.h delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/packlist delete mode 100644 tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/platform_setup.c delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Include/led_port.h delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Include/serial.h delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Include/timeout.h delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Source/led_port.c delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Source/serial.c delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Source/systimer_armv8-m_timeout.c delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/RTE_Device.h delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/device_cfg.h delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/platform_base_address.h delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_defs.h delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_limits.h delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/debug_log.cc delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/micro_time.cc delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/system_setup.cc delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/Pre_Include_Global.h delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/RTE_Components.h delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/packlist delete mode 100644 tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/platform_setup.c delete mode 100644 tensorflow-test/templates/FVP_Corstone_SSE-300_Ethos-U55.config delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Include/led_port.h delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Include/serial.h delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Include/timeout.h delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Source/led_port.c delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Source/serial.c delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Source/systimer_armv8-m_timeout.c delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/RTE_Device.h delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/device_cfg.h delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/platform_base_address.h delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_defs.h delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_limits.h delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/debug_log.cc delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/micro_time.cc delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/system_setup.cc delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/Pre_Include_Global.h delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/RTE_Components.h delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/retarget_stdio.c delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/packlist delete mode 100644 tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/platform_setup.c delete mode 100644 tensorflow-test/vht/packs/packinstall.sh delete mode 100644 tensorflow-test/vht/vht.yml delete mode 100644 tensorflow-test/vht/vht_config.txt diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index a9a2e1a..e746060 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -6,8 +6,8 @@ WORKDIR /tensorflow-pack RUN apt-get update -y && apt-get upgrade -y -RUN apt-get install rsync wget git zip curl -y --fix-missing +RUN apt-get install rsync wget git zip curl ninja-build -y --fix-missing RUN pip3 install pillow requests six semantic_version pyyml -#RUN su -l arm_mlops_docker -c "cpackget index --force https://www.keil.com/pack/index.pidx" \ No newline at end of file + diff --git a/tensorflow-build/README.md b/tensorflow-build/README.md index e694871..43e2be9 100644 --- a/tensorflow-build/README.md +++ b/tensorflow-build/README.md @@ -1,20 +1,42 @@ + # tensorflow-build Directory contains scripts and assets to compile the CMSIS-pack containing the latest TensorFlow Lite Micro. -## build_r.sh -Entry point to run the full workflow to download, sort, generate source trees and build the pack. -### The workflow is: +## build_r.sh (build_d.sh for development releases) +The build_r.sh script serves as the entry point for running a full workflow that involves downloading, sorting, generating source trees, and building a pack. Steps involved in this workflow: + +1. **Get the latest root repository**: The script starts by retrieving the latest root repository from mlplatform.org. This repository contains a list of JSON files that index release SHAs for a specific release. This step ensures that the script is working with the most up-to-date information. + +2. **Retrieve repositories for a specified release**: The script then proceeds to retrieve the repositories associated with a specified release. The release version is passed to the script as a parameter. For example, if the release version is "20.02", the script will fetch the repositories related to that specific release. + +3. **Create source trees**: The create_tflm_tree.py script is used to generate source trees for different variants, namely "Reference", "CMSIS-NN", and "Ethos-U". These source trees serve as the foundation for building the pack. + +4. **Write source file lists**: For each source tree generated in the previous step, the script writes a list of files used in that particular source tree into a text file with a name like srcs.*.lst. These lists of source files provide a comprehensive overview of the files included in each source tree. + +5. **Merge determined sources**: The script then merges the determined sources into a build directory. This step brings together the necessary files from the different source trees to create a unified set of sources for the pack. + +6. **Apply patches**: The script applies a series of patches to the source files. These patches are necessary to ensure compatibility and correct functionality of the TensorFlow Lite Micro code within the CMSIS-Pack environment. The patches are applied using the 'patch' command, and the specific patches to be applied are determined by the script based on the release version and the specific source tree variant. + +7. **Run generate_cmsis_pack.py**: Finally, the script executes the generate_cmsis_pack.py script and passes the lists of sources as arguments. This script is responsible for generating the CMSIS pack, which is a collection of software components and device support files used in embedded systems development. + +## generate_cmsis_pack.py +This script is responsible for generating the CMSIS pack. It takes several parameters, including paths to source files, headers, and the release version. Here are the steps involved in this script: + +1. **Read Parameters**: The script starts by reading the parameters passed to it. These parameters include paths to source files, headers, and the release version. + +2. **Pull PackChk**: The script then pulls PackChk for the platform the script is executed on. PackChk is a tool used to validate the CMSIS pack. + +3. **Generate PDSC File**: Using the input parameters, the script generates a PDSC (Pack Description) file. This file describes the pack contents, including software components, device support files, and examples. -1. Get the latest root repository from mlplatform.org. It contains a list of json files with an index of release SHAs for a specific release. -2. Retrieve the repositories for a specified release (e.g. "20.02"). This release is passed to the github workflow as a parameter. -3. create_tflm_tree.py is used to create the source trees for variants "Reference", "CMSIS-NN", "Ethos-U". -4. For each source tree a list of files used it written into a srcs.*.lst text file. -5. Merge determined sources into build directory. -6. Run generate_cmsis_pack.py and pass the lists of sources. +4. **Validate PDSC File**: The generated PDSC file is then validated using PackChk. If the validation fails, the script will stop execution. -## generate_cmsis_pack.py +5. **Generate CMSIS Pack**: If the PDSC file passes validation, the script proceeds to generate the CMSIS pack. This pack is a collection of software components and device support files used in embedded systems development. + +6. **Output**: The output of this script is a tensorflow-lite-micro.*.pack file, which is only generated when the PDSC validation passes. + +## generate_cmsis_pack.py Usage ``` Parameters are: --input_template Path to template file pdsc. @@ -33,4 +55,39 @@ Parameters are: ``` Internally generate_cmsis_pack.py will pull PackChk for the platform the script is executed on. -The generated pdsc will be validated and the tensorflow-lite-micro.*.pack will only be generated when validation passes. \ No newline at end of file +The generated pdsc will be validated and the tensorflow-lite-micro.*.pack will only be generated when validation passes. + +## Additional Scripts in the Repository + +### get_releases.py + +""" +This script retrieves the latest releases from a GitHub repository. + +Usage: + python get_releases.py [repository] + +Arguments: + repository (str): The name of the GitHub repository to retrieve releases from. + +Returns: + list: A list of dictionaries, where each dictionary represents a release and contains the following keys: + - name (str): The name of the release. + - tag_name (str): The tag name of the release. + - published_at (str): The date and time when the release was published. + - assets (list): A list of dictionaries representing the assets associated with the release, where each dictionary contains the following keys: + - name (str): The name of the asset. + - download_url (str): The URL to download the asset. + +Example: + python get_releases.py myrepo +""" + +### clean_file_list.py +""" +This script provides functions to clean up a list of file names. + +The `clean_file_list` module contains functions that can be used to remove unwanted characters and formats from a list of file names. It provides a simple and efficient way to sanitize file names before further processing. + +Usage: + python clean_file_list.py \ No newline at end of file diff --git a/tensorflow-build/build.sh b/tensorflow-build/build.sh deleted file mode 100755 index f248563..0000000 --- a/tensorflow-build/build.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -python3 ./tensorflow-pack/tensorflow-build/generate_cmsis_pack.py --tensorflow_path=./tensorflow --input_template=./tensorflow-pack/tensorflow-build/template/cmsis_pdsc.tpl --srcs=./tensorflow-pack/tensorflow-build/srcs.lst --hdrs=./tensorflow-pack/tensorflow-build/hdrs.lst --hdrs-cmsis-nn=./tensorflow-pack/tensorflow-build/hdrs.cmsis-nn.lst --srcs-cmsis-nn=./tensorflow-pack/tensorflow-build/srcs.cmsis-nn.lst --hdrs-ethos=./tensorflow-pack/tensorflow-build/hdrs.ethos.lst --srcs-ethos=./tensorflow-pack/tensorflow-build/srcs.ethos.lst --testhdrs=./tensorflow-pack/tensorflow-build/hdrs.test.lst --testsrcs=./tensorflow-pack/tensorflow-build/srcs.test.lst --util_src=./tensorflow-pack/tensorflow-build/util_srcs.lst - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tensorflow-build/build_d.sh b/tensorflow-build/build_d.sh index 4fa6967..1f587ab 100755 --- a/tensorflow-build/build_d.sh +++ b/tensorflow-build/build_d.sh @@ -1,6 +1,7 @@ #!/bin/sh -echo Building from latest main branch - nightly build $1 + +echo Building from latest main branch - nightly build" $1 mkdir ./tensorflow-pack/tensorflow-build/rel mkdir ./tensorflow-pack/tensorflow-build/rel/mlplatform @@ -12,8 +13,11 @@ wget -O ./tensorflow-pack/tensorflow-build/rel/master.tar.gz https://review.mlpl tar -xzf ./tensorflow-pack/tensorflow-build/rel/master.tar.gz -C ./tensorflow-pack/tensorflow-build/rel/mlplatform # Get ml-platforms srcs cd ./tensorflow-pack/tensorflow-build/rel/mlplatform/ + +echo Fetching ml-platforms sources python3 fetch_externals.py fetch + cd ./core_software/tflite_micro python3 ./tensorflow/lite/micro/tools/project_generation/create_tflm_tree.py \ @@ -23,6 +27,7 @@ python3 ./tensorflow/lite/micro/tools/project_generation/create_tflm_tree.py \ > ../../../../../tensorflow-build/srcs.raw rsync -a ../../../../../tensorflow-build/src/tensorflow ../../../../../tensorflow-build/gen/build + python3 ./tensorflow/lite/micro/tools/project_generation/create_tflm_tree.py \ --makefile_options="TARGET=cortex_m_generic OPTIMIZED_KERNEL_DIR=cmsis_nn TARGET_ARCH=cortex-m55" \ --print_src_files --rename_cc_to_cpp\ @@ -50,6 +55,7 @@ python3 ./tensorflow-pack/tensorflow-build/clean_file_list.py \ python3 ./tensorflow-pack/tensorflow-build/clean_file_list.py \ ./tensorflow-pack/tensorflow-build/srcs.ethos_u.raw > ./tensorflow-pack/tensorflow-build/srcs.ethos_u.lst + python3 ./tensorflow-pack/tensorflow-build/generate_cmsis_pack.py \ --release=1.99 \ --candidate_rev=$1 \ diff --git a/tensorflow-build/build_r.sh b/tensorflow-build/build_r.sh index 3aefd14..4f3d538 100755 --- a/tensorflow-build/build_r.sh +++ b/tensorflow-build/build_r.sh @@ -1,19 +1,45 @@ #!/bin/sh -echo $1 $2 - +echo "\033[0;32m" +echo "Building from mlplatforms release: " $1 +echo "Release tag: " $2 + +# Check if working directories exist and delete if so. Then create new. +if [ -d "./tensorflow-pack/tensorflow-build/rel" ]; then + rm -rf ./tensorflow-pack/tensorflow-build/rel +fi mkdir ./tensorflow-pack/tensorflow-build/rel + +if [ -d "./tensorflow-pack/tensorflow-build/rel/mlplatform" ]; then + rm -rf ./tensorflow-pack/tensorflow-build/rel/mlplatform +fi mkdir ./tensorflow-pack/tensorflow-build/rel/mlplatform + +if [ -d "./tensorflow-pack/tensorflow-build/gen" ]; then + rm -rf ./tensorflow-pack/tensorflow-build/gen +fi mkdir ./tensorflow-pack/tensorflow-build/gen + +if [ -d "./tensorflow-pack/tensorflow-build/gen/build" ]; then + rm -rf ./tensorflow-pack/tensorflow-build/gen/build +fi mkdir ./tensorflow-pack/tensorflow-build/gen/build + # Get ml-platforms root wget -O ./tensorflow-pack/tensorflow-build/rel/master.tar.gz https://review.mlplatform.org/plugins/gitiles/ml/ethos-u/ethos-u/+archive/refs/heads/master.tar.gz + + # Extract tar.gz tar -xzf ./tensorflow-pack/tensorflow-build/rel/master.tar.gz -C ./tensorflow-pack/tensorflow-build/rel/mlplatform # Get ml-platforms srcs cd ./tensorflow-pack/tensorflow-build/rel/mlplatform/ + +echo "\033[1;33m" + python3 fetch_externals.py -c $1.json fetch +echo "\033[0;32m" + cd ./core_software/tflite_micro python3 ./tensorflow/lite/micro/tools/project_generation/create_tflm_tree.py \ @@ -22,6 +48,7 @@ python3 ./tensorflow/lite/micro/tools/project_generation/create_tflm_tree.py \ ../../../../../tensorflow-build/src \ > ../../../../../tensorflow-build/srcs.raw rsync -a ../../../../../tensorflow-build/src/tensorflow ../../../../../tensorflow-build/gen/build +rsync -a ../../../../../tensorflow-build/src/signal ../../../../../tensorflow-build/gen/build python3 ./tensorflow/lite/micro/tools/project_generation/create_tflm_tree.py \ --makefile_options="TARGET=cortex_m_generic OPTIMIZED_KERNEL_DIR=cmsis_nn TARGET_ARCH=cortex-m55" \ @@ -29,13 +56,15 @@ python3 ./tensorflow/lite/micro/tools/project_generation/create_tflm_tree.py \ ../../../../../tensorflow-build/src \ > ../../../../../tensorflow-build/srcs.cmsis_nn.raw rsync -a ../../../../../tensorflow-build/src/tensorflow ../../../../../tensorflow-build/gen/build +rsync -a ../../../../../tensorflow-build/src/signal ../../../../../tensorflow-build/gen/build python3 ./tensorflow/lite/micro/tools/project_generation/create_tflm_tree.py \ --makefile_options="TARGET=cortex_m_generic OPTIMIZED_KERNEL_DIR=cmsis_nn CO_PROCESSOR=ethos_u ETHOSU_ARCH=u55 TARGET_ARCH=cortex-m55" \ --print_src_files \ - ../../../../../tensorflow-build/src --rename_cc_to_cpp\ + ../../../../../tensorflow-build/src --rename_cc_to_cpp \ > ../../../../../tensorflow-build/srcs.ethos_u.raw rsync -a ../../../../../tensorflow-build/src/tensorflow ../../../../../tensorflow-build/gen/build +rsync -a ../../../../../tensorflow-build/src/signal ../../../../../tensorflow-build/gen/build rsync -a ./tensorflow/lite/micro/testing/*.h ../../../../../tensorflow-build/gen/build/tensorflow/lite/micro/testing/ @@ -50,6 +79,16 @@ python3 ./tensorflow-pack/tensorflow-build/clean_file_list.py \ python3 ./tensorflow-pack/tensorflow-build/clean_file_list.py \ ./tensorflow-pack/tensorflow-build/srcs.ethos_u.raw > ./tensorflow-pack/tensorflow-build/srcs.ethos_u.lst +echo "\033[0;33m" + +# If a folder ./patches/$1 exists, call the patch.sh in this folder +if [ -d "./tensorflow-pack/tensorflow-build/patches/$1" ]; then + echo "Patching" + ./tensorflow-pack/tensorflow-build/patches/$1/patch.sh +fi + +echo "\033[1;34m" + python3 ./tensorflow-pack/tensorflow-build/generate_cmsis_pack.py \ --release=1.$1 \ --candidate_rev=$2 \ @@ -64,7 +103,7 @@ python3 ./tensorflow-pack/tensorflow-build/generate_cmsis_pack.py \ --srcs-ethos=./tensorflow-pack/tensorflow-build/srcs.ethos_u.lst \ --testhdrs=./tensorflow-pack/tensorflow-build/empty.lst \ --testsrcs=./tensorflow-pack/tensorflow-build/testsrcs.lst \ - --util_src=./tensorflow-pack/tensorflow-build/empty.lst + --util_src=./tensorflow-pack/tensorflow-build/kernelutil.lst diff --git a/tensorflow-build/clean_file_list.py b/tensorflow-build/clean_file_list.py index 77fd7bf..17d9f1f 100644 --- a/tensorflow-build/clean_file_list.py +++ b/tensorflow-build/clean_file_list.py @@ -8,7 +8,18 @@ txt_file.close() no_dupes_list = list(dict.fromkeys(content_list)) +signal_files_list = [] for filename in no_dupes_list: - if not filename.startswith("signal") and if not "downloads" in filename and not "LICENSE" in filename: + if filename.startswith("signal/"): + signal_files_list.append(filename) + no_dupes_list.remove(filename) + elif not "downloads" in filename and not "LICENSE" in filename: print(filename) + + +signal_filename = in_filename.replace("srcs.", "signal.").replace(".raw", ".lst") +with open(signal_filename, 'w') as f: + for item in signal_files_list: + f.write("%s\n" % item) + diff --git a/tensorflow-build/generate_cmsis_pack.py b/tensorflow-build/generate_cmsis_pack.py index d381dfe..5845edf 100644 --- a/tensorflow-build/generate_cmsis_pack.py +++ b/tensorflow-build/generate_cmsis_pack.py @@ -156,7 +156,6 @@ def make_component_file_list(srcs_list): and src != "tensorflow/lite/c/common.c" \ and src != "tensorflow/lite/micro/cortex_m_generic/micro_time.cpp" \ and src != "tensorflow/lite/micro/cortex_m_generic/debug_log.cpp" \ - and src != "tensorflow/lite/micro/recording_micro_allocator.cpp" \ and src.endswith("_test.cc") == False: replace_srcs += ' \n' @@ -236,6 +235,14 @@ def main(unparsed_args, flags): all_test_srcs_list = test_srcs_list + test_hdrs_list all_test_srcs_list.sort() + # get signal library if exists ("signal.lst" alongside flags.srcs) + replace_signal_srcs = "" + if os.path.exists(flags.srcs.replace("srcs.", "signal.")): + signal_srcs_list = load_list_from_file(flags.srcs.replace("srcs.", "signal.")) + replace_signal_srcs = make_component_file_list(signal_srcs_list) + + print(replace_signal_srcs) + replace_core_srcs = make_component_file_list(all_core_srcs_list) replace_util_srcs = make_component_file_list(all_util_srcs_list) replace_test_srcs = make_component_file_list(all_test_srcs_list) @@ -280,6 +287,8 @@ def main(unparsed_args, flags): r'%{KERNEL_UTIL_FILES}%', replace_util_srcs, six.ensure_str(template_file_text)) template_file_text = re.sub( r'%{TEST_FILES}%', replace_test_srcs, six.ensure_str(template_file_text)) + template_file_text = re.sub( + r'%{SIGNAL_FILES_REFERENCE}%', replace_signal_srcs, six.ensure_str(template_file_text)) template_file_text = re.sub( r'%{RELEASE_VERSION}%', pack_version, template_file_text) template_file_text = re.sub( diff --git a/tensorflow-build/template/cmsis_pdsc.tpl b/tensorflow-build/template/cmsis_pdsc.tpl index fdf0413..75c9105 100644 --- a/tensorflow-build/template/cmsis_pdsc.tpl +++ b/tensorflow-build/template/cmsis_pdsc.tpl @@ -95,7 +95,7 @@ - TensorFlow Lite Micro Library + TensorFlow Lite Micro Library - Kernel Utilities @@ -105,7 +105,7 @@ - TensorFlow Lite Micro Library + TensorFlow Lite Micro Test Utilities #define RTE_ML_TF_LITE /* TF */ @@ -115,6 +115,16 @@ - + + TensorFlow Lite Micro Signal Library + + + #define RTE_ML_TF_LITE /* TF */ + + + %{SIGNAL_FILES_REFERENCE}% + + + diff --git a/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/App.clayer.yml b/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/App.clayer.yml deleted file mode 100644 index 37ad4b5..0000000 --- a/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/App.clayer.yml +++ /dev/null @@ -1,46 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: App - # name: CMSIS-RTOS2_Validation - description: Validation of TensorFlow Lite Micro CMSIS Pack in Reference implementation - # packs: - # - pack: ARM::CMSIS - # - pack: ARM::CMSIS-FreeRTOS - - defines: - - PRINT_XML_REPORT=1 - - #add-paths: - #- ./Config - #- ../../../Include - - misc: - - C*: - - -Wno-macro-redefined - - -Wno-pragma-pack - - -Wno-parentheses-equality - - -fno-unwind-tables - - -ffunction-sections - - -fdata-sections - - C: - - -std=c11 - - CPP: - - -fno-rtti - - -fno-exceptions - - -fno-threadsafe-statics - - -fno-exceptions - - -std=c++11 - - components: - # [Cvendor::]Cclass[&Cbundle]:Cgroup[:Csub][&Cvariant][@[>=]Cversion] - - component: tensorflow::Machine Learning:TensorFlow:Kernel&CMSIS-NN - - component: ARM::CMSIS:NN Lib - - component: ARM::CMSIS:DSP&Source - - groups: - - - group: Source files - files: - - file: ./retarget_stdio.c - - file: ./arm_nn_softmax_common_s8.c diff --git a/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/RTE/Machine_Learning/debug_log.cpp b/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/RTE/Machine_Learning/debug_log.cpp deleted file mode 100644 index bc79d43..0000000 --- a/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/RTE/Machine_Learning/debug_log.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -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 - - http://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. -==============================================================================*/ - -// Implementation for the DebugLog() function that prints to the debug logger on -// an generic Cortex-M device. - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -#include "tensorflow/lite/micro/debug_log.h" - -#include "tensorflow/lite/micro/cortex_m_generic/debug_log_callback.h" - -static DebugLogCallback debug_log_callback = nullptr; - -void RegisterDebugLogCallback(void (*cb)(const char* s)) { - debug_log_callback = cb; -} - -void DebugLog(const char* s) { -#ifndef TF_LITE_STRIP_ERROR_STRINGS - if (debug_log_callback != nullptr) { - debug_log_callback(s); - } -#endif -} - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus diff --git a/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/RTE/Machine_Learning/micro_time.cpp b/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/RTE/Machine_Learning/micro_time.cpp deleted file mode 100644 index 023ac6d..0000000 --- a/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/RTE/Machine_Learning/micro_time.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright 2021 The TensorFlow Authors. All Rights Reserved. - -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 - - http://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. -==============================================================================*/ - -#include "tensorflow/lite/micro/micro_time.h" - -// DWT (Data Watchpoint and Trace) registers, only exists on ARM Cortex with a -// DWT unit. -#define KIN1_DWT_CONTROL (*((volatile uint32_t*)0xE0001000)) -/*!< DWT Control register */ - -// DWT Control register. -#define KIN1_DWT_CYCCNTENA_BIT (1UL << 0) - -// CYCCNTENA bit in DWT_CONTROL register. -#define KIN1_DWT_CYCCNT (*((volatile uint32_t*)0xE0001004)) - -// DWT Cycle Counter register. -#define KIN1_DEMCR (*((volatile uint32_t*)0xE000EDFC)) - -// DEMCR: Debug Exception and Monitor Control Register. -#define KIN1_TRCENA_BIT (1UL << 24) - -#define KIN1_LAR (*((volatile uint32_t*)0xE0001FB0)) - -#define KIN1_DWT_CONTROL (*((volatile uint32_t*)0xE0001000)) - -// Unlock access to DWT (ITM, etc.)registers. -#define KIN1_UnlockAccessToDWT() KIN1_LAR = 0xC5ACCE55; - -// TRCENA: Enable trace and debug block DEMCR (Debug Exception and Monitor -// Control Register. -#define KIN1_InitCycleCounter() KIN1_DEMCR |= KIN1_TRCENA_BIT - -#define KIN1_ResetCycleCounter() KIN1_DWT_CYCCNT = 0 -#define KIN1_EnableCycleCounter() KIN1_DWT_CONTROL |= KIN1_DWT_CYCCNTENA_BIT -#define KIN1_DisableCycleCounter() KIN1_DWT_CONTROL &= ~KIN1_DWT_CYCCNTENA_BIT -#define KIN1_GetCycleCounter() KIN1_DWT_CYCCNT - -namespace tflite { - -int32_t ticks_per_second() { return 0; } - -int32_t GetCurrentTimeTicks() { - static bool is_initialized = false; - if (!is_initialized) { - KIN1_UnlockAccessToDWT(); - KIN1_InitCycleCounter(); - KIN1_ResetCycleCounter(); - KIN1_EnableCycleCounter(); - is_initialized = true; - } - return KIN1_GetCycleCounter(); -} - -} // namespace tflite diff --git a/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/RTE/Machine_Learning/system_setup.cpp b/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/RTE/Machine_Learning/system_setup.cpp deleted file mode 100644 index df6cfc6..0000000 --- a/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/RTE/Machine_Learning/system_setup.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2021 The TensorFlow Authors. All Rights Reserved. - -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 - - http://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. -==============================================================================*/ - -#include "tensorflow/lite/micro/system_setup.h" -#include "stdio.h" -#include "tensorflow/lite/micro/cortex_m_generic/debug_log_callback.h" - -extern "C" void stdio_init (void); - -namespace tflite { - -void debug_log_printf(const char* s) { - printf("%s", s); -} - -// To add an equivalent function for your own platform, create your own -// implementation file, and place it in a subfolder named after the target. See -// tensorflow/lite/micro/debug_log.cc for a similar example. -void InitializeTarget() { - stdio_init(); - RegisterDebugLogCallback(debug_log_printf); - //debug_log_printf("Initialized UART and registered Callback.") -} -} // namespace tflite diff --git a/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/arm_nn_softmax_common_s8.c b/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/arm_nn_softmax_common_s8.c deleted file mode 100644 index e697767..0000000 --- a/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/arm_nn_softmax_common_s8.c +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (C) 2022 Arm Limited or its affiliates. - * - * 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. - */ - -/* ---------------------------------------------------------------------- - * Project: CMSIS NN Library - * Title: arm_nn_softmax_common_s8.c - * Description: Softmax with s8 input and output of s8 or s16. - * - * $Date: 17 March 2022 - * $Revision: V.1.0.1 - * - * Target Processor: Cortex-M processors - * -------------------------------------------------------------------- */ - -#include "arm_nnsupportfunctions.h" - -#define ACCUM_BITS 12 - -/** - * @ingroup groupSupport - */ - -/** - * @addtogroup Softmax - * @{ - */ - -/* - * Softmax function with s8 input and output of s8 or s16. - * - * Refer header file for details. - * - */ -void arm_nn_softmax_common_s8(const int8_t *input, - const int32_t num_rows, - const int32_t row_size, - const int32_t mult, - const int32_t shift, - const int32_t diff_min, - const bool int16_output, - void *output) -{ - const int32_t mask = (1 << shift); - - int32_t col = 0; - int32_t row_idx; - - for (row_idx = 0; row_idx < num_rows; ++row_idx) - { - // Find the maximum value in order to ensure numerical stability - int8_t max = *input; - - for (col = 1; col < row_size; ++col) - { - max = MAX(max, input[col]); - } - - int32_t diff = 0; - int32_t sum = 0; - - for (col = 0; col < row_size; ++col) - { - diff = input[col] - max; - if (diff >= diff_min) - { - sum += DIV_POW2(EXP_ON_NEG(MUL_SAT(diff * mask, mult)), ACCUM_BITS); - } - } - - const int32_t headroom = __CLZ(sum); - const int32_t shifted_scale = ONE_OVER1((sum > 0 ? sum << headroom : 0) - (1 << 31)); - int32_t bits_over_unit; - - if (int16_output) - { - int16_t *output_s16 = (int16_t *)output + row_idx * row_size; - - bits_over_unit = ACCUM_BITS - headroom + 15; - - for (col = 0; col < row_size; ++col) - { - diff = input[col] - max; - - if (diff >= diff_min) - { - const int32_t res = - DIV_POW2(MUL_SAT(shifted_scale, EXP_ON_NEG(MUL_SAT(diff * mask, mult))), bits_over_unit) + - NN_Q15_MIN; - output_s16[col] = (int16_t)CLAMP(res, (int32_t)NN_Q15_MAX, (int32_t)NN_Q15_MIN); - } - else - { - output_s16[col] = NN_Q15_MIN; - } - } - } - else - { - int8_t *output_s8 = (int8_t *)output + row_idx * row_size; - - bits_over_unit = ACCUM_BITS - headroom + 23; - - for (col = 0; col < row_size; ++col) - { - diff = input[col] - max; - if (diff >= diff_min) - { - const int32_t res = - DIV_POW2(MUL_SAT(shifted_scale, EXP_ON_NEG(MUL_SAT(diff * mask, mult))), bits_over_unit) + - NN_Q7_MIN; - output_s8[col] = (int8_t)CLAMP(res, (int32_t)NN_Q7_MAX, (int32_t)NN_Q7_MIN); - } - else - { - output_s8[col] = NN_Q7_MIN; - } - } - } - - input += row_size; - } -} - -/** - * @} end of NNBasicMath group - */ \ No newline at end of file diff --git a/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/retarget_stdio.c b/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/retarget_stdio.c deleted file mode 100644 index d91159f..0000000 --- a/tensorflow-test-ng/Layer/App/Validation_CMSIS-NN/retarget_stdio.c +++ /dev/null @@ -1,115 +0,0 @@ -/*--------------------------------------------------------------------------- - * Copyright (c) 2021 Arm Limited (or its affiliates). 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. - * - * Name: retarget_stdio.c - * Purpose: Retarget stdio to USART - * - *---------------------------------------------------------------------------*/ - -#include "Driver_USART.h" - -#define USART_DRV_NUM 0 -#define USART_BAUDRATE 115200 - -#define _USART_Driver_(n) Driver_USART##n -#define USART_Driver_(n) _USART_Driver_(n) - -extern ARM_DRIVER_USART USART_Driver_(USART_DRV_NUM); -#define ptrUSART (&USART_Driver_(USART_DRV_NUM)) - -/* Prototypes */ -int stdio_init (void); -int stderr_putchar (int ch); -int stdout_putchar (int ch); -int stdin_getchar (void); - -/** - Initialize stdio - - \return 0 on success, or -1 on error. -*/ -int stdio_init (void) { - int32_t status; - - status = ptrUSART->Initialize(NULL); - if (status != ARM_DRIVER_OK) return (-1); - - status = ptrUSART->PowerControl(ARM_POWER_FULL); - if (status != ARM_DRIVER_OK) return (-1); - - status = ptrUSART->Control(ARM_USART_MODE_ASYNCHRONOUS | - ARM_USART_DATA_BITS_8 | - ARM_USART_PARITY_NONE | - ARM_USART_STOP_BITS_1 | - ARM_USART_FLOW_CONTROL_NONE, - USART_BAUDRATE); - if (status != ARM_DRIVER_OK) return (-1); - - status = ptrUSART->Control(ARM_USART_CONTROL_RX, 1); - if (status != ARM_DRIVER_OK) return (-1); - - return (0); -} - -/** - Put a character to the stderr - - \param[in] ch Character to output - \return The character written, or -1 on write error. -*/ -int stderr_putchar (int ch) { - uint8_t buf[1]; - - buf[0] = (uint8_t)ch; - if (ptrUSART->Send(buf, 1) != ARM_DRIVER_OK) { - return (-1); - } - while (ptrUSART->GetTxCount() != 1); - return (ch); -} - -/** - Put a character to the stdout - - \param[in] ch Character to output - \return The character written, or -1 on write error. -*/ -int stdout_putchar (int ch) { - uint8_t buf[1]; - - buf[0] = (uint8_t)ch; - if (ptrUSART->Send(buf, 1) != ARM_DRIVER_OK) { - return (-1); - } - while (ptrUSART->GetTxCount() != 1); - return (ch); -} - -/** - Get a character from the stdio - - \return The next character from the input, or -1 on read error. -*/ -int stdin_getchar (void) { - uint8_t buf[1]; - - if (ptrUSART->Receive(buf, 1) != ARM_DRIVER_OK) { - return (-1); - } - while (ptrUSART->GetRxCount() != 1); - return (buf[0]); -} diff --git a/tensorflow-test-ng/Layer/App/Validation_Reference/App.clayer.yml b/tensorflow-test-ng/Layer/App/Validation_Reference/App.clayer.yml deleted file mode 100644 index 9f6ba38..0000000 --- a/tensorflow-test-ng/Layer/App/Validation_Reference/App.clayer.yml +++ /dev/null @@ -1,44 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: App - # name: CMSIS-RTOS2_Validation - description: Validation of TensorFlow Lite Micro CMSIS Pack in Reference implementation - # packs: - # - pack: ARM::CMSIS - # - pack: ARM::CMSIS-FreeRTOS - - defines: - - PRINT_XML_REPORT=1 - - #add-paths: - # - ./Config - # - ../../../Include - - misc: - - C*: - - -Wno-macro-redefined - - -Wno-pragma-pack - - -Wno-parentheses-equality - - -fno-unwind-tables - - -ffunction-sections - - -fdata-sections - - C: - - -std=c11 - - CPP: - - -fno-rtti - - -fno-exceptions - - -fno-threadsafe-statics - - -fno-exceptions - - -std=c++11 - - components: - # [Cvendor::]Cclass[&Cbundle]:Cgroup[:Csub][&Cvariant][@[>=]Cversion] - - component: tensorflow::Machine Learning:TensorFlow:Kernel&Reference - - - groups: - - - group: Source files - files: - - file: ./retarget_stdio.c diff --git a/tensorflow-test-ng/Layer/App/Validation_Reference/RTE/Machine_Learning/micro_time.cpp b/tensorflow-test-ng/Layer/App/Validation_Reference/RTE/Machine_Learning/micro_time.cpp deleted file mode 100644 index 023ac6d..0000000 --- a/tensorflow-test-ng/Layer/App/Validation_Reference/RTE/Machine_Learning/micro_time.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright 2021 The TensorFlow Authors. All Rights Reserved. - -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 - - http://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. -==============================================================================*/ - -#include "tensorflow/lite/micro/micro_time.h" - -// DWT (Data Watchpoint and Trace) registers, only exists on ARM Cortex with a -// DWT unit. -#define KIN1_DWT_CONTROL (*((volatile uint32_t*)0xE0001000)) -/*!< DWT Control register */ - -// DWT Control register. -#define KIN1_DWT_CYCCNTENA_BIT (1UL << 0) - -// CYCCNTENA bit in DWT_CONTROL register. -#define KIN1_DWT_CYCCNT (*((volatile uint32_t*)0xE0001004)) - -// DWT Cycle Counter register. -#define KIN1_DEMCR (*((volatile uint32_t*)0xE000EDFC)) - -// DEMCR: Debug Exception and Monitor Control Register. -#define KIN1_TRCENA_BIT (1UL << 24) - -#define KIN1_LAR (*((volatile uint32_t*)0xE0001FB0)) - -#define KIN1_DWT_CONTROL (*((volatile uint32_t*)0xE0001000)) - -// Unlock access to DWT (ITM, etc.)registers. -#define KIN1_UnlockAccessToDWT() KIN1_LAR = 0xC5ACCE55; - -// TRCENA: Enable trace and debug block DEMCR (Debug Exception and Monitor -// Control Register. -#define KIN1_InitCycleCounter() KIN1_DEMCR |= KIN1_TRCENA_BIT - -#define KIN1_ResetCycleCounter() KIN1_DWT_CYCCNT = 0 -#define KIN1_EnableCycleCounter() KIN1_DWT_CONTROL |= KIN1_DWT_CYCCNTENA_BIT -#define KIN1_DisableCycleCounter() KIN1_DWT_CONTROL &= ~KIN1_DWT_CYCCNTENA_BIT -#define KIN1_GetCycleCounter() KIN1_DWT_CYCCNT - -namespace tflite { - -int32_t ticks_per_second() { return 0; } - -int32_t GetCurrentTimeTicks() { - static bool is_initialized = false; - if (!is_initialized) { - KIN1_UnlockAccessToDWT(); - KIN1_InitCycleCounter(); - KIN1_ResetCycleCounter(); - KIN1_EnableCycleCounter(); - is_initialized = true; - } - return KIN1_GetCycleCounter(); -} - -} // namespace tflite diff --git a/tensorflow-test-ng/Layer/App/Validation_Reference/RTE/Machine_Learning/system_setup.cpp b/tensorflow-test-ng/Layer/App/Validation_Reference/RTE/Machine_Learning/system_setup.cpp deleted file mode 100644 index df6cfc6..0000000 --- a/tensorflow-test-ng/Layer/App/Validation_Reference/RTE/Machine_Learning/system_setup.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2021 The TensorFlow Authors. All Rights Reserved. - -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 - - http://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. -==============================================================================*/ - -#include "tensorflow/lite/micro/system_setup.h" -#include "stdio.h" -#include "tensorflow/lite/micro/cortex_m_generic/debug_log_callback.h" - -extern "C" void stdio_init (void); - -namespace tflite { - -void debug_log_printf(const char* s) { - printf("%s", s); -} - -// To add an equivalent function for your own platform, create your own -// implementation file, and place it in a subfolder named after the target. See -// tensorflow/lite/micro/debug_log.cc for a similar example. -void InitializeTarget() { - stdio_init(); - RegisterDebugLogCallback(debug_log_printf); - //debug_log_printf("Initialized UART and registered Callback.") -} -} // namespace tflite diff --git a/tensorflow-test-ng/Layer/App/Validation_Reference/main.c b/tensorflow-test-ng/Layer/App/Validation_Reference/main.c deleted file mode 100644 index 897d681..0000000 --- a/tensorflow-test-ng/Layer/App/Validation_Reference/main.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2022 ARM Limited or its affiliates. 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. - */ - -#include "cmsis_rv2.h" - -extern int stdio_init (void); - -int main (void) { - /* Initialize stdio */ - stdio_init(); - - /* CMSIS-RTOS2 validation entry */ - cmsis_rv2(); -} - -#if defined(__GNUC__) && !defined(__CC_ARM) && !defined(__ARMCC_VERSION) -void _start (void) { - main(); - - for(;;); -} -#endif diff --git a/tensorflow-test-ng/Layer/App/Validation_Reference/retarget_stdio.c b/tensorflow-test-ng/Layer/App/Validation_Reference/retarget_stdio.c deleted file mode 100644 index d91159f..0000000 --- a/tensorflow-test-ng/Layer/App/Validation_Reference/retarget_stdio.c +++ /dev/null @@ -1,115 +0,0 @@ -/*--------------------------------------------------------------------------- - * Copyright (c) 2021 Arm Limited (or its affiliates). 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. - * - * Name: retarget_stdio.c - * Purpose: Retarget stdio to USART - * - *---------------------------------------------------------------------------*/ - -#include "Driver_USART.h" - -#define USART_DRV_NUM 0 -#define USART_BAUDRATE 115200 - -#define _USART_Driver_(n) Driver_USART##n -#define USART_Driver_(n) _USART_Driver_(n) - -extern ARM_DRIVER_USART USART_Driver_(USART_DRV_NUM); -#define ptrUSART (&USART_Driver_(USART_DRV_NUM)) - -/* Prototypes */ -int stdio_init (void); -int stderr_putchar (int ch); -int stdout_putchar (int ch); -int stdin_getchar (void); - -/** - Initialize stdio - - \return 0 on success, or -1 on error. -*/ -int stdio_init (void) { - int32_t status; - - status = ptrUSART->Initialize(NULL); - if (status != ARM_DRIVER_OK) return (-1); - - status = ptrUSART->PowerControl(ARM_POWER_FULL); - if (status != ARM_DRIVER_OK) return (-1); - - status = ptrUSART->Control(ARM_USART_MODE_ASYNCHRONOUS | - ARM_USART_DATA_BITS_8 | - ARM_USART_PARITY_NONE | - ARM_USART_STOP_BITS_1 | - ARM_USART_FLOW_CONTROL_NONE, - USART_BAUDRATE); - if (status != ARM_DRIVER_OK) return (-1); - - status = ptrUSART->Control(ARM_USART_CONTROL_RX, 1); - if (status != ARM_DRIVER_OK) return (-1); - - return (0); -} - -/** - Put a character to the stderr - - \param[in] ch Character to output - \return The character written, or -1 on write error. -*/ -int stderr_putchar (int ch) { - uint8_t buf[1]; - - buf[0] = (uint8_t)ch; - if (ptrUSART->Send(buf, 1) != ARM_DRIVER_OK) { - return (-1); - } - while (ptrUSART->GetTxCount() != 1); - return (ch); -} - -/** - Put a character to the stdout - - \param[in] ch Character to output - \return The character written, or -1 on write error. -*/ -int stdout_putchar (int ch) { - uint8_t buf[1]; - - buf[0] = (uint8_t)ch; - if (ptrUSART->Send(buf, 1) != ARM_DRIVER_OK) { - return (-1); - } - while (ptrUSART->GetTxCount() != 1); - return (ch); -} - -/** - Get a character from the stdio - - \return The next character from the input, or -1 on read error. -*/ -int stdin_getchar (void) { - uint8_t buf[1]; - - if (ptrUSART->Receive(buf, 1) != ARM_DRIVER_OK) { - return (-1); - } - while (ptrUSART->GetRxCount() != 1); - return (buf[0]); -} diff --git a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/RTE_Device.h deleted file mode 100644 index 7584efd..0000000 --- a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/RTE_Device.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2016 ARM Ltd. - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. Permission is granted to anyone to use this - * software for any purpose, including commercial applications, and to alter - * it and redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - * - * $Date: 25. April 2016 - * $Revision: V1.0.0 - * - * Project: RTE Device Configuration for ARM CMSDK_CM device - * -------------------------------------------------------------------------- */ - -//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART0 (Universal synchronous asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::CMSIS Driver:USART -#define RTE_USART0 1 - - -// USART1 (Universal synchronous asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART -#define RTE_USART1 0 - - -// USART2 (Universal synchronous asynchronous receiver transmitter) [Driver_USART2] -// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART -#define RTE_UART2 0 - - -// USART3 (Universal synchronous asynchronous receiver transmitter) [Driver_USART3] -// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART -#define RTE_UART3 0 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/ac6_arm.sct b/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/ac6_arm.sct deleted file mode 100644 index 447f912..0000000 --- a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/ac6_arm.sct +++ /dev/null @@ -1,76 +0,0 @@ -#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m0+ -xc -; command above MUST be in first line (no comment above!) - -/* -;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------- -*/ - -/*--------------------- Flash Configuration ---------------------------------- -; Flash Configuration -; Flash Base Address <0x0-0xFFFFFFFF:8> -; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - *----------------------------------------------------------------------------*/ -#define __ROM_BASE 0x00000000 -#define __ROM_SIZE 0x00080000 - -/*--------------------- Embedded RAM Configuration --------------------------- -; RAM Configuration -; RAM Base Address <0x0-0xFFFFFFFF:8> -; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - *----------------------------------------------------------------------------*/ -#define __RAM_BASE 0x20000000 -#define __RAM_SIZE 0x00040000 - -/*--------------------- Stack / Heap Configuration --------------------------- -; 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 - -/* -;------------- <<< end of configuration section >>> --------------------------- -*/ - - -/*---------------------------------------------------------------------------- - User Stack & Heap boundary definition - *----------------------------------------------------------------------------*/ -#define __STACK_TOP (__RAM_BASE + __RAM_SIZE) /* starts at end of RAM */ -#define __HEAP_BASE (AlignExpr(+0, 8)) /* starts after RW_RAM section, 8 byte aligned */ - - -/*---------------------------------------------------------------------------- - Scatter File Definitions definition - *----------------------------------------------------------------------------*/ -#define __RO_BASE __ROM_BASE -#define __RO_SIZE __ROM_SIZE - -#define __RW_BASE __RAM_BASE -#define __RW_SIZE (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE) - - -LR_ROM __RO_BASE __RO_SIZE { ; load region size_region - ER_ROM __RO_BASE __RO_SIZE { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - .ANY (+XO) - } - - RW_RAM __RW_BASE __RW_SIZE { ; RW data - .ANY (+RW +ZI) - } - -#if __HEAP_SIZE > 0 - ARM_LIB_HEAP __HEAP_BASE EMPTY __HEAP_SIZE { ; Reserve empty region for heap - } -#endif - - ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE { ; Reserve empty region for stack - } -} diff --git a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/startup_CMSDK_CM0plus.c b/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/startup_CMSDK_CM0plus.c deleted file mode 100644 index a245256..0000000 --- a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/startup_CMSDK_CM0plus.c +++ /dev/null @@ -1,218 +0,0 @@ -/****************************************************************************** - * @file startup_CMSDK_CM0plus.c - * @brief CMSIS Startup File for CMSDK_M0plus Device - ******************************************************************************/ -/* Copyright (c) 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM0plus) || defined (CMSDK_CM0plus_VHT) - #include "CMSDK_CM0plus.h" -#else - #error device not specified! -#endif - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; - -extern __NO_RETURN void __PROGRAM_START(void); - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler (void); - void Default_Handler(void); - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -/* Exceptions */ -void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void HardFault_Handler (void) __attribute__ ((weak)); -void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* Interrupts */ -void UART0RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DUALTIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART_0_1_2_OVF_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ETHERNET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void I2S_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TOUCHSCREEN_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_3_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#if defined CMSDK_CM0plus_VHT /* VSI Interrupts */ -void ARM_VSI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#else -void GPIO0_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#endif - - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const VECTOR_TABLE_Type __VECTOR_TABLE[48]; - const VECTOR_TABLE_Type __VECTOR_TABLE[48] __VECTOR_TABLE_ATTRIBUTE = { - (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14 NMI Handler */ - HardFault_Handler, /* -13 Hard Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5 SVC Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - PendSV_Handler, /* -2 PendSV Handler */ - SysTick_Handler, /* -1 SysTick Handler */ - - /* Interrupts */ - UART0RX_Handler, /* 0 UART 0 receive interrupt */ - UART0TX_Handler, /* 1 UART 0 transmit interrupt */ - UART1RX_Handler, /* 2 UART 1 receive interrupt */ - UART1TX_Handler, /* 3 UART 1 transmit interrupt */ - UART2RX_Handler, /* 4 UART 2 receive interrupt */ - UART2TX_Handler, /* 5 UART 2 transmit interrupt */ - GPIO0ALL_Handler, /* 6 GPIO 0 combined interrupt */ - GPIO1ALL_Handler, /* 7 GPIO 1 combined interrupt */ - TIMER0_Handler, /* 8 Timer 0 interrupt */ - TIMER1_Handler, /* 9 Timer 1 interrupt */ - DUALTIMER_Handler, /* 10 Dual Timer interrupt */ - SPI_0_1_Handler, /* 11 SPI 0, SPI 1 interrupt */ - UART_0_1_2_OVF_Handler, /* 12 UART overflow (0, 1 & 2) interrupt */ - ETHERNET_Handler, /* 13 Ethernet interrupt */ - I2S_Handler, /* 14 Audio I2S interrupt */ - TOUCHSCREEN_Handler, /* 15 Touch Screen interrupt */ - GPIO2_Handler, /* 16 GPIO 2 combined interrupt */ - GPIO3_Handler, /* 17 GPIO 3 combined interrupt */ - UART3RX_Handler, /* 18 UART 3 receive interrupt */ - UART3TX_Handler, /* 19 UART 3 transmit interrupt */ - UART4RX_Handler, /* 20 UART 4 receive interrupt */ - UART4TX_Handler, /* 21 UART 4 transmit interrupt */ - SPI_2_Handler, /* 22 SPI 2 interrupt */ - SPI_3_4_Handler, /* 23 SPI 3, SPI 4 interrupt */ -#if defined CMSDK_CM0plus_VHT - ARM_VSI0_Handler, /* 24 VSI 0 interrupt */ - ARM_VSI1_Handler, /* 25 VSI 1 interrupt */ - ARM_VSI2_Handler, /* 26 VSI 2 interrupt */ - ARM_VSI3_Handler, /* 27 VSI 3 interrupt */ - ARM_VSI4_Handler, /* 28 VSI 4 interrupt */ - ARM_VSI5_Handler, /* 29 VSI 5 interrupt */ - ARM_VSI6_Handler, /* 30 VSI 6 interrupt */ - ARM_VSI7_Handler /* 31 VSI 7 interrupt */ -#else - GPIO0_0_Handler, /* 24 GPIO 0 individual interrupt ( 0) */ - GPIO0_1_Handler, /* 25 GPIO 0 individual interrupt ( 1) */ - GPIO0_2_Handler, /* 26 GPIO 0 individual interrupt ( 2) */ - GPIO0_3_Handler, /* 27 GPIO 0 individual interrupt ( 3) */ - GPIO0_4_Handler, /* 28 GPIO 0 individual interrupt ( 4) */ - GPIO0_5_Handler, /* 29 GPIO 0 individual interrupt ( 5) */ - GPIO0_6_Handler, /* 30 GPIO 0 individual interrupt ( 6) */ - GPIO0_7_Handler /* 31 GPIO 0 individual interrupt ( 7) */ -#endif -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler(void) -{ - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmissing-noreturn" -#endif - -/*---------------------------------------------------------------------------- - Hard Fault Handler - *----------------------------------------------------------------------------*/ -void HardFault_Handler(void) -{ - while(1); -} - -/*---------------------------------------------------------------------------- - Default Handler for Exceptions / Interrupts - *----------------------------------------------------------------------------*/ -void Default_Handler(void) -{ - while(1); -} - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic pop -#endif diff --git a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/system_CMSDK_CM0plus.c b/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/system_CMSDK_CM0plus.c deleted file mode 100644 index cd31f9e..0000000 --- a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/RTE/Device/CMSDK_CM0plus_VHT/system_CMSDK_CM0plus.c +++ /dev/null @@ -1,74 +0,0 @@ -/****************************************************************************** - * @file system_CMSDK_CM0plus.c - * @brief CMSIS System Source File for CMSDK_M0plus Device - ******************************************************************************/ -/* Copyright (c) 2011 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM0plus) || defined (CMSDK_CM0plus_VHT) - #include "CMSDK_CM0plus.h" -#else - #error device not specified! -#endif - - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define XTAL (50000000UL) /* Oscillator frequency */ - -#define SYSTEM_CLOCK (XTAL / 2U) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ -extern const VECTOR_TABLE_Type __VECTOR_TABLE[48]; - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); -#endif - - SystemCoreClock = SYSTEM_CLOCK; -} diff --git a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/Target.clayer.yml deleted file mode 100644 index 8e3ec74..0000000 --- a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/Target.clayer.yml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: Keil::V2M-MPS2_CMx_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: Device:Startup&C Startup - - - component: Keil::Board Support&V2M-MPS2:Common - - component: Keil::CMSIS Driver:USART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/vht_config.txt deleted file mode 100644 index b7f12f3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_AC6/vht_config.txt +++ /dev/null @@ -1,8 +0,0 @@ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -fvp_mps2.UART0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -fvp_mps2.UART0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -fvp_mps2.UART0.unbuffered_output=1 # (bool , init-time) default = '0' : Unbuffered output -fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -#------------------------------------------------------------------------------ diff --git a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/RTE_Device.h deleted file mode 100644 index 7584efd..0000000 --- a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/RTE_Device.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2016 ARM Ltd. - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. Permission is granted to anyone to use this - * software for any purpose, including commercial applications, and to alter - * it and redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - * - * $Date: 25. April 2016 - * $Revision: V1.0.0 - * - * Project: RTE Device Configuration for ARM CMSDK_CM device - * -------------------------------------------------------------------------- */ - -//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART0 (Universal synchronous asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::CMSIS Driver:USART -#define RTE_USART0 1 - - -// USART1 (Universal synchronous asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART -#define RTE_USART1 0 - - -// USART2 (Universal synchronous asynchronous receiver transmitter) [Driver_USART2] -// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART -#define RTE_UART2 0 - - -// USART3 (Universal synchronous asynchronous receiver transmitter) [Driver_USART3] -// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART -#define RTE_UART3 0 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/gcc_arm.ld b/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/gcc_arm.ld deleted file mode 100644 index 59bd7d1..0000000 --- a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/gcc_arm.ld +++ /dev/null @@ -1,279 +0,0 @@ -/****************************************************************************** - * @file gcc_arm.ld - * @brief GNU Linker Script for Cortex-M based device - ******************************************************************************/ - -/* -; -------- <<< Use Configuration Wizard in Context Menu >>> ------------------- - */ - -/*---------------------- Flash Configuration ---------------------------------- -; Flash Configuration -; Flash Base Address <0x0-0xFFFFFFFF:8> -; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__ROM_BASE = 0x00000000; -__ROM_SIZE = 0x00400000; - -/*--------------------- Embedded RAM Configuration ---------------------------- -; RAM Configuration -; RAM Base Address <0x0-0xFFFFFFFF:8> -; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__RAM_BASE = 0x20000000; -__RAM_SIZE = 0x00020000; - -/*--------------------- Stack / Heap Configuration ---------------------------- -; Stack / Heap Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__STACK_SIZE = 0x00000400; -__HEAP_SIZE = 0x00000C00; - -/* -; -------------------- <<< end of configuration section >>> ------------------- - */ - -MEMORY -{ - FLASH (rx) : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE - RAM (rwx) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - KEEP(*(.vectors)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - /* - * SG veneers: - * All SG veneers are placed in the special output section .gnu.sgstubs. Its start address - * must be set, either with the command line option �--section-start� or in a linker script, - * to indicate where to place these veneers in memory. - */ -/* - .gnu.sgstubs : - { - . = ALIGN(32); - } > FLASH -*/ - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - - LONG (__etext) - LONG (__data_start__) - LONG ((__data_end__ - __data_start__) / 4) - - /* Add each additional data section here */ -/* - LONG (__etext2) - LONG (__data2_start__) - LONG ((__data2_end__ - __data2_start__) / 4) -*/ - __copy_table_end__ = .; - } > FLASH - - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG ((__bss_end__ - __bss_start__) / 4) - /* Add each additional bss section here */ -/* - LONG (__bss2_start__) - LONG ((__bss2_end__ - __bss2_start__) / 4) -*/ - __zero_table_end__ = .; - } > FLASH - - /** - * Location counter can end up 2byte aligned with narrow Thumb code but - * __etext is assumed by startup code to be the LMA of a section in RAM - * which must be 4byte aligned - */ - __etext = ALIGN (4); - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.data) - *(.data.*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(4); - /* All data end */ - __data_end__ = .; - - } > RAM - - /* - * Secondary data section, optional - * - * Remember to add each additional data section - * to the .copy.table above to asure proper - * initialization during startup. - */ -/* - __etext2 = ALIGN (4); - - .data2 : AT (__etext2) - { - . = ALIGN(4); - __data2_start__ = .; - *(.data2) - *(.data2.*) - . = ALIGN(4); - __data2_end__ = .; - - } > RAM2 -*/ - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss) - *(.bss.*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM AT > RAM - - /* - * Secondary bss section, optional - * - * Remember to add each additional bss section - * to the .zero.table above to asure proper - * initialization during startup. - */ -/* - .bss2 : - { - . = ALIGN(4); - __bss2_start__ = .; - *(.bss2) - *(.bss2.*) - . = ALIGN(4); - __bss2_end__ = .; - } > RAM2 AT > RAM2 -*/ - - .heap (COPY) : - { - . = ALIGN(8); - __end__ = .; - PROVIDE(end = .); - . = . + __HEAP_SIZE; - . = ALIGN(8); - __HeapLimit = .; - } > RAM - - .stack (ORIGIN(RAM) + LENGTH(RAM) - __STACK_SIZE) (COPY) : - { - . = ALIGN(8); - __StackLimit = .; - . = . + __STACK_SIZE; - . = ALIGN(8); - __StackTop = .; - } > RAM - PROVIDE(__stack = __StackTop); - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/startup_CMSDK_CM0plus.c b/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/startup_CMSDK_CM0plus.c deleted file mode 100644 index a245256..0000000 --- a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/startup_CMSDK_CM0plus.c +++ /dev/null @@ -1,218 +0,0 @@ -/****************************************************************************** - * @file startup_CMSDK_CM0plus.c - * @brief CMSIS Startup File for CMSDK_M0plus Device - ******************************************************************************/ -/* Copyright (c) 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM0plus) || defined (CMSDK_CM0plus_VHT) - #include "CMSDK_CM0plus.h" -#else - #error device not specified! -#endif - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; - -extern __NO_RETURN void __PROGRAM_START(void); - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler (void); - void Default_Handler(void); - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -/* Exceptions */ -void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void HardFault_Handler (void) __attribute__ ((weak)); -void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* Interrupts */ -void UART0RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DUALTIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART_0_1_2_OVF_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ETHERNET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void I2S_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TOUCHSCREEN_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_3_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#if defined CMSDK_CM0plus_VHT /* VSI Interrupts */ -void ARM_VSI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#else -void GPIO0_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#endif - - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const VECTOR_TABLE_Type __VECTOR_TABLE[48]; - const VECTOR_TABLE_Type __VECTOR_TABLE[48] __VECTOR_TABLE_ATTRIBUTE = { - (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14 NMI Handler */ - HardFault_Handler, /* -13 Hard Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5 SVC Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - PendSV_Handler, /* -2 PendSV Handler */ - SysTick_Handler, /* -1 SysTick Handler */ - - /* Interrupts */ - UART0RX_Handler, /* 0 UART 0 receive interrupt */ - UART0TX_Handler, /* 1 UART 0 transmit interrupt */ - UART1RX_Handler, /* 2 UART 1 receive interrupt */ - UART1TX_Handler, /* 3 UART 1 transmit interrupt */ - UART2RX_Handler, /* 4 UART 2 receive interrupt */ - UART2TX_Handler, /* 5 UART 2 transmit interrupt */ - GPIO0ALL_Handler, /* 6 GPIO 0 combined interrupt */ - GPIO1ALL_Handler, /* 7 GPIO 1 combined interrupt */ - TIMER0_Handler, /* 8 Timer 0 interrupt */ - TIMER1_Handler, /* 9 Timer 1 interrupt */ - DUALTIMER_Handler, /* 10 Dual Timer interrupt */ - SPI_0_1_Handler, /* 11 SPI 0, SPI 1 interrupt */ - UART_0_1_2_OVF_Handler, /* 12 UART overflow (0, 1 & 2) interrupt */ - ETHERNET_Handler, /* 13 Ethernet interrupt */ - I2S_Handler, /* 14 Audio I2S interrupt */ - TOUCHSCREEN_Handler, /* 15 Touch Screen interrupt */ - GPIO2_Handler, /* 16 GPIO 2 combined interrupt */ - GPIO3_Handler, /* 17 GPIO 3 combined interrupt */ - UART3RX_Handler, /* 18 UART 3 receive interrupt */ - UART3TX_Handler, /* 19 UART 3 transmit interrupt */ - UART4RX_Handler, /* 20 UART 4 receive interrupt */ - UART4TX_Handler, /* 21 UART 4 transmit interrupt */ - SPI_2_Handler, /* 22 SPI 2 interrupt */ - SPI_3_4_Handler, /* 23 SPI 3, SPI 4 interrupt */ -#if defined CMSDK_CM0plus_VHT - ARM_VSI0_Handler, /* 24 VSI 0 interrupt */ - ARM_VSI1_Handler, /* 25 VSI 1 interrupt */ - ARM_VSI2_Handler, /* 26 VSI 2 interrupt */ - ARM_VSI3_Handler, /* 27 VSI 3 interrupt */ - ARM_VSI4_Handler, /* 28 VSI 4 interrupt */ - ARM_VSI5_Handler, /* 29 VSI 5 interrupt */ - ARM_VSI6_Handler, /* 30 VSI 6 interrupt */ - ARM_VSI7_Handler /* 31 VSI 7 interrupt */ -#else - GPIO0_0_Handler, /* 24 GPIO 0 individual interrupt ( 0) */ - GPIO0_1_Handler, /* 25 GPIO 0 individual interrupt ( 1) */ - GPIO0_2_Handler, /* 26 GPIO 0 individual interrupt ( 2) */ - GPIO0_3_Handler, /* 27 GPIO 0 individual interrupt ( 3) */ - GPIO0_4_Handler, /* 28 GPIO 0 individual interrupt ( 4) */ - GPIO0_5_Handler, /* 29 GPIO 0 individual interrupt ( 5) */ - GPIO0_6_Handler, /* 30 GPIO 0 individual interrupt ( 6) */ - GPIO0_7_Handler /* 31 GPIO 0 individual interrupt ( 7) */ -#endif -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler(void) -{ - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmissing-noreturn" -#endif - -/*---------------------------------------------------------------------------- - Hard Fault Handler - *----------------------------------------------------------------------------*/ -void HardFault_Handler(void) -{ - while(1); -} - -/*---------------------------------------------------------------------------- - Default Handler for Exceptions / Interrupts - *----------------------------------------------------------------------------*/ -void Default_Handler(void) -{ - while(1); -} - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic pop -#endif diff --git a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/system_CMSDK_CM0plus.c b/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/system_CMSDK_CM0plus.c deleted file mode 100644 index cd31f9e..0000000 --- a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/RTE/Device/CMSDK_CM0plus_VHT/system_CMSDK_CM0plus.c +++ /dev/null @@ -1,74 +0,0 @@ -/****************************************************************************** - * @file system_CMSDK_CM0plus.c - * @brief CMSIS System Source File for CMSDK_M0plus Device - ******************************************************************************/ -/* Copyright (c) 2011 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM0plus) || defined (CMSDK_CM0plus_VHT) - #include "CMSDK_CM0plus.h" -#else - #error device not specified! -#endif - - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define XTAL (50000000UL) /* Oscillator frequency */ - -#define SYSTEM_CLOCK (XTAL / 2U) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ -extern const VECTOR_TABLE_Type __VECTOR_TABLE[48]; - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); -#endif - - SystemCoreClock = SYSTEM_CLOCK; -} diff --git a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/Target.clayer.yml deleted file mode 100644 index 8e3ec74..0000000 --- a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/Target.clayer.yml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: Keil::V2M-MPS2_CMx_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: Device:Startup&C Startup - - - component: Keil::Board Support&V2M-MPS2:Common - - component: Keil::CMSIS Driver:USART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/vht_config.txt deleted file mode 100644 index b7f12f3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM0plus_VHT_GCC/vht_config.txt +++ /dev/null @@ -1,8 +0,0 @@ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -fvp_mps2.UART0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -fvp_mps2.UART0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -fvp_mps2.UART0.unbuffered_output=1 # (bool , init-time) default = '0' : Unbuffered output -fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -#------------------------------------------------------------------------------ diff --git a/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/RTE_Device.h deleted file mode 100644 index 7584efd..0000000 --- a/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/RTE_Device.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2016 ARM Ltd. - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. Permission is granted to anyone to use this - * software for any purpose, including commercial applications, and to alter - * it and redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - * - * $Date: 25. April 2016 - * $Revision: V1.0.0 - * - * Project: RTE Device Configuration for ARM CMSDK_CM device - * -------------------------------------------------------------------------- */ - -//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART0 (Universal synchronous asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::CMSIS Driver:USART -#define RTE_USART0 1 - - -// USART1 (Universal synchronous asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART -#define RTE_USART1 0 - - -// USART2 (Universal synchronous asynchronous receiver transmitter) [Driver_USART2] -// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART -#define RTE_UART2 0 - - -// USART3 (Universal synchronous asynchronous receiver transmitter) [Driver_USART3] -// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART -#define RTE_UART3 0 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/partition_IOTKit_CM23.h b/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/partition_IOTKit_CM23.h deleted file mode 100644 index 46622d3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/partition_IOTKit_CM23.h +++ /dev/null @@ -1,585 +0,0 @@ -/****************************************************************************** - * @file partition_IOTKit_CM23.h - * @brief CMSIS-Core Initial Setup for Secure / Non-Secure Zones for IOTKit_CM23 - ******************************************************************************/ -/* Copyright (c) 2015 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#ifndef PARTITION_IOTKit_CM23_H -#define PARTITION_IOTKit_CM23_H - -/* -//-------- <<< Use Configuration Wizard in Context Menu >>> ----------------- -*/ - -/* -// Initialize Security Attribution Unit (SAU) CTRL register -*/ -#define SAU_INIT_CTRL 0 - -/* -// Enable SAU -// Value for SAU->CTRL register bit ENABLE -*/ -#define SAU_INIT_CTRL_ENABLE 1 - -/* -// When SAU is disabled -// <0=> All Memory is Secure -// <1=> All Memory is Non-Secure -// Value for SAU->CTRL register bit ALLNS -// When all Memory is Non-Secure (ALLNS is 1), IDAU can override memory map configuration. -*/ -#define SAU_INIT_CTRL_ALLNS 0 - -/* -// -*/ - -/* -// Initialize Security Attribution Unit (SAU) Address Regions -// SAU configuration specifies regions to be one of: -// - Secure and Non-Secure Callable -// - Non-Secure -// Note: All memory regions not configured by SAU are Secure -*/ -#define SAU_REGIONS_MAX 8 /* Max. number of SAU regions */ - -/* -// Initialize SAU Region 0 -// Setup SAU Region 0 memory attributes -*/ -#define SAU_INIT_REGION0 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START0 0x10000000 /* start address of SAU region 0 */ - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END0 0x101FFFFF /* end address of SAU region 0 */ - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC0 1 -/* -// -*/ - -/* -// Initialize SAU Region 1 -// Setup SAU Region 1 memory attributes -*/ -#define SAU_INIT_REGION1 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START1 0x00200000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END1 0x003FFFFF - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC1 0 -/* -// -*/ - -/* -// Initialize SAU Region 2 -// Setup SAU Region 2 memory attributes -*/ -#define SAU_INIT_REGION2 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START2 0x28200000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END2 0x283FFFFF - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC2 0 -/* -// -*/ - -/* -// Initialize SAU Region 3 -// Setup SAU Region 3 memory attributes -*/ -#define SAU_INIT_REGION3 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START3 0x40000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END3 0x403FFFFF - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC3 0 -/* -// -*/ - -/* -// Initialize SAU Region 4 -// Setup SAU Region 4 memory attributes -*/ -#define SAU_INIT_REGION4 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START4 0x00000000 /* start address of SAU region 4 */ - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END4 0x00000000 /* end address of SAU region 4 */ - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC4 0 -/* -// -*/ - -/* -// Initialize SAU Region 5 -// Setup SAU Region 5 memory attributes -*/ -#define SAU_INIT_REGION5 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START5 0x00000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END5 0x00000000 - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC5 0 -/* -// -*/ - -/* -// Initialize SAU Region 6 -// Setup SAU Region 6 memory attributes -*/ -#define SAU_INIT_REGION6 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START6 0x00000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END6 0x00000000 - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC6 0 -/* -// -*/ - -/* -// Initialize SAU Region 7 -// Setup SAU Region 7 memory attributes -*/ -#define SAU_INIT_REGION7 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START7 0x00000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END7 0x00000000 - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC7 0 -/* -// -*/ - -/* -// -*/ - -/* -// Setup behaviour of Sleep and Exception Handling -*/ -#define SCB_CSR_AIRCR_INIT 1 - -/* -// Deep Sleep can be enabled by -// <0=>Secure and Non-Secure state -// <1=>Secure state only -// Value for SCB->CSR register bit DEEPSLEEPS -*/ -#define SCB_CSR_DEEPSLEEPS_VAL 1 - -/* -// System reset request accessible from -// <0=> Secure and Non-Secure state -// <1=> Secure state only -// Value for SCB->AIRCR register bit SYSRESETREQS -*/ -#define SCB_AIRCR_SYSRESETREQS_VAL 0 - -/* -// Priority of Non-Secure exceptions is -// <0=> Not altered -// <1=> Lowered to 0x80-0xFF -// Value for SCB->AIRCR register bit PRIS -*/ -#define SCB_AIRCR_PRIS_VAL 1 - -/* -// BusFault, HardFault, and NMI target -// <0=> Secure state -// <1=> Non-Secure state -// Value for SCB->AIRCR register bit BFHFNMINS -*/ -#define SCB_AIRCR_BFHFNMINS_VAL 0 - -/* -// -*/ - - -/* -// Setup Interrupt Target -*/ - -/* -// Initialize ITNS 0 (Interrupts 0..31) -*/ -#define NVIC_INIT_ITNS0 0 - -/* -// Interrupts 0..31 -// Non-Secure Watchdog Reset Request <0=> Secure state <1=> Non-Secure state -// Non-Secure Watchdog interrupt <0=> Secure state <1=> Non-Secure state -// S32K Timer interrupt <0=> Secure state <1=> Non-Secure state -// Timer 0 interrupt <0=> Secure state <1=> Non-Secure state -// Timer 1 interrupt <0=> Secure state <1=> Non-Secure state -// Dual Timer interrupt <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS0_VAL 0x00000000 - -/* -// -*/ - -/* -// Initialize ITNS 1 (Interrupts 32..63) -*/ -#define NVIC_INIT_ITNS1 0 - -/* -// Interrupts 32..63 -// UART 0 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 0 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 1 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 1 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 2 teceive interrupt <0=> Secure state <1=> Non-Secure state -// UART 2 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 3 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 3 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 4 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 4 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 0 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 1 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 2 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 3 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 4 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 0, 1, 2, 3, 4 overflow interrupt <0=> Secure state <1=> Non-Secure state -// Ethernet interrupt <0=> Secure state <1=> Non-Secure state -// Audio I2S interrupt <0=> Secure state <1=> Non-Secure state -// Touch Screen interrupt <0=> Secure state <1=> Non-Secure state -// SPI 0 (SPI Header) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 1 (CLCD) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 2 (Shield ADC) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 3 (Shield 0 SPI) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 4 (Shield 1 SPI) interrupt <0=> Secure state <1=> Non-Secure state -// DMA 0 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 0 terminal count interrupt <0=> Secure state <1=> Non-Secure state -// DMA 0 combined interrupt <0=> Secure state <1=> Non-Secure state -// DMA 1 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 1 terminal count interrupt <0=> Secure state <1=> Non-Secure state -// DMA 1 combined interrupt <0=> Secure state <1=> Non-Secure state -// DMA 2 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 2 terminal count interrupt <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS1_VAL 0x00000000 - -/* -// -*/ - -/* -// Initialize ITNS 2 (Interrupts 64..95) -*/ -#define NVIC_INIT_ITNS2 0 - -/* -// Interrupts 64..95 -// DMA 2 combined interrupt <0=> Secure state <1=> Non-Secure state -// DMA 3 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 3 terminal count interrupt <0=> Secure state <1=> Non-Secure state -// DMA 3 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 0 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 1 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 2 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 3 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 4) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 5) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 6) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 7) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 8) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 9) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (10) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (11) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (12) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (13) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (14) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (15) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 4) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 5) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 6) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 7) <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS2_VAL 0x00000000 - -/* -// -*/ - -/* -// Initialize ITNS 3 (Interrupts 96..127) -*/ -#define NVIC_INIT_ITNS3 0 - -/* -// Interrupts 96..127 -// GPIO 1 individual interrupt ( 8) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 9) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (10) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (11) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (12) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (13) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (14) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (15) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 4) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 5) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 6) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 7) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 8) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 9) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (10) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (11) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (12) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (13) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (14) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (15) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS3_VAL 0x00000000 - -/* -// -*/ - -/* -// -*/ - - - -/* - max 128 SAU regions. - SAU regions are defined in partition.h - */ - -#define SAU_INIT_REGION(n) \ - SAU->RNR = (n & SAU_RNR_REGION_Msk); \ - SAU->RBAR = (SAU_INIT_START##n & SAU_RBAR_BADDR_Msk); \ - SAU->RLAR = (SAU_INIT_END##n & SAU_RLAR_LADDR_Msk) | \ - ((SAU_INIT_NSC##n << SAU_RLAR_NSC_Pos) & SAU_RLAR_NSC_Msk) | 1U - -/** - \brief Setup a SAU Region - \details Writes the region information contained in SAU_Region to the - registers SAU_RNR, SAU_RBAR, and SAU_RLAR - */ -__STATIC_INLINE void TZ_SAU_Setup (void) -{ - -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) - - #if defined (SAU_INIT_REGION0) && (SAU_INIT_REGION0 == 1U) - SAU_INIT_REGION(0); - #endif - - #if defined (SAU_INIT_REGION1) && (SAU_INIT_REGION1 == 1U) - SAU_INIT_REGION(1); - #endif - - #if defined (SAU_INIT_REGION2) && (SAU_INIT_REGION2 == 1U) - SAU_INIT_REGION(2); - #endif - - #if defined (SAU_INIT_REGION3) && (SAU_INIT_REGION3 == 1U) - SAU_INIT_REGION(3); - #endif - - #if defined (SAU_INIT_REGION4) && (SAU_INIT_REGION4 == 1U) - SAU_INIT_REGION(4); - #endif - - #if defined (SAU_INIT_REGION5) && (SAU_INIT_REGION5 == 1U) - SAU_INIT_REGION(5); - #endif - - #if defined (SAU_INIT_REGION6) && (SAU_INIT_REGION6 == 1U) - SAU_INIT_REGION(6); - #endif - - #if defined (SAU_INIT_REGION7) && (SAU_INIT_REGION7 == 1U) - SAU_INIT_REGION(7); - #endif - - /* repeat this for all possible SAU regions */ - -#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ - - - #if defined (SAU_INIT_CTRL) && (SAU_INIT_CTRL == 1U) - SAU->CTRL = ((SAU_INIT_CTRL_ENABLE << SAU_CTRL_ENABLE_Pos) & SAU_CTRL_ENABLE_Msk) | - ((SAU_INIT_CTRL_ALLNS << SAU_CTRL_ALLNS_Pos) & SAU_CTRL_ALLNS_Msk) ; - #endif - - #if defined (SCB_CSR_AIRCR_INIT) && (SCB_CSR_AIRCR_INIT == 1U) - SCB->SCR = (SCB->SCR & ~(SCB_SCR_SLEEPDEEPS_Msk )) | - ((SCB_CSR_DEEPSLEEPS_VAL << SCB_SCR_SLEEPDEEPS_Pos) & SCB_SCR_SLEEPDEEPS_Msk); - - SCB->AIRCR = (SCB->AIRCR & ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_SYSRESETREQS_Msk | - SCB_AIRCR_BFHFNMINS_Msk | SCB_AIRCR_PRIS_Msk) ) | - ((0x05FAU << SCB_AIRCR_VECTKEY_Pos) & SCB_AIRCR_VECTKEY_Msk) | - ((SCB_AIRCR_SYSRESETREQS_VAL << SCB_AIRCR_SYSRESETREQS_Pos) & SCB_AIRCR_SYSRESETREQS_Msk) | - ((SCB_AIRCR_PRIS_VAL << SCB_AIRCR_PRIS_Pos) & SCB_AIRCR_PRIS_Msk) | - ((SCB_AIRCR_BFHFNMINS_VAL << SCB_AIRCR_BFHFNMINS_Pos) & SCB_AIRCR_BFHFNMINS_Msk); - #endif /* defined (SCB_CSR_AIRCR_INIT) && (SCB_CSR_AIRCR_INIT == 1U) */ - - #if defined (NVIC_INIT_ITNS0) && (NVIC_INIT_ITNS0 == 1U) - NVIC->ITNS[0] = NVIC_INIT_ITNS0_VAL; - #endif - - #if defined (NVIC_INIT_ITNS1) && (NVIC_INIT_ITNS1 == 1U) - NVIC->ITNS[1] = NVIC_INIT_ITNS1_VAL; - #endif - - #if defined (NVIC_INIT_ITNS2) && (NVIC_INIT_ITNS2 == 1U) - NVIC->ITNS[2] = NVIC_INIT_ITNS2_VAL; - #endif - - #if defined (NVIC_INIT_ITNS3) && (NVIC_INIT_ITNS3 == 1U) - NVIC->ITNS[3] = NVIC_INIT_ITNS3_VAL; - #endif - - /* repeat this for all possible ITNS elements */ - -} - -#endif /* PARTITION_IOTKit_CM23_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/startup_IOTKit_CM23.c b/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/startup_IOTKit_CM23.c deleted file mode 100644 index 8fecd78..0000000 --- a/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/startup_IOTKit_CM23.c +++ /dev/null @@ -1,506 +0,0 @@ -/****************************************************************************** - * @file startup_IOTKit_CM23.c - * @brief CMSIS Startup File for IOTKit_CM23 Device - ******************************************************************************/ -/* Copyright (c) 2015 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (IOTKit_CM23) || defined (IOTKit_CM23_VHT) - #include "IOTKit_CM23.h" -#else - #error device not specified! -#endif - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; -extern uint32_t __STACK_LIMIT; -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -extern uint32_t __STACK_SEAL; -#endif - -extern __NO_RETURN void __PROGRAM_START(void); - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler (void); - void Default_Handler(void); - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -/* Exceptions */ -void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void HardFault_Handler (void) __attribute__ ((weak)); -void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* Core IoT Interrupts */ -void NONSEC_WATCHDOG_RESET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void NONSEC_WATCHDOG_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void S32K_TIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DUALTIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void MPC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PPC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void MSC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void BRIDGE_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* External Interrupts */ -void UART0RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UARTOVF_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ETHERNET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void I2S_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TSC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA0_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA0_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA1_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA1_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA2_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA2_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA3_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA3_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_10_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_11_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_12_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_13_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_14_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_15_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_10_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_11_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_12_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_13_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_14_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_15_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_10_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_11_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_12_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_13_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_14_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_15_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* VSI Interrupts */ -#if defined (IOTKit_CM23_VHT) -void ARM_VSI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#endif - - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - const VECTOR_TABLE_Type __VECTOR_TABLE[256] __VECTOR_TABLE_ATTRIBUTE = { - (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14 NMI Handler */ - HardFault_Handler, /* -13 Hard Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5 SVC Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - PendSV_Handler, /* -2 PendSV Handler */ - SysTick_Handler, /* -1 SysTick Handler */ - - /* Core IoT Interrupts */ - NONSEC_WATCHDOG_RESET_Handler, /* 0 Non-Secure Watchdog Reset Handler */ - NONSEC_WATCHDOG_Handler, /* 1 Non-Secure Watchdog Handler */ - S32K_TIMER_Handler, /* 2 S32K Timer Handler */ - TIMER0_Handler, /* 3 TIMER 0 Handler */ - TIMER1_Handler, /* 4 TIMER 1 Handler */ - DUALTIMER_Handler, /* 5 Dual Timer Handler */ - 0, /* 6 Reserved */ - 0, /* 7 Reserved */ - 0, /* 8 Reserved */ - MPC_Handler, /* 9 MPC Combined (Secure) Handler */ - PPC_Handler, /* 10 PPC Combined (Secure) Handler */ - MSC_Handler, /* 11 MSC Combined (Secure) Handler */ - BRIDGE_ERROR_Handler, /* 12 Bridge Error Combined (Secure) Handler */ - 0, /* 13 Reserved */ - 0, /* 14 Reserved */ - 0, /* 15 Reserved */ - 0, /* 16 Reserved */ - 0, /* 17 Reserved */ - 0, /* 18 Reserved */ - 0, /* 19 Reserved */ - 0, /* 20 Reserved */ - 0, /* 21 Reserved */ - 0, /* 22 Reserved */ - 0, /* 23 Reserved */ - 0, /* 24 Reserved */ - 0, /* 25 Reserved */ - 0, /* 26 Reserved */ - 0, /* 27 Reserved */ - 0, /* 28 Reserved */ - 0, /* 29 Reserved */ - 0, /* 30 Reserved */ - 0, /* 31 Reserved */ - - /* External Interrupts */ - UART0RX_Handler, /* 32 UART 0 RX Handler */ - UART0TX_Handler, /* 33 UART 0 TX Handler */ - UART1RX_Handler, /* 34 UART 1 RX Handler */ - UART1TX_Handler, /* 35 UART 1 TX Handler */ - UART2RX_Handler, /* 36 UART 2 RX Handler */ - UART2TX_Handler, /* 37 UART 2 TX Handler */ - UART3RX_Handler, /* 38 UART 2 RX Handler */ - UART3TX_Handler, /* 39 UART 2 TX Handler */ - UART4RX_Handler, /* 40 UART 2 RX Handler */ - UART4TX_Handler, /* 41 UART 2 TX Handler */ - UART0_Handler, /* 42 UART 0 combined Handler */ - UART1_Handler, /* 43 UART 1 combined Handler */ - UART2_Handler, /* 44 UART 2 combined Handler */ - UART3_Handler, /* 45 UART 3 combined Handler */ - UART4_Handler, /* 46 UART 4 combined Handler */ - UARTOVF_Handler, /* 47 UART 0,1,2,3,4 Overflow Handler */ - ETHERNET_Handler , /* 48 Ethernet Handler */ - I2S_Handler, /* 49 I2S Handler */ - TSC_Handler, /* 50 Touch Screen Handler */ - SPI0_Handler, /* 51 SPI 0 Handler */ - SPI1_Handler, /* 52 SPI 1 Handler */ - SPI2_Handler, /* 53 SPI 2 Handler */ - SPI3_Handler, /* 54 SPI 3 Handler */ - SPI4_Handler, /* 55 SPI 4 Handler */ - DMA0_ERROR_Handler, /* 56 DMA 0 Error Handler */ - DMA0_TC_Handler, /* 57 DMA 0 Terminal Count Handler */ - DMA0_Handler, /* 58 DMA 0 Combined Handler */ - DMA1_ERROR_Handler, /* 59 DMA 1 Error Handler */ - DMA1_TC_Handler, /* 60 DMA 1 Terminal Count Handler */ - DMA1_Handler, /* 61 DMA 1 Combined Handler */ - DMA2_ERROR_Handler, /* 62 DMA 2 Error Handler */ - DMA2_TC_Handler, /* 63 DMA 2 Terminal Count Handler */ - DMA2_Handler, /* 64 DMA 2 Combined Handler */ - DMA3_ERROR_Handler, /* 65 DMA 3 Error Handler */ - DMA3_TC_Handler, /* 66 DMA 3 Terminal Count Handler */ - DMA3_Handler, /* 67 DMA 3 Combined Handler */ - GPIO0_Handler, /* 68 GPIO 0 Combined Handler */ - GPIO1_Handler, /* 69 GPIO 1 Combined Handler */ - GPIO2_Handler, /* 70 GPIO 2 Combined Handler */ - GPIO3_Handler, /* 71 GPIO 3 Combined Handler */ - GPIO0_0_Handler, /* 72 */ /* All P0 I/O pins used as irq source */ - GPIO0_1_Handler, /* 73 */ /* There are 16 pins in total */ - GPIO0_2_Handler, /* 74 */ - GPIO0_3_Handler, /* 75 */ - GPIO0_4_Handler, /* 76 */ - GPIO0_5_Handler, /* 77 */ - GPIO0_6_Handler, /* 78 */ - GPIO0_7_Handler, /* 79 */ - GPIO0_8_Handler, /* 80 */ - GPIO0_9_Handler, /* 81 */ - GPIO0_10_Handler, /* 82 */ - GPIO0_11_Handler, /* 83 */ - GPIO0_12_Handler, /* 84 */ - GPIO0_13_Handler, /* 85 */ - GPIO0_14_Handler, /* 86 */ - GPIO0_15_Handler, /* 87 */ - GPIO1_0_Handler, /* 88 */ /* All P1 I/O pins used as irq source */ - GPIO1_1_Handler, /* 89 */ /* There are 16 pins in total */ - GPIO1_2_Handler, /* 90 */ - GPIO1_3_Handler, /* 91 */ - GPIO1_4_Handler, /* 92 */ - GPIO1_5_Handler, /* 93 */ - GPIO1_6_Handler, /* 94 */ - GPIO1_7_Handler, /* 95 */ - GPIO1_8_Handler, /* 96 */ - GPIO1_9_Handler, /* 97 */ - GPIO1_10_Handler, /* 98 */ - GPIO1_11_Handler, /* 99 */ - GPIO1_12_Handler, /* 100 */ - GPIO1_13_Handler, /* 101 */ - GPIO1_14_Handler, /* 102 */ - GPIO1_15_Handler, /* 103 */ - GPIO2_0_Handler, /* 104 */ /* All P2 I/O pins used as irq source */ - GPIO2_1_Handler, /* 105 */ /* There are 16 pins in total */ - GPIO2_2_Handler, /* 106 */ - GPIO2_3_Handler, /* 107 */ - GPIO2_4_Handler, /* 108 */ - GPIO2_5_Handler, /* 109 */ - GPIO2_6_Handler, /* 110 */ - GPIO2_7_Handler, /* 111 */ - GPIO2_8_Handler, /* 112 */ - GPIO2_9_Handler, /* 113 */ - GPIO2_10_Handler, /* 114 */ - GPIO2_11_Handler, /* 115 */ - GPIO2_12_Handler, /* 116 */ - GPIO2_13_Handler, /* 117 */ - GPIO2_14_Handler, /* 118 */ - GPIO2_15_Handler, /* 119 */ - GPIO3_0_Handler, /* 120 */ /* All P3 I/O pins used as irq source */ - GPIO3_1_Handler, /* 121 */ /* There are 4 pins in total */ - GPIO3_2_Handler, /* 122 */ - GPIO3_3_Handler, /* 123 */ - 0, /* 124 Reserved */ - 0, /* 125 Reserved */ - 0, /* 126 Reserved */ - 0, /* 127 Reserved */ - 0, /* 128 Reserved */ - 0, /* 129 Reserved */ - 0, /* 130 Reserved */ - 0, /* 131 Reserved */ - 0, /* 132 Reserved */ - 0, /* 133 Reserved */ - 0, /* 134 Reserved */ - 0, /* 135 Reserved */ - 0, /* 136 Reserved */ - 0, /* 137 Reserved */ - 0, /* 138 Reserved */ - 0, /* 139 Reserved */ - 0, /* 140 Reserved */ - 0, /* 141 Reserved */ - 0, /* 142 Reserved */ - 0, /* 143 Reserved */ - 0, /* 144 Reserved */ - 0, /* 145 Reserved */ - 0, /* 146 Reserved */ - 0, /* 147 Reserved */ - 0, /* 148 Reserved */ - 0, /* 149 Reserved */ - 0, /* 150 Reserved */ - 0, /* 151 Reserved */ - 0, /* 152 Reserved */ - 0, /* 153 Reserved */ - 0, /* 154 Reserved */ - 0, /* 155 Reserved */ - 0, /* 156 Reserved */ - 0, /* 157 Reserved */ - 0, /* 158 Reserved */ - 0, /* 159 Reserved */ - 0, /* 160 Reserved */ - 0, /* 161 Reserved */ - 0, /* 162 Reserved */ - 0, /* 163 Reserved */ - 0, /* 164 Reserved */ - 0, /* 165 Reserved */ - 0, /* 166 Reserved */ - 0, /* 167 Reserved */ - 0, /* 168 Reserved */ - 0, /* 169 Reserved */ - 0, /* 170 Reserved */ - 0, /* 171 Reserved */ - 0, /* 172 Reserved */ - 0, /* 173 Reserved */ - 0, /* 174 Reserved */ - 0, /* 175 Reserved */ - 0, /* 176 Reserved */ - 0, /* 177 Reserved */ - 0, /* 178 Reserved */ - 0, /* 179 Reserved */ - 0, /* 180 Reserved */ - 0, /* 181 Reserved */ - 0, /* 182 Reserved */ - 0, /* 183 Reserved */ - 0, /* 184 Reserved */ - 0, /* 185 Reserved */ - 0, /* 186 Reserved */ - 0, /* 187 Reserved */ - 0, /* 188 Reserved */ - 0, /* 189 Reserved */ - 0, /* 190 Reserved */ - 0, /* 191 Reserved */ - 0, /* 192 Reserved */ - 0, /* 193 Reserved */ - 0, /* 194 Reserved */ - 0, /* 195 Reserved */ - 0, /* 196 Reserved */ - 0, /* 197 Reserved */ - 0, /* 198 Reserved */ - 0, /* 199 Reserved */ - 0, /* 200 Reserved */ - 0, /* 201 Reserved */ - 0, /* 202 Reserved */ - 0, /* 203 Reserved */ - 0, /* 204 Reserved */ - 0, /* 205 Reserved */ - 0, /* 206 Reserved */ - 0, /* 207 Reserved */ - 0, /* 208 Reserved */ - 0, /* 209 Reserved */ - 0, /* 210 Reserved */ - 0, /* 211 Reserved */ - 0, /* 212 Reserved */ - 0, /* 213 Reserved */ - 0, /* 214 Reserved */ - 0, /* 215 Reserved */ - 0, /* 216 Reserved */ - 0, /* 217 Reserved */ - 0, /* 218 Reserved */ - 0, /* 219 Reserved */ - 0, /* 220 Reserved */ - 0, /* 221 Reserved */ - 0, /* 222 Reserved */ - 0, /* 223 Reserved */ -#if defined (IOTKit_CM23_VHT) - ARM_VSI0_Handler, /* 224 VSI 0 interrupt */ - ARM_VSI1_Handler, /* 225 VSI 1 interrupt */ - ARM_VSI2_Handler, /* 226 VSI 2 interrupt */ - ARM_VSI3_Handler, /* 227 VSI 3 interrupt */ - ARM_VSI4_Handler, /* 228 VSI 4 interrupt */ - ARM_VSI5_Handler, /* 229 VSI 5 interrupt */ - ARM_VSI6_Handler, /* 230 VSI 6 interrupt */ - ARM_VSI7_Handler /* 231 VSI 7 interrupt */ -#else - 0, /* 224 Reserved */ - 0, /* 225 Reserved */ - 0, /* 226 Reserved */ - 0, /* 227 Reserved */ - 0, /* 228 Reserved */ - 0, /* 229 Reserved */ - 0, /* 230 Reserved */ - 0 /* 231 Reserved */ -#endif -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler(void) -{ - __set_PSP((uint32_t)(&__INITIAL_SP)); - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); - __set_PSPLIM((uint32_t)(&__STACK_LIMIT)); - - __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL)); -#endif - - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmissing-noreturn" -#endif - -/*---------------------------------------------------------------------------- - Hard Fault Handler - *----------------------------------------------------------------------------*/ -void HardFault_Handler(void) -{ - while(1); -} - -/*---------------------------------------------------------------------------- - Default Handler for Exceptions / Interrupts - *----------------------------------------------------------------------------*/ -void Default_Handler(void) -{ - while(1); -} - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic pop -#endif diff --git a/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/system_IOTKit_CM23.c b/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/system_IOTKit_CM23.c deleted file mode 100644 index b778da8..0000000 --- a/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/system_IOTKit_CM23.c +++ /dev/null @@ -1,132 +0,0 @@ -/****************************************************************************** - * @file system_IOTKit_CM23.c - * @brief CMSIS Device System Source File for IOTKit_CM23 Device - ******************************************************************************/ -/* Copyright (c) 2015 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (IOTKit_CM23) || defined (IOTKit_CM23_VHT) - #include "IOTKit_CM23.h" -#else - #error device not specified! -#endif - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #include "partition_IOTKit_CM23.h" -#endif - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define XTAL (50000000UL) /* Oscillator frequency */ - -#define SYSTEM_CLOCK (XTAL / 2U) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -// uint32_t blk_cfg, blk_max, blk_size, blk_cnt; -#endif - -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/* start IOT Green configuration ------------------------- */ - - /* configure MPC --------------- */ - - /* configure unsecure code area MPSSSRAM1 (0x00200000 - 0x003FFFFF) */ -// blk_max = IOTKIT_MPCSSRAM1->BLK_MAX; /* = 0x1 */ -// blk_cfg = IOTKIT_MPCSSRAM1->BLK_CFG; /* = 0xC */ -// blk_size = 1UL << (blk_cfg + 5U); /* = 0x20000 */ -// blk_cnt = 0x200000U / blk_size; /* = 0x10 */ - - IOTKIT_MPCSSRAM1->CTRL &= ~(1UL << 8U); /* clear auto increment */ - IOTKIT_MPCSSRAM1->BLK_IDX = 0; /* write LUT index */ - IOTKIT_MPCSSRAM1->BLK_LUT = 0xFFFF0000UL; /* configure blocks */ - - - /* configure unsecure data area MPSSSRAM3 (0x28200000 - 0x283FFFFF) */ -// blk_max = IOTKIT_MPCSSRAM3->BLK_MAX; /* = 0x1 */ -// blk_cfg = IOTKIT_MPCSSRAM3->BLK_CFG; /* = 0xB */ -// blk_size = 1UL << (blk_cfg + 5U); /* = 0x10000 */ -// blk_cnt = 0x200000U / blk_size; /* = 0x20 */ - - IOTKIT_MPCSSRAM3->CTRL &= ~(1UL << 8U); /* clear auto increment */ - IOTKIT_MPCSSRAM3->BLK_IDX = 1; /* write LUT index */ - IOTKIT_MPCSSRAM3->BLK_LUT = 0xFFFFFFFFUL; /* configure blocks */ - - - - /* enable the Non Secure Callable Configuration for IDAU (NSCCFG register) */ - IOTKIT_SPC->NSCCFG |= 1U; - - - /* configure PPC --------------- */ -#if !defined (__USE_SECURE) - /* Allow Non-secure access for SCC/FPGAIO registers */ - IOTKIT_SPC->APBNSPPCEXP[2U] |= ((1UL << 0U) | - (1UL << 2U) ); - /* Allow Non-secure access for SPI1/UART0 registers */ - IOTKIT_SPC->APBNSPPCEXP[1U] |= ((1UL << 1U) | - (1UL << 5U) ); -#endif - -/* end IOT Green configuration --------------------------- */ - - TZ_SAU_Setup(); -#endif - - SystemCoreClock = SYSTEM_CLOCK; -} diff --git a/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/Target.clayer.yml deleted file mode 100644 index 510c0a9..0000000 --- a/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/Target.clayer.yml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: Keil::V2M-MPS2_IOTKit_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: Device:Startup&C Startup - - - component: Keil::Board Support&V2M-MPS2 IOT-Kit:Common - - component: Keil::CMSIS Driver:USART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/vht_config.txt deleted file mode 100644 index 79f362c..0000000 --- a/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/vht_config.txt +++ /dev/null @@ -1,27 +0,0 @@ -## Parameters: -## instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -##------------------------------------------------------------------------------ -fvp_mps2.UART0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -fvp_mps2.UART0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -fvp_mps2.UART0.unbuffered_output=1 # (bool , init-time) default = '0' : Unbuffered output -fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -##------------------------------------------------------------------------------ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -cpu0.BE=0 # (bool , init-time) default = '0' : Initialize processor to big endian mode -cpu0.INITVTOR=0 # (int , init-time) default = '0x10000000' : Secure vector-table offset at reset -cpu0.INITVTORNS=0 # (int , init-time) default = '0x0' : Non-Secure vector-table offset at reset -cpu0.MPU_NS=0x8 # (int , init-time) default = '0x8' : Number of regions in the Non-Secure MPU. If Security Extentions are absent, this is the total number of MPU regions -cpu0.MPU_S=0x8 # (int , init-time) default = '0x8' : Number of regions in the Secure MPU. If Security Extentions are absent, this is ignored -cpu0.SAU=4 # (int , init-time) default = '0x4' : Number of SAU regions (0 => no SAU) -cpu0.SAU_CTRL.ALLNS=0 # (bool , init-time) default = '0' : At reset, the SAU treats entire memory space as NS when the SAU is disabled if this is set -cpu0.SAU_CTRL.ENABLE=0 # (bool , init-time) default = '0' : Enable SAU at reset -cpu0.SECEXT=1 # (bool , init-time) default = '1' : Whether the ARMv8-M Security Extensions are included -cpu0.SYST=2 # (int , init-time) default = '0x2' : Include SysTick timer functionality (0=Absent, 1=Secure only, 2=Secure and NS) -cpu0.VTOR=1 # (bool , init-time) default = '1' : Include Vector Table Offset Register -cpu0.semihosting-enable=0 # (bool , init-time) default = '1' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false. -fvp_mps2.DISABLE_GATING=1 # (bool , init-time) default = '0' : Disable Memory gating logic -fvp_mps2.platform_type=1 # (int , init-time) default = '0x0' : 0:Original MPS2 ; 1:IoT Kit (cut-down SSE-200) ; 2:Full SSE-200; 3:SVOS -idau.NUM_IDAU_REGION=0 # (int , init-time) default = '0x12' : -#------------------------------------------------------------------------------ diff --git a/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/RTE_Device.h deleted file mode 100644 index 7584efd..0000000 --- a/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/RTE_Device.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2016 ARM Ltd. - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. Permission is granted to anyone to use this - * software for any purpose, including commercial applications, and to alter - * it and redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - * - * $Date: 25. April 2016 - * $Revision: V1.0.0 - * - * Project: RTE Device Configuration for ARM CMSDK_CM device - * -------------------------------------------------------------------------- */ - -//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART0 (Universal synchronous asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::CMSIS Driver:USART -#define RTE_USART0 1 - - -// USART1 (Universal synchronous asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART -#define RTE_USART1 0 - - -// USART2 (Universal synchronous asynchronous receiver transmitter) [Driver_USART2] -// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART -#define RTE_UART2 0 - - -// USART3 (Universal synchronous asynchronous receiver transmitter) [Driver_USART3] -// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART -#define RTE_UART3 0 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/gcc_arm.ld b/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/gcc_arm.ld deleted file mode 100644 index 4dcf11b..0000000 --- a/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/gcc_arm.ld +++ /dev/null @@ -1,301 +0,0 @@ -/****************************************************************************** - * @file gcc_arm.ld - * @brief GNU Linker Script for Cortex-M based device - ******************************************************************************/ - -/* -; -------- <<< Use Configuration Wizard in Context Menu >>> ------------------- - */ - -/*---------------------- Flash Configuration ---------------------------------- -; Flash Configuration -; Flash Base Address <0x0-0xFFFFFFFF:8> -; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__ROM_BASE = 0x10000000; -__ROM_SIZE = 0x00400000; - -/*--------------------- Embedded RAM Configuration ---------------------------- -; RAM Configuration -; RAM Base Address <0x0-0xFFFFFFFF:8> -; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__RAM_BASE = 0x38000000; -__RAM_SIZE = 0x00200000; - -/*--------------------- Stack / Heap Configuration ---------------------------- -; Stack / Heap Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__STACK_SIZE = 0x00000400; -__HEAP_SIZE = 0x00000C00; - -/* -; -------------------- <<< end of configuration section >>> ------------------- - */ - -/* ARMv8-M stack sealing: - to use ARMv8-M stack sealing set __STACKSEAL_SIZE to 8 otherwise keep 0 - */ -__STACKSEAL_SIZE = 8; - - -MEMORY -{ - FLASH (rx) : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE - RAM (rwx) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __StackSeal (only if ARMv8-M stack sealing is used) - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - KEEP(*(.vectors)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - /* - * SG veneers: - * All SG veneers are placed in the special output section .gnu.sgstubs. Its start address - * must be set, either with the command line option �--section-start� or in a linker script, - * to indicate where to place these veneers in memory. - */ -/* - .gnu.sgstubs : - { - . = ALIGN(32); - } > FLASH -*/ - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - - LONG (__etext) - LONG (__data_start__) - LONG ((__data_end__ - __data_start__) / 4) - - /* Add each additional data section here */ -/* - LONG (__etext2) - LONG (__data2_start__) - LONG ((__data2_end__ - __data2_start__) / 4) -*/ - __copy_table_end__ = .; - } > FLASH - - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - - LONG (__bss_start__) - LONG ((__bss_end__ - __bss_start__) / 4) - - /* Add each additional bss section here */ -/* - LONG (__bss2_start__) - LONG ((__bss2_end__ - __bss2_start__) / 4) -*/ - __zero_table_end__ = .; - } > FLASH - - /** - * Location counter can end up 2byte aligned with narrow Thumb code but - * __etext is assumed by startup code to be the LMA of a section in RAM - * which must be 4byte aligned - */ - __etext = ALIGN (4); - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.data) - *(.data.*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(4); - /* All data end */ - __data_end__ = .; - - } > RAM - - /* - * Secondary data section, optional - * - * Remember to add each additional data section - * to the .copy.table above to asure proper - * initialization during startup. - */ -/* - __etext2 = ALIGN (4); - - .data2 : AT (__etext2) - { - . = ALIGN(4); - __data2_start__ = .; - *(.data2) - *(.data2.*) - . = ALIGN(4); - __data2_end__ = .; - - } > RAM2 -*/ - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss) - *(.bss.*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM AT > RAM - - /* - * Secondary bss section, optional - * - * Remember to add each additional bss section - * to the .zero.table above to asure proper - * initialization during startup. - */ -/* - .bss2 : - { - . = ALIGN(4); - __bss2_start__ = .; - *(.bss2) - *(.bss2.*) - . = ALIGN(4); - __bss2_end__ = .; - } > RAM2 AT > RAM2 -*/ - - .heap (COPY) : - { - . = ALIGN(8); - __end__ = .; - PROVIDE(end = .); - . = . + __HEAP_SIZE; - . = ALIGN(8); - __HeapLimit = .; - } > RAM - - .stack (ORIGIN(RAM) + LENGTH(RAM) - __STACK_SIZE - __STACKSEAL_SIZE) (COPY) : - { - . = ALIGN(8); - __StackLimit = .; - . = . + __STACK_SIZE; - . = ALIGN(8); - __StackTop = .; - } > RAM - PROVIDE(__stack = __StackTop); - - /* ARMv8-M stack sealing: - to use ARMv8-M stack sealing uncomment '.stackseal' section - */ - - .stackseal (ORIGIN(RAM) + LENGTH(RAM) - __STACKSEAL_SIZE) (COPY) : - { - . = ALIGN(8); - __StackSeal = .; - . = . + 8; - . = ALIGN(8); - } > RAM - - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/partition_IOTKit_CM23.h b/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/partition_IOTKit_CM23.h deleted file mode 100644 index 46622d3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/partition_IOTKit_CM23.h +++ /dev/null @@ -1,585 +0,0 @@ -/****************************************************************************** - * @file partition_IOTKit_CM23.h - * @brief CMSIS-Core Initial Setup for Secure / Non-Secure Zones for IOTKit_CM23 - ******************************************************************************/ -/* Copyright (c) 2015 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#ifndef PARTITION_IOTKit_CM23_H -#define PARTITION_IOTKit_CM23_H - -/* -//-------- <<< Use Configuration Wizard in Context Menu >>> ----------------- -*/ - -/* -// Initialize Security Attribution Unit (SAU) CTRL register -*/ -#define SAU_INIT_CTRL 0 - -/* -// Enable SAU -// Value for SAU->CTRL register bit ENABLE -*/ -#define SAU_INIT_CTRL_ENABLE 1 - -/* -// When SAU is disabled -// <0=> All Memory is Secure -// <1=> All Memory is Non-Secure -// Value for SAU->CTRL register bit ALLNS -// When all Memory is Non-Secure (ALLNS is 1), IDAU can override memory map configuration. -*/ -#define SAU_INIT_CTRL_ALLNS 0 - -/* -// -*/ - -/* -// Initialize Security Attribution Unit (SAU) Address Regions -// SAU configuration specifies regions to be one of: -// - Secure and Non-Secure Callable -// - Non-Secure -// Note: All memory regions not configured by SAU are Secure -*/ -#define SAU_REGIONS_MAX 8 /* Max. number of SAU regions */ - -/* -// Initialize SAU Region 0 -// Setup SAU Region 0 memory attributes -*/ -#define SAU_INIT_REGION0 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START0 0x10000000 /* start address of SAU region 0 */ - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END0 0x101FFFFF /* end address of SAU region 0 */ - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC0 1 -/* -// -*/ - -/* -// Initialize SAU Region 1 -// Setup SAU Region 1 memory attributes -*/ -#define SAU_INIT_REGION1 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START1 0x00200000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END1 0x003FFFFF - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC1 0 -/* -// -*/ - -/* -// Initialize SAU Region 2 -// Setup SAU Region 2 memory attributes -*/ -#define SAU_INIT_REGION2 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START2 0x28200000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END2 0x283FFFFF - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC2 0 -/* -// -*/ - -/* -// Initialize SAU Region 3 -// Setup SAU Region 3 memory attributes -*/ -#define SAU_INIT_REGION3 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START3 0x40000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END3 0x403FFFFF - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC3 0 -/* -// -*/ - -/* -// Initialize SAU Region 4 -// Setup SAU Region 4 memory attributes -*/ -#define SAU_INIT_REGION4 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START4 0x00000000 /* start address of SAU region 4 */ - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END4 0x00000000 /* end address of SAU region 4 */ - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC4 0 -/* -// -*/ - -/* -// Initialize SAU Region 5 -// Setup SAU Region 5 memory attributes -*/ -#define SAU_INIT_REGION5 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START5 0x00000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END5 0x00000000 - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC5 0 -/* -// -*/ - -/* -// Initialize SAU Region 6 -// Setup SAU Region 6 memory attributes -*/ -#define SAU_INIT_REGION6 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START6 0x00000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END6 0x00000000 - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC6 0 -/* -// -*/ - -/* -// Initialize SAU Region 7 -// Setup SAU Region 7 memory attributes -*/ -#define SAU_INIT_REGION7 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START7 0x00000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END7 0x00000000 - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC7 0 -/* -// -*/ - -/* -// -*/ - -/* -// Setup behaviour of Sleep and Exception Handling -*/ -#define SCB_CSR_AIRCR_INIT 1 - -/* -// Deep Sleep can be enabled by -// <0=>Secure and Non-Secure state -// <1=>Secure state only -// Value for SCB->CSR register bit DEEPSLEEPS -*/ -#define SCB_CSR_DEEPSLEEPS_VAL 1 - -/* -// System reset request accessible from -// <0=> Secure and Non-Secure state -// <1=> Secure state only -// Value for SCB->AIRCR register bit SYSRESETREQS -*/ -#define SCB_AIRCR_SYSRESETREQS_VAL 0 - -/* -// Priority of Non-Secure exceptions is -// <0=> Not altered -// <1=> Lowered to 0x80-0xFF -// Value for SCB->AIRCR register bit PRIS -*/ -#define SCB_AIRCR_PRIS_VAL 1 - -/* -// BusFault, HardFault, and NMI target -// <0=> Secure state -// <1=> Non-Secure state -// Value for SCB->AIRCR register bit BFHFNMINS -*/ -#define SCB_AIRCR_BFHFNMINS_VAL 0 - -/* -// -*/ - - -/* -// Setup Interrupt Target -*/ - -/* -// Initialize ITNS 0 (Interrupts 0..31) -*/ -#define NVIC_INIT_ITNS0 0 - -/* -// Interrupts 0..31 -// Non-Secure Watchdog Reset Request <0=> Secure state <1=> Non-Secure state -// Non-Secure Watchdog interrupt <0=> Secure state <1=> Non-Secure state -// S32K Timer interrupt <0=> Secure state <1=> Non-Secure state -// Timer 0 interrupt <0=> Secure state <1=> Non-Secure state -// Timer 1 interrupt <0=> Secure state <1=> Non-Secure state -// Dual Timer interrupt <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS0_VAL 0x00000000 - -/* -// -*/ - -/* -// Initialize ITNS 1 (Interrupts 32..63) -*/ -#define NVIC_INIT_ITNS1 0 - -/* -// Interrupts 32..63 -// UART 0 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 0 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 1 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 1 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 2 teceive interrupt <0=> Secure state <1=> Non-Secure state -// UART 2 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 3 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 3 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 4 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 4 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 0 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 1 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 2 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 3 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 4 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 0, 1, 2, 3, 4 overflow interrupt <0=> Secure state <1=> Non-Secure state -// Ethernet interrupt <0=> Secure state <1=> Non-Secure state -// Audio I2S interrupt <0=> Secure state <1=> Non-Secure state -// Touch Screen interrupt <0=> Secure state <1=> Non-Secure state -// SPI 0 (SPI Header) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 1 (CLCD) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 2 (Shield ADC) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 3 (Shield 0 SPI) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 4 (Shield 1 SPI) interrupt <0=> Secure state <1=> Non-Secure state -// DMA 0 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 0 terminal count interrupt <0=> Secure state <1=> Non-Secure state -// DMA 0 combined interrupt <0=> Secure state <1=> Non-Secure state -// DMA 1 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 1 terminal count interrupt <0=> Secure state <1=> Non-Secure state -// DMA 1 combined interrupt <0=> Secure state <1=> Non-Secure state -// DMA 2 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 2 terminal count interrupt <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS1_VAL 0x00000000 - -/* -// -*/ - -/* -// Initialize ITNS 2 (Interrupts 64..95) -*/ -#define NVIC_INIT_ITNS2 0 - -/* -// Interrupts 64..95 -// DMA 2 combined interrupt <0=> Secure state <1=> Non-Secure state -// DMA 3 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 3 terminal count interrupt <0=> Secure state <1=> Non-Secure state -// DMA 3 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 0 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 1 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 2 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 3 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 4) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 5) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 6) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 7) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 8) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 9) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (10) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (11) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (12) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (13) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (14) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (15) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 4) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 5) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 6) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 7) <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS2_VAL 0x00000000 - -/* -// -*/ - -/* -// Initialize ITNS 3 (Interrupts 96..127) -*/ -#define NVIC_INIT_ITNS3 0 - -/* -// Interrupts 96..127 -// GPIO 1 individual interrupt ( 8) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 9) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (10) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (11) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (12) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (13) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (14) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (15) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 4) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 5) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 6) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 7) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 8) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 9) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (10) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (11) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (12) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (13) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (14) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (15) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS3_VAL 0x00000000 - -/* -// -*/ - -/* -// -*/ - - - -/* - max 128 SAU regions. - SAU regions are defined in partition.h - */ - -#define SAU_INIT_REGION(n) \ - SAU->RNR = (n & SAU_RNR_REGION_Msk); \ - SAU->RBAR = (SAU_INIT_START##n & SAU_RBAR_BADDR_Msk); \ - SAU->RLAR = (SAU_INIT_END##n & SAU_RLAR_LADDR_Msk) | \ - ((SAU_INIT_NSC##n << SAU_RLAR_NSC_Pos) & SAU_RLAR_NSC_Msk) | 1U - -/** - \brief Setup a SAU Region - \details Writes the region information contained in SAU_Region to the - registers SAU_RNR, SAU_RBAR, and SAU_RLAR - */ -__STATIC_INLINE void TZ_SAU_Setup (void) -{ - -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) - - #if defined (SAU_INIT_REGION0) && (SAU_INIT_REGION0 == 1U) - SAU_INIT_REGION(0); - #endif - - #if defined (SAU_INIT_REGION1) && (SAU_INIT_REGION1 == 1U) - SAU_INIT_REGION(1); - #endif - - #if defined (SAU_INIT_REGION2) && (SAU_INIT_REGION2 == 1U) - SAU_INIT_REGION(2); - #endif - - #if defined (SAU_INIT_REGION3) && (SAU_INIT_REGION3 == 1U) - SAU_INIT_REGION(3); - #endif - - #if defined (SAU_INIT_REGION4) && (SAU_INIT_REGION4 == 1U) - SAU_INIT_REGION(4); - #endif - - #if defined (SAU_INIT_REGION5) && (SAU_INIT_REGION5 == 1U) - SAU_INIT_REGION(5); - #endif - - #if defined (SAU_INIT_REGION6) && (SAU_INIT_REGION6 == 1U) - SAU_INIT_REGION(6); - #endif - - #if defined (SAU_INIT_REGION7) && (SAU_INIT_REGION7 == 1U) - SAU_INIT_REGION(7); - #endif - - /* repeat this for all possible SAU regions */ - -#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ - - - #if defined (SAU_INIT_CTRL) && (SAU_INIT_CTRL == 1U) - SAU->CTRL = ((SAU_INIT_CTRL_ENABLE << SAU_CTRL_ENABLE_Pos) & SAU_CTRL_ENABLE_Msk) | - ((SAU_INIT_CTRL_ALLNS << SAU_CTRL_ALLNS_Pos) & SAU_CTRL_ALLNS_Msk) ; - #endif - - #if defined (SCB_CSR_AIRCR_INIT) && (SCB_CSR_AIRCR_INIT == 1U) - SCB->SCR = (SCB->SCR & ~(SCB_SCR_SLEEPDEEPS_Msk )) | - ((SCB_CSR_DEEPSLEEPS_VAL << SCB_SCR_SLEEPDEEPS_Pos) & SCB_SCR_SLEEPDEEPS_Msk); - - SCB->AIRCR = (SCB->AIRCR & ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_SYSRESETREQS_Msk | - SCB_AIRCR_BFHFNMINS_Msk | SCB_AIRCR_PRIS_Msk) ) | - ((0x05FAU << SCB_AIRCR_VECTKEY_Pos) & SCB_AIRCR_VECTKEY_Msk) | - ((SCB_AIRCR_SYSRESETREQS_VAL << SCB_AIRCR_SYSRESETREQS_Pos) & SCB_AIRCR_SYSRESETREQS_Msk) | - ((SCB_AIRCR_PRIS_VAL << SCB_AIRCR_PRIS_Pos) & SCB_AIRCR_PRIS_Msk) | - ((SCB_AIRCR_BFHFNMINS_VAL << SCB_AIRCR_BFHFNMINS_Pos) & SCB_AIRCR_BFHFNMINS_Msk); - #endif /* defined (SCB_CSR_AIRCR_INIT) && (SCB_CSR_AIRCR_INIT == 1U) */ - - #if defined (NVIC_INIT_ITNS0) && (NVIC_INIT_ITNS0 == 1U) - NVIC->ITNS[0] = NVIC_INIT_ITNS0_VAL; - #endif - - #if defined (NVIC_INIT_ITNS1) && (NVIC_INIT_ITNS1 == 1U) - NVIC->ITNS[1] = NVIC_INIT_ITNS1_VAL; - #endif - - #if defined (NVIC_INIT_ITNS2) && (NVIC_INIT_ITNS2 == 1U) - NVIC->ITNS[2] = NVIC_INIT_ITNS2_VAL; - #endif - - #if defined (NVIC_INIT_ITNS3) && (NVIC_INIT_ITNS3 == 1U) - NVIC->ITNS[3] = NVIC_INIT_ITNS3_VAL; - #endif - - /* repeat this for all possible ITNS elements */ - -} - -#endif /* PARTITION_IOTKit_CM23_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/startup_IOTKit_CM23.c b/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/startup_IOTKit_CM23.c deleted file mode 100644 index 8fecd78..0000000 --- a/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/startup_IOTKit_CM23.c +++ /dev/null @@ -1,506 +0,0 @@ -/****************************************************************************** - * @file startup_IOTKit_CM23.c - * @brief CMSIS Startup File for IOTKit_CM23 Device - ******************************************************************************/ -/* Copyright (c) 2015 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (IOTKit_CM23) || defined (IOTKit_CM23_VHT) - #include "IOTKit_CM23.h" -#else - #error device not specified! -#endif - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; -extern uint32_t __STACK_LIMIT; -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -extern uint32_t __STACK_SEAL; -#endif - -extern __NO_RETURN void __PROGRAM_START(void); - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler (void); - void Default_Handler(void); - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -/* Exceptions */ -void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void HardFault_Handler (void) __attribute__ ((weak)); -void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* Core IoT Interrupts */ -void NONSEC_WATCHDOG_RESET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void NONSEC_WATCHDOG_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void S32K_TIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DUALTIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void MPC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PPC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void MSC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void BRIDGE_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* External Interrupts */ -void UART0RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UARTOVF_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ETHERNET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void I2S_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TSC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA0_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA0_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA1_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA1_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA2_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA2_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA3_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA3_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_10_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_11_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_12_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_13_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_14_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_15_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_10_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_11_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_12_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_13_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_14_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_15_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_10_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_11_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_12_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_13_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_14_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_15_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* VSI Interrupts */ -#if defined (IOTKit_CM23_VHT) -void ARM_VSI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#endif - - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - const VECTOR_TABLE_Type __VECTOR_TABLE[256] __VECTOR_TABLE_ATTRIBUTE = { - (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14 NMI Handler */ - HardFault_Handler, /* -13 Hard Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5 SVC Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - PendSV_Handler, /* -2 PendSV Handler */ - SysTick_Handler, /* -1 SysTick Handler */ - - /* Core IoT Interrupts */ - NONSEC_WATCHDOG_RESET_Handler, /* 0 Non-Secure Watchdog Reset Handler */ - NONSEC_WATCHDOG_Handler, /* 1 Non-Secure Watchdog Handler */ - S32K_TIMER_Handler, /* 2 S32K Timer Handler */ - TIMER0_Handler, /* 3 TIMER 0 Handler */ - TIMER1_Handler, /* 4 TIMER 1 Handler */ - DUALTIMER_Handler, /* 5 Dual Timer Handler */ - 0, /* 6 Reserved */ - 0, /* 7 Reserved */ - 0, /* 8 Reserved */ - MPC_Handler, /* 9 MPC Combined (Secure) Handler */ - PPC_Handler, /* 10 PPC Combined (Secure) Handler */ - MSC_Handler, /* 11 MSC Combined (Secure) Handler */ - BRIDGE_ERROR_Handler, /* 12 Bridge Error Combined (Secure) Handler */ - 0, /* 13 Reserved */ - 0, /* 14 Reserved */ - 0, /* 15 Reserved */ - 0, /* 16 Reserved */ - 0, /* 17 Reserved */ - 0, /* 18 Reserved */ - 0, /* 19 Reserved */ - 0, /* 20 Reserved */ - 0, /* 21 Reserved */ - 0, /* 22 Reserved */ - 0, /* 23 Reserved */ - 0, /* 24 Reserved */ - 0, /* 25 Reserved */ - 0, /* 26 Reserved */ - 0, /* 27 Reserved */ - 0, /* 28 Reserved */ - 0, /* 29 Reserved */ - 0, /* 30 Reserved */ - 0, /* 31 Reserved */ - - /* External Interrupts */ - UART0RX_Handler, /* 32 UART 0 RX Handler */ - UART0TX_Handler, /* 33 UART 0 TX Handler */ - UART1RX_Handler, /* 34 UART 1 RX Handler */ - UART1TX_Handler, /* 35 UART 1 TX Handler */ - UART2RX_Handler, /* 36 UART 2 RX Handler */ - UART2TX_Handler, /* 37 UART 2 TX Handler */ - UART3RX_Handler, /* 38 UART 2 RX Handler */ - UART3TX_Handler, /* 39 UART 2 TX Handler */ - UART4RX_Handler, /* 40 UART 2 RX Handler */ - UART4TX_Handler, /* 41 UART 2 TX Handler */ - UART0_Handler, /* 42 UART 0 combined Handler */ - UART1_Handler, /* 43 UART 1 combined Handler */ - UART2_Handler, /* 44 UART 2 combined Handler */ - UART3_Handler, /* 45 UART 3 combined Handler */ - UART4_Handler, /* 46 UART 4 combined Handler */ - UARTOVF_Handler, /* 47 UART 0,1,2,3,4 Overflow Handler */ - ETHERNET_Handler , /* 48 Ethernet Handler */ - I2S_Handler, /* 49 I2S Handler */ - TSC_Handler, /* 50 Touch Screen Handler */ - SPI0_Handler, /* 51 SPI 0 Handler */ - SPI1_Handler, /* 52 SPI 1 Handler */ - SPI2_Handler, /* 53 SPI 2 Handler */ - SPI3_Handler, /* 54 SPI 3 Handler */ - SPI4_Handler, /* 55 SPI 4 Handler */ - DMA0_ERROR_Handler, /* 56 DMA 0 Error Handler */ - DMA0_TC_Handler, /* 57 DMA 0 Terminal Count Handler */ - DMA0_Handler, /* 58 DMA 0 Combined Handler */ - DMA1_ERROR_Handler, /* 59 DMA 1 Error Handler */ - DMA1_TC_Handler, /* 60 DMA 1 Terminal Count Handler */ - DMA1_Handler, /* 61 DMA 1 Combined Handler */ - DMA2_ERROR_Handler, /* 62 DMA 2 Error Handler */ - DMA2_TC_Handler, /* 63 DMA 2 Terminal Count Handler */ - DMA2_Handler, /* 64 DMA 2 Combined Handler */ - DMA3_ERROR_Handler, /* 65 DMA 3 Error Handler */ - DMA3_TC_Handler, /* 66 DMA 3 Terminal Count Handler */ - DMA3_Handler, /* 67 DMA 3 Combined Handler */ - GPIO0_Handler, /* 68 GPIO 0 Combined Handler */ - GPIO1_Handler, /* 69 GPIO 1 Combined Handler */ - GPIO2_Handler, /* 70 GPIO 2 Combined Handler */ - GPIO3_Handler, /* 71 GPIO 3 Combined Handler */ - GPIO0_0_Handler, /* 72 */ /* All P0 I/O pins used as irq source */ - GPIO0_1_Handler, /* 73 */ /* There are 16 pins in total */ - GPIO0_2_Handler, /* 74 */ - GPIO0_3_Handler, /* 75 */ - GPIO0_4_Handler, /* 76 */ - GPIO0_5_Handler, /* 77 */ - GPIO0_6_Handler, /* 78 */ - GPIO0_7_Handler, /* 79 */ - GPIO0_8_Handler, /* 80 */ - GPIO0_9_Handler, /* 81 */ - GPIO0_10_Handler, /* 82 */ - GPIO0_11_Handler, /* 83 */ - GPIO0_12_Handler, /* 84 */ - GPIO0_13_Handler, /* 85 */ - GPIO0_14_Handler, /* 86 */ - GPIO0_15_Handler, /* 87 */ - GPIO1_0_Handler, /* 88 */ /* All P1 I/O pins used as irq source */ - GPIO1_1_Handler, /* 89 */ /* There are 16 pins in total */ - GPIO1_2_Handler, /* 90 */ - GPIO1_3_Handler, /* 91 */ - GPIO1_4_Handler, /* 92 */ - GPIO1_5_Handler, /* 93 */ - GPIO1_6_Handler, /* 94 */ - GPIO1_7_Handler, /* 95 */ - GPIO1_8_Handler, /* 96 */ - GPIO1_9_Handler, /* 97 */ - GPIO1_10_Handler, /* 98 */ - GPIO1_11_Handler, /* 99 */ - GPIO1_12_Handler, /* 100 */ - GPIO1_13_Handler, /* 101 */ - GPIO1_14_Handler, /* 102 */ - GPIO1_15_Handler, /* 103 */ - GPIO2_0_Handler, /* 104 */ /* All P2 I/O pins used as irq source */ - GPIO2_1_Handler, /* 105 */ /* There are 16 pins in total */ - GPIO2_2_Handler, /* 106 */ - GPIO2_3_Handler, /* 107 */ - GPIO2_4_Handler, /* 108 */ - GPIO2_5_Handler, /* 109 */ - GPIO2_6_Handler, /* 110 */ - GPIO2_7_Handler, /* 111 */ - GPIO2_8_Handler, /* 112 */ - GPIO2_9_Handler, /* 113 */ - GPIO2_10_Handler, /* 114 */ - GPIO2_11_Handler, /* 115 */ - GPIO2_12_Handler, /* 116 */ - GPIO2_13_Handler, /* 117 */ - GPIO2_14_Handler, /* 118 */ - GPIO2_15_Handler, /* 119 */ - GPIO3_0_Handler, /* 120 */ /* All P3 I/O pins used as irq source */ - GPIO3_1_Handler, /* 121 */ /* There are 4 pins in total */ - GPIO3_2_Handler, /* 122 */ - GPIO3_3_Handler, /* 123 */ - 0, /* 124 Reserved */ - 0, /* 125 Reserved */ - 0, /* 126 Reserved */ - 0, /* 127 Reserved */ - 0, /* 128 Reserved */ - 0, /* 129 Reserved */ - 0, /* 130 Reserved */ - 0, /* 131 Reserved */ - 0, /* 132 Reserved */ - 0, /* 133 Reserved */ - 0, /* 134 Reserved */ - 0, /* 135 Reserved */ - 0, /* 136 Reserved */ - 0, /* 137 Reserved */ - 0, /* 138 Reserved */ - 0, /* 139 Reserved */ - 0, /* 140 Reserved */ - 0, /* 141 Reserved */ - 0, /* 142 Reserved */ - 0, /* 143 Reserved */ - 0, /* 144 Reserved */ - 0, /* 145 Reserved */ - 0, /* 146 Reserved */ - 0, /* 147 Reserved */ - 0, /* 148 Reserved */ - 0, /* 149 Reserved */ - 0, /* 150 Reserved */ - 0, /* 151 Reserved */ - 0, /* 152 Reserved */ - 0, /* 153 Reserved */ - 0, /* 154 Reserved */ - 0, /* 155 Reserved */ - 0, /* 156 Reserved */ - 0, /* 157 Reserved */ - 0, /* 158 Reserved */ - 0, /* 159 Reserved */ - 0, /* 160 Reserved */ - 0, /* 161 Reserved */ - 0, /* 162 Reserved */ - 0, /* 163 Reserved */ - 0, /* 164 Reserved */ - 0, /* 165 Reserved */ - 0, /* 166 Reserved */ - 0, /* 167 Reserved */ - 0, /* 168 Reserved */ - 0, /* 169 Reserved */ - 0, /* 170 Reserved */ - 0, /* 171 Reserved */ - 0, /* 172 Reserved */ - 0, /* 173 Reserved */ - 0, /* 174 Reserved */ - 0, /* 175 Reserved */ - 0, /* 176 Reserved */ - 0, /* 177 Reserved */ - 0, /* 178 Reserved */ - 0, /* 179 Reserved */ - 0, /* 180 Reserved */ - 0, /* 181 Reserved */ - 0, /* 182 Reserved */ - 0, /* 183 Reserved */ - 0, /* 184 Reserved */ - 0, /* 185 Reserved */ - 0, /* 186 Reserved */ - 0, /* 187 Reserved */ - 0, /* 188 Reserved */ - 0, /* 189 Reserved */ - 0, /* 190 Reserved */ - 0, /* 191 Reserved */ - 0, /* 192 Reserved */ - 0, /* 193 Reserved */ - 0, /* 194 Reserved */ - 0, /* 195 Reserved */ - 0, /* 196 Reserved */ - 0, /* 197 Reserved */ - 0, /* 198 Reserved */ - 0, /* 199 Reserved */ - 0, /* 200 Reserved */ - 0, /* 201 Reserved */ - 0, /* 202 Reserved */ - 0, /* 203 Reserved */ - 0, /* 204 Reserved */ - 0, /* 205 Reserved */ - 0, /* 206 Reserved */ - 0, /* 207 Reserved */ - 0, /* 208 Reserved */ - 0, /* 209 Reserved */ - 0, /* 210 Reserved */ - 0, /* 211 Reserved */ - 0, /* 212 Reserved */ - 0, /* 213 Reserved */ - 0, /* 214 Reserved */ - 0, /* 215 Reserved */ - 0, /* 216 Reserved */ - 0, /* 217 Reserved */ - 0, /* 218 Reserved */ - 0, /* 219 Reserved */ - 0, /* 220 Reserved */ - 0, /* 221 Reserved */ - 0, /* 222 Reserved */ - 0, /* 223 Reserved */ -#if defined (IOTKit_CM23_VHT) - ARM_VSI0_Handler, /* 224 VSI 0 interrupt */ - ARM_VSI1_Handler, /* 225 VSI 1 interrupt */ - ARM_VSI2_Handler, /* 226 VSI 2 interrupt */ - ARM_VSI3_Handler, /* 227 VSI 3 interrupt */ - ARM_VSI4_Handler, /* 228 VSI 4 interrupt */ - ARM_VSI5_Handler, /* 229 VSI 5 interrupt */ - ARM_VSI6_Handler, /* 230 VSI 6 interrupt */ - ARM_VSI7_Handler /* 231 VSI 7 interrupt */ -#else - 0, /* 224 Reserved */ - 0, /* 225 Reserved */ - 0, /* 226 Reserved */ - 0, /* 227 Reserved */ - 0, /* 228 Reserved */ - 0, /* 229 Reserved */ - 0, /* 230 Reserved */ - 0 /* 231 Reserved */ -#endif -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler(void) -{ - __set_PSP((uint32_t)(&__INITIAL_SP)); - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); - __set_PSPLIM((uint32_t)(&__STACK_LIMIT)); - - __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL)); -#endif - - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmissing-noreturn" -#endif - -/*---------------------------------------------------------------------------- - Hard Fault Handler - *----------------------------------------------------------------------------*/ -void HardFault_Handler(void) -{ - while(1); -} - -/*---------------------------------------------------------------------------- - Default Handler for Exceptions / Interrupts - *----------------------------------------------------------------------------*/ -void Default_Handler(void) -{ - while(1); -} - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic pop -#endif diff --git a/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/system_IOTKit_CM23.c b/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/system_IOTKit_CM23.c deleted file mode 100644 index b778da8..0000000 --- a/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/RTE/Device/IOTKit_CM23_VHT/system_IOTKit_CM23.c +++ /dev/null @@ -1,132 +0,0 @@ -/****************************************************************************** - * @file system_IOTKit_CM23.c - * @brief CMSIS Device System Source File for IOTKit_CM23 Device - ******************************************************************************/ -/* Copyright (c) 2015 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (IOTKit_CM23) || defined (IOTKit_CM23_VHT) - #include "IOTKit_CM23.h" -#else - #error device not specified! -#endif - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #include "partition_IOTKit_CM23.h" -#endif - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define XTAL (50000000UL) /* Oscillator frequency */ - -#define SYSTEM_CLOCK (XTAL / 2U) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -// uint32_t blk_cfg, blk_max, blk_size, blk_cnt; -#endif - -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/* start IOT Green configuration ------------------------- */ - - /* configure MPC --------------- */ - - /* configure unsecure code area MPSSSRAM1 (0x00200000 - 0x003FFFFF) */ -// blk_max = IOTKIT_MPCSSRAM1->BLK_MAX; /* = 0x1 */ -// blk_cfg = IOTKIT_MPCSSRAM1->BLK_CFG; /* = 0xC */ -// blk_size = 1UL << (blk_cfg + 5U); /* = 0x20000 */ -// blk_cnt = 0x200000U / blk_size; /* = 0x10 */ - - IOTKIT_MPCSSRAM1->CTRL &= ~(1UL << 8U); /* clear auto increment */ - IOTKIT_MPCSSRAM1->BLK_IDX = 0; /* write LUT index */ - IOTKIT_MPCSSRAM1->BLK_LUT = 0xFFFF0000UL; /* configure blocks */ - - - /* configure unsecure data area MPSSSRAM3 (0x28200000 - 0x283FFFFF) */ -// blk_max = IOTKIT_MPCSSRAM3->BLK_MAX; /* = 0x1 */ -// blk_cfg = IOTKIT_MPCSSRAM3->BLK_CFG; /* = 0xB */ -// blk_size = 1UL << (blk_cfg + 5U); /* = 0x10000 */ -// blk_cnt = 0x200000U / blk_size; /* = 0x20 */ - - IOTKIT_MPCSSRAM3->CTRL &= ~(1UL << 8U); /* clear auto increment */ - IOTKIT_MPCSSRAM3->BLK_IDX = 1; /* write LUT index */ - IOTKIT_MPCSSRAM3->BLK_LUT = 0xFFFFFFFFUL; /* configure blocks */ - - - - /* enable the Non Secure Callable Configuration for IDAU (NSCCFG register) */ - IOTKIT_SPC->NSCCFG |= 1U; - - - /* configure PPC --------------- */ -#if !defined (__USE_SECURE) - /* Allow Non-secure access for SCC/FPGAIO registers */ - IOTKIT_SPC->APBNSPPCEXP[2U] |= ((1UL << 0U) | - (1UL << 2U) ); - /* Allow Non-secure access for SPI1/UART0 registers */ - IOTKIT_SPC->APBNSPPCEXP[1U] |= ((1UL << 1U) | - (1UL << 5U) ); -#endif - -/* end IOT Green configuration --------------------------- */ - - TZ_SAU_Setup(); -#endif - - SystemCoreClock = SYSTEM_CLOCK; -} diff --git a/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/Target.clayer.yml deleted file mode 100644 index 510c0a9..0000000 --- a/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/Target.clayer.yml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: Keil::V2M-MPS2_IOTKit_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: Device:Startup&C Startup - - - component: Keil::Board Support&V2M-MPS2 IOT-Kit:Common - - component: Keil::CMSIS Driver:USART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/vht_config.txt deleted file mode 100644 index 79f362c..0000000 --- a/tensorflow-test-ng/Layer/Target/CM23_VHT_GCC/vht_config.txt +++ /dev/null @@ -1,27 +0,0 @@ -## Parameters: -## instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -##------------------------------------------------------------------------------ -fvp_mps2.UART0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -fvp_mps2.UART0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -fvp_mps2.UART0.unbuffered_output=1 # (bool , init-time) default = '0' : Unbuffered output -fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -##------------------------------------------------------------------------------ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -cpu0.BE=0 # (bool , init-time) default = '0' : Initialize processor to big endian mode -cpu0.INITVTOR=0 # (int , init-time) default = '0x10000000' : Secure vector-table offset at reset -cpu0.INITVTORNS=0 # (int , init-time) default = '0x0' : Non-Secure vector-table offset at reset -cpu0.MPU_NS=0x8 # (int , init-time) default = '0x8' : Number of regions in the Non-Secure MPU. If Security Extentions are absent, this is the total number of MPU regions -cpu0.MPU_S=0x8 # (int , init-time) default = '0x8' : Number of regions in the Secure MPU. If Security Extentions are absent, this is ignored -cpu0.SAU=4 # (int , init-time) default = '0x4' : Number of SAU regions (0 => no SAU) -cpu0.SAU_CTRL.ALLNS=0 # (bool , init-time) default = '0' : At reset, the SAU treats entire memory space as NS when the SAU is disabled if this is set -cpu0.SAU_CTRL.ENABLE=0 # (bool , init-time) default = '0' : Enable SAU at reset -cpu0.SECEXT=1 # (bool , init-time) default = '1' : Whether the ARMv8-M Security Extensions are included -cpu0.SYST=2 # (int , init-time) default = '0x2' : Include SysTick timer functionality (0=Absent, 1=Secure only, 2=Secure and NS) -cpu0.VTOR=1 # (bool , init-time) default = '1' : Include Vector Table Offset Register -cpu0.semihosting-enable=0 # (bool , init-time) default = '1' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false. -fvp_mps2.DISABLE_GATING=1 # (bool , init-time) default = '0' : Disable Memory gating logic -fvp_mps2.platform_type=1 # (int , init-time) default = '0x0' : 0:Original MPS2 ; 1:IoT Kit (cut-down SSE-200) ; 2:Full SSE-200; 3:SVOS -idau.NUM_IDAU_REGION=0 # (int , init-time) default = '0x12' : -#------------------------------------------------------------------------------ diff --git a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/RTE_Device.h deleted file mode 100644 index 7584efd..0000000 --- a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/RTE_Device.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2016 ARM Ltd. - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. Permission is granted to anyone to use this - * software for any purpose, including commercial applications, and to alter - * it and redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - * - * $Date: 25. April 2016 - * $Revision: V1.0.0 - * - * Project: RTE Device Configuration for ARM CMSDK_CM device - * -------------------------------------------------------------------------- */ - -//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART0 (Universal synchronous asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::CMSIS Driver:USART -#define RTE_USART0 1 - - -// USART1 (Universal synchronous asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART -#define RTE_USART1 0 - - -// USART2 (Universal synchronous asynchronous receiver transmitter) [Driver_USART2] -// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART -#define RTE_UART2 0 - - -// USART3 (Universal synchronous asynchronous receiver transmitter) [Driver_USART3] -// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART -#define RTE_UART3 0 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/partition_IOTKit_CM33.h b/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/partition_IOTKit_CM33.h deleted file mode 100644 index 98585d3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/partition_IOTKit_CM33.h +++ /dev/null @@ -1,637 +0,0 @@ -/****************************************************************************** - * @file partition_IOTKit_CM33.h - * @brief CMSIS-Core Initial Setup for Secure / Non-Secure Zones for IOTKit_CM33 - ******************************************************************************/ -/* Copyright (c) 2015 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#ifndef PARTITION_IOTKit_CM33_H -#define PARTITION_IOTKit_CM33_H - -/* -//-------- <<< Use Configuration Wizard in Context Menu >>> ----------------- -*/ - -/* -// Initialize Security Attribution Unit (SAU) CTRL register -*/ -#define SAU_INIT_CTRL 0 - -/* -// Enable SAU -// Value for SAU->CTRL register bit ENABLE -*/ -#define SAU_INIT_CTRL_ENABLE 1 - -/* -// When SAU is disabled -// <0=> All Memory is Secure -// <1=> All Memory is Non-Secure -// Value for SAU->CTRL register bit ALLNS -// When all Memory is Non-Secure (ALLNS is 1), IDAU can override memory map configuration. -*/ -#define SAU_INIT_CTRL_ALLNS 0 - -/* -// -*/ - -/* -// Initialize Security Attribution Unit (SAU) Address Regions -// SAU configuration specifies regions to be one of: -// - Secure and Non-Secure Callable -// - Non-Secure -// Note: All memory regions not configured by SAU are Secure -*/ -#define SAU_REGIONS_MAX 8 /* Max. number of SAU regions */ - -/* -// Initialize SAU Region 0 -// Setup SAU Region 0 memory attributes -*/ -#define SAU_INIT_REGION0 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START0 0x10000000 /* start address of SAU region 0 */ - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END0 0x101FFFFF /* end address of SAU region 0 */ - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC0 1 -/* -// -*/ - -/* -// Initialize SAU Region 1 -// Setup SAU Region 1 memory attributes -*/ -#define SAU_INIT_REGION1 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START1 0x00200000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END1 0x003FFFFF - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC1 0 -/* -// -*/ - -/* -// Initialize SAU Region 2 -// Setup SAU Region 2 memory attributes -*/ -#define SAU_INIT_REGION2 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START2 0x28200000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END2 0x283FFFFF - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC2 0 -/* -// -*/ - -/* -// Initialize SAU Region 3 -// Setup SAU Region 3 memory attributes -*/ -#define SAU_INIT_REGION3 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START3 0x40000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END3 0x403FFFFF - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC3 0 -/* -// -*/ - -/* -// Initialize SAU Region 4 -// Setup SAU Region 4 memory attributes -*/ -#define SAU_INIT_REGION4 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START4 0x00000000 /* start address of SAU region 4 */ - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END4 0x00000000 /* end address of SAU region 4 */ - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC4 0 -/* -// -*/ - -/* -// Initialize SAU Region 5 -// Setup SAU Region 5 memory attributes -*/ -#define SAU_INIT_REGION5 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START5 0x00000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END5 0x00000000 - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC5 0 -/* -// -*/ - -/* -// Initialize SAU Region 6 -// Setup SAU Region 6 memory attributes -*/ -#define SAU_INIT_REGION6 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START6 0x00000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END6 0x00000000 - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC6 0 -/* -// -*/ - -/* -// Initialize SAU Region 7 -// Setup SAU Region 7 memory attributes -*/ -#define SAU_INIT_REGION7 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START7 0x00000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END7 0x00000000 - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC7 0 -/* -// -*/ - -/* -// -*/ - -/* -// Setup behaviour of Sleep and Exception Handling -*/ -#define SCB_CSR_AIRCR_INIT 1 - -/* -// Deep Sleep can be enabled by -// <0=>Secure and Non-Secure state -// <1=>Secure state only -// Value for SCB->CSR register bit DEEPSLEEPS -*/ -#define SCB_CSR_DEEPSLEEPS_VAL 1 - -/* -// System reset request accessible from -// <0=> Secure and Non-Secure state -// <1=> Secure state only -// Value for SCB->AIRCR register bit SYSRESETREQS -*/ -#define SCB_AIRCR_SYSRESETREQS_VAL 0 - -/* -// Priority of Non-Secure exceptions is -// <0=> Not altered -// <1=> Lowered to 0x80-0xFF -// Value for SCB->AIRCR register bit PRIS -*/ -#define SCB_AIRCR_PRIS_VAL 1 - -/* -// BusFault, HardFault, and NMI target -// <0=> Secure state -// <1=> Non-Secure state -// Value for SCB->AIRCR register bit BFHFNMINS -*/ -#define SCB_AIRCR_BFHFNMINS_VAL 0 - -/* -// -*/ - -/* -// Setup behaviour of Floating Point Unit -*/ -#define TZ_FPU_NS_USAGE 1 - -/* -// Floating Point Unit usage -// <0=> Secure state only -// <3=> Secure and Non-Secure state -// Value for SCB->NSACR register bits CP10, CP11 -*/ -#define SCB_NSACR_CP10_11_VAL 3 - -/* -// Treat floating-point registers as Secure -// <0=> Disabled -// <1=> Enabled -// Value for FPU->FPCCR register bit TS -*/ -#define FPU_FPCCR_TS_VAL 0 - -/* -// Clear on return (CLRONRET) accessibility -// <0=> Secure and Non-Secure state -// <1=> Secure state only -// Value for FPU->FPCCR register bit CLRONRETS -*/ -#define FPU_FPCCR_CLRONRETS_VAL 0 - -/* -// Clear floating-point caller saved registers on exception return -// <0=> Disabled -// <1=> Enabled -// Value for FPU->FPCCR register bit CLRONRET -*/ -#define FPU_FPCCR_CLRONRET_VAL 1 - -/* -// -*/ - -/* -// Setup Interrupt Target -*/ - -/* -// Initialize ITNS 0 (Interrupts 0..31) -*/ -#define NVIC_INIT_ITNS0 0 - -/* -// Interrupts 0..31 -// Non-Secure Watchdog Reset Request <0=> Secure state <1=> Non-Secure state -// Non-Secure Watchdog interrupt <0=> Secure state <1=> Non-Secure state -// S32K Timer interrupt <0=> Secure state <1=> Non-Secure state -// Timer 0 interrupt <0=> Secure state <1=> Non-Secure state -// Timer 1 interrupt <0=> Secure state <1=> Non-Secure state -// Dual Timer interrupt <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS0_VAL 0x00000000 - -/* -// -*/ - -/* -// Initialize ITNS 1 (Interrupts 32..63) -*/ -#define NVIC_INIT_ITNS1 0 - -/* -// Interrupts 32..63 -// UART 0 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 0 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 1 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 1 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 2 teceive interrupt <0=> Secure state <1=> Non-Secure state -// UART 2 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 3 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 3 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 4 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 4 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 0 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 1 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 2 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 3 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 4 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 0, 1, 2, 3, 4 overflow interrupt <0=> Secure state <1=> Non-Secure state -// Ethernet interrupt <0=> Secure state <1=> Non-Secure state -// Audio I2S interrupt <0=> Secure state <1=> Non-Secure state -// Touch Screen interrupt <0=> Secure state <1=> Non-Secure state -// SPI 0 (SPI Header) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 1 (CLCD) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 2 (Shield ADC) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 3 (Shield 0 SPI) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 4 (Shield 1 SPI) interrupt <0=> Secure state <1=> Non-Secure state -// DMA 0 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 0 terminal count interrupt <0=> Secure state <1=> Non-Secure state -// DMA 0 combined interrupt <0=> Secure state <1=> Non-Secure state -// DMA 1 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 1 terminal count interrupt <0=> Secure state <1=> Non-Secure state -// DMA 1 combined interrupt <0=> Secure state <1=> Non-Secure state -// DMA 2 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 2 terminal count interrupt <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS1_VAL 0x00000000 - -/* -// -*/ - -/* -// Initialize ITNS 2 (Interrupts 64..95) -*/ -#define NVIC_INIT_ITNS2 0 - -/* -// Interrupts 64..95 -// DMA 2 combined interrupt <0=> Secure state <1=> Non-Secure state -// DMA 3 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 3 terminal count interrupt <0=> Secure state <1=> Non-Secure state -// DMA 3 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 0 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 1 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 2 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 3 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 4) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 5) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 6) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 7) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 8) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 9) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (10) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (11) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (12) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (13) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (14) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (15) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 4) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 5) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 6) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 7) <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS2_VAL 0x00000000 - -/* -// -*/ - -/* -// Initialize ITNS 3 (Interrupts 96..127) -*/ -#define NVIC_INIT_ITNS3 0 - -/* -// Interrupts 96..127 -// GPIO 1 individual interrupt ( 8) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 9) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (10) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (11) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (12) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (13) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (14) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (15) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 4) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 5) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 6) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 7) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 8) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 9) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (10) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (11) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (12) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (13) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (14) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (15) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS3_VAL 0x00000000 - -/* -// -*/ - -/* -// -*/ - - - -/* - max 128 SAU regions. - SAU regions are defined in partition.h - */ - -#define SAU_INIT_REGION(n) \ - SAU->RNR = (n & SAU_RNR_REGION_Msk); \ - SAU->RBAR = (SAU_INIT_START##n & SAU_RBAR_BADDR_Msk); \ - SAU->RLAR = (SAU_INIT_END##n & SAU_RLAR_LADDR_Msk) | \ - ((SAU_INIT_NSC##n << SAU_RLAR_NSC_Pos) & SAU_RLAR_NSC_Msk) | 1U - -/** - \brief Setup a SAU Region - \details Writes the region information contained in SAU_Region to the - registers SAU_RNR, SAU_RBAR, and SAU_RLAR - */ -__STATIC_INLINE void TZ_SAU_Setup (void) -{ - -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) - - #if defined (SAU_INIT_REGION0) && (SAU_INIT_REGION0 == 1U) - SAU_INIT_REGION(0); - #endif - - #if defined (SAU_INIT_REGION1) && (SAU_INIT_REGION1 == 1U) - SAU_INIT_REGION(1); - #endif - - #if defined (SAU_INIT_REGION2) && (SAU_INIT_REGION2 == 1U) - SAU_INIT_REGION(2); - #endif - - #if defined (SAU_INIT_REGION3) && (SAU_INIT_REGION3 == 1U) - SAU_INIT_REGION(3); - #endif - - #if defined (SAU_INIT_REGION4) && (SAU_INIT_REGION4 == 1U) - SAU_INIT_REGION(4); - #endif - - #if defined (SAU_INIT_REGION5) && (SAU_INIT_REGION5 == 1U) - SAU_INIT_REGION(5); - #endif - - #if defined (SAU_INIT_REGION6) && (SAU_INIT_REGION6 == 1U) - SAU_INIT_REGION(6); - #endif - - #if defined (SAU_INIT_REGION7) && (SAU_INIT_REGION7 == 1U) - SAU_INIT_REGION(7); - #endif - - /* repeat this for all possible SAU regions */ - -#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ - - - #if defined (SAU_INIT_CTRL) && (SAU_INIT_CTRL == 1U) - SAU->CTRL = ((SAU_INIT_CTRL_ENABLE << SAU_CTRL_ENABLE_Pos) & SAU_CTRL_ENABLE_Msk) | - ((SAU_INIT_CTRL_ALLNS << SAU_CTRL_ALLNS_Pos) & SAU_CTRL_ALLNS_Msk) ; - #endif - - #if defined (SCB_CSR_AIRCR_INIT) && (SCB_CSR_AIRCR_INIT == 1U) - SCB->SCR = (SCB->SCR & ~(SCB_SCR_SLEEPDEEPS_Msk )) | - ((SCB_CSR_DEEPSLEEPS_VAL << SCB_SCR_SLEEPDEEPS_Pos) & SCB_SCR_SLEEPDEEPS_Msk); - - SCB->AIRCR = (SCB->AIRCR & ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_SYSRESETREQS_Msk | - SCB_AIRCR_BFHFNMINS_Msk | SCB_AIRCR_PRIS_Msk )) | - ((0x05FAU << SCB_AIRCR_VECTKEY_Pos) & SCB_AIRCR_VECTKEY_Msk) | - ((SCB_AIRCR_SYSRESETREQS_VAL << SCB_AIRCR_SYSRESETREQS_Pos) & SCB_AIRCR_SYSRESETREQS_Msk) | - ((SCB_AIRCR_PRIS_VAL << SCB_AIRCR_PRIS_Pos) & SCB_AIRCR_PRIS_Msk) | - ((SCB_AIRCR_BFHFNMINS_VAL << SCB_AIRCR_BFHFNMINS_Pos) & SCB_AIRCR_BFHFNMINS_Msk); - #endif /* defined (SCB_CSR_AIRCR_INIT) && (SCB_CSR_AIRCR_INIT == 1U) */ - - #if defined (__FPU_USED) && (__FPU_USED == 1U) && \ - defined (TZ_FPU_NS_USAGE) && (TZ_FPU_NS_USAGE == 1U) - - SCB->NSACR = (SCB->NSACR & ~(SCB_NSACR_CP10_Msk | SCB_NSACR_CP10_Msk)) | - ((SCB_NSACR_CP10_11_VAL << SCB_NSACR_CP10_Pos) & (SCB_NSACR_CP10_Msk | SCB_NSACR_CP11_Msk)); - - FPU->FPCCR = (FPU->FPCCR & ~(FPU_FPCCR_TS_Msk | FPU_FPCCR_CLRONRETS_Msk | FPU_FPCCR_CLRONRET_Msk)) | - ((FPU_FPCCR_TS_VAL << FPU_FPCCR_TS_Pos ) & FPU_FPCCR_TS_Msk ) | - ((FPU_FPCCR_CLRONRETS_VAL << FPU_FPCCR_CLRONRETS_Pos) & FPU_FPCCR_CLRONRETS_Msk) | - ((FPU_FPCCR_CLRONRET_VAL << FPU_FPCCR_CLRONRET_Pos ) & FPU_FPCCR_CLRONRET_Msk ); - #endif - - #if defined (NVIC_INIT_ITNS0) && (NVIC_INIT_ITNS0 == 1U) - NVIC->ITNS[0] = NVIC_INIT_ITNS0_VAL; - #endif - - #if defined (NVIC_INIT_ITNS1) && (NVIC_INIT_ITNS1 == 1U) - NVIC->ITNS[1] = NVIC_INIT_ITNS1_VAL; - #endif - - #if defined (NVIC_INIT_ITNS2) && (NVIC_INIT_ITNS2 == 1U) - NVIC->ITNS[2] = NVIC_INIT_ITNS2_VAL; - #endif - - #if defined (NVIC_INIT_ITNS3) && (NVIC_INIT_ITNS3 == 1U) - NVIC->ITNS[3] = NVIC_INIT_ITNS3_VAL; - #endif - - /* repeat this for all possible ITNS elements */ - -} - -#endif /* PARTITION_IOTKit_CM33_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/startup_IOTKit_CM33.c b/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/startup_IOTKit_CM33.c deleted file mode 100644 index e06f735..0000000 --- a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/startup_IOTKit_CM33.c +++ /dev/null @@ -1,513 +0,0 @@ -/****************************************************************************** - * @file startup_IOTKit_CM33.c - * @brief CMSIS Startup File for IOTKit_CM33 Device - ******************************************************************************/ -/* Copyright (c) 2015 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (IOTKit_CM33) || defined (IOTKit_CM33_VHT) - #include "IOTKit_CM33.h" -#elif defined (IOTKit_CM33_FP) || defined (IOTKit_CM33_FP_VHT) - #include "IOTKit_CM33_FP.h" -#else - #error device not specified! -#endif - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; -extern uint32_t __STACK_LIMIT; -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -extern uint32_t __STACK_SEAL; -#endif - -extern __NO_RETURN void __PROGRAM_START(void); - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler (void); - void Default_Handler(void); - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -/* Exceptions */ -void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void HardFault_Handler (void) __attribute__ ((weak)); -void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SecureFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* Core IoT Interrupts */ -void NONSEC_WATCHDOG_RESET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void NONSEC_WATCHDOG_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void S32K_TIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DUALTIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void MPC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PPC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void MSC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void BRIDGE_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* External Interrupts */ -void UART0RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UARTOVF_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ETHERNET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void I2S_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TSC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA0_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA0_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA1_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA1_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA2_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA2_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA3_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA3_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_10_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_11_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_12_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_13_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_14_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_15_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_10_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_11_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_12_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_13_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_14_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_15_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_10_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_11_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_12_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_13_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_14_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_15_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* VSI Interrupts */ -#if defined (IOTKit_CM33_VHT) || defined (IOTKit_CM33_FP_VHT) -void ARM_VSI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#endif - - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - const VECTOR_TABLE_Type __VECTOR_TABLE[256] __VECTOR_TABLE_ATTRIBUTE = { - (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14 NMI Handler */ - HardFault_Handler, /* -13 Hard Fault Handler */ - MemManage_Handler, /* -12 MPU Fault Handler */ - BusFault_Handler, /* -11 Bus Fault Handler */ - UsageFault_Handler, /* -10 Usage Fault Handler */ - SecureFault_Handler, /* -9 Secure Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5 SVC Handler */ - DebugMon_Handler, /* -4 Debug Monitor Handler */ - 0, /* Reserved */ - PendSV_Handler, /* -2 PendSV Handler */ - SysTick_Handler, /* -1 SysTick Handler */ - - /* Core IoT Interrupts */ - NONSEC_WATCHDOG_RESET_Handler, /* 0 Non-Secure Watchdog Reset Handler */ - NONSEC_WATCHDOG_Handler, /* 1 Non-Secure Watchdog Handler */ - S32K_TIMER_Handler, /* 2 S32K Timer Handler */ - TIMER0_Handler, /* 3 TIMER 0 Handler */ - TIMER1_Handler, /* 4 TIMER 1 Handler */ - DUALTIMER_Handler, /* 5 Dual Timer Handler */ - 0, /* 6 Reserved */ - 0, /* 7 Reserved */ - 0, /* 8 Reserved */ - MPC_Handler, /* 9 MPC Combined (Secure) Handler */ - PPC_Handler, /* 10 PPC Combined (Secure) Handler */ - MSC_Handler, /* 11 MSC Combined (Secure) Handler */ - BRIDGE_ERROR_Handler, /* 12 Bridge Error Combined (Secure) Handler */ - 0, /* 13 Reserved */ - 0, /* 14 Reserved */ - 0, /* 15 Reserved */ - 0, /* 16 Reserved */ - 0, /* 17 Reserved */ - 0, /* 18 Reserved */ - 0, /* 19 Reserved */ - 0, /* 20 Reserved */ - 0, /* 21 Reserved */ - 0, /* 22 Reserved */ - 0, /* 23 Reserved */ - 0, /* 24 Reserved */ - 0, /* 25 Reserved */ - 0, /* 26 Reserved */ - 0, /* 27 Reserved */ - 0, /* 28 Reserved */ - 0, /* 29 Reserved */ - 0, /* 30 Reserved */ - 0, /* 31 Reserved */ - - /* External Interrupts */ - UART0RX_Handler, /* 32 UART 0 RX Handler */ - UART0TX_Handler, /* 33 UART 0 TX Handler */ - UART1RX_Handler, /* 34 UART 1 RX Handler */ - UART1TX_Handler, /* 35 UART 1 TX Handler */ - UART2RX_Handler, /* 36 UART 2 RX Handler */ - UART2TX_Handler, /* 37 UART 2 TX Handler */ - UART3RX_Handler, /* 38 UART 2 RX Handler */ - UART3TX_Handler, /* 39 UART 2 TX Handler */ - UART4RX_Handler, /* 40 UART 2 RX Handler */ - UART4TX_Handler, /* 41 UART 2 TX Handler */ - UART0_Handler, /* 42 UART 0 combined Handler */ - UART1_Handler, /* 43 UART 1 combined Handler */ - UART2_Handler, /* 44 UART 2 combined Handler */ - UART3_Handler, /* 45 UART 3 combined Handler */ - UART4_Handler, /* 46 UART 4 combined Handler */ - UARTOVF_Handler, /* 47 UART 0,1,2,3,4 Overflow Handler */ - ETHERNET_Handler , /* 48 Ethernet Handler */ - I2S_Handler, /* 49 I2S Handler */ - TSC_Handler, /* 50 Touch Screen Handler */ - SPI0_Handler, /* 51 SPI 0 Handler */ - SPI1_Handler, /* 52 SPI 1 Handler */ - SPI2_Handler, /* 53 SPI 2 Handler */ - SPI3_Handler, /* 54 SPI 3 Handler */ - SPI4_Handler, /* 55 SPI 4 Handler */ - DMA0_ERROR_Handler, /* 56 DMA 0 Error Handler */ - DMA0_TC_Handler, /* 57 DMA 0 Terminal Count Handler */ - DMA0_Handler, /* 58 DMA 0 Combined Handler */ - DMA1_ERROR_Handler, /* 59 DMA 1 Error Handler */ - DMA1_TC_Handler, /* 60 DMA 1 Terminal Count Handler */ - DMA1_Handler, /* 61 DMA 1 Combined Handler */ - DMA2_ERROR_Handler, /* 62 DMA 2 Error Handler */ - DMA2_TC_Handler, /* 63 DMA 2 Terminal Count Handler */ - DMA2_Handler, /* 64 DMA 2 Combined Handler */ - DMA3_ERROR_Handler, /* 65 DMA 3 Error Handler */ - DMA3_TC_Handler, /* 66 DMA 3 Terminal Count Handler */ - DMA3_Handler, /* 67 DMA 3 Combined Handler */ - GPIO0_Handler, /* 68 GPIO 0 Combined Handler */ - GPIO1_Handler, /* 69 GPIO 1 Combined Handler */ - GPIO2_Handler, /* 70 GPIO 2 Combined Handler */ - GPIO3_Handler, /* 71 GPIO 3 Combined Handler */ - GPIO0_0_Handler, /* 72 */ /* All P0 I/O pins used as irq source */ - GPIO0_1_Handler, /* 73 */ /* There are 16 pins in total */ - GPIO0_2_Handler, /* 74 */ - GPIO0_3_Handler, /* 75 */ - GPIO0_4_Handler, /* 76 */ - GPIO0_5_Handler, /* 77 */ - GPIO0_6_Handler, /* 78 */ - GPIO0_7_Handler, /* 79 */ - GPIO0_8_Handler, /* 80 */ - GPIO0_9_Handler, /* 81 */ - GPIO0_10_Handler, /* 82 */ - GPIO0_11_Handler, /* 83 */ - GPIO0_12_Handler, /* 84 */ - GPIO0_13_Handler, /* 85 */ - GPIO0_14_Handler, /* 86 */ - GPIO0_15_Handler, /* 87 */ - GPIO1_0_Handler, /* 88 */ /* All P1 I/O pins used as irq source */ - GPIO1_1_Handler, /* 89 */ /* There are 16 pins in total */ - GPIO1_2_Handler, /* 90 */ - GPIO1_3_Handler, /* 91 */ - GPIO1_4_Handler, /* 92 */ - GPIO1_5_Handler, /* 93 */ - GPIO1_6_Handler, /* 94 */ - GPIO1_7_Handler, /* 95 */ - GPIO1_8_Handler, /* 96 */ - GPIO1_9_Handler, /* 97 */ - GPIO1_10_Handler, /* 98 */ - GPIO1_11_Handler, /* 99 */ - GPIO1_12_Handler, /* 100 */ - GPIO1_13_Handler, /* 101 */ - GPIO1_14_Handler, /* 102 */ - GPIO1_15_Handler, /* 103 */ - GPIO2_0_Handler, /* 104 */ /* All P2 I/O pins used as irq source */ - GPIO2_1_Handler, /* 105 */ /* There are 16 pins in total */ - GPIO2_2_Handler, /* 106 */ - GPIO2_3_Handler, /* 107 */ - GPIO2_4_Handler, /* 108 */ - GPIO2_5_Handler, /* 109 */ - GPIO2_6_Handler, /* 110 */ - GPIO2_7_Handler, /* 111 */ - GPIO2_8_Handler, /* 112 */ - GPIO2_9_Handler, /* 113 */ - GPIO2_10_Handler, /* 114 */ - GPIO2_11_Handler, /* 115 */ - GPIO2_12_Handler, /* 116 */ - GPIO2_13_Handler, /* 117 */ - GPIO2_14_Handler, /* 118 */ - GPIO2_15_Handler, /* 119 */ - GPIO3_0_Handler, /* 120 */ /* All P3 I/O pins used as irq source */ - GPIO3_1_Handler, /* 121 */ /* There are 4 pins in total */ - GPIO3_2_Handler, /* 122 */ - GPIO3_3_Handler, /* 123 */ - 0, /* 124 Reserved */ - 0, /* 125 Reserved */ - 0, /* 126 Reserved */ - 0, /* 127 Reserved */ - 0, /* 128 Reserved */ - 0, /* 129 Reserved */ - 0, /* 130 Reserved */ - 0, /* 131 Reserved */ - 0, /* 132 Reserved */ - 0, /* 133 Reserved */ - 0, /* 134 Reserved */ - 0, /* 135 Reserved */ - 0, /* 136 Reserved */ - 0, /* 137 Reserved */ - 0, /* 138 Reserved */ - 0, /* 139 Reserved */ - 0, /* 140 Reserved */ - 0, /* 141 Reserved */ - 0, /* 142 Reserved */ - 0, /* 143 Reserved */ - 0, /* 144 Reserved */ - 0, /* 145 Reserved */ - 0, /* 146 Reserved */ - 0, /* 147 Reserved */ - 0, /* 148 Reserved */ - 0, /* 149 Reserved */ - 0, /* 150 Reserved */ - 0, /* 151 Reserved */ - 0, /* 152 Reserved */ - 0, /* 153 Reserved */ - 0, /* 154 Reserved */ - 0, /* 155 Reserved */ - 0, /* 156 Reserved */ - 0, /* 157 Reserved */ - 0, /* 158 Reserved */ - 0, /* 159 Reserved */ - 0, /* 160 Reserved */ - 0, /* 161 Reserved */ - 0, /* 162 Reserved */ - 0, /* 163 Reserved */ - 0, /* 164 Reserved */ - 0, /* 165 Reserved */ - 0, /* 166 Reserved */ - 0, /* 167 Reserved */ - 0, /* 168 Reserved */ - 0, /* 169 Reserved */ - 0, /* 170 Reserved */ - 0, /* 171 Reserved */ - 0, /* 172 Reserved */ - 0, /* 173 Reserved */ - 0, /* 174 Reserved */ - 0, /* 175 Reserved */ - 0, /* 176 Reserved */ - 0, /* 177 Reserved */ - 0, /* 178 Reserved */ - 0, /* 179 Reserved */ - 0, /* 180 Reserved */ - 0, /* 181 Reserved */ - 0, /* 182 Reserved */ - 0, /* 183 Reserved */ - 0, /* 184 Reserved */ - 0, /* 185 Reserved */ - 0, /* 186 Reserved */ - 0, /* 187 Reserved */ - 0, /* 188 Reserved */ - 0, /* 189 Reserved */ - 0, /* 190 Reserved */ - 0, /* 191 Reserved */ - 0, /* 192 Reserved */ - 0, /* 193 Reserved */ - 0, /* 194 Reserved */ - 0, /* 195 Reserved */ - 0, /* 196 Reserved */ - 0, /* 197 Reserved */ - 0, /* 198 Reserved */ - 0, /* 199 Reserved */ - 0, /* 200 Reserved */ - 0, /* 201 Reserved */ - 0, /* 202 Reserved */ - 0, /* 203 Reserved */ - 0, /* 204 Reserved */ - 0, /* 205 Reserved */ - 0, /* 206 Reserved */ - 0, /* 207 Reserved */ - 0, /* 208 Reserved */ - 0, /* 209 Reserved */ - 0, /* 210 Reserved */ - 0, /* 211 Reserved */ - 0, /* 212 Reserved */ - 0, /* 213 Reserved */ - 0, /* 214 Reserved */ - 0, /* 215 Reserved */ - 0, /* 216 Reserved */ - 0, /* 217 Reserved */ - 0, /* 218 Reserved */ - 0, /* 219 Reserved */ - 0, /* 220 Reserved */ - 0, /* 221 Reserved */ - 0, /* 222 Reserved */ - 0, /* 223 Reserved */ -#if defined (IOTKit_CM33_VHT) || defined (IOTKit_CM33_FP_VHT) - ARM_VSI0_Handler, /* 224 VSI 0 interrupt */ - ARM_VSI1_Handler, /* 225 VSI 1 interrupt */ - ARM_VSI2_Handler, /* 226 VSI 2 interrupt */ - ARM_VSI3_Handler, /* 227 VSI 3 interrupt */ - ARM_VSI4_Handler, /* 228 VSI 4 interrupt */ - ARM_VSI5_Handler, /* 229 VSI 5 interrupt */ - ARM_VSI6_Handler, /* 230 VSI 6 interrupt */ - ARM_VSI7_Handler /* 231 VSI 7 interrupt */ -#else - 0, /* 224 Reserved */ - 0, /* 225 Reserved */ - 0, /* 226 Reserved */ - 0, /* 227 Reserved */ - 0, /* 228 Reserved */ - 0, /* 229 Reserved */ - 0, /* 230 Reserved */ - 0 /* 231 Reserved */ -#endif -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler(void) -{ - __set_PSP((uint32_t)(&__INITIAL_SP)); - - __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); - __set_PSPLIM((uint32_t)(&__STACK_LIMIT)); - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL)); -#endif - - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmissing-noreturn" -#endif - -/*---------------------------------------------------------------------------- - Hard Fault Handler - *----------------------------------------------------------------------------*/ -void HardFault_Handler(void) -{ - while(1); -} - -/*---------------------------------------------------------------------------- - Default Handler for Exceptions / Interrupts - *----------------------------------------------------------------------------*/ -void Default_Handler(void) -{ - while(1); -} - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic pop -#endif diff --git a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/system_IOTKit_CM33.c b/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/system_IOTKit_CM33.c deleted file mode 100644 index 3370379..0000000 --- a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/system_IOTKit_CM33.c +++ /dev/null @@ -1,149 +0,0 @@ -/****************************************************************************** - * @file system_IOTKit_CM33.c - * @brief CMSIS System Source File for IOTKit_CM33 Device - ******************************************************************************/ -/* Copyright (c) 2015 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (IOTKit_CM33) || defined (IOTKit_CM33_VHT) - #include "IOTKit_CM33.h" -#elif defined (IOTKit_CM33_FP) || defined (IOTKit_CM33_FP_VHT) - #include "IOTKit_CM33_FP.h" -#else - #error device not specified! -#endif - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #include "partition_IOTKit_CM33.h" -#endif - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define XTAL (50000000UL) /* Oscillator frequency */ - -#define SYSTEM_CLOCK (XTAL / 2U) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -// uint32_t blk_cfg, blk_max, blk_size, blk_cnt; -#endif - -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); -#endif - -#if defined (__FPU_USED) && (__FPU_USED == 1U) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/* start IOT Green configuration ------------------------- */ - - /* Enable BusFault, UsageFault, MemManageFault and SecureFault to ease diagnostic */ - SCB->SHCSR |= (SCB_SHCSR_USGFAULTENA_Msk | - SCB_SHCSR_BUSFAULTENA_Msk | - SCB_SHCSR_MEMFAULTENA_Msk | - SCB_SHCSR_SECUREFAULTENA_Msk); - - /* BFSR register setting to enable precise errors */ - SCB->CFSR |= SCB_CFSR_PRECISERR_Msk; - - - /* configure MPC --------------- */ - - /* configure unsecure code area MPSSSRAM1 (0x00200000 - 0x003FFFFF) */ -// blk_max = IOTKIT_MPCSSRAM1->BLK_MAX; /* = 0x1 */ -// blk_cfg = IOTKIT_MPCSSRAM1->BLK_CFG; /* = 0xC */ -// blk_size = 1UL << (blk_cfg + 5U); /* = 0x20000 */ -// blk_cnt = 0x200000U / blk_size; /* = 0x10 */ - - IOTKIT_MPCSSRAM1->CTRL &= ~(1UL << 8U); /* clear auto increment */ - IOTKIT_MPCSSRAM1->BLK_IDX = 0; /* write LUT index */ - IOTKIT_MPCSSRAM1->BLK_LUT = 0xFFFF0000UL; /* configure blocks */ - - - /* configure unsecure data area MPSSSRAM3 (0x28200000 - 0x283FFFFF) */ -// blk_max = IOTKIT_MPCSSRAM3->BLK_MAX; /* = 0x1 */ -// blk_cfg = IOTKIT_MPCSSRAM3->BLK_CFG; /* = 0xB */ -// blk_size = 1UL << (blk_cfg + 5U); /* = 0x10000 */ -// blk_cnt = 0x200000U / blk_size; /* = 0x20 */ - - IOTKIT_MPCSSRAM3->CTRL &= ~(1UL << 8U); /* clear auto increment */ - IOTKIT_MPCSSRAM3->BLK_IDX = 1; /* write LUT index */ - IOTKIT_MPCSSRAM3->BLK_LUT = 0xFFFFFFFFUL; /* configure blocks */ - - - - /* enable the Non Secure Callable Configuration for IDAU (NSCCFG register) */ - IOTKIT_SPC->NSCCFG |= 1U; - - - /* configure PPC --------------- */ -#if !defined (__USE_SECURE) - /* Allow Non-secure access for SCC/FPGAIO registers */ - IOTKIT_SPC->APBNSPPCEXP[2U] |= ((1UL << 0U) | - (1UL << 2U) ); - /* Allow Non-secure access for SPI1/UART0 registers */ - IOTKIT_SPC->APBNSPPCEXP[1U] |= ((1UL << 1U) | - (1UL << 5U) ); -#endif - -/* end IOT Green configuration --------------------------- */ - - TZ_SAU_Setup(); -#endif - - SystemCoreClock = SYSTEM_CLOCK; -} diff --git a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/Target.clayer.yml deleted file mode 100644 index 510c0a9..0000000 --- a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/Target.clayer.yml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: Keil::V2M-MPS2_IOTKit_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: Device:Startup&C Startup - - - component: Keil::Board Support&V2M-MPS2 IOT-Kit:Common - - component: Keil::CMSIS Driver:USART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/vht_config.txt deleted file mode 100644 index 8c9da53..0000000 --- a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/vht_config.txt +++ /dev/null @@ -1,33 +0,0 @@ -## Parameters: -## instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -##------------------------------------------------------------------------------ -fvp_mps2.UART0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -fvp_mps2.UART0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -fvp_mps2.UART0.unbuffered_output=1 # (bool , init-time) default = '0' : Unbuffered output -fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -##------------------------------------------------------------------------------ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -cpu0.BIGENDINIT=0 # (bool , init-time) default = '0' : Initialize processor to big endian mode -cpu0.CPIF=1 # (bool , init-time) default = '1' : Specifies whether the external coprocessor interface is included -cpu0.DSP=1 # (bool , init-time) default = '1' : Set whether the model has the DSP extension -cpu0.FPU=1 # (bool , init-time) default = '1' : Set whether the model has VFP support -cpu0.INITNSVTOR=0 # (int , init-time) default = '0x0' : Non-Secure vector-table offset at reset -cpu0.INITSVTOR=0 # (int , init-time) default = '0x10000000' : Secure vector-table offset at reset -cpu0.IRQLVL=0x3 # (int , init-time) default = '0x3' : Number of bits of interrupt priority -cpu0.ITM=0 # (bool , init-time) default = '1' : Level of instrumentation trace supported. false : No ITM trace included, true: ITM trace included -cpu0.LOCK_NS_MPU=0 # (bool , init-time) default = '0' : Lock down of Non-Secure MPU registers write -cpu0.LOCK_SAU=0 # (bool , init-time) default = '0' : Lock down of SAU registers write -cpu0.LOCK_S_MPU=0 # (bool , init-time) default = '0' : Lock down of Secure MPU registers write -cpu0.MPU_NS=0x8 # (int , init-time) default = '0x8' : Number of regions in the Non-Secure MPU. If Security Extentions are absent, this is the total number of MPU regions -cpu0.MPU_S=0x8 # (int , init-time) default = '0x8' : Number of regions in the Secure MPU. If Security Extentions are absent, this is ignored -cpu0.SAU=0x8 # (int , init-time) default = '0x8' : Number of SAU regions (0 => no SAU) -cpu0.SAU_CTRL.ALLNS=0 # (bool , init-time) default = '0' : At reset, the SAU treats entire memory space as NS when the SAU is disabled if this is set -cpu0.SAU_CTRL.ENABLE=0 # (bool , init-time) default = '0' : Enable SAU at reset -cpu0.SECEXT=1 # (bool , init-time) default = '1' : Whether the ARMv8-M Security Extensions are included -cpu0.semihosting-enable=0 # (bool , init-time) default = '1' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false. -fvp_mps2.DISABLE_GATING=1 # (bool , init-time) default = '0' : Disable Memory gating logic -fvp_mps2.platform_type=1 # (int , init-time) default = '0x0' : 0:Original MPS2 ; 1:IoT Kit (cut-down SSE-200) ; 2:Full SSE-200; 3:SVOS -idau.NUM_IDAU_REGION=0 # (int , init-time) default = '0x12' : -#------------------------------------------------------------------------------ diff --git a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/RTE_Device.h deleted file mode 100644 index 7584efd..0000000 --- a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/RTE_Device.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2016 ARM Ltd. - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. Permission is granted to anyone to use this - * software for any purpose, including commercial applications, and to alter - * it and redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - * - * $Date: 25. April 2016 - * $Revision: V1.0.0 - * - * Project: RTE Device Configuration for ARM CMSDK_CM device - * -------------------------------------------------------------------------- */ - -//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART0 (Universal synchronous asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::CMSIS Driver:USART -#define RTE_USART0 1 - - -// USART1 (Universal synchronous asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART -#define RTE_USART1 0 - - -// USART2 (Universal synchronous asynchronous receiver transmitter) [Driver_USART2] -// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART -#define RTE_UART2 0 - - -// USART3 (Universal synchronous asynchronous receiver transmitter) [Driver_USART3] -// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART -#define RTE_UART3 0 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/gcc_arm.ld b/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/gcc_arm.ld deleted file mode 100644 index 5f3fdf2..0000000 --- a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/gcc_arm.ld +++ /dev/null @@ -1,299 +0,0 @@ -/****************************************************************************** - * @file gcc_arm.ld - * @brief GNU Linker Script for Cortex-M based device - ******************************************************************************/ - -/* -; -------- <<< Use Configuration Wizard in Context Menu >>> ------------------- - */ - -/*---------------------- Flash Configuration ---------------------------------- -; Flash Configuration -; Flash Base Address <0x0-0xFFFFFFFF:8> -; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__ROM_BASE = 0x10000000; -__ROM_SIZE = 0x00400000; - -/*--------------------- Embedded RAM Configuration ---------------------------- -; RAM Configuration -; RAM Base Address <0x0-0xFFFFFFFF:8> -; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__RAM_BASE = 0x38000000; -__RAM_SIZE = 0x00200000; - -/*--------------------- Stack / Heap Configuration ---------------------------- -; Stack / Heap Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__STACK_SIZE = 0x00000400; -__HEAP_SIZE = 0x00000C00; - -/* -; -------------------- <<< end of configuration section >>> ------------------- - */ - -/* ARMv8-M stack sealing: - to use ARMv8-M stack sealing set __STACKSEAL_SIZE to 8 otherwise keep 0 - */ -__STACKSEAL_SIZE = 0; - - -MEMORY -{ - FLASH (rx) : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE - RAM (rwx) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __StackSeal (only if ARMv8-M stack sealing is used) - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - KEEP(*(.vectors)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - /* - * SG veneers: - * All SG veneers are placed in the special output section .gnu.sgstubs. Its start address - * must be set, either with the command line option �--section-start� or in a linker script, - * to indicate where to place these veneers in memory. - */ -/* - .gnu.sgstubs : - { - . = ALIGN(32); - } > FLASH -*/ - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - - LONG (__etext) - LONG (__data_start__) - LONG ((__data_end__ - __data_start__) / 4) - - /* Add each additional data section here */ -/* - LONG (__etext2) - LONG (__data2_start__) - LONG ((__data2_end__ - __data2_start__) / 4) -*/ - __copy_table_end__ = .; - } > FLASH - - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG ((__bss_end__ - __bss_start__) / 4) - /* Add each additional bss section here */ -/* - LONG (__bss2_start__) - LONG ((__bss2_end__ - __bss2_start__) / 4) -*/ - __zero_table_end__ = .; - } > FLASH - - /** - * Location counter can end up 2byte aligned with narrow Thumb code but - * __etext is assumed by startup code to be the LMA of a section in RAM - * which must be 4byte aligned - */ - __etext = ALIGN (4); - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.data) - *(.data.*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(4); - /* All data end */ - __data_end__ = .; - - } > RAM - - /* - * Secondary data section, optional - * - * Remember to add each additional data section - * to the .copy.table above to asure proper - * initialization during startup. - */ -/* - __etext2 = ALIGN (4); - - .data2 : AT (__etext2) - { - . = ALIGN(4); - __data2_start__ = .; - *(.data2) - *(.data2.*) - . = ALIGN(4); - __data2_end__ = .; - - } > RAM2 -*/ - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss) - *(.bss.*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM AT > RAM - - /* - * Secondary bss section, optional - * - * Remember to add each additional bss section - * to the .zero.table above to asure proper - * initialization during startup. - */ -/* - .bss2 : - { - . = ALIGN(4); - __bss2_start__ = .; - *(.bss2) - *(.bss2.*) - . = ALIGN(4); - __bss2_end__ = .; - } > RAM2 AT > RAM2 -*/ - - .heap (COPY) : - { - . = ALIGN(8); - __end__ = .; - PROVIDE(end = .); - . = . + __HEAP_SIZE; - . = ALIGN(8); - __HeapLimit = .; - } > RAM - - .stack (ORIGIN(RAM) + LENGTH(RAM) - __STACK_SIZE - __STACKSEAL_SIZE) (COPY) : - { - . = ALIGN(8); - __StackLimit = .; - . = . + __STACK_SIZE; - . = ALIGN(8); - __StackTop = .; - } > RAM - PROVIDE(__stack = __StackTop); - - /* ARMv8-M stack sealing: - to use ARMv8-M stack sealing uncomment '.stackseal' section - */ -/* - .stackseal (ORIGIN(RAM) + LENGTH(RAM) - __STACKSEAL_SIZE) (COPY) : - { - . = ALIGN(8); - __StackSeal = .; - . = . + 8; - . = ALIGN(8); - } > RAM -*/ - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/partition_IOTKit_CM33.h b/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/partition_IOTKit_CM33.h deleted file mode 100644 index 98585d3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/partition_IOTKit_CM33.h +++ /dev/null @@ -1,637 +0,0 @@ -/****************************************************************************** - * @file partition_IOTKit_CM33.h - * @brief CMSIS-Core Initial Setup for Secure / Non-Secure Zones for IOTKit_CM33 - ******************************************************************************/ -/* Copyright (c) 2015 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#ifndef PARTITION_IOTKit_CM33_H -#define PARTITION_IOTKit_CM33_H - -/* -//-------- <<< Use Configuration Wizard in Context Menu >>> ----------------- -*/ - -/* -// Initialize Security Attribution Unit (SAU) CTRL register -*/ -#define SAU_INIT_CTRL 0 - -/* -// Enable SAU -// Value for SAU->CTRL register bit ENABLE -*/ -#define SAU_INIT_CTRL_ENABLE 1 - -/* -// When SAU is disabled -// <0=> All Memory is Secure -// <1=> All Memory is Non-Secure -// Value for SAU->CTRL register bit ALLNS -// When all Memory is Non-Secure (ALLNS is 1), IDAU can override memory map configuration. -*/ -#define SAU_INIT_CTRL_ALLNS 0 - -/* -// -*/ - -/* -// Initialize Security Attribution Unit (SAU) Address Regions -// SAU configuration specifies regions to be one of: -// - Secure and Non-Secure Callable -// - Non-Secure -// Note: All memory regions not configured by SAU are Secure -*/ -#define SAU_REGIONS_MAX 8 /* Max. number of SAU regions */ - -/* -// Initialize SAU Region 0 -// Setup SAU Region 0 memory attributes -*/ -#define SAU_INIT_REGION0 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START0 0x10000000 /* start address of SAU region 0 */ - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END0 0x101FFFFF /* end address of SAU region 0 */ - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC0 1 -/* -// -*/ - -/* -// Initialize SAU Region 1 -// Setup SAU Region 1 memory attributes -*/ -#define SAU_INIT_REGION1 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START1 0x00200000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END1 0x003FFFFF - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC1 0 -/* -// -*/ - -/* -// Initialize SAU Region 2 -// Setup SAU Region 2 memory attributes -*/ -#define SAU_INIT_REGION2 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START2 0x28200000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END2 0x283FFFFF - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC2 0 -/* -// -*/ - -/* -// Initialize SAU Region 3 -// Setup SAU Region 3 memory attributes -*/ -#define SAU_INIT_REGION3 1 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START3 0x40000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END3 0x403FFFFF - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC3 0 -/* -// -*/ - -/* -// Initialize SAU Region 4 -// Setup SAU Region 4 memory attributes -*/ -#define SAU_INIT_REGION4 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START4 0x00000000 /* start address of SAU region 4 */ - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END4 0x00000000 /* end address of SAU region 4 */ - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC4 0 -/* -// -*/ - -/* -// Initialize SAU Region 5 -// Setup SAU Region 5 memory attributes -*/ -#define SAU_INIT_REGION5 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START5 0x00000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END5 0x00000000 - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC5 0 -/* -// -*/ - -/* -// Initialize SAU Region 6 -// Setup SAU Region 6 memory attributes -*/ -#define SAU_INIT_REGION6 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START6 0x00000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END6 0x00000000 - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC6 0 -/* -// -*/ - -/* -// Initialize SAU Region 7 -// Setup SAU Region 7 memory attributes -*/ -#define SAU_INIT_REGION7 0 - -/* -// Start Address <0-0xFFFFFFE0> -*/ -#define SAU_INIT_START7 0x00000000 - -/* -// End Address <0x1F-0xFFFFFFFF> -*/ -#define SAU_INIT_END7 0x00000000 - -/* -// Region is -// <0=>Non-Secure -// <1=>Secure, Non-Secure Callable -*/ -#define SAU_INIT_NSC7 0 -/* -// -*/ - -/* -// -*/ - -/* -// Setup behaviour of Sleep and Exception Handling -*/ -#define SCB_CSR_AIRCR_INIT 1 - -/* -// Deep Sleep can be enabled by -// <0=>Secure and Non-Secure state -// <1=>Secure state only -// Value for SCB->CSR register bit DEEPSLEEPS -*/ -#define SCB_CSR_DEEPSLEEPS_VAL 1 - -/* -// System reset request accessible from -// <0=> Secure and Non-Secure state -// <1=> Secure state only -// Value for SCB->AIRCR register bit SYSRESETREQS -*/ -#define SCB_AIRCR_SYSRESETREQS_VAL 0 - -/* -// Priority of Non-Secure exceptions is -// <0=> Not altered -// <1=> Lowered to 0x80-0xFF -// Value for SCB->AIRCR register bit PRIS -*/ -#define SCB_AIRCR_PRIS_VAL 1 - -/* -// BusFault, HardFault, and NMI target -// <0=> Secure state -// <1=> Non-Secure state -// Value for SCB->AIRCR register bit BFHFNMINS -*/ -#define SCB_AIRCR_BFHFNMINS_VAL 0 - -/* -// -*/ - -/* -// Setup behaviour of Floating Point Unit -*/ -#define TZ_FPU_NS_USAGE 1 - -/* -// Floating Point Unit usage -// <0=> Secure state only -// <3=> Secure and Non-Secure state -// Value for SCB->NSACR register bits CP10, CP11 -*/ -#define SCB_NSACR_CP10_11_VAL 3 - -/* -// Treat floating-point registers as Secure -// <0=> Disabled -// <1=> Enabled -// Value for FPU->FPCCR register bit TS -*/ -#define FPU_FPCCR_TS_VAL 0 - -/* -// Clear on return (CLRONRET) accessibility -// <0=> Secure and Non-Secure state -// <1=> Secure state only -// Value for FPU->FPCCR register bit CLRONRETS -*/ -#define FPU_FPCCR_CLRONRETS_VAL 0 - -/* -// Clear floating-point caller saved registers on exception return -// <0=> Disabled -// <1=> Enabled -// Value for FPU->FPCCR register bit CLRONRET -*/ -#define FPU_FPCCR_CLRONRET_VAL 1 - -/* -// -*/ - -/* -// Setup Interrupt Target -*/ - -/* -// Initialize ITNS 0 (Interrupts 0..31) -*/ -#define NVIC_INIT_ITNS0 0 - -/* -// Interrupts 0..31 -// Non-Secure Watchdog Reset Request <0=> Secure state <1=> Non-Secure state -// Non-Secure Watchdog interrupt <0=> Secure state <1=> Non-Secure state -// S32K Timer interrupt <0=> Secure state <1=> Non-Secure state -// Timer 0 interrupt <0=> Secure state <1=> Non-Secure state -// Timer 1 interrupt <0=> Secure state <1=> Non-Secure state -// Dual Timer interrupt <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS0_VAL 0x00000000 - -/* -// -*/ - -/* -// Initialize ITNS 1 (Interrupts 32..63) -*/ -#define NVIC_INIT_ITNS1 0 - -/* -// Interrupts 32..63 -// UART 0 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 0 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 1 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 1 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 2 teceive interrupt <0=> Secure state <1=> Non-Secure state -// UART 2 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 3 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 3 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 4 receive interrupt <0=> Secure state <1=> Non-Secure state -// UART 4 transmit interrupt <0=> Secure state <1=> Non-Secure state -// UART 0 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 1 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 2 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 3 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 4 combined interrupt <0=> Secure state <1=> Non-Secure state -// UART 0, 1, 2, 3, 4 overflow interrupt <0=> Secure state <1=> Non-Secure state -// Ethernet interrupt <0=> Secure state <1=> Non-Secure state -// Audio I2S interrupt <0=> Secure state <1=> Non-Secure state -// Touch Screen interrupt <0=> Secure state <1=> Non-Secure state -// SPI 0 (SPI Header) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 1 (CLCD) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 2 (Shield ADC) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 3 (Shield 0 SPI) interrupt <0=> Secure state <1=> Non-Secure state -// SPI 4 (Shield 1 SPI) interrupt <0=> Secure state <1=> Non-Secure state -// DMA 0 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 0 terminal count interrupt <0=> Secure state <1=> Non-Secure state -// DMA 0 combined interrupt <0=> Secure state <1=> Non-Secure state -// DMA 1 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 1 terminal count interrupt <0=> Secure state <1=> Non-Secure state -// DMA 1 combined interrupt <0=> Secure state <1=> Non-Secure state -// DMA 2 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 2 terminal count interrupt <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS1_VAL 0x00000000 - -/* -// -*/ - -/* -// Initialize ITNS 2 (Interrupts 64..95) -*/ -#define NVIC_INIT_ITNS2 0 - -/* -// Interrupts 64..95 -// DMA 2 combined interrupt <0=> Secure state <1=> Non-Secure state -// DMA 3 error interrupt <0=> Secure state <1=> Non-Secure state -// DMA 3 terminal count interrupt <0=> Secure state <1=> Non-Secure state -// DMA 3 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 0 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 1 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 2 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 3 combined interrupt <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 4) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 5) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 6) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 7) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 8) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt ( 9) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (10) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (11) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (12) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (13) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (14) <0=> Secure state <1=> Non-Secure state -// GPIO 0 individual interrupt (15) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 4) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 5) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 6) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 7) <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS2_VAL 0x00000000 - -/* -// -*/ - -/* -// Initialize ITNS 3 (Interrupts 96..127) -*/ -#define NVIC_INIT_ITNS3 0 - -/* -// Interrupts 96..127 -// GPIO 1 individual interrupt ( 8) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt ( 9) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (10) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (11) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (12) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (13) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (14) <0=> Secure state <1=> Non-Secure state -// GPIO 1 individual interrupt (15) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 4) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 5) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 6) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 7) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 8) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt ( 9) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (10) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (11) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (12) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (13) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (14) <0=> Secure state <1=> Non-Secure state -// GPIO 2 individual interrupt (15) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 0) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 1) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 2) <0=> Secure state <1=> Non-Secure state -// GPIO 3 individual interrupt ( 3) <0=> Secure state <1=> Non-Secure state -*/ -#define NVIC_INIT_ITNS3_VAL 0x00000000 - -/* -// -*/ - -/* -// -*/ - - - -/* - max 128 SAU regions. - SAU regions are defined in partition.h - */ - -#define SAU_INIT_REGION(n) \ - SAU->RNR = (n & SAU_RNR_REGION_Msk); \ - SAU->RBAR = (SAU_INIT_START##n & SAU_RBAR_BADDR_Msk); \ - SAU->RLAR = (SAU_INIT_END##n & SAU_RLAR_LADDR_Msk) | \ - ((SAU_INIT_NSC##n << SAU_RLAR_NSC_Pos) & SAU_RLAR_NSC_Msk) | 1U - -/** - \brief Setup a SAU Region - \details Writes the region information contained in SAU_Region to the - registers SAU_RNR, SAU_RBAR, and SAU_RLAR - */ -__STATIC_INLINE void TZ_SAU_Setup (void) -{ - -#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) - - #if defined (SAU_INIT_REGION0) && (SAU_INIT_REGION0 == 1U) - SAU_INIT_REGION(0); - #endif - - #if defined (SAU_INIT_REGION1) && (SAU_INIT_REGION1 == 1U) - SAU_INIT_REGION(1); - #endif - - #if defined (SAU_INIT_REGION2) && (SAU_INIT_REGION2 == 1U) - SAU_INIT_REGION(2); - #endif - - #if defined (SAU_INIT_REGION3) && (SAU_INIT_REGION3 == 1U) - SAU_INIT_REGION(3); - #endif - - #if defined (SAU_INIT_REGION4) && (SAU_INIT_REGION4 == 1U) - SAU_INIT_REGION(4); - #endif - - #if defined (SAU_INIT_REGION5) && (SAU_INIT_REGION5 == 1U) - SAU_INIT_REGION(5); - #endif - - #if defined (SAU_INIT_REGION6) && (SAU_INIT_REGION6 == 1U) - SAU_INIT_REGION(6); - #endif - - #if defined (SAU_INIT_REGION7) && (SAU_INIT_REGION7 == 1U) - SAU_INIT_REGION(7); - #endif - - /* repeat this for all possible SAU regions */ - -#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ - - - #if defined (SAU_INIT_CTRL) && (SAU_INIT_CTRL == 1U) - SAU->CTRL = ((SAU_INIT_CTRL_ENABLE << SAU_CTRL_ENABLE_Pos) & SAU_CTRL_ENABLE_Msk) | - ((SAU_INIT_CTRL_ALLNS << SAU_CTRL_ALLNS_Pos) & SAU_CTRL_ALLNS_Msk) ; - #endif - - #if defined (SCB_CSR_AIRCR_INIT) && (SCB_CSR_AIRCR_INIT == 1U) - SCB->SCR = (SCB->SCR & ~(SCB_SCR_SLEEPDEEPS_Msk )) | - ((SCB_CSR_DEEPSLEEPS_VAL << SCB_SCR_SLEEPDEEPS_Pos) & SCB_SCR_SLEEPDEEPS_Msk); - - SCB->AIRCR = (SCB->AIRCR & ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_SYSRESETREQS_Msk | - SCB_AIRCR_BFHFNMINS_Msk | SCB_AIRCR_PRIS_Msk )) | - ((0x05FAU << SCB_AIRCR_VECTKEY_Pos) & SCB_AIRCR_VECTKEY_Msk) | - ((SCB_AIRCR_SYSRESETREQS_VAL << SCB_AIRCR_SYSRESETREQS_Pos) & SCB_AIRCR_SYSRESETREQS_Msk) | - ((SCB_AIRCR_PRIS_VAL << SCB_AIRCR_PRIS_Pos) & SCB_AIRCR_PRIS_Msk) | - ((SCB_AIRCR_BFHFNMINS_VAL << SCB_AIRCR_BFHFNMINS_Pos) & SCB_AIRCR_BFHFNMINS_Msk); - #endif /* defined (SCB_CSR_AIRCR_INIT) && (SCB_CSR_AIRCR_INIT == 1U) */ - - #if defined (__FPU_USED) && (__FPU_USED == 1U) && \ - defined (TZ_FPU_NS_USAGE) && (TZ_FPU_NS_USAGE == 1U) - - SCB->NSACR = (SCB->NSACR & ~(SCB_NSACR_CP10_Msk | SCB_NSACR_CP10_Msk)) | - ((SCB_NSACR_CP10_11_VAL << SCB_NSACR_CP10_Pos) & (SCB_NSACR_CP10_Msk | SCB_NSACR_CP11_Msk)); - - FPU->FPCCR = (FPU->FPCCR & ~(FPU_FPCCR_TS_Msk | FPU_FPCCR_CLRONRETS_Msk | FPU_FPCCR_CLRONRET_Msk)) | - ((FPU_FPCCR_TS_VAL << FPU_FPCCR_TS_Pos ) & FPU_FPCCR_TS_Msk ) | - ((FPU_FPCCR_CLRONRETS_VAL << FPU_FPCCR_CLRONRETS_Pos) & FPU_FPCCR_CLRONRETS_Msk) | - ((FPU_FPCCR_CLRONRET_VAL << FPU_FPCCR_CLRONRET_Pos ) & FPU_FPCCR_CLRONRET_Msk ); - #endif - - #if defined (NVIC_INIT_ITNS0) && (NVIC_INIT_ITNS0 == 1U) - NVIC->ITNS[0] = NVIC_INIT_ITNS0_VAL; - #endif - - #if defined (NVIC_INIT_ITNS1) && (NVIC_INIT_ITNS1 == 1U) - NVIC->ITNS[1] = NVIC_INIT_ITNS1_VAL; - #endif - - #if defined (NVIC_INIT_ITNS2) && (NVIC_INIT_ITNS2 == 1U) - NVIC->ITNS[2] = NVIC_INIT_ITNS2_VAL; - #endif - - #if defined (NVIC_INIT_ITNS3) && (NVIC_INIT_ITNS3 == 1U) - NVIC->ITNS[3] = NVIC_INIT_ITNS3_VAL; - #endif - - /* repeat this for all possible ITNS elements */ - -} - -#endif /* PARTITION_IOTKit_CM33_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/startup_IOTKit_CM33.c b/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/startup_IOTKit_CM33.c deleted file mode 100644 index e06f735..0000000 --- a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/startup_IOTKit_CM33.c +++ /dev/null @@ -1,513 +0,0 @@ -/****************************************************************************** - * @file startup_IOTKit_CM33.c - * @brief CMSIS Startup File for IOTKit_CM33 Device - ******************************************************************************/ -/* Copyright (c) 2015 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (IOTKit_CM33) || defined (IOTKit_CM33_VHT) - #include "IOTKit_CM33.h" -#elif defined (IOTKit_CM33_FP) || defined (IOTKit_CM33_FP_VHT) - #include "IOTKit_CM33_FP.h" -#else - #error device not specified! -#endif - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; -extern uint32_t __STACK_LIMIT; -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -extern uint32_t __STACK_SEAL; -#endif - -extern __NO_RETURN void __PROGRAM_START(void); - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler (void); - void Default_Handler(void); - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -/* Exceptions */ -void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void HardFault_Handler (void) __attribute__ ((weak)); -void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SecureFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* Core IoT Interrupts */ -void NONSEC_WATCHDOG_RESET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void NONSEC_WATCHDOG_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void S32K_TIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DUALTIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void MPC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PPC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void MSC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void BRIDGE_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* External Interrupts */ -void UART0RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UARTOVF_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ETHERNET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void I2S_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TSC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA0_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA0_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA1_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA1_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA2_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA2_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA3_ERROR_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA3_TC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DMA3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_10_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_11_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_12_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_13_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_14_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_15_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_10_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_11_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_12_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_13_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_14_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1_15_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_10_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_11_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_12_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_13_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_14_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_15_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* VSI Interrupts */ -#if defined (IOTKit_CM33_VHT) || defined (IOTKit_CM33_FP_VHT) -void ARM_VSI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#endif - - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - const VECTOR_TABLE_Type __VECTOR_TABLE[256] __VECTOR_TABLE_ATTRIBUTE = { - (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14 NMI Handler */ - HardFault_Handler, /* -13 Hard Fault Handler */ - MemManage_Handler, /* -12 MPU Fault Handler */ - BusFault_Handler, /* -11 Bus Fault Handler */ - UsageFault_Handler, /* -10 Usage Fault Handler */ - SecureFault_Handler, /* -9 Secure Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5 SVC Handler */ - DebugMon_Handler, /* -4 Debug Monitor Handler */ - 0, /* Reserved */ - PendSV_Handler, /* -2 PendSV Handler */ - SysTick_Handler, /* -1 SysTick Handler */ - - /* Core IoT Interrupts */ - NONSEC_WATCHDOG_RESET_Handler, /* 0 Non-Secure Watchdog Reset Handler */ - NONSEC_WATCHDOG_Handler, /* 1 Non-Secure Watchdog Handler */ - S32K_TIMER_Handler, /* 2 S32K Timer Handler */ - TIMER0_Handler, /* 3 TIMER 0 Handler */ - TIMER1_Handler, /* 4 TIMER 1 Handler */ - DUALTIMER_Handler, /* 5 Dual Timer Handler */ - 0, /* 6 Reserved */ - 0, /* 7 Reserved */ - 0, /* 8 Reserved */ - MPC_Handler, /* 9 MPC Combined (Secure) Handler */ - PPC_Handler, /* 10 PPC Combined (Secure) Handler */ - MSC_Handler, /* 11 MSC Combined (Secure) Handler */ - BRIDGE_ERROR_Handler, /* 12 Bridge Error Combined (Secure) Handler */ - 0, /* 13 Reserved */ - 0, /* 14 Reserved */ - 0, /* 15 Reserved */ - 0, /* 16 Reserved */ - 0, /* 17 Reserved */ - 0, /* 18 Reserved */ - 0, /* 19 Reserved */ - 0, /* 20 Reserved */ - 0, /* 21 Reserved */ - 0, /* 22 Reserved */ - 0, /* 23 Reserved */ - 0, /* 24 Reserved */ - 0, /* 25 Reserved */ - 0, /* 26 Reserved */ - 0, /* 27 Reserved */ - 0, /* 28 Reserved */ - 0, /* 29 Reserved */ - 0, /* 30 Reserved */ - 0, /* 31 Reserved */ - - /* External Interrupts */ - UART0RX_Handler, /* 32 UART 0 RX Handler */ - UART0TX_Handler, /* 33 UART 0 TX Handler */ - UART1RX_Handler, /* 34 UART 1 RX Handler */ - UART1TX_Handler, /* 35 UART 1 TX Handler */ - UART2RX_Handler, /* 36 UART 2 RX Handler */ - UART2TX_Handler, /* 37 UART 2 TX Handler */ - UART3RX_Handler, /* 38 UART 2 RX Handler */ - UART3TX_Handler, /* 39 UART 2 TX Handler */ - UART4RX_Handler, /* 40 UART 2 RX Handler */ - UART4TX_Handler, /* 41 UART 2 TX Handler */ - UART0_Handler, /* 42 UART 0 combined Handler */ - UART1_Handler, /* 43 UART 1 combined Handler */ - UART2_Handler, /* 44 UART 2 combined Handler */ - UART3_Handler, /* 45 UART 3 combined Handler */ - UART4_Handler, /* 46 UART 4 combined Handler */ - UARTOVF_Handler, /* 47 UART 0,1,2,3,4 Overflow Handler */ - ETHERNET_Handler , /* 48 Ethernet Handler */ - I2S_Handler, /* 49 I2S Handler */ - TSC_Handler, /* 50 Touch Screen Handler */ - SPI0_Handler, /* 51 SPI 0 Handler */ - SPI1_Handler, /* 52 SPI 1 Handler */ - SPI2_Handler, /* 53 SPI 2 Handler */ - SPI3_Handler, /* 54 SPI 3 Handler */ - SPI4_Handler, /* 55 SPI 4 Handler */ - DMA0_ERROR_Handler, /* 56 DMA 0 Error Handler */ - DMA0_TC_Handler, /* 57 DMA 0 Terminal Count Handler */ - DMA0_Handler, /* 58 DMA 0 Combined Handler */ - DMA1_ERROR_Handler, /* 59 DMA 1 Error Handler */ - DMA1_TC_Handler, /* 60 DMA 1 Terminal Count Handler */ - DMA1_Handler, /* 61 DMA 1 Combined Handler */ - DMA2_ERROR_Handler, /* 62 DMA 2 Error Handler */ - DMA2_TC_Handler, /* 63 DMA 2 Terminal Count Handler */ - DMA2_Handler, /* 64 DMA 2 Combined Handler */ - DMA3_ERROR_Handler, /* 65 DMA 3 Error Handler */ - DMA3_TC_Handler, /* 66 DMA 3 Terminal Count Handler */ - DMA3_Handler, /* 67 DMA 3 Combined Handler */ - GPIO0_Handler, /* 68 GPIO 0 Combined Handler */ - GPIO1_Handler, /* 69 GPIO 1 Combined Handler */ - GPIO2_Handler, /* 70 GPIO 2 Combined Handler */ - GPIO3_Handler, /* 71 GPIO 3 Combined Handler */ - GPIO0_0_Handler, /* 72 */ /* All P0 I/O pins used as irq source */ - GPIO0_1_Handler, /* 73 */ /* There are 16 pins in total */ - GPIO0_2_Handler, /* 74 */ - GPIO0_3_Handler, /* 75 */ - GPIO0_4_Handler, /* 76 */ - GPIO0_5_Handler, /* 77 */ - GPIO0_6_Handler, /* 78 */ - GPIO0_7_Handler, /* 79 */ - GPIO0_8_Handler, /* 80 */ - GPIO0_9_Handler, /* 81 */ - GPIO0_10_Handler, /* 82 */ - GPIO0_11_Handler, /* 83 */ - GPIO0_12_Handler, /* 84 */ - GPIO0_13_Handler, /* 85 */ - GPIO0_14_Handler, /* 86 */ - GPIO0_15_Handler, /* 87 */ - GPIO1_0_Handler, /* 88 */ /* All P1 I/O pins used as irq source */ - GPIO1_1_Handler, /* 89 */ /* There are 16 pins in total */ - GPIO1_2_Handler, /* 90 */ - GPIO1_3_Handler, /* 91 */ - GPIO1_4_Handler, /* 92 */ - GPIO1_5_Handler, /* 93 */ - GPIO1_6_Handler, /* 94 */ - GPIO1_7_Handler, /* 95 */ - GPIO1_8_Handler, /* 96 */ - GPIO1_9_Handler, /* 97 */ - GPIO1_10_Handler, /* 98 */ - GPIO1_11_Handler, /* 99 */ - GPIO1_12_Handler, /* 100 */ - GPIO1_13_Handler, /* 101 */ - GPIO1_14_Handler, /* 102 */ - GPIO1_15_Handler, /* 103 */ - GPIO2_0_Handler, /* 104 */ /* All P2 I/O pins used as irq source */ - GPIO2_1_Handler, /* 105 */ /* There are 16 pins in total */ - GPIO2_2_Handler, /* 106 */ - GPIO2_3_Handler, /* 107 */ - GPIO2_4_Handler, /* 108 */ - GPIO2_5_Handler, /* 109 */ - GPIO2_6_Handler, /* 110 */ - GPIO2_7_Handler, /* 111 */ - GPIO2_8_Handler, /* 112 */ - GPIO2_9_Handler, /* 113 */ - GPIO2_10_Handler, /* 114 */ - GPIO2_11_Handler, /* 115 */ - GPIO2_12_Handler, /* 116 */ - GPIO2_13_Handler, /* 117 */ - GPIO2_14_Handler, /* 118 */ - GPIO2_15_Handler, /* 119 */ - GPIO3_0_Handler, /* 120 */ /* All P3 I/O pins used as irq source */ - GPIO3_1_Handler, /* 121 */ /* There are 4 pins in total */ - GPIO3_2_Handler, /* 122 */ - GPIO3_3_Handler, /* 123 */ - 0, /* 124 Reserved */ - 0, /* 125 Reserved */ - 0, /* 126 Reserved */ - 0, /* 127 Reserved */ - 0, /* 128 Reserved */ - 0, /* 129 Reserved */ - 0, /* 130 Reserved */ - 0, /* 131 Reserved */ - 0, /* 132 Reserved */ - 0, /* 133 Reserved */ - 0, /* 134 Reserved */ - 0, /* 135 Reserved */ - 0, /* 136 Reserved */ - 0, /* 137 Reserved */ - 0, /* 138 Reserved */ - 0, /* 139 Reserved */ - 0, /* 140 Reserved */ - 0, /* 141 Reserved */ - 0, /* 142 Reserved */ - 0, /* 143 Reserved */ - 0, /* 144 Reserved */ - 0, /* 145 Reserved */ - 0, /* 146 Reserved */ - 0, /* 147 Reserved */ - 0, /* 148 Reserved */ - 0, /* 149 Reserved */ - 0, /* 150 Reserved */ - 0, /* 151 Reserved */ - 0, /* 152 Reserved */ - 0, /* 153 Reserved */ - 0, /* 154 Reserved */ - 0, /* 155 Reserved */ - 0, /* 156 Reserved */ - 0, /* 157 Reserved */ - 0, /* 158 Reserved */ - 0, /* 159 Reserved */ - 0, /* 160 Reserved */ - 0, /* 161 Reserved */ - 0, /* 162 Reserved */ - 0, /* 163 Reserved */ - 0, /* 164 Reserved */ - 0, /* 165 Reserved */ - 0, /* 166 Reserved */ - 0, /* 167 Reserved */ - 0, /* 168 Reserved */ - 0, /* 169 Reserved */ - 0, /* 170 Reserved */ - 0, /* 171 Reserved */ - 0, /* 172 Reserved */ - 0, /* 173 Reserved */ - 0, /* 174 Reserved */ - 0, /* 175 Reserved */ - 0, /* 176 Reserved */ - 0, /* 177 Reserved */ - 0, /* 178 Reserved */ - 0, /* 179 Reserved */ - 0, /* 180 Reserved */ - 0, /* 181 Reserved */ - 0, /* 182 Reserved */ - 0, /* 183 Reserved */ - 0, /* 184 Reserved */ - 0, /* 185 Reserved */ - 0, /* 186 Reserved */ - 0, /* 187 Reserved */ - 0, /* 188 Reserved */ - 0, /* 189 Reserved */ - 0, /* 190 Reserved */ - 0, /* 191 Reserved */ - 0, /* 192 Reserved */ - 0, /* 193 Reserved */ - 0, /* 194 Reserved */ - 0, /* 195 Reserved */ - 0, /* 196 Reserved */ - 0, /* 197 Reserved */ - 0, /* 198 Reserved */ - 0, /* 199 Reserved */ - 0, /* 200 Reserved */ - 0, /* 201 Reserved */ - 0, /* 202 Reserved */ - 0, /* 203 Reserved */ - 0, /* 204 Reserved */ - 0, /* 205 Reserved */ - 0, /* 206 Reserved */ - 0, /* 207 Reserved */ - 0, /* 208 Reserved */ - 0, /* 209 Reserved */ - 0, /* 210 Reserved */ - 0, /* 211 Reserved */ - 0, /* 212 Reserved */ - 0, /* 213 Reserved */ - 0, /* 214 Reserved */ - 0, /* 215 Reserved */ - 0, /* 216 Reserved */ - 0, /* 217 Reserved */ - 0, /* 218 Reserved */ - 0, /* 219 Reserved */ - 0, /* 220 Reserved */ - 0, /* 221 Reserved */ - 0, /* 222 Reserved */ - 0, /* 223 Reserved */ -#if defined (IOTKit_CM33_VHT) || defined (IOTKit_CM33_FP_VHT) - ARM_VSI0_Handler, /* 224 VSI 0 interrupt */ - ARM_VSI1_Handler, /* 225 VSI 1 interrupt */ - ARM_VSI2_Handler, /* 226 VSI 2 interrupt */ - ARM_VSI3_Handler, /* 227 VSI 3 interrupt */ - ARM_VSI4_Handler, /* 228 VSI 4 interrupt */ - ARM_VSI5_Handler, /* 229 VSI 5 interrupt */ - ARM_VSI6_Handler, /* 230 VSI 6 interrupt */ - ARM_VSI7_Handler /* 231 VSI 7 interrupt */ -#else - 0, /* 224 Reserved */ - 0, /* 225 Reserved */ - 0, /* 226 Reserved */ - 0, /* 227 Reserved */ - 0, /* 228 Reserved */ - 0, /* 229 Reserved */ - 0, /* 230 Reserved */ - 0 /* 231 Reserved */ -#endif -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler(void) -{ - __set_PSP((uint32_t)(&__INITIAL_SP)); - - __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); - __set_PSPLIM((uint32_t)(&__STACK_LIMIT)); - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL)); -#endif - - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmissing-noreturn" -#endif - -/*---------------------------------------------------------------------------- - Hard Fault Handler - *----------------------------------------------------------------------------*/ -void HardFault_Handler(void) -{ - while(1); -} - -/*---------------------------------------------------------------------------- - Default Handler for Exceptions / Interrupts - *----------------------------------------------------------------------------*/ -void Default_Handler(void) -{ - while(1); -} - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic pop -#endif diff --git a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/system_IOTKit_CM33.c b/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/system_IOTKit_CM33.c deleted file mode 100644 index 3370379..0000000 --- a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/RTE/Device/IOTKit_CM33_FP_VHT/system_IOTKit_CM33.c +++ /dev/null @@ -1,149 +0,0 @@ -/****************************************************************************** - * @file system_IOTKit_CM33.c - * @brief CMSIS System Source File for IOTKit_CM33 Device - ******************************************************************************/ -/* Copyright (c) 2015 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (IOTKit_CM33) || defined (IOTKit_CM33_VHT) - #include "IOTKit_CM33.h" -#elif defined (IOTKit_CM33_FP) || defined (IOTKit_CM33_FP_VHT) - #include "IOTKit_CM33_FP.h" -#else - #error device not specified! -#endif - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - #include "partition_IOTKit_CM33.h" -#endif - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define XTAL (50000000UL) /* Oscillator frequency */ - -#define SYSTEM_CLOCK (XTAL / 2U) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -// uint32_t blk_cfg, blk_max, blk_size, blk_cnt; -#endif - -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); -#endif - -#if defined (__FPU_USED) && (__FPU_USED == 1U) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -/* start IOT Green configuration ------------------------- */ - - /* Enable BusFault, UsageFault, MemManageFault and SecureFault to ease diagnostic */ - SCB->SHCSR |= (SCB_SHCSR_USGFAULTENA_Msk | - SCB_SHCSR_BUSFAULTENA_Msk | - SCB_SHCSR_MEMFAULTENA_Msk | - SCB_SHCSR_SECUREFAULTENA_Msk); - - /* BFSR register setting to enable precise errors */ - SCB->CFSR |= SCB_CFSR_PRECISERR_Msk; - - - /* configure MPC --------------- */ - - /* configure unsecure code area MPSSSRAM1 (0x00200000 - 0x003FFFFF) */ -// blk_max = IOTKIT_MPCSSRAM1->BLK_MAX; /* = 0x1 */ -// blk_cfg = IOTKIT_MPCSSRAM1->BLK_CFG; /* = 0xC */ -// blk_size = 1UL << (blk_cfg + 5U); /* = 0x20000 */ -// blk_cnt = 0x200000U / blk_size; /* = 0x10 */ - - IOTKIT_MPCSSRAM1->CTRL &= ~(1UL << 8U); /* clear auto increment */ - IOTKIT_MPCSSRAM1->BLK_IDX = 0; /* write LUT index */ - IOTKIT_MPCSSRAM1->BLK_LUT = 0xFFFF0000UL; /* configure blocks */ - - - /* configure unsecure data area MPSSSRAM3 (0x28200000 - 0x283FFFFF) */ -// blk_max = IOTKIT_MPCSSRAM3->BLK_MAX; /* = 0x1 */ -// blk_cfg = IOTKIT_MPCSSRAM3->BLK_CFG; /* = 0xB */ -// blk_size = 1UL << (blk_cfg + 5U); /* = 0x10000 */ -// blk_cnt = 0x200000U / blk_size; /* = 0x20 */ - - IOTKIT_MPCSSRAM3->CTRL &= ~(1UL << 8U); /* clear auto increment */ - IOTKIT_MPCSSRAM3->BLK_IDX = 1; /* write LUT index */ - IOTKIT_MPCSSRAM3->BLK_LUT = 0xFFFFFFFFUL; /* configure blocks */ - - - - /* enable the Non Secure Callable Configuration for IDAU (NSCCFG register) */ - IOTKIT_SPC->NSCCFG |= 1U; - - - /* configure PPC --------------- */ -#if !defined (__USE_SECURE) - /* Allow Non-secure access for SCC/FPGAIO registers */ - IOTKIT_SPC->APBNSPPCEXP[2U] |= ((1UL << 0U) | - (1UL << 2U) ); - /* Allow Non-secure access for SPI1/UART0 registers */ - IOTKIT_SPC->APBNSPPCEXP[1U] |= ((1UL << 1U) | - (1UL << 5U) ); -#endif - -/* end IOT Green configuration --------------------------- */ - - TZ_SAU_Setup(); -#endif - - SystemCoreClock = SYSTEM_CLOCK; -} diff --git a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/Target.clayer.yml deleted file mode 100644 index 1701481..0000000 --- a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/Target.clayer.yml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: Keil.:V2M-MPS2_IOTKit_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: Device:Startup&C Startup - - - component: Keil::Board Support&V2M-MPS2 IOT-Kit:Common - - component: Keil::CMSIS Driver:USART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/vht_config.txt deleted file mode 100644 index 8c9da53..0000000 --- a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_GCC/vht_config.txt +++ /dev/null @@ -1,33 +0,0 @@ -## Parameters: -## instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -##------------------------------------------------------------------------------ -fvp_mps2.UART0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -fvp_mps2.UART0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -fvp_mps2.UART0.unbuffered_output=1 # (bool , init-time) default = '0' : Unbuffered output -fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -##------------------------------------------------------------------------------ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -cpu0.BIGENDINIT=0 # (bool , init-time) default = '0' : Initialize processor to big endian mode -cpu0.CPIF=1 # (bool , init-time) default = '1' : Specifies whether the external coprocessor interface is included -cpu0.DSP=1 # (bool , init-time) default = '1' : Set whether the model has the DSP extension -cpu0.FPU=1 # (bool , init-time) default = '1' : Set whether the model has VFP support -cpu0.INITNSVTOR=0 # (int , init-time) default = '0x0' : Non-Secure vector-table offset at reset -cpu0.INITSVTOR=0 # (int , init-time) default = '0x10000000' : Secure vector-table offset at reset -cpu0.IRQLVL=0x3 # (int , init-time) default = '0x3' : Number of bits of interrupt priority -cpu0.ITM=0 # (bool , init-time) default = '1' : Level of instrumentation trace supported. false : No ITM trace included, true: ITM trace included -cpu0.LOCK_NS_MPU=0 # (bool , init-time) default = '0' : Lock down of Non-Secure MPU registers write -cpu0.LOCK_SAU=0 # (bool , init-time) default = '0' : Lock down of SAU registers write -cpu0.LOCK_S_MPU=0 # (bool , init-time) default = '0' : Lock down of Secure MPU registers write -cpu0.MPU_NS=0x8 # (int , init-time) default = '0x8' : Number of regions in the Non-Secure MPU. If Security Extentions are absent, this is the total number of MPU regions -cpu0.MPU_S=0x8 # (int , init-time) default = '0x8' : Number of regions in the Secure MPU. If Security Extentions are absent, this is ignored -cpu0.SAU=0x8 # (int , init-time) default = '0x8' : Number of SAU regions (0 => no SAU) -cpu0.SAU_CTRL.ALLNS=0 # (bool , init-time) default = '0' : At reset, the SAU treats entire memory space as NS when the SAU is disabled if this is set -cpu0.SAU_CTRL.ENABLE=0 # (bool , init-time) default = '0' : Enable SAU at reset -cpu0.SECEXT=1 # (bool , init-time) default = '1' : Whether the ARMv8-M Security Extensions are included -cpu0.semihosting-enable=0 # (bool , init-time) default = '1' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false. -fvp_mps2.DISABLE_GATING=1 # (bool , init-time) default = '0' : Disable Memory gating logic -fvp_mps2.platform_type=1 # (int , init-time) default = '0x0' : 0:Original MPS2 ; 1:IoT Kit (cut-down SSE-200) ; 2:Full SSE-200; 3:SVOS -idau.NUM_IDAU_REGION=0 # (int , init-time) default = '0x12' : -#------------------------------------------------------------------------------ diff --git a/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/RTE_Device.h deleted file mode 100644 index 7584efd..0000000 --- a/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/RTE_Device.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2016 ARM Ltd. - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. Permission is granted to anyone to use this - * software for any purpose, including commercial applications, and to alter - * it and redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - * - * $Date: 25. April 2016 - * $Revision: V1.0.0 - * - * Project: RTE Device Configuration for ARM CMSDK_CM device - * -------------------------------------------------------------------------- */ - -//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART0 (Universal synchronous asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::CMSIS Driver:USART -#define RTE_USART0 1 - - -// USART1 (Universal synchronous asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART -#define RTE_USART1 0 - - -// USART2 (Universal synchronous asynchronous receiver transmitter) [Driver_USART2] -// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART -#define RTE_UART2 0 - - -// USART3 (Universal synchronous asynchronous receiver transmitter) [Driver_USART3] -// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART -#define RTE_UART3 0 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/ac6_arm.sct b/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/ac6_arm.sct deleted file mode 100644 index dda75e3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/ac6_arm.sct +++ /dev/null @@ -1,76 +0,0 @@ -#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m3 -xc -; command above MUST be in first line (no comment above!) - -/* -;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------- -*/ - -/*--------------------- Flash Configuration ---------------------------------- -; Flash Configuration -; Flash Base Address <0x0-0xFFFFFFFF:8> -; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - *----------------------------------------------------------------------------*/ -#define __ROM_BASE 0x00000000 -#define __ROM_SIZE 0x00080000 - -/*--------------------- Embedded RAM Configuration --------------------------- -; RAM Configuration -; RAM Base Address <0x0-0xFFFFFFFF:8> -; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - *----------------------------------------------------------------------------*/ -#define __RAM_BASE 0x20000000 -#define __RAM_SIZE 0x00040000 - -/*--------------------- Stack / Heap Configuration --------------------------- -; 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 - -/* -;------------- <<< end of configuration section >>> --------------------------- -*/ - - -/*---------------------------------------------------------------------------- - User Stack & Heap boundary definition - *----------------------------------------------------------------------------*/ -#define __STACK_TOP (__RAM_BASE + __RAM_SIZE) /* starts at end of RAM */ -#define __HEAP_BASE (AlignExpr(+0, 8)) /* starts after RW_RAM section, 8 byte aligned */ - - -/*---------------------------------------------------------------------------- - Scatter File Definitions definition - *----------------------------------------------------------------------------*/ -#define __RO_BASE __ROM_BASE -#define __RO_SIZE __ROM_SIZE - -#define __RW_BASE __RAM_BASE -#define __RW_SIZE (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE) - - -LR_ROM __RO_BASE __RO_SIZE { ; load region size_region - ER_ROM __RO_BASE __RO_SIZE { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - .ANY (+XO) - } - - RW_RAM __RW_BASE __RW_SIZE { ; RW data - .ANY (+RW +ZI) - } - -#if __HEAP_SIZE > 0 - ARM_LIB_HEAP __HEAP_BASE EMPTY __HEAP_SIZE { ; Reserve empty region for heap - } -#endif - - ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE { ; Reserve empty region for stack - } -} diff --git a/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/startup_CMSDK_CM3.c b/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/startup_CMSDK_CM3.c deleted file mode 100644 index a0753d0..0000000 --- a/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/startup_CMSDK_CM3.c +++ /dev/null @@ -1,421 +0,0 @@ -/****************************************************************************** - * @file startup_CMSDK_CM3.c - * @brief CMSIS Startup File for CMSDK_M3 Device - ******************************************************************************/ -/* Copyright (c) 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM3) || defined (CMSDK_CM3_VHT) - #include "CMSDK_CM3.h" -#else - #error device not specified! -#endif - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; - -extern __NO_RETURN void __PROGRAM_START(void); - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler (void); - void Default_Handler(void); - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -/* Exceptions */ -void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void HardFault_Handler (void) __attribute__ ((weak)); -void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* Interrupts */ -void UART0RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DUALTIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART_0_1_2_OVF_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ETHERNET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void I2S_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TOUCHSCREEN_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_3_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#if defined CMSDK_CM3_VHT -void ARM_VSI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#endif - - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - const VECTOR_TABLE_Type __VECTOR_TABLE[256] __VECTOR_TABLE_ATTRIBUTE = { - (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14 NMI Handler */ - HardFault_Handler, /* -13 Hard Fault Handler */ - MemManage_Handler, /* -12 MPU Fault Handler */ - BusFault_Handler, /* -11 Bus Fault Handler */ - UsageFault_Handler, /* -10 Usage Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5 SVC Handler */ - DebugMon_Handler, /* -4 Debug Monitor Handler */ - 0, /* Reserved */ - PendSV_Handler, /* -2 PendSV Handler */ - SysTick_Handler, /* -1 SysTick Handler */ - - /* Interrupts */ - UART0RX_Handler, /* 0 UART 0 receive interrupt */ - UART0TX_Handler, /* 1 UART 0 transmit interrupt */ - UART1RX_Handler, /* 2 UART 1 receive interrupt */ - UART1TX_Handler, /* 3 UART 1 transmit interrupt */ - UART2RX_Handler, /* 4 UART 2 receive interrupt */ - UART2TX_Handler, /* 5 UART 2 transmit interrupt */ - GPIO0ALL_Handler, /* 6 GPIO 0 combined interrupt */ - GPIO1ALL_Handler, /* 7 GPIO 1 combined interrupt */ - TIMER0_Handler, /* 8 Timer 0 interrupt */ - TIMER1_Handler, /* 9 Timer 1 interrupt */ - DUALTIMER_Handler, /* 10 Dual Timer interrupt */ - SPI_0_1_Handler, /* 11 SPI 0, SPI 1 interrupt */ - UART_0_1_2_OVF_Handler, /* 12 UART overflow (0, 1 & 2) interrupt */ - ETHERNET_Handler, /* 13 Ethernet interrupt */ - I2S_Handler, /* 14 Audio I2S interrupt */ - TOUCHSCREEN_Handler, /* 15 Touch Screen interrupt */ - GPIO2_Handler, /* 16 GPIO 2 combined interrupt */ - GPIO3_Handler, /* 17 GPIO 3 combined interrupt */ - UART3RX_Handler, /* 18 UART 3 receive interrupt */ - UART3TX_Handler, /* 19 UART 3 transmit interrupt */ - UART4RX_Handler, /* 20 UART 4 receive interrupt */ - UART4TX_Handler, /* 21 UART 4 transmit interrupt */ - SPI_2_Handler, /* 22 SPI 2 interrupt */ - SPI_3_4_Handler, /* 23 SPI 3, SPI 4 interrupt */ - GPIO0_0_Handler, /* 24 GPIO 0 individual interrupt ( 0) */ - GPIO0_1_Handler, /* 25 GPIO 0 individual interrupt ( 1) */ - GPIO0_2_Handler, /* 26 GPIO 0 individual interrupt ( 2) */ - GPIO0_3_Handler, /* 27 GPIO 0 individual interrupt ( 3) */ - GPIO0_4_Handler, /* 28 GPIO 0 individual interrupt ( 4) */ - GPIO0_5_Handler, /* 29 GPIO 0 individual interrupt ( 5) */ - GPIO0_6_Handler, /* 30 GPIO 0 individual interrupt ( 6) */ - GPIO0_7_Handler, /* 31 GPIO 0 individual interrupt ( 7) */ - 0, /* 32 Reserved */ - 0, /* 33 Reserved */ - 0, /* 34 Reserved */ - 0, /* 35 Reserved */ - 0, /* 36 Reserved */ - 0, /* 37 Reserved */ - 0, /* 38 Reserved */ - 0, /* 39 Reserved */ - 0, /* 40 Reserved */ - 0, /* 41 Reserved */ - 0, /* 42 Reserved */ - 0, /* 43 Reserved */ - 0, /* 44 Reserved */ - 0, /* 45 Reserved */ - 0, /* 46 Reserved */ - 0, /* 47 Reserved */ - 0, /* 48 Reserved */ - 0, /* 49 Reserved */ - 0, /* 50 Reserved */ - 0, /* 51 Reserved */ - 0, /* 52 Reserved */ - 0, /* 53 Reserved */ - 0, /* 54 Reserved */ - 0, /* 55 Reserved */ - 0, /* 56 Reserved */ - 0, /* 57 Reserved */ - 0, /* 58 Reserved */ - 0, /* 59 Reserved */ - 0, /* 60 Reserved */ - 0, /* 61 Reserved */ - 0, /* 62 Reserved */ - 0, /* 63 Reserved */ - 0, /* 64 Reserved */ - 0, /* 65 Reserved */ - 0, /* 66 Reserved */ - 0, /* 67 Reserved */ - 0, /* 68 Reserved */ - 0, /* 69 Reserved */ - 0, /* 70 Reserved */ - 0, /* 71 Reserved */ - 0, /* 72 Reserved */ - 0, /* 73 Reserved */ - 0, /* 74 Reserved */ - 0, /* 75 Reserved */ - 0, /* 76 Reserved */ - 0, /* 77 Reserved */ - 0, /* 78 Reserved */ - 0, /* 79 Reserved */ - 0, /* 80 Reserved */ - 0, /* 81 Reserved */ - 0, /* 82 Reserved */ - 0, /* 83 Reserved */ - 0, /* 84 Reserved */ - 0, /* 85 Reserved */ - 0, /* 86 Reserved */ - 0, /* 87 Reserved */ - 0, /* 88 Reserved */ - 0, /* 89 Reserved */ - 0, /* 90 Reserved */ - 0, /* 91 Reserved */ - 0, /* 92 Reserved */ - 0, /* 93 Reserved */ - 0, /* 94 Reserved */ - 0, /* 95 Reserved */ - 0, /* 96 Reserved */ - 0, /* 97 Reserved */ - 0, /* 98 Reserved */ - 0, /* 99 Reserved */ - 0, /* 100 Reserved */ - 0, /* 101 Reserved */ - 0, /* 102 Reserved */ - 0, /* 103 Reserved */ - 0, /* 104 Reserved */ - 0, /* 105 Reserved */ - 0, /* 106 Reserved */ - 0, /* 107 Reserved */ - 0, /* 108 Reserved */ - 0, /* 109 Reserved */ - 0, /* 110 Reserved */ - 0, /* 111 Reserved */ - 0, /* 112 Reserved */ - 0, /* 113 Reserved */ - 0, /* 114 Reserved */ - 0, /* 115 Reserved */ - 0, /* 116 Reserved */ - 0, /* 117 Reserved */ - 0, /* 118 Reserved */ - 0, /* 119 Reserved */ - 0, /* 120 Reserved */ - 0, /* 121 Reserved */ - 0, /* 122 Reserved */ - 0, /* 123 Reserved */ - 0, /* 124 Reserved */ - 0, /* 125 Reserved */ - 0, /* 126 Reserved */ - 0, /* 127 Reserved */ - 0, /* 128 Reserved */ - 0, /* 129 Reserved */ - 0, /* 130 Reserved */ - 0, /* 131 Reserved */ - 0, /* 132 Reserved */ - 0, /* 133 Reserved */ - 0, /* 134 Reserved */ - 0, /* 135 Reserved */ - 0, /* 136 Reserved */ - 0, /* 137 Reserved */ - 0, /* 138 Reserved */ - 0, /* 139 Reserved */ - 0, /* 140 Reserved */ - 0, /* 141 Reserved */ - 0, /* 142 Reserved */ - 0, /* 143 Reserved */ - 0, /* 144 Reserved */ - 0, /* 145 Reserved */ - 0, /* 146 Reserved */ - 0, /* 147 Reserved */ - 0, /* 148 Reserved */ - 0, /* 149 Reserved */ - 0, /* 150 Reserved */ - 0, /* 151 Reserved */ - 0, /* 152 Reserved */ - 0, /* 153 Reserved */ - 0, /* 154 Reserved */ - 0, /* 155 Reserved */ - 0, /* 156 Reserved */ - 0, /* 157 Reserved */ - 0, /* 158 Reserved */ - 0, /* 159 Reserved */ - 0, /* 160 Reserved */ - 0, /* 161 Reserved */ - 0, /* 162 Reserved */ - 0, /* 163 Reserved */ - 0, /* 164 Reserved */ - 0, /* 165 Reserved */ - 0, /* 166 Reserved */ - 0, /* 167 Reserved */ - 0, /* 168 Reserved */ - 0, /* 169 Reserved */ - 0, /* 170 Reserved */ - 0, /* 171 Reserved */ - 0, /* 172 Reserved */ - 0, /* 173 Reserved */ - 0, /* 174 Reserved */ - 0, /* 175 Reserved */ - 0, /* 176 Reserved */ - 0, /* 177 Reserved */ - 0, /* 178 Reserved */ - 0, /* 179 Reserved */ - 0, /* 180 Reserved */ - 0, /* 181 Reserved */ - 0, /* 182 Reserved */ - 0, /* 183 Reserved */ - 0, /* 184 Reserved */ - 0, /* 185 Reserved */ - 0, /* 186 Reserved */ - 0, /* 187 Reserved */ - 0, /* 188 Reserved */ - 0, /* 189 Reserved */ - 0, /* 190 Reserved */ - 0, /* 191 Reserved */ - 0, /* 192 Reserved */ - 0, /* 193 Reserved */ - 0, /* 194 Reserved */ - 0, /* 195 Reserved */ - 0, /* 196 Reserved */ - 0, /* 197 Reserved */ - 0, /* 198 Reserved */ - 0, /* 199 Reserved */ - 0, /* 200 Reserved */ - 0, /* 201 Reserved */ - 0, /* 202 Reserved */ - 0, /* 203 Reserved */ - 0, /* 204 Reserved */ - 0, /* 205 Reserved */ - 0, /* 206 Reserved */ - 0, /* 207 Reserved */ - 0, /* 208 Reserved */ - 0, /* 209 Reserved */ - 0, /* 210 Reserved */ - 0, /* 211 Reserved */ - 0, /* 212 Reserved */ - 0, /* 213 Reserved */ - 0, /* 214 Reserved */ - 0, /* 215 Reserved */ - 0, /* 216 Reserved */ - 0, /* 217 Reserved */ - 0, /* 218 Reserved */ - 0, /* 219 Reserved */ - 0, /* 220 Reserved */ - 0, /* 221 Reserved */ - 0, /* 222 Reserved */ - 0, /* 223 Reserved */ -#if defined CMSDK_CM3_VHT - ARM_VSI0_Handler, /* 224 VSI 0 interrupt */ - ARM_VSI1_Handler, /* 225 VSI 1 interrupt */ - ARM_VSI2_Handler, /* 226 VSI 2 interrupt */ - ARM_VSI3_Handler, /* 227 VSI 3 interrupt */ - ARM_VSI4_Handler, /* 228 VSI 4 interrupt */ - ARM_VSI5_Handler, /* 229 VSI 5 interrupt */ - ARM_VSI6_Handler, /* 230 VSI 6 interrupt */ - ARM_VSI7_Handler /* 231 VSI 7 interrupt */ -#else - 0, /* 224 Reserved */ - 0, /* 225 Reserved */ - 0, /* 226 Reserved */ - 0, /* 227 Reserved */ - 0, /* 228 Reserved */ - 0, /* 229 Reserved */ - 0, /* 230 Reserved */ - 0 /* 231 Reserved */ -#endif -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler(void) -{ - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmissing-noreturn" -#endif - -/*---------------------------------------------------------------------------- - Hard Fault Handler - *----------------------------------------------------------------------------*/ -void HardFault_Handler(void) -{ - while(1); -} - -/*---------------------------------------------------------------------------- - Default Handler for Exceptions / Interrupts - *----------------------------------------------------------------------------*/ -void Default_Handler(void) -{ - while(1); -} - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic pop -#endif diff --git a/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/system_CMSDK_CM3.c b/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/system_CMSDK_CM3.c deleted file mode 100644 index d83b399..0000000 --- a/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/RTE/Device/CMSDK_CM3_VHT/system_CMSDK_CM3.c +++ /dev/null @@ -1,78 +0,0 @@ -/****************************************************************************** - * @file system_CMSDK_CM3.c - * @brief CMSIS System Source File for CMSDK_M3 Device - ******************************************************************************/ -/* Copyright (c) 2011 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM3) || defined (CMSDK_CM3_VHT) - #include "CMSDK_CM3.h" -#else - #error device not specified! -#endif - - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define XTAL (50000000UL) /* Oscillator frequency */ - -#define SYSTEM_CLOCK (XTAL / 2U) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - - SystemCoreClock = SYSTEM_CLOCK; -} diff --git a/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/Target.clayer.yml deleted file mode 100644 index 8e3ec74..0000000 --- a/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/Target.clayer.yml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: Keil::V2M-MPS2_CMx_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: Device:Startup&C Startup - - - component: Keil::Board Support&V2M-MPS2:Common - - component: Keil::CMSIS Driver:USART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/vht_config.txt deleted file mode 100644 index b7f12f3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM3_VHT_AC6/vht_config.txt +++ /dev/null @@ -1,8 +0,0 @@ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -fvp_mps2.UART0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -fvp_mps2.UART0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -fvp_mps2.UART0.unbuffered_output=1 # (bool , init-time) default = '0' : Unbuffered output -fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -#------------------------------------------------------------------------------ diff --git a/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/RTE_Device.h deleted file mode 100644 index 7584efd..0000000 --- a/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/RTE_Device.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2016 ARM Ltd. - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. Permission is granted to anyone to use this - * software for any purpose, including commercial applications, and to alter - * it and redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - * - * $Date: 25. April 2016 - * $Revision: V1.0.0 - * - * Project: RTE Device Configuration for ARM CMSDK_CM device - * -------------------------------------------------------------------------- */ - -//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART0 (Universal synchronous asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::CMSIS Driver:USART -#define RTE_USART0 1 - - -// USART1 (Universal synchronous asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART -#define RTE_USART1 0 - - -// USART2 (Universal synchronous asynchronous receiver transmitter) [Driver_USART2] -// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART -#define RTE_UART2 0 - - -// USART3 (Universal synchronous asynchronous receiver transmitter) [Driver_USART3] -// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART -#define RTE_UART3 0 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/gcc_arm.ld b/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/gcc_arm.ld deleted file mode 100644 index 59bd7d1..0000000 --- a/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/gcc_arm.ld +++ /dev/null @@ -1,279 +0,0 @@ -/****************************************************************************** - * @file gcc_arm.ld - * @brief GNU Linker Script for Cortex-M based device - ******************************************************************************/ - -/* -; -------- <<< Use Configuration Wizard in Context Menu >>> ------------------- - */ - -/*---------------------- Flash Configuration ---------------------------------- -; Flash Configuration -; Flash Base Address <0x0-0xFFFFFFFF:8> -; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__ROM_BASE = 0x00000000; -__ROM_SIZE = 0x00400000; - -/*--------------------- Embedded RAM Configuration ---------------------------- -; RAM Configuration -; RAM Base Address <0x0-0xFFFFFFFF:8> -; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__RAM_BASE = 0x20000000; -__RAM_SIZE = 0x00020000; - -/*--------------------- Stack / Heap Configuration ---------------------------- -; Stack / Heap Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__STACK_SIZE = 0x00000400; -__HEAP_SIZE = 0x00000C00; - -/* -; -------------------- <<< end of configuration section >>> ------------------- - */ - -MEMORY -{ - FLASH (rx) : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE - RAM (rwx) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - KEEP(*(.vectors)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - /* - * SG veneers: - * All SG veneers are placed in the special output section .gnu.sgstubs. Its start address - * must be set, either with the command line option �--section-start� or in a linker script, - * to indicate where to place these veneers in memory. - */ -/* - .gnu.sgstubs : - { - . = ALIGN(32); - } > FLASH -*/ - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - - LONG (__etext) - LONG (__data_start__) - LONG ((__data_end__ - __data_start__) / 4) - - /* Add each additional data section here */ -/* - LONG (__etext2) - LONG (__data2_start__) - LONG ((__data2_end__ - __data2_start__) / 4) -*/ - __copy_table_end__ = .; - } > FLASH - - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG ((__bss_end__ - __bss_start__) / 4) - /* Add each additional bss section here */ -/* - LONG (__bss2_start__) - LONG ((__bss2_end__ - __bss2_start__) / 4) -*/ - __zero_table_end__ = .; - } > FLASH - - /** - * Location counter can end up 2byte aligned with narrow Thumb code but - * __etext is assumed by startup code to be the LMA of a section in RAM - * which must be 4byte aligned - */ - __etext = ALIGN (4); - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.data) - *(.data.*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(4); - /* All data end */ - __data_end__ = .; - - } > RAM - - /* - * Secondary data section, optional - * - * Remember to add each additional data section - * to the .copy.table above to asure proper - * initialization during startup. - */ -/* - __etext2 = ALIGN (4); - - .data2 : AT (__etext2) - { - . = ALIGN(4); - __data2_start__ = .; - *(.data2) - *(.data2.*) - . = ALIGN(4); - __data2_end__ = .; - - } > RAM2 -*/ - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss) - *(.bss.*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM AT > RAM - - /* - * Secondary bss section, optional - * - * Remember to add each additional bss section - * to the .zero.table above to asure proper - * initialization during startup. - */ -/* - .bss2 : - { - . = ALIGN(4); - __bss2_start__ = .; - *(.bss2) - *(.bss2.*) - . = ALIGN(4); - __bss2_end__ = .; - } > RAM2 AT > RAM2 -*/ - - .heap (COPY) : - { - . = ALIGN(8); - __end__ = .; - PROVIDE(end = .); - . = . + __HEAP_SIZE; - . = ALIGN(8); - __HeapLimit = .; - } > RAM - - .stack (ORIGIN(RAM) + LENGTH(RAM) - __STACK_SIZE) (COPY) : - { - . = ALIGN(8); - __StackLimit = .; - . = . + __STACK_SIZE; - . = ALIGN(8); - __StackTop = .; - } > RAM - PROVIDE(__stack = __StackTop); - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/startup_CMSDK_CM3.c b/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/startup_CMSDK_CM3.c deleted file mode 100644 index a0753d0..0000000 --- a/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/startup_CMSDK_CM3.c +++ /dev/null @@ -1,421 +0,0 @@ -/****************************************************************************** - * @file startup_CMSDK_CM3.c - * @brief CMSIS Startup File for CMSDK_M3 Device - ******************************************************************************/ -/* Copyright (c) 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM3) || defined (CMSDK_CM3_VHT) - #include "CMSDK_CM3.h" -#else - #error device not specified! -#endif - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; - -extern __NO_RETURN void __PROGRAM_START(void); - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler (void); - void Default_Handler(void); - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -/* Exceptions */ -void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void HardFault_Handler (void) __attribute__ ((weak)); -void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* Interrupts */ -void UART0RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DUALTIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART_0_1_2_OVF_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ETHERNET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void I2S_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TOUCHSCREEN_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_3_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#if defined CMSDK_CM3_VHT -void ARM_VSI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#endif - - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - const VECTOR_TABLE_Type __VECTOR_TABLE[256] __VECTOR_TABLE_ATTRIBUTE = { - (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14 NMI Handler */ - HardFault_Handler, /* -13 Hard Fault Handler */ - MemManage_Handler, /* -12 MPU Fault Handler */ - BusFault_Handler, /* -11 Bus Fault Handler */ - UsageFault_Handler, /* -10 Usage Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5 SVC Handler */ - DebugMon_Handler, /* -4 Debug Monitor Handler */ - 0, /* Reserved */ - PendSV_Handler, /* -2 PendSV Handler */ - SysTick_Handler, /* -1 SysTick Handler */ - - /* Interrupts */ - UART0RX_Handler, /* 0 UART 0 receive interrupt */ - UART0TX_Handler, /* 1 UART 0 transmit interrupt */ - UART1RX_Handler, /* 2 UART 1 receive interrupt */ - UART1TX_Handler, /* 3 UART 1 transmit interrupt */ - UART2RX_Handler, /* 4 UART 2 receive interrupt */ - UART2TX_Handler, /* 5 UART 2 transmit interrupt */ - GPIO0ALL_Handler, /* 6 GPIO 0 combined interrupt */ - GPIO1ALL_Handler, /* 7 GPIO 1 combined interrupt */ - TIMER0_Handler, /* 8 Timer 0 interrupt */ - TIMER1_Handler, /* 9 Timer 1 interrupt */ - DUALTIMER_Handler, /* 10 Dual Timer interrupt */ - SPI_0_1_Handler, /* 11 SPI 0, SPI 1 interrupt */ - UART_0_1_2_OVF_Handler, /* 12 UART overflow (0, 1 & 2) interrupt */ - ETHERNET_Handler, /* 13 Ethernet interrupt */ - I2S_Handler, /* 14 Audio I2S interrupt */ - TOUCHSCREEN_Handler, /* 15 Touch Screen interrupt */ - GPIO2_Handler, /* 16 GPIO 2 combined interrupt */ - GPIO3_Handler, /* 17 GPIO 3 combined interrupt */ - UART3RX_Handler, /* 18 UART 3 receive interrupt */ - UART3TX_Handler, /* 19 UART 3 transmit interrupt */ - UART4RX_Handler, /* 20 UART 4 receive interrupt */ - UART4TX_Handler, /* 21 UART 4 transmit interrupt */ - SPI_2_Handler, /* 22 SPI 2 interrupt */ - SPI_3_4_Handler, /* 23 SPI 3, SPI 4 interrupt */ - GPIO0_0_Handler, /* 24 GPIO 0 individual interrupt ( 0) */ - GPIO0_1_Handler, /* 25 GPIO 0 individual interrupt ( 1) */ - GPIO0_2_Handler, /* 26 GPIO 0 individual interrupt ( 2) */ - GPIO0_3_Handler, /* 27 GPIO 0 individual interrupt ( 3) */ - GPIO0_4_Handler, /* 28 GPIO 0 individual interrupt ( 4) */ - GPIO0_5_Handler, /* 29 GPIO 0 individual interrupt ( 5) */ - GPIO0_6_Handler, /* 30 GPIO 0 individual interrupt ( 6) */ - GPIO0_7_Handler, /* 31 GPIO 0 individual interrupt ( 7) */ - 0, /* 32 Reserved */ - 0, /* 33 Reserved */ - 0, /* 34 Reserved */ - 0, /* 35 Reserved */ - 0, /* 36 Reserved */ - 0, /* 37 Reserved */ - 0, /* 38 Reserved */ - 0, /* 39 Reserved */ - 0, /* 40 Reserved */ - 0, /* 41 Reserved */ - 0, /* 42 Reserved */ - 0, /* 43 Reserved */ - 0, /* 44 Reserved */ - 0, /* 45 Reserved */ - 0, /* 46 Reserved */ - 0, /* 47 Reserved */ - 0, /* 48 Reserved */ - 0, /* 49 Reserved */ - 0, /* 50 Reserved */ - 0, /* 51 Reserved */ - 0, /* 52 Reserved */ - 0, /* 53 Reserved */ - 0, /* 54 Reserved */ - 0, /* 55 Reserved */ - 0, /* 56 Reserved */ - 0, /* 57 Reserved */ - 0, /* 58 Reserved */ - 0, /* 59 Reserved */ - 0, /* 60 Reserved */ - 0, /* 61 Reserved */ - 0, /* 62 Reserved */ - 0, /* 63 Reserved */ - 0, /* 64 Reserved */ - 0, /* 65 Reserved */ - 0, /* 66 Reserved */ - 0, /* 67 Reserved */ - 0, /* 68 Reserved */ - 0, /* 69 Reserved */ - 0, /* 70 Reserved */ - 0, /* 71 Reserved */ - 0, /* 72 Reserved */ - 0, /* 73 Reserved */ - 0, /* 74 Reserved */ - 0, /* 75 Reserved */ - 0, /* 76 Reserved */ - 0, /* 77 Reserved */ - 0, /* 78 Reserved */ - 0, /* 79 Reserved */ - 0, /* 80 Reserved */ - 0, /* 81 Reserved */ - 0, /* 82 Reserved */ - 0, /* 83 Reserved */ - 0, /* 84 Reserved */ - 0, /* 85 Reserved */ - 0, /* 86 Reserved */ - 0, /* 87 Reserved */ - 0, /* 88 Reserved */ - 0, /* 89 Reserved */ - 0, /* 90 Reserved */ - 0, /* 91 Reserved */ - 0, /* 92 Reserved */ - 0, /* 93 Reserved */ - 0, /* 94 Reserved */ - 0, /* 95 Reserved */ - 0, /* 96 Reserved */ - 0, /* 97 Reserved */ - 0, /* 98 Reserved */ - 0, /* 99 Reserved */ - 0, /* 100 Reserved */ - 0, /* 101 Reserved */ - 0, /* 102 Reserved */ - 0, /* 103 Reserved */ - 0, /* 104 Reserved */ - 0, /* 105 Reserved */ - 0, /* 106 Reserved */ - 0, /* 107 Reserved */ - 0, /* 108 Reserved */ - 0, /* 109 Reserved */ - 0, /* 110 Reserved */ - 0, /* 111 Reserved */ - 0, /* 112 Reserved */ - 0, /* 113 Reserved */ - 0, /* 114 Reserved */ - 0, /* 115 Reserved */ - 0, /* 116 Reserved */ - 0, /* 117 Reserved */ - 0, /* 118 Reserved */ - 0, /* 119 Reserved */ - 0, /* 120 Reserved */ - 0, /* 121 Reserved */ - 0, /* 122 Reserved */ - 0, /* 123 Reserved */ - 0, /* 124 Reserved */ - 0, /* 125 Reserved */ - 0, /* 126 Reserved */ - 0, /* 127 Reserved */ - 0, /* 128 Reserved */ - 0, /* 129 Reserved */ - 0, /* 130 Reserved */ - 0, /* 131 Reserved */ - 0, /* 132 Reserved */ - 0, /* 133 Reserved */ - 0, /* 134 Reserved */ - 0, /* 135 Reserved */ - 0, /* 136 Reserved */ - 0, /* 137 Reserved */ - 0, /* 138 Reserved */ - 0, /* 139 Reserved */ - 0, /* 140 Reserved */ - 0, /* 141 Reserved */ - 0, /* 142 Reserved */ - 0, /* 143 Reserved */ - 0, /* 144 Reserved */ - 0, /* 145 Reserved */ - 0, /* 146 Reserved */ - 0, /* 147 Reserved */ - 0, /* 148 Reserved */ - 0, /* 149 Reserved */ - 0, /* 150 Reserved */ - 0, /* 151 Reserved */ - 0, /* 152 Reserved */ - 0, /* 153 Reserved */ - 0, /* 154 Reserved */ - 0, /* 155 Reserved */ - 0, /* 156 Reserved */ - 0, /* 157 Reserved */ - 0, /* 158 Reserved */ - 0, /* 159 Reserved */ - 0, /* 160 Reserved */ - 0, /* 161 Reserved */ - 0, /* 162 Reserved */ - 0, /* 163 Reserved */ - 0, /* 164 Reserved */ - 0, /* 165 Reserved */ - 0, /* 166 Reserved */ - 0, /* 167 Reserved */ - 0, /* 168 Reserved */ - 0, /* 169 Reserved */ - 0, /* 170 Reserved */ - 0, /* 171 Reserved */ - 0, /* 172 Reserved */ - 0, /* 173 Reserved */ - 0, /* 174 Reserved */ - 0, /* 175 Reserved */ - 0, /* 176 Reserved */ - 0, /* 177 Reserved */ - 0, /* 178 Reserved */ - 0, /* 179 Reserved */ - 0, /* 180 Reserved */ - 0, /* 181 Reserved */ - 0, /* 182 Reserved */ - 0, /* 183 Reserved */ - 0, /* 184 Reserved */ - 0, /* 185 Reserved */ - 0, /* 186 Reserved */ - 0, /* 187 Reserved */ - 0, /* 188 Reserved */ - 0, /* 189 Reserved */ - 0, /* 190 Reserved */ - 0, /* 191 Reserved */ - 0, /* 192 Reserved */ - 0, /* 193 Reserved */ - 0, /* 194 Reserved */ - 0, /* 195 Reserved */ - 0, /* 196 Reserved */ - 0, /* 197 Reserved */ - 0, /* 198 Reserved */ - 0, /* 199 Reserved */ - 0, /* 200 Reserved */ - 0, /* 201 Reserved */ - 0, /* 202 Reserved */ - 0, /* 203 Reserved */ - 0, /* 204 Reserved */ - 0, /* 205 Reserved */ - 0, /* 206 Reserved */ - 0, /* 207 Reserved */ - 0, /* 208 Reserved */ - 0, /* 209 Reserved */ - 0, /* 210 Reserved */ - 0, /* 211 Reserved */ - 0, /* 212 Reserved */ - 0, /* 213 Reserved */ - 0, /* 214 Reserved */ - 0, /* 215 Reserved */ - 0, /* 216 Reserved */ - 0, /* 217 Reserved */ - 0, /* 218 Reserved */ - 0, /* 219 Reserved */ - 0, /* 220 Reserved */ - 0, /* 221 Reserved */ - 0, /* 222 Reserved */ - 0, /* 223 Reserved */ -#if defined CMSDK_CM3_VHT - ARM_VSI0_Handler, /* 224 VSI 0 interrupt */ - ARM_VSI1_Handler, /* 225 VSI 1 interrupt */ - ARM_VSI2_Handler, /* 226 VSI 2 interrupt */ - ARM_VSI3_Handler, /* 227 VSI 3 interrupt */ - ARM_VSI4_Handler, /* 228 VSI 4 interrupt */ - ARM_VSI5_Handler, /* 229 VSI 5 interrupt */ - ARM_VSI6_Handler, /* 230 VSI 6 interrupt */ - ARM_VSI7_Handler /* 231 VSI 7 interrupt */ -#else - 0, /* 224 Reserved */ - 0, /* 225 Reserved */ - 0, /* 226 Reserved */ - 0, /* 227 Reserved */ - 0, /* 228 Reserved */ - 0, /* 229 Reserved */ - 0, /* 230 Reserved */ - 0 /* 231 Reserved */ -#endif -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler(void) -{ - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmissing-noreturn" -#endif - -/*---------------------------------------------------------------------------- - Hard Fault Handler - *----------------------------------------------------------------------------*/ -void HardFault_Handler(void) -{ - while(1); -} - -/*---------------------------------------------------------------------------- - Default Handler for Exceptions / Interrupts - *----------------------------------------------------------------------------*/ -void Default_Handler(void) -{ - while(1); -} - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic pop -#endif diff --git a/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/system_CMSDK_CM3.c b/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/system_CMSDK_CM3.c deleted file mode 100644 index d83b399..0000000 --- a/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/RTE/Device/CMSDK_CM3_VHT/system_CMSDK_CM3.c +++ /dev/null @@ -1,78 +0,0 @@ -/****************************************************************************** - * @file system_CMSDK_CM3.c - * @brief CMSIS System Source File for CMSDK_M3 Device - ******************************************************************************/ -/* Copyright (c) 2011 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM3) || defined (CMSDK_CM3_VHT) - #include "CMSDK_CM3.h" -#else - #error device not specified! -#endif - - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define XTAL (50000000UL) /* Oscillator frequency */ - -#define SYSTEM_CLOCK (XTAL / 2U) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - - SystemCoreClock = SYSTEM_CLOCK; -} diff --git a/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/Target.clayer.yml deleted file mode 100644 index 8e3ec74..0000000 --- a/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/Target.clayer.yml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: Keil::V2M-MPS2_CMx_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: Device:Startup&C Startup - - - component: Keil::Board Support&V2M-MPS2:Common - - component: Keil::CMSIS Driver:USART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/vht_config.txt deleted file mode 100644 index b7f12f3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM3_VHT_GCC/vht_config.txt +++ /dev/null @@ -1,8 +0,0 @@ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -fvp_mps2.UART0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -fvp_mps2.UART0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -fvp_mps2.UART0.unbuffered_output=1 # (bool , init-time) default = '0' : Unbuffered output -fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -#------------------------------------------------------------------------------ diff --git a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/RTE_Device.h deleted file mode 100644 index 7584efd..0000000 --- a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/RTE_Device.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2016 ARM Ltd. - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. Permission is granted to anyone to use this - * software for any purpose, including commercial applications, and to alter - * it and redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - * - * $Date: 25. April 2016 - * $Revision: V1.0.0 - * - * Project: RTE Device Configuration for ARM CMSDK_CM device - * -------------------------------------------------------------------------- */ - -//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART0 (Universal synchronous asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::CMSIS Driver:USART -#define RTE_USART0 1 - - -// USART1 (Universal synchronous asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART -#define RTE_USART1 0 - - -// USART2 (Universal synchronous asynchronous receiver transmitter) [Driver_USART2] -// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART -#define RTE_UART2 0 - - -// USART3 (Universal synchronous asynchronous receiver transmitter) [Driver_USART3] -// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART -#define RTE_UART3 0 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/ac6_arm.sct b/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/ac6_arm.sct deleted file mode 100644 index 991e4e3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/ac6_arm.sct +++ /dev/null @@ -1,76 +0,0 @@ -#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m4 -xc -; command above MUST be in first line (no comment above!) - -/* -;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------- -*/ - -/*--------------------- Flash Configuration ---------------------------------- -; Flash Configuration -; Flash Base Address <0x0-0xFFFFFFFF:8> -; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - *----------------------------------------------------------------------------*/ -#define __ROM_BASE 0x00000000 -#define __ROM_SIZE 0x00080000 - -/*--------------------- Embedded RAM Configuration --------------------------- -; RAM Configuration -; RAM Base Address <0x0-0xFFFFFFFF:8> -; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - *----------------------------------------------------------------------------*/ -#define __RAM_BASE 0x20000000 -#define __RAM_SIZE 0x00040000 - -/*--------------------- Stack / Heap Configuration --------------------------- -; 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 - -/* -;------------- <<< end of configuration section >>> --------------------------- -*/ - - -/*---------------------------------------------------------------------------- - User Stack & Heap boundary definition - *----------------------------------------------------------------------------*/ -#define __STACK_TOP (__RAM_BASE + __RAM_SIZE) /* starts at end of RAM */ -#define __HEAP_BASE (AlignExpr(+0, 8)) /* starts after RW_RAM section, 8 byte aligned */ - - -/*---------------------------------------------------------------------------- - Scatter File Definitions definition - *----------------------------------------------------------------------------*/ -#define __RO_BASE __ROM_BASE -#define __RO_SIZE __ROM_SIZE - -#define __RW_BASE __RAM_BASE -#define __RW_SIZE (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE) - - -LR_ROM __RO_BASE __RO_SIZE { ; load region size_region - ER_ROM __RO_BASE __RO_SIZE { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - .ANY (+XO) - } - - RW_RAM __RW_BASE __RW_SIZE { ; RW data - .ANY (+RW +ZI) - } - -#if __HEAP_SIZE > 0 - ARM_LIB_HEAP __HEAP_BASE EMPTY __HEAP_SIZE { ; Reserve empty region for heap - } -#endif - - ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE { ; Reserve empty region for stack - } -} diff --git a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/startup_CMSDK_CM4.c b/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/startup_CMSDK_CM4.c deleted file mode 100644 index 08b2426..0000000 --- a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/startup_CMSDK_CM4.c +++ /dev/null @@ -1,423 +0,0 @@ -/****************************************************************************** - * @file startup_CMSDK_CM4.c - * @brief CMSIS Startup File for CMSDK_M4 Device - ******************************************************************************/ -/* Copyright (c) 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM4) || defined (CMSDK_CM4_VHT) - #include "CMSDK_CM4.h" -#elif defined (CMSDK_CM4_FP) || defined (CMSDK_CM4_FP_VHT) - #include "CMSDK_CM4_FP.h" -#else - #error device not specified! -#endif - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; - -extern __NO_RETURN void __PROGRAM_START(void); - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler (void); - void Default_Handler(void); - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -/* Exceptions */ -void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void HardFault_Handler (void) __attribute__ ((weak)); -void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* Interrupts */ -void UART0RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DUALTIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART_0_1_2_OVF_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ETHERNET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void I2S_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TOUCHSCREEN_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_3_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#if defined CMSDK_CM4_VHT || defined CMSDK_CM4_FP_VHT -void ARM_VSI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#endif - - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - const VECTOR_TABLE_Type __VECTOR_TABLE[256] __VECTOR_TABLE_ATTRIBUTE = { - (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14 NMI Handler */ - HardFault_Handler, /* -13 Hard Fault Handler */ - MemManage_Handler, /* -12 MPU Fault Handler */ - BusFault_Handler, /* -11 Bus Fault Handler */ - UsageFault_Handler, /* -10 Usage Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5 SVC Handler */ - DebugMon_Handler, /* -4 Debug Monitor Handler */ - 0, /* Reserved */ - PendSV_Handler, /* -2 PendSV Handler */ - SysTick_Handler, /* -1 SysTick Handler */ - - /* Interrupts */ - UART0RX_Handler, /* 0 UART 0 receive interrupt */ - UART0TX_Handler, /* 1 UART 0 transmit interrupt */ - UART1RX_Handler, /* 2 UART 1 receive interrupt */ - UART1TX_Handler, /* 3 UART 1 transmit interrupt */ - UART2RX_Handler, /* 4 UART 2 receive interrupt */ - UART2TX_Handler, /* 5 UART 2 transmit interrupt */ - GPIO0ALL_Handler, /* 6 GPIO 0 combined interrupt */ - GPIO1ALL_Handler, /* 7 GPIO 1 combined interrupt */ - TIMER0_Handler, /* 8 Timer 0 interrupt */ - TIMER1_Handler, /* 9 Timer 1 interrupt */ - DUALTIMER_Handler, /* 10 Dual Timer interrupt */ - SPI_0_1_Handler, /* 11 SPI 0, SPI 1 interrupt */ - UART_0_1_2_OVF_Handler, /* 12 UART overflow (0, 1 & 2) interrupt */ - ETHERNET_Handler, /* 13 Ethernet interrupt */ - I2S_Handler, /* 14 Audio I2S interrupt */ - TOUCHSCREEN_Handler, /* 15 Touch Screen interrupt */ - GPIO2_Handler, /* 16 GPIO 2 combined interrupt */ - GPIO3_Handler, /* 17 GPIO 3 combined interrupt */ - UART3RX_Handler, /* 18 UART 3 receive interrupt */ - UART3TX_Handler, /* 19 UART 3 transmit interrupt */ - UART4RX_Handler, /* 20 UART 4 receive interrupt */ - UART4TX_Handler, /* 21 UART 4 transmit interrupt */ - SPI_2_Handler, /* 22 SPI 2 interrupt */ - SPI_3_4_Handler, /* 23 SPI 3, SPI 4 interrupt */ - GPIO0_0_Handler, /* 24 GPIO 0 individual interrupt ( 0) */ - GPIO0_1_Handler, /* 25 GPIO 0 individual interrupt ( 1) */ - GPIO0_2_Handler, /* 26 GPIO 0 individual interrupt ( 2) */ - GPIO0_3_Handler, /* 27 GPIO 0 individual interrupt ( 3) */ - GPIO0_4_Handler, /* 28 GPIO 0 individual interrupt ( 4) */ - GPIO0_5_Handler, /* 29 GPIO 0 individual interrupt ( 5) */ - GPIO0_6_Handler, /* 30 GPIO 0 individual interrupt ( 6) */ - GPIO0_7_Handler, /* 31 GPIO 0 individual interrupt ( 7) */ - 0, /* 32 Reserved */ - 0, /* 33 Reserved */ - 0, /* 34 Reserved */ - 0, /* 35 Reserved */ - 0, /* 36 Reserved */ - 0, /* 37 Reserved */ - 0, /* 38 Reserved */ - 0, /* 39 Reserved */ - 0, /* 40 Reserved */ - 0, /* 41 Reserved */ - 0, /* 42 Reserved */ - 0, /* 43 Reserved */ - 0, /* 44 Reserved */ - 0, /* 45 Reserved */ - 0, /* 46 Reserved */ - 0, /* 47 Reserved */ - 0, /* 48 Reserved */ - 0, /* 49 Reserved */ - 0, /* 50 Reserved */ - 0, /* 51 Reserved */ - 0, /* 52 Reserved */ - 0, /* 53 Reserved */ - 0, /* 54 Reserved */ - 0, /* 55 Reserved */ - 0, /* 56 Reserved */ - 0, /* 57 Reserved */ - 0, /* 58 Reserved */ - 0, /* 59 Reserved */ - 0, /* 60 Reserved */ - 0, /* 61 Reserved */ - 0, /* 62 Reserved */ - 0, /* 63 Reserved */ - 0, /* 64 Reserved */ - 0, /* 65 Reserved */ - 0, /* 66 Reserved */ - 0, /* 67 Reserved */ - 0, /* 68 Reserved */ - 0, /* 69 Reserved */ - 0, /* 70 Reserved */ - 0, /* 71 Reserved */ - 0, /* 72 Reserved */ - 0, /* 73 Reserved */ - 0, /* 74 Reserved */ - 0, /* 75 Reserved */ - 0, /* 76 Reserved */ - 0, /* 77 Reserved */ - 0, /* 78 Reserved */ - 0, /* 79 Reserved */ - 0, /* 80 Reserved */ - 0, /* 81 Reserved */ - 0, /* 82 Reserved */ - 0, /* 83 Reserved */ - 0, /* 84 Reserved */ - 0, /* 85 Reserved */ - 0, /* 86 Reserved */ - 0, /* 87 Reserved */ - 0, /* 88 Reserved */ - 0, /* 89 Reserved */ - 0, /* 90 Reserved */ - 0, /* 91 Reserved */ - 0, /* 92 Reserved */ - 0, /* 93 Reserved */ - 0, /* 94 Reserved */ - 0, /* 95 Reserved */ - 0, /* 96 Reserved */ - 0, /* 97 Reserved */ - 0, /* 98 Reserved */ - 0, /* 99 Reserved */ - 0, /* 100 Reserved */ - 0, /* 101 Reserved */ - 0, /* 102 Reserved */ - 0, /* 103 Reserved */ - 0, /* 104 Reserved */ - 0, /* 105 Reserved */ - 0, /* 106 Reserved */ - 0, /* 107 Reserved */ - 0, /* 108 Reserved */ - 0, /* 109 Reserved */ - 0, /* 110 Reserved */ - 0, /* 111 Reserved */ - 0, /* 112 Reserved */ - 0, /* 113 Reserved */ - 0, /* 114 Reserved */ - 0, /* 115 Reserved */ - 0, /* 116 Reserved */ - 0, /* 117 Reserved */ - 0, /* 118 Reserved */ - 0, /* 119 Reserved */ - 0, /* 120 Reserved */ - 0, /* 121 Reserved */ - 0, /* 122 Reserved */ - 0, /* 123 Reserved */ - 0, /* 124 Reserved */ - 0, /* 125 Reserved */ - 0, /* 126 Reserved */ - 0, /* 127 Reserved */ - 0, /* 128 Reserved */ - 0, /* 129 Reserved */ - 0, /* 130 Reserved */ - 0, /* 131 Reserved */ - 0, /* 132 Reserved */ - 0, /* 133 Reserved */ - 0, /* 134 Reserved */ - 0, /* 135 Reserved */ - 0, /* 136 Reserved */ - 0, /* 137 Reserved */ - 0, /* 138 Reserved */ - 0, /* 139 Reserved */ - 0, /* 140 Reserved */ - 0, /* 141 Reserved */ - 0, /* 142 Reserved */ - 0, /* 143 Reserved */ - 0, /* 144 Reserved */ - 0, /* 145 Reserved */ - 0, /* 146 Reserved */ - 0, /* 147 Reserved */ - 0, /* 148 Reserved */ - 0, /* 149 Reserved */ - 0, /* 150 Reserved */ - 0, /* 151 Reserved */ - 0, /* 152 Reserved */ - 0, /* 153 Reserved */ - 0, /* 154 Reserved */ - 0, /* 155 Reserved */ - 0, /* 156 Reserved */ - 0, /* 157 Reserved */ - 0, /* 158 Reserved */ - 0, /* 159 Reserved */ - 0, /* 160 Reserved */ - 0, /* 161 Reserved */ - 0, /* 162 Reserved */ - 0, /* 163 Reserved */ - 0, /* 164 Reserved */ - 0, /* 165 Reserved */ - 0, /* 166 Reserved */ - 0, /* 167 Reserved */ - 0, /* 168 Reserved */ - 0, /* 169 Reserved */ - 0, /* 170 Reserved */ - 0, /* 171 Reserved */ - 0, /* 172 Reserved */ - 0, /* 173 Reserved */ - 0, /* 174 Reserved */ - 0, /* 175 Reserved */ - 0, /* 176 Reserved */ - 0, /* 177 Reserved */ - 0, /* 178 Reserved */ - 0, /* 179 Reserved */ - 0, /* 180 Reserved */ - 0, /* 181 Reserved */ - 0, /* 182 Reserved */ - 0, /* 183 Reserved */ - 0, /* 184 Reserved */ - 0, /* 185 Reserved */ - 0, /* 186 Reserved */ - 0, /* 187 Reserved */ - 0, /* 188 Reserved */ - 0, /* 189 Reserved */ - 0, /* 190 Reserved */ - 0, /* 191 Reserved */ - 0, /* 192 Reserved */ - 0, /* 193 Reserved */ - 0, /* 194 Reserved */ - 0, /* 195 Reserved */ - 0, /* 196 Reserved */ - 0, /* 197 Reserved */ - 0, /* 198 Reserved */ - 0, /* 199 Reserved */ - 0, /* 200 Reserved */ - 0, /* 201 Reserved */ - 0, /* 202 Reserved */ - 0, /* 203 Reserved */ - 0, /* 204 Reserved */ - 0, /* 205 Reserved */ - 0, /* 206 Reserved */ - 0, /* 207 Reserved */ - 0, /* 208 Reserved */ - 0, /* 209 Reserved */ - 0, /* 210 Reserved */ - 0, /* 211 Reserved */ - 0, /* 212 Reserved */ - 0, /* 213 Reserved */ - 0, /* 214 Reserved */ - 0, /* 215 Reserved */ - 0, /* 216 Reserved */ - 0, /* 217 Reserved */ - 0, /* 218 Reserved */ - 0, /* 219 Reserved */ - 0, /* 220 Reserved */ - 0, /* 221 Reserved */ - 0, /* 222 Reserved */ - 0, /* 223 Reserved */ -#if defined CMSDK_CM4_VHT || defined CMSDK_CM4_FP_VHT - ARM_VSI0_Handler, /* 224 VSI 0 interrupt */ - ARM_VSI1_Handler, /* 225 VSI 1 interrupt */ - ARM_VSI2_Handler, /* 226 VSI 2 interrupt */ - ARM_VSI3_Handler, /* 227 VSI 3 interrupt */ - ARM_VSI4_Handler, /* 228 VSI 4 interrupt */ - ARM_VSI5_Handler, /* 229 VSI 5 interrupt */ - ARM_VSI6_Handler, /* 230 VSI 6 interrupt */ - ARM_VSI7_Handler /* 231 VSI 7 interrupt */ -#else - 0, /* 224 Reserved */ - 0, /* 225 Reserved */ - 0, /* 226 Reserved */ - 0, /* 227 Reserved */ - 0, /* 228 Reserved */ - 0, /* 229 Reserved */ - 0, /* 230 Reserved */ - 0 /* 231 Reserved */ -#endif -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler(void) -{ - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmissing-noreturn" -#endif - -/*---------------------------------------------------------------------------- - Hard Fault Handler - *----------------------------------------------------------------------------*/ -void HardFault_Handler(void) -{ - while(1); -} - -/*---------------------------------------------------------------------------- - Default Handler for Exceptions / Interrupts - *----------------------------------------------------------------------------*/ -void Default_Handler(void) -{ - while(1); -} - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic pop -#endif diff --git a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/system_CMSDK_CM4.c b/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/system_CMSDK_CM4.c deleted file mode 100644 index 27aa0d7..0000000 --- a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/RTE/Device/CMSDK_CM4_FP_VHT/system_CMSDK_CM4.c +++ /dev/null @@ -1,85 +0,0 @@ -/****************************************************************************** - * @file system_CMSDK_CM4.c - * @brief CMSIS System Source File for CMSDK_M4 Device - ******************************************************************************/ -/* Copyright (c) 2011 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM4) || defined (CMSDK_CM4_VHT) - #include "CMSDK_CM4.h" -#elif defined (CMSDK_CM4_FP) || defined (CMSDK_CM4_FP_VHT) - #include "CMSDK_CM4_FP.h" -#else - #error device not specified! -#endif - - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define XTAL (50000000UL) /* Oscillator frequency */ - -#define SYSTEM_CLOCK (XTAL / 2U) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); -#endif - -#if defined (__FPU_USED) && (__FPU_USED == 1U) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - - SystemCoreClock = SYSTEM_CLOCK; -} diff --git a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/Target.clayer.yml deleted file mode 100644 index 8e3ec74..0000000 --- a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/Target.clayer.yml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: Keil::V2M-MPS2_CMx_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: Device:Startup&C Startup - - - component: Keil::Board Support&V2M-MPS2:Common - - component: Keil::CMSIS Driver:USART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/vht_config.txt deleted file mode 100644 index b7f12f3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_AC6/vht_config.txt +++ /dev/null @@ -1,8 +0,0 @@ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -fvp_mps2.UART0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -fvp_mps2.UART0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -fvp_mps2.UART0.unbuffered_output=1 # (bool , init-time) default = '0' : Unbuffered output -fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -#------------------------------------------------------------------------------ diff --git a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/RTE_Device.h deleted file mode 100644 index 7584efd..0000000 --- a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/RTE_Device.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2016 ARM Ltd. - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. Permission is granted to anyone to use this - * software for any purpose, including commercial applications, and to alter - * it and redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - * - * $Date: 25. April 2016 - * $Revision: V1.0.0 - * - * Project: RTE Device Configuration for ARM CMSDK_CM device - * -------------------------------------------------------------------------- */ - -//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART0 (Universal synchronous asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::CMSIS Driver:USART -#define RTE_USART0 1 - - -// USART1 (Universal synchronous asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART -#define RTE_USART1 0 - - -// USART2 (Universal synchronous asynchronous receiver transmitter) [Driver_USART2] -// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART -#define RTE_UART2 0 - - -// USART3 (Universal synchronous asynchronous receiver transmitter) [Driver_USART3] -// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART -#define RTE_UART3 0 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/gcc_arm.ld b/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/gcc_arm.ld deleted file mode 100644 index 59bd7d1..0000000 --- a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/gcc_arm.ld +++ /dev/null @@ -1,279 +0,0 @@ -/****************************************************************************** - * @file gcc_arm.ld - * @brief GNU Linker Script for Cortex-M based device - ******************************************************************************/ - -/* -; -------- <<< Use Configuration Wizard in Context Menu >>> ------------------- - */ - -/*---------------------- Flash Configuration ---------------------------------- -; Flash Configuration -; Flash Base Address <0x0-0xFFFFFFFF:8> -; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__ROM_BASE = 0x00000000; -__ROM_SIZE = 0x00400000; - -/*--------------------- Embedded RAM Configuration ---------------------------- -; RAM Configuration -; RAM Base Address <0x0-0xFFFFFFFF:8> -; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__RAM_BASE = 0x20000000; -__RAM_SIZE = 0x00020000; - -/*--------------------- Stack / Heap Configuration ---------------------------- -; Stack / Heap Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__STACK_SIZE = 0x00000400; -__HEAP_SIZE = 0x00000C00; - -/* -; -------------------- <<< end of configuration section >>> ------------------- - */ - -MEMORY -{ - FLASH (rx) : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE - RAM (rwx) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - KEEP(*(.vectors)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - /* - * SG veneers: - * All SG veneers are placed in the special output section .gnu.sgstubs. Its start address - * must be set, either with the command line option �--section-start� or in a linker script, - * to indicate where to place these veneers in memory. - */ -/* - .gnu.sgstubs : - { - . = ALIGN(32); - } > FLASH -*/ - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - - LONG (__etext) - LONG (__data_start__) - LONG ((__data_end__ - __data_start__) / 4) - - /* Add each additional data section here */ -/* - LONG (__etext2) - LONG (__data2_start__) - LONG ((__data2_end__ - __data2_start__) / 4) -*/ - __copy_table_end__ = .; - } > FLASH - - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG ((__bss_end__ - __bss_start__) / 4) - /* Add each additional bss section here */ -/* - LONG (__bss2_start__) - LONG ((__bss2_end__ - __bss2_start__) / 4) -*/ - __zero_table_end__ = .; - } > FLASH - - /** - * Location counter can end up 2byte aligned with narrow Thumb code but - * __etext is assumed by startup code to be the LMA of a section in RAM - * which must be 4byte aligned - */ - __etext = ALIGN (4); - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.data) - *(.data.*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(4); - /* All data end */ - __data_end__ = .; - - } > RAM - - /* - * Secondary data section, optional - * - * Remember to add each additional data section - * to the .copy.table above to asure proper - * initialization during startup. - */ -/* - __etext2 = ALIGN (4); - - .data2 : AT (__etext2) - { - . = ALIGN(4); - __data2_start__ = .; - *(.data2) - *(.data2.*) - . = ALIGN(4); - __data2_end__ = .; - - } > RAM2 -*/ - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss) - *(.bss.*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM AT > RAM - - /* - * Secondary bss section, optional - * - * Remember to add each additional bss section - * to the .zero.table above to asure proper - * initialization during startup. - */ -/* - .bss2 : - { - . = ALIGN(4); - __bss2_start__ = .; - *(.bss2) - *(.bss2.*) - . = ALIGN(4); - __bss2_end__ = .; - } > RAM2 AT > RAM2 -*/ - - .heap (COPY) : - { - . = ALIGN(8); - __end__ = .; - PROVIDE(end = .); - . = . + __HEAP_SIZE; - . = ALIGN(8); - __HeapLimit = .; - } > RAM - - .stack (ORIGIN(RAM) + LENGTH(RAM) - __STACK_SIZE) (COPY) : - { - . = ALIGN(8); - __StackLimit = .; - . = . + __STACK_SIZE; - . = ALIGN(8); - __StackTop = .; - } > RAM - PROVIDE(__stack = __StackTop); - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/startup_CMSDK_CM4.c b/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/startup_CMSDK_CM4.c deleted file mode 100644 index 08b2426..0000000 --- a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/startup_CMSDK_CM4.c +++ /dev/null @@ -1,423 +0,0 @@ -/****************************************************************************** - * @file startup_CMSDK_CM4.c - * @brief CMSIS Startup File for CMSDK_M4 Device - ******************************************************************************/ -/* Copyright (c) 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM4) || defined (CMSDK_CM4_VHT) - #include "CMSDK_CM4.h" -#elif defined (CMSDK_CM4_FP) || defined (CMSDK_CM4_FP_VHT) - #include "CMSDK_CM4_FP.h" -#else - #error device not specified! -#endif - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; - -extern __NO_RETURN void __PROGRAM_START(void); - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler (void); - void Default_Handler(void); - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -/* Exceptions */ -void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void HardFault_Handler (void) __attribute__ ((weak)); -void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* Interrupts */ -void UART0RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DUALTIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART_0_1_2_OVF_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ETHERNET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void I2S_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TOUCHSCREEN_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_3_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#if defined CMSDK_CM4_VHT || defined CMSDK_CM4_FP_VHT -void ARM_VSI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#endif - - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - const VECTOR_TABLE_Type __VECTOR_TABLE[256] __VECTOR_TABLE_ATTRIBUTE = { - (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14 NMI Handler */ - HardFault_Handler, /* -13 Hard Fault Handler */ - MemManage_Handler, /* -12 MPU Fault Handler */ - BusFault_Handler, /* -11 Bus Fault Handler */ - UsageFault_Handler, /* -10 Usage Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5 SVC Handler */ - DebugMon_Handler, /* -4 Debug Monitor Handler */ - 0, /* Reserved */ - PendSV_Handler, /* -2 PendSV Handler */ - SysTick_Handler, /* -1 SysTick Handler */ - - /* Interrupts */ - UART0RX_Handler, /* 0 UART 0 receive interrupt */ - UART0TX_Handler, /* 1 UART 0 transmit interrupt */ - UART1RX_Handler, /* 2 UART 1 receive interrupt */ - UART1TX_Handler, /* 3 UART 1 transmit interrupt */ - UART2RX_Handler, /* 4 UART 2 receive interrupt */ - UART2TX_Handler, /* 5 UART 2 transmit interrupt */ - GPIO0ALL_Handler, /* 6 GPIO 0 combined interrupt */ - GPIO1ALL_Handler, /* 7 GPIO 1 combined interrupt */ - TIMER0_Handler, /* 8 Timer 0 interrupt */ - TIMER1_Handler, /* 9 Timer 1 interrupt */ - DUALTIMER_Handler, /* 10 Dual Timer interrupt */ - SPI_0_1_Handler, /* 11 SPI 0, SPI 1 interrupt */ - UART_0_1_2_OVF_Handler, /* 12 UART overflow (0, 1 & 2) interrupt */ - ETHERNET_Handler, /* 13 Ethernet interrupt */ - I2S_Handler, /* 14 Audio I2S interrupt */ - TOUCHSCREEN_Handler, /* 15 Touch Screen interrupt */ - GPIO2_Handler, /* 16 GPIO 2 combined interrupt */ - GPIO3_Handler, /* 17 GPIO 3 combined interrupt */ - UART3RX_Handler, /* 18 UART 3 receive interrupt */ - UART3TX_Handler, /* 19 UART 3 transmit interrupt */ - UART4RX_Handler, /* 20 UART 4 receive interrupt */ - UART4TX_Handler, /* 21 UART 4 transmit interrupt */ - SPI_2_Handler, /* 22 SPI 2 interrupt */ - SPI_3_4_Handler, /* 23 SPI 3, SPI 4 interrupt */ - GPIO0_0_Handler, /* 24 GPIO 0 individual interrupt ( 0) */ - GPIO0_1_Handler, /* 25 GPIO 0 individual interrupt ( 1) */ - GPIO0_2_Handler, /* 26 GPIO 0 individual interrupt ( 2) */ - GPIO0_3_Handler, /* 27 GPIO 0 individual interrupt ( 3) */ - GPIO0_4_Handler, /* 28 GPIO 0 individual interrupt ( 4) */ - GPIO0_5_Handler, /* 29 GPIO 0 individual interrupt ( 5) */ - GPIO0_6_Handler, /* 30 GPIO 0 individual interrupt ( 6) */ - GPIO0_7_Handler, /* 31 GPIO 0 individual interrupt ( 7) */ - 0, /* 32 Reserved */ - 0, /* 33 Reserved */ - 0, /* 34 Reserved */ - 0, /* 35 Reserved */ - 0, /* 36 Reserved */ - 0, /* 37 Reserved */ - 0, /* 38 Reserved */ - 0, /* 39 Reserved */ - 0, /* 40 Reserved */ - 0, /* 41 Reserved */ - 0, /* 42 Reserved */ - 0, /* 43 Reserved */ - 0, /* 44 Reserved */ - 0, /* 45 Reserved */ - 0, /* 46 Reserved */ - 0, /* 47 Reserved */ - 0, /* 48 Reserved */ - 0, /* 49 Reserved */ - 0, /* 50 Reserved */ - 0, /* 51 Reserved */ - 0, /* 52 Reserved */ - 0, /* 53 Reserved */ - 0, /* 54 Reserved */ - 0, /* 55 Reserved */ - 0, /* 56 Reserved */ - 0, /* 57 Reserved */ - 0, /* 58 Reserved */ - 0, /* 59 Reserved */ - 0, /* 60 Reserved */ - 0, /* 61 Reserved */ - 0, /* 62 Reserved */ - 0, /* 63 Reserved */ - 0, /* 64 Reserved */ - 0, /* 65 Reserved */ - 0, /* 66 Reserved */ - 0, /* 67 Reserved */ - 0, /* 68 Reserved */ - 0, /* 69 Reserved */ - 0, /* 70 Reserved */ - 0, /* 71 Reserved */ - 0, /* 72 Reserved */ - 0, /* 73 Reserved */ - 0, /* 74 Reserved */ - 0, /* 75 Reserved */ - 0, /* 76 Reserved */ - 0, /* 77 Reserved */ - 0, /* 78 Reserved */ - 0, /* 79 Reserved */ - 0, /* 80 Reserved */ - 0, /* 81 Reserved */ - 0, /* 82 Reserved */ - 0, /* 83 Reserved */ - 0, /* 84 Reserved */ - 0, /* 85 Reserved */ - 0, /* 86 Reserved */ - 0, /* 87 Reserved */ - 0, /* 88 Reserved */ - 0, /* 89 Reserved */ - 0, /* 90 Reserved */ - 0, /* 91 Reserved */ - 0, /* 92 Reserved */ - 0, /* 93 Reserved */ - 0, /* 94 Reserved */ - 0, /* 95 Reserved */ - 0, /* 96 Reserved */ - 0, /* 97 Reserved */ - 0, /* 98 Reserved */ - 0, /* 99 Reserved */ - 0, /* 100 Reserved */ - 0, /* 101 Reserved */ - 0, /* 102 Reserved */ - 0, /* 103 Reserved */ - 0, /* 104 Reserved */ - 0, /* 105 Reserved */ - 0, /* 106 Reserved */ - 0, /* 107 Reserved */ - 0, /* 108 Reserved */ - 0, /* 109 Reserved */ - 0, /* 110 Reserved */ - 0, /* 111 Reserved */ - 0, /* 112 Reserved */ - 0, /* 113 Reserved */ - 0, /* 114 Reserved */ - 0, /* 115 Reserved */ - 0, /* 116 Reserved */ - 0, /* 117 Reserved */ - 0, /* 118 Reserved */ - 0, /* 119 Reserved */ - 0, /* 120 Reserved */ - 0, /* 121 Reserved */ - 0, /* 122 Reserved */ - 0, /* 123 Reserved */ - 0, /* 124 Reserved */ - 0, /* 125 Reserved */ - 0, /* 126 Reserved */ - 0, /* 127 Reserved */ - 0, /* 128 Reserved */ - 0, /* 129 Reserved */ - 0, /* 130 Reserved */ - 0, /* 131 Reserved */ - 0, /* 132 Reserved */ - 0, /* 133 Reserved */ - 0, /* 134 Reserved */ - 0, /* 135 Reserved */ - 0, /* 136 Reserved */ - 0, /* 137 Reserved */ - 0, /* 138 Reserved */ - 0, /* 139 Reserved */ - 0, /* 140 Reserved */ - 0, /* 141 Reserved */ - 0, /* 142 Reserved */ - 0, /* 143 Reserved */ - 0, /* 144 Reserved */ - 0, /* 145 Reserved */ - 0, /* 146 Reserved */ - 0, /* 147 Reserved */ - 0, /* 148 Reserved */ - 0, /* 149 Reserved */ - 0, /* 150 Reserved */ - 0, /* 151 Reserved */ - 0, /* 152 Reserved */ - 0, /* 153 Reserved */ - 0, /* 154 Reserved */ - 0, /* 155 Reserved */ - 0, /* 156 Reserved */ - 0, /* 157 Reserved */ - 0, /* 158 Reserved */ - 0, /* 159 Reserved */ - 0, /* 160 Reserved */ - 0, /* 161 Reserved */ - 0, /* 162 Reserved */ - 0, /* 163 Reserved */ - 0, /* 164 Reserved */ - 0, /* 165 Reserved */ - 0, /* 166 Reserved */ - 0, /* 167 Reserved */ - 0, /* 168 Reserved */ - 0, /* 169 Reserved */ - 0, /* 170 Reserved */ - 0, /* 171 Reserved */ - 0, /* 172 Reserved */ - 0, /* 173 Reserved */ - 0, /* 174 Reserved */ - 0, /* 175 Reserved */ - 0, /* 176 Reserved */ - 0, /* 177 Reserved */ - 0, /* 178 Reserved */ - 0, /* 179 Reserved */ - 0, /* 180 Reserved */ - 0, /* 181 Reserved */ - 0, /* 182 Reserved */ - 0, /* 183 Reserved */ - 0, /* 184 Reserved */ - 0, /* 185 Reserved */ - 0, /* 186 Reserved */ - 0, /* 187 Reserved */ - 0, /* 188 Reserved */ - 0, /* 189 Reserved */ - 0, /* 190 Reserved */ - 0, /* 191 Reserved */ - 0, /* 192 Reserved */ - 0, /* 193 Reserved */ - 0, /* 194 Reserved */ - 0, /* 195 Reserved */ - 0, /* 196 Reserved */ - 0, /* 197 Reserved */ - 0, /* 198 Reserved */ - 0, /* 199 Reserved */ - 0, /* 200 Reserved */ - 0, /* 201 Reserved */ - 0, /* 202 Reserved */ - 0, /* 203 Reserved */ - 0, /* 204 Reserved */ - 0, /* 205 Reserved */ - 0, /* 206 Reserved */ - 0, /* 207 Reserved */ - 0, /* 208 Reserved */ - 0, /* 209 Reserved */ - 0, /* 210 Reserved */ - 0, /* 211 Reserved */ - 0, /* 212 Reserved */ - 0, /* 213 Reserved */ - 0, /* 214 Reserved */ - 0, /* 215 Reserved */ - 0, /* 216 Reserved */ - 0, /* 217 Reserved */ - 0, /* 218 Reserved */ - 0, /* 219 Reserved */ - 0, /* 220 Reserved */ - 0, /* 221 Reserved */ - 0, /* 222 Reserved */ - 0, /* 223 Reserved */ -#if defined CMSDK_CM4_VHT || defined CMSDK_CM4_FP_VHT - ARM_VSI0_Handler, /* 224 VSI 0 interrupt */ - ARM_VSI1_Handler, /* 225 VSI 1 interrupt */ - ARM_VSI2_Handler, /* 226 VSI 2 interrupt */ - ARM_VSI3_Handler, /* 227 VSI 3 interrupt */ - ARM_VSI4_Handler, /* 228 VSI 4 interrupt */ - ARM_VSI5_Handler, /* 229 VSI 5 interrupt */ - ARM_VSI6_Handler, /* 230 VSI 6 interrupt */ - ARM_VSI7_Handler /* 231 VSI 7 interrupt */ -#else - 0, /* 224 Reserved */ - 0, /* 225 Reserved */ - 0, /* 226 Reserved */ - 0, /* 227 Reserved */ - 0, /* 228 Reserved */ - 0, /* 229 Reserved */ - 0, /* 230 Reserved */ - 0 /* 231 Reserved */ -#endif -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler(void) -{ - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmissing-noreturn" -#endif - -/*---------------------------------------------------------------------------- - Hard Fault Handler - *----------------------------------------------------------------------------*/ -void HardFault_Handler(void) -{ - while(1); -} - -/*---------------------------------------------------------------------------- - Default Handler for Exceptions / Interrupts - *----------------------------------------------------------------------------*/ -void Default_Handler(void) -{ - while(1); -} - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic pop -#endif diff --git a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/system_CMSDK_CM4.c b/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/system_CMSDK_CM4.c deleted file mode 100644 index 27aa0d7..0000000 --- a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/RTE/Device/CMSDK_CM4_FP_VHT/system_CMSDK_CM4.c +++ /dev/null @@ -1,85 +0,0 @@ -/****************************************************************************** - * @file system_CMSDK_CM4.c - * @brief CMSIS System Source File for CMSDK_M4 Device - ******************************************************************************/ -/* Copyright (c) 2011 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM4) || defined (CMSDK_CM4_VHT) - #include "CMSDK_CM4.h" -#elif defined (CMSDK_CM4_FP) || defined (CMSDK_CM4_FP_VHT) - #include "CMSDK_CM4_FP.h" -#else - #error device not specified! -#endif - - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define XTAL (50000000UL) /* Oscillator frequency */ - -#define SYSTEM_CLOCK (XTAL / 2U) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); -#endif - -#if defined (__FPU_USED) && (__FPU_USED == 1U) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - - SystemCoreClock = SYSTEM_CLOCK; -} diff --git a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/Target.clayer.yml deleted file mode 100644 index 8e3ec74..0000000 --- a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/Target.clayer.yml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: Keil::V2M-MPS2_CMx_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: Device:Startup&C Startup - - - component: Keil::Board Support&V2M-MPS2:Common - - component: Keil::CMSIS Driver:USART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/vht_config.txt deleted file mode 100644 index b7f12f3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM4_FP_VHT_GCC/vht_config.txt +++ /dev/null @@ -1,8 +0,0 @@ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -fvp_mps2.UART0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -fvp_mps2.UART0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -fvp_mps2.UART0.unbuffered_output=1 # (bool , init-time) default = '0' : Unbuffered output -fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -#------------------------------------------------------------------------------ diff --git a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/RTE_Device.h deleted file mode 100644 index 5bf4c86..0000000 --- a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/RTE_Device.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2019-2022 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::Drivers:USART -#define RTE_USART0 1 - -// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::Drivers:USART -#define RTE_USART1 1 - -// MPC (Memory Protection Controller) [Driver_ISRAM0_MPC] -// Configuration settings for Driver_ISRAM0_MPC in component ::Drivers:MPC -#define RTE_ISRAM0_MPC 1 - -// MPC (Memory Protection Controller) [Driver_ISRAM1_MPC] -// Configuration settings for Driver_ISRAM1_MPC in component ::Drivers:MPC -#define RTE_ISRAM1_MPC 1 - -// MPC (Memory Protection Controller) [Driver_SRAM_MPC] -// Configuration settings for Driver_SRAM_MPC in component ::Drivers:MPC -#define RTE_SRAM_MPC 1 - -// MPC (Memory Protection Controller) [Driver_QSPI_MPC] -// Configuration settings for Driver_QSPI_MPC in component ::Drivers:MPC -#define RTE_QSPI_MPC 1 - -// PPC (Peripheral Protection Controller) [PPC_SSE300_MAIN0] -// Configuration settings for Driver_PPC_SSE300_MAIN0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_MAIN0 1 - -// PPC (Peripheral Protection Controller) [PPC_SSE300_MAIN_EXP0] -// Configuration settings for Driver_PPC_SSE300_MAIN_EXP0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_MAIN_EXP0 1 - -// PPC (Peripheral Protection Controller) [PPC_SSE300_MAIN_EXP1] -// Configuration settings for Driver_PPC_SSE300_MAIN_EXP1 in component ::Drivers:PPC -#define RTE_PPC_SSE300_MAIN_EXP1 1 - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH0] -// Configuration settings for Driver_PPC_SSE300_PERIPH0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH0 1 - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH1] -// Configuration settings for Driver_PPC_SSE300_PERIPH1 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH1 1 - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH_EXP0] -// Configuration settings for Driver_PPC_SSE300_PERIPH_EXP0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH_EXP0 1 - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH_EXP1] -// Configuration settings for Driver_PPC_SSE300_PERIPH_EXP1 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH_EXP1 1 - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH_EXP2] -// Configuration settings for Driver_PPC_SSE300_PERIPH_EXP2 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH_EXP2 1 - -// Flash device emulated by SRAM [Driver_Flash0] -// Configuration settings for Driver_Flash0 in component ::Drivers:Flash -#define RTE_FLASH0 1 - -// I2C SBCon [Driver_I2C0] -// Configuration settings for Driver_I2C0 in component ::Drivers:I2C -#define RTE_I2C0 1 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h b/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h deleted file mode 100644 index bfc348f..0000000 --- a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2019-2022 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#ifndef __CMSIS_DRIVER_CONFIG_H__ -#define __CMSIS_DRIVER_CONFIG_H__ - -#include "system_SSE300MPS3.h" -#include "device_cfg.h" -#include "device_definition.h" -#include "platform_base_address.h" - -#endif /* __CMSIS_DRIVER_CONFIG_H__ */ diff --git a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/device_cfg.h b/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/device_cfg.h deleted file mode 100644 index 2ff3eaa..0000000 --- a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/device_cfg.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (c) 2020-2022 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#ifndef __DEVICE_CFG_H__ -#define __DEVICE_CFG_H__ - -/** - * \file device_cfg.h - * \brief Configuration file native driver re-targeting - * - * \details This file can be used to add native driver specific macro - * definitions to select which peripherals are available in the build. - * - * This is a default device configuration file with all peripherals enabled. - */ - -/* Secure only peripheral configuration */ - -/* ARM MPS3 IO SCC */ -#define MPS3_IO_S -#define MPS3_IO_DEV MPS3_IO_DEV_S - -/* I2C_SBCon */ -#define I2C0_SBCON_S -#define I2C0_SBCON_DEV I2C0_SBCON_DEV_S - -/* I2S */ -#define MPS3_I2S_S -#define MPS3_I2S_DEV MPS3_I2S_DEV_S - -/* ARM UART Controller PL011 */ -#define UART0_CMSDK_S -#define UART0_CMSDK_DEV UART0_CMSDK_DEV_S -#define UART1_CMSDK_S -#define UART1_CMSDK_DEV UART1_CMSDK_DEV_S - -#define DEFAULT_UART_BAUDRATE 115200U - -/* To be used as CODE and DATA sram */ -#define MPC_ISRAM0_S -#define MPC_ISRAM0_DEV MPC_ISRAM0_DEV_S - -#define MPC_ISRAM1_S -#define MPC_ISRAM1_DEV MPC_ISRAM0_DEV_S - -#define MPC_SRAM_S -#define MPC_SRAM_DEV MPC_SRAM_DEV_S - -#define MPC_QSPI_S -#define MPC_QSPI_DEV MPC_QSPI_DEV_S - -/** System Counter Armv8-M */ -#define SYSCOUNTER_CNTRL_ARMV8_M_S -#define SYSCOUNTER_CNTRL_ARMV8_M_DEV SYSCOUNTER_CNTRL_ARMV8_M_DEV_S - -#define SYSCOUNTER_READ_ARMV8_M_S -#define SYSCOUNTER_READ_ARMV8_M_DEV SYSCOUNTER_READ_ARMV8_M_DEV_S -/** - * Arbitrary scaling values for test purposes - */ -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE0_INT 1u -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE0_FRACT 0u -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE1_INT 1u -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE1_FRACT 0u - -/* System timer */ -#define SYSTIMER0_ARMV8_M_S -#define SYSTIMER0_ARMV8_M_DEV SYSTIMER0_ARMV8_M_DEV_S -#define SYSTIMER1_ARMV8_M_S -#define SYSTIMER1_ARMV8_M_DEV SYSTIMER1_ARMV8_M_DEV_S -#define SYSTIMER2_ARMV8_M_S -#define SYSTIMER2_ARMV8_M_DEV SYSTIMER2_ARMV8_M_DEV_S -#define SYSTIMER3_ARMV8_M_S -#define SYSTIMER3_ARMV8_M_DEV SYSTIMER3_ARMV8_M_DEV_S - -#define SYSTIMER0_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) -#define SYSTIMER1_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) -#define SYSTIMER2_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) -#define SYSTIMER3_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) - -/* CMSDK GPIO driver structures */ -#define GPIO0_CMSDK_S -#define GPIO0_CMSDK_DEV GPIO0_CMSDK_DEV_S -#define GPIO1_CMSDK_S -#define GPIO1_CMSDK_DEV GPIO1_CMSDK_DEV_S -#define GPIO2_CMSDK_S -#define GPIO2_CMSDK_DEV GPIO2_CMSDK_DEV_S -#define GPIO3_CMSDK_S -#define GPIO3_CMSDK_DEV GPIO3_CMSDK_DEV_S - -/* System Watchdogs */ -#define SYSWDOG_ARMV8_M_S -#define SYSWDOG_ARMV8_M_DEV SYSWDOG_ARMV8_M_DEV_S - -/* ARM MPC SIE 300 driver structures */ -#define MPC_VM0_S -#define MPC_VM0_DEV MPC_VM0_DEV_S -#define MPC_VM1_S -#define MPC_VM1_DEV MPC_VM1_DEV_S -#define MPC_SSRAM2_S -#define MPC_SSRAM2_DEV MPC_SSRAM2_DEV_S -#define MPC_SSRAM3_S -#define MPC_SSRAM3_DEV MPC_SSRAM3_DEV_S - -/* ARM PPC driver structures */ -#define PPC_SSE300_MAIN0_S -#define PPC_SSE300_MAIN0_DEV PPC_SSE300_MAIN0_DEV_S -#define PPC_SSE300_MAIN_EXP0_S -#define PPC_SSE300_MAIN_EXP0_DEV PPC_SSE300_MAIN_EXP0_DEV_S -#define PPC_SSE300_MAIN_EXP1_S -#define PPC_SSE300_MAIN_EXP1_DEV PPC_SSE300_MAIN_EXP1_DEV_S -#define PPC_SSE300_MAIN_EXP2_S -#define PPC_SSE300_MAIN_EXP2_DEV PPC_SSE300_MAIN_EXP2_DEV_S -#define PPC_SSE300_MAIN_EXP3_S -#define PPC_SSE300_MAIN_EXP3_DEV PPC_SSE300_MAIN_EXP3_DEV_S -#define PPC_SSE300_PERIPH0_S -#define PPC_SSE300_PERIPH0_DEV PPC_SSE300_PERIPH0_DEV_S -#define PPC_SSE300_PERIPH1_S -#define PPC_SSE300_PERIPH1_DEV PPC_SSE300_PERIPH1_DEV_S -#define PPC_SSE300_PERIPH_EXP0_S -#define PPC_SSE300_PERIPH_EXP0_DEV PPC_SSE300_PERIPH_EXP0_DEV_S -#define PPC_SSE300_PERIPH_EXP1_S -#define PPC_SSE300_PERIPH_EXP1_DEV PPC_SSE300_PERIPH_EXP1_DEV_S -#define PPC_SSE300_PERIPH_EXP2_S -#define PPC_SSE300_PERIPH_EXP2_DEV PPC_SSE300_PERIPH_EXP2_DEV_S -#define PPC_SSE300_PERIPH_EXP3_S -#define PPC_SSE300_PERIPH_EXP3_DEV PPC_SSE300_PERIPH_EXP3_DEV_S - -/* ARM SPI PL022 */ -/* Invalid device stubs are not defined */ -#define DEFAULT_SPI_SPEED_HZ 4000000U /* 4MHz */ -#define SPI1_PL022_S -#define SPI1_PL022_DEV SPI1_PL022_DEV_S - - -#endif /* __DEVICE_CFG_H__ */ diff --git a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct b/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct deleted file mode 100644 index 343c63d..0000000 --- a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct +++ /dev/null @@ -1,78 +0,0 @@ -#! armclang --target=arm-arm-none-eabi -march=armv8.1-m.main -E -xc - -;/* -; * Copyright (c) 2018-2021 Arm Limited. All rights reserved. -; * -; * 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 -; * -; * http://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. -; * -; */ - -#include "region_defs.h" - -LR_CODE S_CODE_START { - ER_CODE S_CODE_START { - *.o (RESET +First) - .ANY (+RO) - } - - /* - * Place the CMSE Veneers (containing the SG instruction) after the code, in - * a separate 32 bytes aligned region so that the SAU can programmed to just - * set this region as Non-Secure Callable. The maximum size of this - * executable region makes it only used the space left over by the ER_CODE - * region so that you can rely on code+veneer size combined will not exceed - * the S_CODE_SIZE value. We also substract from the available space the - * area used to align this section on 32 bytes boundary (for SAU conf). - */ - ER_CODE_CMSE_VENEER +0 ALIGN 32 { - *(Veneer$$CMSE) - } - /* - * This dummy region ensures that the next one will be aligned on a 32 bytes - * boundary, so that the following region will not be mistakenly configured - * as Non-Secure Callable by the SAU. - */ - ER_CODE_CMSE_VENEER_DUMMY +0 ALIGN 32 EMPTY 0 {} - - /* This empty, zero long execution region is here to mark the limit address - * of the last execution region that is allocated in SRAM. - */ - CODE_WATERMARK +0 EMPTY 0x0 { - } - /* Make sure that the sections allocated in the SRAM does not exceed the - * size of the SRAM available. - */ - ScatterAssert(ImageLimit(CODE_WATERMARK) <= S_CODE_START + S_CODE_SIZE) - - ER_DATA S_DATA_START { - .ANY (+ZI +RW) - } - - #if HEAP_SIZE > 0 - ARM_LIB_HEAP +0 ALIGN 8 EMPTY HEAP_SIZE { ; Reserve empty region for heap - } - #endif - - ARM_LIB_STACK +0 ALIGN 32 EMPTY STACK_SIZE { ; Reserve empty region for stack - } - - /* This empty, zero long execution region is here to mark the limit address - * of the last execution region that is allocated in SRAM. - */ - SRAM_WATERMARK +0 EMPTY 0x0 { - } - /* Make sure that the sections allocated in the SRAM does not exceed the - * size of the SRAM available. - */ - ScatterAssert(ImageLimit(SRAM_WATERMARK) <= S_DATA_START + S_DATA_SIZE) -} diff --git a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/platform_base_address.h b/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/platform_base_address.h deleted file mode 100644 index b813097..0000000 --- a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/platform_base_address.h +++ /dev/null @@ -1,271 +0,0 @@ -/* - * Copyright (c) 2019-2021 Arm Limited - * - * 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 - * - * http://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. - */ - -/** - * \file platform_base_address.h - * \brief This file defines all the peripheral base addresses for AN552 MPS3 SSE-300 + - * Ethos-U55 platform. - */ - -#ifndef __PLATFORM_BASE_ADDRESS_H__ -#define __PLATFORM_BASE_ADDRESS_H__ - -/* ======= Defines peripherals memory map addresses ======= */ -/* Non-secure memory map addresses */ -#define ITCM_BASE_NS 0x00000000 /* Instruction TCM Non-Secure base address */ -#define SRAM_BASE_NS 0x01000000 /* CODE SRAM Non-Secure base address */ -#define DTCM0_BASE_NS 0x20000000 /* Data TCM block 0 Non-Secure base address */ -#define DTCM1_BASE_NS 0x20020000 /* Data TCM block 1 Non-Secure base address */ -#define DTCM2_BASE_NS 0x20040000 /* Data TCM block 2 Non-Secure base address */ -#define DTCM3_BASE_NS 0x20060000 /* Data TCM block 3 Non-Secure base address */ -#define ISRAM0_BASE_NS 0x21000000 /* Internal SRAM Area Non-Secure base address */ -#define ISRAM1_BASE_NS 0x21100000 /* Internal SRAM Area Non-Secure base address */ -#define QSPI_SRAM_BASE_NS 0x28000000 /* QSPI SRAM Non-Secure base address */ -/* Non-Secure Subsystem peripheral region */ -#define CPU0_PWRCTRL_BASE_NS 0x40012000 /* CPU 0 Power Control Block Non-Secure base address */ -#define CPU0_IDENTITY_BASE_NS 0x4001F000 /* CPU 0 Identity Block Non-Secure base address */ -#define SSE300_NSACFG_BASE_NS 0x40080000 /* SSE-300 Non-Secure Access Configuration Register Block Non-Secure base address */ -/* Non-Secure MSTEXPPILL Peripheral region */ -#define GPIO0_CMSDK_BASE_NS 0x41100000 /* GPIO 0 Non-Secure base address */ -#define GPIO1_CMSDK_BASE_NS 0x41101000 /* GPIO 1 Non-Secure base address */ -#define GPIO2_CMSDK_BASE_NS 0x41102000 /* GPIO 2 Non-Secure base address */ -#define GPIO3_CMSDK_BASE_NS 0x41103000 /* GPIO 3 Non-Secure base address */ -#define FMC_CMSDK_GPIO_0_BASE_NS 0x41104000 /* FMC CMSDK GPIO 0 Non-Secure base address */ -#define FMC_CMSDK_GPIO_1_BASE_NS 0x41105000 /* FMC CMSDK GPIO 1 Non-Secure base address */ -#define FMC_CMSDK_GPIO_2_BASE_NS 0x41106000 /* FMC CMSDK GPIO 2 Non-Secure base address */ -#define FMC_CMSDK_GPIO_3_BASE_NS 0x41107000 /* FMC CMSDK GPIO 3 Non-Secure base address */ -#define EXTERNAL_MANAGER_0_BASE_NS 0x41200000 /* External manager 0 (Unused) Non-Secure base address */ -#define EXTERNAL_MANAGER_1_BASE_NS 0x41201000 /* External manager 1 (Unused) Non-Secure base address */ -#define EXTERNAL_MANAGER_2_BASE_NS 0x41202000 /* External manager 2 (Unused) Non-Secure base address */ -#define EXTERNAL_MANAGER_3_BASE_NS 0x41203000 /* External manager 3 (Unused) Non-Secure base address */ -#define ETHERNET_BASE_NS 0x41400000 /* Ethernet Non-Secure base address */ -#define USB_BASE_NS 0x41500000 /* USB Non-Secure base address */ -#define USER_APB0_BASE_NS 0x41700000 /* User APB 0 Non-Secure base address */ -#define USER_APB1_BASE_NS 0x41701000 /* User APB 1 Non-Secure base address */ -#define USER_APB2_BASE_NS 0x41702000 /* User APB 2 Non-Secure base address */ -#define USER_APB3_BASE_NS 0x41703000 /* User APB 3 Non-Secure base address */ -#define QSPI_CONFIG_BASE_NS 0x41800000 /* QSPI Config Non-Secure base address */ -#define QSPI_WRITE_BASE_NS 0x41801000 /* QSPI Write Non-Secure base address */ -/* Non-Secure Subsystem peripheral region */ -#define SYSTIMER0_ARMV8_M_BASE_NS 0x48000000 /* System Timer 0 Non-Secure base address */ -#define SYSTIMER1_ARMV8_M_BASE_NS 0x48001000 /* System Timer 1 Non-Secure base address */ -#define SYSTIMER2_ARMV8_M_BASE_NS 0x48002000 /* System Timer 2 Non-Secure base address */ -#define SYSTIMER3_ARMV8_M_BASE_NS 0x48003000 /* System Timer 3 Non-Secure base address */ -#define SSE300_SYSINFO_BASE_NS 0x48020000 /* SSE-300 System info Block Non-Secure base address */ -#define SLOWCLK_TIMER_CMSDK_BASE_NS 0x4802F000 /* CMSDK based SLOWCLK Timer Non-Secure base address */ -#define SYSWDOG_ARMV8_M_CNTRL_BASE_NS 0x48040000 /* Non-Secure Watchdog Timer control frame Non-Secure base address */ -#define SYSWDOG_ARMV8_M_REFRESH_BASE_NS 0x48041000 /* Non-Secure Watchdog Timer refresh frame Non-Secure base address */ -#define SYSCNTR_READ_BASE_NS 0x48101000 /* System Counter Read Secure base address */ -/* Non-Secure MSTEXPPIHL Peripheral region */ -#define ETHOS_U55_APB_BASE_NS 0x48102000 /* Ethos-U55 APB Non-Secure base address */ -#define U55_TIMING_ADAPTER_0_BASE_NS 0x48103000 /* Ethos-U55 Timing Adapter 0 APB registers Non-Secure base address */ -#define U55_TIMING_ADAPTER_1_BASE_NS 0x48103200 /* Ethos-U55 Timing Adapter 1 APB registers Non-Secure base address */ -#define FPGA_SBCon_I2C_TOUCH_BASE_NS 0x49200000 /* FPGA - SBCon I2C (Touch) Non-Secure base address */ -#define FPGA_SBCon_I2C_AUDIO_BASE_NS 0x49201000 /* FPGA - SBCon I2C (Audio Conf) Non-Secure base address */ -#define FPGA_SPI_ADC_BASE_NS 0x49202000 /* FPGA - PL022 (SPI ADC) Non-Secure base address */ -#define FPGA_SPI_SHIELD0_BASE_NS 0x49203000 /* FPGA - PL022 (SPI Shield0) Non-Secure base address */ -#define FPGA_SPI_SHIELD1_BASE_NS 0x49204000 /* FPGA - PL022 (SPI Shield1) Non-Secure base address */ -#define SBCon_I2C_SHIELD0_BASE_NS 0x49205000 /* SBCon (I2C - Shield0) Non-Secure base address */ -#define SBCon_I2C_SHIELD1_BASE_NS 0x49206000 /* SBCon (I2C – Shield1) Non-Secure base address */ -#define USER_APB_BASE_NS 0x49207000 /* USER APB Non-Secure base address */ -#define FPGA_DDR4_EEPROM_BASE_NS 0x49208000 /* FPGA - SBCon I2C (DDR4 EEPROM) Non-Secure base address */ -#define FMC_USER_APB0 0x4920C000 /* FMC User APB0 */ -#define FMC_USER_APB1 0x4920D000 /* FMC User APB1 */ -#define FMC_USER_APB2 0x4920E000 /* FMC User APB2 */ -#define FMC_USER_APB3 0x4920F000 /* FMC User APB3 */ -#define FPGA_SCC_BASE_NS 0x49300000 /* FPGA - SCC registers Non-Secure base address */ -#define FPGA_I2S_BASE_NS 0x49301000 /* FPGA - I2S (Audio) Non-Secure base address */ -#define FPGA_IO_BASE_NS 0x49302000 /* FPGA - IO (System Ctrl + I/O) Non-Secure base address */ -#define UART0_BASE_NS 0x49303000 /* UART 0 Non-Secure base address */ -#define UART1_BASE_NS 0x49304000 /* UART 1 Non-Secure base address */ -#define UART2_BASE_NS 0x49305000 /* UART 2 Non-Secure base address */ -#define UART3_BASE_NS 0x49306000 /* UART 3 Non-Secure base address */ -#define UART4_BASE_NS 0x49307000 /* UART 4 Non-Secure base address */ -#define UART5_BASE_NS 0x49308000 /* UART 5 Non-Secure base address */ -#define CLCD_Config_Reg_BASE_NS 0x4930A000 /* CLCD Config Reg Non-Secure base address */ -#define RTC_BASE_NS 0x4930B000 /* RTC Non-Secure base address */ -#define DDR4_BLK0_BASE_NS 0x60000000 /* DDR4 block 0 Non-Secure base address */ -#define DDR4_BLK2_BASE_NS 0x80000000 /* DDR4 block 2 Non-Secure base address */ -#define DDR4_BLK4_BASE_NS 0xA0000000 /* DDR4 block 4 Non-Secure base address */ -#define DDR4_BLK6_BASE_NS 0xC0000000 /* DDR4 block 6 Non-Secure base address */ - -/* Secure memory map addresses */ -#define ITCM_BASE_S 0x10000000 /* Instruction TCM Secure base address */ -#define SRAM_BASE_S 0x11000000 /* CODE SRAM Secure base address */ -#define DTCM0_BASE_S 0x30000000 /* Data TCM block 0 Secure base address */ -#define DTCM1_BASE_S 0x30020000 /* Data TCM block 1 Secure base address */ -#define DTCM2_BASE_S 0x30040000 /* Data TCM block 2 Secure base address */ -#define DTCM3_BASE_S 0x30060000 /* Data TCM block 3 Secure base address */ -#define ISRAM0_BASE_S 0x31000000 /* Internal SRAM Area Secure base address */ -#define ISRAM1_BASE_S 0x31100000 /* Internal SRAM Area Secure base address */ -#define QSPI_SRAM_BASE_S 0x38000000 /* QSPI SRAM Secure base address */ -/* Secure Subsystem peripheral region */ -#define CPU0_SECCTRL_BASE_S 0x50011000 /* CPU 0 Local Security Control Block Secure base address */ -#define CPU0_PWRCTRL_BASE_S 0x50012000 /* CPU 0 Power Control Block Secure base address */ -#define CPU0_IDENTITY_BASE_S 0x5001F000 /* CPU 0 Identity Block Secure base address */ -#define SSE300_SACFG_BASE_S 0x50080000 /* SSE-300 Secure Access Configuration Register Secure base address */ -#define MPC_ISRAM0_BASE_S 0x50083000 /* Internal SRAM0 Memory Protection Controller Secure base address */ -#define MPC_ISRAM1_BASE_S 0x50084000 /* Internal SRAM1 Memory Protection Controller Secure base address */ -/* Secure MSTEXPPILL Peripheral region */ -#define GPIO0_CMSDK_BASE_S 0x51100000 /* GPIO 0 Secure base address */ -#define GPIO1_CMSDK_BASE_S 0x51101000 /* GPIO 1 Secure base address */ -#define GPIO2_CMSDK_BASE_S 0x51102000 /* GPIO 2 Secure base address */ -#define GPIO3_CMSDK_BASE_S 0x51103000 /* GPIO 3 Secure base address */ -#define FMC_CMSDK_GPIO_0_BASE_S 0x51104000 /* FMC CMSDK GPIO 0 Secure base address */ -#define FMC_CMSDK_GPIO_1_BASE_S 0x51105000 /* FMC CMSDK GPIO 1 Secure base address */ -#define FMC_CMSDK_GPIO_2_BASE_S 0x51106000 /* FMC CMSDK GPIO 2 Secure base address */ -#define FMC_CMSDK_GPIO_3_BASE_S 0x51107000 /* FMC CMSDK GPIO 3 Secure base address */ -#define EXTERNAL_MANAGER0_BASE_S 0x51200000 /* External Manager 0 (Unused) Secure base address */ -#define EXTERNAL_MANAGER1_BASE_S 0x51201000 /* External Manager 1 (Unused) Secure base address */ -#define EXTERNAL_MANAGER2_BASE_S 0x51202000 /* External Manager 2 (Unused) Secure base address */ -#define EXTERNAL_MANAGER3_BASE_S 0x51203000 /* External Manager 3 (Unused) Secure base address */ -#define ETHERNET_BASE_S 0x51400000 /* Ethernet Secure base address */ -#define USB_BASE_S 0x51500000 /* USB Secure base address */ -#define USER_APB0_BASE_S 0x51700000 /* User APB 0 Secure base address */ -#define USER_APB1_BASE_S 0x51701000 /* User APB 1 Secure base address */ -#define USER_APB2_BASE_S 0x51702000 /* User APB 2 Secure base address */ -#define USER_APB3_BASE_S 0x51703000 /* User APB 3 Secure base address */ -#define QSPI_CONFIG_BASE_S 0x51800000 /* QSPI Config Secure base address */ -#define QSPI_WRITE_BASE_S 0x51801000 /* QSPI Write Secure base address */ -#define MPC_SRAM_BASE_S 0x57000000 /* SRAM Memory Protection Controller Secure base address */ -#define MPC_QSPI_BASE_S 0x57001000 /* QSPI Memory Protection Controller Secure base address */ -#define MPC_DDR4_BASE_S 0x57002000 /* DDR4 Memory Protection Controller Secure base address */ -/* Secure Subsystem peripheral region */ -#define SYSTIMER0_ARMV8_M_BASE_S 0x58000000 /* System Timer 0 Secure base address */ -#define SYSTIMER1_ARMV8_M_BASE_S 0x58001000 /* System Timer 1 Secure base address */ -#define SYSTIMER2_ARMV8_M_BASE_S 0x58002000 /* System Timer 0 Secure base address */ -#define SYSTIMER3_ARMV8_M_BASE_S 0x58003000 /* System Timer 1 Secure base address */ -#define SSE300_SYSINFO_BASE_S 0x58020000 /* SSE-300 System info Block Secure base address */ -#define SSE300_SYSCTRL_BASE_S 0x58021000 /* SSE-300 System control Block Secure base address */ -#define SSE300_SYSPPU_BASE_S 0x58022000 /* SSE-300 System Power Policy Unit Secure base address */ -#define SSE300_CPU0PPU_BASE_S 0x58023000 /* SSE-300 CPU 0 Power Policy Unit Secure base address */ -#define SSE300_MGMTPPU_BASE_S 0x58028000 /* SSE-300 Management Power Policy Unit Secure base address */ -#define SSE300_DBGPPU_BASE_S 0x58029000 /* SSE-300 Debug Power Policy Unit Secure base address */ -#define SLOWCLK_WDOG_CMSDK_BASE_S 0x5802E000 /* CMSDK based SLOWCLK Watchdog Secure base address */ -#define SLOWCLK_TIMER_CMSDK_BASE_S 0x5802F000 /* CMSDK based SLOWCLK Timer Secure base address */ -#define SYSWDOG_ARMV8_M_CNTRL_BASE_S 0x58040000 /* Secure Watchdog Timer control frame Secure base address */ -#define SYSWDOG_ARMV8_M_REFRESH_BASE_S 0x58041000 /* Secure Watchdog Timer refresh frame Secure base address */ -#define SYSCNTR_CNTRL_BASE_S 0x58100000 /* System Counter Control Secure base address */ -#define SYSCNTR_READ_BASE_S 0x58101000 /* System Counter Read Secure base address */ -/* Secure MSTEXPPIHL Peripheral region */ -#define ETHOS_U55_APB_BASE_S 0x58102000 /* Ethos-U55 APB Secure base address */ -#define U55_TIMING_ADAPTER_0_BASE_S 0x58103000 /* Ethos-U55 Timing Adapter 0 APB registers Secure base address */ -#define U55_TIMING_ADAPTER_1_BASE_S 0x58103200 /* Ethos-U55 Timing Adapter 1 APB registers Secure base address */ -#define FPGA_SBCon_I2C_TOUCH_BASE_S 0x59200000 /* FPGA - SBCon I2C (Touch) Secure base address */ -#define FPGA_SBCon_I2C_AUDIO_BASE_S 0x59201000 /* FPGA - SBCon I2C (Audio Conf) Secure base address */ -#define FPGA_SPI_ADC_BASE_S 0x59202000 /* FPGA - PL022 (SPI ADC) Secure base address */ -#define FPGA_SPI_SHIELD0_BASE_S 0x59203000 /* FPGA - PL022 (SPI Shield0) Secure base address */ -#define FPGA_SPI_SHIELD1_BASE_S 0x59204000 /* FPGA - PL022 (SPI Shield1) Secure base address */ -#define SBCon_I2C_SHIELD0_BASE_S 0x59205000 /* SBCon (I2C - Shield0) Secure base address */ -#define SBCon_I2C_SHIELD1_BASE_S 0x59206000 /* SBCon (I2C – Shield1) Secure base address */ -#define USER_APB_BASE_S 0x59207000 /* USER APB Secure base address */ -#define FPGA_DDR4_EEPROM_BASE_S 0x59208000 /* FPGA - SBCon I2C (DDR4 EEPROM) Secure base address */ -#define FMC_USER_APB_0_BASE_S 0x5920C000 /* FMC User APB0 registers Secure base address */ -#define FMC_USER_APB_1_BASE_S 0x5920D000 /* FMC User APB1 registers Secure base address */ -#define FMC_USER_APB_2_BASE_S 0x5920E000 /* FMC User APB2 registers Secure base address */ -#define FMC_USER_APB_3_BASE_S 0x5920F000 /* FMC User APB3 registers Secure base address */ -#define FPGA_SCC_BASE_S 0x59300000 /* FPGA - SCC registers Secure base address */ -#define FPGA_I2S_BASE_S 0x59301000 /* FPGA - I2S (Audio) Secure base address */ -#define FPGA_IO_BASE_S 0x59302000 /* FPGA - IO (System Ctrl + I/O) Secure base address */ -#define UART0_BASE_S 0x59303000 /* UART 0 Secure base address */ -#define UART1_BASE_S 0x59304000 /* UART 1 Secure base address */ -#define UART2_BASE_S 0x59305000 /* UART 2 Secure base address */ -#define UART3_BASE_S 0x59306000 /* UART 3 Secure base address */ -#define UART4_BASE_S 0x59307000 /* UART 4 Secure base address */ -#define UART5_BASE_S 0x59308000 /* UART 5 Secure base address */ -#define CLCD_Config_Reg_BASE_S 0x5930A000 /* CLCD Config Reg Secure base address */ -#define RTC_BASE_S 0x5930B000 /* RTC Secure base address */ -#define DDR4_BLK1_BASE_S 0x70000000 /* DDR4 block 1 Secure base address */ -#define DDR4_BLK3_BASE_S 0x90000000 /* DDR4 block 3 Secure base address */ -#define DDR4_BLK5_BASE_S 0xB0000000 /* DDR4 block 5 Secure base address */ -#define DDR4_BLK7_BASE_S 0xD0000000 /* DDR4 block 7 Secure base address */ - -/* Memory map addresses exempt from memory attribution by both the SAU and IDAU */ -#define SSE300_EWIC_BASE 0xE0047000 /* External Wakeup Interrupt Controller - * Access from Non-secure software is only allowed - * if AIRCR.BFHFNMINS is set to 1 */ - -/* Memory size definitions */ -#define ITCM_SIZE (0x00080000) /* 512 kB */ -#define DTCM_BLK_SIZE (0x00020000) /* 128 kB */ -#define DTCM_BLK_NUM (0x4) /* Number of DTCM blocks */ -#define SRAM_SIZE (0x00100000) /* 1 MB */ -#define ISRAM0_SIZE (0x00100000) /* 1 MB */ -#define ISRAM1_SIZE (0x00100000) /* 1 MB */ -#define QSPI_SRAM_SIZE (0x00800000) /* 8 MB */ -#define DDR4_BLK_SIZE (0x10000000) /* 256 MB */ -#define DDR4_BLK_NUM (0x8) /* Number of DDR4 blocks */ - -/* Defines for Driver MPC's */ -/* SRAM -- 2 MB */ -#define MPC_SRAM_RANGE_BASE_NS (SRAM_BASE_NS) -#define MPC_SRAM_RANGE_LIMIT_NS (SRAM_BASE_NS + SRAM_SIZE-1) -#define MPC_SRAM_RANGE_OFFSET_NS (0x0) -#define MPC_SRAM_RANGE_BASE_S (SRAM_BASE_S) -#define MPC_SRAM_RANGE_LIMIT_S (SRAM_BASE_S + SRAM_SIZE-1) -#define MPC_SRAM_RANGE_OFFSET_S (0x0) - -/* QSPI -- 8 MB*/ -#define MPC_QSPI_RANGE_BASE_NS (QSPI_SRAM_BASE_NS) -#define MPC_QSPI_RANGE_LIMIT_NS (QSPI_SRAM_BASE_NS + QSPI_SRAM_SIZE-1) -#define MPC_QSPI_RANGE_OFFSET_NS (0x0) -#define MPC_QSPI_RANGE_BASE_S (QSPI_SRAM_BASE_S) -#define MPC_QSPI_RANGE_LIMIT_S (QSPI_SRAM_BASE_S + QSPI_SRAM_SIZE-1) -#define MPC_QSPI_RANGE_OFFSET_S (0x0) - -/* ISRAM0 -- 2 MB*/ -#define MPC_ISRAM0_RANGE_BASE_NS (ISRAM0_BASE_NS) -#define MPC_ISRAM0_RANGE_LIMIT_NS (ISRAM0_BASE_NS + ISRAM0_SIZE-1) -#define MPC_ISRAM0_RANGE_OFFSET_NS (0x0) -#define MPC_ISRAM0_RANGE_BASE_S (ISRAM0_BASE_S) -#define MPC_ISRAM0_RANGE_LIMIT_S (ISRAM0_BASE_S + ISRAM0_SIZE-1) -#define MPC_ISRAM0_RANGE_OFFSET_S (0x0) - -/* ISRAM1 -- 2 MB*/ -#define MPC_ISRAM1_RANGE_BASE_NS (ISRAM1_BASE_NS) -#define MPC_ISRAM1_RANGE_LIMIT_NS (ISRAM1_BASE_NS + ISRAM1_SIZE-1) -#define MPC_ISRAM1_RANGE_OFFSET_NS (0x0) -#define MPC_ISRAM1_RANGE_BASE_S (ISRAM1_BASE_S) -#define MPC_ISRAM1_RANGE_LIMIT_S (ISRAM1_BASE_S + ISRAM1_SIZE-1) -#define MPC_ISRAM1_RANGE_OFFSET_S (0x0) - -/* DDR4 -- 2GB (8 * 256 MB) */ -#define MPC_DDR4_BLK0_RANGE_BASE_NS (DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK0_RANGE_LIMIT_NS (DDR4_BLK0_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK0_RANGE_OFFSET_NS (0x0) -#define MPC_DDR4_BLK1_RANGE_BASE_S (DDR4_BLK1_BASE_S) -#define MPC_DDR4_BLK1_RANGE_LIMIT_S (DDR4_BLK1_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK1_RANGE_OFFSET_S (DDR4_BLK1_BASE_S - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK2_RANGE_BASE_NS (DDR4_BLK2_BASE_NS) -#define MPC_DDR4_BLK2_RANGE_LIMIT_NS (DDR4_BLK2_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK2_RANGE_OFFSET_NS (DDR4_BLK2_BASE_NS - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK3_RANGE_BASE_S (DDR4_BLK3_BASE_S) -#define MPC_DDR4_BLK3_RANGE_LIMIT_S (DDR4_BLK3_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK3_RANGE_OFFSET_S (DDR4_BLK3_BASE_S - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK4_RANGE_BASE_NS (DDR4_BLK4_BASE_NS) -#define MPC_DDR4_BLK4_RANGE_LIMIT_NS (DDR4_BLK4_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK4_RANGE_OFFSET_NS (DDR4_BLK4_BASE_NS - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK5_RANGE_BASE_S (DDR4_BLK5_BASE_S) -#define MPC_DDR4_BLK5_RANGE_LIMIT_S (DDR4_BLK5_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK5_RANGE_OFFSET_S (DDR4_BLK5_BASE_S - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK6_RANGE_BASE_NS (DDR4_BLK6_BASE_NS) -#define MPC_DDR4_BLK6_RANGE_LIMIT_NS (DDR4_BLK6_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK6_RANGE_OFFSET_NS (DDR4_BLK6_BASE_NS - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK7_RANGE_BASE_S (DDR4_BLK7_BASE_S) -#define MPC_DDR4_BLK7_RANGE_LIMIT_S (DDR4_BLK7_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK7_RANGE_OFFSET_S (DDR4_BLK7_BASE_S - DDR4_BLK0_BASE_NS) - -#endif /* __PLATFORM_BASE_ADDRESS_H__ */ diff --git a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/region_defs.h b/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/region_defs.h deleted file mode 100644 index 32ac16b..0000000 --- a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/region_defs.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2016-2022 Arm Limited - * - * 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 - * - * http://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. - */ - -#ifndef __REGION_DEFS_H__ -#define __REGION_DEFS_H__ - -#include "region_limits.h" - -/* ************************************************************** - * WARNING: this file is parsed both by the C/C++ compiler - * and the linker. As a result the syntax must be valid not only - * for C/C++ but for the linker scripts too. - * Beware of the following limitations: - * - LD (GCC linker) requires white space around operators. - * - UL postfix for macros is not suported by the linker script - ****************************************************************/ - -/* Secure regions */ -#define S_CODE_START ( S_ROM_ALIAS ) -#define S_CODE_SIZE ( TOTAL_S_ROM_SIZE ) -#define S_CODE_LIMIT ( S_CODE_START + S_CODE_SIZE ) - -#define S_DATA_START ( S_RAM_ALIAS ) -#define S_DATA_SIZE ( TOTAL_S_RAM_SIZE ) -#define S_DATA_LIMIT ( S_DATA_START + S_DATA_SIZE ) - -#define S_DDR4_START ( S_DDR4_ALIAS ) -#define S_DDR4_SIZE ( TOTAL_S_DDR4_SIZE ) -#define S_DDR4_LIMIT ( S_DDR4_START + S_DDR4_SIZE ) - -#endif /* __REGION_DEFS_H__ */ diff --git a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/region_limits.h b/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/region_limits.h deleted file mode 100644 index e789786..0000000 --- a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/region_limits.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2018-2022 Arm Limited - * - * 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 - * - * http://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. - */ - -#ifndef __REGION_LIMITS_H__ -#define __REGION_LIMITS_H__ - -/* ************************************************************** - * WARNING: this file is parsed both by the C/C++ compiler - * and the linker. As a result the syntax must be valid not only - * for C/C++ but for the linker scripts too. - * Beware of the following limitations: - * - LD (GCC linker) requires white space around operators. - * - UL postfix for macros is not suported by the linker script - ****************************************************************/ - -/* Secure Code */ -#define S_ROM_ALIAS (0x10000000) /* ITCM_BASE_S */ -#define TOTAL_S_ROM_SIZE (0x00080000) /* 512 kB */ - -/* Secure Data */ -#define S_RAM_ALIAS (0x30000000) /* DTCM_BASE_S */ -#define TOTAL_S_RAM_SIZE (0x00080000) /* 512 kB */ - -/* Secure DDR4 */ -#define S_DDR4_ALIAS (0x70000000) /* DDR4_BLK1_BASE_S */ -#define TOTAL_S_DDR4_SIZE (0x10000000) /* 256 MB */ - -/* Heap and Stack sizes for secure and nonsecure applications */ -#define HEAP_SIZE (0x00000400) /* 1 KiB */ -#define STACK_SIZE (0x00000400) /* 1 KiB */ - -#endif /* __REGION_LIMITS_H__ */ diff --git a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c b/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c deleted file mode 100644 index d1e59d7..0000000 --- a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Copyright (c) 2009-2020 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. - */ - -/* - * This file is derivative of CMSIS V5.6.0 startup_ARMv81MML.c - * Git SHA: b5f0603d6a584d1724d952fd8b0737458b90d62b - */ - -#include "SSE300MPS3.h" - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler Function Prototype - *----------------------------------------------------------------------------*/ -typedef void( *pFunc )( void ); - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; -extern uint32_t __STACK_LIMIT; - -extern void __PROGRAM_START(void) __NO_RETURN; - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -void Reset_Handler (void) __NO_RETURN; - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -#define DEFAULT_IRQ_HANDLER(handler_name) \ -void __WEAK __NO_RETURN handler_name(void); \ -void handler_name(void) { \ - while(1); \ -} - -/* Exceptions */ -DEFAULT_IRQ_HANDLER(NMI_Handler) -DEFAULT_IRQ_HANDLER(HardFault_Handler) -DEFAULT_IRQ_HANDLER(MemManage_Handler) -DEFAULT_IRQ_HANDLER(BusFault_Handler) -DEFAULT_IRQ_HANDLER(UsageFault_Handler) -DEFAULT_IRQ_HANDLER(SecureFault_Handler) -DEFAULT_IRQ_HANDLER(SVC_Handler) -DEFAULT_IRQ_HANDLER(DebugMon_Handler) -DEFAULT_IRQ_HANDLER(PendSV_Handler) -DEFAULT_IRQ_HANDLER(SysTick_Handler) - -DEFAULT_IRQ_HANDLER(NONSEC_WATCHDOG_RESET_Handler) -DEFAULT_IRQ_HANDLER(NONSEC_WATCHDOG_Handler) -DEFAULT_IRQ_HANDLER(SLOWCLK_Timer_Handler) -DEFAULT_IRQ_HANDLER(TIMER0_Handler) -DEFAULT_IRQ_HANDLER(TIMER1_Handler) -DEFAULT_IRQ_HANDLER(TIMER2_Handler) -DEFAULT_IRQ_HANDLER(MPC_Handler) -DEFAULT_IRQ_HANDLER(PPC_Handler) -DEFAULT_IRQ_HANDLER(MSC_Handler) -DEFAULT_IRQ_HANDLER(BRIDGE_ERROR_Handler) -DEFAULT_IRQ_HANDLER(MGMT_PPU_Handler) -DEFAULT_IRQ_HANDLER(SYS_PPU_Handler) -DEFAULT_IRQ_HANDLER(CPU0_PPU_Handler) -DEFAULT_IRQ_HANDLER(DEBUG_PPU_Handler) -DEFAULT_IRQ_HANDLER(TIMER3_Handler) -DEFAULT_IRQ_HANDLER(CTI_REQ0_IRQHandler) -DEFAULT_IRQ_HANDLER(CTI_REQ1_IRQHandler) - -DEFAULT_IRQ_HANDLER(System_Timestamp_Counter_Handler) -DEFAULT_IRQ_HANDLER(UARTRX0_Handler) -DEFAULT_IRQ_HANDLER(UARTTX0_Handler) -DEFAULT_IRQ_HANDLER(UARTRX1_Handler) -DEFAULT_IRQ_HANDLER(UARTTX1_Handler) -DEFAULT_IRQ_HANDLER(UARTRX2_Handler) -DEFAULT_IRQ_HANDLER(UARTTX2_Handler) -DEFAULT_IRQ_HANDLER(UARTRX3_Handler) -DEFAULT_IRQ_HANDLER(UARTTX3_Handler) -DEFAULT_IRQ_HANDLER(UARTRX4_Handler) -DEFAULT_IRQ_HANDLER(UARTTX4_Handler) -DEFAULT_IRQ_HANDLER(UART0_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART1_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART2_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART3_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART4_Combined_Handler) -DEFAULT_IRQ_HANDLER(UARTOVF_Handler) -DEFAULT_IRQ_HANDLER(ETHERNET_Handler) -DEFAULT_IRQ_HANDLER(I2S_Handler) -DEFAULT_IRQ_HANDLER(TOUCH_SCREEN_Handler) -DEFAULT_IRQ_HANDLER(USB_Handler) -DEFAULT_IRQ_HANDLER(SPI_ADC_Handler) -DEFAULT_IRQ_HANDLER(SPI_SHIELD0_Handler) -DEFAULT_IRQ_HANDLER(SPI_SHIELD1_Handler) -DEFAULT_IRQ_HANDLER(ETHOS_U55_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_3_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_4_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_5_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_6_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_7_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_8_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_9_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_10_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_11_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_12_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_13_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_14_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_15_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_3_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_4_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_5_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_6_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_7_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_8_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_9_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_10_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_11_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_12_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_13_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_14_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_15_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_3_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_4_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_5_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_6_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_7_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_8_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_9_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_10_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_11_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_12_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_13_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_14_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_15_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_3_Handler) -DEFAULT_IRQ_HANDLER(UARTRX5_Handler) -DEFAULT_IRQ_HANDLER(UARTTX5_Handler) -DEFAULT_IRQ_HANDLER(UART5_Handler) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const pFunc __VECTOR_TABLE[496]; - const pFunc __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = { - (pFunc)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14: NMI Handler */ - HardFault_Handler, /* -13: Hard Fault Handler */ - MemManage_Handler, /* -12: MPU Fault Handler */ - BusFault_Handler, /* -11: Bus Fault Handler */ - UsageFault_Handler, /* -10: Usage Fault Handler */ - SecureFault_Handler, /* -9: Secure Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5: SVCall Handler */ - DebugMon_Handler, /* -4: Debug Monitor Handler */ - 0, /* Reserved */ - PendSV_Handler, /* -2: PendSV Handler */ - SysTick_Handler, /* -1: SysTick Handler */ - - NONSEC_WATCHDOG_RESET_Handler, /* 0: Non-Secure Watchdog Reset Handler */ - NONSEC_WATCHDOG_Handler, /* 1: Non-Secure Watchdog Handler */ - SLOWCLK_Timer_Handler, /* 2: SLOWCLK Timer Handler */ - TIMER0_Handler, /* 3: TIMER 0 Handler */ - TIMER1_Handler, /* 4: TIMER 1 Handler */ - TIMER2_Handler, /* 5: TIMER 2 Handler */ - 0, /* 6: Reserved */ - 0, /* 7: Reserved */ - 0, /* 8: Reserved */ - MPC_Handler, /* 9: MPC Combined (Secure) Handler */ - PPC_Handler, /* 10: PPC Combined (Secure) Handler */ - MSC_Handler, /* 11: MSC Combined (Secure) Handler */ - BRIDGE_ERROR_Handler, /* 12: Bridge Error (Secure) Handler */ - 0, /* 13: Reserved */ - MGMT_PPU_Handler, /* 14: MGMT PPU Handler */ - SYS_PPU_Handler, /* 15: SYS PPU Handler */ - CPU0_PPU_Handler, /* 16: CPU0 PPU Handler */ - 0, /* 17: Reserved */ - 0, /* 18: Reserved */ - 0, /* 19: Reserved */ - 0, /* 20: Reserved */ - 0, /* 21: Reserved */ - 0, /* 22: Reserved */ - 0, /* 23: Reserved */ - 0, /* 24: Reserved */ - 0, /* 25: Reserved */ - DEBUG_PPU_Handler, /* 26: DEBUG PPU Handler */ - TIMER3_Handler, /* 27: TIMER 3 Handler */ - CTI_REQ0_IRQHandler, /* 28: CTI request 0 IRQ Handler */ - CTI_REQ1_IRQHandler, /* 29: CTI request 1 IRQ Handler */ - 0, /* 30: Reserved */ - 0, /* 31: Reserved */ - - /* External interrupts */ - System_Timestamp_Counter_Handler, /* 32: System timestamp counter Handler */ - UARTRX0_Handler, /* 33: UART 0 RX Handler */ - UARTTX0_Handler, /* 34: UART 0 TX Handler */ - UARTRX1_Handler, /* 35: UART 1 RX Handler */ - UARTTX1_Handler, /* 36: UART 1 TX Handler */ - UARTRX2_Handler, /* 37: UART 2 RX Handler */ - UARTTX2_Handler, /* 38: UART 2 TX Handler */ - UARTRX3_Handler, /* 39: UART 3 RX Handler */ - UARTTX3_Handler, /* 40: UART 3 TX Handler */ - UARTRX4_Handler, /* 41: UART 4 RX Handler */ - UARTTX4_Handler, /* 42: UART 4 TX Handler */ - UART0_Combined_Handler, /* 43: UART 0 Combined Handler */ - UART1_Combined_Handler, /* 44: UART 1 Combined Handler */ - UART2_Combined_Handler, /* 45: UART 2 Combined Handler */ - UART3_Combined_Handler, /* 46: UART 3 Combined Handler */ - UART4_Combined_Handler, /* 47: UART 4 Combined Handler */ - UARTOVF_Handler, /* 48: UART 0, 1, 2, 3, 4 & 5 Overflow Handler */ - ETHERNET_Handler, /* 49: Ethernet Handler */ - I2S_Handler, /* 50: Audio I2S Handler */ - TOUCH_SCREEN_Handler, /* 51: Touch Screen Handler */ - USB_Handler, /* 52: USB Handler */ - SPI_ADC_Handler, /* 53: SPI ADC Handler */ - SPI_SHIELD0_Handler, /* 54: SPI (Shield 0) Handler */ - SPI_SHIELD1_Handler, /* 55: SPI (Shield 0) Handler */ - ETHOS_U55_Handler, /* 56: Ethos-U55 Handler */ - 0, /* 57: Reserved */ - 0, /* 58: Reserved */ - 0, /* 59: Reserved */ - 0, /* 60: Reserved */ - 0, /* 61: Reserved */ - 0, /* 62: Reserved */ - 0, /* 63: Reserved */ - 0, /* 64: Reserved */ - 0, /* 65: Reserved */ - 0, /* 66: Reserved */ - 0, /* 67: Reserved */ - 0, /* 68: Reserved */ - GPIO0_Combined_Handler, /* 69: GPIO 0 Combined Handler */ - GPIO1_Combined_Handler, /* 70: GPIO 1 Combined Handler */ - GPIO2_Combined_Handler, /* 71: GPIO 2 Combined Handler */ - GPIO3_Combined_Handler, /* 72: GPIO 3 Combined Handler */ - GPIO0_0_Handler, /* 73: GPIO0 Pin 0 Handler */ - GPIO0_1_Handler, /* 74: GPIO0 Pin 1 Handler */ - GPIO0_2_Handler, /* 75: GPIO0 Pin 2 Handler */ - GPIO0_3_Handler, /* 76: GPIO0 Pin 3 Handler */ - GPIO0_4_Handler, /* 77: GPIO0 Pin 4 Handler */ - GPIO0_5_Handler, /* 78: GPIO0 Pin 5 Handler */ - GPIO0_6_Handler, /* 79: GPIO0 Pin 6 Handler */ - GPIO0_7_Handler, /* 80: GPIO0 Pin 7 Handler */ - GPIO0_8_Handler, /* 81: GPIO0 Pin 8 Handler */ - GPIO0_9_Handler, /* 82: GPIO0 Pin 9 Handler */ - GPIO0_10_Handler, /* 83: GPIO0 Pin 10 Handler */ - GPIO0_11_Handler, /* 84: GPIO0 Pin 11 Handler */ - GPIO0_12_Handler, /* 85: GPIO0 Pin 12 Handler */ - GPIO0_13_Handler, /* 86: GPIO0 Pin 13 Handler */ - GPIO0_14_Handler, /* 87: GPIO0 Pin 14 Handler */ - GPIO0_15_Handler, /* 88: GPIO0 Pin 15 Handler */ - GPIO1_0_Handler, /* 89: GPIO1 Pin 0 Handler */ - GPIO1_1_Handler, /* 90: GPIO1 Pin 1 Handler */ - GPIO1_2_Handler, /* 91: GPIO1 Pin 2 Handler */ - GPIO1_3_Handler, /* 92: GPIO1 Pin 3 Handler */ - GPIO1_4_Handler, /* 93: GPIO1 Pin 4 Handler */ - GPIO1_5_Handler, /* 94: GPIO1 Pin 5 Handler */ - GPIO1_6_Handler, /* 95: GPIO1 Pin 6 Handler */ - GPIO1_7_Handler, /* 96: GPIO1 Pin 7 Handler */ - GPIO1_8_Handler, /* 97: GPIO1 Pin 8 Handler */ - GPIO1_9_Handler, /* 98: GPIO1 Pin 9 Handler */ - GPIO1_10_Handler, /* 99: GPIO1 Pin 10 Handler */ - GPIO1_11_Handler, /* 100: GPIO1 Pin 11 Handler */ - GPIO1_12_Handler, /* 101: GPIO1 Pin 12 Handler */ - GPIO1_13_Handler, /* 102: GPIO1 Pin 13 Handler */ - GPIO1_14_Handler, /* 103: GPIO1 Pin 14 Handler */ - GPIO1_15_Handler, /* 104: GPIO1 Pin 15 Handler */ - GPIO2_0_Handler, /* 105: GPIO2 Pin 0 Handler */ - GPIO2_1_Handler, /* 106: GPIO2 Pin 1 Handler */ - GPIO2_2_Handler, /* 107: GPIO2 Pin 2 Handler */ - GPIO2_3_Handler, /* 108: GPIO2 Pin 3 Handler */ - GPIO2_4_Handler, /* 109: GPIO2 Pin 4 Handler */ - GPIO2_5_Handler, /* 110: GPIO2 Pin 5 Handler */ - GPIO2_6_Handler, /* 111: GPIO2 Pin 6 Handler */ - GPIO2_7_Handler, /* 112: GPIO2 Pin 7 Handler */ - GPIO2_8_Handler, /* 113: GPIO2 Pin 8 Handler */ - GPIO2_9_Handler, /* 114: GPIO2 Pin 9 Handler */ - GPIO2_10_Handler, /* 115: GPIO2 Pin 10 Handler */ - GPIO2_11_Handler, /* 116: GPIO2 Pin 11 Handler */ - GPIO2_12_Handler, /* 117: GPIO2 Pin 12 Handler */ - GPIO2_13_Handler, /* 118: GPIO2 Pin 13 Handler */ - GPIO2_14_Handler, /* 119: GPIO2 Pin 14 Handler */ - GPIO2_15_Handler, /* 120: GPIO2 Pin 15 Handler */ - GPIO3_0_Handler, /* 121: GPIO3 Pin 0 Handler */ - GPIO3_1_Handler, /* 122: GPIO3 Pin 1 Handler */ - GPIO3_2_Handler, /* 123: GPIO3 Pin 2 Handler */ - GPIO3_3_Handler, /* 124: GPIO3 Pin 3 Handler */ - UARTRX5_Handler, /* 125: UART 5 RX Interrupt */ - UARTTX5_Handler, /* 126: UART 5 TX Interrupt */ - UART5_Handler, /* 127: UART 5 combined Interrupt */ - 0, /* 128: Reserved */ - 0, /* 129: Reserved */ - 0, /* 130: Reserved */ -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -void Reset_Handler(void) -{ - __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); - - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} diff --git a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.h b/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.h deleted file mode 100644 index feba5e9..0000000 --- a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2009-2020 Arm Limited - * - * 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 - * - * http://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. - */ - -/* - * This file is derivative of CMSIS V5.6.0 system_ARMv81MML.h - * Git SHA: b5f0603d6a584d1724d952fd8b0737458b90d62b - */ - -#ifndef __SYSTEM_CORE_INIT_H__ -#define __SYSTEM_CORE_INIT_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ -extern uint32_t PeripheralClock; /*!< Peripheral Clock Frequency */ - -/** - * \brief Initializes the system - */ -extern void SystemInit(void); - -/** - * \brief Restores system core clock - */ -extern void SystemCoreClockUpdate(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __SYSTEM_CORE_INIT_H__ */ diff --git a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/Target.clayer.yml deleted file mode 100644 index 3c484c1..0000000 --- a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/Target.clayer.yml +++ /dev/null @@ -1,27 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: ARM::V2M_MPS3_SSE_300_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: ARM::CMSIS Driver:USART - - - component: ARM::Device:Startup&Baremetal - - component: ARM::Device:Definition - - - component: ARM::Native Driver:SysCounter - - component: ARM::Native Driver:SysTimer - - component: ARM::Native Driver:Timeout - - component: ARM::Native Driver:UART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/vht_config.txt deleted file mode 100644 index 1329fed..0000000 --- a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/vht_config.txt +++ /dev/null @@ -1,9 +0,0 @@ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -cpu_core.core_clk.mul=100000000 # (int , init-time) default = '0x17d7840' : Clock Rate Multiplier. This parameter is not exposed via CADI and can only be set in LISA -cpu_core.mps3_board.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected -cpu_core.mps3_board.uart0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -cpu_core.mps3_board.uart0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -cpu_core.mps3_board.visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -#------------------------------------------------------------------------------ \ No newline at end of file diff --git a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/RTE_Device.h deleted file mode 100644 index 7584efd..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/RTE_Device.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2016 ARM Ltd. - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. Permission is granted to anyone to use this - * software for any purpose, including commercial applications, and to alter - * it and redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - * - * $Date: 25. April 2016 - * $Revision: V1.0.0 - * - * Project: RTE Device Configuration for ARM CMSDK_CM device - * -------------------------------------------------------------------------- */ - -//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART0 (Universal synchronous asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::CMSIS Driver:USART -#define RTE_USART0 1 - - -// USART1 (Universal synchronous asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART -#define RTE_USART1 0 - - -// USART2 (Universal synchronous asynchronous receiver transmitter) [Driver_USART2] -// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART -#define RTE_UART2 0 - - -// USART3 (Universal synchronous asynchronous receiver transmitter) [Driver_USART3] -// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART -#define RTE_UART3 0 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/ac6_arm.sct b/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/ac6_arm.sct deleted file mode 100644 index e1b77e5..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/ac6_arm.sct +++ /dev/null @@ -1,76 +0,0 @@ -#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m7 -xc -; command above MUST be in first line (no comment above!) - -/* -;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------- -*/ - -/*--------------------- Flash Configuration ---------------------------------- -; Flash Configuration -; Flash Base Address <0x0-0xFFFFFFFF:8> -; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - *----------------------------------------------------------------------------*/ -#define __ROM_BASE 0x00000000 -#define __ROM_SIZE 0x00080000 - -/*--------------------- Embedded RAM Configuration --------------------------- -; RAM Configuration -; RAM Base Address <0x0-0xFFFFFFFF:8> -; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - *----------------------------------------------------------------------------*/ -#define __RAM_BASE 0x20000000 -#define __RAM_SIZE 0x00040000 - -/*--------------------- Stack / Heap Configuration --------------------------- -; 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 - -/* -;------------- <<< end of configuration section >>> --------------------------- -*/ - - -/*---------------------------------------------------------------------------- - User Stack & Heap boundary definition - *----------------------------------------------------------------------------*/ -#define __STACK_TOP (__RAM_BASE + __RAM_SIZE) /* starts at end of RAM */ -#define __HEAP_BASE (AlignExpr(+0, 8)) /* starts after RW_RAM section, 8 byte aligned */ - - -/*---------------------------------------------------------------------------- - Scatter File Definitions definition - *----------------------------------------------------------------------------*/ -#define __RO_BASE __ROM_BASE -#define __RO_SIZE __ROM_SIZE - -#define __RW_BASE __RAM_BASE -#define __RW_SIZE (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE) - - -LR_ROM __RO_BASE __RO_SIZE { ; load region size_region - ER_ROM __RO_BASE __RO_SIZE { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - .ANY (+XO) - } - - RW_RAM __RW_BASE __RW_SIZE { ; RW data - .ANY (+RW +ZI) - } - -#if __HEAP_SIZE > 0 - ARM_LIB_HEAP __HEAP_BASE EMPTY __HEAP_SIZE { ; Reserve empty region for heap - } -#endif - - ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE { ; Reserve empty region for stack - } -} diff --git a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/startup_CMSDK_CM7.c b/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/startup_CMSDK_CM7.c deleted file mode 100644 index 82b8c8a..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/startup_CMSDK_CM7.c +++ /dev/null @@ -1,425 +0,0 @@ -/****************************************************************************** - * @file startup_CMSDK_CM7.c - * @brief CMSIS Startup File for CMSDK_M7 Device - ******************************************************************************/ -/* Copyright (c) 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM7) || defined (CMSDK_CM7_VHT) - #include "CMSDK_CM7.h" -#elif defined (CMSDK_CM7_SP) || defined (CMSDK_CM7_SP_VHT) - #include "CMSDK_CM7_SP.h" -#elif defined (CMSDK_CM7_DP) || defined (CMSDK_CM7_DP_VHT) - #include "CMSDK_CM7_DP.h" -#else - #error device not specified! -#endif - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; - -extern __NO_RETURN void __PROGRAM_START(void); - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler (void); - void Default_Handler(void); - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -/* Exceptions */ -void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void HardFault_Handler (void) __attribute__ ((weak)); -void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* Interrupts */ -void UART0RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DUALTIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART_0_1_2_OVF_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ETHERNET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void I2S_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TOUCHSCREEN_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_3_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#if defined CMSDK_CM7_VHT || defined CMSDK_CM7_SP_VHT || defined CMSDK_CM7_DP_VHT -void ARM_VSI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#endif - - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - const VECTOR_TABLE_Type __VECTOR_TABLE[256] __VECTOR_TABLE_ATTRIBUTE = { - (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14 NMI Handler */ - HardFault_Handler, /* -13 Hard Fault Handler */ - MemManage_Handler, /* -12 MPU Fault Handler */ - BusFault_Handler, /* -11 Bus Fault Handler */ - UsageFault_Handler, /* -10 Usage Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5 SVC Handler */ - DebugMon_Handler, /* -4 Debug Monitor Handler */ - 0, /* Reserved */ - PendSV_Handler, /* -2 PendSV Handler */ - SysTick_Handler, /* -1 SysTick Handler */ - - /* Interrupts */ - UART0RX_Handler, /* 0 UART 0 receive interrupt */ - UART0TX_Handler, /* 1 UART 0 transmit interrupt */ - UART1RX_Handler, /* 2 UART 1 receive interrupt */ - UART1TX_Handler, /* 3 UART 1 transmit interrupt */ - UART2RX_Handler, /* 4 UART 2 receive interrupt */ - UART2TX_Handler, /* 5 UART 2 transmit interrupt */ - GPIO0ALL_Handler, /* 6 GPIO 0 combined interrupt */ - GPIO1ALL_Handler, /* 7 GPIO 1 combined interrupt */ - TIMER0_Handler, /* 8 Timer 0 interrupt */ - TIMER1_Handler, /* 9 Timer 1 interrupt */ - DUALTIMER_Handler, /* 10 Dual Timer interrupt */ - SPI_0_1_Handler, /* 11 SPI 0, SPI 1 interrupt */ - UART_0_1_2_OVF_Handler, /* 12 UART overflow (0, 1 & 2) interrupt */ - ETHERNET_Handler, /* 13 Ethernet interrupt */ - I2S_Handler, /* 14 Audio I2S interrupt */ - TOUCHSCREEN_Handler, /* 15 Touch Screen interrupt */ - GPIO2_Handler, /* 16 GPIO 2 combined interrupt */ - GPIO3_Handler, /* 17 GPIO 3 combined interrupt */ - UART3RX_Handler, /* 18 UART 3 receive interrupt */ - UART3TX_Handler, /* 19 UART 3 transmit interrupt */ - UART4RX_Handler, /* 20 UART 4 receive interrupt */ - UART4TX_Handler, /* 21 UART 4 transmit interrupt */ - SPI_2_Handler, /* 22 SPI 2 interrupt */ - SPI_3_4_Handler, /* 23 SPI 3, SPI 4 interrupt */ - GPIO0_0_Handler, /* 24 GPIO 0 individual interrupt ( 0) */ - GPIO0_1_Handler, /* 25 GPIO 0 individual interrupt ( 1) */ - GPIO0_2_Handler, /* 26 GPIO 0 individual interrupt ( 2) */ - GPIO0_3_Handler, /* 27 GPIO 0 individual interrupt ( 3) */ - GPIO0_4_Handler, /* 28 GPIO 0 individual interrupt ( 4) */ - GPIO0_5_Handler, /* 29 GPIO 0 individual interrupt ( 5) */ - GPIO0_6_Handler, /* 30 GPIO 0 individual interrupt ( 6) */ - GPIO0_7_Handler, /* 31 GPIO 0 individual interrupt ( 7) */ - 0, /* 32 Reserved */ - 0, /* 33 Reserved */ - 0, /* 34 Reserved */ - 0, /* 35 Reserved */ - 0, /* 36 Reserved */ - 0, /* 37 Reserved */ - 0, /* 38 Reserved */ - 0, /* 39 Reserved */ - 0, /* 40 Reserved */ - 0, /* 41 Reserved */ - 0, /* 42 Reserved */ - 0, /* 43 Reserved */ - 0, /* 44 Reserved */ - 0, /* 45 Reserved */ - 0, /* 46 Reserved */ - 0, /* 47 Reserved */ - 0, /* 48 Reserved */ - 0, /* 49 Reserved */ - 0, /* 50 Reserved */ - 0, /* 51 Reserved */ - 0, /* 52 Reserved */ - 0, /* 53 Reserved */ - 0, /* 54 Reserved */ - 0, /* 55 Reserved */ - 0, /* 56 Reserved */ - 0, /* 57 Reserved */ - 0, /* 58 Reserved */ - 0, /* 59 Reserved */ - 0, /* 60 Reserved */ - 0, /* 61 Reserved */ - 0, /* 62 Reserved */ - 0, /* 63 Reserved */ - 0, /* 64 Reserved */ - 0, /* 65 Reserved */ - 0, /* 66 Reserved */ - 0, /* 67 Reserved */ - 0, /* 68 Reserved */ - 0, /* 69 Reserved */ - 0, /* 70 Reserved */ - 0, /* 71 Reserved */ - 0, /* 72 Reserved */ - 0, /* 73 Reserved */ - 0, /* 74 Reserved */ - 0, /* 75 Reserved */ - 0, /* 76 Reserved */ - 0, /* 77 Reserved */ - 0, /* 78 Reserved */ - 0, /* 79 Reserved */ - 0, /* 80 Reserved */ - 0, /* 81 Reserved */ - 0, /* 82 Reserved */ - 0, /* 83 Reserved */ - 0, /* 84 Reserved */ - 0, /* 85 Reserved */ - 0, /* 86 Reserved */ - 0, /* 87 Reserved */ - 0, /* 88 Reserved */ - 0, /* 89 Reserved */ - 0, /* 90 Reserved */ - 0, /* 91 Reserved */ - 0, /* 92 Reserved */ - 0, /* 93 Reserved */ - 0, /* 94 Reserved */ - 0, /* 95 Reserved */ - 0, /* 96 Reserved */ - 0, /* 97 Reserved */ - 0, /* 98 Reserved */ - 0, /* 99 Reserved */ - 0, /* 100 Reserved */ - 0, /* 101 Reserved */ - 0, /* 102 Reserved */ - 0, /* 103 Reserved */ - 0, /* 104 Reserved */ - 0, /* 105 Reserved */ - 0, /* 106 Reserved */ - 0, /* 107 Reserved */ - 0, /* 108 Reserved */ - 0, /* 109 Reserved */ - 0, /* 110 Reserved */ - 0, /* 111 Reserved */ - 0, /* 112 Reserved */ - 0, /* 113 Reserved */ - 0, /* 114 Reserved */ - 0, /* 115 Reserved */ - 0, /* 116 Reserved */ - 0, /* 117 Reserved */ - 0, /* 118 Reserved */ - 0, /* 119 Reserved */ - 0, /* 120 Reserved */ - 0, /* 121 Reserved */ - 0, /* 122 Reserved */ - 0, /* 123 Reserved */ - 0, /* 124 Reserved */ - 0, /* 125 Reserved */ - 0, /* 126 Reserved */ - 0, /* 127 Reserved */ - 0, /* 128 Reserved */ - 0, /* 129 Reserved */ - 0, /* 130 Reserved */ - 0, /* 131 Reserved */ - 0, /* 132 Reserved */ - 0, /* 133 Reserved */ - 0, /* 134 Reserved */ - 0, /* 135 Reserved */ - 0, /* 136 Reserved */ - 0, /* 137 Reserved */ - 0, /* 138 Reserved */ - 0, /* 139 Reserved */ - 0, /* 140 Reserved */ - 0, /* 141 Reserved */ - 0, /* 142 Reserved */ - 0, /* 143 Reserved */ - 0, /* 144 Reserved */ - 0, /* 145 Reserved */ - 0, /* 146 Reserved */ - 0, /* 147 Reserved */ - 0, /* 148 Reserved */ - 0, /* 149 Reserved */ - 0, /* 150 Reserved */ - 0, /* 151 Reserved */ - 0, /* 152 Reserved */ - 0, /* 153 Reserved */ - 0, /* 154 Reserved */ - 0, /* 155 Reserved */ - 0, /* 156 Reserved */ - 0, /* 157 Reserved */ - 0, /* 158 Reserved */ - 0, /* 159 Reserved */ - 0, /* 160 Reserved */ - 0, /* 161 Reserved */ - 0, /* 162 Reserved */ - 0, /* 163 Reserved */ - 0, /* 164 Reserved */ - 0, /* 165 Reserved */ - 0, /* 166 Reserved */ - 0, /* 167 Reserved */ - 0, /* 168 Reserved */ - 0, /* 169 Reserved */ - 0, /* 170 Reserved */ - 0, /* 171 Reserved */ - 0, /* 172 Reserved */ - 0, /* 173 Reserved */ - 0, /* 174 Reserved */ - 0, /* 175 Reserved */ - 0, /* 176 Reserved */ - 0, /* 177 Reserved */ - 0, /* 178 Reserved */ - 0, /* 179 Reserved */ - 0, /* 180 Reserved */ - 0, /* 181 Reserved */ - 0, /* 182 Reserved */ - 0, /* 183 Reserved */ - 0, /* 184 Reserved */ - 0, /* 185 Reserved */ - 0, /* 186 Reserved */ - 0, /* 187 Reserved */ - 0, /* 188 Reserved */ - 0, /* 189 Reserved */ - 0, /* 190 Reserved */ - 0, /* 191 Reserved */ - 0, /* 192 Reserved */ - 0, /* 193 Reserved */ - 0, /* 194 Reserved */ - 0, /* 195 Reserved */ - 0, /* 196 Reserved */ - 0, /* 197 Reserved */ - 0, /* 198 Reserved */ - 0, /* 199 Reserved */ - 0, /* 200 Reserved */ - 0, /* 201 Reserved */ - 0, /* 202 Reserved */ - 0, /* 203 Reserved */ - 0, /* 204 Reserved */ - 0, /* 205 Reserved */ - 0, /* 206 Reserved */ - 0, /* 207 Reserved */ - 0, /* 208 Reserved */ - 0, /* 209 Reserved */ - 0, /* 210 Reserved */ - 0, /* 211 Reserved */ - 0, /* 212 Reserved */ - 0, /* 213 Reserved */ - 0, /* 214 Reserved */ - 0, /* 215 Reserved */ - 0, /* 216 Reserved */ - 0, /* 217 Reserved */ - 0, /* 218 Reserved */ - 0, /* 219 Reserved */ - 0, /* 220 Reserved */ - 0, /* 221 Reserved */ - 0, /* 222 Reserved */ - 0, /* 223 Reserved */ -#if defined CMSDK_CM7_VHT || defined CMSDK_CM7_SP_VHT || defined CMSDK_CM7_DP_VHT - ARM_VSI0_Handler, /* 224 VSI 0 interrupt */ - ARM_VSI1_Handler, /* 225 VSI 1 interrupt */ - ARM_VSI2_Handler, /* 226 VSI 2 interrupt */ - ARM_VSI3_Handler, /* 227 VSI 3 interrupt */ - ARM_VSI4_Handler, /* 228 VSI 4 interrupt */ - ARM_VSI5_Handler, /* 229 VSI 5 interrupt */ - ARM_VSI6_Handler, /* 230 VSI 6 interrupt */ - ARM_VSI7_Handler /* 231 VSI 7 interrupt */ -#else - 0, /* 224 Reserved */ - 0, /* 225 Reserved */ - 0, /* 226 Reserved */ - 0, /* 227 Reserved */ - 0, /* 228 Reserved */ - 0, /* 229 Reserved */ - 0, /* 230 Reserved */ - 0 /* 231 Reserved */ -#endif -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler(void) -{ - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmissing-noreturn" -#endif - -/*---------------------------------------------------------------------------- - Hard Fault Handler - *----------------------------------------------------------------------------*/ -void HardFault_Handler(void) -{ - while(1); -} - -/*---------------------------------------------------------------------------- - Default Handler for Exceptions / Interrupts - *----------------------------------------------------------------------------*/ -void Default_Handler(void) -{ - while(1); -} - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic pop -#endif diff --git a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/system_CMSDK_CM7.c b/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/system_CMSDK_CM7.c deleted file mode 100644 index fdfec7a..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/RTE/Device/CMSDK_CM7_DP_VHT/system_CMSDK_CM7.c +++ /dev/null @@ -1,87 +0,0 @@ -/****************************************************************************** - * @file system_CMSDK_CM7.c - * @brief CMSIS System Source File for CMSDK_CM7 Device - ******************************************************************************/ -/* Copyright (c) 2011 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM7) || defined (CMSDK_CM7_VHT) - #include "CMSDK_CM7.h" -#elif defined (CMSDK_CM7_SP) || defined (CMSDK_CM7_SP_VHT) - #include "CMSDK_CM7_SP.h" -#elif defined (CMSDK_CM7_DP) || defined (CMSDK_CM7_DP_VHT) - #include "CMSDK_CM7_DP.h" -#else - #error device not specified! -#endif - - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define XTAL (50000000UL) /* Oscillator frequency */ - -#define SYSTEM_CLOCK (XTAL / 2U) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); -#endif - -#if defined (__FPU_USED) && (__FPU_USED == 1U) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - - SystemCoreClock = SYSTEM_CLOCK; -} diff --git a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/Target.clayer.yml deleted file mode 100644 index 8e3ec74..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/Target.clayer.yml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: Keil::V2M-MPS2_CMx_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: Device:Startup&C Startup - - - component: Keil::Board Support&V2M-MPS2:Common - - component: Keil::CMSIS Driver:USART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/vht_config.txt deleted file mode 100644 index b7f12f3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_AC6/vht_config.txt +++ /dev/null @@ -1,8 +0,0 @@ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -fvp_mps2.UART0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -fvp_mps2.UART0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -fvp_mps2.UART0.unbuffered_output=1 # (bool , init-time) default = '0' : Unbuffered output -fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -#------------------------------------------------------------------------------ diff --git a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/RTE_Device.h deleted file mode 100644 index 7584efd..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/RTE_Device.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2016 ARM Ltd. - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. Permission is granted to anyone to use this - * software for any purpose, including commercial applications, and to alter - * it and redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - * - * $Date: 25. April 2016 - * $Revision: V1.0.0 - * - * Project: RTE Device Configuration for ARM CMSDK_CM device - * -------------------------------------------------------------------------- */ - -//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART0 (Universal synchronous asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::CMSIS Driver:USART -#define RTE_USART0 1 - - -// USART1 (Universal synchronous asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART -#define RTE_USART1 0 - - -// USART2 (Universal synchronous asynchronous receiver transmitter) [Driver_USART2] -// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART -#define RTE_UART2 0 - - -// USART3 (Universal synchronous asynchronous receiver transmitter) [Driver_USART3] -// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART -#define RTE_UART3 0 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/gcc_arm.ld b/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/gcc_arm.ld deleted file mode 100644 index 59bd7d1..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/gcc_arm.ld +++ /dev/null @@ -1,279 +0,0 @@ -/****************************************************************************** - * @file gcc_arm.ld - * @brief GNU Linker Script for Cortex-M based device - ******************************************************************************/ - -/* -; -------- <<< Use Configuration Wizard in Context Menu >>> ------------------- - */ - -/*---------------------- Flash Configuration ---------------------------------- -; Flash Configuration -; Flash Base Address <0x0-0xFFFFFFFF:8> -; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__ROM_BASE = 0x00000000; -__ROM_SIZE = 0x00400000; - -/*--------------------- Embedded RAM Configuration ---------------------------- -; RAM Configuration -; RAM Base Address <0x0-0xFFFFFFFF:8> -; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__RAM_BASE = 0x20000000; -__RAM_SIZE = 0x00020000; - -/*--------------------- Stack / Heap Configuration ---------------------------- -; Stack / Heap Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__STACK_SIZE = 0x00000400; -__HEAP_SIZE = 0x00000C00; - -/* -; -------------------- <<< end of configuration section >>> ------------------- - */ - -MEMORY -{ - FLASH (rx) : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE - RAM (rwx) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - KEEP(*(.vectors)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - /* - * SG veneers: - * All SG veneers are placed in the special output section .gnu.sgstubs. Its start address - * must be set, either with the command line option �--section-start� or in a linker script, - * to indicate where to place these veneers in memory. - */ -/* - .gnu.sgstubs : - { - . = ALIGN(32); - } > FLASH -*/ - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - - LONG (__etext) - LONG (__data_start__) - LONG ((__data_end__ - __data_start__) / 4) - - /* Add each additional data section here */ -/* - LONG (__etext2) - LONG (__data2_start__) - LONG ((__data2_end__ - __data2_start__) / 4) -*/ - __copy_table_end__ = .; - } > FLASH - - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG ((__bss_end__ - __bss_start__) / 4) - /* Add each additional bss section here */ -/* - LONG (__bss2_start__) - LONG ((__bss2_end__ - __bss2_start__) / 4) -*/ - __zero_table_end__ = .; - } > FLASH - - /** - * Location counter can end up 2byte aligned with narrow Thumb code but - * __etext is assumed by startup code to be the LMA of a section in RAM - * which must be 4byte aligned - */ - __etext = ALIGN (4); - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.data) - *(.data.*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(4); - /* All data end */ - __data_end__ = .; - - } > RAM - - /* - * Secondary data section, optional - * - * Remember to add each additional data section - * to the .copy.table above to asure proper - * initialization during startup. - */ -/* - __etext2 = ALIGN (4); - - .data2 : AT (__etext2) - { - . = ALIGN(4); - __data2_start__ = .; - *(.data2) - *(.data2.*) - . = ALIGN(4); - __data2_end__ = .; - - } > RAM2 -*/ - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss) - *(.bss.*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM AT > RAM - - /* - * Secondary bss section, optional - * - * Remember to add each additional bss section - * to the .zero.table above to asure proper - * initialization during startup. - */ -/* - .bss2 : - { - . = ALIGN(4); - __bss2_start__ = .; - *(.bss2) - *(.bss2.*) - . = ALIGN(4); - __bss2_end__ = .; - } > RAM2 AT > RAM2 -*/ - - .heap (COPY) : - { - . = ALIGN(8); - __end__ = .; - PROVIDE(end = .); - . = . + __HEAP_SIZE; - . = ALIGN(8); - __HeapLimit = .; - } > RAM - - .stack (ORIGIN(RAM) + LENGTH(RAM) - __STACK_SIZE) (COPY) : - { - . = ALIGN(8); - __StackLimit = .; - . = . + __STACK_SIZE; - . = ALIGN(8); - __StackTop = .; - } > RAM - PROVIDE(__stack = __StackTop); - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/startup_CMSDK_CM7.c b/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/startup_CMSDK_CM7.c deleted file mode 100644 index 82b8c8a..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/startup_CMSDK_CM7.c +++ /dev/null @@ -1,425 +0,0 @@ -/****************************************************************************** - * @file startup_CMSDK_CM7.c - * @brief CMSIS Startup File for CMSDK_M7 Device - ******************************************************************************/ -/* Copyright (c) 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM7) || defined (CMSDK_CM7_VHT) - #include "CMSDK_CM7.h" -#elif defined (CMSDK_CM7_SP) || defined (CMSDK_CM7_SP_VHT) - #include "CMSDK_CM7_SP.h" -#elif defined (CMSDK_CM7_DP) || defined (CMSDK_CM7_DP_VHT) - #include "CMSDK_CM7_DP.h" -#else - #error device not specified! -#endif - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; - -extern __NO_RETURN void __PROGRAM_START(void); - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler (void); - void Default_Handler(void); - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -/* Exceptions */ -void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void HardFault_Handler (void) __attribute__ ((weak)); -void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* Interrupts */ -void UART0RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DUALTIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART_0_1_2_OVF_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ETHERNET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void I2S_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TOUCHSCREEN_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_3_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#if defined CMSDK_CM7_VHT || defined CMSDK_CM7_SP_VHT || defined CMSDK_CM7_DP_VHT -void ARM_VSI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#endif - - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - const VECTOR_TABLE_Type __VECTOR_TABLE[256] __VECTOR_TABLE_ATTRIBUTE = { - (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14 NMI Handler */ - HardFault_Handler, /* -13 Hard Fault Handler */ - MemManage_Handler, /* -12 MPU Fault Handler */ - BusFault_Handler, /* -11 Bus Fault Handler */ - UsageFault_Handler, /* -10 Usage Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5 SVC Handler */ - DebugMon_Handler, /* -4 Debug Monitor Handler */ - 0, /* Reserved */ - PendSV_Handler, /* -2 PendSV Handler */ - SysTick_Handler, /* -1 SysTick Handler */ - - /* Interrupts */ - UART0RX_Handler, /* 0 UART 0 receive interrupt */ - UART0TX_Handler, /* 1 UART 0 transmit interrupt */ - UART1RX_Handler, /* 2 UART 1 receive interrupt */ - UART1TX_Handler, /* 3 UART 1 transmit interrupt */ - UART2RX_Handler, /* 4 UART 2 receive interrupt */ - UART2TX_Handler, /* 5 UART 2 transmit interrupt */ - GPIO0ALL_Handler, /* 6 GPIO 0 combined interrupt */ - GPIO1ALL_Handler, /* 7 GPIO 1 combined interrupt */ - TIMER0_Handler, /* 8 Timer 0 interrupt */ - TIMER1_Handler, /* 9 Timer 1 interrupt */ - DUALTIMER_Handler, /* 10 Dual Timer interrupt */ - SPI_0_1_Handler, /* 11 SPI 0, SPI 1 interrupt */ - UART_0_1_2_OVF_Handler, /* 12 UART overflow (0, 1 & 2) interrupt */ - ETHERNET_Handler, /* 13 Ethernet interrupt */ - I2S_Handler, /* 14 Audio I2S interrupt */ - TOUCHSCREEN_Handler, /* 15 Touch Screen interrupt */ - GPIO2_Handler, /* 16 GPIO 2 combined interrupt */ - GPIO3_Handler, /* 17 GPIO 3 combined interrupt */ - UART3RX_Handler, /* 18 UART 3 receive interrupt */ - UART3TX_Handler, /* 19 UART 3 transmit interrupt */ - UART4RX_Handler, /* 20 UART 4 receive interrupt */ - UART4TX_Handler, /* 21 UART 4 transmit interrupt */ - SPI_2_Handler, /* 22 SPI 2 interrupt */ - SPI_3_4_Handler, /* 23 SPI 3, SPI 4 interrupt */ - GPIO0_0_Handler, /* 24 GPIO 0 individual interrupt ( 0) */ - GPIO0_1_Handler, /* 25 GPIO 0 individual interrupt ( 1) */ - GPIO0_2_Handler, /* 26 GPIO 0 individual interrupt ( 2) */ - GPIO0_3_Handler, /* 27 GPIO 0 individual interrupt ( 3) */ - GPIO0_4_Handler, /* 28 GPIO 0 individual interrupt ( 4) */ - GPIO0_5_Handler, /* 29 GPIO 0 individual interrupt ( 5) */ - GPIO0_6_Handler, /* 30 GPIO 0 individual interrupt ( 6) */ - GPIO0_7_Handler, /* 31 GPIO 0 individual interrupt ( 7) */ - 0, /* 32 Reserved */ - 0, /* 33 Reserved */ - 0, /* 34 Reserved */ - 0, /* 35 Reserved */ - 0, /* 36 Reserved */ - 0, /* 37 Reserved */ - 0, /* 38 Reserved */ - 0, /* 39 Reserved */ - 0, /* 40 Reserved */ - 0, /* 41 Reserved */ - 0, /* 42 Reserved */ - 0, /* 43 Reserved */ - 0, /* 44 Reserved */ - 0, /* 45 Reserved */ - 0, /* 46 Reserved */ - 0, /* 47 Reserved */ - 0, /* 48 Reserved */ - 0, /* 49 Reserved */ - 0, /* 50 Reserved */ - 0, /* 51 Reserved */ - 0, /* 52 Reserved */ - 0, /* 53 Reserved */ - 0, /* 54 Reserved */ - 0, /* 55 Reserved */ - 0, /* 56 Reserved */ - 0, /* 57 Reserved */ - 0, /* 58 Reserved */ - 0, /* 59 Reserved */ - 0, /* 60 Reserved */ - 0, /* 61 Reserved */ - 0, /* 62 Reserved */ - 0, /* 63 Reserved */ - 0, /* 64 Reserved */ - 0, /* 65 Reserved */ - 0, /* 66 Reserved */ - 0, /* 67 Reserved */ - 0, /* 68 Reserved */ - 0, /* 69 Reserved */ - 0, /* 70 Reserved */ - 0, /* 71 Reserved */ - 0, /* 72 Reserved */ - 0, /* 73 Reserved */ - 0, /* 74 Reserved */ - 0, /* 75 Reserved */ - 0, /* 76 Reserved */ - 0, /* 77 Reserved */ - 0, /* 78 Reserved */ - 0, /* 79 Reserved */ - 0, /* 80 Reserved */ - 0, /* 81 Reserved */ - 0, /* 82 Reserved */ - 0, /* 83 Reserved */ - 0, /* 84 Reserved */ - 0, /* 85 Reserved */ - 0, /* 86 Reserved */ - 0, /* 87 Reserved */ - 0, /* 88 Reserved */ - 0, /* 89 Reserved */ - 0, /* 90 Reserved */ - 0, /* 91 Reserved */ - 0, /* 92 Reserved */ - 0, /* 93 Reserved */ - 0, /* 94 Reserved */ - 0, /* 95 Reserved */ - 0, /* 96 Reserved */ - 0, /* 97 Reserved */ - 0, /* 98 Reserved */ - 0, /* 99 Reserved */ - 0, /* 100 Reserved */ - 0, /* 101 Reserved */ - 0, /* 102 Reserved */ - 0, /* 103 Reserved */ - 0, /* 104 Reserved */ - 0, /* 105 Reserved */ - 0, /* 106 Reserved */ - 0, /* 107 Reserved */ - 0, /* 108 Reserved */ - 0, /* 109 Reserved */ - 0, /* 110 Reserved */ - 0, /* 111 Reserved */ - 0, /* 112 Reserved */ - 0, /* 113 Reserved */ - 0, /* 114 Reserved */ - 0, /* 115 Reserved */ - 0, /* 116 Reserved */ - 0, /* 117 Reserved */ - 0, /* 118 Reserved */ - 0, /* 119 Reserved */ - 0, /* 120 Reserved */ - 0, /* 121 Reserved */ - 0, /* 122 Reserved */ - 0, /* 123 Reserved */ - 0, /* 124 Reserved */ - 0, /* 125 Reserved */ - 0, /* 126 Reserved */ - 0, /* 127 Reserved */ - 0, /* 128 Reserved */ - 0, /* 129 Reserved */ - 0, /* 130 Reserved */ - 0, /* 131 Reserved */ - 0, /* 132 Reserved */ - 0, /* 133 Reserved */ - 0, /* 134 Reserved */ - 0, /* 135 Reserved */ - 0, /* 136 Reserved */ - 0, /* 137 Reserved */ - 0, /* 138 Reserved */ - 0, /* 139 Reserved */ - 0, /* 140 Reserved */ - 0, /* 141 Reserved */ - 0, /* 142 Reserved */ - 0, /* 143 Reserved */ - 0, /* 144 Reserved */ - 0, /* 145 Reserved */ - 0, /* 146 Reserved */ - 0, /* 147 Reserved */ - 0, /* 148 Reserved */ - 0, /* 149 Reserved */ - 0, /* 150 Reserved */ - 0, /* 151 Reserved */ - 0, /* 152 Reserved */ - 0, /* 153 Reserved */ - 0, /* 154 Reserved */ - 0, /* 155 Reserved */ - 0, /* 156 Reserved */ - 0, /* 157 Reserved */ - 0, /* 158 Reserved */ - 0, /* 159 Reserved */ - 0, /* 160 Reserved */ - 0, /* 161 Reserved */ - 0, /* 162 Reserved */ - 0, /* 163 Reserved */ - 0, /* 164 Reserved */ - 0, /* 165 Reserved */ - 0, /* 166 Reserved */ - 0, /* 167 Reserved */ - 0, /* 168 Reserved */ - 0, /* 169 Reserved */ - 0, /* 170 Reserved */ - 0, /* 171 Reserved */ - 0, /* 172 Reserved */ - 0, /* 173 Reserved */ - 0, /* 174 Reserved */ - 0, /* 175 Reserved */ - 0, /* 176 Reserved */ - 0, /* 177 Reserved */ - 0, /* 178 Reserved */ - 0, /* 179 Reserved */ - 0, /* 180 Reserved */ - 0, /* 181 Reserved */ - 0, /* 182 Reserved */ - 0, /* 183 Reserved */ - 0, /* 184 Reserved */ - 0, /* 185 Reserved */ - 0, /* 186 Reserved */ - 0, /* 187 Reserved */ - 0, /* 188 Reserved */ - 0, /* 189 Reserved */ - 0, /* 190 Reserved */ - 0, /* 191 Reserved */ - 0, /* 192 Reserved */ - 0, /* 193 Reserved */ - 0, /* 194 Reserved */ - 0, /* 195 Reserved */ - 0, /* 196 Reserved */ - 0, /* 197 Reserved */ - 0, /* 198 Reserved */ - 0, /* 199 Reserved */ - 0, /* 200 Reserved */ - 0, /* 201 Reserved */ - 0, /* 202 Reserved */ - 0, /* 203 Reserved */ - 0, /* 204 Reserved */ - 0, /* 205 Reserved */ - 0, /* 206 Reserved */ - 0, /* 207 Reserved */ - 0, /* 208 Reserved */ - 0, /* 209 Reserved */ - 0, /* 210 Reserved */ - 0, /* 211 Reserved */ - 0, /* 212 Reserved */ - 0, /* 213 Reserved */ - 0, /* 214 Reserved */ - 0, /* 215 Reserved */ - 0, /* 216 Reserved */ - 0, /* 217 Reserved */ - 0, /* 218 Reserved */ - 0, /* 219 Reserved */ - 0, /* 220 Reserved */ - 0, /* 221 Reserved */ - 0, /* 222 Reserved */ - 0, /* 223 Reserved */ -#if defined CMSDK_CM7_VHT || defined CMSDK_CM7_SP_VHT || defined CMSDK_CM7_DP_VHT - ARM_VSI0_Handler, /* 224 VSI 0 interrupt */ - ARM_VSI1_Handler, /* 225 VSI 1 interrupt */ - ARM_VSI2_Handler, /* 226 VSI 2 interrupt */ - ARM_VSI3_Handler, /* 227 VSI 3 interrupt */ - ARM_VSI4_Handler, /* 228 VSI 4 interrupt */ - ARM_VSI5_Handler, /* 229 VSI 5 interrupt */ - ARM_VSI6_Handler, /* 230 VSI 6 interrupt */ - ARM_VSI7_Handler /* 231 VSI 7 interrupt */ -#else - 0, /* 224 Reserved */ - 0, /* 225 Reserved */ - 0, /* 226 Reserved */ - 0, /* 227 Reserved */ - 0, /* 228 Reserved */ - 0, /* 229 Reserved */ - 0, /* 230 Reserved */ - 0 /* 231 Reserved */ -#endif -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler(void) -{ - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmissing-noreturn" -#endif - -/*---------------------------------------------------------------------------- - Hard Fault Handler - *----------------------------------------------------------------------------*/ -void HardFault_Handler(void) -{ - while(1); -} - -/*---------------------------------------------------------------------------- - Default Handler for Exceptions / Interrupts - *----------------------------------------------------------------------------*/ -void Default_Handler(void) -{ - while(1); -} - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic pop -#endif diff --git a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/system_CMSDK_CM7.c b/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/system_CMSDK_CM7.c deleted file mode 100644 index fdfec7a..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/RTE/Device/CMSDK_CM7_DP_VHT/system_CMSDK_CM7.c +++ /dev/null @@ -1,87 +0,0 @@ -/****************************************************************************** - * @file system_CMSDK_CM7.c - * @brief CMSIS System Source File for CMSDK_CM7 Device - ******************************************************************************/ -/* Copyright (c) 2011 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM7) || defined (CMSDK_CM7_VHT) - #include "CMSDK_CM7.h" -#elif defined (CMSDK_CM7_SP) || defined (CMSDK_CM7_SP_VHT) - #include "CMSDK_CM7_SP.h" -#elif defined (CMSDK_CM7_DP) || defined (CMSDK_CM7_DP_VHT) - #include "CMSDK_CM7_DP.h" -#else - #error device not specified! -#endif - - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define XTAL (50000000UL) /* Oscillator frequency */ - -#define SYSTEM_CLOCK (XTAL / 2U) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); -#endif - -#if defined (__FPU_USED) && (__FPU_USED == 1U) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - - SystemCoreClock = SYSTEM_CLOCK; -} diff --git a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/Target.clayer.yml deleted file mode 100644 index 8e3ec74..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/Target.clayer.yml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: Keil::V2M-MPS2_CMx_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: Device:Startup&C Startup - - - component: Keil::Board Support&V2M-MPS2:Common - - component: Keil::CMSIS Driver:USART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/vht_config.txt deleted file mode 100644 index b7f12f3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_DP_VHT_GCC/vht_config.txt +++ /dev/null @@ -1,8 +0,0 @@ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -fvp_mps2.UART0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -fvp_mps2.UART0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -fvp_mps2.UART0.unbuffered_output=1 # (bool , init-time) default = '0' : Unbuffered output -fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -#------------------------------------------------------------------------------ diff --git a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/RTE_Device.h deleted file mode 100644 index 7584efd..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/RTE_Device.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2016 ARM Ltd. - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. Permission is granted to anyone to use this - * software for any purpose, including commercial applications, and to alter - * it and redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - * - * $Date: 25. April 2016 - * $Revision: V1.0.0 - * - * Project: RTE Device Configuration for ARM CMSDK_CM device - * -------------------------------------------------------------------------- */ - -//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART0 (Universal synchronous asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::CMSIS Driver:USART -#define RTE_USART0 1 - - -// USART1 (Universal synchronous asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART -#define RTE_USART1 0 - - -// USART2 (Universal synchronous asynchronous receiver transmitter) [Driver_USART2] -// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART -#define RTE_UART2 0 - - -// USART3 (Universal synchronous asynchronous receiver transmitter) [Driver_USART3] -// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART -#define RTE_UART3 0 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/ac6_arm.sct b/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/ac6_arm.sct deleted file mode 100644 index e1b77e5..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/ac6_arm.sct +++ /dev/null @@ -1,76 +0,0 @@ -#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m7 -xc -; command above MUST be in first line (no comment above!) - -/* -;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------- -*/ - -/*--------------------- Flash Configuration ---------------------------------- -; Flash Configuration -; Flash Base Address <0x0-0xFFFFFFFF:8> -; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - *----------------------------------------------------------------------------*/ -#define __ROM_BASE 0x00000000 -#define __ROM_SIZE 0x00080000 - -/*--------------------- Embedded RAM Configuration --------------------------- -; RAM Configuration -; RAM Base Address <0x0-0xFFFFFFFF:8> -; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - *----------------------------------------------------------------------------*/ -#define __RAM_BASE 0x20000000 -#define __RAM_SIZE 0x00040000 - -/*--------------------- Stack / Heap Configuration --------------------------- -; 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 - -/* -;------------- <<< end of configuration section >>> --------------------------- -*/ - - -/*---------------------------------------------------------------------------- - User Stack & Heap boundary definition - *----------------------------------------------------------------------------*/ -#define __STACK_TOP (__RAM_BASE + __RAM_SIZE) /* starts at end of RAM */ -#define __HEAP_BASE (AlignExpr(+0, 8)) /* starts after RW_RAM section, 8 byte aligned */ - - -/*---------------------------------------------------------------------------- - Scatter File Definitions definition - *----------------------------------------------------------------------------*/ -#define __RO_BASE __ROM_BASE -#define __RO_SIZE __ROM_SIZE - -#define __RW_BASE __RAM_BASE -#define __RW_SIZE (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE) - - -LR_ROM __RO_BASE __RO_SIZE { ; load region size_region - ER_ROM __RO_BASE __RO_SIZE { ; load address = execution address - *.o (RESET, +First) - *(InRoot$$Sections) - .ANY (+RO) - .ANY (+XO) - } - - RW_RAM __RW_BASE __RW_SIZE { ; RW data - .ANY (+RW +ZI) - } - -#if __HEAP_SIZE > 0 - ARM_LIB_HEAP __HEAP_BASE EMPTY __HEAP_SIZE { ; Reserve empty region for heap - } -#endif - - ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE { ; Reserve empty region for stack - } -} diff --git a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/startup_CMSDK_CM7.c b/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/startup_CMSDK_CM7.c deleted file mode 100644 index 82b8c8a..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/startup_CMSDK_CM7.c +++ /dev/null @@ -1,425 +0,0 @@ -/****************************************************************************** - * @file startup_CMSDK_CM7.c - * @brief CMSIS Startup File for CMSDK_M7 Device - ******************************************************************************/ -/* Copyright (c) 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM7) || defined (CMSDK_CM7_VHT) - #include "CMSDK_CM7.h" -#elif defined (CMSDK_CM7_SP) || defined (CMSDK_CM7_SP_VHT) - #include "CMSDK_CM7_SP.h" -#elif defined (CMSDK_CM7_DP) || defined (CMSDK_CM7_DP_VHT) - #include "CMSDK_CM7_DP.h" -#else - #error device not specified! -#endif - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; - -extern __NO_RETURN void __PROGRAM_START(void); - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler (void); - void Default_Handler(void); - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -/* Exceptions */ -void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void HardFault_Handler (void) __attribute__ ((weak)); -void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* Interrupts */ -void UART0RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DUALTIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART_0_1_2_OVF_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ETHERNET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void I2S_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TOUCHSCREEN_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_3_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#if defined CMSDK_CM7_VHT || defined CMSDK_CM7_SP_VHT || defined CMSDK_CM7_DP_VHT -void ARM_VSI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#endif - - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - const VECTOR_TABLE_Type __VECTOR_TABLE[256] __VECTOR_TABLE_ATTRIBUTE = { - (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14 NMI Handler */ - HardFault_Handler, /* -13 Hard Fault Handler */ - MemManage_Handler, /* -12 MPU Fault Handler */ - BusFault_Handler, /* -11 Bus Fault Handler */ - UsageFault_Handler, /* -10 Usage Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5 SVC Handler */ - DebugMon_Handler, /* -4 Debug Monitor Handler */ - 0, /* Reserved */ - PendSV_Handler, /* -2 PendSV Handler */ - SysTick_Handler, /* -1 SysTick Handler */ - - /* Interrupts */ - UART0RX_Handler, /* 0 UART 0 receive interrupt */ - UART0TX_Handler, /* 1 UART 0 transmit interrupt */ - UART1RX_Handler, /* 2 UART 1 receive interrupt */ - UART1TX_Handler, /* 3 UART 1 transmit interrupt */ - UART2RX_Handler, /* 4 UART 2 receive interrupt */ - UART2TX_Handler, /* 5 UART 2 transmit interrupt */ - GPIO0ALL_Handler, /* 6 GPIO 0 combined interrupt */ - GPIO1ALL_Handler, /* 7 GPIO 1 combined interrupt */ - TIMER0_Handler, /* 8 Timer 0 interrupt */ - TIMER1_Handler, /* 9 Timer 1 interrupt */ - DUALTIMER_Handler, /* 10 Dual Timer interrupt */ - SPI_0_1_Handler, /* 11 SPI 0, SPI 1 interrupt */ - UART_0_1_2_OVF_Handler, /* 12 UART overflow (0, 1 & 2) interrupt */ - ETHERNET_Handler, /* 13 Ethernet interrupt */ - I2S_Handler, /* 14 Audio I2S interrupt */ - TOUCHSCREEN_Handler, /* 15 Touch Screen interrupt */ - GPIO2_Handler, /* 16 GPIO 2 combined interrupt */ - GPIO3_Handler, /* 17 GPIO 3 combined interrupt */ - UART3RX_Handler, /* 18 UART 3 receive interrupt */ - UART3TX_Handler, /* 19 UART 3 transmit interrupt */ - UART4RX_Handler, /* 20 UART 4 receive interrupt */ - UART4TX_Handler, /* 21 UART 4 transmit interrupt */ - SPI_2_Handler, /* 22 SPI 2 interrupt */ - SPI_3_4_Handler, /* 23 SPI 3, SPI 4 interrupt */ - GPIO0_0_Handler, /* 24 GPIO 0 individual interrupt ( 0) */ - GPIO0_1_Handler, /* 25 GPIO 0 individual interrupt ( 1) */ - GPIO0_2_Handler, /* 26 GPIO 0 individual interrupt ( 2) */ - GPIO0_3_Handler, /* 27 GPIO 0 individual interrupt ( 3) */ - GPIO0_4_Handler, /* 28 GPIO 0 individual interrupt ( 4) */ - GPIO0_5_Handler, /* 29 GPIO 0 individual interrupt ( 5) */ - GPIO0_6_Handler, /* 30 GPIO 0 individual interrupt ( 6) */ - GPIO0_7_Handler, /* 31 GPIO 0 individual interrupt ( 7) */ - 0, /* 32 Reserved */ - 0, /* 33 Reserved */ - 0, /* 34 Reserved */ - 0, /* 35 Reserved */ - 0, /* 36 Reserved */ - 0, /* 37 Reserved */ - 0, /* 38 Reserved */ - 0, /* 39 Reserved */ - 0, /* 40 Reserved */ - 0, /* 41 Reserved */ - 0, /* 42 Reserved */ - 0, /* 43 Reserved */ - 0, /* 44 Reserved */ - 0, /* 45 Reserved */ - 0, /* 46 Reserved */ - 0, /* 47 Reserved */ - 0, /* 48 Reserved */ - 0, /* 49 Reserved */ - 0, /* 50 Reserved */ - 0, /* 51 Reserved */ - 0, /* 52 Reserved */ - 0, /* 53 Reserved */ - 0, /* 54 Reserved */ - 0, /* 55 Reserved */ - 0, /* 56 Reserved */ - 0, /* 57 Reserved */ - 0, /* 58 Reserved */ - 0, /* 59 Reserved */ - 0, /* 60 Reserved */ - 0, /* 61 Reserved */ - 0, /* 62 Reserved */ - 0, /* 63 Reserved */ - 0, /* 64 Reserved */ - 0, /* 65 Reserved */ - 0, /* 66 Reserved */ - 0, /* 67 Reserved */ - 0, /* 68 Reserved */ - 0, /* 69 Reserved */ - 0, /* 70 Reserved */ - 0, /* 71 Reserved */ - 0, /* 72 Reserved */ - 0, /* 73 Reserved */ - 0, /* 74 Reserved */ - 0, /* 75 Reserved */ - 0, /* 76 Reserved */ - 0, /* 77 Reserved */ - 0, /* 78 Reserved */ - 0, /* 79 Reserved */ - 0, /* 80 Reserved */ - 0, /* 81 Reserved */ - 0, /* 82 Reserved */ - 0, /* 83 Reserved */ - 0, /* 84 Reserved */ - 0, /* 85 Reserved */ - 0, /* 86 Reserved */ - 0, /* 87 Reserved */ - 0, /* 88 Reserved */ - 0, /* 89 Reserved */ - 0, /* 90 Reserved */ - 0, /* 91 Reserved */ - 0, /* 92 Reserved */ - 0, /* 93 Reserved */ - 0, /* 94 Reserved */ - 0, /* 95 Reserved */ - 0, /* 96 Reserved */ - 0, /* 97 Reserved */ - 0, /* 98 Reserved */ - 0, /* 99 Reserved */ - 0, /* 100 Reserved */ - 0, /* 101 Reserved */ - 0, /* 102 Reserved */ - 0, /* 103 Reserved */ - 0, /* 104 Reserved */ - 0, /* 105 Reserved */ - 0, /* 106 Reserved */ - 0, /* 107 Reserved */ - 0, /* 108 Reserved */ - 0, /* 109 Reserved */ - 0, /* 110 Reserved */ - 0, /* 111 Reserved */ - 0, /* 112 Reserved */ - 0, /* 113 Reserved */ - 0, /* 114 Reserved */ - 0, /* 115 Reserved */ - 0, /* 116 Reserved */ - 0, /* 117 Reserved */ - 0, /* 118 Reserved */ - 0, /* 119 Reserved */ - 0, /* 120 Reserved */ - 0, /* 121 Reserved */ - 0, /* 122 Reserved */ - 0, /* 123 Reserved */ - 0, /* 124 Reserved */ - 0, /* 125 Reserved */ - 0, /* 126 Reserved */ - 0, /* 127 Reserved */ - 0, /* 128 Reserved */ - 0, /* 129 Reserved */ - 0, /* 130 Reserved */ - 0, /* 131 Reserved */ - 0, /* 132 Reserved */ - 0, /* 133 Reserved */ - 0, /* 134 Reserved */ - 0, /* 135 Reserved */ - 0, /* 136 Reserved */ - 0, /* 137 Reserved */ - 0, /* 138 Reserved */ - 0, /* 139 Reserved */ - 0, /* 140 Reserved */ - 0, /* 141 Reserved */ - 0, /* 142 Reserved */ - 0, /* 143 Reserved */ - 0, /* 144 Reserved */ - 0, /* 145 Reserved */ - 0, /* 146 Reserved */ - 0, /* 147 Reserved */ - 0, /* 148 Reserved */ - 0, /* 149 Reserved */ - 0, /* 150 Reserved */ - 0, /* 151 Reserved */ - 0, /* 152 Reserved */ - 0, /* 153 Reserved */ - 0, /* 154 Reserved */ - 0, /* 155 Reserved */ - 0, /* 156 Reserved */ - 0, /* 157 Reserved */ - 0, /* 158 Reserved */ - 0, /* 159 Reserved */ - 0, /* 160 Reserved */ - 0, /* 161 Reserved */ - 0, /* 162 Reserved */ - 0, /* 163 Reserved */ - 0, /* 164 Reserved */ - 0, /* 165 Reserved */ - 0, /* 166 Reserved */ - 0, /* 167 Reserved */ - 0, /* 168 Reserved */ - 0, /* 169 Reserved */ - 0, /* 170 Reserved */ - 0, /* 171 Reserved */ - 0, /* 172 Reserved */ - 0, /* 173 Reserved */ - 0, /* 174 Reserved */ - 0, /* 175 Reserved */ - 0, /* 176 Reserved */ - 0, /* 177 Reserved */ - 0, /* 178 Reserved */ - 0, /* 179 Reserved */ - 0, /* 180 Reserved */ - 0, /* 181 Reserved */ - 0, /* 182 Reserved */ - 0, /* 183 Reserved */ - 0, /* 184 Reserved */ - 0, /* 185 Reserved */ - 0, /* 186 Reserved */ - 0, /* 187 Reserved */ - 0, /* 188 Reserved */ - 0, /* 189 Reserved */ - 0, /* 190 Reserved */ - 0, /* 191 Reserved */ - 0, /* 192 Reserved */ - 0, /* 193 Reserved */ - 0, /* 194 Reserved */ - 0, /* 195 Reserved */ - 0, /* 196 Reserved */ - 0, /* 197 Reserved */ - 0, /* 198 Reserved */ - 0, /* 199 Reserved */ - 0, /* 200 Reserved */ - 0, /* 201 Reserved */ - 0, /* 202 Reserved */ - 0, /* 203 Reserved */ - 0, /* 204 Reserved */ - 0, /* 205 Reserved */ - 0, /* 206 Reserved */ - 0, /* 207 Reserved */ - 0, /* 208 Reserved */ - 0, /* 209 Reserved */ - 0, /* 210 Reserved */ - 0, /* 211 Reserved */ - 0, /* 212 Reserved */ - 0, /* 213 Reserved */ - 0, /* 214 Reserved */ - 0, /* 215 Reserved */ - 0, /* 216 Reserved */ - 0, /* 217 Reserved */ - 0, /* 218 Reserved */ - 0, /* 219 Reserved */ - 0, /* 220 Reserved */ - 0, /* 221 Reserved */ - 0, /* 222 Reserved */ - 0, /* 223 Reserved */ -#if defined CMSDK_CM7_VHT || defined CMSDK_CM7_SP_VHT || defined CMSDK_CM7_DP_VHT - ARM_VSI0_Handler, /* 224 VSI 0 interrupt */ - ARM_VSI1_Handler, /* 225 VSI 1 interrupt */ - ARM_VSI2_Handler, /* 226 VSI 2 interrupt */ - ARM_VSI3_Handler, /* 227 VSI 3 interrupt */ - ARM_VSI4_Handler, /* 228 VSI 4 interrupt */ - ARM_VSI5_Handler, /* 229 VSI 5 interrupt */ - ARM_VSI6_Handler, /* 230 VSI 6 interrupt */ - ARM_VSI7_Handler /* 231 VSI 7 interrupt */ -#else - 0, /* 224 Reserved */ - 0, /* 225 Reserved */ - 0, /* 226 Reserved */ - 0, /* 227 Reserved */ - 0, /* 228 Reserved */ - 0, /* 229 Reserved */ - 0, /* 230 Reserved */ - 0 /* 231 Reserved */ -#endif -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler(void) -{ - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmissing-noreturn" -#endif - -/*---------------------------------------------------------------------------- - Hard Fault Handler - *----------------------------------------------------------------------------*/ -void HardFault_Handler(void) -{ - while(1); -} - -/*---------------------------------------------------------------------------- - Default Handler for Exceptions / Interrupts - *----------------------------------------------------------------------------*/ -void Default_Handler(void) -{ - while(1); -} - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic pop -#endif diff --git a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/system_CMSDK_CM7.c b/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/system_CMSDK_CM7.c deleted file mode 100644 index fdfec7a..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/RTE/Device/CMSDK_CM7_SP_VHT/system_CMSDK_CM7.c +++ /dev/null @@ -1,87 +0,0 @@ -/****************************************************************************** - * @file system_CMSDK_CM7.c - * @brief CMSIS System Source File for CMSDK_CM7 Device - ******************************************************************************/ -/* Copyright (c) 2011 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM7) || defined (CMSDK_CM7_VHT) - #include "CMSDK_CM7.h" -#elif defined (CMSDK_CM7_SP) || defined (CMSDK_CM7_SP_VHT) - #include "CMSDK_CM7_SP.h" -#elif defined (CMSDK_CM7_DP) || defined (CMSDK_CM7_DP_VHT) - #include "CMSDK_CM7_DP.h" -#else - #error device not specified! -#endif - - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define XTAL (50000000UL) /* Oscillator frequency */ - -#define SYSTEM_CLOCK (XTAL / 2U) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); -#endif - -#if defined (__FPU_USED) && (__FPU_USED == 1U) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - - SystemCoreClock = SYSTEM_CLOCK; -} diff --git a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/Target.clayer.yml deleted file mode 100644 index 8e3ec74..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/Target.clayer.yml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: Keil::V2M-MPS2_CMx_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: Device:Startup&C Startup - - - component: Keil::Board Support&V2M-MPS2:Common - - component: Keil::CMSIS Driver:USART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/vht_config.txt deleted file mode 100644 index b7f12f3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_AC6/vht_config.txt +++ /dev/null @@ -1,8 +0,0 @@ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -fvp_mps2.UART0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -fvp_mps2.UART0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -fvp_mps2.UART0.unbuffered_output=1 # (bool , init-time) default = '0' : Unbuffered output -fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -#------------------------------------------------------------------------------ diff --git a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/RTE_Device.h b/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/RTE_Device.h deleted file mode 100644 index 7584efd..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/RTE_Device.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2016 ARM Ltd. - * - * This software is provided 'as-is', without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. Permission is granted to anyone to use this - * software for any purpose, including commercial applications, and to alter - * it and redistribute it freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - * - * $Date: 25. April 2016 - * $Revision: V1.0.0 - * - * Project: RTE Device Configuration for ARM CMSDK_CM device - * -------------------------------------------------------------------------- */ - -//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART0 (Universal synchronous asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::CMSIS Driver:USART -#define RTE_USART0 1 - - -// USART1 (Universal synchronous asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::CMSIS Driver:USART -#define RTE_USART1 0 - - -// USART2 (Universal synchronous asynchronous receiver transmitter) [Driver_USART2] -// Configuration settings for Driver_USART2 in component ::CMSIS Driver:USART -#define RTE_UART2 0 - - -// USART3 (Universal synchronous asynchronous receiver transmitter) [Driver_USART3] -// Configuration settings for Driver_USART3 in component ::CMSIS Driver:USART -#define RTE_UART3 0 - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/gcc_arm.ld b/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/gcc_arm.ld deleted file mode 100644 index 59bd7d1..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/gcc_arm.ld +++ /dev/null @@ -1,279 +0,0 @@ -/****************************************************************************** - * @file gcc_arm.ld - * @brief GNU Linker Script for Cortex-M based device - ******************************************************************************/ - -/* -; -------- <<< Use Configuration Wizard in Context Menu >>> ------------------- - */ - -/*---------------------- Flash Configuration ---------------------------------- -; Flash Configuration -; Flash Base Address <0x0-0xFFFFFFFF:8> -; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__ROM_BASE = 0x00000000; -__ROM_SIZE = 0x00400000; - -/*--------------------- Embedded RAM Configuration ---------------------------- -; RAM Configuration -; RAM Base Address <0x0-0xFFFFFFFF:8> -; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__RAM_BASE = 0x20000000; -__RAM_SIZE = 0x00020000; - -/*--------------------- Stack / Heap Configuration ---------------------------- -; Stack / Heap Configuration -; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> -; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> -; - -----------------------------------------------------------------------------*/ -__STACK_SIZE = 0x00000400; -__HEAP_SIZE = 0x00000C00; - -/* -; -------------------- <<< end of configuration section >>> ------------------- - */ - -MEMORY -{ - FLASH (rx) : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE - RAM (rwx) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - KEEP(*(.vectors)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - /* - * SG veneers: - * All SG veneers are placed in the special output section .gnu.sgstubs. Its start address - * must be set, either with the command line option �--section-start� or in a linker script, - * to indicate where to place these veneers in memory. - */ -/* - .gnu.sgstubs : - { - . = ALIGN(32); - } > FLASH -*/ - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - - LONG (__etext) - LONG (__data_start__) - LONG ((__data_end__ - __data_start__) / 4) - - /* Add each additional data section here */ -/* - LONG (__etext2) - LONG (__data2_start__) - LONG ((__data2_end__ - __data2_start__) / 4) -*/ - __copy_table_end__ = .; - } > FLASH - - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG ((__bss_end__ - __bss_start__) / 4) - /* Add each additional bss section here */ -/* - LONG (__bss2_start__) - LONG ((__bss2_end__ - __bss2_start__) / 4) -*/ - __zero_table_end__ = .; - } > FLASH - - /** - * Location counter can end up 2byte aligned with narrow Thumb code but - * __etext is assumed by startup code to be the LMA of a section in RAM - * which must be 4byte aligned - */ - __etext = ALIGN (4); - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.data) - *(.data.*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(4); - /* All data end */ - __data_end__ = .; - - } > RAM - - /* - * Secondary data section, optional - * - * Remember to add each additional data section - * to the .copy.table above to asure proper - * initialization during startup. - */ -/* - __etext2 = ALIGN (4); - - .data2 : AT (__etext2) - { - . = ALIGN(4); - __data2_start__ = .; - *(.data2) - *(.data2.*) - . = ALIGN(4); - __data2_end__ = .; - - } > RAM2 -*/ - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss) - *(.bss.*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM AT > RAM - - /* - * Secondary bss section, optional - * - * Remember to add each additional bss section - * to the .zero.table above to asure proper - * initialization during startup. - */ -/* - .bss2 : - { - . = ALIGN(4); - __bss2_start__ = .; - *(.bss2) - *(.bss2.*) - . = ALIGN(4); - __bss2_end__ = .; - } > RAM2 AT > RAM2 -*/ - - .heap (COPY) : - { - . = ALIGN(8); - __end__ = .; - PROVIDE(end = .); - . = . + __HEAP_SIZE; - . = ALIGN(8); - __HeapLimit = .; - } > RAM - - .stack (ORIGIN(RAM) + LENGTH(RAM) - __STACK_SIZE) (COPY) : - { - . = ALIGN(8); - __StackLimit = .; - . = . + __STACK_SIZE; - . = ALIGN(8); - __StackTop = .; - } > RAM - PROVIDE(__stack = __StackTop); - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/startup_CMSDK_CM7.c b/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/startup_CMSDK_CM7.c deleted file mode 100644 index 82b8c8a..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/startup_CMSDK_CM7.c +++ /dev/null @@ -1,425 +0,0 @@ -/****************************************************************************** - * @file startup_CMSDK_CM7.c - * @brief CMSIS Startup File for CMSDK_M7 Device - ******************************************************************************/ -/* Copyright (c) 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM7) || defined (CMSDK_CM7_VHT) - #include "CMSDK_CM7.h" -#elif defined (CMSDK_CM7_SP) || defined (CMSDK_CM7_SP_VHT) - #include "CMSDK_CM7_SP.h" -#elif defined (CMSDK_CM7_DP) || defined (CMSDK_CM7_DP_VHT) - #include "CMSDK_CM7_DP.h" -#else - #error device not specified! -#endif - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; - -extern __NO_RETURN void __PROGRAM_START(void); - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler (void); - void Default_Handler(void); - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -/* Exceptions */ -void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void HardFault_Handler (void) __attribute__ ((weak)); -void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); - -/* Interrupts */ -void UART0RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART0TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART1TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART2TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO1ALL_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TIMER1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void DUALTIMER_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART_0_1_2_OVF_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ETHERNET_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void I2S_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void TOUCHSCREEN_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART3TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4RX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void UART4TX_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void SPI_3_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void GPIO0_7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#if defined CMSDK_CM7_VHT || defined CMSDK_CM7_SP_VHT || defined CMSDK_CM7_DP_VHT -void ARM_VSI0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -void ARM_VSI7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); -#endif - - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - const VECTOR_TABLE_Type __VECTOR_TABLE[256] __VECTOR_TABLE_ATTRIBUTE = { - (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14 NMI Handler */ - HardFault_Handler, /* -13 Hard Fault Handler */ - MemManage_Handler, /* -12 MPU Fault Handler */ - BusFault_Handler, /* -11 Bus Fault Handler */ - UsageFault_Handler, /* -10 Usage Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5 SVC Handler */ - DebugMon_Handler, /* -4 Debug Monitor Handler */ - 0, /* Reserved */ - PendSV_Handler, /* -2 PendSV Handler */ - SysTick_Handler, /* -1 SysTick Handler */ - - /* Interrupts */ - UART0RX_Handler, /* 0 UART 0 receive interrupt */ - UART0TX_Handler, /* 1 UART 0 transmit interrupt */ - UART1RX_Handler, /* 2 UART 1 receive interrupt */ - UART1TX_Handler, /* 3 UART 1 transmit interrupt */ - UART2RX_Handler, /* 4 UART 2 receive interrupt */ - UART2TX_Handler, /* 5 UART 2 transmit interrupt */ - GPIO0ALL_Handler, /* 6 GPIO 0 combined interrupt */ - GPIO1ALL_Handler, /* 7 GPIO 1 combined interrupt */ - TIMER0_Handler, /* 8 Timer 0 interrupt */ - TIMER1_Handler, /* 9 Timer 1 interrupt */ - DUALTIMER_Handler, /* 10 Dual Timer interrupt */ - SPI_0_1_Handler, /* 11 SPI 0, SPI 1 interrupt */ - UART_0_1_2_OVF_Handler, /* 12 UART overflow (0, 1 & 2) interrupt */ - ETHERNET_Handler, /* 13 Ethernet interrupt */ - I2S_Handler, /* 14 Audio I2S interrupt */ - TOUCHSCREEN_Handler, /* 15 Touch Screen interrupt */ - GPIO2_Handler, /* 16 GPIO 2 combined interrupt */ - GPIO3_Handler, /* 17 GPIO 3 combined interrupt */ - UART3RX_Handler, /* 18 UART 3 receive interrupt */ - UART3TX_Handler, /* 19 UART 3 transmit interrupt */ - UART4RX_Handler, /* 20 UART 4 receive interrupt */ - UART4TX_Handler, /* 21 UART 4 transmit interrupt */ - SPI_2_Handler, /* 22 SPI 2 interrupt */ - SPI_3_4_Handler, /* 23 SPI 3, SPI 4 interrupt */ - GPIO0_0_Handler, /* 24 GPIO 0 individual interrupt ( 0) */ - GPIO0_1_Handler, /* 25 GPIO 0 individual interrupt ( 1) */ - GPIO0_2_Handler, /* 26 GPIO 0 individual interrupt ( 2) */ - GPIO0_3_Handler, /* 27 GPIO 0 individual interrupt ( 3) */ - GPIO0_4_Handler, /* 28 GPIO 0 individual interrupt ( 4) */ - GPIO0_5_Handler, /* 29 GPIO 0 individual interrupt ( 5) */ - GPIO0_6_Handler, /* 30 GPIO 0 individual interrupt ( 6) */ - GPIO0_7_Handler, /* 31 GPIO 0 individual interrupt ( 7) */ - 0, /* 32 Reserved */ - 0, /* 33 Reserved */ - 0, /* 34 Reserved */ - 0, /* 35 Reserved */ - 0, /* 36 Reserved */ - 0, /* 37 Reserved */ - 0, /* 38 Reserved */ - 0, /* 39 Reserved */ - 0, /* 40 Reserved */ - 0, /* 41 Reserved */ - 0, /* 42 Reserved */ - 0, /* 43 Reserved */ - 0, /* 44 Reserved */ - 0, /* 45 Reserved */ - 0, /* 46 Reserved */ - 0, /* 47 Reserved */ - 0, /* 48 Reserved */ - 0, /* 49 Reserved */ - 0, /* 50 Reserved */ - 0, /* 51 Reserved */ - 0, /* 52 Reserved */ - 0, /* 53 Reserved */ - 0, /* 54 Reserved */ - 0, /* 55 Reserved */ - 0, /* 56 Reserved */ - 0, /* 57 Reserved */ - 0, /* 58 Reserved */ - 0, /* 59 Reserved */ - 0, /* 60 Reserved */ - 0, /* 61 Reserved */ - 0, /* 62 Reserved */ - 0, /* 63 Reserved */ - 0, /* 64 Reserved */ - 0, /* 65 Reserved */ - 0, /* 66 Reserved */ - 0, /* 67 Reserved */ - 0, /* 68 Reserved */ - 0, /* 69 Reserved */ - 0, /* 70 Reserved */ - 0, /* 71 Reserved */ - 0, /* 72 Reserved */ - 0, /* 73 Reserved */ - 0, /* 74 Reserved */ - 0, /* 75 Reserved */ - 0, /* 76 Reserved */ - 0, /* 77 Reserved */ - 0, /* 78 Reserved */ - 0, /* 79 Reserved */ - 0, /* 80 Reserved */ - 0, /* 81 Reserved */ - 0, /* 82 Reserved */ - 0, /* 83 Reserved */ - 0, /* 84 Reserved */ - 0, /* 85 Reserved */ - 0, /* 86 Reserved */ - 0, /* 87 Reserved */ - 0, /* 88 Reserved */ - 0, /* 89 Reserved */ - 0, /* 90 Reserved */ - 0, /* 91 Reserved */ - 0, /* 92 Reserved */ - 0, /* 93 Reserved */ - 0, /* 94 Reserved */ - 0, /* 95 Reserved */ - 0, /* 96 Reserved */ - 0, /* 97 Reserved */ - 0, /* 98 Reserved */ - 0, /* 99 Reserved */ - 0, /* 100 Reserved */ - 0, /* 101 Reserved */ - 0, /* 102 Reserved */ - 0, /* 103 Reserved */ - 0, /* 104 Reserved */ - 0, /* 105 Reserved */ - 0, /* 106 Reserved */ - 0, /* 107 Reserved */ - 0, /* 108 Reserved */ - 0, /* 109 Reserved */ - 0, /* 110 Reserved */ - 0, /* 111 Reserved */ - 0, /* 112 Reserved */ - 0, /* 113 Reserved */ - 0, /* 114 Reserved */ - 0, /* 115 Reserved */ - 0, /* 116 Reserved */ - 0, /* 117 Reserved */ - 0, /* 118 Reserved */ - 0, /* 119 Reserved */ - 0, /* 120 Reserved */ - 0, /* 121 Reserved */ - 0, /* 122 Reserved */ - 0, /* 123 Reserved */ - 0, /* 124 Reserved */ - 0, /* 125 Reserved */ - 0, /* 126 Reserved */ - 0, /* 127 Reserved */ - 0, /* 128 Reserved */ - 0, /* 129 Reserved */ - 0, /* 130 Reserved */ - 0, /* 131 Reserved */ - 0, /* 132 Reserved */ - 0, /* 133 Reserved */ - 0, /* 134 Reserved */ - 0, /* 135 Reserved */ - 0, /* 136 Reserved */ - 0, /* 137 Reserved */ - 0, /* 138 Reserved */ - 0, /* 139 Reserved */ - 0, /* 140 Reserved */ - 0, /* 141 Reserved */ - 0, /* 142 Reserved */ - 0, /* 143 Reserved */ - 0, /* 144 Reserved */ - 0, /* 145 Reserved */ - 0, /* 146 Reserved */ - 0, /* 147 Reserved */ - 0, /* 148 Reserved */ - 0, /* 149 Reserved */ - 0, /* 150 Reserved */ - 0, /* 151 Reserved */ - 0, /* 152 Reserved */ - 0, /* 153 Reserved */ - 0, /* 154 Reserved */ - 0, /* 155 Reserved */ - 0, /* 156 Reserved */ - 0, /* 157 Reserved */ - 0, /* 158 Reserved */ - 0, /* 159 Reserved */ - 0, /* 160 Reserved */ - 0, /* 161 Reserved */ - 0, /* 162 Reserved */ - 0, /* 163 Reserved */ - 0, /* 164 Reserved */ - 0, /* 165 Reserved */ - 0, /* 166 Reserved */ - 0, /* 167 Reserved */ - 0, /* 168 Reserved */ - 0, /* 169 Reserved */ - 0, /* 170 Reserved */ - 0, /* 171 Reserved */ - 0, /* 172 Reserved */ - 0, /* 173 Reserved */ - 0, /* 174 Reserved */ - 0, /* 175 Reserved */ - 0, /* 176 Reserved */ - 0, /* 177 Reserved */ - 0, /* 178 Reserved */ - 0, /* 179 Reserved */ - 0, /* 180 Reserved */ - 0, /* 181 Reserved */ - 0, /* 182 Reserved */ - 0, /* 183 Reserved */ - 0, /* 184 Reserved */ - 0, /* 185 Reserved */ - 0, /* 186 Reserved */ - 0, /* 187 Reserved */ - 0, /* 188 Reserved */ - 0, /* 189 Reserved */ - 0, /* 190 Reserved */ - 0, /* 191 Reserved */ - 0, /* 192 Reserved */ - 0, /* 193 Reserved */ - 0, /* 194 Reserved */ - 0, /* 195 Reserved */ - 0, /* 196 Reserved */ - 0, /* 197 Reserved */ - 0, /* 198 Reserved */ - 0, /* 199 Reserved */ - 0, /* 200 Reserved */ - 0, /* 201 Reserved */ - 0, /* 202 Reserved */ - 0, /* 203 Reserved */ - 0, /* 204 Reserved */ - 0, /* 205 Reserved */ - 0, /* 206 Reserved */ - 0, /* 207 Reserved */ - 0, /* 208 Reserved */ - 0, /* 209 Reserved */ - 0, /* 210 Reserved */ - 0, /* 211 Reserved */ - 0, /* 212 Reserved */ - 0, /* 213 Reserved */ - 0, /* 214 Reserved */ - 0, /* 215 Reserved */ - 0, /* 216 Reserved */ - 0, /* 217 Reserved */ - 0, /* 218 Reserved */ - 0, /* 219 Reserved */ - 0, /* 220 Reserved */ - 0, /* 221 Reserved */ - 0, /* 222 Reserved */ - 0, /* 223 Reserved */ -#if defined CMSDK_CM7_VHT || defined CMSDK_CM7_SP_VHT || defined CMSDK_CM7_DP_VHT - ARM_VSI0_Handler, /* 224 VSI 0 interrupt */ - ARM_VSI1_Handler, /* 225 VSI 1 interrupt */ - ARM_VSI2_Handler, /* 226 VSI 2 interrupt */ - ARM_VSI3_Handler, /* 227 VSI 3 interrupt */ - ARM_VSI4_Handler, /* 228 VSI 4 interrupt */ - ARM_VSI5_Handler, /* 229 VSI 5 interrupt */ - ARM_VSI6_Handler, /* 230 VSI 6 interrupt */ - ARM_VSI7_Handler /* 231 VSI 7 interrupt */ -#else - 0, /* 224 Reserved */ - 0, /* 225 Reserved */ - 0, /* 226 Reserved */ - 0, /* 227 Reserved */ - 0, /* 228 Reserved */ - 0, /* 229 Reserved */ - 0, /* 230 Reserved */ - 0 /* 231 Reserved */ -#endif -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -__NO_RETURN void Reset_Handler(void) -{ - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} - - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wmissing-noreturn" -#endif - -/*---------------------------------------------------------------------------- - Hard Fault Handler - *----------------------------------------------------------------------------*/ -void HardFault_Handler(void) -{ - while(1); -} - -/*---------------------------------------------------------------------------- - Default Handler for Exceptions / Interrupts - *----------------------------------------------------------------------------*/ -void Default_Handler(void) -{ - while(1); -} - -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - #pragma clang diagnostic pop -#endif diff --git a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/system_CMSDK_CM7.c b/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/system_CMSDK_CM7.c deleted file mode 100644 index fdfec7a..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/RTE/Device/CMSDK_CM7_SP_VHT/system_CMSDK_CM7.c +++ /dev/null @@ -1,87 +0,0 @@ -/****************************************************************************** - * @file system_CMSDK_CM7.c - * @brief CMSIS System Source File for CMSDK_CM7 Device - ******************************************************************************/ -/* Copyright (c) 2011 - 2022 ARM LIMITED - - 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. - ---------------------------------------------------------------------------*/ - -#if defined (CMSDK_CM7) || defined (CMSDK_CM7_VHT) - #include "CMSDK_CM7.h" -#elif defined (CMSDK_CM7_SP) || defined (CMSDK_CM7_SP_VHT) - #include "CMSDK_CM7_SP.h" -#elif defined (CMSDK_CM7_DP) || defined (CMSDK_CM7_DP_VHT) - #include "CMSDK_CM7_DP.h" -#else - #error device not specified! -#endif - - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ -#define XTAL (50000000UL) /* Oscillator frequency */ - -#define SYSTEM_CLOCK (XTAL / 2U) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ -extern const VECTOR_TABLE_Type __VECTOR_TABLE[256]; - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); -#endif - -#if defined (__FPU_USED) && (__FPU_USED == 1U) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - - SystemCoreClock = SYSTEM_CLOCK; -} diff --git a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/Target.clayer.yml b/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/Target.clayer.yml deleted file mode 100644 index 8e3ec74..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/Target.clayer.yml +++ /dev/null @@ -1,22 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Target - description: Target setup - - # packs: - # - pack: ARM::CMSIS - # - pack: Keil::V2M-MPS2_CMx_BSP - - components: - # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - - component: ARM::CMSIS:CORE - - component: Device:Startup&C Startup - - - component: Keil::Board Support&V2M-MPS2:Common - - component: Keil::CMSIS Driver:USART - - groups: - - group: VHT - files: - - file: ./vht_config.txt diff --git a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/vht_config.txt b/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/vht_config.txt deleted file mode 100644 index b7f12f3..0000000 --- a/tensorflow-test-ng/Layer/Target/CM7_SP_VHT_GCC/vht_config.txt +++ /dev/null @@ -1,8 +0,0 @@ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -fvp_mps2.UART0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -fvp_mps2.UART0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -fvp_mps2.UART0.unbuffered_output=1 # (bool , init-time) default = '0' : Unbuffered output -fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -#------------------------------------------------------------------------------ diff --git a/tensorflow-test-ng/Layer/Test/Test.clayer.yml b/tensorflow-test-ng/Layer/Test/Test.clayer.yml deleted file mode 100644 index be92a23..0000000 --- a/tensorflow-test-ng/Layer/Test/Test.clayer.yml +++ /dev/null @@ -1,23 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.1/tools/projmgr/schemas/clayer.schema.json - -layer: - # type: Test - # name: Tensorflow test sources - description: Validation of TensorFlow Lite Micro specific unit test - - #add-paths: - # - ../../../Include - - components: - - component: tensorflow::Machine Learning:TensorFlow:Kernel Utils - - component: tensorflow::Machine Learning:TensorFlow:Testing - - component: tensorflow::Data Exchange:Serialization:flatbuffers&tensorflow - - component: tensorflow::Data Processing:Math:gemmlowp fixed-point&tensorflow - - component: tensorflow::Data Processing:Math:kissfft&tensorflow - - component: tensorflow::Data Processing:Math:ruy&tensorflow - - groups: - - - group: Unit Test Source files - files: - <-- test_src_files --> diff --git a/tensorflow-test-ng/Project/Validation.cproject.yml b/tensorflow-test-ng/Project/Validation.cproject.yml deleted file mode 100644 index 6cdd5ef..0000000 --- a/tensorflow-test-ng/Project/Validation.cproject.yml +++ /dev/null @@ -1,91 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.2/tools/projmgr/schemas/cproject.schema.json - -project: - layers: - # App: Validation for Reference - - layer: ./Test.clayer.yml - - layer: ../../Layer/App/Validation_Reference/App.clayer.yml - for-type: - - .Reference_AC6 - - .Reference_GC - # App: CMSIS-RTOS2 Validation for FreeRTOS - - layer: ../../Layer/App/Validation_CMSIS-NN/App.clayer.yml - for-type: - - .CMSIS-NN_AC6 - - .CMSIS-NN_GCC - - #Target: CM0plus - - layer: ../../Layer/Target/CM0plus_VHT_AC6/Target.clayer.yml - for-type: - - .Reference_AC6+CM0plus - - .CMSIS-NN_AC6+CM0plus - - layer: ../../Layer/Target/CM0plus_VHT_GCC/Target.clayer.yml - for-type: - - .Reference_GC+CM0plus - - .CMSIS-NN_GCC+CM0plus - - #Target: CM3 - - layer: ../../Layer/Target/CM3_VHT_AC6/Target.clayer.yml - for-type: - - .Reference_AC6+CM3 - - .CMSIS-NN_AC6+CM3 - - layer: ../../Layer/Target/CM3_VHT_GCC/Target.clayer.yml - for-type: - - .Reference_GC+CM3 - - .CMSIS-NN_GCC+CM3 - - #Target: CM4_FP - - layer: ../../Layer/Target/CM4_FP_VHT_AC6/Target.clayer.yml - for-type: - - .Reference_AC6+CM4_FP - - .CMSIS-NN_AC6+CM4_FP - - layer: ../../Layer/Target/CM4_FP_VHT_GCC/Target.clayer.yml - for-type: - - .Reference_GC+CM4_FP - - .CMSIS-NN_GCC+CM4_FP - - #Target: CM7_DP - - layer: ../../Layer/Target/CM7_DP_VHT_AC6/Target.clayer.yml - for-type: - - .Reference_AC6+CM7_DP - - .CMSIS-NN_AC6+CM7_DP - - layer: ../../Layer/Target/CM7_DP_VHT_GCC/Target.clayer.yml - for-type: - - .Reference_GC+CM7_DP - - .CMSIS-NN_GCC+CM7_DP - - #Target: CM7_SP - - layer: ../../Layer/Target/CM7_SP_VHT_AC6/Target.clayer.yml - for-type: - - .Reference_AC6+CM7_SP - - .CMSIS-NN_AC6+CM7_SP - - layer: ../../Layer/Target/CM7_SP_VHT_GCC/Target.clayer.yml - for-type: - - .Reference_GC+CM7_SP - - .CMSIS-NN_GCC+CM7_SP - - #Target: CM23 - - layer: ../../Layer/Target/CM23_VHT_AC6/Target.clayer.yml - for-type: - - .Reference_AC6+CM23 - - .CMSIS-NN_AC6+CM23 - - layer: ../../Layer/Target/CM23_VHT_GCC/Target.clayer.yml - for-type: - - .Reference_GC+CM23 - - .CMSIS-NN_GCC+CM23 - - #Target: CM33_FP - - layer: ../../Layer/Target/CM33_FP_VHT_AC6/Target.clayer.yml - for-type: - - .Reference_AC6+CM33_FP - - .CMSIS-NN_AC6+CM33_FP - - layer: ../../Layer/Target/CM33_FP_VHT_GCC/Target.clayer.yml - for-type: - - .Reference_GC+CM33_FP - - .CMSIS-NN_GCC+CM33_FP - - #Target: CM55 - - layer: ../../Layer/Target/CM55_VHT_AC6/Target.clayer.yml - for-type: - - .Reference_AC6+CM55 - - .CMSIS-NN_AC6+CM55 diff --git a/tensorflow-test-ng/Project/Validation.csolution.yml b/tensorflow-test-ng/Project/Validation.csolution.yml deleted file mode 100644 index 7e1bb29..0000000 --- a/tensorflow-test-ng/Project/Validation.csolution.yml +++ /dev/null @@ -1,172 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Open-CMSIS-Pack/devtools/schemas/projmgr/0.9.2/tools/projmgr/schemas/csolution.schema.json - -solution: - packs: - - pack: ARM::CMSIS@5.9.0 - - pack: tensorflow::tensorflow-lite-micro - - pack: tensorflow::flatbuffers - - pack: tensorflow::ruy - - pack: tensorflow::kissfft - - pack: tensorflow::gemmlowp - - pack: Keil::V2M-MPS2_CMx_BSP@1.8.0 - for-type: - - +CM0plus - - +CM3 - - +CM4_FP - - +CM7_DP - - +CM7_SP - - pack: Keil::V2M-MPS2_IOTKit_BSP@1.5.0 - for-type: - - +CM23 - - +CM33_FP - - pack: ARM::V2M_MPS3_SSE_300_BSP@1.3.0 - for-type: - - +CM55 - - target-types: -# #CM0plus -# - type: CM0plus -# device: CMSDK_CM0plus_VHT -# defines: -# - TST_IRQ_HANDLER_A=TIMER0_Handler -# - TST_IRQ_NUM_A=8 -# - TST_IRQ_HANDLER_B=TIMER1_Handler -# - TST_IRQ_NUM_B=9 -# #CM3 -# - type: CM3 -# device: CMSDK_CM3_VHT -# defines: -# - TST_IRQ_HANDLER_A=TIMER0_Handler -# - TST_IRQ_NUM_A=8 -# - TST_IRQ_HANDLER_B=TIMER1_Handler -# - TST_IRQ_NUM_B=9 -# #CM4_FP -# - type: CM4_FP -# device: CMSDK_CM4_FP_VHT -# defines: -# - TST_IRQ_HANDLER_A=TIMER0_Handler -# - TST_IRQ_NUM_A=8 -# - TST_IRQ_HANDLER_B=TIMER1_Handler -# - TST_IRQ_NUM_B=9 -# misc: -# - compiler: AC6 -# C: [-mfloat-abi=hard, -mfpu=fpv4-sp-d16] -# ASM: [-mfloat-abi=hard, -mfpu=fpv4-sp-d16] -# -# - compiler: GCC -# C: [-mfloat-abi=hard, -mfpu=auto] -# ASM: [-mfloat-abi=hard, -mfpu=auto] -# Link: [-mfloat-abi=hard] -# #CM7_DP -# - type: CM7_DP -# device: CMSDK_CM7_DP_VHT -# defines: -# - TST_IRQ_HANDLER_A=TIMER0_Handler -# - TST_IRQ_NUM_A=8 -# - TST_IRQ_HANDLER_B=TIMER1_Handler -# - TST_IRQ_NUM_B=9 -# misc: -# - compiler: AC6 -# C: [-mfloat-abi=hard, -mfpu=fpv5-d16] -# ASM: [-mfloat-abi=hard, -mfpu=fpv5-d16] -# -# - compiler: GCC -# C: [-mfloat-abi=hard, -mfpu=auto] -# ASM: [-mfloat-abi=hard, -mfpu=auto] -# Link: [-mfloat-abi=hard] -# #CM7_SP -# - type: CM7_SP -# device: CMSDK_CM7_SP_VHT -# defines: -# - TST_IRQ_HANDLER_A=TIMER0_Handler -# - TST_IRQ_NUM_A=8 -# - TST_IRQ_HANDLER_B=TIMER1_Handler -# - TST_IRQ_NUM_B=9 -# misc: -# - compiler: AC6 -# C: [-mfloat-abi=hard, -mfpu=fpv5-sp-d16] -# ASM: [-mfloat-abi=hard, -mfpu=fpv5-sp-d16] -# -# - compiler: GCC -# C: [-mfloat-abi=hard, -mfpu=auto] -# ASM: [-mfloat-abi=hard, -mfpu=auto] -# Link: [-mfloat-abi=hard] -# #CM23 -# - type: CM23 -# device: IOTKit_CM23_VHT -# defines: -# - TST_IRQ_HANDLER_A=NONSEC_WATCHDOG_RESET_Handler -# - TST_IRQ_NUM_A=0 -# - TST_IRQ_HANDLER_B=NONSEC_WATCHDOG_Handler -# - TST_IRQ_NUM_B=1 -# - configENABLE_FPU=0 -# misc: -# - compiler: AC6 -# C: [-mcmse] -# ASM: [-mcmse] -# -# - compiler: GCC -# C: [-mfloat-abi=soft, -mfpu=auto] -# ASM: [-mfloat-abi=soft, -mfpu=auto] -# Link: [-mfloat-abi=soft] -# #CM33_FP -# - type: CM33_FP -# device: IOTKit_CM33_FP_VHT -# defines: -# - TST_IRQ_HANDLER_A=NONSEC_WATCHDOG_RESET_Handler -# - TST_IRQ_NUM_A=0 -# - TST_IRQ_HANDLER_B=NONSEC_WATCHDOG_Handler -# - TST_IRQ_NUM_B=1 -# misc: -# - compiler: AC6 -# C: [-mfloat-abi=hard, -mfpu=fpv5-sp-d16, -mcmse] -# ASM: [-mfloat-abi=hard, -mfpu=fpv5-sp-d16, -mcmse] -# -# - compiler: GCC -# C: [-mfloat-abi=hard, -mfpu=auto] -# ASM: [-mfloat-abi=hard, -mfpu=auto] -# Link: [-mfloat-abi=hard] - #CM55 - - type: CM55 - device: SSE-300-MPS3 - defines: - - TST_IRQ_HANDLER_A=NONSEC_WATCHDOG_RESET_Handler - - TST_IRQ_NUM_A=0 - - TST_IRQ_HANDLER_B=NONSEC_WATCHDOG_Handler - - TST_IRQ_NUM_B=1 - misc: - - compiler: AC6 - C: [-mfloat-abi=hard, -mcmse] - ASM: [-mfloat-abi=hard, -mcmse] - - build-types: - - type: Reference_AC6 - compiler: AC6 - misc: - - compiler: AC6 - C: [-Os, -std=c99, -gdwarf-4, -ffunction-sections] - Link: [--entry=Reset_Handler] - - - type: Reference_GCC - compiler: GCC - misc: - - compiler: GCC - C: [-Os, -std=gnu99, -mapcs-frame, -mthumb-interwork] - Link: [-lm, -specs=nosys.specs, --entry=Reset_Handler] - - - type: CMSIS-NN_AC6 - compiler: AC6 - misc: - - compiler: AC6 - C: [-Os, -std=c99, -gdwarf-4, -ffunction-sections] - Link: [--entry=Reset_Handler] - - - type: CMSIS-NN_GCC - compiler: GCC - misc: - - compiler: GCC - C: [-Os, -std=gnu99, -mapcs-frame, -mthumb-interwork, -masm-syntax-unified] - Link: [-lm, -specs=nosys.specs, --entry=Reset_Handler] - - projects: - - project: ./Validation.cproject.yml diff --git a/tensorflow-test-ng/avh.yml b/tensorflow-test-ng/avh.yml deleted file mode 100644 index 5d26eca..0000000 --- a/tensorflow-test-ng/avh.yml +++ /dev/null @@ -1,49 +0,0 @@ -name: "TensorFlow Lite Micro Unit tests" -workdir: ./ -backend: - aws: - ami-version: ==1.2.3 - instance-type: c5.4xlarge -upload: - - packs/**/* - - Layer/**/* - - Project/**/* - - Source/**/* - - avh_exec_test.py - - exec_suite.sh - - record_test_results.py - -steps: - - run: | - sudo wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 - sudo tar -xvf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 - sudo mv gcc-arm-none-eabi-10-2020-q4-major /opt/gcc-arm-none-eabi-10-2020-q4-major - sudo ln -s /opt/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc /usr/bin/arm-none-eabi-gcc - wget https://github.com/Open-CMSIS-Pack/devtools/releases/download/tools%2Ftoolbox%2F1.0.0/cmsis-toolbox.sh - chmod +x cmsis-toolbox.sh - sudo ./cmsis-toolbox.sh </dev/null)) - $(dirname $(which armcc 2>/dev/null)) - /opt/gcc-arm-none-eabi-10-2020-q4-major/bin - - EOI - source /opt/ctools/etc/setup - cpackget -v init --pack-root /home/ubuntu/packs https://www.keil.com/pack/index.pidx - cpackget pack add tensorflow.tensorflow-lite-micro.1.22.5-rc4 -a - cpackget pack add tensorflow.flatbuffers.1.22.5-rc4 -a - cpackget pack add tensorflow.ruy.1.22.5-rc4 -a - cpackget pack add tensorflow.gemmlowp.1.22.5-rc4 -a - cpackget pack add tensorflow.kissfft.1.22.5-rc4 -a - cpackget pack add Keil.V2M-MPS2_CMx_BSP.1.8.0 -a - cpackget pack add Keil.V2M-IOTKit_BSP.1.5.0 -a - cpackget pack add Keil.V2M-MPS2_IOTKit_BSP.1.5.0 -a - cpackget pack add ARM.V2M_MPS3_SSE_300_BSP.1.3.0 -a - - ./exec_suite.sh > test_results.log 2>&1 - -download: - - test_results.log - - diff --git a/tensorflow-test-ng/avh_exec_test.py b/tensorflow-test-ng/avh_exec_test.py deleted file mode 100644 index 4843807..0000000 --- a/tensorflow-test-ng/avh_exec_test.py +++ /dev/null @@ -1,56 +0,0 @@ - -import argparse -import os -import sys -import xml.etree.ElementTree as ET - -vhtdict = { - "CMSDK_CM0plus_VHT": "VHT_MPS2_Cortex-M0plus", - "CMSDK_CM3_VHT" : "VHT_MPS2_Cortex-M3", - "CMSDK_CM4_FP_VHT" : "VHT_MPS2_Cortex-M4", - "CMSDK_CM7_DP_VHT" : "VHT_MPS2_Cortex-M7", - "CMSDK_CM7_SP_VHT" : "VHT_MPS2_Cortex-M7", - "IOTKit_CM23_VHT" : "VHT_MPS2_Cortex-M23", - "IOTKit_CM33_FP_VHT" : "VHT_MPS2_Cortex-M33", - "SSE-300-MPS3" : "VHT_MPS3_Corstone_SSE-300" -} -def main(): -#get argument from command line - parser = argparse.ArgumentParser( - description="Execute a test package on the correct VHT.") - # add the --project option - parser.add_argument("--project", type=str, default=os.path.curdir, - help="CPRJ with test") - - # Check if path in --project exists - if not os.path.exists(parser.parse_args().project): - print("Path " + parser.parse_args().project + " does not exist") - sys.exit(1) - # print --project - print("Working on project: " + parser.parse_args().project) - basepath = "./" + os.path.dirname(parser.parse_args().project) - # Open CPRJ file as XML file - tree = ET.parse(parser.parse_args().project) - root = tree.getroot() - #retrieve output path - output_xml = root.findall('./target/output')[0] - executable_name = output_xml.get('name') - output_path = os.path.join(basepath, output_xml.get('outdir')) - compiler_xml = root.findall('./compilers/compiler')[0] - compiler = compiler_xml.get('name') - if compiler == "AC6": - executable_name += ".axf" - else: - executable_name += ".elf" - print(executable_name) - # Check if outpath exists - if not os.path.exists(output_path): - print("Path " + output_path + " does not exist") - # sys.exit(1) - target_xml = root.findall('./target')[0] - device_name = target_xml.get('Dname') - print(device_name, "executed on ", vhtdict[device_name]) - os.system(vhtdict[device_name] + " --timelimit=2 -a " + output_path + "/" + executable_name) - -if __name__ == '__main__': - main() diff --git a/tensorflow-test-ng/copy_sources.py b/tensorflow-test-ng/copy_sources.py deleted file mode 100644 index b310647..0000000 --- a/tensorflow-test-ng/copy_sources.py +++ /dev/null @@ -1,80 +0,0 @@ - -import os -import sys -import subprocess -import datetime -import argparse -import shutil -from time import perf_counter -import yaml -import re -import six - -# get the datetime, when the script got started -datetime_string = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") -# get the script's directory, where template and work folders are located / created -test_on_arm_base = os.path.dirname(os.path.abspath(sys.argv[0])) - -last_stderr = "" -last_stdout = "" - - -def main(): - test_error = 0 - # create the argument parser - parser = argparse.ArgumentParser( - description="Copy test sources from tensorflow repo to sources in test package.") - # add the --tflm_path option - parser.add_argument("--tflm_path", type=str, default=os.path.curdir, - help="path, basepath for sources from inventory") - parser.add_argument("--out_path", type=str, default=os.path.curdir, - help="path, output path for sources from inventory") - parser.add_argument("--inventory", type=str, default="", - help="yml file with a list of tests and sources for complex tests") - - # Check if path in --tflm_path exists - if not os.path.exists(parser.parse_args().tflm_path): - print("Path " + parser.parse_args().tflm_path + " does not exist") - sys.exit(1) - # print --tflm_path - print("Working on tflm_path: " + parser.parse_args().tflm_path) - - # Check if path in --out_path exists - if not os.path.exists(parser.parse_args().out_path): - print("Path " + parser.parse_args().out_path + " does not exist") - sys.exit(1) - # print --out_path - print("Working on out_path: " + parser.parse_args().out_path) - - # Check if inventory file exists - if not os.path.exists(parser.parse_args().inventory): - print("File " + parser.parse_args().inventory + " does not exist") - sys.exit(1) - # print --inventory - print("Working on inventory: " + parser.parse_args().inventory) - - # Read inventory file - with open(parser.parse_args().inventory, 'r') as stream: - inventory = yaml.safe_load(stream) - - if inventory: - for key, value in inventory.items(): - print(">>>TEST Test Suite: ", value['readable']) - for test in value['tests']: - testname = [key for key in test.keys()][0] - #cproj_file_name = create_cproj(cvariant, toolchain, test_device, test['sources'], testname, tflm_path) - print(testname) - for src in test['sources']: - src_path = os.path.join(parser.parse_args().tflm_path, src) - dst_path = os.path.join(parser.parse_args().out_path, src) - if os.path.exists(src_path): - #replace extension from .cc to .cpp - if src_path.endswith(".cc"): - dst_path = dst_path.replace(".cc", ".cpp") - print(src_path, " ==> " , dst_path) - os.makedirs(os.path.dirname(dst_path), exist_ok=True) - shutil.copy(src_path, dst_path) - - -if __name__ == '__main__': - main() diff --git a/tensorflow-test-ng/create_tests.py b/tensorflow-test-ng/create_tests.py deleted file mode 100644 index 847d909..0000000 --- a/tensorflow-test-ng/create_tests.py +++ /dev/null @@ -1,98 +0,0 @@ - -import os -import sys -import subprocess -import datetime -import argparse -import shutil -from time import perf_counter -import yaml -import re -import six - -# get the datetime, when the script got started -datetime_string = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") -# get the script's directory, where template and work folders are located / created -test_on_arm_base = os.path.dirname(os.path.abspath(sys.argv[0])) - -last_stderr = "" -last_stdout = "" - -def sanitize_xml(unsanitized): - """Uses a whitelist to avoid generating bad XML.""" - return re.sub(r'[^a-zA-Z0-9+_\-/\\.]', '', six.ensure_str(unsanitized)) - - -def write_file_list (file_list, file_name): - with open(file_name) as f: - s = f.read() - if "<-- test_src_files -->" not in s: - print('Error when writing Test.clayer.yml') - return - with open(file_name, 'w') as f: - print('Writing Test.clayer.yml') - s = s.replace("<-- test_src_files -->", file_list) - f.write(s) - -def make_file_list(base_path ,srcs_list): - replace_srcs = '' - srcs_list = set(srcs_list) - for src in srcs_list: - if not src: - continue - clean_src = sanitize_xml(os.path.join(base_path,src)) - #replace extension .cc with .cpp - if clean_src.endswith(".cc"): - clean_src = clean_src.replace(".cc", ".cpp") - replace_srcs += ' - file: ' + clean_src + ' \n' - return replace_srcs - -def main(): - test_error = 0 - # create the argument parser - parser = argparse.ArgumentParser( - description="Run tensorflow-lite-micro tests on Arm VFPs.") - parser.add_argument("--out_path", type=str, default=os.path.curdir, - help="path, output path for sources from inventory") - parser.add_argument("--inventory", type=str, default="", - help="yml file with a list of tests and sources for complex tests") - - - # Check if path in --out_path exists - if not os.path.exists(parser.parse_args().out_path): - print("Path " + parser.parse_args().out_path + " does not exist") - sys.exit(1) - # print --out_path - print("Working on out_path: " + parser.parse_args().out_path) - - # Check if inventory file exists - if not os.path.exists(parser.parse_args().inventory): - print("File " + parser.parse_args().inventory + " does not exist") - sys.exit(1) - # print --inventory - print("Working on inventory: " + parser.parse_args().inventory) - - # Read inventory file - with open(parser.parse_args().inventory, 'r') as stream: - inventory = yaml.safe_load(stream) - - if inventory: - for key, value in inventory.items(): - print(">>>TEST Test Suite: ", value['readable']) - for test in value['tests']: - testname = [key for key in test.keys()][0] - #cproj_file_name = create_cproj(cvariant, toolchain, test_device, test['sources'], testname, tflm_path) - print(testname) - src_yml = make_file_list("../../Source/", test['sources']) - test_dir = os.path.join(parser.parse_args().out_path, testname) - #create directory for test in out_path - os.makedirs(test_dir, exist_ok=True) - shutil.copy(os.path.dirname(__file__)+"/Project/Validation.cproject.yml", test_dir) - shutil.copy(os.path.dirname(__file__)+"/Project/Validation.csolution.yml", test_dir) - shutil.copy(os.path.dirname(__file__)+"/Layer/Test/Test.clayer.yml", test_dir) - # replace string in Test.clayer.yml - write_file_list(src_yml, os.path.join(test_dir, "Test.clayer.yml")) - - -if __name__ == '__main__': - main() diff --git a/tensorflow-test-ng/exec_suite.sh b/tensorflow-test-ng/exec_suite.sh deleted file mode 100755 index 7d323a7..0000000 --- a/tensorflow-test-ng/exec_suite.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh - -# Iterate through all folders in ./gen -# and generate test projects -for folder in ./gen/*; do - # increment counter - echo Package $folder - # Generate test project - csolution convert -n -s $folder/Validation.csolution.yml -o $folder/ -done - -for folder in ./gen/*; do - for target in $folder/*; do - #find .cprj file in target folder - cprj_file=$(find $target -name "*.cprj") - #if cprj file exists - if [ -f "$cprj_file" ]; then - echo "Building: " $cprj_file - cbuild $cprj_file #> $target/build.log - python3 avh_exec_test.py --project=$cprj_file > $target/test_result.log - python3 record_test_results.py --results=$target/test_result.log - fi - done -done diff --git a/tensorflow-test-ng/export_test_report.py b/tensorflow-test-ng/export_test_report.py deleted file mode 100644 index fe66870..0000000 --- a/tensorflow-test-ng/export_test_report.py +++ /dev/null @@ -1,36 +0,0 @@ -import sqlite3 -import argparse -import os - -def main(): - test_error = 0 - # create the argument parser - parser = argparse.ArgumentParser( - description="Export various test report files from test results SQLite database.") - parser.add_argument("--out_path", type=str, default=os.path.curdir, - help="path, output path for reports") - parser.add_argument("--report", type=str, default="test_results.db", - help="yml file with a list of tests and sources for complex tests") - - # Check if path in --out_path exists - if not os.path.exists(parser.parse_args().out_path): - print("Path " + parser.parse_args().out_path + " does not exist") - sys.exit(1) - - # Check if report file exists - if not os.path.exists(parser.parse_args().report): - print("File " + parser.parse_args().report + " does not exist") - sys.exit(1) - - # Read report file as SQLite database - conn = sqlite3.connect(parser.parse_args().report) - c = conn.cursor() - c.execute("SELECT * FROM results WHERE testname = 'ALL_TESTS'") - test_results = c.fetchall() - conn.close() - print(test_results) - - - -if __name__ == '__main__': - main() diff --git a/tensorflow-test-ng/generic_tests.yml b/tensorflow-test-ng/generic_tests.yml deleted file mode 100644 index 8b61eea..0000000 --- a/tensorflow-test-ng/generic_tests.yml +++ /dev/null @@ -1,44 +0,0 @@ -generic_tests: - readable: "Generic Components Unit Tests" - report: generic.junit - tests: - - memory_arena_threshold_test: - sources: - - tensorflow/lite/micro/memory_arena_threshold_test.cc - - tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.cc - - tensorflow/lite/micro/testing/test_conv_model.cc - - memory_helpers_test: - sources: - - tensorflow/lite/micro/memory_helpers_test.cc - - micro_allocator_test: - sources: - - tensorflow/lite/micro/micro_allocator_test.cc - - tensorflow/lite/micro/testing/test_conv_model.cc - - micro_error_reporter_test: - sources: - - tensorflow/lite/micro/micro_error_reporter_test.cc - - micro_interpreter_test: - sources: - - tensorflow/lite/micro/micro_interpreter_test.cc - - micro_mutable_op_resolver_test: - sources: - - tensorflow/lite/micro/micro_mutable_op_resolver_test.cc - - micro_string_test: - sources: - - tensorflow/lite/micro/micro_string_test.cc - - micro_time_test: - sources: - - tensorflow/lite/micro/micro_time_test.cc - - micro_utils_test: - sources: - - tensorflow/lite/micro/micro_utils_test.cc - - recording_micro_allocator_test: - sources: - - tensorflow/lite/micro/recording_micro_allocator_test.cc - - tensorflow/lite/micro/testing/test_conv_model.cc - - recording_simple_memory_allocator_test: - sources: - - tensorflow/lite/micro/recording_simple_memory_allocator_test.cc - - simple_memory_allocator_test: - sources: - - tensorflow/lite/micro/simple_memory_allocator_test.cc diff --git a/tensorflow-test-ng/kernel_tests_cmsis.yml b/tensorflow-test-ng/kernel_tests_cmsis.yml deleted file mode 100644 index 00f5354..0000000 --- a/tensorflow-test-ng/kernel_tests_cmsis.yml +++ /dev/null @@ -1,203 +0,0 @@ -kernel_unit_tests: - readable: "Kernel Unit Tests - CMSIS-NN" - report: kernel.cmsisnn.junit - tests: - - activations_test: - sources: - - tensorflow/lite/micro/kernels/activations_test.cc - - add_test: - sources: - - tensorflow/lite/micro/kernels/add_test.cc - - add_n_test: - sources: - - tensorflow/lite/micro/kernels/add_n_test.cc - - arg_min_max_test: - sources: - - tensorflow/lite/micro/kernels/arg_min_max_test.cc - - batch_to_space_nd_test: - sources: - - tensorflow/lite/micro/kernels/batch_to_space_nd_test.cc - - cast_test: - sources: - - tensorflow/lite/micro/kernels/cast_test.cc - - ceil_test: - sources: - - tensorflow/lite/micro/kernels/ceil_test.cc - - circular_buffer_test: - sources: - - tensorflow/lite/micro/kernels/circular_buffer_test.cc - - tensorflow/lite/micro/kernels/circular_buffer_flexbuffers_generated_data.cc - - comparisons_test: - sources: - - tensorflow/lite/micro/kernels/comparisons_test.cc - - concatenation_test: - sources: - - tensorflow/lite/micro/kernels/concatenation_test.cc - - conv_test: - sources: - - tensorflow/lite/micro/kernels/conv_test.cc - - tensorflow/lite/micro/kernels/conv_test_common.cc - - cumsum_test: - sources: - - tensorflow/lite/micro/kernels/cumsum_test.cc - - depth_to_space_test: - sources: - - tensorflow/lite/micro/kernels/depth_to_space_test.cc - - depthwise_conv_test: - sources: - - tensorflow/lite/micro/kernels/depthwise_conv_test.cc - - dequantize_test: - sources: - - tensorflow/lite/micro/kernels/dequantize_test.cc - - detection_postprocess_test: - sources: - - tensorflow/lite/micro/kernels/detection_postprocess_test.cc - - tensorflow/lite/micro/kernels/detection_postprocess_flexbuffers_generated_data.cc - - elementwise_test: - sources: - - tensorflow/lite/micro/kernels/elementwise_test.cc - - elu_test: - sources: - - tensorflow/lite/micro/kernels/elu_test.cc - - exp_test: - sources: - - tensorflow/lite/micro/kernels/exp_test.cc - - expand_dims_test: - sources: - - tensorflow/lite/micro/kernels/expand_dims_test.cc - - fill_test: - sources: - - tensorflow/lite/micro/kernels/fill_test.cc - - floor_test: - sources: - - tensorflow/lite/micro/kernels/floor_test.cc - - floor_div_test: - sources: - - tensorflow/lite/micro/kernels/floor_div_test.cc - - floor_mod_test: - sources: - - tensorflow/lite/micro/kernels/floor_mod_test.cc - - fully_connected_test: - sources: - - tensorflow/lite/micro/kernels/fully_connected_test.cc - - gather_test: - sources: - - tensorflow/lite/micro/kernels/gather_test.cc - - gather_nd_test: - sources: - - tensorflow/lite/micro/kernels/gather_nd_test.cc - - hard_swish_test: - sources: - - tensorflow/lite/micro/kernels/hard_swish_test.cc - - l2norm_test: - sources: - - tensorflow/lite/micro/kernels/l2norm_test.cc - - l2_pool_2d_test: - sources: - - tensorflow/lite/micro/kernels/l2_pool_2d_test.cc - - leaky_relu_test: - sources: - - tensorflow/lite/micro/kernels/leaky_relu_test.cc - - logical_test: - sources: - - tensorflow/lite/micro/kernels/logical_test.cc - - logistic_test: - sources: - - tensorflow/lite/micro/kernels/logistic_test.cc - - log_softmax_test: - sources: - - tensorflow/lite/micro/kernels/log_softmax_test.cc - - maximum_minimum_test: - sources: - - tensorflow/lite/micro/kernels/maximum_minimum_test.cc - - mul_test: - sources: - - tensorflow/lite/micro/kernels/mul_test.cc - - neg_test: - sources: - - tensorflow/lite/micro/kernels/neg_test.cc - - pack_test: - sources: - - tensorflow/lite/micro/kernels/pack_test.cc - - pad_test: - sources: - - tensorflow/lite/micro/kernels/pad_test.cc - - pooling_test: - sources: - - tensorflow/lite/micro/kernels/pooling_test.cc - - prelu_test: - sources: - - tensorflow/lite/micro/kernels/prelu_test.cc - - quantization_util_test: - sources: - - tensorflow/lite/micro/kernels/quantization_util_test.cc - - quantize_test: - sources: - - tensorflow/lite/micro/kernels/quantize_test.cc - - reduce_test: - sources: - - tensorflow/lite/micro/kernels/reduce_test.cc - - reshape_test: - sources: - - tensorflow/lite/micro/kernels/reshape_test.cc - - resize_bilinear_test: - sources: - - tensorflow/lite/micro/kernels/resize_bilinear_test.cc - - resize_nearest_neighbor_test: - sources: - - tensorflow/lite/micro/kernels/resize_nearest_neighbor_test.cc - - round_test: - sources: - - tensorflow/lite/micro/kernels/round_test.cc - - shape_test: - sources: - - tensorflow/lite/micro/kernels/shape_test.cc - - softmax_test: - sources: - - tensorflow/lite/micro/kernels/softmax_test.cc - - space_to_batch_nd_test: - sources: - - tensorflow/lite/micro/kernels/space_to_batch_nd_test.cc - - space_to_depth_test: - sources: - - tensorflow/lite/micro/kernels/space_to_depth_test.cc - - split_test: - sources: - - tensorflow/lite/micro/kernels/split_test.cc - - split_v_test: - sources: - - tensorflow/lite/micro/kernels/split_v_test.cc - - squeeze_test: - sources: - - tensorflow/lite/micro/kernels/squeeze_test.cc - - strided_slice_test: - sources: - - tensorflow/lite/micro/kernels/strided_slice_test.cc - - sub_test: - sources: - - tensorflow/lite/micro/kernels/sub_test.cc - - svdf_test: - sources: - - tensorflow/lite/micro/kernels/svdf_test.cc - - tanh_test: - sources: - - tensorflow/lite/micro/kernels/tanh_test.cc - - transpose_test: - sources: - - tensorflow/lite/micro/kernels/transpose_test.cc - - transpose_conv_test: - sources: - - tensorflow/lite/micro/kernels/transpose_conv_test.cc - - tensorflow/lite/micro/kernels/conv_test_common.cc - - unpack_test: - sources: - - tensorflow/lite/micro/kernels/unpack_test.cc - - zeros_like_test: - sources: - - tensorflow/lite/micro/kernels/zeros_like_test.cc - - greedy_memory_planner_test: - sources: - - tensorflow/lite/micro/memory_planner/greedy_memory_planner_test.cc - - linear_memory_planner_test: - sources: - - tensorflow/lite/micro/memory_planner/linear_memory_planner_test.c diff --git a/tensorflow-test-ng/kernel_tests_ethos.yml b/tensorflow-test-ng/kernel_tests_ethos.yml deleted file mode 100644 index 161e423..0000000 --- a/tensorflow-test-ng/kernel_tests_ethos.yml +++ /dev/null @@ -1,203 +0,0 @@ -kernel_unit_tests: - readable: "Kernel Unit Tests - Ethos-U" - report: kernel.ethos.junit - tests: - - activations_test: - sources: - - tensorflow/lite/micro/kernels/activations_test.cc - - add_test: - sources: - - tensorflow/lite/micro/kernels/add_test.cc - - add_n_test: - sources: - - tensorflow/lite/micro/kernels/add_n_test.cc - - arg_min_max_test: - sources: - - tensorflow/lite/micro/kernels/arg_min_max_test.cc - - batch_to_space_nd_test: - sources: - - tensorflow/lite/micro/kernels/batch_to_space_nd_test.cc - - cast_test: - sources: - - tensorflow/lite/micro/kernels/cast_test.cc - - ceil_test: - sources: - - tensorflow/lite/micro/kernels/ceil_test.cc - - circular_buffer_test: - sources: - - tensorflow/lite/micro/kernels/circular_buffer_test.cc - - tensorflow/lite/micro/kernels/circular_buffer_flexbuffers_generated_data.cc - - comparisons_test: - sources: - - tensorflow/lite/micro/kernels/comparisons_test.cc - - concatenation_test: - sources: - - tensorflow/lite/micro/kernels/concatenation_test.cc - - conv_test: - sources: - - tensorflow/lite/micro/kernels/conv_test.cc - - tensorflow/lite/micro/kernels/conv_test_common.cc - - cumsum_test: - sources: - - tensorflow/lite/micro/kernels/cumsum_test.cc - - depth_to_space_test: - sources: - - tensorflow/lite/micro/kernels/depth_to_space_test.cc - - depthwise_conv_test: - sources: - - tensorflow/lite/micro/kernels/depthwise_conv_test.cc - - dequantize_test: - sources: - - tensorflow/lite/micro/kernels/dequantize_test.cc - - detection_postprocess_test: - sources: - - tensorflow/lite/micro/kernels/detection_postprocess_test.cc - - tensorflow/lite/micro/kernels/detection_postprocess_flexbuffers_generated_data.cc - - elementwise_test: - sources: - - tensorflow/lite/micro/kernels/elementwise_test.cc - - elu_test: - sources: - - tensorflow/lite/micro/kernels/elu_test.cc - - exp_test: - sources: - - tensorflow/lite/micro/kernels/exp_test.cc - - expand_dims_test: - sources: - - tensorflow/lite/micro/kernels/expand_dims_test.cc - - fill_test: - sources: - - tensorflow/lite/micro/kernels/fill_test.cc - - floor_test: - sources: - - tensorflow/lite/micro/kernels/floor_test.cc - - floor_div_test: - sources: - - tensorflow/lite/micro/kernels/floor_div_test.cc - - floor_mod_test: - sources: - - tensorflow/lite/micro/kernels/floor_mod_test.cc - - fully_connected_test: - sources: - - tensorflow/lite/micro/kernels/fully_connected_test.cc - - gather_test: - sources: - - tensorflow/lite/micro/kernels/gather_test.cc - - gather_nd_test: - sources: - - tensorflow/lite/micro/kernels/gather_nd_test.cc - - hard_swish_test: - sources: - - tensorflow/lite/micro/kernels/hard_swish_test.cc - - l2norm_test: - sources: - - tensorflow/lite/micro/kernels/l2norm_test.cc - - l2_pool_2d_test: - sources: - - tensorflow/lite/micro/kernels/l2_pool_2d_test.cc - - leaky_relu_test: - sources: - - tensorflow/lite/micro/kernels/leaky_relu_test.cc - - logical_test: - sources: - - tensorflow/lite/micro/kernels/logical_test.cc - - logistic_test: - sources: - - tensorflow/lite/micro/kernels/logistic_test.cc - - log_softmax_test: - sources: - - tensorflow/lite/micro/kernels/log_softmax_test.cc - - maximum_minimum_test: - sources: - - tensorflow/lite/micro/kernels/maximum_minimum_test.cc - - mul_test: - sources: - - tensorflow/lite/micro/kernels/mul_test.cc - - neg_test: - sources: - - tensorflow/lite/micro/kernels/neg_test.cc - - pack_test: - sources: - - tensorflow/lite/micro/kernels/pack_test.cc - - pad_test: - sources: - - tensorflow/lite/micro/kernels/pad_test.cc - - pooling_test: - sources: - - tensorflow/lite/micro/kernels/pooling_test.cc - - prelu_test: - sources: - - tensorflow/lite/micro/kernels/prelu_test.cc - - quantization_util_test: - sources: - - tensorflow/lite/micro/kernels/quantization_util_test.cc - - quantize_test: - sources: - - tensorflow/lite/micro/kernels/quantize_test.cc - - reduce_test: - sources: - - tensorflow/lite/micro/kernels/reduce_test.cc - - reshape_test: - sources: - - tensorflow/lite/micro/kernels/reshape_test.cc - - resize_bilinear_test: - sources: - - tensorflow/lite/micro/kernels/resize_bilinear_test.cc - - resize_nearest_neighbor_test: - sources: - - tensorflow/lite/micro/kernels/resize_nearest_neighbor_test.cc - - round_test: - sources: - - tensorflow/lite/micro/kernels/round_test.cc - - shape_test: - sources: - - tensorflow/lite/micro/kernels/shape_test.cc - - softmax_test: - sources: - - tensorflow/lite/micro/kernels/softmax_test.cc - - space_to_batch_nd_test: - sources: - - tensorflow/lite/micro/kernels/space_to_batch_nd_test.cc - - space_to_depth_test: - sources: - - tensorflow/lite/micro/kernels/space_to_depth_test.cc - - split_test: - sources: - - tensorflow/lite/micro/kernels/split_test.cc - - split_v_test: - sources: - - tensorflow/lite/micro/kernels/split_v_test.cc - - squeeze_test: - sources: - - tensorflow/lite/micro/kernels/squeeze_test.cc - - strided_slice_test: - sources: - - tensorflow/lite/micro/kernels/strided_slice_test.cc - - sub_test: - sources: - - tensorflow/lite/micro/kernels/sub_test.cc - - svdf_test: - sources: - - tensorflow/lite/micro/kernels/svdf_test.cc - - tanh_test: - sources: - - tensorflow/lite/micro/kernels/tanh_test.cc - - transpose_test: - sources: - - tensorflow/lite/micro/kernels/transpose_test.cc - - transpose_conv_test: - sources: - - tensorflow/lite/micro/kernels/transpose_conv_test.cc - - tensorflow/lite/micro/kernels/conv_test_common.cc - - unpack_test: - sources: - - tensorflow/lite/micro/kernels/unpack_test.cc - - zeros_like_test: - sources: - - tensorflow/lite/micro/kernels/zeros_like_test.cc - - lanner/greedy_memory_planner_test: - sources: - - tensorflow/lite/micro/memory_planner/greedy_memory_planner_test.cc - - lanner/linear_memory_planner_te: - sources: - - tensorflow/lite/micro/memory_planner/linear_memory_planner_test.c \ No newline at end of file diff --git a/tensorflow-test-ng/kernel_tests_reference.yml b/tensorflow-test-ng/kernel_tests_reference.yml deleted file mode 100644 index 11a9aab..0000000 --- a/tensorflow-test-ng/kernel_tests_reference.yml +++ /dev/null @@ -1,203 +0,0 @@ -kernel_unit_tests: - readable: "Kernel Unit Tests Reference" - report: kernel.reference.junit - tests: - - activations_test: - sources: - - tensorflow/lite/micro/kernels/activations_test.cc - - add_test: - sources: - - tensorflow/lite/micro/kernels/add_test.cc - - add_n_test: - sources: - - tensorflow/lite/micro/kernels/add_n_test.cc - - arg_min_max_test: - sources: - - tensorflow/lite/micro/kernels/arg_min_max_test.cc - - batch_to_space_nd_test: - sources: - - tensorflow/lite/micro/kernels/batch_to_space_nd_test.cc - - cast_test: - sources: - - tensorflow/lite/micro/kernels/cast_test.cc - - ceil_test: - sources: - - tensorflow/lite/micro/kernels/ceil_test.cc - - circular_buffer_test: - sources: - - tensorflow/lite/micro/kernels/circular_buffer_test.cc - - tensorflow/lite/micro/kernels/circular_buffer_flexbuffers_generated_data.cc - - comparisons_test: - sources: - - tensorflow/lite/micro/kernels/comparisons_test.cc - - concatenation_test: - sources: - - tensorflow/lite/micro/kernels/concatenation_test.cc - - conv_test: - sources: - - tensorflow/lite/micro/kernels/conv_test.cc - - tensorflow/lite/micro/kernels/conv_test_common.cc - - cumsum_test: - sources: - - tensorflow/lite/micro/kernels/cumsum_test.cc - - depth_to_space_test: - sources: - - tensorflow/lite/micro/kernels/depth_to_space_test.cc - - depthwise_conv_test: - sources: - - tensorflow/lite/micro/kernels/depthwise_conv_test.cc - - dequantize_test: - sources: - - tensorflow/lite/micro/kernels/dequantize_test.cc - - detection_postprocess_test: - sources: - - tensorflow/lite/micro/kernels/detection_postprocess_test.cc - - tensorflow/lite/micro/kernels/detection_postprocess_flexbuffers_generated_data.cc - - elementwise_test: - sources: - - tensorflow/lite/micro/kernels/elementwise_test.cc - - elu_test: - sources: - - tensorflow/lite/micro/kernels/elu_test.cc - - exp_test: - sources: - - tensorflow/lite/micro/kernels/exp_test.cc - - expand_dims_test: - sources: - - tensorflow/lite/micro/kernels/expand_dims_test.cc - - fill_test: - sources: - - tensorflow/lite/micro/kernels/fill_test.cc - - floor_test: - sources: - - tensorflow/lite/micro/kernels/floor_test.cc - - floor_div_test: - sources: - - tensorflow/lite/micro/kernels/floor_div_test.cc - - floor_mod_test: - sources: - - tensorflow/lite/micro/kernels/floor_mod_test.cc - - fully_connected_test: - sources: - - tensorflow/lite/micro/kernels/fully_connected_test.cc - - gather_test: - sources: - - tensorflow/lite/micro/kernels/gather_test.cc - - gather_nd_test: - sources: - - tensorflow/lite/micro/kernels/gather_nd_test.cc - - hard_swish_test: - sources: - - tensorflow/lite/micro/kernels/hard_swish_test.cc - - l2norm_test: - sources: - - tensorflow/lite/micro/kernels/l2norm_test.cc - - l2_pool_2d_test: - sources: - - tensorflow/lite/micro/kernels/l2_pool_2d_test.cc - - leaky_relu_test: - sources: - - tensorflow/lite/micro/kernels/leaky_relu_test.cc - - logical_test: - sources: - - tensorflow/lite/micro/kernels/logical_test.cc - - logistic_test: - sources: - - tensorflow/lite/micro/kernels/logistic_test.cc - - log_softmax_test: - sources: - - tensorflow/lite/micro/kernels/log_softmax_test.cc - - maximum_minimum_test: - sources: - - tensorflow/lite/micro/kernels/maximum_minimum_test.cc - - mul_test: - sources: - - tensorflow/lite/micro/kernels/mul_test.cc - - neg_test: - sources: - - tensorflow/lite/micro/kernels/neg_test.cc - - pack_test: - sources: - - tensorflow/lite/micro/kernels/pack_test.cc - - pad_test: - sources: - - tensorflow/lite/micro/kernels/pad_test.cc - - pooling_test: - sources: - - tensorflow/lite/micro/kernels/pooling_test.cc - - prelu_test: - sources: - - tensorflow/lite/micro/kernels/prelu_test.cc - - quantization_util_test: - sources: - - tensorflow/lite/micro/kernels/quantization_util_test.cc - - quantize_test: - sources: - - tensorflow/lite/micro/kernels/quantize_test.cc - - reduce_test: - sources: - - tensorflow/lite/micro/kernels/reduce_test.cc - - reshape_test: - sources: - - tensorflow/lite/micro/kernels/reshape_test.cc - - resize_bilinear_test: - sources: - - tensorflow/lite/micro/kernels/resize_bilinear_test.cc - - resize_nearest_neighbor_test: - sources: - - tensorflow/lite/micro/kernels/resize_nearest_neighbor_test.cc - - round_test: - sources: - - tensorflow/lite/micro/kernels/round_test.cc - - shape_test: - sources: - - tensorflow/lite/micro/kernels/shape_test.cc - - softmax_test: - sources: - - tensorflow/lite/micro/kernels/softmax_test.cc - - space_to_batch_nd_test: - sources: - - tensorflow/lite/micro/kernels/space_to_batch_nd_test.cc - - space_to_depth_test: - sources: - - tensorflow/lite/micro/kernels/space_to_depth_test.cc - - split_test: - sources: - - tensorflow/lite/micro/kernels/split_test.cc - - split_v_test: - sources: - - tensorflow/lite/micro/kernels/split_v_test.cc - - squeeze_test: - sources: - - tensorflow/lite/micro/kernels/squeeze_test.cc - - strided_slice_test: - sources: - - tensorflow/lite/micro/kernels/strided_slice_test.cc - - sub_test: - sources: - - tensorflow/lite/micro/kernels/sub_test.cc - - svdf_test: - sources: - - tensorflow/lite/micro/kernels/svdf_test.cc - - tanh_test: - sources: - - tensorflow/lite/micro/kernels/tanh_test.cc - - transpose_test: - sources: - - tensorflow/lite/micro/kernels/transpose_test.cc - - transpose_conv_test: - sources: - - tensorflow/lite/micro/kernels/transpose_conv_test.cc - - tensorflow/lite/micro/kernels/conv_test_common.cc - - unpack_test: - sources: - - tensorflow/lite/micro/kernels/unpack_test.cc - - zeros_like_test: - sources: - - tensorflow/lite/micro/kernels/zeros_like_test.cc - - greedy_memory_planner_test: - sources: - - tensorflow/lite/micro/memory_planner/greedy_memory_planner_test.cc - - linear_memory_planner_test: - sources: - - tensorflow/lite/micro/memory_planner/linear_memory_planner_test.cc \ No newline at end of file diff --git a/tensorflow-test-ng/record_test_results.py b/tensorflow-test-ng/record_test_results.py deleted file mode 100644 index 8565b3a..0000000 --- a/tensorflow-test-ng/record_test_results.py +++ /dev/null @@ -1,82 +0,0 @@ -import sqlite3 -import argparse -import os -import sys - -#python main -def main(): -#get argument from command line - parser = argparse.ArgumentParser( - description="Copy test sources from tensorflow repo to sources in test package.") - # add the --results option - parser.add_argument("--results", type=str, default=os.path.curdir, - help="stdio log of testrun") - # Check if path in --results exists - if not os.path.exists(parser.parse_args().results): - print("File " + parser.parse_args().results + " does not exist") - sys.exit(1) - #connect to database - conn = sqlite3.connect('test_results.db') - db = conn.cursor() - #create table - db.execute('''CREATE TABLE IF NOT EXISTS results - (package text, testname text, compiler text, cvariant text, targetcpu text, testok boolean)''') - #insert a row of data - # print --results - print("Working on results: " + parser.parse_args().results) - # Read results file - with open(parser.parse_args().results, 'r') as stream: - results = stream.read() - # Walk trough results file line by line - for line in results.splitlines(): - # Check if line contains "Working on project: " - if "Working on project: " in line: - # Get project name - project_file = line.split("Working on project: ")[1] - splitstring = project_file.split("/") - package = splitstring[2] - project = splitstring[4] - print("Project: " + project_file) - print("Package: " + package) - # Extract string between two strings "+" and ".axf" - cpu = project.split("+")[1] - cpu = cpu.split(".cprj")[0] - print("Target CPU: " + cpu) - # Extract string between two strings "_" and "+" - compiler = project.split("_")[1] - compiler = compiler.split("+")[0] - print("Compiler: " + compiler) - # Extract string between two strings "Validation." and "_" - cvariant = project.split("Validation.")[1] - cvariant = cvariant.split("_")[0] - print("Cvariant: " + cvariant) - testcount = 0 - # Walk trough results file line by line - for line in results.splitlines(): - # Check if line contains "Testing " - if "Testing " in line: - testcount+=1 - test_name = line.split("Testing ")[1] - print("Register: " + test_name) - test_ok = "False" - # Check if next line contains "Testing" or "passed" or "xterm" - if "Testing" in results.splitlines()[results.splitlines().index(line)+1]: - test_ok = "True" - elif "xterm" in results.splitlines()[results.splitlines().index(line)+1]: - test_ok = "True" - elif "passed" in results.splitlines()[results.splitlines().index(line)+1]: - test_ok = "True" - db.execute("INSERT INTO results VALUES ('"+package+"','"+test_name+"', '"+compiler+"','"+cvariant+"', '"+cpu+"', '"+test_ok+"')") - if testcount == 0: - print("No tests found - package failed") - db.execute("INSERT INTO results VALUES ('"+package+"','ALL_TESTS', '"+compiler+"','"+cvariant+"', '"+cpu+"', 'False')") - #commit changes - conn.commit() - #close connection - conn.close() - return 0 - - -#python application entry point -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/tensorflow-test-ng/test_r.sh b/tensorflow-test-ng/test_r.sh deleted file mode 100755 index 36865a2..0000000 --- a/tensorflow-test-ng/test_r.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -# Create string with list of yml inventorys to run -#inventory_list="generic_tests.yml kernel_tests_cmsis.yml test_tests.yml" -inventory_list="test_tests.yml" - -rm -R ./tensorflow-pack/tensorflow-test-ng/Source -mkdir ./tensorflow-pack/tensorflow-test-ng/Source - -for inventory in $inventory_list; do - python3 ./tensorflow-pack/tensorflow-test-ng/copy_sources.py \ - --tflm_path=./tensorflow-pack/tensorflow-build/rel/mlplatform/core_software/tflite_micro \ - --inventory=./tensorflow-pack/tensorflow-test-ng/$inventory \ - --out_path=./tensorflow-pack/tensorflow-test-ng/Source -done - -rm -R ./tensorflow-pack/tensorflow-test-ng/gen -mkdir ./tensorflow-pack/tensorflow-test-ng/gen - -for inventory in $inventory_list; do - python3 ./tensorflow-pack/tensorflow-test-ng/create_tests.py \ - --inventory=./tensorflow-pack/tensorflow-test-ng/$inventory \ - --out_path=./tensorflow-pack/tensorflow-test-ng/gen -done diff --git a/tensorflow-test-ng/test_tests.yml b/tensorflow-test-ng/test_tests.yml deleted file mode 100644 index 88fd98e..0000000 --- a/tensorflow-test-ng/test_tests.yml +++ /dev/null @@ -1,12 +0,0 @@ -test_tests: - readable: "Test Tests" - report: test_test.junit - tests: - - testing_helpers_test: - sources: - - tensorflow/lite/micro/testing_helpers_test.cc - - - - - diff --git a/tensorflow-test/HelloWorld/HelloWorld.cbuild-idx.yml b/tensorflow-test/HelloWorld/HelloWorld.cbuild-idx.yml new file mode 100644 index 0000000..cd7121d --- /dev/null +++ b/tensorflow-test/HelloWorld/HelloWorld.cbuild-idx.yml @@ -0,0 +1,12 @@ +build-idx: + generated-by: csolution version 2.1.0 + cdefault: ${CMSIS_COMPILER_ROOT}/cdefault.yml + csolution: HelloWorld.csolution.yml + cprojects: + - cproject: HelloWorld.cproject.yml + clayers: + - clayer: $Target-Layer$ + cbuilds: + - cbuild: HelloWorld.size+CM55.cbuild.yml + project: HelloWorld + configuration: .size+CM55 diff --git a/tensorflow-test/HelloWorld/HelloWorld.cproject.yml b/tensorflow-test/HelloWorld/HelloWorld.cproject.yml new file mode 100644 index 0000000..4e7d47d --- /dev/null +++ b/tensorflow-test/HelloWorld/HelloWorld.cproject.yml @@ -0,0 +1,47 @@ +project: + + debug: on + + packs: + - pack: ARM::CMSIS + - pack: ARM::CMSIS-DSP + - pack: ARM::CMSIS-NN + # path: ../ + - pack: ARM::Cortex_DFP + # path: ../ + - pack: tensorflow::tensorflow-lite-micro + - pack: tensorflow::flatbuffers + - pack: tensorflow::gemmlowp + - pack: tensorflow::kissfft + - pack: tensorflow::ruy + + add-path: + - ./hello_world + + define: + - PROJECT_GENERATION: 1 + + components: + - component: ARM::CMSIS:DSP&Source + - component: ARM::CMSIS:NN Lib + - component: tensorflow::Data Exchange:Serialization:flatbuffers + - component: tensorflow::Data Processing:Math:gemmlowp fixed-point&tensorflow + - component: tensorflow::Data Processing:Math:kissfft&tensorflow + - component: tensorflow::Data Processing:Math:ruy&tensorflow + - component: tensorflow::Machine Learning:TensorFlow:Kernel&Reference + - component: tensorflow::Machine Learning:TensorFlow:Kernel Utils + - component: tensorflow::Machine Learning:TensorFlow:Testing + - component: ARM::CMSIS:CORE@6.0.0 + - component: ARM::Device:Startup&C Startup + + groups: + - group: TFL_main + files: + - file: ./hello_world/hello_world_test.cpp + - group: TFL_models + files: + - file: ./hello_world/models/hello_world_int8_model_data.cpp + - file: ./hello_world/models/hello_world_float_model_data.cpp + + layers: + - layer: $Target-Layer$ diff --git a/tensorflow-test/HelloWorld/HelloWorld.csolution.yml b/tensorflow-test/HelloWorld/HelloWorld.csolution.yml new file mode 100644 index 0000000..cdc33fb --- /dev/null +++ b/tensorflow-test/HelloWorld/HelloWorld.csolution.yml @@ -0,0 +1,95 @@ +solution: + created-for: cmsis-toobox@2.0.0 + + cdefault: + misc: + - for-compiler: GCC + C-CPP: + - -ffunction-sections + - -fdata-sections + Link: + - -Wl,--gc-sections + - for-compiler: CLANG + C-CPP: + - -ffunction-sections + - -fdata-sections + Link: + - -Wl,--gc-sections + + packs: + - pack: ARM::Cortex_DFP + + target-types: + - type: CM0 + device: ARMCM0 + variables: + - Target-Layer: ../Target/CM0/Target.clayer.yml + - type: CM0plus + device: ARMCM0P + variables: + - Target-Layer: ../Target/CM0plus/Target.clayer.yml + - type: CM3 + device: ARMCM3 + variables: + - Target-Layer: ../Target/CM3/Target.clayer.yml + - type: CM4 + device: ARMCM4 + processor: + fpu: off + variables: + - Target-Layer: ../Target/CM4/Target.clayer.yml + - type: CM4_FP + device: ARMCM4 + variables: + - Target-Layer: ../Target/CM4/Target.clayer.yml + - type: CM7 + device: ARMCM7 + variables: + - Target-Layer: ../Target/CM7/Target.clayer.yml + - type: CM23 + device: ARMCM23 + processor: + trustzone: off + variables: + - Target-Layer: ../Target/CM23/Target.clayer.yml + - type: CM33 + device: ARMCM33 + processor: + trustzone: off + variables: + - Target-Layer: ../Target/CM33/Target.clayer.yml + - type: CM55 + device: ARMCM55 + processor: + trustzone: off + variables: + - Target-Layer: ../Target/CM55/Target.clayer.yml + - type: CM55_Ethos + device: ARMCM55 + processor: + trustzone: off + variables: + - Target-Layer: ../Target/CM55_Ethos/Target.clayer.yml + - type: CM85 + device: ARMCM85 + processor: + trustzone: off + variables: + - Target-Layer: ../Target/CM85/Target.clayer.yml + - type: CM85_Ethos + device: ARMCM85 + processor: + trustzone: off + variables: + - Target-Layer: ../Target/CM85_Ethos/Target.clayer.yml + + build-types: + - type: balanced + optimize: balanced + - type: size + optimize: size + - type: speed + optimize: speed + + projects: + - project: ./HelloWorld.cproject.yml diff --git a/tensorflow-test/HelloWorld/HelloWorld.size+CM55.cbuild.yml b/tensorflow-test/HelloWorld/HelloWorld.size+CM55.cbuild.yml new file mode 100644 index 0000000..5d7cdbd --- /dev/null +++ b/tensorflow-test/HelloWorld/HelloWorld.size+CM55.cbuild.yml @@ -0,0 +1,736 @@ +build: + generated-by: csolution version 2.1.0 + solution: HelloWorld.csolution.yml + project: HelloWorld.cproject.yml + context: HelloWorld.size+CM55 + compiler: AC6 + device: ARMCM55 + processor: + fpu: on + trustzone: off + packs: + - pack: ARM::CMSIS-DSP@1.15.0 + path: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0 + - pack: ARM::CMSIS-NN@4.1.0 + path: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0 + - pack: ARM::CMSIS@6.0.0 + path: ${CMSIS_PACK_ROOT}/ARM/CMSIS/6.0.0 + - pack: ARM::Cortex_DFP@1.0.0 + path: ${CMSIS_PACK_ROOT}/ARM/Cortex_DFP/1.0.0 + - pack: tensorflow::flatbuffers@1.24.2 + path: ${CMSIS_PACK_ROOT}/tensorflow/flatbuffers/1.24.2 + - pack: tensorflow::gemmlowp@1.24.2 + path: ${CMSIS_PACK_ROOT}/tensorflow/gemmlowp/1.24.2 + - pack: tensorflow::kissfft@1.24.2 + path: ${CMSIS_PACK_ROOT}/tensorflow/kissfft/1.24.2 + - pack: tensorflow::ruy@1.24.2 + path: ${CMSIS_PACK_ROOT}/tensorflow/ruy/1.24.2 + - pack: tensorflow::tensorflow-lite-micro@1.24.2 + path: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2 + optimize: size + debug: on + misc: + ASM: + - -masm=auto + C: + - -std=gnu11 + - -ffunction-sections + - -Wno-macro-redefined + - -Wno-pragma-pack + - -Wno-parentheses-equality + - -Wno-license-management + CPP: + - -ffunction-sections + - -Wno-macro-redefined + - -Wno-pragma-pack + - -Wno-parentheses-equality + - -Wno-license-management + Link: + - --entry=Reset_Handler + - --map + - --info summarysizes + - --summary_stderr + - --diag_suppress=L6314W + define: + - PROJECT_GENERATION: 1 + - ARMCM55 + - _RTE_ + add-path: + - hello_world + - RTE/_size_CM55 + - ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Include + - ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/PrivateInclude + - ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Include + - ${CMSIS_PACK_ROOT}/ARM/CMSIS/6.0.0/CMSIS/Core/Include + - ${CMSIS_PACK_ROOT}/ARM/Cortex_DFP/1.0.0/Device/ARMCM55/Include + - ${CMSIS_PACK_ROOT}/tensorflow/flatbuffers/1.24.2/src/include + - ${CMSIS_PACK_ROOT}/tensorflow/gemmlowp/1.24.2/src + - ${CMSIS_PACK_ROOT}/tensorflow/kissfft/1.24.2/src + - ${CMSIS_PACK_ROOT}/tensorflow/kissfft/1.24.2/src/tools + - ${CMSIS_PACK_ROOT}/tensorflow/ruy/1.24.2/src + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2 + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/c + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/core + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/core/api + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/core/c + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/kernels + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/kernels/internal + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/kernels/internal/optimized + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/kernels/internal/reference + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/kernels/internal/reference/integer_ops + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/arena_allocator + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/cortex_m_generic + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/memory_planner + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/testing + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/tflite_bridge + - ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/schema + output-dirs: + intdir: tmp/HelloWorld/CM55/size + outdir: out/HelloWorld/CM55/size + rtedir: RTE + output: + - type: elf + file: HelloWorld.axf + components: + - component: ARM::CMSIS:CORE@6.0.0 + condition: ARMv6_7_8-M Device + from-pack: ARM::CMSIS@6.0.0 + selected-by: ARM::CMSIS:CORE@6.0.0 + - component: ARM::CMSIS:DSP&Source@1.15.0 + condition: CMSISCORE + from-pack: ARM::CMSIS-DSP@1.15.0 + selected-by: ARM::CMSIS:DSP&Source + files: + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/BasicMathFunctions/BasicMathFunctions.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/BasicMathFunctions/BasicMathFunctionsF16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/BayesFunctions/BayesFunctions.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/BayesFunctions/BayesFunctionsF16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/CommonTables/CommonTables.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/CommonTables/CommonTablesF16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/ComplexMathFunctions/ComplexMathFunctions.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/ComplexMathFunctions/ComplexMathFunctionsF16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/ControllerFunctions/ControllerFunctions.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/DistanceFunctions/DistanceFunctions.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/DistanceFunctions/DistanceFunctionsF16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/FastMathFunctions/FastMathFunctions.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/FastMathFunctions/FastMathFunctionsF16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/FilteringFunctions/FilteringFunctions.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/FilteringFunctions/FilteringFunctionsF16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/InterpolationFunctions/InterpolationFunctions.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/InterpolationFunctions/InterpolationFunctionsF16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/MatrixFunctions/MatrixFunctions.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/MatrixFunctions/MatrixFunctionsF16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/QuaternionMathFunctions/QuaternionMathFunctions.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/SVMFunctions/SVMFunctions.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/SVMFunctions/SVMFunctionsF16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/StatisticsFunctions/StatisticsFunctions.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/StatisticsFunctions/StatisticsFunctionsF16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/SupportFunctions/SupportFunctions.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/SupportFunctions/SupportFunctionsF16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/TransformFunctions/TransformFunctions.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/Source/TransformFunctions/TransformFunctionsF16.c + category: source + - component: ARM::CMSIS:NN Lib@4.1.0 + condition: CMSIS-NN + from-pack: ARM::CMSIS-NN@4.1.0 + selected-by: ARM::CMSIS:NN Lib + files: + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ActivationFunctions/arm_nn_activation_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ActivationFunctions/arm_relu6_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ActivationFunctions/arm_relu_q15.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ActivationFunctions/arm_relu_q7.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/BasicMathFunctions/arm_elementwise_add_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/BasicMathFunctions/arm_elementwise_add_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/BasicMathFunctions/arm_elementwise_mul_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/BasicMathFunctions/arm_elementwise_mul_s16_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/BasicMathFunctions/arm_elementwise_mul_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConcatenationFunctions/arm_concatenation_s8_w.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConcatenationFunctions/arm_concatenation_s8_x.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConcatenationFunctions/arm_concatenation_s8_y.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConcatenationFunctions/arm_concatenation_s8_z.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_convolve_1_x_n_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_convolve_1x1_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_convolve_1x1_s8_fast.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_convolve_fast_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_convolve_get_buffer_sizes_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_convolve_get_buffer_sizes_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_convolve_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_convolve_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_convolve_wrapper_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_convolve_wrapper_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_depthwise_conv_3x3_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_depthwise_conv_fast_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_depthwise_conv_get_buffer_sizes_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_depthwise_conv_get_buffer_sizes_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_depthwise_conv_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_depthwise_conv_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_depthwise_conv_s8_opt.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_depthwise_conv_wrapper_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_depthwise_conv_wrapper_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_nn_depthwise_conv_s8_core.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_nn_mat_mult_kernel_s8_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ConvolutionFunctions/arm_nn_mat_mult_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/FullyConnectedFunctions/arm_fully_connected_get_buffer_sizes_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/FullyConnectedFunctions/arm_fully_connected_get_buffer_sizes_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/FullyConnectedFunctions/arm_fully_connected_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/FullyConnectedFunctions/arm_fully_connected_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/LSTMFunctions/arm_lstm_unidirectional_s8_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_depthwise_conv_nt_t_padded_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_depthwise_conv_nt_t_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_depthwise_conv_nt_t_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_lstm_calculate_gate_s8_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_lstm_step_s8_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_lstm_update_cell_state_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_lstm_update_output_s8_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_mat_mul_core_1x_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_mat_mul_core_4x_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_mat_mul_kernel_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_mat_mult_nt_t_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_vec_mat_mul_result_acc_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_vec_mat_mult_t_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_vec_mat_mult_t_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nn_vec_mat_mult_t_svdf_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_nntables.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/NNSupportFunctions/arm_q7_to_q15_with_offset.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/PoolingFunctions/arm_avgpool_get_buffer_sizes_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/PoolingFunctions/arm_avgpool_get_buffer_sizes_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/PoolingFunctions/arm_avgpool_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/PoolingFunctions/arm_avgpool_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/PoolingFunctions/arm_max_pool_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/PoolingFunctions/arm_max_pool_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/ReshapeFunctions/arm_reshape_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/SVDFunctions/arm_svdf_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/SVDFunctions/arm_svdf_state_s16_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/SoftmaxFunctions/arm_nn_softmax_common_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/SoftmaxFunctions/arm_softmax_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/SoftmaxFunctions/arm_softmax_s8.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/SoftmaxFunctions/arm_softmax_s8_s16.c + category: source + - file: ${CMSIS_PACK_ROOT}/ARM/CMSIS-NN/4.1.0/Source/SoftmaxFunctions/arm_softmax_u8.c + category: source + - component: ARM::Device:Startup&C Startup@2.2.0 + condition: ARMCM55 CMSIS + from-pack: ARM::Cortex_DFP@1.0.0 + selected-by: ARM::Device:Startup&C Startup + files: + - file: RTE/Device/ARMCM55/ARMCM55_ac6.sct + category: linkerScript + attr: config + version: 1.1.0 + - file: RTE/Device/ARMCM55/startup_ARMCM55.c + category: sourceC + attr: config + version: 1.1.0 + - file: RTE/Device/ARMCM55/system_ARMCM55.c + category: sourceC + attr: config + version: 1.1.0 + - component: tensorflow::Data Exchange:Serialization:flatbuffers&tensorflow@1.24.2 + from-pack: tensorflow::flatbuffers@1.24.2 + selected-by: tensorflow::Data Exchange:Serialization:flatbuffers + - component: tensorflow::Data Processing:Math:gemmlowp fixed-point&tensorflow@1.24.2 + from-pack: tensorflow::gemmlowp@1.24.2 + selected-by: tensorflow::Data Processing:Math:gemmlowp fixed-point&tensorflow + - component: tensorflow::Data Processing:Math:kissfft&tensorflow@1.24.2 + from-pack: tensorflow::kissfft@1.24.2 + selected-by: tensorflow::Data Processing:Math:kissfft&tensorflow + files: + - file: ${CMSIS_PACK_ROOT}/tensorflow/kissfft/1.24.2/src/kiss_fft.c + category: sourceC + - file: ${CMSIS_PACK_ROOT}/tensorflow/kissfft/1.24.2/src/tools/kiss_fftr.c + category: sourceC + - component: tensorflow::Data Processing:Math:ruy&tensorflow@1.24.2 + from-pack: tensorflow::ruy@1.24.2 + selected-by: tensorflow::Data Processing:Math:ruy&tensorflow + - component: tensorflow::Machine Learning:TensorFlow:Kernel Utils@1.24.2 + from-pack: tensorflow::tensorflow-lite-micro@1.24.2 + selected-by: tensorflow::Machine Learning:TensorFlow:Kernel Utils + files: + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/kernels/kernel_util.cpp + category: sourceCpp + - file: RTE/Machine_Learning/debug_log.cpp + category: sourceCpp + attr: config + version: 1.24.2 + - file: RTE/Machine_Learning/micro_time.cpp + category: sourceCpp + attr: config + version: 1.24.2 + - file: RTE/Machine_Learning/system_setup.cpp + category: sourceCpp + attr: config + version: 1.24.2 + - component: tensorflow::Machine Learning:TensorFlow:Kernel&Reference@1.24.2 + condition: Reference + from-pack: tensorflow::tensorflow-lite-micro@1.24.2 + selected-by: tensorflow::Machine Learning:TensorFlow:Kernel&Reference + files: + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/core/api/error_reporter.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/core/api/flatbuffer_conversions.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/core/api/tensor_utils.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/core/c/common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/kernels/internal/common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/kernels/internal/portable_tensor_utils.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/kernels/internal/quantization_util.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/kernels/internal/reference/comparisons.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/kernels/internal/reference/portable_tensor_utils.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/kernels/internal/tensor_ctypes.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/kernels/internal/tensor_utils.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/arena_allocator/non_persistent_arena_buffer_allocator.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/arena_allocator/persistent_arena_buffer_allocator.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/arena_allocator/recording_single_arena_buffer_allocator.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/arena_allocator/single_arena_buffer_allocator.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/fake_micro_context.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/flatbuffer_utils.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/activations.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/activations_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/add.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/add_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/add_n.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/arg_min_max.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/assign_variable.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/batch_matmul.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/batch_to_space_nd.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/broadcast_args.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/broadcast_to.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/call_once.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/cast.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/ceil.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/circular_buffer.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/circular_buffer_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/comparisons.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/concatenation.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/conv.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/conv_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/cumsum.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/depth_to_space.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/depthwise_conv.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/depthwise_conv_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/dequantize.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/dequantize_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/detection_postprocess.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/div.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/elementwise.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/elu.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/embedding_lookup.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/ethosu.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/exp.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/expand_dims.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/fill.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/floor.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/floor_div.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/floor_mod.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/fully_connected.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/fully_connected_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/gather.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/gather_nd.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/hard_swish.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/hard_swish_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/if.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/kernel_runner.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/kernel_util.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/l2_pool_2d.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/l2norm.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/leaky_relu.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/leaky_relu_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/log_softmax.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/logical.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/logical_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/logistic.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/logistic_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/lstm_eval.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/lstm_eval_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/maximum_minimum.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/micro_tensor_utils.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/mirror_pad.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/mul.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/mul_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/neg.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/pack.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/pad.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/pooling.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/pooling_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/prelu.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/prelu_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/quantize.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/quantize_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/read_variable.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/reduce.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/reduce_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/reshape.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/reshape_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/resize_bilinear.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/resize_nearest_neighbor.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/round.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/select.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/shape.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/slice.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/softmax.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/softmax_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/space_to_batch_nd.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/space_to_depth.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/split.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/split_v.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/squared_difference.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/squeeze.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/strided_slice.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/strided_slice_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/sub.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/sub_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/svdf.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/svdf_common.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/tanh.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/transpose.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/transpose_conv.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/unidirectional_sequence_lstm.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/unpack.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/var_handle.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/while.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/kernels/zeros_like.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/memory_helpers.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/memory_planner/greedy_memory_planner.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/memory_planner/linear_memory_planner.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/memory_planner/non_persistent_buffer_planner_shim.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/micro_allocation_info.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/micro_allocator.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/micro_context.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/micro_interpreter.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/micro_interpreter_context.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/micro_interpreter_graph.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/micro_log.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/micro_op_resolver.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/micro_profiler.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/micro_resource_variable.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/micro_utils.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/mock_micro_graph.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/recording_micro_allocator.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/test_helper_custom_ops.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/test_helpers.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/tflite_bridge/flatbuffer_conversions_bridge.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/micro/tflite_bridge/micro_error_reporter.cpp + category: sourceCpp + - file: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/tensorflow/lite/schema/schema_utils.cpp + category: sourceCpp + - component: tensorflow::Machine Learning:TensorFlow:Testing@1.24.2 + from-pack: tensorflow::tensorflow-lite-micro@1.24.2 + selected-by: tensorflow::Machine Learning:TensorFlow:Testing + linker: + script: ${CMSIS_COMPILER_ROOT}/ac6_linker_script.sct + regions: ../Target/CM55/RTE/Device/ARMCM55/regions_ARMCM55.h + groups: + - group: TFL_main + files: + - file: ./hello_world/hello_world_test.cpp + category: sourceCpp + - group: TFL_models + files: + - file: ./hello_world/models/hello_world_int8_model_data.cpp + category: sourceCpp + - file: ./hello_world/models/hello_world_float_model_data.cpp + category: sourceCpp + - group: FVP + files: + - file: ../Target/CM55/fvp_config.txt + category: doc + constructed-files: + - file: RTE/_size_CM55/Pre_Include_Global.h + category: preIncludeGlobal + - file: RTE/_size_CM55/RTE_Components.h + category: header + licenses: + - license: + license-agreement: ${CMSIS_PACK_ROOT}/ARM/CMSIS-DSP/1.15.0/LICENSE + packs: + - pack: ARM::CMSIS-DSP@1.15.0 + components: + - component: ARM::CMSIS:DSP&Source@1.15.0 + - license: + packs: + - pack: ARM::CMSIS-NN@4.1.0 + components: + - component: ARM::CMSIS:NN Lib@4.1.0 + - license: + license-agreement: ${CMSIS_PACK_ROOT}/ARM/CMSIS/6.0.0/LICENSE + packs: + - pack: ARM::CMSIS@6.0.0 + components: + - component: ARM::CMSIS:CORE@6.0.0 + - license: + license-agreement: ${CMSIS_PACK_ROOT}/ARM/Cortex_DFP/1.0.0/LICENSE + packs: + - pack: ARM::Cortex_DFP@1.0.0 + components: + - component: ARM::Device:Startup&C Startup@2.2.0 + - license: + license-agreement: ${CMSIS_PACK_ROOT}/tensorflow/flatbuffers/1.24.2/LICENSE.txt + packs: + - pack: tensorflow::flatbuffers@1.24.2 + components: + - component: tensorflow::Data Exchange:Serialization:flatbuffers&tensorflow@1.24.2 + - license: + license-agreement: ${CMSIS_PACK_ROOT}/tensorflow/gemmlowp/1.24.2/LICENSE.txt + packs: + - pack: tensorflow::gemmlowp@1.24.2 + components: + - component: tensorflow::Data Processing:Math:gemmlowp fixed-point&tensorflow@1.24.2 + - license: + license-agreement: ${CMSIS_PACK_ROOT}/tensorflow/kissfft/1.24.2/LICENSE.txt + packs: + - pack: tensorflow::kissfft@1.24.2 + components: + - component: tensorflow::Data Processing:Math:kissfft&tensorflow@1.24.2 + - license: + license-agreement: ${CMSIS_PACK_ROOT}/tensorflow/ruy/1.24.2/LICENSE.txt + packs: + - pack: tensorflow::ruy@1.24.2 + components: + - component: tensorflow::Data Processing:Math:ruy&tensorflow@1.24.2 + - license: + license-agreement: ${CMSIS_PACK_ROOT}/tensorflow/tensorflow-lite-micro/1.24.2/LICENSE + packs: + - pack: tensorflow::tensorflow-lite-micro@1.24.2 + components: + - component: tensorflow::Machine Learning:TensorFlow:Kernel Utils@1.24.2 + - component: tensorflow::Machine Learning:TensorFlow:Kernel&Reference@1.24.2 + - component: tensorflow::Machine Learning:TensorFlow:Testing@1.24.2 diff --git a/tensorflow-test/HelloWorld/HelloWorld.size+CM55.cprj b/tensorflow-test/HelloWorld/HelloWorld.size+CM55.cprj new file mode 100644 index 0000000..647167c --- /dev/null +++ b/tensorflow-test/HelloWorld/HelloWorld.size+CM55.cprj @@ -0,0 +1,71 @@ + + + + + + Automatically generated project + + + + + + + + + + + + + + + + + + + + + + + + + + PROJECT_GENERATION=1 + ./hello_world + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/ac6_arm.sct b/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/ARMCM55_ac6.sct similarity index 83% rename from tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/ac6_arm.sct rename to tensorflow-test/HelloWorld/RTE/Device/ARMCM55/ARMCM55_ac6.sct index c182aa8..6f84bd3 100644 --- a/tensorflow-test-ng/Layer/Target/CM33_FP_VHT_AC6/RTE/Device/IOTKit_CM33_FP_VHT/ac6_arm.sct +++ b/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/ARMCM55_ac6.sct @@ -1,8 +1,8 @@ -#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m33 -xc -mcmse +#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m55 -xc ; command above MUST be in first line (no comment above!) ;Note: Add '-mcmse' to first line if your software model is "Secure Mode". -; #! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m33 -xc -mcmse +; #! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m55 -xc -mcmse /* @@ -15,8 +15,8 @@ ; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> ; *----------------------------------------------------------------------------*/ -#define __ROM_BASE 0x10000000 -#define __ROM_SIZE 0x00200000 +#define __ROM_BASE 0x00000000 +#define __ROM_SIZE 0x00080000 /*--------------------- Embedded RAM Configuration --------------------------- ; RAM Configuration @@ -24,8 +24,8 @@ ; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> ; *----------------------------------------------------------------------------*/ -#define __RAM_BASE 0x38000000 -#define __RAM_SIZE 0x00200000 +#define __RAM_BASE 0x20000000 +#define __RAM_SIZE 0x00040000 /*--------------------- Stack / Heap Configuration --------------------------- ; Stack / Heap Configuration @@ -33,12 +33,12 @@ ; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; *----------------------------------------------------------------------------*/ -#define __STACK_SIZE 0x00000400 +#define __STACK_SIZE 0x00000200 #define __HEAP_SIZE 0x00000C00 -/*--------------------- CMSE Venner Configuration --------------------------- -; CMSE Venner Configuration -; CMSE Venner Size (in Bytes) <0x0-0xFFFFFFFF:32> +/*--------------------- CMSE Veneer Configuration --------------------------- +; CMSE Veneer Configuration +; CMSE Veneer Size (in Bytes) <0x0-0xFFFFFFFF:32> ; *----------------------------------------------------------------------------*/ #define __CMSEVENEER_SIZE 0x200 @@ -78,7 +78,7 @@ #define __RO_SIZE ( __ROM_SIZE - __CV_SIZE ) #define __RW_BASE ( __RAM_BASE ) -#define __RW_SIZE ( __RAM_SIZE - __STACK_SIZE - __HEAP_SIZE ) +#define __RW_SIZE (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE - __STACKSEAL_SIZE ) /*---------------------------------------------------------------------------- @@ -92,8 +92,12 @@ LR_ROM __RO_BASE __RO_SIZE { ; load region size_region .ANY (+XO) } - RW_RAM __RW_BASE __RW_SIZE { ; RW data - .ANY (+RW +ZI) + RW_NOINIT __RW_BASE UNINIT __RW_SIZE { + *(.bss.noinit) + } + + RW_RAM AlignExpr(+0, 8) (__RW_SIZE - AlignExpr(ImageLength(RW_NOINIT), 8)) { + *(+RW +ZI) } #if __HEAP_SIZE > 0 @@ -111,7 +115,7 @@ LR_ROM __RO_BASE __RO_SIZE { ; load region size_region } #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -LR_CMSE_VENEER __CV_BASE ALIGN 32 __CV_SIZE { ; own load/execution region for CMSE Venners +LR_CMSE_VENEER __CV_BASE ALIGN 32 __CV_SIZE { ; own load/execution region for CMSE Veneers ER_CMSE_VENEER __CV_BASE __CV_SIZE { *(Veneer$$CMSE) } diff --git a/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/ac6_arm.sct b/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/ARMCM55_ac6.sct.base@1.1.0 similarity index 83% rename from tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/ac6_arm.sct rename to tensorflow-test/HelloWorld/RTE/Device/ARMCM55/ARMCM55_ac6.sct.base@1.1.0 index 6fa1f5b..6f84bd3 100644 --- a/tensorflow-test-ng/Layer/Target/CM23_VHT_AC6/RTE/Device/IOTKit_CM23_VHT/ac6_arm.sct +++ b/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/ARMCM55_ac6.sct.base@1.1.0 @@ -1,8 +1,8 @@ -#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m23 -xc -mcmse +#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m55 -xc ; command above MUST be in first line (no comment above!) ;Note: Add '-mcmse' to first line if your software model is "Secure Mode". -; #! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m23 -xc -mcmse +; #! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m55 -xc -mcmse /* @@ -15,8 +15,8 @@ ; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> ; *----------------------------------------------------------------------------*/ -#define __ROM_BASE 0x10000000 -#define __ROM_SIZE 0x00200000 +#define __ROM_BASE 0x00000000 +#define __ROM_SIZE 0x00080000 /*--------------------- Embedded RAM Configuration --------------------------- ; RAM Configuration @@ -24,8 +24,8 @@ ; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> ; *----------------------------------------------------------------------------*/ -#define __RAM_BASE 0x38000000 -#define __RAM_SIZE 0x00200000 +#define __RAM_BASE 0x20000000 +#define __RAM_SIZE 0x00040000 /*--------------------- Stack / Heap Configuration --------------------------- ; Stack / Heap Configuration @@ -33,12 +33,12 @@ ; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; *----------------------------------------------------------------------------*/ -#define __STACK_SIZE 0x00000400 +#define __STACK_SIZE 0x00000200 #define __HEAP_SIZE 0x00000C00 -/*--------------------- CMSE Venner Configuration --------------------------- -; CMSE Venner Configuration -; CMSE Venner Size (in Bytes) <0x0-0xFFFFFFFF:32> +/*--------------------- CMSE Veneer Configuration --------------------------- +; CMSE Veneer Configuration +; CMSE Veneer Size (in Bytes) <0x0-0xFFFFFFFF:32> ; *----------------------------------------------------------------------------*/ #define __CMSEVENEER_SIZE 0x200 @@ -78,7 +78,7 @@ #define __RO_SIZE ( __ROM_SIZE - __CV_SIZE ) #define __RW_BASE ( __RAM_BASE ) -#define __RW_SIZE ( __RAM_SIZE - __STACK_SIZE - __HEAP_SIZE ) +#define __RW_SIZE (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE - __STACKSEAL_SIZE ) /*---------------------------------------------------------------------------- @@ -92,8 +92,12 @@ LR_ROM __RO_BASE __RO_SIZE { ; load region size_region .ANY (+XO) } - RW_RAM __RW_BASE __RW_SIZE { ; RW data - .ANY (+RW +ZI) + RW_NOINIT __RW_BASE UNINIT __RW_SIZE { + *(.bss.noinit) + } + + RW_RAM AlignExpr(+0, 8) (__RW_SIZE - AlignExpr(ImageLength(RW_NOINIT), 8)) { + *(+RW +ZI) } #if __HEAP_SIZE > 0 @@ -111,7 +115,7 @@ LR_ROM __RO_BASE __RO_SIZE { ; load region size_region } #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -LR_CMSE_VENEER __CV_BASE ALIGN 32 __CV_SIZE { ; own load/execution region for CMSE Venners +LR_CMSE_VENEER __CV_BASE ALIGN 32 __CV_SIZE { ; own load/execution region for CMSE Veneers ER_CMSE_VENEER __CV_BASE __CV_SIZE { *(Veneer$$CMSE) } diff --git a/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/startup_ARMCM55.c b/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/startup_ARMCM55.c new file mode 100644 index 0000000..0557c5f --- /dev/null +++ b/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/startup_ARMCM55.c @@ -0,0 +1,164 @@ +/****************************************************************************** + * @file startup_ARMCM55.c + * @brief CMSIS-Core Device Startup File for Cortex-M55 Device + * @version V1.1.0 + * @date 16. December 2020 + ******************************************************************************/ +/* + * Copyright (c) 2020 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. + */ + +#if defined (ARMCM55) + #include "ARMCM55.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; +extern uint32_t __STACK_LIMIT; +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +extern uint32_t __STACK_SEAL; +#endif + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SecureFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + const VECTOR_TABLE_Type __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + MemManage_Handler, /* -12 MPU Fault Handler */ + BusFault_Handler, /* -11 Bus Fault Handler */ + UsageFault_Handler, /* -10 Usage Fault Handler */ + SecureFault_Handler, /* -9 Secure Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVC Handler */ + DebugMon_Handler, /* -4 Debug Monitor Handler */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10 .. 480 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + __set_PSP((uint32_t)(&__INITIAL_SP)); + + __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); + __set_PSPLIM((uint32_t)(&__STACK_LIMIT)); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL)); +#endif + + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/startup_ARMCM55.c.base@1.1.0 b/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/startup_ARMCM55.c.base@1.1.0 new file mode 100644 index 0000000..0557c5f --- /dev/null +++ b/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/startup_ARMCM55.c.base@1.1.0 @@ -0,0 +1,164 @@ +/****************************************************************************** + * @file startup_ARMCM55.c + * @brief CMSIS-Core Device Startup File for Cortex-M55 Device + * @version V1.1.0 + * @date 16. December 2020 + ******************************************************************************/ +/* + * Copyright (c) 2020 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. + */ + +#if defined (ARMCM55) + #include "ARMCM55.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; +extern uint32_t __STACK_LIMIT; +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +extern uint32_t __STACK_SEAL; +#endif + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SecureFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + const VECTOR_TABLE_Type __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + MemManage_Handler, /* -12 MPU Fault Handler */ + BusFault_Handler, /* -11 Bus Fault Handler */ + UsageFault_Handler, /* -10 Usage Fault Handler */ + SecureFault_Handler, /* -9 Secure Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVC Handler */ + DebugMon_Handler, /* -4 Debug Monitor Handler */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10 .. 480 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + __set_PSP((uint32_t)(&__INITIAL_SP)); + + __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); + __set_PSPLIM((uint32_t)(&__STACK_LIMIT)); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL)); +#endif + + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/system_ARMCM55.c b/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/system_ARMCM55.c new file mode 100644 index 0000000..dc329c7 --- /dev/null +++ b/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/system_ARMCM55.c @@ -0,0 +1,107 @@ +/**************************************************************************//** + * @file system_ARMCM55.c + * @brief CMSIS Device System Source File for + * ARMCM55 Device + * @version V1.1.0 + * @date 28. March 2022 + ******************************************************************************/ +/* + * Copyright (c) 2009-2022 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. + */ + +#if defined (ARMCM55) + #include "ARMCM55.h" +#else + #error device not specified! +#endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #include "partition_ARMCM55.h" +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL ( 5000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (5U * XTAL) + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t)(&__VECTOR_TABLE[0]); +#endif + +#if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \ + (defined (__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE > 0U)) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ + + /* Set low-power state for PDEPU */ + /* 0b00 | ON, PDEPU is not in low-power state */ + /* 0b01 | ON, but the clock is off */ + /* 0b10 | RET(ention) */ + /* 0b11 | OFF */ + + /* Clear ELPSTATE, value is 0b11 on Cold reset */ + PWRMODCTL->CPDLPSTATE &= ~(PWRMODCTL_CPDLPSTATE_ELPSTATE_Msk); + + /* Favor best FP/MVE performance by default, avoid EPU switch-ON delays */ + /* PDEPU ON, Clock OFF */ + PWRMODCTL->CPDLPSTATE |= 0x1 << PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos; +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + /* Enable Loop and branch info cache */ + SCB->CCR |= SCB_CCR_LOB_Msk; + __DSB(); + __ISB(); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + TZ_SAU_Setup(); +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/system_ARMCM55.c.base@1.1.0 b/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/system_ARMCM55.c.base@1.1.0 new file mode 100644 index 0000000..dc329c7 --- /dev/null +++ b/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/system_ARMCM55.c.base@1.1.0 @@ -0,0 +1,107 @@ +/**************************************************************************//** + * @file system_ARMCM55.c + * @brief CMSIS Device System Source File for + * ARMCM55 Device + * @version V1.1.0 + * @date 28. March 2022 + ******************************************************************************/ +/* + * Copyright (c) 2009-2022 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. + */ + +#if defined (ARMCM55) + #include "ARMCM55.h" +#else + #error device not specified! +#endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #include "partition_ARMCM55.h" +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL ( 5000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (5U * XTAL) + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t)(&__VECTOR_TABLE[0]); +#endif + +#if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \ + (defined (__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE > 0U)) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ + + /* Set low-power state for PDEPU */ + /* 0b00 | ON, PDEPU is not in low-power state */ + /* 0b01 | ON, but the clock is off */ + /* 0b10 | RET(ention) */ + /* 0b11 | OFF */ + + /* Clear ELPSTATE, value is 0b11 on Cold reset */ + PWRMODCTL->CPDLPSTATE &= ~(PWRMODCTL_CPDLPSTATE_ELPSTATE_Msk); + + /* Favor best FP/MVE performance by default, avoid EPU switch-ON delays */ + /* PDEPU ON, Clock OFF */ + PWRMODCTL->CPDLPSTATE |= 0x1 << PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos; +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + /* Enable Loop and branch info cache */ + SCB->CCR |= SCB_CCR_LOB_Msk; + __DSB(); + __ISB(); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + TZ_SAU_Setup(); +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test-ng/Layer/App/Validation_Reference/RTE/Machine_Learning/debug_log.cpp b/tensorflow-test/HelloWorld/RTE/Machine_Learning/debug_log.cpp similarity index 63% rename from tensorflow-test-ng/Layer/App/Validation_Reference/RTE/Machine_Learning/debug_log.cpp rename to tensorflow-test/HelloWorld/RTE/Machine_Learning/debug_log.cpp index bc79d43..8d159c2 100644 --- a/tensorflow-test-ng/Layer/App/Validation_Reference/RTE/Machine_Learning/debug_log.cpp +++ b/tensorflow-test/HelloWorld/RTE/Machine_Learning/debug_log.cpp @@ -1,4 +1,4 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. +/* Copyright 2023 The TensorFlow Authors. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,28 +16,54 @@ limitations under the License. // Implementation for the DebugLog() function that prints to the debug logger on // an generic Cortex-M device. +#include "tensorflow/lite/micro/debug_log.h" + #ifdef __cplusplus extern "C" { #endif // __cplusplus -#include "tensorflow/lite/micro/debug_log.h" - #include "tensorflow/lite/micro/cortex_m_generic/debug_log_callback.h" +#ifndef TF_LITE_STRIP_ERROR_STRINGS +#include +#endif + static DebugLogCallback debug_log_callback = nullptr; +namespace { + +void InvokeDebugLogCallback(const char* s) { + if (debug_log_callback != nullptr) { + debug_log_callback(s); + } +} + +} // namespace + void RegisterDebugLogCallback(void (*cb)(const char* s)) { debug_log_callback = cb; } -void DebugLog(const char* s) { +#include + +void DebugLog(const char* format, va_list args) { #ifndef TF_LITE_STRIP_ERROR_STRINGS - if (debug_log_callback != nullptr) { - debug_log_callback(s); - } + constexpr int kMaxLogLen = 256; + char log_buffer[kMaxLogLen]; + + vsnprintf(log_buffer, kMaxLogLen, format, args); + InvokeDebugLogCallback(log_buffer); #endif } +#ifndef TF_LITE_STRIP_ERROR_STRINGS +// Only called from MicroVsnprintf (micro_log.h) +int DebugVsnprintf(char* buffer, size_t buf_size, const char* format, + va_list vlist) { + return vsnprintf(buffer, buf_size, format, vlist); +} +#endif + #ifdef __cplusplus } // extern "C" #endif // __cplusplus diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/debug_log.cc b/tensorflow-test/HelloWorld/RTE/Machine_Learning/debug_log.cpp.base@1.24.2 similarity index 64% rename from tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/debug_log.cc rename to tensorflow-test/HelloWorld/RTE/Machine_Learning/debug_log.cpp.base@1.24.2 index bc79d43..b7182a5 100644 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/debug_log.cc +++ b/tensorflow-test/HelloWorld/RTE/Machine_Learning/debug_log.cpp.base@1.24.2 @@ -1,4 +1,4 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. +/* Copyright 2023 The TensorFlow Authors. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,28 +16,52 @@ limitations under the License. // Implementation for the DebugLog() function that prints to the debug logger on // an generic Cortex-M device. +#include "tensorflow/lite/micro/debug_log.h" + #ifdef __cplusplus extern "C" { #endif // __cplusplus -#include "tensorflow/lite/micro/debug_log.h" - #include "tensorflow/lite/micro/cortex_m_generic/debug_log_callback.h" +#ifndef TF_LITE_STRIP_ERROR_STRINGS +#include +#endif + static DebugLogCallback debug_log_callback = nullptr; +namespace { + +void InvokeDebugLogCallback(const char* s) { + if (debug_log_callback != nullptr) { + debug_log_callback(s); + } +} + +} // namespace + void RegisterDebugLogCallback(void (*cb)(const char* s)) { debug_log_callback = cb; } -void DebugLog(const char* s) { +void DebugLog(const char* format, va_list args) { #ifndef TF_LITE_STRIP_ERROR_STRINGS - if (debug_log_callback != nullptr) { - debug_log_callback(s); - } + constexpr int kMaxLogLen = 256; + char log_buffer[kMaxLogLen]; + + vsnprintf(log_buffer, kMaxLogLen, format, args); + InvokeDebugLogCallback(log_buffer); #endif } +#ifndef TF_LITE_STRIP_ERROR_STRINGS +// Only called from MicroVsnprintf (micro_log.h) +int DebugVsnprintf(char* buffer, size_t buf_size, const char* format, + va_list vlist) { + return vsnprintf(buffer, buf_size, format, vlist); +} +#endif + #ifdef __cplusplus } // extern "C" #endif // __cplusplus diff --git a/tensorflow-test/HelloWorld/RTE/Machine_Learning/micro_time.cpp b/tensorflow-test/HelloWorld/RTE/Machine_Learning/micro_time.cpp new file mode 100644 index 0000000..17614af --- /dev/null +++ b/tensorflow-test/HelloWorld/RTE/Machine_Learning/micro_time.cpp @@ -0,0 +1,80 @@ +/* Copyright 2022 The TensorFlow Authors. All Rights Reserved. + +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 + + http://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. +==============================================================================*/ + +#include "tensorflow/lite/micro/micro_time.h" + +// Set in micro/tools/make/targets/cortex_m_generic_makefile.inc. +// Needed for the DWT and PMU counters. +#include "RTE_Components.h" +#include CMSIS_device_header + +namespace tflite { + +#if 1 + +// Stub functions for the project_generation target since these will be replaced +// by the target-specific implementation in the overall infrastructure that the +// TFLM project generation will be a part of. +//int32_t ticks_per_second() { return 0; } +//uint32_t GetCurrentTimeTicks() { return 0; } + +#else + +uint32_t ticks_per_second() { return 0; } + +uint32_t GetCurrentTimeTicks() { + static bool is_initialized = false; + + if (!is_initialized) { +#if (!defined(TF_LITE_STRIP_ERROR_STRINGS) && !defined(ARMCM0) && \ + !defined(ARMCM0plus)) +#ifdef ARM_MODEL_USE_PMU_COUNTERS + ARM_PMU_Enable(); + DCB->DEMCR |= DCB_DEMCR_TRCENA_Msk; + + ARM_PMU_CYCCNT_Reset(); + ARM_PMU_CNTR_Enable(PMU_CNTENSET_CCNTR_ENABLE_Msk); + +#else +#ifdef ARMCM7 + DWT->LAR = 0xC5ACCE55; +#endif + DCB->DEMCR |= DCB_DEMCR_TRCENA_Msk; + + // Reset and DWT cycle counter. + DWT->CYCCNT = 0; + DWT->CTRL |= 1UL; + +#endif +#endif + + is_initialized = true; + } + +#if (!defined(TF_LITE_STRIP_ERROR_STRINGS) && !defined(ARMCM0) && \ + !defined(ARMCM0plus)) +#ifdef ARM_MODEL_USE_PMU_COUNTERS + return ARM_PMU_Get_CCNTR(); +#else + return DWT->CYCCNT; +#endif +#else + return 0; +#endif +} + +#endif // defined(PROJECT_GENERATION) + +} // namespace tflite diff --git a/tensorflow-test/HelloWorld/RTE/Machine_Learning/micro_time.cpp.base@1.24.2 b/tensorflow-test/HelloWorld/RTE/Machine_Learning/micro_time.cpp.base@1.24.2 new file mode 100644 index 0000000..49dcbf6 --- /dev/null +++ b/tensorflow-test/HelloWorld/RTE/Machine_Learning/micro_time.cpp.base@1.24.2 @@ -0,0 +1,80 @@ +/* Copyright 2022 The TensorFlow Authors. All Rights Reserved. + +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 + + http://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. +==============================================================================*/ + +#include "tensorflow/lite/micro/micro_time.h" + +// Set in micro/tools/make/targets/cortex_m_generic_makefile.inc. +// Needed for the DWT and PMU counters. +#include "RTE_Components.h" +#include CMSIS_device_header + +namespace tflite { + +#if defined(PROJECT_GENERATION) + +// Stub functions for the project_generation target since these will be replaced +// by the target-specific implementation in the overall infrastructure that the +// TFLM project generation will be a part of. +uint32_t ticks_per_second() { return 0; } +uint32_t GetCurrentTimeTicks() { return 0; } + +#else + +uint32_t ticks_per_second() { return 0; } + +uint32_t GetCurrentTimeTicks() { + static bool is_initialized = false; + + if (!is_initialized) { +#if (!defined(TF_LITE_STRIP_ERROR_STRINGS) && !defined(ARMCM0) && \ + !defined(ARMCM0plus)) +#ifdef ARM_MODEL_USE_PMU_COUNTERS + ARM_PMU_Enable(); + DCB->DEMCR |= DCB_DEMCR_TRCENA_Msk; + + ARM_PMU_CYCCNT_Reset(); + ARM_PMU_CNTR_Enable(PMU_CNTENSET_CCNTR_ENABLE_Msk); + +#else +#ifdef ARMCM7 + DWT->LAR = 0xC5ACCE55; +#endif + DCB->DEMCR |= DCB_DEMCR_TRCENA_Msk; + + // Reset and DWT cycle counter. + DWT->CYCCNT = 0; + DWT->CTRL |= 1UL; + +#endif +#endif + + is_initialized = true; + } + +#if (!defined(TF_LITE_STRIP_ERROR_STRINGS) && !defined(ARMCM0) && \ + !defined(ARMCM0plus)) +#ifdef ARM_MODEL_USE_PMU_COUNTERS + return ARM_PMU_Get_CCNTR(); +#else + return DWT->CYCCNT; +#endif +#else + return 0; +#endif +} + +#endif // defined(PROJECT_GENERATION) + +} // namespace tflite diff --git a/tensorflow-test/HelloWorld/RTE/Machine_Learning/system_setup.cpp b/tensorflow-test/HelloWorld/RTE/Machine_Learning/system_setup.cpp new file mode 100644 index 0000000..d6b0237 --- /dev/null +++ b/tensorflow-test/HelloWorld/RTE/Machine_Learning/system_setup.cpp @@ -0,0 +1,164 @@ +/* Copyright 2024 The TensorFlow Authors. All Rights Reserved. + +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 + + http://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. +==============================================================================*/ + +#ifdef ETHOS_U +#include + +#include + +#include "ethosu_driver.h" +#include "pmu_ethosu.h" +#endif + +// This is set in micro/tools/make/targets/cortex_m_corstone_300_makefile.inc. +// It is needed for the calls to NVIC_SetVector()/NVIC_EnableIR(), +#include "RTE_Components.h" +#include CMSIS_device_header + +#include "tensorflow/lite/micro/micro_log.h" +#include "tensorflow/lite/micro/micro_time.h" +#include "tensorflow/lite/micro/system_setup.h" + +#ifdef ETHOS_U + +bool npuPmuCycleCounterIsSet; +uint64_t npuPmuCycleCounter; + +extern "C" { +void ethosu_inference_begin(struct ethosu_driver* drv, void* userArg) { + // Enable PMU + ETHOSU_PMU_Enable(drv); + + // Enable cycle counter + ETHOSU_PMU_PMCCNTR_CFG_Set_Stop_Event(drv, ETHOSU_PMU_NPU_IDLE); + ETHOSU_PMU_PMCCNTR_CFG_Set_Start_Event(drv, ETHOSU_PMU_NPU_ACTIVE); + ETHOSU_PMU_CNTR_Enable(drv, ETHOSU_PMU_CCNT_Msk); + ETHOSU_PMU_CYCCNT_Reset(drv); + + // Reset all counters + ETHOSU_PMU_EVCNTR_ALL_Reset(drv); +} + +void ethosu_inference_end(struct ethosu_driver* drv, void* userArg) { + // Save cycle counter + npuPmuCycleCounter += ETHOSU_PMU_Get_CCNTR(drv); + npuPmuCycleCounterIsSet = true; + + // Disable PMU + ETHOSU_PMU_Disable(drv); +} +} +#endif + +namespace tflite { + +namespace { +#ifdef ETHOS_U +constexpr uint32_t kClocksPerSecond = 200e6; +#else +constexpr uint32_t kClocksPerSecond = 25e6; +#endif +} // namespace + +uint32_t ticks_per_second() { return kClocksPerSecond; } + +uint32_t GetCurrentTimeTicks() { +#if (!defined(TF_LITE_STRIP_ERROR_STRINGS)) +#ifdef ETHOS_U + uint32_t ticks = static_cast(npuPmuCycleCounter); + + // Note cycle counter will be reset here for next iteration + if (npuPmuCycleCounterIsSet) { + npuPmuCycleCounter = 0; + npuPmuCycleCounterIsSet = false; + } + + return ticks; +#else + +#if defined(ARMCM0) + return 0; +#else +#ifdef ARMCM55 + return ARM_PMU_Get_CCNTR(); +#else + return DWT->CYCCNT; +#endif +#endif + +#endif +#else + return 0; +#endif +} + +#ifdef ETHOS_U +#if defined(ETHOSU_FAST_MEMORY_SIZE) && ETHOSU_FAST_MEMORY_SIZE > 0 +__attribute__((aligned(16), section(".bss.ethosu_scratch"))) +uint8_t ethosu0_scratch[ETHOSU_FAST_MEMORY_SIZE]; +#else +#define ethosu0_scratch 0 +#define ETHOSU_FAST_MEMORY_SIZE 0 +#endif + +struct ethosu_driver ethosu0_driver; + +void ethosuIrqHandler0() { ethosu_irq_handler(ðosu0_driver); } +#endif + +extern "C" { +void uart_init(void); +} + +void InitializeTarget() { + uart_init(); + +#if (!defined(TF_LITE_STRIP_ERROR_STRINGS) && !defined(ARMCM0)) +#ifdef ARMCM55 + ARM_PMU_Enable(); + DCB->DEMCR |= DCB_DEMCR_TRCENA_Msk; + + ARM_PMU_CYCCNT_Reset(); + ARM_PMU_CNTR_Enable(PMU_CNTENSET_CCNTR_ENABLE_Msk); + +#else + CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; + + // Reset and enable DWT cycle counter. + DWT->CYCCNT = 0; + DWT->CTRL |= 1UL; + +#endif +#endif + +#ifdef ETHOS_U + constexpr int ethosu_base_address = 0x48102000; + constexpr int ethosu_irq = 56; + constexpr int ethosu_irq_priority = 5; + + // Initialize Ethos-U NPU driver. + if (ethosu_init(ðosu0_driver, reinterpret_cast(ethosu_base_address), + ethosu0_scratch, ETHOSU_FAST_MEMORY_SIZE, 1, 1)) { + MicroPrintf("Failed to initialize Ethos-U driver"); + return; + } + NVIC_SetVector(static_cast(ethosu_irq), + (uint32_t)ðosuIrqHandler0); + NVIC_SetPriority(static_cast(ethosu_irq), ethosu_irq_priority); + NVIC_EnableIRQ(static_cast(ethosu_irq)); +#endif +} + +} // namespace tflite \ No newline at end of file diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/system_setup.cc b/tensorflow-test/HelloWorld/RTE/Machine_Learning/system_setup.cpp.base@1.24.2 similarity index 74% rename from tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/system_setup.cc rename to tensorflow-test/HelloWorld/RTE/Machine_Learning/system_setup.cpp.base@1.24.2 index e803dc2..db4a100 100644 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/system_setup.cc +++ b/tensorflow-test/HelloWorld/RTE/Machine_Learning/system_setup.cpp.base@1.24.2 @@ -14,23 +14,12 @@ limitations under the License. ==============================================================================*/ #include "tensorflow/lite/micro/system_setup.h" -#include "stdio.h" -#include "tensorflow/lite/micro/cortex_m_generic/debug_log_callback.h" - -extern "C" void serial_init (void); namespace tflite { -void debug_log_printf(const char* s) { - printf(s); -} - // To add an equivalent function for your own platform, create your own // implementation file, and place it in a subfolder named after the target. See // tensorflow/lite/micro/debug_log.cc for a similar example. -void InitializeTarget() { - serial_init(); - RegisterDebugLogCallback(debug_log_printf); - //debug_log_printf("Initialized UART and registered Callback.") -} +void InitializeTarget() {} + } // namespace tflite diff --git a/tensorflow-test/HelloWorld/RTE/_size_CM55/Pre_Include_Global.h b/tensorflow-test/HelloWorld/RTE/_size_CM55/Pre_Include_Global.h new file mode 100644 index 0000000..94d5edb --- /dev/null +++ b/tensorflow-test/HelloWorld/RTE/_size_CM55/Pre_Include_Global.h @@ -0,0 +1,17 @@ +/* + * CSOLUTION generated file: DO NOT EDIT! + * Generated by: csolution version 2.1.0 + * + * Project: 'HelloWorld.size+CM55' + * Target: 'size+CM55' + */ + +#ifndef PRE_INCLUDE_GLOBAL_H +#define PRE_INCLUDE_GLOBAL_H + +/* tensorflow::Machine Learning:TensorFlow:Kernel&Reference@1.24.2 */ +// enabling global pre includes + #define TF_LITE_STATIC_MEMORY 1 + + +#endif /* PRE_INCLUDE_GLOBAL_H */ diff --git a/tensorflow-test/HelloWorld/RTE/_size_CM55/RTE_Components.h b/tensorflow-test/HelloWorld/RTE/_size_CM55/RTE_Components.h new file mode 100644 index 0000000..f739c48 --- /dev/null +++ b/tensorflow-test/HelloWorld/RTE/_size_CM55/RTE_Components.h @@ -0,0 +1,32 @@ +/* + * CSOLUTION generated file: DO NOT EDIT! + * Generated by: csolution version 2.1.0 + * + * Project: 'HelloWorld.size+CM55' + * Target: 'size+CM55' + */ + +#ifndef RTE_COMPONENTS_H +#define RTE_COMPONENTS_H + + +/* + * Define the Device Header File: + */ +#define CMSIS_device_header "ARMCM55.h" + +/* tensorflow::Data Exchange:Serialization:flatbuffers&tensorflow@1.24.2 */ +#define RTE_DataExchange_Serialization_flatbuffers /* flatbuffers */ +/* tensorflow::Data Processing:Math:gemmlowp fixed-point&tensorflow@1.24.2 */ +#define RTE_DataExchange_Math_gemmlowp /* gemmlowp */ +/* tensorflow::Data Processing:Math:kissfft&tensorflow@1.24.2 */ +#define RTE_DataExchange_Math_kissfft /* kissfft */ +/* tensorflow::Data Processing:Math:ruy&tensorflow@1.24.2 */ +#define RTE_DataProcessing_Math_ruy /* ruy */ +/* tensorflow::Machine Learning:TensorFlow:Kernel&Reference@1.24.2 */ +#define RTE_ML_TF_LITE /* TF */ +/* tensorflow::Machine Learning:TensorFlow:Testing@1.24.2 */ +#define RTE_ML_TF_LITE /* TF */ + + +#endif /* RTE_COMPONENTS_H */ diff --git a/tensorflow-test/HelloWorld/hello_world/BUILD b/tensorflow-test/HelloWorld/hello_world/BUILD new file mode 100644 index 0000000..03c9484 --- /dev/null +++ b/tensorflow-test/HelloWorld/hello_world/BUILD @@ -0,0 +1,84 @@ +# Description: +# TensorFlow Lite for Microcontrollers "hello world" example. +load("@rules_python//python:defs.bzl", "py_binary") +load("@tflm_pip_deps//:requirements.bzl", "requirement") +load( + "//tensorflow/lite/micro:build_def.bzl", + "micro_copts", +) + +package( + # Disabling layering_check because of http://b/177257332 + features = ["-layering_check"], + licenses = ["notice"], +) + +cc_library( + name = "model", + srcs = [ + "//tensorflow/lite/micro/examples/hello_world/models:generated_hello_world_float_model_cc", + "//tensorflow/lite/micro/examples/hello_world/models:generated_hello_world_int8_model_cc", + ], + hdrs = [ + "//tensorflow/lite/micro/examples/hello_world/models:generated_hello_world_float_model_hdr", + "//tensorflow/lite/micro/examples/hello_world/models:generated_hello_world_int8_model_hdr", + ], + copts = micro_copts(), +) + +cc_test( + name = "hello_world_test", + srcs = [ + "hello_world_test.cc", + ], + deps = [ + ":model", + "//tensorflow/lite/micro:micro_framework", + "//tensorflow/lite/micro:micro_log", + "//tensorflow/lite/micro:micro_profiler", + "//tensorflow/lite/micro:op_resolvers", + "//tensorflow/lite/micro:recording_allocators", + "//tensorflow/lite/micro/testing:micro_test", + "//tensorflow/lite/schema:schema_fbs", + ], +) + +py_binary( + name = "evaluate", + srcs = ["evaluate.py"], + data = ["//tensorflow/lite/micro/examples/hello_world/models:hello_world_float.tflite"], + python_version = "PY3", + srcs_version = "PY3", + deps = [ + "@absl_py//absl:app", + "@absl_py//absl/flags", + "@absl_py//absl/logging", + requirement("numpy"), + requirement("tensorflow-cpu"), + "//python/tflite_micro:runtime", + ], +) + +py_binary( + name = "evaluate_test", + srcs = ["evaluate_test.py"], + data = [ + "//tensorflow/lite/micro/examples/hello_world/models:hello_world_float.tflite", + "//tensorflow/lite/micro/examples/hello_world/models:hello_world_int8.tflite", + ], + python_version = "PY3", + srcs_version = "PY3", + deps = [ + ":evaluate", + ], +) + +py_binary( + name = "train", + srcs = ["train.py"], + srcs_version = "PY3", + deps = [ + requirement("numpy"), + requirement("tensorflow-cpu"), + ], +) diff --git a/tensorflow-test/HelloWorld/hello_world/Makefile.inc b/tensorflow-test/HelloWorld/hello_world/Makefile.inc new file mode 100644 index 0000000..bfcd52e --- /dev/null +++ b/tensorflow-test/HelloWorld/hello_world/Makefile.inc @@ -0,0 +1,37 @@ +HELLO_WORLD_TEST_SRCS := \ +$(TENSORFLOW_ROOT)tensorflow/lite/micro/examples/hello_world/hello_world_test.cc + +HELLO_WORLD_SRCS := \ +$(TENSORFLOW_ROOT)tensorflow/lite/micro/examples/hello_world/hello_world_test.cc + +HELLO_WORLD_HDRS := + +HELLO_WORLD_GENERATOR_INPUTS := \ +$(TENSORFLOW_ROOT)tensorflow/lite/micro/examples/hello_world/models/hello_world_float.tflite \ +$(TENSORFLOW_ROOT)tensorflow/lite/micro/examples/hello_world/models/hello_world_int8.tflite + +HELLO_WORLD_GENERATED_SRCS := \ +$(GENERATED_SRCS_DIR)$(TENSORFLOW_ROOT)tensorflow/lite/micro/examples/hello_world/models/hello_world_float_model_data.cc \ +$(GENERATED_SRCS_DIR)$(TENSORFLOW_ROOT)tensorflow/lite/micro/examples/hello_world/models/hello_world_int8_model_data.cc + +HELLO_WORLD_GENERATED_HDRS := \ +$(GENERATED_SRCS_DIR)$(TENSORFLOW_ROOT)tensorflow/lite/micro/examples/hello_world/models/hello_world_float_model_data.h \ +$(GENERATED_SRCS_DIR)$(TENSORFLOW_ROOT)tensorflow/lite/micro/examples/hello_world/models/hello_world_int8_model_data.h + +# Tests loading and running the sine model. +$(eval $(call microlite_test,hello_world_test,\ +$(HELLO_WORLD_TEST_SRCS),,$(HELLO_WORLD_GENERATOR_INPUTS))) + +# Builds a standalone binary. +$(eval $(call microlite_test,hello_world,\ +$(HELLO_WORLD_SRCS),,$(HELLO_WORLD_GENERATOR_INPUTS))) + +# Add sources and headers generated from $(HELLO_WORLD_GENERATOR_INPUTS). +HELLO_WORLD_SRCS += $(HELLO_WORLD_GENERATED_SRCS) +HELLO_WORLD_HDRS += $(HELLO_WORLD_GENERATED_HDRS) + +list_hello_world_example_sources: + @echo $(HELLO_WORLD_SRCS) + +list_hello_world_example_headers: + @echo $(HELLO_WORLD_HDRS) diff --git a/tensorflow-test/HelloWorld/hello_world/README.md b/tensorflow-test/HelloWorld/hello_world/README.md new file mode 100644 index 0000000..8277750 --- /dev/null +++ b/tensorflow-test/HelloWorld/hello_world/README.md @@ -0,0 +1,94 @@ + + +# Hello World Example + +This example is designed to demonstrate the absolute basics of using [TensorFlow +Lite for Microcontrollers](https://www.tensorflow.org/lite/microcontrollers). +It includes the full end-to-end workflow of training a model, converting it for +use with TensorFlow Lite for Microcontrollers for running inference on a +microcontroller. + +## Table of contents + +- [Run the evaluate.py script on a development machine](#run-the-evaluate-script-on-a-development-machine) +- [Run the tests on a development machine](#run-the-tests-on-a-development-machine) +- [Train your own model](#train-your-own-model) + +## Run the evaluate.py script on a development machine +The evaluate.py script runs the hello_world.tflite model with x_values in the +range of [0, 2*PI]. The script plots a diagram of the predicted value of sinwave +using TFLM interpreter and compare that prediction with the actual value +generated by the numpy lib. +```bash +bazel build tensorflow/lite/micro/examples/hello_world:evaluate +bazel run tensorflow/lite/micro/examples/hello_world:evaluate +bazel run tensorflow/lite/micro/examples/hello_world:evaluate -- --use_tflite +``` +![TFLM hello_world sinwave prediction VS actual values](images/hello_world_tflm.png) ![TFLM hello_world sinwave prediction VS actual values](images/hello_world_tflite.png) + +## Run the evaluate_test.py script on a development machine +These tests verify the input/output as well as the prediction of the +hello_world.tflite model. There is a test to also verify the correctness of +the model by running both TFLM and TFlite interpreter and then comparing the +prediction from both interpreters. +```bash +bazel build tensorflow/lite/micro/examples/hello_world:evaluate_test +bazel run tensorflow/lite/micro/examples/hello_world:evaluate_test +``` + +## Run the tests on a development machine + +Run the cc test using bazel +```bash +bazel run tensorflow/lite/micro/examples/hello_world:hello_world_test +``` +And to run it using make +```bash +make -f tensorflow/lite/micro/tools/make/Makefile test_hello_world_test +``` + +The source for the test is [hello_world_test.cc](hello_world_test.cc). +It's a fairly small amount of code that creates an interpreter, gets a handle to +a model that's been compiled into the program, and then invokes the interpreter +with the model and sample inputs. + +## Train your own model + +So far you have used an existing trained model to run inference on +microcontrollers. If you wish to train your own model, here are the scripts +that can help you to achieve that. + +```bash +bazel build tensorflow/lite/micro/examples/hello_world:train +``` +And to run it +```bash +bazel-bin/tensorflow/lite/micro/examples/hello_world/train --save_tf_model +--save_dir=/tmp/model_created/ +``` +The above script will create a TF model and TFlite model inside the +`/tmp/model_created` directory. + +Now the above model is a `float` model. Means it can take floating point input +and can produce floating point output. + +If we want a fully quantized model we can use the `ptq.py` script inside the +quantization directory. The `ptq.py` script can take a floating point TF model +and can produce a quantized model. + +Build the `ptq.py` script like +```bash +bazel build tensorflow/lite/micro/examples/hello_world/quantization:ptq +``` + +Then we can run the `ptq` script to convert the float model to quant model as +follows. Note that we are using the directory (`/tmp/model_created`) of the +TF model as the source_model_dir here. The quant model +(named `hello_world_int8.tflite`) will be created inside the target_dir. +The `ptq.py` script will convert the `TF model` found inside the +`/tmp/model_created` folder and convert it to a `int8` TFlite model. +```bash +bazel-bin/tensorflow/lite/micro/examples/hello_world/quantization/ptq +--source_model_dir=/tmp/model_created --target_dir=/tmp/quant_model/ +``` + diff --git a/tensorflow-test/HelloWorld/hello_world/evaluate.py b/tensorflow-test/HelloWorld/hello_world/evaluate.py new file mode 100644 index 0000000..8b6f948 --- /dev/null +++ b/tensorflow-test/HelloWorld/hello_world/evaluate.py @@ -0,0 +1,140 @@ +# Copyright 2023 The TensorFlow Authors. All Rights Reserved. +# +# 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 +# +# http://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. + +import os +import tensorflow as tf +from absl import app +from absl import flags +import numpy as np +import matplotlib.pyplot as plt +from tensorflow.python.platform import resource_loader +from tflite_micro.python.tflite_micro import runtime + +_USE_TFLITE_INTERPRETER = flags.DEFINE_bool( + 'use_tflite', + False, + 'Inference with the TF Lite interpreter instead of the TFLM interpreter', +) + +_PREFIX_PATH = resource_loader.get_path_to_datafile('') + + +def invoke_tflm_interpreter(input_shape, interpreter, x_value, input_index, + output_index): + input_data = np.reshape(x_value, input_shape) + interpreter.set_input(input_data, input_index) + interpreter.invoke() + y_quantized = np.reshape(interpreter.get_output(output_index), -1)[0] + return y_quantized + + +def invoke_tflite_interpreter(input_shape, interpreter, x_value, input_index, + output_index): + input_data = np.reshape(x_value, input_shape) + interpreter.set_tensor(input_index, input_data) + interpreter.invoke() + tflite_output = interpreter.get_tensor(output_index) + y_quantized = np.reshape(tflite_output, -1)[0] + return y_quantized + + +# Generate a list of 1000 random floats in the range of 0 to 2*pi. +def generate_random_int8_input(sample_count=1000): + # Generate a uniformly distributed set of random numbers in the range from + # 0 to 2Ï€, which covers a complete sine wave oscillation + np.random.seed(42) + x_values = np.random.uniform(low=0, high=2 * np.pi, + size=sample_count).astype(np.int8) + return x_values + + +# Generate a list of 1000 random floats in the range of 0 to 2*pi. +def generate_random_float_input(sample_count=1000): + # Generate a uniformly distributed set of random numbers in the range from + # 0 to 2Ï€, which covers a complete sine wave oscillation + np.random.seed(42) + x_values = np.random.uniform(low=0, high=2 * np.pi, + size=sample_count).astype(np.float32) + return x_values + + +# Invoke the tflm interpreter with x_values in the range of [0, 2*PI] and +# returns the prediction of the interpreter. +def get_tflm_prediction(model_path, x_values): + # Create the tflm interpreter + tflm_interpreter = runtime.Interpreter.from_file(model_path) + + input_shape = np.array(tflm_interpreter.get_input_details(0).get('shape')) + + y_predictions = np.empty(x_values.size, dtype=np.float32) + + for i, x_value in enumerate(x_values): + y_predictions[i] = invoke_tflm_interpreter(input_shape, + tflm_interpreter, + x_value, + input_index=0, + output_index=0) + return y_predictions + + +# Invoke the tflite interpreter with x_values in the range of [0, 2*PI] and +# returns the prediction of the interpreter. +def get_tflite_prediction(model_path, x_values): + # TFLite interpreter + tflite_interpreter = tf.lite.Interpreter( + model_path=model_path, + experimental_op_resolver_type=tf.lite.experimental.OpResolverType. + BUILTIN_REF, + ) + tflite_interpreter.allocate_tensors() + + input_details = tflite_interpreter.get_input_details()[0] + output_details = tflite_interpreter.get_output_details()[0] + input_shape = np.array(input_details.get('shape')) + + y_predictions = np.empty(x_values.size, dtype=np.float32) + + for i, x_value in enumerate(x_values): + y_predictions[i] = invoke_tflite_interpreter( + input_shape, + tflite_interpreter, + x_value, + input_details['index'], + output_details['index'], + ) + return y_predictions + + +def main(_): + model_path = os.path.join(_PREFIX_PATH, 'models/hello_world_float.tflite') + + x_values = generate_random_float_input() + + # Calculate the corresponding sine values + y_true_values = np.sin(x_values).astype(np.float32) + + if _USE_TFLITE_INTERPRETER.value: + y_predictions = get_tflite_prediction(model_path, x_values) + plt.plot(x_values, y_predictions, 'b.', label='TFLite Prediction') + else: + y_predictions = get_tflm_prediction(model_path, x_values) + plt.plot(x_values, y_predictions, 'b.', label='TFLM Prediction') + + plt.plot(x_values, y_true_values, 'r.', label='Actual values') + plt.legend() + plt.show() + + +if __name__ == '__main__': + app.run(main) diff --git a/tensorflow-test/HelloWorld/hello_world/evaluate_test.py b/tensorflow-test/HelloWorld/hello_world/evaluate_test.py new file mode 100644 index 0000000..6de8490 --- /dev/null +++ b/tensorflow-test/HelloWorld/hello_world/evaluate_test.py @@ -0,0 +1,64 @@ +# Copyright 2023 The TensorFlow Authors. All Rights Reserved. +# +# 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 +# +# http://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. + +import os +import numpy as np + +from tensorflow.python.framework import test_util +from tensorflow.python.platform import resource_loader +from tensorflow.python.platform import test +from tflite_micro.python.tflite_micro import runtime +from tflite_micro.tensorflow.lite.micro.examples.hello_world import evaluate + +PREFIX_PATH = resource_loader.get_path_to_datafile('') + + +class HelloWorldFloatModelTest(test_util.TensorFlowTestCase): + model_path = os.path.join(PREFIX_PATH, 'models/hello_world_float.tflite') + input_shape = (1, 1) + output_shape = (1, 1) + tflm_interpreter = runtime.Interpreter.from_file(model_path) + + def test_compare_with_tflite(self): + x_values = evaluate.generate_random_float_input() + + tflm_y_predictions = evaluate.get_tflm_prediction(self.model_path, + x_values) + + tflite_y_predictions = evaluate.get_tflite_prediction( + self.model_path, x_values) + + self.assertAllEqual(tflm_y_predictions, tflite_y_predictions) + + +class HelloWorldQuantModelTest(test_util.TensorFlowTestCase): + model_path = os.path.join(PREFIX_PATH, 'models/hello_world_int8.tflite') + input_shape = (1, 1) + output_shape = (1, 1) + tflm_interpreter = runtime.Interpreter.from_file(model_path) + + def test_compare_with_tflite(self): + x_values = evaluate.generate_random_int8_input() + + tflm_y_predictions = evaluate.get_tflm_prediction(self.model_path, + x_values) + + tflite_y_predictions = evaluate.get_tflite_prediction( + self.model_path, x_values) + + self.assertAllEqual(tflm_y_predictions, tflite_y_predictions) + + +if __name__ == '__main__': + test.main() diff --git a/tensorflow-test/HelloWorld/hello_world/hello_world_test.cpp b/tensorflow-test/HelloWorld/hello_world/hello_world_test.cpp new file mode 100644 index 0000000..5665ecf --- /dev/null +++ b/tensorflow-test/HelloWorld/hello_world/hello_world_test.cpp @@ -0,0 +1,159 @@ +/* Copyright 2023 The TensorFlow Authors. All Rights Reserved. + +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 + + http://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. +==============================================================================*/ + +#include + +#include "tensorflow/lite/core/c/common.h" +#include "./models/hello_world_float_model_data.h" +#include "./models/hello_world_int8_model_data.h" +#include "tensorflow/lite/micro/micro_interpreter.h" +#include "tensorflow/lite/micro/micro_log.h" +#include "tensorflow/lite/micro/micro_mutable_op_resolver.h" +#include "tensorflow/lite/micro/micro_profiler.h" +#include "tensorflow/lite/micro/recording_micro_interpreter.h" +#include "tensorflow/lite/micro/system_setup.h" +#include "tensorflow/lite/schema/schema_generated.h" + +namespace { +using HelloWorldOpResolver = tflite::MicroMutableOpResolver<1>; + +TfLiteStatus RegisterOps(HelloWorldOpResolver& op_resolver) { + TF_LITE_ENSURE_STATUS(op_resolver.AddFullyConnected()); + return kTfLiteOk; +} +} // namespace + +TfLiteStatus ProfileMemoryAndLatency() { + tflite::MicroProfiler profiler; + HelloWorldOpResolver op_resolver; + TF_LITE_ENSURE_STATUS(RegisterOps(op_resolver)); + + // Arena size just a round number. The exact arena usage can be determined + // using the RecordingMicroInterpreter. + constexpr int kTensorArenaSize = 3000; + uint8_t tensor_arena[kTensorArenaSize]; + constexpr int kNumResourceVariables = 24; + + tflite::RecordingMicroAllocator* allocator( + tflite::RecordingMicroAllocator::Create(tensor_arena, kTensorArenaSize)); + tflite::RecordingMicroInterpreter interpreter( + tflite::GetModel(g_hello_world_float_model_data), op_resolver, allocator, + tflite::MicroResourceVariables::Create(allocator, kNumResourceVariables), + &profiler); + + TF_LITE_ENSURE_STATUS(interpreter.AllocateTensors()); + TFLITE_CHECK_EQ(interpreter.inputs_size(), 1); + interpreter.input(0)->data.f[0] = 1.f; + TF_LITE_ENSURE_STATUS(interpreter.Invoke()); + + MicroPrintf(""); // Print an empty new line + profiler.LogTicksPerTagCsv(); + + MicroPrintf(""); // Print an empty new line + interpreter.GetMicroAllocator().PrintAllocations(); + return kTfLiteOk; +} + +TfLiteStatus LoadFloatModelAndPerformInference() { + const tflite::Model* model = + ::tflite::GetModel(g_hello_world_float_model_data); + TFLITE_CHECK_EQ(model->version(), TFLITE_SCHEMA_VERSION); + + HelloWorldOpResolver op_resolver; + TF_LITE_ENSURE_STATUS(RegisterOps(op_resolver)); + + // Arena size just a round number. The exact arena usage can be determined + // using the RecordingMicroInterpreter. + constexpr int kTensorArenaSize = 3000; + uint8_t tensor_arena[kTensorArenaSize]; + + tflite::MicroInterpreter interpreter(model, op_resolver, tensor_arena, + kTensorArenaSize); + TF_LITE_ENSURE_STATUS(interpreter.AllocateTensors()); + + // Check if the predicted output is within a small range of the + // expected output + float epsilon = 0.05f; + constexpr int kNumTestValues = 4; + float golden_inputs[kNumTestValues] = {0.f, 1.f, 3.f, 5.f}; + + for (int i = 0; i < kNumTestValues; ++i) { + interpreter.input(0)->data.f[0] = golden_inputs[i]; + TF_LITE_ENSURE_STATUS(interpreter.Invoke()); + float y_pred = interpreter.output(0)->data.f[0]; + TFLITE_CHECK_LE(abs(sin(golden_inputs[i]) - y_pred), epsilon); + } + + return kTfLiteOk; +} + +TfLiteStatus LoadQuantModelAndPerformInference() { + // Map the model into a usable data structure. This doesn't involve any + // copying or parsing, it's a very lightweight operation. + const tflite::Model* model = + ::tflite::GetModel(g_hello_world_int8_model_data); + TFLITE_CHECK_EQ(model->version(), TFLITE_SCHEMA_VERSION); + + HelloWorldOpResolver op_resolver; + TF_LITE_ENSURE_STATUS(RegisterOps(op_resolver)); + + // Arena size just a round number. The exact arena usage can be determined + // using the RecordingMicroInterpreter. + constexpr int kTensorArenaSize = 3000; + uint8_t tensor_arena[kTensorArenaSize]; + + tflite::MicroInterpreter interpreter(model, op_resolver, tensor_arena, + kTensorArenaSize); + + TF_LITE_ENSURE_STATUS(interpreter.AllocateTensors()); + + TfLiteTensor* input = interpreter.input(0); + TFLITE_CHECK_NE(input, nullptr); + + TfLiteTensor* output = interpreter.output(0); + TFLITE_CHECK_NE(output, nullptr); + + float output_scale = output->params.scale; + int output_zero_point = output->params.zero_point; + + // Check if the predicted output is within a small range of the + // expected output + float epsilon = 0.05; + + constexpr int kNumTestValues = 4; + float golden_inputs_float[kNumTestValues] = {0.77, 1.57, 2.3, 3.14}; + + // The int8 values are calculated using the following formula + // (golden_inputs_float[i] / input->params.scale + input->params.scale) + int8_t golden_inputs_int8[kNumTestValues] = {-96, -63, -34, 0}; + + for (int i = 0; i < kNumTestValues; ++i) { + input->data.int8[0] = golden_inputs_int8[i]; + TF_LITE_ENSURE_STATUS(interpreter.Invoke()); + float y_pred = (output->data.int8[0] - output_zero_point) * output_scale; + TFLITE_CHECK_LE(abs(sin(golden_inputs_float[i]) - y_pred), epsilon); + } + + return kTfLiteOk; +} + +int main(int argc, char* argv[]) { + tflite::InitializeTarget(); + TF_LITE_ENSURE_STATUS(ProfileMemoryAndLatency()); + TF_LITE_ENSURE_STATUS(LoadFloatModelAndPerformInference()); + TF_LITE_ENSURE_STATUS(LoadQuantModelAndPerformInference()); + MicroPrintf("~~~ALL TESTS PASSED~~~\n"); + return kTfLiteOk; +} diff --git a/tensorflow-test/HelloWorld/hello_world/images/hello_world_tflite.png b/tensorflow-test/HelloWorld/hello_world/images/hello_world_tflite.png new file mode 100644 index 0000000000000000000000000000000000000000..56b222169864b2bbec16a3882dd63c96132b9d2c GIT binary patch literal 27649 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 literal 0 HcmV?d00001 diff --git a/tensorflow-test/HelloWorld/hello_world/images/hello_world_tflm.png b/tensorflow-test/HelloWorld/hello_world/images/hello_world_tflm.png new file mode 100644 index 0000000000000000000000000000000000000000..a89fa086622a88ff20e79fab1b5be560f0671366 GIT binary patch literal 27448 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 z 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 literal 0 HcmV?d00001 diff --git a/tensorflow-test/HelloWorld/hello_world/models/BUILD b/tensorflow-test/HelloWorld/hello_world/models/BUILD new file mode 100644 index 0000000..4c9441b --- /dev/null +++ b/tensorflow-test/HelloWorld/hello_world/models/BUILD @@ -0,0 +1,40 @@ +load("//tensorflow/lite/micro:build_def.bzl", "generate_cc_arrays") + +package( + default_visibility = ["//visibility:public"], +) + +exports_files( + srcs = [ + "hello_world_float.tflite", + "hello_world_int8.tflite", + ], + visibility = [ + "//codegen/examples/hello_world:__subpackages__", + "//tensorflow/lite/micro/examples/hello_world:__subpackages__", + ], +) + +generate_cc_arrays( + name = "generated_hello_world_float_model_cc", + src = "hello_world_float.tflite", + out = "hello_world_float_model_data.cc", +) + +generate_cc_arrays( + name = "generated_hello_world_float_model_hdr", + src = "hello_world_float.tflite", + out = "hello_world_float_model_data.h", +) + +generate_cc_arrays( + name = "generated_hello_world_int8_model_cc", + src = "hello_world_int8.tflite", + out = "hello_world_int8_model_data.cc", +) + +generate_cc_arrays( + name = "generated_hello_world_int8_model_hdr", + src = "hello_world_int8.tflite", + out = "hello_world_int8_model_data.h", +) diff --git a/tensorflow-test/HelloWorld/hello_world/models/hello_world_float.tflite b/tensorflow-test/HelloWorld/hello_world/models/hello_world_float.tflite new file mode 100644 index 0000000000000000000000000000000000000000..f741b3a7b6b63a476832b4f95c3199b7b8b7e17e GIT binary patch literal 3164 zcmaJ@2~?9;7XAen6pE-38D%Ug~4T~F81OYv+g%wwOI1cxM(L6KHzHaE1?jP48RQIF>rpCITI0Kr%ttM7U27dI*9O!HyJcY1oC}#B!mRWfiaK zMI&C%>wE~k35lA7@hxa%~9qJ+o$Zitq6p5KZp-jrlU*z5om~0Df6IPGMo_| ziBn68@VcE3%pUsyY`28M+@LGiG}r`&+TD0<=YE)zD&pGsY)C(tiH^G#;>(rZ*xhLv ze%0b6?Vh|@%usB>?~Ko+5WNX9Vr`{W^*8a$x)O-}F;$$H{4ddv*;3qnl?+a}4-s7| zdy3~r7UGQ)cIdjW6b;!Q`sP>P6FvJLPz<&CS)B6pP;u(9Y7knw6dx|j1jB+IQq+B4 zoEURnvfG|4)l?@y?$az-Qtd4bmkogYb7iRfS^X;yS7FWH)dKekx9Q90s|kMq#p6 z1{1eF7u^@zkDo} zt2Uya`#nYJ<1`o{SHk=KYcM+RaB+*EQTEs_!T7CdkTJH1!?__aQNkZIIdWM!jGSz{e=|lH|+yu z;+iVBwRooDz=*>bAOEv-@oPtA*aCw>H@+uq)_a&5#+($*|40LeuEkPDZIN_(&``|S zl@5;v`oYSWDr^aPB+6(Xewwlldw-t-n=730qnB&pyeSLS+BJ~ndIJ>;i=@9TiG~X8 zR=6^3E%v_s70Uho3}?#T6aP6l9D}x%pfF}{@x;AH!G8Z<2p&Ej?Ka9W(xer`y!T<< zs4F;&?peN*_+F8(XqJlQWjLv6Dum0tl)&4 zd9SUhG2?qQj&M_kA2gvn?+EUHjf?0k-_HM(!1FpE)1H8{qF2^DrB%-Do_#x%&XqIK zDhon?qqYCAjf;IVHV-46-`}x*ZHgBQ1?7RWRS;g8YT*eTVPyak;(n#LOuu>$yd8qkGVuz_l!7T2Q!KV7!j%gzjepXYzmT-%}e#WV^I%+I6)IcrQNtWkOEPTJy$0gQMTX&OPuCrVxx#n^W|UdQ&%l8l-zyoPmo4cAsKVJu@mo#~gWynUOWE*809$1T_G)*SY**r9=ii#eE! zKlasH|JkorUVa4#!UmdfCFGNXvk6Xw3#5=tXr%dQ0fzj*NH+k7duG3at&eb#Gokne< zW?7Pko&c&?kJjghr$>lNACeU7+sRD0CN`-vd4N`x=&x22UAr%AV|ypQ@P88BrpGa| zo`LixQ`^zv+dT2;)DMq#FRb}s?(|o!`QSc-|HqMpXJnJ}+Ra@qtaq;z&X3Z?@PAw>EJ86a=IE1gKr k;U5Vd-s<#b=Qp|K-TlT{V=lJuV7W`ELo9r6@p + +#include "models/hello_world_float_model_data.h" + +const unsigned int g_hello_world_float_model_data_size = 3164; +alignas(16) const unsigned char g_hello_world_float_model_data[] = {0x1c,0x0,0x0,0x0,0x54,0x46,0x4c,0x33,0x14,0x0,0x20,0x0,0x1c,0x0,0x18,0x0,0x14,0x0,0x10,0x0,0xc,0x0,0x0,0x0,0x8,0x0,0x4,0x0,0x14,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x90,0x0,0x0,0x0,0xe8,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x10,0x7,0x0,0x0,0x8,0xc,0x0,0x0,0x3,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0xa,0x0,0x10,0x0,0xc,0x0,0x8,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x73,0x65,0x72,0x76,0x69,0x6e,0x67,0x5f,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x98,0xff,0xff,0xff,0x9,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x64,0x65,0x6e,0x73,0x65,0x5f,0x32,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xca,0xf9,0xff,0xff,0x4,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x64,0x65,0x6e,0x73,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x0,0x2,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xdc,0xff,0xff,0xff,0xc,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x43,0x4f,0x4e,0x56,0x45,0x52,0x53,0x49,0x4f,0x4e,0x5f,0x4d,0x45,0x54,0x41,0x44,0x41,0x54,0x41,0x0,0x8,0x0,0xc,0x0,0x8,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x6d,0x69,0x6e,0x5f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x5f,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x0,0xd,0x0,0x0,0x0,0x14,0x6,0x0,0x0,0xc,0x6,0x0,0x0,0xbc,0x5,0x0,0x0,0xa0,0x5,0x0,0x0,0x50,0x5,0x0,0x0,0x0,0x5,0x0,0x0,0xf0,0x0,0x0,0x0,0xa0,0x0,0x0,0x0,0x98,0x0,0x0,0x0,0x90,0x0,0x0,0x0,0x88,0x0,0x0,0x0,0x68,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x76,0xfa,0xff,0xff,0x4,0x0,0x0,0x0,0x54,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x8,0x0,0xe,0x0,0x8,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x8,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa,0x0,0x10,0x0,0xc,0x0,0x8,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x32,0x2e,0x31,0x31,0x2e,0x30,0x0,0x0,0xd6,0xfa,0xff,0xff,0x4,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x31,0x2e,0x35,0x2e,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xf5,0xff,0xff,0xc4,0xf5,0xff,0xff,0xc8,0xf5,0xff,0xff,0xfe,0xfa,0xff,0xff,0x4,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0xea,0x85,0xf1,0xbe,0xef,0x1c,0x9a,0x3f,0xa3,0x23,0xa1,0x3f,0x12,0x94,0xb7,0x3e,0x0,0x89,0xe2,0x3d,0xeb,0x7a,0x86,0xbe,0x18,0x6f,0xa9,0x3e,0xec,0x6d,0x61,0x3f,0x12,0x4a,0x3d,0xbe,0x42,0x6b,0x8a,0x3f,0xc1,0xc3,0x3c,0xbf,0xe8,0xc0,0x9f,0x3e,0xee,0xaf,0x59,0xbf,0xc1,0x51,0x6e,0xbf,0x98,0x8c,0xb,0x3e,0xe1,0xc3,0xe3,0x3d,0x4a,0xfb,0xff,0xff,0x4,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x80,0x6d,0x32,0x3b,0xa,0x64,0x42,0x3e,0xf5,0xa4,0xd3,0x3e,0x1a,0xc7,0x3a,0xbe,0x66,0x99,0x4d,0x3e,0xac,0xe9,0x49,0xbe,0x38,0x73,0x7b,0xbd,0x2,0xb3,0x4,0xbe,0x34,0xae,0xff,0xbd,0xb7,0xf5,0xdb,0xbe,0xaf,0xb3,0xb2,0xbe,0x4d,0x95,0xb1,0x3e,0x83,0xa6,0xbc,0x3e,0x8e,0x14,0x3b,0x3e,0xfa,0x7c,0x74,0x3e,0xe9,0xf9,0x6d,0xbe,0x90,0x31,0xd3,0xbc,0x56,0xf2,0x48,0x3e,0x4a,0x1,0xa,0x3d,0x5b,0x82,0x1b,0xbf,0xe5,0x26,0x92,0x3d,0xcd,0x5a,0xcd,0x3e,0x69,0x43,0xcc,0xbe,0x24,0xaa,0xff,0xbd,0xf3,0x2,0xc2,0xbe,0xe5,0x2a,0x87,0x3e,0x71,0x62,0xbd,0xbe,0x2f,0xa3,0xae,0x3e,0x2a,0x47,0x89,0xbe,0x64,0x3b,0x25,0x3e,0xee,0x6f,0x9,0xbe,0x65,0xe0,0xba,0x3e,0x16,0xff,0x11,0x3e,0x60,0x69,0x38,0xbe,0x5f,0x7c,0xb6,0x3e,0xd4,0xec,0x13,0xbf,0xbd,0xa3,0xc9,0xbe,0x3,0x41,0x4e,0x3f,0xa9,0xf2,0x86,0xbe,0x70,0x4f,0x85,0xbc,0x53,0xec,0x9a,0x3e,0x4f,0xc9,0xe9,0x3e,0xe2,0xfa,0x60,0x3e,0x9c,0x7f,0x60,0xbe,0x86,0xc7,0x21,0x3e,0x2a,0xc5,0x0,0xbf,0xd1,0xda,0xaa,0x3e,0xaa,0x8b,0x14,0xbe,0x51,0x60,0x54,0xbe,0x48,0xc1,0xb7,0xbe,0xd3,0x8,0x38,0x3e,0x58,0x2e,0xeb,0x3e,0x3,0x92,0x4f,0x3e,0x5a,0x49,0xcb,0xbe,0xf5,0x1e,0xbf,0x3e,0x80,0xdc,0x9c,0xbe,0xcf,0x99,0xa2,0x3e,0x59,0x82,0x3d,0xbe,0x87,0x6f,0x98,0x3e,0x86,0xa5,0x8a,0xbe,0xe,0x9b,0x63,0xbe,0xfb,0x7a,0x33,0xbe,0x6,0x10,0x71,0xbe,0xa8,0xfc,0x10,0xbd,0x9c,0x46,0x91,0x3d,0x88,0x3c,0x92,0xbe,0xd4,0xbc,0xf4,0xbd,0x4d,0x74,0xbf,0x3e,0x88,0x6c,0x3,0xbd,0x7b,0xe9,0xdb,0xbe,0x9f,0xdf,0xc1,0x3e,0x6c,0xe4,0x82,0x3d,0x44,0x78,0xd5,0x3d,0x80,0x8a,0xfc,0xbb,0x6,0x7b,0x14,0x3e,0xb0,0x24,0x21,0x3d,0x18,0xce,0x9,0x3d,0xc2,0x28,0xb3,0xbe,0xd6,0xb0,0x8,0xbe,0x1c,0x63,0xc3,0xbe,0x80,0x98,0x5e,0x3b,0xac,0xd8,0xe7,0x3d,0x31,0x12,0xa4,0x3c,0x22,0x2,0xed,0x3d,0x47,0xf3,0xa6,0xbb,0x82,0xab,0xd8,0x3e,0x0,0xfc,0x1,0xbb,0xa7,0xc9,0x8a,0x3e,0x80,0x5d,0x97,0xbd,0x5f,0xe8,0x3b,0xbe,0x44,0x62,0xc2,0xbd,0x8,0x96,0x78,0xbd,0xda,0xd8,0x72,0x3e,0xa0,0xf3,0x8f,0x3e,0x68,0xd8,0x33,0xbd,0x26,0x14,0x17,0x3e,0xac,0xc0,0xc9,0xbe,0x8e,0x8a,0x94,0xbe,0x50,0x3d,0xb5,0xbc,0xcf,0xbb,0x82,0x3e,0x9a,0x88,0xb3,0xbe,0x11,0x8a,0xda,0xbe,0xe9,0xd9,0x95,0x3e,0xa0,0x13,0x4b,0x3d,0xf9,0xb6,0x83,0x3e,0xf4,0x14,0xbc,0xbe,0x1c,0x89,0xc1,0x3d,0xeb,0xee,0xca,0x3e,0xfc,0x30,0xab,0xbe,0xfc,0x62,0x9b,0xbd,0x50,0x74,0xaf,0xbe,0x37,0x16,0xd6,0x3e,0x30,0x3e,0xb5,0xbc,0x0,0xd1,0xf6,0x3a,0x66,0xbd,0xf9,0x3d,0x94,0x2a,0x6,0x3f,0xf7,0xc8,0xcb,0xbe,0x4a,0xa5,0xdc,0xbe,0xb5,0xd0,0xa2,0xbe,0x99,0xf0,0x7a,0xbe,0x42,0x1b,0x53,0xbe,0xdf,0x90,0x6e,0xbe,0xee,0xfe,0xbf,0x3e,0x80,0xd3,0x53,0x3c,0x20,0x0,0x45,0x3c,0x2c,0xd0,0x4f,0xbe,0xf0,0x67,0xdf,0xbd,0xce,0xb1,0x5,0x3e,0xc,0x4a,0xf3,0x3d,0x3a,0xf1,0x50,0x3e,0xa0,0xb2,0x29,0xbe,0x78,0x69,0x14,0x3e,0x44,0x93,0xf8,0x3d,0x24,0x67,0xa3,0x3d,0x7a,0x9b,0x96,0xbe,0x48,0x69,0xca,0xbd,0x7c,0xea,0xab,0x3d,0x32,0xd6,0x8b,0x3e,0xa3,0xca,0x47,0xbd,0xbe,0x1a,0xcd,0xbe,0xc1,0x54,0xce,0x3e,0xd8,0xbb,0xc3,0x3e,0x5c,0xfc,0xdb,0xbe,0x50,0xf0,0xa0,0x3c,0x80,0x30,0xd0,0x3c,0x65,0x29,0xb3,0xbe,0xf1,0x1f,0xaf,0xbc,0x40,0xfa,0xcd,0x3e,0xf3,0x33,0x46,0xbe,0xe8,0x9a,0xe7,0xbe,0x10,0xa1,0x9d,0xbe,0xce,0xc4,0x43,0x3e,0x16,0xaf,0x5c,0xbe,0x5,0xf8,0xf,0xbf,0x9a,0x81,0xd0,0x3e,0x80,0x94,0xc6,0x3b,0x2b,0xc,0x5f,0xbe,0x3d,0xc6,0xbf,0x3e,0x28,0xf6,0x7d,0xbd,0xca,0x61,0x8e,0xbe,0x40,0x24,0xe7,0x3c,0xc3,0xf1,0x83,0x3e,0x27,0x30,0x3f,0x3e,0x35,0x15,0xda,0xbe,0x60,0xa3,0xa7,0xbb,0xfc,0x0,0x65,0x3f,0x7,0x96,0xbd,0x3e,0x37,0x93,0x83,0x3e,0x88,0x45,0x3b,0x3d,0xf5,0xff,0xc7,0xbc,0x30,0x5d,0x8b,0xbd,0xc5,0x79,0x91,0x3e,0x78,0x14,0x15,0xbe,0xef,0xe5,0x23,0xbf,0x11,0x2a,0xa7,0x3e,0x41,0x7e,0xda,0x3e,0xb7,0x32,0x7b,0xbe,0x8d,0x63,0xc4,0x3e,0x3e,0x29,0x26,0x3e,0xbc,0x5b,0xe9,0xbd,0x90,0x49,0x59,0x3d,0xe0,0x87,0x7d,0xbc,0xb1,0xef,0xac,0x3e,0xb8,0x30,0x16,0xbd,0xac,0x56,0x8e,0xbd,0x18,0x58,0xbb,0xbe,0x90,0x6f,0xab,0xbd,0xe3,0x61,0x84,0x3e,0x48,0x41,0x6d,0x3d,0xfb,0x22,0xcd,0x3e,0x80,0x9b,0x2,0x3c,0x8d,0xc3,0xb1,0xbe,0xca,0xb2,0xcc,0xbe,0x62,0xab,0x65,0xbe,0xaf,0x17,0x53,0x3e,0x97,0xdf,0x7,0xbe,0x98,0x21,0x7f,0x3e,0x63,0x10,0x51,0x3f,0x4e,0x1e,0x3,0x3e,0x38,0xa3,0x99,0xbe,0x78,0x1f,0x20,0xbe,0xd,0xda,0xf2,0x3e,0x86,0xac,0x43,0xbe,0x39,0xcb,0xa9,0x3e,0x20,0x72,0x52,0x3d,0x2,0x97,0xca,0xbe,0x5c,0xe8,0xd8,0xbd,0x5f,0x38,0xb2,0x3e,0x83,0x15,0xbc,0x3e,0xa7,0xfb,0xa2,0x3e,0xae,0x3c,0x77,0xbe,0x0,0xe4,0x7e,0xbe,0xb,0xc4,0x7c,0xbe,0x13,0x4c,0x4b,0x3f,0x73,0x84,0xd0,0x3e,0xe0,0x67,0x55,0x3c,0xa4,0x27,0xa7,0xbe,0x6f,0x6f,0xed,0xbd,0xc5,0xb8,0xe,0x3f,0x50,0x5d,0x80,0x3c,0x6e,0x37,0x9,0x3e,0x91,0x74,0x2f,0xbf,0xec,0x2b,0xb1,0x3d,0xff,0xad,0x83,0x3e,0xc,0x4,0xbb,0xbd,0x88,0xdc,0xb7,0xbd,0xb5,0x1b,0x22,0xbe,0x88,0x9b,0x86,0x3e,0xef,0x1a,0x40,0x3e,0x7a,0x62,0xd0,0xbe,0xfc,0x4d,0xef,0x3d,0x14,0xe9,0xdb,0xbe,0x81,0x7c,0x89,0xbe,0xf,0xd7,0x7c,0x3e,0x91,0xcd,0x16,0xbe,0x6b,0xfb,0x87,0x3e,0xc2,0xbf,0x8f,0xbe,0x64,0x69,0x84,0x3e,0x8f,0x1c,0xd6,0xbe,0x3c,0x63,0xb7,0xbd,0x6a,0x68,0x60,0x3e,0xcd,0x69,0x93,0x3e,0xcb,0x23,0x87,0xbe,0xf,0xe1,0xa8,0xbe,0x30,0x40,0x2d,0x3e,0xb6,0xc9,0x2c,0x3d,0xb4,0x1e,0x52,0xbe,0x49,0x94,0xc1,0xbe,0x0,0x2b,0x9e,0xbb,0x44,0x9e,0xaa,0x3e,0xb,0xa2,0x9e,0x3e,0x4a,0x26,0x37,0xbe,0x8,0x8e,0x30,0xbe,0x54,0xbf,0x69,0x3d,0x50,0x33,0xa1,0xbe,0xdf,0x29,0xcb,0xbe,0x56,0xff,0xff,0xff,0x4,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x30,0x77,0xf9,0xbd,0xbb,0x30,0xc9,0xbe,0x45,0xf5,0x48,0x3e,0x52,0x14,0x32,0x3f,0x64,0xcc,0x12,0x3e,0xe0,0xe1,0x83,0xbd,0xec,0x89,0x38,0xbe,0x10,0xd0,0x5e,0xbd,0x36,0x7f,0xec,0xbe,0xd3,0xa6,0xcf,0x3e,0x42,0x2b,0x8f,0x3e,0xff,0x9e,0x3,0xbf,0xf0,0x88,0xd7,0xbe,0xbc,0x27,0x20,0x3f,0x52,0xa5,0xbf,0xbe,0x30,0xa3,0xa9,0xbe,0xa2,0xff,0xff,0xff,0x4,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x99,0xde,0xc1,0x3e,0xf8,0xdf,0x38,0xbf,0x9d,0x42,0xba,0x3d,0x32,0x8f,0x5b,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9d,0xa1,0x97,0x3f,0x16,0xce,0x55,0xbe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x49,0xbe,0x41,0xbc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xee,0xff,0xff,0xff,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xbc,0xf9,0x23,0xbe,0x0,0x0,0x6,0x0,0x8,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc5,0xb3,0x0,0x3f,0xa4,0xba,0xd0,0x3e,0x52,0xce,0x82,0xbe,0x0,0x0,0x0,0x0,0x4f,0x1b,0x33,0x3e,0x0,0x0,0x0,0x0,0x21,0x72,0x77,0xbe,0xcc,0xcd,0x8f,0x3d,0xfd,0xa3,0xdc,0xbe,0x88,0xe3,0x18,0x3f,0x0,0x0,0x0,0x0,0x91,0x8c,0x61,0x3e,0xe,0x76,0xb,0x3f,0xb0,0x55,0x47,0xbe,0x14,0x9,0x92,0xbd,0x20,0xfb,0xff,0xff,0x24,0xfb,0xff,0xff,0xf,0x0,0x0,0x0,0x4d,0x4c,0x49,0x52,0x20,0x43,0x6f,0x6e,0x76,0x65,0x72,0x74,0x65,0x64,0x2e,0x0,0x1,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x18,0x0,0x14,0x0,0x10,0x0,0xc,0x0,0x8,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0xd8,0x0,0x0,0x0,0xdc,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x9a,0xff,0xff,0xff,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xc,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x9c,0xfb,0xff,0xff,0x1,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xca,0xff,0xff,0xff,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x10,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0xba,0xff,0xff,0xff,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x16,0x0,0x0,0x0,0x10,0x0,0xc,0x0,0xb,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x18,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x8,0x0,0x7,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x8c,0x3,0x0,0x0,0x1c,0x3,0x0,0x0,0xac,0x2,0x0,0x0,0x58,0x2,0x0,0x0,0x10,0x2,0x0,0x0,0xc4,0x1,0x0,0x0,0x78,0x1,0x0,0x0,0xf0,0x0,0x0,0x0,0x60,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xb2,0xfc,0xff,0xff,0x0,0x0,0x0,0x1,0x14,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0x9c,0xfc,0xff,0xff,0x19,0x0,0x0,0x0,0x53,0x74,0x61,0x74,0x65,0x66,0x75,0x6c,0x50,0x61,0x72,0x74,0x69,0x74,0x69,0x6f,0x6e,0x65,0x64,0x43,0x61,0x6c,0x6c,0x3a,0x30,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xa,0xfd,0xff,0xff,0x0,0x0,0x0,0x1,0x14,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x68,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x10,0x0,0x0,0x0,0xf4,0xfc,0xff,0xff,0x4c,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x52,0x65,0x6c,0x75,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x96,0xfd,0xff,0xff,0x0,0x0,0x0,0x1,0x14,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x60,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x10,0x0,0x0,0x0,0x80,0xfd,0xff,0xff,0x46,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x52,0x65,0x6c,0x75,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x86,0xfe,0xff,0xff,0x0,0x0,0x0,0x1,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0xf4,0xfd,0xff,0xff,0x19,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x32,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xce,0xfe,0xff,0xff,0x0,0x0,0x0,0x1,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x3c,0xfe,0xff,0xff,0x19,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x16,0xff,0xff,0xff,0x0,0x0,0x0,0x1,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x84,0xfe,0xff,0xff,0x17,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x0,0x2,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x5a,0xff,0xff,0xff,0x0,0x0,0x0,0x1,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0xc8,0xfe,0xff,0xff,0x27,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x2f,0x52,0x65,0x61,0x64,0x56,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x4f,0x70,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xaa,0xff,0xff,0xff,0x0,0x0,0x0,0x1,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x18,0xff,0xff,0xff,0x29,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x32,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x2f,0x52,0x65,0x61,0x64,0x56,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x4f,0x70,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x18,0x0,0x14,0x0,0x0,0x0,0x10,0x0,0xc,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x16,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x84,0xff,0xff,0xff,0x29,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x2f,0x52,0x65,0x61,0x64,0x56,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x4f,0x70,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x1c,0x0,0x18,0x0,0x0,0x0,0x14,0x0,0x10,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x7,0x0,0x16,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x14,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0x4,0x0,0x4,0x0,0x4,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x73,0x65,0x72,0x76,0x69,0x6e,0x67,0x5f,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x5f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x3a,0x30,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xc,0x0,0xc,0x0,0xb,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0xc,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x9}; diff --git a/tensorflow-test/HelloWorld/hello_world/models/hello_world_float_model_data.h b/tensorflow-test/HelloWorld/hello_world/models/hello_world_float_model_data.h new file mode 100644 index 0000000..63e0abb --- /dev/null +++ b/tensorflow-test/HelloWorld/hello_world/models/hello_world_float_model_data.h @@ -0,0 +1,4 @@ +#include + +extern const unsigned int g_hello_world_float_model_data_size; +extern const unsigned char g_hello_world_float_model_data[]; diff --git a/tensorflow-test/HelloWorld/hello_world/models/hello_world_int8.tflite b/tensorflow-test/HelloWorld/hello_world/models/hello_world_int8.tflite new file mode 100644 index 0000000000000000000000000000000000000000..9a379ea9d93ed1662117d4ebc659e3cc8667f192 GIT binary patch literal 2704 zcmai0YfMvT82(BtZK2AoK&i;MbX*bxf+W+?EHKf{gv&%m+?J)Q>p`28>Yyb{wgi6| zXBK}hi$7epnEfz|TlUkKZCT7N22EUMf*`G7P(Tsv2pFz%_B`kGbgTmVnkV1oeZTki zz3dh;(7asZHc7vmR?_iV%NeF$j!ce+DoBIv^boA_cR0 z8?2%p$Op)i2J}eXyv zr-K2JgncbQS|}#Nf^`;fptYsrVB68dtu3zRgY6BC4ebqzSG1102+AXGm)Gy=4*CP$ zF3Hs^b@zBr`NejePeVZjxD8wc8i74b^H7k510pXUus;^Nx|C=no4|m-F*=xp?E z*k%odRVez46i&B*3yjJ$=Qslq*8<7#iCs)!@EL- zy5+H#QfKWs(fmpMNKTTz$Y!n_8n>oS*;fa%#4m%>Lu=df3I_*9UwCw{e>D7C)}-MT zp|k!zJei&SGV38TwvhnPPSrM6tPq!=$O4=PvlX}k<7td^e4$>x1#RC4BNcRXNxtAl=dXI*Jq;d)A#Nx2--y|H0c*bFW_DiP!p<*`yzM-MyNT9p zW@XieHde(g)Z$3{o}gYCN5+A8$aIIubNo)K-T(v5a=p4WNLE!YY7a<4E7rO%LFICrr!g* zwu)_@g-HCnFF*XKfxAT+!nJg01ooK4io}>2igXcl=`;Bx}f^?ruIeh x@Q&68uvGTvKE3JOg>}OB9KP%L-KKn-J=cRMhi}7w57rKQu>~`RnR?il{sCkaR0RM4 literal 0 HcmV?d00001 diff --git a/tensorflow-test/HelloWorld/hello_world/models/hello_world_int8_model_data.cpp b/tensorflow-test/HelloWorld/hello_world/models/hello_world_int8_model_data.cpp new file mode 100644 index 0000000..c6034c7 --- /dev/null +++ b/tensorflow-test/HelloWorld/hello_world/models/hello_world_int8_model_data.cpp @@ -0,0 +1,6 @@ +#include + +#include "models/hello_world_int8_model_data.h" + +const unsigned int g_hello_world_int8_model_data_size = 2704; +alignas(16) const unsigned char g_hello_world_int8_model_data[] = {0x28,0x0,0x0,0x0,0x54,0x46,0x4c,0x33,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x14,0x0,0x20,0x0,0x4,0x0,0x8,0x0,0xc,0x0,0x10,0x0,0x14,0x0,0x0,0x0,0x18,0x0,0x1c,0x0,0x14,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x3c,0xa,0x0,0x0,0xf0,0x3,0x0,0x0,0xd8,0x3,0x0,0x0,0xe0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0xa,0x0,0x10,0x0,0x4,0x0,0x8,0x0,0xc,0x0,0xa,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x73,0x65,0x72,0x76,0x69,0x6e,0x67,0x5f,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x98,0xff,0xff,0xff,0x8,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x64,0x65,0x6e,0x73,0x65,0x5f,0x32,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xba,0xfc,0xff,0xff,0x4,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x64,0x65,0x6e,0x73,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x0,0x2,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xdc,0xff,0xff,0xff,0x8,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x43,0x4f,0x4e,0x56,0x45,0x52,0x53,0x49,0x4f,0x4e,0x5f,0x4d,0x45,0x54,0x41,0x44,0x41,0x54,0x41,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0x8,0x0,0x8,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x6d,0x69,0x6e,0x5f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x5f,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x0,0xd,0x0,0x0,0x0,0xec,0x2,0x0,0x0,0xe4,0x2,0x0,0x0,0xcc,0x2,0x0,0x0,0x98,0x2,0x0,0x0,0x44,0x2,0x0,0x0,0x30,0x1,0x0,0x0,0xdc,0x0,0x0,0x0,0xb8,0x0,0x0,0x0,0xb0,0x0,0x0,0x0,0xa8,0x0,0x0,0x0,0xa0,0x0,0x0,0x0,0x78,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x66,0xfd,0xff,0xff,0x4,0x0,0x0,0x0,0x58,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x8,0x0,0xe,0x0,0x8,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x8,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xeb,0x3,0x0,0x0,0x0,0x0,0xa,0x0,0x10,0x0,0xc,0x0,0x8,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x32,0x2e,0x31,0x31,0x2e,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd6,0xfd,0xff,0xff,0x4,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x31,0x2e,0x31,0x34,0x2e,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x64,0xfd,0xff,0xff,0x68,0xfd,0xff,0xff,0x6c,0xfd,0xff,0xff,0x6,0xfe,0xff,0xff,0x4,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xf7,0xca,0x39,0x47,0x68,0x73,0x62,0x63,0x40,0xe6,0x7f,0x19,0xae,0x44,0x5f,0x56,0x0,0x0,0x0,0x0,0x26,0xfe,0xff,0xff,0x4,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc2,0xea,0xff,0xff,0x75,0xea,0xff,0xff,0xb8,0xfa,0xff,0xff,0x24,0xfa,0xff,0xff,0xc8,0xef,0xff,0xff,0xac,0xff,0xff,0xff,0x44,0xd,0x0,0x0,0x0,0x0,0x0,0x0,0xbd,0x7,0x0,0x0,0x33,0xea,0xff,0xff,0x0,0x0,0x0,0x0,0xcc,0xe4,0xff,0xff,0x4f,0xd,0x0,0x0,0xcf,0xe3,0xff,0xff,0x0,0x0,0x0,0x0,0x76,0xfe,0xff,0xff,0x4,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xf4,0x1a,0xed,0x9,0x19,0x21,0xf4,0x24,0xe0,0x21,0xef,0xbc,0xf7,0xf5,0xfa,0x19,0x3,0xdc,0xd2,0x2,0x6,0xf9,0xf4,0x2,0xff,0xfa,0xef,0xf1,0xef,0xd3,0x27,0xe1,0xfb,0x27,0xdd,0xeb,0xdb,0xe4,0x5,0x1a,0x17,0xfc,0x24,0x12,0x15,0xef,0x1e,0xe4,0x10,0xfe,0x14,0xda,0x1c,0xf8,0xf3,0xf1,0xef,0xe2,0xf3,0x9,0xe3,0xe9,0xed,0xe3,0xe4,0x15,0x7,0xb,0x4,0x1b,0x1a,0xfe,0xeb,0x1,0xde,0x21,0xe6,0xb,0xec,0x3,0x23,0xa,0x22,0x24,0x1e,0x27,0x3,0xe6,0x3,0x24,0xff,0xc0,0x11,0xf8,0xfc,0xf1,0x11,0xc,0xf5,0xe0,0xf3,0x7,0x17,0xe5,0xe8,0xed,0xfa,0xdc,0xe8,0x23,0xfb,0x7,0xdd,0xfb,0xfd,0x0,0x14,0x26,0x11,0x17,0xe7,0xf1,0x11,0xea,0x2,0x26,0x4,0x4,0x25,0x21,0x1d,0xa,0xdb,0x1d,0xdc,0x20,0x1,0xfa,0xe3,0x37,0xb,0xf1,0x1a,0x16,0xef,0x1c,0xe7,0x3,0xe0,0x16,0x2,0x3,0x21,0x18,0x9,0x2e,0xd9,0xe5,0x14,0xb,0xea,0x1a,0xfc,0xd8,0x13,0x0,0xc4,0xd8,0xec,0xd9,0xfe,0xd,0x19,0x20,0xd8,0xd6,0xe2,0x1f,0xe9,0xd7,0xca,0xe2,0xdd,0xc6,0x13,0xe7,0x4,0x3e,0x0,0x1,0x14,0xc7,0xdb,0xe7,0x15,0x15,0xf5,0x6,0xd6,0x1a,0xdc,0x9,0x22,0xfe,0x8,0x2,0x13,0xef,0x19,0x1e,0xe2,0x9,0xfd,0xf3,0x14,0xdd,0xda,0x20,0xd9,0xf,0xe3,0xf9,0xf7,0xee,0xe9,0x24,0xe6,0x29,0x0,0x7,0x16,0xe2,0x1e,0xd,0x23,0xd3,0xdd,0xf7,0x14,0xfa,0x8,0x22,0x26,0x21,0x9,0x8,0xf,0xb,0xe0,0x12,0xf4,0x7f,0xdc,0x58,0xe5,0x26,0x0,0x0,0x0,0x0,0x86,0xff,0xff,0xff,0x4,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x27,0xfd,0xff,0xff,0xa2,0x7,0x0,0x0,0x62,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0xf1,0x0,0x0,0x0,0x29,0xfe,0xff,0xff,0xdd,0xff,0xff,0xff,0x9d,0xfc,0xff,0xff,0x3b,0x2,0x0,0x0,0x45,0x2,0x0,0x0,0xa4,0x10,0x0,0x0,0x67,0xf,0x0,0x0,0x4f,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x87,0xfc,0xff,0xff,0x11,0xec,0xff,0xff,0x0,0x0,0x0,0x0,0xd6,0xff,0xff,0xff,0x4,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xd9,0x3b,0x27,0x15,0x1c,0xe0,0xde,0xdd,0xf,0x1b,0xc5,0xd7,0x12,0xdd,0xf9,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x8,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xad,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x84,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xf,0x0,0x0,0x0,0x4d,0x4c,0x49,0x52,0x20,0x43,0x6f,0x6e,0x76,0x65,0x72,0x74,0x65,0x64,0x2e,0x0,0x1,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x18,0x0,0x4,0x0,0x8,0x0,0xc,0x0,0x10,0x0,0x14,0x0,0xe,0x0,0x0,0x0,0x4,0x1,0x0,0x0,0xf8,0x0,0x0,0x0,0xec,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x94,0x0,0x0,0x0,0x4c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xca,0xff,0xff,0xff,0x0,0x0,0x0,0x8,0x1c,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x4,0x0,0x4,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x14,0x0,0x0,0x0,0x8,0x0,0xc,0x0,0x7,0x0,0x10,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x1c,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xba,0xff,0xff,0xff,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x16,0x0,0x0,0x0,0x8,0x0,0xc,0x0,0x7,0x0,0x10,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x24,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x8,0x0,0x7,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x9c,0x4,0x0,0x0,0xc,0x4,0x0,0x0,0x88,0x3,0x0,0x0,0x14,0x3,0x0,0x0,0xa8,0x2,0x0,0x0,0x34,0x2,0x0,0x0,0xd0,0x1,0x0,0x0,0x2c,0x1,0x0,0x0,0x80,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xa2,0xfb,0xff,0xff,0x0,0x0,0x9,0x1,0x64,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0x8c,0xfb,0xff,0xff,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xcb,0xd6,0x7,0x3c,0x19,0x0,0x0,0x0,0x53,0x74,0x61,0x74,0x65,0x66,0x75,0x6c,0x50,0x61,0x72,0x74,0x69,0x74,0x69,0x6f,0x6e,0x65,0x64,0x43,0x61,0x6c,0x6c,0x3a,0x30,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1a,0xfc,0xff,0xff,0x0,0x0,0x9,0x1,0x94,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x10,0x0,0x0,0x0,0x4,0xfc,0xff,0xff,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0x5d,0x4f,0x51,0x3c,0x4c,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x52,0x65,0x6c,0x75,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xc2,0xfc,0xff,0xff,0x0,0x0,0x9,0x1,0x8c,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x10,0x0,0x0,0x0,0xac,0xfc,0xff,0xff,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0x9f,0x51,0x5a,0x3c,0x46,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x52,0x65,0x6c,0x75,0x3b,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xee,0xfd,0xff,0xff,0x0,0x0,0x9,0x1,0x4c,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x3c,0xfd,0xff,0xff,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xaa,0x59,0x84,0x3b,0x17,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x0,0x2,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x4e,0xfe,0xff,0xff,0x0,0x0,0x2,0x1,0x60,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x9c,0xfd,0xff,0xff,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x55,0x5b,0xcf,0x38,0x27,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x2f,0x52,0x65,0x61,0x64,0x56,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x4f,0x70,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xbe,0xfe,0xff,0xff,0x0,0x0,0x9,0x1,0x54,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xc,0xfe,0xff,0xff,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x7f,0x7f,0x32,0x3c,0x19,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x26,0xff,0xff,0xff,0x0,0x0,0x2,0x1,0x60,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x74,0xfe,0xff,0xff,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x7b,0x39,0x18,0x39,0x29,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x31,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x2f,0x52,0x65,0x61,0x64,0x56,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x4f,0x70,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x96,0xff,0xff,0xff,0x0,0x0,0x9,0x1,0x54,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xe4,0xfe,0xff,0xff,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x17,0x44,0x7c,0x3c,0x19,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x32,0x2f,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x18,0x0,0x8,0x0,0x6,0x0,0xc,0x0,0x10,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x16,0x0,0x0,0x0,0x0,0x0,0x2,0x1,0x64,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x64,0xff,0xff,0xff,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xcb,0x41,0x4e,0x39,0x29,0x0,0x0,0x0,0x73,0x65,0x71,0x75,0x65,0x6e,0x74,0x69,0x61,0x6c,0x2f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x32,0x2f,0x42,0x69,0x61,0x73,0x41,0x64,0x64,0x2f,0x52,0x65,0x61,0x64,0x56,0x61,0x72,0x69,0x61,0x62,0x6c,0x65,0x4f,0x70,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x16,0x0,0x1c,0x0,0x8,0x0,0x6,0x0,0xc,0x0,0x10,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x7,0x0,0x16,0x0,0x0,0x0,0x0,0x0,0x9,0x1,0x74,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x48,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0xc,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x8,0x0,0xc,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x86,0x8a,0xc8,0x3c,0x1d,0x0,0x0,0x0,0x73,0x65,0x72,0x76,0x69,0x6e,0x67,0x5f,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x5f,0x64,0x65,0x6e,0x73,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x3a,0x30,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xc,0x0,0x10,0x0,0x7,0x0,0x0,0x0,0x8,0x0,0xc,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x4,0x0,0x0,0x0,0x9,0x0,0x0,0x0}; diff --git a/tensorflow-test/HelloWorld/hello_world/models/hello_world_int8_model_data.h b/tensorflow-test/HelloWorld/hello_world/models/hello_world_int8_model_data.h new file mode 100644 index 0000000..c0c87a5 --- /dev/null +++ b/tensorflow-test/HelloWorld/hello_world/models/hello_world_int8_model_data.h @@ -0,0 +1,4 @@ +#include + +extern const unsigned int g_hello_world_int8_model_data_size; +extern const unsigned char g_hello_world_int8_model_data[]; diff --git a/tensorflow-test/HelloWorld/hello_world/quantization/BUILD b/tensorflow-test/HelloWorld/hello_world/quantization/BUILD new file mode 100644 index 0000000..db9df23 --- /dev/null +++ b/tensorflow-test/HelloWorld/hello_world/quantization/BUILD @@ -0,0 +1,18 @@ +load("@rules_python//python:defs.bzl", "py_binary") +load("@tflm_pip_deps//:requirements.bzl", "requirement") + +py_binary( + name = "ptq", + srcs = ["ptq.py"], + data = ["//tensorflow/lite/micro/examples/hello_world/models:hello_world_float.tflite"], + python_version = "PY3", + srcs_version = "PY3", + deps = [ + "@absl_py//absl:app", + "@absl_py//absl/flags", + "@absl_py//absl/logging", + requirement("numpy"), + requirement("tensorflow-cpu"), + "//python/tflite_micro:runtime", + ], +) diff --git a/tensorflow-test/HelloWorld/hello_world/quantization/ptq.py b/tensorflow-test/HelloWorld/hello_world/quantization/ptq.py new file mode 100644 index 0000000..bfab0d0 --- /dev/null +++ b/tensorflow-test/HelloWorld/hello_world/quantization/ptq.py @@ -0,0 +1,116 @@ +# Copyright 2023 The TensorFlow Authors. All Rights Reserved. +# +# 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 +# +# http://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. +# ============================================================================= +"""This script can create a quant(int8) model from the saved TF model. + +Run: +Build the train.py script +`bazel build tensorflow/lite/micro/examples/hello_world/quantization:train` + +The following command first creates the trained TF float model that we will quantize later +`bazel-bin/tensorflow/lite/micro/examples/hello_world/train --save_tf_model --save_dir=/tmp/float_model/` + +Build the ptq.py script +`bazel build tensorflow/lite/micro/examples/hello_world/quantization:ptq` + +Then we can run the ptq script to convert the float model to quant model as follows. +Note that we are using the directory of the TF model as the source_model_dir here. +The quant model (named hello_world_int8.tflite) will be created inside the target_dir. +`bazel-bin/tensorflow/lite/micro/examples/hello_world/quantization/ptq --source_model_dir=/tmp/float_model --target_dir=/tmp/quant_model/` +""" +import math +import os + +from absl import app +from absl import flags +from absl import logging +import numpy as np +import tensorflow as tf + +FLAGS = flags.FLAGS + +flags.DEFINE_string("source_model_dir", "/tmp/float_model/", + "the directory where the trained model can be found.") +flags.DEFINE_string("target_dir", "/tmp/quant_model", + "the directory to save the quant model.") + + +def get_data(): + """ + The code will generate a set of random `x` values + """ + # Generate a uniformly distributed set of random numbers in the range from + # 0 to 2Ï€, which covers a complete sine wave oscillation + x_values = np.random.uniform(low=0, high=2 * math.pi, + size=1000).astype(np.float32) + + # Shuffle the values to guarantee they're not in order + np.random.shuffle(x_values) + + return x_values + + +def save_tflite_model(tflite_model, target_dir, model_name): + """save the converted tflite model + Args: + tflite_model (binary): the converted model in serialized format. + save_dir (str): the save directory + model_name (str): model name to be saved + """ + if not os.path.exists(target_dir): + os.makedirs(target_dir) + save_path = os.path.join(target_dir, model_name) + with open(save_path, "wb") as f: + f.write(tflite_model) + logging.info("Tflite model saved to %s", target_dir) + + +def convert_quantized_tflite_model(source_model_dir, x_values): + """Convert the save TF model to tflite model, then save it as .tflite + flatbuffer format + + Args: + source_model_dir (tf.keras.Model): the trained hello_world flaot Model dir + x_train (numpy.array): list of the training data + + Returns: + The converted model in serialized format. + """ + + # Convert the model to the TensorFlow Lite format with quantization + def representative_dataset(num_samples=500): + for i in range(num_samples): + yield [x_values[i].reshape(1, 1)] + + converter = tf.lite.TFLiteConverter.from_saved_model(source_model_dir) + converter.optimizations = [tf.lite.Optimize.DEFAULT] + converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8] + converter.inference_input_type = tf.int8 + converter.inference_output_type = tf.int8 + converter.representative_dataset = representative_dataset + tflite_model = converter.convert() + return tflite_model + + +def main(_): + x_values = get_data() + quantized_tflite_model = convert_quantized_tflite_model( + FLAGS.source_model_dir, x_values) + save_tflite_model(quantized_tflite_model, + FLAGS.target_dir, + model_name="hello_world_int8.tflite") + + +if __name__ == "__main__": + app.run(main) \ No newline at end of file diff --git a/tensorflow-test/HelloWorld/hello_world/train.py b/tensorflow-test/HelloWorld/hello_world/train.py new file mode 100644 index 0000000..3a2322c --- /dev/null +++ b/tensorflow-test/HelloWorld/hello_world/train.py @@ -0,0 +1,141 @@ +# Copyright 2023 The TensorFlow Authors. All Rights Reserved. +# +# 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 +# +# http://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. +# ============================================================================= +"""hellow_world model training for sinwave recognition + +Run: +`bazel build tensorflow/lite/micro/examples/hello_world:train` +`bazel-bin/tensorflow/lite/micro/examples/hello_world/train --save_tf_model --save_dir=/tmp/model_created/` +""" +import math +import os + +from absl import app +from absl import flags +from absl import logging +import numpy as np +import tensorflow as tf + +FLAGS = flags.FLAGS + +flags.DEFINE_integer("epochs", 500, "number of epochs to train the model.") +flags.DEFINE_string("save_dir", "/tmp/hello_world_models", + "the directory to save the trained model.") +flags.DEFINE_boolean("save_tf_model", False, + "store the original unconverted tf model.") + + +def get_data(): + """ + The code will generate a set of random `x` values,calculate their sine + values. + """ + # Generate a uniformly distributed set of random numbers in the range from + # 0 to 2Ï€, which covers a complete sine wave oscillation + x_values = np.random.uniform(low=0, high=2 * math.pi, + size=1000).astype(np.float32) + + # Shuffle the values to guarantee they're not in order + np.random.shuffle(x_values) + + # Calculate the corresponding sine values + y_values = np.sin(x_values).astype(np.float32) + + return (x_values, y_values) + + +def create_model() -> tf.keras.Model: + model = tf.keras.Sequential() + + # First layer takes a scalar input and feeds it through 16 "neurons". The + # neurons decide whether to activate based on the 'relu' activation function. + model.add(tf.keras.layers.Dense(16, activation='relu', input_shape=(1, ))) + + # The new second and third layer will help the network learn more complex + # representations + model.add(tf.keras.layers.Dense(16, activation='relu')) + + # Final layer is a single neuron, since we want to output a single value + model.add(tf.keras.layers.Dense(1)) + + # Compile the model using the standard 'adam' optimizer and the mean squared + # error or 'mse' loss function for regression. + model.compile(optimizer='adam', loss='mse', metrics=['mae']) + + return model + + +def convert_tflite_model(model): + """Convert the save TF model to tflite model, then save it as .tflite flatbuffer format + Args: + model (tf.keras.Model): the trained hello_world Model + Returns: + The converted model in serialized format. + """ + converter = tf.lite.TFLiteConverter.from_keras_model(model) + tflite_model = converter.convert() + return tflite_model + + +def save_tflite_model(tflite_model, save_dir, model_name): + """save the converted tflite model + Args: + tflite_model (binary): the converted model in serialized format. + save_dir (str): the save directory + model_name (str): model name to be saved + """ + if not os.path.exists(save_dir): + os.makedirs(save_dir) + save_path = os.path.join(save_dir, model_name) + with open(save_path, "wb") as f: + f.write(tflite_model) + logging.info("Tflite model saved to %s", save_dir) + + +def train_model(epochs, x_values, y_values): + """Train keras hello_world model + Args: epochs (int) : number of epochs to train the model + x_train (numpy.array): list of the training data + y_train (numpy.array): list of the corresponding array + Returns: + tf.keras.Model: A trained keras hello_world model + """ + model = create_model() + model.fit(x_values, + y_values, + epochs=epochs, + validation_split=0.2, + batch_size=64, + verbose=2) + + if FLAGS.save_tf_model: + model.save(FLAGS.save_dir, save_format="tf") + logging.info("TF model saved to %s", FLAGS.save_dir) + + return model + + +def main(_): + x_values, y_values = get_data() + trained_model = train_model(FLAGS.epochs, x_values, y_values) + + # Convert and save the model to .tflite + tflite_model = convert_tflite_model(trained_model) + save_tflite_model(tflite_model, + FLAGS.save_dir, + model_name="hello_world_float.tflite") + + +if __name__ == "__main__": + app.run(main) \ No newline at end of file diff --git a/tensorflow-test/HelloWorld/out/HelloWorld/CM55/size/HelloWorld.axf b/tensorflow-test/HelloWorld/out/HelloWorld/CM55/size/HelloWorld.axf new file mode 100644 index 0000000000000000000000000000000000000000..3295ab71a06f0d583f5517227723953d952dd882 GIT binary patch literal 2078464 zcmeFZd3+Ps)i-|c%xJZ+WtL#Tn30V^HcMnyLpE8q$2Lu3Lr6l>q{x8Dh=5U8QkvyK zhAeJ)(wMAg*Q8Erd8SEosuEJe62lVjxl4w8C~sM=a6UmZjhKjtr%J-@d=? z-`bzquI}9B+;h)8=X=hb&E+>rlu~l(k0W-%o|LOJ0a{hDw9}4`30{@}Fe<<)D3jBux|34|9 za4J!Ds^*raGsLo`Y-`yYQEKQary-&|rM`R4l>Yvi3^GEY8CijWv84*-vnqamjF3Y( ztn()ZHhr?`VE>6lhKT{kCys+<0YSF7y%lIv9+^n;$t3H1dtlSS0pzd;90w}{Y529i zfGA&W@#38S$jSnfa_o^hoI{V?gY*A9Qj7E9M|gRh*&ZlSeAI({KiRSZ=WSay;@r4p zEzWzlZo)abwHxP~wtkKCf~^;EuGso_oZGglI4fIu`J^dT%JKrLyxy=L=XVGw?XI{Qeax57$@JI+|0 z6i?6WCnUXHCykWSr4cPeSrWJ7-CN^V;eJt^l~Wxbh5H-h#P+0`W;NS}Ma|?%)oe9} zpB;#vqXWZTxL$C~AS#_krd~KjlsTy3cS%AD3k${C_3P`_ZSbtE7gyGLR@beVFA_3U zT!~u|*VUeST%A3X_qM-im>#ND=p3Q2@Tl<<>+fD3_j2j*38Q*`J8E?B#GbGAILFrX z=xVK@<~_So_a){~p0e3FQQ2Ig{bu7rS?MjkBi-JPpSey3v);G8-{_*BQ_8WYx6bxO5fg2QFNE zcWDpz(8R!{w6Z|f@3K1C=q~Nqg7iyu83W#mBbYZuDtAq)9(zF4?o)MeN|G<_;d5O* zoQo*jzG{VVLP4i8e24<$e7}zh7Djh`Lxw?6}l!Rt9Mw zAw4TSFNyPV11)DPXuqY#9~EifLhM}=+QXhJ1D4LaRiXFC#2x@$rm(hFYUO7tzUowc zOb$5S1AkmwgB+|^zwcjk;rLiF6yN{PDWgO0{Yy%EX!XCO=t5*_SJ3eRT1dPV1@HU& z8={#?77ay3@`&?X=u_us&f!Xu8v&{~J_wHWR?w;}@y!ntkxA&1wLKY|n;^2a!`d!L z$yiZBa9caPxPR0`H7n>Eg!;uBnvHp%fpk-gb+mlW3tXXy4@1ljA)elE;N}Oouk?>u_-WO{1{4J|4nn4N zDvFnA>^6jpYGgQk_i0F$IT+BU9#N zvg#J}+2}QgkFu*zA0DCSkNC456STM`JI!tNdMl=NCzps2J7FlhKU)N)x#MBaK9}zF zJFdT-#2bXz{~T)ZbdGDO6+y>=1S^r1N5s)6(LPk-oq$A^V6$3}|kANx{ z3r4**GDvgQMG4h+k-T6pPnP#`T;^-W@ClVzw_&U@USnfLkEg#z^D{BBMvRgWCd$Zu z$Bg;6uE?(Gp$v=&c<2_;{(TRdF%qa%l5u;#&Im6LmrE6q=iSD<-_(-4Uq!^{H2N?7F*pZO!~CVX!9P&esfsP4^p)ILLF^lX z`F4Gfjp?PC9F34kOHl*+U9{^Y!^xs)x+9y$SXI$t^y^Ebkv5FWBt_64QnOpgAvuehK?@)ztqJ$J~do3%EUaga|LSYZFi(QixQ9mBz zokd8mkLY@x#8Hg5NUCNXO1lj+_}dV@+8mrd%@|6hZ_d_9+|?4^J#?}KS<{~8SS}o+PvVZX|sbHa6B+=X7H+Tari6wYV@qJ0`ovJg;rlZDOi2M z=l)98m$FoyB!pLAJ(i_;^`*o1?v9p_F?Q~RI9s|vRxZ%!KFNJE_D&rj`X!SBXT zQVfJdji%coPVwuAPdpJJ;vXaWs9?G&VwV<0#8r?Tue3d@=`qUeL5+KqDVhxC!Yi_g zlC6rHn8dSU?)%OpCv>W_f}Lt{xKq6r`Vo`#B;fl-OuO>hsXZIpJ<^jZAv|Qfv4gEO z(3O;#gJe9)3N$>4cfmQj30T($iA<)B43x=`mQ%9=Z@I1wh|&sKJxXPB)*G&@K)IU_ z70Nm(vy8g!a>;{%2sTbERqk>Djqk;Zr7|HLTE^s${o>( z=;!0^9H(N?o1$q%#C*G{eBS5RNDs(c_KuXT}D9K0* zS|utkD`RVNrn^L5=ze%a@^73%x3R7G`bCwc1TZS7D5^ssoba+AdPK`mD=1SOvP3g zJzX)5gvsPxo(INoy(VHD3%R_hQ_me^@^osPOfqVccdV+1rca-YRpJMNgh=T*MK5!b{s5lV8dQ)wY zav(F3bGNlYX4BKE+h=ZiLOOWfe5-E%brP`|nM5J)V+_d!C((7WSzLX=Noh|F0mbjw zAEg=O^nS_QT+_3FqzB8sv)1fBmz-T*diBVCcq=Ek(N&O>bNY8t!exi|AvY_J1|2p& ze6Ca%wk>vMx48yRIwX=yY_`Q|I}WNwA68W{qYb?FRL8hA*xZ*Il8Ml$a(C>xVc;=bh~shLnrn)qfi&3xK*ZUS8(8Oul>|2p3!L(Y8BX9}}C z3nb*aoO-5@y-NgQ;e$*QFENs^RbnmYgJ{vyqokbh#vI+TWbD&~W5%*u*W~ma-z(8v zV=3&H+|AiSSlr~W!-~w^oI?stFFX<)AI_X+=t{=+r1EQP*u{{Rzxfk?dYIVc99=l? zu4Q*EU!1$xnNyYB;EJ7mQ)(UO%rP|)QBc!JTC-_qC+N`GO{P2$$(#h58E?mUDb(AGCsU1yVXTbKb*a99Enmh zYbz^@KlVmBJ&BQ@Pi()6lImg6Qsa|qsdZwI6Q|^nt7+F}*R(vdjmv34AIPbt{uc(K zaU8HNvmY8QS)vY$QKg5!jkMx--fM$iK#!N(NVv|1H;k}3vQ5nyukY$L8j|CQpNb`8 zXm5{qm#4VQIM$i-PxHUu)NJ=(xk|HHpR3LKoc^3JnJ%2%Th5)Pt-iZS*dbn-^Zsn$ z8Dwb>F`I#COziKJsqDP#${Z?SW%O7k#}9_!;Im2q0$Wln=;uW=gxq$)bn&_~EPkuTgLF|HF%GEIgkQ~Pg7@!YXt z`6T>T&&TJ@w+)+C)kPqQM}I#hXUNq|$`~$78PXf{(jGTy7)1-{X^c`4$*t~r6t-Sg zhW_XX>8)rMsaAZ8e(mJL)fapt^7<|3El~@87c+#TZ$(9mso$c|umNXMfHAM6r?d8F zgwsRLa?8;%y_{)jiEY2LoD02DTF}Fp4)l&*N`jENjRe}=gO!`0-93Qwm}27_jyz5^ zJNSppQMi$&o1>ihmc`J=PgN@p$}o;13N8lk5Gxma?ObvWAHJiff|B69H1ry3o)0_fRB+C`>CPZ66XOnS$xugV^` zX-$r?fc;+GV;XZQhjPj$Z-YF)Dh$puhRb!Qxn3hbLZ#O_rd-4vCK;y7DbuI$A(Md~ zV>!t*-RbLXD9wse@$7tvOve*p_d?e+@qQP3;=+(0xSDO%7as6F=3>95oqT>kIq#T> zbO*a*X=Gr;N*Z1<-Ewk;`0su-PuJtksN!&3s)s$%0joQevdhCtGWO~?uGjo8YvQY_ zZI$sIiga`_*>#yAC-ml0_r| zz0^9U#Wn2n8NdLE$bK^rV}QLwnp>cm>ZC(slCeWco!cNO5hguHY20>yjtUM+#O?z& zsWjYNaxu>bIdW)tk%SxnWHBjA2yJ&?{JnMYGIJXVS?NI67qocwzGxW77jeY5>`SU75k**nSD&-+IDnZ=`qI?i~VW-%Fi zaX&9P<^Pt5JuA=%%Y;3tN3-OtvPPF7Xo>R7njmC+$=F3>sbm~)c4NlwXSR+`W%g7u zw)I2S4r(*`bZm3&9eC?fWX%YuIWBs@<5qmk#S5n#JmtiS7+k73H!25|vB0^TCzZv6-$dZW%b3;J1kTSt+^$##hJI(KXTV;-ZYwh<|h*I0PmF6O}r@RA5 z&uxdhxeB4lTd_bYm8iq944U?Hyz++wtc^x#r__X1UayqKPpgimD%^e3N9?I~>EvSR zuu59&T7UGCPadh|ofa>USPs4N$Nd)YeKBli+#e8fdAyNTK_KWobrng7Xo<`l-9r%l%l-S@xHP5cf{PgfP=ND=32cKLiAeVuq9%- z9Yj2&j`XpaScSR;<%xh(=H(aVtP0Unqs}J9Wd}WMoW$`|dH;hg9=l|%aG-^u11)la zR9DL@KYU+T={s*~WM^}u?|fP#QS@pe_Dw(YZIC$cNUzMOqVAyTvzA=&(oS40Rc1L? zad2k0S#~K_To1}67l`ekTVH9Y3Y@QgDsX=7QxsCkc$S30a#r#e%B~LQriZCu(?+gh zxcw&qu0>z9P!%zP@t`np9P?xzyC8!}gEfBWLRhgZC- zM_(EJ6R|Io-0Q`_#HL6W-5YAjvqUM2bK)@MQaXI?PqcZ^S2fA)U^9(baAxrFrSxx- zLDBbz+vbP1vj*|BziC8a%-41O;`;)(Xozd+`GRx1SeCNa7jy2LR-`W4-_x-DEkBgCBuWUWz5PHt zUb;%s73d^$kQQVH?>LY#9eNcRcjD-NR=W_srAJRjpe0Y)a?zHC;+Pr&r3+@~i+AotR~b*n9m<4{m7N=@KNL@^{~O zptEFBwT7~Co;O(efwj^Na zZ6vNN@-)k(S6)bN4jUDP_=<^1XD8?W;QR6nQTTE8IX8RWEcYoN`?e`O5D24VEVM=6 z9w4D3i1LBYs6aQ1a%oaeP>(g&Hde|)Im5^>J5k=ouNhR7SR3?7vh#NlBP6P5qy0p& z7UNCo>^Ydr-XeL|Lu+iKhJun4Ch^NNRPhPYnunfz@<~?rW2|m6Rwa&%DdgN1AFJ;Z zl$9W#*dGWD{bp^AenQ&%eTvhRW-9F=R*JeyvnEXOoG9rbPWFx~+ZbNjWAwU@Q5$PX z=Q$&FWr-5C=`hAi)HloTl#&7l}KW*Bw?I>9~o+|Mm1*-G#Vwt>dI!V zpm_%(qNKBt-1{Sn!4z5rJ0%@sBPYmCQOdyGp@dPS8V+F+`p9AB(JVOkS2rs z<_Af^`Vg7!3~_Iy#&tm=cmS=Rl;5vcIt}STuDM8JJ|M11#HhTKSaRUC=&&KW8A|CK z>-6rBYN!YjaYFdE9vvBXxupC=>wXUH02cQBVKxqZdN?71rwgT-Vc@dhXI)4)RBJ{e z%g>2=*3yR7J)QomEu?o;Igos#u6aJtC?nNv=RcVVPXY)2pf=1WA5q4r#Qv8Mo%^n< z_b8pthjh){c-_-nShtgeSU`*am6x+I4MhGb)FDx39eNoIs6^ z!|FcEjpqbnFH6J>{X{&hzGpeCwpw;qvfmml!@g_8yL$%(DR^L3tMj{kMZEHLGRp={ zQn@aHwNrO1N^5lG0lTDSe5;^*sZwQ6QjpaBe5+3RBth-DA-TIc&e5ET1ee| zE2mWU3zEFwTA7TsB+(uxRYvy@!_$uB%x0ZZkt7pYt_%I3FlI@{f*a6>sG5T^>+SH zZ*|JwlDz%4(A-LrkKW#e-rjX(Z;!+c&?;{X4fXfd%l*}*`a2B${ZqmqbsiA3v8wKC zkT&g2-S6((Dpl@1sajfIJj*@t%Gvy#!o-}{ChQ&-wHo98&s8fa+C;rhXevMGGf4aP zpF~O%3UW`nZ2&j?!3IrQ3OY|cRV^kD3{B$>>5P5O(kpaqWGX*NY7 z&mUF=UrPn^1Lfc78vb9&>SWKrjrB*9Gdp~$N;f-1&>5@ z_F#yLWB;kVk0Uzeg@8}9M2$8kDfG&OeW_>5(DUeh{3m7K-R$Z-SIQCdmY&R9M0~hi z-%TkxbguNiN~g6nwZ<`d!>raU?LD0`5OAJrq`x^wXrrq*kceG(fLKZ zh|NA=ZQs%co52q1!_tK>x{0O>2%o12L8u8%#5*{r13eRkRW1`jKx88g7CJn5^! z3jfRg$Dmm`d(5PMuWm;sbhm<#0c}_m{P*?fUxJq*RnLv4SIAVNZ1vr)ir11U{}sGA z+PG7r_OtW_qO1bNYNXl_dH}Bru=~J>K6f@U64&<-B zl;vczj-{^};Ia0#0VOdq%ug{U#`{z4sUFlR?+z09ZIcDrLFmn#rI4I^#utQ@^W_;% zvCsRSVf0h@TeQY7n!E%b=u0Z+cuD2mFR8Sqv`3%k>e1y+V1DEDjp2XyJK_&+wnUBk z8?Ve!gA$yjJvx*iAfAfl5cJoCfvTgdmEeP`QgdB+)_HS}kiHjDA&eK!pDq|Gg*x!o zbTQ0k=}>+)PjxRl3op-8aLw%JrLXtA>=dUI2X5}sr7s8HJTDo-FZEFo?RAv)aMLYO zPJi$`H+;UIN0bmP93J`*n6)|hw=#Cs2dnn@QTvI&7to6szE0BhZm;C+7>sofP&*%@ z(IrHuJoKTjeW5n4KaVs0d`sJ({ijvY*IAk^allIG+azF+@A2!$v-wKpLMhDyT?p$9 zn{5tB3I3}8am+MM)16Jw&SqhB!f{UCGIm7cHka=6g?EneyOtQstYxs*fj9o=m;Y}x zXlrk5qZ-b@E9;>77C_7PsYd9&Y}~M#PQ_|!IR);(eL9_hr}WSK=@-emXI!I#WMcIN zvT3YzTO-%|nBghc$e=^z9-_UE>z>2?s7Azy_CCt(>wPriZ0Kk3`1_1T-|yjzVHOc` zS{!9H8e(){3}OSXo$BAEqv7u-CMlH5 z1V-9(q(H7DwdZq4Np@zCb7Y20qB+dkw>wEClO}m}B8B`lifNh@)Wc>Sj4kR{+W(ch zjJDV8_t`qnZKms`QdO7$3OGRP`?k5p26+d~Z7_1ZO#rz_@MtclEUGE zOkX-MY({Bf6A>|_bZC}cYkDXDy3j(lCt~vuH_1-2x1C zK{kB*1@u@V<^q<8S&bZ3|0YL~mc!R>DA0FpBV1>uG#2{VBmF+eq1}CKC85Bn|DF^j zYez|ruD~A9N@PBP>bKj{J!Cp!P@$PUU-<%JEf`L`uVSn8T%~R3-X}eC`F@MEedwN7 z)cDtkvpus*pNTDI@_7%x_tvsyJ?AALli_C*da6TX3DvfF_!5uf~ z#JM-FlhWTw#Ht5b^v1|Qmr9&uqT$^{Y{g(Deh!tNh<4{=(o zrUyfLt?)i6zwS?!-xX)&AHH1vkvJ>gKUDsN|E2s{TKVsz{J`b%IpvPQM~2G3H8|W} z6|${bwb~A^iyk;OuRIZ7T&*9je z+kF-3Z!bhnUU@uzxu0G#+3-#kbV^=%D9-xoj_Y?I2GgA@J$dF;lIk<3yd1wKoQTaC z1bsy+&2G`*>FPns=q+AdnTY)w{)H*wRNdDO(PFVii& zei5{ocLgonaUxFB=ICH-i>g!V2XxA69IJ51I9B3VfnymCH;y0RxC_UfIF{hJ4aZ^} zi*VEo7=J;mOTCB@#Z|yz!SM)igS|+rs`tVl!q83Wv1?V6ot|g;Y!10dN#i z-t>i3Yg4+kUwisFAjFU4g`nFH2dsMyQVs6b4P@=zBHfI;H3Pb)n<`VDl4MLuobmgl zeov=oi)&(t7S2VSz%@Zr;Z30~H5(k56#$0>i^HDEI?uAIn-@6p%;7qZyJczB_ZG~| z6L5cf%UxBK3ySjyG_KYPDyHiFAoTa?V1I% zcC}UfEyC)7?=?hoCxugW(vTrnMC?x@HVwSR(h@OyoRb_aHl%%!_`UYdaC8+9^Fqrhm2!>6WV%>lu0!U=Cx ziRP_JKl#epVPh{n8BTS;lVt^}0&NSHY<7oXSD7bsLG^`q*OTq(RV^6jY{WdGDSyCG zUB7mzr+!1-J$37ruD!o*-OAN#f4Fqzy0vST-nX%~euL+MOFnPb?$bDwb}nymHp$mZ z+Xv3a>&net&~_iBv#&7;*lkd8p63OXzxG_@_Xa)oU06tFne#kPs7ftL$CkEm`{8aO zPk4iu>C-RD%@rMI{@cj`hs1w7P(}_Of+cMieM_@~0`$(^Staf=V2_issPgwdtlY>U zsWxJl@hiPe6$veFtih;f7r3#Xqq6#fZ($<#UVSq$I2{*H&U=8d7-x##zmi(PZ7Zd>x<-Xp+ukE^7Kt%)Nc(^sf0u6xR9 zLvJU!@tl!+z1K*E*}&4%o+x{)##+Yx)FqqCT<+ZQry}$flAm$TYlPMzw7bk*i&Y_e z9xN8)6el?I+QI8(I{RE?RLeq%XOgQr5u4EwkL4vuAotdK&wU%~#KpDuE&gvMqkre!xK$sjXSgD3DR~*4nm|HCn!ji zmN;$Nl~XLaq?tfX4h-m}T09BLF9uGlH9p{2EvHpy=PPG(%nd-_NIKp5eEHQ~=>z(U zBzJ|h$CckjCg(|?!6WM&`?$-{wf7rZc;Fj4pU(Z+x7^r^5u_KgRm)PA9WX0ZL-nUTrpBx?h(|+$@U3t6KeJk^_A44!jbA^80v^Ok^Q~O@Bz?*NY*i=Uqdrb8&RsMy%K2`oHOKDiA?j ziLS0$yP|G2A`>>$uBhEm%hq2NS|oY6#xH{ZMoF)F(t&L9tJ!K|_p2R7^zz{WDyki# zd<|BMLh0jsMQBOHu0ZD&H>w?fMO&CAirCTImRdKXf~N^oAog(W(w+%Tmk`D+h`7KU zm-y`rXY2x^lJ=a?#J5uAv4NHY+;i|fyiS#!aqj_=&$xVEoXC&5t~$c*XTs+XEn7p{ z-t$pO-}@2aUUbRODv5A!jRe^|8{VX#HO%ecTM=`jd=jtOUjy3zQAK>v^UO2BRN#HQbC#l8d`S|ki{RDp(tRR=kwSqXib%Aa{MH6Jscn~YJ5ZmIMK zzx{z0|E;RUVznh>-F?Tq$s8(S?IpLW!qg4fV*`g|^86!mCE7;pheGs*tl3{<4HpQ? za8tQzRbvHcmJf+BcUaV6VmeJ$uvr~Rynf3I1@NLeEHk>_ zg#0u{vy6X@P_a3}==VSUtXwL8in-8Kk-D$)u$>p1FEqZJsx#Zl$-`GQX=(q3H1rFc z-H6f2KJ2E@QiHD&4LaVhsHb@6O$8zUT`qu zcss`0fYugBw}4+CxtEI2bg<8|r9$+Z!973dCzH*Hy(Srk;9%^Q=-X)o3#B7jfZXn} ziKo&kS?afa7eJ{m`u{QSJoTOpp4!z+q6`TbCRnO4PrU74`GLsE@TAz&LM!EW{IYzX zCTp51WXzmTF~cxM;-PMV9O@<{m1YB#yiRLHJoY9cM6h<0He;p80A-S~mC4;6Zam2= zkc#|^RLi||&MiG7o}u$%k+doL&w+{~X60qzUWi@Ws_QMMPT0j*m9SnUi#ogMm=+JB zWk`#MI$CO(1Xj1+vV2|bhUK!jY~#w6SPa+IVR2o*L9E+USGQt4_NA`zY!JO{mBgub z14If_>mf%Nj#9XHNWM=Tj6Iq#$RD^y9~q4K63m`UCfoc}5&9sx#Z2%`3AJL3nk%yW z<*G4_&iZRa2f1C*_rVZ-m4pzCG%eT6)$hdf(aTfbuIy1IKj>o=f9h%{W! zkx2T=BPcuqe$B6Lfrwhm&Ub z(_}i+7#QZZ6w&#y2#XJDVo@}lTmH(!%SYAhP9d-3OqF24)5PznB%pm=#WcS|tgmp|2s8tqN=gu-Vav*>PyF=<@9F)+*quJ$*^c zi~lnXFc9m}cW5}`;*~dgHqQ_4^Jj5~N`UJ^Ue`XT2P zbJC!#*7x<9cA|wwhSFby*{}#`NW8&!d5&jQw6(YTvBLywJdr2bgxpfB1I-or3$V+u z7BOj=bQ#@f8*iM^;O^`u6WOZ282);TWVOLx2+H;j6pb;B<&=tkVi%;WfZ({>Pp1tJ zA+`-GVaYiQZH5#k%KD@!oJyMt$-+{EBngvzhS{-skc_<_;A#yEup6ygKa*d^Z#2#z z1*p@8GK(4z0Yw5g!gtMd<2J02W2#RSqRo6VHXl2S zj)sn@%~n>zM~T1HGu!Q0qDcPK(*RAOsp63O63N=jv~V(s{r1~Lr2a9Nc;uK$+E5Ox zQC>NcVDWt`5U;|2tC$~Zy+*?jTre z)M6r*k!Uu@qCU%j4sQe|;3Kyo(ue)hi5-g%1j{{Sa;3CKGUDy8lH# zB?X5Lt>Km9NkInkYhQ!+nf~wuq!rT;)&#koRg&?|pGmi&hR+a#vl_Y{nYagfJ7NcL zmwNwvl2gk2brLHJTf&tapojRZKadux#o&Ro8rqwt`>2~5KI-Ow_))iRgAx9EU9()v z@;{rb@w00a)^)pfw+$ua^tZZaN%~h#gFgDGC>VZ9Z=iEL5&9B~(RW3%TGGQ?fVU-M zpY$EJ?+l16lF^z|H39RmFrf?2sJw%5VFIxT<{HVQVO)o&?F?L1S)=A#M^@P?{~lq_ z!?kB?RZdGJvPJ5K-A2rRiwt0gG6~$|S-+m~!j%h(raG_nE@z94r+!7Nfn#n}7tcRwC$k1p~nlv5Y@QkXXw+D>N`{B?=U4MQ`mod=EmaD1SZ6 zb3gLH-at$)i`geOGMPz~2k`|Bb5(uqN9wcQkGik28u2}iGqr|F#81Gv{!w>^(@<$& zt^%jn?IG4j?;_T>alH;$9KV`aXX9GChUx2!pBWz)_YuDpD<6w-rpjOU6Vj&bo#&P2 zc#BK;{J17DCXzP9+4InX24nXR60r^Cr*NH1)DSTnnc=*yw*Hp-HF3^KYrr?rKC=+hZ&C@#0VVyN9r{#@Dau|w^y*03xTlp4nWW5c2EmLPsjmmy(& z87@dgwj6NZKx{&CF!o)au^DYP{%vIe^xl~gd@-Qs&c4Ce9eoZK?W_!so3Jw>8OsJf z&sI}5exu{b2+Q|!pP=kf+4vd_>6c3%k0{%Ln35QbecZ?5Vi>329p|O+N&~A)HxHOJ zX=3w!CF;pXJyUT1#eh+(=L{nB)DBk5*8@rH45sk3!#k>KnhxGZJTbBQnMInH#7add z;#gR&+xrl;-N7qgBxrG_oj;*p@N4H014Tp&;+_{Qf@NTY*2LD;zXuS}fEeKvj}Yar z*ePzuUJ<4TvG^2UJNDGtEhoM_!z-qdS7nXO&JlAbPO=wHo$i=1i;4x19!9rS8o6sM zH0Ng%6fQ8cm=os2>@Y8m4GUscSSMZuulmTaK^z`7iq^16Ob@4tmaql>reUHnoG$9a z8KMxjid;Ao@&Ch7B0)K~)?bE|MP}O$!Okl%(nEsZjCgyalnEXdfq?t4n;CsVzgRyR z2QeOM|JIqt;>B4sI|U{oy6x_^4m+gu#>6XUt>eURX&NxZw1wYT({#%3)L{#@jK%(6 zE~Cq*5Laetfy@PHQGpx#!kn4d2X+c&*xe$^7>NBoo~k8WLJ9FH?a)W^;9cyxJEum? zb3;OTf90}tIn_L`Q_XiTRP&t+kzS(aIqAd_q|lj>$X^VQRlwpXZwx3MUq%QqRhcWz zo0jc2Ef|5F`M&id+$7iKrnzP>l}q5yqi!c`I1+dg-_!wW5RM~0+=mpluD#sm12>HB zBNK1kO(ro+ri04CZ%h{VbMIAH>>8Fs!OYm`jqPS1TQLINTNmaPT(>+|s)pOmZPUdX-t<)YoQ;yTE{`65G@ za5oiFa^?EE4chHW&${&+mTp{M$MT4)Yya`U;xkxOh#uopq3(e<&T#Bim+rK86_aXq za6E8ZO&-6~5B`Nb9|hv}262JUp~WlX)E2qT|CRizCvO!I zpYZd&rTijr8wcF)Xg9rO8olX`sb!B~t<0KLHQO|hxgNNgO%B`!qfDb zUG6c`7@6y(!)x7(WIDqVr~u}DI}Xv!JxgAoHk69p{&#oLW`28(YHJdjNw3KogpEHA z`zpnduoFCf8}>P7lF687X^T{fc&K^62O!^-a<#($C$O`|2{XHJq=xR)!`f;Q&Cfz3!=*`KP}Vwq}d6X1U?ln<&x)1Bq|)4*LshPiOt zpKuQkzlq3@yR*$fjDTL~eN4Alo#g&O`T5h^+)Zvi+yrTobTqp89kl4>h)$a?UW{Oo zzYz%jxFG5wyF5I0jqMuRtK%bI%jLlOb)(*qf9k>>WcfMZ)jqjAThMZ|-5}VV48HNU z+aZPa3|u(pQ|%6thiJKxzy?~aO-<@sqt{6cm9J%@9InO=;F0&#Wl6{KN`3%>2+g`)A+u8BcS2|t!&SW%Zw=XZCBW64OMpFf%!}je;98i^d>mTf>-c{&M@oSA|D)_*FWGa^w^o1B+){nPSBv?tvhw&chGg9- zyWIFX3cgpCS@s+3U1PP9!2exeS=%A0YiQX5_oaTF8tNC*JL0id2CcSu?3qEx0P(lo z@PKu51oHPDW_#KD4N}-&j5{564pG(NE{4_qZPKxhU6V<#c0HfeM=dlC&yKvGrALyS zT{uF1>UGCs_YMkS!!EY(CfH9W$|z}ee>`?yM>4|hukPm&yL)TB3~YsIUn}8<`_Z)J zYwPRlmcwx?{;r~)VjPgKiW}k+4RU6??`Z08&zb1Xm z2E+dOGEQtes3sL@u3Fyj`?RZ|^_X%_zURjEgA9sy7!tU?rn}(|y#d!TOJT20(zDOjQDzD{}95X$G4Z64-ZXoBWp?Px?_`BT(k3_PLr z_W)KW4UY#d#Vh;NTKEaf@?$_Vi==0OlK{V}b?#+5JVY7xw@T#4TikdLWI>6)kR~p8(tEDvRL9`Z4Tn zwc`QcO(~lfxT$=&TbIY$vQ8~P$>S3O;uEacQ)sjrpM%Ci`0cDr+S`d3?__LL5;6E1 z3el@B(Z)4`Ha_ao9bseql^T!v2mT(>v3OXM(ZNCfHk9LwgFfs^B-HU4&Me;_Rp#aS zd=R=xz7x;CR$Kk-`k_`<#u0YEPis$fkkvl4!x8Jl?MXWOuMt)nu>HIe$snIQIw zC{iDp%--9fHfm)(hq4}brD3_IsZ zA7eiRJopLL_IaS(BMD(n)?CXhI{T{#zE5E)le`fE%!^m5hA3Hn1to6)B`u&N5mPoU z!-T>2@{iGvoyik>zf>E2WRhLxlxJXHKjxZogxx=xWZW@f(17!Sq+>6W2)_abz^;3f zqo?K~uE`!4ohvx{5q;9OfArLm@IrCQazr<=JU>TNjEL)>cBZA*o3rKM-%khGiqX9W+ zl8r&JzZkf9b^!azH`4IOs?}$il{J_3vslKiyPk}uQ<2l%`05BG#>T(Ll=ahFbuNZ|Bi4=wN(1xGK z8}KcGAKI@9-fy3VI5T`*3%19nDym zIw8T>PGMg={6WepeC5xl#l{8Ik%+w^`S_L#W_sq4cx+og`ZoDCe>`@7zYtu2-J}O) zH(L?r((BJh=!U=57mg zTVjr8nM8bbrxLr(uB$o>i}~6rrcog_U*wxkq7BY_g(kKVK8;@UO-xrMg)T&97_lE9 zo3b2D@cv=n58h#(y7&Ba>QzADM#5OcHw#gwaAGnm)5M~As7RagTjpbLYCQIdSDv}A?-I}4)rWmHp8p-sxb}P7<1tm`ln(}( zE^!X}O546me57M?#dHQ-*ib&_NUK~WeWdYF=fD;*YDjycVtQZu^$Y=uR7-wO|yDG@;UZcK$jqonei}odU-o6Z>Rh^Dg7izHa<P`o{b%na87nQqDZGja*eq5cCjnzPS`qwh?FvNm?nvF5T&)9k|0J-+( zus$UF9(5H+hUdyo-KRar`XJA2q`ATM^FV5SH8dmIrj1OZ+bc`;O@`*jT=p*GP9olc z9pyiBnYxDe(eGpL(Svkmd0BOtVL(UDM@H_*^fPqASa!Obvk_(Gps?eroj)rxmg%4g z)bt$mZ7J99xU;9tR|MptX7SO8v6=1=%V?3YsWZ|aYad{}+}4&Oo6*Znr$=kO+;BQu zLO=24&cogM8EY>0be^Qs`pKhr0{Xe7pAPl22|FlL{oJPY)AZb;p?+>fKb^o_@r^C5 zuc^3g6Z%@y#`uOqZ;ef+<}Kwjy38*U5plXUGU+u}TGz}z?)&KTgRHj?mpaFk^#1ie zIwu;r>cyEr5kBQ^QRh1r$(>mXOMsHhAWAH*+mWU9-7wU5{f-9LLiF9ZV__LvKXcVg z^1Fz+nd~r@aXZXSwCFw1U?yk~FBv5@0texgTL$RFO@4-hV|ENM{mqEoT<|Cku<`6w z%S!27CBjl>4A9pTv9|_|@Y2N_5Z8{`y?xLMi;_LtWp^p_dTadGptfVbRcH=$7E}N1 z7Umhw2(z_$v@{<03nw$bTcv*le(CEQuSwR6eRQIRw63c3=OP9m9{Z-x)&d{j#CR;y z7mYZ^&y%uq`(yV)I=olwSf;Eh$<{+^M3;4To65<=aHJHFHuEu*tXSdNh*(HKl$!Oh zL9P?m*RH8!4g-8U1f~V-FOiV7^~>v+nfy;-lA^uZJ73I$%w^^mS#gS3k!1r+?DhEa z&T7psk6&gY{fc^4ZmeIkj% z%fI#ry^oLv!k&o@)~Mi+{BCbYf2@{$6G4+EEs!HWhehT^tWe1q^Ftx*_wJ7^9Tp)H;<{^9!@YMJ%TW3+Pnn1$XS%R~%8$%YMeYrL9^ z4;UEGH-t05fU8HSAWYf~c+jx1P1>@D_=X?WVyW7MfU$LTwJUx^NQqWES7=A=-F>X~ zBdGl$4FyS)4$7h|$;Z(%77yH3@lXfL@igMctoX+BrB)yA17_lc?xOixfJg)w3d=BO z-A!a-XE!&avs);8q}DjQvzshz>yR(Yx@3t#VlsRn=E7bw7K4=sMB{eocZTQ^?3#sy z#?Ev^mN8_g0T_zpT*bcC0U3_iPv=y%FBVBIrgz_%ehx?2Sj>weVG3Kge>;K)(Eh9{KFZ z$LyI8u=|+F*4s4e8{e&$67Vu{%FVFAsiu>L@k_zIbS~RxVPAeGa;d~omrMMkR^p1G z5@E?`B~JU767#hZgV1u{?_)M6Rx~Z;W2E?zx4WJebKx`f(2k2x*W5EJPeveF@ht^L zRST&4LVOs$lfbA-n=G&wi_x29(6bFur$*gm>{j$zuTgh1c%8n@`phXWf#!p;HA%fB zL}wxXx&ZxlCJ|Kx`XKT^IXBR%MN3S*94(=P9C|q+$`4&mVc#xc-V=O%V_$!a+5aiu z%3$otWZ5#Ia6gK6iS@BjaOe$Q`s7HePDUi*G|_g;JLdhA`{9e`_bmPr2y~GUkpXD{QgAnrpu1;uHz@a9Qk~c6lb?XRa};2(~*_nsVHfX8wfMf}X#iLOpA7^&*IJlM~4R zm@0cxc^`JtCJzm!&FJ&_b5t25tF3^(14wJX#XWhM*HbOXYDc2Rd|u$5lD)v58ch3c zoz2c>Eo91R3@}>DmHgS%?Oo;N{t=t?^23VES0kcOc8!pVXlUg6y;c18)4m}(?djqv zk#Qvr*kk^oJD$LII_kv$E$A3I>D>5<&zWi>__mz(9Xv%lb6_*#q;X1x(atw&ie17`OBUEYFTqaxV4OuqHk0I4CHhJGPDppW%c5nq zlG=HwH@QS%P^>2jC!bnrZ7{xuv*mP3i_`LF*t58C3#pFQQ<5dLK8=j-#BGUKNE$$# z#qq;6)MGXq>~D}_rk8|ZJP*0-81^A+Y8S`yr91aQCQWD2ZI>OyUi*-z^s?`?2f5LU z(>hObLoh>P)iR-zcD|Q3a&?w8l2%&^&fBh0>!KMCrI+?d1LkKnH+)3PKqEAvK6Tug zV#O^JCaG6qj7EQl+z52mwtwMl*&X!qi)SPO;|8Rlz14Ppi!aW)-AoNBdubHp%6ApF zLkg45`JBbR9ZE)PW7dAj$$u$6-07&k290MOVKR&ggCf7Mo{8sVQ42Xym!$$G5T;!PR1qI z5((^Ept)eE@{P+38r!)T`DHHZqmDpHp}p6Tk2-=RtY5h<&wfi3w2fu?ZkmpA9(PTd zrQ9?FrsQkEkb1ZSrcsdB5U*R5m73=-#!9MkUOB`BG!xVb=#x`%@1ojLK6?>4+%h^* zJ#?sAu&1h1;IDu`W3FY*kPtjLN0AY^bNv~K|C47V5m9HEKhA>rdm?_{1>h#gY}^E? z$4!t~;!TjJK=lD`jL7OfIJ+;xigRJ>83t_xbVr02H!@dNRg^BCwa8oz35GIvk`OE1 zM~O7bUPyk|9ovR8lHtUQIDK$-|M1|mY=ppnUqr*%{Q<=Nvz0e(zqVpf-HcJaJw zQd;&m)FIukq0@ZI3rVq))G&uzj8^Pd(#(Dv=E%9&_tfqtnU~+L{5WS5_F~FP6o%Fk zVVrU9>?7)lJAu72n#+?AW*^R8im;~O+K*n5b;L?jA_6~G8D>Vt8KP%>eA-_{GW`uZ zA8*jU%Wd`NwWF~1Tb#)lJ0Qi3aUvu$G8*Ftv;lpBb0N|-PNPOAzKDBg`rx&JZa@FG zgFX-Xl=jen!}=!>_mVpu?_J@rPxA|2y?N0kj3K0T=*z2e$Xwz}BDnclzuyW@KR*khIvtCz;42*~)J{jG$28Ytn(Z+adrWtFOt)XL?u^?$$r7<$@)=1j zBW+P!k+pI4_T}4eej`>tUzLHc2gEq`3Y{5o?RP;6flB|a&J@TFkG`VbE;+#B^6bG@ z;jD=6(FAOyo2pIL)y5T|jfI3xZ)2w;_bSQ3j6|(Pa#tO1UZXET=M(-flWWM8l{iBu z4K64v7Z;^2o?~ROQ|!UDvW{?04IPCp$4A&d{?{R*4!;t+op2c5?)mB(Yc*yT6_foc zBsuSIfqstm=ON{}xP{!F?!rC)*b3gf9IkVC(^B5GlsB*JLP@kg3dx<77-_in1-$*a zPSSeEwJ+|1Bzx`O-=$kXO0=SfEn1w?JZx-zHxuiCNGHi;;KqaK{yFv$Ti>N{GrFJ~ z0%r-bP55qCupys=YLZj-LQZ-Vq&c|u+q!)59Sfa|NXeu61mje@;!&C2posPR8!+#2U z{ZkhRS8KfP+j!rIyG29CW9G^V9HG(Dirs)-kYd)&#(J)7iq~yAp5BQ$ovC|c?GR+# zf0{8!j|WluQZC0~eXs+PlGfcq-5$TD=1X<#WuXQ~Uv@dpT!nVA%p%;&p|uXB7k9NV zSA`r`$MrdkaV}Zg#hn{$#5@%GbDG*Ny1W%l+wni7W%*?`*l!Z)vN+HLsUZFLefPoTSl^Jg zJeCIC{dx8i3oA1!+L;!TNLWVFS$Z}`Gx`pQf>yij7gsOyF{)Z{qik8sp{JcW?AY$7 zLBXjXf!U`ckFD9>>4j-0Mq=W>otgL%zFQ7z6Ij(d_liC4L{aP4bcI7t~yy}iq^(xpfd z^d6CZqNw&k;A^ey)`Ud&B7PI|`GOq=95%JQ&Ea(*R zZ7c8zZ2Lqu(0QwMgOjV>;FN6osV39z7dy!=8JcOQoh7ZrXxEoS8!GGtvPi>P{f4HB z$U7A*ez5Vxq1)fRCq1z3Q%-{U(3Kk6+QkCfB+`LSiP~KAQqA!iz1=t3X!jWgtoLcx z`s(c&C6YF>5nT3>*;9GP>r2nu|4yYBE5RW|s|4v-_rT(1?u{952c7BxFpUguaF+ zo!G4(5p@)LDGX_LgY3DEC)!c)aUZm!RAahbFTweu zS<>d~KRgi98j{|San~4!wGJ?{R*mtK^U_jDyt0LhSGByh=hgw4mwHWN^aj-s7PIdh z^ABy!yfk1EnIthXn0xbP7DH|Ilk>jm?1wLR%c0kz_khWEMRb-ukk4bFn8#p4^XX}k z2K$kP&CVL!0GK|r**PzmQ$KaG({X!e!_JkYe+p~w{kZcc)K&sCOAK$(LTgnsU{jlq z&wbmaZ%MYq^16Ldza7w5WuKx7J48FCSjUD0wdP#= zKi+qmeZ?;BTHNAX%Ef<~S;FDmBEA`NyNOI45|`2hX&RDuWXmIq==7(rUD88QvfDF4q!4M3y=Xw2c!XXfQf)qz<59kU<@D`kOW8oj0D63h67>& zLjf^>Xn-0p5D*E70E7ej0Kxzv02Lq*pal2>6aYCu29N+4pmcO1D;=G{N|VL`QUGHC zV*s}Tk^!RuNdV9#fi4kriJ(ga9X6jz6G4{n{%XWujrgk(e>LK- zM*P)?zZ&sZBmQc{Uyb;y5q~w}uSWdUh`$=~S0nyv#9xj0s}X-S;;%xODuk&*m@0&+ zLYOLqsX~}4gsDQ9Duk&*m@0&+qBK`BHm{1Y#iGt-;eJ6GTxf4ahA}FgnXDw7e?NxW*D`ynp+0 zy{tuR$+9>d7hFZVg?&x=v%;<*Yp>ZweyjE8T4+|L@1;IQ`SVJIt;0^@+U>jb2`vwT z0_!8kQCHr(YRfKtV2h5of8nBAPwmTVcn*;*Q9QnQNL}8bSGN@5{{Xyw;HUc7skU+n zT-@y9O(i~f{|z!{7=2bc$1s_?wS+hnSsL`;;*BmYHnIsXd|Aou&`ElqC%lQwoLbG( zS$7_CDw-jm+4=+4x~tN|n=s#(=WVam_iD+U!zE;vNTB;O66SSap~Y zBdc`MIdv5Et^vtWPRAA8Q*kB8YH_~*tn}$#wJDZp%O~Zu z!_N(_&+x6|_*Ia}p4Ug#c)w= zk7}NDuKPdD>q|&;IUZ;d>g`<1F3Tj`ZA&wn%AsZ8X>P-=44&p;+FJrwXKby|9(wb- zRgl`2-Fj`yL*R_>UB|&|Eqtqxp;eH5-!<(Xb$Pu$1udXne``zY9IAg=Y)T7LZ(6kr z`)!L&uVvNY=EBhgm*VMlbJN?#}ezF=vEvtu z><5yD&Z3O}wspDXNo4Dl=!Jp(pTqt3S1cr3L@Vj;8X0-bvRhgwdp^oI*%(;M@2{Eg zI;2g=cSnoUa$h-QneYjLQo%a))=iRHD!&81CVN!0q=jylub7@vzQz~#wz2+{KA&4Y zy-9*MqKGF-wV?r}nyjLd)!7wtNG&K>ljQkHc$23#ee~fC&M|6#+=_xmFnP(I#O<5V z_hMU8?zj5Nj>fdAwx`_R?5pN$jBc9ujCDHh=XS@Nb6vdko_GV({&td$g#PlOq_ct6 zXPo~^XL8X>FMQO{b-g~ zKf0^6*>{l0`}RXcbGX>Tmj8zTk4I9WOODdkyoW+dF#dC~N&gj(6G!MKP-}@F{^MmO zl&e&|-)Odfwy?FN*CAns32V4%FMopXlWEIww`Da>v8g?4EzcR3>-!i7wa`r!MTZKq z`TKn7+!ESH+Y_A7r@(gUV-G`y%I9_L(z$&GW9A*hT6Z_XDr<{MWUVykDKJKb*Yfl3!#F!}%9{1t&Gs)IGTGxt`m}^u z3Y~$if@VpEZ`O5-sJ>;ED#KBJEK*@CQtgylK8lE3y-qLrcE(I@yZ+9+9kla)y{ihR zFMn{IPOfzGc{$#;SPuC$*&qdUNRG=Km(>vMbgb|CqhC^H67RS227V(lNAP}2Zr~S_ z8N>ToZs0c{a{%uLnWaCZrB7xb-Y=W?TfwKZ_6 #-L0U?=unmDilue(_%N0-Vdkr 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�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
  • `VrpPv3@9ciEm{1#y|T9-&e-)!p$MEG9@XAK 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

    PcaXw~jd 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

    EoD#H1&uR|PykqBLpmO>aF!SP4`Q-J4^S?FWg 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�s#RnUmJ5m(m(c%4A>s&S3f$0Q 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 literal 0 HcmV?d00001 diff --git a/tensorflow-test/HelloWorld/out/HelloWorld/CM55/size/HelloWorld.size+CM55.clog b/tensorflow-test/HelloWorld/out/HelloWorld/CM55/size/HelloWorld.size+CM55.clog new file mode 100644 index 0000000..c83daac --- /dev/null +++ b/tensorflow-test/HelloWorld/out/HelloWorld/CM55/size/HelloWorld.size+CM55.clog @@ -0,0 +1,60 @@ +# CMSIS Build Audit File generated on 2024-05-06T14:39:18 + +# Project Description File: /workspaces/tensorflow-pack/tensorflow-test/HelloWorld/HelloWorld.size+CM55.cprj + +# Toolchain Configuration File: /home/arm_mlops_docker/cmsis-toolbox-linux-amd64/etc/AC6.6.18.0.cmake + +# Package: ARM::CMSIS@6.0.0 + Location: /home/arm_mlops_docker/packs/ARM/CMSIS/6.0.0/ + + * Component: ARM::CMSIS:CORE@6.0.0 + +# Package: ARM::CMSIS-DSP@1.15.0 + Location: /home/arm_mlops_docker/packs/ARM/CMSIS-DSP/1.15.0/ + + * Component: ARM::CMSIS:DSP&Source@1.15.0 + +# Package: ARM::CMSIS-NN@4.1.0 + Location: /home/arm_mlops_docker/packs/ARM/CMSIS-NN/4.1.0/ + + * Component: ARM::CMSIS:NN Lib@4.1.0 + +# Package: ARM::Cortex_DFP@1.0.0 + Location: /home/arm_mlops_docker/packs/ARM/Cortex_DFP/1.0.0/ + + * Component: ARM::Device:Startup&C Startup@2.2.0 + - ConfigFile: /workspaces/tensorflow-pack/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/ARMCM55_ac6.sct:1.1.0 + - ConfigFile: /workspaces/tensorflow-pack/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/startup_ARMCM55.c:1.1.0 + - ConfigFile: /workspaces/tensorflow-pack/tensorflow-test/HelloWorld/RTE/Device/ARMCM55/system_ARMCM55.c:1.1.0 + +# Package: tensorflow::flatbuffers@1.24.2 + Location: /home/arm_mlops_docker/packs/tensorflow/flatbuffers/1.24.2/ + + * Component: tensorflow::Data Exchange:Serialization:flatbuffers&tensorflow@1.24.2 + +# Package: tensorflow::gemmlowp@1.24.2 + Location: /home/arm_mlops_docker/packs/tensorflow/gemmlowp/1.24.2/ + + * Component: tensorflow::Data Processing:Math:gemmlowp fixed-point&tensorflow@1.24.2 + +# Package: tensorflow::kissfft@1.24.2 + Location: /home/arm_mlops_docker/packs/tensorflow/kissfft/1.24.2/ + + * Component: tensorflow::Data Processing:Math:kissfft&tensorflow@1.24.2 + +# Package: tensorflow::ruy@1.24.2 + Location: /home/arm_mlops_docker/packs/tensorflow/ruy/1.24.2/ + + * Component: tensorflow::Data Processing:Math:ruy&tensorflow@1.24.2 + +# Package: tensorflow::tensorflow-lite-micro@1.24.2 + Location: /home/arm_mlops_docker/packs/tensorflow/tensorflow-lite-micro/1.24.2/ + + * Component: tensorflow::Machine Learning:TensorFlow:Kernel Utils@1.24.2 + - ConfigFile: /workspaces/tensorflow-pack/tensorflow-test/HelloWorld/RTE/Machine_Learning/debug_log.cpp:1.24.2 + - ConfigFile: /workspaces/tensorflow-pack/tensorflow-test/HelloWorld/RTE/Machine_Learning/micro_time.cpp:1.24.2 + - ConfigFile: /workspaces/tensorflow-pack/tensorflow-test/HelloWorld/RTE/Machine_Learning/system_setup.cpp:1.24.2 + + * Component: tensorflow::Machine Learning:TensorFlow:Kernel&Reference@1.24.2 + + * Component: tensorflow::Machine Learning:TensorFlow:Testing@1.24.2 diff --git a/tensorflow-test/Target/CM0/RTE/Device/ARMCM0/regions_ARMCM0.h b/tensorflow-test/Target/CM0/RTE/Device/ARMCM0/regions_ARMCM0.h new file mode 100644 index 0000000..0d11343 --- /dev/null +++ b/tensorflow-test/Target/CM0/RTE/Device/ARMCM0/regions_ARMCM0.h @@ -0,0 +1,60 @@ +#ifndef REGIONS_ARMCM0_H +#define REGIONS_ARMCM0_H + + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- + +// Device pack: ARM.CMSIS_DFP.0.0.0 +// Device pack used to generate this file + +// ROM Configuration +// ======================= +// ROM=<__ROM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00000000 +#define __ROM0_BASE 0x00000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00040000 +#define __ROM0_SIZE 0x00400000 +// Default region +// Enables memory region globally for the application. +#define __ROM0_DEFAULT 1 +// Startup +// Selects region to be used for startup code. +#define __ROM0_STARTUP 1 +// + +// + +// RAM Configuration +// ======================= +// RAM=<__RAM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20000000 +#define __RAM0_BASE 0x20000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM0_SIZE 0x00400000 +// Default region +// Enables memory region globally for the application. +#define __RAM0_DEFAULT 1 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM0_NOINIT 0 +// + +// + +// Stack / Heap Configuration +// Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +// Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +#define __STACK_SIZE 0x00000400 +#define __HEAP_SIZE 0x00010000 +// + + +#endif /* REGIONS_ARMCM0_H */ diff --git a/tensorflow-test/Target/CM0/RTE/Device/ARMCM0/startup_ARMCM0.c b/tensorflow-test/Target/CM0/RTE/Device/ARMCM0/startup_ARMCM0.c new file mode 100644 index 0000000..0b44834 --- /dev/null +++ b/tensorflow-test/Target/CM0/RTE/Device/ARMCM0/startup_ARMCM0.c @@ -0,0 +1,146 @@ +/****************************************************************************** + * @file startup_ARMCM0.c + * @brief CMSIS-Core(M) Device Startup File for a Cortex-M0 Device + * @version V2.0.3 + * @date 31. March 2020 + ******************************************************************************/ +/* + * Copyright (c) 2009-2020 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. + */ + +#if defined (ARMCM0) + #include "ARMCM0.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[48]; + const VECTOR_TABLE_Type __VECTOR_TABLE[48] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVCall Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10..31 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test/Target/CM0/RTE/Device/ARMCM0/system_ARMCM0.c b/tensorflow-test/Target/CM0/RTE/Device/ARMCM0/system_ARMCM0.c new file mode 100644 index 0000000..3eb38aa --- /dev/null +++ b/tensorflow-test/Target/CM0/RTE/Device/ARMCM0/system_ARMCM0.c @@ -0,0 +1,56 @@ +/**************************************************************************//** + * @file system_ARMCM0.c + * @brief CMSIS Device System Source File for + * ARMCM0 Device + * @version V1.0.0 + * @date 09. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 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. + */ + +#include "ARMCM0.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test/Target/CM0/Target.clayer.yml b/tensorflow-test/Target/CM0/Target.clayer.yml new file mode 100644 index 0000000..bd24c67 --- /dev/null +++ b/tensorflow-test/Target/CM0/Target.clayer.yml @@ -0,0 +1,15 @@ +layer: + type: Target + description: Cortex-M0 target components and files + + components: + - component: ARM::CMSIS:CORE + - component: Device:Startup&C Startup + + linker: + - regions: ./RTE/Device/ARMCM0/regions_ARMCM0.h + + groups: + - group: FVP + files: + - file: ./fvp_config.txt diff --git a/tensorflow-test/Target/CM0/fvp_config.txt b/tensorflow-test/Target/CM0/fvp_config.txt new file mode 100644 index 0000000..96e7c90 --- /dev/null +++ b/tensorflow-test/Target/CM0/fvp_config.txt @@ -0,0 +1,6 @@ +# Parameters: +# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] +#---------------------------------------------------------------------------------------------- +fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation +fvp_mps2.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected +#---------------------------------------------------------------------------------------------- diff --git a/tensorflow-test/Target/CM0plus/RTE/Device/ARMCM0P/regions_ARMCM0P.h b/tensorflow-test/Target/CM0plus/RTE/Device/ARMCM0P/regions_ARMCM0P.h new file mode 100644 index 0000000..797cbd2 --- /dev/null +++ b/tensorflow-test/Target/CM0plus/RTE/Device/ARMCM0P/regions_ARMCM0P.h @@ -0,0 +1,60 @@ +#ifndef REGIONS_ARMCM0P_H +#define REGIONS_ARMCM0P_H + + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- + +// Device pack: ARM.CMSIS_DFP.0.0.0 +// Device pack used to generate this file + +// ROM Configuration +// ======================= +// ROM=<__ROM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00000000 +#define __ROM0_BASE 0x00000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00040000 +#define __ROM0_SIZE 0x00400000 +// Default region +// Enables memory region globally for the application. +#define __ROM0_DEFAULT 1 +// Startup +// Selects region to be used for startup code. +#define __ROM0_STARTUP 1 +// + +// + +// RAM Configuration +// ======================= +// RAM=<__RAM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20000000 +#define __RAM0_BASE 0x20000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM0_SIZE 0x00400000 +// Default region +// Enables memory region globally for the application. +#define __RAM0_DEFAULT 1 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM0_NOINIT 0 +// + +// + +// Stack / Heap Configuration +// Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +// Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +#define __STACK_SIZE 0x00000400 +#define __HEAP_SIZE 0x00010000 +// + + +#endif /* REGIONS_ARMCM0P_H */ diff --git a/tensorflow-test/Target/CM0plus/RTE/Device/ARMCM0P/startup_ARMCM0plus.c b/tensorflow-test/Target/CM0plus/RTE/Device/ARMCM0P/startup_ARMCM0plus.c new file mode 100644 index 0000000..ee32c09 --- /dev/null +++ b/tensorflow-test/Target/CM0plus/RTE/Device/ARMCM0P/startup_ARMCM0plus.c @@ -0,0 +1,146 @@ +/****************************************************************************** + * @file startup_ARMCM0plus.c + * @brief CMSIS-Core(M) Device Startup File for a Cortex-M0+ Device + * @version V3.0.0 + * @date 06. April 2023 + ******************************************************************************/ +/* + * Copyright (c) 2009-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. + */ + +#if defined (ARMCM0P) + #include "ARMCM0plus.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[48]; + const VECTOR_TABLE_Type __VECTOR_TABLE[48] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVCall Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10..31 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_core_init.c b/tensorflow-test/Target/CM0plus/RTE/Device/ARMCM0P/system_ARMCM0plus.c similarity index 62% rename from tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_core_init.c rename to tensorflow-test/Target/CM0plus/RTE/Device/ARMCM0P/system_ARMCM0plus.c index 3f46da1..5f81ef7 100644 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_core_init.c +++ b/tensorflow-test/Target/CM0plus/RTE/Device/ARMCM0P/system_ARMCM0plus.c @@ -1,75 +1,69 @@ -/* - * Copyright (c) 2009-2020 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. - */ - -/* - * This file is derivative of CMSIS V5.6.0 system_ARMv81MML.c - * Git SHA: b5f0603d6a584d1724d952fd8b0737458b90d62b - */ - -#include "cmsis.h" - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ - #define XTAL (32000000UL) - #define SYSTEM_CLOCK (XTAL) - #define PERIPHERAL_CLOCK (25000000UL) - -/*---------------------------------------------------------------------------- - Externals - *----------------------------------------------------------------------------*/ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - extern uint32_t __VECTOR_TABLE; -#endif - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; -uint32_t PeripheralClock = PERIPHERAL_CLOCK; - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; - PeripheralClock = PERIPHERAL_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ - -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t)(&__VECTOR_TABLE); -#endif - -/* CMSIS System Initialization */ -#if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \ - (defined (__MVE_USED) && (__MVE_USED == 1U)) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif -} +/**************************************************************************//** + * @file system_ARMCM0plus.c + * @brief CMSIS Device System Source File for + * ARMCM0plus Device + * @version V2.0.0 + * @date 06. April 2023 + ******************************************************************************/ +/* + * Copyright (c) 2009-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. + */ + +#if defined (ARMCM0P) + #include "ARMCM0plus.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ +extern const VECTOR_TABLE_Type __VECTOR_TABLE[48]; + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test/Target/CM0plus/Target.clayer.yml b/tensorflow-test/Target/CM0plus/Target.clayer.yml new file mode 100644 index 0000000..7637f53 --- /dev/null +++ b/tensorflow-test/Target/CM0plus/Target.clayer.yml @@ -0,0 +1,15 @@ +layer: + type: Target + description: Cortex-M0+ target components and files + + components: + - component: ARM::CMSIS:CORE + - component: Device:Startup&C Startup + + linker: + - regions: ./RTE/Device/ARMCM0P/regions_ARMCM0P.h + + groups: + - group: FVP + files: + - file: ./fvp_config.txt diff --git a/tensorflow-test/Target/CM0plus/fvp_config.txt b/tensorflow-test/Target/CM0plus/fvp_config.txt new file mode 100644 index 0000000..96e7c90 --- /dev/null +++ b/tensorflow-test/Target/CM0plus/fvp_config.txt @@ -0,0 +1,6 @@ +# Parameters: +# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] +#---------------------------------------------------------------------------------------------- +fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation +fvp_mps2.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected +#---------------------------------------------------------------------------------------------- diff --git a/tensorflow-test/Target/CM23/RTE/Device/ARMCM23/regions_ARMCM23.h b/tensorflow-test/Target/CM23/RTE/Device/ARMCM23/regions_ARMCM23.h new file mode 100644 index 0000000..4007534 --- /dev/null +++ b/tensorflow-test/Target/CM23/RTE/Device/ARMCM23/regions_ARMCM23.h @@ -0,0 +1,94 @@ +#ifndef REGIONS_ARMCM23_H +#define REGIONS_ARMCM23_H + + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- + +// Device pack: ARM.CMSIS_DFP.0.0.0 +// Device pack used to generate this file + +// ROM Configuration +// ======================= +// ROM_S=<__ROM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00000000 +#define __ROM0_BASE 0x10000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00200000 +#define __ROM0_SIZE 0x00200000 +// Default region +// Enables memory region globally for the application. +#define __ROM0_DEFAULT 1 +// Startup +// Selects region to be used for startup code. +#define __ROM0_STARTUP 1 +// + +// ROM_NS=<__ROM1> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00200000 +#define __ROM1_BASE 0x00200000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00200000 +#define __ROM1_SIZE 0x00200000 +// Default region +// Enables memory region globally for the application. +#define __ROM1_DEFAULT 0 +// Startup +// Selects region to be used for startup code. +#define __ROM1_STARTUP 0 +// + +// + +// RAM Configuration +// ======================= +// RAM_S=<__RAM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20000000 +#define __RAM0_BASE 0x30000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM0_SIZE 0x00200000 +// Default region +// Enables memory region globally for the application. +#define __RAM0_DEFAULT 1 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM0_NOINIT 0 +// + +// RAM_NS=<__RAM1> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20200000 +#define __RAM1_BASE 0x20200000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM1_SIZE 0x00200000 +// Default region +// Enables memory region globally for the application. +#define __RAM1_DEFAULT 0 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM1_NOINIT 0 +// + +// + +// Stack / Heap Configuration +// Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +// Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +#define __STACK_SIZE 0x00000400 +#define __HEAP_SIZE 0x00010000 +// + + +#endif /* REGIONS_ARMCM23_H */ diff --git a/tensorflow-test/Target/CM23/RTE/Device/ARMCM23/startup_ARMCM23.c b/tensorflow-test/Target/CM23/RTE/Device/ARMCM23/startup_ARMCM23.c new file mode 100644 index 0000000..3a58aab --- /dev/null +++ b/tensorflow-test/Target/CM23/RTE/Device/ARMCM23/startup_ARMCM23.c @@ -0,0 +1,159 @@ +/****************************************************************************** + * @file startup_ARMCM23.c + * @brief CMSIS-Core Device Startup File for a Cortex-M23 Device + * @version V3.0.0 + * @date 06. April 2023 + ******************************************************************************/ +/* + * Copyright (c) 2009-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. + */ + +#if defined (ARMCM23) + #include "ARMCM23.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; +extern uint32_t __STACK_LIMIT; +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +extern uint32_t __STACK_SEAL; +#endif + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[240]; + const VECTOR_TABLE_Type __VECTOR_TABLE[240] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVCall Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10 .. 223 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + __set_PSP((uint32_t)(&__INITIAL_SP)); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); + __set_PSPLIM((uint32_t)(&__STACK_LIMIT)); + + __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL)); +#endif + + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_core_init.c b/tensorflow-test/Target/CM23/RTE/Device/ARMCM23/system_ARMCM23.c similarity index 59% rename from tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_core_init.c rename to tensorflow-test/Target/CM23/RTE/Device/ARMCM23/system_ARMCM23.c index 3f46da1..6db5585 100644 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_core_init.c +++ b/tensorflow-test/Target/CM23/RTE/Device/ARMCM23/system_ARMCM23.c @@ -1,75 +1,77 @@ -/* - * Copyright (c) 2009-2020 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. - */ - -/* - * This file is derivative of CMSIS V5.6.0 system_ARMv81MML.c - * Git SHA: b5f0603d6a584d1724d952fd8b0737458b90d62b - */ - -#include "cmsis.h" - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ - #define XTAL (32000000UL) - #define SYSTEM_CLOCK (XTAL) - #define PERIPHERAL_CLOCK (25000000UL) - -/*---------------------------------------------------------------------------- - Externals - *----------------------------------------------------------------------------*/ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - extern uint32_t __VECTOR_TABLE; -#endif - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; -uint32_t PeripheralClock = PERIPHERAL_CLOCK; - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; - PeripheralClock = PERIPHERAL_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ - -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t)(&__VECTOR_TABLE); -#endif - -/* CMSIS System Initialization */ -#if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \ - (defined (__MVE_USED) && (__MVE_USED == 1U)) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif -} +/**************************************************************************//** + * @file system_ARMCM23.c + * @brief CMSIS Device System Source File for + * ARMCM23 Device + * @version V2.0.0 + * @date 06. April 2023 + ******************************************************************************/ +/* + * Copyright (c) 2009-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. + */ + +#if defined (ARMCM23) + #include "ARMCM23.h" + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #include "partition_ARMCM23.h" + #endif +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ +extern const VECTOR_TABLE_Type __VECTOR_TABLE[240]; + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); +#endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + TZ_SAU_Setup(); +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test/Target/CM23/Target.clayer.yml b/tensorflow-test/Target/CM23/Target.clayer.yml new file mode 100644 index 0000000..cbdfa80 --- /dev/null +++ b/tensorflow-test/Target/CM23/Target.clayer.yml @@ -0,0 +1,15 @@ +layer: + type: Target + description: Cortex-M23 target components and files + + components: + - component: ARM::CMSIS:CORE + - component: Device:Startup&C Startup + + linker: + - regions: ./RTE/Device/ARMCM23/regions_ARMCM23.h + + groups: + - group: FVP + files: + - file: ./fvp_config.txt diff --git a/tensorflow-test/Target/CM23/fvp_config.txt b/tensorflow-test/Target/CM23/fvp_config.txt new file mode 100644 index 0000000..076d14d --- /dev/null +++ b/tensorflow-test/Target/CM23/fvp_config.txt @@ -0,0 +1,7 @@ +# Parameters: +# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] +#---------------------------------------------------------------------------------------------- +fvp_mps2.DISABLE_GATING=1 # (bool , init-time) default = '0' : Disable Memory gating logic +fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation +fvp_mps2.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected +#---------------------------------------------------------------------------------------------- diff --git a/tensorflow-test/Target/CM3/RTE/Device/ARMCM3/regions_ARMCM3.h b/tensorflow-test/Target/CM3/RTE/Device/ARMCM3/regions_ARMCM3.h new file mode 100644 index 0000000..0a40c16 --- /dev/null +++ b/tensorflow-test/Target/CM3/RTE/Device/ARMCM3/regions_ARMCM3.h @@ -0,0 +1,60 @@ +#ifndef REGIONS_ARMCM3_H +#define REGIONS_ARMCM3_H + + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- + +// Device pack: ARM.CMSIS_DFP.0.0.0 +// Device pack used to generate this file + +// ROM Configuration +// ======================= +// ROM=<__ROM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00000000 +#define __ROM0_BASE 0x00000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00040000 +#define __ROM0_SIZE 0x00400000 +// Default region +// Enables memory region globally for the application. +#define __ROM0_DEFAULT 1 +// Startup +// Selects region to be used for startup code. +#define __ROM0_STARTUP 1 +// + +// + +// RAM Configuration +// ======================= +// RAM=<__RAM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20000000 +#define __RAM0_BASE 0x20000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM0_SIZE 0x00400000 +// Default region +// Enables memory region globally for the application. +#define __RAM0_DEFAULT 1 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM0_NOINIT 0 +// + +// + +// Stack / Heap Configuration +// Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +// Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +#define __STACK_SIZE 0x00000400 +#define __HEAP_SIZE 0x00010000 +// + + +#endif /* REGIONS_ARMCM3_H */ diff --git a/tensorflow-test/Target/CM3/RTE/Device/ARMCM3/startup_ARMCM3.c b/tensorflow-test/Target/CM3/RTE/Device/ARMCM3/startup_ARMCM3.c new file mode 100644 index 0000000..e0b7524 --- /dev/null +++ b/tensorflow-test/Target/CM3/RTE/Device/ARMCM3/startup_ARMCM3.c @@ -0,0 +1,150 @@ +/****************************************************************************** + * @file startup_ARMCM3.c + * @brief CMSIS-Core(M) Device Startup File for a Cortex-M3 Device + * @version V2.0.3 + * @date 31. March 2020 + ******************************************************************************/ +/* + * Copyright (c) 2009-2020 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. + */ + +#if defined (ARMCM3) + #include "ARMCM3.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[240]; + const VECTOR_TABLE_Type __VECTOR_TABLE[240] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + MemManage_Handler, /* -12 MPU Fault Handler */ + BusFault_Handler, /* -11 Bus Fault Handler */ + UsageFault_Handler, /* -10 Usage Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVC Handler */ + DebugMon_Handler, /* -4 Debug Monitor Handler */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10 .. 223 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_core_init.c b/tensorflow-test/Target/CM3/RTE/Device/ARMCM3/system_ARMCM3.c similarity index 61% rename from tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_core_init.c rename to tensorflow-test/Target/CM3/RTE/Device/ARMCM3/system_ARMCM3.c index 3f46da1..1948453 100644 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_core_init.c +++ b/tensorflow-test/Target/CM3/RTE/Device/ARMCM3/system_ARMCM3.c @@ -1,75 +1,65 @@ -/* - * Copyright (c) 2009-2020 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. - */ - -/* - * This file is derivative of CMSIS V5.6.0 system_ARMv81MML.c - * Git SHA: b5f0603d6a584d1724d952fd8b0737458b90d62b - */ - -#include "cmsis.h" - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ - #define XTAL (32000000UL) - #define SYSTEM_CLOCK (XTAL) - #define PERIPHERAL_CLOCK (25000000UL) - -/*---------------------------------------------------------------------------- - Externals - *----------------------------------------------------------------------------*/ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - extern uint32_t __VECTOR_TABLE; -#endif - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; -uint32_t PeripheralClock = PERIPHERAL_CLOCK; - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; - PeripheralClock = PERIPHERAL_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ - -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t)(&__VECTOR_TABLE); -#endif - -/* CMSIS System Initialization */ -#if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \ - (defined (__MVE_USED) && (__MVE_USED == 1U)) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif -} +/**************************************************************************//** + * @file system_ARMCM3.c + * @brief CMSIS Device System Source File for + * ARMCM3 Device + * @version V1.0.1 + * @date 15. November 2019 + ******************************************************************************/ +/* + * Copyright (c) 2009-2019 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. + */ + +#include "ARMCM3.h" + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ +extern const VECTOR_TABLE_Type __VECTOR_TABLE[240]; + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test/Target/CM3/Target.clayer.yml b/tensorflow-test/Target/CM3/Target.clayer.yml new file mode 100644 index 0000000..7dec29a --- /dev/null +++ b/tensorflow-test/Target/CM3/Target.clayer.yml @@ -0,0 +1,15 @@ +layer: + type: Target + description: Cortex-M3 target components and files + + components: + - component: ARM::CMSIS:CORE + - component: Device:Startup&C Startup + + linker: + - regions: ./RTE/Device/ARMCM3/regions_ARMCM3.h + + groups: + - group: FVP + files: + - file: ./fvp_config.txt diff --git a/tensorflow-test/Target/CM3/fvp_config.txt b/tensorflow-test/Target/CM3/fvp_config.txt new file mode 100644 index 0000000..96e7c90 --- /dev/null +++ b/tensorflow-test/Target/CM3/fvp_config.txt @@ -0,0 +1,6 @@ +# Parameters: +# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] +#---------------------------------------------------------------------------------------------- +fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation +fvp_mps2.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected +#---------------------------------------------------------------------------------------------- diff --git a/tensorflow-test/Target/CM33/RTE/Device/ARMCM33/regions_ARMCM33.h b/tensorflow-test/Target/CM33/RTE/Device/ARMCM33/regions_ARMCM33.h new file mode 100644 index 0000000..347e13e --- /dev/null +++ b/tensorflow-test/Target/CM33/RTE/Device/ARMCM33/regions_ARMCM33.h @@ -0,0 +1,94 @@ +#ifndef REGIONS_ARMCM33_H +#define REGIONS_ARMCM33_H + + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- + +// Device pack: ARM.CMSIS_DFP.0.0.0 +// Device pack used to generate this file + +// ROM Configuration +// ======================= +// ROM_S=<__ROM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00000000 +#define __ROM0_BASE 0x10000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00200000 +#define __ROM0_SIZE 0x00200000 +// Default region +// Enables memory region globally for the application. +#define __ROM0_DEFAULT 1 +// Startup +// Selects region to be used for startup code. +#define __ROM0_STARTUP 1 +// + +// ROM_NS=<__ROM1> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00200000 +#define __ROM1_BASE 0x00200000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00200000 +#define __ROM1_SIZE 0x00200000 +// Default region +// Enables memory region globally for the application. +#define __ROM1_DEFAULT 0 +// Startup +// Selects region to be used for startup code. +#define __ROM1_STARTUP 0 +// + +// + +// RAM Configuration +// ======================= +// RAM_S=<__RAM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20000000 +#define __RAM0_BASE 0x30000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM0_SIZE 0x00200000 +// Default region +// Enables memory region globally for the application. +#define __RAM0_DEFAULT 1 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM0_NOINIT 0 +// + +// RAM_NS=<__RAM1> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20200000 +#define __RAM1_BASE 0x20200000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM1_SIZE 0x00200000 +// Default region +// Enables memory region globally for the application. +#define __RAM1_DEFAULT 0 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM1_NOINIT 0 +// + +// + +// Stack / Heap Configuration +// Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +// Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +#define __STACK_SIZE 0x00000400 +#define __HEAP_SIZE 0x00010000 +// + + +#endif /* REGIONS_ARMCM33_H */ diff --git a/tensorflow-test/Target/CM33/RTE/Device/ARMCM33/startup_ARMCM33.c b/tensorflow-test/Target/CM33/RTE/Device/ARMCM33/startup_ARMCM33.c new file mode 100644 index 0000000..9f498ef --- /dev/null +++ b/tensorflow-test/Target/CM33/RTE/Device/ARMCM33/startup_ARMCM33.c @@ -0,0 +1,164 @@ +/****************************************************************************** + * @file startup_ARMCM33.c + * @brief CMSIS-Core Device Startup File for Cortex-M33 Device + * @version V3.0.0 + * @date 06. April 2023 + ******************************************************************************/ +/* + * Copyright (c) 2009-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. + */ + +#if defined (ARMCM33) + #include "ARMCM33.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; +extern uint32_t __STACK_LIMIT; +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +extern uint32_t __STACK_SEAL; +#endif + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SecureFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + const VECTOR_TABLE_Type __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + MemManage_Handler, /* -12 MPU Fault Handler */ + BusFault_Handler, /* -11 Bus Fault Handler */ + UsageFault_Handler, /* -10 Usage Fault Handler */ + SecureFault_Handler, /* -9 Secure Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVCall Handler */ + DebugMon_Handler, /* -4 Debug Monitor Handler */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10 .. 480 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + __set_PSP((uint32_t)(&__INITIAL_SP)); + + __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); + __set_PSPLIM((uint32_t)(&__STACK_LIMIT)); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL)); +#endif + + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c b/tensorflow-test/Target/CM33/RTE/Device/ARMCM33/system_ARMCM33.c similarity index 55% rename from tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c rename to tensorflow-test/Target/CM33/RTE/Device/ARMCM33/system_ARMCM33.c index 1d8c3b6..faebac6 100644 --- a/tensorflow-test-ng/Layer/Target/CM55_VHT_AC6/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c +++ b/tensorflow-test/Target/CM33/RTE/Device/ARMCM33/system_ARMCM33.c @@ -1,86 +1,86 @@ -/* - * Copyright (c) 2009-2022 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. - */ - -/* - * This file is derivative of CMSIS V5.6.0 system_ARMv81MML.c - * Git SHA: b5f0603d6a584d1724d952fd8b0737458b90d62b - */ - -#include "SSE300MPS3.h" - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ - #define XTAL (32000000UL) - #define SYSTEM_CLOCK (XTAL) - #define PERIPHERAL_CLOCK (25000000UL) - -/*---------------------------------------------------------------------------- - Externals - *----------------------------------------------------------------------------*/ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - extern uint32_t __VECTOR_TABLE; -#endif - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; -uint32_t PeripheralClock = PERIPHERAL_CLOCK; - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; - PeripheralClock = PERIPHERAL_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ - -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t)(&__VECTOR_TABLE); -#endif - -#if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \ - (defined (__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE >= 1U)) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ - - /* Set CPDLPSTATE.CLPSTATE to 0, so PDCORE will not enter low-power state. Set - * CPDLPSTATE.ELPSTATE to 0, to stop the processor from trying to switch the EPU - * into retention state - */ - PWRMODCTL->CPDLPSTATE &= 0xFFFFFF00UL; -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - - /* Enable Loop and branch info cache */ - SCB->CCR |= SCB_CCR_LOB_Msk; - __DSB(); - __ISB(); - -} +/**************************************************************************//** + * @file system_ARMCM33.c + * @brief CMSIS Device System Source File for + * ARMCM33 Device + * @version V2.0.0 + * @date 06. Aril 2023 + ******************************************************************************/ +/* + * Copyright (c) 2009-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. + */ + +#if defined (ARMCM33) + #include "ARMCM33.h" + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #include "partition_ARMCM33.h" + #endif +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + TZ_SAU_Setup(); +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test/Target/CM33/Target.clayer.yml b/tensorflow-test/Target/CM33/Target.clayer.yml new file mode 100644 index 0000000..cbc6ac3 --- /dev/null +++ b/tensorflow-test/Target/CM33/Target.clayer.yml @@ -0,0 +1,15 @@ +layer: + type: Target + description: Cortex-M33 target components and files + + components: + - component: ARM::CMSIS:CORE + - component: Device:Startup&C Startup + + linker: + - regions: ./RTE/Device/ARMCM33/regions_ARMCM33.h + + groups: + - group: FVP + files: + - file: ./fvp_config.txt diff --git a/tensorflow-test/Target/CM33/fvp_config.txt b/tensorflow-test/Target/CM33/fvp_config.txt new file mode 100644 index 0000000..076d14d --- /dev/null +++ b/tensorflow-test/Target/CM33/fvp_config.txt @@ -0,0 +1,7 @@ +# Parameters: +# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] +#---------------------------------------------------------------------------------------------- +fvp_mps2.DISABLE_GATING=1 # (bool , init-time) default = '0' : Disable Memory gating logic +fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation +fvp_mps2.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected +#---------------------------------------------------------------------------------------------- diff --git a/tensorflow-test/Target/CM4/RTE/Device/ARMCM4/regions_ARMCM4.h b/tensorflow-test/Target/CM4/RTE/Device/ARMCM4/regions_ARMCM4.h new file mode 100644 index 0000000..bade8a3 --- /dev/null +++ b/tensorflow-test/Target/CM4/RTE/Device/ARMCM4/regions_ARMCM4.h @@ -0,0 +1,60 @@ +#ifndef REGIONS_ARMCM4_H +#define REGIONS_ARMCM4_H + + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- + +// Device pack: ARM.CMSIS_DFP.0.0.0 +// Device pack used to generate this file + +// ROM Configuration +// ======================= +// ROM=<__ROM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00000000 +#define __ROM0_BASE 0x00000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00040000 +#define __ROM0_SIZE 0x00400000 +// Default region +// Enables memory region globally for the application. +#define __ROM0_DEFAULT 1 +// Startup +// Selects region to be used for startup code. +#define __ROM0_STARTUP 1 +// + +// + +// RAM Configuration +// ======================= +// RAM=<__RAM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20000000 +#define __RAM0_BASE 0x20000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM0_SIZE 0x00400000 +// Default region +// Enables memory region globally for the application. +#define __RAM0_DEFAULT 1 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM0_NOINIT 0 +// + +// + +// Stack / Heap Configuration +// Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +// Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +#define __STACK_SIZE 0x00000400 +#define __HEAP_SIZE 0x00010000 +// + + +#endif /* REGIONS_ARMCM4_H */ diff --git a/tensorflow-test/Target/CM4/RTE/Device/ARMCM4/startup_ARMCM4.c b/tensorflow-test/Target/CM4/RTE/Device/ARMCM4/startup_ARMCM4.c new file mode 100644 index 0000000..26f22d1 --- /dev/null +++ b/tensorflow-test/Target/CM4/RTE/Device/ARMCM4/startup_ARMCM4.c @@ -0,0 +1,150 @@ +/****************************************************************************** + * @file startup_ARMCM4.c + * @brief CMSIS-Core(M) Device Startup File for a Cortex-M4 Device + * @version V3.0.0 + * @date 06. April 2023 + ******************************************************************************/ +/* + * Copyright (c) 2009-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. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[240]; + const VECTOR_TABLE_Type __VECTOR_TABLE[240] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + MemManage_Handler, /* -12 MPU Fault Handler */ + BusFault_Handler, /* -11 Bus Fault Handler */ + UsageFault_Handler, /* -10 Usage Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVC Handler */ + DebugMon_Handler, /* -4 Debug Monitor Handler */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10 .. 223 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c b/tensorflow-test/Target/CM4/RTE/Device/ARMCM4/system_ARMCM4.c similarity index 66% rename from tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c rename to tensorflow-test/Target/CM4/RTE/Device/ARMCM4/system_ARMCM4.c index a0a2fb0..612bd5c 100644 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c +++ b/tensorflow-test/Target/CM4/RTE/Device/ARMCM4/system_ARMCM4.c @@ -1,79 +1,79 @@ -/* - * Copyright (c) 2009-2020 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. - */ - -/* - * This file is derivative of CMSIS V5.6.0 system_ARMv81MML.c - * Git SHA: b5f0603d6a584d1724d952fd8b0737458b90d62b - */ - -#include "SSE300MPS3.h" - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ - #define XTAL (32000000UL) - #define SYSTEM_CLOCK (XTAL) - #define PERIPHERAL_CLOCK (25000000UL) - -/*---------------------------------------------------------------------------- - Externals - *----------------------------------------------------------------------------*/ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - extern uint32_t __VECTOR_TABLE; -#endif - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; -uint32_t PeripheralClock = PERIPHERAL_CLOCK; - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; - PeripheralClock = PERIPHERAL_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ - -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t)(&__VECTOR_TABLE); -#endif - -/* CMSIS System Initialization */ -#if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \ - (defined (__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE > 1U)) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - -/* Enable Loop and branch info cache */ - SCB->CCR |= SCB_CCR_LOB_Msk; - __ISB(); -} +/**************************************************************************//** + * @file system_ARMCM4.c + * @brief CMSIS Device System Source File for + * ARMCM4 Device + * @version V2.0.0 + * @date 06. April 2023 + ******************************************************************************/ +/* + * Copyright (c) 2009-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. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ +extern const VECTOR_TABLE_Type __VECTOR_TABLE[240]; + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test/Target/CM4/Target.clayer.yml b/tensorflow-test/Target/CM4/Target.clayer.yml new file mode 100644 index 0000000..7c6ca41 --- /dev/null +++ b/tensorflow-test/Target/CM4/Target.clayer.yml @@ -0,0 +1,15 @@ +layer: + type: Target + description: Cortex-M4 target components and files + + components: + - component: ARM::CMSIS:CORE + - component: Device:Startup&C Startup + + linker: + - regions: ./RTE/Device/ARMCM4/regions_ARMCM4.h + + groups: + - group: FVP + files: + - file: ./fvp_config.txt diff --git a/tensorflow-test/Target/CM4/fvp_config.txt b/tensorflow-test/Target/CM4/fvp_config.txt new file mode 100644 index 0000000..7dc428d --- /dev/null +++ b/tensorflow-test/Target/CM4/fvp_config.txt @@ -0,0 +1,7 @@ +# Parameters: +# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] +#---------------------------------------------------------------------------------------------- +armcortexm4ct.vfp-present=0 # (bool , init-time) default = '1' : Set whether the model has VFP support +fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation +fvp_mps2.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected +#---------------------------------------------------------------------------------------------- diff --git a/tensorflow-test/Target/CM4_FP/RTE/Device/ARMCM4/regions_ARMCM4.h b/tensorflow-test/Target/CM4_FP/RTE/Device/ARMCM4/regions_ARMCM4.h new file mode 100644 index 0000000..bade8a3 --- /dev/null +++ b/tensorflow-test/Target/CM4_FP/RTE/Device/ARMCM4/regions_ARMCM4.h @@ -0,0 +1,60 @@ +#ifndef REGIONS_ARMCM4_H +#define REGIONS_ARMCM4_H + + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- + +// Device pack: ARM.CMSIS_DFP.0.0.0 +// Device pack used to generate this file + +// ROM Configuration +// ======================= +// ROM=<__ROM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00000000 +#define __ROM0_BASE 0x00000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00040000 +#define __ROM0_SIZE 0x00400000 +// Default region +// Enables memory region globally for the application. +#define __ROM0_DEFAULT 1 +// Startup +// Selects region to be used for startup code. +#define __ROM0_STARTUP 1 +// + +// + +// RAM Configuration +// ======================= +// RAM=<__RAM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20000000 +#define __RAM0_BASE 0x20000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM0_SIZE 0x00400000 +// Default region +// Enables memory region globally for the application. +#define __RAM0_DEFAULT 1 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM0_NOINIT 0 +// + +// + +// Stack / Heap Configuration +// Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +// Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +#define __STACK_SIZE 0x00000400 +#define __HEAP_SIZE 0x00010000 +// + + +#endif /* REGIONS_ARMCM4_H */ diff --git a/tensorflow-test/Target/CM4_FP/RTE/Device/ARMCM4/startup_ARMCM4.c b/tensorflow-test/Target/CM4_FP/RTE/Device/ARMCM4/startup_ARMCM4.c new file mode 100644 index 0000000..26f22d1 --- /dev/null +++ b/tensorflow-test/Target/CM4_FP/RTE/Device/ARMCM4/startup_ARMCM4.c @@ -0,0 +1,150 @@ +/****************************************************************************** + * @file startup_ARMCM4.c + * @brief CMSIS-Core(M) Device Startup File for a Cortex-M4 Device + * @version V3.0.0 + * @date 06. April 2023 + ******************************************************************************/ +/* + * Copyright (c) 2009-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. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[240]; + const VECTOR_TABLE_Type __VECTOR_TABLE[240] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + MemManage_Handler, /* -12 MPU Fault Handler */ + BusFault_Handler, /* -11 Bus Fault Handler */ + UsageFault_Handler, /* -10 Usage Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVC Handler */ + DebugMon_Handler, /* -4 Debug Monitor Handler */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10 .. 223 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c b/tensorflow-test/Target/CM4_FP/RTE/Device/ARMCM4/system_ARMCM4.c similarity index 66% rename from tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c rename to tensorflow-test/Target/CM4_FP/RTE/Device/ARMCM4/system_ARMCM4.c index a0a2fb0..612bd5c 100644 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c +++ b/tensorflow-test/Target/CM4_FP/RTE/Device/ARMCM4/system_ARMCM4.c @@ -1,79 +1,79 @@ -/* - * Copyright (c) 2009-2020 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. - */ - -/* - * This file is derivative of CMSIS V5.6.0 system_ARMv81MML.c - * Git SHA: b5f0603d6a584d1724d952fd8b0737458b90d62b - */ - -#include "SSE300MPS3.h" - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ - #define XTAL (32000000UL) - #define SYSTEM_CLOCK (XTAL) - #define PERIPHERAL_CLOCK (25000000UL) - -/*---------------------------------------------------------------------------- - Externals - *----------------------------------------------------------------------------*/ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - extern uint32_t __VECTOR_TABLE; -#endif - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; -uint32_t PeripheralClock = PERIPHERAL_CLOCK; - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; - PeripheralClock = PERIPHERAL_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ - -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t)(&__VECTOR_TABLE); -#endif - -/* CMSIS System Initialization */ -#if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \ - (defined (__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE > 1U)) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - -/* Enable Loop and branch info cache */ - SCB->CCR |= SCB_CCR_LOB_Msk; - __ISB(); -} +/**************************************************************************//** + * @file system_ARMCM4.c + * @brief CMSIS Device System Source File for + * ARMCM4 Device + * @version V2.0.0 + * @date 06. April 2023 + ******************************************************************************/ +/* + * Copyright (c) 2009-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. + */ + +#if defined (ARMCM4) + #include "ARMCM4.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ +extern const VECTOR_TABLE_Type __VECTOR_TABLE[240]; + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test/Target/CM4_FP/Target.clayer.yml b/tensorflow-test/Target/CM4_FP/Target.clayer.yml new file mode 100644 index 0000000..2c62414 --- /dev/null +++ b/tensorflow-test/Target/CM4_FP/Target.clayer.yml @@ -0,0 +1,15 @@ +layer: + type: Target + description: Cortex-M4 with FPU target components and files + + components: + - component: ARM::CMSIS:CORE + - component: Device:Startup&C Startup + + linker: + - regions: ./RTE/Device/ARMCM4/regions_ARMCM4.h + + groups: + - group: FVP + files: + - file: ./fvp_config.txt diff --git a/tensorflow-test/Target/CM4_FP/fvp_config.txt b/tensorflow-test/Target/CM4_FP/fvp_config.txt new file mode 100644 index 0000000..fac1a65 --- /dev/null +++ b/tensorflow-test/Target/CM4_FP/fvp_config.txt @@ -0,0 +1,7 @@ +# Parameters: +# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] +#---------------------------------------------------------------------------------------------- +armcortexm4ct.vfp-present=1 # (bool , init-time) default = '1' : Set whether the model has VFP support +fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation +fvp_mps2.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected +#---------------------------------------------------------------------------------------------- diff --git a/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/ARMCM55_ac6.sct b/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/ARMCM55_ac6.sct new file mode 100644 index 0000000..6f84bd3 --- /dev/null +++ b/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/ARMCM55_ac6.sct @@ -0,0 +1,123 @@ +#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m55 -xc +; command above MUST be in first line (no comment above!) + +;Note: Add '-mcmse' to first line if your software model is "Secure Mode". +; #! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m55 -xc -mcmse + + +/* +;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------- +*/ + +/*--------------------- Flash Configuration ---------------------------------- +; Flash Configuration +; Flash Base Address <0x0-0xFFFFFFFF:8> +; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + *----------------------------------------------------------------------------*/ +#define __ROM_BASE 0x00000000 +#define __ROM_SIZE 0x00080000 + +/*--------------------- Embedded RAM Configuration --------------------------- +; RAM Configuration +; RAM Base Address <0x0-0xFFFFFFFF:8> +; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + *----------------------------------------------------------------------------*/ +#define __RAM_BASE 0x20000000 +#define __RAM_SIZE 0x00040000 + +/*--------------------- Stack / Heap Configuration --------------------------- +; 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 + +/*--------------------- CMSE Veneer Configuration --------------------------- +; CMSE Veneer Configuration +; CMSE Veneer Size (in Bytes) <0x0-0xFFFFFFFF:32> +; + *----------------------------------------------------------------------------*/ +#define __CMSEVENEER_SIZE 0x200 + +/* +;------------- <<< end of configuration section >>> --------------------------- +*/ + + +/*---------------------------------------------------------------------------- + User Stack & Heap boundary definition + *----------------------------------------------------------------------------*/ +#define __STACK_TOP (__RAM_BASE + __RAM_SIZE - __STACKSEAL_SIZE) /* starts at end of RAM - 8 byte stack seal */ +#define __HEAP_BASE (AlignExpr(+0, 8)) /* starts after RW_RAM section, 8 byte aligned */ + +/* ---------------------------------------------------------------------------- + Stack seal size definition + *----------------------------------------------------------------------------*/ +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define __STACKSEAL_SIZE ( 8 ) +#else +#define __STACKSEAL_SIZE ( 0 ) +#endif + + +/*---------------------------------------------------------------------------- + Region base & size definition + *----------------------------------------------------------------------------*/ +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define __CV_BASE ( __ROM_BASE + __ROM_SIZE - __CMSEVENEER_SIZE ) +#define __CV_SIZE ( __CMSEVENEER_SIZE ) +#else +#define __CV_SIZE ( 0 ) +#endif + +#define __RO_BASE ( __ROM_BASE ) +#define __RO_SIZE ( __ROM_SIZE - __CV_SIZE ) + +#define __RW_BASE ( __RAM_BASE ) +#define __RW_SIZE (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE - __STACKSEAL_SIZE ) + + +/*---------------------------------------------------------------------------- + Scatter Region definition + *----------------------------------------------------------------------------*/ +LR_ROM __RO_BASE __RO_SIZE { ; load region size_region + ER_ROM __RO_BASE __RO_SIZE { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + .ANY (+XO) + } + + RW_NOINIT __RW_BASE UNINIT __RW_SIZE { + *(.bss.noinit) + } + + RW_RAM AlignExpr(+0, 8) (__RW_SIZE - AlignExpr(ImageLength(RW_NOINIT), 8)) { + *(+RW +ZI) + } + +#if __HEAP_SIZE > 0 + ARM_LIB_HEAP __HEAP_BASE EMPTY __HEAP_SIZE { ; Reserve empty region for heap + } +#endif + + ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE { ; Reserve empty region for stack + } + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + STACKSEAL +0 EMPTY __STACKSEAL_SIZE { ; Reserve empty region for stack seal immediately after stack + } +#endif +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +LR_CMSE_VENEER __CV_BASE ALIGN 32 __CV_SIZE { ; own load/execution region for CMSE Veneers + ER_CMSE_VENEER __CV_BASE __CV_SIZE { + *(Veneer$$CMSE) + } +} +#endif diff --git a/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/ARMCM55_ac6.sct.base@1.1.0 b/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/ARMCM55_ac6.sct.base@1.1.0 new file mode 100644 index 0000000..6f84bd3 --- /dev/null +++ b/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/ARMCM55_ac6.sct.base@1.1.0 @@ -0,0 +1,123 @@ +#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m55 -xc +; command above MUST be in first line (no comment above!) + +;Note: Add '-mcmse' to first line if your software model is "Secure Mode". +; #! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m55 -xc -mcmse + + +/* +;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------- +*/ + +/*--------------------- Flash Configuration ---------------------------------- +; Flash Configuration +; Flash Base Address <0x0-0xFFFFFFFF:8> +; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + *----------------------------------------------------------------------------*/ +#define __ROM_BASE 0x00000000 +#define __ROM_SIZE 0x00080000 + +/*--------------------- Embedded RAM Configuration --------------------------- +; RAM Configuration +; RAM Base Address <0x0-0xFFFFFFFF:8> +; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + *----------------------------------------------------------------------------*/ +#define __RAM_BASE 0x20000000 +#define __RAM_SIZE 0x00040000 + +/*--------------------- Stack / Heap Configuration --------------------------- +; 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 + +/*--------------------- CMSE Veneer Configuration --------------------------- +; CMSE Veneer Configuration +; CMSE Veneer Size (in Bytes) <0x0-0xFFFFFFFF:32> +; + *----------------------------------------------------------------------------*/ +#define __CMSEVENEER_SIZE 0x200 + +/* +;------------- <<< end of configuration section >>> --------------------------- +*/ + + +/*---------------------------------------------------------------------------- + User Stack & Heap boundary definition + *----------------------------------------------------------------------------*/ +#define __STACK_TOP (__RAM_BASE + __RAM_SIZE - __STACKSEAL_SIZE) /* starts at end of RAM - 8 byte stack seal */ +#define __HEAP_BASE (AlignExpr(+0, 8)) /* starts after RW_RAM section, 8 byte aligned */ + +/* ---------------------------------------------------------------------------- + Stack seal size definition + *----------------------------------------------------------------------------*/ +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define __STACKSEAL_SIZE ( 8 ) +#else +#define __STACKSEAL_SIZE ( 0 ) +#endif + + +/*---------------------------------------------------------------------------- + Region base & size definition + *----------------------------------------------------------------------------*/ +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define __CV_BASE ( __ROM_BASE + __ROM_SIZE - __CMSEVENEER_SIZE ) +#define __CV_SIZE ( __CMSEVENEER_SIZE ) +#else +#define __CV_SIZE ( 0 ) +#endif + +#define __RO_BASE ( __ROM_BASE ) +#define __RO_SIZE ( __ROM_SIZE - __CV_SIZE ) + +#define __RW_BASE ( __RAM_BASE ) +#define __RW_SIZE (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE - __STACKSEAL_SIZE ) + + +/*---------------------------------------------------------------------------- + Scatter Region definition + *----------------------------------------------------------------------------*/ +LR_ROM __RO_BASE __RO_SIZE { ; load region size_region + ER_ROM __RO_BASE __RO_SIZE { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + .ANY (+XO) + } + + RW_NOINIT __RW_BASE UNINIT __RW_SIZE { + *(.bss.noinit) + } + + RW_RAM AlignExpr(+0, 8) (__RW_SIZE - AlignExpr(ImageLength(RW_NOINIT), 8)) { + *(+RW +ZI) + } + +#if __HEAP_SIZE > 0 + ARM_LIB_HEAP __HEAP_BASE EMPTY __HEAP_SIZE { ; Reserve empty region for heap + } +#endif + + ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE { ; Reserve empty region for stack + } + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + STACKSEAL +0 EMPTY __STACKSEAL_SIZE { ; Reserve empty region for stack seal immediately after stack + } +#endif +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +LR_CMSE_VENEER __CV_BASE ALIGN 32 __CV_SIZE { ; own load/execution region for CMSE Veneers + ER_CMSE_VENEER __CV_BASE __CV_SIZE { + *(Veneer$$CMSE) + } +} +#endif diff --git a/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/regions_ARMCM55.h b/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/regions_ARMCM55.h new file mode 100644 index 0000000..2074e04 --- /dev/null +++ b/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/regions_ARMCM55.h @@ -0,0 +1,94 @@ +#ifndef REGIONS_ARMCM55_H +#define REGIONS_ARMCM55_H + + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- + +// Device pack: ARM.CMSIS_DFP.0.0.0 +// Device pack used to generate this file + +// ROM Configuration +// ======================= +// ROM_S=<__ROM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00000000 +#define __ROM0_BASE 0x10000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00200000 +#define __ROM0_SIZE 0x00070000 +// Default region +// Enables memory region globally for the application. +#define __ROM0_DEFAULT 1 +// Startup +// Selects region to be used for startup code. +#define __ROM0_STARTUP 1 +// + +// ROM_NS=<__ROM1> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00200000 +#define __ROM1_BASE 0x00070000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00200000 +#define __ROM1_SIZE 0x00010000 +// Default region +// Enables memory region globally for the application. +#define __ROM1_DEFAULT 0 +// Startup +// Selects region to be used for startup code. +#define __ROM1_STARTUP 0 +// + +// + +// RAM Configuration +// ======================= +// RAM_S=<__RAM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20000000 +#define __RAM0_BASE 0x30000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM0_SIZE 0x00040000 +// Default region +// Enables memory region globally for the application. +#define __RAM0_DEFAULT 1 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM0_NOINIT 0 +// + +// RAM_NS=<__RAM1> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20200000 +#define __RAM1_BASE 0x30040000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM1_SIZE 0x00040000 +// Default region +// Enables memory region globally for the application. +#define __RAM1_DEFAULT 0 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM1_NOINIT 0 +// + +// + +// Stack / Heap Configuration +// Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +// Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +#define __STACK_SIZE 0x00000400 +#define __HEAP_SIZE 0x00010000 +// + + +#endif /* REGIONS_ARMCM55_H */ diff --git a/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/startup_ARMCM55.c b/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/startup_ARMCM55.c new file mode 100644 index 0000000..c5eee5e --- /dev/null +++ b/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/startup_ARMCM55.c @@ -0,0 +1,164 @@ +/****************************************************************************** + * @file startup_ARMCM55.c + * @brief CMSIS-Core Device Startup File for Cortex-M55 Device + * @version V1.1.0 + * @date 16. December 2020 + ******************************************************************************/ +/* + * Copyright (c) 2020 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. + */ + +#if defined (ARMCM55) + #include "ARMCM55.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; +extern uint32_t __STACK_LIMIT; +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +extern uint32_t __STACK_SEAL; +#endif + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SecureFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + const VECTOR_TABLE_Type __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + MemManage_Handler, /* -12 MPU Fault Handler */ + BusFault_Handler, /* -11 Bus Fault Handler */ + UsageFault_Handler, /* -10 Usage Fault Handler */ + SecureFault_Handler, /* -9 Secure Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVC Handler */ + DebugMon_Handler, /* -4 Debug Monitor Handler */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10 .. 480 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + __set_PSP((uint32_t)(&__INITIAL_SP)); + + __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); + __set_PSPLIM((uint32_t)(&__STACK_LIMIT)); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL)); +#endif + + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/startup_ARMCM55.c.base@1.1.0 b/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/startup_ARMCM55.c.base@1.1.0 new file mode 100644 index 0000000..0557c5f --- /dev/null +++ b/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/startup_ARMCM55.c.base@1.1.0 @@ -0,0 +1,164 @@ +/****************************************************************************** + * @file startup_ARMCM55.c + * @brief CMSIS-Core Device Startup File for Cortex-M55 Device + * @version V1.1.0 + * @date 16. December 2020 + ******************************************************************************/ +/* + * Copyright (c) 2020 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. + */ + +#if defined (ARMCM55) + #include "ARMCM55.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; +extern uint32_t __STACK_LIMIT; +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +extern uint32_t __STACK_SEAL; +#endif + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SecureFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + const VECTOR_TABLE_Type __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + MemManage_Handler, /* -12 MPU Fault Handler */ + BusFault_Handler, /* -11 Bus Fault Handler */ + UsageFault_Handler, /* -10 Usage Fault Handler */ + SecureFault_Handler, /* -9 Secure Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVC Handler */ + DebugMon_Handler, /* -4 Debug Monitor Handler */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10 .. 480 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + __set_PSP((uint32_t)(&__INITIAL_SP)); + + __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); + __set_PSPLIM((uint32_t)(&__STACK_LIMIT)); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL)); +#endif + + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/system_ARMCM55.c b/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/system_ARMCM55.c new file mode 100644 index 0000000..283dad3 --- /dev/null +++ b/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/system_ARMCM55.c @@ -0,0 +1,107 @@ +/**************************************************************************//** + * @file system_ARMCM55.c + * @brief CMSIS Device System Source File for + * ARMCM55 Device + * @version V1.1.0 + * @date 28. March 2022 + ******************************************************************************/ +/* + * Copyright (c) 2009-2022 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. + */ + +#if defined (ARMCM55) + #include "ARMCM55.h" +#else + #error device not specified! +#endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #include "partition_ARMCM55.h" +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL ( 5000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (5U * XTAL) + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t)(&__VECTOR_TABLE[0]); +#endif + +#if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \ + (defined (__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE > 0U)) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ + + /* Set low-power state for PDEPU */ + /* 0b00 | ON, PDEPU is not in low-power state */ + /* 0b01 | ON, but the clock is off */ + /* 0b10 | RET(ention) */ + /* 0b11 | OFF */ + + /* Clear ELPSTATE, value is 0b11 on Cold reset */ + PWRMODCTL->CPDLPSTATE &= ~(PWRMODCTL_CPDLPSTATE_ELPSTATE_Msk); + + /* Favor best FP/MVE performance by default, avoid EPU switch-ON delays */ + /* PDEPU ON, Clock OFF */ + PWRMODCTL->CPDLPSTATE |= 0x1 << PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos; +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + /* Enable Loop and branch info cache */ + SCB->CCR |= SCB_CCR_LOB_Msk; + __DSB(); + __ISB(); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + TZ_SAU_Setup(); +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/system_ARMCM55.c.base@1.1.0 b/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/system_ARMCM55.c.base@1.1.0 new file mode 100644 index 0000000..dc329c7 --- /dev/null +++ b/tensorflow-test/Target/CM55/RTE/Device/ARMCM55/system_ARMCM55.c.base@1.1.0 @@ -0,0 +1,107 @@ +/**************************************************************************//** + * @file system_ARMCM55.c + * @brief CMSIS Device System Source File for + * ARMCM55 Device + * @version V1.1.0 + * @date 28. March 2022 + ******************************************************************************/ +/* + * Copyright (c) 2009-2022 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. + */ + +#if defined (ARMCM55) + #include "ARMCM55.h" +#else + #error device not specified! +#endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #include "partition_ARMCM55.h" +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL ( 5000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (5U * XTAL) + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t)(&__VECTOR_TABLE[0]); +#endif + +#if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \ + (defined (__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE > 0U)) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ + + /* Set low-power state for PDEPU */ + /* 0b00 | ON, PDEPU is not in low-power state */ + /* 0b01 | ON, but the clock is off */ + /* 0b10 | RET(ention) */ + /* 0b11 | OFF */ + + /* Clear ELPSTATE, value is 0b11 on Cold reset */ + PWRMODCTL->CPDLPSTATE &= ~(PWRMODCTL_CPDLPSTATE_ELPSTATE_Msk); + + /* Favor best FP/MVE performance by default, avoid EPU switch-ON delays */ + /* PDEPU ON, Clock OFF */ + PWRMODCTL->CPDLPSTATE |= 0x1 << PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos; +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + /* Enable Loop and branch info cache */ + SCB->CCR |= SCB_CCR_LOB_Msk; + __DSB(); + __ISB(); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + TZ_SAU_Setup(); +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test/Target/CM55/Target.clayer.yml b/tensorflow-test/Target/CM55/Target.clayer.yml new file mode 100644 index 0000000..f35490e --- /dev/null +++ b/tensorflow-test/Target/CM55/Target.clayer.yml @@ -0,0 +1,15 @@ +layer: + type: Target + description: Cortex-M55 target components and files + + components: + - component: ARM::CMSIS:CORE + - component: Device:Startup&C Startup + + linker: + - regions: ./RTE/Device/ARMCM55/regions_ARMCM55.h + + groups: + - group: FVP + files: + - file: ./fvp_config.txt diff --git a/tensorflow-test/Target/CM55/fvp_config.txt b/tensorflow-test/Target/CM55/fvp_config.txt new file mode 100644 index 0000000..65a861c --- /dev/null +++ b/tensorflow-test/Target/CM55/fvp_config.txt @@ -0,0 +1,11 @@ +# Parameters: +# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] +#---------------------------------------------------------------------------------------------- +cpu0.semihosting-enable=1 # (bool , init-time) default = '0' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false. +cpu0.semihosting-heap_base=0x3002fc00 # (int , init-time) default = '0x0' : Virtual address of heap base +cpu0.semihosting-heap_limit=0x3003fc00 # (int , init-time) default = '0x20700000' : Virtual address of top of heap +cpu0.semihosting-stack_base=0x30040000 # (int , init-time) default = '0x20800000' : Virtual address of base of descending stack +cpu0.semihosting-stack_limit=0x3003fc00 # (int , init-time) default = '0x20700000' : Virtual address of stack limit +mps3_board.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected +mps3_board.visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation +#---------------------------------------------------------------------------------------------- diff --git a/tensorflow-test/Target/CM55_Ethos/RTE/Device/ARMCM55/regions_ARMCM55.h b/tensorflow-test/Target/CM55_Ethos/RTE/Device/ARMCM55/regions_ARMCM55.h new file mode 100644 index 0000000..2074e04 --- /dev/null +++ b/tensorflow-test/Target/CM55_Ethos/RTE/Device/ARMCM55/regions_ARMCM55.h @@ -0,0 +1,94 @@ +#ifndef REGIONS_ARMCM55_H +#define REGIONS_ARMCM55_H + + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- + +// Device pack: ARM.CMSIS_DFP.0.0.0 +// Device pack used to generate this file + +// ROM Configuration +// ======================= +// ROM_S=<__ROM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00000000 +#define __ROM0_BASE 0x10000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00200000 +#define __ROM0_SIZE 0x00070000 +// Default region +// Enables memory region globally for the application. +#define __ROM0_DEFAULT 1 +// Startup +// Selects region to be used for startup code. +#define __ROM0_STARTUP 1 +// + +// ROM_NS=<__ROM1> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00200000 +#define __ROM1_BASE 0x00070000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00200000 +#define __ROM1_SIZE 0x00010000 +// Default region +// Enables memory region globally for the application. +#define __ROM1_DEFAULT 0 +// Startup +// Selects region to be used for startup code. +#define __ROM1_STARTUP 0 +// + +// + +// RAM Configuration +// ======================= +// RAM_S=<__RAM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20000000 +#define __RAM0_BASE 0x30000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM0_SIZE 0x00040000 +// Default region +// Enables memory region globally for the application. +#define __RAM0_DEFAULT 1 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM0_NOINIT 0 +// + +// RAM_NS=<__RAM1> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20200000 +#define __RAM1_BASE 0x30040000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM1_SIZE 0x00040000 +// Default region +// Enables memory region globally for the application. +#define __RAM1_DEFAULT 0 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM1_NOINIT 0 +// + +// + +// Stack / Heap Configuration +// Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +// Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +#define __STACK_SIZE 0x00000400 +#define __HEAP_SIZE 0x00010000 +// + + +#endif /* REGIONS_ARMCM55_H */ diff --git a/tensorflow-test/Target/CM55_Ethos/RTE/Device/ARMCM55/startup_ARMCM55.c b/tensorflow-test/Target/CM55_Ethos/RTE/Device/ARMCM55/startup_ARMCM55.c new file mode 100644 index 0000000..c5eee5e --- /dev/null +++ b/tensorflow-test/Target/CM55_Ethos/RTE/Device/ARMCM55/startup_ARMCM55.c @@ -0,0 +1,164 @@ +/****************************************************************************** + * @file startup_ARMCM55.c + * @brief CMSIS-Core Device Startup File for Cortex-M55 Device + * @version V1.1.0 + * @date 16. December 2020 + ******************************************************************************/ +/* + * Copyright (c) 2020 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. + */ + +#if defined (ARMCM55) + #include "ARMCM55.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; +extern uint32_t __STACK_LIMIT; +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +extern uint32_t __STACK_SEAL; +#endif + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SecureFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + const VECTOR_TABLE_Type __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + MemManage_Handler, /* -12 MPU Fault Handler */ + BusFault_Handler, /* -11 Bus Fault Handler */ + UsageFault_Handler, /* -10 Usage Fault Handler */ + SecureFault_Handler, /* -9 Secure Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVC Handler */ + DebugMon_Handler, /* -4 Debug Monitor Handler */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10 .. 480 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + __set_PSP((uint32_t)(&__INITIAL_SP)); + + __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); + __set_PSPLIM((uint32_t)(&__STACK_LIMIT)); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL)); +#endif + + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test/Target/CM55_Ethos/RTE/Device/ARMCM55/system_ARMCM55.c b/tensorflow-test/Target/CM55_Ethos/RTE/Device/ARMCM55/system_ARMCM55.c new file mode 100644 index 0000000..283dad3 --- /dev/null +++ b/tensorflow-test/Target/CM55_Ethos/RTE/Device/ARMCM55/system_ARMCM55.c @@ -0,0 +1,107 @@ +/**************************************************************************//** + * @file system_ARMCM55.c + * @brief CMSIS Device System Source File for + * ARMCM55 Device + * @version V1.1.0 + * @date 28. March 2022 + ******************************************************************************/ +/* + * Copyright (c) 2009-2022 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. + */ + +#if defined (ARMCM55) + #include "ARMCM55.h" +#else + #error device not specified! +#endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #include "partition_ARMCM55.h" +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL ( 5000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (5U * XTAL) + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t)(&__VECTOR_TABLE[0]); +#endif + +#if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \ + (defined (__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE > 0U)) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ + + /* Set low-power state for PDEPU */ + /* 0b00 | ON, PDEPU is not in low-power state */ + /* 0b01 | ON, but the clock is off */ + /* 0b10 | RET(ention) */ + /* 0b11 | OFF */ + + /* Clear ELPSTATE, value is 0b11 on Cold reset */ + PWRMODCTL->CPDLPSTATE &= ~(PWRMODCTL_CPDLPSTATE_ELPSTATE_Msk); + + /* Favor best FP/MVE performance by default, avoid EPU switch-ON delays */ + /* PDEPU ON, Clock OFF */ + PWRMODCTL->CPDLPSTATE |= 0x1 << PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos; +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + /* Enable Loop and branch info cache */ + SCB->CCR |= SCB_CCR_LOB_Msk; + __DSB(); + __ISB(); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + TZ_SAU_Setup(); +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test/Target/CM55_Ethos/Target.clayer.yml b/tensorflow-test/Target/CM55_Ethos/Target.clayer.yml new file mode 100644 index 0000000..b42f4be --- /dev/null +++ b/tensorflow-test/Target/CM55_Ethos/Target.clayer.yml @@ -0,0 +1,15 @@ +layer: + type: Target + description: Cortex-M55 with Ethos-U target components and files + + components: + - component: ARM::CMSIS:CORE + - component: Device:Startup&C Startup + + linker: + - regions: ./RTE/Device/ARMCM55/regions_ARMCM55.h + + groups: + - group: FVP + files: + - file: ./fvp_config.txt diff --git a/tensorflow-test/Target/CM55_Ethos/fvp_config.txt b/tensorflow-test/Target/CM55_Ethos/fvp_config.txt new file mode 100644 index 0000000..65a861c --- /dev/null +++ b/tensorflow-test/Target/CM55_Ethos/fvp_config.txt @@ -0,0 +1,11 @@ +# Parameters: +# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] +#---------------------------------------------------------------------------------------------- +cpu0.semihosting-enable=1 # (bool , init-time) default = '0' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false. +cpu0.semihosting-heap_base=0x3002fc00 # (int , init-time) default = '0x0' : Virtual address of heap base +cpu0.semihosting-heap_limit=0x3003fc00 # (int , init-time) default = '0x20700000' : Virtual address of top of heap +cpu0.semihosting-stack_base=0x30040000 # (int , init-time) default = '0x20800000' : Virtual address of base of descending stack +cpu0.semihosting-stack_limit=0x3003fc00 # (int , init-time) default = '0x20700000' : Virtual address of stack limit +mps3_board.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected +mps3_board.visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation +#---------------------------------------------------------------------------------------------- diff --git a/tensorflow-test/Target/CM7/RTE/Device/ARMCM7/regions_ARMCM7.h b/tensorflow-test/Target/CM7/RTE/Device/ARMCM7/regions_ARMCM7.h new file mode 100644 index 0000000..8b2c07e --- /dev/null +++ b/tensorflow-test/Target/CM7/RTE/Device/ARMCM7/regions_ARMCM7.h @@ -0,0 +1,60 @@ +#ifndef REGIONS_ARMCM7_H +#define REGIONS_ARMCM7_H + + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- + +// Device pack: ARM.CMSIS_DFP.0.0.0 +// Device pack used to generate this file + +// ROM Configuration +// ======================= +// ROM=<__ROM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00000000 +#define __ROM0_BASE 0x00000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00040000 +#define __ROM0_SIZE 0x00400000 +// Default region +// Enables memory region globally for the application. +#define __ROM0_DEFAULT 1 +// Startup +// Selects region to be used for startup code. +#define __ROM0_STARTUP 1 +// + +// + +// RAM Configuration +// ======================= +// RAM=<__RAM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20000000 +#define __RAM0_BASE 0x20000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM0_SIZE 0x00400000 +// Default region +// Enables memory region globally for the application. +#define __RAM0_DEFAULT 1 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM0_NOINIT 0 +// + +// + +// Stack / Heap Configuration +// Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +// Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +#define __STACK_SIZE 0x00000400 +#define __HEAP_SIZE 0x00010000 +// + + +#endif /* REGIONS_ARMCM7_H */ diff --git a/tensorflow-test/Target/CM7/RTE/Device/ARMCM7/startup_ARMCM7.c b/tensorflow-test/Target/CM7/RTE/Device/ARMCM7/startup_ARMCM7.c new file mode 100644 index 0000000..8d1c645 --- /dev/null +++ b/tensorflow-test/Target/CM7/RTE/Device/ARMCM7/startup_ARMCM7.c @@ -0,0 +1,150 @@ +/****************************************************************************** + * @file startup_ARMCM7.c + * @brief CMSIS-Core(M) Device Startup File for a Cortex-M7 Device + * @version V3.0.0 + * @date 06. April 2023 + ******************************************************************************/ +/* + * Copyright (c) 2009-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. + */ + +#if defined (ARMCM7) + #include "ARMCM7.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[240]; + const VECTOR_TABLE_Type __VECTOR_TABLE[240] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + MemManage_Handler, /* -12 MPU Fault Handler */ + BusFault_Handler, /* -11 Bus Fault Handler */ + UsageFault_Handler, /* -10 Usage Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVC Handler */ + DebugMon_Handler, /* -4 Debug Monitor Handler */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10 .. 223 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c b/tensorflow-test/Target/CM7/RTE/Device/ARMCM7/system_ARMCM7.c similarity index 66% rename from tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c rename to tensorflow-test/Target/CM7/RTE/Device/ARMCM7/system_ARMCM7.c index a0a2fb0..4642b88 100644 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/system_SSE300MPS3.c +++ b/tensorflow-test/Target/CM7/RTE/Device/ARMCM7/system_ARMCM7.c @@ -1,79 +1,79 @@ -/* - * Copyright (c) 2009-2020 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. - */ - -/* - * This file is derivative of CMSIS V5.6.0 system_ARMv81MML.c - * Git SHA: b5f0603d6a584d1724d952fd8b0737458b90d62b - */ - -#include "SSE300MPS3.h" - -/*---------------------------------------------------------------------------- - Define clocks - *----------------------------------------------------------------------------*/ - #define XTAL (32000000UL) - #define SYSTEM_CLOCK (XTAL) - #define PERIPHERAL_CLOCK (25000000UL) - -/*---------------------------------------------------------------------------- - Externals - *----------------------------------------------------------------------------*/ -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - extern uint32_t __VECTOR_TABLE; -#endif - -/*---------------------------------------------------------------------------- - System Core Clock Variable - *----------------------------------------------------------------------------*/ -uint32_t SystemCoreClock = SYSTEM_CLOCK; -uint32_t PeripheralClock = PERIPHERAL_CLOCK; - -/*---------------------------------------------------------------------------- - System Core Clock update function - *----------------------------------------------------------------------------*/ -void SystemCoreClockUpdate (void) -{ - SystemCoreClock = SYSTEM_CLOCK; - PeripheralClock = PERIPHERAL_CLOCK; -} - -/*---------------------------------------------------------------------------- - System initialization function - *----------------------------------------------------------------------------*/ -void SystemInit (void) -{ - -#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) - SCB->VTOR = (uint32_t)(&__VECTOR_TABLE); -#endif - -/* CMSIS System Initialization */ -#if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \ - (defined (__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE > 1U)) - SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ - (3U << 11U*2U) ); /* enable CP11 Full Access */ -#endif - -#ifdef UNALIGNED_SUPPORT_DISABLE - SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; -#endif - -/* Enable Loop and branch info cache */ - SCB->CCR |= SCB_CCR_LOB_Msk; - __ISB(); -} +/**************************************************************************//** + * @file system_ARMCM7.c + * @brief CMSIS Device System Source File for + * ARMCM7 Device + * @version V2.0.0 + * @date 06. April 2023 + ******************************************************************************/ +/* + * Copyright (c) 2009-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. + */ + +#if defined (ARMCM7) + #include "ARMCM7.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ +extern const VECTOR_TABLE_Type __VECTOR_TABLE[240]; + + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]); +#endif + +#if defined (__FPU_USED) && (__FPU_USED == 1U) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test/Target/CM7/Target.clayer.yml b/tensorflow-test/Target/CM7/Target.clayer.yml new file mode 100644 index 0000000..6882154 --- /dev/null +++ b/tensorflow-test/Target/CM7/Target.clayer.yml @@ -0,0 +1,15 @@ +layer: + type: Target + description: Cortex-M7 target components and files + + components: + - component: ARM::CMSIS:CORE + - component: Device:Startup&C Startup + + linker: + - regions: ./RTE/Device/ARMCM7/regions_ARMCM7.h + + groups: + - group: FVP + files: + - file: ./fvp_config.txt diff --git a/tensorflow-test/Target/CM7/fvp_config.txt b/tensorflow-test/Target/CM7/fvp_config.txt new file mode 100644 index 0000000..96e7c90 --- /dev/null +++ b/tensorflow-test/Target/CM7/fvp_config.txt @@ -0,0 +1,6 @@ +# Parameters: +# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] +#---------------------------------------------------------------------------------------------- +fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation +fvp_mps2.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected +#---------------------------------------------------------------------------------------------- diff --git a/tensorflow-test/Target/CM85/RTE/Device/ARMCM85/regions_ARMCM85.h b/tensorflow-test/Target/CM85/RTE/Device/ARMCM85/regions_ARMCM85.h new file mode 100644 index 0000000..41d8ed5 --- /dev/null +++ b/tensorflow-test/Target/CM85/RTE/Device/ARMCM85/regions_ARMCM85.h @@ -0,0 +1,94 @@ +#ifndef REGIONS_ARMCM85_H +#define REGIONS_ARMCM85_H + + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- + +// Device pack: ARM.CMSIS_DFP.0.0.0 +// Device pack used to generate this file + +// ROM Configuration +// ======================= +// ROM_S=<__ROM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00000000 +#define __ROM0_BASE 0x11000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00200000 +#define __ROM0_SIZE 0x00100000 +// Default region +// Enables memory region globally for the application. +#define __ROM0_DEFAULT 1 +// Startup +// Selects region to be used for startup code. +#define __ROM0_STARTUP 1 +// + +// ROM_NS=<__ROM1> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00200000 +#define __ROM1_BASE 0x01100000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00200000 +#define __ROM1_SIZE 0x00100000 +// Default region +// Enables memory region globally for the application. +#define __ROM1_DEFAULT 0 +// Startup +// Selects region to be used for startup code. +#define __ROM1_STARTUP 0 +// + +// + +// RAM Configuration +// ======================= +// RAM_S=<__RAM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20000000 +#define __RAM0_BASE 0x31000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM0_SIZE 0x00200000 +// Default region +// Enables memory region globally for the application. +#define __RAM0_DEFAULT 1 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM0_NOINIT 0 +// + +// RAM_NS=<__RAM1> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20200000 +#define __RAM1_BASE 0x21200000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM1_SIZE 0x00200000 +// Default region +// Enables memory region globally for the application. +#define __RAM1_DEFAULT 0 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM1_NOINIT 0 +// + +// + +// Stack / Heap Configuration +// Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +// Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +#define __STACK_SIZE 0x00000400 +#define __HEAP_SIZE 0x00010000 +// + + +#endif /* REGIONS_ARMCM85_H */ diff --git a/tensorflow-test/Target/CM85/RTE/Device/ARMCM85/startup_ARMCM85.c b/tensorflow-test/Target/CM85/RTE/Device/ARMCM85/startup_ARMCM85.c new file mode 100644 index 0000000..9ac2cef --- /dev/null +++ b/tensorflow-test/Target/CM85/RTE/Device/ARMCM85/startup_ARMCM85.c @@ -0,0 +1,164 @@ +/****************************************************************************** + * @file startup_ARMCM85.c + * @brief CMSIS Device Startup File for ARMCM85 Device + * @version V1.0.0 + * @date 07. February 2022 + ******************************************************************************/ +/* + * Copyright (c) 2022 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. + */ + +#if defined (ARMCM85) + #include "ARMCM85.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; +extern uint32_t __STACK_LIMIT; +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +extern uint32_t __STACK_SEAL; +#endif + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SecureFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + const VECTOR_TABLE_Type __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + MemManage_Handler, /* -12 MPU Fault Handler */ + BusFault_Handler, /* -11 Bus Fault Handler */ + UsageFault_Handler, /* -10 Usage Fault Handler */ + SecureFault_Handler, /* -9 Secure Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVC Handler */ + DebugMon_Handler, /* -4 Debug Monitor Handler */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10 .. 480 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + __set_PSP((uint32_t)(&__INITIAL_SP)); + + __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); + __set_PSPLIM((uint32_t)(&__STACK_LIMIT)); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL)); +#endif + + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test/Target/CM85/RTE/Device/ARMCM85/system_ARMCM85.c b/tensorflow-test/Target/CM85/RTE/Device/ARMCM85/system_ARMCM85.c new file mode 100644 index 0000000..ba13355 --- /dev/null +++ b/tensorflow-test/Target/CM85/RTE/Device/ARMCM85/system_ARMCM85.c @@ -0,0 +1,106 @@ +/**************************************************************************//** + * @file system_ARMCM85.c + * @brief CMSIS Device System Source File for ARMCM85 Device + * @version V1.0.0 + * @date 30. March 2022 + ******************************************************************************/ +/* + * Copyright (c) 2022 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. + */ + +#if defined (ARMCM85) + #include "ARMCM85.h" + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #include "partition_ARMCM85.h" + #endif +#else + #error device not specified! +#endif + + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t)(&__VECTOR_TABLE[0]); +#endif + + /* Set CPDLPSTATE.RLPSTATE to 0 + Set CPDLPSTATE.ELPSTATE to 0, to stop the processor from trying to switch the EPU into retention state. + Set CPDLPSTATE.CLPSTATE to 0, so PDCORE will not enter low-power state. */ + PWRMODCTL->CPDLPSTATE &= ~(PWRMODCTL_CPDLPSTATE_RLPSTATE_Msk | + PWRMODCTL_CPDLPSTATE_ELPSTATE_Msk | + PWRMODCTL_CPDLPSTATE_CLPSTATE_Msk ); + +#if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \ + (defined (__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE > 0U)) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ + + /* Favor best FP/MVE performance by default, avoid EPU switch-ON delays */ + /* PDEPU ON, Clock OFF */ + PWRMODCTL->CPDLPSTATE |= 0x1 << PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos; +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + /* Enable Loop and branch info cache */ + SCB->CCR |= SCB_CCR_LOB_Msk; + + /* Enable Branch Prediction */ + SCB->CCR |= SCB_CCR_BP_Msk; + + __DSB(); + __ISB(); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + TZ_SAU_Setup(); +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test/Target/CM85/Target.clayer.yml b/tensorflow-test/Target/CM85/Target.clayer.yml new file mode 100644 index 0000000..d52433c --- /dev/null +++ b/tensorflow-test/Target/CM85/Target.clayer.yml @@ -0,0 +1,15 @@ +layer: + type: Target + description: Cortex-M85 target components and files + + components: + - component: ARM::CMSIS:CORE + - component: Device:Startup&C Startup + + linker: + - regions: ./RTE/Device/ARMCM85/regions_ARMCM85.h + + groups: + - group: FVP + files: + - file: ./fvp_config.txt diff --git a/tensorflow-test/Target/CM85/fvp_config.txt b/tensorflow-test/Target/CM85/fvp_config.txt new file mode 100644 index 0000000..350672a --- /dev/null +++ b/tensorflow-test/Target/CM85/fvp_config.txt @@ -0,0 +1,11 @@ +# Parameters: +# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] +#---------------------------------------------------------------------------------------------- +cpu0.semihosting-enable=1 # (bool , init-time) default = '0' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false. +cpu0.semihosting-heap_base=0x311efc00 # (int , init-time) default = '0x0' : Virtual address of heap base +cpu0.semihosting-heap_limit=0x311ffc00 # (int , init-time) default = '0x20700000' : Virtual address of top of heap +cpu0.semihosting-stack_base=0x31200000 # (int , init-time) default = '0x20800000' : Virtual address of base of descending stack +cpu0.semihosting-stack_limit=0x311ffc00 # (int , init-time) default = '0x20700000' : Virtual address of stack limit +mps3_board.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected +mps3_board.visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation +#---------------------------------------------------------------------------------------------- diff --git a/tensorflow-test/Target/CM85_Ethos/RTE/Device/ARMCM85/regions_ARMCM85.h b/tensorflow-test/Target/CM85_Ethos/RTE/Device/ARMCM85/regions_ARMCM85.h new file mode 100644 index 0000000..41d8ed5 --- /dev/null +++ b/tensorflow-test/Target/CM85_Ethos/RTE/Device/ARMCM85/regions_ARMCM85.h @@ -0,0 +1,94 @@ +#ifndef REGIONS_ARMCM85_H +#define REGIONS_ARMCM85_H + + +//-------- <<< Use Configuration Wizard in Context Menu >>> -------------------- + +// Device pack: ARM.CMSIS_DFP.0.0.0 +// Device pack used to generate this file + +// ROM Configuration +// ======================= +// ROM_S=<__ROM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00000000 +#define __ROM0_BASE 0x11000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00200000 +#define __ROM0_SIZE 0x00100000 +// Default region +// Enables memory region globally for the application. +#define __ROM0_DEFAULT 1 +// Startup +// Selects region to be used for startup code. +#define __ROM0_STARTUP 1 +// + +// ROM_NS=<__ROM1> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x00200000 +#define __ROM1_BASE 0x01100000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00200000 +#define __ROM1_SIZE 0x00100000 +// Default region +// Enables memory region globally for the application. +#define __ROM1_DEFAULT 0 +// Startup +// Selects region to be used for startup code. +#define __ROM1_STARTUP 0 +// + +// + +// RAM Configuration +// ======================= +// RAM_S=<__RAM0> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20000000 +#define __RAM0_BASE 0x31000000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM0_SIZE 0x00200000 +// Default region +// Enables memory region globally for the application. +#define __RAM0_DEFAULT 1 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM0_NOINIT 0 +// + +// RAM_NS=<__RAM1> +// Base address <0x0-0xFFFFFFFF:8> +// Defines base address of memory region. +// Default: 0x20200000 +#define __RAM1_BASE 0x21200000 +// Region size [bytes] <0x0-0xFFFFFFFF:8> +// Defines size of memory region. +// Default: 0x00020000 +#define __RAM1_SIZE 0x00200000 +// Default region +// Enables memory region globally for the application. +#define __RAM1_DEFAULT 0 +// No zero initialize +// Excludes region from zero initialization. +#define __RAM1_NOINIT 0 +// + +// + +// Stack / Heap Configuration +// Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +// Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +#define __STACK_SIZE 0x00000400 +#define __HEAP_SIZE 0x00010000 +// + + +#endif /* REGIONS_ARMCM85_H */ diff --git a/tensorflow-test/Target/CM85_Ethos/RTE/Device/ARMCM85/startup_ARMCM85.c b/tensorflow-test/Target/CM85_Ethos/RTE/Device/ARMCM85/startup_ARMCM85.c new file mode 100644 index 0000000..9ac2cef --- /dev/null +++ b/tensorflow-test/Target/CM85_Ethos/RTE/Device/ARMCM85/startup_ARMCM85.c @@ -0,0 +1,164 @@ +/****************************************************************************** + * @file startup_ARMCM85.c + * @brief CMSIS Device Startup File for ARMCM85 Device + * @version V1.0.0 + * @date 07. February 2022 + ******************************************************************************/ +/* + * Copyright (c) 2022 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. + */ + +#if defined (ARMCM85) + #include "ARMCM85.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; +extern uint32_t __STACK_LIMIT; +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +extern uint32_t __STACK_SEAL; +#endif + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void MemManage_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void BusFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SecureFault_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + const VECTOR_TABLE_Type __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + MemManage_Handler, /* -12 MPU Fault Handler */ + BusFault_Handler, /* -11 Bus Fault Handler */ + UsageFault_Handler, /* -10 Usage Fault Handler */ + SecureFault_Handler, /* -9 Secure Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVC Handler */ + DebugMon_Handler, /* -4 Debug Monitor Handler */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10 .. 480 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + __set_PSP((uint32_t)(&__INITIAL_SP)); + + __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); + __set_PSPLIM((uint32_t)(&__STACK_LIMIT)); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL)); +#endif + + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/tensorflow-test/Target/CM85_Ethos/RTE/Device/ARMCM85/system_ARMCM85.c b/tensorflow-test/Target/CM85_Ethos/RTE/Device/ARMCM85/system_ARMCM85.c new file mode 100644 index 0000000..ba13355 --- /dev/null +++ b/tensorflow-test/Target/CM85_Ethos/RTE/Device/ARMCM85/system_ARMCM85.c @@ -0,0 +1,106 @@ +/**************************************************************************//** + * @file system_ARMCM85.c + * @brief CMSIS Device System Source File for ARMCM85 Device + * @version V1.0.0 + * @date 30. March 2022 + ******************************************************************************/ +/* + * Copyright (c) 2022 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. + */ + +#if defined (ARMCM85) + #include "ARMCM85.h" + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #include "partition_ARMCM85.h" + #endif +#else + #error device not specified! +#endif + + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ +#define XTAL (50000000UL) /* Oscillator frequency */ + +#define SYSTEM_CLOCK (XTAL / 2U) + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ +extern const VECTOR_TABLE_Type __VECTOR_TABLE[496]; + +/*---------------------------------------------------------------------------- + System Core Clock Variable + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = SYSTEM_CLOCK; /* System Core Clock Frequency */ + +/*---------------------------------------------------------------------------- + System Core Clock update function + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate (void) +{ + SystemCoreClock = SYSTEM_CLOCK; +} + +/*---------------------------------------------------------------------------- + System initialization function + *----------------------------------------------------------------------------*/ +void SystemInit (void) +{ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + SCB->VTOR = (uint32_t)(&__VECTOR_TABLE[0]); +#endif + + /* Set CPDLPSTATE.RLPSTATE to 0 + Set CPDLPSTATE.ELPSTATE to 0, to stop the processor from trying to switch the EPU into retention state. + Set CPDLPSTATE.CLPSTATE to 0, so PDCORE will not enter low-power state. */ + PWRMODCTL->CPDLPSTATE &= ~(PWRMODCTL_CPDLPSTATE_RLPSTATE_Msk | + PWRMODCTL_CPDLPSTATE_ELPSTATE_Msk | + PWRMODCTL_CPDLPSTATE_CLPSTATE_Msk ); + +#if (defined (__FPU_USED) && (__FPU_USED == 1U)) || \ + (defined (__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE > 0U)) + SCB->CPACR |= ((3U << 10U*2U) | /* enable CP10 Full Access */ + (3U << 11U*2U) ); /* enable CP11 Full Access */ + + /* Favor best FP/MVE performance by default, avoid EPU switch-ON delays */ + /* PDEPU ON, Clock OFF */ + PWRMODCTL->CPDLPSTATE |= 0x1 << PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos; +#endif + +#ifdef UNALIGNED_SUPPORT_DISABLE + SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; +#endif + + /* Enable Loop and branch info cache */ + SCB->CCR |= SCB_CCR_LOB_Msk; + + /* Enable Branch Prediction */ + SCB->CCR |= SCB_CCR_BP_Msk; + + __DSB(); + __ISB(); + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + TZ_SAU_Setup(); +#endif + + SystemCoreClock = SYSTEM_CLOCK; +} diff --git a/tensorflow-test/Target/CM85_Ethos/Target.clayer.yml b/tensorflow-test/Target/CM85_Ethos/Target.clayer.yml new file mode 100644 index 0000000..d805f9d --- /dev/null +++ b/tensorflow-test/Target/CM85_Ethos/Target.clayer.yml @@ -0,0 +1,15 @@ +layer: + type: Target + description: Cortex-M85 with Ethos-U target components and files + + components: + - component: ARM::CMSIS:CORE + - component: Device:Startup&C Startup + + linker: + - regions: ./RTE/Device/ARMCM85/regions_ARMCM85.h + + groups: + - group: FVP + files: + - file: ./fvp_config.txt diff --git a/tensorflow-test/Target/CM85_Ethos/fvp_config.txt b/tensorflow-test/Target/CM85_Ethos/fvp_config.txt new file mode 100644 index 0000000..350672a --- /dev/null +++ b/tensorflow-test/Target/CM85_Ethos/fvp_config.txt @@ -0,0 +1,11 @@ +# Parameters: +# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] +#---------------------------------------------------------------------------------------------- +cpu0.semihosting-enable=1 # (bool , init-time) default = '0' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false. +cpu0.semihosting-heap_base=0x311efc00 # (int , init-time) default = '0x0' : Virtual address of heap base +cpu0.semihosting-heap_limit=0x311ffc00 # (int , init-time) default = '0x20700000' : Virtual address of top of heap +cpu0.semihosting-stack_base=0x31200000 # (int , init-time) default = '0x20800000' : Virtual address of base of descending stack +cpu0.semihosting-stack_limit=0x311ffc00 # (int , init-time) default = '0x20700000' : Virtual address of stack limit +mps3_board.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected +mps3_board.visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation +#---------------------------------------------------------------------------------------------- diff --git a/tensorflow-test/all_tests_reference.yml b/tensorflow-test/all_tests_reference.yml deleted file mode 100644 index 375c84f..0000000 --- a/tensorflow-test/all_tests_reference.yml +++ /dev/null @@ -1,256 +0,0 @@ -test_tests: - readable: "Test Tests" - report: test_test.junit - tests: - - testing_helpers_test: - sources: - - tensorflow/lite/micro/testing_helpers_test.cc - -generic_tests: - readable: "Generic Unit Tests - Reference Kernel" - report: generic.junit - tests: - - memory_arena_threshold_test: - sources: - - tensorflow/lite/micro/memory_arena_threshold_test.cc - - tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.cc - - tensorflow/lite/micro/testing/test_conv_model.cc - - memory_helpers_test: - sources: - - tensorflow/lite/micro/memory_helpers_test.cc - - micro_allocator_test: - sources: - - tensorflow/lite/micro/micro_allocator_test.cc - - tensorflow/lite/micro/testing/test_conv_model.cc - - micro_error_reporter_test: - sources: - - tensorflow/lite/micro/micro_error_reporter_test.cc - - micro_interpreter_test: - sources: - - tensorflow/lite/micro/micro_interpreter_test.cc - - micro_mutable_op_resolver_test: - sources: - - tensorflow/lite/micro/micro_mutable_op_resolver_test.cc - - micro_string_test: - sources: - - tensorflow/lite/micro/micro_string_test.cc - - micro_time_test: - sources: - - tensorflow/lite/micro/micro_time_test.cc - - micro_utils_test: - sources: - - tensorflow/lite/micro/micro_utils_test.cc - - recording_micro_allocator_test: - sources: - - tensorflow/lite/micro/recording_micro_allocator_test.cc - - tensorflow/lite/micro/testing/test_conv_model.cc - - recording_simple_memory_allocator_test: - sources: - - tensorflow/lite/micro/recording_simple_memory_allocator_test.cc - - simple_memory_allocator_test: - sources: - - tensorflow/lite/micro/simple_memory_allocator_test.cc - -kernel_unit_tests: - readable: "Kernel Unit Tests" - report: kernel.junit - tests: - - activations_test: - sources: - - tensorflow/lite/micro/kernels/activations_test.cc - - add_test: - sources: - - tensorflow/lite/micro/kernels/add_test.cc - - add_n_test: - sources: - - tensorflow/lite/micro/kernels/add_n_test.cc - - arg_min_max_test: - sources: - - tensorflow/lite/micro/kernels/arg_min_max_test.cc - - batch_to_space_nd_test: - sources: - - tensorflow/lite/micro/kernels/batch_to_space_nd_test.cc - - cast_test: - sources: - - tensorflow/lite/micro/kernels/cast_test.cc - - ceil_test: - sources: - - tensorflow/lite/micro/kernels/ceil_test.cc - - circular_buffer_test: - sources: - - tensorflow/lite/micro/kernels/circular_buffer_test.cc - - tensorflow/lite/micro/kernels/circular_buffer_flexbuffers_generated_data.cc - - comparisons_test: - sources: - - tensorflow/lite/micro/kernels/comparisons_test.cc - - concatenation_test: - sources: - - tensorflow/lite/micro/kernels/concatenation_test.cc -# - conv_test: -# sources: -# - tensorflow/lite/micro/kernels/conv_test.cc -# - tensorflow/lite/micro/kernels/conv_test_common.cc - - cumsum_test: - sources: - - tensorflow/lite/micro/kernels/cumsum_test.cc - - depth_to_space_test: - sources: - - tensorflow/lite/micro/kernels/depth_to_space_test.cc - - depthwise_conv_test: - sources: - - tensorflow/lite/micro/kernels/depthwise_conv_test.cc - - dequantize_test: - sources: - - tensorflow/lite/micro/kernels/dequantize_test.cc - - detection_postprocess_test: - sources: - - tensorflow/lite/micro/kernels/detection_postprocess_test.cc - - tensorflow/lite/micro/kernels/detection_postprocess_flexbuffers_generated_data.cc - - elementwise_test: - sources: - - tensorflow/lite/micro/kernels/elementwise_test.cc - - elu_test: - sources: - - tensorflow/lite/micro/kernels/elu_test.cc - - exp_test: - sources: - - tensorflow/lite/micro/kernels/exp_test.cc - - expand_dims_test: - sources: - - tensorflow/lite/micro/kernels/expand_dims_test.cc - - fill_test: - sources: - - tensorflow/lite/micro/kernels/fill_test.cc - - floor_test: - sources: - - tensorflow/lite/micro/kernels/floor_test.cc - - floor_div_test: - sources: - - tensorflow/lite/micro/kernels/floor_div_test.cc - - floor_mod_test: - sources: - - tensorflow/lite/micro/kernels/floor_mod_test.cc - - fully_connected_test: - sources: - - tensorflow/lite/micro/kernels/fully_connected_test.cc - - gather_test: - sources: - - tensorflow/lite/micro/kernels/gather_test.cc - - gather_nd_test: - sources: - - tensorflow/lite/micro/kernels/gather_nd_test.cc - - hard_swish_test: - sources: - - tensorflow/lite/micro/kernels/hard_swish_test.cc - - l2norm_test: - sources: - - tensorflow/lite/micro/kernels/l2norm_test.cc - - l2_pool_2d_test: - sources: - - tensorflow/lite/micro/kernels/l2_pool_2d_test.cc - - leaky_relu_test: - sources: - - tensorflow/lite/micro/kernels/leaky_relu_test.cc - - logical_test: - sources: - - tensorflow/lite/micro/kernels/logical_test.cc - - logistic_test: - sources: - - tensorflow/lite/micro/kernels/logistic_test.cc - - log_softmax_test: - sources: - - tensorflow/lite/micro/kernels/log_softmax_test.cc - - maximum_minimum_test: - sources: - - tensorflow/lite/micro/kernels/maximum_minimum_test.cc - - mul_test: - sources: - - tensorflow/lite/micro/kernels/mul_test.cc - - neg_test: - sources: - - tensorflow/lite/micro/kernels/neg_test.cc - - pack_test: - sources: - - tensorflow/lite/micro/kernels/pack_test.cc - - pad_test: - sources: - - tensorflow/lite/micro/kernels/pad_test.cc - - pooling_test: - sources: - - tensorflow/lite/micro/kernels/pooling_test.cc - - prelu_test: - sources: - - tensorflow/lite/micro/kernels/prelu_test.cc - - quantization_util_test: - sources: - - tensorflow/lite/micro/kernels/quantization_util_test.cc - - quantize_test: - sources: - - tensorflow/lite/micro/kernels/quantize_test.cc - - reduce_test: - sources: - - tensorflow/lite/micro/kernels/reduce_test.cc - - reshape_test: - sources: - - tensorflow/lite/micro/kernels/reshape_test.cc - - resize_bilinear_test: - sources: - - tensorflow/lite/micro/kernels/resize_bilinear_test.cc - - resize_nearest_neighbor_test: - sources: - - tensorflow/lite/micro/kernels/resize_nearest_neighbor_test.cc - - round_test: - sources: - - tensorflow/lite/micro/kernels/round_test.cc - - shape_test: - sources: - - tensorflow/lite/micro/kernels/shape_test.cc - - softmax_test: - sources: - - tensorflow/lite/micro/kernels/softmax_test.cc - - space_to_batch_nd_test: - sources: - - tensorflow/lite/micro/kernels/space_to_batch_nd_test.cc - - space_to_depth_test: - sources: - - tensorflow/lite/micro/kernels/space_to_depth_test.cc - - split_test: - sources: - - tensorflow/lite/micro/kernels/split_test.cc - - split_v_test: - sources: - - tensorflow/lite/micro/kernels/split_v_test.cc - - squeeze_test: - sources: - - tensorflow/lite/micro/kernels/squeeze_test.cc - - strided_slice_test: - sources: - - tensorflow/lite/micro/kernels/strided_slice_test.cc - - sub_test: - sources: - - tensorflow/lite/micro/kernels/sub_test.cc - - svdf_test: - sources: - - tensorflow/lite/micro/kernels/svdf_test.cc - - tanh_test: - sources: - - tensorflow/lite/micro/kernels/tanh_test.cc - - transpose_test: - sources: - - tensorflow/lite/micro/kernels/transpose_test.cc - - transpose_conv_test: - sources: - - tensorflow/lite/micro/kernels/transpose_conv_test.cc - - tensorflow/lite/micro/kernels/conv_test_common.cc - - unpack_test: - sources: - - tensorflow/lite/micro/kernels/unpack_test.cc - - zeros_like_test: - sources: - - tensorflow/lite/micro/kernels/zeros_like_test.cc - - lanner/greedy_memory_planner_test: - sources: - - tensorflow/lite/micro/memory_planner/greedy_memory_planner_test.cc - - lanner/linear_memory_planner_te: - sources: - - tensorflow/lite/micro/memory_planner/linear_memory_planner_test.c \ No newline at end of file diff --git a/tensorflow-test/cmsis-toolbox.options b/tensorflow-test/cmsis-toolbox.options deleted file mode 100644 index 82e5eb7..0000000 --- a/tensorflow-test/cmsis-toolbox.options +++ /dev/null @@ -1,6 +0,0 @@ -/opt/cbuild -/home/ubuntu/packs -/opt/armcompiler/bin - -/opt/gcc-arm-none-eabi-10-2020-q4-major/bin - diff --git a/tensorflow-test/generic_tests.yml b/tensorflow-test/generic_tests.yml deleted file mode 100644 index 3afa548..0000000 --- a/tensorflow-test/generic_tests.yml +++ /dev/null @@ -1,248 +0,0 @@ -generic_tests: - readable: "Generic Components Unit Tests" - report: generic.junit - tests: - - memory_arena_threshold_test: - sources: - - tensorflow/lite/micro/memory_arena_threshold_test.cc - - tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.cc - - tensorflow/lite/micro/testing/test_conv_model.cc - - memory_helpers_test: - sources: - - tensorflow/lite/micro/memory_helpers_test.cc - - micro_allocator_test: - sources: - - tensorflow/lite/micro/micro_allocator_test.cc - - tensorflow/lite/micro/testing/test_conv_model.cc - - micro_error_reporter_test: - sources: - - tensorflow/lite/micro/micro_error_reporter_test.cc - - micro_interpreter_test: - sources: - - tensorflow/lite/micro/micro_interpreter_test.cc - - micro_mutable_op_resolver_test: - sources: - - tensorflow/lite/micro/micro_mutable_op_resolver_test.cc - - micro_string_test: - sources: - - tensorflow/lite/micro/micro_string_test.cc - - micro_time_test: - sources: - - tensorflow/lite/micro/micro_time_test.cc - - micro_utils_test: - sources: - - tensorflow/lite/micro/micro_utils_test.cc - - recording_micro_allocator_test: - sources: - - tensorflow/lite/micro/recording_micro_allocator_test.cc - - tensorflow/lite/micro/testing/test_conv_model.cc - - recording_simple_memory_allocator_test: - sources: - - tensorflow/lite/micro/recording_simple_memory_allocator_test.cc - - simple_memory_allocator_test: - sources: - - tensorflow/lite/micro/simple_memory_allocator_test.cc - -kernel_unit_tests: - readable: "Kernel Unit Tests" - report: kernel.junit - tests: - - activations_test: - sources: - - tensorflow/lite/micro/kernels/activations_test.cc - - add_test: - sources: - - tensorflow/lite/micro/kernels/add_test.cc - - add_n_test: - sources: - - tensorflow/lite/micro/kernels/add_n_test.cc - - arg_min_max_test: - sources: - - tensorflow/lite/micro/kernels/arg_min_max_test.cc - - batch_to_space_nd_test: - sources: - - tensorflow/lite/micro/kernels/batch_to_space_nd_test.cc - - cast_test: - sources: - - tensorflow/lite/micro/kernels/cast_test.cc - - ceil_test: - sources: - - tensorflow/lite/micro/kernels/ceil_test.cc - - circular_buffer_test: - sources: - - tensorflow/lite/micro/kernels/circular_buffer_test.cc - - tensorflow/lite/micro/kernels/circular_buffer_flexbuffers_generated_data.cc - - comparisons_test: - sources: - - tensorflow/lite/micro/kernels/comparisons_test.cc - - concatenation_test: - sources: - - tensorflow/lite/micro/kernels/concatenation_test.cc - - conv_test: - sources: - - tensorflow/lite/micro/kernels/conv_test.cc - - tensorflow/lite/micro/kernels/conv_test_common.cc - - cumsum_test: - sources: - - tensorflow/lite/micro/kernels/cumsum_test.cc - - depth_to_space_test: - sources: - - tensorflow/lite/micro/kernels/depth_to_space_test.cc - - depthwise_conv_test: - sources: - - tensorflow/lite/micro/kernels/depthwise_conv_test.cc - - dequantize_test: - sources: - - tensorflow/lite/micro/kernels/dequantize_test.cc - - detection_postprocess_test: - sources: - - tensorflow/lite/micro/kernels/detection_postprocess_test.cc - - tensorflow/lite/micro/kernels/detection_postprocess_flexbuffers_generated_data.cc - - elementwise_test: - sources: - - tensorflow/lite/micro/kernels/elementwise_test.cc - - elu_test: - sources: - - tensorflow/lite/micro/kernels/elu_test.cc - - exp_test: - sources: - - tensorflow/lite/micro/kernels/exp_test.cc - - expand_dims_test: - sources: - - tensorflow/lite/micro/kernels/expand_dims_test.cc - - fill_test: - sources: - - tensorflow/lite/micro/kernels/fill_test.cc - - floor_test: - sources: - - tensorflow/lite/micro/kernels/floor_test.cc - - floor_div_test: - sources: - - tensorflow/lite/micro/kernels/floor_div_test.cc - - floor_mod_test: - sources: - - tensorflow/lite/micro/kernels/floor_mod_test.cc - - fully_connected_test: - sources: - - tensorflow/lite/micro/kernels/fully_connected_test.cc - - gather_test: - sources: - - tensorflow/lite/micro/kernels/gather_test.cc - - gather_nd_test: - sources: - - tensorflow/lite/micro/kernels/gather_nd_test.cc - - hard_swish_test: - sources: - - tensorflow/lite/micro/kernels/hard_swish_test.cc - - l2norm_test: - sources: - - tensorflow/lite/micro/kernels/l2norm_test.cc - - l2_pool_2d_test: - sources: - - tensorflow/lite/micro/kernels/l2_pool_2d_test.cc - - leaky_relu_test: - sources: - - tensorflow/lite/micro/kernels/leaky_relu_test.cc - - logical_test: - sources: - - tensorflow/lite/micro/kernels/logical_test.cc - - logistic_test: - sources: - - tensorflow/lite/micro/kernels/logistic_test.cc - - log_softmax_test: - sources: - - tensorflow/lite/micro/kernels/log_softmax_test.cc - - maximum_minimum_test: - sources: - - tensorflow/lite/micro/kernels/maximum_minimum_test.cc - - mul_test: - sources: - - tensorflow/lite/micro/kernels/mul_test.cc - - neg_test: - sources: - - tensorflow/lite/micro/kernels/neg_test.cc - - pack_test: - sources: - - tensorflow/lite/micro/kernels/pack_test.cc - - pad_test: - sources: - - tensorflow/lite/micro/kernels/pad_test.cc - - pooling_test: - sources: - - tensorflow/lite/micro/kernels/pooling_test.cc - - prelu_test: - sources: - - tensorflow/lite/micro/kernels/prelu_test.cc - - quantization_util_test: - sources: - - tensorflow/lite/micro/kernels/quantization_util_test.cc - - quantize_test: - sources: - - tensorflow/lite/micro/kernels/quantize_test.cc - - reduce_test: - sources: - - tensorflow/lite/micro/kernels/reduce_test.cc - - reshape_test: - sources: - - tensorflow/lite/micro/kernels/reshape_test.cc - - resize_bilinear_test: - sources: - - tensorflow/lite/micro/kernels/resize_bilinear_test.cc - - resize_nearest_neighbor_test: - sources: - - tensorflow/lite/micro/kernels/resize_nearest_neighbor_test.cc - - round_test: - sources: - - tensorflow/lite/micro/kernels/round_test.cc - - shape_test: - sources: - - tensorflow/lite/micro/kernels/shape_test.cc - - softmax_test: - sources: - - tensorflow/lite/micro/kernels/softmax_test.cc - - space_to_batch_nd_test: - sources: - - tensorflow/lite/micro/kernels/space_to_batch_nd_test.cc - - space_to_depth_test: - sources: - - tensorflow/lite/micro/kernels/space_to_depth_test.cc - - split_test: - sources: - - tensorflow/lite/micro/kernels/split_test.cc - - split_v_test: - sources: - - tensorflow/lite/micro/kernels/split_v_test.cc - - squeeze_test: - sources: - - tensorflow/lite/micro/kernels/squeeze_test.cc - - strided_slice_test: - sources: - - tensorflow/lite/micro/kernels/strided_slice_test.cc - - sub_test: - sources: - - tensorflow/lite/micro/kernels/sub_test.cc - - svdf_test: - sources: - - tensorflow/lite/micro/kernels/svdf_test.cc - - tanh_test: - sources: - - tensorflow/lite/micro/kernels/tanh_test.cc - - transpose_test: - sources: - - tensorflow/lite/micro/kernels/transpose_test.cc - - transpose_conv_test: - sources: - - tensorflow/lite/micro/kernels/transpose_conv_test.cc - - tensorflow/lite/micro/kernels/conv_test_common.cc - - unpack_test: - sources: - - tensorflow/lite/micro/kernels/unpack_test.cc - - zeros_like_test: - sources: - - tensorflow/lite/micro/kernels/zeros_like_test.cc - - lanner/greedy_memory_planner_test: - sources: - - tensorflow/lite/micro/memory_planner/greedy_memory_planner_test.cc - - lanner/linear_memory_planner_te: - sources: - - tensorflow/lite/micro/memory_planner/linear_memory_planner_test.c \ No newline at end of file diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Include/led_port.h b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Include/led_port.h deleted file mode 100644 index e9e6e28..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Include/led_port.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2017 Arm Limited - * - * 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 - * - * http://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. - */ - -#ifndef __LED_PORT_H__ -#define __LED_PORT_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* The goal of this file is to create a common LED API for different targets in order - * create common example applications. - */ - -/* Note: Currently this API doesn't handle the case when a peripheral is - * mapped to secure and non-secure region as well, but could be extended - * to select secure or non-secure one. - */ - -/** - * \brief Get the number of bits of LED port, - * in the current platform, that can be - * read and written in one chunk. - * - * \return Available number of bits of LED port. - */ -unsigned int get_led_port_bit_length(void); - -/** - * \brief Initializes LED device if needed - */ -void led_port_init(void); - -/** - * \brief Set the value of the LED port. - * - * \param[in] led Value of the LED port will be set. - * Every bit represents one physical LED. - * - * \return 0 if succeeded, 1 otherwise - */ -unsigned int set_led_port(unsigned int led_mask); - -/** - * \brief Get the value of the LED port. - * - * \return Value of the LED port - * Every bit represents one physical LED. - */ -unsigned int get_led_port(void); - - -#ifdef __cplusplus -} -#endif -#endif /* __LED_PORT_H__ */ diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Include/serial.h b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Include/serial.h deleted file mode 100644 index 77f15a4..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Include/serial.h +++ /dev/null @@ -1,33 +0,0 @@ -/* -* Copyright (c) 2017 Arm Limited -* -* 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 -* -* http://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. -*/ - -#ifndef __SERIAL_H__ -#define __SERIAL_H__ - - -#include - -/** - * \brief Initializes default UART device - */ -void serial_init(void); - -/** - * \brief Prints a string through the default UART device - */ -void serial_print(char *str); - -#endif /* __SERIAL_H__ */ diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Include/timeout.h b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Include/timeout.h deleted file mode 100644 index a9931ae..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Include/timeout.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2017-2019 Arm Limited - * - * 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 - * - * http://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. - */ - -#ifndef __TIMEOUT_H__ -#define __TIMEOUT_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include "device_definition.h" - -/* Structure to maintain elapsed time */ -struct timeout_t { - void *dev_ptr; - bool is_initialized; -}; - -/** - * \brief Initializes timout structure - * - * \param[in] timeout Pointer to the timeout structure - * \param[in] delay Delay in ms to check timeout against - * - * \return Returns true if the delay value was set, - * false otherwise - */ -bool timeout_init(struct timeout_t *timeout, uint32_t delay); - -/** - * \brief Checks if the given time has passed or not - * - * \param[in] timer Pointer to the timer structure - * - * \details This function compares the timestamp stored in the timeout structure - * and the current time. If the difference is more than the given delay, - * the current time is stored and will be used for the next comparison - * - * \return 1 if the given time has passed, 0 if not - */ -bool timeout_delay_is_elapsed(struct timeout_t *timeout); - -/** - * \brief Uninitializes timout structure and stops timer operation. - * - * \param[in] timeout Pointer to the timeout structure - */ -void timeout_uninit(struct timeout_t *timeout); - -/** - * \brief Waits the specified time in milliseconds. - * - * \param[in] ms Time to wait in milliseconds - */ -void wait_ms(uint32_t ms); - -#ifdef __cplusplus -} -#endif -#endif /* __TIMEOUT_H__ */ diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Source/led_port.c b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Source/led_port.c deleted file mode 100644 index 109495a..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Source/led_port.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2019-2020 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#include -#include "led_port.h" -#include "arm_mps3_io_drv.h" -#include "device_cfg.h" -#include "device_definition.h" - -#define MAX_PIN_FPGAIO_LED 10UL -#define MAX_LED_MASK ((1U << MAX_PIN_FPGAIO_LED) - 1) -#define BIT_VALUE(v, bit) (((v) >> (bit) & 1UL)) - -static unsigned int led_status; - -unsigned int get_led_port_bit_length(void) -{ - return MAX_PIN_FPGAIO_LED; -} - -void led_port_init(void) -{ - /* Turn off all LEDs at init */ - arm_mps3_io_write_leds(&MPS3_IO_DEV, ARM_MPS3_IO_ACCESS_PORT, 0, 0); - led_status = 0x0; -} - -unsigned int set_led_port(unsigned int led_mask) -{ - uint8_t i; - uint32_t value; - - if (led_mask > MAX_LED_MASK) { - return 1; - } - - /* Set the LEDs to new value one by one */ - for (i = 0; i < MAX_PIN_FPGAIO_LED; i++) { - if (BIT_VALUE((led_mask ^ led_status), i)) { - /* led pin i has new value */ - value = BIT_VALUE(led_mask, i); - arm_mps3_io_write_leds(&MPS3_IO_DEV, - ARM_MPS3_IO_ACCESS_PIN, - i, value); - } - } - led_status = led_mask; - - return 0; -} - -/** - * \brief Get the value of the LED port. - * - * \return Value of the LED port - * Every bit represents one physical LED. - */ -unsigned int get_led_port(void) -{ - return arm_mps3_io_read_leds(&MPS3_IO_DEV, - ARM_MPS3_IO_ACCESS_PORT, - 0); -} diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Source/serial.c b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Source/serial.c deleted file mode 100644 index 475f4e3..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Source/serial.c +++ /dev/null @@ -1,55 +0,0 @@ -/* -* Copyright (c) 2017-2020 Arm Limited -* -* 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 -* -* http://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. -*/ - -#include -#include -#include "device_cfg.h" -#include "Driver_USART.h" -#include "serial.h" - -extern ARM_DRIVER_USART Driver_USART0; - -void serial_init(void) -{ - Driver_USART0.Initialize(NULL); - Driver_USART0.Control(ARM_USART_MODE_ASYNCHRONOUS, DEFAULT_UART_BAUDRATE); -} - -void serial_print(char *str) -{ - (void)Driver_USART0.Send(str, strlen(str)); -} - -/* Struct FILE is implemented in stdio.h. Used to redirect printf to UART0 */ -//FILE __stdout; -/* Redirects armclang printf to UART */ -int stdout_putchar(int ch) -{ - if (Driver_USART0.Send(&ch, 1) == ARM_DRIVER_OK) { - return ch; - } - return EOF; -} - -/* Redirects gcc printf to UART0 */ -int _write(int fd, char *str, int len) -{ - if (Driver_USART0.Send(str, len) == ARM_DRIVER_OK) { - return len; - } - return 0; -} - diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Source/systimer_armv8-m_timeout.c b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Source/systimer_armv8-m_timeout.c deleted file mode 100644 index dc79876..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/API/Source/systimer_armv8-m_timeout.c +++ /dev/null @@ -1,73 +0,0 @@ -/* -* Copyright (c) 2019-2020 Arm Limited -* -* 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 -* -* http://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. -*/ - -#include "timeout.h" -#include "device_cfg.h" -#include "systimer_armv8-m_drv.h" -#include "syscounter_armv8-m_cntrl_drv.h" -#include "platform_description.h" - -#define MS_TO_TICK(ms) ((ms) * (SystemCoreClock / 1000)) - -/* Systimer is configured over the 32-bit down-counting Timer view, so maximum - * delay is defined by its bit width. */ -#define MAX_DELAY_MS (UINT32_MAX / \ - (SystemCoreClock / 1000)) - -static uint32_t delay_in_tick; - -bool timeout_init(struct timeout_t *timeout, uint32_t delay) -{ - struct systimer_armv8_m_dev_t *dev; - - if (!timeout || delay > MAX_DELAY_MS) { - return false; - } - - if (timeout->is_initialized) { - return false; - } - - syscounter_armv8_m_cntrl_init(&SYSCOUNTER_CNTRL_ARMV8_M_DEV); - - dev = &SYSTIMER0_ARMV8_M_DEV; - systimer_armv8_m_init(dev); - - delay_in_tick = MS_TO_TICK(delay); - systimer_armv8_m_set_timer_value(dev, delay_in_tick); - - timeout->dev_ptr = (void *)dev; - timeout->is_initialized = true; - - return true; -} - -bool timeout_delay_is_elapsed(struct timeout_t *timeout) -{ - struct systimer_armv8_m_dev_t* dev; - - if (!timeout || !timeout->is_initialized) { - return false; - } - - dev = (struct systimer_armv8_m_dev_t*)timeout->dev_ptr; - if (systimer_armv8_m_is_interrupt_asserted(dev)) { - systimer_armv8_m_set_timer_value(dev, delay_in_tick); - return true; - } - - return false; -} diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/RTE_Device.h b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/RTE_Device.h deleted file mode 100644 index 8de4d3a..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/RTE_Device.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2019-2020 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::Drivers:USART -#define RTE_USART0 1 -// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART0] - -// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::Drivers:USART -#define RTE_USART1 1 -// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART1] - -// MPC (Memory Protection Controller) [Driver_ISRAM0_MPC] -// Configuration settings for Driver_ISRAM0_MPC in component ::Drivers:MPC -#define RTE_ISRAM0_MPC 1 -// MPC (Memory Protection Controller) [Driver_ISRAM0_MPC] - -// MPC (Memory Protection Controller) [Driver_ISRAM1_MPC] -// Configuration settings for Driver_ISRAM1_MPC in component ::Drivers:MPC -#define RTE_ISRAM1_MPC 1 -// MPC (Memory Protection Controller) [Driver_ISRAM1_MPC] - -// MPC (Memory Protection Controller) [Driver_SRAM_MPC] -// Configuration settings for Driver_SRAM_MPC in component ::Drivers:MPC -#define RTE_SRAM_MPC 1 -// MPC (Memory Protection Controller) [Driver_SRAM_MPC] - -// MPC (Memory Protection Controller) [Driver_QSPI_MPC] -// Configuration settings for Driver_QSPI_MPC in component ::Drivers:MPC -#define RTE_QSPI_MPC 1 -// MPC (Memory Protection Controller) [Driver_QSPI_MPC] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_MAIN0] -// Configuration settings for Driver_PPC_SSE300_MAIN0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_MAIN0 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_MAIN0] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_MAIN_EXP0] -// Configuration settings for Driver_PPC_SSE300_MAIN_EXP0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_MAIN_EXP0 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_MAIN_EXP0] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_MAIN_EXP1] -// Configuration settings for Driver_PPC_SSE300_MAIN_EXP1 in component ::Drivers:PPC -#define RTE_PPC_SSE300_MAIN_EXP1 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_MAIN_EXP1] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH0] -// Configuration settings for Driver_PPC_SSE300_PERIPH0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH0 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH0] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH1] -// Configuration settings for Driver_PPC_SSE300_PERIPH1 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH1 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH1] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH_EXP0] -// Configuration settings for Driver_PPC_SSE300_PERIPH_EXP0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH_EXP0 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH_EXP0] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH_EXP1] -// Configuration settings for Driver_PPC_SSE300_PERIPH_EXP1 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH_EXP1 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH_EXP1] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH_EXP2] -// Configuration settings for Driver_PPC_SSE300_PERIPH_EXP2 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH_EXP2 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH_EXP2] - -// Flash device emulated by SRAM [Driver_Flash0] -// Configuration settings for Driver_Flash0 in component ::Drivers:Flash -#define RTE_FLASH0 1 -// Flash device emulated by SRAM [Driver_Flash0] - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h deleted file mode 100644 index 5ad6fb6..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2019-2020 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#ifndef __CMSIS_DRIVER_CONFIG_H__ -#define __CMSIS_DRIVER_CONFIG_H__ - -#include "system_core_init.h" -#include "device_cfg.h" -#include "device_definition.h" -#include "platform_base_address.h" - -#endif /* __CMSIS_DRIVER_CONFIG_H__ */ diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/device_cfg.h b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/device_cfg.h deleted file mode 100644 index d3591f2..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/device_cfg.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (c) 2020-2021 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#ifndef __DEVICE_CFG_H__ -#define __DEVICE_CFG_H__ - -/** - * \file device_cfg.h - * \brief Configuration file native driver re-targeting - * - * \details This file can be used to add native driver specific macro - * definitions to select which peripherals are available in the build. - * - * This is a default device configuration file with all peripherals enabled. - */ - -/* Secure only peripheral configuration */ - -/* ARM MPS3 IO SCC */ -#define MPS3_IO_S -#define MPS3_IO_DEV MPS3_IO_DEV_S - -/* ARM UART Controller PL011 */ -#define UART0_CMSDK_S -#define UART0_CMSDK_DEV UART0_CMSDK_DEV_S -#define UART1_CMSDK_S -#define UART1_CMSDK_DEV UART1_CMSDK_DEV_S - -#define DEFAULT_UART_BAUDRATE 115200U - -/* To be used as CODE and DATA sram */ -#define MPC_ISRAM0_S -#define MPC_ISRAM0_DEV MPC_ISRAM0_DEV_S - -#define MPC_ISRAM1_S -#define MPC_ISRAM1_DEV MPC_ISRAM0_DEV_S - -#define MPC_SRAM_S -#define MPC_SRAM_DEV MPC_SRAM_DEV_S - -#define MPC_QSPI_S -#define MPC_QSPI_DEV MPC_QSPI_DEV_S - -/** System Counter Armv8-M */ -#define SYSCOUNTER_CNTRL_ARMV8_M_S -#define SYSCOUNTER_CNTRL_ARMV8_M_DEV SYSCOUNTER_CNTRL_ARMV8_M_DEV_S - -#define SYSCOUNTER_READ_ARMV8_M_S -#define SYSCOUNTER_READ_ARMV8_M_DEV SYSCOUNTER_READ_ARMV8_M_DEV_S -/** - * Arbitrary scaling values for test purposes - */ -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE0_INT 1u -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE0_FRACT 0u -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE1_INT 1u -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE1_FRACT 0u - -/* System timer */ -#define SYSTIMER0_ARMV8_M_S -#define SYSTIMER0_ARMV8_M_DEV SYSTIMER0_ARMV8_M_DEV_S -#define SYSTIMER1_ARMV8_M_S -#define SYSTIMER1_ARMV8_M_DEV SYSTIMER1_ARMV8_M_DEV_S -#define SYSTIMER2_ARMV8_M_S -#define SYSTIMER2_ARMV8_M_DEV SYSTIMER2_ARMV8_M_DEV_S -#define SYSTIMER3_ARMV8_M_S -#define SYSTIMER3_ARMV8_M_DEV SYSTIMER3_ARMV8_M_DEV_S - -#define SYSTIMER0_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) -#define SYSTIMER1_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) -#define SYSTIMER2_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) -#define SYSTIMER3_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) - -/* CMSDK GPIO driver structures */ -#define GPIO0_CMSDK_S -#define GPIO0_CMSDK_DEV GPIO0_CMSDK_DEV_S -#define GPIO1_CMSDK_S -#define GPIO1_CMSDK_DEV GPIO1_CMSDK_DEV_S -#define GPIO2_CMSDK_S -#define GPIO2_CMSDK_DEV GPIO2_CMSDK_DEV_S -#define GPIO3_CMSDK_S -#define GPIO3_CMSDK_DEV GPIO3_CMSDK_DEV_S - -/* ARM MPS3 IO FPGAIO driver structures */ -#define ARM_MPS3_IO_FPGAIO_S -#define ARM_MPS3_IO_FPGAIO_DEV ARM_MPS3_IO_FPGAIO_DEV_S - -/* System Watchdogs */ -#define SYSWDOG_ARMV8_M_S -#define SYSWDOG_ARMV8_M_DEV SYSWDOG_ARMV8_M_DEV_S - -/* ARM MPC SIE 300 driver structures */ -#define MPC_VM0_S -#define MPC_VM0_DEV MPC_VM0_DEV_S -#define MPC_VM1_S -#define MPC_VM1_DEV MPC_VM1_DEV_S -#define MPC_SSRAM2_S -#define MPC_SSRAM2_DEV MPC_SSRAM2_DEV_S -#define MPC_SSRAM3_S -#define MPC_SSRAM3_DEV MPC_SSRAM3_DEV_S - -/* ARM PPC driver structures */ -#define PPC_SSE300_MAIN0_S -#define PPC_SSE300_MAIN0_DEV PPC_SSE300_MAIN0_DEV_S -#define PPC_SSE300_MAIN_EXP0_S -#define PPC_SSE300_MAIN_EXP0_DEV PPC_SSE300_MAIN_EXP0_DEV_S -#define PPC_SSE300_MAIN_EXP1_S -#define PPC_SSE300_MAIN_EXP1_DEV PPC_SSE300_MAIN_EXP1_DEV_S -#define PPC_SSE300_MAIN_EXP2_S -#define PPC_SSE300_MAIN_EXP2_DEV PPC_SSE300_MAIN_EXP2_DEV_S -#define PPC_SSE300_MAIN_EXP3_S -#define PPC_SSE300_MAIN_EXP3_DEV PPC_SSE300_MAIN_EXP3_DEV_S -#define PPC_SSE300_PERIPH0_S -#define PPC_SSE300_PERIPH0_DEV PPC_SSE300_PERIPH0_DEV_S -#define PPC_SSE300_PERIPH1_S -#define PPC_SSE300_PERIPH1_DEV PPC_SSE300_PERIPH1_DEV_S -#define PPC_SSE300_PERIPH_EXP0_S -#define PPC_SSE300_PERIPH_EXP0_DEV PPC_SSE300_PERIPH_EXP0_DEV_S -#define PPC_SSE300_PERIPH_EXP1_S -#define PPC_SSE300_PERIPH_EXP1_DEV PPC_SSE300_PERIPH_EXP1_DEV_S -#define PPC_SSE300_PERIPH_EXP2_S -#define PPC_SSE300_PERIPH_EXP2_DEV PPC_SSE300_PERIPH_EXP2_DEV_S -#define PPC_SSE300_PERIPH_EXP3_S -#define PPC_SSE300_PERIPH_EXP3_DEV PPC_SSE300_PERIPH_EXP3_DEV_S - -/* ARM SPI PL022 */ -/* Invalid device stubs are not defined */ -#define DEFAULT_SPI_SPEED_HZ 4000000U /* 4MHz */ -#define SPI1_PL022_S -#define SPI1_PL022_DEV SPI1_PL022_DEV_S - - -#endif /* __DEVICE_CFG_H__ */ \ No newline at end of file diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct deleted file mode 100644 index f289ee3..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct +++ /dev/null @@ -1,78 +0,0 @@ -#! armclang --target=arm-arm-none-eabi -mcpu=cortex-m55 -E -xc - -;/* -; * Copyright (c) 2018-2021 Arm Limited. All rights reserved. -; * -; * 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 -; * -; * http://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. -; * -; */ - -#include "region_defs.h" - -LR_CODE S_CODE_START { - ER_CODE S_CODE_START { - *.o (RESET +First) - .ANY (+RO) - } - - /* - * Place the CMSE Veneers (containing the SG instruction) after the code, in - * a separate 32 bytes aligned region so that the SAU can programmed to just - * set this region as Non-Secure Callable. The maximum size of this - * executable region makes it only used the space left over by the ER_CODE - * region so that you can rely on code+veneer size combined will not exceed - * the S_CODE_SIZE value. We also substract from the available space the - * area used to align this section on 32 bytes boundary (for SAU conf). - */ - ER_CODE_CMSE_VENEER +0 ALIGN 32 { - *(Veneer$$CMSE) - } - /* - * This dummy region ensures that the next one will be aligned on a 32 bytes - * boundary, so that the following region will not be mistakenly configured - * as Non-Secure Callable by the SAU. - */ - ER_CODE_CMSE_VENEER_DUMMY +0 ALIGN 32 EMPTY 0 {} - - /* This empty, zero long execution region is here to mark the limit address - * of the last execution region that is allocated in SRAM. - */ - CODE_WATERMARK +0 EMPTY 0x0 { - } - /* Make sure that the sections allocated in the SRAM does not exceed the - * size of the SRAM available. - */ - ScatterAssert(ImageLimit(CODE_WATERMARK) <= S_CODE_START + S_CODE_SIZE) - - ER_DATA S_DATA_START { - .ANY (+ZI +RW) - } - - #if HEAP_SIZE > 0 - ARM_LIB_HEAP +0 ALIGN 8 EMPTY HEAP_SIZE { ; Reserve empty region for heap - } - #endif - - ARM_LIB_STACK +0 ALIGN 32 EMPTY STACK_SIZE { ; Reserve empty region for stack - } - - /* This empty, zero long execution region is here to mark the limit address - * of the last execution region that is allocated in SRAM. - */ - SRAM_WATERMARK +0 EMPTY 0x0 { - } - /* Make sure that the sections allocated in the SRAM does not exceed the - * size of the SRAM available. - */ - ScatterAssert(ImageLimit(SRAM_WATERMARK) <= S_DATA_START + S_DATA_SIZE) -} diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/platform_base_address.h b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/platform_base_address.h deleted file mode 100644 index c5c3ee7..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/platform_base_address.h +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright (c) 2019-2021 Arm Limited - * - * 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 - * - * http://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. - */ - -/** - * \file platform_base_address.h - * \brief This file defines all the peripheral base addresses for MPS3 SSE-300 + - * Ethos-U55 AN547 platform. - */ - -#ifndef __PLATFORM_BASE_ADDRESS_H__ -#define __PLATFORM_BASE_ADDRESS_H__ - -/* ======= Defines peripherals memory map addresses ======= */ -/* Non-secure memory map addresses */ -#define ITCM_BASE_NS 0x00000000 /* Instruction TCM Non-Secure base address */ -#define SRAM_BASE_NS 0x01000000 /* CODE SRAM Non-Secure base address */ -#define DTCM0_BASE_NS 0x20000000 /* Data TCM block 0 Non-Secure base address */ -#define DTCM1_BASE_NS 0x20020000 /* Data TCM block 1 Non-Secure base address */ -#define DTCM2_BASE_NS 0x20040000 /* Data TCM block 2 Non-Secure base address */ -#define DTCM3_BASE_NS 0x20060000 /* Data TCM block 3 Non-Secure base address */ -#define ISRAM0_BASE_NS 0x21000000 /* Internal SRAM Area Non-Secure base address */ -#define ISRAM1_BASE_NS 0x21200000 /* Internal SRAM Area Non-Secure base address */ -#define QSPI_SRAM_BASE_NS 0x28000000 /* QSPI SRAM Non-Secure base address */ -/* Non-Secure Subsystem peripheral region */ -#define CPU0_PWRCTRL_BASE_NS 0x40012000 /* CPU 0 Power Control Block Non-Secure base address */ -#define CPU0_IDENTITY_BASE_NS 0x4001F000 /* CPU 0 Identity Block Non-Secure base address */ -#define SSE300_NSACFG_BASE_NS 0x40080000 /* SSE-300 Non-Secure Access Configuration Register Block Non-Secure base address */ -/* Non-Secure MSTEXPPILL Peripheral region */ -#define GPIO0_CMSDK_BASE_NS 0x41100000 /* GPIO 0 Non-Secure base address */ -#define GPIO1_CMSDK_BASE_NS 0x41101000 /* GPIO 1 Non-Secure base address */ -#define GPIO2_CMSDK_BASE_NS 0x41102000 /* GPIO 2 Non-Secure base address */ -#define GPIO3_CMSDK_BASE_NS 0x41103000 /* GPIO 3 Non-Secure base address */ -#define AHB_USER_0_BASE_NS 0x41104000 /* AHB USER 0 Non-Secure base address */ -#define AHB_USER_1_BASE_NS 0x41105000 /* AHB USER 1 Non-Secure base address */ -#define AHB_USER_2_BASE_NS 0x41106000 /* AHB USER 2 Non-Secure base address */ -#define AHB_USER_3_BASE_NS 0x41107000 /* AHB USER 3 Non-Secure base address */ -#define DMA_0_BASE_NS 0x41200000 /* DMA 0 Non-Secure base address */ -#define DMA_1_BASE_NS 0x41201000 /* DMA 1 Non-Secure base address */ -#define DMA_2_BASE_NS 0x41202000 /* DMA 2 Non-Secure base address */ -#define DMA_3_BASE_NS 0x41203000 /* DMA 3 Non-Secure base address */ -#define ETHERNET_BASE_NS 0x41400000 /* Ethernet Non-Secure base address */ -#define USB_BASE_NS 0x41500000 /* USB Non-Secure base address */ -#define USER_APB0_BASE_NS 0x41700000 /* User APB 0 Non-Secure base address */ -#define USER_APB1_BASE_NS 0x41701000 /* User APB 1 Non-Secure base address */ -#define USER_APB2_BASE_NS 0x41702000 /* User APB 2 Non-Secure base address */ -#define USER_APB3_BASE_NS 0x41703000 /* User APB 3 Non-Secure base address */ -#define QSPI_CONFIG_BASE_NS 0x41800000 /* QSPI Config Non-Secure base address */ -#define QSPI_WRITE_BASE_NS 0x41801000 /* QSPI Write Non-Secure base address */ -/* Non-Secure Subsystem peripheral region */ -#define SYSTIMER0_ARMV8_M_BASE_NS 0x48000000 /* System Timer 0 Non-Secure base address */ -#define SYSTIMER1_ARMV8_M_BASE_NS 0x48001000 /* System Timer 1 Non-Secure base address */ -#define SYSTIMER2_ARMV8_M_BASE_NS 0x48002000 /* System Timer 2 Non-Secure base address */ -#define SYSTIMER3_ARMV8_M_BASE_NS 0x48003000 /* System Timer 3 Non-Secure base address */ -#define SSE300_SYSINFO_BASE_NS 0x48020000 /* SSE-300 System info Block Non-Secure base address */ -#define SLOWCLK_TIMER_CMSDK_BASE_NS 0x4802F000 /* CMSDK based SLOWCLK Timer Non-Secure base address */ -#define SYSWDOG_ARMV8_M_CNTRL_BASE_NS 0x48040000 /* Non-Secure Watchdog Timer control frame Non-Secure base address */ -#define SYSWDOG_ARMV8_M_REFRESH_BASE_NS 0x48041000 /* Non-Secure Watchdog Timer refresh frame Non-Secure base address */ -#define SYSCNTR_READ_BASE_NS 0x48101000 /* System Counter Read Secure base address */ -/* Non-Secure MSTEXPPIHL Peripheral region */ -#define ETHOS_U55_APB_BASE_NS 0x48102000 /* Ethos-U55 APB Non-Secure base address */ -#define U55_TIMING_ADAPTER_BASE_NS 0x48103000 /* Ethos-U55 Timing Adapter registers Non-Secure base address */ -#define FPGA_SBCon_I2C_TOUCH_BASE_NS 0x49200000 /* FPGA - SBCon I2C (Touch) Non-Secure base address */ -#define FPGA_SBCon_I2C_AUDIO_BASE_NS 0x49201000 /* FPGA - SBCon I2C (Audio Conf) Non-Secure base address */ -#define FPGA_SPI_ADC_BASE_NS 0x49202000 /* FPGA - PL022 (SPI ADC) Non-Secure base address */ -#define FPGA_SPI_SHIELD0_BASE_NS 0x49203000 /* FPGA - PL022 (SPI Shield0) Non-Secure base address */ -#define FPGA_SPI_SHIELD1_BASE_NS 0x49204000 /* FPGA - PL022 (SPI Shield1) Non-Secure base address */ -#define SBCon_I2C_SHIELD0_BASE_NS 0x49205000 /* SBCon (I2C - Shield0) Non-Secure base address */ -#define SBCon_I2C_SHIELD1_BASE_NS 0x49206000 /* SBCon (I2C – Shield1) Non-Secure base address */ -#define USER_APB_BASE_NS 0x49207000 /* USER APB Non-Secure base address */ -#define FPGA_DDR4_EEPROM_BASE_NS 0x49208000 /* FPGA - SBCon I2C (DDR4 EEPROM) Non-Secure base address */ -#define FPGA_SCC_BASE_NS 0x49300000 /* FPGA - SCC registers Non-Secure base address */ -#define FPGA_I2S_BASE_NS 0x49301000 /* FPGA - I2S (Audio) Non-Secure base address */ -#define FPGA_IO_BASE_NS 0x49302000 /* FPGA - IO (System Ctrl + I/O) Non-Secure base address */ -#define UART0_BASE_NS 0x49303000 /* UART 0 Non-Secure base address */ -#define UART1_BASE_NS 0x49304000 /* UART 1 Non-Secure base address */ -#define UART2_BASE_NS 0x49305000 /* UART 2 Non-Secure base address */ -#define UART3_BASE_NS 0x49306000 /* UART 3 Non-Secure base address */ -#define UART4_BASE_NS 0x49307000 /* UART 4 Non-Secure base address */ -#define UART5_BASE_NS 0x49308000 /* UART 5 Non-Secure base address */ -#define CLCD_Config_Reg_BASE_NS 0x4930A000 /* CLCD Config Reg Non-Secure base address */ -#define RTC_BASE_NS 0x4930B000 /* RTC Non-Secure base address */ -#define DDR4_BLK0_BASE_NS 0x60000000 /* DDR4 block 0 Non-Secure base address */ -#define DDR4_BLK2_BASE_NS 0x80000000 /* DDR4 block 2 Non-Secure base address */ -#define DDR4_BLK4_BASE_NS 0xA0000000 /* DDR4 block 4 Non-Secure base address */ -#define DDR4_BLK6_BASE_NS 0xC0000000 /* DDR4 block 6 Non-Secure base address */ - -/* Secure memory map addresses */ -#define ITCM_BASE_S 0x10000000 /* Instruction TCM Secure base address */ -#define SRAM_BASE_S 0x11000000 /* CODE SRAM Secure base address */ -#define DTCM0_BASE_S 0x30000000 /* Data TCM block 0 Secure base address */ -#define DTCM1_BASE_S 0x30020000 /* Data TCM block 1 Secure base address */ -#define DTCM2_BASE_S 0x30040000 /* Data TCM block 2 Secure base address */ -#define DTCM3_BASE_S 0x30060000 /* Data TCM block 3 Secure base address */ -#define ISRAM0_BASE_S 0x31000000 /* Internal SRAM Area Secure base address */ -#define ISRAM1_BASE_S 0x31200000 /* Internal SRAM Area Secure base address */ -#define QSPI_SRAM_BASE_S 0x38000000 /* QSPI SRAM Secure base address */ -/* Secure Subsystem peripheral region */ -#define CPU0_SECCTRL_BASE_S 0x50011000 /* CPU 0 Local Security Control Block Secure base address */ -#define CPU0_PWRCTRL_BASE_S 0x50012000 /* CPU 0 Power Control Block Secure base address */ -#define CPU0_IDENTITY_BASE_S 0x5001F000 /* CPU 0 Identity Block Secure base address */ -#define SSE300_SACFG_BASE_S 0x50080000 /* SSE-300 Secure Access Configuration Register Secure base address */ -#define MPC_ISRAM0_BASE_S 0x50083000 /* Internal SRAM0 Memory Protection Controller Secure base address */ -#define MPC_ISRAM1_BASE_S 0x50084000 /* Internal SRAM1 Memory Protection Controller Secure base address */ -/* Secure MSTEXPPILL Peripheral region */ -#define GPIO0_CMSDK_BASE_S 0x51100000 /* GPIO 0 Secure base address */ -#define GPIO1_CMSDK_BASE_S 0x51101000 /* GPIO 1 Secure base address */ -#define GPIO2_CMSDK_BASE_S 0x51102000 /* GPIO 2 Secure base address */ -#define GPIO3_CMSDK_BASE_S 0x51103000 /* GPIO 3 Secure base address */ -#define AHB_USER_0_BASE_S 0x51104000 /* AHB USER 0 Secure base address */ -#define AHB_USER_1_BASE_S 0x51105000 /* AHB USER 1 Secure base address */ -#define AHB_USER_2_BASE_S 0x51106000 /* AHB USER 2 Secure base address */ -#define AHB_USER_3_BASE_S 0x51107000 /* AHB USER 3 Secure base address */ -#define DMA_0_BASE_S 0x51200000 /* DMA 0 Secure base address */ -#define DMA_1_BASE_S 0x51201000 /* DMA 1 Secure base address */ -#define DMA_2_BASE_S 0x51202000 /* DMA 2 Secure base address */ -#define DMA_3_BASE_S 0x51203000 /* DMA 3 Secure base address */ -#define ETHERNET_BASE_S 0x51400000 /* Ethernet Secure base address */ -#define USB_BASE_S 0x51500000 /* USB Secure base address */ -#define USER_APB0_BASE_S 0x51700000 /* User APB 0 Secure base address */ -#define USER_APB1_BASE_S 0x51701000 /* User APB 1 Secure base address */ -#define USER_APB2_BASE_S 0x51702000 /* User APB 2 Secure base address */ -#define USER_APB3_BASE_S 0x51703000 /* User APB 3 Secure base address */ -#define QSPI_CONFIG_BASE_S 0x51800000 /* QSPI Config Secure base address */ -#define QSPI_WRITE_BASE_S 0x51801000 /* QSPI Write Secure base address */ -#define MPC_SRAM_BASE_S 0x57000000 /* SRAM Memory Protection Controller Secure base address */ -#define MPC_QSPI_BASE_S 0x57001000 /* QSPI Memory Protection Controller Secure base address */ -#define MPC_DDR4_BASE_S 0x57002000 /* DDR4 Memory Protection Controller Secure base address */ -/* Secure Subsystem peripheral region */ -#define SYSTIMER0_ARMV8_M_BASE_S 0x58000000 /* System Timer 0 Secure base address */ -#define SYSTIMER1_ARMV8_M_BASE_S 0x58001000 /* System Timer 1 Secure base address */ -#define SYSTIMER2_ARMV8_M_BASE_S 0x58002000 /* System Timer 0 Secure base address */ -#define SYSTIMER3_ARMV8_M_BASE_S 0x58003000 /* System Timer 1 Secure base address */ -#define SSE300_SYSINFO_BASE_S 0x58020000 /* SSE-300 System info Block Secure base address */ -#define SSE300_SYSCTRL_BASE_S 0x58021000 /* SSE-300 System control Block Secure base address */ -#define SSE300_SYSPPU_BASE_S 0x58022000 /* SSE-300 System Power Policy Unit Secure base address */ -#define SSE300_CPU0PPU_BASE_S 0x58023000 /* SSE-300 CPU 0 Power Policy Unit Secure base address */ -#define SSE300_MGMTPPU_BASE_S 0x58028000 /* SSE-300 Management Power Policy Unit Secure base address */ -#define SSE300_DBGPPU_BASE_S 0x58029000 /* SSE-300 Debug Power Policy Unit Secure base address */ -#define SLOWCLK_WDOG_CMSDK_BASE_S 0x5802E000 /* CMSDK based SLOWCLK Watchdog Secure base address */ -#define SLOWCLK_TIMER_CMSDK_BASE_S 0x5802F000 /* CMSDK based SLOWCLK Timer Secure base address */ -#define SYSWDOG_ARMV8_M_CNTRL_BASE_S 0x58040000 /* Secure Watchdog Timer control frame Secure base address */ -#define SYSWDOG_ARMV8_M_REFRESH_BASE_S 0x58041000 /* Secure Watchdog Timer refresh frame Secure base address */ -#define SYSCNTR_CNTRL_BASE_S 0x58100000 /* System Counter Control Secure base address */ -#define SYSCNTR_READ_BASE_S 0x58101000 /* System Counter Read Secure base address */ -/* Secure MSTEXPPIHL Peripheral region */ -#define ETHOS_U55_APB_BASE_S 0x58102000 /* Ethos-U55 APB Secure base address */ -#define U55_TIMING_ADAPTER_BASE_S 0x58103000 /* Ethos-U55 Timing Adapter registers Secure base address */ -#define FPGA_SBCon_I2C_TOUCH_BASE_S 0x59200000 /* FPGA - SBCon I2C (Touch) Secure base address */ -#define FPGA_SBCon_I2C_AUDIO_BASE_S 0x59201000 /* FPGA - SBCon I2C (Audio Conf) Secure base address */ -#define FPGA_SPI_ADC_BASE_S 0x59202000 /* FPGA - PL022 (SPI ADC) Secure base address */ -#define FPGA_SPI_SHIELD0_BASE_S 0x59203000 /* FPGA - PL022 (SPI Shield0) Secure base address */ -#define FPGA_SPI_SHIELD1_BASE_S 0x59204000 /* FPGA - PL022 (SPI Shield1) Secure base address */ -#define SBCon_I2C_SHIELD0_BASE_S 0x59205000 /* SBCon (I2C - Shield0) Secure base address */ -#define SBCon_I2C_SHIELD1_BASE_S 0x59206000 /* SBCon (I2C – Shield1) Secure base address */ -#define USER_APB_BASE_S 0x59207000 /* USER APB Secure base address */ -#define FPGA_DDR4_EEPROM_BASE_S 0x59208000 /* FPGA - SBCon I2C (DDR4 EEPROM) Secure base address */ -#define FPGA_SCC_BASE_S 0x59300000 /* FPGA - SCC registers Secure base address */ -#define FPGA_I2S_BASE_S 0x59301000 /* FPGA - I2S (Audio) Secure base address */ -#define FPGA_IO_BASE_S 0x59302000 /* FPGA - IO (System Ctrl + I/O) Secure base address */ -#define UART0_BASE_S 0x59303000 /* UART 0 Secure base address */ -#define UART1_BASE_S 0x59304000 /* UART 1 Secure base address */ -#define UART2_BASE_S 0x59305000 /* UART 2 Secure base address */ -#define UART3_BASE_S 0x59306000 /* UART 3 Secure base address */ -#define UART4_BASE_S 0x59307000 /* UART 4 Secure base address */ -#define UART5_BASE_S 0x59308000 /* UART 5 Secure base address */ -#define CLCD_Config_Reg_BASE_S 0x5930A000 /* CLCD Config Reg Secure base address */ -#define RTC_BASE_S 0x5930B000 /* RTC Secure base address */ -#define DDR4_BLK1_BASE_S 0x70000000 /* DDR4 block 1 Secure base address */ -#define DDR4_BLK3_BASE_S 0x90000000 /* DDR4 block 3 Secure base address */ -#define DDR4_BLK5_BASE_S 0xB0000000 /* DDR4 block 5 Secure base address */ -#define DDR4_BLK7_BASE_S 0xD0000000 /* DDR4 block 7 Secure base address */ - -/* Memory map addresses exempt from memory attribution by both the SAU and IDAU */ -#define SSE300_EWIC_BASE 0xE0047000 /* External Wakeup Interrupt Controller - * Access from Non-secure software is only allowed - * if AIRCR.BFHFNMINS is set to 1 */ - -/* Memory size definitions */ -#define ITCM_SIZE (0x00080000) /* 512 kB */ -#define DTCM_BLK_SIZE (0x00020000) /* 128 kB */ -#define DTCM_BLK_NUM (0x4) /* Number of DTCM blocks */ -#define SRAM_SIZE (0x00200000) /* 2 MB */ -#define ISRAM0_SIZE (0x00200000) /* 2 MB */ -#define ISRAM1_SIZE (0x00200000) /* 2 MB */ -#define QSPI_SRAM_SIZE (0x00800000) /* 8 MB */ -#define DDR4_BLK_SIZE (0x10000000) /* 256 MB */ -#define DDR4_BLK_NUM (0x8) /* Number of DDR4 blocks */ - -/* Defines for Driver MPC's */ -/* SRAM -- 2 MB */ -#define MPC_SRAM_RANGE_BASE_NS (SRAM_BASE_NS) -#define MPC_SRAM_RANGE_LIMIT_NS (SRAM_BASE_NS + SRAM_SIZE-1) -#define MPC_SRAM_RANGE_OFFSET_NS (0x0) -#define MPC_SRAM_RANGE_BASE_S (SRAM_BASE_S) -#define MPC_SRAM_RANGE_LIMIT_S (SRAM_BASE_S + SRAM_SIZE-1) -#define MPC_SRAM_RANGE_OFFSET_S (0x0) - -/* QSPI -- 8 MB*/ -#define MPC_QSPI_RANGE_BASE_NS (QSPI_SRAM_BASE_NS) -#define MPC_QSPI_RANGE_LIMIT_NS (QSPI_SRAM_BASE_NS + QSPI_SRAM_SIZE-1) -#define MPC_QSPI_RANGE_OFFSET_NS (0x0) -#define MPC_QSPI_RANGE_BASE_S (QSPI_SRAM_BASE_S) -#define MPC_QSPI_RANGE_LIMIT_S (QSPI_SRAM_BASE_S + QSPI_SRAM_SIZE-1) -#define MPC_QSPI_RANGE_OFFSET_S (0x0) - -/* ISRAM0 -- 2 MB*/ -#define MPC_ISRAM0_RANGE_BASE_NS (ISRAM0_BASE_NS) -#define MPC_ISRAM0_RANGE_LIMIT_NS (ISRAM0_BASE_NS + ISRAM0_SIZE-1) -#define MPC_ISRAM0_RANGE_OFFSET_NS (0x0) -#define MPC_ISRAM0_RANGE_BASE_S (ISRAM0_BASE_S) -#define MPC_ISRAM0_RANGE_LIMIT_S (ISRAM0_BASE_S + ISRAM0_SIZE-1) -#define MPC_ISRAM0_RANGE_OFFSET_S (0x0) - -/* ISRAM1 -- 2 MB*/ -#define MPC_ISRAM1_RANGE_BASE_NS (ISRAM1_BASE_NS) -#define MPC_ISRAM1_RANGE_LIMIT_NS (ISRAM1_BASE_NS + ISRAM1_SIZE-1) -#define MPC_ISRAM1_RANGE_OFFSET_NS (0x0) -#define MPC_ISRAM1_RANGE_BASE_S (ISRAM1_BASE_S) -#define MPC_ISRAM1_RANGE_LIMIT_S (ISRAM1_BASE_S + ISRAM1_SIZE-1) -#define MPC_ISRAM1_RANGE_OFFSET_S (0x0) - -/* DDR4 -- 2GB (8 * 256 MB) */ -#define MPC_DDR4_BLK0_RANGE_BASE_NS (DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK0_RANGE_LIMIT_NS (DDR4_BLK0_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK0_RANGE_OFFSET_NS (0x0) -#define MPC_DDR4_BLK1_RANGE_BASE_S (DDR4_BLK1_BASE_S) -#define MPC_DDR4_BLK1_RANGE_LIMIT_S (DDR4_BLK1_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK1_RANGE_OFFSET_S (DDR4_BLK1_BASE_S - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK2_RANGE_BASE_NS (DDR4_BLK2_BASE_NS) -#define MPC_DDR4_BLK2_RANGE_LIMIT_NS (DDR4_BLK2_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK2_RANGE_OFFSET_NS (DDR4_BLK2_BASE_NS - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK3_RANGE_BASE_S (DDR4_BLK3_BASE_S) -#define MPC_DDR4_BLK3_RANGE_LIMIT_S (DDR4_BLK3_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK3_RANGE_OFFSET_S (DDR4_BLK3_BASE_S - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK4_RANGE_BASE_NS (DDR4_BLK4_BASE_NS) -#define MPC_DDR4_BLK4_RANGE_LIMIT_NS (DDR4_BLK4_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK4_RANGE_OFFSET_NS (DDR4_BLK4_BASE_NS - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK5_RANGE_BASE_S (DDR4_BLK5_BASE_S) -#define MPC_DDR4_BLK5_RANGE_LIMIT_S (DDR4_BLK5_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK5_RANGE_OFFSET_S (DDR4_BLK5_BASE_S - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK6_RANGE_BASE_NS (DDR4_BLK6_BASE_NS) -#define MPC_DDR4_BLK6_RANGE_LIMIT_NS (DDR4_BLK6_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK6_RANGE_OFFSET_NS (DDR4_BLK6_BASE_NS - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK7_RANGE_BASE_S (DDR4_BLK7_BASE_S) -#define MPC_DDR4_BLK7_RANGE_LIMIT_S (DDR4_BLK7_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK7_RANGE_OFFSET_S (DDR4_BLK7_BASE_S - DDR4_BLK0_BASE_NS) - -#endif /* __PLATFORM_BASE_ADDRESS_H__ */ diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_defs.h b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_defs.h deleted file mode 100644 index c8cd919..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_defs.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2016-2020 Arm Limited - * - * 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 - * - * http://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. - */ - -#ifndef __REGION_DEFS_H__ -#define __REGION_DEFS_H__ - -#include "region_limits.h" - -/* ************************************************************** - * WARNING: this file is parsed both by the C/C++ compiler - * and the linker. As a result the syntax must be valid not only - * for C/C++ but for the linker scripts too. - * Beware of the following limitations: - * - LD (GCC linker) requires white space around operators. - * - UL postfix for macros is not suported by the linker script - ****************************************************************/ - -/* Secure regions */ -#define S_CODE_START ( S_ROM_ALIAS ) -#define S_CODE_SIZE ( TOTAL_S_ROM_SIZE ) -#define S_CODE_LIMIT ( S_CODE_START + S_CODE_SIZE ) - -#define S_DATA_START ( S_RAM_ALIAS ) -#define S_DATA_SIZE ( TOTAL_S_RAM_SIZE ) -#define S_DATA_LIMIT ( S_DATA_START + S_DATA_SIZE ) - -/* Non-Secure regions */ -#define NS_CODE_START ( NS_ROM_ALIAS ) -#define NS_CODE_SIZE ( TOTAL_NS_ROM_SIZE ) -#define NS_CODE_LIMIT ( NS_CODE_START + NS_CODE_SIZE ) - -#define NS_DATA_START ( NS_RAM_ALIAS ) -#define NS_DATA_SIZE ( TOTAL_NS_RAM_SIZE ) -#define NS_DATA_LIMIT ( NS_DATA_START + NS_DATA_SIZE ) - -#endif /* __REGION_DEFS_H__ */ diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_limits.h b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_limits.h deleted file mode 100644 index 58a76c7..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_limits.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2018-2020 Arm Limited - * - * 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 - * - * http://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. - */ - -#ifndef __REGION_LIMITS_H__ -#define __REGION_LIMITS_H__ - -/* ************************************************************** - * WARNING: this file is parsed both by the C/C++ compiler - * and the linker. As a result the syntax must be valid not only - * for C/C++ but for the linker scripts too. - * Beware of the following limitations: - * - LD (GCC linker) requires white space around operators. - * - UL postfix for macros is not suported by the linker script - ****************************************************************/ - -/* Secure Code */ -#define S_ROM_ALIAS (0x10000000) /* ITCM_BASE_S */ -#define TOTAL_S_ROM_SIZE (0x00080000) /* 256 kB */ - -/* Secure Data */ -#define S_RAM_ALIAS (0x30000000) /* DTCM_BASE_S */ -#define TOTAL_S_RAM_SIZE (0x00040000) /* 256 kB */ - - -/* Non-Secure Code */ -#define NS_ROM_ALIAS (0x01000000) /* SRAM_BASE_NS */ -#define TOTAL_NS_ROM_SIZE (0x00080000) /* 256 kB */ - -/* Non-Secure Data */ -#define NS_RAM_ALIAS (0x21000000) /* ISRAM0_BASE_NS */ -#define TOTAL_NS_RAM_SIZE (0x00040000) /* 256 kB */ - - -/* Heap and Stack sizes for secure and nonsecure applications */ -#define HEAP_SIZE (0x0000C000) /* 1 KiB */ -#define STACK_SIZE (0x00008000) /* 1 KiB */ - -#endif /* __REGION_LIMITS_H__ */ diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c deleted file mode 100644 index 53e367c..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Copyright (c) 2009-2020 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. - */ - -/* - * This file is derivative of CMSIS V5.6.0 startup_ARMv81MML.c - * Git SHA: b5f0603d6a584d1724d952fd8b0737458b90d62b - */ - -#include "cmsis.h" - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler Function Prototype - *----------------------------------------------------------------------------*/ -typedef void( *pFunc )( void ); - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; -extern uint32_t __STACK_LIMIT; - -extern void __PROGRAM_START(void) __NO_RETURN; - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -void Reset_Handler (void) __NO_RETURN; - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -#define DEFAULT_IRQ_HANDLER(handler_name) \ -void __WEAK handler_name(void); \ -void handler_name(void) { \ - while(1); \ -} - -/* Exceptions */ -DEFAULT_IRQ_HANDLER(NMI_Handler) -DEFAULT_IRQ_HANDLER(HardFault_Handler) -DEFAULT_IRQ_HANDLER(MemManage_Handler) -DEFAULT_IRQ_HANDLER(BusFault_Handler) -DEFAULT_IRQ_HANDLER(UsageFault_Handler) -DEFAULT_IRQ_HANDLER(SecureFault_Handler) -DEFAULT_IRQ_HANDLER(SVC_Handler) -DEFAULT_IRQ_HANDLER(DebugMon_Handler) -DEFAULT_IRQ_HANDLER(PendSV_Handler) -DEFAULT_IRQ_HANDLER(SysTick_Handler) - -DEFAULT_IRQ_HANDLER(NONSEC_WATCHDOG_RESET_Handler) -DEFAULT_IRQ_HANDLER(NONSEC_WATCHDOG_Handler) -DEFAULT_IRQ_HANDLER(SLOWCLK_Timer_Handler) -DEFAULT_IRQ_HANDLER(TIMER0_Handler) -DEFAULT_IRQ_HANDLER(TIMER1_Handler) -DEFAULT_IRQ_HANDLER(TIMER2_Handler) -DEFAULT_IRQ_HANDLER(MPC_Handler) -DEFAULT_IRQ_HANDLER(PPC_Handler) -DEFAULT_IRQ_HANDLER(MSC_Handler) -DEFAULT_IRQ_HANDLER(BRIDGE_ERROR_Handler) -DEFAULT_IRQ_HANDLER(MGMT_PPU_Handler) -DEFAULT_IRQ_HANDLER(SYS_PPU_Handler) -DEFAULT_IRQ_HANDLER(CPU0_PPU_Handler) -DEFAULT_IRQ_HANDLER(DEBUG_PPU_Handler) -DEFAULT_IRQ_HANDLER(TIMER3_Handler) -DEFAULT_IRQ_HANDLER(CTI_REQ0_IRQHandler) -DEFAULT_IRQ_HANDLER(CTI_REQ1_IRQHandler) - -DEFAULT_IRQ_HANDLER(System_Timestamp_Counter_Handler) -DEFAULT_IRQ_HANDLER(UARTRX0_Handler) -DEFAULT_IRQ_HANDLER(UARTTX0_Handler) -DEFAULT_IRQ_HANDLER(UARTRX1_Handler) -DEFAULT_IRQ_HANDLER(UARTTX1_Handler) -DEFAULT_IRQ_HANDLER(UARTRX2_Handler) -DEFAULT_IRQ_HANDLER(UARTTX2_Handler) -DEFAULT_IRQ_HANDLER(UARTRX3_Handler) -DEFAULT_IRQ_HANDLER(UARTTX3_Handler) -DEFAULT_IRQ_HANDLER(UARTRX4_Handler) -DEFAULT_IRQ_HANDLER(UARTTX4_Handler) -DEFAULT_IRQ_HANDLER(UART0_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART1_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART2_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART3_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART4_Combined_Handler) -DEFAULT_IRQ_HANDLER(UARTOVF_Handler) -DEFAULT_IRQ_HANDLER(ETHERNET_Handler) -DEFAULT_IRQ_HANDLER(I2S_Handler) -DEFAULT_IRQ_HANDLER(TOUCH_SCREEN_Handler) -DEFAULT_IRQ_HANDLER(USB_Handler) -DEFAULT_IRQ_HANDLER(SPI_ADC_Handler) -DEFAULT_IRQ_HANDLER(SPI_SHIELD0_Handler) -DEFAULT_IRQ_HANDLER(SPI_SHIELD1_Handler) -DEFAULT_IRQ_HANDLER(ETHOS_U55_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_3_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_4_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_5_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_6_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_7_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_8_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_9_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_10_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_11_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_12_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_13_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_14_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_15_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_3_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_4_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_5_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_6_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_7_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_8_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_9_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_10_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_11_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_12_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_13_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_14_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_15_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_3_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_4_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_5_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_6_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_7_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_8_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_9_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_10_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_11_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_12_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_13_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_14_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_15_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_3_Handler) -DEFAULT_IRQ_HANDLER(UARTRX5_Handler) -DEFAULT_IRQ_HANDLER(UARTTX5_Handler) -DEFAULT_IRQ_HANDLER(UART5_Handler) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const pFunc __VECTOR_TABLE[496]; - const pFunc __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = { - (pFunc)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14: NMI Handler */ - HardFault_Handler, /* -13: Hard Fault Handler */ - MemManage_Handler, /* -12: MPU Fault Handler */ - BusFault_Handler, /* -11: Bus Fault Handler */ - UsageFault_Handler, /* -10: Usage Fault Handler */ - SecureFault_Handler, /* -9: Secure Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5: SVCall Handler */ - DebugMon_Handler, /* -4: Debug Monitor Handler */ - 0, /* Reserved */ - PendSV_Handler, /* -2: PendSV Handler */ - SysTick_Handler, /* -1: SysTick Handler */ - - NONSEC_WATCHDOG_RESET_Handler, /* 0: Non-Secure Watchdog Reset Handler */ - NONSEC_WATCHDOG_Handler, /* 1: Non-Secure Watchdog Handler */ - SLOWCLK_Timer_Handler, /* 2: SLOWCLK Timer Handler */ - TIMER0_Handler, /* 3: TIMER 0 Handler */ - TIMER1_Handler, /* 4: TIMER 1 Handler */ - TIMER2_Handler, /* 5: TIMER 2 Handler */ - 0, /* 6: Reserved */ - 0, /* 7: Reserved */ - 0, /* 8: Reserved */ - MPC_Handler, /* 9: MPC Combined (Secure) Handler */ - PPC_Handler, /* 10: PPC Combined (Secure) Handler */ - MSC_Handler, /* 11: MSC Combined (Secure) Handler */ - BRIDGE_ERROR_Handler, /* 12: Bridge Error (Secure) Handler */ - 0, /* 13: Reserved */ - MGMT_PPU_Handler, /* 14: MGMT PPU Handler */ - SYS_PPU_Handler, /* 15: SYS PPU Handler */ - CPU0_PPU_Handler, /* 16: CPU0 PPU Handler */ - 0, /* 17: Reserved */ - 0, /* 18: Reserved */ - 0, /* 19: Reserved */ - 0, /* 20: Reserved */ - 0, /* 21: Reserved */ - 0, /* 22: Reserved */ - 0, /* 23: Reserved */ - 0, /* 24: Reserved */ - 0, /* 25: Reserved */ - DEBUG_PPU_Handler, /* 26: DEBUG PPU Handler */ - TIMER3_Handler, /* 27: TIMER 3 Handler */ - CTI_REQ0_IRQHandler, /* 28: CTI request 0 IRQ Handler */ - CTI_REQ1_IRQHandler, /* 29: CTI request 1 IRQ Handler */ - 0, /* 30: Reserved */ - 0, /* 31: Reserved */ - - /* External interrupts */ - System_Timestamp_Counter_Handler, /* 32: System timestamp counter Handler */ - UARTRX0_Handler, /* 33: UART 0 RX Handler */ - UARTTX0_Handler, /* 34: UART 0 TX Handler */ - UARTRX1_Handler, /* 35: UART 1 RX Handler */ - UARTTX1_Handler, /* 36: UART 1 TX Handler */ - UARTRX2_Handler, /* 37: UART 2 RX Handler */ - UARTTX2_Handler, /* 38: UART 2 TX Handler */ - UARTRX3_Handler, /* 39: UART 3 RX Handler */ - UARTTX3_Handler, /* 40: UART 3 TX Handler */ - UARTRX4_Handler, /* 41: UART 4 RX Handler */ - UARTTX4_Handler, /* 42: UART 4 TX Handler */ - UART0_Combined_Handler, /* 43: UART 0 Combined Handler */ - UART1_Combined_Handler, /* 44: UART 1 Combined Handler */ - UART2_Combined_Handler, /* 45: UART 2 Combined Handler */ - UART3_Combined_Handler, /* 46: UART 3 Combined Handler */ - UART4_Combined_Handler, /* 47: UART 4 Combined Handler */ - UARTOVF_Handler, /* 48: UART 0, 1, 2, 3, 4 & 5 Overflow Handler */ - ETHERNET_Handler, /* 49: Ethernet Handler */ - I2S_Handler, /* 50: Audio I2S Handler */ - TOUCH_SCREEN_Handler, /* 51: Touch Screen Handler */ - USB_Handler, /* 52: USB Handler */ - SPI_ADC_Handler, /* 53: SPI ADC Handler */ - SPI_SHIELD0_Handler, /* 54: SPI (Shield 0) Handler */ - SPI_SHIELD1_Handler, /* 55: SPI (Shield 0) Handler */ - ETHOS_U55_Handler, /* 56: Ethos-U55 Handler */ - 0, /* 57: Reserved */ - 0, /* 58: Reserved */ - 0, /* 59: Reserved */ - 0, /* 60: Reserved */ - 0, /* 61: Reserved */ - 0, /* 62: Reserved */ - 0, /* 63: Reserved */ - 0, /* 64: Reserved */ - 0, /* 65: Reserved */ - 0, /* 66: Reserved */ - 0, /* 67: Reserved */ - 0, /* 68: Reserved */ - GPIO0_Combined_Handler, /* 69: GPIO 0 Combined Handler */ - GPIO1_Combined_Handler, /* 70: GPIO 1 Combined Handler */ - GPIO2_Combined_Handler, /* 71: GPIO 2 Combined Handler */ - GPIO3_Combined_Handler, /* 72: GPIO 3 Combined Handler */ - GPIO0_0_Handler, /* 73: GPIO0 Pin 0 Handler */ - GPIO0_1_Handler, /* 74: GPIO0 Pin 1 Handler */ - GPIO0_2_Handler, /* 75: GPIO0 Pin 2 Handler */ - GPIO0_3_Handler, /* 76: GPIO0 Pin 3 Handler */ - GPIO0_4_Handler, /* 77: GPIO0 Pin 4 Handler */ - GPIO0_5_Handler, /* 78: GPIO0 Pin 5 Handler */ - GPIO0_6_Handler, /* 79: GPIO0 Pin 6 Handler */ - GPIO0_7_Handler, /* 80: GPIO0 Pin 7 Handler */ - GPIO0_8_Handler, /* 81: GPIO0 Pin 8 Handler */ - GPIO0_9_Handler, /* 82: GPIO0 Pin 9 Handler */ - GPIO0_10_Handler, /* 83: GPIO0 Pin 10 Handler */ - GPIO0_11_Handler, /* 84: GPIO0 Pin 11 Handler */ - GPIO0_12_Handler, /* 85: GPIO0 Pin 12 Handler */ - GPIO0_13_Handler, /* 86: GPIO0 Pin 13 Handler */ - GPIO0_14_Handler, /* 87: GPIO0 Pin 14 Handler */ - GPIO0_15_Handler, /* 88: GPIO0 Pin 15 Handler */ - GPIO1_0_Handler, /* 89: GPIO1 Pin 0 Handler */ - GPIO1_1_Handler, /* 90: GPIO1 Pin 1 Handler */ - GPIO1_2_Handler, /* 91: GPIO1 Pin 2 Handler */ - GPIO1_3_Handler, /* 92: GPIO1 Pin 3 Handler */ - GPIO1_4_Handler, /* 93: GPIO1 Pin 4 Handler */ - GPIO1_5_Handler, /* 94: GPIO1 Pin 5 Handler */ - GPIO1_6_Handler, /* 95: GPIO1 Pin 6 Handler */ - GPIO1_7_Handler, /* 96: GPIO1 Pin 7 Handler */ - GPIO1_8_Handler, /* 97: GPIO1 Pin 8 Handler */ - GPIO1_9_Handler, /* 98: GPIO1 Pin 9 Handler */ - GPIO1_10_Handler, /* 99: GPIO1 Pin 10 Handler */ - GPIO1_11_Handler, /* 100: GPIO1 Pin 11 Handler */ - GPIO1_12_Handler, /* 101: GPIO1 Pin 12 Handler */ - GPIO1_13_Handler, /* 102: GPIO1 Pin 13 Handler */ - GPIO1_14_Handler, /* 103: GPIO1 Pin 14 Handler */ - GPIO1_15_Handler, /* 104: GPIO1 Pin 15 Handler */ - GPIO2_0_Handler, /* 105: GPIO2 Pin 0 Handler */ - GPIO2_1_Handler, /* 106: GPIO2 Pin 1 Handler */ - GPIO2_2_Handler, /* 107: GPIO2 Pin 2 Handler */ - GPIO2_3_Handler, /* 108: GPIO2 Pin 3 Handler */ - GPIO2_4_Handler, /* 109: GPIO2 Pin 4 Handler */ - GPIO2_5_Handler, /* 110: GPIO2 Pin 5 Handler */ - GPIO2_6_Handler, /* 111: GPIO2 Pin 6 Handler */ - GPIO2_7_Handler, /* 112: GPIO2 Pin 7 Handler */ - GPIO2_8_Handler, /* 113: GPIO2 Pin 8 Handler */ - GPIO2_9_Handler, /* 114: GPIO2 Pin 9 Handler */ - GPIO2_10_Handler, /* 115: GPIO2 Pin 10 Handler */ - GPIO2_11_Handler, /* 116: GPIO2 Pin 11 Handler */ - GPIO2_12_Handler, /* 117: GPIO2 Pin 12 Handler */ - GPIO2_13_Handler, /* 118: GPIO2 Pin 13 Handler */ - GPIO2_14_Handler, /* 119: GPIO2 Pin 14 Handler */ - GPIO2_15_Handler, /* 120: GPIO2 Pin 15 Handler */ - GPIO3_0_Handler, /* 121: GPIO3 Pin 0 Handler */ - GPIO3_1_Handler, /* 122: GPIO3 Pin 1 Handler */ - GPIO3_2_Handler, /* 123: GPIO3 Pin 2 Handler */ - GPIO3_3_Handler, /* 124: GPIO3 Pin 3 Handler */ - UARTRX5_Handler, /* 125: UART 5 RX Interrupt */ - UARTTX5_Handler, /* 126: UART 5 TX Interrupt */ - UART5_Handler, /* 127: UART 5 combined Interrupt */ - 0, /* 128: Reserved */ - 0, /* 129: Reserved */ - 0, /* 130: Reserved */ -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -void Reset_Handler(void) -{ - __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); - - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/micro_time.cc b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/micro_time.cc deleted file mode 100644 index 023ac6d..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/micro_time.cc +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright 2021 The TensorFlow Authors. All Rights Reserved. - -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 - - http://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. -==============================================================================*/ - -#include "tensorflow/lite/micro/micro_time.h" - -// DWT (Data Watchpoint and Trace) registers, only exists on ARM Cortex with a -// DWT unit. -#define KIN1_DWT_CONTROL (*((volatile uint32_t*)0xE0001000)) -/*!< DWT Control register */ - -// DWT Control register. -#define KIN1_DWT_CYCCNTENA_BIT (1UL << 0) - -// CYCCNTENA bit in DWT_CONTROL register. -#define KIN1_DWT_CYCCNT (*((volatile uint32_t*)0xE0001004)) - -// DWT Cycle Counter register. -#define KIN1_DEMCR (*((volatile uint32_t*)0xE000EDFC)) - -// DEMCR: Debug Exception and Monitor Control Register. -#define KIN1_TRCENA_BIT (1UL << 24) - -#define KIN1_LAR (*((volatile uint32_t*)0xE0001FB0)) - -#define KIN1_DWT_CONTROL (*((volatile uint32_t*)0xE0001000)) - -// Unlock access to DWT (ITM, etc.)registers. -#define KIN1_UnlockAccessToDWT() KIN1_LAR = 0xC5ACCE55; - -// TRCENA: Enable trace and debug block DEMCR (Debug Exception and Monitor -// Control Register. -#define KIN1_InitCycleCounter() KIN1_DEMCR |= KIN1_TRCENA_BIT - -#define KIN1_ResetCycleCounter() KIN1_DWT_CYCCNT = 0 -#define KIN1_EnableCycleCounter() KIN1_DWT_CONTROL |= KIN1_DWT_CYCCNTENA_BIT -#define KIN1_DisableCycleCounter() KIN1_DWT_CONTROL &= ~KIN1_DWT_CYCCNTENA_BIT -#define KIN1_GetCycleCounter() KIN1_DWT_CYCCNT - -namespace tflite { - -int32_t ticks_per_second() { return 0; } - -int32_t GetCurrentTimeTicks() { - static bool is_initialized = false; - if (!is_initialized) { - KIN1_UnlockAccessToDWT(); - KIN1_InitCycleCounter(); - KIN1_ResetCycleCounter(); - KIN1_EnableCycleCounter(); - is_initialized = true; - } - return KIN1_GetCycleCounter(); -} - -} // namespace tflite diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/Pre_Include_Global.h b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/Pre_Include_Global.h deleted file mode 100644 index 6234fa2..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/Pre_Include_Global.h +++ /dev/null @@ -1,18 +0,0 @@ - -/* - * Auto generated Run-Time-Environment Configuration File - * *** Do not modify ! *** - * - * Project: 'template_Corstone300' - * Target: 'template_Corstone300' - */ - -#ifndef PRE_INCLUDE_GLOBAL_H -#define PRE_INCLUDE_GLOBAL_H - -/* tensorflow::Machine Learning:TensorFlow:Kernel:CMSIS-NN:0.1.20210416 */ -// enabling global pre includes - #define TF_LITE_STATIC_MEMORY 1 - - -#endif /* PRE_INCLUDE_GLOBAL_H */ diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/RTE_Components.h b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/RTE_Components.h deleted file mode 100644 index 452f25e..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/RTE_Components.h +++ /dev/null @@ -1,35 +0,0 @@ - -/* - * Auto generated Run-Time-Environment Configuration File - * *** Do not modify ! *** - * - * Project: 'template_Corstone300' - * Target: 'template_Corstone300' - */ - -#ifndef RTE_COMPONENTS_H -#define RTE_COMPONENTS_H - - -/* - * Define the Device Header File: - */ -#define CMSIS_device_header "SSE300MPS3.h" - -/* ARM::CMSIS Driver:USART:1.0.0 */ -#define RTE_Drivers_USART -/* tensorflow::Data Exchange:Serialization:flatbuffers:tensorflow:1.12.0 */ -#define RTE_DataExchange_Serialization_flatbuffers /* flatbuffers */ -/* tensorflow::Data Processing:Math:gemmlowp fixed-point:tensorflow:1.0.0 */ -#define RTE_DataExchange_Math_gemmlowp /* gemmlowp */ -/* tensorflow::Data Processing:Math:kissfft:tensorflow:1.4.5 */ -#define RTE_DataExchange_Math_kissfft /* kissfft */ -/* tensorflow::Data Processing:Math:ruy:tensorflow:1.12.0 */ -#define RTE_DataProcessing_Math_ruy /* ruy */ -/* tensorflow::Machine Learning:TensorFlow:Kernel:CMSIS-NN:0.1.20210416 */ -#define RTE_ML_TF_LITE /* TF */ -/* tensorflow::Machine Learning:TensorFlow:Testing:0.1.20210416 */ -#define RTE_ML_TF_LITE /* TF */ - - -#endif /* RTE_COMPONENTS_H */ diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj deleted file mode 100644 index 7e3dd75..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj +++ /dev/null @@ -1,85 +0,0 @@ - - - - - UnitTestTemplate - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _file_block_xml_ - - - - - diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/packlist b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/packlist deleted file mode 100644 index c9c5636..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/packlist +++ /dev/null @@ -1 +0,0 @@ -https://keilpack.azureedge.net/pack/ARM.V2M_MPS3_SSE_300_BSP.1.1.0.pack diff --git a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/platform_setup.c b/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/platform_setup.c deleted file mode 100644 index 279de43..0000000 --- a/tensorflow-test/templates/CMSIS-NN/ARMCLANG/SSE-300-MPS3/platform_setup.c +++ /dev/null @@ -1,10 +0,0 @@ - - -int platform_setup (void) -{ - serial_init(); - - -} - - diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Include/led_port.h b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Include/led_port.h deleted file mode 100644 index e9e6e28..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Include/led_port.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2017 Arm Limited - * - * 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 - * - * http://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. - */ - -#ifndef __LED_PORT_H__ -#define __LED_PORT_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* The goal of this file is to create a common LED API for different targets in order - * create common example applications. - */ - -/* Note: Currently this API doesn't handle the case when a peripheral is - * mapped to secure and non-secure region as well, but could be extended - * to select secure or non-secure one. - */ - -/** - * \brief Get the number of bits of LED port, - * in the current platform, that can be - * read and written in one chunk. - * - * \return Available number of bits of LED port. - */ -unsigned int get_led_port_bit_length(void); - -/** - * \brief Initializes LED device if needed - */ -void led_port_init(void); - -/** - * \brief Set the value of the LED port. - * - * \param[in] led Value of the LED port will be set. - * Every bit represents one physical LED. - * - * \return 0 if succeeded, 1 otherwise - */ -unsigned int set_led_port(unsigned int led_mask); - -/** - * \brief Get the value of the LED port. - * - * \return Value of the LED port - * Every bit represents one physical LED. - */ -unsigned int get_led_port(void); - - -#ifdef __cplusplus -} -#endif -#endif /* __LED_PORT_H__ */ diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Include/serial.h b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Include/serial.h deleted file mode 100644 index 77f15a4..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Include/serial.h +++ /dev/null @@ -1,33 +0,0 @@ -/* -* Copyright (c) 2017 Arm Limited -* -* 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 -* -* http://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. -*/ - -#ifndef __SERIAL_H__ -#define __SERIAL_H__ - - -#include - -/** - * \brief Initializes default UART device - */ -void serial_init(void); - -/** - * \brief Prints a string through the default UART device - */ -void serial_print(char *str); - -#endif /* __SERIAL_H__ */ diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Include/timeout.h b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Include/timeout.h deleted file mode 100644 index a9931ae..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Include/timeout.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2017-2019 Arm Limited - * - * 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 - * - * http://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. - */ - -#ifndef __TIMEOUT_H__ -#define __TIMEOUT_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include "device_definition.h" - -/* Structure to maintain elapsed time */ -struct timeout_t { - void *dev_ptr; - bool is_initialized; -}; - -/** - * \brief Initializes timout structure - * - * \param[in] timeout Pointer to the timeout structure - * \param[in] delay Delay in ms to check timeout against - * - * \return Returns true if the delay value was set, - * false otherwise - */ -bool timeout_init(struct timeout_t *timeout, uint32_t delay); - -/** - * \brief Checks if the given time has passed or not - * - * \param[in] timer Pointer to the timer structure - * - * \details This function compares the timestamp stored in the timeout structure - * and the current time. If the difference is more than the given delay, - * the current time is stored and will be used for the next comparison - * - * \return 1 if the given time has passed, 0 if not - */ -bool timeout_delay_is_elapsed(struct timeout_t *timeout); - -/** - * \brief Uninitializes timout structure and stops timer operation. - * - * \param[in] timeout Pointer to the timeout structure - */ -void timeout_uninit(struct timeout_t *timeout); - -/** - * \brief Waits the specified time in milliseconds. - * - * \param[in] ms Time to wait in milliseconds - */ -void wait_ms(uint32_t ms); - -#ifdef __cplusplus -} -#endif -#endif /* __TIMEOUT_H__ */ diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Source/led_port.c b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Source/led_port.c deleted file mode 100644 index 109495a..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Source/led_port.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2019-2020 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#include -#include "led_port.h" -#include "arm_mps3_io_drv.h" -#include "device_cfg.h" -#include "device_definition.h" - -#define MAX_PIN_FPGAIO_LED 10UL -#define MAX_LED_MASK ((1U << MAX_PIN_FPGAIO_LED) - 1) -#define BIT_VALUE(v, bit) (((v) >> (bit) & 1UL)) - -static unsigned int led_status; - -unsigned int get_led_port_bit_length(void) -{ - return MAX_PIN_FPGAIO_LED; -} - -void led_port_init(void) -{ - /* Turn off all LEDs at init */ - arm_mps3_io_write_leds(&MPS3_IO_DEV, ARM_MPS3_IO_ACCESS_PORT, 0, 0); - led_status = 0x0; -} - -unsigned int set_led_port(unsigned int led_mask) -{ - uint8_t i; - uint32_t value; - - if (led_mask > MAX_LED_MASK) { - return 1; - } - - /* Set the LEDs to new value one by one */ - for (i = 0; i < MAX_PIN_FPGAIO_LED; i++) { - if (BIT_VALUE((led_mask ^ led_status), i)) { - /* led pin i has new value */ - value = BIT_VALUE(led_mask, i); - arm_mps3_io_write_leds(&MPS3_IO_DEV, - ARM_MPS3_IO_ACCESS_PIN, - i, value); - } - } - led_status = led_mask; - - return 0; -} - -/** - * \brief Get the value of the LED port. - * - * \return Value of the LED port - * Every bit represents one physical LED. - */ -unsigned int get_led_port(void) -{ - return arm_mps3_io_read_leds(&MPS3_IO_DEV, - ARM_MPS3_IO_ACCESS_PORT, - 0); -} diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Source/serial.c b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Source/serial.c deleted file mode 100644 index 475f4e3..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Source/serial.c +++ /dev/null @@ -1,55 +0,0 @@ -/* -* Copyright (c) 2017-2020 Arm Limited -* -* 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 -* -* http://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. -*/ - -#include -#include -#include "device_cfg.h" -#include "Driver_USART.h" -#include "serial.h" - -extern ARM_DRIVER_USART Driver_USART0; - -void serial_init(void) -{ - Driver_USART0.Initialize(NULL); - Driver_USART0.Control(ARM_USART_MODE_ASYNCHRONOUS, DEFAULT_UART_BAUDRATE); -} - -void serial_print(char *str) -{ - (void)Driver_USART0.Send(str, strlen(str)); -} - -/* Struct FILE is implemented in stdio.h. Used to redirect printf to UART0 */ -//FILE __stdout; -/* Redirects armclang printf to UART */ -int stdout_putchar(int ch) -{ - if (Driver_USART0.Send(&ch, 1) == ARM_DRIVER_OK) { - return ch; - } - return EOF; -} - -/* Redirects gcc printf to UART0 */ -int _write(int fd, char *str, int len) -{ - if (Driver_USART0.Send(str, len) == ARM_DRIVER_OK) { - return len; - } - return 0; -} - diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Source/systimer_armv8-m_timeout.c b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Source/systimer_armv8-m_timeout.c deleted file mode 100644 index dc79876..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/API/Source/systimer_armv8-m_timeout.c +++ /dev/null @@ -1,73 +0,0 @@ -/* -* Copyright (c) 2019-2020 Arm Limited -* -* 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 -* -* http://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. -*/ - -#include "timeout.h" -#include "device_cfg.h" -#include "systimer_armv8-m_drv.h" -#include "syscounter_armv8-m_cntrl_drv.h" -#include "platform_description.h" - -#define MS_TO_TICK(ms) ((ms) * (SystemCoreClock / 1000)) - -/* Systimer is configured over the 32-bit down-counting Timer view, so maximum - * delay is defined by its bit width. */ -#define MAX_DELAY_MS (UINT32_MAX / \ - (SystemCoreClock / 1000)) - -static uint32_t delay_in_tick; - -bool timeout_init(struct timeout_t *timeout, uint32_t delay) -{ - struct systimer_armv8_m_dev_t *dev; - - if (!timeout || delay > MAX_DELAY_MS) { - return false; - } - - if (timeout->is_initialized) { - return false; - } - - syscounter_armv8_m_cntrl_init(&SYSCOUNTER_CNTRL_ARMV8_M_DEV); - - dev = &SYSTIMER0_ARMV8_M_DEV; - systimer_armv8_m_init(dev); - - delay_in_tick = MS_TO_TICK(delay); - systimer_armv8_m_set_timer_value(dev, delay_in_tick); - - timeout->dev_ptr = (void *)dev; - timeout->is_initialized = true; - - return true; -} - -bool timeout_delay_is_elapsed(struct timeout_t *timeout) -{ - struct systimer_armv8_m_dev_t* dev; - - if (!timeout || !timeout->is_initialized) { - return false; - } - - dev = (struct systimer_armv8_m_dev_t*)timeout->dev_ptr; - if (systimer_armv8_m_is_interrupt_asserted(dev)) { - systimer_armv8_m_set_timer_value(dev, delay_in_tick); - return true; - } - - return false; -} diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/RTE_Device.h b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/RTE_Device.h deleted file mode 100644 index 8de4d3a..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/RTE_Device.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2019-2020 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::Drivers:USART -#define RTE_USART0 1 -// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART0] - -// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::Drivers:USART -#define RTE_USART1 1 -// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART1] - -// MPC (Memory Protection Controller) [Driver_ISRAM0_MPC] -// Configuration settings for Driver_ISRAM0_MPC in component ::Drivers:MPC -#define RTE_ISRAM0_MPC 1 -// MPC (Memory Protection Controller) [Driver_ISRAM0_MPC] - -// MPC (Memory Protection Controller) [Driver_ISRAM1_MPC] -// Configuration settings for Driver_ISRAM1_MPC in component ::Drivers:MPC -#define RTE_ISRAM1_MPC 1 -// MPC (Memory Protection Controller) [Driver_ISRAM1_MPC] - -// MPC (Memory Protection Controller) [Driver_SRAM_MPC] -// Configuration settings for Driver_SRAM_MPC in component ::Drivers:MPC -#define RTE_SRAM_MPC 1 -// MPC (Memory Protection Controller) [Driver_SRAM_MPC] - -// MPC (Memory Protection Controller) [Driver_QSPI_MPC] -// Configuration settings for Driver_QSPI_MPC in component ::Drivers:MPC -#define RTE_QSPI_MPC 1 -// MPC (Memory Protection Controller) [Driver_QSPI_MPC] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_MAIN0] -// Configuration settings for Driver_PPC_SSE300_MAIN0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_MAIN0 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_MAIN0] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_MAIN_EXP0] -// Configuration settings for Driver_PPC_SSE300_MAIN_EXP0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_MAIN_EXP0 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_MAIN_EXP0] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_MAIN_EXP1] -// Configuration settings for Driver_PPC_SSE300_MAIN_EXP1 in component ::Drivers:PPC -#define RTE_PPC_SSE300_MAIN_EXP1 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_MAIN_EXP1] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH0] -// Configuration settings for Driver_PPC_SSE300_PERIPH0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH0 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH0] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH1] -// Configuration settings for Driver_PPC_SSE300_PERIPH1 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH1 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH1] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH_EXP0] -// Configuration settings for Driver_PPC_SSE300_PERIPH_EXP0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH_EXP0 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH_EXP0] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH_EXP1] -// Configuration settings for Driver_PPC_SSE300_PERIPH_EXP1 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH_EXP1 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH_EXP1] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH_EXP2] -// Configuration settings for Driver_PPC_SSE300_PERIPH_EXP2 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH_EXP2 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH_EXP2] - -// Flash device emulated by SRAM [Driver_Flash0] -// Configuration settings for Driver_Flash0 in component ::Drivers:Flash -#define RTE_FLASH0 1 -// Flash device emulated by SRAM [Driver_Flash0] - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h deleted file mode 100644 index 5ad6fb6..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2019-2020 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#ifndef __CMSIS_DRIVER_CONFIG_H__ -#define __CMSIS_DRIVER_CONFIG_H__ - -#include "system_core_init.h" -#include "device_cfg.h" -#include "device_definition.h" -#include "platform_base_address.h" - -#endif /* __CMSIS_DRIVER_CONFIG_H__ */ diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/device_cfg.h b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/device_cfg.h deleted file mode 100644 index d3591f2..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/device_cfg.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (c) 2020-2021 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#ifndef __DEVICE_CFG_H__ -#define __DEVICE_CFG_H__ - -/** - * \file device_cfg.h - * \brief Configuration file native driver re-targeting - * - * \details This file can be used to add native driver specific macro - * definitions to select which peripherals are available in the build. - * - * This is a default device configuration file with all peripherals enabled. - */ - -/* Secure only peripheral configuration */ - -/* ARM MPS3 IO SCC */ -#define MPS3_IO_S -#define MPS3_IO_DEV MPS3_IO_DEV_S - -/* ARM UART Controller PL011 */ -#define UART0_CMSDK_S -#define UART0_CMSDK_DEV UART0_CMSDK_DEV_S -#define UART1_CMSDK_S -#define UART1_CMSDK_DEV UART1_CMSDK_DEV_S - -#define DEFAULT_UART_BAUDRATE 115200U - -/* To be used as CODE and DATA sram */ -#define MPC_ISRAM0_S -#define MPC_ISRAM0_DEV MPC_ISRAM0_DEV_S - -#define MPC_ISRAM1_S -#define MPC_ISRAM1_DEV MPC_ISRAM0_DEV_S - -#define MPC_SRAM_S -#define MPC_SRAM_DEV MPC_SRAM_DEV_S - -#define MPC_QSPI_S -#define MPC_QSPI_DEV MPC_QSPI_DEV_S - -/** System Counter Armv8-M */ -#define SYSCOUNTER_CNTRL_ARMV8_M_S -#define SYSCOUNTER_CNTRL_ARMV8_M_DEV SYSCOUNTER_CNTRL_ARMV8_M_DEV_S - -#define SYSCOUNTER_READ_ARMV8_M_S -#define SYSCOUNTER_READ_ARMV8_M_DEV SYSCOUNTER_READ_ARMV8_M_DEV_S -/** - * Arbitrary scaling values for test purposes - */ -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE0_INT 1u -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE0_FRACT 0u -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE1_INT 1u -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE1_FRACT 0u - -/* System timer */ -#define SYSTIMER0_ARMV8_M_S -#define SYSTIMER0_ARMV8_M_DEV SYSTIMER0_ARMV8_M_DEV_S -#define SYSTIMER1_ARMV8_M_S -#define SYSTIMER1_ARMV8_M_DEV SYSTIMER1_ARMV8_M_DEV_S -#define SYSTIMER2_ARMV8_M_S -#define SYSTIMER2_ARMV8_M_DEV SYSTIMER2_ARMV8_M_DEV_S -#define SYSTIMER3_ARMV8_M_S -#define SYSTIMER3_ARMV8_M_DEV SYSTIMER3_ARMV8_M_DEV_S - -#define SYSTIMER0_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) -#define SYSTIMER1_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) -#define SYSTIMER2_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) -#define SYSTIMER3_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) - -/* CMSDK GPIO driver structures */ -#define GPIO0_CMSDK_S -#define GPIO0_CMSDK_DEV GPIO0_CMSDK_DEV_S -#define GPIO1_CMSDK_S -#define GPIO1_CMSDK_DEV GPIO1_CMSDK_DEV_S -#define GPIO2_CMSDK_S -#define GPIO2_CMSDK_DEV GPIO2_CMSDK_DEV_S -#define GPIO3_CMSDK_S -#define GPIO3_CMSDK_DEV GPIO3_CMSDK_DEV_S - -/* ARM MPS3 IO FPGAIO driver structures */ -#define ARM_MPS3_IO_FPGAIO_S -#define ARM_MPS3_IO_FPGAIO_DEV ARM_MPS3_IO_FPGAIO_DEV_S - -/* System Watchdogs */ -#define SYSWDOG_ARMV8_M_S -#define SYSWDOG_ARMV8_M_DEV SYSWDOG_ARMV8_M_DEV_S - -/* ARM MPC SIE 300 driver structures */ -#define MPC_VM0_S -#define MPC_VM0_DEV MPC_VM0_DEV_S -#define MPC_VM1_S -#define MPC_VM1_DEV MPC_VM1_DEV_S -#define MPC_SSRAM2_S -#define MPC_SSRAM2_DEV MPC_SSRAM2_DEV_S -#define MPC_SSRAM3_S -#define MPC_SSRAM3_DEV MPC_SSRAM3_DEV_S - -/* ARM PPC driver structures */ -#define PPC_SSE300_MAIN0_S -#define PPC_SSE300_MAIN0_DEV PPC_SSE300_MAIN0_DEV_S -#define PPC_SSE300_MAIN_EXP0_S -#define PPC_SSE300_MAIN_EXP0_DEV PPC_SSE300_MAIN_EXP0_DEV_S -#define PPC_SSE300_MAIN_EXP1_S -#define PPC_SSE300_MAIN_EXP1_DEV PPC_SSE300_MAIN_EXP1_DEV_S -#define PPC_SSE300_MAIN_EXP2_S -#define PPC_SSE300_MAIN_EXP2_DEV PPC_SSE300_MAIN_EXP2_DEV_S -#define PPC_SSE300_MAIN_EXP3_S -#define PPC_SSE300_MAIN_EXP3_DEV PPC_SSE300_MAIN_EXP3_DEV_S -#define PPC_SSE300_PERIPH0_S -#define PPC_SSE300_PERIPH0_DEV PPC_SSE300_PERIPH0_DEV_S -#define PPC_SSE300_PERIPH1_S -#define PPC_SSE300_PERIPH1_DEV PPC_SSE300_PERIPH1_DEV_S -#define PPC_SSE300_PERIPH_EXP0_S -#define PPC_SSE300_PERIPH_EXP0_DEV PPC_SSE300_PERIPH_EXP0_DEV_S -#define PPC_SSE300_PERIPH_EXP1_S -#define PPC_SSE300_PERIPH_EXP1_DEV PPC_SSE300_PERIPH_EXP1_DEV_S -#define PPC_SSE300_PERIPH_EXP2_S -#define PPC_SSE300_PERIPH_EXP2_DEV PPC_SSE300_PERIPH_EXP2_DEV_S -#define PPC_SSE300_PERIPH_EXP3_S -#define PPC_SSE300_PERIPH_EXP3_DEV PPC_SSE300_PERIPH_EXP3_DEV_S - -/* ARM SPI PL022 */ -/* Invalid device stubs are not defined */ -#define DEFAULT_SPI_SPEED_HZ 4000000U /* 4MHz */ -#define SPI1_PL022_S -#define SPI1_PL022_DEV SPI1_PL022_DEV_S - - -#endif /* __DEVICE_CFG_H__ */ \ No newline at end of file diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct deleted file mode 100644 index f289ee3..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct +++ /dev/null @@ -1,78 +0,0 @@ -#! armclang --target=arm-arm-none-eabi -mcpu=cortex-m55 -E -xc - -;/* -; * Copyright (c) 2018-2021 Arm Limited. All rights reserved. -; * -; * 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 -; * -; * http://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. -; * -; */ - -#include "region_defs.h" - -LR_CODE S_CODE_START { - ER_CODE S_CODE_START { - *.o (RESET +First) - .ANY (+RO) - } - - /* - * Place the CMSE Veneers (containing the SG instruction) after the code, in - * a separate 32 bytes aligned region so that the SAU can programmed to just - * set this region as Non-Secure Callable. The maximum size of this - * executable region makes it only used the space left over by the ER_CODE - * region so that you can rely on code+veneer size combined will not exceed - * the S_CODE_SIZE value. We also substract from the available space the - * area used to align this section on 32 bytes boundary (for SAU conf). - */ - ER_CODE_CMSE_VENEER +0 ALIGN 32 { - *(Veneer$$CMSE) - } - /* - * This dummy region ensures that the next one will be aligned on a 32 bytes - * boundary, so that the following region will not be mistakenly configured - * as Non-Secure Callable by the SAU. - */ - ER_CODE_CMSE_VENEER_DUMMY +0 ALIGN 32 EMPTY 0 {} - - /* This empty, zero long execution region is here to mark the limit address - * of the last execution region that is allocated in SRAM. - */ - CODE_WATERMARK +0 EMPTY 0x0 { - } - /* Make sure that the sections allocated in the SRAM does not exceed the - * size of the SRAM available. - */ - ScatterAssert(ImageLimit(CODE_WATERMARK) <= S_CODE_START + S_CODE_SIZE) - - ER_DATA S_DATA_START { - .ANY (+ZI +RW) - } - - #if HEAP_SIZE > 0 - ARM_LIB_HEAP +0 ALIGN 8 EMPTY HEAP_SIZE { ; Reserve empty region for heap - } - #endif - - ARM_LIB_STACK +0 ALIGN 32 EMPTY STACK_SIZE { ; Reserve empty region for stack - } - - /* This empty, zero long execution region is here to mark the limit address - * of the last execution region that is allocated in SRAM. - */ - SRAM_WATERMARK +0 EMPTY 0x0 { - } - /* Make sure that the sections allocated in the SRAM does not exceed the - * size of the SRAM available. - */ - ScatterAssert(ImageLimit(SRAM_WATERMARK) <= S_DATA_START + S_DATA_SIZE) -} diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/platform_base_address.h b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/platform_base_address.h deleted file mode 100644 index c5c3ee7..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/platform_base_address.h +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright (c) 2019-2021 Arm Limited - * - * 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 - * - * http://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. - */ - -/** - * \file platform_base_address.h - * \brief This file defines all the peripheral base addresses for MPS3 SSE-300 + - * Ethos-U55 AN547 platform. - */ - -#ifndef __PLATFORM_BASE_ADDRESS_H__ -#define __PLATFORM_BASE_ADDRESS_H__ - -/* ======= Defines peripherals memory map addresses ======= */ -/* Non-secure memory map addresses */ -#define ITCM_BASE_NS 0x00000000 /* Instruction TCM Non-Secure base address */ -#define SRAM_BASE_NS 0x01000000 /* CODE SRAM Non-Secure base address */ -#define DTCM0_BASE_NS 0x20000000 /* Data TCM block 0 Non-Secure base address */ -#define DTCM1_BASE_NS 0x20020000 /* Data TCM block 1 Non-Secure base address */ -#define DTCM2_BASE_NS 0x20040000 /* Data TCM block 2 Non-Secure base address */ -#define DTCM3_BASE_NS 0x20060000 /* Data TCM block 3 Non-Secure base address */ -#define ISRAM0_BASE_NS 0x21000000 /* Internal SRAM Area Non-Secure base address */ -#define ISRAM1_BASE_NS 0x21200000 /* Internal SRAM Area Non-Secure base address */ -#define QSPI_SRAM_BASE_NS 0x28000000 /* QSPI SRAM Non-Secure base address */ -/* Non-Secure Subsystem peripheral region */ -#define CPU0_PWRCTRL_BASE_NS 0x40012000 /* CPU 0 Power Control Block Non-Secure base address */ -#define CPU0_IDENTITY_BASE_NS 0x4001F000 /* CPU 0 Identity Block Non-Secure base address */ -#define SSE300_NSACFG_BASE_NS 0x40080000 /* SSE-300 Non-Secure Access Configuration Register Block Non-Secure base address */ -/* Non-Secure MSTEXPPILL Peripheral region */ -#define GPIO0_CMSDK_BASE_NS 0x41100000 /* GPIO 0 Non-Secure base address */ -#define GPIO1_CMSDK_BASE_NS 0x41101000 /* GPIO 1 Non-Secure base address */ -#define GPIO2_CMSDK_BASE_NS 0x41102000 /* GPIO 2 Non-Secure base address */ -#define GPIO3_CMSDK_BASE_NS 0x41103000 /* GPIO 3 Non-Secure base address */ -#define AHB_USER_0_BASE_NS 0x41104000 /* AHB USER 0 Non-Secure base address */ -#define AHB_USER_1_BASE_NS 0x41105000 /* AHB USER 1 Non-Secure base address */ -#define AHB_USER_2_BASE_NS 0x41106000 /* AHB USER 2 Non-Secure base address */ -#define AHB_USER_3_BASE_NS 0x41107000 /* AHB USER 3 Non-Secure base address */ -#define DMA_0_BASE_NS 0x41200000 /* DMA 0 Non-Secure base address */ -#define DMA_1_BASE_NS 0x41201000 /* DMA 1 Non-Secure base address */ -#define DMA_2_BASE_NS 0x41202000 /* DMA 2 Non-Secure base address */ -#define DMA_3_BASE_NS 0x41203000 /* DMA 3 Non-Secure base address */ -#define ETHERNET_BASE_NS 0x41400000 /* Ethernet Non-Secure base address */ -#define USB_BASE_NS 0x41500000 /* USB Non-Secure base address */ -#define USER_APB0_BASE_NS 0x41700000 /* User APB 0 Non-Secure base address */ -#define USER_APB1_BASE_NS 0x41701000 /* User APB 1 Non-Secure base address */ -#define USER_APB2_BASE_NS 0x41702000 /* User APB 2 Non-Secure base address */ -#define USER_APB3_BASE_NS 0x41703000 /* User APB 3 Non-Secure base address */ -#define QSPI_CONFIG_BASE_NS 0x41800000 /* QSPI Config Non-Secure base address */ -#define QSPI_WRITE_BASE_NS 0x41801000 /* QSPI Write Non-Secure base address */ -/* Non-Secure Subsystem peripheral region */ -#define SYSTIMER0_ARMV8_M_BASE_NS 0x48000000 /* System Timer 0 Non-Secure base address */ -#define SYSTIMER1_ARMV8_M_BASE_NS 0x48001000 /* System Timer 1 Non-Secure base address */ -#define SYSTIMER2_ARMV8_M_BASE_NS 0x48002000 /* System Timer 2 Non-Secure base address */ -#define SYSTIMER3_ARMV8_M_BASE_NS 0x48003000 /* System Timer 3 Non-Secure base address */ -#define SSE300_SYSINFO_BASE_NS 0x48020000 /* SSE-300 System info Block Non-Secure base address */ -#define SLOWCLK_TIMER_CMSDK_BASE_NS 0x4802F000 /* CMSDK based SLOWCLK Timer Non-Secure base address */ -#define SYSWDOG_ARMV8_M_CNTRL_BASE_NS 0x48040000 /* Non-Secure Watchdog Timer control frame Non-Secure base address */ -#define SYSWDOG_ARMV8_M_REFRESH_BASE_NS 0x48041000 /* Non-Secure Watchdog Timer refresh frame Non-Secure base address */ -#define SYSCNTR_READ_BASE_NS 0x48101000 /* System Counter Read Secure base address */ -/* Non-Secure MSTEXPPIHL Peripheral region */ -#define ETHOS_U55_APB_BASE_NS 0x48102000 /* Ethos-U55 APB Non-Secure base address */ -#define U55_TIMING_ADAPTER_BASE_NS 0x48103000 /* Ethos-U55 Timing Adapter registers Non-Secure base address */ -#define FPGA_SBCon_I2C_TOUCH_BASE_NS 0x49200000 /* FPGA - SBCon I2C (Touch) Non-Secure base address */ -#define FPGA_SBCon_I2C_AUDIO_BASE_NS 0x49201000 /* FPGA - SBCon I2C (Audio Conf) Non-Secure base address */ -#define FPGA_SPI_ADC_BASE_NS 0x49202000 /* FPGA - PL022 (SPI ADC) Non-Secure base address */ -#define FPGA_SPI_SHIELD0_BASE_NS 0x49203000 /* FPGA - PL022 (SPI Shield0) Non-Secure base address */ -#define FPGA_SPI_SHIELD1_BASE_NS 0x49204000 /* FPGA - PL022 (SPI Shield1) Non-Secure base address */ -#define SBCon_I2C_SHIELD0_BASE_NS 0x49205000 /* SBCon (I2C - Shield0) Non-Secure base address */ -#define SBCon_I2C_SHIELD1_BASE_NS 0x49206000 /* SBCon (I2C – Shield1) Non-Secure base address */ -#define USER_APB_BASE_NS 0x49207000 /* USER APB Non-Secure base address */ -#define FPGA_DDR4_EEPROM_BASE_NS 0x49208000 /* FPGA - SBCon I2C (DDR4 EEPROM) Non-Secure base address */ -#define FPGA_SCC_BASE_NS 0x49300000 /* FPGA - SCC registers Non-Secure base address */ -#define FPGA_I2S_BASE_NS 0x49301000 /* FPGA - I2S (Audio) Non-Secure base address */ -#define FPGA_IO_BASE_NS 0x49302000 /* FPGA - IO (System Ctrl + I/O) Non-Secure base address */ -#define UART0_BASE_NS 0x49303000 /* UART 0 Non-Secure base address */ -#define UART1_BASE_NS 0x49304000 /* UART 1 Non-Secure base address */ -#define UART2_BASE_NS 0x49305000 /* UART 2 Non-Secure base address */ -#define UART3_BASE_NS 0x49306000 /* UART 3 Non-Secure base address */ -#define UART4_BASE_NS 0x49307000 /* UART 4 Non-Secure base address */ -#define UART5_BASE_NS 0x49308000 /* UART 5 Non-Secure base address */ -#define CLCD_Config_Reg_BASE_NS 0x4930A000 /* CLCD Config Reg Non-Secure base address */ -#define RTC_BASE_NS 0x4930B000 /* RTC Non-Secure base address */ -#define DDR4_BLK0_BASE_NS 0x60000000 /* DDR4 block 0 Non-Secure base address */ -#define DDR4_BLK2_BASE_NS 0x80000000 /* DDR4 block 2 Non-Secure base address */ -#define DDR4_BLK4_BASE_NS 0xA0000000 /* DDR4 block 4 Non-Secure base address */ -#define DDR4_BLK6_BASE_NS 0xC0000000 /* DDR4 block 6 Non-Secure base address */ - -/* Secure memory map addresses */ -#define ITCM_BASE_S 0x10000000 /* Instruction TCM Secure base address */ -#define SRAM_BASE_S 0x11000000 /* CODE SRAM Secure base address */ -#define DTCM0_BASE_S 0x30000000 /* Data TCM block 0 Secure base address */ -#define DTCM1_BASE_S 0x30020000 /* Data TCM block 1 Secure base address */ -#define DTCM2_BASE_S 0x30040000 /* Data TCM block 2 Secure base address */ -#define DTCM3_BASE_S 0x30060000 /* Data TCM block 3 Secure base address */ -#define ISRAM0_BASE_S 0x31000000 /* Internal SRAM Area Secure base address */ -#define ISRAM1_BASE_S 0x31200000 /* Internal SRAM Area Secure base address */ -#define QSPI_SRAM_BASE_S 0x38000000 /* QSPI SRAM Secure base address */ -/* Secure Subsystem peripheral region */ -#define CPU0_SECCTRL_BASE_S 0x50011000 /* CPU 0 Local Security Control Block Secure base address */ -#define CPU0_PWRCTRL_BASE_S 0x50012000 /* CPU 0 Power Control Block Secure base address */ -#define CPU0_IDENTITY_BASE_S 0x5001F000 /* CPU 0 Identity Block Secure base address */ -#define SSE300_SACFG_BASE_S 0x50080000 /* SSE-300 Secure Access Configuration Register Secure base address */ -#define MPC_ISRAM0_BASE_S 0x50083000 /* Internal SRAM0 Memory Protection Controller Secure base address */ -#define MPC_ISRAM1_BASE_S 0x50084000 /* Internal SRAM1 Memory Protection Controller Secure base address */ -/* Secure MSTEXPPILL Peripheral region */ -#define GPIO0_CMSDK_BASE_S 0x51100000 /* GPIO 0 Secure base address */ -#define GPIO1_CMSDK_BASE_S 0x51101000 /* GPIO 1 Secure base address */ -#define GPIO2_CMSDK_BASE_S 0x51102000 /* GPIO 2 Secure base address */ -#define GPIO3_CMSDK_BASE_S 0x51103000 /* GPIO 3 Secure base address */ -#define AHB_USER_0_BASE_S 0x51104000 /* AHB USER 0 Secure base address */ -#define AHB_USER_1_BASE_S 0x51105000 /* AHB USER 1 Secure base address */ -#define AHB_USER_2_BASE_S 0x51106000 /* AHB USER 2 Secure base address */ -#define AHB_USER_3_BASE_S 0x51107000 /* AHB USER 3 Secure base address */ -#define DMA_0_BASE_S 0x51200000 /* DMA 0 Secure base address */ -#define DMA_1_BASE_S 0x51201000 /* DMA 1 Secure base address */ -#define DMA_2_BASE_S 0x51202000 /* DMA 2 Secure base address */ -#define DMA_3_BASE_S 0x51203000 /* DMA 3 Secure base address */ -#define ETHERNET_BASE_S 0x51400000 /* Ethernet Secure base address */ -#define USB_BASE_S 0x51500000 /* USB Secure base address */ -#define USER_APB0_BASE_S 0x51700000 /* User APB 0 Secure base address */ -#define USER_APB1_BASE_S 0x51701000 /* User APB 1 Secure base address */ -#define USER_APB2_BASE_S 0x51702000 /* User APB 2 Secure base address */ -#define USER_APB3_BASE_S 0x51703000 /* User APB 3 Secure base address */ -#define QSPI_CONFIG_BASE_S 0x51800000 /* QSPI Config Secure base address */ -#define QSPI_WRITE_BASE_S 0x51801000 /* QSPI Write Secure base address */ -#define MPC_SRAM_BASE_S 0x57000000 /* SRAM Memory Protection Controller Secure base address */ -#define MPC_QSPI_BASE_S 0x57001000 /* QSPI Memory Protection Controller Secure base address */ -#define MPC_DDR4_BASE_S 0x57002000 /* DDR4 Memory Protection Controller Secure base address */ -/* Secure Subsystem peripheral region */ -#define SYSTIMER0_ARMV8_M_BASE_S 0x58000000 /* System Timer 0 Secure base address */ -#define SYSTIMER1_ARMV8_M_BASE_S 0x58001000 /* System Timer 1 Secure base address */ -#define SYSTIMER2_ARMV8_M_BASE_S 0x58002000 /* System Timer 0 Secure base address */ -#define SYSTIMER3_ARMV8_M_BASE_S 0x58003000 /* System Timer 1 Secure base address */ -#define SSE300_SYSINFO_BASE_S 0x58020000 /* SSE-300 System info Block Secure base address */ -#define SSE300_SYSCTRL_BASE_S 0x58021000 /* SSE-300 System control Block Secure base address */ -#define SSE300_SYSPPU_BASE_S 0x58022000 /* SSE-300 System Power Policy Unit Secure base address */ -#define SSE300_CPU0PPU_BASE_S 0x58023000 /* SSE-300 CPU 0 Power Policy Unit Secure base address */ -#define SSE300_MGMTPPU_BASE_S 0x58028000 /* SSE-300 Management Power Policy Unit Secure base address */ -#define SSE300_DBGPPU_BASE_S 0x58029000 /* SSE-300 Debug Power Policy Unit Secure base address */ -#define SLOWCLK_WDOG_CMSDK_BASE_S 0x5802E000 /* CMSDK based SLOWCLK Watchdog Secure base address */ -#define SLOWCLK_TIMER_CMSDK_BASE_S 0x5802F000 /* CMSDK based SLOWCLK Timer Secure base address */ -#define SYSWDOG_ARMV8_M_CNTRL_BASE_S 0x58040000 /* Secure Watchdog Timer control frame Secure base address */ -#define SYSWDOG_ARMV8_M_REFRESH_BASE_S 0x58041000 /* Secure Watchdog Timer refresh frame Secure base address */ -#define SYSCNTR_CNTRL_BASE_S 0x58100000 /* System Counter Control Secure base address */ -#define SYSCNTR_READ_BASE_S 0x58101000 /* System Counter Read Secure base address */ -/* Secure MSTEXPPIHL Peripheral region */ -#define ETHOS_U55_APB_BASE_S 0x58102000 /* Ethos-U55 APB Secure base address */ -#define U55_TIMING_ADAPTER_BASE_S 0x58103000 /* Ethos-U55 Timing Adapter registers Secure base address */ -#define FPGA_SBCon_I2C_TOUCH_BASE_S 0x59200000 /* FPGA - SBCon I2C (Touch) Secure base address */ -#define FPGA_SBCon_I2C_AUDIO_BASE_S 0x59201000 /* FPGA - SBCon I2C (Audio Conf) Secure base address */ -#define FPGA_SPI_ADC_BASE_S 0x59202000 /* FPGA - PL022 (SPI ADC) Secure base address */ -#define FPGA_SPI_SHIELD0_BASE_S 0x59203000 /* FPGA - PL022 (SPI Shield0) Secure base address */ -#define FPGA_SPI_SHIELD1_BASE_S 0x59204000 /* FPGA - PL022 (SPI Shield1) Secure base address */ -#define SBCon_I2C_SHIELD0_BASE_S 0x59205000 /* SBCon (I2C - Shield0) Secure base address */ -#define SBCon_I2C_SHIELD1_BASE_S 0x59206000 /* SBCon (I2C – Shield1) Secure base address */ -#define USER_APB_BASE_S 0x59207000 /* USER APB Secure base address */ -#define FPGA_DDR4_EEPROM_BASE_S 0x59208000 /* FPGA - SBCon I2C (DDR4 EEPROM) Secure base address */ -#define FPGA_SCC_BASE_S 0x59300000 /* FPGA - SCC registers Secure base address */ -#define FPGA_I2S_BASE_S 0x59301000 /* FPGA - I2S (Audio) Secure base address */ -#define FPGA_IO_BASE_S 0x59302000 /* FPGA - IO (System Ctrl + I/O) Secure base address */ -#define UART0_BASE_S 0x59303000 /* UART 0 Secure base address */ -#define UART1_BASE_S 0x59304000 /* UART 1 Secure base address */ -#define UART2_BASE_S 0x59305000 /* UART 2 Secure base address */ -#define UART3_BASE_S 0x59306000 /* UART 3 Secure base address */ -#define UART4_BASE_S 0x59307000 /* UART 4 Secure base address */ -#define UART5_BASE_S 0x59308000 /* UART 5 Secure base address */ -#define CLCD_Config_Reg_BASE_S 0x5930A000 /* CLCD Config Reg Secure base address */ -#define RTC_BASE_S 0x5930B000 /* RTC Secure base address */ -#define DDR4_BLK1_BASE_S 0x70000000 /* DDR4 block 1 Secure base address */ -#define DDR4_BLK3_BASE_S 0x90000000 /* DDR4 block 3 Secure base address */ -#define DDR4_BLK5_BASE_S 0xB0000000 /* DDR4 block 5 Secure base address */ -#define DDR4_BLK7_BASE_S 0xD0000000 /* DDR4 block 7 Secure base address */ - -/* Memory map addresses exempt from memory attribution by both the SAU and IDAU */ -#define SSE300_EWIC_BASE 0xE0047000 /* External Wakeup Interrupt Controller - * Access from Non-secure software is only allowed - * if AIRCR.BFHFNMINS is set to 1 */ - -/* Memory size definitions */ -#define ITCM_SIZE (0x00080000) /* 512 kB */ -#define DTCM_BLK_SIZE (0x00020000) /* 128 kB */ -#define DTCM_BLK_NUM (0x4) /* Number of DTCM blocks */ -#define SRAM_SIZE (0x00200000) /* 2 MB */ -#define ISRAM0_SIZE (0x00200000) /* 2 MB */ -#define ISRAM1_SIZE (0x00200000) /* 2 MB */ -#define QSPI_SRAM_SIZE (0x00800000) /* 8 MB */ -#define DDR4_BLK_SIZE (0x10000000) /* 256 MB */ -#define DDR4_BLK_NUM (0x8) /* Number of DDR4 blocks */ - -/* Defines for Driver MPC's */ -/* SRAM -- 2 MB */ -#define MPC_SRAM_RANGE_BASE_NS (SRAM_BASE_NS) -#define MPC_SRAM_RANGE_LIMIT_NS (SRAM_BASE_NS + SRAM_SIZE-1) -#define MPC_SRAM_RANGE_OFFSET_NS (0x0) -#define MPC_SRAM_RANGE_BASE_S (SRAM_BASE_S) -#define MPC_SRAM_RANGE_LIMIT_S (SRAM_BASE_S + SRAM_SIZE-1) -#define MPC_SRAM_RANGE_OFFSET_S (0x0) - -/* QSPI -- 8 MB*/ -#define MPC_QSPI_RANGE_BASE_NS (QSPI_SRAM_BASE_NS) -#define MPC_QSPI_RANGE_LIMIT_NS (QSPI_SRAM_BASE_NS + QSPI_SRAM_SIZE-1) -#define MPC_QSPI_RANGE_OFFSET_NS (0x0) -#define MPC_QSPI_RANGE_BASE_S (QSPI_SRAM_BASE_S) -#define MPC_QSPI_RANGE_LIMIT_S (QSPI_SRAM_BASE_S + QSPI_SRAM_SIZE-1) -#define MPC_QSPI_RANGE_OFFSET_S (0x0) - -/* ISRAM0 -- 2 MB*/ -#define MPC_ISRAM0_RANGE_BASE_NS (ISRAM0_BASE_NS) -#define MPC_ISRAM0_RANGE_LIMIT_NS (ISRAM0_BASE_NS + ISRAM0_SIZE-1) -#define MPC_ISRAM0_RANGE_OFFSET_NS (0x0) -#define MPC_ISRAM0_RANGE_BASE_S (ISRAM0_BASE_S) -#define MPC_ISRAM0_RANGE_LIMIT_S (ISRAM0_BASE_S + ISRAM0_SIZE-1) -#define MPC_ISRAM0_RANGE_OFFSET_S (0x0) - -/* ISRAM1 -- 2 MB*/ -#define MPC_ISRAM1_RANGE_BASE_NS (ISRAM1_BASE_NS) -#define MPC_ISRAM1_RANGE_LIMIT_NS (ISRAM1_BASE_NS + ISRAM1_SIZE-1) -#define MPC_ISRAM1_RANGE_OFFSET_NS (0x0) -#define MPC_ISRAM1_RANGE_BASE_S (ISRAM1_BASE_S) -#define MPC_ISRAM1_RANGE_LIMIT_S (ISRAM1_BASE_S + ISRAM1_SIZE-1) -#define MPC_ISRAM1_RANGE_OFFSET_S (0x0) - -/* DDR4 -- 2GB (8 * 256 MB) */ -#define MPC_DDR4_BLK0_RANGE_BASE_NS (DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK0_RANGE_LIMIT_NS (DDR4_BLK0_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK0_RANGE_OFFSET_NS (0x0) -#define MPC_DDR4_BLK1_RANGE_BASE_S (DDR4_BLK1_BASE_S) -#define MPC_DDR4_BLK1_RANGE_LIMIT_S (DDR4_BLK1_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK1_RANGE_OFFSET_S (DDR4_BLK1_BASE_S - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK2_RANGE_BASE_NS (DDR4_BLK2_BASE_NS) -#define MPC_DDR4_BLK2_RANGE_LIMIT_NS (DDR4_BLK2_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK2_RANGE_OFFSET_NS (DDR4_BLK2_BASE_NS - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK3_RANGE_BASE_S (DDR4_BLK3_BASE_S) -#define MPC_DDR4_BLK3_RANGE_LIMIT_S (DDR4_BLK3_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK3_RANGE_OFFSET_S (DDR4_BLK3_BASE_S - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK4_RANGE_BASE_NS (DDR4_BLK4_BASE_NS) -#define MPC_DDR4_BLK4_RANGE_LIMIT_NS (DDR4_BLK4_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK4_RANGE_OFFSET_NS (DDR4_BLK4_BASE_NS - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK5_RANGE_BASE_S (DDR4_BLK5_BASE_S) -#define MPC_DDR4_BLK5_RANGE_LIMIT_S (DDR4_BLK5_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK5_RANGE_OFFSET_S (DDR4_BLK5_BASE_S - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK6_RANGE_BASE_NS (DDR4_BLK6_BASE_NS) -#define MPC_DDR4_BLK6_RANGE_LIMIT_NS (DDR4_BLK6_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK6_RANGE_OFFSET_NS (DDR4_BLK6_BASE_NS - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK7_RANGE_BASE_S (DDR4_BLK7_BASE_S) -#define MPC_DDR4_BLK7_RANGE_LIMIT_S (DDR4_BLK7_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK7_RANGE_OFFSET_S (DDR4_BLK7_BASE_S - DDR4_BLK0_BASE_NS) - -#endif /* __PLATFORM_BASE_ADDRESS_H__ */ diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_defs.h b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_defs.h deleted file mode 100644 index c8cd919..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_defs.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2016-2020 Arm Limited - * - * 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 - * - * http://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. - */ - -#ifndef __REGION_DEFS_H__ -#define __REGION_DEFS_H__ - -#include "region_limits.h" - -/* ************************************************************** - * WARNING: this file is parsed both by the C/C++ compiler - * and the linker. As a result the syntax must be valid not only - * for C/C++ but for the linker scripts too. - * Beware of the following limitations: - * - LD (GCC linker) requires white space around operators. - * - UL postfix for macros is not suported by the linker script - ****************************************************************/ - -/* Secure regions */ -#define S_CODE_START ( S_ROM_ALIAS ) -#define S_CODE_SIZE ( TOTAL_S_ROM_SIZE ) -#define S_CODE_LIMIT ( S_CODE_START + S_CODE_SIZE ) - -#define S_DATA_START ( S_RAM_ALIAS ) -#define S_DATA_SIZE ( TOTAL_S_RAM_SIZE ) -#define S_DATA_LIMIT ( S_DATA_START + S_DATA_SIZE ) - -/* Non-Secure regions */ -#define NS_CODE_START ( NS_ROM_ALIAS ) -#define NS_CODE_SIZE ( TOTAL_NS_ROM_SIZE ) -#define NS_CODE_LIMIT ( NS_CODE_START + NS_CODE_SIZE ) - -#define NS_DATA_START ( NS_RAM_ALIAS ) -#define NS_DATA_SIZE ( TOTAL_NS_RAM_SIZE ) -#define NS_DATA_LIMIT ( NS_DATA_START + NS_DATA_SIZE ) - -#endif /* __REGION_DEFS_H__ */ diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_limits.h b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_limits.h deleted file mode 100644 index 58a76c7..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_limits.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2018-2020 Arm Limited - * - * 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 - * - * http://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. - */ - -#ifndef __REGION_LIMITS_H__ -#define __REGION_LIMITS_H__ - -/* ************************************************************** - * WARNING: this file is parsed both by the C/C++ compiler - * and the linker. As a result the syntax must be valid not only - * for C/C++ but for the linker scripts too. - * Beware of the following limitations: - * - LD (GCC linker) requires white space around operators. - * - UL postfix for macros is not suported by the linker script - ****************************************************************/ - -/* Secure Code */ -#define S_ROM_ALIAS (0x10000000) /* ITCM_BASE_S */ -#define TOTAL_S_ROM_SIZE (0x00080000) /* 256 kB */ - -/* Secure Data */ -#define S_RAM_ALIAS (0x30000000) /* DTCM_BASE_S */ -#define TOTAL_S_RAM_SIZE (0x00040000) /* 256 kB */ - - -/* Non-Secure Code */ -#define NS_ROM_ALIAS (0x01000000) /* SRAM_BASE_NS */ -#define TOTAL_NS_ROM_SIZE (0x00080000) /* 256 kB */ - -/* Non-Secure Data */ -#define NS_RAM_ALIAS (0x21000000) /* ISRAM0_BASE_NS */ -#define TOTAL_NS_RAM_SIZE (0x00040000) /* 256 kB */ - - -/* Heap and Stack sizes for secure and nonsecure applications */ -#define HEAP_SIZE (0x0000C000) /* 1 KiB */ -#define STACK_SIZE (0x00008000) /* 1 KiB */ - -#endif /* __REGION_LIMITS_H__ */ diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c deleted file mode 100644 index 53e367c..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Copyright (c) 2009-2020 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. - */ - -/* - * This file is derivative of CMSIS V5.6.0 startup_ARMv81MML.c - * Git SHA: b5f0603d6a584d1724d952fd8b0737458b90d62b - */ - -#include "cmsis.h" - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler Function Prototype - *----------------------------------------------------------------------------*/ -typedef void( *pFunc )( void ); - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; -extern uint32_t __STACK_LIMIT; - -extern void __PROGRAM_START(void) __NO_RETURN; - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -void Reset_Handler (void) __NO_RETURN; - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -#define DEFAULT_IRQ_HANDLER(handler_name) \ -void __WEAK handler_name(void); \ -void handler_name(void) { \ - while(1); \ -} - -/* Exceptions */ -DEFAULT_IRQ_HANDLER(NMI_Handler) -DEFAULT_IRQ_HANDLER(HardFault_Handler) -DEFAULT_IRQ_HANDLER(MemManage_Handler) -DEFAULT_IRQ_HANDLER(BusFault_Handler) -DEFAULT_IRQ_HANDLER(UsageFault_Handler) -DEFAULT_IRQ_HANDLER(SecureFault_Handler) -DEFAULT_IRQ_HANDLER(SVC_Handler) -DEFAULT_IRQ_HANDLER(DebugMon_Handler) -DEFAULT_IRQ_HANDLER(PendSV_Handler) -DEFAULT_IRQ_HANDLER(SysTick_Handler) - -DEFAULT_IRQ_HANDLER(NONSEC_WATCHDOG_RESET_Handler) -DEFAULT_IRQ_HANDLER(NONSEC_WATCHDOG_Handler) -DEFAULT_IRQ_HANDLER(SLOWCLK_Timer_Handler) -DEFAULT_IRQ_HANDLER(TIMER0_Handler) -DEFAULT_IRQ_HANDLER(TIMER1_Handler) -DEFAULT_IRQ_HANDLER(TIMER2_Handler) -DEFAULT_IRQ_HANDLER(MPC_Handler) -DEFAULT_IRQ_HANDLER(PPC_Handler) -DEFAULT_IRQ_HANDLER(MSC_Handler) -DEFAULT_IRQ_HANDLER(BRIDGE_ERROR_Handler) -DEFAULT_IRQ_HANDLER(MGMT_PPU_Handler) -DEFAULT_IRQ_HANDLER(SYS_PPU_Handler) -DEFAULT_IRQ_HANDLER(CPU0_PPU_Handler) -DEFAULT_IRQ_HANDLER(DEBUG_PPU_Handler) -DEFAULT_IRQ_HANDLER(TIMER3_Handler) -DEFAULT_IRQ_HANDLER(CTI_REQ0_IRQHandler) -DEFAULT_IRQ_HANDLER(CTI_REQ1_IRQHandler) - -DEFAULT_IRQ_HANDLER(System_Timestamp_Counter_Handler) -DEFAULT_IRQ_HANDLER(UARTRX0_Handler) -DEFAULT_IRQ_HANDLER(UARTTX0_Handler) -DEFAULT_IRQ_HANDLER(UARTRX1_Handler) -DEFAULT_IRQ_HANDLER(UARTTX1_Handler) -DEFAULT_IRQ_HANDLER(UARTRX2_Handler) -DEFAULT_IRQ_HANDLER(UARTTX2_Handler) -DEFAULT_IRQ_HANDLER(UARTRX3_Handler) -DEFAULT_IRQ_HANDLER(UARTTX3_Handler) -DEFAULT_IRQ_HANDLER(UARTRX4_Handler) -DEFAULT_IRQ_HANDLER(UARTTX4_Handler) -DEFAULT_IRQ_HANDLER(UART0_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART1_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART2_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART3_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART4_Combined_Handler) -DEFAULT_IRQ_HANDLER(UARTOVF_Handler) -DEFAULT_IRQ_HANDLER(ETHERNET_Handler) -DEFAULT_IRQ_HANDLER(I2S_Handler) -DEFAULT_IRQ_HANDLER(TOUCH_SCREEN_Handler) -DEFAULT_IRQ_HANDLER(USB_Handler) -DEFAULT_IRQ_HANDLER(SPI_ADC_Handler) -DEFAULT_IRQ_HANDLER(SPI_SHIELD0_Handler) -DEFAULT_IRQ_HANDLER(SPI_SHIELD1_Handler) -DEFAULT_IRQ_HANDLER(ETHOS_U55_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_3_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_4_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_5_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_6_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_7_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_8_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_9_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_10_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_11_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_12_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_13_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_14_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_15_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_3_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_4_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_5_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_6_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_7_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_8_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_9_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_10_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_11_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_12_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_13_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_14_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_15_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_3_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_4_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_5_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_6_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_7_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_8_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_9_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_10_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_11_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_12_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_13_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_14_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_15_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_3_Handler) -DEFAULT_IRQ_HANDLER(UARTRX5_Handler) -DEFAULT_IRQ_HANDLER(UARTTX5_Handler) -DEFAULT_IRQ_HANDLER(UART5_Handler) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const pFunc __VECTOR_TABLE[496]; - const pFunc __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = { - (pFunc)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14: NMI Handler */ - HardFault_Handler, /* -13: Hard Fault Handler */ - MemManage_Handler, /* -12: MPU Fault Handler */ - BusFault_Handler, /* -11: Bus Fault Handler */ - UsageFault_Handler, /* -10: Usage Fault Handler */ - SecureFault_Handler, /* -9: Secure Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5: SVCall Handler */ - DebugMon_Handler, /* -4: Debug Monitor Handler */ - 0, /* Reserved */ - PendSV_Handler, /* -2: PendSV Handler */ - SysTick_Handler, /* -1: SysTick Handler */ - - NONSEC_WATCHDOG_RESET_Handler, /* 0: Non-Secure Watchdog Reset Handler */ - NONSEC_WATCHDOG_Handler, /* 1: Non-Secure Watchdog Handler */ - SLOWCLK_Timer_Handler, /* 2: SLOWCLK Timer Handler */ - TIMER0_Handler, /* 3: TIMER 0 Handler */ - TIMER1_Handler, /* 4: TIMER 1 Handler */ - TIMER2_Handler, /* 5: TIMER 2 Handler */ - 0, /* 6: Reserved */ - 0, /* 7: Reserved */ - 0, /* 8: Reserved */ - MPC_Handler, /* 9: MPC Combined (Secure) Handler */ - PPC_Handler, /* 10: PPC Combined (Secure) Handler */ - MSC_Handler, /* 11: MSC Combined (Secure) Handler */ - BRIDGE_ERROR_Handler, /* 12: Bridge Error (Secure) Handler */ - 0, /* 13: Reserved */ - MGMT_PPU_Handler, /* 14: MGMT PPU Handler */ - SYS_PPU_Handler, /* 15: SYS PPU Handler */ - CPU0_PPU_Handler, /* 16: CPU0 PPU Handler */ - 0, /* 17: Reserved */ - 0, /* 18: Reserved */ - 0, /* 19: Reserved */ - 0, /* 20: Reserved */ - 0, /* 21: Reserved */ - 0, /* 22: Reserved */ - 0, /* 23: Reserved */ - 0, /* 24: Reserved */ - 0, /* 25: Reserved */ - DEBUG_PPU_Handler, /* 26: DEBUG PPU Handler */ - TIMER3_Handler, /* 27: TIMER 3 Handler */ - CTI_REQ0_IRQHandler, /* 28: CTI request 0 IRQ Handler */ - CTI_REQ1_IRQHandler, /* 29: CTI request 1 IRQ Handler */ - 0, /* 30: Reserved */ - 0, /* 31: Reserved */ - - /* External interrupts */ - System_Timestamp_Counter_Handler, /* 32: System timestamp counter Handler */ - UARTRX0_Handler, /* 33: UART 0 RX Handler */ - UARTTX0_Handler, /* 34: UART 0 TX Handler */ - UARTRX1_Handler, /* 35: UART 1 RX Handler */ - UARTTX1_Handler, /* 36: UART 1 TX Handler */ - UARTRX2_Handler, /* 37: UART 2 RX Handler */ - UARTTX2_Handler, /* 38: UART 2 TX Handler */ - UARTRX3_Handler, /* 39: UART 3 RX Handler */ - UARTTX3_Handler, /* 40: UART 3 TX Handler */ - UARTRX4_Handler, /* 41: UART 4 RX Handler */ - UARTTX4_Handler, /* 42: UART 4 TX Handler */ - UART0_Combined_Handler, /* 43: UART 0 Combined Handler */ - UART1_Combined_Handler, /* 44: UART 1 Combined Handler */ - UART2_Combined_Handler, /* 45: UART 2 Combined Handler */ - UART3_Combined_Handler, /* 46: UART 3 Combined Handler */ - UART4_Combined_Handler, /* 47: UART 4 Combined Handler */ - UARTOVF_Handler, /* 48: UART 0, 1, 2, 3, 4 & 5 Overflow Handler */ - ETHERNET_Handler, /* 49: Ethernet Handler */ - I2S_Handler, /* 50: Audio I2S Handler */ - TOUCH_SCREEN_Handler, /* 51: Touch Screen Handler */ - USB_Handler, /* 52: USB Handler */ - SPI_ADC_Handler, /* 53: SPI ADC Handler */ - SPI_SHIELD0_Handler, /* 54: SPI (Shield 0) Handler */ - SPI_SHIELD1_Handler, /* 55: SPI (Shield 0) Handler */ - ETHOS_U55_Handler, /* 56: Ethos-U55 Handler */ - 0, /* 57: Reserved */ - 0, /* 58: Reserved */ - 0, /* 59: Reserved */ - 0, /* 60: Reserved */ - 0, /* 61: Reserved */ - 0, /* 62: Reserved */ - 0, /* 63: Reserved */ - 0, /* 64: Reserved */ - 0, /* 65: Reserved */ - 0, /* 66: Reserved */ - 0, /* 67: Reserved */ - 0, /* 68: Reserved */ - GPIO0_Combined_Handler, /* 69: GPIO 0 Combined Handler */ - GPIO1_Combined_Handler, /* 70: GPIO 1 Combined Handler */ - GPIO2_Combined_Handler, /* 71: GPIO 2 Combined Handler */ - GPIO3_Combined_Handler, /* 72: GPIO 3 Combined Handler */ - GPIO0_0_Handler, /* 73: GPIO0 Pin 0 Handler */ - GPIO0_1_Handler, /* 74: GPIO0 Pin 1 Handler */ - GPIO0_2_Handler, /* 75: GPIO0 Pin 2 Handler */ - GPIO0_3_Handler, /* 76: GPIO0 Pin 3 Handler */ - GPIO0_4_Handler, /* 77: GPIO0 Pin 4 Handler */ - GPIO0_5_Handler, /* 78: GPIO0 Pin 5 Handler */ - GPIO0_6_Handler, /* 79: GPIO0 Pin 6 Handler */ - GPIO0_7_Handler, /* 80: GPIO0 Pin 7 Handler */ - GPIO0_8_Handler, /* 81: GPIO0 Pin 8 Handler */ - GPIO0_9_Handler, /* 82: GPIO0 Pin 9 Handler */ - GPIO0_10_Handler, /* 83: GPIO0 Pin 10 Handler */ - GPIO0_11_Handler, /* 84: GPIO0 Pin 11 Handler */ - GPIO0_12_Handler, /* 85: GPIO0 Pin 12 Handler */ - GPIO0_13_Handler, /* 86: GPIO0 Pin 13 Handler */ - GPIO0_14_Handler, /* 87: GPIO0 Pin 14 Handler */ - GPIO0_15_Handler, /* 88: GPIO0 Pin 15 Handler */ - GPIO1_0_Handler, /* 89: GPIO1 Pin 0 Handler */ - GPIO1_1_Handler, /* 90: GPIO1 Pin 1 Handler */ - GPIO1_2_Handler, /* 91: GPIO1 Pin 2 Handler */ - GPIO1_3_Handler, /* 92: GPIO1 Pin 3 Handler */ - GPIO1_4_Handler, /* 93: GPIO1 Pin 4 Handler */ - GPIO1_5_Handler, /* 94: GPIO1 Pin 5 Handler */ - GPIO1_6_Handler, /* 95: GPIO1 Pin 6 Handler */ - GPIO1_7_Handler, /* 96: GPIO1 Pin 7 Handler */ - GPIO1_8_Handler, /* 97: GPIO1 Pin 8 Handler */ - GPIO1_9_Handler, /* 98: GPIO1 Pin 9 Handler */ - GPIO1_10_Handler, /* 99: GPIO1 Pin 10 Handler */ - GPIO1_11_Handler, /* 100: GPIO1 Pin 11 Handler */ - GPIO1_12_Handler, /* 101: GPIO1 Pin 12 Handler */ - GPIO1_13_Handler, /* 102: GPIO1 Pin 13 Handler */ - GPIO1_14_Handler, /* 103: GPIO1 Pin 14 Handler */ - GPIO1_15_Handler, /* 104: GPIO1 Pin 15 Handler */ - GPIO2_0_Handler, /* 105: GPIO2 Pin 0 Handler */ - GPIO2_1_Handler, /* 106: GPIO2 Pin 1 Handler */ - GPIO2_2_Handler, /* 107: GPIO2 Pin 2 Handler */ - GPIO2_3_Handler, /* 108: GPIO2 Pin 3 Handler */ - GPIO2_4_Handler, /* 109: GPIO2 Pin 4 Handler */ - GPIO2_5_Handler, /* 110: GPIO2 Pin 5 Handler */ - GPIO2_6_Handler, /* 111: GPIO2 Pin 6 Handler */ - GPIO2_7_Handler, /* 112: GPIO2 Pin 7 Handler */ - GPIO2_8_Handler, /* 113: GPIO2 Pin 8 Handler */ - GPIO2_9_Handler, /* 114: GPIO2 Pin 9 Handler */ - GPIO2_10_Handler, /* 115: GPIO2 Pin 10 Handler */ - GPIO2_11_Handler, /* 116: GPIO2 Pin 11 Handler */ - GPIO2_12_Handler, /* 117: GPIO2 Pin 12 Handler */ - GPIO2_13_Handler, /* 118: GPIO2 Pin 13 Handler */ - GPIO2_14_Handler, /* 119: GPIO2 Pin 14 Handler */ - GPIO2_15_Handler, /* 120: GPIO2 Pin 15 Handler */ - GPIO3_0_Handler, /* 121: GPIO3 Pin 0 Handler */ - GPIO3_1_Handler, /* 122: GPIO3 Pin 1 Handler */ - GPIO3_2_Handler, /* 123: GPIO3 Pin 2 Handler */ - GPIO3_3_Handler, /* 124: GPIO3 Pin 3 Handler */ - UARTRX5_Handler, /* 125: UART 5 RX Interrupt */ - UARTTX5_Handler, /* 126: UART 5 TX Interrupt */ - UART5_Handler, /* 127: UART 5 combined Interrupt */ - 0, /* 128: Reserved */ - 0, /* 129: Reserved */ - 0, /* 130: Reserved */ -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -void Reset_Handler(void) -{ - __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); - - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/debug_log.cc b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/debug_log.cc deleted file mode 100644 index bc79d43..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/debug_log.cc +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -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 - - http://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. -==============================================================================*/ - -// Implementation for the DebugLog() function that prints to the debug logger on -// an generic Cortex-M device. - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -#include "tensorflow/lite/micro/debug_log.h" - -#include "tensorflow/lite/micro/cortex_m_generic/debug_log_callback.h" - -static DebugLogCallback debug_log_callback = nullptr; - -void RegisterDebugLogCallback(void (*cb)(const char* s)) { - debug_log_callback = cb; -} - -void DebugLog(const char* s) { -#ifndef TF_LITE_STRIP_ERROR_STRINGS - if (debug_log_callback != nullptr) { - debug_log_callback(s); - } -#endif -} - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/micro_time.cc b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/micro_time.cc deleted file mode 100644 index 023ac6d..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/micro_time.cc +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright 2021 The TensorFlow Authors. All Rights Reserved. - -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 - - http://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. -==============================================================================*/ - -#include "tensorflow/lite/micro/micro_time.h" - -// DWT (Data Watchpoint and Trace) registers, only exists on ARM Cortex with a -// DWT unit. -#define KIN1_DWT_CONTROL (*((volatile uint32_t*)0xE0001000)) -/*!< DWT Control register */ - -// DWT Control register. -#define KIN1_DWT_CYCCNTENA_BIT (1UL << 0) - -// CYCCNTENA bit in DWT_CONTROL register. -#define KIN1_DWT_CYCCNT (*((volatile uint32_t*)0xE0001004)) - -// DWT Cycle Counter register. -#define KIN1_DEMCR (*((volatile uint32_t*)0xE000EDFC)) - -// DEMCR: Debug Exception and Monitor Control Register. -#define KIN1_TRCENA_BIT (1UL << 24) - -#define KIN1_LAR (*((volatile uint32_t*)0xE0001FB0)) - -#define KIN1_DWT_CONTROL (*((volatile uint32_t*)0xE0001000)) - -// Unlock access to DWT (ITM, etc.)registers. -#define KIN1_UnlockAccessToDWT() KIN1_LAR = 0xC5ACCE55; - -// TRCENA: Enable trace and debug block DEMCR (Debug Exception and Monitor -// Control Register. -#define KIN1_InitCycleCounter() KIN1_DEMCR |= KIN1_TRCENA_BIT - -#define KIN1_ResetCycleCounter() KIN1_DWT_CYCCNT = 0 -#define KIN1_EnableCycleCounter() KIN1_DWT_CONTROL |= KIN1_DWT_CYCCNTENA_BIT -#define KIN1_DisableCycleCounter() KIN1_DWT_CONTROL &= ~KIN1_DWT_CYCCNTENA_BIT -#define KIN1_GetCycleCounter() KIN1_DWT_CYCCNT - -namespace tflite { - -int32_t ticks_per_second() { return 0; } - -int32_t GetCurrentTimeTicks() { - static bool is_initialized = false; - if (!is_initialized) { - KIN1_UnlockAccessToDWT(); - KIN1_InitCycleCounter(); - KIN1_ResetCycleCounter(); - KIN1_EnableCycleCounter(); - is_initialized = true; - } - return KIN1_GetCycleCounter(); -} - -} // namespace tflite diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/system_setup.cc b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/system_setup.cc deleted file mode 100644 index e803dc2..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/system_setup.cc +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2021 The TensorFlow Authors. All Rights Reserved. - -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 - - http://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. -==============================================================================*/ - -#include "tensorflow/lite/micro/system_setup.h" -#include "stdio.h" -#include "tensorflow/lite/micro/cortex_m_generic/debug_log_callback.h" - -extern "C" void serial_init (void); - -namespace tflite { - -void debug_log_printf(const char* s) { - printf(s); -} - -// To add an equivalent function for your own platform, create your own -// implementation file, and place it in a subfolder named after the target. See -// tensorflow/lite/micro/debug_log.cc for a similar example. -void InitializeTarget() { - serial_init(); - RegisterDebugLogCallback(debug_log_printf); - //debug_log_printf("Initialized UART and registered Callback.") -} -} // namespace tflite diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/Pre_Include_Global.h b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/Pre_Include_Global.h deleted file mode 100644 index 6234fa2..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/Pre_Include_Global.h +++ /dev/null @@ -1,18 +0,0 @@ - -/* - * Auto generated Run-Time-Environment Configuration File - * *** Do not modify ! *** - * - * Project: 'template_Corstone300' - * Target: 'template_Corstone300' - */ - -#ifndef PRE_INCLUDE_GLOBAL_H -#define PRE_INCLUDE_GLOBAL_H - -/* tensorflow::Machine Learning:TensorFlow:Kernel:CMSIS-NN:0.1.20210416 */ -// enabling global pre includes - #define TF_LITE_STATIC_MEMORY 1 - - -#endif /* PRE_INCLUDE_GLOBAL_H */ diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/RTE_Components.h b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/RTE_Components.h deleted file mode 100644 index 452f25e..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/RTE_Components.h +++ /dev/null @@ -1,35 +0,0 @@ - -/* - * Auto generated Run-Time-Environment Configuration File - * *** Do not modify ! *** - * - * Project: 'template_Corstone300' - * Target: 'template_Corstone300' - */ - -#ifndef RTE_COMPONENTS_H -#define RTE_COMPONENTS_H - - -/* - * Define the Device Header File: - */ -#define CMSIS_device_header "SSE300MPS3.h" - -/* ARM::CMSIS Driver:USART:1.0.0 */ -#define RTE_Drivers_USART -/* tensorflow::Data Exchange:Serialization:flatbuffers:tensorflow:1.12.0 */ -#define RTE_DataExchange_Serialization_flatbuffers /* flatbuffers */ -/* tensorflow::Data Processing:Math:gemmlowp fixed-point:tensorflow:1.0.0 */ -#define RTE_DataExchange_Math_gemmlowp /* gemmlowp */ -/* tensorflow::Data Processing:Math:kissfft:tensorflow:1.4.5 */ -#define RTE_DataExchange_Math_kissfft /* kissfft */ -/* tensorflow::Data Processing:Math:ruy:tensorflow:1.12.0 */ -#define RTE_DataProcessing_Math_ruy /* ruy */ -/* tensorflow::Machine Learning:TensorFlow:Kernel:CMSIS-NN:0.1.20210416 */ -#define RTE_ML_TF_LITE /* TF */ -/* tensorflow::Machine Learning:TensorFlow:Testing:0.1.20210416 */ -#define RTE_ML_TF_LITE /* TF */ - - -#endif /* RTE_COMPONENTS_H */ diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj deleted file mode 100644 index a1a6a8d..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj +++ /dev/null @@ -1,85 +0,0 @@ - - - - - UnitTestTemplate - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _file_block_xml_ - - - - - diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/packlist b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/packlist deleted file mode 100644 index c9c5636..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/packlist +++ /dev/null @@ -1 +0,0 @@ -https://keilpack.azureedge.net/pack/ARM.V2M_MPS3_SSE_300_BSP.1.1.0.pack diff --git a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/platform_setup.c b/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/platform_setup.c deleted file mode 100644 index 279de43..0000000 --- a/tensorflow-test/templates/Ethos-U/ARMCLANG/SSE-300-MPS3/platform_setup.c +++ /dev/null @@ -1,10 +0,0 @@ - - -int platform_setup (void) -{ - serial_init(); - - -} - - diff --git a/tensorflow-test/templates/FVP_Corstone_SSE-300_Ethos-U55.config b/tensorflow-test/templates/FVP_Corstone_SSE-300_Ethos-U55.config deleted file mode 100644 index d9b93ee..0000000 --- a/tensorflow-test/templates/FVP_Corstone_SSE-300_Ethos-U55.config +++ /dev/null @@ -1,1656 +0,0 @@ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -NSC_CFG_0=0 # (bool , init-time) default = '0' : Whether 0x10000000..0x1FFFFFFF is non-secure-callable -NSC_CFG_1=0 # (bool , init-time) default = '0' : Whether 0x30000000..0x3FFFFFFF is non-secure-callable -REMOTE_CONNECTION.CADIServer.enable_remote_cadi=0 # (bool , init-time) default = '0' : Allow connections from remote hosts -REMOTE_CONNECTION.CADIServer.listen_address=127.0.0.1 # (string, init-time) default = '127.0.0.1' : Network address the server should listen on if enable_remote_cadi is set ("127.0.0.1" by default) -REMOTE_CONNECTION.CADIServer.port=31627 # (int , init-time) default = '0x7b8b' : TCP port the server should listen on if enable_remote_cadi is set (31627 by default) -REMOTE_CONNECTION.CADIServer.range=0 # (int , init-time) default = '0x0' : If requested port is not avaliable, search for next avaliable port in range: [port:port+range] (0 by default, only try specified port) -core_clk.mul=25000000 # (int , init-time) default = '0x17d7840' : Clock Rate Multiplier. This parameter is not exposed via CADI and can only be set in LISA -cpu0.BEATS_PER_TICK=2 # (int , init-time) default = '0x2' : Number of beats from each in-flight vector instruction executed in 1 tick (1,2 or 4). -cpu0.BF_is_nop=0 # (bool , init-time) default = '0' : BF instruction executes as NOP, even if we have LO_BRANCH_INFO. -cpu0.CDEMAPPEDONCP=1 # (bool , init-time) default = '1' : Specifies whether the instruction for a given Coprocessor is redirected to the CDE module -cpu0.CFGBIGEND=0 # (bool , init-time) default = '0' : Initialize processor to big endian mode -cpu0.CFGDTCMSZ=13 # (int , init-time) default = '0xd' : Size of the data TCM. 0=No DTCM implemented. Otherwise=Size of DTCM=pow(2, CFGDTCMSZ - 1) KB. Minimum size is 4KB -cpu0.CFGITCMSZ=11 # (int , init-time) default = '0xb' : Size of the instruction TCM. 0=No ITCM implemented. Otherwise=Size of ITCM=pow(2, CFGITCMSZ - 1) KB. Minimum size is 4KB -cpu0.CFGNOCDECP=0 # (int , init-time) default = '0x0' : Bit N means external coprocessor N (CP7:CP0) disable for CDE coprocessor -cpu0.CFGPAHBSZ=0 # (int , init-time) default = '0x0' : Size of the P-AHB peripheral port memory region. 0=P-AHB disabled, 1=64MB, 2=128MB, 3=256MB, 4=512MB -cpu0.CPIF=1 # (bool , init-time) default = '1' : Specifies whether the external coprocessor interface is included -cpu0.CPNSPRESENT=255 # (int , init-time) default = '0xff' : Bit N means external coprocessor N (CP7:CP0) is accessible in Non-Secure state -cpu0.CPSPRESENT=255 # (int , init-time) default = '0xff' : Bit N means external coprocessor N (CP7:CP0) is accessible in Secure state -cpu0.DBGLVL=2 # (int , init-time) default = '0x2' : 0: Minimal debug; 1: 2 Watchpoints, 4 Breakpoint comparators; 2: 4 Watchpoints, 8 Breakpoint comparators; 3: 8 Watchpoints, 8 Breakpoint comparators -cpu0.DCACHESZ=15 # (int , init-time) default = '0xf' : Whether the D-cache is included and, if included, the size of it. Bit 0: 0=No D-cache included, 1=D-cache included. Bits [4:1]: 0x0=4KB D-cache, 0x1=8KB D-cache, 0x3=16KB D-cache, 0x7=32KB D-cache, 0x15=64KB D-cache -cpu0.ECOREVNUM=0 # (int , init-time) default = '0x0' : ECO Revision number -cpu0.ERRDEVID.NUM=56 # (int , init-time) default = '0x38' : RAS: Number of implemented error record indexes, 0 to 56. -cpu0.ETM=1 # (bool , init-time) default = '1' : Support for ETM trace. false : No ETM trace included, true: ETM trace included -cpu0.ICACHESZ=15 # (int , init-time) default = '0xf' : Whether the I-cache is included and, if included, the size of it. Bit 0: 0=No I-cache included, 1=I-cache included. Bits [4:1]: 0x0=4KB I-cache, 0x1=8KB I-cache, 0x3=16KB I-cache, 0x7=32KB I-cache, 0x15=64KB I-cache -cpu0.ID_ISAR0.CmpBranch=3 # (int , init-time) default = '0x3' : Support for Compare and Branch instructions. 1 = Supports CBNZ and CBZ instructions; 3 = Supports non-predicated low overhead looping (WLS, DLS, LE, and LC) and branch future (BF, BFX, BFL, BFLX, and BFCSEL) instructions. -cpu0.INITNSVTOR=0 # (int , init-time) default = '0x0' : Non-Secure vector-table offset at reset -cpu0.INITPAHBEN=0 # (bool , init-time) default = '0' : The P-AHB enable state at reset -cpu0.INITSVTOR=268435456 # (int , init-time) default = '0x10000000' : Secure vector-table offset at reset -cpu0.IRQDIS0=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+0] -cpu0.IRQDIS1=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+32] -cpu0.IRQDIS10=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+320] -cpu0.IRQDIS11=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+352] -cpu0.IRQDIS12=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+384] -cpu0.IRQDIS13=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+416] -cpu0.IRQDIS14=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+448] -cpu0.IRQDIS2=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+64] -cpu0.IRQDIS3=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+96] -cpu0.IRQDIS4=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+128] -cpu0.IRQDIS5=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+160] -cpu0.IRQDIS6=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+192] -cpu0.IRQDIS7=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+224] -cpu0.IRQDIS8=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+256] -cpu0.IRQDIS9=0 # (int , init-time) default = '0x0' : IRQ line disable mask. Bit n of this 32-bit parameter disables IRQ[n+288] -cpu0.IRQLVL=3 # (int , init-time) default = '0x3' : Number of bits of interrupt priority -cpu0.ITM=1 # (bool , init-time) default = '1' : Level of instrumentation trace supported. false : No ITM trace included, true: ITM trace included -cpu0.LOCKDTGU=0 # (bool , init-time) default = '0' : Lock down of Data TGU registers write -cpu0.LOCKITGU=0 # (bool , init-time) default = '0' : Lock down of Instruction TGU registers write -cpu0.LOCKTCM=0 # (bool , init-time) default = '0' : Lock down of TCM registers write -cpu0.LOCK_NS_MPU=0 # (bool , init-time) default = '0' : Lock down of Non-Secure MPU registers write -cpu0.LOCK_SAU=0 # (bool , init-time) default = '0' : Lock down of SAU registers write -cpu0.LOCK_S_MPU=0 # (bool , init-time) default = '0' : Lock down of Secure MPU registers write -cpu0.MPU_NS=8 # (int , init-time) default = '0x8' : Number of regions in the Non-Secure MPU. If Security Extentions are absent, this is the total number of MPU regions -cpu0.MPU_S=8 # (int , init-time) default = '0x8' : Number of regions in the Secure MPU. If Security Extentions are absent, this is ignored -cpu0.SAU=8 # (int , init-time) default = '0x8' : Number of SAU regions (0 => no SAU) -cpu0.SECEXT=1 # (bool , init-time) default = '1' : Whether the ARMv8-M Security Extensions are included -cpu0.WICLINES=35 # (int , init-time) default = '0x23' : Number of lines supported by the WIC interface -cpu0.aircr_iesb_is_writable=1 # (bool , init-time) default = '1' : IS the AIRCR.IESB bit [5] writable? -cpu0.aircr_iesb_reset=0 # (bool , init-time) default = '0' : Set the AIRCR.IESB bit [5] after reset -cpu0.cde_impl_name= # (string, init-time) default = '' : Name of the CDE implementation for this core (implementation contributed by MTI plugin). -cpu0.cpi_div=1 # (int , run-time ) default = '0x1' : divider for calculating CPI (Cycles Per Instruction) -cpu0.cpi_mul=1 # (int , run-time ) default = '0x1' : multiplier for calculating CPI (Cycles Per Instruction) -cpu0.dcache-state_modelled=0 # (bool , run-time ) default = '0' : Set whether D-cache has stateful implementation -cpu0.dcache-ways=4 # (int , init-time) default = '0x4' : L1 D-cache ways (sets are implicit from size) -cpu0.delay_faultmask_update=0 # (bool , init-time) default = '0' : Delay FAULTMASK update to context sync -cpu0.delay_sysreg_update=0 # (bool , init-time) default = '0' : Delay some system register updates (e.g. SHCSR) to context sync -cpu0.duplicate_CADI_TCM_writes=0 # (bool , init-time) default = '0' : CADI writes to TCMs are also sent to downstream memory at same addresses (for validation platforms) -cpu0.ecc_on=0 # (bool , init-time) default = '0' : Enable Error Correcting Code -cpu0.execute_via_archex=1 # (bool , init-time) default = '1' : Use ArchEx-generated code from V8_1_PACBTI_BETA_1_0_INTERNAL for execution -cpu0.has_cde=0 # (bool , init-time) default = '0' : Enables Custom Datapath Extensions -cpu0.has_pmu=0 # (bool , init-time) default = '0' : Availability of optional PMU. -cpu0.has_unpriviledged_debug=1 # (bool , init-time) default = '1' : Unpriviledged Debug Extension supported for Mainline Extension -cpu0.icache-state_modelled=0 # (bool , run-time ) default = '0' : Set whether I-cache has stateful implementation -cpu0.icache-ways=2 # (int , init-time) default = '0x2' : L1 I-cache ways (sets are implicit from size) -cpu0.min_sync_level=0 # (int , run-time ) default = '0x0' : force minimum syncLevel (0=off=default,1=syncState,2=postInsnIO,3=postInsnAll) -cpu0.mve_unpred_config_json='[["CLEAR_IT","VPNOT_T1","InITBlock"],["OK","VMINNMV_f_T2","Rda==11x1"],["OK","VDDUP","curOffset MOD imm32 != 0"],["OK","VDDUP","bufSize MOD imm32 != 0"],["OK","VDDUP","curOffset >= bufSize "]]' # (string, init-time) default = ''[["CLEAR_IT","VPNOT_T1","InITBlock"],["OK","VMINNMV_f_T2","Rda==11x1"],["OK","VDDUP","curOffset MOD imm32 != 0"],["OK","VDDUP","bufSize MOD imm32 != 0"],["OK","VDDUP","curOffset >= bufSize "]]'' : A JSON array of arrays of the form [unpred_result, instr, cond] forunpredictable configruation for MVE. Either instr or cond may be omitted. The first match wins. Use 'list' to show the available options -cpu0.num_pmu_counters=31 # (int , init-time) default = '0x1f' : Number of available PMU counters. -cpu0.ras_ERRFR0='{"ED":0x1,"UE":0x1}' # (string, init-time) default = ''{"ED":0x1,"UE":0x1}'' : A JSON object or array of objects for each field of ERRFR. Records not described default to RAZ e.g. '{"ED":0x1,"UE":0x1}'. -cpu0.ras_cei_pin=2 # (int , init-time) default = '0x2' : RAS: Critical error interrupt pin. -cpu0.ras_cei_support=1 # (bool , init-time) default = '1' : RAS: Whether Critical Error Interrupt is supported -cpu0.ras_eri_pin=1 # (int , init-time) default = '0x1' : RAS: Error recovery interrupt pin. -cpu0.ras_eri_support=1 # (bool , init-time) default = '1' : RAS: Whether Error Recovery Interrupt is supported -cpu0.ras_error_record=72057594037927935 # (int , init-time) default = '0xffffffffffffff' : 56 bit value that specifies which nodes out of 0-55 are implemented (ERRDEVID is derived from this parameter) -cpu0.ras_fhi_pin=0 # (int , init-time) default = '0x0' : RAS: Fault handling interrupt pin. -cpu0.ras_fhi_support=1 # (bool , init-time) default = '1' : RAS: Whether Fault Handling Interrupt is supported -cpu0.scheduler_mode=0 # (int , init-time) default = '0x0' : Control the interleaving of instructions in this processor (0=default long quantum, 1=low latency mode, short quantum and signal checking, 2=lock-breaking mode, long quantum with additional context switches near load-exclusive instructions, 3=ISSCompare) -cpu0.semihosting-Thumb_SVC=171 # (int , init-time) default = '0xab' : T32 SVC number for semihosting -cpu0.semihosting-cmd_line= # (string, init-time) default = '' : Command line available to semihosting SVC calls -cpu0.semihosting-cwd= # (string, init-time) default = '' : Base directory for semihosting file access. -cpu0.semihosting-enable=1 # (bool , init-time) default = '0' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false. -cpu0.semihosting-heap_base=0 # (int , init-time) default = '0x0' : Virtual address of heap base -cpu0.semihosting-heap_limit=275775488 # (int , init-time) default = '0x10700000' : Virtual address of top of heap -cpu0.semihosting-prefix=0 # (bool , init-time) default = '0' : Prefix semihosting output with target instance name -cpu0.semihosting-stack_base=275775488 # (int , init-time) default = '0x10700000' : Virtual address of base of descending stack -cpu0.semihosting-stack_limit=276824064 # (int , init-time) default = '0x10800000' : Virtual address of stack limit -cpu0.tcm_fill_pattern_1=3755990991 # (int , init-time) default = '0xdfdfdfcf' : TCM Fill pattern 1 -cpu0.tcm_fill_pattern_2=3487555551 # (int , init-time) default = '0xcfdfdfdf' : TCM Fill pattern 2 -cpu0.trace_style=0 # (int , init-time) default = '0x0' : MVE instruction trace style: 0=Tarmac-like from instDB.json, 1=execute function+params (for debug), 2 = Rosetta. Add 16 for [**--] beat trace. Add 32 for tracing IMPLIED LOB instructions. Add 64 to change opcode of implied BF to 0xBF00 -cpu0.unpred_config_json_file= # (string, init-time) default = '' : Path to the unpredictable configuration file in JSON format -cpu0.vfp-enable_at_reset=0 # (bool , init-time) default = '0' : Enable VFP in CPACR, CPPWR, NSACR at reset. Warning: Arm recommends going through the implementation's suggested VFP power-up sequence! -ethosu.cli= # (string, init-time) default = '' : -ethosu.config=H256 # (string, init-time) default = 'H256' : -ethosu.libpath=libethosu.so # (string, init-time) default = 'libethosu.so' : -idau.IDAU_REGION0.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region0 as exempt -idau.IDAU_REGION1.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region1 as exempt -idau.IDAU_REGION10.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region10 as exempt -idau.IDAU_REGION100.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region100 -idau.IDAU_REGION100.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region100 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION100.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region100 as exempt -idau.IDAU_REGION100.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region100 -idau.IDAU_REGION100.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region100 -idau.IDAU_REGION101.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region101 -idau.IDAU_REGION101.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region101 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION101.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region101 as exempt -idau.IDAU_REGION101.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region101 -idau.IDAU_REGION101.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region101 -idau.IDAU_REGION102.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region102 -idau.IDAU_REGION102.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region102 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION102.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region102 as exempt -idau.IDAU_REGION102.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region102 -idau.IDAU_REGION102.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region102 -idau.IDAU_REGION103.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region103 -idau.IDAU_REGION103.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region103 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION103.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region103 as exempt -idau.IDAU_REGION103.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region103 -idau.IDAU_REGION103.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region103 -idau.IDAU_REGION104.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region104 -idau.IDAU_REGION104.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region104 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION104.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region104 as exempt -idau.IDAU_REGION104.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region104 -idau.IDAU_REGION104.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region104 -idau.IDAU_REGION105.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region105 -idau.IDAU_REGION105.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region105 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION105.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region105 as exempt -idau.IDAU_REGION105.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region105 -idau.IDAU_REGION105.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region105 -idau.IDAU_REGION106.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region106 -idau.IDAU_REGION106.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region106 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION106.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region106 as exempt -idau.IDAU_REGION106.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region106 -idau.IDAU_REGION106.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region106 -idau.IDAU_REGION107.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region107 -idau.IDAU_REGION107.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region107 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION107.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region107 as exempt -idau.IDAU_REGION107.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region107 -idau.IDAU_REGION107.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region107 -idau.IDAU_REGION108.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region108 -idau.IDAU_REGION108.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region108 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION108.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region108 as exempt -idau.IDAU_REGION108.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region108 -idau.IDAU_REGION108.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region108 -idau.IDAU_REGION109.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region109 -idau.IDAU_REGION109.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region109 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION109.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region109 as exempt -idau.IDAU_REGION109.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region109 -idau.IDAU_REGION109.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region109 -idau.IDAU_REGION11.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region11 as exempt -idau.IDAU_REGION110.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region110 -idau.IDAU_REGION110.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region110 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION110.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region110 as exempt -idau.IDAU_REGION110.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region110 -idau.IDAU_REGION110.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region110 -idau.IDAU_REGION111.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region111 -idau.IDAU_REGION111.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region111 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION111.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region111 as exempt -idau.IDAU_REGION111.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region111 -idau.IDAU_REGION111.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region111 -idau.IDAU_REGION112.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region112 -idau.IDAU_REGION112.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region112 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION112.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region112 as exempt -idau.IDAU_REGION112.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region112 -idau.IDAU_REGION112.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region112 -idau.IDAU_REGION113.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region113 -idau.IDAU_REGION113.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region113 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION113.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region113 as exempt -idau.IDAU_REGION113.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region113 -idau.IDAU_REGION113.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region113 -idau.IDAU_REGION114.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region114 -idau.IDAU_REGION114.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region114 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION114.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region114 as exempt -idau.IDAU_REGION114.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region114 -idau.IDAU_REGION114.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region114 -idau.IDAU_REGION115.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region115 -idau.IDAU_REGION115.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region115 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION115.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region115 as exempt -idau.IDAU_REGION115.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region115 -idau.IDAU_REGION115.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region115 -idau.IDAU_REGION116.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region116 -idau.IDAU_REGION116.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region116 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION116.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region116 as exempt -idau.IDAU_REGION116.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region116 -idau.IDAU_REGION116.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region116 -idau.IDAU_REGION117.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region117 -idau.IDAU_REGION117.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region117 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION117.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region117 as exempt -idau.IDAU_REGION117.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region117 -idau.IDAU_REGION117.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region117 -idau.IDAU_REGION118.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region118 -idau.IDAU_REGION118.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region118 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION118.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region118 as exempt -idau.IDAU_REGION118.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region118 -idau.IDAU_REGION118.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region118 -idau.IDAU_REGION119.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region119 -idau.IDAU_REGION119.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region119 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION119.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region119 as exempt -idau.IDAU_REGION119.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region119 -idau.IDAU_REGION119.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region119 -idau.IDAU_REGION12.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region12 as exempt -idau.IDAU_REGION120.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region120 -idau.IDAU_REGION120.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region120 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION120.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region120 as exempt -idau.IDAU_REGION120.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region120 -idau.IDAU_REGION120.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region120 -idau.IDAU_REGION121.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region121 -idau.IDAU_REGION121.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region121 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION121.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region121 as exempt -idau.IDAU_REGION121.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region121 -idau.IDAU_REGION121.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region121 -idau.IDAU_REGION122.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region122 -idau.IDAU_REGION122.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region122 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION122.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region122 as exempt -idau.IDAU_REGION122.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region122 -idau.IDAU_REGION122.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region122 -idau.IDAU_REGION123.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region123 -idau.IDAU_REGION123.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region123 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION123.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region123 as exempt -idau.IDAU_REGION123.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region123 -idau.IDAU_REGION123.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region123 -idau.IDAU_REGION124.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region124 -idau.IDAU_REGION124.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region124 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION124.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region124 as exempt -idau.IDAU_REGION124.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region124 -idau.IDAU_REGION124.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region124 -idau.IDAU_REGION125.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region125 -idau.IDAU_REGION125.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region125 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION125.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region125 as exempt -idau.IDAU_REGION125.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region125 -idau.IDAU_REGION125.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region125 -idau.IDAU_REGION126.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region126 -idau.IDAU_REGION126.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region126 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION126.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region126 as exempt -idau.IDAU_REGION126.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region126 -idau.IDAU_REGION126.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region126 -idau.IDAU_REGION127.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region127 -idau.IDAU_REGION127.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region127 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION127.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region127 as exempt -idau.IDAU_REGION127.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region127 -idau.IDAU_REGION127.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region127 -idau.IDAU_REGION128.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region128 -idau.IDAU_REGION128.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region128 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION128.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region128 as exempt -idau.IDAU_REGION128.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region128 -idau.IDAU_REGION128.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region128 -idau.IDAU_REGION129.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region129 -idau.IDAU_REGION129.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region129 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION129.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region129 as exempt -idau.IDAU_REGION129.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region129 -idau.IDAU_REGION129.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region129 -idau.IDAU_REGION13.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region13 as exempt -idau.IDAU_REGION130.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region130 -idau.IDAU_REGION130.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region130 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION130.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region130 as exempt -idau.IDAU_REGION130.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region130 -idau.IDAU_REGION130.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region130 -idau.IDAU_REGION131.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region131 -idau.IDAU_REGION131.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region131 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION131.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region131 as exempt -idau.IDAU_REGION131.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region131 -idau.IDAU_REGION131.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region131 -idau.IDAU_REGION132.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region132 -idau.IDAU_REGION132.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region132 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION132.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region132 as exempt -idau.IDAU_REGION132.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region132 -idau.IDAU_REGION132.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region132 -idau.IDAU_REGION133.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region133 -idau.IDAU_REGION133.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region133 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION133.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region133 as exempt -idau.IDAU_REGION133.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region133 -idau.IDAU_REGION133.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region133 -idau.IDAU_REGION134.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region134 -idau.IDAU_REGION134.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region134 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION134.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region134 as exempt -idau.IDAU_REGION134.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region134 -idau.IDAU_REGION134.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region134 -idau.IDAU_REGION135.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region135 -idau.IDAU_REGION135.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region135 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION135.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region135 as exempt -idau.IDAU_REGION135.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region135 -idau.IDAU_REGION135.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region135 -idau.IDAU_REGION136.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region136 -idau.IDAU_REGION136.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region136 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION136.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region136 as exempt -idau.IDAU_REGION136.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region136 -idau.IDAU_REGION136.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region136 -idau.IDAU_REGION137.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region137 -idau.IDAU_REGION137.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region137 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION137.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region137 as exempt -idau.IDAU_REGION137.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region137 -idau.IDAU_REGION137.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region137 -idau.IDAU_REGION138.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region138 -idau.IDAU_REGION138.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region138 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION138.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region138 as exempt -idau.IDAU_REGION138.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region138 -idau.IDAU_REGION138.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region138 -idau.IDAU_REGION139.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region139 -idau.IDAU_REGION139.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region139 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION139.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region139 as exempt -idau.IDAU_REGION139.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region139 -idau.IDAU_REGION139.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region139 -idau.IDAU_REGION140.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region140 -idau.IDAU_REGION140.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region140 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION140.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region140 as exempt -idau.IDAU_REGION140.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region140 -idau.IDAU_REGION140.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region140 -idau.IDAU_REGION141.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region141 -idau.IDAU_REGION141.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region141 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION141.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region141 as exempt -idau.IDAU_REGION141.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region141 -idau.IDAU_REGION141.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region141 -idau.IDAU_REGION142.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region142 -idau.IDAU_REGION142.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region142 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION142.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region142 as exempt -idau.IDAU_REGION142.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region142 -idau.IDAU_REGION142.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region142 -idau.IDAU_REGION143.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region143 -idau.IDAU_REGION143.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region143 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION143.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region143 as exempt -idau.IDAU_REGION143.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region143 -idau.IDAU_REGION143.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region143 -idau.IDAU_REGION144.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region144 -idau.IDAU_REGION144.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region144 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION144.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region144 as exempt -idau.IDAU_REGION144.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region144 -idau.IDAU_REGION144.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region144 -idau.IDAU_REGION145.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region145 -idau.IDAU_REGION145.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region145 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION145.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region145 as exempt -idau.IDAU_REGION145.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region145 -idau.IDAU_REGION145.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region145 -idau.IDAU_REGION146.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region146 -idau.IDAU_REGION146.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region146 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION146.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region146 as exempt -idau.IDAU_REGION146.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region146 -idau.IDAU_REGION146.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region146 -idau.IDAU_REGION147.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region147 -idau.IDAU_REGION147.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region147 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION147.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region147 as exempt -idau.IDAU_REGION147.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region147 -idau.IDAU_REGION147.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region147 -idau.IDAU_REGION148.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region148 -idau.IDAU_REGION148.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region148 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION148.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region148 as exempt -idau.IDAU_REGION148.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region148 -idau.IDAU_REGION148.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region148 -idau.IDAU_REGION149.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region149 -idau.IDAU_REGION149.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region149 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION149.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region149 as exempt -idau.IDAU_REGION149.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region149 -idau.IDAU_REGION149.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region149 -idau.IDAU_REGION15.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region15 as exempt -idau.IDAU_REGION150.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region150 -idau.IDAU_REGION150.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region150 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION150.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region150 as exempt -idau.IDAU_REGION150.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region150 -idau.IDAU_REGION150.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region150 -idau.IDAU_REGION151.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region151 -idau.IDAU_REGION151.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region151 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION151.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region151 as exempt -idau.IDAU_REGION151.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region151 -idau.IDAU_REGION151.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region151 -idau.IDAU_REGION152.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region152 -idau.IDAU_REGION152.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region152 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION152.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region152 as exempt -idau.IDAU_REGION152.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region152 -idau.IDAU_REGION152.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region152 -idau.IDAU_REGION153.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region153 -idau.IDAU_REGION153.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region153 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION153.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region153 as exempt -idau.IDAU_REGION153.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region153 -idau.IDAU_REGION153.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region153 -idau.IDAU_REGION154.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region154 -idau.IDAU_REGION154.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region154 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION154.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region154 as exempt -idau.IDAU_REGION154.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region154 -idau.IDAU_REGION154.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region154 -idau.IDAU_REGION155.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region155 -idau.IDAU_REGION155.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region155 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION155.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region155 as exempt -idau.IDAU_REGION155.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region155 -idau.IDAU_REGION155.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region155 -idau.IDAU_REGION156.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region156 -idau.IDAU_REGION156.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region156 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION156.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region156 as exempt -idau.IDAU_REGION156.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region156 -idau.IDAU_REGION156.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region156 -idau.IDAU_REGION157.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region157 -idau.IDAU_REGION157.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region157 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION157.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region157 as exempt -idau.IDAU_REGION157.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region157 -idau.IDAU_REGION157.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region157 -idau.IDAU_REGION158.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region158 -idau.IDAU_REGION158.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region158 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION158.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region158 as exempt -idau.IDAU_REGION158.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region158 -idau.IDAU_REGION158.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region158 -idau.IDAU_REGION159.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region159 -idau.IDAU_REGION159.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region159 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION159.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region159 as exempt -idau.IDAU_REGION159.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region159 -idau.IDAU_REGION159.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region159 -idau.IDAU_REGION160.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region160 -idau.IDAU_REGION160.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region160 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION160.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region160 as exempt -idau.IDAU_REGION160.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region160 -idau.IDAU_REGION160.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region160 -idau.IDAU_REGION161.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region161 -idau.IDAU_REGION161.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region161 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION161.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region161 as exempt -idau.IDAU_REGION161.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region161 -idau.IDAU_REGION161.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region161 -idau.IDAU_REGION162.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region162 -idau.IDAU_REGION162.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region162 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION162.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region162 as exempt -idau.IDAU_REGION162.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region162 -idau.IDAU_REGION162.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region162 -idau.IDAU_REGION163.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region163 -idau.IDAU_REGION163.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region163 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION163.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region163 as exempt -idau.IDAU_REGION163.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region163 -idau.IDAU_REGION163.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region163 -idau.IDAU_REGION164.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region164 -idau.IDAU_REGION164.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region164 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION164.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region164 as exempt -idau.IDAU_REGION164.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region164 -idau.IDAU_REGION164.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region164 -idau.IDAU_REGION165.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region165 -idau.IDAU_REGION165.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region165 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION165.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region165 as exempt -idau.IDAU_REGION165.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region165 -idau.IDAU_REGION165.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region165 -idau.IDAU_REGION166.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region166 -idau.IDAU_REGION166.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region166 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION166.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region166 as exempt -idau.IDAU_REGION166.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region166 -idau.IDAU_REGION166.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region166 -idau.IDAU_REGION167.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region167 -idau.IDAU_REGION167.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region167 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION167.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region167 as exempt -idau.IDAU_REGION167.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region167 -idau.IDAU_REGION167.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region167 -idau.IDAU_REGION168.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region168 -idau.IDAU_REGION168.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region168 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION168.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region168 as exempt -idau.IDAU_REGION168.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region168 -idau.IDAU_REGION168.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region168 -idau.IDAU_REGION169.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region169 -idau.IDAU_REGION169.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region169 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION169.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region169 as exempt -idau.IDAU_REGION169.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region169 -idau.IDAU_REGION169.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region169 -idau.IDAU_REGION17.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region17 as exempt -idau.IDAU_REGION170.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region170 -idau.IDAU_REGION170.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region170 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION170.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region170 as exempt -idau.IDAU_REGION170.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region170 -idau.IDAU_REGION170.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region170 -idau.IDAU_REGION171.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region171 -idau.IDAU_REGION171.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region171 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION171.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region171 as exempt -idau.IDAU_REGION171.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region171 -idau.IDAU_REGION171.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region171 -idau.IDAU_REGION172.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region172 -idau.IDAU_REGION172.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region172 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION172.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region172 as exempt -idau.IDAU_REGION172.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region172 -idau.IDAU_REGION172.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region172 -idau.IDAU_REGION173.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region173 -idau.IDAU_REGION173.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region173 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION173.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region173 as exempt -idau.IDAU_REGION173.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region173 -idau.IDAU_REGION173.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region173 -idau.IDAU_REGION174.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region174 -idau.IDAU_REGION174.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region174 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION174.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region174 as exempt -idau.IDAU_REGION174.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region174 -idau.IDAU_REGION174.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region174 -idau.IDAU_REGION175.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region175 -idau.IDAU_REGION175.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region175 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION175.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region175 as exempt -idau.IDAU_REGION175.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region175 -idau.IDAU_REGION175.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region175 -idau.IDAU_REGION176.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region176 -idau.IDAU_REGION176.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region176 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION176.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region176 as exempt -idau.IDAU_REGION176.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region176 -idau.IDAU_REGION176.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region176 -idau.IDAU_REGION177.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region177 -idau.IDAU_REGION177.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region177 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION177.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region177 as exempt -idau.IDAU_REGION177.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region177 -idau.IDAU_REGION177.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region177 -idau.IDAU_REGION178.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region178 -idau.IDAU_REGION178.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region178 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION178.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region178 as exempt -idau.IDAU_REGION178.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region178 -idau.IDAU_REGION178.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region178 -idau.IDAU_REGION179.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region179 -idau.IDAU_REGION179.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region179 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION179.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region179 as exempt -idau.IDAU_REGION179.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region179 -idau.IDAU_REGION179.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region179 -idau.IDAU_REGION18.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region18 -idau.IDAU_REGION18.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region18 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION18.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region18 as exempt -idau.IDAU_REGION18.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region18 -idau.IDAU_REGION18.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region18 -idau.IDAU_REGION180.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region180 -idau.IDAU_REGION180.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region180 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION180.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region180 as exempt -idau.IDAU_REGION180.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region180 -idau.IDAU_REGION180.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region180 -idau.IDAU_REGION181.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region181 -idau.IDAU_REGION181.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region181 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION181.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region181 as exempt -idau.IDAU_REGION181.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region181 -idau.IDAU_REGION181.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region181 -idau.IDAU_REGION182.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region182 -idau.IDAU_REGION182.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region182 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION182.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region182 as exempt -idau.IDAU_REGION182.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region182 -idau.IDAU_REGION182.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region182 -idau.IDAU_REGION183.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region183 -idau.IDAU_REGION183.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region183 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION183.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region183 as exempt -idau.IDAU_REGION183.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region183 -idau.IDAU_REGION183.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region183 -idau.IDAU_REGION184.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region184 -idau.IDAU_REGION184.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region184 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION184.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region184 as exempt -idau.IDAU_REGION184.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region184 -idau.IDAU_REGION184.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region184 -idau.IDAU_REGION185.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region185 -idau.IDAU_REGION185.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region185 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION185.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region185 as exempt -idau.IDAU_REGION185.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region185 -idau.IDAU_REGION185.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region185 -idau.IDAU_REGION186.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region186 -idau.IDAU_REGION186.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region186 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION186.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region186 as exempt -idau.IDAU_REGION186.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region186 -idau.IDAU_REGION186.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region186 -idau.IDAU_REGION187.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region187 -idau.IDAU_REGION187.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region187 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION187.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region187 as exempt -idau.IDAU_REGION187.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region187 -idau.IDAU_REGION187.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region187 -idau.IDAU_REGION188.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region188 -idau.IDAU_REGION188.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region188 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION188.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region188 as exempt -idau.IDAU_REGION188.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region188 -idau.IDAU_REGION188.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region188 -idau.IDAU_REGION189.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region189 -idau.IDAU_REGION189.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region189 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION189.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region189 as exempt -idau.IDAU_REGION189.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region189 -idau.IDAU_REGION189.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region189 -idau.IDAU_REGION19.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region19 -idau.IDAU_REGION19.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region19 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION19.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region19 as exempt -idau.IDAU_REGION19.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region19 -idau.IDAU_REGION19.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region19 -idau.IDAU_REGION190.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region190 -idau.IDAU_REGION190.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region190 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION190.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region190 as exempt -idau.IDAU_REGION190.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region190 -idau.IDAU_REGION190.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region190 -idau.IDAU_REGION191.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region191 -idau.IDAU_REGION191.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region191 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION191.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region191 as exempt -idau.IDAU_REGION191.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region191 -idau.IDAU_REGION191.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region191 -idau.IDAU_REGION192.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region192 -idau.IDAU_REGION192.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region192 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION192.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region192 as exempt -idau.IDAU_REGION192.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region192 -idau.IDAU_REGION192.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region192 -idau.IDAU_REGION193.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region193 -idau.IDAU_REGION193.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region193 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION193.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region193 as exempt -idau.IDAU_REGION193.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region193 -idau.IDAU_REGION193.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region193 -idau.IDAU_REGION194.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region194 -idau.IDAU_REGION194.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region194 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION194.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region194 as exempt -idau.IDAU_REGION194.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region194 -idau.IDAU_REGION194.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region194 -idau.IDAU_REGION195.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region195 -idau.IDAU_REGION195.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region195 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION195.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region195 as exempt -idau.IDAU_REGION195.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region195 -idau.IDAU_REGION195.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region195 -idau.IDAU_REGION196.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region196 -idau.IDAU_REGION196.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region196 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION196.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region196 as exempt -idau.IDAU_REGION196.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region196 -idau.IDAU_REGION196.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region196 -idau.IDAU_REGION197.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region197 -idau.IDAU_REGION197.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region197 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION197.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region197 as exempt -idau.IDAU_REGION197.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region197 -idau.IDAU_REGION197.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region197 -idau.IDAU_REGION198.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region198 -idau.IDAU_REGION198.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region198 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION198.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region198 as exempt -idau.IDAU_REGION198.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region198 -idau.IDAU_REGION198.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region198 -idau.IDAU_REGION199.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region199 -idau.IDAU_REGION199.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region199 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION199.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region199 as exempt -idau.IDAU_REGION199.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region199 -idau.IDAU_REGION199.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region199 -idau.IDAU_REGION2.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region2 as exempt -idau.IDAU_REGION20.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region20 -idau.IDAU_REGION20.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region20 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION20.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region20 as exempt -idau.IDAU_REGION20.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region20 -idau.IDAU_REGION20.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region20 -idau.IDAU_REGION200.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region200 -idau.IDAU_REGION200.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region200 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION200.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region200 as exempt -idau.IDAU_REGION200.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region200 -idau.IDAU_REGION200.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region200 -idau.IDAU_REGION201.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region201 -idau.IDAU_REGION201.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region201 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION201.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region201 as exempt -idau.IDAU_REGION201.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region201 -idau.IDAU_REGION201.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region201 -idau.IDAU_REGION202.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region202 -idau.IDAU_REGION202.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region202 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION202.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region202 as exempt -idau.IDAU_REGION202.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region202 -idau.IDAU_REGION202.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region202 -idau.IDAU_REGION203.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region203 -idau.IDAU_REGION203.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region203 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION203.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region203 as exempt -idau.IDAU_REGION203.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region203 -idau.IDAU_REGION203.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region203 -idau.IDAU_REGION204.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region204 -idau.IDAU_REGION204.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region204 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION204.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region204 as exempt -idau.IDAU_REGION204.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region204 -idau.IDAU_REGION204.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region204 -idau.IDAU_REGION205.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region205 -idau.IDAU_REGION205.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region205 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION205.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region205 as exempt -idau.IDAU_REGION205.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region205 -idau.IDAU_REGION205.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region205 -idau.IDAU_REGION206.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region206 -idau.IDAU_REGION206.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region206 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION206.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region206 as exempt -idau.IDAU_REGION206.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region206 -idau.IDAU_REGION206.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region206 -idau.IDAU_REGION207.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region207 -idau.IDAU_REGION207.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region207 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION207.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region207 as exempt -idau.IDAU_REGION207.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region207 -idau.IDAU_REGION207.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region207 -idau.IDAU_REGION208.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region208 -idau.IDAU_REGION208.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region208 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION208.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region208 as exempt -idau.IDAU_REGION208.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region208 -idau.IDAU_REGION208.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region208 -idau.IDAU_REGION209.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region209 -idau.IDAU_REGION209.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region209 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION209.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region209 as exempt -idau.IDAU_REGION209.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region209 -idau.IDAU_REGION209.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region209 -idau.IDAU_REGION21.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region21 -idau.IDAU_REGION21.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region21 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION21.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region21 as exempt -idau.IDAU_REGION21.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region21 -idau.IDAU_REGION21.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region21 -idau.IDAU_REGION210.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region210 -idau.IDAU_REGION210.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region210 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION210.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region210 as exempt -idau.IDAU_REGION210.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region210 -idau.IDAU_REGION210.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region210 -idau.IDAU_REGION211.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region211 -idau.IDAU_REGION211.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region211 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION211.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region211 as exempt -idau.IDAU_REGION211.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region211 -idau.IDAU_REGION211.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region211 -idau.IDAU_REGION212.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region212 -idau.IDAU_REGION212.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region212 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION212.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region212 as exempt -idau.IDAU_REGION212.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region212 -idau.IDAU_REGION212.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region212 -idau.IDAU_REGION213.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region213 -idau.IDAU_REGION213.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region213 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION213.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region213 as exempt -idau.IDAU_REGION213.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region213 -idau.IDAU_REGION213.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region213 -idau.IDAU_REGION214.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region214 -idau.IDAU_REGION214.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region214 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION214.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region214 as exempt -idau.IDAU_REGION214.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region214 -idau.IDAU_REGION214.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region214 -idau.IDAU_REGION215.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region215 -idau.IDAU_REGION215.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region215 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION215.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region215 as exempt -idau.IDAU_REGION215.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region215 -idau.IDAU_REGION215.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region215 -idau.IDAU_REGION216.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region216 -idau.IDAU_REGION216.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region216 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION216.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region216 as exempt -idau.IDAU_REGION216.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region216 -idau.IDAU_REGION216.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region216 -idau.IDAU_REGION217.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region217 -idau.IDAU_REGION217.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region217 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION217.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region217 as exempt -idau.IDAU_REGION217.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region217 -idau.IDAU_REGION217.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region217 -idau.IDAU_REGION218.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region218 -idau.IDAU_REGION218.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region218 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION218.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region218 as exempt -idau.IDAU_REGION218.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region218 -idau.IDAU_REGION218.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region218 -idau.IDAU_REGION219.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region219 -idau.IDAU_REGION219.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region219 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION219.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region219 as exempt -idau.IDAU_REGION219.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region219 -idau.IDAU_REGION219.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region219 -idau.IDAU_REGION22.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region22 -idau.IDAU_REGION22.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region22 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION22.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region22 as exempt -idau.IDAU_REGION22.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region22 -idau.IDAU_REGION22.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region22 -idau.IDAU_REGION220.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region220 -idau.IDAU_REGION220.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region220 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION220.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region220 as exempt -idau.IDAU_REGION220.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region220 -idau.IDAU_REGION220.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region220 -idau.IDAU_REGION221.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region221 -idau.IDAU_REGION221.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region221 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION221.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region221 as exempt -idau.IDAU_REGION221.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region221 -idau.IDAU_REGION221.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region221 -idau.IDAU_REGION222.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region222 -idau.IDAU_REGION222.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region222 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION222.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region222 as exempt -idau.IDAU_REGION222.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region222 -idau.IDAU_REGION222.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region222 -idau.IDAU_REGION223.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region223 -idau.IDAU_REGION223.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region223 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION223.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region223 as exempt -idau.IDAU_REGION223.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region223 -idau.IDAU_REGION223.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region223 -idau.IDAU_REGION224.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region224 -idau.IDAU_REGION224.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region224 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION224.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region224 as exempt -idau.IDAU_REGION224.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region224 -idau.IDAU_REGION224.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region224 -idau.IDAU_REGION225.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region225 -idau.IDAU_REGION225.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region225 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION225.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region225 as exempt -idau.IDAU_REGION225.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region225 -idau.IDAU_REGION225.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region225 -idau.IDAU_REGION226.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region226 -idau.IDAU_REGION226.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region226 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION226.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region226 as exempt -idau.IDAU_REGION226.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region226 -idau.IDAU_REGION226.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region226 -idau.IDAU_REGION227.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region227 -idau.IDAU_REGION227.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region227 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION227.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region227 as exempt -idau.IDAU_REGION227.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region227 -idau.IDAU_REGION227.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region227 -idau.IDAU_REGION228.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region228 -idau.IDAU_REGION228.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region228 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION228.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region228 as exempt -idau.IDAU_REGION228.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region228 -idau.IDAU_REGION228.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region228 -idau.IDAU_REGION229.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region229 -idau.IDAU_REGION229.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region229 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION229.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region229 as exempt -idau.IDAU_REGION229.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region229 -idau.IDAU_REGION229.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region229 -idau.IDAU_REGION23.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region23 -idau.IDAU_REGION23.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region23 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION23.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region23 as exempt -idau.IDAU_REGION23.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region23 -idau.IDAU_REGION23.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region23 -idau.IDAU_REGION230.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region230 -idau.IDAU_REGION230.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region230 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION230.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region230 as exempt -idau.IDAU_REGION230.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region230 -idau.IDAU_REGION230.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region230 -idau.IDAU_REGION231.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region231 -idau.IDAU_REGION231.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region231 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION231.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region231 as exempt -idau.IDAU_REGION231.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region231 -idau.IDAU_REGION231.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region231 -idau.IDAU_REGION232.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region232 -idau.IDAU_REGION232.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region232 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION232.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region232 as exempt -idau.IDAU_REGION232.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region232 -idau.IDAU_REGION232.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region232 -idau.IDAU_REGION233.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region233 -idau.IDAU_REGION233.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region233 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION233.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region233 as exempt -idau.IDAU_REGION233.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region233 -idau.IDAU_REGION233.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region233 -idau.IDAU_REGION234.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region234 -idau.IDAU_REGION234.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region234 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION234.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region234 as exempt -idau.IDAU_REGION234.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region234 -idau.IDAU_REGION234.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region234 -idau.IDAU_REGION235.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region235 -idau.IDAU_REGION235.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region235 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION235.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region235 as exempt -idau.IDAU_REGION235.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region235 -idau.IDAU_REGION235.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region235 -idau.IDAU_REGION236.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region236 -idau.IDAU_REGION236.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region236 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION236.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region236 as exempt -idau.IDAU_REGION236.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region236 -idau.IDAU_REGION236.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region236 -idau.IDAU_REGION237.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region237 -idau.IDAU_REGION237.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region237 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION237.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region237 as exempt -idau.IDAU_REGION237.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region237 -idau.IDAU_REGION237.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region237 -idau.IDAU_REGION238.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region238 -idau.IDAU_REGION238.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region238 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION238.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region238 as exempt -idau.IDAU_REGION238.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region238 -idau.IDAU_REGION238.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region238 -idau.IDAU_REGION239.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region239 -idau.IDAU_REGION239.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region239 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION239.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region239 as exempt -idau.IDAU_REGION239.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region239 -idau.IDAU_REGION239.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region239 -idau.IDAU_REGION24.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region24 -idau.IDAU_REGION24.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region24 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION24.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region24 as exempt -idau.IDAU_REGION24.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region24 -idau.IDAU_REGION24.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region24 -idau.IDAU_REGION240.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region240 -idau.IDAU_REGION240.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region240 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION240.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region240 as exempt -idau.IDAU_REGION240.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region240 -idau.IDAU_REGION240.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region240 -idau.IDAU_REGION241.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region241 -idau.IDAU_REGION241.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region241 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION241.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region241 as exempt -idau.IDAU_REGION241.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region241 -idau.IDAU_REGION241.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region241 -idau.IDAU_REGION242.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region242 -idau.IDAU_REGION242.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region242 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION242.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region242 as exempt -idau.IDAU_REGION242.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region242 -idau.IDAU_REGION242.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region242 -idau.IDAU_REGION243.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region243 -idau.IDAU_REGION243.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region243 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION243.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region243 as exempt -idau.IDAU_REGION243.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region243 -idau.IDAU_REGION243.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region243 -idau.IDAU_REGION244.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region244 -idau.IDAU_REGION244.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region244 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION244.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region244 as exempt -idau.IDAU_REGION244.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region244 -idau.IDAU_REGION244.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region244 -idau.IDAU_REGION245.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region245 -idau.IDAU_REGION245.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region245 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION245.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region245 as exempt -idau.IDAU_REGION245.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region245 -idau.IDAU_REGION245.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region245 -idau.IDAU_REGION246.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region246 -idau.IDAU_REGION246.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region246 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION246.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region246 as exempt -idau.IDAU_REGION246.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region246 -idau.IDAU_REGION246.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region246 -idau.IDAU_REGION247.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region247 -idau.IDAU_REGION247.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region247 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION247.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region247 as exempt -idau.IDAU_REGION247.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region247 -idau.IDAU_REGION247.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region247 -idau.IDAU_REGION248.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region248 -idau.IDAU_REGION248.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region248 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION248.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region248 as exempt -idau.IDAU_REGION248.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region248 -idau.IDAU_REGION248.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region248 -idau.IDAU_REGION249.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region249 -idau.IDAU_REGION249.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region249 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION249.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region249 as exempt -idau.IDAU_REGION249.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region249 -idau.IDAU_REGION249.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region249 -idau.IDAU_REGION25.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region25 -idau.IDAU_REGION25.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region25 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION25.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region25 as exempt -idau.IDAU_REGION25.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region25 -idau.IDAU_REGION25.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region25 -idau.IDAU_REGION250.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region250 -idau.IDAU_REGION250.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region250 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION250.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region250 as exempt -idau.IDAU_REGION250.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region250 -idau.IDAU_REGION250.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region250 -idau.IDAU_REGION251.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region251 -idau.IDAU_REGION251.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region251 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION251.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region251 as exempt -idau.IDAU_REGION251.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region251 -idau.IDAU_REGION251.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region251 -idau.IDAU_REGION252.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region252 -idau.IDAU_REGION252.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region252 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION252.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region252 as exempt -idau.IDAU_REGION252.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region252 -idau.IDAU_REGION252.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region252 -idau.IDAU_REGION253.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region253 -idau.IDAU_REGION253.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region253 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION253.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region253 as exempt -idau.IDAU_REGION253.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region253 -idau.IDAU_REGION253.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region253 -idau.IDAU_REGION254.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region254 -idau.IDAU_REGION254.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region254 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION254.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region254 as exempt -idau.IDAU_REGION254.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region254 -idau.IDAU_REGION254.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region254 -idau.IDAU_REGION255.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region255 -idau.IDAU_REGION255.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region255 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION255.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region255 as exempt -idau.IDAU_REGION255.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region255 -idau.IDAU_REGION255.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region255 -idau.IDAU_REGION26.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region26 -idau.IDAU_REGION26.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region26 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION26.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region26 as exempt -idau.IDAU_REGION26.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region26 -idau.IDAU_REGION26.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region26 -idau.IDAU_REGION27.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region27 -idau.IDAU_REGION27.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region27 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION27.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region27 as exempt -idau.IDAU_REGION27.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region27 -idau.IDAU_REGION27.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region27 -idau.IDAU_REGION28.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region28 -idau.IDAU_REGION28.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region28 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION28.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region28 as exempt -idau.IDAU_REGION28.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region28 -idau.IDAU_REGION28.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region28 -idau.IDAU_REGION29.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region29 -idau.IDAU_REGION29.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region29 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION29.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region29 as exempt -idau.IDAU_REGION29.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region29 -idau.IDAU_REGION29.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region29 -idau.IDAU_REGION3.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region3 as exempt -idau.IDAU_REGION30.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region30 -idau.IDAU_REGION30.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region30 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION30.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region30 as exempt -idau.IDAU_REGION30.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region30 -idau.IDAU_REGION30.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region30 -idau.IDAU_REGION31.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region31 -idau.IDAU_REGION31.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region31 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION31.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region31 as exempt -idau.IDAU_REGION31.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region31 -idau.IDAU_REGION31.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region31 -idau.IDAU_REGION32.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region32 -idau.IDAU_REGION32.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region32 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION32.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region32 as exempt -idau.IDAU_REGION32.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region32 -idau.IDAU_REGION32.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region32 -idau.IDAU_REGION33.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region33 -idau.IDAU_REGION33.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region33 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION33.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region33 as exempt -idau.IDAU_REGION33.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region33 -idau.IDAU_REGION33.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region33 -idau.IDAU_REGION34.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region34 -idau.IDAU_REGION34.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region34 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION34.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region34 as exempt -idau.IDAU_REGION34.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region34 -idau.IDAU_REGION34.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region34 -idau.IDAU_REGION35.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region35 -idau.IDAU_REGION35.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region35 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION35.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region35 as exempt -idau.IDAU_REGION35.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region35 -idau.IDAU_REGION35.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region35 -idau.IDAU_REGION36.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region36 -idau.IDAU_REGION36.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region36 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION36.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region36 as exempt -idau.IDAU_REGION36.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region36 -idau.IDAU_REGION36.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region36 -idau.IDAU_REGION37.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region37 -idau.IDAU_REGION37.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region37 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION37.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region37 as exempt -idau.IDAU_REGION37.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region37 -idau.IDAU_REGION37.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region37 -idau.IDAU_REGION38.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region38 -idau.IDAU_REGION38.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region38 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION38.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region38 as exempt -idau.IDAU_REGION38.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region38 -idau.IDAU_REGION38.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region38 -idau.IDAU_REGION39.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region39 -idau.IDAU_REGION39.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region39 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION39.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region39 as exempt -idau.IDAU_REGION39.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region39 -idau.IDAU_REGION39.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region39 -idau.IDAU_REGION4.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region4 as exempt -idau.IDAU_REGION40.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region40 -idau.IDAU_REGION40.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region40 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION40.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region40 as exempt -idau.IDAU_REGION40.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region40 -idau.IDAU_REGION40.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region40 -idau.IDAU_REGION41.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region41 -idau.IDAU_REGION41.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region41 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION41.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region41 as exempt -idau.IDAU_REGION41.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region41 -idau.IDAU_REGION41.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region41 -idau.IDAU_REGION42.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region42 -idau.IDAU_REGION42.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region42 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION42.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region42 as exempt -idau.IDAU_REGION42.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region42 -idau.IDAU_REGION42.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region42 -idau.IDAU_REGION43.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region43 -idau.IDAU_REGION43.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region43 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION43.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region43 as exempt -idau.IDAU_REGION43.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region43 -idau.IDAU_REGION43.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region43 -idau.IDAU_REGION44.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region44 -idau.IDAU_REGION44.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region44 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION44.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region44 as exempt -idau.IDAU_REGION44.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region44 -idau.IDAU_REGION44.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region44 -idau.IDAU_REGION45.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region45 -idau.IDAU_REGION45.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region45 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION45.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region45 as exempt -idau.IDAU_REGION45.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region45 -idau.IDAU_REGION45.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region45 -idau.IDAU_REGION46.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region46 -idau.IDAU_REGION46.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region46 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION46.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region46 as exempt -idau.IDAU_REGION46.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region46 -idau.IDAU_REGION46.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region46 -idau.IDAU_REGION47.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region47 -idau.IDAU_REGION47.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region47 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION47.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region47 as exempt -idau.IDAU_REGION47.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region47 -idau.IDAU_REGION47.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region47 -idau.IDAU_REGION48.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region48 -idau.IDAU_REGION48.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region48 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION48.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region48 as exempt -idau.IDAU_REGION48.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region48 -idau.IDAU_REGION48.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region48 -idau.IDAU_REGION49.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region49 -idau.IDAU_REGION49.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region49 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION49.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region49 as exempt -idau.IDAU_REGION49.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region49 -idau.IDAU_REGION49.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region49 -idau.IDAU_REGION5.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region5 as exempt -idau.IDAU_REGION50.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region50 -idau.IDAU_REGION50.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region50 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION50.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region50 as exempt -idau.IDAU_REGION50.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region50 -idau.IDAU_REGION50.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region50 -idau.IDAU_REGION51.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region51 -idau.IDAU_REGION51.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region51 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION51.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region51 as exempt -idau.IDAU_REGION51.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region51 -idau.IDAU_REGION51.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region51 -idau.IDAU_REGION52.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region52 -idau.IDAU_REGION52.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region52 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION52.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region52 as exempt -idau.IDAU_REGION52.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region52 -idau.IDAU_REGION52.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region52 -idau.IDAU_REGION53.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region53 -idau.IDAU_REGION53.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region53 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION53.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region53 as exempt -idau.IDAU_REGION53.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region53 -idau.IDAU_REGION53.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region53 -idau.IDAU_REGION54.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region54 -idau.IDAU_REGION54.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region54 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION54.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region54 as exempt -idau.IDAU_REGION54.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region54 -idau.IDAU_REGION54.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region54 -idau.IDAU_REGION55.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region55 -idau.IDAU_REGION55.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region55 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION55.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region55 as exempt -idau.IDAU_REGION55.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region55 -idau.IDAU_REGION55.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region55 -idau.IDAU_REGION56.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region56 -idau.IDAU_REGION56.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region56 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION56.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region56 as exempt -idau.IDAU_REGION56.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region56 -idau.IDAU_REGION56.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region56 -idau.IDAU_REGION57.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region57 -idau.IDAU_REGION57.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region57 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION57.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region57 as exempt -idau.IDAU_REGION57.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region57 -idau.IDAU_REGION57.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region57 -idau.IDAU_REGION58.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region58 -idau.IDAU_REGION58.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region58 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION58.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region58 as exempt -idau.IDAU_REGION58.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region58 -idau.IDAU_REGION58.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region58 -idau.IDAU_REGION59.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region59 -idau.IDAU_REGION59.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region59 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION59.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region59 as exempt -idau.IDAU_REGION59.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region59 -idau.IDAU_REGION59.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region59 -idau.IDAU_REGION6.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region6 as exempt -idau.IDAU_REGION60.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region60 -idau.IDAU_REGION60.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region60 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION60.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region60 as exempt -idau.IDAU_REGION60.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region60 -idau.IDAU_REGION60.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region60 -idau.IDAU_REGION61.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region61 -idau.IDAU_REGION61.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region61 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION61.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region61 as exempt -idau.IDAU_REGION61.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region61 -idau.IDAU_REGION61.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region61 -idau.IDAU_REGION62.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region62 -idau.IDAU_REGION62.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region62 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION62.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region62 as exempt -idau.IDAU_REGION62.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region62 -idau.IDAU_REGION62.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region62 -idau.IDAU_REGION63.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region63 -idau.IDAU_REGION63.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region63 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION63.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region63 as exempt -idau.IDAU_REGION63.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region63 -idau.IDAU_REGION63.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region63 -idau.IDAU_REGION64.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region64 -idau.IDAU_REGION64.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region64 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION64.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region64 as exempt -idau.IDAU_REGION64.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region64 -idau.IDAU_REGION64.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region64 -idau.IDAU_REGION65.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region65 -idau.IDAU_REGION65.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region65 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION65.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region65 as exempt -idau.IDAU_REGION65.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region65 -idau.IDAU_REGION65.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region65 -idau.IDAU_REGION66.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region66 -idau.IDAU_REGION66.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region66 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION66.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region66 as exempt -idau.IDAU_REGION66.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region66 -idau.IDAU_REGION66.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region66 -idau.IDAU_REGION67.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region67 -idau.IDAU_REGION67.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region67 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION67.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region67 as exempt -idau.IDAU_REGION67.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region67 -idau.IDAU_REGION67.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region67 -idau.IDAU_REGION68.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region68 -idau.IDAU_REGION68.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region68 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION68.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region68 as exempt -idau.IDAU_REGION68.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region68 -idau.IDAU_REGION68.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region68 -idau.IDAU_REGION69.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region69 -idau.IDAU_REGION69.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region69 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION69.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region69 as exempt -idau.IDAU_REGION69.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region69 -idau.IDAU_REGION69.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region69 -idau.IDAU_REGION7.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region7 as exempt -idau.IDAU_REGION70.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region70 -idau.IDAU_REGION70.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region70 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION70.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region70 as exempt -idau.IDAU_REGION70.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region70 -idau.IDAU_REGION70.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region70 -idau.IDAU_REGION71.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region71 -idau.IDAU_REGION71.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region71 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION71.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region71 as exempt -idau.IDAU_REGION71.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region71 -idau.IDAU_REGION71.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region71 -idau.IDAU_REGION72.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region72 -idau.IDAU_REGION72.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region72 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION72.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region72 as exempt -idau.IDAU_REGION72.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region72 -idau.IDAU_REGION72.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region72 -idau.IDAU_REGION73.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region73 -idau.IDAU_REGION73.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region73 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION73.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region73 as exempt -idau.IDAU_REGION73.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region73 -idau.IDAU_REGION73.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region73 -idau.IDAU_REGION74.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region74 -idau.IDAU_REGION74.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region74 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION74.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region74 as exempt -idau.IDAU_REGION74.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region74 -idau.IDAU_REGION74.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region74 -idau.IDAU_REGION75.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region75 -idau.IDAU_REGION75.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region75 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION75.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region75 as exempt -idau.IDAU_REGION75.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region75 -idau.IDAU_REGION75.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region75 -idau.IDAU_REGION76.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region76 -idau.IDAU_REGION76.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region76 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION76.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region76 as exempt -idau.IDAU_REGION76.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region76 -idau.IDAU_REGION76.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region76 -idau.IDAU_REGION77.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region77 -idau.IDAU_REGION77.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region77 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION77.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region77 as exempt -idau.IDAU_REGION77.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region77 -idau.IDAU_REGION77.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region77 -idau.IDAU_REGION78.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region78 -idau.IDAU_REGION78.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region78 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION78.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region78 as exempt -idau.IDAU_REGION78.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region78 -idau.IDAU_REGION78.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region78 -idau.IDAU_REGION79.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region79 -idau.IDAU_REGION79.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region79 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION79.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region79 as exempt -idau.IDAU_REGION79.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region79 -idau.IDAU_REGION79.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region79 -idau.IDAU_REGION8.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region8 as exempt -idau.IDAU_REGION80.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region80 -idau.IDAU_REGION80.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region80 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION80.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region80 as exempt -idau.IDAU_REGION80.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region80 -idau.IDAU_REGION80.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region80 -idau.IDAU_REGION81.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region81 -idau.IDAU_REGION81.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region81 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION81.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region81 as exempt -idau.IDAU_REGION81.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region81 -idau.IDAU_REGION81.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region81 -idau.IDAU_REGION82.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region82 -idau.IDAU_REGION82.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region82 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION82.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region82 as exempt -idau.IDAU_REGION82.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region82 -idau.IDAU_REGION82.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region82 -idau.IDAU_REGION83.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region83 -idau.IDAU_REGION83.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region83 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION83.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region83 as exempt -idau.IDAU_REGION83.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region83 -idau.IDAU_REGION83.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region83 -idau.IDAU_REGION84.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region84 -idau.IDAU_REGION84.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region84 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION84.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region84 as exempt -idau.IDAU_REGION84.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region84 -idau.IDAU_REGION84.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region84 -idau.IDAU_REGION85.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region85 -idau.IDAU_REGION85.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region85 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION85.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region85 as exempt -idau.IDAU_REGION85.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region85 -idau.IDAU_REGION85.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region85 -idau.IDAU_REGION86.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region86 -idau.IDAU_REGION86.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region86 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION86.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region86 as exempt -idau.IDAU_REGION86.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region86 -idau.IDAU_REGION86.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region86 -idau.IDAU_REGION87.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region87 -idau.IDAU_REGION87.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region87 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION87.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region87 as exempt -idau.IDAU_REGION87.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region87 -idau.IDAU_REGION87.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region87 -idau.IDAU_REGION88.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region88 -idau.IDAU_REGION88.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region88 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION88.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region88 as exempt -idau.IDAU_REGION88.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region88 -idau.IDAU_REGION88.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region88 -idau.IDAU_REGION89.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region89 -idau.IDAU_REGION89.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region89 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION89.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region89 as exempt -idau.IDAU_REGION89.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region89 -idau.IDAU_REGION89.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region89 -idau.IDAU_REGION9.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region9 as exempt -idau.IDAU_REGION90.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region90 -idau.IDAU_REGION90.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region90 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION90.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region90 as exempt -idau.IDAU_REGION90.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region90 -idau.IDAU_REGION90.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region90 -idau.IDAU_REGION91.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region91 -idau.IDAU_REGION91.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region91 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION91.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region91 as exempt -idau.IDAU_REGION91.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region91 -idau.IDAU_REGION91.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region91 -idau.IDAU_REGION92.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region92 -idau.IDAU_REGION92.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region92 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION92.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region92 as exempt -idau.IDAU_REGION92.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region92 -idau.IDAU_REGION92.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region92 -idau.IDAU_REGION93.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region93 -idau.IDAU_REGION93.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region93 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION93.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region93 as exempt -idau.IDAU_REGION93.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region93 -idau.IDAU_REGION93.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region93 -idau.IDAU_REGION94.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region94 -idau.IDAU_REGION94.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region94 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION94.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region94 as exempt -idau.IDAU_REGION94.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region94 -idau.IDAU_REGION94.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region94 -idau.IDAU_REGION95.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region95 -idau.IDAU_REGION95.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region95 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION95.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region95 as exempt -idau.IDAU_REGION95.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region95 -idau.IDAU_REGION95.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region95 -idau.IDAU_REGION96.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region96 -idau.IDAU_REGION96.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region96 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION96.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region96 as exempt -idau.IDAU_REGION96.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region96 -idau.IDAU_REGION96.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region96 -idau.IDAU_REGION97.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region97 -idau.IDAU_REGION97.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region97 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION97.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region97 as exempt -idau.IDAU_REGION97.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region97 -idau.IDAU_REGION97.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region97 -idau.IDAU_REGION98.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region98 -idau.IDAU_REGION98.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region98 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION98.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region98 as exempt -idau.IDAU_REGION98.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region98 -idau.IDAU_REGION98.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region98 -idau.IDAU_REGION99.BADDR=0 # (int , init-time) default = '0x0' : Base address of IDAU region99 -idau.IDAU_REGION99.ENABLE=0 # (bool , init-time) default = '0' : 0 => IDAU region99 is S (absent if LADDR=0), 1 => NS or NSC or exempt. -idau.IDAU_REGION99.EXEMPT=0 # (bool , init-time) default = '0' : Mark IDAU region99 as exempt -idau.IDAU_REGION99.LADDR=0 # (int , init-time) default = '0x0' : Limit address of IDAU region99 -idau.IDAU_REGION99.NSC=0 # (bool , init-time) default = '0' : Set NSC for IDAU region99 -idau.NUM_IDAU_REGION=18 # (int , init-time) default = '0x12' : -mps3_board.AHBPPCEXP_DIS0=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the AHBNSPPCEXP0 and AHBPPPCEXP0 buses -mps3_board.AHBPPCEXP_DIS1=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the AHBNSPPCEXP1 and AHBPPPCEXP1 buses -mps3_board.AHBPPCEXP_DIS2=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the AHBNSPPCEXP2 and AHBPPPCEXP2 buses -mps3_board.AHBPPCEXP_DIS3=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the AHBNSPPCEXP3 and AHBPPPCEXP3 buses -mps3_board.APBPPCEXP_DIS0=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the APBNSPPCEXP0 and APBPPPCEXP0 buses -mps3_board.APBPPCEXP_DIS1=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the APBNSPPCEXP1 and APBPPPCEXP1 buses -mps3_board.APBPPCEXP_DIS2=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the APBNSPPCEXP2 and APBPPPCEXP2 buses -mps3_board.APBPPCEXP_DIS3=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the APBNSPPCEXP3 and APBPPPCEXP3 buses -mps3_board.DISABLE_GATING=0 # (bool , init-time) default = '0' : Disable Memory gating logic -mps3_board.HAS_CRYPTO=0 # (bool , init-time) default = '0' : CryptoCell Included. 0:No, 1: Yes -mps3_board.HAS_CSS=0 # (bool , init-time) default = '0' : CoreSight SoC-600 based Debug infrastructure Included. 0:No, 1: Yes -mps3_board.PSRAM.fill1=3755990991 # (int , init-time) default = '0xdfdfdfcf' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.PSRAM.fill2=3487555551 # (int , init-time) default = '0xcfdfdfdf' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.PSRAM.size=4294967296 # (int , init-time) default = '0x100000000' : Memory Size -mps3_board.PSRAM_M7.fill1=3755990991 # (int , init-time) default = '0xdfdfdfcf' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.PSRAM_M7.fill2=3487555551 # (int , init-time) default = '0xcfdfdfdf' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.PSRAM_M7.size=4294967296 # (int , init-time) default = '0x100000000' : Memory Size -mps3_board.ahb_ppc_iotss_expansion0.NONSEC_MASK=0 # (int , init-time) default = '0x0' : 16-bit wide mask for security checking of ports: 0 = check, 1 = mask -mps3_board.ahb_ppc_iotss_expansion1.NONSEC_MASK=0 # (int , init-time) default = '0x0' : 16-bit wide mask for security checking of ports: 0 = check, 1 = mask -mps3_board.apb_ppc_iotss_expansion0.NONSEC_MASK=0 # (int , init-time) default = '0x0' : 16-bit wide mask for security checking of ports: 0 = check, 1 = mask -mps3_board.apb_ppc_iotss_expansion1.NONSEC_MASK=0 # (int , init-time) default = '0x0' : 16-bit wide mask for security checking of ports: 0 = check, 1 = mask -mps3_board.apb_ppc_iotss_expansion2.NONSEC_MASK=0 # (int , init-time) default = '0x0' : 16-bit wide mask for security checking of ports: 0 = check, 1 = mask -mps3_board.clock50Hz.div=1 # (int , init-time) default = '0x1' : Clock Rate Divider. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.cmsdk_watchdog.simhalt=0 # (bool , run-time ) default = '0' : Halt on reset. -mps3_board.ddr.fill1=3755990991 # (int , init-time) default = '0xdfdfdfcf' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.ddr.fill2=3487555551 # (int , init-time) default = '0xcfdfdfdf' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.ddr.size=1073741824 # (int , init-time) default = '0x40000000' : Memory Size -mps3_board.dma0.activate_delay=0 # (int , init-time) default = '0x0' : request delay -mps3_board.dma0.fifo_size=16 # (int , init-time) default = '0x10' : Channel FIFO size in bytes -mps3_board.dma0.generate_clear=0 # (bool , init-time) default = '0' : Generate clear response -mps3_board.dma0.max_transfer=256 # (int , init-time) default = '0x100' : Largest atomic transfer -mps3_board.dma0_securitymodifier.behaviour_ns_to_s=0 # (int , init-time) default = '0x0' : Behaviour for NS transactions to S space : 0:block 1:transmit 2:convert to S -mps3_board.dma1.activate_delay=0 # (int , init-time) default = '0x0' : request delay -mps3_board.dma1.fifo_size=16 # (int , init-time) default = '0x10' : Channel FIFO size in bytes -mps3_board.dma1.generate_clear=0 # (bool , init-time) default = '0' : Generate clear response -mps3_board.dma1.max_transfer=256 # (int , init-time) default = '0x100' : Largest atomic transfer -mps3_board.dma1_securitymodifier.behaviour_ns_to_s=0 # (int , init-time) default = '0x0' : Behaviour for NS transactions to S space : 0:block 1:transmit 2:convert to S -mps3_board.dma2.activate_delay=0 # (int , init-time) default = '0x0' : request delay -mps3_board.dma2.fifo_size=16 # (int , init-time) default = '0x10' : Channel FIFO size in bytes -mps3_board.dma2.generate_clear=0 # (bool , init-time) default = '0' : Generate clear response -mps3_board.dma2.max_transfer=256 # (int , init-time) default = '0x100' : Largest atomic transfer -mps3_board.dma2_securitymodifier.behaviour_ns_to_s=0 # (int , init-time) default = '0x0' : Behaviour for NS transactions to S space : 0:block 1:transmit 2:convert to S -mps3_board.dma3.activate_delay=0 # (int , init-time) default = '0x0' : request delay -mps3_board.dma3.fifo_size=16 # (int , init-time) default = '0x10' : Channel FIFO size in bytes -mps3_board.dma3.generate_clear=0 # (bool , init-time) default = '0' : Generate clear response -mps3_board.dma3.max_transfer=256 # (int , init-time) default = '0x100' : Largest atomic transfer -mps3_board.dma3_securitymodifier.behaviour_ns_to_s=0 # (int , init-time) default = '0x0' : Behaviour for NS transactions to S space : 0:block 1:transmit 2:convert to S -mps3_board.exclusive_monitor_ddr.apply_access_width_criteria_to_non_excl_stores=1 # (bool , init-time) default = '1' : Apply the given exclusive store width matching criteria to non-exclusive stores -mps3_board.exclusive_monitor_ddr.clear_on_strex_address_mismatch=1 # (bool , init-time) default = '1' : Whether monitor is cleared when strex fails due to address mismatch -mps3_board.exclusive_monitor_ddr.enable_component=1 # (bool , init-time) default = '1' : Enable component -mps3_board.exclusive_monitor_ddr.log2_granule_size=0 # (int , init-time) default = '0x0' : log2 of address granule size -mps3_board.exclusive_monitor_ddr.match_secure_state=1 # (bool , init-time) default = '1' : Treat the secure state like an address bit -mps3_board.exclusive_monitor_ddr.monitor_access_level=0 # (int , init-time) default = '0x0' : 0: Monitor all accesses, 1: Monitor all accesses except WriteBack, 2: Only monitor accesses with memory type NonCacheable or Device -mps3_board.exclusive_monitor_ddr.monitor_non_excl_stores=0 # (bool , init-time) default = '0' : Monitor non-exclusive stores from the same master -mps3_board.exclusive_monitor_ddr.number_of_monitors=8 # (int , init-time) default = '0x8' : Number of monitors -mps3_board.exclusive_monitor_ddr.shareability_domain=3 # (int , init-time) default = '0x3' : Maximum shareability domain of interest, transactions outside of the domain will pass through un-monitored (0-non-shared, 1-inner, 2-outer, 3-system) -mps3_board.exclusive_monitor_psram.apply_access_width_criteria_to_non_excl_stores=1 # (bool , init-time) default = '1' : Apply the given exclusive store width matching criteria to non-exclusive stores -mps3_board.exclusive_monitor_psram.clear_on_strex_address_mismatch=1 # (bool , init-time) default = '1' : Whether monitor is cleared when strex fails due to address mismatch -mps3_board.exclusive_monitor_psram.enable_component=1 # (bool , init-time) default = '1' : Enable component -mps3_board.exclusive_monitor_psram.log2_granule_size=0 # (int , init-time) default = '0x0' : log2 of address granule size -mps3_board.exclusive_monitor_psram.match_secure_state=1 # (bool , init-time) default = '1' : Treat the secure state like an address bit -mps3_board.exclusive_monitor_psram.monitor_access_level=0 # (int , init-time) default = '0x0' : 0: Monitor all accesses, 1: Monitor all accesses except WriteBack, 2: Only monitor accesses with memory type NonCacheable or Device -mps3_board.exclusive_monitor_psram.monitor_non_excl_stores=0 # (bool , init-time) default = '0' : Monitor non-exclusive stores from the same master -mps3_board.exclusive_monitor_psram.number_of_monitors=8 # (int , init-time) default = '0x8' : Number of monitors -mps3_board.exclusive_monitor_psram.shareability_domain=3 # (int , init-time) default = '0x3' : Maximum shareability domain of interest, transactions outside of the domain will pass through un-monitored (0-non-shared, 1-inner, 2-outer, 3-system) -mps3_board.exclusive_monitor_qspi_sram.apply_access_width_criteria_to_non_excl_stores=1 # (bool , init-time) default = '1' : Apply the given exclusive store width matching criteria to non-exclusive stores -mps3_board.exclusive_monitor_qspi_sram.clear_on_strex_address_mismatch=1 # (bool , init-time) default = '1' : Whether monitor is cleared when strex fails due to address mismatch -mps3_board.exclusive_monitor_qspi_sram.enable_component=1 # (bool , init-time) default = '1' : Enable component -mps3_board.exclusive_monitor_qspi_sram.log2_granule_size=0 # (int , init-time) default = '0x0' : log2 of address granule size -mps3_board.exclusive_monitor_qspi_sram.match_secure_state=1 # (bool , init-time) default = '1' : Treat the secure state like an address bit -mps3_board.exclusive_monitor_qspi_sram.monitor_access_level=0 # (int , init-time) default = '0x0' : 0: Monitor all accesses, 1: Monitor all accesses except WriteBack, 2: Only monitor accesses with memory type NonCacheable or Device -mps3_board.exclusive_monitor_qspi_sram.monitor_non_excl_stores=0 # (bool , init-time) default = '0' : Monitor non-exclusive stores from the same master -mps3_board.exclusive_monitor_qspi_sram.number_of_monitors=8 # (int , init-time) default = '0x8' : Number of monitors -mps3_board.exclusive_monitor_qspi_sram.shareability_domain=3 # (int , init-time) default = '0x3' : Maximum shareability domain of interest, transactions outside of the domain will pass through un-monitored (0-non-shared, 1-inner, 2-outer, 3-system) -mps3_board.exclusive_monitor_sram.apply_access_width_criteria_to_non_excl_stores=1 # (bool , init-time) default = '1' : Apply the given exclusive store width matching criteria to non-exclusive stores -mps3_board.exclusive_monitor_sram.clear_on_strex_address_mismatch=1 # (bool , init-time) default = '1' : Whether monitor is cleared when strex fails due to address mismatch -mps3_board.exclusive_monitor_sram.enable_component=1 # (bool , init-time) default = '1' : Enable component -mps3_board.exclusive_monitor_sram.log2_granule_size=0 # (int , init-time) default = '0x0' : log2 of address granule size -mps3_board.exclusive_monitor_sram.match_secure_state=1 # (bool , init-time) default = '1' : Treat the secure state like an address bit -mps3_board.exclusive_monitor_sram.monitor_access_level=0 # (int , init-time) default = '0x0' : 0: Monitor all accesses, 1: Monitor all accesses except WriteBack, 2: Only monitor accesses with memory type NonCacheable or Device -mps3_board.exclusive_monitor_sram.monitor_non_excl_stores=0 # (bool , init-time) default = '0' : Monitor non-exclusive stores from the same master -mps3_board.exclusive_monitor_sram.number_of_monitors=8 # (int , init-time) default = '0x8' : Number of monitors -mps3_board.exclusive_monitor_sram.shareability_domain=3 # (int , init-time) default = '0x3' : Maximum shareability domain of interest, transactions outside of the domain will pass through un-monitored (0-non-shared, 1-inner, 2-outer, 3-system) -mps3_board.expansion_warning_memory.abort_on_reads=0 # (bool , init-time) default = '0' : Abort on reads (read 0 if false) -mps3_board.expansion_warning_memory.abort_on_writes=0 # (bool , init-time) default = '0' : Abort on writes (ignore if false) -mps3_board.expansion_warning_memory.read_data=0 # (int , init-time) default = '0x0' : Data to return on reads, if not aborting -mps3_board.extra_psram_size=33554432 # (int , init-time) default = '0x2000000' : Size of extra PSRAM RAM -mps3_board.gpio_test_enable=0 # (bool , init-time) default = '0' : Enable GPIO connection test -mps3_board.hostbridge.interfaceName= # (string, init-time) default = '' : Host Interface -mps3_board.hostbridge.userNetOptions= # (string, init-time) default = '' : Control options for UserNet TCP/IP (for internal use only, please do not use) -mps3_board.hostbridge.userNetPorts= # (string, init-time) default = '' : Listening ports to expose in user-mode networking -mps3_board.hostbridge.userNetSubnet=172.20.51.0/24 # (string, init-time) default = '172.20.51.0/24' : Virtual subnet for user-mode networking -mps3_board.hostbridge.userNetworking=0 # (bool , init-time) default = '0' : Enable user-mode networking -mps3_board.iotss_systemcontrol.cpu0wait=0 # (bool , init-time) default = '0' : Whether to hold cpu0 in reset at boot -mps3_board.iotss_systemcontrol.cpu1wait=0 # (bool , init-time) default = '0' : Whether to hold cpu1 in reset at boot -mps3_board.mps3_cmsdk_dualtimer.clk_div0.div=1 # (int , init-time) default = '0x1' : Clock Rate Divider. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.mps3_cmsdk_dualtimer.clk_div0.mul=1 # (int , init-time) default = '0x1' : Clock Rate Multiplier. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.mps3_cmsdk_dualtimer.clk_div1.div=1 # (int , init-time) default = '0x1' : Clock Rate Divider. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.mps3_cmsdk_dualtimer.clk_div1.mul=1 # (int , init-time) default = '0x1' : Clock Rate Multiplier. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.mps3_exclusive_monitor_zbtsram1.apply_access_width_criteria_to_non_excl_stores=1 # (bool , init-time) default = '1' : Apply the given exclusive store width matching criteria to non-exclusive stores -mps3_board.mps3_exclusive_monitor_zbtsram1.clear_on_strex_address_mismatch=1 # (bool , init-time) default = '1' : Whether monitor is cleared when strex fails due to address mismatch -mps3_board.mps3_exclusive_monitor_zbtsram1.enable_component=1 # (bool , init-time) default = '1' : Enable component -mps3_board.mps3_exclusive_monitor_zbtsram1.log2_granule_size=0 # (int , init-time) default = '0x0' : log2 of address granule size -mps3_board.mps3_exclusive_monitor_zbtsram1.match_secure_state=1 # (bool , init-time) default = '1' : Treat the secure state like an address bit -mps3_board.mps3_exclusive_monitor_zbtsram1.monitor_access_level=0 # (int , init-time) default = '0x0' : 0: Monitor all accesses, 1: Monitor all accesses except WriteBack, 2: Only monitor accesses with memory type NonCacheable or Device -mps3_board.mps3_exclusive_monitor_zbtsram1.monitor_non_excl_stores=0 # (bool , init-time) default = '0' : Monitor non-exclusive stores from the same master -mps3_board.mps3_exclusive_monitor_zbtsram1.number_of_monitors=8 # (int , init-time) default = '0x8' : Number of monitors -mps3_board.mps3_exclusive_monitor_zbtsram1.shareability_domain=3 # (int , init-time) default = '0x3' : Maximum shareability domain of interest, transactions outside of the domain will pass through un-monitored (0-non-shared, 1-inner, 2-outer, 3-system) -mps3_board.mps3_exclusive_monitor_zbtsram2.apply_access_width_criteria_to_non_excl_stores=1 # (bool , init-time) default = '1' : Apply the given exclusive store width matching criteria to non-exclusive stores -mps3_board.mps3_exclusive_monitor_zbtsram2.clear_on_strex_address_mismatch=1 # (bool , init-time) default = '1' : Whether monitor is cleared when strex fails due to address mismatch -mps3_board.mps3_exclusive_monitor_zbtsram2.enable_component=1 # (bool , init-time) default = '1' : Enable component -mps3_board.mps3_exclusive_monitor_zbtsram2.log2_granule_size=0 # (int , init-time) default = '0x0' : log2 of address granule size -mps3_board.mps3_exclusive_monitor_zbtsram2.match_secure_state=1 # (bool , init-time) default = '1' : Treat the secure state like an address bit -mps3_board.mps3_exclusive_monitor_zbtsram2.monitor_access_level=0 # (int , init-time) default = '0x0' : 0: Monitor all accesses, 1: Monitor all accesses except WriteBack, 2: Only monitor accesses with memory type NonCacheable or Device -mps3_board.mps3_exclusive_monitor_zbtsram2.monitor_non_excl_stores=0 # (bool , init-time) default = '0' : Monitor non-exclusive stores from the same master -mps3_board.mps3_exclusive_monitor_zbtsram2.number_of_monitors=8 # (int , init-time) default = '0x8' : Number of monitors -mps3_board.mps3_exclusive_monitor_zbtsram2.shareability_domain=3 # (int , init-time) default = '0x3' : Maximum shareability domain of interest, transactions outside of the domain will pass through un-monitored (0-non-shared, 1-inner, 2-outer, 3-system) -mps3_board.mps3_secure_control_register_block.AHBPPCEXP_DIS0=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the AHBNSPPCEXP0 and AHBPPPCEXP0 buses -mps3_board.mps3_secure_control_register_block.AHBPPCEXP_DIS1=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the AHBNSPPCEXP1 and AHBPPPCEXP1 buses -mps3_board.mps3_secure_control_register_block.AHBPPCEXP_DIS2=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the AHBNSPPCEXP2 and AHBPPPCEXP2 buses -mps3_board.mps3_secure_control_register_block.AHBPPCEXP_DIS3=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the AHBNSPPCEXP3 and AHBPPPCEXP3 buses -mps3_board.mps3_secure_control_register_block.APBPPCEXP_DIS0=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the APBNSPPCEXP0 and APBPPPCEXP0 buses -mps3_board.mps3_secure_control_register_block.APBPPCEXP_DIS1=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the APBNSPPCEXP1 and APBPPPCEXP1 buses -mps3_board.mps3_secure_control_register_block.APBPPCEXP_DIS2=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the APBNSPPCEXP2 and APBPPPCEXP2 buses -mps3_board.mps3_secure_control_register_block.APBPPCEXP_DIS3=0 # (int , init-time) default = '0x0' : Disables support for individual bits on the APBNSPPCEXP3 and APBPPPCEXP3 buses -mps3_board.mps3_secure_control_register_block.FLASH_BLOCK_CFG=3 # (int , init-time) default = '0x3' : Flash Block size configuration -mps3_board.mps3_secure_control_register_block.FLASH_WATERMARK_SUPPORTED=1 # (bool , init-time) default = '1' : Flash Watermark supported -mps3_board.mps3_secure_control_register_block.SRAM_BLOCK_CFG=3 # (int , init-time) default = '0x3' : SRAM Block size configuration -mps3_board.mps3_secure_control_register_block.SRAM_WATERMARK_SUPPORTED=1 # (bool , init-time) default = '1' : SRAM Watermark supported -mps3_board.mps3_timer0.clk_div.div=1 # (int , init-time) default = '0x1' : Clock Rate Divider. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.mps3_timer0.clk_div.mul=1 # (int , init-time) default = '0x1' : Clock Rate Multiplier. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.mps3_timer1.clk_div.div=1 # (int , init-time) default = '0x1' : Clock Rate Divider. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.mps3_timer1.clk_div.mul=1 # (int , init-time) default = '0x1' : Clock Rate Multiplier. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.periph_clk.mul=25000000 # (int , init-time) default = '0x17d7840' : Clock Rate Multiplier. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.platform_type=1 # (int , init-time) default = '0x1' : 0:Original MPS3; 1:SSE-300 -mps3_board.qspi_sram.fill1=3755990991 # (int , init-time) default = '0xdfdfdfcf' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.qspi_sram.fill2=3487555551 # (int , init-time) default = '0xcfdfdfdf' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.qspi_sram.size=8388608 # (int , init-time) default = '0x800000' : Memory Size -mps3_board.rtc.RTCDR_reset_value=0 # (int , init-time) default = '0x0' : Reset value for RTCDR -mps3_board.rtc.RTCDR_use_current_time=1 # (bool , init-time) default = '1' : Use current Unix/POSIX time for reset value for RTCDR. If true RTCDR_reset_value is ignored -mps3_board.smsc_91c111.cache_size=65536 # (int , init-time) default = '0x10000' : Size of cache memory in SMSC MMU -mps3_board.smsc_91c111.enabled=0 # (bool , init-time) default = '0' : Host interface connection enabled -mps3_board.smsc_91c111.mac_address=00:02:f7:ef:00:02 # (string, init-time) default = '00:02:f7:ef:00:02' : Host/model MAC address -mps3_board.smsc_91c111.not_lan911x=0 # (bool , init-time) default = '0' : Gracefully fail SMSC LAN911x driver probe -mps3_board.smsc_91c111.promiscuous=1 # (bool , init-time) default = '1' : Put host into promiscuous mode -mps3_board.sram.fill1=3755990991 # (int , init-time) default = '0xdfdfdfcf' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.sram.fill2=3487555551 # (int , init-time) default = '0xcfdfdfdf' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.sram.size=2097152 # (int , init-time) default = '0x200000' : Memory Size -mps3_board.sse300.NUMCPU=1 # (int , init-time) default = '0x1' : Number of Cortex-M CPU cores in the subsystem -mps3_board.sse300.NUMVMBANK=2 # (int , init-time) default = '0x2' : Number of Volatile Memory Banks -mps3_board.sse300.VM_BANK_SIZE=256 # (int , init-time) default = '0x100' : Volatile Memory Bank Size in KiloBytes, where the size of each bank is equal to 2^VM_ADDR_WIDTH -mps3_board.sse300.apb_ppc_iotss3_subsystem0.NONSEC_MASK=0 # (int , init-time) default = '0x0' : 16-bit wide mask for security checking of ports: 0 = check, 1 = mask -mps3_board.sse300.apb_ppc_iotss3_subsystem0.PORTx_ENABLE=65535 # (int , init-time) default = '0xffff' : Enable (1) or disable (0) port x (where x is between 0-15): enable = 1, disable = 0 -mps3_board.sse300.apb_ppc_iotss3_subsystem1.NONSEC_MASK=0 # (int , init-time) default = '0x0' : 16-bit wide mask for security checking of ports: 0 = check, 1 = mask -mps3_board.sse300.apb_ppc_iotss3_subsystem1.PORTx_ENABLE=65535 # (int , init-time) default = '0xffff' : Enable (1) or disable (0) port x (where x is between 0-15): enable = 1, disable = 0 -mps3_board.sse300.bus_error_warning_memory.read_data=0 # (int , init-time) default = '0x0' : Data to return on reads, if not aborting -mps3_board.sse300.clock32kHz.div=1 # (int , init-time) default = '0x1' : Clock Rate Divider. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.sse300.clockdivider.div=1 # (int , init-time) default = '0x1' : Clock Rate Divider. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.sse300.cpu0core_ppu.RevD_support=0 # (bool , init-time) default = '0' : Whether to support Rev D locked IRQ -mps3_board.sse300.cpu0core_ppu.default_op_dyn_en=0 # (bool , init-time) default = '0' : Whether to enable operating mode dynamic transition by default -mps3_board.sse300.cpu0core_ppu.default_op_policy=0 # (int , init-time) default = '0x0' : Default operating policy -mps3_board.sse300.cpu0core_ppu.lock_support=1 # (bool , init-time) default = '1' : Whether to support OFF lock feature -mps3_board.sse300.cpu0core_ppu.revision=r1p1 # (string, init-time) default = 'r1p1' : Revision -mps3_board.sse300.crypto_ppu.RevD_support=0 # (bool , init-time) default = '0' : Whether to support Rev D locked IRQ -mps3_board.sse300.crypto_ppu.default_op_dyn_en=0 # (bool , init-time) default = '0' : Whether to enable operating mode dynamic transition by default -mps3_board.sse300.crypto_ppu.default_op_policy=0 # (int , init-time) default = '0x0' : Default operating policy -mps3_board.sse300.crypto_ppu.default_pwr_dyn_en=0 # (bool , init-time) default = '0' : Whether to enable dynamic power mode transition by default -mps3_board.sse300.crypto_ppu.is_core_ppu=0 # (bool , init-time) default = '0' : PPU is core_ppu type which means wake_request would wait till PPU is OFF/OFF_EMU -mps3_board.sse300.crypto_ppu.lock_support=1 # (bool , init-time) default = '1' : Whether to support OFF lock feature -mps3_board.sse300.crypto_ppu.num_opmode_cfg=0 # (int , init-time) default = '0x0' : Number of operating modes -mps3_board.sse300.crypto_ppu.op_active_cfg=0 # (int , init-time) default = '0x0' : Operating mode active configuration (0: Ladder use model, 1: Independent user model) -mps3_board.sse300.crypto_ppu.revision=r1p1 # (string, init-time) default = 'r1p1' : Revision -mps3_board.sse300.crypto_ppu.use_active_signal=0 # (bool , init-time) default = '0' : Use device-active signal -mps3_board.sse300.dbg_ppu.RevD_support=0 # (bool , init-time) default = '0' : Whether to support Rev D locked IRQ -mps3_board.sse300.dbg_ppu.default_op_dyn_en=0 # (bool , init-time) default = '0' : Whether to enable operating mode dynamic transition by default -mps3_board.sse300.dbg_ppu.default_op_policy=0 # (int , init-time) default = '0x0' : Default operating policy -mps3_board.sse300.dbg_ppu.is_core_ppu=0 # (bool , init-time) default = '0' : PPU is core_ppu type which means wake_request would wait till PPU is OFF/OFF_EMU -mps3_board.sse300.dbg_ppu.lock_support=1 # (bool , init-time) default = '1' : Whether to support OFF lock feature -mps3_board.sse300.dbg_ppu.num_opmode_cfg=0 # (int , init-time) default = '0x0' : Number of operating modes -mps3_board.sse300.dbg_ppu.op_active_cfg=0 # (int , init-time) default = '0x0' : Operating mode active configuration (0: Ladder use model, 1: Independent user model) -mps3_board.sse300.dbg_ppu.revision=r1p1 # (string, init-time) default = 'r1p1' : Revision -mps3_board.sse300.dbg_ppu.use_active_signal=0 # (bool , init-time) default = '0' : Use device-active signal -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram0.apply_access_width_criteria_to_non_excl_stores=1 # (bool , init-time) default = '1' : Apply the given exclusive store width matching criteria to non-exclusive stores -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram0.clear_on_strex_address_mismatch=1 # (bool , init-time) default = '1' : Whether monitor is cleared when strex fails due to address mismatch -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram0.enable_component=1 # (bool , init-time) default = '1' : Enable component -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram0.log2_granule_size=0 # (int , init-time) default = '0x0' : log2 of address granule size -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram0.match_secure_state=1 # (bool , init-time) default = '1' : Treat the secure state like an address bit -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram0.monitor_access_level=0 # (int , init-time) default = '0x0' : 0: Monitor all accesses, 1: Monitor all accesses except WriteBack, 2: Only monitor accesses with memory type NonCacheable or Device -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram0.monitor_non_excl_stores=0 # (bool , init-time) default = '0' : Monitor non-exclusive stores from the same master -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram0.number_of_monitors=8 # (int , init-time) default = '0x8' : Number of monitors -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram0.shareability_domain=3 # (int , init-time) default = '0x3' : Maximum shareability domain of interest, transactions outside of the domain will pass through un-monitored (0-non-shared, 1-inner, 2-outer, 3-system) -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram1.apply_access_width_criteria_to_non_excl_stores=1 # (bool , init-time) default = '1' : Apply the given exclusive store width matching criteria to non-exclusive stores -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram1.clear_on_strex_address_mismatch=1 # (bool , init-time) default = '1' : Whether monitor is cleared when strex fails due to address mismatch -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram1.enable_component=1 # (bool , init-time) default = '1' : Enable component -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram1.log2_granule_size=0 # (int , init-time) default = '0x0' : log2 of address granule size -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram1.match_secure_state=1 # (bool , init-time) default = '1' : Treat the secure state like an address bit -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram1.monitor_access_level=0 # (int , init-time) default = '0x0' : 0: Monitor all accesses, 1: Monitor all accesses except WriteBack, 2: Only monitor accesses with memory type NonCacheable or Device -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram1.monitor_non_excl_stores=0 # (bool , init-time) default = '0' : Monitor non-exclusive stores from the same master -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram1.number_of_monitors=8 # (int , init-time) default = '0x8' : Number of monitors -mps3_board.sse300.exclusive_monitor_iotss3_internal_sram1.shareability_domain=3 # (int , init-time) default = '0x3' : Maximum shareability domain of interest, transactions outside of the domain will pass through un-monitored (0-non-shared, 1-inner, 2-outer, 3-system) -mps3_board.sse300.iotss3_cpuidentity.debugger_master_id=4294967295 # (int , init-time) default = '0xffffffff' : -mps3_board.sse300.iotss3_internal_sram0.fill1=3755990991 # (int , init-time) default = '0xdfdfdfcf' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.sse300.iotss3_internal_sram0.fill2=3487555551 # (int , init-time) default = '0xcfdfdfdf' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.sse300.iotss3_internal_sram0.size=4294967296 # (int , init-time) default = '0x100000000' : Memory Size -mps3_board.sse300.iotss3_internal_sram1.fill1=3755990991 # (int , init-time) default = '0xdfdfdfcf' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.sse300.iotss3_internal_sram1.fill2=3487555551 # (int , init-time) default = '0xcfdfdfdf' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.sse300.iotss3_internal_sram1.size=4294967296 # (int , init-time) default = '0x100000000' : Memory Size -mps3_board.sse300.iotss3_systemcontrol.cpu1wait=1 # (bool , init-time) default = '1' : Whether to hold cpu1 in reset at boot -mps3_board.sse300.iotss3_systemcontrol.cpu2wait=1 # (bool , init-time) default = '1' : Whether to hold cpu2 in reset at boot -mps3_board.sse300.iotss3_systemcontrol.cpu3wait=1 # (bool , init-time) default = '1' : Whether to hold cpu3 in reset at boot -mps3_board.sse300.iotss3_systeminfo.CPU0_HAS_TCM=0 # (bool , init-time) default = '0' : CPU 0 has System TCM. 0:No, 1: Yes -mps3_board.sse300.iotss3_systeminfo.CPU0_TCM_BANK_NUM=0 # (int , init-time) default = '0x0' : The VM Bank that is the TCM memory for CPU 0 -mps3_board.sse300.iotss3_systeminfo.CPU1_HAS_TCM=0 # (bool , init-time) default = '0' : CPU 1 has System TCM. 0:No, 1: Yes -mps3_board.sse300.iotss3_systeminfo.CPU1_TCM_BANK_NUM=0 # (int , init-time) default = '0x0' : The VM Bank that is the TCM memory for CPU 1 -mps3_board.sse300.iotss3_systeminfo.CPU2_HAS_TCM=0 # (bool , init-time) default = '0' : CPU 2 has System TCM. 0:No, 1: Yes -mps3_board.sse300.iotss3_systeminfo.CPU2_TCM_BANK_NUM=0 # (int , init-time) default = '0x0' : The VM Bank that is the TCM memory for CPU 2 -mps3_board.sse300.iotss3_systeminfo.CPU3_HAS_TCM=0 # (bool , init-time) default = '0' : CPU 3 has System TCM. 0:No, 1: Yes -mps3_board.sse300.iotss3_systeminfo.CPU3_TCM_BANK_NUM=0 # (int , init-time) default = '0x0' : The VM Bank that is the TCM memory for CPU 3 -mps3_board.sse300.mgmt_ppu.RevD_support=0 # (bool , init-time) default = '0' : Whether to support Rev D locked IRQ -mps3_board.sse300.mgmt_ppu.default_op_dyn_en=0 # (bool , init-time) default = '0' : Whether to enable operating mode dynamic transition by default -mps3_board.sse300.mgmt_ppu.default_op_policy=0 # (int , init-time) default = '0x0' : Default operating policy -mps3_board.sse300.mgmt_ppu.default_pwr_dyn_en=0 # (bool , init-time) default = '0' : Whether to enable dynamic power mode transition by default -mps3_board.sse300.mgmt_ppu.is_core_ppu=0 # (bool , init-time) default = '0' : PPU is core_ppu type which means wake_request would wait till PPU is OFF/OFF_EMU -mps3_board.sse300.mgmt_ppu.lock_support=1 # (bool , init-time) default = '1' : Whether to support OFF lock feature -mps3_board.sse300.mgmt_ppu.num_opmode_cfg=0 # (int , init-time) default = '0x0' : Number of operating modes -mps3_board.sse300.mgmt_ppu.op_active_cfg=0 # (int , init-time) default = '0x0' : Operating mode active configuration (0: Ladder use model, 1: Independent user model) -mps3_board.sse300.mgmt_ppu.revision=r1p1 # (string, init-time) default = 'r1p1' : Revision -mps3_board.sse300.mgmt_ppu.use_active_signal=0 # (bool , init-time) default = '0' : Use device-active signal -mps3_board.sse300.nonsecure_watchdog.diagnostics=0 # (int , init-time) default = '0x0' : Diagnostics -mps3_board.sse300.nonsecure_watchdog.product_id=0 # (int , init-time) default = '0x0' : Product Identifier -mps3_board.sse300.refcounter.base_frequency=100000000 # (int , init-time) default = '0x5f5e100' : Reset value for CNTFID0, base frequency in Hz -mps3_board.sse300.refcounter.cntcidr0123_C=0 # (int , init-time) default = '0x0' : Values to be returned for control-frame CIDR registers -mps3_board.sse300.refcounter.cntcidr0123_R=0 # (int , init-time) default = '0x0' : Values to be returned for read-frame CIDR registers -mps3_board.sse300.refcounter.cntpidr0123_C=0 # (int , init-time) default = '0x0' : Values to be returned for control-frame PIDR registers 0-3 -mps3_board.sse300.refcounter.cntpidr0123_R=0 # (int , init-time) default = '0x0' : Values to be returned for read-frame PIDR registers 0-3 -mps3_board.sse300.refcounter.cntpidr4567_C=0 # (int , init-time) default = '0x0' : Values to be returned for control-frame PIDR registers 4-7 -mps3_board.sse300.refcounter.cntpidr4567_R=0 # (int , init-time) default = '0x0' : Values to be returned for read-frame PIDR registers 4-7 -mps3_board.sse300.refcounter.diagnostics=0 # (int , init-time) default = '0x0' : Diagnostics -mps3_board.sse300.refcounter.has_counter_scaling=0 # (bool , init-time) default = '0' : Implements ARMv8.4 generic counter scaling -mps3_board.sse300.refcounter.non_arch_fixed_frequency=0 # (int , init-time) default = '0x0' : If set, ignore CNTFID0 and instead use this frequency in Hz -mps3_board.sse300.refcounter.non_arch_start_at_default=1 # (bool , init-time) default = '1' : Firmware is expected to enable the timer at boot time. However, turning this parameter on is a model-specific way of enabling the counter module out of reset. -mps3_board.sse300.refcounter.readonly_is_WI=0 # (bool , init-time) default = '0' : Ignore (rather than failing) on writes to read-frame -mps3_board.sse300.refcounter.use_real_time=0 # (bool , init-time) default = '0' : Update the Generic Timer counter at a real-time base frequency instead of simulator time -mps3_board.sse300.s32k_timer.clk_div.div=1 # (int , init-time) default = '0x1' : Clock Rate Divider. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.sse300.s32k_timer.clk_div.mul=1 # (int , init-time) default = '0x1' : Clock Rate Multiplier. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.sse300.s32k_watchdog.simhalt=0 # (bool , run-time ) default = '0' : Halt on reset. -mps3_board.sse300.secure_control_register_block.FLASH_BLOCK_CFG=3 # (int , init-time) default = '0x3' : Flash Block size configuration -mps3_board.sse300.secure_control_register_block.FLASH_WATERMARK_SUPPORTED=1 # (bool , init-time) default = '1' : Flash Watermark supported -mps3_board.sse300.secure_control_register_block.SRAM_BLOCK_CFG=3 # (int , init-time) default = '0x3' : SRAM Block size configuration -mps3_board.sse300.secure_control_register_block.SRAM_WATERMARK_SUPPORTED=1 # (bool , init-time) default = '1' : SRAM Watermark supported -mps3_board.sse300.secure_watchdog.diagnostics=0 # (int , init-time) default = '0x0' : Diagnostics -mps3_board.sse300.secure_watchdog.product_id=0 # (int , init-time) default = '0x0' : Product Identifier -mps3_board.sse300.sys_ppu.RevD_support=0 # (bool , init-time) default = '0' : Whether to support Rev D locked IRQ -mps3_board.sse300.sys_ppu.default_op_dyn_en=0 # (bool , init-time) default = '0' : Whether to enable operating mode dynamic transition by default -mps3_board.sse300.sys_ppu.default_op_policy=0 # (int , init-time) default = '0x0' : Default operating policy -mps3_board.sse300.sys_ppu.is_core_ppu=0 # (bool , init-time) default = '0' : PPU is core_ppu type which means wake_request would wait till PPU is OFF/OFF_EMU -mps3_board.sse300.sys_ppu.lock_support=1 # (bool , init-time) default = '1' : Whether to support OFF lock feature -mps3_board.sse300.sys_ppu.revision=r1p1 # (string, init-time) default = 'r1p1' : Revision -mps3_board.sse300.sys_ppu.use_active_signal=0 # (bool , init-time) default = '0' : Use device-active signal -mps3_board.sse300.timer0.bypass_ctlbase=1 # (bool , init-time) default = '1' : Bypass CNTBase Access Control. Enable if only timer frame feature is required without CNTBase access control -mps3_board.sse300.timer0.cntel0acr_implemented=0 # (int , init-time) default = '0x0' : A bit-field of 8 bits, where bit {n} enables CNTEL0ACR for timer frame {n} -mps3_board.sse300.timer0.diagnostics=0 # (int , init-time) default = '0x0' : Diagnostics -mps3_board.sse300.timer0.frame_security= # (string, init-time) default = '' : Hard-wired/configurable security for frames (N/S/X, one character per timer frame) -mps3_board.sse300.timer0.num_timers=1 # (int , init-time) default = '0x1' : Number of timer frames -mps3_board.sse300.timer1.bypass_ctlbase=1 # (bool , init-time) default = '1' : Bypass CNTBase Access Control. Enable if only timer frame feature is required without CNTBase access control -mps3_board.sse300.timer1.cntel0acr_implemented=0 # (int , init-time) default = '0x0' : A bit-field of 8 bits, where bit {n} enables CNTEL0ACR for timer frame {n} -mps3_board.sse300.timer1.diagnostics=0 # (int , init-time) default = '0x0' : Diagnostics -mps3_board.sse300.timer1.frame_security= # (string, init-time) default = '' : Hard-wired/configurable security for frames (N/S/X, one character per timer frame) -mps3_board.sse300.timer1.num_timers=1 # (int , init-time) default = '0x1' : Number of timer frames -mps3_board.sse300.timer2.bypass_ctlbase=1 # (bool , init-time) default = '1' : Bypass CNTBase Access Control. Enable if only timer frame feature is required without CNTBase access control -mps3_board.sse300.timer2.cntel0acr_implemented=0 # (int , init-time) default = '0x0' : A bit-field of 8 bits, where bit {n} enables CNTEL0ACR for timer frame {n} -mps3_board.sse300.timer2.diagnostics=0 # (int , init-time) default = '0x0' : Diagnostics -mps3_board.sse300.timer2.frame_security= # (string, init-time) default = '' : Hard-wired/configurable security for frames (N/S/X, one character per timer frame) -mps3_board.sse300.timer2.num_timers=1 # (int , init-time) default = '0x1' : Number of timer frames -mps3_board.sse300.timer3.bypass_ctlbase=1 # (bool , init-time) default = '1' : Bypass CNTBase Access Control. Enable if only timer frame feature is required without CNTBase access control -mps3_board.sse300.timer3.cntel0acr_implemented=0 # (int , init-time) default = '0x0' : A bit-field of 8 bits, where bit {n} enables CNTEL0ACR for timer frame {n} -mps3_board.sse300.timer3.diagnostics=0 # (int , init-time) default = '0x0' : Diagnostics -mps3_board.sse300.timer3.num_timers=1 # (int , init-time) default = '0x1' : Number of timer frames -mps3_board.ssram1.fill1=3755990991 # (int , init-time) default = '0xdfdfdfcf' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.ssram1.fill2=3487555551 # (int , init-time) default = '0xcfdfdfdf' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.ssram1.size=4294967296 # (int , init-time) default = '0x100000000' : Memory Size -mps3_board.ssram2.fill1=3755990991 # (int , init-time) default = '0xdfdfdfcf' : Fill pattern 1, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.ssram2.fill2=3487555551 # (int , init-time) default = '0xcfdfdfdf' : Fill pattern 2, initialise memory at start of simulation with alternating fill1, fill2 pattern -mps3_board.ssram2.size=4294967296 # (int , init-time) default = '0x100000000' : Memory Size -mps3_board.stub_i2c_spi.size=4294967296 # (int , init-time) default = '0x100000000' : Memory Size -mps3_board.telnetterminal0.mode=telnet # (string, init-time) default = 'telnet' : Terminal initialisation mode -mps3_board.telnetterminal0.quiet=0 # (bool , init-time) default = '0' : Avoid output on stdout/stderr -mps3_board.telnetterminal0.start_port=5000 # (int , init-time) default = '0x1388' : Telnet TCP Port Number -mps3_board.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected -mps3_board.telnetterminal0.terminal_command="" # (string, init-time) default = '' : Commandline to launch a terminal application and connect to the opened TCP port. Keywords %port and %title will be replaced with the opened port number and component name respectively. An empty string (default behaviour) will launch xterm (Linux) or telnet.exe (Windows) -mps3_board.telnetterminal1.mode=telnet # (string, init-time) default = 'telnet' : Terminal initialisation mode -mps3_board.telnetterminal1.quiet=0 # (bool , init-time) default = '0' : Avoid output on stdout/stderr -mps3_board.telnetterminal1.start_port=5000 # (int , init-time) default = '0x1388' : Telnet TCP Port Number -mps3_board.telnetterminal1.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected -mps3_board.telnetterminal1.terminal_command="" # (string, init-time) default = '' : Commandline to launch a terminal application and connect to the opened TCP port. Keywords %port and %title will be replaced with the opened port number and component name respectively. An empty string (default behaviour) will launch xterm (Linux) or telnet.exe (Windows) -mps3_board.telnetterminal2.mode=telnet # (string, init-time) default = 'telnet' : Terminal initialisation mode -mps3_board.telnetterminal2.quiet=0 # (bool , init-time) default = '0' : Avoid output on stdout/stderr -mps3_board.telnetterminal2.start_port=5000 # (int , init-time) default = '0x1388' : Telnet TCP Port Number -mps3_board.telnetterminal2.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected -mps3_board.telnetterminal2.terminal_command="" # (string, init-time) default = '' : Commandline to launch a terminal application and connect to the opened TCP port. Keywords %port and %title will be replaced with the opened port number and component name respectively. An empty string (default behaviour) will launch xterm (Linux) or telnet.exe (Windows) -mps3_board.telnetterminal5.mode=telnet # (string, init-time) default = 'telnet' : Terminal initialisation mode -mps3_board.telnetterminal5.quiet=0 # (bool , init-time) default = '0' : Avoid output on stdout/stderr -mps3_board.telnetterminal5.start_port=5000 # (int , init-time) default = '0x1388' : Telnet TCP Port Number -mps3_board.telnetterminal5.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected -mps3_board.telnetterminal5.terminal_command="" # (string, init-time) default = '' : Commandline to launch a terminal application and connect to the opened TCP port. Keywords %port and %title will be replaced with the opened port number and component name respectively. An empty string (default behaviour) will launch xterm (Linux) or telnet.exe (Windows) -mps3_board.uart0.clk_divider.div=1 # (int , init-time) default = '0x1' : Clock Rate Divider. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.uart0.clk_divider.mul=1 # (int , init-time) default = '0x1' : Clock Rate Multiplier. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.uart0.in_file= # (string, init-time) default = '' : Input file for data to be read by the UART -mps3_board.uart0.in_file_escape_sequence=## # (string, init-time) default = '##' : Input file escape sequence -mps3_board.uart0.out_file='-' # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -mps3_board.uart0.shutdown_on_eot=1 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -mps3_board.uart0.shutdown_tag= # (string, run-time ) default = '' : Shutdown simulation when a string is transmitted -mps3_board.uart0.unbuffered_output=0 # (bool , init-time) default = '0' : Unbuffered output -mps3_board.uart1.clk_divider.div=1 # (int , init-time) default = '0x1' : Clock Rate Divider. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.uart1.clk_divider.mul=1 # (int , init-time) default = '0x1' : Clock Rate Multiplier. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.uart1.in_file= # (string, init-time) default = '' : Input file for data to be read by the UART -mps3_board.uart1.in_file_escape_sequence=## # (string, init-time) default = '##' : Input file escape sequence -mps3_board.uart1.out_file='-' # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -mps3_board.uart1.shutdown_on_eot=0 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -mps3_board.uart1.shutdown_tag= # (string, run-time ) default = '' : Shutdown simulation when a string is transmitted -mps3_board.uart1.unbuffered_output=0 # (bool , init-time) default = '0' : Unbuffered output -mps3_board.uart2.clk_divider.div=1 # (int , init-time) default = '0x1' : Clock Rate Divider. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.uart2.clk_divider.mul=1 # (int , init-time) default = '0x1' : Clock Rate Multiplier. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.uart2.in_file= # (string, init-time) default = '' : Input file for data to be read by the UART -mps3_board.uart2.in_file_escape_sequence=## # (string, init-time) default = '##' : Input file escape sequence -mps3_board.uart2.out_file= # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -mps3_board.uart2.shutdown_on_eot=0 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -mps3_board.uart2.shutdown_tag= # (string, run-time ) default = '' : Shutdown simulation when a string is transmitted -mps3_board.uart2.unbuffered_output=0 # (bool , init-time) default = '0' : Unbuffered output -mps3_board.uart3_stub.size=4294967296 # (int , init-time) default = '0x100000000' : Memory Size -mps3_board.uart4_stub.size=4294967296 # (int , init-time) default = '0x100000000' : Memory Size -mps3_board.uart5.clk_divider.div=1 # (int , init-time) default = '0x1' : Clock Rate Divider. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.uart5.clk_divider.mul=1 # (int , init-time) default = '0x1' : Clock Rate Multiplier. This parameter is not exposed via CADI and can only be set in LISA -mps3_board.uart5.in_file= # (string, init-time) default = '' : Input file for data to be read by the UART -mps3_board.uart5.in_file_escape_sequence=## # (string, init-time) default = '##' : Input file escape sequence -mps3_board.uart5.out_file='-' # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) -mps3_board.uart5.shutdown_on_eot=0 # (bool , init-time) default = '0' : Shutdown simulation when a EOT (ASCII 4) char is transmitted (useful for regression tests when semihosting is not available) -mps3_board.uart5.shutdown_tag= # (string, run-time ) default = '' : Shutdown simulation when a string is transmitted -mps3_board.uart5.unbuffered_output=0 # (bool , init-time) default = '0' : Unbuffered output -mps3_board.usb_stub.size=4294967296 # (int , init-time) default = '0x100000000' : Memory Size -mps3_board.visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -mps3_board.visualisation.idler.delay_ms=50 # (int , init-time) default = '0x32' : Determines the period, in milliseconds of real time, between gui_callback() calls. -mps3_board.visualisation.rate_limit-enable=0 # (bool , init-time) default = '1' : Rate limit simulation. -mps3_board.visualisation.window_title=CLCD %cpu% # (string, init-time) default = 'CLCD %cpu%' : Window title (%cpu% is replaced by cpu_name) diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Include/led_port.h b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Include/led_port.h deleted file mode 100644 index e9e6e28..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Include/led_port.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2017 Arm Limited - * - * 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 - * - * http://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. - */ - -#ifndef __LED_PORT_H__ -#define __LED_PORT_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* The goal of this file is to create a common LED API for different targets in order - * create common example applications. - */ - -/* Note: Currently this API doesn't handle the case when a peripheral is - * mapped to secure and non-secure region as well, but could be extended - * to select secure or non-secure one. - */ - -/** - * \brief Get the number of bits of LED port, - * in the current platform, that can be - * read and written in one chunk. - * - * \return Available number of bits of LED port. - */ -unsigned int get_led_port_bit_length(void); - -/** - * \brief Initializes LED device if needed - */ -void led_port_init(void); - -/** - * \brief Set the value of the LED port. - * - * \param[in] led Value of the LED port will be set. - * Every bit represents one physical LED. - * - * \return 0 if succeeded, 1 otherwise - */ -unsigned int set_led_port(unsigned int led_mask); - -/** - * \brief Get the value of the LED port. - * - * \return Value of the LED port - * Every bit represents one physical LED. - */ -unsigned int get_led_port(void); - - -#ifdef __cplusplus -} -#endif -#endif /* __LED_PORT_H__ */ diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Include/serial.h b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Include/serial.h deleted file mode 100644 index 77f15a4..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Include/serial.h +++ /dev/null @@ -1,33 +0,0 @@ -/* -* Copyright (c) 2017 Arm Limited -* -* 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 -* -* http://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. -*/ - -#ifndef __SERIAL_H__ -#define __SERIAL_H__ - - -#include - -/** - * \brief Initializes default UART device - */ -void serial_init(void); - -/** - * \brief Prints a string through the default UART device - */ -void serial_print(char *str); - -#endif /* __SERIAL_H__ */ diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Include/timeout.h b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Include/timeout.h deleted file mode 100644 index a9931ae..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Include/timeout.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2017-2019 Arm Limited - * - * 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 - * - * http://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. - */ - -#ifndef __TIMEOUT_H__ -#define __TIMEOUT_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include "device_definition.h" - -/* Structure to maintain elapsed time */ -struct timeout_t { - void *dev_ptr; - bool is_initialized; -}; - -/** - * \brief Initializes timout structure - * - * \param[in] timeout Pointer to the timeout structure - * \param[in] delay Delay in ms to check timeout against - * - * \return Returns true if the delay value was set, - * false otherwise - */ -bool timeout_init(struct timeout_t *timeout, uint32_t delay); - -/** - * \brief Checks if the given time has passed or not - * - * \param[in] timer Pointer to the timer structure - * - * \details This function compares the timestamp stored in the timeout structure - * and the current time. If the difference is more than the given delay, - * the current time is stored and will be used for the next comparison - * - * \return 1 if the given time has passed, 0 if not - */ -bool timeout_delay_is_elapsed(struct timeout_t *timeout); - -/** - * \brief Uninitializes timout structure and stops timer operation. - * - * \param[in] timeout Pointer to the timeout structure - */ -void timeout_uninit(struct timeout_t *timeout); - -/** - * \brief Waits the specified time in milliseconds. - * - * \param[in] ms Time to wait in milliseconds - */ -void wait_ms(uint32_t ms); - -#ifdef __cplusplus -} -#endif -#endif /* __TIMEOUT_H__ */ diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Source/led_port.c b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Source/led_port.c deleted file mode 100644 index 109495a..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Source/led_port.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2019-2020 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#include -#include "led_port.h" -#include "arm_mps3_io_drv.h" -#include "device_cfg.h" -#include "device_definition.h" - -#define MAX_PIN_FPGAIO_LED 10UL -#define MAX_LED_MASK ((1U << MAX_PIN_FPGAIO_LED) - 1) -#define BIT_VALUE(v, bit) (((v) >> (bit) & 1UL)) - -static unsigned int led_status; - -unsigned int get_led_port_bit_length(void) -{ - return MAX_PIN_FPGAIO_LED; -} - -void led_port_init(void) -{ - /* Turn off all LEDs at init */ - arm_mps3_io_write_leds(&MPS3_IO_DEV, ARM_MPS3_IO_ACCESS_PORT, 0, 0); - led_status = 0x0; -} - -unsigned int set_led_port(unsigned int led_mask) -{ - uint8_t i; - uint32_t value; - - if (led_mask > MAX_LED_MASK) { - return 1; - } - - /* Set the LEDs to new value one by one */ - for (i = 0; i < MAX_PIN_FPGAIO_LED; i++) { - if (BIT_VALUE((led_mask ^ led_status), i)) { - /* led pin i has new value */ - value = BIT_VALUE(led_mask, i); - arm_mps3_io_write_leds(&MPS3_IO_DEV, - ARM_MPS3_IO_ACCESS_PIN, - i, value); - } - } - led_status = led_mask; - - return 0; -} - -/** - * \brief Get the value of the LED port. - * - * \return Value of the LED port - * Every bit represents one physical LED. - */ -unsigned int get_led_port(void) -{ - return arm_mps3_io_read_leds(&MPS3_IO_DEV, - ARM_MPS3_IO_ACCESS_PORT, - 0); -} diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Source/serial.c b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Source/serial.c deleted file mode 100644 index 475f4e3..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Source/serial.c +++ /dev/null @@ -1,55 +0,0 @@ -/* -* Copyright (c) 2017-2020 Arm Limited -* -* 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 -* -* http://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. -*/ - -#include -#include -#include "device_cfg.h" -#include "Driver_USART.h" -#include "serial.h" - -extern ARM_DRIVER_USART Driver_USART0; - -void serial_init(void) -{ - Driver_USART0.Initialize(NULL); - Driver_USART0.Control(ARM_USART_MODE_ASYNCHRONOUS, DEFAULT_UART_BAUDRATE); -} - -void serial_print(char *str) -{ - (void)Driver_USART0.Send(str, strlen(str)); -} - -/* Struct FILE is implemented in stdio.h. Used to redirect printf to UART0 */ -//FILE __stdout; -/* Redirects armclang printf to UART */ -int stdout_putchar(int ch) -{ - if (Driver_USART0.Send(&ch, 1) == ARM_DRIVER_OK) { - return ch; - } - return EOF; -} - -/* Redirects gcc printf to UART0 */ -int _write(int fd, char *str, int len) -{ - if (Driver_USART0.Send(str, len) == ARM_DRIVER_OK) { - return len; - } - return 0; -} - diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Source/systimer_armv8-m_timeout.c b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Source/systimer_armv8-m_timeout.c deleted file mode 100644 index dc79876..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/API/Source/systimer_armv8-m_timeout.c +++ /dev/null @@ -1,73 +0,0 @@ -/* -* Copyright (c) 2019-2020 Arm Limited -* -* 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 -* -* http://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. -*/ - -#include "timeout.h" -#include "device_cfg.h" -#include "systimer_armv8-m_drv.h" -#include "syscounter_armv8-m_cntrl_drv.h" -#include "platform_description.h" - -#define MS_TO_TICK(ms) ((ms) * (SystemCoreClock / 1000)) - -/* Systimer is configured over the 32-bit down-counting Timer view, so maximum - * delay is defined by its bit width. */ -#define MAX_DELAY_MS (UINT32_MAX / \ - (SystemCoreClock / 1000)) - -static uint32_t delay_in_tick; - -bool timeout_init(struct timeout_t *timeout, uint32_t delay) -{ - struct systimer_armv8_m_dev_t *dev; - - if (!timeout || delay > MAX_DELAY_MS) { - return false; - } - - if (timeout->is_initialized) { - return false; - } - - syscounter_armv8_m_cntrl_init(&SYSCOUNTER_CNTRL_ARMV8_M_DEV); - - dev = &SYSTIMER0_ARMV8_M_DEV; - systimer_armv8_m_init(dev); - - delay_in_tick = MS_TO_TICK(delay); - systimer_armv8_m_set_timer_value(dev, delay_in_tick); - - timeout->dev_ptr = (void *)dev; - timeout->is_initialized = true; - - return true; -} - -bool timeout_delay_is_elapsed(struct timeout_t *timeout) -{ - struct systimer_armv8_m_dev_t* dev; - - if (!timeout || !timeout->is_initialized) { - return false; - } - - dev = (struct systimer_armv8_m_dev_t*)timeout->dev_ptr; - if (systimer_armv8_m_is_interrupt_asserted(dev)) { - systimer_armv8_m_set_timer_value(dev, delay_in_tick); - return true; - } - - return false; -} diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/RTE_Device.h b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/RTE_Device.h deleted file mode 100644 index 8de4d3a..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/RTE_Device.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2019-2020 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#ifndef __RTE_DEVICE_H -#define __RTE_DEVICE_H - -// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART0] -// Configuration settings for Driver_USART0 in component ::Drivers:USART -#define RTE_USART0 1 -// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART0] - -// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART1] -// Configuration settings for Driver_USART1 in component ::Drivers:USART -#define RTE_USART1 1 -// USART (Universal synchronous - asynchronous receiver transmitter) [Driver_USART1] - -// MPC (Memory Protection Controller) [Driver_ISRAM0_MPC] -// Configuration settings for Driver_ISRAM0_MPC in component ::Drivers:MPC -#define RTE_ISRAM0_MPC 1 -// MPC (Memory Protection Controller) [Driver_ISRAM0_MPC] - -// MPC (Memory Protection Controller) [Driver_ISRAM1_MPC] -// Configuration settings for Driver_ISRAM1_MPC in component ::Drivers:MPC -#define RTE_ISRAM1_MPC 1 -// MPC (Memory Protection Controller) [Driver_ISRAM1_MPC] - -// MPC (Memory Protection Controller) [Driver_SRAM_MPC] -// Configuration settings for Driver_SRAM_MPC in component ::Drivers:MPC -#define RTE_SRAM_MPC 1 -// MPC (Memory Protection Controller) [Driver_SRAM_MPC] - -// MPC (Memory Protection Controller) [Driver_QSPI_MPC] -// Configuration settings for Driver_QSPI_MPC in component ::Drivers:MPC -#define RTE_QSPI_MPC 1 -// MPC (Memory Protection Controller) [Driver_QSPI_MPC] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_MAIN0] -// Configuration settings for Driver_PPC_SSE300_MAIN0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_MAIN0 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_MAIN0] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_MAIN_EXP0] -// Configuration settings for Driver_PPC_SSE300_MAIN_EXP0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_MAIN_EXP0 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_MAIN_EXP0] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_MAIN_EXP1] -// Configuration settings for Driver_PPC_SSE300_MAIN_EXP1 in component ::Drivers:PPC -#define RTE_PPC_SSE300_MAIN_EXP1 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_MAIN_EXP1] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH0] -// Configuration settings for Driver_PPC_SSE300_PERIPH0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH0 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH0] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH1] -// Configuration settings for Driver_PPC_SSE300_PERIPH1 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH1 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH1] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH_EXP0] -// Configuration settings for Driver_PPC_SSE300_PERIPH_EXP0 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH_EXP0 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH_EXP0] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH_EXP1] -// Configuration settings for Driver_PPC_SSE300_PERIPH_EXP1 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH_EXP1 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH_EXP1] - -// PPC (Peripheral Protection Controller) [PPC_SSE300_PERIPH_EXP2] -// Configuration settings for Driver_PPC_SSE300_PERIPH_EXP2 in component ::Drivers:PPC -#define RTE_PPC_SSE300_PERIPH_EXP2 1 -// PPC (Peripheral Protection Controller) [Driver_PPC_SSE300_PERIPH_EXP2] - -// Flash device emulated by SRAM [Driver_Flash0] -// Configuration settings for Driver_Flash0 in component ::Drivers:Flash -#define RTE_FLASH0 1 -// Flash device emulated by SRAM [Driver_Flash0] - -#endif /* __RTE_DEVICE_H */ diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h deleted file mode 100644 index 5ad6fb6..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/cmsis_driver_config.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2019-2020 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#ifndef __CMSIS_DRIVER_CONFIG_H__ -#define __CMSIS_DRIVER_CONFIG_H__ - -#include "system_core_init.h" -#include "device_cfg.h" -#include "device_definition.h" -#include "platform_base_address.h" - -#endif /* __CMSIS_DRIVER_CONFIG_H__ */ diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/device_cfg.h b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/device_cfg.h deleted file mode 100644 index d3591f2..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/device_cfg.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (c) 2020-2021 Arm Limited. All rights reserved. - * - * 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 - * - * http://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. - */ - -#ifndef __DEVICE_CFG_H__ -#define __DEVICE_CFG_H__ - -/** - * \file device_cfg.h - * \brief Configuration file native driver re-targeting - * - * \details This file can be used to add native driver specific macro - * definitions to select which peripherals are available in the build. - * - * This is a default device configuration file with all peripherals enabled. - */ - -/* Secure only peripheral configuration */ - -/* ARM MPS3 IO SCC */ -#define MPS3_IO_S -#define MPS3_IO_DEV MPS3_IO_DEV_S - -/* ARM UART Controller PL011 */ -#define UART0_CMSDK_S -#define UART0_CMSDK_DEV UART0_CMSDK_DEV_S -#define UART1_CMSDK_S -#define UART1_CMSDK_DEV UART1_CMSDK_DEV_S - -#define DEFAULT_UART_BAUDRATE 115200U - -/* To be used as CODE and DATA sram */ -#define MPC_ISRAM0_S -#define MPC_ISRAM0_DEV MPC_ISRAM0_DEV_S - -#define MPC_ISRAM1_S -#define MPC_ISRAM1_DEV MPC_ISRAM0_DEV_S - -#define MPC_SRAM_S -#define MPC_SRAM_DEV MPC_SRAM_DEV_S - -#define MPC_QSPI_S -#define MPC_QSPI_DEV MPC_QSPI_DEV_S - -/** System Counter Armv8-M */ -#define SYSCOUNTER_CNTRL_ARMV8_M_S -#define SYSCOUNTER_CNTRL_ARMV8_M_DEV SYSCOUNTER_CNTRL_ARMV8_M_DEV_S - -#define SYSCOUNTER_READ_ARMV8_M_S -#define SYSCOUNTER_READ_ARMV8_M_DEV SYSCOUNTER_READ_ARMV8_M_DEV_S -/** - * Arbitrary scaling values for test purposes - */ -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE0_INT 1u -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE0_FRACT 0u -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE1_INT 1u -#define SYSCOUNTER_ARMV8_M_DEFAULT_SCALE1_FRACT 0u - -/* System timer */ -#define SYSTIMER0_ARMV8_M_S -#define SYSTIMER0_ARMV8_M_DEV SYSTIMER0_ARMV8_M_DEV_S -#define SYSTIMER1_ARMV8_M_S -#define SYSTIMER1_ARMV8_M_DEV SYSTIMER1_ARMV8_M_DEV_S -#define SYSTIMER2_ARMV8_M_S -#define SYSTIMER2_ARMV8_M_DEV SYSTIMER2_ARMV8_M_DEV_S -#define SYSTIMER3_ARMV8_M_S -#define SYSTIMER3_ARMV8_M_DEV SYSTIMER3_ARMV8_M_DEV_S - -#define SYSTIMER0_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) -#define SYSTIMER1_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) -#define SYSTIMER2_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) -#define SYSTIMER3_ARMV8M_DEFAULT_FREQ_HZ (25000000ul) - -/* CMSDK GPIO driver structures */ -#define GPIO0_CMSDK_S -#define GPIO0_CMSDK_DEV GPIO0_CMSDK_DEV_S -#define GPIO1_CMSDK_S -#define GPIO1_CMSDK_DEV GPIO1_CMSDK_DEV_S -#define GPIO2_CMSDK_S -#define GPIO2_CMSDK_DEV GPIO2_CMSDK_DEV_S -#define GPIO3_CMSDK_S -#define GPIO3_CMSDK_DEV GPIO3_CMSDK_DEV_S - -/* ARM MPS3 IO FPGAIO driver structures */ -#define ARM_MPS3_IO_FPGAIO_S -#define ARM_MPS3_IO_FPGAIO_DEV ARM_MPS3_IO_FPGAIO_DEV_S - -/* System Watchdogs */ -#define SYSWDOG_ARMV8_M_S -#define SYSWDOG_ARMV8_M_DEV SYSWDOG_ARMV8_M_DEV_S - -/* ARM MPC SIE 300 driver structures */ -#define MPC_VM0_S -#define MPC_VM0_DEV MPC_VM0_DEV_S -#define MPC_VM1_S -#define MPC_VM1_DEV MPC_VM1_DEV_S -#define MPC_SSRAM2_S -#define MPC_SSRAM2_DEV MPC_SSRAM2_DEV_S -#define MPC_SSRAM3_S -#define MPC_SSRAM3_DEV MPC_SSRAM3_DEV_S - -/* ARM PPC driver structures */ -#define PPC_SSE300_MAIN0_S -#define PPC_SSE300_MAIN0_DEV PPC_SSE300_MAIN0_DEV_S -#define PPC_SSE300_MAIN_EXP0_S -#define PPC_SSE300_MAIN_EXP0_DEV PPC_SSE300_MAIN_EXP0_DEV_S -#define PPC_SSE300_MAIN_EXP1_S -#define PPC_SSE300_MAIN_EXP1_DEV PPC_SSE300_MAIN_EXP1_DEV_S -#define PPC_SSE300_MAIN_EXP2_S -#define PPC_SSE300_MAIN_EXP2_DEV PPC_SSE300_MAIN_EXP2_DEV_S -#define PPC_SSE300_MAIN_EXP3_S -#define PPC_SSE300_MAIN_EXP3_DEV PPC_SSE300_MAIN_EXP3_DEV_S -#define PPC_SSE300_PERIPH0_S -#define PPC_SSE300_PERIPH0_DEV PPC_SSE300_PERIPH0_DEV_S -#define PPC_SSE300_PERIPH1_S -#define PPC_SSE300_PERIPH1_DEV PPC_SSE300_PERIPH1_DEV_S -#define PPC_SSE300_PERIPH_EXP0_S -#define PPC_SSE300_PERIPH_EXP0_DEV PPC_SSE300_PERIPH_EXP0_DEV_S -#define PPC_SSE300_PERIPH_EXP1_S -#define PPC_SSE300_PERIPH_EXP1_DEV PPC_SSE300_PERIPH_EXP1_DEV_S -#define PPC_SSE300_PERIPH_EXP2_S -#define PPC_SSE300_PERIPH_EXP2_DEV PPC_SSE300_PERIPH_EXP2_DEV_S -#define PPC_SSE300_PERIPH_EXP3_S -#define PPC_SSE300_PERIPH_EXP3_DEV PPC_SSE300_PERIPH_EXP3_DEV_S - -/* ARM SPI PL022 */ -/* Invalid device stubs are not defined */ -#define DEFAULT_SPI_SPEED_HZ 4000000U /* 4MHz */ -#define SPI1_PL022_S -#define SPI1_PL022_DEV SPI1_PL022_DEV_S - - -#endif /* __DEVICE_CFG_H__ */ \ No newline at end of file diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct deleted file mode 100644 index f289ee3..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct +++ /dev/null @@ -1,78 +0,0 @@ -#! armclang --target=arm-arm-none-eabi -mcpu=cortex-m55 -E -xc - -;/* -; * Copyright (c) 2018-2021 Arm Limited. All rights reserved. -; * -; * 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 -; * -; * http://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. -; * -; */ - -#include "region_defs.h" - -LR_CODE S_CODE_START { - ER_CODE S_CODE_START { - *.o (RESET +First) - .ANY (+RO) - } - - /* - * Place the CMSE Veneers (containing the SG instruction) after the code, in - * a separate 32 bytes aligned region so that the SAU can programmed to just - * set this region as Non-Secure Callable. The maximum size of this - * executable region makes it only used the space left over by the ER_CODE - * region so that you can rely on code+veneer size combined will not exceed - * the S_CODE_SIZE value. We also substract from the available space the - * area used to align this section on 32 bytes boundary (for SAU conf). - */ - ER_CODE_CMSE_VENEER +0 ALIGN 32 { - *(Veneer$$CMSE) - } - /* - * This dummy region ensures that the next one will be aligned on a 32 bytes - * boundary, so that the following region will not be mistakenly configured - * as Non-Secure Callable by the SAU. - */ - ER_CODE_CMSE_VENEER_DUMMY +0 ALIGN 32 EMPTY 0 {} - - /* This empty, zero long execution region is here to mark the limit address - * of the last execution region that is allocated in SRAM. - */ - CODE_WATERMARK +0 EMPTY 0x0 { - } - /* Make sure that the sections allocated in the SRAM does not exceed the - * size of the SRAM available. - */ - ScatterAssert(ImageLimit(CODE_WATERMARK) <= S_CODE_START + S_CODE_SIZE) - - ER_DATA S_DATA_START { - .ANY (+ZI +RW) - } - - #if HEAP_SIZE > 0 - ARM_LIB_HEAP +0 ALIGN 8 EMPTY HEAP_SIZE { ; Reserve empty region for heap - } - #endif - - ARM_LIB_STACK +0 ALIGN 32 EMPTY STACK_SIZE { ; Reserve empty region for stack - } - - /* This empty, zero long execution region is here to mark the limit address - * of the last execution region that is allocated in SRAM. - */ - SRAM_WATERMARK +0 EMPTY 0x0 { - } - /* Make sure that the sections allocated in the SRAM does not exceed the - * size of the SRAM available. - */ - ScatterAssert(ImageLimit(SRAM_WATERMARK) <= S_DATA_START + S_DATA_SIZE) -} diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/platform_base_address.h b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/platform_base_address.h deleted file mode 100644 index c5c3ee7..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/platform_base_address.h +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright (c) 2019-2021 Arm Limited - * - * 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 - * - * http://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. - */ - -/** - * \file platform_base_address.h - * \brief This file defines all the peripheral base addresses for MPS3 SSE-300 + - * Ethos-U55 AN547 platform. - */ - -#ifndef __PLATFORM_BASE_ADDRESS_H__ -#define __PLATFORM_BASE_ADDRESS_H__ - -/* ======= Defines peripherals memory map addresses ======= */ -/* Non-secure memory map addresses */ -#define ITCM_BASE_NS 0x00000000 /* Instruction TCM Non-Secure base address */ -#define SRAM_BASE_NS 0x01000000 /* CODE SRAM Non-Secure base address */ -#define DTCM0_BASE_NS 0x20000000 /* Data TCM block 0 Non-Secure base address */ -#define DTCM1_BASE_NS 0x20020000 /* Data TCM block 1 Non-Secure base address */ -#define DTCM2_BASE_NS 0x20040000 /* Data TCM block 2 Non-Secure base address */ -#define DTCM3_BASE_NS 0x20060000 /* Data TCM block 3 Non-Secure base address */ -#define ISRAM0_BASE_NS 0x21000000 /* Internal SRAM Area Non-Secure base address */ -#define ISRAM1_BASE_NS 0x21200000 /* Internal SRAM Area Non-Secure base address */ -#define QSPI_SRAM_BASE_NS 0x28000000 /* QSPI SRAM Non-Secure base address */ -/* Non-Secure Subsystem peripheral region */ -#define CPU0_PWRCTRL_BASE_NS 0x40012000 /* CPU 0 Power Control Block Non-Secure base address */ -#define CPU0_IDENTITY_BASE_NS 0x4001F000 /* CPU 0 Identity Block Non-Secure base address */ -#define SSE300_NSACFG_BASE_NS 0x40080000 /* SSE-300 Non-Secure Access Configuration Register Block Non-Secure base address */ -/* Non-Secure MSTEXPPILL Peripheral region */ -#define GPIO0_CMSDK_BASE_NS 0x41100000 /* GPIO 0 Non-Secure base address */ -#define GPIO1_CMSDK_BASE_NS 0x41101000 /* GPIO 1 Non-Secure base address */ -#define GPIO2_CMSDK_BASE_NS 0x41102000 /* GPIO 2 Non-Secure base address */ -#define GPIO3_CMSDK_BASE_NS 0x41103000 /* GPIO 3 Non-Secure base address */ -#define AHB_USER_0_BASE_NS 0x41104000 /* AHB USER 0 Non-Secure base address */ -#define AHB_USER_1_BASE_NS 0x41105000 /* AHB USER 1 Non-Secure base address */ -#define AHB_USER_2_BASE_NS 0x41106000 /* AHB USER 2 Non-Secure base address */ -#define AHB_USER_3_BASE_NS 0x41107000 /* AHB USER 3 Non-Secure base address */ -#define DMA_0_BASE_NS 0x41200000 /* DMA 0 Non-Secure base address */ -#define DMA_1_BASE_NS 0x41201000 /* DMA 1 Non-Secure base address */ -#define DMA_2_BASE_NS 0x41202000 /* DMA 2 Non-Secure base address */ -#define DMA_3_BASE_NS 0x41203000 /* DMA 3 Non-Secure base address */ -#define ETHERNET_BASE_NS 0x41400000 /* Ethernet Non-Secure base address */ -#define USB_BASE_NS 0x41500000 /* USB Non-Secure base address */ -#define USER_APB0_BASE_NS 0x41700000 /* User APB 0 Non-Secure base address */ -#define USER_APB1_BASE_NS 0x41701000 /* User APB 1 Non-Secure base address */ -#define USER_APB2_BASE_NS 0x41702000 /* User APB 2 Non-Secure base address */ -#define USER_APB3_BASE_NS 0x41703000 /* User APB 3 Non-Secure base address */ -#define QSPI_CONFIG_BASE_NS 0x41800000 /* QSPI Config Non-Secure base address */ -#define QSPI_WRITE_BASE_NS 0x41801000 /* QSPI Write Non-Secure base address */ -/* Non-Secure Subsystem peripheral region */ -#define SYSTIMER0_ARMV8_M_BASE_NS 0x48000000 /* System Timer 0 Non-Secure base address */ -#define SYSTIMER1_ARMV8_M_BASE_NS 0x48001000 /* System Timer 1 Non-Secure base address */ -#define SYSTIMER2_ARMV8_M_BASE_NS 0x48002000 /* System Timer 2 Non-Secure base address */ -#define SYSTIMER3_ARMV8_M_BASE_NS 0x48003000 /* System Timer 3 Non-Secure base address */ -#define SSE300_SYSINFO_BASE_NS 0x48020000 /* SSE-300 System info Block Non-Secure base address */ -#define SLOWCLK_TIMER_CMSDK_BASE_NS 0x4802F000 /* CMSDK based SLOWCLK Timer Non-Secure base address */ -#define SYSWDOG_ARMV8_M_CNTRL_BASE_NS 0x48040000 /* Non-Secure Watchdog Timer control frame Non-Secure base address */ -#define SYSWDOG_ARMV8_M_REFRESH_BASE_NS 0x48041000 /* Non-Secure Watchdog Timer refresh frame Non-Secure base address */ -#define SYSCNTR_READ_BASE_NS 0x48101000 /* System Counter Read Secure base address */ -/* Non-Secure MSTEXPPIHL Peripheral region */ -#define ETHOS_U55_APB_BASE_NS 0x48102000 /* Ethos-U55 APB Non-Secure base address */ -#define U55_TIMING_ADAPTER_BASE_NS 0x48103000 /* Ethos-U55 Timing Adapter registers Non-Secure base address */ -#define FPGA_SBCon_I2C_TOUCH_BASE_NS 0x49200000 /* FPGA - SBCon I2C (Touch) Non-Secure base address */ -#define FPGA_SBCon_I2C_AUDIO_BASE_NS 0x49201000 /* FPGA - SBCon I2C (Audio Conf) Non-Secure base address */ -#define FPGA_SPI_ADC_BASE_NS 0x49202000 /* FPGA - PL022 (SPI ADC) Non-Secure base address */ -#define FPGA_SPI_SHIELD0_BASE_NS 0x49203000 /* FPGA - PL022 (SPI Shield0) Non-Secure base address */ -#define FPGA_SPI_SHIELD1_BASE_NS 0x49204000 /* FPGA - PL022 (SPI Shield1) Non-Secure base address */ -#define SBCon_I2C_SHIELD0_BASE_NS 0x49205000 /* SBCon (I2C - Shield0) Non-Secure base address */ -#define SBCon_I2C_SHIELD1_BASE_NS 0x49206000 /* SBCon (I2C – Shield1) Non-Secure base address */ -#define USER_APB_BASE_NS 0x49207000 /* USER APB Non-Secure base address */ -#define FPGA_DDR4_EEPROM_BASE_NS 0x49208000 /* FPGA - SBCon I2C (DDR4 EEPROM) Non-Secure base address */ -#define FPGA_SCC_BASE_NS 0x49300000 /* FPGA - SCC registers Non-Secure base address */ -#define FPGA_I2S_BASE_NS 0x49301000 /* FPGA - I2S (Audio) Non-Secure base address */ -#define FPGA_IO_BASE_NS 0x49302000 /* FPGA - IO (System Ctrl + I/O) Non-Secure base address */ -#define UART0_BASE_NS 0x49303000 /* UART 0 Non-Secure base address */ -#define UART1_BASE_NS 0x49304000 /* UART 1 Non-Secure base address */ -#define UART2_BASE_NS 0x49305000 /* UART 2 Non-Secure base address */ -#define UART3_BASE_NS 0x49306000 /* UART 3 Non-Secure base address */ -#define UART4_BASE_NS 0x49307000 /* UART 4 Non-Secure base address */ -#define UART5_BASE_NS 0x49308000 /* UART 5 Non-Secure base address */ -#define CLCD_Config_Reg_BASE_NS 0x4930A000 /* CLCD Config Reg Non-Secure base address */ -#define RTC_BASE_NS 0x4930B000 /* RTC Non-Secure base address */ -#define DDR4_BLK0_BASE_NS 0x60000000 /* DDR4 block 0 Non-Secure base address */ -#define DDR4_BLK2_BASE_NS 0x80000000 /* DDR4 block 2 Non-Secure base address */ -#define DDR4_BLK4_BASE_NS 0xA0000000 /* DDR4 block 4 Non-Secure base address */ -#define DDR4_BLK6_BASE_NS 0xC0000000 /* DDR4 block 6 Non-Secure base address */ - -/* Secure memory map addresses */ -#define ITCM_BASE_S 0x10000000 /* Instruction TCM Secure base address */ -#define SRAM_BASE_S 0x11000000 /* CODE SRAM Secure base address */ -#define DTCM0_BASE_S 0x30000000 /* Data TCM block 0 Secure base address */ -#define DTCM1_BASE_S 0x30020000 /* Data TCM block 1 Secure base address */ -#define DTCM2_BASE_S 0x30040000 /* Data TCM block 2 Secure base address */ -#define DTCM3_BASE_S 0x30060000 /* Data TCM block 3 Secure base address */ -#define ISRAM0_BASE_S 0x31000000 /* Internal SRAM Area Secure base address */ -#define ISRAM1_BASE_S 0x31200000 /* Internal SRAM Area Secure base address */ -#define QSPI_SRAM_BASE_S 0x38000000 /* QSPI SRAM Secure base address */ -/* Secure Subsystem peripheral region */ -#define CPU0_SECCTRL_BASE_S 0x50011000 /* CPU 0 Local Security Control Block Secure base address */ -#define CPU0_PWRCTRL_BASE_S 0x50012000 /* CPU 0 Power Control Block Secure base address */ -#define CPU0_IDENTITY_BASE_S 0x5001F000 /* CPU 0 Identity Block Secure base address */ -#define SSE300_SACFG_BASE_S 0x50080000 /* SSE-300 Secure Access Configuration Register Secure base address */ -#define MPC_ISRAM0_BASE_S 0x50083000 /* Internal SRAM0 Memory Protection Controller Secure base address */ -#define MPC_ISRAM1_BASE_S 0x50084000 /* Internal SRAM1 Memory Protection Controller Secure base address */ -/* Secure MSTEXPPILL Peripheral region */ -#define GPIO0_CMSDK_BASE_S 0x51100000 /* GPIO 0 Secure base address */ -#define GPIO1_CMSDK_BASE_S 0x51101000 /* GPIO 1 Secure base address */ -#define GPIO2_CMSDK_BASE_S 0x51102000 /* GPIO 2 Secure base address */ -#define GPIO3_CMSDK_BASE_S 0x51103000 /* GPIO 3 Secure base address */ -#define AHB_USER_0_BASE_S 0x51104000 /* AHB USER 0 Secure base address */ -#define AHB_USER_1_BASE_S 0x51105000 /* AHB USER 1 Secure base address */ -#define AHB_USER_2_BASE_S 0x51106000 /* AHB USER 2 Secure base address */ -#define AHB_USER_3_BASE_S 0x51107000 /* AHB USER 3 Secure base address */ -#define DMA_0_BASE_S 0x51200000 /* DMA 0 Secure base address */ -#define DMA_1_BASE_S 0x51201000 /* DMA 1 Secure base address */ -#define DMA_2_BASE_S 0x51202000 /* DMA 2 Secure base address */ -#define DMA_3_BASE_S 0x51203000 /* DMA 3 Secure base address */ -#define ETHERNET_BASE_S 0x51400000 /* Ethernet Secure base address */ -#define USB_BASE_S 0x51500000 /* USB Secure base address */ -#define USER_APB0_BASE_S 0x51700000 /* User APB 0 Secure base address */ -#define USER_APB1_BASE_S 0x51701000 /* User APB 1 Secure base address */ -#define USER_APB2_BASE_S 0x51702000 /* User APB 2 Secure base address */ -#define USER_APB3_BASE_S 0x51703000 /* User APB 3 Secure base address */ -#define QSPI_CONFIG_BASE_S 0x51800000 /* QSPI Config Secure base address */ -#define QSPI_WRITE_BASE_S 0x51801000 /* QSPI Write Secure base address */ -#define MPC_SRAM_BASE_S 0x57000000 /* SRAM Memory Protection Controller Secure base address */ -#define MPC_QSPI_BASE_S 0x57001000 /* QSPI Memory Protection Controller Secure base address */ -#define MPC_DDR4_BASE_S 0x57002000 /* DDR4 Memory Protection Controller Secure base address */ -/* Secure Subsystem peripheral region */ -#define SYSTIMER0_ARMV8_M_BASE_S 0x58000000 /* System Timer 0 Secure base address */ -#define SYSTIMER1_ARMV8_M_BASE_S 0x58001000 /* System Timer 1 Secure base address */ -#define SYSTIMER2_ARMV8_M_BASE_S 0x58002000 /* System Timer 0 Secure base address */ -#define SYSTIMER3_ARMV8_M_BASE_S 0x58003000 /* System Timer 1 Secure base address */ -#define SSE300_SYSINFO_BASE_S 0x58020000 /* SSE-300 System info Block Secure base address */ -#define SSE300_SYSCTRL_BASE_S 0x58021000 /* SSE-300 System control Block Secure base address */ -#define SSE300_SYSPPU_BASE_S 0x58022000 /* SSE-300 System Power Policy Unit Secure base address */ -#define SSE300_CPU0PPU_BASE_S 0x58023000 /* SSE-300 CPU 0 Power Policy Unit Secure base address */ -#define SSE300_MGMTPPU_BASE_S 0x58028000 /* SSE-300 Management Power Policy Unit Secure base address */ -#define SSE300_DBGPPU_BASE_S 0x58029000 /* SSE-300 Debug Power Policy Unit Secure base address */ -#define SLOWCLK_WDOG_CMSDK_BASE_S 0x5802E000 /* CMSDK based SLOWCLK Watchdog Secure base address */ -#define SLOWCLK_TIMER_CMSDK_BASE_S 0x5802F000 /* CMSDK based SLOWCLK Timer Secure base address */ -#define SYSWDOG_ARMV8_M_CNTRL_BASE_S 0x58040000 /* Secure Watchdog Timer control frame Secure base address */ -#define SYSWDOG_ARMV8_M_REFRESH_BASE_S 0x58041000 /* Secure Watchdog Timer refresh frame Secure base address */ -#define SYSCNTR_CNTRL_BASE_S 0x58100000 /* System Counter Control Secure base address */ -#define SYSCNTR_READ_BASE_S 0x58101000 /* System Counter Read Secure base address */ -/* Secure MSTEXPPIHL Peripheral region */ -#define ETHOS_U55_APB_BASE_S 0x58102000 /* Ethos-U55 APB Secure base address */ -#define U55_TIMING_ADAPTER_BASE_S 0x58103000 /* Ethos-U55 Timing Adapter registers Secure base address */ -#define FPGA_SBCon_I2C_TOUCH_BASE_S 0x59200000 /* FPGA - SBCon I2C (Touch) Secure base address */ -#define FPGA_SBCon_I2C_AUDIO_BASE_S 0x59201000 /* FPGA - SBCon I2C (Audio Conf) Secure base address */ -#define FPGA_SPI_ADC_BASE_S 0x59202000 /* FPGA - PL022 (SPI ADC) Secure base address */ -#define FPGA_SPI_SHIELD0_BASE_S 0x59203000 /* FPGA - PL022 (SPI Shield0) Secure base address */ -#define FPGA_SPI_SHIELD1_BASE_S 0x59204000 /* FPGA - PL022 (SPI Shield1) Secure base address */ -#define SBCon_I2C_SHIELD0_BASE_S 0x59205000 /* SBCon (I2C - Shield0) Secure base address */ -#define SBCon_I2C_SHIELD1_BASE_S 0x59206000 /* SBCon (I2C – Shield1) Secure base address */ -#define USER_APB_BASE_S 0x59207000 /* USER APB Secure base address */ -#define FPGA_DDR4_EEPROM_BASE_S 0x59208000 /* FPGA - SBCon I2C (DDR4 EEPROM) Secure base address */ -#define FPGA_SCC_BASE_S 0x59300000 /* FPGA - SCC registers Secure base address */ -#define FPGA_I2S_BASE_S 0x59301000 /* FPGA - I2S (Audio) Secure base address */ -#define FPGA_IO_BASE_S 0x59302000 /* FPGA - IO (System Ctrl + I/O) Secure base address */ -#define UART0_BASE_S 0x59303000 /* UART 0 Secure base address */ -#define UART1_BASE_S 0x59304000 /* UART 1 Secure base address */ -#define UART2_BASE_S 0x59305000 /* UART 2 Secure base address */ -#define UART3_BASE_S 0x59306000 /* UART 3 Secure base address */ -#define UART4_BASE_S 0x59307000 /* UART 4 Secure base address */ -#define UART5_BASE_S 0x59308000 /* UART 5 Secure base address */ -#define CLCD_Config_Reg_BASE_S 0x5930A000 /* CLCD Config Reg Secure base address */ -#define RTC_BASE_S 0x5930B000 /* RTC Secure base address */ -#define DDR4_BLK1_BASE_S 0x70000000 /* DDR4 block 1 Secure base address */ -#define DDR4_BLK3_BASE_S 0x90000000 /* DDR4 block 3 Secure base address */ -#define DDR4_BLK5_BASE_S 0xB0000000 /* DDR4 block 5 Secure base address */ -#define DDR4_BLK7_BASE_S 0xD0000000 /* DDR4 block 7 Secure base address */ - -/* Memory map addresses exempt from memory attribution by both the SAU and IDAU */ -#define SSE300_EWIC_BASE 0xE0047000 /* External Wakeup Interrupt Controller - * Access from Non-secure software is only allowed - * if AIRCR.BFHFNMINS is set to 1 */ - -/* Memory size definitions */ -#define ITCM_SIZE (0x00080000) /* 512 kB */ -#define DTCM_BLK_SIZE (0x00020000) /* 128 kB */ -#define DTCM_BLK_NUM (0x4) /* Number of DTCM blocks */ -#define SRAM_SIZE (0x00200000) /* 2 MB */ -#define ISRAM0_SIZE (0x00200000) /* 2 MB */ -#define ISRAM1_SIZE (0x00200000) /* 2 MB */ -#define QSPI_SRAM_SIZE (0x00800000) /* 8 MB */ -#define DDR4_BLK_SIZE (0x10000000) /* 256 MB */ -#define DDR4_BLK_NUM (0x8) /* Number of DDR4 blocks */ - -/* Defines for Driver MPC's */ -/* SRAM -- 2 MB */ -#define MPC_SRAM_RANGE_BASE_NS (SRAM_BASE_NS) -#define MPC_SRAM_RANGE_LIMIT_NS (SRAM_BASE_NS + SRAM_SIZE-1) -#define MPC_SRAM_RANGE_OFFSET_NS (0x0) -#define MPC_SRAM_RANGE_BASE_S (SRAM_BASE_S) -#define MPC_SRAM_RANGE_LIMIT_S (SRAM_BASE_S + SRAM_SIZE-1) -#define MPC_SRAM_RANGE_OFFSET_S (0x0) - -/* QSPI -- 8 MB*/ -#define MPC_QSPI_RANGE_BASE_NS (QSPI_SRAM_BASE_NS) -#define MPC_QSPI_RANGE_LIMIT_NS (QSPI_SRAM_BASE_NS + QSPI_SRAM_SIZE-1) -#define MPC_QSPI_RANGE_OFFSET_NS (0x0) -#define MPC_QSPI_RANGE_BASE_S (QSPI_SRAM_BASE_S) -#define MPC_QSPI_RANGE_LIMIT_S (QSPI_SRAM_BASE_S + QSPI_SRAM_SIZE-1) -#define MPC_QSPI_RANGE_OFFSET_S (0x0) - -/* ISRAM0 -- 2 MB*/ -#define MPC_ISRAM0_RANGE_BASE_NS (ISRAM0_BASE_NS) -#define MPC_ISRAM0_RANGE_LIMIT_NS (ISRAM0_BASE_NS + ISRAM0_SIZE-1) -#define MPC_ISRAM0_RANGE_OFFSET_NS (0x0) -#define MPC_ISRAM0_RANGE_BASE_S (ISRAM0_BASE_S) -#define MPC_ISRAM0_RANGE_LIMIT_S (ISRAM0_BASE_S + ISRAM0_SIZE-1) -#define MPC_ISRAM0_RANGE_OFFSET_S (0x0) - -/* ISRAM1 -- 2 MB*/ -#define MPC_ISRAM1_RANGE_BASE_NS (ISRAM1_BASE_NS) -#define MPC_ISRAM1_RANGE_LIMIT_NS (ISRAM1_BASE_NS + ISRAM1_SIZE-1) -#define MPC_ISRAM1_RANGE_OFFSET_NS (0x0) -#define MPC_ISRAM1_RANGE_BASE_S (ISRAM1_BASE_S) -#define MPC_ISRAM1_RANGE_LIMIT_S (ISRAM1_BASE_S + ISRAM1_SIZE-1) -#define MPC_ISRAM1_RANGE_OFFSET_S (0x0) - -/* DDR4 -- 2GB (8 * 256 MB) */ -#define MPC_DDR4_BLK0_RANGE_BASE_NS (DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK0_RANGE_LIMIT_NS (DDR4_BLK0_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK0_RANGE_OFFSET_NS (0x0) -#define MPC_DDR4_BLK1_RANGE_BASE_S (DDR4_BLK1_BASE_S) -#define MPC_DDR4_BLK1_RANGE_LIMIT_S (DDR4_BLK1_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK1_RANGE_OFFSET_S (DDR4_BLK1_BASE_S - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK2_RANGE_BASE_NS (DDR4_BLK2_BASE_NS) -#define MPC_DDR4_BLK2_RANGE_LIMIT_NS (DDR4_BLK2_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK2_RANGE_OFFSET_NS (DDR4_BLK2_BASE_NS - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK3_RANGE_BASE_S (DDR4_BLK3_BASE_S) -#define MPC_DDR4_BLK3_RANGE_LIMIT_S (DDR4_BLK3_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK3_RANGE_OFFSET_S (DDR4_BLK3_BASE_S - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK4_RANGE_BASE_NS (DDR4_BLK4_BASE_NS) -#define MPC_DDR4_BLK4_RANGE_LIMIT_NS (DDR4_BLK4_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK4_RANGE_OFFSET_NS (DDR4_BLK4_BASE_NS - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK5_RANGE_BASE_S (DDR4_BLK5_BASE_S) -#define MPC_DDR4_BLK5_RANGE_LIMIT_S (DDR4_BLK5_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK5_RANGE_OFFSET_S (DDR4_BLK5_BASE_S - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK6_RANGE_BASE_NS (DDR4_BLK6_BASE_NS) -#define MPC_DDR4_BLK6_RANGE_LIMIT_NS (DDR4_BLK6_BASE_NS + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK6_RANGE_OFFSET_NS (DDR4_BLK6_BASE_NS - DDR4_BLK0_BASE_NS) -#define MPC_DDR4_BLK7_RANGE_BASE_S (DDR4_BLK7_BASE_S) -#define MPC_DDR4_BLK7_RANGE_LIMIT_S (DDR4_BLK7_BASE_S + ((DDR4_BLK_SIZE)-1)) -#define MPC_DDR4_BLK7_RANGE_OFFSET_S (DDR4_BLK7_BASE_S - DDR4_BLK0_BASE_NS) - -#endif /* __PLATFORM_BASE_ADDRESS_H__ */ diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_defs.h b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_defs.h deleted file mode 100644 index c8cd919..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_defs.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2016-2020 Arm Limited - * - * 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 - * - * http://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. - */ - -#ifndef __REGION_DEFS_H__ -#define __REGION_DEFS_H__ - -#include "region_limits.h" - -/* ************************************************************** - * WARNING: this file is parsed both by the C/C++ compiler - * and the linker. As a result the syntax must be valid not only - * for C/C++ but for the linker scripts too. - * Beware of the following limitations: - * - LD (GCC linker) requires white space around operators. - * - UL postfix for macros is not suported by the linker script - ****************************************************************/ - -/* Secure regions */ -#define S_CODE_START ( S_ROM_ALIAS ) -#define S_CODE_SIZE ( TOTAL_S_ROM_SIZE ) -#define S_CODE_LIMIT ( S_CODE_START + S_CODE_SIZE ) - -#define S_DATA_START ( S_RAM_ALIAS ) -#define S_DATA_SIZE ( TOTAL_S_RAM_SIZE ) -#define S_DATA_LIMIT ( S_DATA_START + S_DATA_SIZE ) - -/* Non-Secure regions */ -#define NS_CODE_START ( NS_ROM_ALIAS ) -#define NS_CODE_SIZE ( TOTAL_NS_ROM_SIZE ) -#define NS_CODE_LIMIT ( NS_CODE_START + NS_CODE_SIZE ) - -#define NS_DATA_START ( NS_RAM_ALIAS ) -#define NS_DATA_SIZE ( TOTAL_NS_RAM_SIZE ) -#define NS_DATA_LIMIT ( NS_DATA_START + NS_DATA_SIZE ) - -#endif /* __REGION_DEFS_H__ */ diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_limits.h b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_limits.h deleted file mode 100644 index 58a76c7..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/region_limits.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2018-2020 Arm Limited - * - * 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 - * - * http://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. - */ - -#ifndef __REGION_LIMITS_H__ -#define __REGION_LIMITS_H__ - -/* ************************************************************** - * WARNING: this file is parsed both by the C/C++ compiler - * and the linker. As a result the syntax must be valid not only - * for C/C++ but for the linker scripts too. - * Beware of the following limitations: - * - LD (GCC linker) requires white space around operators. - * - UL postfix for macros is not suported by the linker script - ****************************************************************/ - -/* Secure Code */ -#define S_ROM_ALIAS (0x10000000) /* ITCM_BASE_S */ -#define TOTAL_S_ROM_SIZE (0x00080000) /* 256 kB */ - -/* Secure Data */ -#define S_RAM_ALIAS (0x30000000) /* DTCM_BASE_S */ -#define TOTAL_S_RAM_SIZE (0x00040000) /* 256 kB */ - - -/* Non-Secure Code */ -#define NS_ROM_ALIAS (0x01000000) /* SRAM_BASE_NS */ -#define TOTAL_NS_ROM_SIZE (0x00080000) /* 256 kB */ - -/* Non-Secure Data */ -#define NS_RAM_ALIAS (0x21000000) /* ISRAM0_BASE_NS */ -#define TOTAL_NS_RAM_SIZE (0x00040000) /* 256 kB */ - - -/* Heap and Stack sizes for secure and nonsecure applications */ -#define HEAP_SIZE (0x0000C000) /* 1 KiB */ -#define STACK_SIZE (0x00008000) /* 1 KiB */ - -#endif /* __REGION_LIMITS_H__ */ diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c deleted file mode 100644 index 53e367c..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Device/SSE-300-MPS3/startup_fvp_sse300_mps3.c +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Copyright (c) 2009-2020 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. - */ - -/* - * This file is derivative of CMSIS V5.6.0 startup_ARMv81MML.c - * Git SHA: b5f0603d6a584d1724d952fd8b0737458b90d62b - */ - -#include "cmsis.h" - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler Function Prototype - *----------------------------------------------------------------------------*/ -typedef void( *pFunc )( void ); - -/*---------------------------------------------------------------------------- - External References - *----------------------------------------------------------------------------*/ -extern uint32_t __INITIAL_SP; -extern uint32_t __STACK_LIMIT; - -extern void __PROGRAM_START(void) __NO_RETURN; - -/*---------------------------------------------------------------------------- - Internal References - *----------------------------------------------------------------------------*/ -void Reset_Handler (void) __NO_RETURN; - -/*---------------------------------------------------------------------------- - Exception / Interrupt Handler - *----------------------------------------------------------------------------*/ -#define DEFAULT_IRQ_HANDLER(handler_name) \ -void __WEAK handler_name(void); \ -void handler_name(void) { \ - while(1); \ -} - -/* Exceptions */ -DEFAULT_IRQ_HANDLER(NMI_Handler) -DEFAULT_IRQ_HANDLER(HardFault_Handler) -DEFAULT_IRQ_HANDLER(MemManage_Handler) -DEFAULT_IRQ_HANDLER(BusFault_Handler) -DEFAULT_IRQ_HANDLER(UsageFault_Handler) -DEFAULT_IRQ_HANDLER(SecureFault_Handler) -DEFAULT_IRQ_HANDLER(SVC_Handler) -DEFAULT_IRQ_HANDLER(DebugMon_Handler) -DEFAULT_IRQ_HANDLER(PendSV_Handler) -DEFAULT_IRQ_HANDLER(SysTick_Handler) - -DEFAULT_IRQ_HANDLER(NONSEC_WATCHDOG_RESET_Handler) -DEFAULT_IRQ_HANDLER(NONSEC_WATCHDOG_Handler) -DEFAULT_IRQ_HANDLER(SLOWCLK_Timer_Handler) -DEFAULT_IRQ_HANDLER(TIMER0_Handler) -DEFAULT_IRQ_HANDLER(TIMER1_Handler) -DEFAULT_IRQ_HANDLER(TIMER2_Handler) -DEFAULT_IRQ_HANDLER(MPC_Handler) -DEFAULT_IRQ_HANDLER(PPC_Handler) -DEFAULT_IRQ_HANDLER(MSC_Handler) -DEFAULT_IRQ_HANDLER(BRIDGE_ERROR_Handler) -DEFAULT_IRQ_HANDLER(MGMT_PPU_Handler) -DEFAULT_IRQ_HANDLER(SYS_PPU_Handler) -DEFAULT_IRQ_HANDLER(CPU0_PPU_Handler) -DEFAULT_IRQ_HANDLER(DEBUG_PPU_Handler) -DEFAULT_IRQ_HANDLER(TIMER3_Handler) -DEFAULT_IRQ_HANDLER(CTI_REQ0_IRQHandler) -DEFAULT_IRQ_HANDLER(CTI_REQ1_IRQHandler) - -DEFAULT_IRQ_HANDLER(System_Timestamp_Counter_Handler) -DEFAULT_IRQ_HANDLER(UARTRX0_Handler) -DEFAULT_IRQ_HANDLER(UARTTX0_Handler) -DEFAULT_IRQ_HANDLER(UARTRX1_Handler) -DEFAULT_IRQ_HANDLER(UARTTX1_Handler) -DEFAULT_IRQ_HANDLER(UARTRX2_Handler) -DEFAULT_IRQ_HANDLER(UARTTX2_Handler) -DEFAULT_IRQ_HANDLER(UARTRX3_Handler) -DEFAULT_IRQ_HANDLER(UARTTX3_Handler) -DEFAULT_IRQ_HANDLER(UARTRX4_Handler) -DEFAULT_IRQ_HANDLER(UARTTX4_Handler) -DEFAULT_IRQ_HANDLER(UART0_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART1_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART2_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART3_Combined_Handler) -DEFAULT_IRQ_HANDLER(UART4_Combined_Handler) -DEFAULT_IRQ_HANDLER(UARTOVF_Handler) -DEFAULT_IRQ_HANDLER(ETHERNET_Handler) -DEFAULT_IRQ_HANDLER(I2S_Handler) -DEFAULT_IRQ_HANDLER(TOUCH_SCREEN_Handler) -DEFAULT_IRQ_HANDLER(USB_Handler) -DEFAULT_IRQ_HANDLER(SPI_ADC_Handler) -DEFAULT_IRQ_HANDLER(SPI_SHIELD0_Handler) -DEFAULT_IRQ_HANDLER(SPI_SHIELD1_Handler) -DEFAULT_IRQ_HANDLER(ETHOS_U55_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_Combined_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_3_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_4_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_5_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_6_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_7_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_8_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_9_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_10_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_11_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_12_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_13_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_14_Handler) -DEFAULT_IRQ_HANDLER(GPIO0_15_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_3_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_4_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_5_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_6_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_7_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_8_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_9_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_10_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_11_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_12_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_13_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_14_Handler) -DEFAULT_IRQ_HANDLER(GPIO1_15_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_3_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_4_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_5_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_6_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_7_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_8_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_9_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_10_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_11_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_12_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_13_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_14_Handler) -DEFAULT_IRQ_HANDLER(GPIO2_15_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_0_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_1_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_2_Handler) -DEFAULT_IRQ_HANDLER(GPIO3_3_Handler) -DEFAULT_IRQ_HANDLER(UARTRX5_Handler) -DEFAULT_IRQ_HANDLER(UARTTX5_Handler) -DEFAULT_IRQ_HANDLER(UART5_Handler) - -/*---------------------------------------------------------------------------- - Exception / Interrupt Vector table - *----------------------------------------------------------------------------*/ - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wpedantic" -#endif - -extern const pFunc __VECTOR_TABLE[496]; - const pFunc __VECTOR_TABLE[496] __VECTOR_TABLE_ATTRIBUTE = { - (pFunc)(&__INITIAL_SP), /* Initial Stack Pointer */ - Reset_Handler, /* Reset Handler */ - NMI_Handler, /* -14: NMI Handler */ - HardFault_Handler, /* -13: Hard Fault Handler */ - MemManage_Handler, /* -12: MPU Fault Handler */ - BusFault_Handler, /* -11: Bus Fault Handler */ - UsageFault_Handler, /* -10: Usage Fault Handler */ - SecureFault_Handler, /* -9: Secure Fault Handler */ - 0, /* Reserved */ - 0, /* Reserved */ - 0, /* Reserved */ - SVC_Handler, /* -5: SVCall Handler */ - DebugMon_Handler, /* -4: Debug Monitor Handler */ - 0, /* Reserved */ - PendSV_Handler, /* -2: PendSV Handler */ - SysTick_Handler, /* -1: SysTick Handler */ - - NONSEC_WATCHDOG_RESET_Handler, /* 0: Non-Secure Watchdog Reset Handler */ - NONSEC_WATCHDOG_Handler, /* 1: Non-Secure Watchdog Handler */ - SLOWCLK_Timer_Handler, /* 2: SLOWCLK Timer Handler */ - TIMER0_Handler, /* 3: TIMER 0 Handler */ - TIMER1_Handler, /* 4: TIMER 1 Handler */ - TIMER2_Handler, /* 5: TIMER 2 Handler */ - 0, /* 6: Reserved */ - 0, /* 7: Reserved */ - 0, /* 8: Reserved */ - MPC_Handler, /* 9: MPC Combined (Secure) Handler */ - PPC_Handler, /* 10: PPC Combined (Secure) Handler */ - MSC_Handler, /* 11: MSC Combined (Secure) Handler */ - BRIDGE_ERROR_Handler, /* 12: Bridge Error (Secure) Handler */ - 0, /* 13: Reserved */ - MGMT_PPU_Handler, /* 14: MGMT PPU Handler */ - SYS_PPU_Handler, /* 15: SYS PPU Handler */ - CPU0_PPU_Handler, /* 16: CPU0 PPU Handler */ - 0, /* 17: Reserved */ - 0, /* 18: Reserved */ - 0, /* 19: Reserved */ - 0, /* 20: Reserved */ - 0, /* 21: Reserved */ - 0, /* 22: Reserved */ - 0, /* 23: Reserved */ - 0, /* 24: Reserved */ - 0, /* 25: Reserved */ - DEBUG_PPU_Handler, /* 26: DEBUG PPU Handler */ - TIMER3_Handler, /* 27: TIMER 3 Handler */ - CTI_REQ0_IRQHandler, /* 28: CTI request 0 IRQ Handler */ - CTI_REQ1_IRQHandler, /* 29: CTI request 1 IRQ Handler */ - 0, /* 30: Reserved */ - 0, /* 31: Reserved */ - - /* External interrupts */ - System_Timestamp_Counter_Handler, /* 32: System timestamp counter Handler */ - UARTRX0_Handler, /* 33: UART 0 RX Handler */ - UARTTX0_Handler, /* 34: UART 0 TX Handler */ - UARTRX1_Handler, /* 35: UART 1 RX Handler */ - UARTTX1_Handler, /* 36: UART 1 TX Handler */ - UARTRX2_Handler, /* 37: UART 2 RX Handler */ - UARTTX2_Handler, /* 38: UART 2 TX Handler */ - UARTRX3_Handler, /* 39: UART 3 RX Handler */ - UARTTX3_Handler, /* 40: UART 3 TX Handler */ - UARTRX4_Handler, /* 41: UART 4 RX Handler */ - UARTTX4_Handler, /* 42: UART 4 TX Handler */ - UART0_Combined_Handler, /* 43: UART 0 Combined Handler */ - UART1_Combined_Handler, /* 44: UART 1 Combined Handler */ - UART2_Combined_Handler, /* 45: UART 2 Combined Handler */ - UART3_Combined_Handler, /* 46: UART 3 Combined Handler */ - UART4_Combined_Handler, /* 47: UART 4 Combined Handler */ - UARTOVF_Handler, /* 48: UART 0, 1, 2, 3, 4 & 5 Overflow Handler */ - ETHERNET_Handler, /* 49: Ethernet Handler */ - I2S_Handler, /* 50: Audio I2S Handler */ - TOUCH_SCREEN_Handler, /* 51: Touch Screen Handler */ - USB_Handler, /* 52: USB Handler */ - SPI_ADC_Handler, /* 53: SPI ADC Handler */ - SPI_SHIELD0_Handler, /* 54: SPI (Shield 0) Handler */ - SPI_SHIELD1_Handler, /* 55: SPI (Shield 0) Handler */ - ETHOS_U55_Handler, /* 56: Ethos-U55 Handler */ - 0, /* 57: Reserved */ - 0, /* 58: Reserved */ - 0, /* 59: Reserved */ - 0, /* 60: Reserved */ - 0, /* 61: Reserved */ - 0, /* 62: Reserved */ - 0, /* 63: Reserved */ - 0, /* 64: Reserved */ - 0, /* 65: Reserved */ - 0, /* 66: Reserved */ - 0, /* 67: Reserved */ - 0, /* 68: Reserved */ - GPIO0_Combined_Handler, /* 69: GPIO 0 Combined Handler */ - GPIO1_Combined_Handler, /* 70: GPIO 1 Combined Handler */ - GPIO2_Combined_Handler, /* 71: GPIO 2 Combined Handler */ - GPIO3_Combined_Handler, /* 72: GPIO 3 Combined Handler */ - GPIO0_0_Handler, /* 73: GPIO0 Pin 0 Handler */ - GPIO0_1_Handler, /* 74: GPIO0 Pin 1 Handler */ - GPIO0_2_Handler, /* 75: GPIO0 Pin 2 Handler */ - GPIO0_3_Handler, /* 76: GPIO0 Pin 3 Handler */ - GPIO0_4_Handler, /* 77: GPIO0 Pin 4 Handler */ - GPIO0_5_Handler, /* 78: GPIO0 Pin 5 Handler */ - GPIO0_6_Handler, /* 79: GPIO0 Pin 6 Handler */ - GPIO0_7_Handler, /* 80: GPIO0 Pin 7 Handler */ - GPIO0_8_Handler, /* 81: GPIO0 Pin 8 Handler */ - GPIO0_9_Handler, /* 82: GPIO0 Pin 9 Handler */ - GPIO0_10_Handler, /* 83: GPIO0 Pin 10 Handler */ - GPIO0_11_Handler, /* 84: GPIO0 Pin 11 Handler */ - GPIO0_12_Handler, /* 85: GPIO0 Pin 12 Handler */ - GPIO0_13_Handler, /* 86: GPIO0 Pin 13 Handler */ - GPIO0_14_Handler, /* 87: GPIO0 Pin 14 Handler */ - GPIO0_15_Handler, /* 88: GPIO0 Pin 15 Handler */ - GPIO1_0_Handler, /* 89: GPIO1 Pin 0 Handler */ - GPIO1_1_Handler, /* 90: GPIO1 Pin 1 Handler */ - GPIO1_2_Handler, /* 91: GPIO1 Pin 2 Handler */ - GPIO1_3_Handler, /* 92: GPIO1 Pin 3 Handler */ - GPIO1_4_Handler, /* 93: GPIO1 Pin 4 Handler */ - GPIO1_5_Handler, /* 94: GPIO1 Pin 5 Handler */ - GPIO1_6_Handler, /* 95: GPIO1 Pin 6 Handler */ - GPIO1_7_Handler, /* 96: GPIO1 Pin 7 Handler */ - GPIO1_8_Handler, /* 97: GPIO1 Pin 8 Handler */ - GPIO1_9_Handler, /* 98: GPIO1 Pin 9 Handler */ - GPIO1_10_Handler, /* 99: GPIO1 Pin 10 Handler */ - GPIO1_11_Handler, /* 100: GPIO1 Pin 11 Handler */ - GPIO1_12_Handler, /* 101: GPIO1 Pin 12 Handler */ - GPIO1_13_Handler, /* 102: GPIO1 Pin 13 Handler */ - GPIO1_14_Handler, /* 103: GPIO1 Pin 14 Handler */ - GPIO1_15_Handler, /* 104: GPIO1 Pin 15 Handler */ - GPIO2_0_Handler, /* 105: GPIO2 Pin 0 Handler */ - GPIO2_1_Handler, /* 106: GPIO2 Pin 1 Handler */ - GPIO2_2_Handler, /* 107: GPIO2 Pin 2 Handler */ - GPIO2_3_Handler, /* 108: GPIO2 Pin 3 Handler */ - GPIO2_4_Handler, /* 109: GPIO2 Pin 4 Handler */ - GPIO2_5_Handler, /* 110: GPIO2 Pin 5 Handler */ - GPIO2_6_Handler, /* 111: GPIO2 Pin 6 Handler */ - GPIO2_7_Handler, /* 112: GPIO2 Pin 7 Handler */ - GPIO2_8_Handler, /* 113: GPIO2 Pin 8 Handler */ - GPIO2_9_Handler, /* 114: GPIO2 Pin 9 Handler */ - GPIO2_10_Handler, /* 115: GPIO2 Pin 10 Handler */ - GPIO2_11_Handler, /* 116: GPIO2 Pin 11 Handler */ - GPIO2_12_Handler, /* 117: GPIO2 Pin 12 Handler */ - GPIO2_13_Handler, /* 118: GPIO2 Pin 13 Handler */ - GPIO2_14_Handler, /* 119: GPIO2 Pin 14 Handler */ - GPIO2_15_Handler, /* 120: GPIO2 Pin 15 Handler */ - GPIO3_0_Handler, /* 121: GPIO3 Pin 0 Handler */ - GPIO3_1_Handler, /* 122: GPIO3 Pin 1 Handler */ - GPIO3_2_Handler, /* 123: GPIO3 Pin 2 Handler */ - GPIO3_3_Handler, /* 124: GPIO3 Pin 3 Handler */ - UARTRX5_Handler, /* 125: UART 5 RX Interrupt */ - UARTTX5_Handler, /* 126: UART 5 TX Interrupt */ - UART5_Handler, /* 127: UART 5 combined Interrupt */ - 0, /* 128: Reserved */ - 0, /* 129: Reserved */ - 0, /* 130: Reserved */ -}; - -#if defined ( __GNUC__ ) -#pragma GCC diagnostic pop -#endif - -/*---------------------------------------------------------------------------- - Reset Handler called on controller reset - *----------------------------------------------------------------------------*/ -void Reset_Handler(void) -{ - __set_MSPLIM((uint32_t)(&__STACK_LIMIT)); - - SystemInit(); /* CMSIS System Initialization */ - __PROGRAM_START(); /* Enter PreMain (C library entry point) */ -} diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/debug_log.cc b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/debug_log.cc deleted file mode 100644 index bc79d43..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/debug_log.cc +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -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 - - http://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. -==============================================================================*/ - -// Implementation for the DebugLog() function that prints to the debug logger on -// an generic Cortex-M device. - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -#include "tensorflow/lite/micro/debug_log.h" - -#include "tensorflow/lite/micro/cortex_m_generic/debug_log_callback.h" - -static DebugLogCallback debug_log_callback = nullptr; - -void RegisterDebugLogCallback(void (*cb)(const char* s)) { - debug_log_callback = cb; -} - -void DebugLog(const char* s) { -#ifndef TF_LITE_STRIP_ERROR_STRINGS - if (debug_log_callback != nullptr) { - debug_log_callback(s); - } -#endif -} - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/micro_time.cc b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/micro_time.cc deleted file mode 100644 index 023ac6d..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/micro_time.cc +++ /dev/null @@ -1,67 +0,0 @@ -/* Copyright 2021 The TensorFlow Authors. All Rights Reserved. - -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 - - http://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. -==============================================================================*/ - -#include "tensorflow/lite/micro/micro_time.h" - -// DWT (Data Watchpoint and Trace) registers, only exists on ARM Cortex with a -// DWT unit. -#define KIN1_DWT_CONTROL (*((volatile uint32_t*)0xE0001000)) -/*!< DWT Control register */ - -// DWT Control register. -#define KIN1_DWT_CYCCNTENA_BIT (1UL << 0) - -// CYCCNTENA bit in DWT_CONTROL register. -#define KIN1_DWT_CYCCNT (*((volatile uint32_t*)0xE0001004)) - -// DWT Cycle Counter register. -#define KIN1_DEMCR (*((volatile uint32_t*)0xE000EDFC)) - -// DEMCR: Debug Exception and Monitor Control Register. -#define KIN1_TRCENA_BIT (1UL << 24) - -#define KIN1_LAR (*((volatile uint32_t*)0xE0001FB0)) - -#define KIN1_DWT_CONTROL (*((volatile uint32_t*)0xE0001000)) - -// Unlock access to DWT (ITM, etc.)registers. -#define KIN1_UnlockAccessToDWT() KIN1_LAR = 0xC5ACCE55; - -// TRCENA: Enable trace and debug block DEMCR (Debug Exception and Monitor -// Control Register. -#define KIN1_InitCycleCounter() KIN1_DEMCR |= KIN1_TRCENA_BIT - -#define KIN1_ResetCycleCounter() KIN1_DWT_CYCCNT = 0 -#define KIN1_EnableCycleCounter() KIN1_DWT_CONTROL |= KIN1_DWT_CYCCNTENA_BIT -#define KIN1_DisableCycleCounter() KIN1_DWT_CONTROL &= ~KIN1_DWT_CYCCNTENA_BIT -#define KIN1_GetCycleCounter() KIN1_DWT_CYCCNT - -namespace tflite { - -int32_t ticks_per_second() { return 0; } - -int32_t GetCurrentTimeTicks() { - static bool is_initialized = false; - if (!is_initialized) { - KIN1_UnlockAccessToDWT(); - KIN1_InitCycleCounter(); - KIN1_ResetCycleCounter(); - KIN1_EnableCycleCounter(); - is_initialized = true; - } - return KIN1_GetCycleCounter(); -} - -} // namespace tflite diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/system_setup.cc b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/system_setup.cc deleted file mode 100644 index df6cfc6..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/Machine_Learning/system_setup.cc +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2021 The TensorFlow Authors. All Rights Reserved. - -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 - - http://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. -==============================================================================*/ - -#include "tensorflow/lite/micro/system_setup.h" -#include "stdio.h" -#include "tensorflow/lite/micro/cortex_m_generic/debug_log_callback.h" - -extern "C" void stdio_init (void); - -namespace tflite { - -void debug_log_printf(const char* s) { - printf("%s", s); -} - -// To add an equivalent function for your own platform, create your own -// implementation file, and place it in a subfolder named after the target. See -// tensorflow/lite/micro/debug_log.cc for a similar example. -void InitializeTarget() { - stdio_init(); - RegisterDebugLogCallback(debug_log_printf); - //debug_log_printf("Initialized UART and registered Callback.") -} -} // namespace tflite diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/Pre_Include_Global.h b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/Pre_Include_Global.h deleted file mode 100644 index 6234fa2..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/Pre_Include_Global.h +++ /dev/null @@ -1,18 +0,0 @@ - -/* - * Auto generated Run-Time-Environment Configuration File - * *** Do not modify ! *** - * - * Project: 'template_Corstone300' - * Target: 'template_Corstone300' - */ - -#ifndef PRE_INCLUDE_GLOBAL_H -#define PRE_INCLUDE_GLOBAL_H - -/* tensorflow::Machine Learning:TensorFlow:Kernel:CMSIS-NN:0.1.20210416 */ -// enabling global pre includes - #define TF_LITE_STATIC_MEMORY 1 - - -#endif /* PRE_INCLUDE_GLOBAL_H */ diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/RTE_Components.h b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/RTE_Components.h deleted file mode 100644 index 452f25e..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/_template_Corstone300/RTE_Components.h +++ /dev/null @@ -1,35 +0,0 @@ - -/* - * Auto generated Run-Time-Environment Configuration File - * *** Do not modify ! *** - * - * Project: 'template_Corstone300' - * Target: 'template_Corstone300' - */ - -#ifndef RTE_COMPONENTS_H -#define RTE_COMPONENTS_H - - -/* - * Define the Device Header File: - */ -#define CMSIS_device_header "SSE300MPS3.h" - -/* ARM::CMSIS Driver:USART:1.0.0 */ -#define RTE_Drivers_USART -/* tensorflow::Data Exchange:Serialization:flatbuffers:tensorflow:1.12.0 */ -#define RTE_DataExchange_Serialization_flatbuffers /* flatbuffers */ -/* tensorflow::Data Processing:Math:gemmlowp fixed-point:tensorflow:1.0.0 */ -#define RTE_DataExchange_Math_gemmlowp /* gemmlowp */ -/* tensorflow::Data Processing:Math:kissfft:tensorflow:1.4.5 */ -#define RTE_DataExchange_Math_kissfft /* kissfft */ -/* tensorflow::Data Processing:Math:ruy:tensorflow:1.12.0 */ -#define RTE_DataProcessing_Math_ruy /* ruy */ -/* tensorflow::Machine Learning:TensorFlow:Kernel:CMSIS-NN:0.1.20210416 */ -#define RTE_ML_TF_LITE /* TF */ -/* tensorflow::Machine Learning:TensorFlow:Testing:0.1.20210416 */ -#define RTE_ML_TF_LITE /* TF */ - - -#endif /* RTE_COMPONENTS_H */ diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/retarget_stdio.c b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/retarget_stdio.c deleted file mode 100644 index a5a59c0..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/RTE/retarget_stdio.c +++ /dev/null @@ -1,53 +0,0 @@ -/* ----------------------------------------------------------------------------- - * Copyright (c) 2020 Arm Limited (or its affiliates). 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. - * -------------------------------------------------------------------------- */ - -#include -#include -#include "device_cfg.h" -#include "Driver_USART.h" - -extern ARM_DRIVER_USART Driver_USART0; - -void stdio_init (void) { - Driver_USART0.Initialize(NULL); - Driver_USART0.Control(ARM_USART_MODE_ASYNCHRONOUS, 115200U); -} - -/** - Put a character to the stdout - - \param[in] ch Character to output - \return The character written, or -1 on write error. -*/ -int stdout_putchar (int ch) { - int32_t ret; - -#ifdef __UVISION_VERSION - // Windows Telnet expects CR-LF line endings - // add carriage return before each line feed - if (ch=='\n') { - int cr = '\r'; - Driver_USART0.Send(&cr, 1U); - } -#endif - - if (Driver_USART0.Send(&ch, 1U) == ARM_DRIVER_OK) { - return ch; - } - return EOF; -} diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj deleted file mode 100644 index 4fbf9f6..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/SSE-300-MPS3.cprj +++ /dev/null @@ -1,80 +0,0 @@ - - - - - UnitTestTemplate - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _file_block_xml_ - - - - diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/packlist b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/packlist deleted file mode 100644 index c9c5636..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/packlist +++ /dev/null @@ -1 +0,0 @@ -https://keilpack.azureedge.net/pack/ARM.V2M_MPS3_SSE_300_BSP.1.1.0.pack diff --git a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/platform_setup.c b/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/platform_setup.c deleted file mode 100644 index 279de43..0000000 --- a/tensorflow-test/templates/Reference/ARMCLANG/SSE-300-MPS3/platform_setup.c +++ /dev/null @@ -1,10 +0,0 @@ - - -int platform_setup (void) -{ - serial_init(); - - -} - - diff --git a/tensorflow-test/vht/packs/packinstall.sh b/tensorflow-test/vht/packs/packinstall.sh deleted file mode 100644 index 5d4905f..0000000 --- a/tensorflow-test/vht/packs/packinstall.sh +++ /dev/null @@ -1,11 +0,0 @@ - #!/bin/sh - -find $(pwd) -type f -name "*.pack" > packlist -cat packlist -#sed -i 's/^/file:\/\//' packlist -#cat packlist -cpackget pack add -f packlist -a -cpackget pack add https://www.keil.com/pack/ARM.CMSIS.5.8.0.pack -a -cpackget pack add https://keilpack.azureedge.net/pack/ARM.V2M_MPS3_SSE_300_BSP.1.2.0.pack -a - - diff --git a/tensorflow-test/vht/vht.yml b/tensorflow-test/vht/vht.yml deleted file mode 100644 index 7287c19..0000000 --- a/tensorflow-test/vht/vht.yml +++ /dev/null @@ -1,662 +0,0 @@ -suite: - name: "tensorflow-kernel-tests-reference" - model: "VHT-Corstone-300" - configuration: "" - working_dir: "/home/ubuntu/vhtwork" - pre: "git clone https://github.com/tensorflow/tflite-micro.git && mv ./tflite-micro/tensorflow/ . && chmod +x install_cmsis_toolbox.sh && ./install_cmsis_toolbox.sh && chmod +x ./packs/packinstall.sh && cd ./packs && ./packinstall.sh" - post: "" - - builds: - - "testing_helpers_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/testing_helpers_test.cprj" - pre: "" - post: "" - - "add_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/add_test.cprj" - pre: "" - post: "" - - "add_n_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/add_n_test.cprj" - pre: "" - post: "" - - "arg_min_max_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/arg_min_max_test.cprj" - pre: "" - post: "" - - "batch_to_space_nd_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/batch_to_space_nd_test.cprj" - pre: "" - post: "" - - "cast_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/cast_test.cprj" - pre: "" - post: "" - - "ceil_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/ceil_test.cprj" - pre: "" - post: "" - - "circular_buffer_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/circular_buffer_test.cprj" - pre: "" - post: "" - - "comparisons_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/comparisons_test.cprj" - pre: "" - post: "" - - "concatenation_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/concatenation_test.cprj" - pre: "" - post: "" -# - "conv_test": -# shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/conv_test.cprj" -# pre: "" -# post: "" - - "cumsum_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/cumsum_test.cprj" - pre: "" - post: "" - - "depth_to_space_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/depth_to_space_test.cprj" - pre: "" - post: "" - - "depthwise_conv_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/depthwise_conv_test.cprj" - pre: "" - post: "" - - "dequantize_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/dequantize_test.cprj" - pre: "" - post: "" - - "detection_postprocess_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/detection_postprocess_test.cprj" - pre: "" - post: "" - - "elementwise_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/elementwise_test.cprj" - pre: "" - post: "" - - "elu_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/elu_test.cprj" - pre: "" - post: "" - - "exp_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/exp_test.cprj" - pre: "" - post: "" - - "expand_dims_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/expand_dims_test.cprj" - pre: "" - post: "" - - "fill_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/fill_test.cprj" - pre: "" - post: "" - - "floor_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/floor_test.cprj" - pre: "" - post: "" - - "floor_div_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/floor_div_test.cprj" - pre: "" - post: "" - - "floor_mod_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/floor_mod_test.cprj" - pre: "" - post: "" - - "fully_connected_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/fully_connected_test.cprj" - pre: "" - post: "" - - "gather_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/gather_test.cprj" - pre: "" - post: "" - - "gather_nd_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/gather_nd_test.cprj" - pre: "" - post: "" - - "hard_swish_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/hard_swish_test.cprj" - pre: "" - post: "" - - "l2norm_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/l2norm_test.cprj" - pre: "" - post: "" - - "l2_pool_2d_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/l2_pool_2d_test.cprj" - pre: "" - post: "" - - "leaky_relu_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/leaky_relu_test.cprj" - pre: "" - post: "" - - "logical_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/logical_test.cprj" - pre: "" - post: "" - - "logistic_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/logistic_test.cprj" - pre: "" - post: "" - - "log_softmax_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/log_softmax_test.cprj" - pre: "" - post: "" - - "maximum_minimum_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/maximum_minimum_test.cprj" - pre: "" - post: "" - - "mul_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/mul_test.cprj" - pre: "" - post: "" - - "neg_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/neg_test.cprj" - pre: "" - post: "" - - "pack_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/pack_test.cprj" - pre: "" - post: "" - - "pad_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/pad_test.cprj" - pre: "" - post: "" - - "pooling_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/pooling_test.cprj" - pre: "" - post: "" - - "prelu_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/prelu_test.cprj" - pre: "" - post: "" - - "quantization_util_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/quantization_util_test.cprj" - pre: "" - post: "" - - "quantize_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/quantize_test.cprj" - pre: "" - post: "" - - "reduce_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/reduce_test.cprj" - pre: "" - post: "" - - "reshape_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/reshape_test.cprj" - pre: "" - post: "" - - "resize_bilinear_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/resize_bilinear_test.cprj" - pre: "" - post: "" - - "resize_nearest_neighbor_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/resize_nearest_neighbor_test.cprj" - pre: "" - post: "" - - "round_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/round_test.cprj" - pre: "" - post: "" - - "shape_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/shape_test.cprj" - pre: "" - post: "" - - "softmax_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/softmax_test.cprj" - pre: "" - post: "" - - "space_to_batch_nd_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/space_to_batch_nd_test.cprj" - pre: "" - post: "" - - "space_to_depth_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/space_to_depth_test.cprj" - pre: "" - post: "" - - "split_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/split_test.cprj" - pre: "" - post: "" - - "split_v_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/split_v_test.cprj" - pre: "" - post: "" - - "squeeze_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/squeeze_test.cprj" - pre: "" - post: "" - - "strided_slice_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/strided_slice_test.cprj" - pre: "" - post: "" - - "sub_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/sub_test.cprj" - pre: "" - post: "" - - "svdf_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/svdf_test.cprj" - pre: "" - post: "" - - "tanh_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/tanh_test.cprj" - pre: "" - post: "" - - "transpose_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/transpose_test.cprj" - pre: "" - post: "" - - "transpose_conv_test": - shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/transpose_conv_test.cprj" - pre: "" - post: "" - #- "unpack_test": - # shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/unpack_test.cprj" - # pre: "" - # post: "" - #- "zeros_like_test": - # shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/zeros_like_test.cprj" - # pre: "" - # post: "" - #- "greedy_memory_planner_test": - # shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/greedy_memory_planner_test.cprj" - # pre: "" - # post: "" - #- "linear_memory_planner_te": - # shell: "cbuild.sh ./Reference/ARMCLANG/SSE-300-MPS3/linear_memory_planner_te.cprj" - # pre: "" - # post: "" - - - tests: - - "testing_helpers_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/testing_helpers_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "add_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/add_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "add_n_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/add_n_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "arg_min_max_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/arg_min_max_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "batch_to_space_nd_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/batch_to_space_nd_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "cast_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/cast_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "ceil_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/ceil_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "circular_buffer_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/circular_buffer_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "comparisons_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/comparisons_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "concatenation_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/concatenation_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - # - "conv_test": - # executable: "./Reference/ARMCLANG/SSE-300-MPS3/conv_test.axf" - # arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - # pre: "" - # post: "" - # timeout: "" - - "cumsum_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/cumsum_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "depth_to_space_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/depth_to_space_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "depthwise_conv_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/depthwise_conv_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "dequantize_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/dequantize_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "detection_postprocess_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/detection_postprocess_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "elementwise_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/elementwise_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "elu_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/elu_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "exp_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/exp_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "expand_dims_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/expand_dims_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "fill_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/fill_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "floor_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/floor_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "floor_div_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/floor_div_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "floor_mod_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/floor_mod_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "fully_connected_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/fully_connected_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "gather_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/gather_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "gather_nd_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/gather_nd_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "hard_swish_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/hard_swish_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "l2norm_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/l2norm_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "l2_pool_2d_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/l2_pool_2d_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "leaky_relu_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/leaky_relu_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "logical_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/logical_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "logistic_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/logistic_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "log_softmax_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/log_softmax_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "maximum_minimum_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/maximum_minimum_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "mul_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/mul_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "neg_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/neg_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "pack_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/pack_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "pad_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/pad_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "pooling_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/pooling_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "prelu_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/prelu_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "quantization_util_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/quantization_util_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "quantize_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/quantize_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "reduce_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/reduce_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "reshape_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/reshape_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "resize_bilinear_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/resize_bilinear_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "resize_nearest_neighbor_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/resize_nearest_neighbor_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "round_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/round_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "shape_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/shape_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "softmax_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/softmax_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "space_to_batch_nd_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/space_to_batch_nd_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "space_to_depth_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/space_to_depth_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "split_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/split_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "split_v_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/split_v_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "squeeze_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/squeeze_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "strided_slice_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/strided_slice_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "sub_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/sub_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "svdf_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/svdf_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "tanh_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/tanh_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "transpose_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/transpose_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "transpose_conv_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/transpose_conv_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "unpack_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/unpack_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - - "zeros_like_test": - executable: "./Reference/ARMCLANG/SSE-300-MPS3/zeros_like_test.axf" - arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - pre: "" - post: "" - timeout: "" - # - "greedy_memory_planner_test": - # executable: "./Reference/ARMCLANG/SSE-300-MPS3/greedy_memory_planner_test.axf" - # arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - # pre: "" - # post: "" - # timeout: "" - # - "linear_memory_planner_te": - # executable: "./Reference/ARMCLANG/SSE-300-MPS3/linear_memory_planner_te.axf" - # arguments: "-f ./vht_config.txt --stat --cyclelimit 768000000" - # pre: "" - # post: "" - # timout: "" diff --git a/tensorflow-test/vht/vht_config.txt b/tensorflow-test/vht/vht_config.txt deleted file mode 100644 index 8470fc1..0000000 --- a/tensorflow-test/vht/vht_config.txt +++ /dev/null @@ -1,18 +0,0 @@ -# Parameters: -# instance.parameter=value #(type, mode) default = 'def value' : description : [min..max] -#------------------------------------------------------------------------------ -cpu_core.core_clk.mul=100000000 # (int , init-time) default = '0x17d7840' : Clock Rate Multiplier. This parameter is not exposed via CADI and can only be set in LISA -cpu_core.mps3_board.visualisation.disable-visualisation=1 # (bool , init-time) default = '0' : Enable/disable visualisation -cpu_core.mps3_board.DISABLE_GATING=1 # (bool , init-time) default = '0' : Disable Memory gating logic -cpu_core.mps3_board.telnetterminal0.start_port=5000 # (int , init-time) default = '0x1388' : Telnet TCP Port Number -cpu_core.mps3_board.telnetterminal0.start_telnet=0 # (bool , init-time) default = '1' : Start telnet if nothing connected -cpu_core.mps3_board.uart0.out_file=- # (string, init-time) default = '' : Output file to hold data written by the UART (use '-' to send all output to stdout) - -cpu_core.cpu0.semihosting-enable=1 # (bool , init-time) default = '1' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false. -cpu_core.cpu0.semihosting-Thumb_SVC=0xAB # (int , init-time) default = '0xAB' : T32 SVC number for semihosting : [0x0..0xFF] -cpu_core.cpu0.semihosting-cmd_line="" # (string, init-time) default = '' : Command line available to semihosting SVC calls -cpu_core.cpu0.semihosting-heap_base=0x0 # (int , init-time) default = '0x0' : Virtual address of heap base : [0x0..0xFFFFFFFF] -cpu_core.cpu0.semihosting-heap_limit=0x0 # (int , init-time) default = '0x10700000' : Virtual address of top of heap : [0x0..0xFFFFFFFF] -cpu_core.cpu0.semihosting-stack_base=0x0 # (int , init-time) default = '0x10700000' : Virtual address of base of descending stack : [0x0..0xFFFFFFFF] -cpu_core.cpu0.semihosting-stack_limit=0x0 # (int , init-time) default = '0x10800000' : Virtual address of stack limit : [0x0..0xFFFFFFFF] -cpu_core.cpu0.semihosting-cwd="" # (string, init-time) default = '' : Base directory for semihosting file access.

  • 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®X6NA8ZG&r*8rGJ^nQ+P-{I-=eC7&tJ0!dGNOrFvnxO0^%s_Ti zZ3jtJMacW`uTgp8q+_q)*SlJ#d-yjFH;q@_$p_)UzXYG@q(>;{4gkL>O~Wo4K5 za*|zoB)bd21Z8&)bNZO=AgM#(jn9}}YORk8NOl){LrRydKfB_!vP&Z^#f9*l8AsL7 zIQ-cS1QlLOxevC>@vn8qBC=RX)9+=PwJKOe^cuo{%Q$XVM3&MDY86q6b{a2q;eU6P zVzYUibk8Ha)bLH)!y`}aP+*qYRlKbG)Likh=(QeW;eQAJ+Lf({`oUi??45JDjx!s*e`{t^n9K0XgD~F%R z!*8y#r2rBc!5s<@2l4I|WV&u?c^0YqutfU~hf}vSz6RB7pF`_68jjY#HBRMYY-Msq55-HF_Dcuow#BD zrx^*mmj2=}>-~39$DsYi;g=)&Gl-M@jgvEK&Ng)N;TXKTmXB+NY4`Ij!v1vb|DBcs z`N-T!qyE(Or_agR8Yl1M6Zsv6pK)^^Su-c{LEgm6LENCGN>1b;-rXm*f>UA-H1~z+ z5RQnP$cK2NpV${pb!dv$ejowD7gkE~&fganD_u$Q55MEIf`8l2V1dyV|FJPj@07wtAU z&y%;G#3n{-6B!0)e)0~G*ds9xXS8GBXaiXW11G@Se<~ebC4JG249*Va9cG9lJm2F3 zA$-x91}Ba3j*~sglP-j9VsI`g?+dcWB^w1{t?xGYqMI3S%Q84!m9O@~CQQ@?CU$kk=Vbm3A;+A0X8==tpQ|*gxX*>=&D2;T663ULIm9Yy{ zzuFQ_YvW^p{4ClvwxYQTh1Q>HUvwMeE670|NoT5fQg$?LjlY5Ndy#6cxH=%7^L^rI zgXJV(uNd9b7v0X_l-!^JG;OWoX^Xhq8=Rrb&!;v!5CNDD1}E+Ehmz@LF$M91?r3l_ zFMllQfmWWkLJ^dFf13NEvyCN?54{Ix7L7-#{)gaySemB9$R;)fmYt2gAOoCXAI%wL^O|)61e9>JE&NJq}NW8%c(*g>ue;c^Ne9_$u zPCyRdP5w3OLng?C&)|II@Ykq4RG{r{aC$QTEox6Ho(cBJlWTCsGXEf%Ggd0nZTO;l z7@Wk+|A@@bRso)dB3_(=T8jS$I<5cLa7Xk%3)d=`0!w76r@?8^L8ll|tS&_oC}u0X zFS?h(Nz##D!RQ@x^GCT{SD61<`*L~=++bm7@Vzr=vz1?X);akN9l`x zz&JtTCY&S^)AfFozUVyTGKo_6V%R}qrrwXz7d_Ajhc3SXm9uq*mR1qZ(FW*zBbjtd z(hGIQAtz8gFV~jmAe zbt3wrA2K*2oj;EBM;84BlabDfZ9yCOEpY!I;Dk+q6+5?w4bETZ&t{;>GP`zSgYxi5N{!CCTA z&oEq);fo$_3?be{Tmg85F`4)XaWe2oV-fKW#1(-@8BY^mC$0oM+ISK8!6L5%ry4v# ze9>bJ?ydM>Ds`0&7MU-4tZ^JVU-UT1>*yxr=33Nv<0`1!Y^d14W2VWKg^qQxXFpe} zy06qh#hLxQey}U$mj0y$aC{p&WVC@)4&({uEA@fm{C{3PjXh#4j+}jB>?`%5;YG9l3Vte&XU$BGXv@}43qONFHKvK;?Wexmq5 zBX0vu=HC**G1Z6cOJtXYvUU!Rt4TC@ohDC(n&2o;C_X63dzb7+CVA^oeyaEoCHF8) zzNFb3f$EUx{24u|zNgt4m|UaT5h+n|Xoj>-siJtQl6RBrX-SL4;P0TDpqzqC%P*0e|jTb&ly0~Y=iK39Wakza?blI9jDP-Nf>#fLm2GeEbcNipk! zA<_8L_)@*V7&?)Tx9EauM+{#nJ{ZdHPP$y7(D59M!R8xvg*N?YQ}#b>zEh=gU^AFD z&4RAs!3Fxg;?t-65wtO_c>ITXM)84E{sb}|0*8sT&niBn%AZCi$6^YO&TbGtsD-qd zN1Ocru=!E#fX$%CXfw?klUSEW$zX6U BNTuaO8ceMOTsjjfxO3N8{v^=lUX}On{ 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