From 3faf4a3ee1c99a33d4c9eac71f659d0b1aa91002 Mon Sep 17 00:00:00 2001 From: Dhaval Khandla Date: Thu, 14 Sep 2023 22:32:55 +0530 Subject: [PATCH] am243x/am263x : rtlibs : Add DCL examples and sources Fixes: PINDSW-6566 Signed-off-by: Dhaval Khandla --- .metadata/.tirex/am243x.content.tirex.json | 512 ++++++ .metadata/.tirex/am263x.content.tirex.json | 257 +++ .project/device/project_am243x.js | 2 + .project/device/project_am263x.js | 2 + .../docs/api_guide/components/dcl/dcl.cfg | 18 + docs_src/docs/api_guide/components/dcl/dcl.md | 144 ++ .../docs/api_guide/device/am243x/examples.cfg | 2 + .../docs/api_guide/device/am243x/includes.cfg | 1 + .../docs/api_guide/device/am263x/examples.cfg | 4 +- .../docs/api_guide/device/am263x/includes.cfg | 1 + .../examples/dcl/dcl_df22/dcl_df22.md | 97 + .../api_guide/examples/dcl/dcl_pi/dcl_pi.md | 96 + docs_src/docs/api_guide/examples/examples.md | 33 +- .../docs/api_guide/main_page/main_page.md | 48 +- .../dcl/dcl_df22/.project/mcsdk_project.js | 14 + .../dcl_df22/.project/mcsdk_project_am243x.js | 266 +++ .../dcl_df22/.project/mcsdk_project_am263x.js | 178 ++ .../m4fss0-0_freertos/example.syscfg | 57 + .../am243x-evm/m4fss0-0_freertos/main.c | 84 + .../dcl_linker_m4f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 115 ++ .../m4fss0-0_freertos/ti-arm-clang/linker.cmd | 62 + .../m4fss0-0_freertos/ti-arm-clang/makefile | 303 ++++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../am243x-evm/m4fss0-0_nortos/example.syscfg | 57 + .../am243x-evm/m4fss0-0_nortos/main.c | 50 + .../dcl_linker_m4f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 112 ++ .../m4fss0-0_nortos/ti-arm-clang/linker.cmd | 62 + .../m4fss0-0_nortos/ti-arm-clang/makefile | 300 +++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../r5fss0-0_freertos/example.syscfg | 62 + .../am243x-evm/r5fss0-0_freertos/main.c | 84 + .../dcl_linker_r5f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 117 ++ .../r5fss0-0_freertos/ti-arm-clang/linker.cmd | 148 ++ .../r5fss0-0_freertos/ti-arm-clang/makefile | 305 ++++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../am243x-evm/r5fss0-0_nortos/example.syscfg | 62 + .../am243x-evm/r5fss0-0_nortos/main.c | 50 + .../dcl_linker_r5f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 114 ++ .../r5fss0-0_nortos/ti-arm-clang/linker.cmd | 148 ++ .../r5fss0-0_nortos/ti-arm-clang/makefile | 302 ++++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../m4fss0-0_freertos/example.syscfg | 45 + .../am243x-lp/m4fss0-0_freertos/main.c | 84 + .../dcl_linker_m4f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 115 ++ .../m4fss0-0_freertos/ti-arm-clang/linker.cmd | 62 + .../m4fss0-0_freertos/ti-arm-clang/makefile | 303 ++++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../am243x-lp/m4fss0-0_nortos/example.syscfg | 45 + .../dcl_df22/am243x-lp/m4fss0-0_nortos/main.c | 50 + .../dcl_linker_m4f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 112 ++ .../m4fss0-0_nortos/ti-arm-clang/linker.cmd | 62 + .../m4fss0-0_nortos/ti-arm-clang/makefile | 300 +++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../r5fss0-0_freertos/example.syscfg | 57 + .../am243x-lp/r5fss0-0_freertos/main.c | 84 + .../dcl_linker_r5f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 117 ++ .../r5fss0-0_freertos/ti-arm-clang/linker.cmd | 148 ++ .../r5fss0-0_freertos/ti-arm-clang/makefile | 305 ++++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../am243x-lp/r5fss0-0_nortos/example.syscfg | 57 + .../dcl_df22/am243x-lp/r5fss0-0_nortos/main.c | 50 + .../dcl_linker_r5f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 114 ++ .../r5fss0-0_nortos/ti-arm-clang/linker.cmd | 148 ++ .../r5fss0-0_nortos/ti-arm-clang/makefile | 302 ++++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../r5fss0-0_freertos/example.syscfg | 59 + .../am263x-cc/r5fss0-0_freertos/main.c | 84 + .../dcl_linker_r5f_am263x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 117 ++ .../r5fss0-0_freertos/ti-arm-clang/linker.cmd | 137 ++ .../r5fss0-0_freertos/ti-arm-clang/makefile | 276 +++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 84 + .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../am263x-cc/r5fss0-0_nortos/example.syscfg | 59 + .../dcl_df22/am263x-cc/r5fss0-0_nortos/main.c | 50 + .../dcl_linker_r5f_am263x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 114 ++ .../r5fss0-0_nortos/ti-arm-clang/linker.cmd | 137 ++ .../r5fss0-0_nortos/ti-arm-clang/makefile | 273 +++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 84 + .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../r5fss0-0_freertos/example.syscfg | 59 + .../am263x-lp/r5fss0-0_freertos/main.c | 84 + .../dcl_linker_r5f_am263x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 117 ++ .../r5fss0-0_freertos/ti-arm-clang/linker.cmd | 137 ++ .../r5fss0-0_freertos/ti-arm-clang/makefile | 276 +++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 84 + .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../am263x-lp/r5fss0-0_nortos/example.syscfg | 59 + .../dcl_df22/am263x-lp/r5fss0-0_nortos/main.c | 50 + .../dcl_linker_r5f_am263x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 114 ++ .../r5fss0-0_nortos/ti-arm-clang/linker.cmd | 137 ++ .../r5fss0-0_nortos/ti-arm-clang/makefile | 273 +++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 84 + .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + examples/dcl/dcl_df22/data/DF22_ctl-1.dat | 1601 ++++++++++++++++ examples/dcl/dcl_df22/data/DF22_ctl-2.dat | 1601 ++++++++++++++++ examples/dcl/dcl_df22/data/DF22_ctl-3.dat | 1601 ++++++++++++++++ examples/dcl/dcl_df22/data/DF22_in-1.dat | 1601 ++++++++++++++++ examples/dcl/dcl_df22/data/DF22_in-2.dat | 1601 ++++++++++++++++ examples/dcl/dcl_df22/data/DF22_in-3.dat | 1601 ++++++++++++++++ examples/dcl/dcl_df22/df22_test.c | 117 ++ examples/dcl/dcl_df22/df22_test.h | 109 ++ examples/dcl/dcl_pi/.project/mcsdk_project.js | 14 + .../dcl_pi/.project/mcsdk_project_am243x.js | 267 +++ .../dcl_pi/.project/mcsdk_project_am263x.js | 178 ++ .../m4fss0-0_freertos/example.syscfg | 57 + .../am243x-evm/m4fss0-0_freertos/main.c | 84 + .../dcl_linker_m4f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 115 ++ .../m4fss0-0_freertos/ti-arm-clang/linker.cmd | 62 + .../m4fss0-0_freertos/ti-arm-clang/makefile | 303 ++++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../am243x-evm/m4fss0-0_nortos/example.syscfg | 57 + .../dcl_pi/am243x-evm/m4fss0-0_nortos/main.c | 50 + .../dcl_linker_m4f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 112 ++ .../m4fss0-0_nortos/ti-arm-clang/linker.cmd | 62 + .../m4fss0-0_nortos/ti-arm-clang/makefile | 300 +++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../r5fss0-0_freertos/example.syscfg | 62 + .../am243x-evm/r5fss0-0_freertos/main.c | 84 + .../dcl_linker_r5f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 117 ++ .../r5fss0-0_freertos/ti-arm-clang/linker.cmd | 148 ++ .../r5fss0-0_freertos/ti-arm-clang/makefile | 305 ++++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../am243x-evm/r5fss0-0_nortos/example.syscfg | 62 + .../dcl_pi/am243x-evm/r5fss0-0_nortos/main.c | 50 + .../dcl_linker_r5f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 114 ++ .../r5fss0-0_nortos/ti-arm-clang/linker.cmd | 148 ++ .../r5fss0-0_nortos/ti-arm-clang/makefile | 302 ++++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../m4fss0-0_freertos/example.syscfg | 45 + .../dcl_pi/am243x-lp/m4fss0-0_freertos/main.c | 84 + .../dcl_linker_m4f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 115 ++ .../m4fss0-0_freertos/ti-arm-clang/linker.cmd | 62 + .../m4fss0-0_freertos/ti-arm-clang/makefile | 303 ++++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../am243x-lp/m4fss0-0_nortos/example.syscfg | 45 + .../dcl_pi/am243x-lp/m4fss0-0_nortos/main.c | 50 + .../dcl_linker_m4f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 112 ++ .../m4fss0-0_nortos/ti-arm-clang/linker.cmd | 62 + .../m4fss0-0_nortos/ti-arm-clang/makefile | 300 +++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../r5fss0-0_freertos/example.syscfg | 57 + .../dcl_pi/am243x-lp/r5fss0-0_freertos/main.c | 84 + .../dcl_linker_r5f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 117 ++ .../r5fss0-0_freertos/ti-arm-clang/linker.cmd | 148 ++ .../r5fss0-0_freertos/ti-arm-clang/makefile | 305 ++++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../am243x-lp/r5fss0-0_nortos/example.syscfg | 57 + .../dcl_pi/am243x-lp/r5fss0-0_nortos/main.c | 50 + .../dcl_linker_r5f_am243x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 114 ++ .../r5fss0-0_nortos/ti-arm-clang/linker.cmd | 148 ++ .../r5fss0-0_nortos/ti-arm-clang/makefile | 302 ++++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 106 ++ .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../r5fss0-0_freertos/example.syscfg | 59 + .../dcl_pi/am263x-cc/r5fss0-0_freertos/main.c | 84 + .../dcl_linker_r5f_am263x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 117 ++ .../r5fss0-0_freertos/ti-arm-clang/linker.cmd | 137 ++ .../r5fss0-0_freertos/ti-arm-clang/makefile | 276 +++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 84 + .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../am263x-cc/r5fss0-0_nortos/example.syscfg | 59 + .../dcl_pi/am263x-cc/r5fss0-0_nortos/main.c | 50 + .../dcl_linker_r5f_am263x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 114 ++ .../r5fss0-0_nortos/ti-arm-clang/linker.cmd | 137 ++ .../r5fss0-0_nortos/ti-arm-clang/makefile | 273 +++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 84 + .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../r5fss0-0_freertos/example.syscfg | 59 + .../dcl_pi/am263x-lp/r5fss0-0_freertos/main.c | 84 + .../dcl_linker_r5f_am263x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 117 ++ .../r5fss0-0_freertos/ti-arm-clang/linker.cmd | 137 ++ .../r5fss0-0_freertos/ti-arm-clang/makefile | 276 +++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 84 + .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + .../am263x-lp/r5fss0-0_nortos/example.syscfg | 59 + .../dcl_pi/am263x-lp/r5fss0-0_nortos/main.c | 50 + .../dcl_linker_r5f_am263x_sitara.cmd | 19 + .../ti-arm-clang/example.projectspec | 114 ++ .../r5fss0-0_nortos/ti-arm-clang/linker.cmd | 137 ++ .../r5fss0-0_nortos/ti-arm-clang/makefile | 273 +++ .../ti-arm-clang/makefile_ccs_bootimage_gen | 84 + .../ti-arm-clang/makefile_projectspec | 20 + .../ti-arm-clang/syscfg_c.rov.xs | 8 + examples/dcl/dcl_pi/data/PI_ctl-1.dat | 1609 +++++++++++++++++ examples/dcl/dcl_pi/data/PI_ctl-2.dat | 1609 +++++++++++++++++ examples/dcl/dcl_pi/data/PI_ctl-3.dat | 1609 +++++++++++++++++ examples/dcl/dcl_pi/data/PI_rk-1.dat | 1601 ++++++++++++++++ examples/dcl/dcl_pi/data/PI_rk-2.dat | 1601 ++++++++++++++++ examples/dcl/dcl_pi/data/PI_rk-3.dat | 1601 ++++++++++++++++ examples/dcl/dcl_pi/data/PI_yk-1.dat | 1601 ++++++++++++++++ examples/dcl/dcl_pi/data/PI_yk-2.dat | 1601 ++++++++++++++++ examples/dcl/dcl_pi/data/PI_yk-3.dat | 1601 ++++++++++++++++ examples/dcl/dcl_pi/pi_test.c | 126 ++ examples/dcl/dcl_pi/pi_test.h | 115 ++ makefile.am243x | 208 +++ makefile.am263x | 104 ++ makefile_projectspec.am243x | 208 +++ makefile_projectspec.am263x | 104 ++ source/dcl/common/dcl_aux.h | 103 ++ source/dcl/common/dcl_clamp.h | 97 + source/dcl/common/dcl_css.h | 157 ++ source/dcl/common/dcl_stability.h | 119 ++ source/dcl/common/dcl_zpk3.h | 141 ++ source/dcl/dcl.h | 95 + source/dcl/dcl_common.h | 114 ++ source/dcl/df/dcl_df11.h | 305 ++++ source/dcl/df/dcl_df13.h | 372 ++++ source/dcl/df/dcl_df22.h | 458 +++++ source/dcl/df/dcl_df23.h | 359 ++++ source/dcl/misc/dcl_c28_compatibility.h | 222 +++ source/dcl/misc/dcl_error.h | 122 ++ source/dcl/misc/dcl_fdlog.h | 236 +++ source/dcl/pi/dcl_pi.h | 437 +++++ source/dcl/pi/dcl_pi2.h | 299 +++ source/dcl/pid/dcl_pid.h | 549 ++++++ source/dcl/pid/dcl_pidf64.h | 420 +++++ 277 files changed, 50889 insertions(+), 8 deletions(-) create mode 100644 docs_src/docs/api_guide/components/dcl/dcl.cfg create mode 100644 docs_src/docs/api_guide/components/dcl/dcl.md create mode 100644 docs_src/docs/api_guide/examples/dcl/dcl_df22/dcl_df22.md create mode 100644 docs_src/docs/api_guide/examples/dcl/dcl_pi/dcl_pi.md create mode 100644 examples/dcl/dcl_df22/.project/mcsdk_project.js create mode 100644 examples/dcl/dcl_df22/.project/mcsdk_project_am243x.js create mode 100644 examples/dcl/dcl_df22/.project/mcsdk_project_am263x.js create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/example.syscfg create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/main.c create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/example.syscfg create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/main.c create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/example.syscfg create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/main.c create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/example.syscfg create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/main.c create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/example.syscfg create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/main.c create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/example.syscfg create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/main.c create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/example.syscfg create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/main.c create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/example.syscfg create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/main.c create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/example.syscfg create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/main.c create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/example.syscfg create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/main.c create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/example.syscfg create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/main.c create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/example.syscfg create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/main.c create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_df22/data/DF22_ctl-1.dat create mode 100644 examples/dcl/dcl_df22/data/DF22_ctl-2.dat create mode 100644 examples/dcl/dcl_df22/data/DF22_ctl-3.dat create mode 100644 examples/dcl/dcl_df22/data/DF22_in-1.dat create mode 100644 examples/dcl/dcl_df22/data/DF22_in-2.dat create mode 100644 examples/dcl/dcl_df22/data/DF22_in-3.dat create mode 100644 examples/dcl/dcl_df22/df22_test.c create mode 100644 examples/dcl/dcl_df22/df22_test.h create mode 100644 examples/dcl/dcl_pi/.project/mcsdk_project.js create mode 100644 examples/dcl/dcl_pi/.project/mcsdk_project_am243x.js create mode 100644 examples/dcl/dcl_pi/.project/mcsdk_project_am263x.js create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/example.syscfg create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/main.c create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/example.syscfg create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/main.c create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/example.syscfg create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/main.c create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/example.syscfg create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/main.c create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/example.syscfg create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/main.c create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/example.syscfg create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/main.c create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/example.syscfg create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/main.c create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/example.syscfg create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/main.c create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/example.syscfg create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/main.c create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/example.syscfg create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/main.c create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/example.syscfg create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/main.c create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/example.syscfg create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/main.c create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec create mode 100644 examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs create mode 100644 examples/dcl/dcl_pi/data/PI_ctl-1.dat create mode 100644 examples/dcl/dcl_pi/data/PI_ctl-2.dat create mode 100644 examples/dcl/dcl_pi/data/PI_ctl-3.dat create mode 100644 examples/dcl/dcl_pi/data/PI_rk-1.dat create mode 100644 examples/dcl/dcl_pi/data/PI_rk-2.dat create mode 100644 examples/dcl/dcl_pi/data/PI_rk-3.dat create mode 100644 examples/dcl/dcl_pi/data/PI_yk-1.dat create mode 100644 examples/dcl/dcl_pi/data/PI_yk-2.dat create mode 100644 examples/dcl/dcl_pi/data/PI_yk-3.dat create mode 100644 examples/dcl/dcl_pi/pi_test.c create mode 100644 examples/dcl/dcl_pi/pi_test.h create mode 100644 source/dcl/common/dcl_aux.h create mode 100644 source/dcl/common/dcl_clamp.h create mode 100644 source/dcl/common/dcl_css.h create mode 100644 source/dcl/common/dcl_stability.h create mode 100644 source/dcl/common/dcl_zpk3.h create mode 100644 source/dcl/dcl.h create mode 100644 source/dcl/dcl_common.h create mode 100644 source/dcl/df/dcl_df11.h create mode 100644 source/dcl/df/dcl_df13.h create mode 100644 source/dcl/df/dcl_df22.h create mode 100644 source/dcl/df/dcl_df23.h create mode 100644 source/dcl/misc/dcl_c28_compatibility.h create mode 100644 source/dcl/misc/dcl_error.h create mode 100644 source/dcl/misc/dcl_fdlog.h create mode 100644 source/dcl/pi/dcl_pi.h create mode 100644 source/dcl/pi/dcl_pi2.h create mode 100644 source/dcl/pid/dcl_pid.h create mode 100644 source/dcl/pid/dcl_pidf64.h diff --git a/.metadata/.tirex/am243x.content.tirex.json b/.metadata/.tirex/am243x.content.tirex.json index 34c9094..ac45f17 100644 --- a/.metadata/.tirex/am243x.content.tirex.json +++ b/.metadata/.tirex/am243x.content.tirex.json @@ -1,4 +1,516 @@ [ + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A Direct Form 2 2nd order example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running NORTOS.", + "name": "dcl_df22", + "location": "../../examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_GP_EVM" + ], + "kernel": [ + "nortos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_df22", + "r5fss0-0_nortos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A Direct Form 2 2nd order example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running FREERTOS.", + "name": "dcl_df22", + "location": "../../examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_GP_EVM" + ], + "kernel": [ + "freertos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_df22", + "r5fss0-0_freertos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A Direct Form 2 2nd order example demonstrating the digital control library (DCL). CPU is M4FSS0-0 running NORTOS.", + "name": "dcl_df22", + "location": "../../examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_GP_EVM" + ], + "kernel": [ + "nortos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_df22", + "m4fss0-0_nortos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A Direct Form 2 2nd order example demonstrating the digital control library (DCL). CPU is M4FSS0-0 running FREERTOS.", + "name": "dcl_df22", + "location": "../../examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_GP_EVM" + ], + "kernel": [ + "freertos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_df22", + "m4fss0-0_freertos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A Direct Form 2 2nd order example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running NORTOS.", + "name": "dcl_df22", + "location": "../../examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_LAUNCHPAD" + ], + "kernel": [ + "nortos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_df22", + "r5fss0-0_nortos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A Direct Form 2 2nd order example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running FREERTOS.", + "name": "dcl_df22", + "location": "../../examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_LAUNCHPAD" + ], + "kernel": [ + "freertos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_df22", + "r5fss0-0_freertos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A Direct Form 2 2nd order example demonstrating the digital control library (DCL). CPU is M4FSS0-0 running NORTOS.", + "name": "dcl_df22", + "location": "../../examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_LAUNCHPAD" + ], + "kernel": [ + "nortos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_df22", + "m4fss0-0_nortos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A Direct Form 2 2nd order example demonstrating the digital control library (DCL). CPU is M4FSS0-0 running FREERTOS.", + "name": "dcl_df22", + "location": "../../examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_LAUNCHPAD" + ], + "kernel": [ + "freertos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_df22", + "m4fss0-0_freertos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A PI controller example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running NORTOS.", + "name": "dcl_pi", + "location": "../../examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_GP_EVM" + ], + "kernel": [ + "nortos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_pi", + "r5fss0-0_nortos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A PI controller example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running FREERTOS.", + "name": "dcl_pi", + "location": "../../examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_GP_EVM" + ], + "kernel": [ + "freertos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_pi", + "r5fss0-0_freertos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A PI controller example demonstrating the digital control library (DCL). CPU is M4FSS0-0 running NORTOS.", + "name": "dcl_pi", + "location": "../../examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_GP_EVM" + ], + "kernel": [ + "nortos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_pi", + "m4fss0-0_nortos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A PI controller example demonstrating the digital control library (DCL). CPU is M4FSS0-0 running FREERTOS.", + "name": "dcl_pi", + "location": "../../examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_GP_EVM" + ], + "kernel": [ + "freertos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_pi", + "m4fss0-0_freertos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A PI controller example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running NORTOS.", + "name": "dcl_pi", + "location": "../../examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_LAUNCHPAD" + ], + "kernel": [ + "nortos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_pi", + "r5fss0-0_nortos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A PI controller example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running FREERTOS.", + "name": "dcl_pi", + "location": "../../examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_LAUNCHPAD" + ], + "kernel": [ + "freertos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_pi", + "r5fss0-0_freertos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A PI controller example demonstrating the digital control library (DCL). CPU is M4FSS0-0 running NORTOS.", + "name": "dcl_pi", + "location": "../../examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_LAUNCHPAD" + ], + "kernel": [ + "nortos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_pi", + "m4fss0-0_nortos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A PI controller example demonstrating the digital control library (DCL). CPU is M4FSS0-0 running FREERTOS.", + "name": "dcl_pi", + "location": "../../examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/example.projectspec", + "devtools": [ + "AM243x_LAUNCHPAD" + ], + "kernel": [ + "freertos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_pi", + "m4fss0-0_freertos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, { "resourceType": "project.ccs", "resourceClass": [ diff --git a/.metadata/.tirex/am263x.content.tirex.json b/.metadata/.tirex/am263x.content.tirex.json index bc8b3c1..d8a821a 100644 --- a/.metadata/.tirex/am263x.content.tirex.json +++ b/.metadata/.tirex/am263x.content.tirex.json @@ -1,4 +1,260 @@ [ + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A Direct Form 2 2nd order example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running NORTOS.", + "name": "dcl_df22", + "location": "../../examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/example.projectspec", + "devtools": [ + "TMDSCNCD263" + ], + "kernel": [ + "nortos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_df22", + "r5fss0-0_nortos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A Direct Form 2 2nd order example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running FREERTOS.", + "name": "dcl_df22", + "location": "../../examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/example.projectspec", + "devtools": [ + "TMDSCNCD263" + ], + "kernel": [ + "freertos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_df22", + "r5fss0-0_freertos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A Direct Form 2 2nd order example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running NORTOS.", + "name": "dcl_df22", + "location": "../../examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec", + "devtools": [ + "LP-AM263" + ], + "kernel": [ + "nortos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_df22", + "r5fss0-0_nortos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A Direct Form 2 2nd order example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running FREERTOS.", + "name": "dcl_df22", + "location": "../../examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec", + "devtools": [ + "LP-AM263" + ], + "kernel": [ + "freertos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_df22", + "r5fss0-0_freertos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A PI controller example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running NORTOS.", + "name": "dcl_pi", + "location": "../../examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/example.projectspec", + "devtools": [ + "TMDSCNCD263" + ], + "kernel": [ + "nortos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_pi", + "r5fss0-0_nortos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A PI controller example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running FREERTOS.", + "name": "dcl_pi", + "location": "../../examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/example.projectspec", + "devtools": [ + "TMDSCNCD263" + ], + "kernel": [ + "freertos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_pi", + "r5fss0-0_freertos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A PI controller example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running NORTOS.", + "name": "dcl_pi", + "location": "../../examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec", + "devtools": [ + "LP-AM263" + ], + "kernel": [ + "nortos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_pi", + "r5fss0-0_nortos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, + { + "resourceType": "project.ccs", + "resourceClass": [ + "example" + ], + "resourceSubClass": [ + "example.gettingstarted" + ], + "description": "A PI controller example demonstrating the digital control library (DCL). CPU is R5FSS0-0 running FREERTOS.", + "name": "dcl_pi", + "location": "../../examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec", + "devtools": [ + "LP-AM263" + ], + "kernel": [ + "freertos" + ], + "compiler": [ + "ticlang" + ], + "subCategories": [ + "dcl", + "dcl_pi", + "r5fss0-0_freertos" + ], + "mainCategories": [ + [ + "Examples", + "Development Tools" + ] + ] + }, { "resourceType": "project.ccs", "resourceClass": [ @@ -39,6 +295,7 @@ "name": "User Guide", "location": "../../docs/api_guide_am263x/index.html", "devtools": [ + "TMDSCNCD263", "LP-AM263" ], "mainCategories": [ diff --git a/.project/device/project_am243x.js b/.project/device/project_am243x.js index 3511b9e..acf00e9 100644 --- a/.project/device/project_am243x.js +++ b/.project/device/project_am243x.js @@ -14,6 +14,8 @@ const device_defines = { }; const example_file_list = [ + "examples/dcl/dcl_df22/.project/mcsdk_project.js", + "examples/dcl/dcl_pi/.project/mcsdk_project.js", "examples/position_sense/endat_diagnostic/single_channel/.project/project.js", "examples/position_sense/endat_diagnostic/multi_channel_load_share/.project/project.js", "examples/position_sense/endat_diagnostic/multi_channel_single_pru/.project/project.js", diff --git a/.project/device/project_am263x.js b/.project/device/project_am263x.js index c04e672..6f6cb12 100644 --- a/.project/device/project_am263x.js +++ b/.project/device/project_am263x.js @@ -11,6 +11,8 @@ const device_defines = { }; const example_file_list = [ + "examples/dcl/dcl_df22/.project/mcsdk_project.js", + "examples/dcl/dcl_pi/.project/mcsdk_project.js", "examples/position_sense/tamagawa_diagnostic_over_soc_uart/.project/project.js", ]; diff --git a/docs_src/docs/api_guide/components/dcl/dcl.cfg b/docs_src/docs/api_guide/components/dcl/dcl.cfg new file mode 100644 index 0000000..80a55d6 --- /dev/null +++ b/docs_src/docs/api_guide/components/dcl/dcl.cfg @@ -0,0 +1,18 @@ +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/components/dcl/dcl.md +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/dcl.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/dcl_common.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/pi/dcl_pi.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/pi/dcl_pi2.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/pid/dcl_pid.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/pid/dcl_pidf64.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/df/dcl_df11.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/df/dcl_df13.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/df/dcl_df22.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/df/dcl_df23.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/common/dcl_aux.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/common/dcl_clamp.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/common/dcl_css.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/common/dcl_stability.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/common/dcl_zpk3.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/misc/dcl_error.h +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/source/dcl/misc/dcl_fdlog.h \ No newline at end of file diff --git a/docs_src/docs/api_guide/components/dcl/dcl.md b/docs_src/docs/api_guide/components/dcl/dcl.md new file mode 100644 index 0000000..5ccd009 --- /dev/null +++ b/docs_src/docs/api_guide/components/dcl/dcl.md @@ -0,0 +1,144 @@ +# Digital Control Library (DCL) {#DCL} + +[TOC] + +## Introduction + +The Sitaraâ„¢ Digital Control Library (DCL) provides a suite of robust software functions for developers of digital +control applications using the Texas Instruments Sitara MCU. DCL is a header-only library, and all functions in +the library are provided in the form of C source-code. + +The DCL contains PI,PID and "Direct Form" controller types. The former are typically used to tune properties of +a transient response, while the latter are typically used to shape the open loop frequency response. + +In addintion, DCL contains functions to convert controller parameters from one type to the other. As well as +functions to parameterize the controller given a transfer function. + +Several utility modules such as error handling, data logging are also included as a supporting module. + +## Features Supported + +Supported controller modules (floating-point) + +- Linear PI +- Linear PID +- Linear PI with double integrator +- Direct Form 1 (first order) +- Direct Form 1 (third order) +- Direct Form 2 (second order) +- Direct Form 2 (third order) + +Other utility modules: + +- Error Handling +- Testpoints +- Data Logging + +## Features Not Supported + +(Compared with C2000Ware's DCL) +- Fix-point controller modules +- Non-linear PID controller +- Reference Generator and performance index +- Multi-channel data logs + +## Benchmark Results + +A benchmark on R5F core has been conducted to observe the following results when running controller arithmetic: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Controller Function + Cpu Cycles +
PI Controller
DCL_runPISeries49.15
DCL_runPIParallel50.00
DCL_runPISeriesTustin56.35
DCL_runPIParallelEnhanced62.57
PI2 Controller
DCL_runPI2Series74.00
PID Controller
DCL_runPIDSeries64.68
DCL_runPIDParallel64.84
DF11 Controller
DCL_runDF1124.00
DF13 Controller
DCL_runDF1343.00
DCL_runDF13Clamp53.00
DF22 Controller
DCL_runDF2227.00
DCL_runDF22Clamp41.00
DF23 Controller
DCL_runDF2329.00
DCL_runDF23Clamp45.00
PID 64bit Controller
DCL_runPIDF64Series185.14
DCL_runPIDF64Parallel173.63
+ +- Ran with TI Clang Compiler v2.1.3.LTS, with -Os flag and functions in ram, obtained the average result from 600 consecutive reading of running the controller with DPL CycleCountP. +- Actual result may vary depending on provided datasets and memory configuration. + +## Provided Examples + +The following examples has been provided to demonstrate the DCL library: + +- \ref EXAMPLES_DCL_PI +- \ref EXAMPLES_DCL_DF22 + +## Additional References {#DCL_ADDITIONAL_REFERENCES} + +N/A + +## API + +\ref DCL_API_MODULE diff --git a/docs_src/docs/api_guide/device/am243x/examples.cfg b/docs_src/docs/api_guide/device/am243x/examples.cfg index 532c41e..6a45b03 100644 --- a/docs_src/docs/api_guide/device/am243x/examples.cfg +++ b/docs_src/docs/api_guide/device/am243x/examples.cfg @@ -3,3 +3,5 @@ INPUT+= $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/examples/hdsl_example. INPUT+= $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/examples/endat_example.md INPUT+= $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/examples/tamagawa_example.md INPUT+= $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/examples/sdfm_example.md +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/examples/dcl/dcl_pi/dcl_pi.md +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/examples/dcl/dcl_df22/dcl_df22.md diff --git a/docs_src/docs/api_guide/device/am243x/includes.cfg b/docs_src/docs/api_guide/device/am243x/includes.cfg index f3c5b15..a515d42 100644 --- a/docs_src/docs/api_guide/device/am243x/includes.cfg +++ b/docs_src/docs/api_guide/device/am243x/includes.cfg @@ -13,6 +13,7 @@ INPUT += $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/device/$(DEVICE)/rele INPUT += $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/device/$(DEVICE)/release_notes_09_00_00.md @INCLUDE = $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/device/$(DEVICE)/examples.cfg @INCLUDE = $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/device/$(DEVICE)/components.cfg +@INCLUDE = $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/components/dcl/dcl.cfg # Used to selectively pick DEVICE specific sections within .md files ENABLED_SECTIONS = SOC_AM243X diff --git a/docs_src/docs/api_guide/device/am263x/examples.cfg b/docs_src/docs/api_guide/device/am263x/examples.cfg index 69164ef..00a46fe 100644 --- a/docs_src/docs/api_guide/device/am263x/examples.cfg +++ b/docs_src/docs/api_guide/device/am263x/examples.cfg @@ -1,2 +1,4 @@ INPUT+= $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/examples/examples.md -INPUT+= $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/examples/tamagawa_uart_example.md \ No newline at end of file +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/examples/tamagawa_uart_example.md +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/examples/dcl/dcl_pi/dcl_pi.md +INPUT+= $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/examples/dcl/dcl_df22/dcl_df22.md \ No newline at end of file diff --git a/docs_src/docs/api_guide/device/am263x/includes.cfg b/docs_src/docs/api_guide/device/am263x/includes.cfg index daafc25..9534baf 100644 --- a/docs_src/docs/api_guide/device/am263x/includes.cfg +++ b/docs_src/docs/api_guide/device/am263x/includes.cfg @@ -10,6 +10,7 @@ PROJECT_NAME = "AM263x Motor Control SDK" INPUT += $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/main_page/main_page.md @INCLUDE = $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/device/$(DEVICE)/examples.cfg @INCLUDE = $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/device/$(DEVICE)/components.cfg +@INCLUDE = $(MOTOR_CONTROL_SDK_PATH)/docs_src/docs/api_guide/components/dcl/dcl.cfg # Used to selectively pick DEVICE specific sections within .md files ENABLED_SECTIONS = SOC_AM263X diff --git a/docs_src/docs/api_guide/examples/dcl/dcl_df22/dcl_df22.md b/docs_src/docs/api_guide/examples/dcl/dcl_df22/dcl_df22.md new file mode 100644 index 0000000..28295a0 --- /dev/null +++ b/docs_src/docs/api_guide/examples/dcl/dcl_df22/dcl_df22.md @@ -0,0 +1,97 @@ +# DCL DF22 Test {#EXAMPLES_DCL_DF22} + +[TOC] + +Simple DCL DF22 controller demonstration + +This example leverages a direct form 2 2nd order (DF22) compensator from +the digital control library (DCL). + +It demonstrates how to setup and run the DF22 controller. The example first +initializes the datalog DCL_FDLOG to the test vector, run the controller +based on the test input and compare the output with the expected value. + + +## Files and directory structure + + + + + + + + + + + + + + + + + + + + + + +
Folder/Files + Description +
${MOTOR_CONTROL_SDK_PATH}/examples/dcl/dcl_df22/
df22_test.cMain function for DF22 testing
df22_test.hContains all initialization of needed strctures
data/Contains pre-generated data files result compares with
${MOTOR_CONTROL_SDK_PATH}/source/dcl
dcl/Folder containing DCL library source
+ +# Supported Combinations {#EXAMPLES_DCL_DF22_COMBO} + +\cond SOC_AM64X + + Parameter | Value + ---------------|----------- + CPU + OS | r5fss0-0 nortos + ^ | m4fss0-0 nortos + ^ | r5fss0-0 freertos + ^ | m4fss0-0 freertos + Toolchain | ti-arm-clang + Board | @VAR_BOARD_NAME_LOWER, @VAR_SK_BOARD_NAME_LOWER + Example folder | examples/dcl/dcl_df22 + +\endcond + +\cond SOC_AM243X + + Parameter | Value + ---------------|----------- + CPU + OS | r5fss0-0 nortos + ^ | m4fss0-0 nortos + ^ | r5fss0-0 freertos + ^ | m4fss0-0 freertos + Toolchain | ti-arm-clang + Boards | @VAR_BOARD_NAME_LOWER, @VAR_LP_BOARD_NAME_LOWER + Example folder | examples/dcl/dcl_df22 + +\endcond + +\cond SOC_AM263X + + Parameter | Value + ---------------|----------- + CPU + OS | r5fss0-0 nortos + ^ | r5fss0-0 freertos + Toolchain | ti-arm-clang + Boards | @VAR_BOARD_NAME_LOWER, @VAR_LP_BOARD_NAME_LOWER + Example folder | examples/dcl/dcl_df22 + +\endcond + +# Steps to Run the Example + +- **When using CCS projects to build**, import the CCS project for the required combination and build it using the CCS project menu (see \htmllink{@VAR_MCU_SDK_DOCS_PATH/CCS_PROJECTS_PAGE.html, Using SDK with CCS Projects}). +- **When using makefiles to build**, note the required combination and build using make command (see \htmllink{@VAR_MCU_SDK_DOCS_PATH/MAKEFILE_BUILD_PAGE.html, Using SDK with Makefiles}). +- Launch a CCS debug session and run the executable, see \htmllink{@VAR_MCU_SDK_DOCS_PATH/CCS_LAUNCH_PAGE.html, CCS Launch\, Load and Run} + + +### Sample Output + +Shown below is a sample output when the application is run: + +\code +DF22 test produced 0 error +\endcode diff --git a/docs_src/docs/api_guide/examples/dcl/dcl_pi/dcl_pi.md b/docs_src/docs/api_guide/examples/dcl/dcl_pi/dcl_pi.md new file mode 100644 index 0000000..9618edb --- /dev/null +++ b/docs_src/docs/api_guide/examples/dcl/dcl_pi/dcl_pi.md @@ -0,0 +1,96 @@ +# DCL PI Test {#EXAMPLES_DCL_PI} + +[TOC] + +Simple DCL PI controller demonstration + +This example leverages a PI controller from the digital control library(DCL). +It demonstrates how to setup and run the PI controller. The example first +initializes the datalog DCL_FDLOG to the test vector, run the controller +based on the test input and compare the output with the expected value. + + +## Files and directory structure + + + + + + + + + + + + + + + + + + + + + + +
Folder/Files + Description +
${MOTOR_CONTROL_SDK_PATH}/examples/dcl/dcl_pi/
pi_test.cMain function for PI testing
pi_test.hContains all initialization of needed strctures
data/Contains pre-generated data files result compares with
${MOTOR_CONTROL_SDK_PATH}/source/dcl
dcl/Folder containing DCL library source
+ +# Supported Combinations {#EXAMPLES_DCL_PI_COMBOS} + +\cond SOC_AM64X + + Parameter | Value + ---------------|----------- + CPU + OS | r5fss0-0 nortos + ^ | m4fss0-0 nortos + ^ | r5fss0-0 freertos + ^ | m4fss0-0 freertos + Toolchain | ti-arm-clang + Board | @VAR_BOARD_NAME_LOWER, @VAR_SK_BOARD_NAME_LOWER + Example folder | examples/dcl/dcl_pi + +\endcond + +\cond SOC_AM243X + + Parameter | Value + ---------------|----------- + CPU + OS | r5fss0-0 nortos + ^ | m4fss0-0 nortos + ^ | r5fss0-0 freertos + ^ | m4fss0-0 freertos + Toolchain | ti-arm-clang + Boards | @VAR_BOARD_NAME_LOWER, @VAR_LP_BOARD_NAME_LOWER + Example folder | examples/dcl/dcl_pi + +\endcond + +\cond SOC_AM263X + + Parameter | Value + ---------------|----------- + CPU + OS | r5fss0-0 nortos + ^ | r5fss0-0 freertos + Toolchain | ti-arm-clang + Boards | @VAR_BOARD_NAME_LOWER, @VAR_LP_BOARD_NAME_LOWER + Example folder | examples/dcl/dcl_pi + +\endcond + +# Steps to Run the Example + +- **When using CCS projects to build**, import the CCS project for the required combination and build it using the CCS project menu (see \htmllink{@VAR_MCU_SDK_DOCS_PATH/CCS_PROJECTS_PAGE.html, Using SDK with CCS Projects}). +- **When using makefiles to build**, note the required combination and build using make command (see \htmllink{@VAR_MCU_SDK_DOCS_PATH/MAKEFILE_BUILD_PAGE.html, Using SDK with Makefiles}). +- Launch a CCS debug session and run the executable, see \htmllink{@VAR_MCU_SDK_DOCS_PATH/CCS_LAUNCH_PAGE.html, CCS Launch\, Load and Run} + + + +### Sample Output + +Shown below is a sample output when the application is run: + +\code +PI test produced 0 error +\endcode diff --git a/docs_src/docs/api_guide/examples/examples.md b/docs_src/docs/api_guide/examples/examples.md index 6ae6194..428226b 100644 --- a/docs_src/docs/api_guide/examples/examples.md +++ b/docs_src/docs/api_guide/examples/examples.md @@ -1,12 +1,33 @@ # Examples and Demos {#EXAMPLES} This page lists all the examples and demos supported in this SDK. -\cond SOC_AM64X || SOC_AM243X --# \subpage EXAMPLE_MOTORCONTROL_ENDAT --# \subpage EXAMPLE_MOTORCONTROL_HDSL --# \subpage EXAMPLE_MOTORCONTROL_TAMAGAWA --# \subpage EXAMPLE_MOTORCONTROL_SDFM + +\cond SOC_AM64X +- Position Sense + -# \subpage EXAMPLE_MOTORCONTROL_ENDAT + -# \subpage EXAMPLE_MOTORCONTROL_HDSL + -# \subpage EXAMPLE_MOTORCONTROL_HDSL_TRACE + -# \subpage EXAMPLE_MOTORCONTROL_TAMAGAWA +- Current Sense + -# \subpage EXAMPLE_MOTORCONTROL_SDFM +\endcond + +\cond SOC_AM243X +- Position Sense + -# \subpage EXAMPLE_MOTORCONTROL_ENDAT + -# \subpage EXAMPLE_MOTORCONTROL_HDSL + -# \subpage EXAMPLE_MOTORCONTROL_HDSL_TRACE + -# \subpage EXAMPLE_MOTORCONTROL_TAMAGAWA +- Current Sense + -# \subpage EXAMPLE_MOTORCONTROL_SDFM +- RTLibs + -# \subpage EXAMPLES_DCL_PI + -# \subpage EXAMPLES_DCL_DF22 \endcond \cond SOC_AM263X --# \subpage EXAMPLE_MOTORCONTROL_TAMAGAWA_OVER_UART +- Position Sense + -# \subpage EXAMPLE_MOTORCONTROL_TAMAGAWA_OVER_UART +- RTLibs + -# \subpage EXAMPLES_DCL_PI + -# \subpage EXAMPLES_DCL_DF22 \endcond \ No newline at end of file diff --git a/docs_src/docs/api_guide/main_page/main_page.md b/docs_src/docs/api_guide/main_page/main_page.md index 31ddc16..71ef526 100644 --- a/docs_src/docs/api_guide/main_page/main_page.md +++ b/docs_src/docs/api_guide/main_page/main_page.md @@ -23,7 +23,7 @@ Given below is a block diagram of the SW modules in this SDK The main software components in the block diagram specific to motor control are described below -\cond SOC_AM64X || SOC_AM243X +\cond SOC_AM64X @@ -63,6 +63,52 @@ The main software components in the block diagram specific to motor control are \endcond +\cond SOC_AM243X + +
+ + + + + + + + + + + + + + + + + + +
Software Components + Documentation Page + Description +
**Position Sense Encoders**
EnDat + \ref ENDAT + Driver and PRU-ICSS firmware for EnDat encoder interface +
HDSL + \ref HDSL + Driver and PRU-ICSS firmware for Hiperface DSL encoder interface +
Tamagawa + \ref TAMAGAWA + Driver and PRU-ICSS firmware for Tamagawa encoder interface +
**Current Sense**
%SDFM + \ref SDFM + Driver and firmware for current sense using Sigma-Delta Filtering Module +
**Real Time Libraries**
Digital Control Library (DCL) + \ref DCL + Header-only library for digital control applications +
**Examples and Demos**
Examples and Demos + \ref EXAMPLES + Examples and demos showing usage of different SW libraries and APIs for motor control +
+ +\endcond + \cond SOC_AM263X diff --git a/examples/dcl/dcl_df22/.project/mcsdk_project.js b/examples/dcl/dcl_df22/.project/mcsdk_project.js new file mode 100644 index 0000000..4c25148 --- /dev/null +++ b/examples/dcl/dcl_df22/.project/mcsdk_project.js @@ -0,0 +1,14 @@ +function getComponentProperty(device) +{ + return require(`./mcsdk_project_${device}`).getComponentProperty(); +}; + +function getComponentBuildProperty(buildOption) +{ + return require(`./mcsdk_project_${buildOption.device}`).getComponentBuildProperty(buildOption); +}; + +module.exports = { + getComponentProperty, + getComponentBuildProperty, +}; diff --git a/examples/dcl/dcl_df22/.project/mcsdk_project_am243x.js b/examples/dcl/dcl_df22/.project/mcsdk_project_am243x.js new file mode 100644 index 0000000..1b43f1b --- /dev/null +++ b/examples/dcl/dcl_df22/.project/mcsdk_project_am243x.js @@ -0,0 +1,266 @@ +let path = require('path'); + +let device = "am243x"; + +const files = { + common: [ + /* Project Files */ + "df22_test.c", + "main.c", + ], +}; + +const projectspec_files = { + common: [ + "../../../df22_test.h", + "../../../data", + ] +} + +/* Relative to where the makefile will be generated + * Typically at /// + */ +const filedirs = { + common: [ + "..", /* core_os_combo base */ + "../../..", /* Example base */ + ], +}; + +const libdirs_nortos = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib", + ], +}; + +const libdirs_freertos = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib", + ], +}; + +const includes_nortos_r5f = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/source/dcl" + ], +}; + +const includes_freertos_r5f = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am243x/r5f", + "${MOTOR_CONTROL_SDK_PATH}/source/dcl" + ], +}; + +const includes_nortos_m4f = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/source/dcl" + ], +}; + +const includes_freertos_m4f = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CM4F", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am243x/m4f", + "${MOTOR_CONTROL_SDK_PATH}/source/dcl" + ], +}; + +const libs_nortos_r5f = { + common: [ + "nortos.am243x.r5f.ti-arm-clang.${ConfigName}.lib", + "drivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib", + "board.am243x.r5f.ti-arm-clang.${ConfigName}.lib", + ], +}; + +const libs_freertos_r5f = { + common: [ + "freertos.am243x.r5f.ti-arm-clang.${ConfigName}.lib", + "drivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib", + "board.am243x.r5f.ti-arm-clang.${ConfigName}.lib", + ], +}; + +const libs_nortos_m4f = { + common: [ + "nortos.am243x.m4f.ti-arm-clang.${ConfigName}.lib", + "drivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib", + "board.am243x.m4f.ti-arm-clang.${ConfigName}.lib", + ], +}; + +const libs_freertos_m4f = { + common: [ + "freertos.am243x.m4f.ti-arm-clang.${ConfigName}.lib", + "drivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib", + "board.am243x.m4f.ti-arm-clang.${ConfigName}.lib", + ], +}; + +const lnkfiles_r5f = { + common: [ + "linker.cmd", + "dcl_linker_r5f_am243x_sitara.cmd", + ] +}; + +const lnkfiles_m4f = { + common: [ + "linker.cmd", + "dcl_linker_m4f_am243x_sitara.cmd", + ] +}; + +const syscfgfile = "../example.syscfg"; + +const readmeDoxygenPageTag = "EXAMPLES_DCL_DF22"; + +const templates_nortos_r5f = +[ + { + input: ".project/templates/am243x/common/linker_r5f.cmd.xdt", + output: "linker.cmd", + }, + { + input: ".project/templates/am243x/nortos/main_nortos.c.xdt", + output: "../main.c", + options: { + entryFunction: "dcl_df22_main", + }, + } +]; + +const templates_freertos_r5f = +[ + { + input: ".project/templates/am243x/common/linker_r5f.cmd.xdt", + output: "linker.cmd", + }, + { + input: ".project/templates/am243x/freertos/main_freertos.c.xdt", + output: "../main.c", + options: { + entryFunction: "dcl_df22_main", + }, + } +]; + + +const templates_nortos_m4f = +[ + { + input: ".project/templates/am243x/common/linker_m4f.cmd.xdt", + output: "linker.cmd", + }, + { + input: ".project/templates/am243x/nortos/main_nortos.c.xdt", + output: "../main.c", + options: { + entryFunction: "dcl_df22_main", + }, + } +]; + +const templates_freertos_m4f = +[ + { + input: ".project/templates/am243x/common/linker_m4f.cmd.xdt", + output: "linker.cmd", + }, + { + input: ".project/templates/am243x/freertos/main_freertos.c.xdt", + output: "../main.c", + options: { + entryFunction: "dcl_df22_main", + }, + } +]; + +const buildOptionCombos = [ + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am243x-evm", os: "nortos"}, + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am243x-evm", os: "freertos"}, + { device: device, cpu: "m4fss0-0", cgt: "ti-arm-clang", board: "am243x-evm", os: "nortos"}, + { device: device, cpu: "m4fss0-0", cgt: "ti-arm-clang", board: "am243x-evm", os: "freertos"}, + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am243x-lp", os: "nortos"}, + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am243x-lp", os: "freertos"}, + { device: device, cpu: "m4fss0-0", cgt: "ti-arm-clang", board: "am243x-lp", os: "nortos"}, + { device: device, cpu: "m4fss0-0", cgt: "ti-arm-clang", board: "am243x-lp", os: "freertos"}, +]; + +function getComponentProperty() { + let property = {}; + + property.dirPath = path.resolve(__dirname, ".."); + property.type = "executable"; + property.name = "dcl_df22"; + property.isInternal = false; + property.tirexResourceSubClass = [ "example.gettingstarted" ]; + property.description = "A Direct Form 2 2nd order example demonstrating the digital control library (DCL)." + property.buildOptionCombos = buildOptionCombos; + + return property; +} + +function getComponentBuildProperty(buildOption) { + let build_property = {}; + + /* The following build property has been modified for dcl usage, + specifically - added different includes vars distinguishing no/free rtos + added different lnkfiles vars distinguishing cpu-specific lnkfiles + */ + + build_property.files = files; + build_property.filedirs = filedirs; + build_property.libdirs = libdirs_nortos; + build_property.syscfgfile = syscfgfile; + build_property.readmeDoxygenPageTag = readmeDoxygenPageTag; + build_property.projectspec_files = projectspec_files; + + if(buildOption.cpu.match(/r5f*/)) { + build_property.lnkfiles = lnkfiles_r5f; + if(buildOption.os.match(/freertos*/) ) + { + build_property.includes = includes_freertos_r5f; + build_property.libdirs = libdirs_freertos; + build_property.libs = libs_freertos_r5f; + build_property.templates = templates_freertos_r5f; + } + else + { + build_property.includes = includes_nortos_r5f; + build_property.libs = libs_nortos_r5f; + build_property.templates = templates_nortos_r5f; + } + } + if(buildOption.cpu.match(/m4f*/)) { + build_property.lnkfiles = lnkfiles_m4f; + if(buildOption.os.match(/freertos*/) ) + { + build_property.includes = includes_freertos_m4f; + build_property.libdirs = libdirs_freertos; + build_property.libs = libs_freertos_m4f; + build_property.templates = templates_freertos_m4f; + } + else + { + build_property.includes = includes_nortos_m4f; + build_property.libs = libs_nortos_m4f; + build_property.templates = templates_nortos_m4f; + } + } + + return build_property; +} + +module.exports = { + getComponentProperty, + getComponentBuildProperty, +}; diff --git a/examples/dcl/dcl_df22/.project/mcsdk_project_am263x.js b/examples/dcl/dcl_df22/.project/mcsdk_project_am263x.js new file mode 100644 index 0000000..891ddc9 --- /dev/null +++ b/examples/dcl/dcl_df22/.project/mcsdk_project_am263x.js @@ -0,0 +1,178 @@ +let path = require('path'); + +let device = "am263x"; + +const files = { + common: [ + /* Project Files */ + "df22_test.c", + "main.c", + ], +}; + +const projectspec_files = { + common: [ + "../../../df22_test.h", + "../../../data", + ] +} + +/* Relative to where the makefile will be generated + * Typically at /// + */ +const filedirs = { + common: [ + "..", /* core_os_combo base */ + "../../..", /* Example base */ + ], +}; + +const libdirs_nortos = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib", + ], +}; + +const libdirs_freertos = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib", + ], +}; + +const includes_nortos_r5f = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/source/dcl" + ], +}; + +const includes_freertos_r5f = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am263x/r5f", + "${MOTOR_CONTROL_SDK_PATH}/source/dcl" + ], +}; + +const libs_nortos_r5f = { + common: [ + "nortos.am263x.r5f.ti-arm-clang.${ConfigName}.lib", + "drivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib", + "board.am263x.r5f.ti-arm-clang.${ConfigName}.lib", + ], +}; + +const libs_freertos_r5f = { + common: [ + "freertos.am263x.r5f.ti-arm-clang.${ConfigName}.lib", + "drivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib", + "board.am263x.r5f.ti-arm-clang.${ConfigName}.lib", + ], +}; + + +const lnkfiles = { + common: [ + "linker.cmd", + "dcl_linker_r5f_am263x_sitara.cmd", + ] +}; + +const syscfgfile = "../example.syscfg"; + +const readmeDoxygenPageTag = "EXAMPLES_DCL_DF22"; + +const templates_nortos_r5f = +[ + { + input: ".project/templates/am263x/common/linker_r5f.cmd.xdt", + output: "linker.cmd", + }, + { + input: ".project/templates/am263x/nortos/main_nortos.c.xdt", + output: "../main.c", + options: { + entryFunction: "dcl_df22_main", + }, + } +]; + +const templates_freertos_r5f = +[ + { + input: ".project/templates/am263x/common/linker_r5f.cmd.xdt", + output: "linker.cmd", + }, + { + input: ".project/templates/am263x/freertos/main_freertos.c.xdt", + output: "../main.c", + options: { + entryFunction: "dcl_df22_main", + }, + } +]; + + +const buildOptionCombos = [ + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am263x-cc", os: "nortos"}, + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am263x-cc", os: "freertos"}, + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am263x-lp", os: "nortos"}, + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am263x-lp", os: "freertos"}, +]; + +function getComponentProperty() { + let property = {}; + + property.dirPath = path.resolve(__dirname, ".."); + property.type = "executable"; + property.name = "dcl_df22"; + property.isInternal = false; + property.tirexResourceSubClass = [ "example.gettingstarted" ]; + property.description = "A Direct Form 2 2nd order example demonstrating the digital control library (DCL)." + property.buildOptionCombos = buildOptionCombos; + + return property; +} + +function getComponentBuildProperty(buildOption) { + let build_property = {}; + + /* The following build property has been modified for dcl usage, + specifically - added different includes vars distinguishing no/free rtos + added different lnkfiles vars for cpu-specific lnk files + */ + build_property.files = files; + build_property.filedirs = filedirs; + build_property.libdirs = libdirs_nortos; + build_property.lnkfiles = lnkfiles; + build_property.syscfgfile = syscfgfile; + build_property.readmeDoxygenPageTag = readmeDoxygenPageTag; + build_property.projectspec_files = projectspec_files; + + if(buildOption.cpu.match(/r5f*/)) { + if(buildOption.os.match(/freertos*/) ) + { + build_property.includes = includes_freertos_r5f; + build_property.libdirs = libdirs_freertos; + build_property.libs = libs_freertos_r5f; + build_property.templates = templates_freertos_r5f; + } + else + { + build_property.includes = includes_nortos_r5f; + build_property.libs = libs_nortos_r5f; + build_property.templates = templates_nortos_r5f; + } + } + + return build_property; +} + +module.exports = { + getComponentProperty, + getComponentBuildProperty, +}; diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/example.syscfg b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/example.syscfg new file mode 100644 index 0000000..3539198 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/example.syscfg @@ -0,0 +1,57 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALV_beta" --package "ALV" --part "ALV" --context "m4fss0-0" --product "MCU_PLUS_SDK@07.03.00" + * @versions {"data":"2021012919","timestamp":"2021012919","tool":"1.8.0+1785","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const addr_translate = scripting.addModule("/kernel/dpl/addr_translate", {}, false); +const addr_translate1 = addr_translate.addInstance(); +const addr_translate2 = addr_translate.addInstance(); +const addr_translate3 = addr_translate.addInstance(); +const addr_translate4 = addr_translate.addInstance(); +const clock = scripting.addModule("/kernel/dpl/clock"); +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +addr_translate1.$name = "CONFIG_ADDR_TRANSLATE_REGION0"; +addr_translate1.localAddr = 0x80000000; + +addr_translate2.$name = "CONFIG_ADDR_TRANSLATE_REGION1"; +addr_translate2.systemAddr = 0x20000000; +addr_translate2.localAddr = 0xA0000000; + +addr_translate3.$name = "CONFIG_ADDR_TRANSLATE_REGION2"; +addr_translate3.systemAddr = 0x40000000; +addr_translate3.localAddr = 0xC0000000; + +addr_translate4.$name = "CONFIG_ADDR_TRANSLATE_REGION3"; +addr_translate4.systemAddr = 0x60000000; +addr_translate4.localAddr = 0x60000000; + +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART_CONSOLE"; +debug_log.uartLog.MCU_UART.$assign = "MCU_USART0"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.attributes = "Device"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 18; + +/** + * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future + * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to + * re-solve from scratch. + */ +debug_log.uartLog.MCU_UART.RXD.$suggestSolution = "MCU_UART0_RXD"; +debug_log.uartLog.MCU_UART.TXD.$suggestSolution = "MCU_UART0_TXD"; diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/main.c b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/main.c new file mode 100644 index 0000000..20ce9d5 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/main.c @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" +#include "FreeRTOS.h" +#include "task.h" + +#define MAIN_TASK_PRI (configMAX_PRIORITIES-1) + +#define MAIN_TASK_SIZE (16384U/sizeof(configSTACK_DEPTH_TYPE)) +StackType_t gMainTaskStack[MAIN_TASK_SIZE] __attribute__((aligned(32))); + +StaticTask_t gMainTaskObj; +TaskHandle_t gMainTask; + +void dcl_df22_main(void *args); + +void freertos_main(void *args) +{ + dcl_df22_main(NULL); + + vTaskDelete(NULL); +} + + +int main(void) +{ + /* init SOC specific modules */ + System_init(); + Board_init(); + + /* This task is created at highest priority, it should create more tasks and then delete itself */ + gMainTask = xTaskCreateStatic( freertos_main, /* Pointer to the function that implements the task. */ + "freertos_main", /* Text name for the task. This is to facilitate debugging only. */ + MAIN_TASK_SIZE, /* Stack depth in units of StackType_t typically uint32_t on 32b CPUs */ + NULL, /* We are not using the task parameter. */ + MAIN_TASK_PRI, /* task priority, 0 is lowest priority, configMAX_PRIORITIES-1 is highest */ + gMainTaskStack, /* pointer to stack base */ + &gMainTaskObj ); /* pointer to statically allocated task object memory */ + configASSERT(gMainTask != NULL); + + /* Start the scheduler to start the tasks executing. */ + vTaskStartScheduler(); + + /* The following line should never be reached because vTaskStartScheduler() + will only return if there was not enough FreeRTOS heap memory available to + create the Idle and (if configured) Timer tasks. Heap management, and + techniques for trapping heap exhaustion, are described in the book text. */ + DebugP_assertNoLog(0); + + return 0; +} diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd new file mode 100644 index 0000000..abbd5a0 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM M4F_IRAM +#define REG_RAM M4F_IRAM /* M4F_DRAM also works */ + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..d406a5a --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/example.projectspec @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..ca912dd --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/linker.cmd @@ -0,0 +1,62 @@ + +/* make sure below retain is there in your linker command file, it keeps the vector table in the final binary */ +--retain="*(.vectors)" +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 + + +SECTIONS +{ + /* This has the M4F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > M4F_VECS + .text: {} palign(8) > M4F_IRAM /* This is where code resides */ + + .bss: {} palign(8) > M4F_DRAM /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + + .data: {} palign(8) > M4F_DRAM /* This is where initialized globals and static go */ + .rodata: {} palign(8) > M4F_DRAM /* This is where const's go */ + .sysmem: {} palign(8) > M4F_IRAM /* This is where the malloc heap goes */ + .stack: {} palign(8) > M4F_IRAM /* This is where the main() stack goes */ + + /* Sections needed for C++ projects */ + .ARM.exidx: {} palign(8) > M4F_IRAM /* Needed for C++ exception handling */ + .init_array: {} palign(8) > M4F_IRAM /* Contains function pointers called before main */ + .fini_array: {} palign(8) > M4F_IRAM /* Contains function pointers called after main */ + + /* General purpose user shared memory */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > IPC_VRING_MEM +} + +MEMORY +{ + M4F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000200 + M4F_IRAM : ORIGIN = 0x00000200 , LENGTH = 0x0002FE00 + M4F_DRAM : ORIGIN = 0x00030000 , LENGTH = 0x00010000 + + /* shared memories that are used by all cores */ + /* On M4F, + * - By default MSMC RAM is not accessible to M4F, a RAT entry is needed to make it + * accessible on M4F + * - So make sure there is a RAT entry which has a 1:1 mapping from 0x70000000 to 0x70200000 + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + IPC_VRING_MEM: ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile new file mode 100644 index 0000000..048bbb6 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile @@ -0,0 +1,303 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_df22.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_df22.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_df22.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_df22.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_df22.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_df22.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_df22.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_df22.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_df22.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + df22_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CM4F \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am243x/m4f \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-m4 \ + -mfloat-abi=hard \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_m4f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lfreertos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + freertos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:m4fss0-0:freertos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:m4fss0-0:freertos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:m4fss0-0:freertos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:m4fss0-0:freertos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:m4fss0-0:freertos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:m4fss0-0:freertos:ti-arm-clang dcl_df22 ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context m4fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALV_beta --context m4fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..8215903 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..520c508 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_df22_am243x-evm_m4fss0-0_freertos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/example.syscfg b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/example.syscfg new file mode 100644 index 0000000..3539198 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/example.syscfg @@ -0,0 +1,57 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALV_beta" --package "ALV" --part "ALV" --context "m4fss0-0" --product "MCU_PLUS_SDK@07.03.00" + * @versions {"data":"2021012919","timestamp":"2021012919","tool":"1.8.0+1785","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const addr_translate = scripting.addModule("/kernel/dpl/addr_translate", {}, false); +const addr_translate1 = addr_translate.addInstance(); +const addr_translate2 = addr_translate.addInstance(); +const addr_translate3 = addr_translate.addInstance(); +const addr_translate4 = addr_translate.addInstance(); +const clock = scripting.addModule("/kernel/dpl/clock"); +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +addr_translate1.$name = "CONFIG_ADDR_TRANSLATE_REGION0"; +addr_translate1.localAddr = 0x80000000; + +addr_translate2.$name = "CONFIG_ADDR_TRANSLATE_REGION1"; +addr_translate2.systemAddr = 0x20000000; +addr_translate2.localAddr = 0xA0000000; + +addr_translate3.$name = "CONFIG_ADDR_TRANSLATE_REGION2"; +addr_translate3.systemAddr = 0x40000000; +addr_translate3.localAddr = 0xC0000000; + +addr_translate4.$name = "CONFIG_ADDR_TRANSLATE_REGION3"; +addr_translate4.systemAddr = 0x60000000; +addr_translate4.localAddr = 0x60000000; + +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART_CONSOLE"; +debug_log.uartLog.MCU_UART.$assign = "MCU_USART0"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.attributes = "Device"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 18; + +/** + * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future + * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to + * re-solve from scratch. + */ +debug_log.uartLog.MCU_UART.RXD.$suggestSolution = "MCU_UART0_RXD"; +debug_log.uartLog.MCU_UART.TXD.$suggestSolution = "MCU_UART0_TXD"; diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/main.c b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/main.c new file mode 100644 index 0000000..4a61f6c --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/main.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" + +void dcl_df22_main(void *args); + +int main(void) +{ + System_init(); + Board_init(); + + dcl_df22_main(NULL); + + Board_deinit(); + System_deinit(); + + return 0; +} diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd new file mode 100644 index 0000000..abbd5a0 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM M4F_IRAM +#define REG_RAM M4F_IRAM /* M4F_DRAM also works */ + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..b8259a3 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/example.projectspec @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..ca912dd --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/linker.cmd @@ -0,0 +1,62 @@ + +/* make sure below retain is there in your linker command file, it keeps the vector table in the final binary */ +--retain="*(.vectors)" +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 + + +SECTIONS +{ + /* This has the M4F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > M4F_VECS + .text: {} palign(8) > M4F_IRAM /* This is where code resides */ + + .bss: {} palign(8) > M4F_DRAM /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + + .data: {} palign(8) > M4F_DRAM /* This is where initialized globals and static go */ + .rodata: {} palign(8) > M4F_DRAM /* This is where const's go */ + .sysmem: {} palign(8) > M4F_IRAM /* This is where the malloc heap goes */ + .stack: {} palign(8) > M4F_IRAM /* This is where the main() stack goes */ + + /* Sections needed for C++ projects */ + .ARM.exidx: {} palign(8) > M4F_IRAM /* Needed for C++ exception handling */ + .init_array: {} palign(8) > M4F_IRAM /* Contains function pointers called before main */ + .fini_array: {} palign(8) > M4F_IRAM /* Contains function pointers called after main */ + + /* General purpose user shared memory */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > IPC_VRING_MEM +} + +MEMORY +{ + M4F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000200 + M4F_IRAM : ORIGIN = 0x00000200 , LENGTH = 0x0002FE00 + M4F_DRAM : ORIGIN = 0x00030000 , LENGTH = 0x00010000 + + /* shared memories that are used by all cores */ + /* On M4F, + * - By default MSMC RAM is not accessible to M4F, a RAT entry is needed to make it + * accessible on M4F + * - So make sure there is a RAT entry which has a 1:1 mapping from 0x70000000 to 0x70200000 + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + IPC_VRING_MEM: ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile new file mode 100644 index 0000000..4eb35da --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile @@ -0,0 +1,300 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_df22.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_df22.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_df22.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_df22.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_df22.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_df22.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_df22.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_df22.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_df22.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + df22_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-m4 \ + -mfloat-abi=hard \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_m4f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lnortos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + nortos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:m4fss0-0:nortos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:m4fss0-0:nortos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:m4fss0-0:nortos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:m4fss0-0:nortos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:m4fss0-0:nortos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:m4fss0-0:nortos:ti-arm-clang dcl_df22 ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context m4fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALV_beta --context m4fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..653f9a5 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..ef616d4 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_df22_am243x-evm_m4fss0-0_nortos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/example.syscfg b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/example.syscfg new file mode 100644 index 0000000..7876a6b --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/example.syscfg @@ -0,0 +1,62 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALV_beta" --package "ALV" --part "ALV" --context "r5fss0-0" --product "MCU_PLUS_SDK@07.03.00" + * @versions {"data":"2021012919","timestamp":"2021012919","tool":"1.8.0+1785","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); +const mpu_armv76 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART_CONSOLE"; +debug_log.uartLog.UART.$assign = "USART0"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x41010000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x60000000; +mpu_armv75.size = 28; +mpu_armv75.accessPermissions = "Supervisor RD, User RD"; + +mpu_armv76.$name = "CONFIG_MPU_REGION5"; +mpu_armv76.baseAddr = 0x80000000; +mpu_armv76.size = 31; + +/** + * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future + * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to + * re-solve from scratch. + */ +debug_log.uartLog.UART.RXD.$suggestSolution = "UART0_RXD"; +debug_log.uartLog.UART.TXD.$suggestSolution = "UART0_TXD"; diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/main.c b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/main.c new file mode 100644 index 0000000..20ce9d5 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/main.c @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" +#include "FreeRTOS.h" +#include "task.h" + +#define MAIN_TASK_PRI (configMAX_PRIORITIES-1) + +#define MAIN_TASK_SIZE (16384U/sizeof(configSTACK_DEPTH_TYPE)) +StackType_t gMainTaskStack[MAIN_TASK_SIZE] __attribute__((aligned(32))); + +StaticTask_t gMainTaskObj; +TaskHandle_t gMainTask; + +void dcl_df22_main(void *args); + +void freertos_main(void *args) +{ + dcl_df22_main(NULL); + + vTaskDelete(NULL); +} + + +int main(void) +{ + /* init SOC specific modules */ + System_init(); + Board_init(); + + /* This task is created at highest priority, it should create more tasks and then delete itself */ + gMainTask = xTaskCreateStatic( freertos_main, /* Pointer to the function that implements the task. */ + "freertos_main", /* Text name for the task. This is to facilitate debugging only. */ + MAIN_TASK_SIZE, /* Stack depth in units of StackType_t typically uint32_t on 32b CPUs */ + NULL, /* We are not using the task parameter. */ + MAIN_TASK_PRI, /* task priority, 0 is lowest priority, configMAX_PRIORITIES-1 is highest */ + gMainTaskStack, /* pointer to stack base */ + &gMainTaskObj ); /* pointer to statically allocated task object memory */ + configASSERT(gMainTask != NULL); + + /* Start the scheduler to start the tasks executing. */ + vTaskStartScheduler(); + + /* The following line should never be reached because vTaskStartScheduler() + will only return if there was not enough FreeRTOS heap memory available to + create the Idle and (if configured) Timer tasks. Heap management, and + techniques for trapping heap exhaustion, are described in the book text. */ + DebugP_assertNoLog(0); + + return 0; +} diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd new file mode 100644 index 0000000..9eca059 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM MSRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..b220939 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/example.projectspec @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..69640f4 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/linker.cmd @@ -0,0 +1,148 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is disabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > MSRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > MSRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .data: {} palign(8) /* This is where initialized globals and static go */ + } > MSRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > MSRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > MSRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > MSRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* General purpose non cacheable memory, used in some examples */ + .bss.nocache (NOLOAD) : {} > NON_CACHE_MEM +} + +/* +NOTE: Below memory is reserved for DMSC usage + - During Boot till security handoff is complete + 0x701E0000 - 0x701FFFFF (128KB) + - After "Security Handoff" is complete (i.e at run time) + 0x701F4000 - 0x701FFFFF (48KB) + + Security handoff is complete when this message is sent to the DMSC, + TISCI_MSG_SEC_HANDOVER + + This should be sent once all cores are loaded and all application + specific firewall calls are setup. +*/ + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB0 : ORIGIN = 0x41010000 , LENGTH = 0x00008000 + + /* memory segment used to hold CPU specific non-cached data, MAKE to add a MPU entry to mark this as non-cached */ + NON_CACHE_MEM : ORIGIN = 0x70060000 , LENGTH = 0x8000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + MSRAM : ORIGIN = 0x70080000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + /* shared memory segments */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile new file mode 100644 index 0000000..eab4000 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile @@ -0,0 +1,305 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_df22.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_df22.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_df22.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_df22.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_df22.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_df22.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_df22.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_df22.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_df22.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + df22_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am243x/r5f \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lfreertos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + freertos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:r5fss0-0:freertos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:r5fss0-0:freertos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:r5fss0-0:freertos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:r5fss0-0:freertos:ti-arm-clang dcl_df22 ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALV_beta --context r5fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..8666cfd --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..41f5086 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_df22_am243x-evm_r5fss0-0_freertos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/example.syscfg b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/example.syscfg new file mode 100644 index 0000000..7876a6b --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/example.syscfg @@ -0,0 +1,62 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALV_beta" --package "ALV" --part "ALV" --context "r5fss0-0" --product "MCU_PLUS_SDK@07.03.00" + * @versions {"data":"2021012919","timestamp":"2021012919","tool":"1.8.0+1785","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); +const mpu_armv76 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART_CONSOLE"; +debug_log.uartLog.UART.$assign = "USART0"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x41010000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x60000000; +mpu_armv75.size = 28; +mpu_armv75.accessPermissions = "Supervisor RD, User RD"; + +mpu_armv76.$name = "CONFIG_MPU_REGION5"; +mpu_armv76.baseAddr = 0x80000000; +mpu_armv76.size = 31; + +/** + * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future + * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to + * re-solve from scratch. + */ +debug_log.uartLog.UART.RXD.$suggestSolution = "UART0_RXD"; +debug_log.uartLog.UART.TXD.$suggestSolution = "UART0_TXD"; diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/main.c b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/main.c new file mode 100644 index 0000000..4a61f6c --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/main.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" + +void dcl_df22_main(void *args); + +int main(void) +{ + System_init(); + Board_init(); + + dcl_df22_main(NULL); + + Board_deinit(); + System_deinit(); + + return 0; +} diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd new file mode 100644 index 0000000..9eca059 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM MSRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..772909e --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/example.projectspec @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..69640f4 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/linker.cmd @@ -0,0 +1,148 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is disabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > MSRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > MSRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .data: {} palign(8) /* This is where initialized globals and static go */ + } > MSRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > MSRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > MSRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > MSRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* General purpose non cacheable memory, used in some examples */ + .bss.nocache (NOLOAD) : {} > NON_CACHE_MEM +} + +/* +NOTE: Below memory is reserved for DMSC usage + - During Boot till security handoff is complete + 0x701E0000 - 0x701FFFFF (128KB) + - After "Security Handoff" is complete (i.e at run time) + 0x701F4000 - 0x701FFFFF (48KB) + + Security handoff is complete when this message is sent to the DMSC, + TISCI_MSG_SEC_HANDOVER + + This should be sent once all cores are loaded and all application + specific firewall calls are setup. +*/ + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB0 : ORIGIN = 0x41010000 , LENGTH = 0x00008000 + + /* memory segment used to hold CPU specific non-cached data, MAKE to add a MPU entry to mark this as non-cached */ + NON_CACHE_MEM : ORIGIN = 0x70060000 , LENGTH = 0x8000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + MSRAM : ORIGIN = 0x70080000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + /* shared memory segments */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile new file mode 100644 index 0000000..64ac0f4 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile @@ -0,0 +1,302 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_df22.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_df22.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_df22.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_df22.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_df22.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_df22.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_df22.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_df22.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_df22.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + df22_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lnortos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + nortos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:r5fss0-0:nortos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:r5fss0-0:nortos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:r5fss0-0:nortos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:r5fss0-0:nortos:ti-arm-clang dcl_df22 ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALV_beta --context r5fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..81886bf --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..8933277 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_df22_am243x-evm_r5fss0-0_nortos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/example.syscfg b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/example.syscfg new file mode 100644 index 0000000..e5282a5 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/example.syscfg @@ -0,0 +1,45 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALX_beta" --package "ALX" --part "ALX" --context "m4fss0-0" --product "MCU_PLUS_SDK@07.03.01" + * @versions {"tool":"1.9.0+2015","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const addr_translate = scripting.addModule("/kernel/dpl/addr_translate", {}, false); +const addr_translate1 = addr_translate.addInstance(); +const addr_translate2 = addr_translate.addInstance(); +const addr_translate3 = addr_translate.addInstance(); +const addr_translate4 = addr_translate.addInstance(); +const clock = scripting.addModule("/kernel/dpl/clock"); +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +addr_translate1.$name = "CONFIG_ADDR_TRANSLATE_REGION0"; +addr_translate1.localAddr = 0x80000000; + +addr_translate2.$name = "CONFIG_ADDR_TRANSLATE_REGION1"; +addr_translate2.systemAddr = 0x20000000; +addr_translate2.localAddr = 0xA0000000; + +addr_translate3.$name = "CONFIG_ADDR_TRANSLATE_REGION2"; +addr_translate3.systemAddr = 0x40000000; +addr_translate3.localAddr = 0xC0000000; + +addr_translate4.$name = "CONFIG_ADDR_TRANSLATE_REGION3"; +addr_translate4.systemAddr = 0x60000000; +addr_translate4.localAddr = 0x60000000; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.attributes = "Device"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 18; diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/main.c b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/main.c new file mode 100644 index 0000000..20ce9d5 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/main.c @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" +#include "FreeRTOS.h" +#include "task.h" + +#define MAIN_TASK_PRI (configMAX_PRIORITIES-1) + +#define MAIN_TASK_SIZE (16384U/sizeof(configSTACK_DEPTH_TYPE)) +StackType_t gMainTaskStack[MAIN_TASK_SIZE] __attribute__((aligned(32))); + +StaticTask_t gMainTaskObj; +TaskHandle_t gMainTask; + +void dcl_df22_main(void *args); + +void freertos_main(void *args) +{ + dcl_df22_main(NULL); + + vTaskDelete(NULL); +} + + +int main(void) +{ + /* init SOC specific modules */ + System_init(); + Board_init(); + + /* This task is created at highest priority, it should create more tasks and then delete itself */ + gMainTask = xTaskCreateStatic( freertos_main, /* Pointer to the function that implements the task. */ + "freertos_main", /* Text name for the task. This is to facilitate debugging only. */ + MAIN_TASK_SIZE, /* Stack depth in units of StackType_t typically uint32_t on 32b CPUs */ + NULL, /* We are not using the task parameter. */ + MAIN_TASK_PRI, /* task priority, 0 is lowest priority, configMAX_PRIORITIES-1 is highest */ + gMainTaskStack, /* pointer to stack base */ + &gMainTaskObj ); /* pointer to statically allocated task object memory */ + configASSERT(gMainTask != NULL); + + /* Start the scheduler to start the tasks executing. */ + vTaskStartScheduler(); + + /* The following line should never be reached because vTaskStartScheduler() + will only return if there was not enough FreeRTOS heap memory available to + create the Idle and (if configured) Timer tasks. Heap management, and + techniques for trapping heap exhaustion, are described in the book text. */ + DebugP_assertNoLog(0); + + return 0; +} diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd new file mode 100644 index 0000000..abbd5a0 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM M4F_IRAM +#define REG_RAM M4F_IRAM /* M4F_DRAM also works */ + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..1fc2900 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/example.projectspec @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..ca912dd --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/linker.cmd @@ -0,0 +1,62 @@ + +/* make sure below retain is there in your linker command file, it keeps the vector table in the final binary */ +--retain="*(.vectors)" +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 + + +SECTIONS +{ + /* This has the M4F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > M4F_VECS + .text: {} palign(8) > M4F_IRAM /* This is where code resides */ + + .bss: {} palign(8) > M4F_DRAM /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + + .data: {} palign(8) > M4F_DRAM /* This is where initialized globals and static go */ + .rodata: {} palign(8) > M4F_DRAM /* This is where const's go */ + .sysmem: {} palign(8) > M4F_IRAM /* This is where the malloc heap goes */ + .stack: {} palign(8) > M4F_IRAM /* This is where the main() stack goes */ + + /* Sections needed for C++ projects */ + .ARM.exidx: {} palign(8) > M4F_IRAM /* Needed for C++ exception handling */ + .init_array: {} palign(8) > M4F_IRAM /* Contains function pointers called before main */ + .fini_array: {} palign(8) > M4F_IRAM /* Contains function pointers called after main */ + + /* General purpose user shared memory */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > IPC_VRING_MEM +} + +MEMORY +{ + M4F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000200 + M4F_IRAM : ORIGIN = 0x00000200 , LENGTH = 0x0002FE00 + M4F_DRAM : ORIGIN = 0x00030000 , LENGTH = 0x00010000 + + /* shared memories that are used by all cores */ + /* On M4F, + * - By default MSMC RAM is not accessible to M4F, a RAT entry is needed to make it + * accessible on M4F + * - So make sure there is a RAT entry which has a 1:1 mapping from 0x70000000 to 0x70200000 + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + IPC_VRING_MEM: ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile new file mode 100644 index 0000000..8c99389 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile @@ -0,0 +1,303 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_df22.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_df22.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_df22.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_df22.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_df22.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_df22.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_df22.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_df22.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_df22.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + df22_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CM4F \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am243x/m4f \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-m4 \ + -mfloat-abi=hard \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_m4f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lfreertos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + freertos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:m4fss0-0:freertos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:m4fss0-0:freertos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:m4fss0-0:freertos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:m4fss0-0:freertos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:m4fss0-0:freertos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:m4fss0-0:freertos:ti-arm-clang dcl_df22 ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context m4fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALX_beta --context m4fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..8215903 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..c587694 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_df22_am243x-lp_m4fss0-0_freertos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/example.syscfg b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/example.syscfg new file mode 100644 index 0000000..e5282a5 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/example.syscfg @@ -0,0 +1,45 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALX_beta" --package "ALX" --part "ALX" --context "m4fss0-0" --product "MCU_PLUS_SDK@07.03.01" + * @versions {"tool":"1.9.0+2015","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const addr_translate = scripting.addModule("/kernel/dpl/addr_translate", {}, false); +const addr_translate1 = addr_translate.addInstance(); +const addr_translate2 = addr_translate.addInstance(); +const addr_translate3 = addr_translate.addInstance(); +const addr_translate4 = addr_translate.addInstance(); +const clock = scripting.addModule("/kernel/dpl/clock"); +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +addr_translate1.$name = "CONFIG_ADDR_TRANSLATE_REGION0"; +addr_translate1.localAddr = 0x80000000; + +addr_translate2.$name = "CONFIG_ADDR_TRANSLATE_REGION1"; +addr_translate2.systemAddr = 0x20000000; +addr_translate2.localAddr = 0xA0000000; + +addr_translate3.$name = "CONFIG_ADDR_TRANSLATE_REGION2"; +addr_translate3.systemAddr = 0x40000000; +addr_translate3.localAddr = 0xC0000000; + +addr_translate4.$name = "CONFIG_ADDR_TRANSLATE_REGION3"; +addr_translate4.systemAddr = 0x60000000; +addr_translate4.localAddr = 0x60000000; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.attributes = "Device"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 18; diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/main.c b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/main.c new file mode 100644 index 0000000..4a61f6c --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/main.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" + +void dcl_df22_main(void *args); + +int main(void) +{ + System_init(); + Board_init(); + + dcl_df22_main(NULL); + + Board_deinit(); + System_deinit(); + + return 0; +} diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd new file mode 100644 index 0000000..abbd5a0 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM M4F_IRAM +#define REG_RAM M4F_IRAM /* M4F_DRAM also works */ + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..5086eca --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/example.projectspec @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..ca912dd --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/linker.cmd @@ -0,0 +1,62 @@ + +/* make sure below retain is there in your linker command file, it keeps the vector table in the final binary */ +--retain="*(.vectors)" +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 + + +SECTIONS +{ + /* This has the M4F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > M4F_VECS + .text: {} palign(8) > M4F_IRAM /* This is where code resides */ + + .bss: {} palign(8) > M4F_DRAM /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + + .data: {} palign(8) > M4F_DRAM /* This is where initialized globals and static go */ + .rodata: {} palign(8) > M4F_DRAM /* This is where const's go */ + .sysmem: {} palign(8) > M4F_IRAM /* This is where the malloc heap goes */ + .stack: {} palign(8) > M4F_IRAM /* This is where the main() stack goes */ + + /* Sections needed for C++ projects */ + .ARM.exidx: {} palign(8) > M4F_IRAM /* Needed for C++ exception handling */ + .init_array: {} palign(8) > M4F_IRAM /* Contains function pointers called before main */ + .fini_array: {} palign(8) > M4F_IRAM /* Contains function pointers called after main */ + + /* General purpose user shared memory */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > IPC_VRING_MEM +} + +MEMORY +{ + M4F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000200 + M4F_IRAM : ORIGIN = 0x00000200 , LENGTH = 0x0002FE00 + M4F_DRAM : ORIGIN = 0x00030000 , LENGTH = 0x00010000 + + /* shared memories that are used by all cores */ + /* On M4F, + * - By default MSMC RAM is not accessible to M4F, a RAT entry is needed to make it + * accessible on M4F + * - So make sure there is a RAT entry which has a 1:1 mapping from 0x70000000 to 0x70200000 + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + IPC_VRING_MEM: ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile new file mode 100644 index 0000000..2b72457 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile @@ -0,0 +1,300 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_df22.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_df22.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_df22.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_df22.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_df22.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_df22.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_df22.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_df22.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_df22.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + df22_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-m4 \ + -mfloat-abi=hard \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_m4f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lnortos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + nortos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:m4fss0-0:nortos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:m4fss0-0:nortos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:m4fss0-0:nortos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:m4fss0-0:nortos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:m4fss0-0:nortos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:m4fss0-0:nortos:ti-arm-clang dcl_df22 ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context m4fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALX_beta --context m4fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..653f9a5 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..e094b3d --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_df22_am243x-lp_m4fss0-0_nortos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/example.syscfg b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/example.syscfg new file mode 100644 index 0000000..0e4bb27 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/example.syscfg @@ -0,0 +1,57 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALX_beta" --package "ALX" --part "ALX" --context "r5fss0-0" --product "MCU_PLUS_SDK@07.03.01" + * @versions {"data":"2021040816","timestamp":"2021040816","tool":"1.8.1+1900","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART_CONSOLE"; +debug_log.uartLog.UART.$assign = "USART0"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x41010000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x60000000; +mpu_armv75.size = 28; +mpu_armv75.accessPermissions = "Supervisor RD, User RD"; + +/** + * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future + * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to + * re-solve from scratch. + */ +debug_log.uartLog.UART.RXD.$suggestSolution = "B10"; +debug_log.uartLog.UART.TXD.$suggestSolution = "B11"; diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/main.c b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/main.c new file mode 100644 index 0000000..20ce9d5 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/main.c @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" +#include "FreeRTOS.h" +#include "task.h" + +#define MAIN_TASK_PRI (configMAX_PRIORITIES-1) + +#define MAIN_TASK_SIZE (16384U/sizeof(configSTACK_DEPTH_TYPE)) +StackType_t gMainTaskStack[MAIN_TASK_SIZE] __attribute__((aligned(32))); + +StaticTask_t gMainTaskObj; +TaskHandle_t gMainTask; + +void dcl_df22_main(void *args); + +void freertos_main(void *args) +{ + dcl_df22_main(NULL); + + vTaskDelete(NULL); +} + + +int main(void) +{ + /* init SOC specific modules */ + System_init(); + Board_init(); + + /* This task is created at highest priority, it should create more tasks and then delete itself */ + gMainTask = xTaskCreateStatic( freertos_main, /* Pointer to the function that implements the task. */ + "freertos_main", /* Text name for the task. This is to facilitate debugging only. */ + MAIN_TASK_SIZE, /* Stack depth in units of StackType_t typically uint32_t on 32b CPUs */ + NULL, /* We are not using the task parameter. */ + MAIN_TASK_PRI, /* task priority, 0 is lowest priority, configMAX_PRIORITIES-1 is highest */ + gMainTaskStack, /* pointer to stack base */ + &gMainTaskObj ); /* pointer to statically allocated task object memory */ + configASSERT(gMainTask != NULL); + + /* Start the scheduler to start the tasks executing. */ + vTaskStartScheduler(); + + /* The following line should never be reached because vTaskStartScheduler() + will only return if there was not enough FreeRTOS heap memory available to + create the Idle and (if configured) Timer tasks. Heap management, and + techniques for trapping heap exhaustion, are described in the book text. */ + DebugP_assertNoLog(0); + + return 0; +} diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd new file mode 100644 index 0000000..9eca059 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM MSRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..348a135 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..69640f4 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd @@ -0,0 +1,148 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is disabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > MSRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > MSRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .data: {} palign(8) /* This is where initialized globals and static go */ + } > MSRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > MSRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > MSRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > MSRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* General purpose non cacheable memory, used in some examples */ + .bss.nocache (NOLOAD) : {} > NON_CACHE_MEM +} + +/* +NOTE: Below memory is reserved for DMSC usage + - During Boot till security handoff is complete + 0x701E0000 - 0x701FFFFF (128KB) + - After "Security Handoff" is complete (i.e at run time) + 0x701F4000 - 0x701FFFFF (48KB) + + Security handoff is complete when this message is sent to the DMSC, + TISCI_MSG_SEC_HANDOVER + + This should be sent once all cores are loaded and all application + specific firewall calls are setup. +*/ + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB0 : ORIGIN = 0x41010000 , LENGTH = 0x00008000 + + /* memory segment used to hold CPU specific non-cached data, MAKE to add a MPU entry to mark this as non-cached */ + NON_CACHE_MEM : ORIGIN = 0x70060000 , LENGTH = 0x8000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + MSRAM : ORIGIN = 0x70080000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + /* shared memory segments */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile new file mode 100644 index 0000000..a01b03a --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile @@ -0,0 +1,305 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_df22.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_df22.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_df22.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_df22.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_df22.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_df22.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_df22.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_df22.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_df22.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + df22_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am243x/r5f \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lfreertos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + freertos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:r5fss0-0:freertos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:r5fss0-0:freertos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:r5fss0-0:freertos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:r5fss0-0:freertos:ti-arm-clang dcl_df22 ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALX_beta --context r5fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..8666cfd --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..dd6e280 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_df22_am243x-lp_r5fss0-0_freertos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/example.syscfg b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/example.syscfg new file mode 100644 index 0000000..0e4bb27 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/example.syscfg @@ -0,0 +1,57 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALX_beta" --package "ALX" --part "ALX" --context "r5fss0-0" --product "MCU_PLUS_SDK@07.03.01" + * @versions {"data":"2021040816","timestamp":"2021040816","tool":"1.8.1+1900","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART_CONSOLE"; +debug_log.uartLog.UART.$assign = "USART0"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x41010000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x60000000; +mpu_armv75.size = 28; +mpu_armv75.accessPermissions = "Supervisor RD, User RD"; + +/** + * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future + * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to + * re-solve from scratch. + */ +debug_log.uartLog.UART.RXD.$suggestSolution = "B10"; +debug_log.uartLog.UART.TXD.$suggestSolution = "B11"; diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/main.c b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/main.c new file mode 100644 index 0000000..4a61f6c --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/main.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" + +void dcl_df22_main(void *args); + +int main(void) +{ + System_init(); + Board_init(); + + dcl_df22_main(NULL); + + Board_deinit(); + System_deinit(); + + return 0; +} diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd new file mode 100644 index 0000000..9eca059 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM MSRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..d324a5b --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..69640f4 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd @@ -0,0 +1,148 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is disabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > MSRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > MSRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .data: {} palign(8) /* This is where initialized globals and static go */ + } > MSRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > MSRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > MSRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > MSRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* General purpose non cacheable memory, used in some examples */ + .bss.nocache (NOLOAD) : {} > NON_CACHE_MEM +} + +/* +NOTE: Below memory is reserved for DMSC usage + - During Boot till security handoff is complete + 0x701E0000 - 0x701FFFFF (128KB) + - After "Security Handoff" is complete (i.e at run time) + 0x701F4000 - 0x701FFFFF (48KB) + + Security handoff is complete when this message is sent to the DMSC, + TISCI_MSG_SEC_HANDOVER + + This should be sent once all cores are loaded and all application + specific firewall calls are setup. +*/ + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB0 : ORIGIN = 0x41010000 , LENGTH = 0x00008000 + + /* memory segment used to hold CPU specific non-cached data, MAKE to add a MPU entry to mark this as non-cached */ + NON_CACHE_MEM : ORIGIN = 0x70060000 , LENGTH = 0x8000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + MSRAM : ORIGIN = 0x70080000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + /* shared memory segments */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile new file mode 100644 index 0000000..689688b --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile @@ -0,0 +1,302 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_df22.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_df22.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_df22.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_df22.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_df22.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_df22.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_df22.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_df22.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_df22.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + df22_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lnortos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + nortos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:r5fss0-0:nortos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:r5fss0-0:nortos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:r5fss0-0:nortos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:r5fss0-0:nortos:ti-arm-clang dcl_df22 ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALX_beta --context r5fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..81886bf --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..fd1e20c --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_df22_am243x-lp_r5fss0-0_nortos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/example.syscfg b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/example.syscfg new file mode 100644 index 0000000..81572a9 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/example.syscfg @@ -0,0 +1,59 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM263x_beta" --package "ZCZ" --part "AM263x" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM263x@08.06.00" + * @versions {"tool":"1.14.0+2667"} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); +const mpu_armv76 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART0"; +debug_log.uartLog.UART.$assign = "UART0"; +debug_log.uartLog.UART.RXD.$assign = "ball.A7"; +debug_log.uartLog.UART.TXD.$assign = "ball.A6"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x80000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x50D00000; +mpu_armv75.size = 14; +mpu_armv75.allowExecute = false; +mpu_armv75.attributes = "Device"; + +mpu_armv76.$name = "CONFIG_MPU_REGION5"; +mpu_armv76.baseAddr = 0x72000000; +mpu_armv76.size = 14; +mpu_armv76.allowExecute = false; +mpu_armv76.attributes = "NonCached"; diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/main.c b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/main.c new file mode 100644 index 0000000..6e147ed --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/main.c @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2018-2022 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" +#include "FreeRTOS.h" +#include "task.h" + +#define MAIN_TASK_PRI (configMAX_PRIORITIES-1) + +#define MAIN_TASK_SIZE (16384U/sizeof(configSTACK_DEPTH_TYPE)) +StackType_t gMainTaskStack[MAIN_TASK_SIZE] __attribute__((aligned(32))); + +StaticTask_t gMainTaskObj; +TaskHandle_t gMainTask; + +void dcl_df22_main(void *args); + +void freertos_main(void *args) +{ + dcl_df22_main(NULL); + + vTaskDelete(NULL); +} + + +int main(void) +{ + /* init SOC specific modules */ + System_init(); + Board_init(); + + /* This task is created at highest priority, it should create more tasks and then delete itself */ + gMainTask = xTaskCreateStatic( freertos_main, /* Pointer to the function that implements the task. */ + "freertos_main", /* Text name for the task. This is to facilitate debugging only. */ + MAIN_TASK_SIZE, /* Stack depth in units of StackType_t typically uint32_t on 32b CPUs */ + NULL, /* We are not using the task parameter. */ + MAIN_TASK_PRI, /* task priority, 0 is lowest priority, configMAX_PRIORITIES-1 is highest */ + gMainTaskStack, /* pointer to stack base */ + &gMainTaskObj ); /* pointer to statically allocated task object memory */ + configASSERT(gMainTask != NULL); + + /* Start the scheduler to start the tasks executing. */ + vTaskStartScheduler(); + + /* The following line should never be reached because vTaskStartScheduler() + will only return if there was not enough FreeRTOS heap memory available to + create the Idle and (if configured) Timer tasks. Heap management, and + techniques for trapping heap exhaustion, are described in the book text. */ + DebugP_assertNoLog(0); + + return 0; +} diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd new file mode 100644 index 0000000..266ff50 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM OCRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..95d7961 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/example.projectspec @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..7a34f5e --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/linker.cmd @@ -0,0 +1,137 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is enabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > OCRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > OCRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + + .data: {} palign(8) /* This is where initialized globals and static go */ + } > OCRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > OCRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > OCRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > OCRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* this is used only when Secure IPC is enabled */ + .bss.sipc_hsm_queue_mem (NOLOAD) : {} > MAILBOX_HSM + .bss.sipc_r5f_queue_mem (NOLOAD) : {} > MAILBOX_R5F +} + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB : ORIGIN = 0x00080000 , LENGTH = 0x00008000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + OCRAM : ORIGIN = 0x70040000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + + /* shared memories that are used by RTOS/NORTOS cores */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x00004000 + LOG_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x00004000 + /* MSS mailbox memory is used as shared memory, we dont use bottom 32*12 bytes, since its used as SW queue by ipc_notify */ + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x72000000, LENGTH = 0x3E80 + MAILBOX_HSM: ORIGIN = 0x44000000 , LENGTH = 0x000003CE + MAILBOX_R5F: ORIGIN = 0x44000400 , LENGTH = 0x000003CE + } diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile new file mode 100644 index 0000000..f4d1dab --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile @@ -0,0 +1,276 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_df22.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_df22.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_df22.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_df22.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_df22.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_df22.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_df22.$(PROFILE).rprc_tmp + +FILES_common := \ + df22_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am263x/r5f \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM263X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am263x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lfreertos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + freertos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am263x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am263x:r5fss0-0:freertos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(BOOTIMAGE_NAME) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am263x:r5fss0-0:freertos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am263x:r5fss0-0:freertos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am263x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am263x:r5fss0-0:freertos:ti-arm-clang dcl_df22 ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM263x_beta --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..e0799fb --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,84 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +endif diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..6752802 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_df22_am263x-cc_r5fss0-0_freertos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/example.syscfg b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/example.syscfg new file mode 100644 index 0000000..81572a9 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/example.syscfg @@ -0,0 +1,59 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM263x_beta" --package "ZCZ" --part "AM263x" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM263x@08.06.00" + * @versions {"tool":"1.14.0+2667"} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); +const mpu_armv76 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART0"; +debug_log.uartLog.UART.$assign = "UART0"; +debug_log.uartLog.UART.RXD.$assign = "ball.A7"; +debug_log.uartLog.UART.TXD.$assign = "ball.A6"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x80000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x50D00000; +mpu_armv75.size = 14; +mpu_armv75.allowExecute = false; +mpu_armv75.attributes = "Device"; + +mpu_armv76.$name = "CONFIG_MPU_REGION5"; +mpu_armv76.baseAddr = 0x72000000; +mpu_armv76.size = 14; +mpu_armv76.allowExecute = false; +mpu_armv76.attributes = "NonCached"; diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/main.c b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/main.c new file mode 100644 index 0000000..8ef5336 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/main.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2018-2022 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" + +void dcl_df22_main(void *args); + +int main(void) +{ + System_init(); + Board_init(); + + dcl_df22_main(NULL); + + Board_deinit(); + System_deinit(); + + return 0; +} diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd new file mode 100644 index 0000000..266ff50 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM OCRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..7be73f9 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/example.projectspec @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..7a34f5e --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/linker.cmd @@ -0,0 +1,137 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is enabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > OCRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > OCRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + + .data: {} palign(8) /* This is where initialized globals and static go */ + } > OCRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > OCRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > OCRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > OCRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* this is used only when Secure IPC is enabled */ + .bss.sipc_hsm_queue_mem (NOLOAD) : {} > MAILBOX_HSM + .bss.sipc_r5f_queue_mem (NOLOAD) : {} > MAILBOX_R5F +} + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB : ORIGIN = 0x00080000 , LENGTH = 0x00008000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + OCRAM : ORIGIN = 0x70040000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + + /* shared memories that are used by RTOS/NORTOS cores */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x00004000 + LOG_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x00004000 + /* MSS mailbox memory is used as shared memory, we dont use bottom 32*12 bytes, since its used as SW queue by ipc_notify */ + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x72000000, LENGTH = 0x3E80 + MAILBOX_HSM: ORIGIN = 0x44000000 , LENGTH = 0x000003CE + MAILBOX_R5F: ORIGIN = 0x44000400 , LENGTH = 0x000003CE + } diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile new file mode 100644 index 0000000..c5e60d6 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile @@ -0,0 +1,273 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_df22.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_df22.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_df22.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_df22.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_df22.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_df22.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_df22.$(PROFILE).rprc_tmp + +FILES_common := \ + df22_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM263X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am263x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lnortos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + nortos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am263x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am263x:r5fss0-0:nortos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(BOOTIMAGE_NAME) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am263x:r5fss0-0:nortos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am263x:r5fss0-0:nortos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am263x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am263x:r5fss0-0:nortos:ti-arm-clang dcl_df22 ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM263x_beta --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..d790183 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,84 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +endif diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..87faa00 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_df22_am263x-cc_r5fss0-0_nortos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/example.syscfg b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/example.syscfg new file mode 100644 index 0000000..81572a9 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/example.syscfg @@ -0,0 +1,59 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM263x_beta" --package "ZCZ" --part "AM263x" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM263x@08.06.00" + * @versions {"tool":"1.14.0+2667"} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); +const mpu_armv76 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART0"; +debug_log.uartLog.UART.$assign = "UART0"; +debug_log.uartLog.UART.RXD.$assign = "ball.A7"; +debug_log.uartLog.UART.TXD.$assign = "ball.A6"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x80000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x50D00000; +mpu_armv75.size = 14; +mpu_armv75.allowExecute = false; +mpu_armv75.attributes = "Device"; + +mpu_armv76.$name = "CONFIG_MPU_REGION5"; +mpu_armv76.baseAddr = 0x72000000; +mpu_armv76.size = 14; +mpu_armv76.allowExecute = false; +mpu_armv76.attributes = "NonCached"; diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/main.c b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/main.c new file mode 100644 index 0000000..6e147ed --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/main.c @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2018-2022 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" +#include "FreeRTOS.h" +#include "task.h" + +#define MAIN_TASK_PRI (configMAX_PRIORITIES-1) + +#define MAIN_TASK_SIZE (16384U/sizeof(configSTACK_DEPTH_TYPE)) +StackType_t gMainTaskStack[MAIN_TASK_SIZE] __attribute__((aligned(32))); + +StaticTask_t gMainTaskObj; +TaskHandle_t gMainTask; + +void dcl_df22_main(void *args); + +void freertos_main(void *args) +{ + dcl_df22_main(NULL); + + vTaskDelete(NULL); +} + + +int main(void) +{ + /* init SOC specific modules */ + System_init(); + Board_init(); + + /* This task is created at highest priority, it should create more tasks and then delete itself */ + gMainTask = xTaskCreateStatic( freertos_main, /* Pointer to the function that implements the task. */ + "freertos_main", /* Text name for the task. This is to facilitate debugging only. */ + MAIN_TASK_SIZE, /* Stack depth in units of StackType_t typically uint32_t on 32b CPUs */ + NULL, /* We are not using the task parameter. */ + MAIN_TASK_PRI, /* task priority, 0 is lowest priority, configMAX_PRIORITIES-1 is highest */ + gMainTaskStack, /* pointer to stack base */ + &gMainTaskObj ); /* pointer to statically allocated task object memory */ + configASSERT(gMainTask != NULL); + + /* Start the scheduler to start the tasks executing. */ + vTaskStartScheduler(); + + /* The following line should never be reached because vTaskStartScheduler() + will only return if there was not enough FreeRTOS heap memory available to + create the Idle and (if configured) Timer tasks. Heap management, and + techniques for trapping heap exhaustion, are described in the book text. */ + DebugP_assertNoLog(0); + + return 0; +} diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd new file mode 100644 index 0000000..266ff50 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM OCRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..61a4f95 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..7a34f5e --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd @@ -0,0 +1,137 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is enabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > OCRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > OCRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + + .data: {} palign(8) /* This is where initialized globals and static go */ + } > OCRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > OCRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > OCRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > OCRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* this is used only when Secure IPC is enabled */ + .bss.sipc_hsm_queue_mem (NOLOAD) : {} > MAILBOX_HSM + .bss.sipc_r5f_queue_mem (NOLOAD) : {} > MAILBOX_R5F +} + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB : ORIGIN = 0x00080000 , LENGTH = 0x00008000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + OCRAM : ORIGIN = 0x70040000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + + /* shared memories that are used by RTOS/NORTOS cores */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x00004000 + LOG_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x00004000 + /* MSS mailbox memory is used as shared memory, we dont use bottom 32*12 bytes, since its used as SW queue by ipc_notify */ + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x72000000, LENGTH = 0x3E80 + MAILBOX_HSM: ORIGIN = 0x44000000 , LENGTH = 0x000003CE + MAILBOX_R5F: ORIGIN = 0x44000400 , LENGTH = 0x000003CE + } diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile new file mode 100644 index 0000000..f4d1dab --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile @@ -0,0 +1,276 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_df22.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_df22.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_df22.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_df22.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_df22.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_df22.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_df22.$(PROFILE).rprc_tmp + +FILES_common := \ + df22_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am263x/r5f \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM263X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am263x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lfreertos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + freertos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am263x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am263x:r5fss0-0:freertos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(BOOTIMAGE_NAME) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am263x:r5fss0-0:freertos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am263x:r5fss0-0:freertos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am263x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am263x:r5fss0-0:freertos:ti-arm-clang dcl_df22 ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM263x_beta --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..e0799fb --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,84 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +endif diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..ce5d86b --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_df22_am263x-lp_r5fss0-0_freertos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/example.syscfg b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/example.syscfg new file mode 100644 index 0000000..81572a9 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/example.syscfg @@ -0,0 +1,59 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM263x_beta" --package "ZCZ" --part "AM263x" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM263x@08.06.00" + * @versions {"tool":"1.14.0+2667"} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); +const mpu_armv76 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART0"; +debug_log.uartLog.UART.$assign = "UART0"; +debug_log.uartLog.UART.RXD.$assign = "ball.A7"; +debug_log.uartLog.UART.TXD.$assign = "ball.A6"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x80000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x50D00000; +mpu_armv75.size = 14; +mpu_armv75.allowExecute = false; +mpu_armv75.attributes = "Device"; + +mpu_armv76.$name = "CONFIG_MPU_REGION5"; +mpu_armv76.baseAddr = 0x72000000; +mpu_armv76.size = 14; +mpu_armv76.allowExecute = false; +mpu_armv76.attributes = "NonCached"; diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/main.c b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/main.c new file mode 100644 index 0000000..8ef5336 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/main.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2018-2022 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" + +void dcl_df22_main(void *args); + +int main(void) +{ + System_init(); + Board_init(); + + dcl_df22_main(NULL); + + Board_deinit(); + System_deinit(); + + return 0; +} diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd new file mode 100644 index 0000000..266ff50 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM OCRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..c68478c --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..7a34f5e --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd @@ -0,0 +1,137 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is enabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > OCRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > OCRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + + .data: {} palign(8) /* This is where initialized globals and static go */ + } > OCRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > OCRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > OCRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > OCRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* this is used only when Secure IPC is enabled */ + .bss.sipc_hsm_queue_mem (NOLOAD) : {} > MAILBOX_HSM + .bss.sipc_r5f_queue_mem (NOLOAD) : {} > MAILBOX_R5F +} + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB : ORIGIN = 0x00080000 , LENGTH = 0x00008000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + OCRAM : ORIGIN = 0x70040000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + + /* shared memories that are used by RTOS/NORTOS cores */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x00004000 + LOG_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x00004000 + /* MSS mailbox memory is used as shared memory, we dont use bottom 32*12 bytes, since its used as SW queue by ipc_notify */ + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x72000000, LENGTH = 0x3E80 + MAILBOX_HSM: ORIGIN = 0x44000000 , LENGTH = 0x000003CE + MAILBOX_R5F: ORIGIN = 0x44000400 , LENGTH = 0x000003CE + } diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile new file mode 100644 index 0000000..c5e60d6 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile @@ -0,0 +1,273 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_df22.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_df22.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_df22.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_df22.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_df22.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_df22.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_df22.$(PROFILE).rprc_tmp + +FILES_common := \ + df22_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM263X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am263x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lnortos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + nortos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am263x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am263x:r5fss0-0:nortos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(BOOTIMAGE_NAME) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am263x:r5fss0-0:nortos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am263x:r5fss0-0:nortos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am263x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am263x:r5fss0-0:nortos:ti-arm-clang dcl_df22 ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM263x_beta --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..d790183 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,84 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +endif diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..9ad2ff7 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_df22_am263x-lp_r5fss0-0_nortos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_df22/data/DF22_ctl-1.dat b/examples/dcl/dcl_df22/data/DF22_ctl-1.dat new file mode 100644 index 0000000..e1dc89a --- /dev/null +++ b/examples/dcl/dcl_df22/data/DF22_ctl-1.dat @@ -0,0 +1,1601 @@ +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.985490, +0.957366, +0.928675, +0.901786, +0.876592, +0.850588, +0.828562, +0.803134, +0.781577, +0.758922, +0.737569, +0.717438, +0.696052, +0.675817, +0.659069, +0.638458, +0.621281, +0.605001, +0.587159, +0.570177, +0.556409, +0.540926, +0.526159, +0.509658, +0.496262, +0.483453, +0.468788, +0.457113, +0.443511, +0.432831, +0.420161, +0.410354, +0.398500, +0.387051, +0.378385, +0.367597, +0.357144, +0.349407, +0.339487, +0.329841, +0.322858, +0.313638, +0.304644, +0.298266, +0.289607, +0.283540, +0.275169, +0.269366, +0.263646, +0.255593, +0.250083, +0.244630, +0.239228, +0.233871, +0.228555, +0.223275, +0.218025, +0.212803, +0.210009, +0.204760, +0.199532, +0.196725, +0.191457, +0.188609, +0.185704, +0.182742, +0.179726, +0.176656, +0.173533, +0.170359, +0.167135, +0.166267, +0.162876, +0.159443, +0.158372, +0.157191, +0.153499, +0.152180, +0.150760, +0.149244, +0.147635, +0.145938, +0.146561, +0.144629, +0.142623, +0.142953, +0.140740, +0.140871, +0.140875, +0.138352, +0.138188, +0.137911, +0.137525, +0.137037, +0.136450, +0.135771, +0.137409, +0.136487, +0.135490, +0.136826, +0.135618, +0.136755, +0.135357, +0.136313, +0.137151, +0.135470, +0.136158, +0.136740, +0.137223, +0.137613, +0.137912, +0.138128, +0.138263, +0.138323, +0.140717, +0.140568, +0.140359, +0.142498, +0.142109, +0.141673, +0.143597, +0.143004, +0.144781, +0.144049, +0.145694, +0.144837, +0.146364, +0.147801, +0.149154, +0.148021, +0.149288, +0.150481, +0.151602, +0.150251, +0.151312, +0.152309, +0.153246, +0.154128, +0.154956, +0.155734, +0.156465, +0.157152, +0.155391, +0.156066, +0.156699, +0.157293, +0.157850, +0.158373, +0.161269, +0.161660, +0.162026, +0.162369, +0.162691, +0.162992, +0.163274, +0.163538, +0.163784, +0.164015, +0.164231, +0.164432, +0.164620, +0.164796, +0.164959, +0.167518, +0.167591, +0.167659, +0.167721, +0.167779, +0.167832, +0.167881, +0.167926, +0.167968, +0.168005, +0.168040, +0.168071, +0.168099, +0.168124, +0.168147, +0.168167, +0.170591, +0.170538, +0.170487, +0.170439, +0.170393, +0.170349, +0.170306, +0.170266, +0.170227, +0.170190, +0.170154, +0.167714, +0.167749, +0.167782, +0.167811, +0.167838, +0.167861, +0.167883, +0.167902, +0.167918, +0.167933, +0.167945, +0.167956, +0.167964, +0.165565, +0.165640, +0.165708, +0.165770, +0.165828, +0.165880, +0.165927, +0.165970, +0.163603, +0.163707, +0.163803, +0.163890, +0.163971, +0.161639, +0.161775, +0.161900, +0.162015, +0.162121, +0.159813, +0.159970, +0.160116, +0.160249, +0.160372, +0.158079, +0.158250, +0.158408, +0.158553, +0.156280, +0.156471, +0.156646, +0.156807, +0.154548, +0.154751, +0.154938, +0.155110, +0.152861, +0.153072, +0.153267, +0.153445, +0.151201, +0.151418, +0.151616, +0.151797, +0.149557, +0.149775, +0.149975, +0.150157, +0.147917, +0.148135, +0.148334, +0.146110, +0.146342, +0.146554, +0.146747, +0.144515, +0.144741, +0.144946, +0.145132, +0.142893, +0.143112, +0.143310, +0.143488, +0.141242, +0.141453, +0.141644, +0.141815, +0.139561, +0.139765, +0.139948, +0.140111, +0.137850, +0.138046, +0.138221, +0.138376, +0.136107, +0.136296, +0.136463, +0.136610, +0.134333, +0.134513, +0.134673, +0.134812, +0.134933, +0.132630, +0.132786, +0.132921, +0.133038, +0.133137, +0.130813, +0.130949, +0.131064, +0.131162, +0.131243, +0.131307, +0.128950, +0.129054, +0.129140, +0.129208, +0.129261, +0.129299, +0.129323, +0.126927, +0.126994, +0.127044, +0.127079, +0.127099, +0.127106, +0.127100, +0.124677, +0.124716, +0.124740, +0.124750, +0.124746, +0.124730, +0.124702, +0.124662, +0.124612, +0.124552, +0.122077, +0.122067, +0.122044, +0.122010, +0.121964, +0.121907, +0.121841, +0.121765, +0.121679, +0.121586, +0.121484, +0.121376, +0.121260, +0.121137, +0.121008, +0.120874, +0.118327, +0.118251, +0.118164, +0.118069, +0.117966, +0.117855, +0.117736, +0.117611, +0.117479, +0.117340, +0.117196, +0.117047, +0.116892, +0.116733, +0.116568, +0.116400, +0.116228, +0.116051, +0.115871, +0.115688, +0.115502, +0.115312, +0.115120, +0.114925, +0.114727, +0.114528, +0.114326, +0.114121, +0.113915, +0.116113, +0.115835, +0.115559, +0.115286, +0.115016, +0.114748, +0.114483, +0.114219, +0.113957, +0.113698, +0.113440, +0.113183, +0.112929, +0.112675, +0.112424, +0.112173, +0.111924, +0.111675, +0.111428, +0.111182, +0.110937, +0.110693, +0.112855, +0.112544, +0.112238, +0.111937, +0.111641, +0.111349, +0.111061, +0.110777, +0.110496, +0.110220, +0.109946, +0.109675, +0.109408, +0.109143, +0.108880, +0.111026, +0.110700, +0.110380, +0.110066, +0.109759, +0.109457, +0.109160, +0.108868, +0.108580, +0.108297, +0.108019, +0.107744, +0.107472, +0.107204, +0.109345, +0.109015, +0.108692, +0.108376, +0.108066, +0.107763, +0.107465, +0.107173, +0.106886, +0.106604, +0.106326, +0.106053, +0.105783, +0.107924, +0.107593, +0.107270, +0.106955, +0.106646, +0.106344, +0.106048, +0.105758, +0.105474, +0.105194, +0.104920, +0.104650, +0.106790, +0.106460, +0.106138, +0.105824, +0.105517, +0.105218, +0.104924, +0.104637, +0.104356, +0.104080, +0.103810, +0.103544, +0.105688, +0.105363, +0.105046, +0.104737, +0.104435, +0.104141, +0.103853, +0.103572, +0.103296, +0.103027, +0.102762, +0.102503, +0.104654, +0.104335, +0.104024, +0.103722, +0.103427, +0.103140, +0.102859, +0.102585, +0.102317, +0.102054, +0.101797, +0.103951, +0.103635, +0.103328, +0.103029, +0.102738, +0.102455, +0.102179, +0.101910, +0.101646, +0.101389, +0.101137, +0.100890, +0.103055, +0.102749, +0.102452, +0.102163, +0.101883, +0.101609, +0.101343, +0.101083, +0.100829, +0.100581, +0.100339, +0.100102, +0.102275, +0.101979, +0.101691, +0.101412, +0.101140, +0.100876, +0.100618, +0.100367, +0.100122, +0.099883, +0.099650, +0.099421, +0.101604, +0.101316, +0.101037, +0.100766, +0.100503, +0.100248, +0.099999, +0.099757, +0.099521, +0.099290, +0.099066, +0.098846, +0.098631, +0.100826, +0.100551, +0.100285, +0.100026, +0.099776, +0.099532, +0.099295, +0.099064, +0.098839, +0.098620, +0.098406, +0.098197, +0.100398, +0.100130, +0.099870, +0.099618, +0.099374, +0.099136, +0.098906, +0.098682, +0.098464, +0.098252, +0.098045, +0.097844, +0.097646, +0.099860, +0.099603, +0.099354, +0.099113, +0.098880, +0.098654, +0.098434, +0.098221, +0.098014, +0.097812, +0.097615, +0.097424, +0.097237, +0.099460, +0.099213, +0.098974, +0.098743, +0.098519, +0.098302, +0.098092, +0.097888, +0.097690, +0.097498, +0.097310, +0.097128, +0.096950, +0.099182, +0.098944, +0.098714, +0.098492, +0.098277, +0.098070, +0.097868, +0.097673, +0.097484, +0.097300, +0.097122, +0.096948, +0.096779, +0.096614, +0.098859, +0.098633, +0.098415, +0.098205, +0.098003, +0.097807, +0.097617, +0.097433, +0.097255, +0.097082, +0.096914, +0.096751, +0.096592, +0.096438, +0.098693, +0.098478, +0.098270, +0.098070, +0.097877, +0.097691, +0.097511, +0.097337, +0.097168, +0.097005, +0.096846, +0.096692, +0.096543, +0.096398, +0.096256, +0.098524, +0.098321, +0.098126, +0.097938, +0.097757, +0.097582, +0.097414, +0.097251, +0.097094, +0.096941, +0.096794, +0.096651, +0.096512, +0.096377, +0.096246, +0.096118, +0.098400, +0.098211, +0.098028, +-0.887637, +-0.859682, +-0.831154, +-0.804421, +-0.779378, +-0.753521, +-0.729229, +-0.706412, +-0.684981, +-0.662451, +-0.641217, +-0.618797, +-0.599999, +-0.579870, +-0.560820, +-0.542783, +-0.525700, +-0.507107, +-0.489423, +-0.475000, +-0.458905, +-0.443567, +-0.428941, +-0.412575, +-0.399310, +-0.386627, +-0.372084, +-0.360527, +-0.347039, +-0.336471, +-0.323909, +-0.311801, +-0.300117, +-0.291236, +-0.280252, +-0.269618, +-0.261718, +-0.251649, +-0.241869, +-0.232358, +-0.225504, +-0.216409, +-0.207535, +-0.201272, +-0.192726, +-0.186766, +-0.178499, +-0.172797, +-0.164768, +-0.159284, +-0.153861, +-0.146087, +-0.140835, +-0.135623, +-0.130445, +-0.125296, +-0.120173, +-0.117478, +-0.112326, +-0.107193, +-0.104482, +-0.099308, +-0.096553, +-0.091334, +-0.088532, +-0.085670, +-0.082750, +-0.079773, +-0.076740, +-0.073652, +-0.070512, +-0.067319, +-0.066481, +-0.063119, +-0.062118, +-0.058599, +-0.057447, +-0.056188, +-0.054826, +-0.053367, +-0.051814, +-0.050171, +-0.048442, +-0.046632, +-0.044742, +-0.045182, +-0.043075, +-0.043308, +-0.043409, +-0.040980, +-0.040905, +-0.040714, +-0.040411, +-0.040002, +-0.039492, +-0.038886, +-0.038189, +-0.037405, +-0.038944, +-0.037929, +-0.039250, +-0.038028, +-0.039152, +-0.037744, +-0.038690, +-0.039519, +-0.040237, +-0.038444, +-0.039026, +-0.039509, +-0.039899, +-0.040200, +-0.040418, +-0.042962, +-0.042956, +-0.042884, +-0.042748, +-0.044957, +-0.044635, +-0.044263, +-0.046249, +-0.045716, +-0.047550, +-0.046872, +-0.048570, +-0.047764, +-0.049340, +-0.050825, +-0.049817, +-0.051204, +-0.052509, +-0.051333, +-0.052559, +-0.053713, +-0.054800, +-0.055823, +-0.054380, +-0.055354, +-0.056271, +-0.057134, +-0.057945, +-0.058708, +-0.059425, +-0.060100, +-0.060734, +-0.061331, +-0.061891, +-0.062418, +-0.062914, +-0.063379, +-0.063816, +-0.064227, +-0.064613, +-0.064976, +-0.065316, +-0.065635, +-0.065935, +-0.066217, +-0.066481, +-0.066728, +-0.066961, +-0.067178, +-0.067383, +-0.067574, +-0.067753, +-0.067920, +-0.070483, +-0.070561, +-0.070634, +-0.070703, +-0.070767, +-0.070826, +-0.070882, +-0.070934, +-0.070982, +-0.071027, +-0.071069, +-0.071108, +-0.071145, +-0.071179, +-0.071210, +-0.071239, +-0.071266, +-0.071290, +-0.071313, +-0.071334, +-0.071353, +-0.071371, +-0.071387, +-0.071402, +-0.071415, +-0.071427, +-0.071438, +-0.071448, +-0.071457, +-0.069059, +-0.069134, +-0.069204, +-0.069269, +-0.069330, +-0.069386, +-0.069437, +-0.069485, +-0.069529, +-0.067163, +-0.067269, +-0.067367, +-0.067457, +-0.067542, +-0.067619, +-0.065285, +-0.065420, +-0.065545, +-0.065660, +-0.065767, +-0.065866, +-0.063551, +-0.063704, +-0.063845, +-0.063975, +-0.064096, +-0.061801, +-0.061971, +-0.062129, +-0.062275, +-0.060003, +-0.060195, +-0.060373, +-0.060537, +-0.058282, +-0.058489, +-0.058680, +-0.058856, +-0.056613, +-0.056830, +-0.057030, +-0.057214, +-0.054978, +-0.055201, +-0.055407, +-0.053189, +-0.053431, +-0.053653, +-0.053857, +-0.051637, +-0.051876, +-0.052095, +-0.052296, +-0.050073, +-0.050308, +-0.050523, +-0.048313, +-0.048560, +-0.048786, +-0.048992, +-0.046773, +-0.047011, +-0.047227, +-0.047424, +-0.045196, +-0.045425, +-0.045633, +-0.043414, +-0.043652, +-0.043868, +-0.044062, +-0.041831, +-0.042057, +-0.042260, +-0.042443, +-0.040200, +-0.040413, +-0.040605, +-0.040777, +-0.038523, +-0.038725, +-0.038906, +-0.039067, +-0.036803, +-0.036995, +-0.037166, +-0.037316, +-0.037448, +-0.035156, +-0.035321, +-0.035466, +-0.035592, +-0.033294, +-0.033453, +-0.033592, +-0.033711, +-0.033813, +-0.033897, +-0.031559, +-0.031680, +-0.031783, +-0.031868, +-0.031937, +-0.029583, +-0.029690, +-0.029778, +-0.029848, +-0.029903, +-0.029942, +-0.029966, +-0.027571, +-0.027638, +-0.027688, +-0.027723, +-0.027743, +-0.027749, +-0.027742, +-0.025316, +-0.025354, +-0.025376, +-0.025384, +-0.025379, +-0.025360, +-0.025329, +-0.025287, +-0.025234, +-0.025171, +-0.022693, +-0.022680, +-0.022654, +-0.022616, +-0.022567, +-0.022507, +-0.022437, +-0.022357, +-0.022268, +-0.022170, +-0.022065, +-0.021952, +-0.021832, +-0.021705, +-0.021572, +-0.021434, +-0.018883, +-0.018802, +-0.018712, +-0.018612, +-0.018505, +-0.018389, +-0.018266, +-0.018136, +-0.017999, +-0.017856, +-0.017708, +-0.017554, +-0.017394, +-0.017230, +-0.017061, +-0.016888, +-0.016711, +-0.016530, +-0.016345, +-0.016157, +-0.015966, +-0.015772, +-0.015575, +-0.015375, +-0.015173, +-0.014968, +-0.014761, +-0.014552, +-0.016747, +-0.016466, +-0.016187, +-0.015911, +-0.015637, +-0.015366, +-0.015097, +-0.014829, +-0.014564, +-0.014300, +-0.014039, +-0.013778, +-0.013520, +-0.013262, +-0.013006, +-0.012751, +-0.012498, +-0.012245, +-0.011994, +-0.011743, +-0.011494, +-0.011245, +-0.010997, +-0.013156, +-0.012841, +-0.012532, +-0.012227, +-0.011926, +-0.011630, +-0.011338, +-0.011050, +-0.010766, +-0.010485, +-0.010207, +-0.009932, +-0.009660, +-0.009390, +-0.009123, +-0.011265, +-0.010934, +-0.010610, +-0.010292, +-0.009979, +-0.009673, +-0.009371, +-0.009074, +-0.008782, +-0.008495, +-0.008211, +-0.007931, +-0.007655, +-0.009788, +-0.009450, +-0.009119, +-0.008795, +-0.008478, +-0.008168, +-0.007863, +-0.007564, +-0.007269, +-0.006980, +-0.006696, +-0.006416, +-0.006140, +-0.008274, +-0.007937, +-0.007608, +-0.007286, +-0.006971, +-0.006663, +-0.006361, +-0.006066, +-0.005775, +-0.005490, +-0.005210, +-0.004934, +-0.007069, +-0.006733, +-0.006405, +-0.006086, +-0.005774, +-0.005468, +-0.005170, +-0.004877, +-0.004590, +-0.004309, +-0.004033, +-0.003762, +-0.005902, +-0.005571, +-0.005248, +-0.004934, +-0.004627, +-0.004328, +-0.004035, +-0.003748, +-0.003468, +-0.003193, +-0.002923, +-0.002658, +-0.004804, +-0.004480, +-0.004164, +-0.003857, +-0.003557, +-0.003265, +-0.002979, +-0.002699, +-0.002426, +-0.002159, +-0.001896, +-0.004045, +-0.003724, +-0.003412, +-0.003108, +-0.002812, +-0.002524, +-0.002242, +-0.001968, +-0.001699, +-0.001437, +-0.001180, +-0.000928, +-0.003087, +-0.002776, +-0.002474, +-0.002181, +-0.001895, +-0.001616, +-0.001345, +-0.001080, +-0.000821, +-0.000568, +-0.000321, +-0.002485, +-0.002178, +-0.001881, +-0.001593, +-0.001312, +-0.001039, +-0.000774, +-0.000515, +-0.000262, +-0.000015, +0.000226, +0.000462, +-0.001713, +-0.001418, +-0.001132, +-0.000854, +-0.000584, +-0.000322, +-0.000066, +0.000182, +0.000425, +0.000662, +0.000893, +0.001119, +-0.001066, +-0.000781, +-0.000504, +-0.000236, +0.000024, +0.000277, +0.000523, +0.000763, +0.000996, +0.001224, +0.001446, +0.001663, +-0.000531, +-0.000255, +0.000012, +0.000272, +0.000523, +0.000767, +0.001004, +0.001235, +0.001459, +0.001678, +0.001891, +0.002100, +-0.000103, +0.000165, +0.000423, +0.000674, +0.000917, +0.001152, +0.001381, +0.001603, +0.001819, +0.002029, +0.002234, +0.002433, +0.002628, +0.000412, +0.000667, +0.000913, +0.001152, +0.001382, +0.001606, +0.001823, +0.002033, +0.002238, +0.002437, +0.002631, +0.002820, +0.003004, +0.000778, +0.001022, +0.001258, +0.001486, +0.001707, +0.001921, +0.002128, +0.002328, +0.002523, +0.002713, +0.002897, +0.003077, +0.003251, +0.001016, +0.001251, +0.001478, +0.001696, +0.001908, +0.002112, +0.002310, +0.002502, +0.002688, +0.002869, +0.003044, +0.003215, +0.003381, +0.003542, +0.001294, +0.001516, +0.001730, +0.001937, +0.002137, +0.002330, +0.002516, +0.002696, +0.002871, +0.003041, +0.003205, +0.003365, +0.003520, +0.003671, +0.003819, +0.001556, +0.001765, +0.001966, +0.002160, +0.002346, +0.002526, +0.002701, +0.002869, +0.003032, +0.003190, +0.003343, +0.003491, +0.003635, +0.003776, +0.003912, +0.001639, +0.001837, +0.002028, +0.002211, +0.002388, +0.002558, +0.002722, +0.002880, +0.003034, +0.003182, +0.003325, +0.003464, +0.003599, +0.003730, +0.003857, +0.003980, +0.001695, +0.001880, +0.002059, +0.002230, +0.002395, +0.002554, +0.002707, +0.002854, +0.002996, +0.003133, +0.003266, +0.003395, +0.003519, +0.003639, +0.003756, +0.003870, +0.003980, +0.001681, +0.001855, +0.002020, +0.002180, +0.002332, +0.002479, +0.002621, +0.002757, +0.002887, +0.003014, +0.003135, +0.003253, +0.003367, +0.003477, +0.003583, +0.003687, +0.003787, +0.003884, +0.003978, +0.004070, +0.001754, +0.001910, +0.002059, +0.002202, +0.002339, +0.002471, +0.002597, +0.002718, +0.002835, +0.002947, +0.003056, +0.003160, +0.003261, +0.003358, +0.003452, +0.003543, +0.003631, +0.003717, +0.003800, +0.003880, +0.003958, +0.001629, +0.001771, +0.001908, +0.002038, +0.002163, +0.002283, +0.002397, +0.002507, +0.002612, +0.002713, +0.002810, +0.002904, +0.002994, +0.003080, +0.003164, +0.003245, +0.003322, +0.003398, +0.003471, +0.003541, +0.003610, +0.003676, +0.003740, +0.003803, +0.003864, +0.001517, +0.001644, +0.001765, +0.001880, +0.001989, +0.002094, +0.002194, +0.002290, +0.002382, +0.002470, +0.002554, +0.002635, +0.002712, +0.002787, +0.002858, +0.002927, +0.002993, +0.003057, +0.003119, +0.003178, +0.003236, +0.003292, +0.003345, +0.003398, +0.003448, +0.003497, +0.003545, +0.003591, +0.001231, +0.001343, +0.001450, +0.001552, +0.001649, +0.001741, +0.001829, +0.001912, +0.001992, +0.002068, +0.002141, +0.002210, +0.002276, +0.002340, +0.002400, +0.002459, +0.002514, +0.002568, +0.002619, +0.002668, +0.002716, +0.002761, +0.002805, +0.002848, +0.002888, +0.002928, +0.002966, +0.003003, +0.003038, +0.003073, +0.003107, +0.003139, +0.003171, +0.003202, +0.003232, +0.003261, +0.003289, +0.000911, +0.001007, +0.001098, +0.001183, +0.001265, +0.001342, +0.001415 diff --git a/examples/dcl/dcl_df22/data/DF22_ctl-2.dat b/examples/dcl/dcl_df22/data/DF22_ctl-2.dat new file mode 100644 index 0000000..08f866d --- /dev/null +++ b/examples/dcl/dcl_df22/data/DF22_ctl-2.dat @@ -0,0 +1,1601 @@ +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.098455, +0.095418, +0.092252, +0.089213, +0.086308, +0.083303, +0.080692, +0.077750, +0.075217, +0.072607, +0.070172, +0.067912, +0.065586, +0.063444, +0.061724, +0.059695, +0.058093, +0.056664, +0.055166, +0.053842, +0.052927, +0.051928, +0.051088, +0.050158, +0.049621, +0.049221, +0.048711, +0.048571, +0.048304, +0.048392, +0.048336, +0.048617, +0.048737, +0.048936, +0.049446, +0.049769, +0.050144, +0.050803, +0.051249, +0.051722, +0.052454, +0.052948, +0.053444, +0.054176, +0.054647, +0.055339, +0.055757, +0.056383, +0.056963, +0.057250, +0.057728, +0.058144, +0.058493, +0.058772, +0.058977, +0.059104, +0.059151, +0.059115, +0.059235, +0.059021, +0.058719, +0.058569, +0.058083, +0.057748, +0.057317, +0.056792, +0.056172, +0.055461, +0.054658, +0.053768, +0.052791, +0.051972, +0.050824, +0.049599, +0.048541, +0.047406, +0.045956, +0.044685, +0.043348, +0.041950, +0.040496, +0.038989, +0.037676, +0.036072, +0.034430, +0.032995, +0.031284, +0.029790, +0.028269, +0.026487, +0.024935, +0.023372, +0.021800, +0.020226, +0.018652, +0.017083, +0.015764, +0.014211, +0.012674, +0.011399, +0.009899, +0.008668, +0.007219, +0.006044, +0.004897, +0.003542, +0.002467, +0.001429, +0.000427, +-0.000534, +-0.001455, +-0.002334, +-0.003169, +-0.003960, +-0.004465, +-0.005172, +-0.005834, +-0.006208, +-0.006783, +-0.007312, +-0.007554, +-0.007998, +-0.008157, +-0.008518, +-0.008596, +-0.008878, +-0.008878, +-0.008845, +-0.008780, +-0.008924, +-0.008791, +-0.008631, +-0.008444, +-0.008473, +-0.008231, +-0.007967, +-0.007684, +-0.007383, +-0.007066, +-0.006734, +-0.006390, +-0.006035, +-0.005911, +-0.005531, +-0.005146, +-0.004757, +-0.004366, +-0.003974, +-0.003343, +-0.002961, +-0.002584, +-0.002211, +-0.001844, +-0.001485, +-0.001134, +-0.000793, +-0.000462, +-0.000143, +0.000163, +0.000456, +0.000735, +0.000999, +0.001248, +0.001722, +0.001931, +0.002125, +0.002301, +0.002462, +0.002605, +0.002731, +0.002841, +0.002934, +0.003010, +0.003071, +0.003115, +0.003143, +0.003156, +0.003154, +0.003137, +0.003347, +0.003296, +0.003232, +0.003156, +0.003069, +0.002972, +0.002864, +0.002748, +0.002623, +0.002490, +0.002351, +0.001965, +0.001821, +0.001673, +0.001520, +0.001364, +0.001205, +0.001044, +0.000881, +0.000718, +0.000555, +0.000393, +0.000231, +0.000072, +-0.000325, +-0.000472, +-0.000616, +-0.000756, +-0.000892, +-0.001023, +-0.001150, +-0.001272, +-0.001628, +-0.001731, +-0.001828, +-0.001919, +-0.002004, +-0.002324, +-0.002389, +-0.002448, +-0.002500, +-0.002547, +-0.002828, +-0.002854, +-0.002875, +-0.002890, +-0.002900, +-0.003144, +-0.003135, +-0.003122, +-0.003103, +-0.003321, +-0.003286, +-0.003248, +-0.003207, +-0.003402, +-0.003347, +-0.003289, +-0.003230, +-0.003408, +-0.003338, +-0.003267, +-0.003195, +-0.003363, +-0.003283, +-0.003204, +-0.003126, +-0.003289, +-0.003205, +-0.003124, +-0.003045, +-0.003208, +-0.003126, +-0.003048, +-0.003213, +-0.003133, +-0.003058, +-0.002987, +-0.003160, +-0.003090, +-0.003025, +-0.002965, +-0.003150, +-0.003092, +-0.003039, +-0.002992, +-0.003191, +-0.003147, +-0.003109, +-0.003077, +-0.003290, +-0.003261, +-0.003238, +-0.003220, +-0.003449, +-0.003434, +-0.003426, +-0.003422, +-0.003665, +-0.003664, +-0.003669, +-0.003678, +-0.003933, +-0.003945, +-0.003961, +-0.003981, +-0.004006, +-0.004275, +-0.004300, +-0.004329, +-0.004361, +-0.004397, +-0.004676, +-0.004710, +-0.004747, +-0.004787, +-0.004829, +-0.004873, +-0.005159, +-0.005199, +-0.005241, +-0.005285, +-0.005329, +-0.005375, +-0.005422, +-0.005709, +-0.005750, +-0.005790, +-0.005831, +-0.005873, +-0.005914, +-0.005955, +-0.006236, +-0.006269, +-0.006302, +-0.006334, +-0.006365, +-0.006396, +-0.006427, +-0.006456, +-0.006484, +-0.006511, +-0.006778, +-0.006796, +-0.006812, +-0.006828, +-0.006843, +-0.006856, +-0.006869, +-0.006880, +-0.006891, +-0.006900, +-0.006908, +-0.006915, +-0.006921, +-0.006926, +-0.006930, +-0.006933, +-0.007175, +-0.007168, +-0.007161, +-0.007152, +-0.007144, +-0.007135, +-0.007125, +-0.007115, +-0.007104, +-0.007093, +-0.007082, +-0.007071, +-0.007059, +-0.007048, +-0.007036, +-0.007024, +-0.007012, +-0.007000, +-0.006989, +-0.006977, +-0.006966, +-0.006955, +-0.006944, +-0.006933, +-0.006923, +-0.006913, +-0.006904, +-0.006895, +-0.006886, +-0.006638, +-0.006637, +-0.006637, +-0.006637, +-0.006638, +-0.006638, +-0.006639, +-0.006640, +-0.006641, +-0.006642, +-0.006643, +-0.006645, +-0.006646, +-0.006648, +-0.006650, +-0.006652, +-0.006654, +-0.006656, +-0.006658, +-0.006660, +-0.006663, +-0.006665, +-0.006427, +-0.006437, +-0.006446, +-0.006455, +-0.006464, +-0.006473, +-0.006481, +-0.006489, +-0.006496, +-0.006503, +-0.006509, +-0.006515, +-0.006521, +-0.006526, +-0.006531, +-0.006294, +-0.006306, +-0.006316, +-0.006325, +-0.006334, +-0.006342, +-0.006350, +-0.006356, +-0.006362, +-0.006366, +-0.006370, +-0.006374, +-0.006376, +-0.006378, +-0.006139, +-0.006146, +-0.006153, +-0.006159, +-0.006163, +-0.006167, +-0.006170, +-0.006172, +-0.006173, +-0.006173, +-0.006173, +-0.006171, +-0.006169, +-0.005926, +-0.005929, +-0.005932, +-0.005934, +-0.005935, +-0.005935, +-0.005934, +-0.005932, +-0.005930, +-0.005927, +-0.005923, +-0.005918, +-0.005672, +-0.005674, +-0.005674, +-0.005674, +-0.005673, +-0.005671, +-0.005669, +-0.005666, +-0.005662, +-0.005657, +-0.005652, +-0.005647, +-0.005400, +-0.005401, +-0.005401, +-0.005400, +-0.005399, +-0.005397, +-0.005395, +-0.005392, +-0.005388, +-0.005384, +-0.005379, +-0.005374, +-0.005128, +-0.005130, +-0.005130, +-0.005131, +-0.005130, +-0.005129, +-0.005128, +-0.005126, +-0.005123, +-0.005120, +-0.005117, +-0.004873, +-0.004876, +-0.004878, +-0.004880, +-0.004882, +-0.004882, +-0.004882, +-0.004882, +-0.004881, +-0.004879, +-0.004877, +-0.004875, +-0.004631, +-0.004635, +-0.004639, +-0.004641, +-0.004643, +-0.004644, +-0.004645, +-0.004645, +-0.004645, +-0.004644, +-0.004642, +-0.004640, +-0.004397, +-0.004401, +-0.004404, +-0.004407, +-0.004409, +-0.004411, +-0.004411, +-0.004411, +-0.004411, +-0.004410, +-0.004408, +-0.004406, +-0.004162, +-0.004166, +-0.004170, +-0.004172, +-0.004174, +-0.004175, +-0.004175, +-0.004175, +-0.004174, +-0.004173, +-0.004170, +-0.004168, +-0.004164, +-0.003920, +-0.003923, +-0.003925, +-0.003927, +-0.003928, +-0.003928, +-0.003928, +-0.003927, +-0.003925, +-0.003923, +-0.003920, +-0.003917, +-0.003673, +-0.003676, +-0.003678, +-0.003680, +-0.003681, +-0.003681, +-0.003680, +-0.003680, +-0.003678, +-0.003676, +-0.003673, +-0.003670, +-0.003666, +-0.003421, +-0.003424, +-0.003426, +-0.003428, +-0.003428, +-0.003429, +-0.003428, +-0.003427, +-0.003425, +-0.003423, +-0.003420, +-0.003417, +-0.003414, +-0.003169, +-0.003172, +-0.003174, +-0.003176, +-0.003177, +-0.003177, +-0.003177, +-0.003176, +-0.003175, +-0.003173, +-0.003170, +-0.003168, +-0.003164, +-0.002920, +-0.002923, +-0.002926, +-0.002928, +-0.002929, +-0.002930, +-0.002930, +-0.002930, +-0.002929, +-0.002927, +-0.002925, +-0.002923, +-0.002920, +-0.002916, +-0.002672, +-0.002675, +-0.002678, +-0.002680, +-0.002681, +-0.002682, +-0.002682, +-0.002682, +-0.002681, +-0.002679, +-0.002677, +-0.002675, +-0.002672, +-0.002669, +-0.002425, +-0.002428, +-0.002431, +-0.002433, +-0.002434, +-0.002435, +-0.002435, +-0.002435, +-0.002434, +-0.002433, +-0.002431, +-0.002429, +-0.002426, +-0.002423, +-0.002420, +-0.002176, +-0.002179, +-0.002181, +-0.002183, +-0.002185, +-0.002185, +-0.002186, +-0.002185, +-0.002185, +-0.002183, +-0.002182, +-0.002180, +-0.002177, +-0.002174, +-0.002170, +-0.002167, +-0.001922, +-0.001925, +-0.001928, +-0.100384, +-0.097348, +-0.094184, +-0.091145, +-0.088240, +-0.085235, +-0.082382, +-0.079686, +-0.077151, +-0.074539, +-0.072100, +-0.069596, +-0.067515, +-0.065368, +-0.063403, +-0.061617, +-0.060009, +-0.058334, +-0.056837, +-0.055755, +-0.054593, +-0.053594, +-0.052753, +-0.051823, +-0.051285, +-0.050884, +-0.050372, +-0.050230, +-0.049962, +-0.050047, +-0.049988, +-0.050025, +-0.050150, +-0.050593, +-0.050858, +-0.051183, +-0.051801, +-0.052215, +-0.052663, +-0.053137, +-0.053870, +-0.054364, +-0.054861, +-0.055592, +-0.056063, +-0.056754, +-0.057171, +-0.057795, +-0.058132, +-0.058665, +-0.059140, +-0.059312, +-0.059666, +-0.059948, +-0.060156, +-0.060286, +-0.060335, +-0.060541, +-0.060414, +-0.060200, +-0.060139, +-0.059742, +-0.059496, +-0.058913, +-0.058481, +-0.057955, +-0.057334, +-0.056621, +-0.055817, +-0.054924, +-0.053945, +-0.052883, +-0.051980, +-0.050752, +-0.049691, +-0.048311, +-0.047106, +-0.045830, +-0.044489, +-0.043087, +-0.041627, +-0.040116, +-0.038557, +-0.036956, +-0.035316, +-0.033883, +-0.032174, +-0.030681, +-0.029162, +-0.027381, +-0.025830, +-0.024267, +-0.022695, +-0.021120, +-0.019546, +-0.017977, +-0.016417, +-0.014870, +-0.013579, +-0.012061, +-0.010808, +-0.009333, +-0.008129, +-0.006710, +-0.005567, +-0.004455, +-0.003376, +-0.002093, +-0.001094, +-0.000135, +0.000785, +0.001662, +0.002496, +0.003046, +0.003798, +0.004506, +0.005167, +0.005541, +0.006117, +0.006647, +0.006891, +0.007336, +0.007496, +0.007860, +0.007940, +0.008224, +0.008227, +0.008197, +0.008375, +0.008275, +0.008145, +0.008229, +0.008038, +0.007823, +0.007585, +0.007327, +0.007288, +0.006985, +0.006665, +0.006331, +0.005985, +0.005629, +0.005263, +0.004890, +0.004511, +0.004129, +0.003744, +0.003359, +0.002974, +0.002591, +0.002212, +0.001839, +0.001471, +0.001111, +0.000760, +0.000418, +0.000087, +-0.000232, +-0.000538, +-0.000831, +-0.001109, +-0.001373, +-0.001621, +-0.001854, +-0.002070, +-0.002270, +-0.002693, +-0.002851, +-0.002993, +-0.003117, +-0.003224, +-0.003315, +-0.003389, +-0.003447, +-0.003488, +-0.003514, +-0.003524, +-0.003520, +-0.003501, +-0.003467, +-0.003421, +-0.003362, +-0.003290, +-0.003207, +-0.003113, +-0.003009, +-0.002896, +-0.002774, +-0.002644, +-0.002507, +-0.002363, +-0.002213, +-0.002059, +-0.001901, +-0.001739, +-0.001334, +-0.001174, +-0.001014, +-0.000852, +-0.000690, +-0.000529, +-0.000368, +-0.000210, +-0.000053, +0.000341, +0.000484, +0.000624, +0.000760, +0.000891, +0.001018, +0.001380, +0.001489, +0.001593, +0.001691, +0.001783, +0.001869, +0.002190, +0.002256, +0.002317, +0.002371, +0.002419, +0.002701, +0.002730, +0.002752, +0.002769, +0.003021, +0.003020, +0.003013, +0.003002, +0.003226, +0.003198, +0.003166, +0.003130, +0.003331, +0.003282, +0.003229, +0.003174, +0.003358, +0.003291, +0.003224, +0.003396, +0.003320, +0.003243, +0.003167, +0.003331, +0.003249, +0.003167, +0.003088, +0.003250, +0.003167, +0.003087, +0.003249, +0.003167, +0.003089, +0.003014, +0.003183, +0.003109, +0.003039, +0.002974, +0.003154, +0.003090, +0.003032, +0.003220, +0.003165, +0.003115, +0.003071, +0.003273, +0.003233, +0.003198, +0.003169, +0.003386, +0.003361, +0.003342, +0.003328, +0.003561, +0.003550, +0.003546, +0.003546, +0.003792, +0.003796, +0.003804, +0.003818, +0.003836, +0.004099, +0.004118, +0.004141, +0.004169, +0.004441, +0.004468, +0.004500, +0.004534, +0.004572, +0.004612, +0.004896, +0.004934, +0.004975, +0.005018, +0.005062, +0.005349, +0.005390, +0.005432, +0.005475, +0.005520, +0.005565, +0.005611, +0.005898, +0.005937, +0.005977, +0.006017, +0.006057, +0.006097, +0.006137, +0.006417, +0.006448, +0.006479, +0.006509, +0.006539, +0.006568, +0.006596, +0.006624, +0.006650, +0.006675, +0.006940, +0.006956, +0.006970, +0.006984, +0.006997, +0.007008, +0.007019, +0.007029, +0.007037, +0.007045, +0.007051, +0.007057, +0.007061, +0.007065, +0.007067, +0.007069, +0.007310, +0.007302, +0.007293, +0.007284, +0.007275, +0.007265, +0.007254, +0.007244, +0.007232, +0.007221, +0.007210, +0.007198, +0.007186, +0.007174, +0.007163, +0.007151, +0.007139, +0.007128, +0.007116, +0.007105, +0.007094, +0.007083, +0.007073, +0.007063, +0.007054, +0.007044, +0.007036, +0.007027, +0.006779, +0.006779, +0.006779, +0.006780, +0.006780, +0.006781, +0.006782, +0.006783, +0.006785, +0.006786, +0.006788, +0.006790, +0.006792, +0.006794, +0.006796, +0.006798, +0.006801, +0.006803, +0.006805, +0.006808, +0.006810, +0.006813, +0.006815, +0.006578, +0.006588, +0.006597, +0.006607, +0.006616, +0.006624, +0.006632, +0.006640, +0.006648, +0.006655, +0.006661, +0.006667, +0.006673, +0.006678, +0.006682, +0.006446, +0.006457, +0.006467, +0.006477, +0.006485, +0.006493, +0.006500, +0.006506, +0.006512, +0.006516, +0.006520, +0.006523, +0.006526, +0.006287, +0.006295, +0.006302, +0.006308, +0.006313, +0.006318, +0.006321, +0.006323, +0.006325, +0.006325, +0.006325, +0.006323, +0.006321, +0.006078, +0.006082, +0.006085, +0.006087, +0.006088, +0.006088, +0.006087, +0.006085, +0.006082, +0.006079, +0.006075, +0.006070, +0.005824, +0.005826, +0.005826, +0.005826, +0.005825, +0.005823, +0.005820, +0.005817, +0.005813, +0.005808, +0.005802, +0.005797, +0.005550, +0.005550, +0.005550, +0.005549, +0.005548, +0.005545, +0.005543, +0.005539, +0.005535, +0.005531, +0.005526, +0.005521, +0.005274, +0.005276, +0.005276, +0.005276, +0.005276, +0.005275, +0.005273, +0.005271, +0.005268, +0.005265, +0.005261, +0.005017, +0.005020, +0.005022, +0.005024, +0.005025, +0.005026, +0.005026, +0.005026, +0.005025, +0.005023, +0.005021, +0.005018, +0.004775, +0.004779, +0.004782, +0.004785, +0.004787, +0.004788, +0.004789, +0.004789, +0.004789, +0.004788, +0.004786, +0.004544, +0.004548, +0.004553, +0.004556, +0.004558, +0.004560, +0.004562, +0.004562, +0.004562, +0.004561, +0.004560, +0.004558, +0.004315, +0.004319, +0.004322, +0.004325, +0.004327, +0.004328, +0.004329, +0.004329, +0.004328, +0.004326, +0.004324, +0.004321, +0.004077, +0.004081, +0.004083, +0.004085, +0.004086, +0.004087, +0.004087, +0.004086, +0.004084, +0.004082, +0.004079, +0.004075, +0.003831, +0.003834, +0.003836, +0.003837, +0.003838, +0.003838, +0.003837, +0.003836, +0.003834, +0.003831, +0.003828, +0.003824, +0.003580, +0.003582, +0.003584, +0.003585, +0.003586, +0.003586, +0.003585, +0.003584, +0.003582, +0.003579, +0.003576, +0.003572, +0.003568, +0.003323, +0.003326, +0.003327, +0.003329, +0.003329, +0.003329, +0.003328, +0.003327, +0.003325, +0.003323, +0.003320, +0.003316, +0.003312, +0.003068, +0.003071, +0.003073, +0.003074, +0.003075, +0.003075, +0.003075, +0.003074, +0.003073, +0.003071, +0.003069, +0.003066, +0.003063, +0.002819, +0.002822, +0.002825, +0.002827, +0.002828, +0.002829, +0.002829, +0.002829, +0.002828, +0.002827, +0.002825, +0.002823, +0.002820, +0.002817, +0.002573, +0.002576, +0.002579, +0.002581, +0.002582, +0.002583, +0.002584, +0.002583, +0.002583, +0.002581, +0.002580, +0.002577, +0.002575, +0.002571, +0.002568, +0.002323, +0.002327, +0.002329, +0.002331, +0.002332, +0.002333, +0.002333, +0.002333, +0.002332, +0.002331, +0.002329, +0.002327, +0.002324, +0.002321, +0.002318, +0.002073, +0.002077, +0.002079, +0.002081, +0.002083, +0.002084, +0.002084, +0.002084, +0.002084, +0.002082, +0.002081, +0.002079, +0.002076, +0.002074, +0.002070, +0.002067, +0.001823, +0.001826, +0.001828, +0.001831, +0.001832, +0.001833, +0.001834, +0.001834, +0.001833, +0.001832, +0.001831, +0.001829, +0.001827, +0.001824, +0.001821, +0.001818, +0.001814, +0.001570, +0.001573, +0.001576, +0.001578, +0.001580, +0.001581, +0.001582, +0.001582, +0.001582, +0.001581, +0.001580, +0.001578, +0.001576, +0.001574, +0.001571, +0.001568, +0.001565, +0.001561, +0.001558, +0.001553, +0.001309, +0.001312, +0.001314, +0.001316, +0.001318, +0.001319, +0.001320, +0.001320, +0.001320, +0.001320, +0.001319, +0.001318, +0.001316, +0.001314, +0.001312, +0.001310, +0.001307, +0.001304, +0.001301, +0.001297, +0.001294, +0.001050, +0.001053, +0.001056, +0.001059, +0.001061, +0.001063, +0.001065, +0.001066, +0.001066, +0.001067, +0.001067, +0.001066, +0.001066, +0.001065, +0.001063, +0.001062, +0.001060, +0.001058, +0.001055, +0.001053, +0.001050, +0.001047, +0.001043, +0.001040, +0.001036, +0.000792, +0.000796, +0.000799, +0.000802, +0.000805, +0.000807, +0.000809, +0.000810, +0.000811, +0.000812, +0.000813, +0.000813, +0.000813, +0.000812, +0.000811, +0.000810, +0.000809, +0.000807, +0.000806, +0.000804, +0.000801, +0.000799, +0.000796, +0.000793, +0.000790, +0.000787, +0.000784, +0.000781, +0.000537, +0.000541, +0.000545, +0.000548, +0.000551, +0.000553, +0.000556, +0.000558, +0.000559, +0.000561, +0.000561, +0.000562, +0.000562, +0.000563, +0.000562, +0.000562, +0.000561, +0.000560, +0.000559, +0.000557, +0.000555, +0.000553, +0.000551, +0.000549, +0.000546, +0.000544, +0.000541, +0.000538, +0.000535, +0.000532, +0.000529, +0.000526, +0.000522, +0.000519, +0.000516, +0.000513, +0.000509, +0.000266, +0.000270, +0.000274, +0.000277, +0.000281, +0.000284, +0.000287 diff --git a/examples/dcl/dcl_df22/data/DF22_ctl-3.dat b/examples/dcl/dcl_df22/data/DF22_ctl-3.dat new file mode 100644 index 0000000..6cd92a8 --- /dev/null +++ b/examples/dcl/dcl_df22/data/DF22_ctl-3.dat @@ -0,0 +1,1601 @@ +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.098152, +0.094534, +0.090840, +0.087333, +0.084024, +0.080682, +0.077804, +0.074669, +0.072019, +0.069368, +0.066967, +0.064815, +0.062673, +0.060785, +0.059387, +0.057746, +0.056592, +0.055668, +0.054726, +0.054005, +0.053733, +0.053410, +0.053273, +0.053070, +0.053275, +0.053625, +0.053867, +0.054475, +0.054945, +0.055751, +0.056390, +0.057335, +0.058085, +0.058873, +0.059926, +0.060741, +0.061554, +0.062593, +0.063356, +0.064082, +0.064999, +0.065609, +0.066151, +0.066856, +0.067229, +0.067750, +0.067926, +0.068238, +0.068434, +0.068271, +0.068233, +0.068071, +0.067782, +0.067366, +0.066823, +0.066155, +0.065362, +0.064448, +0.063653, +0.062495, +0.061225, +0.060087, +0.058599, +0.057254, +0.055808, +0.054270, +0.052644, +0.050938, +0.049158, +0.047313, +0.045409, +0.043694, +0.041686, +0.039641, +0.037808, +0.035943, +0.033816, +0.031922, +0.030018, +0.028113, +0.026211, +0.024320, +0.022686, +0.020826, +0.018994, +0.017435, +0.015665, +0.014179, +0.012730, +0.011083, +0.009731, +0.008426, +0.007173, +0.005973, +0.004829, +0.003742, +0.002952, +0.001973, +0.001055, +0.000436, +-0.000372, +-0.000879, +-0.001576, +-0.001975, +-0.002326, +-0.002868, +-0.003117, +-0.003322, +-0.003485, +-0.003608, +-0.003694, +-0.003744, +-0.003761, +-0.003747, +-0.003466, +-0.003407, +-0.003326, +-0.002985, +-0.002874, +-0.002748, +-0.002369, +-0.002229, +-0.001840, +-0.001695, +-0.001307, +-0.001166, +-0.000785, +-0.000417, +-0.000061, +0.000040, +0.000373, +0.000689, +0.000986, +0.001023, +0.001289, +0.001533, +0.001754, +0.001954, +0.002130, +0.002283, +0.002413, +0.002520, +0.002365, +0.002437, +0.002485, +0.002513, +0.002519, +0.002505, +0.002711, +0.002650, +0.002572, +0.002478, +0.002369, +0.002246, +0.002111, +0.001964, +0.001807, +0.001641, +0.001468, +0.001288, +0.001102, +0.000913, +0.000722, +0.000768, +0.000565, +0.000364, +0.000164, +-0.000032, +-0.000224, +-0.000411, +-0.000592, +-0.000766, +-0.000933, +-0.001092, +-0.001242, +-0.001383, +-0.001514, +-0.001635, +-0.001746, +-0.001607, +-0.001705, +-0.001792, +-0.001868, +-0.001932, +-0.001986, +-0.002028, +-0.002059, +-0.002079, +-0.002089, +-0.002089, +-0.002319, +-0.002291, +-0.002255, +-0.002210, +-0.002158, +-0.002099, +-0.002034, +-0.001964, +-0.001888, +-0.001808, +-0.001724, +-0.001636, +-0.001547, +-0.001694, +-0.001592, +-0.001489, +-0.001387, +-0.001285, +-0.001184, +-0.001085, +-0.000989, +-0.001134, +-0.001034, +-0.000939, +-0.000847, +-0.000760, +-0.000918, +-0.000832, +-0.000753, +-0.000679, +-0.000612, +-0.000791, +-0.000728, +-0.000672, +-0.000623, +-0.000580, +-0.000785, +-0.000748, +-0.000719, +-0.000696, +-0.000920, +-0.000903, +-0.000893, +-0.000889, +-0.001132, +-0.001132, +-0.001139, +-0.001153, +-0.001411, +-0.001427, +-0.001449, +-0.001476, +-0.001747, +-0.001774, +-0.001806, +-0.001843, +-0.002123, +-0.002157, +-0.002196, +-0.002238, +-0.002522, +-0.002560, +-0.002601, +-0.002883, +-0.002920, +-0.002958, +-0.002997, +-0.003278, +-0.003312, +-0.003347, +-0.003382, +-0.003659, +-0.003687, +-0.003716, +-0.003745, +-0.004015, +-0.004036, +-0.004058, +-0.004080, +-0.004341, +-0.004355, +-0.004368, +-0.004382, +-0.004635, +-0.004640, +-0.004645, +-0.004651, +-0.004897, +-0.004894, +-0.004892, +-0.004890, +-0.005129, +-0.005120, +-0.005111, +-0.005104, +-0.005097, +-0.005331, +-0.005318, +-0.005306, +-0.005295, +-0.005286, +-0.005518, +-0.005502, +-0.005488, +-0.005476, +-0.005466, +-0.005458, +-0.005691, +-0.005677, +-0.005665, +-0.005655, +-0.005648, +-0.005642, +-0.005639, +-0.005876, +-0.005868, +-0.005861, +-0.005857, +-0.005854, +-0.005854, +-0.005856, +-0.006099, +-0.006095, +-0.006094, +-0.006094, +-0.006097, +-0.006101, +-0.006107, +-0.006115, +-0.006124, +-0.006135, +-0.006387, +-0.006391, +-0.006397, +-0.006404, +-0.006413, +-0.006423, +-0.006434, +-0.006446, +-0.006459, +-0.006473, +-0.006487, +-0.006502, +-0.006518, +-0.006534, +-0.006550, +-0.006566, +-0.006823, +-0.006830, +-0.006838, +-0.006846, +-0.006855, +-0.006863, +-0.006872, +-0.006880, +-0.006889, +-0.006897, +-0.006906, +-0.006914, +-0.006922, +-0.006930, +-0.006937, +-0.006944, +-0.006951, +-0.006958, +-0.006964, +-0.006970, +-0.006975, +-0.006980, +-0.006985, +-0.006989, +-0.006992, +-0.006995, +-0.006998, +-0.007000, +-0.007002, +-0.006764, +-0.006773, +-0.006782, +-0.006790, +-0.006797, +-0.006804, +-0.006809, +-0.006814, +-0.006817, +-0.006820, +-0.006822, +-0.006823, +-0.006824, +-0.006824, +-0.006822, +-0.006821, +-0.006818, +-0.006815, +-0.006811, +-0.006807, +-0.006802, +-0.006797, +-0.006552, +-0.006555, +-0.006557, +-0.006559, +-0.006559, +-0.006559, +-0.006559, +-0.006558, +-0.006556, +-0.006554, +-0.006551, +-0.006548, +-0.006544, +-0.006540, +-0.006535, +-0.006291, +-0.006294, +-0.006297, +-0.006300, +-0.006302, +-0.006303, +-0.006303, +-0.006303, +-0.006302, +-0.006301, +-0.006300, +-0.006297, +-0.006295, +-0.006292, +-0.006049, +-0.006054, +-0.006058, +-0.006061, +-0.006064, +-0.006066, +-0.006068, +-0.006069, +-0.006069, +-0.006068, +-0.006067, +-0.006066, +-0.006063, +-0.005821, +-0.005827, +-0.005831, +-0.005835, +-0.005838, +-0.005841, +-0.005842, +-0.005843, +-0.005843, +-0.005842, +-0.005841, +-0.005839, +-0.005596, +-0.005602, +-0.005606, +-0.005610, +-0.005613, +-0.005615, +-0.005616, +-0.005616, +-0.005615, +-0.005613, +-0.005611, +-0.005608, +-0.005365, +-0.005369, +-0.005373, +-0.005376, +-0.005377, +-0.005378, +-0.005378, +-0.005377, +-0.005375, +-0.005373, +-0.005369, +-0.005365, +-0.005121, +-0.005125, +-0.005127, +-0.005129, +-0.005130, +-0.005130, +-0.005129, +-0.005128, +-0.005125, +-0.005122, +-0.005118, +-0.004874, +-0.004878, +-0.004881, +-0.004883, +-0.004884, +-0.004884, +-0.004884, +-0.004882, +-0.004880, +-0.004877, +-0.004874, +-0.004870, +-0.004625, +-0.004629, +-0.004631, +-0.004633, +-0.004634, +-0.004634, +-0.004633, +-0.004632, +-0.004630, +-0.004627, +-0.004623, +-0.004619, +-0.004375, +-0.004378, +-0.004381, +-0.004383, +-0.004384, +-0.004384, +-0.004384, +-0.004383, +-0.004381, +-0.004378, +-0.004375, +-0.004371, +-0.004127, +-0.004131, +-0.004134, +-0.004137, +-0.004138, +-0.004139, +-0.004139, +-0.004138, +-0.004136, +-0.004134, +-0.004131, +-0.004127, +-0.004123, +-0.003879, +-0.003883, +-0.003886, +-0.003888, +-0.003889, +-0.003890, +-0.003890, +-0.003889, +-0.003887, +-0.003885, +-0.003882, +-0.003879, +-0.003635, +-0.003640, +-0.003643, +-0.003646, +-0.003648, +-0.003649, +-0.003649, +-0.003648, +-0.003647, +-0.003645, +-0.003643, +-0.003640, +-0.003636, +-0.003392, +-0.003396, +-0.003399, +-0.003402, +-0.003403, +-0.003404, +-0.003404, +-0.003403, +-0.003402, +-0.003400, +-0.003397, +-0.003394, +-0.003390, +-0.003146, +-0.003150, +-0.003153, +-0.003155, +-0.003157, +-0.003157, +-0.003157, +-0.003157, +-0.003155, +-0.003153, +-0.003150, +-0.003147, +-0.003143, +-0.002899, +-0.002903, +-0.002906, +-0.002909, +-0.002910, +-0.002911, +-0.002911, +-0.002911, +-0.002909, +-0.002907, +-0.002905, +-0.002902, +-0.002898, +-0.002894, +-0.002649, +-0.002653, +-0.002656, +-0.002658, +-0.002660, +-0.002660, +-0.002661, +-0.002660, +-0.002659, +-0.002657, +-0.002654, +-0.002651, +-0.002647, +-0.002643, +-0.002399, +-0.002403, +-0.002407, +-0.002409, +-0.002411, +-0.002412, +-0.002412, +-0.002412, +-0.002411, +-0.002409, +-0.002407, +-0.002404, +-0.002401, +-0.002398, +-0.002393, +-0.002149, +-0.002153, +-0.002156, +-0.002159, +-0.002161, +-0.002162, +-0.002162, +-0.002162, +-0.002162, +-0.002160, +-0.002158, +-0.002156, +-0.002153, +-0.002149, +-0.002146, +-0.002141, +-0.001897, +-0.001901, +-0.001904, +-0.100059, +-0.096443, +-0.092751, +-0.089244, +-0.085935, +-0.082592, +-0.079474, +-0.076586, +-0.073933, +-0.071279, +-0.068874, +-0.066479, +-0.064581, +-0.062688, +-0.061045, +-0.059647, +-0.058486, +-0.057316, +-0.056376, +-0.055895, +-0.055376, +-0.055054, +-0.054917, +-0.054714, +-0.054918, +-0.055267, +-0.055508, +-0.056114, +-0.056581, +-0.057385, +-0.058021, +-0.058724, +-0.059479, +-0.060512, +-0.061320, +-0.062139, +-0.063195, +-0.063988, +-0.064754, +-0.065481, +-0.066400, +-0.067011, +-0.067553, +-0.068259, +-0.068631, +-0.069152, +-0.069326, +-0.069636, +-0.069590, +-0.069673, +-0.069632, +-0.069226, +-0.068942, +-0.068531, +-0.067992, +-0.067326, +-0.066536, +-0.065863, +-0.064821, +-0.063664, +-0.062634, +-0.061247, +-0.059998, +-0.058404, +-0.056958, +-0.055417, +-0.053790, +-0.052082, +-0.050300, +-0.048452, +-0.046546, +-0.044587, +-0.042825, +-0.040776, +-0.038939, +-0.036830, +-0.034948, +-0.033048, +-0.031140, +-0.029229, +-0.027322, +-0.025426, +-0.023547, +-0.021690, +-0.019862, +-0.018306, +-0.016539, +-0.015055, +-0.013608, +-0.011963, +-0.010612, +-0.009309, +-0.008056, +-0.006857, +-0.005712, +-0.004625, +-0.003595, +-0.002625, +-0.001953, +-0.001092, +-0.000531, +0.000220, +0.000671, +0.001314, +0.001660, +0.001959, +0.002213, +0.002664, +0.002824, +0.002945, +0.003028, +0.003077, +0.003093, +0.002839, +0.002806, +0.002748, +0.002667, +0.002327, +0.002217, +0.002093, +0.001716, +0.001578, +0.001192, +0.001050, +0.000664, +0.000526, +0.000150, +-0.000215, +-0.000327, +-0.000673, +-0.001002, +-0.001074, +-0.001376, +-0.001657, +-0.001917, +-0.002156, +-0.002132, +-0.002335, +-0.002514, +-0.002670, +-0.002803, +-0.002912, +-0.002999, +-0.003062, +-0.003104, +-0.003124, +-0.003123, +-0.003102, +-0.003062, +-0.003003, +-0.002927, +-0.002835, +-0.002728, +-0.002607, +-0.002473, +-0.002327, +-0.002171, +-0.002006, +-0.001834, +-0.001654, +-0.001470, +-0.001281, +-0.001089, +-0.000896, +-0.000702, +-0.000509, +-0.000556, +-0.000358, +-0.000164, +0.000025, +0.000208, +0.000385, +0.000555, +0.000716, +0.000869, +0.001013, +0.001147, +0.001271, +0.001385, +0.001488, +0.001581, +0.001662, +0.001733, +0.001793, +0.001842, +0.001880, +0.001908, +0.001925, +0.001933, +0.001930, +0.001919, +0.001898, +0.001869, +0.001832, +0.001788, +0.001976, +0.001909, +0.001837, +0.001760, +0.001679, +0.001594, +0.001506, +0.001416, +0.001323, +0.001470, +0.001367, +0.001264, +0.001162, +0.001062, +0.000963, +0.001106, +0.001004, +0.000906, +0.000811, +0.000721, +0.000635, +0.000795, +0.000711, +0.000633, +0.000561, +0.000496, +0.000676, +0.000615, +0.000561, +0.000514, +0.000713, +0.000671, +0.000637, +0.000609, +0.000829, +0.000807, +0.000792, +0.000784, +0.001022, +0.001019, +0.001023, +0.001032, +0.001288, +0.001301, +0.001320, +0.001584, +0.001605, +0.001631, +0.001662, +0.001937, +0.001968, +0.002003, +0.002042, +0.002324, +0.002361, +0.002401, +0.002683, +0.002720, +0.002759, +0.002800, +0.003083, +0.003119, +0.003156, +0.003195, +0.003475, +0.003508, +0.003541, +0.003815, +0.003841, +0.003867, +0.003894, +0.004162, +0.004181, +0.004200, +0.004220, +0.004480, +0.004492, +0.004503, +0.004516, +0.004768, +0.004771, +0.004776, +0.004780, +0.005025, +0.005021, +0.005019, +0.005017, +0.005015, +0.005254, +0.005246, +0.005238, +0.005231, +0.005465, +0.005451, +0.005439, +0.005429, +0.005419, +0.005411, +0.005645, +0.005631, +0.005619, +0.005609, +0.005600, +0.005833, +0.005819, +0.005807, +0.005798, +0.005790, +0.005785, +0.005781, +0.006019, +0.006010, +0.006004, +0.006000, +0.005998, +0.005998, +0.005999, +0.006243, +0.006239, +0.006238, +0.006239, +0.006242, +0.006246, +0.006253, +0.006261, +0.006270, +0.006281, +0.006533, +0.006538, +0.006544, +0.006551, +0.006560, +0.006570, +0.006582, +0.006594, +0.006607, +0.006621, +0.006635, +0.006651, +0.006666, +0.006682, +0.006698, +0.006715, +0.006971, +0.006979, +0.006987, +0.006995, +0.007003, +0.007012, +0.007020, +0.007029, +0.007037, +0.007046, +0.007054, +0.007062, +0.007070, +0.007078, +0.007085, +0.007092, +0.007099, +0.007106, +0.007112, +0.007117, +0.007123, +0.007127, +0.007132, +0.007136, +0.007139, +0.007142, +0.007145, +0.007147, +0.006909, +0.006919, +0.006928, +0.006936, +0.006944, +0.006951, +0.006956, +0.006961, +0.006965, +0.006968, +0.006970, +0.006972, +0.006972, +0.006972, +0.006971, +0.006970, +0.006967, +0.006964, +0.006961, +0.006957, +0.006952, +0.006947, +0.006941, +0.006696, +0.006698, +0.006700, +0.006701, +0.006702, +0.006702, +0.006701, +0.006700, +0.006698, +0.006695, +0.006693, +0.006689, +0.006685, +0.006681, +0.006677, +0.006432, +0.006436, +0.006439, +0.006442, +0.006444, +0.006445, +0.006446, +0.006446, +0.006446, +0.006445, +0.006443, +0.006441, +0.006439, +0.006196, +0.006202, +0.006207, +0.006211, +0.006214, +0.006217, +0.006219, +0.006220, +0.006221, +0.006220, +0.006220, +0.006218, +0.006216, +0.005974, +0.005980, +0.005984, +0.005988, +0.005992, +0.005994, +0.005995, +0.005996, +0.005996, +0.005995, +0.005993, +0.005991, +0.005748, +0.005753, +0.005758, +0.005761, +0.005763, +0.005765, +0.005766, +0.005765, +0.005764, +0.005762, +0.005760, +0.005756, +0.005513, +0.005517, +0.005520, +0.005522, +0.005524, +0.005524, +0.005524, +0.005523, +0.005520, +0.005518, +0.005514, +0.005510, +0.005266, +0.005269, +0.005271, +0.005273, +0.005274, +0.005274, +0.005273, +0.005271, +0.005269, +0.005266, +0.005262, +0.005018, +0.005022, +0.005025, +0.005027, +0.005028, +0.005028, +0.005028, +0.005026, +0.005024, +0.005022, +0.005018, +0.005014, +0.004770, +0.004773, +0.004776, +0.004778, +0.004779, +0.004779, +0.004779, +0.004777, +0.004775, +0.004773, +0.004769, +0.004526, +0.004530, +0.004533, +0.004536, +0.004537, +0.004538, +0.004538, +0.004537, +0.004535, +0.004533, +0.004530, +0.004526, +0.004282, +0.004286, +0.004289, +0.004292, +0.004293, +0.004293, +0.004293, +0.004292, +0.004290, +0.004287, +0.004284, +0.004280, +0.004036, +0.004040, +0.004043, +0.004045, +0.004046, +0.004047, +0.004046, +0.004045, +0.004043, +0.004041, +0.004037, +0.004034, +0.003790, +0.003793, +0.003796, +0.003799, +0.003800, +0.003800, +0.003800, +0.003799, +0.003797, +0.003795, +0.003792, +0.003788, +0.003544, +0.003548, +0.003551, +0.003554, +0.003555, +0.003556, +0.003555, +0.003555, +0.003553, +0.003551, +0.003548, +0.003544, +0.003540, +0.003295, +0.003299, +0.003302, +0.003304, +0.003305, +0.003306, +0.003305, +0.003304, +0.003302, +0.003300, +0.003297, +0.003293, +0.003289, +0.003045, +0.003049, +0.003052, +0.003054, +0.003055, +0.003056, +0.003056, +0.003055, +0.003054, +0.003052, +0.003049, +0.003046, +0.003042, +0.002798, +0.002802, +0.002806, +0.002808, +0.002810, +0.002811, +0.002811, +0.002811, +0.002809, +0.002808, +0.002805, +0.002802, +0.002799, +0.002795, +0.002551, +0.002555, +0.002558, +0.002560, +0.002562, +0.002563, +0.002563, +0.002562, +0.002561, +0.002559, +0.002557, +0.002554, +0.002551, +0.002547, +0.002542, +0.002298, +0.002302, +0.002305, +0.002307, +0.002309, +0.002309, +0.002310, +0.002309, +0.002308, +0.002307, +0.002305, +0.002302, +0.002299, +0.002295, +0.002291, +0.002047, +0.002051, +0.002055, +0.002057, +0.002059, +0.002061, +0.002062, +0.002062, +0.002061, +0.002060, +0.002058, +0.002056, +0.002053, +0.002050, +0.002047, +0.002043, +0.001799, +0.001803, +0.001807, +0.001809, +0.001812, +0.001813, +0.001814, +0.001814, +0.001814, +0.001813, +0.001812, +0.001810, +0.001807, +0.001804, +0.001801, +0.001797, +0.001793, +0.001549, +0.001553, +0.001557, +0.001560, +0.001562, +0.001564, +0.001565, +0.001565, +0.001565, +0.001564, +0.001563, +0.001561, +0.001559, +0.001556, +0.001553, +0.001550, +0.001546, +0.001542, +0.001537, +0.001533, +0.001288, +0.001292, +0.001295, +0.001298, +0.001300, +0.001302, +0.001303, +0.001304, +0.001304, +0.001304, +0.001303, +0.001302, +0.001300, +0.001298, +0.001296, +0.001293, +0.001290, +0.001287, +0.001284, +0.001280, +0.001276, +0.001032, +0.001037, +0.001041, +0.001045, +0.001048, +0.001050, +0.001052, +0.001054, +0.001055, +0.001056, +0.001056, +0.001055, +0.001055, +0.001054, +0.001052, +0.001050, +0.001048, +0.001045, +0.001043, +0.001039, +0.001036, +0.001033, +0.001029, +0.001025, +0.001021, +0.000777, +0.000782, +0.000786, +0.000790, +0.000793, +0.000796, +0.000798, +0.000800, +0.000802, +0.000803, +0.000803, +0.000804, +0.000803, +0.000803, +0.000802, +0.000800, +0.000799, +0.000797, +0.000795, +0.000792, +0.000789, +0.000786, +0.000783, +0.000780, +0.000776, +0.000773, +0.000769, +0.000765, +0.000522, +0.000527, +0.000532, +0.000536, +0.000540, +0.000543, +0.000546, +0.000548, +0.000550, +0.000552, +0.000553, +0.000554, +0.000555, +0.000555, +0.000554, +0.000554, +0.000553, +0.000551, +0.000550, +0.000548, +0.000545, +0.000543, +0.000540, +0.000538, +0.000535, +0.000531, +0.000528, +0.000525, +0.000521, +0.000518, +0.000514, +0.000511, +0.000507, +0.000504, +0.000500, +0.000497, +0.000493, +0.000251, +0.000256, +0.000262, +0.000267, +0.000272, +0.000276, +0.000280 diff --git a/examples/dcl/dcl_df22/data/DF22_in-1.dat b/examples/dcl/dcl_df22/data/DF22_in-1.dat new file mode 100644 index 0000000..6f17799 --- /dev/null +++ b/examples/dcl/dcl_df22/data/DF22_in-1.dat @@ -0,0 +1,1601 @@ +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +1.00000001e-01, +1.00000001e-01, +9.97558609e-02, +9.95117202e-02, +9.92675796e-02, +9.87792984e-02, +9.85351577e-02, +9.78027359e-02, +9.73144546e-02, +9.65820327e-02, +9.58496109e-02, +9.51171890e-02, +9.41406265e-02, +9.31640640e-02, +9.24316421e-02, +9.12109390e-02, +9.02343765e-02, +8.92578140e-02, +8.80371109e-02, +8.68164077e-02, +8.58398452e-02, +8.46191421e-02, +8.33984390e-02, +8.19335952e-02, +8.07128921e-02, +7.94921890e-02, +7.80273452e-02, +7.68066421e-02, +7.53417984e-02, +7.41210952e-02, +7.26562515e-02, +7.14355484e-02, +6.99707046e-02, +6.85058609e-02, +6.72851577e-02, +6.58203140e-02, +6.43554702e-02, +6.31347671e-02, +6.16699234e-02, +6.02050796e-02, +5.89843765e-02, +5.75195327e-02, +5.60546890e-02, +5.48339859e-02, +5.33691421e-02, +5.21484390e-02, +5.06835952e-02, +4.94628921e-02, +4.82421890e-02, +4.67773452e-02, +4.55566421e-02, +4.43359390e-02, +4.31152359e-02, +4.18945327e-02, +4.06738296e-02, +3.94531265e-02, +3.82324234e-02, +3.70117202e-02, +3.60351577e-02, +3.48144546e-02, +3.35937515e-02, +3.26171890e-02, +3.13964859e-02, +3.04199234e-02, +2.94433609e-02, +2.84667984e-02, +2.74902359e-02, +2.65136734e-02, +2.55371109e-02, +2.45605484e-02, +2.35839859e-02, +2.28515640e-02, +2.18750015e-02, +2.08984390e-02, +2.01660171e-02, +1.94335952e-02, +1.84570327e-02, +1.77246109e-02, +1.69921890e-02, +1.62597671e-02, +1.55273452e-02, +1.47949234e-02, +1.43066421e-02, +1.35742202e-02, +1.28417984e-02, +1.23535171e-02, +1.16210952e-02, +1.11328140e-02, +1.06445327e-02, +9.91211087e-03, +9.42382962e-03, +8.93554837e-03, +8.44726712e-03, +7.95898587e-03, +7.47070462e-03, +6.98242337e-03, +6.73828274e-03, +6.25000149e-03, +5.76172024e-03, +5.51757962e-03, +5.02929837e-03, +4.78515774e-03, +4.29687649e-03, +4.05273587e-03, +3.80859524e-03, +3.32031399e-03, +3.07617337e-03, +2.83203274e-03, +2.58789212e-03, +2.34375149e-03, +2.09961087e-03, +1.85547024e-03, +1.61132962e-03, +1.36718899e-03, +1.36718899e-03, +1.12304837e-03, +8.78907740e-04, +8.78907740e-04, +6.34767115e-04, +3.90626490e-04, +3.90626490e-04, +1.46485865e-04, +1.46485865e-04, +-9.76547599e-05, +-9.76547599e-05, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.31835788e-03, +-1.31835788e-03, +-1.31835788e-03, +-1.31835788e-03, +-1.31835788e-03, +-1.56249851e-03, +-1.56249851e-03, +-1.56249851e-03, +-1.56249851e-03, +-1.56249851e-03, +-1.80663913e-03, +-1.80663913e-03, +-1.80663913e-03, +-1.80663913e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-1.80663913e-03, +-1.80663913e-03, +-1.80663913e-03, +-1.01806641e-01, +-1.01806641e-01, +-1.01562500e-01, +-1.01318359e-01, +-1.01074219e-01, +-1.00585938e-01, +-1.00097656e-01, +-9.96093750e-02, +-9.91210938e-02, +-9.83886719e-02, +-9.76562500e-02, +-9.66796875e-02, +-9.59472656e-02, +-9.49707031e-02, +-9.39941406e-02, +-9.30175781e-02, +-9.20410156e-02, +-9.08203125e-02, +-8.95996094e-02, +-8.86230469e-02, +-8.74023438e-02, +-8.61816406e-02, +-8.49609375e-02, +-8.34960938e-02, +-8.22753906e-02, +-8.10546875e-02, +-7.95898438e-02, +-7.83691406e-02, +-7.69042969e-02, +-7.56835938e-02, +-7.42187500e-02, +-7.27539063e-02, +-7.12890625e-02, +-7.00683594e-02, +-6.86035156e-02, +-6.71386719e-02, +-6.59179688e-02, +-6.44531250e-02, +-6.29882813e-02, +-6.15234375e-02, +-6.03027344e-02, +-5.88378906e-02, +-5.73730469e-02, +-5.61523438e-02, +-5.46875000e-02, +-5.34667969e-02, +-5.20019531e-02, +-5.07812500e-02, +-4.93164063e-02, +-4.80957031e-02, +-4.68750000e-02, +-4.54101563e-02, +-4.41894531e-02, +-4.29687500e-02, +-4.17480469e-02, +-4.05273438e-02, +-3.93066406e-02, +-3.83300781e-02, +-3.71093750e-02, +-3.58886719e-02, +-3.49121094e-02, +-3.36914063e-02, +-3.27148438e-02, +-3.14941406e-02, +-3.05175781e-02, +-2.95410156e-02, +-2.85644531e-02, +-2.75878906e-02, +-2.66113281e-02, +-2.56347656e-02, +-2.46582031e-02, +-2.36816406e-02, +-2.29492188e-02, +-2.19726563e-02, +-2.12402344e-02, +-2.02636719e-02, +-1.95312500e-02, +-1.87988281e-02, +-1.80664063e-02, +-1.73339844e-02, +-1.66015625e-02, +-1.58691406e-02, +-1.51367188e-02, +-1.44042969e-02, +-1.36718750e-02, +-1.31835938e-02, +-1.24511719e-02, +-1.19628906e-02, +-1.14746094e-02, +-1.07421875e-02, +-1.02539063e-02, +-9.76562500e-03, +-9.27734375e-03, +-8.78906250e-03, +-8.30078125e-03, +-7.81250000e-03, +-7.32421875e-03, +-6.83593750e-03, +-6.59179688e-03, +-6.10351563e-03, +-5.85937500e-03, +-5.37109375e-03, +-5.12695313e-03, +-4.63867188e-03, +-4.39453125e-03, +-4.15039063e-03, +-3.90625000e-03, +-3.41796875e-03, +-3.17382813e-03, +-2.92968750e-03, +-2.68554688e-03, +-2.44140625e-03, +-2.19726563e-03, +-2.19726563e-03, +-1.95312500e-03, +-1.70898438e-03, +-1.46484375e-03, +-1.46484375e-03, +-1.22070313e-03, +-9.76562500e-04, +-9.76562500e-04, +-7.32421875e-04, +-7.32421875e-04, +-4.88281250e-04, +-4.88281250e-04, +-2.44140625e-04, +-2.44140625e-04, +-2.44140625e-04, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04 diff --git a/examples/dcl/dcl_df22/data/DF22_in-2.dat b/examples/dcl/dcl_df22/data/DF22_in-2.dat new file mode 100644 index 0000000..6f17799 --- /dev/null +++ b/examples/dcl/dcl_df22/data/DF22_in-2.dat @@ -0,0 +1,1601 @@ +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +1.00000001e-01, +1.00000001e-01, +9.97558609e-02, +9.95117202e-02, +9.92675796e-02, +9.87792984e-02, +9.85351577e-02, +9.78027359e-02, +9.73144546e-02, +9.65820327e-02, +9.58496109e-02, +9.51171890e-02, +9.41406265e-02, +9.31640640e-02, +9.24316421e-02, +9.12109390e-02, +9.02343765e-02, +8.92578140e-02, +8.80371109e-02, +8.68164077e-02, +8.58398452e-02, +8.46191421e-02, +8.33984390e-02, +8.19335952e-02, +8.07128921e-02, +7.94921890e-02, +7.80273452e-02, +7.68066421e-02, +7.53417984e-02, +7.41210952e-02, +7.26562515e-02, +7.14355484e-02, +6.99707046e-02, +6.85058609e-02, +6.72851577e-02, +6.58203140e-02, +6.43554702e-02, +6.31347671e-02, +6.16699234e-02, +6.02050796e-02, +5.89843765e-02, +5.75195327e-02, +5.60546890e-02, +5.48339859e-02, +5.33691421e-02, +5.21484390e-02, +5.06835952e-02, +4.94628921e-02, +4.82421890e-02, +4.67773452e-02, +4.55566421e-02, +4.43359390e-02, +4.31152359e-02, +4.18945327e-02, +4.06738296e-02, +3.94531265e-02, +3.82324234e-02, +3.70117202e-02, +3.60351577e-02, +3.48144546e-02, +3.35937515e-02, +3.26171890e-02, +3.13964859e-02, +3.04199234e-02, +2.94433609e-02, +2.84667984e-02, +2.74902359e-02, +2.65136734e-02, +2.55371109e-02, +2.45605484e-02, +2.35839859e-02, +2.28515640e-02, +2.18750015e-02, +2.08984390e-02, +2.01660171e-02, +1.94335952e-02, +1.84570327e-02, +1.77246109e-02, +1.69921890e-02, +1.62597671e-02, +1.55273452e-02, +1.47949234e-02, +1.43066421e-02, +1.35742202e-02, +1.28417984e-02, +1.23535171e-02, +1.16210952e-02, +1.11328140e-02, +1.06445327e-02, +9.91211087e-03, +9.42382962e-03, +8.93554837e-03, +8.44726712e-03, +7.95898587e-03, +7.47070462e-03, +6.98242337e-03, +6.73828274e-03, +6.25000149e-03, +5.76172024e-03, +5.51757962e-03, +5.02929837e-03, +4.78515774e-03, +4.29687649e-03, +4.05273587e-03, +3.80859524e-03, +3.32031399e-03, +3.07617337e-03, +2.83203274e-03, +2.58789212e-03, +2.34375149e-03, +2.09961087e-03, +1.85547024e-03, +1.61132962e-03, +1.36718899e-03, +1.36718899e-03, +1.12304837e-03, +8.78907740e-04, +8.78907740e-04, +6.34767115e-04, +3.90626490e-04, +3.90626490e-04, +1.46485865e-04, +1.46485865e-04, +-9.76547599e-05, +-9.76547599e-05, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.31835788e-03, +-1.31835788e-03, +-1.31835788e-03, +-1.31835788e-03, +-1.31835788e-03, +-1.56249851e-03, +-1.56249851e-03, +-1.56249851e-03, +-1.56249851e-03, +-1.56249851e-03, +-1.80663913e-03, +-1.80663913e-03, +-1.80663913e-03, +-1.80663913e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-1.80663913e-03, +-1.80663913e-03, +-1.80663913e-03, +-1.01806641e-01, +-1.01806641e-01, +-1.01562500e-01, +-1.01318359e-01, +-1.01074219e-01, +-1.00585938e-01, +-1.00097656e-01, +-9.96093750e-02, +-9.91210938e-02, +-9.83886719e-02, +-9.76562500e-02, +-9.66796875e-02, +-9.59472656e-02, +-9.49707031e-02, +-9.39941406e-02, +-9.30175781e-02, +-9.20410156e-02, +-9.08203125e-02, +-8.95996094e-02, +-8.86230469e-02, +-8.74023438e-02, +-8.61816406e-02, +-8.49609375e-02, +-8.34960938e-02, +-8.22753906e-02, +-8.10546875e-02, +-7.95898438e-02, +-7.83691406e-02, +-7.69042969e-02, +-7.56835938e-02, +-7.42187500e-02, +-7.27539063e-02, +-7.12890625e-02, +-7.00683594e-02, +-6.86035156e-02, +-6.71386719e-02, +-6.59179688e-02, +-6.44531250e-02, +-6.29882813e-02, +-6.15234375e-02, +-6.03027344e-02, +-5.88378906e-02, +-5.73730469e-02, +-5.61523438e-02, +-5.46875000e-02, +-5.34667969e-02, +-5.20019531e-02, +-5.07812500e-02, +-4.93164063e-02, +-4.80957031e-02, +-4.68750000e-02, +-4.54101563e-02, +-4.41894531e-02, +-4.29687500e-02, +-4.17480469e-02, +-4.05273438e-02, +-3.93066406e-02, +-3.83300781e-02, +-3.71093750e-02, +-3.58886719e-02, +-3.49121094e-02, +-3.36914063e-02, +-3.27148438e-02, +-3.14941406e-02, +-3.05175781e-02, +-2.95410156e-02, +-2.85644531e-02, +-2.75878906e-02, +-2.66113281e-02, +-2.56347656e-02, +-2.46582031e-02, +-2.36816406e-02, +-2.29492188e-02, +-2.19726563e-02, +-2.12402344e-02, +-2.02636719e-02, +-1.95312500e-02, +-1.87988281e-02, +-1.80664063e-02, +-1.73339844e-02, +-1.66015625e-02, +-1.58691406e-02, +-1.51367188e-02, +-1.44042969e-02, +-1.36718750e-02, +-1.31835938e-02, +-1.24511719e-02, +-1.19628906e-02, +-1.14746094e-02, +-1.07421875e-02, +-1.02539063e-02, +-9.76562500e-03, +-9.27734375e-03, +-8.78906250e-03, +-8.30078125e-03, +-7.81250000e-03, +-7.32421875e-03, +-6.83593750e-03, +-6.59179688e-03, +-6.10351563e-03, +-5.85937500e-03, +-5.37109375e-03, +-5.12695313e-03, +-4.63867188e-03, +-4.39453125e-03, +-4.15039063e-03, +-3.90625000e-03, +-3.41796875e-03, +-3.17382813e-03, +-2.92968750e-03, +-2.68554688e-03, +-2.44140625e-03, +-2.19726563e-03, +-2.19726563e-03, +-1.95312500e-03, +-1.70898438e-03, +-1.46484375e-03, +-1.46484375e-03, +-1.22070313e-03, +-9.76562500e-04, +-9.76562500e-04, +-7.32421875e-04, +-7.32421875e-04, +-4.88281250e-04, +-4.88281250e-04, +-2.44140625e-04, +-2.44140625e-04, +-2.44140625e-04, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04 diff --git a/examples/dcl/dcl_df22/data/DF22_in-3.dat b/examples/dcl/dcl_df22/data/DF22_in-3.dat new file mode 100644 index 0000000..6f17799 --- /dev/null +++ b/examples/dcl/dcl_df22/data/DF22_in-3.dat @@ -0,0 +1,1601 @@ +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +1.00000001e-01, +1.00000001e-01, +9.97558609e-02, +9.95117202e-02, +9.92675796e-02, +9.87792984e-02, +9.85351577e-02, +9.78027359e-02, +9.73144546e-02, +9.65820327e-02, +9.58496109e-02, +9.51171890e-02, +9.41406265e-02, +9.31640640e-02, +9.24316421e-02, +9.12109390e-02, +9.02343765e-02, +8.92578140e-02, +8.80371109e-02, +8.68164077e-02, +8.58398452e-02, +8.46191421e-02, +8.33984390e-02, +8.19335952e-02, +8.07128921e-02, +7.94921890e-02, +7.80273452e-02, +7.68066421e-02, +7.53417984e-02, +7.41210952e-02, +7.26562515e-02, +7.14355484e-02, +6.99707046e-02, +6.85058609e-02, +6.72851577e-02, +6.58203140e-02, +6.43554702e-02, +6.31347671e-02, +6.16699234e-02, +6.02050796e-02, +5.89843765e-02, +5.75195327e-02, +5.60546890e-02, +5.48339859e-02, +5.33691421e-02, +5.21484390e-02, +5.06835952e-02, +4.94628921e-02, +4.82421890e-02, +4.67773452e-02, +4.55566421e-02, +4.43359390e-02, +4.31152359e-02, +4.18945327e-02, +4.06738296e-02, +3.94531265e-02, +3.82324234e-02, +3.70117202e-02, +3.60351577e-02, +3.48144546e-02, +3.35937515e-02, +3.26171890e-02, +3.13964859e-02, +3.04199234e-02, +2.94433609e-02, +2.84667984e-02, +2.74902359e-02, +2.65136734e-02, +2.55371109e-02, +2.45605484e-02, +2.35839859e-02, +2.28515640e-02, +2.18750015e-02, +2.08984390e-02, +2.01660171e-02, +1.94335952e-02, +1.84570327e-02, +1.77246109e-02, +1.69921890e-02, +1.62597671e-02, +1.55273452e-02, +1.47949234e-02, +1.43066421e-02, +1.35742202e-02, +1.28417984e-02, +1.23535171e-02, +1.16210952e-02, +1.11328140e-02, +1.06445327e-02, +9.91211087e-03, +9.42382962e-03, +8.93554837e-03, +8.44726712e-03, +7.95898587e-03, +7.47070462e-03, +6.98242337e-03, +6.73828274e-03, +6.25000149e-03, +5.76172024e-03, +5.51757962e-03, +5.02929837e-03, +4.78515774e-03, +4.29687649e-03, +4.05273587e-03, +3.80859524e-03, +3.32031399e-03, +3.07617337e-03, +2.83203274e-03, +2.58789212e-03, +2.34375149e-03, +2.09961087e-03, +1.85547024e-03, +1.61132962e-03, +1.36718899e-03, +1.36718899e-03, +1.12304837e-03, +8.78907740e-04, +8.78907740e-04, +6.34767115e-04, +3.90626490e-04, +3.90626490e-04, +1.46485865e-04, +1.46485865e-04, +-9.76547599e-05, +-9.76547599e-05, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-3.41795385e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-5.85936010e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-8.30076635e-04, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.07421726e-03, +-1.31835788e-03, +-1.31835788e-03, +-1.31835788e-03, +-1.31835788e-03, +-1.31835788e-03, +-1.56249851e-03, +-1.56249851e-03, +-1.56249851e-03, +-1.56249851e-03, +-1.56249851e-03, +-1.80663913e-03, +-1.80663913e-03, +-1.80663913e-03, +-1.80663913e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.93359226e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.68945163e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.44531101e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-6.20117038e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.95702976e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.71288913e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.46874851e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-5.22460788e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.98046726e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.73632663e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.49218601e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.24804538e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-4.00390476e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.75976413e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.51562351e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.27148288e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-3.02734226e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.78320163e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.53906101e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.29492038e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-2.05077976e-03, +-1.80663913e-03, +-1.80663913e-03, +-1.80663913e-03, +-1.01806641e-01, +-1.01806641e-01, +-1.01562500e-01, +-1.01318359e-01, +-1.01074219e-01, +-1.00585938e-01, +-1.00097656e-01, +-9.96093750e-02, +-9.91210938e-02, +-9.83886719e-02, +-9.76562500e-02, +-9.66796875e-02, +-9.59472656e-02, +-9.49707031e-02, +-9.39941406e-02, +-9.30175781e-02, +-9.20410156e-02, +-9.08203125e-02, +-8.95996094e-02, +-8.86230469e-02, +-8.74023438e-02, +-8.61816406e-02, +-8.49609375e-02, +-8.34960938e-02, +-8.22753906e-02, +-8.10546875e-02, +-7.95898438e-02, +-7.83691406e-02, +-7.69042969e-02, +-7.56835938e-02, +-7.42187500e-02, +-7.27539063e-02, +-7.12890625e-02, +-7.00683594e-02, +-6.86035156e-02, +-6.71386719e-02, +-6.59179688e-02, +-6.44531250e-02, +-6.29882813e-02, +-6.15234375e-02, +-6.03027344e-02, +-5.88378906e-02, +-5.73730469e-02, +-5.61523438e-02, +-5.46875000e-02, +-5.34667969e-02, +-5.20019531e-02, +-5.07812500e-02, +-4.93164063e-02, +-4.80957031e-02, +-4.68750000e-02, +-4.54101563e-02, +-4.41894531e-02, +-4.29687500e-02, +-4.17480469e-02, +-4.05273438e-02, +-3.93066406e-02, +-3.83300781e-02, +-3.71093750e-02, +-3.58886719e-02, +-3.49121094e-02, +-3.36914063e-02, +-3.27148438e-02, +-3.14941406e-02, +-3.05175781e-02, +-2.95410156e-02, +-2.85644531e-02, +-2.75878906e-02, +-2.66113281e-02, +-2.56347656e-02, +-2.46582031e-02, +-2.36816406e-02, +-2.29492188e-02, +-2.19726563e-02, +-2.12402344e-02, +-2.02636719e-02, +-1.95312500e-02, +-1.87988281e-02, +-1.80664063e-02, +-1.73339844e-02, +-1.66015625e-02, +-1.58691406e-02, +-1.51367188e-02, +-1.44042969e-02, +-1.36718750e-02, +-1.31835938e-02, +-1.24511719e-02, +-1.19628906e-02, +-1.14746094e-02, +-1.07421875e-02, +-1.02539063e-02, +-9.76562500e-03, +-9.27734375e-03, +-8.78906250e-03, +-8.30078125e-03, +-7.81250000e-03, +-7.32421875e-03, +-6.83593750e-03, +-6.59179688e-03, +-6.10351563e-03, +-5.85937500e-03, +-5.37109375e-03, +-5.12695313e-03, +-4.63867188e-03, +-4.39453125e-03, +-4.15039063e-03, +-3.90625000e-03, +-3.41796875e-03, +-3.17382813e-03, +-2.92968750e-03, +-2.68554688e-03, +-2.44140625e-03, +-2.19726563e-03, +-2.19726563e-03, +-1.95312500e-03, +-1.70898438e-03, +-1.46484375e-03, +-1.46484375e-03, +-1.22070313e-03, +-9.76562500e-04, +-9.76562500e-04, +-7.32421875e-04, +-7.32421875e-04, +-4.88281250e-04, +-4.88281250e-04, +-2.44140625e-04, +-2.44140625e-04, +-2.44140625e-04, +0.00000000e+00, +0.00000000e+00, +0.00000000e+00, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +7.08007813e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.83593750e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.59179688e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.34765625e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +6.10351563e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.85937500e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.61523438e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.37109375e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +5.12695313e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.88281250e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.63867188e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.39453125e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +4.15039063e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.90625000e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.66210938e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.41796875e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +3.17382813e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.92968750e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.68554688e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.44140625e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +2.19726563e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.95312500e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.70898438e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.46484375e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +1.22070313e-03, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +9.76562500e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +7.32421875e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +4.88281250e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04, +2.44140625e-04 diff --git a/examples/dcl/dcl_df22/df22_test.c b/examples/dcl/dcl_df22/df22_test.c new file mode 100644 index 0000000..5e2aeb1 --- /dev/null +++ b/examples/dcl/dcl_df22/df22_test.c @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "df22_test.h" + +void dcl_df22_main(void *args) +{ + /* Open drivers to open the UART driver for console */ + Drivers_open(); + Board_driversOpen(); + + DF22_runTest(df22_controller); + + Board_driversClose(); + Drivers_close(); +} + +int DF22_runTest(DCL_DF22 *ctrl_handle) +{ + // + // Define DFLOG pointers that will be used to access the data buffer + // + DCL_FDLOG inBuf, outBuf, ctlBuf; + DCL_resetDF22(ctrl_handle); + + // + // Initialize Log pointers to the data buffer + // + DCL_initLog(&inBuf, (float32_t*)in_buffer, DATA_LENGTH); + DCL_initLog(&outBuf, (float32_t*)out_buffer, DATA_LENGTH); + DCL_initLog(&ctlBuf, (float32_t*)ctl_buffer, DATA_LENGTH); + DCL_clearLog(&outBuf); + + int i; + for (i = 0; i < NUM_ELEMENTS; i++) + { + // + // ek = Servo error value + // uk = Output control effort + // + float32_t ek,uk; + + // + // Read the input data buffers + // + ek = DCL_readLog(&inBuf); + + // + // Run the controller + // Note: DCL_runDF22() does not have an internal clamp + // Use DCL_runDF22Clamp(ctrl_handle, ek, max, min) + // instead if an internal clamp is needed. + // DCL also provides external clamp DCL_runClamp(*data, max, min) + // + uk = DCL_runDF22(ctrl_handle, ek); + + // + // Write the results to the output buffer + // + DCL_writeLog(&outBuf, uk); + + } + + // + // Reset the log pointer so it starts from the beginning + // + DCL_resetLog(&outBuf); + + // + // Check output against reference output with tolerance + // + int errors = 0; + for (i = 0; i < NUM_ELEMENTS; i++) + { + float32_t output = DCL_readLog(&outBuf); // out_buffer[i] + float32_t expected = DCL_readLog(&ctlBuf); // ctl_buffer[i] + if (!DCL_isZero(output - expected)) + { + errors++; + DebugP_log("FAIL at sample %d, outputs %f, should be %f\n", i, output, expected); + } + } + + DebugP_log("DF22 test produced %d error\n",errors); + + return errors; +} \ No newline at end of file diff --git a/examples/dcl/dcl_df22/df22_test.h b/examples/dcl/dcl_df22/df22_test.h new file mode 100644 index 0000000..bf7946b --- /dev/null +++ b/examples/dcl/dcl_df22/df22_test.h @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef DF22_TEST_H +#define DF22_TEST_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "ti_drivers_config.h" +#include "ti_drivers_open_close.h" +#include "ti_board_open_close.h" +#include + +// +// User configurable values +// +#define DF22_TESTCASE 1 //!< Defines testcase, tests 1-3 is provided +#define DATA_LENGTH 1601 //!< Size of total data inputs +#define NUM_ELEMENTS 400 //!< The number of samples ran, cannot exceed DATA_LENGTH + +void dcl_df22_main(void *args); +int DF22_runTest(DCL_DF22 *ctrl_handle); + +// +// Controller initialization +// +//! Method 1: +//! Direct assignments +//! +DCL_DF22 *df22_controller = &(DCL_DF22) +{ + .b0 = 9.8549f, + .b1 = -19.4165f, + .b2 = 9.5636f, + .a1 = -1.9417f, + .a2 = 0.9417f, + DF22_INT_DEFAULTS // macro for default values of internal attributes +}; + +//! Method 2: +//! Initalizing with input controller parameters +//! +/* +float32_t b0 = 9.8549f, b1 = -19.4165f, b2 = 9.5636f, a1 = -1.9417f, a2 = 0.9417f; +DCL_DF22 *df22_controller = DCL_initDF22asParam(9.8549f,-19.4165f,9.5636f,-1.9417f,0.9417f); // (b0,b1,b2,a1,a2) +*/ + + +// +// Macros for selecting testvector based on DF22_TESTCASE +// +#define _LSTR(x) #x +#define __LSTR(x) _LSTR(x) +#define DF22_IN_DATA(x) __LSTR(data/DF22_in-x.dat) +#define DF22_CTL_DATA(x) __LSTR(data/DF22_ctl-x.dat) + +// +// Allocate data sections and initialize test vector +// +const float32_t __attribute__((weak)) in_buffer[DATA_LENGTH] = +{ +#include DF22_IN_DATA(DF22_TESTCASE) +}; + +const float32_t __attribute__((weak)) ctl_buffer[DATA_LENGTH] = +{ +#include DF22_CTL_DATA(DF22_TESTCASE) +}; + +static float32_t out_buffer[DATA_LENGTH]; + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif diff --git a/examples/dcl/dcl_pi/.project/mcsdk_project.js b/examples/dcl/dcl_pi/.project/mcsdk_project.js new file mode 100644 index 0000000..4c25148 --- /dev/null +++ b/examples/dcl/dcl_pi/.project/mcsdk_project.js @@ -0,0 +1,14 @@ +function getComponentProperty(device) +{ + return require(`./mcsdk_project_${device}`).getComponentProperty(); +}; + +function getComponentBuildProperty(buildOption) +{ + return require(`./mcsdk_project_${buildOption.device}`).getComponentBuildProperty(buildOption); +}; + +module.exports = { + getComponentProperty, + getComponentBuildProperty, +}; diff --git a/examples/dcl/dcl_pi/.project/mcsdk_project_am243x.js b/examples/dcl/dcl_pi/.project/mcsdk_project_am243x.js new file mode 100644 index 0000000..ef06eb5 --- /dev/null +++ b/examples/dcl/dcl_pi/.project/mcsdk_project_am243x.js @@ -0,0 +1,267 @@ +let path = require('path'); + +let device = "am243x"; + +const files = { + common: [ + /* Project Files */ + "pi_test.c", + "main.c", + + ], +}; + +const projectspec_files = { + common: [ + "../../../pi_test.h", + "../../../data", + ] +} + +/* Relative to where the makefile will be generated + * Typically at /// + */ +const filedirs = { + common: [ + "..", /* core_os_combo base */ + "../../..", /* Example base */ + ], +}; + +const libdirs_nortos = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib", + ], +}; + +const libdirs_freertos = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib", + ], +}; + +const includes_nortos_r5f = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/source/dcl" + ], +}; + +const includes_freertos_r5f = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am243x/r5f", + "${MOTOR_CONTROL_SDK_PATH}/source/dcl" + ], +}; + +const includes_nortos_m4f = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/source/dcl" + ], +}; + +const includes_freertos_m4f = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CM4F", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am243x/m4f", + "${MOTOR_CONTROL_SDK_PATH}/source/dcl" + ], +}; + +const libs_nortos_r5f = { + common: [ + "nortos.am243x.r5f.ti-arm-clang.${ConfigName}.lib", + "drivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib", + "board.am243x.r5f.ti-arm-clang.${ConfigName}.lib", + ], +}; + +const libs_freertos_r5f = { + common: [ + "freertos.am243x.r5f.ti-arm-clang.${ConfigName}.lib", + "drivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib", + "board.am243x.r5f.ti-arm-clang.${ConfigName}.lib", + ], +}; + +const libs_nortos_m4f = { + common: [ + "nortos.am243x.m4f.ti-arm-clang.${ConfigName}.lib", + "drivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib", + "board.am243x.m4f.ti-arm-clang.${ConfigName}.lib", + ], +}; + +const libs_freertos_m4f = { + common: [ + "freertos.am243x.m4f.ti-arm-clang.${ConfigName}.lib", + "drivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib", + "board.am243x.m4f.ti-arm-clang.${ConfigName}.lib", + ], +}; + +const lnkfiles_r5f = { + common: [ + "linker.cmd", + "dcl_linker_r5f_am243x_sitara.cmd", + ] +}; + +const lnkfiles_m4f = { + common: [ + "linker.cmd", + "dcl_linker_m4f_am243x_sitara.cmd", + ] +}; + + +const syscfgfile = "../example.syscfg"; + +const readmeDoxygenPageTag = "EXAMPLES_DCL_PI"; + +const templates_nortos_r5f = +[ + { + input: ".project/templates/am243x/common/linker_r5f.cmd.xdt", + output: "linker.cmd", + }, + { + input: ".project/templates/am243x/nortos/main_nortos.c.xdt", + output: "../main.c", + options: { + entryFunction: "dcl_pi_main", + }, + } +]; + +const templates_freertos_r5f = +[ + { + input: ".project/templates/am243x/common/linker_r5f.cmd.xdt", + output: "linker.cmd", + }, + { + input: ".project/templates/am243x/freertos/main_freertos.c.xdt", + output: "../main.c", + options: { + entryFunction: "dcl_pi_main", + }, + } +]; + + +const templates_nortos_m4f = +[ + { + input: ".project/templates/am243x/common/linker_m4f.cmd.xdt", + output: "linker.cmd", + }, + { + input: ".project/templates/am243x/nortos/main_nortos.c.xdt", + output: "../main.c", + options: { + entryFunction: "dcl_pi_main", + }, + } +]; + +const templates_freertos_m4f = +[ + { + input: ".project/templates/am243x/common/linker_m4f.cmd.xdt", + output: "linker.cmd", + }, + { + input: ".project/templates/am243x/freertos/main_freertos.c.xdt", + output: "../main.c", + options: { + entryFunction: "dcl_pi_main", + }, + } +]; + +const buildOptionCombos = [ + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am243x-evm", os: "nortos"}, + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am243x-evm", os: "freertos"}, + { device: device, cpu: "m4fss0-0", cgt: "ti-arm-clang", board: "am243x-evm", os: "nortos"}, + { device: device, cpu: "m4fss0-0", cgt: "ti-arm-clang", board: "am243x-evm", os: "freertos"}, + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am243x-lp", os: "nortos"}, + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am243x-lp", os: "freertos"}, + { device: device, cpu: "m4fss0-0", cgt: "ti-arm-clang", board: "am243x-lp", os: "nortos"}, + { device: device, cpu: "m4fss0-0", cgt: "ti-arm-clang", board: "am243x-lp", os: "freertos"}, +]; + +function getComponentProperty() { + let property = {}; + + property.dirPath = path.resolve(__dirname, ".."); + property.type = "executable"; + property.name = "dcl_pi"; + property.isInternal = false; + property.tirexResourceSubClass = [ "example.gettingstarted" ]; + property.description = "A PI controller example demonstrating the digital control library (DCL)." + property.buildOptionCombos = buildOptionCombos; + + return property; +} + +function getComponentBuildProperty(buildOption) { + let build_property = {}; + + /* The following build property has been modified for dcl usage, + specifically - added different includes vars distinguishing no/free rtos + added different lnkfiles vars distinguishing cpu-specific lnkfiles + */ + build_property.files = files; + build_property.filedirs = filedirs; + build_property.libdirs = libdirs_nortos; + build_property.syscfgfile = syscfgfile; + build_property.readmeDoxygenPageTag = readmeDoxygenPageTag; + build_property.projectspec_files = projectspec_files; + + if(buildOption.cpu.match(/r5f*/)) { + build_property.lnkfiles = lnkfiles_r5f; + if(buildOption.os.match(/freertos*/) ) + { + build_property.includes = includes_freertos_r5f; + build_property.libdirs = libdirs_freertos; + build_property.libs = libs_freertos_r5f; + build_property.templates = templates_freertos_r5f; + } + else + { + build_property.includes = includes_nortos_r5f; + build_property.libs = libs_nortos_r5f; + build_property.templates = templates_nortos_r5f; + } + } + if(buildOption.cpu.match(/m4f*/)) { + build_property.lnkfiles = lnkfiles_m4f; + if(buildOption.os.match(/freertos*/) ) + { + build_property.includes = includes_freertos_m4f; + build_property.libdirs = libdirs_freertos; + build_property.libs = libs_freertos_m4f; + build_property.templates = templates_freertos_m4f; + } + else + { + build_property.includes = includes_nortos_m4f; + build_property.libs = libs_nortos_m4f; + build_property.templates = templates_nortos_m4f; + } + } + + return build_property; +} + +module.exports = { + getComponentProperty, + getComponentBuildProperty, +}; diff --git a/examples/dcl/dcl_pi/.project/mcsdk_project_am263x.js b/examples/dcl/dcl_pi/.project/mcsdk_project_am263x.js new file mode 100644 index 0000000..00d44f8 --- /dev/null +++ b/examples/dcl/dcl_pi/.project/mcsdk_project_am263x.js @@ -0,0 +1,178 @@ +let path = require('path'); + +let device = "am263x"; + +const files = { + common: [ + /* Project Files */ + "pi_test.c", + "main.c", + ], +}; + +const projectspec_files = { + common: [ + "../../../pi_test.h", + "../../../data", + ] +} + +/* Relative to where the makefile will be generated + * Typically at /// + */ +const filedirs = { + common: [ + "..", /* core_os_combo base */ + "../../..", /* Example base */ + ], +}; + +const libdirs_nortos = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib", + ], +}; + +const libdirs_freertos = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib", + ], +}; + +const includes_nortos_r5f = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/source/dcl" + ], +}; + +const includes_freertos_r5f = { + common: [ + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F", + "${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am263x/r5f", + "${MOTOR_CONTROL_SDK_PATH}/source/dcl" + ], +}; + +const libs_nortos_r5f = { + common: [ + "nortos.am263x.r5f.ti-arm-clang.${ConfigName}.lib", + "drivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib", + "board.am263x.r5f.ti-arm-clang.${ConfigName}.lib", + ], +}; + +const libs_freertos_r5f = { + common: [ + "freertos.am263x.r5f.ti-arm-clang.${ConfigName}.lib", + "drivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib", + "board.am263x.r5f.ti-arm-clang.${ConfigName}.lib", + ], +}; + + +const lnkfiles = { + common: [ + "linker.cmd", + "dcl_linker_r5f_am263x_sitara.cmd", + ] +}; + +const syscfgfile = "../example.syscfg"; + +const readmeDoxygenPageTag = "EXAMPLES_DCL_PI"; + +const templates_nortos_r5f = +[ + { + input: ".project/templates/am263x/common/linker_r5f.cmd.xdt", + output: "linker.cmd", + }, + { + input: ".project/templates/am263x/nortos/main_nortos.c.xdt", + output: "../main.c", + options: { + entryFunction: "dcl_pi_main", + }, + } +]; + +const templates_freertos_r5f = +[ + { + input: ".project/templates/am263x/common/linker_r5f.cmd.xdt", + output: "linker.cmd", + }, + { + input: ".project/templates/am263x/freertos/main_freertos.c.xdt", + output: "../main.c", + options: { + entryFunction: "dcl_pi_main", + }, + } +]; + + +const buildOptionCombos = [ + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am263x-cc", os: "nortos"}, + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am263x-cc", os: "freertos"}, + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am263x-lp", os: "nortos"}, + { device: device, cpu: "r5fss0-0", cgt: "ti-arm-clang", board: "am263x-lp", os: "freertos"}, +]; + +function getComponentProperty() { + let property = {}; + + property.dirPath = path.resolve(__dirname, ".."); + property.type = "executable"; + property.name = "dcl_pi"; + property.isInternal = false; + property.tirexResourceSubClass = [ "example.gettingstarted" ]; + property.description = "A PI controller example demonstrating the digital control library (DCL). " + property.buildOptionCombos = buildOptionCombos; + + return property; +} + +function getComponentBuildProperty(buildOption) { + let build_property = {}; + + /* The following build property has been modified for dcl usage, + specifically - added different includes vars distinguishing no/free rtos + added different lnkfiles vars for cpu-specific lnk files + */ + build_property.files = files; + build_property.filedirs = filedirs; + build_property.libdirs = libdirs_nortos; + build_property.lnkfiles = lnkfiles; + build_property.syscfgfile = syscfgfile; + build_property.readmeDoxygenPageTag = readmeDoxygenPageTag; + build_property.projectspec_files = projectspec_files; + + if(buildOption.cpu.match(/r5f*/)) { + if(buildOption.os.match(/freertos*/) ) + { + build_property.includes = includes_freertos_r5f; + build_property.libdirs = libdirs_freertos; + build_property.libs = libs_freertos_r5f; + build_property.templates = templates_freertos_r5f; + } + else + { + build_property.includes = includes_nortos_r5f; + build_property.libs = libs_nortos_r5f; + build_property.templates = templates_nortos_r5f; + } + } + + return build_property; +} + +module.exports = { + getComponentProperty, + getComponentBuildProperty, +}; diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/example.syscfg b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/example.syscfg new file mode 100644 index 0000000..3539198 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/example.syscfg @@ -0,0 +1,57 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALV_beta" --package "ALV" --part "ALV" --context "m4fss0-0" --product "MCU_PLUS_SDK@07.03.00" + * @versions {"data":"2021012919","timestamp":"2021012919","tool":"1.8.0+1785","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const addr_translate = scripting.addModule("/kernel/dpl/addr_translate", {}, false); +const addr_translate1 = addr_translate.addInstance(); +const addr_translate2 = addr_translate.addInstance(); +const addr_translate3 = addr_translate.addInstance(); +const addr_translate4 = addr_translate.addInstance(); +const clock = scripting.addModule("/kernel/dpl/clock"); +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +addr_translate1.$name = "CONFIG_ADDR_TRANSLATE_REGION0"; +addr_translate1.localAddr = 0x80000000; + +addr_translate2.$name = "CONFIG_ADDR_TRANSLATE_REGION1"; +addr_translate2.systemAddr = 0x20000000; +addr_translate2.localAddr = 0xA0000000; + +addr_translate3.$name = "CONFIG_ADDR_TRANSLATE_REGION2"; +addr_translate3.systemAddr = 0x40000000; +addr_translate3.localAddr = 0xC0000000; + +addr_translate4.$name = "CONFIG_ADDR_TRANSLATE_REGION3"; +addr_translate4.systemAddr = 0x60000000; +addr_translate4.localAddr = 0x60000000; + +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART_CONSOLE"; +debug_log.uartLog.MCU_UART.$assign = "MCU_USART0"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.attributes = "Device"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 18; + +/** + * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future + * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to + * re-solve from scratch. + */ +debug_log.uartLog.MCU_UART.RXD.$suggestSolution = "MCU_UART0_RXD"; +debug_log.uartLog.MCU_UART.TXD.$suggestSolution = "MCU_UART0_TXD"; diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/main.c b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/main.c new file mode 100644 index 0000000..f9d06fe --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/main.c @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" +#include "FreeRTOS.h" +#include "task.h" + +#define MAIN_TASK_PRI (configMAX_PRIORITIES-1) + +#define MAIN_TASK_SIZE (16384U/sizeof(configSTACK_DEPTH_TYPE)) +StackType_t gMainTaskStack[MAIN_TASK_SIZE] __attribute__((aligned(32))); + +StaticTask_t gMainTaskObj; +TaskHandle_t gMainTask; + +void dcl_pi_main(void *args); + +void freertos_main(void *args) +{ + dcl_pi_main(NULL); + + vTaskDelete(NULL); +} + + +int main(void) +{ + /* init SOC specific modules */ + System_init(); + Board_init(); + + /* This task is created at highest priority, it should create more tasks and then delete itself */ + gMainTask = xTaskCreateStatic( freertos_main, /* Pointer to the function that implements the task. */ + "freertos_main", /* Text name for the task. This is to facilitate debugging only. */ + MAIN_TASK_SIZE, /* Stack depth in units of StackType_t typically uint32_t on 32b CPUs */ + NULL, /* We are not using the task parameter. */ + MAIN_TASK_PRI, /* task priority, 0 is lowest priority, configMAX_PRIORITIES-1 is highest */ + gMainTaskStack, /* pointer to stack base */ + &gMainTaskObj ); /* pointer to statically allocated task object memory */ + configASSERT(gMainTask != NULL); + + /* Start the scheduler to start the tasks executing. */ + vTaskStartScheduler(); + + /* The following line should never be reached because vTaskStartScheduler() + will only return if there was not enough FreeRTOS heap memory available to + create the Idle and (if configured) Timer tasks. Heap management, and + techniques for trapping heap exhaustion, are described in the book text. */ + DebugP_assertNoLog(0); + + return 0; +} diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd new file mode 100644 index 0000000..abbd5a0 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM M4F_IRAM +#define REG_RAM M4F_IRAM /* M4F_DRAM also works */ + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..53c9b80 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/example.projectspec @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..ca912dd --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/linker.cmd @@ -0,0 +1,62 @@ + +/* make sure below retain is there in your linker command file, it keeps the vector table in the final binary */ +--retain="*(.vectors)" +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 + + +SECTIONS +{ + /* This has the M4F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > M4F_VECS + .text: {} palign(8) > M4F_IRAM /* This is where code resides */ + + .bss: {} palign(8) > M4F_DRAM /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + + .data: {} palign(8) > M4F_DRAM /* This is where initialized globals and static go */ + .rodata: {} palign(8) > M4F_DRAM /* This is where const's go */ + .sysmem: {} palign(8) > M4F_IRAM /* This is where the malloc heap goes */ + .stack: {} palign(8) > M4F_IRAM /* This is where the main() stack goes */ + + /* Sections needed for C++ projects */ + .ARM.exidx: {} palign(8) > M4F_IRAM /* Needed for C++ exception handling */ + .init_array: {} palign(8) > M4F_IRAM /* Contains function pointers called before main */ + .fini_array: {} palign(8) > M4F_IRAM /* Contains function pointers called after main */ + + /* General purpose user shared memory */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > IPC_VRING_MEM +} + +MEMORY +{ + M4F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000200 + M4F_IRAM : ORIGIN = 0x00000200 , LENGTH = 0x0002FE00 + M4F_DRAM : ORIGIN = 0x00030000 , LENGTH = 0x00010000 + + /* shared memories that are used by all cores */ + /* On M4F, + * - By default MSMC RAM is not accessible to M4F, a RAT entry is needed to make it + * accessible on M4F + * - So make sure there is a RAT entry which has a 1:1 mapping from 0x70000000 to 0x70200000 + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + IPC_VRING_MEM: ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile new file mode 100644 index 0000000..dbe5e9b --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile @@ -0,0 +1,303 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_pi.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_pi.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_pi.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_pi.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_pi.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_pi.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_pi.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_pi.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_pi.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + pi_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CM4F \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am243x/m4f \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-m4 \ + -mfloat-abi=hard \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_m4f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lfreertos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + freertos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:m4fss0-0:freertos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:m4fss0-0:freertos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:m4fss0-0:freertos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:m4fss0-0:freertos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:m4fss0-0:freertos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:m4fss0-0:freertos:ti-arm-clang dcl_pi ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context m4fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALV_beta --context m4fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..8215903 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..d22dd7e --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_pi_am243x-evm_m4fss0-0_freertos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/example.syscfg b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/example.syscfg new file mode 100644 index 0000000..3539198 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/example.syscfg @@ -0,0 +1,57 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALV_beta" --package "ALV" --part "ALV" --context "m4fss0-0" --product "MCU_PLUS_SDK@07.03.00" + * @versions {"data":"2021012919","timestamp":"2021012919","tool":"1.8.0+1785","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const addr_translate = scripting.addModule("/kernel/dpl/addr_translate", {}, false); +const addr_translate1 = addr_translate.addInstance(); +const addr_translate2 = addr_translate.addInstance(); +const addr_translate3 = addr_translate.addInstance(); +const addr_translate4 = addr_translate.addInstance(); +const clock = scripting.addModule("/kernel/dpl/clock"); +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +addr_translate1.$name = "CONFIG_ADDR_TRANSLATE_REGION0"; +addr_translate1.localAddr = 0x80000000; + +addr_translate2.$name = "CONFIG_ADDR_TRANSLATE_REGION1"; +addr_translate2.systemAddr = 0x20000000; +addr_translate2.localAddr = 0xA0000000; + +addr_translate3.$name = "CONFIG_ADDR_TRANSLATE_REGION2"; +addr_translate3.systemAddr = 0x40000000; +addr_translate3.localAddr = 0xC0000000; + +addr_translate4.$name = "CONFIG_ADDR_TRANSLATE_REGION3"; +addr_translate4.systemAddr = 0x60000000; +addr_translate4.localAddr = 0x60000000; + +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART_CONSOLE"; +debug_log.uartLog.MCU_UART.$assign = "MCU_USART0"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.attributes = "Device"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 18; + +/** + * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future + * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to + * re-solve from scratch. + */ +debug_log.uartLog.MCU_UART.RXD.$suggestSolution = "MCU_UART0_RXD"; +debug_log.uartLog.MCU_UART.TXD.$suggestSolution = "MCU_UART0_TXD"; diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/main.c b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/main.c new file mode 100644 index 0000000..358587c --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/main.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" + +void dcl_pi_main(void *args); + +int main(void) +{ + System_init(); + Board_init(); + + dcl_pi_main(NULL); + + Board_deinit(); + System_deinit(); + + return 0; +} diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd new file mode 100644 index 0000000..abbd5a0 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM M4F_IRAM +#define REG_RAM M4F_IRAM /* M4F_DRAM also works */ + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..079cb85 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/example.projectspec @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..ca912dd --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/linker.cmd @@ -0,0 +1,62 @@ + +/* make sure below retain is there in your linker command file, it keeps the vector table in the final binary */ +--retain="*(.vectors)" +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 + + +SECTIONS +{ + /* This has the M4F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > M4F_VECS + .text: {} palign(8) > M4F_IRAM /* This is where code resides */ + + .bss: {} palign(8) > M4F_DRAM /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + + .data: {} palign(8) > M4F_DRAM /* This is where initialized globals and static go */ + .rodata: {} palign(8) > M4F_DRAM /* This is where const's go */ + .sysmem: {} palign(8) > M4F_IRAM /* This is where the malloc heap goes */ + .stack: {} palign(8) > M4F_IRAM /* This is where the main() stack goes */ + + /* Sections needed for C++ projects */ + .ARM.exidx: {} palign(8) > M4F_IRAM /* Needed for C++ exception handling */ + .init_array: {} palign(8) > M4F_IRAM /* Contains function pointers called before main */ + .fini_array: {} palign(8) > M4F_IRAM /* Contains function pointers called after main */ + + /* General purpose user shared memory */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > IPC_VRING_MEM +} + +MEMORY +{ + M4F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000200 + M4F_IRAM : ORIGIN = 0x00000200 , LENGTH = 0x0002FE00 + M4F_DRAM : ORIGIN = 0x00030000 , LENGTH = 0x00010000 + + /* shared memories that are used by all cores */ + /* On M4F, + * - By default MSMC RAM is not accessible to M4F, a RAT entry is needed to make it + * accessible on M4F + * - So make sure there is a RAT entry which has a 1:1 mapping from 0x70000000 to 0x70200000 + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + IPC_VRING_MEM: ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile new file mode 100644 index 0000000..19c1587 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile @@ -0,0 +1,300 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_pi.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_pi.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_pi.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_pi.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_pi.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_pi.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_pi.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_pi.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_pi.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + pi_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-m4 \ + -mfloat-abi=hard \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_m4f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lnortos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + nortos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:m4fss0-0:nortos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:m4fss0-0:nortos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:m4fss0-0:nortos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:m4fss0-0:nortos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:m4fss0-0:nortos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:m4fss0-0:nortos:ti-arm-clang dcl_pi ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context m4fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALV_beta --context m4fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..653f9a5 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..add77c7 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_pi_am243x-evm_m4fss0-0_nortos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/example.syscfg b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/example.syscfg new file mode 100644 index 0000000..7876a6b --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/example.syscfg @@ -0,0 +1,62 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALV_beta" --package "ALV" --part "ALV" --context "r5fss0-0" --product "MCU_PLUS_SDK@07.03.00" + * @versions {"data":"2021012919","timestamp":"2021012919","tool":"1.8.0+1785","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); +const mpu_armv76 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART_CONSOLE"; +debug_log.uartLog.UART.$assign = "USART0"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x41010000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x60000000; +mpu_armv75.size = 28; +mpu_armv75.accessPermissions = "Supervisor RD, User RD"; + +mpu_armv76.$name = "CONFIG_MPU_REGION5"; +mpu_armv76.baseAddr = 0x80000000; +mpu_armv76.size = 31; + +/** + * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future + * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to + * re-solve from scratch. + */ +debug_log.uartLog.UART.RXD.$suggestSolution = "UART0_RXD"; +debug_log.uartLog.UART.TXD.$suggestSolution = "UART0_TXD"; diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/main.c b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/main.c new file mode 100644 index 0000000..f9d06fe --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/main.c @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" +#include "FreeRTOS.h" +#include "task.h" + +#define MAIN_TASK_PRI (configMAX_PRIORITIES-1) + +#define MAIN_TASK_SIZE (16384U/sizeof(configSTACK_DEPTH_TYPE)) +StackType_t gMainTaskStack[MAIN_TASK_SIZE] __attribute__((aligned(32))); + +StaticTask_t gMainTaskObj; +TaskHandle_t gMainTask; + +void dcl_pi_main(void *args); + +void freertos_main(void *args) +{ + dcl_pi_main(NULL); + + vTaskDelete(NULL); +} + + +int main(void) +{ + /* init SOC specific modules */ + System_init(); + Board_init(); + + /* This task is created at highest priority, it should create more tasks and then delete itself */ + gMainTask = xTaskCreateStatic( freertos_main, /* Pointer to the function that implements the task. */ + "freertos_main", /* Text name for the task. This is to facilitate debugging only. */ + MAIN_TASK_SIZE, /* Stack depth in units of StackType_t typically uint32_t on 32b CPUs */ + NULL, /* We are not using the task parameter. */ + MAIN_TASK_PRI, /* task priority, 0 is lowest priority, configMAX_PRIORITIES-1 is highest */ + gMainTaskStack, /* pointer to stack base */ + &gMainTaskObj ); /* pointer to statically allocated task object memory */ + configASSERT(gMainTask != NULL); + + /* Start the scheduler to start the tasks executing. */ + vTaskStartScheduler(); + + /* The following line should never be reached because vTaskStartScheduler() + will only return if there was not enough FreeRTOS heap memory available to + create the Idle and (if configured) Timer tasks. Heap management, and + techniques for trapping heap exhaustion, are described in the book text. */ + DebugP_assertNoLog(0); + + return 0; +} diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd new file mode 100644 index 0000000..9eca059 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM MSRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..e026473 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/example.projectspec @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..69640f4 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/linker.cmd @@ -0,0 +1,148 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is disabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > MSRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > MSRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .data: {} palign(8) /* This is where initialized globals and static go */ + } > MSRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > MSRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > MSRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > MSRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* General purpose non cacheable memory, used in some examples */ + .bss.nocache (NOLOAD) : {} > NON_CACHE_MEM +} + +/* +NOTE: Below memory is reserved for DMSC usage + - During Boot till security handoff is complete + 0x701E0000 - 0x701FFFFF (128KB) + - After "Security Handoff" is complete (i.e at run time) + 0x701F4000 - 0x701FFFFF (48KB) + + Security handoff is complete when this message is sent to the DMSC, + TISCI_MSG_SEC_HANDOVER + + This should be sent once all cores are loaded and all application + specific firewall calls are setup. +*/ + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB0 : ORIGIN = 0x41010000 , LENGTH = 0x00008000 + + /* memory segment used to hold CPU specific non-cached data, MAKE to add a MPU entry to mark this as non-cached */ + NON_CACHE_MEM : ORIGIN = 0x70060000 , LENGTH = 0x8000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + MSRAM : ORIGIN = 0x70080000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + /* shared memory segments */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile new file mode 100644 index 0000000..d56c6a4 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile @@ -0,0 +1,305 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_pi.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_pi.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_pi.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_pi.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_pi.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_pi.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_pi.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_pi.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_pi.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + pi_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am243x/r5f \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lfreertos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + freertos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:r5fss0-0:freertos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:r5fss0-0:freertos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:r5fss0-0:freertos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:r5fss0-0:freertos:ti-arm-clang dcl_pi ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALV_beta --context r5fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..8666cfd --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..8c03776 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_pi_am243x-evm_r5fss0-0_freertos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/example.syscfg b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/example.syscfg new file mode 100644 index 0000000..7876a6b --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/example.syscfg @@ -0,0 +1,62 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALV_beta" --package "ALV" --part "ALV" --context "r5fss0-0" --product "MCU_PLUS_SDK@07.03.00" + * @versions {"data":"2021012919","timestamp":"2021012919","tool":"1.8.0+1785","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); +const mpu_armv76 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART_CONSOLE"; +debug_log.uartLog.UART.$assign = "USART0"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x41010000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x60000000; +mpu_armv75.size = 28; +mpu_armv75.accessPermissions = "Supervisor RD, User RD"; + +mpu_armv76.$name = "CONFIG_MPU_REGION5"; +mpu_armv76.baseAddr = 0x80000000; +mpu_armv76.size = 31; + +/** + * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future + * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to + * re-solve from scratch. + */ +debug_log.uartLog.UART.RXD.$suggestSolution = "UART0_RXD"; +debug_log.uartLog.UART.TXD.$suggestSolution = "UART0_TXD"; diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/main.c b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/main.c new file mode 100644 index 0000000..358587c --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/main.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" + +void dcl_pi_main(void *args); + +int main(void) +{ + System_init(); + Board_init(); + + dcl_pi_main(NULL); + + Board_deinit(); + System_deinit(); + + return 0; +} diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd new file mode 100644 index 0000000..9eca059 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM MSRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..b6125c1 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/example.projectspec @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..69640f4 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/linker.cmd @@ -0,0 +1,148 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is disabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > MSRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > MSRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .data: {} palign(8) /* This is where initialized globals and static go */ + } > MSRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > MSRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > MSRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > MSRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* General purpose non cacheable memory, used in some examples */ + .bss.nocache (NOLOAD) : {} > NON_CACHE_MEM +} + +/* +NOTE: Below memory is reserved for DMSC usage + - During Boot till security handoff is complete + 0x701E0000 - 0x701FFFFF (128KB) + - After "Security Handoff" is complete (i.e at run time) + 0x701F4000 - 0x701FFFFF (48KB) + + Security handoff is complete when this message is sent to the DMSC, + TISCI_MSG_SEC_HANDOVER + + This should be sent once all cores are loaded and all application + specific firewall calls are setup. +*/ + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB0 : ORIGIN = 0x41010000 , LENGTH = 0x00008000 + + /* memory segment used to hold CPU specific non-cached data, MAKE to add a MPU entry to mark this as non-cached */ + NON_CACHE_MEM : ORIGIN = 0x70060000 , LENGTH = 0x8000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + MSRAM : ORIGIN = 0x70080000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + /* shared memory segments */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile new file mode 100644 index 0000000..4c05b50 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile @@ -0,0 +1,302 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_pi.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_pi.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_pi.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_pi.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_pi.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_pi.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_pi.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_pi.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_pi.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + pi_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lnortos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + nortos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:r5fss0-0:nortos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:r5fss0-0:nortos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:r5fss0-0:nortos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:r5fss0-0:nortos:ti-arm-clang dcl_pi ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALV_beta --context r5fss0-0 --part ALV --package ALV --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..81886bf --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..e190412 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_pi_am243x-evm_r5fss0-0_nortos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/example.syscfg b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/example.syscfg new file mode 100644 index 0000000..e5282a5 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/example.syscfg @@ -0,0 +1,45 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALX_beta" --package "ALX" --part "ALX" --context "m4fss0-0" --product "MCU_PLUS_SDK@07.03.01" + * @versions {"tool":"1.9.0+2015","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const addr_translate = scripting.addModule("/kernel/dpl/addr_translate", {}, false); +const addr_translate1 = addr_translate.addInstance(); +const addr_translate2 = addr_translate.addInstance(); +const addr_translate3 = addr_translate.addInstance(); +const addr_translate4 = addr_translate.addInstance(); +const clock = scripting.addModule("/kernel/dpl/clock"); +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +addr_translate1.$name = "CONFIG_ADDR_TRANSLATE_REGION0"; +addr_translate1.localAddr = 0x80000000; + +addr_translate2.$name = "CONFIG_ADDR_TRANSLATE_REGION1"; +addr_translate2.systemAddr = 0x20000000; +addr_translate2.localAddr = 0xA0000000; + +addr_translate3.$name = "CONFIG_ADDR_TRANSLATE_REGION2"; +addr_translate3.systemAddr = 0x40000000; +addr_translate3.localAddr = 0xC0000000; + +addr_translate4.$name = "CONFIG_ADDR_TRANSLATE_REGION3"; +addr_translate4.systemAddr = 0x60000000; +addr_translate4.localAddr = 0x60000000; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.attributes = "Device"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 18; diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/main.c b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/main.c new file mode 100644 index 0000000..f9d06fe --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/main.c @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" +#include "FreeRTOS.h" +#include "task.h" + +#define MAIN_TASK_PRI (configMAX_PRIORITIES-1) + +#define MAIN_TASK_SIZE (16384U/sizeof(configSTACK_DEPTH_TYPE)) +StackType_t gMainTaskStack[MAIN_TASK_SIZE] __attribute__((aligned(32))); + +StaticTask_t gMainTaskObj; +TaskHandle_t gMainTask; + +void dcl_pi_main(void *args); + +void freertos_main(void *args) +{ + dcl_pi_main(NULL); + + vTaskDelete(NULL); +} + + +int main(void) +{ + /* init SOC specific modules */ + System_init(); + Board_init(); + + /* This task is created at highest priority, it should create more tasks and then delete itself */ + gMainTask = xTaskCreateStatic( freertos_main, /* Pointer to the function that implements the task. */ + "freertos_main", /* Text name for the task. This is to facilitate debugging only. */ + MAIN_TASK_SIZE, /* Stack depth in units of StackType_t typically uint32_t on 32b CPUs */ + NULL, /* We are not using the task parameter. */ + MAIN_TASK_PRI, /* task priority, 0 is lowest priority, configMAX_PRIORITIES-1 is highest */ + gMainTaskStack, /* pointer to stack base */ + &gMainTaskObj ); /* pointer to statically allocated task object memory */ + configASSERT(gMainTask != NULL); + + /* Start the scheduler to start the tasks executing. */ + vTaskStartScheduler(); + + /* The following line should never be reached because vTaskStartScheduler() + will only return if there was not enough FreeRTOS heap memory available to + create the Idle and (if configured) Timer tasks. Heap management, and + techniques for trapping heap exhaustion, are described in the book text. */ + DebugP_assertNoLog(0); + + return 0; +} diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd new file mode 100644 index 0000000..abbd5a0 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM M4F_IRAM +#define REG_RAM M4F_IRAM /* M4F_DRAM also works */ + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..259bff3 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/example.projectspec @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..ca912dd --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/linker.cmd @@ -0,0 +1,62 @@ + +/* make sure below retain is there in your linker command file, it keeps the vector table in the final binary */ +--retain="*(.vectors)" +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 + + +SECTIONS +{ + /* This has the M4F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > M4F_VECS + .text: {} palign(8) > M4F_IRAM /* This is where code resides */ + + .bss: {} palign(8) > M4F_DRAM /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + + .data: {} palign(8) > M4F_DRAM /* This is where initialized globals and static go */ + .rodata: {} palign(8) > M4F_DRAM /* This is where const's go */ + .sysmem: {} palign(8) > M4F_IRAM /* This is where the malloc heap goes */ + .stack: {} palign(8) > M4F_IRAM /* This is where the main() stack goes */ + + /* Sections needed for C++ projects */ + .ARM.exidx: {} palign(8) > M4F_IRAM /* Needed for C++ exception handling */ + .init_array: {} palign(8) > M4F_IRAM /* Contains function pointers called before main */ + .fini_array: {} palign(8) > M4F_IRAM /* Contains function pointers called after main */ + + /* General purpose user shared memory */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > IPC_VRING_MEM +} + +MEMORY +{ + M4F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000200 + M4F_IRAM : ORIGIN = 0x00000200 , LENGTH = 0x0002FE00 + M4F_DRAM : ORIGIN = 0x00030000 , LENGTH = 0x00010000 + + /* shared memories that are used by all cores */ + /* On M4F, + * - By default MSMC RAM is not accessible to M4F, a RAT entry is needed to make it + * accessible on M4F + * - So make sure there is a RAT entry which has a 1:1 mapping from 0x70000000 to 0x70200000 + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + IPC_VRING_MEM: ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile new file mode 100644 index 0000000..da401c6 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile @@ -0,0 +1,303 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_pi.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_pi.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_pi.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_pi.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_pi.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_pi.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_pi.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_pi.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_pi.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + pi_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CM4F \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am243x/m4f \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-m4 \ + -mfloat-abi=hard \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_m4f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lfreertos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + freertos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:m4fss0-0:freertos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:m4fss0-0:freertos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:m4fss0-0:freertos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:m4fss0-0:freertos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:m4fss0-0:freertos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:m4fss0-0:freertos:ti-arm-clang dcl_pi ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context m4fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALX_beta --context m4fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..8215903 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:m4fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..0650974 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_pi_am243x-lp_m4fss0-0_freertos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/example.syscfg b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/example.syscfg new file mode 100644 index 0000000..e5282a5 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/example.syscfg @@ -0,0 +1,45 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALX_beta" --package "ALX" --part "ALX" --context "m4fss0-0" --product "MCU_PLUS_SDK@07.03.01" + * @versions {"tool":"1.9.0+2015","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const addr_translate = scripting.addModule("/kernel/dpl/addr_translate", {}, false); +const addr_translate1 = addr_translate.addInstance(); +const addr_translate2 = addr_translate.addInstance(); +const addr_translate3 = addr_translate.addInstance(); +const addr_translate4 = addr_translate.addInstance(); +const clock = scripting.addModule("/kernel/dpl/clock"); +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +addr_translate1.$name = "CONFIG_ADDR_TRANSLATE_REGION0"; +addr_translate1.localAddr = 0x80000000; + +addr_translate2.$name = "CONFIG_ADDR_TRANSLATE_REGION1"; +addr_translate2.systemAddr = 0x20000000; +addr_translate2.localAddr = 0xA0000000; + +addr_translate3.$name = "CONFIG_ADDR_TRANSLATE_REGION2"; +addr_translate3.systemAddr = 0x40000000; +addr_translate3.localAddr = 0xC0000000; + +addr_translate4.$name = "CONFIG_ADDR_TRANSLATE_REGION3"; +addr_translate4.systemAddr = 0x60000000; +addr_translate4.localAddr = 0x60000000; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.attributes = "Device"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 18; diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/main.c b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/main.c new file mode 100644 index 0000000..358587c --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/main.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" + +void dcl_pi_main(void *args); + +int main(void) +{ + System_init(); + Board_init(); + + dcl_pi_main(NULL); + + Board_deinit(); + System_deinit(); + + return 0; +} diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd new file mode 100644 index 0000000..abbd5a0 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/dcl_linker_m4f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM M4F_IRAM +#define REG_RAM M4F_IRAM /* M4F_DRAM also works */ + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..2ddc6ea --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/example.projectspec @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..ca912dd --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/linker.cmd @@ -0,0 +1,62 @@ + +/* make sure below retain is there in your linker command file, it keeps the vector table in the final binary */ +--retain="*(.vectors)" +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 + + +SECTIONS +{ + /* This has the M4F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > M4F_VECS + .text: {} palign(8) > M4F_IRAM /* This is where code resides */ + + .bss: {} palign(8) > M4F_DRAM /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + + .data: {} palign(8) > M4F_DRAM /* This is where initialized globals and static go */ + .rodata: {} palign(8) > M4F_DRAM /* This is where const's go */ + .sysmem: {} palign(8) > M4F_IRAM /* This is where the malloc heap goes */ + .stack: {} palign(8) > M4F_IRAM /* This is where the main() stack goes */ + + /* Sections needed for C++ projects */ + .ARM.exidx: {} palign(8) > M4F_IRAM /* Needed for C++ exception handling */ + .init_array: {} palign(8) > M4F_IRAM /* Contains function pointers called before main */ + .fini_array: {} palign(8) > M4F_IRAM /* Contains function pointers called after main */ + + /* General purpose user shared memory */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > IPC_VRING_MEM +} + +MEMORY +{ + M4F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000200 + M4F_IRAM : ORIGIN = 0x00000200 , LENGTH = 0x0002FE00 + M4F_DRAM : ORIGIN = 0x00030000 , LENGTH = 0x00010000 + + /* shared memories that are used by all cores */ + /* On M4F, + * - By default MSMC RAM is not accessible to M4F, a RAT entry is needed to make it + * accessible on M4F + * - So make sure there is a RAT entry which has a 1:1 mapping from 0x70000000 to 0x70200000 + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + IPC_VRING_MEM: ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile new file mode 100644 index 0000000..27f95d8 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile @@ -0,0 +1,300 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_pi.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_pi.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_pi.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_pi.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_pi.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_pi.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_pi.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_pi.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_pi.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + pi_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-m4 \ + -mfloat-abi=hard \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_m4f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lnortos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + nortos.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.m4f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:m4fss0-0:nortos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:m4fss0-0:nortos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:m4fss0-0:nortos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:m4fss0-0:nortos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:m4fss0-0:nortos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:m4fss0-0:nortos:ti-arm-clang dcl_pi ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context m4fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALX_beta --context m4fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..653f9a5 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_m4fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:m4fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..07ef5d1 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_pi_am243x-lp_m4fss0-0_nortos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/example.syscfg b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/example.syscfg new file mode 100644 index 0000000..0e4bb27 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/example.syscfg @@ -0,0 +1,57 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALX_beta" --package "ALX" --part "ALX" --context "r5fss0-0" --product "MCU_PLUS_SDK@07.03.01" + * @versions {"data":"2021040816","timestamp":"2021040816","tool":"1.8.1+1900","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART_CONSOLE"; +debug_log.uartLog.UART.$assign = "USART0"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x41010000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x60000000; +mpu_armv75.size = 28; +mpu_armv75.accessPermissions = "Supervisor RD, User RD"; + +/** + * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future + * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to + * re-solve from scratch. + */ +debug_log.uartLog.UART.RXD.$suggestSolution = "B10"; +debug_log.uartLog.UART.TXD.$suggestSolution = "B11"; diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/main.c b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/main.c new file mode 100644 index 0000000..f9d06fe --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/main.c @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" +#include "FreeRTOS.h" +#include "task.h" + +#define MAIN_TASK_PRI (configMAX_PRIORITIES-1) + +#define MAIN_TASK_SIZE (16384U/sizeof(configSTACK_DEPTH_TYPE)) +StackType_t gMainTaskStack[MAIN_TASK_SIZE] __attribute__((aligned(32))); + +StaticTask_t gMainTaskObj; +TaskHandle_t gMainTask; + +void dcl_pi_main(void *args); + +void freertos_main(void *args) +{ + dcl_pi_main(NULL); + + vTaskDelete(NULL); +} + + +int main(void) +{ + /* init SOC specific modules */ + System_init(); + Board_init(); + + /* This task is created at highest priority, it should create more tasks and then delete itself */ + gMainTask = xTaskCreateStatic( freertos_main, /* Pointer to the function that implements the task. */ + "freertos_main", /* Text name for the task. This is to facilitate debugging only. */ + MAIN_TASK_SIZE, /* Stack depth in units of StackType_t typically uint32_t on 32b CPUs */ + NULL, /* We are not using the task parameter. */ + MAIN_TASK_PRI, /* task priority, 0 is lowest priority, configMAX_PRIORITIES-1 is highest */ + gMainTaskStack, /* pointer to stack base */ + &gMainTaskObj ); /* pointer to statically allocated task object memory */ + configASSERT(gMainTask != NULL); + + /* Start the scheduler to start the tasks executing. */ + vTaskStartScheduler(); + + /* The following line should never be reached because vTaskStartScheduler() + will only return if there was not enough FreeRTOS heap memory available to + create the Idle and (if configured) Timer tasks. Heap management, and + techniques for trapping heap exhaustion, are described in the book text. */ + DebugP_assertNoLog(0); + + return 0; +} diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd new file mode 100644 index 0000000..9eca059 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM MSRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..6f1eb4f --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..69640f4 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd @@ -0,0 +1,148 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is disabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > MSRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > MSRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .data: {} palign(8) /* This is where initialized globals and static go */ + } > MSRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > MSRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > MSRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > MSRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* General purpose non cacheable memory, used in some examples */ + .bss.nocache (NOLOAD) : {} > NON_CACHE_MEM +} + +/* +NOTE: Below memory is reserved for DMSC usage + - During Boot till security handoff is complete + 0x701E0000 - 0x701FFFFF (128KB) + - After "Security Handoff" is complete (i.e at run time) + 0x701F4000 - 0x701FFFFF (48KB) + + Security handoff is complete when this message is sent to the DMSC, + TISCI_MSG_SEC_HANDOVER + + This should be sent once all cores are loaded and all application + specific firewall calls are setup. +*/ + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB0 : ORIGIN = 0x41010000 , LENGTH = 0x00008000 + + /* memory segment used to hold CPU specific non-cached data, MAKE to add a MPU entry to mark this as non-cached */ + NON_CACHE_MEM : ORIGIN = 0x70060000 , LENGTH = 0x8000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + MSRAM : ORIGIN = 0x70080000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + /* shared memory segments */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile new file mode 100644 index 0000000..0510fb5 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile @@ -0,0 +1,305 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_pi.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_pi.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_pi.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_pi.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_pi.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_pi.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_pi.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_pi.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_pi.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + pi_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am243x/r5f \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lfreertos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + freertos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:r5fss0-0:freertos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:r5fss0-0:freertos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:r5fss0-0:freertos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:r5fss0-0:freertos:ti-arm-clang dcl_pi ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALX_beta --context r5fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..8666cfd --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..3de906e --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_pi_am243x-lp_r5fss0-0_freertos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/example.syscfg b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/example.syscfg new file mode 100644 index 0000000..0e4bb27 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/example.syscfg @@ -0,0 +1,57 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM243x_ALX_beta" --package "ALX" --part "ALX" --context "r5fss0-0" --product "MCU_PLUS_SDK@07.03.01" + * @versions {"data":"2021040816","timestamp":"2021040816","tool":"1.8.1+1900","templates":null} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART_CONSOLE"; +debug_log.uartLog.UART.$assign = "USART0"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x41010000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x60000000; +mpu_armv75.size = 28; +mpu_armv75.accessPermissions = "Supervisor RD, User RD"; + +/** + * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future + * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to + * re-solve from scratch. + */ +debug_log.uartLog.UART.RXD.$suggestSolution = "B10"; +debug_log.uartLog.UART.TXD.$suggestSolution = "B11"; diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/main.c b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/main.c new file mode 100644 index 0000000..358587c --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/main.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2018-2021 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" + +void dcl_pi_main(void *args); + +int main(void) +{ + System_init(); + Board_init(); + + dcl_pi_main(NULL); + + Board_deinit(); + System_deinit(); + + return 0; +} diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd new file mode 100644 index 0000000..9eca059 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am243x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM MSRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..cb7d322 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..69640f4 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd @@ -0,0 +1,148 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is disabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > MSRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > MSRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .data: {} palign(8) /* This is where initialized globals and static go */ + } > MSRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > MSRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > MSRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > MSRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* General purpose non cacheable memory, used in some examples */ + .bss.nocache (NOLOAD) : {} > NON_CACHE_MEM +} + +/* +NOTE: Below memory is reserved for DMSC usage + - During Boot till security handoff is complete + 0x701E0000 - 0x701FFFFF (128KB) + - After "Security Handoff" is complete (i.e at run time) + 0x701F4000 - 0x701FFFFF (48KB) + + Security handoff is complete when this message is sent to the DMSC, + TISCI_MSG_SEC_HANDOVER + + This should be sent once all cores are loaded and all application + specific firewall calls are setup. +*/ + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB0 : ORIGIN = 0x41010000 , LENGTH = 0x00008000 + + /* memory segment used to hold CPU specific non-cached data, MAKE to add a MPU entry to mark this as non-cached */ + NON_CACHE_MEM : ORIGIN = 0x70060000 , LENGTH = 0x8000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + MSRAM : ORIGIN = 0x70080000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + /* shared memory segments */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x180 + LOG_SHM_MEM : ORIGIN = 0x701D0000 + 0x180, LENGTH = 0x00004000 - 0x180 + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x0000C000 +} diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile new file mode 100644 index 0000000..a580f30 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile @@ -0,0 +1,302 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_pi.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_pi.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_pi.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_pi.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_pi.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_pi.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_pi.$(PROFILE).rprc_tmp +BOOTIMAGE_NAME_HS:=dcl_pi.$(PROFILE).appimage.hs +BOOTIMAGE_NAME_HS_FS:=dcl_pi.$(PROFILE).appimage.hs_fs +TARGETS := $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) + TARGETS += $(BOOTIMAGE_NAME_HS) +endif + +FILES_common := \ + pi_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM243X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am243x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lnortos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + nortos.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am243x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am243x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am243x:r5fss0-0:nortos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(TARGETS) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am243x:r5fss0-0:nortos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am243x:r5fss0-0:nortos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am243x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am243x:r5fss0-0:nortos:ti-arm-clang dcl_pi ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM243x_ALX_beta --context r5fss0-0 --part ALX --package ALX --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CERT_KEY=$(APP_SIGNING_KEY) + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!! + @echo . + +$(BOOTIMAGE_NAME_HS): $(BOOTIMAGE_NAME) +ifeq ($(DEVICE_TYPE), HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS) +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS) + $(RM) $(BOOTIMAGE_NAME)-enc +endif + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS) Done !!! + @echo . +endif +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..81886bf --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,106 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 4 +BOOTIMAGE_CORE_ID_r5fss0-1 = 5 +BOOTIMAGE_CORE_ID_r5fss1-0 = 6 +BOOTIMAGE_CORE_ID_r5fss1-1 = 7 +BOOTIMAGE_CORE_ID_m4fss0-0 = 14 +SBL_RUN_ADDRESS=0x70000000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js +APP_IMAGE_SIGN_CMD = $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/appimage_x509_cert_gen.py + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) +# Sign the appimage for HS-FS using appimage signing script + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs_fs +ifeq ($(DEVICE_TYPE),HS) +# Sign the appimage using appimage signing script +ifeq ($(ENC_ENABLED),no) + @echo Boot image signing: Encryption is disabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME).hs +else + @echo Boot image signing: Encryption is enabled. + $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME).hs + $(RM) $(BOOTIMAGE_NAME)-enc +endif +endif + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +ifeq ($(DEVICE_TYPE),HS) + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs Done !!! + @echo . +else + @echo Boot image: am243x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME).hs_fs Done !!! + @echo . +endif +endif diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..f5cdc5f --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_pi_am243x-lp_r5fss0-0_nortos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/example.syscfg b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/example.syscfg new file mode 100644 index 0000000..81572a9 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/example.syscfg @@ -0,0 +1,59 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM263x_beta" --package "ZCZ" --part "AM263x" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM263x@08.06.00" + * @versions {"tool":"1.14.0+2667"} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); +const mpu_armv76 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART0"; +debug_log.uartLog.UART.$assign = "UART0"; +debug_log.uartLog.UART.RXD.$assign = "ball.A7"; +debug_log.uartLog.UART.TXD.$assign = "ball.A6"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x80000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x50D00000; +mpu_armv75.size = 14; +mpu_armv75.allowExecute = false; +mpu_armv75.attributes = "Device"; + +mpu_armv76.$name = "CONFIG_MPU_REGION5"; +mpu_armv76.baseAddr = 0x72000000; +mpu_armv76.size = 14; +mpu_armv76.allowExecute = false; +mpu_armv76.attributes = "NonCached"; diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/main.c b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/main.c new file mode 100644 index 0000000..d109dd6 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/main.c @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2018-2022 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" +#include "FreeRTOS.h" +#include "task.h" + +#define MAIN_TASK_PRI (configMAX_PRIORITIES-1) + +#define MAIN_TASK_SIZE (16384U/sizeof(configSTACK_DEPTH_TYPE)) +StackType_t gMainTaskStack[MAIN_TASK_SIZE] __attribute__((aligned(32))); + +StaticTask_t gMainTaskObj; +TaskHandle_t gMainTask; + +void dcl_pi_main(void *args); + +void freertos_main(void *args) +{ + dcl_pi_main(NULL); + + vTaskDelete(NULL); +} + + +int main(void) +{ + /* init SOC specific modules */ + System_init(); + Board_init(); + + /* This task is created at highest priority, it should create more tasks and then delete itself */ + gMainTask = xTaskCreateStatic( freertos_main, /* Pointer to the function that implements the task. */ + "freertos_main", /* Text name for the task. This is to facilitate debugging only. */ + MAIN_TASK_SIZE, /* Stack depth in units of StackType_t typically uint32_t on 32b CPUs */ + NULL, /* We are not using the task parameter. */ + MAIN_TASK_PRI, /* task priority, 0 is lowest priority, configMAX_PRIORITIES-1 is highest */ + gMainTaskStack, /* pointer to stack base */ + &gMainTaskObj ); /* pointer to statically allocated task object memory */ + configASSERT(gMainTask != NULL); + + /* Start the scheduler to start the tasks executing. */ + vTaskStartScheduler(); + + /* The following line should never be reached because vTaskStartScheduler() + will only return if there was not enough FreeRTOS heap memory available to + create the Idle and (if configured) Timer tasks. Heap management, and + techniques for trapping heap exhaustion, are described in the book text. */ + DebugP_assertNoLog(0); + + return 0; +} diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd new file mode 100644 index 0000000..266ff50 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM OCRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..6889965 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/example.projectspec @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..7a34f5e --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/linker.cmd @@ -0,0 +1,137 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is enabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > OCRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > OCRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + + .data: {} palign(8) /* This is where initialized globals and static go */ + } > OCRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > OCRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > OCRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > OCRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* this is used only when Secure IPC is enabled */ + .bss.sipc_hsm_queue_mem (NOLOAD) : {} > MAILBOX_HSM + .bss.sipc_r5f_queue_mem (NOLOAD) : {} > MAILBOX_R5F +} + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB : ORIGIN = 0x00080000 , LENGTH = 0x00008000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + OCRAM : ORIGIN = 0x70040000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + + /* shared memories that are used by RTOS/NORTOS cores */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x00004000 + LOG_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x00004000 + /* MSS mailbox memory is used as shared memory, we dont use bottom 32*12 bytes, since its used as SW queue by ipc_notify */ + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x72000000, LENGTH = 0x3E80 + MAILBOX_HSM: ORIGIN = 0x44000000 , LENGTH = 0x000003CE + MAILBOX_R5F: ORIGIN = 0x44000400 , LENGTH = 0x000003CE + } diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile new file mode 100644 index 0000000..4a61b80 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile @@ -0,0 +1,276 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_pi.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_pi.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_pi.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_pi.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_pi.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_pi.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_pi.$(PROFILE).rprc_tmp + +FILES_common := \ + pi_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am263x/r5f \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM263X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am263x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lfreertos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + freertos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am263x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am263x:r5fss0-0:freertos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(BOOTIMAGE_NAME) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am263x:r5fss0-0:freertos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am263x:r5fss0-0:freertos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am263x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am263x:r5fss0-0:freertos:ti-arm-clang dcl_pi ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM263x_beta --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..e0799fb --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,84 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +endif diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..126f029 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_pi_am263x-cc_r5fss0-0_freertos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/example.syscfg b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/example.syscfg new file mode 100644 index 0000000..81572a9 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/example.syscfg @@ -0,0 +1,59 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM263x_beta" --package "ZCZ" --part "AM263x" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM263x@08.06.00" + * @versions {"tool":"1.14.0+2667"} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); +const mpu_armv76 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART0"; +debug_log.uartLog.UART.$assign = "UART0"; +debug_log.uartLog.UART.RXD.$assign = "ball.A7"; +debug_log.uartLog.UART.TXD.$assign = "ball.A6"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x80000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x50D00000; +mpu_armv75.size = 14; +mpu_armv75.allowExecute = false; +mpu_armv75.attributes = "Device"; + +mpu_armv76.$name = "CONFIG_MPU_REGION5"; +mpu_armv76.baseAddr = 0x72000000; +mpu_armv76.size = 14; +mpu_armv76.allowExecute = false; +mpu_armv76.attributes = "NonCached"; diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/main.c b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/main.c new file mode 100644 index 0000000..05518c3 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/main.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2018-2022 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" + +void dcl_pi_main(void *args); + +int main(void) +{ + System_init(); + Board_init(); + + dcl_pi_main(NULL); + + Board_deinit(); + System_deinit(); + + return 0; +} diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd new file mode 100644 index 0000000..266ff50 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM OCRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..581eb56 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/example.projectspec @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..7a34f5e --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/linker.cmd @@ -0,0 +1,137 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is enabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > OCRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > OCRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + + .data: {} palign(8) /* This is where initialized globals and static go */ + } > OCRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > OCRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > OCRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > OCRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* this is used only when Secure IPC is enabled */ + .bss.sipc_hsm_queue_mem (NOLOAD) : {} > MAILBOX_HSM + .bss.sipc_r5f_queue_mem (NOLOAD) : {} > MAILBOX_R5F +} + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB : ORIGIN = 0x00080000 , LENGTH = 0x00008000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + OCRAM : ORIGIN = 0x70040000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + + /* shared memories that are used by RTOS/NORTOS cores */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x00004000 + LOG_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x00004000 + /* MSS mailbox memory is used as shared memory, we dont use bottom 32*12 bytes, since its used as SW queue by ipc_notify */ + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x72000000, LENGTH = 0x3E80 + MAILBOX_HSM: ORIGIN = 0x44000000 , LENGTH = 0x000003CE + MAILBOX_R5F: ORIGIN = 0x44000400 , LENGTH = 0x000003CE + } diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile new file mode 100644 index 0000000..9685a70 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile @@ -0,0 +1,273 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_pi.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_pi.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_pi.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_pi.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_pi.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_pi.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_pi.$(PROFILE).rprc_tmp + +FILES_common := \ + pi_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM263X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am263x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lnortos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + nortos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am263x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am263x:r5fss0-0:nortos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(BOOTIMAGE_NAME) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am263x:r5fss0-0:nortos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am263x:r5fss0-0:nortos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am263x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am263x:r5fss0-0:nortos:ti-arm-clang dcl_pi ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM263x_beta --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..d790183 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,84 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +endif diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..d455b0f --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_pi_am263x-cc_r5fss0-0_nortos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/example.syscfg b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/example.syscfg new file mode 100644 index 0000000..81572a9 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/example.syscfg @@ -0,0 +1,59 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM263x_beta" --package "ZCZ" --part "AM263x" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM263x@08.06.00" + * @versions {"tool":"1.14.0+2667"} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); +const mpu_armv76 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART0"; +debug_log.uartLog.UART.$assign = "UART0"; +debug_log.uartLog.UART.RXD.$assign = "ball.A7"; +debug_log.uartLog.UART.TXD.$assign = "ball.A6"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x80000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x50D00000; +mpu_armv75.size = 14; +mpu_armv75.allowExecute = false; +mpu_armv75.attributes = "Device"; + +mpu_armv76.$name = "CONFIG_MPU_REGION5"; +mpu_armv76.baseAddr = 0x72000000; +mpu_armv76.size = 14; +mpu_armv76.allowExecute = false; +mpu_armv76.attributes = "NonCached"; diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/main.c b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/main.c new file mode 100644 index 0000000..d109dd6 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/main.c @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2018-2022 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" +#include "FreeRTOS.h" +#include "task.h" + +#define MAIN_TASK_PRI (configMAX_PRIORITIES-1) + +#define MAIN_TASK_SIZE (16384U/sizeof(configSTACK_DEPTH_TYPE)) +StackType_t gMainTaskStack[MAIN_TASK_SIZE] __attribute__((aligned(32))); + +StaticTask_t gMainTaskObj; +TaskHandle_t gMainTask; + +void dcl_pi_main(void *args); + +void freertos_main(void *args) +{ + dcl_pi_main(NULL); + + vTaskDelete(NULL); +} + + +int main(void) +{ + /* init SOC specific modules */ + System_init(); + Board_init(); + + /* This task is created at highest priority, it should create more tasks and then delete itself */ + gMainTask = xTaskCreateStatic( freertos_main, /* Pointer to the function that implements the task. */ + "freertos_main", /* Text name for the task. This is to facilitate debugging only. */ + MAIN_TASK_SIZE, /* Stack depth in units of StackType_t typically uint32_t on 32b CPUs */ + NULL, /* We are not using the task parameter. */ + MAIN_TASK_PRI, /* task priority, 0 is lowest priority, configMAX_PRIORITIES-1 is highest */ + gMainTaskStack, /* pointer to stack base */ + &gMainTaskObj ); /* pointer to statically allocated task object memory */ + configASSERT(gMainTask != NULL); + + /* Start the scheduler to start the tasks executing. */ + vTaskStartScheduler(); + + /* The following line should never be reached because vTaskStartScheduler() + will only return if there was not enough FreeRTOS heap memory available to + create the Idle and (if configured) Timer tasks. Heap management, and + techniques for trapping heap exhaustion, are described in the book text. */ + DebugP_assertNoLog(0); + + return 0; +} diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd new file mode 100644 index 0000000..266ff50 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM OCRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..6a1a47f --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/example.projectspec @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..7a34f5e --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/linker.cmd @@ -0,0 +1,137 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is enabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > OCRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > OCRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + + .data: {} palign(8) /* This is where initialized globals and static go */ + } > OCRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > OCRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > OCRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > OCRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* this is used only when Secure IPC is enabled */ + .bss.sipc_hsm_queue_mem (NOLOAD) : {} > MAILBOX_HSM + .bss.sipc_r5f_queue_mem (NOLOAD) : {} > MAILBOX_R5F +} + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB : ORIGIN = 0x00080000 , LENGTH = 0x00008000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + OCRAM : ORIGIN = 0x70040000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + + /* shared memories that are used by RTOS/NORTOS cores */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x00004000 + LOG_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x00004000 + /* MSS mailbox memory is used as shared memory, we dont use bottom 32*12 bytes, since its used as SW queue by ipc_notify */ + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x72000000, LENGTH = 0x3E80 + MAILBOX_HSM: ORIGIN = 0x44000000 , LENGTH = 0x000003CE + MAILBOX_R5F: ORIGIN = 0x44000400 , LENGTH = 0x000003CE + } diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile new file mode 100644 index 0000000..4a61b80 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile @@ -0,0 +1,276 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_pi.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_pi.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_pi.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_pi.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_pi.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_pi.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_pi.$(PROFILE).rprc_tmp + +FILES_common := \ + pi_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/FreeRTOS-Kernel/include \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/portable/TI_ARM_CLANG/ARM_CR5F \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/config/am263x/r5f \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM263X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am263x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lfreertos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + freertos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/freertos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am263x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am263x:r5fss0-0:freertos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(BOOTIMAGE_NAME) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am263x:r5fss0-0:freertos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am263x:r5fss0-0:freertos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am263x:r5fss0-0:freertos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am263x:r5fss0-0:freertos:ti-arm-clang dcl_pi ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM263x_beta --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..e0799fb --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,84 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am263x:r5fss0-0:freertos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +endif diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..b8b55a3 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_pi_am263x-lp_r5fss0-0_freertos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/example.syscfg b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/example.syscfg new file mode 100644 index 0000000..81572a9 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/example.syscfg @@ -0,0 +1,59 @@ +/** + * These arguments were used when this file was generated. They will be automatically applied on subsequent loads + * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. + * @cliArgs --device "AM263x_beta" --package "ZCZ" --part "AM263x" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM263x@08.06.00" + * @versions {"tool":"1.14.0+2667"} + */ + +/** + * Import the modules used in this configuration. + */ +const debug_log = scripting.addModule("/kernel/dpl/debug_log"); +const mpu_armv7 = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false); +const mpu_armv71 = mpu_armv7.addInstance(); +const mpu_armv72 = mpu_armv7.addInstance(); +const mpu_armv73 = mpu_armv7.addInstance(); +const mpu_armv74 = mpu_armv7.addInstance(); +const mpu_armv75 = mpu_armv7.addInstance(); +const mpu_armv76 = mpu_armv7.addInstance(); + +/** + * Write custom configuration values to the imported modules. + */ +debug_log.enableUartLog = true; +debug_log.uartLog.$name = "CONFIG_UART0"; +debug_log.uartLog.UART.$assign = "UART0"; +debug_log.uartLog.UART.RXD.$assign = "ball.A7"; +debug_log.uartLog.UART.TXD.$assign = "ball.A6"; + +mpu_armv71.$name = "CONFIG_MPU_REGION0"; +mpu_armv71.size = 31; +mpu_armv71.attributes = "Device"; +mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv71.allowExecute = false; + +mpu_armv72.$name = "CONFIG_MPU_REGION1"; +mpu_armv72.size = 15; +mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv73.$name = "CONFIG_MPU_REGION2"; +mpu_armv73.baseAddr = 0x80000; +mpu_armv73.size = 15; +mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD"; + +mpu_armv74.$name = "CONFIG_MPU_REGION3"; +mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD"; +mpu_armv74.baseAddr = 0x70000000; +mpu_armv74.size = 21; + +mpu_armv75.$name = "CONFIG_MPU_REGION4"; +mpu_armv75.baseAddr = 0x50D00000; +mpu_armv75.size = 14; +mpu_armv75.allowExecute = false; +mpu_armv75.attributes = "Device"; + +mpu_armv76.$name = "CONFIG_MPU_REGION5"; +mpu_armv76.baseAddr = 0x72000000; +mpu_armv76.size = 14; +mpu_armv76.allowExecute = false; +mpu_armv76.attributes = "NonCached"; diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/main.c b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/main.c new file mode 100644 index 0000000..05518c3 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/main.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2018-2022 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "ti_drivers_config.h" +#include "ti_board_config.h" + +void dcl_pi_main(void *args); + +int main(void) +{ + System_init(); + Board_init(); + + dcl_pi_main(NULL); + + Board_deinit(); + System_deinit(); + + return 0; +} diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd new file mode 100644 index 0000000..266ff50 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/dcl_linker_r5f_am263x_sitara.cmd @@ -0,0 +1,19 @@ +/* +* This linker file is optional, it's complementary to the device/core linker file +* Here it specifies the dcl function & data mapping allocated by __attribute__((section(...))) +* and link to a specific memory region for the best performance +*/ + +/* Define core & platform specific variables */ +#define FAST_RAM R5F_TCMB0 /* R5F_TCMA also works */ +#define REG_RAM OCRAM + +SECTIONS +{ + /* dcl functions mapped to on-chip fast ram */ + dclfuncs : {} > FAST_RAM + + /* optional -- map datas & variables to regular ram */ + /* Sitara default linker should already map variables to ram */ + dclDataSection : {} > REG_RAM +} \ No newline at end of file diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec new file mode 100644 index 0000000..d201c9e --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/example.projectspec @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd new file mode 100644 index 0000000..7a34f5e --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/linker.cmd @@ -0,0 +1,137 @@ + +/* This is the stack that is used by code running within main() + * In case of NORTOS, + * - This means all the code outside of ISR uses this stack + * In case of FreeRTOS + * - This means all the code until vTaskStartScheduler() is called in main() + * uses this stack. + * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack + */ +--stack_size=16384 +/* This is the heap size for malloc() API in NORTOS and FreeRTOS + * This is also the heap used by pvPortMalloc in FreeRTOS + */ +--heap_size=32768 +-e_vectors /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */ + +/* This is the size of stack when R5 is in IRQ mode + * In NORTOS, + * - Here interrupt nesting is enabled + * - This is the stack used by ISRs registered as type IRQ + * In FreeRTOS, + * - Here interrupt nesting is enabled + * - This is stack that is used initally when a IRQ is received + * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks + * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more + */ +__IRQ_STACK_SIZE = 256; +/* This is the size of stack when R5 is in IRQ mode + * - In both NORTOS and FreeRTOS nesting is disabled for FIQ + */ +__FIQ_STACK_SIZE = 256; +__SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */ +__ABORT_STACK_SIZE = 256; /* This is the size of stack when R5 is in ABORT mode */ +__UNDEFINED_STACK_SIZE = 256; /* This is the size of stack when R5 is in UNDEF mode */ + +SECTIONS +{ + /* This has the R5F entry point and vector table, this MUST be at 0x0 */ + .vectors:{} palign(8) > R5F_VECS + + /* This has the R5F boot code until MPU is enabled, this MUST be at a address < 0x80000000 + * i.e this cannot be placed in DDR + */ + GROUP { + .text.hwi: palign(8) + .text.cache: palign(8) + .text.mpu: palign(8) + .text.boot: palign(8) + .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ + } > OCRAM + + /* This is rest of code. This can be placed in DDR if DDR is available and needed */ + GROUP { + .text: {} palign(8) /* This is where code resides */ + .rodata: {} palign(8) /* This is where const's go */ + } > OCRAM + + /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + + .data: {} palign(8) /* This is where initialized globals and static go */ + } > OCRAM + + /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */ + GROUP { + .bss: {} palign(8) /* This is where uninitialized globals go */ + RUN_START(__BSS_START) + RUN_END(__BSS_END) + .sysmem: {} palign(8) /* This is where the malloc heap goes */ + .stack: {} palign(8) /* This is where the main() stack goes */ + } > OCRAM + + /* This is where the stacks for different R5F modes go */ + GROUP { + .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) + RUN_START(__IRQ_STACK_START) + RUN_END(__IRQ_STACK_END) + .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) + RUN_START(__FIQ_STACK_START) + RUN_END(__FIQ_STACK_END) + .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) + RUN_START(__SVC_STACK_START) + RUN_END(__SVC_STACK_END) + .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) + RUN_START(__ABORT_STACK_START) + RUN_END(__ABORT_STACK_END) + .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) + RUN_START(__UNDEFINED_STACK_START) + RUN_END(__UNDEFINED_STACK_END) + } > OCRAM + + /* Sections needed for C++ projects */ + GROUP { + .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ + .init_array: {} palign(8) /* Contains function pointers called before main */ + .fini_array: {} palign(8) /* Contains function pointers called after main */ + } > OCRAM + + /* General purpose user shared memory, used in some examples */ + .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM + /* this is used when Debug log's to shared memory are enabled, else this is not used */ + .bss.log_shared_mem (NOLOAD) : {} > LOG_SHM_MEM + /* this is used only when IPC RPMessage is enabled, else this is not used */ + .bss.ipc_vring_mem (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM + /* this is used only when Secure IPC is enabled */ + .bss.sipc_hsm_queue_mem (NOLOAD) : {} > MAILBOX_HSM + .bss.sipc_r5f_queue_mem (NOLOAD) : {} > MAILBOX_R5F +} + +MEMORY +{ + R5F_VECS : ORIGIN = 0x00000000 , LENGTH = 0x00000040 + R5F_TCMA : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0 + R5F_TCMB : ORIGIN = 0x00080000 , LENGTH = 0x00008000 + + /* when using multi-core application's i.e more than one R5F/M4F active, make sure + * this memory does not overlap with other R5F's + */ + OCRAM : ORIGIN = 0x70040000 , LENGTH = 0x40000 + + /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with + * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable + */ + FLASH : ORIGIN = 0x60100000 , LENGTH = 0x80000 + + + /* shared memories that are used by RTOS/NORTOS cores */ + /* On R5F, + * - make sure there is a MPU entry which maps below regions as non-cache + */ + USER_SHM_MEM : ORIGIN = 0x701D0000, LENGTH = 0x00004000 + LOG_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x00004000 + /* MSS mailbox memory is used as shared memory, we dont use bottom 32*12 bytes, since its used as SW queue by ipc_notify */ + RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x72000000, LENGTH = 0x3E80 + MAILBOX_HSM: ORIGIN = 0x44000000 , LENGTH = 0x000003CE + MAILBOX_R5F: ORIGIN = 0x44000400 , LENGTH = 0x000003CE + } diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile new file mode 100644 index 0000000..9685a70 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile @@ -0,0 +1,273 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak +include $(MOTOR_CONTROL_SDK_PATH)/devconfig/devconfig.mak + +CG_TOOL_ROOT=$(CGT_TI_ARM_CLANG_PATH) + +CC=$(CG_TOOL_ROOT)/bin/tiarmclang +LNK=$(CG_TOOL_ROOT)/bin/tiarmclang +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +PROFILE?=release +ConfigName:=$(PROFILE) + +OUTNAME:=dcl_pi.$(PROFILE).out + +BOOTIMAGE_PATH=$(abspath .) +BOOTIMAGE_NAME:=dcl_pi.$(PROFILE).appimage +BOOTIMAGE_NAME_XIP:=dcl_pi.$(PROFILE).appimage_xip +BOOTIMAGE_NAME_SIGNED:=dcl_pi.$(PROFILE).appimage.signed +BOOTIMAGE_RPRC_NAME:=dcl_pi.$(PROFILE).rprc +BOOTIMAGE_RPRC_NAME_XIP:=dcl_pi.$(PROFILE).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=dcl_pi.$(PROFILE).rprc_tmp + +FILES_common := \ + pi_test.c \ + main.c \ + ti_drivers_config.c \ + ti_drivers_open_close.c \ + ti_board_config.c \ + ti_board_open_close.c \ + ti_dpl_config.c \ + ti_pinmux_config.c \ + ti_power_clock_config.c \ + +FILES_PATH_common = \ + .. \ + ../../.. \ + generated \ + +INCLUDES_common := \ + -I${CG_TOOL_ROOT}/include/c \ + -I${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source \ + -I${MOTOR_CONTROL_SDK_PATH}/source/dcl \ + -Igenerated \ + +DEFINES_common := \ + -DSOC_AM263X \ + +CFLAGS_common := \ + -mcpu=cortex-r5 \ + -mfloat-abi=hard \ + -mfpu=vfpv3-d16 \ + -mthumb \ + -Wall \ + -Werror \ + -g \ + -Wno-gnu-variable-sized-type-not-at-end \ + -Wno-unused-function \ + +CFLAGS_cpp_common := \ + -Wno-c99-designator \ + -Wno-extern-c-compat \ + -Wno-c++11-narrowing \ + -Wno-reorder-init-list \ + -Wno-deprecated-register \ + -Wno-writable-strings \ + -Wno-enum-compare \ + -Wno-reserved-user-defined-literal \ + -Wno-unused-const-variable \ + -x c++ \ + +CFLAGS_debug := \ + -D_DEBUG_=1 \ + +CFLAGS_release := \ + -Os \ + +LNK_FILES_common = \ + linker.cmd \ + dcl_linker_r5f_am263x_sitara.cmd \ + +LIBS_PATH_common = \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + -Wl,-i${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + -Wl,-i${CG_TOOL_ROOT}/lib \ + +LIBS_common = \ + -lnortos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -ldrivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -lboard.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + -llibc.a \ + -llibsysbm.a \ + +LFLAGS_common = \ + -Wl,--diag_suppress=10063 \ + -Wl,--ram_model \ + -Wl,--reread_libs \ + + +LIBS_NAME = \ + nortos.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + drivers.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + board.am263x.r5f.ti-arm-clang.${ConfigName}.lib \ + libc.a \ + libsysbm.a \ + +LIBS_PATH_NAME = \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/kernel/nortos/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/drivers/lib \ + ${MOTOR_CONTROL_SDK_PATH}/mcu_plus_sdk/source/board/lib \ + ${CG_TOOL_ROOT}/lib \ + +FILES := $(FILES_common) $(FILES_$(PROFILE)) +ASMFILES := $(ASMFILES_common) $(ASMFILES_$(PROFILE)) +FILES_PATH := $(FILES_PATH_common) $(FILES_PATH_$(PROFILE)) +CFLAGS := $(CFLAGS_common) $(CFLAGS_$(PROFILE)) +DEFINES := $(DEFINES_common) $(DEFINES_$(PROFILE)) +INCLUDES := $(INCLUDES_common) $(INCLUDE_$(PROFILE)) +LIBS := $(LIBS_common) $(LIBS_$(PROFILE)) +LIBS_PATH := $(LIBS_PATH_common) $(LIBS_PATH_$(PROFILE)) +LFLAGS := $(LFLAGS_common) $(LFLAGS_$(PROFILE)) +LNKOPTFLAGS := $(LNKOPTFLAGS_common) $(LNKOPTFLAGS_$(PROFILE)) +LNK_FILES := $(LNK_FILES_common) $(LNK_FILES_$(PROFILE)) + +OBJDIR := obj/$(PROFILE)/ +OBJS := $(FILES:%.c=%.obj) +OBJS += $(ASMFILES:%.S=%.obj) +DEPS := $(FILES:%.c=%.d) + +vpath %.obj $(OBJDIR) +vpath %.c $(FILES_PATH) +vpath %.S $(FILES_PATH) +vpath %.lib $(LIBS_PATH_NAME) +vpath %.a $(LIBS_PATH_NAME) + +$(OBJDIR)/%.obj %.obj: %.c + @echo Compiling: am263x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME): $< + $(CC) -c $(CFLAGS) $(INCLUDES) $(DEFINES) -MMD -o $(OBJDIR)/$@ $< + +$(OBJDIR)/%.obj %.obj: %.S + @echo Compiling: am263x:r5fss0-0:nortos:ti-arm-clang $(LIBNAME): $< + $(CC) -c $(CFLAGS) -o $(OBJDIR)/$@ $< + +all: $(BOOTIMAGE_NAME) + +SYSCFG_GEN_FILES=generated/ti_drivers_config.c generated/ti_drivers_config.h +SYSCFG_GEN_FILES+=generated/ti_drivers_open_close.c generated/ti_drivers_open_close.h +SYSCFG_GEN_FILES+=generated/ti_dpl_config.c generated/ti_dpl_config.h +SYSCFG_GEN_FILES+=generated/ti_pinmux_config.c generated/ti_power_clock_config.c +SYSCFG_GEN_FILES+=generated/ti_board_config.c generated/ti_board_config.h +SYSCFG_GEN_FILES+=generated/ti_board_open_close.c generated/ti_board_open_close.h + +$(OUTNAME): syscfg $(SYSCFG_GEN_FILES) $(OBJS) $(LNK_FILES) $(LIBS_NAME) + @echo . + @echo Linking: am263x:r5fss0-0:nortos:ti-arm-clang $@ ... + $(LNK) $(LNKOPTFLAGS) $(LFLAGS) $(LIBS_PATH) -Wl,-m=$(basename $@).map -o $@ $(addprefix $(OBJDIR), $(OBJS)) $(LIBS) $(LNK_FILES) + @echo Linking: am263x:r5fss0-0:nortos:ti-arm-clang $@ Done !!! + @echo . + +clean: + @echo Cleaning: am263x:r5fss0-0:nortos:ti-arm-clang $(OUTNAME) ... + $(RMDIR) $(OBJDIR) + $(RM) $(OUTNAME) + $(RM) $(BOOTIMAGE_NAME) + $(RM) $(BOOTIMAGE_NAME_XIP) + $(RM) $(BOOTIMAGE_NAME_SIGNED) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(RM) $(BOOTIMAGE_RPRC_NAME_XIP) + $(RMDIR) generated/ + +scrub: + @echo Scrubing: am263x:r5fss0-0:nortos:ti-arm-clang dcl_pi ... + $(RMDIR) obj +ifeq ($(OS),Windows_NT) + $(RM) \*.out + $(RM) \*.map + $(RM) \*.appimage* + $(RM) \*.rprc* + $(RM) \*.tiimage* + $(RM) \*.bin +else + $(RM) *.out + $(RM) *.map + $(RM) *.appimage* + $(RM) *.rprc* + $(RM) *.tiimage* + $(RM) *.bin +endif + $(RMDIR) generated + +$(OBJS): | $(OBJDIR) + +$(OBJDIR): + $(MKDIR) $@ + + +.NOTPARALLEL: + +.INTERMEDIATE: syscfg +$(SYSCFG_GEN_FILES): syscfg + +syscfg: ../example.syscfg + @echo Generating SysConfig files ... + $(SYSCFG_NODE) $(SYSCFG_CLI_PATH)/dist/cli.js --product $(SYSCFG_SDKPRODUCT) --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +syscfg-gui: + $(SYSCFG_NWJS) $(SYSCFG_PATH) --product $(SYSCFG_SDKPRODUCT) --device AM263x_beta --context r5fss0-0 --part AM263x --package ZCZ --output generated/ ../example.syscfg + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=temp_stdout_$(PROFILE).txt + + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(SYSCFG_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +$(BOOTIMAGE_NAME): $(OUTNAME) + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ ... +ifneq ($(OS),Windows_NT) + $(CHMOD) a+x $(XIPGEN_CMD) +endif + $(OUTRPRC_CMD) $(OUTNAME) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_TEMP_OUT_FILE) + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$@ Done !!! + @echo . + +-include $(addprefix $(OBJDIR)/, $(DEPS)) diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen new file mode 100644 index 0000000..d790183 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_ccs_bootimage_gen @@ -0,0 +1,84 @@ +# +# Auto generated makefile +# + +# Below variables need to be defined outside this file or via command line +# - MOTOR_CONTROL_SDK_PATH +# - PROFILE +# - CG_TOOL_ROOT +# - OUTNAME +# - CCS_INSTALL_DIR +# - CCS_IDE_MODE + +CCS_PATH=$(CCS_INSTALL_DIR) +include ${MOTOR_CONTROL_SDK_PATH}/imports.mak +include ${MOTOR_CONTROL_SDK_PATH}/devconfig/devconfig.mak + +STRIP=$(CG_TOOL_ROOT)/bin/tiarmstrip +OBJCOPY=$(CG_TOOL_ROOT)/bin/tiarmobjcopy +ifeq ($(OS), Windows_NT) + PYTHON=python +else + PYTHON=python3 +endif + +OUTFILE=$(PROFILE)/$(OUTNAME).out +BOOTIMAGE_PATH=$(abspath ${PROFILE}) +BOOTIMAGE_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage +BOOTIMAGE_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage_xip +BOOTIMAGE_NAME_SIGNED:=$(BOOTIMAGE_PATH)/$(OUTNAME).appimage.signed +BOOTIMAGE_RPRC_NAME:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc +BOOTIMAGE_RPRC_NAME_XIP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_xip +BOOTIMAGE_RPRC_NAME_TMP:=$(BOOTIMAGE_PATH)/$(OUTNAME).rprc_tmp + +# +# Generation of boot image which can be loaded by Secondary Boot Loader (SBL) +# +ifeq ($(OS),Windows_NT) +EXE_EXT=.exe +endif +ifeq ($(OS),Windows_NT) + BOOTIMAGE_CERT_GEN_CMD=powershell -executionpolicy unrestricted -command $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.ps1 +else + BOOTIMAGE_CERT_GEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/signing/x509CertificateGen.sh +endif +BOOTIMAGE_TEMP_OUT_FILE=$(PROFILE)/temp_stdout_$(PROFILE).txt + +BOOTIMAGE_CORE_ID_r5fss0-0 = 0 +BOOTIMAGE_CORE_ID_r5fss0-1 = 1 +BOOTIMAGE_CORE_ID_r5fss1-0 = 2 +BOOTIMAGE_CORE_ID_r5fss1-1 = 3 +SBL_RUN_ADDRESS=0x70002000 +SBL_DEV_ID=55 + +MULTI_CORE_IMAGE_GEN = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/multicoreImageGen/multicoreImageGen.js +OUTRPRC_CMD = $(CCS_NODE) $(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/out2rprc/elf2rprc.js + +ifeq ($(OS),Windows_NT) + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.exe +else + XIPGEN_CMD=$(MOTOR_CONTROL_SDK_PATH)/mcu_plus_sdk/tools/boot/xipGen/xipGen.out +endif + +MULTI_CORE_IMAGE_PARAMS = \ + $(BOOTIMAGE_RPRC_NAME)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +MULTI_CORE_IMAGE_PARAMS_XIP = \ + $(BOOTIMAGE_RPRC_NAME_XIP)@$(BOOTIMAGE_CORE_ID_r5fss0-0) \ + +all: +ifeq ($(CCS_IDE_MODE),cloud) +# No post build steps +else + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) ... + $(OUTRPRC_CMD) $(OUTFILE) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(COPY) $(OUTNAME).rprc $(BOOTIMAGE_RPRC_NAME) + $(COPY) $(BOOTIMAGE_RPRC_NAME) $(BOOTIMAGE_RPRC_NAME_TMP) + $(RM) $(BOOTIMAGE_RPRC_NAME) + $(XIPGEN_CMD) -i $(BOOTIMAGE_RPRC_NAME_TMP) -o $(BOOTIMAGE_RPRC_NAME) -x $(BOOTIMAGE_RPRC_NAME_XIP) --flash-start-addr 0x60000000 -v > $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME) $(MULTI_CORE_IMAGE_PARAMS) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(MULTI_CORE_IMAGE_GEN) --devID $(SBL_DEV_ID) --out $(BOOTIMAGE_NAME_XIP) $(MULTI_CORE_IMAGE_PARAMS_XIP) >> $(BOOTIMAGE_TEMP_OUT_FILE) + $(RM) $(BOOTIMAGE_RPRC_NAME_TMP) + @echo Boot image: am263x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_NAME) Done !!! + @echo . +endif diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec new file mode 100644 index 0000000..1d080a1 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/makefile_projectspec @@ -0,0 +1,20 @@ +# +# Auto generated makefile +# + +export MOTOR_CONTROL_SDK_PATH?=$(abspath ../../../../../..) +include $(MOTOR_CONTROL_SDK_PATH)/imports.mak + +PROFILE?=Release + +PROJECT_NAME=dcl_pi_am263x-lp_r5fss0-0_nortos_ti-arm-clang + +all: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) + +clean: + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectBuild -ccs.projects $(PROJECT_NAME) -ccs.configuration $(PROFILE) -ccs.clean + +export: + $(MKDIR) $(MOTOR_CONTROL_SDK_PATH)/ccs_projects + $(CCS_ECLIPSE) -noSplash -data $(MOTOR_CONTROL_SDK_PATH)/ccs_projects -application com.ti.ccstudio.apps.projectCreate -ccs.projectSpec example.projectspec -ccs.overwrite full diff --git a/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs new file mode 100644 index 0000000..472ab38 --- /dev/null +++ b/examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang/syscfg_c.rov.xs @@ -0,0 +1,8 @@ +/* + * ======== syscfg_c.rov.xs ======== + * This file contains the information needed by the Runtime Object + * View (ROV) tool. + */ +var crovFiles = [ + "kernel/freertos/rov/FreeRTOS.rov.js", +]; diff --git a/examples/dcl/dcl_pi/data/PI_ctl-1.dat b/examples/dcl/dcl_pi/data/PI_ctl-1.dat new file mode 100644 index 0000000..ad82014 --- /dev/null +++ b/examples/dcl/dcl_pi/data/PI_ctl-1.dat @@ -0,0 +1,1609 @@ +/* + A DCL_runPISeries example with the + following controller parameters: + .Kp = 2.50000f, + .Ki = 0.01000f, + .Umax = 2.00000f, + .Umin = -2.00000f +*/ +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +1.117313, +1.235688, +1.355125, +1.475625, +1.597188, +1.719813, +1.843500, +1.968250, +1.996888, +1.881570, +1.854533, +1.703631, +1.587409, +1.442683, +1.275244, +1.083026, +0.913432, +0.716210, +0.544556, +0.445049, +0.276159, +0.145885, +0.095238, +0.032571, +0.017455, +0.000251, +0.036096, +0.027625, +0.127775, +0.184649, +0.260573, +0.301172, +0.405961, +0.472591, +0.557465, +0.606586, +0.621953, +0.647461, +0.678472, +0.667273, +0.614499, +0.612124, +0.557352, +0.456733, +0.449822, +0.287453, +0.274041, +0.195070, +0.069790, +0.036287, +-0.057280, +-0.101621, +-0.152949, +-0.156286, +-0.209919, +-0.210316, +-0.212692, +-0.161849, +-0.204333, +-0.090181, +-0.123869, +-0.042280, +-0.010772, +0.082167, +0.083605, +0.147091, +0.163170, +0.236676, +0.215111, +0.251642, +0.285113, +0.273923, +0.266270, +0.256363, +0.293140, +0.230117, +0.219432, +0.199689, +0.128971, +0.152323, +0.117133, +0.132786, +0.094487, +0.057589, +0.064053, +0.065328, +0.066943, +0.068257, +0.069346, +0.118784, +0.119023, +0.124925, +0.178839, +0.183928, +0.194974, +0.205756, +0.265562, +0.276779, +0.294274, +0.311820, +0.330126, +0.300530, +0.320598, +0.335459, +0.302778, +0.319389, +0.330511, +0.293788, +0.257467, +0.312902, +0.216732, +0.273029, +0.219055, +0.269064, +0.214306, +0.165713, +0.207501, +0.242882, +0.186017, +0.182441, +0.220425, +0.209264, +0.203047, +0.244194, +0.235861, +0.232820, +0.228848, +0.273232, +0.219758, +0.269426, +0.263591, +0.264061, +0.263808, +0.263629, +0.263435, +0.263236, +0.263030, +0.262819, +0.262601, +0.213789, +0.262518, +0.207789, +0.256834, +0.201709, +0.201854, +0.243949, +0.188900, +0.188311, +0.181174, +0.223007, +0.166888, +0.213906, +0.205394, +0.154579, +0.200567, +0.240331, +0.188750, +0.191295, +0.236243, +0.184316, +0.235734, +0.231942, +0.234737, +0.188512, +0.240198, +0.237298, +0.192336, +0.244500, +0.242175, +0.197784, +0.201938, +0.249150, +0.199441, +0.204517, +0.203359, +0.251493, +0.201996, +0.207370, +0.206503, +0.206344, +0.206103, +0.205871, +0.205636, +0.205401, +0.205164, +0.204927, +0.204688, +0.204449, +0.204208, +0.203966, +0.252313, +0.203108, +0.208769, +0.208193, +0.208327, +0.256969, +0.208078, +0.214050, +0.262375, +0.213868, +0.220148, +0.220206, +0.220979, +0.221677, +0.222392, +0.223113, +0.223840, +0.224574, +0.225315, +0.226062, +0.178229, +0.227949, +0.222811, +0.223916, +0.224316, +0.224800, +0.176694, +0.226136, +0.220719, +0.221543, +0.221659, +0.221857, +0.222047, +0.222240, +0.222434, +0.222630, +0.222828, +0.223027, +0.223227, +0.223430, +0.223633, +0.223839, +0.224045, +0.224254, +0.224464, +0.224675, +0.224888, +0.225103, +0.176730, +0.225909, +0.220222, +0.220773, +0.220614, +0.220535, +0.220445, +0.220356, +0.220265, +0.220173, +0.220081, +0.219987, +0.219892, +0.219796, +0.219699, +0.219601, +0.219502, +0.219402, +0.219301, +0.219199, +0.219096, +0.218991, +0.218886, +0.218780, +0.218673, +0.218564, +0.218455, +0.218344, +0.218233, +0.218120, +0.218007, +0.217892, +0.217777, +0.217660, +0.217542, +0.217424, +0.217304, +0.217183, +0.217061, +0.216938, +0.216814, +0.216689, +0.216564, +0.216436, +0.216308, +0.216179, +0.216049, +0.215918, +0.215786, +0.215653, +0.215518, +0.215383, +0.215247, +0.263698, +0.214599, +0.220366, +0.219894, +0.220134, +0.220295, +0.220467, +0.220639, +0.220812, +0.220987, +0.221164, +0.221343, +0.221522, +0.173115, +0.222258, +0.216537, +0.217054, +0.216860, +0.216746, +0.216622, +0.216497, +0.216372, +0.216245, +0.216118, +0.215989, +0.215859, +0.215729, +0.264186, +0.215093, +0.220865, +0.220400, +0.220645, +0.220812, +0.220989, +0.221167, +0.221346, +0.221527, +0.221709, +0.221893, +0.222079, +0.222266, +0.222455, +0.174056, +0.223208, +0.217496, +0.218021, +0.217836, +0.217731, +0.217616, +0.217500, +0.217383, +0.217266, +0.217147, +0.217027, +0.216907, +0.216785, +0.216662, +0.216538, +0.216413, +0.264876, +0.215788, +0.221566, +0.221107, +0.221358, +0.221530, +0.221713, +0.221896, +0.222081, +0.222268, +0.222456, +0.174057, +0.223209, +0.217496, +0.218021, +0.217835, +0.217729, +0.217613, +0.217497, +0.217380, +0.217262, +0.217143, +0.217023, +0.216901, +0.216779, +0.216656, +0.216531, +0.216406, +0.216279, +0.216152, +0.264612, +0.215522, +0.221297, +0.220835, +0.221084, +0.221253, +0.221433, +0.221614, +0.221797, +0.221981, +0.222166, +0.222354, +0.173953, +0.223104, +0.217390, +0.217914, +0.217727, +0.217621, +0.217504, +0.217386, +0.217268, +0.217149, +0.217029, +0.216907, +0.216785, +0.216662, +0.216537, +0.216412, +0.216285, +0.216158, +0.264618, +0.215528, +0.221303, +0.220841, +0.221090, +0.221259, +0.221440, +0.221620, +0.221803, +0.221987, +0.222173, +0.222360, +0.173959, +0.223110, +0.217396, +0.217920, +0.217734, +0.217627, +0.217510, +0.217393, +0.217274, +0.217155, +0.217035, +0.216914, +0.216791, +0.216668, +0.216543, +0.216418, +0.216292, +0.216164, +0.264624, +0.215534, +0.221310, +0.220847, +0.221096, +0.221266, +0.221446, +0.221627, +0.221809, +0.221993, +0.222179, +0.222366, +0.173966, +0.223117, +0.217402, +0.217926, +0.217740, +0.217633, +0.217516, +0.217399, +0.217281, +0.217162, +0.217041, +0.216920, +0.216798, +0.216674, +0.216550, +0.216424, +0.216298, +0.216170, +0.264631, +0.215541, +0.221316, +0.220854, +0.221102, +0.221272, +0.221452, +0.221633, +0.221816, +0.222000, +0.222185, +0.222372, +0.173972, +0.223123, +0.217409, +0.217933, +0.217746, +0.217639, +0.217522, +0.217405, +0.217287, +0.217168, +0.217048, +0.216926, +0.216804, +0.216681, +0.216556, +0.216431, +0.216304, +0.216177, +0.264637, +0.215547, +0.221322, +0.220860, +0.221109, +0.221278, +0.221459, +0.221639, +0.221822, +0.222006, +0.222192, +0.222379, +0.173978, +0.223129, +0.217415, +0.217939, +0.217753, +0.217646, +0.217529, +0.217412, +0.217294, +0.217174, +0.217054, +0.216933, +0.216810, +0.216687, +0.216563, +0.216437, +0.216311, +0.216183, +0.264644, +0.215553, +0.221329, +0.220866, +0.221115, +0.221285, +0.221465, +0.221646, +0.221828, +0.222012, +0.222198, +0.222385, +0.173985, +0.223136, +0.217422, +0.217946, +0.217759, +0.217652, +0.217535, +0.217418, +0.217300, +0.217181, +0.217061, +0.216939, +0.216817, +0.216694, +0.216569, +0.216444, +0.216317, +0.216190, +0.264650, +0.215560, +0.221335, +0.220873, +0.221122, +0.221291, +0.221472, +0.221652, +0.221835, +0.222019, +0.222205, +0.222392, +0.173991, +0.223142, +0.217428, +0.217952, +0.217766, +0.217659, +0.217542, +0.217425, +0.217307, +0.217187, +0.217067, +0.216946, +0.216823, +0.216700, +0.216576, +0.216450, +0.216324, +0.216196, +0.264657, +0.215566, +0.221342, +0.220880, +0.221128, +0.221298, +0.221478, +0.221659, +0.221842, +0.222026, +0.222211, +0.222398, +0.173998, +0.223149, +0.217435, +0.217959, +0.217772, +0.217665, +0.217548, +0.217431, +0.217313, +0.217194, +0.217074, +0.216952, +0.216830, +0.216707, +0.216582, +0.216457, +0.216330, +0.216203, +0.264663, +0.215573, +0.221349, +0.220886, +0.221135, +0.221305, +0.221485, +0.221666, +0.221848, +0.222032, +0.222218, +0.222405, +0.174005, +0.223156, +0.217441, +0.217965, +0.217779, +0.217672, +0.217555, +-0.899874, +-1.018368, +-1.137924, +-1.258545, +-1.380229, +-1.502976, +-1.626787, +-1.751661, +-1.731837, +-1.714191, +-1.583831, +-1.488251, +-1.365543, +-1.221355, +-1.053655, +-0.861265, +-0.691487, +-0.494080, +-0.370827, +-0.173587, +-0.059371, +0.028742, +0.127828, +0.184861, +0.200491, +0.217510, +0.181556, +0.189912, +0.089640, +0.032650, +-0.043393, +-0.084112, +-0.189025, +-0.255777, +-0.340773, +-0.390020, +-0.405515, +-0.431150, +-0.462285, +-0.402631, +-0.447534, +-0.390425, +-0.293433, +-0.289784, +-0.179631, +-0.121169, +-0.003726, +0.019835, +0.151607, +0.184569, +0.278392, +0.322904, +0.374410, +0.377930, +0.431743, +0.432326, +0.386300, +0.433190, +0.372413, +0.362231, +0.291948, +0.265824, +0.227884, +0.135549, +0.133911, +0.070317, +0.054119, +-0.019505, +0.001939, +-0.034713, +-0.068306, +-0.057240, +-0.049710, +-0.039930, +-0.028247, +-0.014311, +0.002154, +0.021435, +0.043818, +0.069596, +0.099061, +0.132510, +0.121654, +0.164340, +0.157420, +0.156395, +0.154958, +0.153827, +0.104338, +0.152634, +0.097719, +0.049657, +0.092770, +0.033088, +-0.020126, +0.017537, +-0.047904, +-0.058602, +-0.076283, +-0.093933, +-0.112354, +-0.082875, +-0.103057, +-0.118039, +-0.085476, +-0.102206, +-0.113449, +-0.076847, +-0.040651, +-0.047622, +-0.049123, +-0.050680, +-0.003071, +-0.003909, +0.001685, +0.007478, +0.014187, +0.021739, +0.030152, +-0.009155, +0.049959, +0.006504, +-0.029452, +0.026418, +-0.019849, +-0.010399, +-0.055538, +-0.002111, +-0.051911, +-0.046197, +-0.046791, +-0.046661, +-0.046608, +-0.046541, +-0.046469, +-0.046392, +-0.046310, +-0.046223, +-0.046130, +0.002555, +-0.046301, +0.008300, +0.007711, +0.013745, +-0.029211, +0.025777, +0.026210, +0.033203, +0.039808, +-0.001768, +0.054519, +0.007685, +0.016378, +0.018789, +0.021946, +0.025049, +0.028191, +-0.017227, +0.034929, +-0.016338, +-0.012381, +-0.015014, +0.031378, +-0.020141, +-0.017071, +-0.020528, +0.025024, +-0.027341, +0.023462, +-0.029815, +0.020773, +-0.032801, +0.017498, +0.012218, +0.013261, +0.013589, +0.014001, +0.014406, +0.014814, +0.015226, +0.015640, +0.016056, +0.016475, +0.016897, +0.017321, +0.017748, +0.018177, +-0.029978, +0.019415, +0.013946, +0.014717, +-0.033810, +0.015290, +0.009517, +-0.038606, +0.010104, +0.004029, +-0.044410, +0.003984, +-0.002411, +-0.002584, +-0.003473, +-0.004290, +-0.005123, +-0.005964, +-0.006812, +-0.007667, +0.040056, +-0.009774, +-0.004747, +-0.005965, +-0.006478, +0.041510, +-0.008044, +-0.002740, +-0.003677, +-0.003907, +-0.004221, +0.044060, +-0.005210, +0.000383, +-0.000263, +-0.000200, +-0.000218, +-0.000226, +-0.000236, +-0.000245, +-0.048841, +0.000108, +-0.005807, +-0.005486, +-0.005877, +-0.006189, +-0.006514, +-0.006840, +-0.007168, +-0.007500, +-0.007833, +0.040417, +-0.008880, +-0.003316, +-0.003991, +-0.003956, +-0.004003, +0.044548, +-0.004449, +0.001419, +0.001051, +0.001394, +0.001660, +0.001937, +0.002216, +0.002498, +0.002782, +0.003068, +0.003358, +0.003650, +-0.044643, +0.004613, +-0.000994, +-0.000361, +-0.000437, +-0.000433, +-0.000438, +-0.000442, +-0.000446, +-0.000450, +-0.000455, +-0.000459, +-0.000463, +-0.000467, +-0.000471, +-0.000475, +-0.000479, +-0.000483, +-0.000488, +-0.000492, +-0.000496, +-0.000500, +-0.000504, +-0.000508, +-0.000512, +0.048071, +-0.000892, +0.005010, +0.004675, +0.005052, +0.005352, +0.005663, +0.005975, +-0.042297, +0.006980, +0.001394, +0.002048, +0.001992, +0.002017, +-0.046555, +0.002421, +-0.003468, +-0.003121, +-0.003486, +-0.003773, +-0.004071, +-0.004371, +-0.004674, +0.043608, +-0.005659, +-0.000063, +-0.000707, +-0.000641, +-0.000656, +-0.000662, +0.047918, +-0.001047, +0.004852, +0.004515, +0.004890, +0.005186, +0.005495, +-0.042783, +0.006489, +0.000898, +0.001547, +0.001486, +0.001505, +-0.047071, +0.001899, +-0.003996, +-0.003654, +-0.004024, +-0.004315, +-0.004619, +-0.004924, +-0.005232, +0.043044, +-0.006227, +-0.000637, +-0.001286, +-0.001226, +-0.001246, +0.047331, +-0.001640, +0.004254, +0.003911, +0.004281, +0.004572, +0.004876, +0.005180, +0.005488, +-0.042789, +0.006482, +0.000891, +0.001540, +0.001479, +0.001498, +-0.047078, +0.001892, +-0.004003, +-0.003660, +-0.004030, +-0.004322, +-0.004626, +-0.004931, +-0.005239, +0.043038, +-0.006234, +-0.000644, +-0.001293, +-0.001232, +-0.001253, +0.047324, +-0.001647, +0.004247, +0.003905, +0.004274, +0.004565, +0.004869, +0.005173, +0.005481, +-0.042796, +0.006475, +0.000884, +0.001533, +0.001472, +0.001492, +-0.047085, +0.001885, +-0.004009, +-0.003667, +-0.004037, +-0.004329, +-0.004633, +-0.004938, +-0.005246, +0.043031, +-0.006241, +-0.000651, +-0.001300, +-0.001239, +-0.001259, +0.047317, +-0.001654, +0.004240, +0.003898, +0.004267, +0.004559, +0.004862, +0.005167, +0.005474, +-0.042803, +0.006468, +0.000878, +0.001526, +0.001465, +0.001485, +-0.047092, +0.001878, +-0.004016, +-0.003674, +-0.004044, +-0.004336, +-0.004640, +-0.004945, +-0.005253, +0.043024, +-0.006248, +-0.000658, +-0.001307, +-0.001246, +-0.001266, +0.047310, +-0.001661, +0.004233, +0.003891, +0.004260, +0.004552, +0.004855, +0.005160, +0.005467, +-0.042810, +0.006461, +0.000871, +0.001519, +0.001458, +0.001478, +-0.047099, +0.001871, +-0.004023, +-0.003681, +-0.004051, +-0.004343, +-0.004646, +-0.004952, +-0.005260, +0.043017, +-0.006255, +-0.000664, +-0.001313, +-0.001253, +-0.001273, +0.047303, +-0.001667, +0.004227, +0.003884, +0.004254, +0.004545, +0.004848, +0.005153, +0.005460, +-0.042817, +0.006455, +0.000864, +0.001512, +0.001451, +0.001471, +-0.047106, +0.001865, +-0.004030, +-0.003688, +-0.004058, +-0.004350, +-0.004653, +-0.004958, +-0.005266, +0.043010, +-0.006261, +-0.000671, +-0.001320, +-0.001260, +-0.001280, +0.047296, +-0.001674, +0.004220, +0.003877, +0.004247, +0.004538, +0.004841, +0.005146, +0.005454, +-0.042824, +0.006448, +0.000857, +0.001506, +0.001445, +0.001464, +-0.047112, +0.001858, +-0.004037, +-0.003695, +-0.004065, +-0.004356, +-0.004660, +-0.004965, +-0.005273, +0.043003, +-0.006268, +-0.000678, +-0.001327, +-0.001267, +-0.001287, +0.047290, +-0.001681, +0.004213, +0.003870, +0.004240, +0.004531, +0.004835, +0.005139, +0.005447, +-0.042830, +0.006441, +0.000850, +0.001499, +0.001438, +0.001458, +-0.047119, +0.001851, +-0.004043, +-0.003701, +-0.004071, +-0.004363, +-0.004667, +-0.004972, +-0.005280, +0.042997, +-0.006275, +-0.000685, +-0.001334, +-0.001273, +-0.001293, +0.047283, +-0.001688, +0.004206, +0.003864, +0.004233, +0.004525, +0.004828, +0.005133, +0.005440, +-0.042837, +0.006434, +0.000843, +0.001492, +0.001431, +0.001451, +-0.047126, +0.001844, +-0.004050, +-0.003708, +-0.004078, +-0.004370, +-0.004674, +-0.004979, +-0.005287, +0.042990, +-0.006282, +-0.000692, +-0.001341, +-0.001280, +-0.001300, +0.047276, +-0.001695, +0.004199, +0.003857, +0.004226, +0.004518, +0.004821, +0.005126, +0.005433, +-0.042844, +0.006427, +0.000837, +0.001485, +0.001424, +0.001444, +-0.047133, +0.001837, +-0.004057, +-0.003715, +-0.004085, +-0.004377, +-0.004681, +-0.004986, +-0.005294, +0.042983, +-0.006289, +-0.000699, +-0.001348, +-0.001287, +-0.001307, +0.047269, +-0.001701, +0.004193, +0.003850, +0.004219, +0.004511, +0.004814, +0.005119, +0.005426, +-0.042851, +0.006420, +0.000830, +0.001478, +0.001417, +0.001437, +-0.047140, +0.001831, +-0.004064, +-0.003722, +-0.004092, +-0.004384, +-0.004687, +-0.004993, +-0.005301, +0.042976, +-0.006296, +-0.000705, +-0.001354, +-0.001294, +-0.001314, +0.047262, +-0.001708, +0.004186, +0.003843, +0.004213, +0.004504, +0.004807, +0.005112, +0.005420, +-0.042858, +0.006414, +0.000823, +0.001472, +0.001411, +0.001430, +-0.047146, +0.001824, +-0.004071, +-0.003729, +-0.004099, +-0.004391, +-0.004694, +-0.004999, +-0.005307, +0.042969, +-0.006302, +-0.000712, +-0.001361, +-0.001301, +-0.001321, +0.047256, +-0.001715, +0.004179, +0.003836, +0.004206, +0.004497, +0.004800, +0.005105, +0.005413, +-0.042864, +0.006407, +0.000816, +0.001465, +0.001404, +0.001423, +-0.047153, +0.001817, +-0.004078, +-0.003735, +-0.004105, +-0.004397, +-0.004701, +-0.005006, +-0.005314, +0.042963, +-0.006309, +-0.000719, +-0.001368, +-0.001307, +-0.001328, +0.047249, +-0.001722, +0.004172, +0.003829, +0.004199, +0.004490, +0.004794, +0.005098, +0.005406, +-0.042871, +0.006400, +0.000809, +0.001458, +0.001397, +0.001417, +-0.047160, +0.001810, +-0.004084, +-0.003742, +-0.004112, +-0.004404, +-0.004708, +-0.005013, +-0.005321, +0.042956, +-0.006316, +-0.000726, +-0.001375, +-0.001314, +-0.001334, +0.047242, +-0.001729, +0.004165, +0.003823, +0.004192, +0.004484, +0.004787, +0.005092, +0.005399, +-0.042878, +0.006393, +0.000803, +0.001451, +0.001390, +0.001410, +-0.047167, +0.001803, +-0.004091, +-0.003749, +-0.004119, +-0.004411, +-0.004715, +-0.005020, +-0.005328, +0.042949, +-0.006323, +-0.000733, +-0.001382, +-0.001321, +-0.001341, +0.047235, +-0.001736, +0.004158, +0.003816, +0.004185, +0.004477, +0.004780, +0.005085, +0.005392, +-0.042885, +0.006386, +0.000796, +0.001444, +0.001383, +0.001403, +-0.047174, +0.001796, +-0.004098, +-0.003756, +-0.004126, +-0.004418, +-0.004721, +-0.005027, +-0.005335, +0.042942, +-0.006330, +-0.000739, +-0.001388, +-0.001328, +-0.001348, +0.047228, +-0.001742, +0.004152, +0.003809, +0.004179, +0.004470, +0.004773, +0.005078, +0.005385, +-0.042892, +0.006380, +0.000789 diff --git a/examples/dcl/dcl_pi/data/PI_ctl-2.dat b/examples/dcl/dcl_pi/data/PI_ctl-2.dat new file mode 100644 index 0000000..b613992 --- /dev/null +++ b/examples/dcl/dcl_pi/data/PI_ctl-2.dat @@ -0,0 +1,1609 @@ +/* + A DCL_runPIParallel example with the + following controller parameters: + .Kp = 1.8540138247f, + .Ki = 0.0081723506f, + .Umax = 1.50000f, + .Umin = -1.50000f, +*/ +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.824017, +0.906777, +0.989883, +1.073337, +1.157138, +1.241287, +1.325782, +1.410625, +1.424150, +1.331465, +1.304433, +1.186230, +1.094285, +0.981853, +0.853315, +0.707233, +0.578661, +0.430436, +0.301898, +0.227285, +0.101918, +0.005726, +-0.031210, +-0.076810, +-0.087092, +-0.098861, +-0.071446, +-0.076869, +-0.002158, +0.040221, +0.096415, +0.126246, +0.203252, +0.251693, +0.313325, +0.348254, +0.358102, +0.375382, +0.396631, +0.386641, +0.346052, +0.342863, +0.301055, +0.225671, +0.219819, +0.099351, +0.089406, +0.031168, +-0.060904, +-0.084783, +-0.152832, +-0.184206, +-0.220565, +-0.221337, +-0.259206, +-0.257612, +-0.257494, +-0.218137, +-0.247832, +-0.161853, +-0.185387, +-0.123781, +-0.099455, +-0.029963, +-0.028340, +0.019033, +0.031178, +0.085608, +0.069623, +0.096571, +0.121114, +0.112585, +0.106713, +0.099212, +0.126182, +0.079402, +0.071481, +0.056923, +0.004851, +0.022443, +-0.003240, +0.008716, +-0.019186, +-0.045902, +-0.040495, +-0.038946, +-0.037158, +-0.035604, +-0.034227, +0.002796, +0.003329, +0.008034, +0.048121, +0.051976, +0.060203, +0.068190, +0.112287, +0.120307, +0.132915, +0.145491, +0.158561, +0.136232, +0.150656, +0.161162, +0.136551, +0.148429, +0.156195, +0.128636, +0.101526, +0.142237, +0.070916, +0.112435, +0.072399, +0.109273, +0.068678, +0.032855, +0.063884, +0.090017, +0.047974, +0.045464, +0.073617, +0.065371, +0.060815, +0.091216, +0.084958, +0.082637, +0.079643, +0.112329, +0.072664, +0.109286, +0.104773, +0.104935, +0.104564, +0.104251, +0.103929, +0.103605, +0.103280, +0.102953, +0.102623, +0.066459, +0.102430, +0.061903, +0.098133, +0.057338, +0.057530, +0.088659, +0.047972, +0.047674, +0.042548, +0.073565, +0.032171, +0.067068, +0.060819, +0.023406, +0.057590, +0.086995, +0.048870, +0.050874, +0.084139, +0.045774, +0.083839, +0.080975, +0.082985, +0.048832, +0.087077, +0.084854, +0.051622, +0.090205, +0.088388, +0.055558, +0.058712, +0.093603, +0.056822, +0.060649, +0.059856, +0.095421, +0.058786, +0.062821, +0.062230, +0.062166, +0.062040, +0.061922, +0.061802, +0.061682, +0.061562, +0.061441, +0.061320, +0.061199, +0.061077, +0.060955, +0.096667, +0.060238, +0.064475, +0.064087, +0.064225, +0.100137, +0.063920, +0.068365, +0.104021, +0.068066, +0.072716, +0.072751, +0.073313, +0.073818, +0.074331, +0.074847, +0.075364, +0.075884, +0.076406, +0.076930, +0.041623, +0.078456, +0.074627, +0.075425, +0.075697, +0.076031, +0.040528, +0.077162, +0.073135, +0.073733, +0.073805, +0.073938, +0.074064, +0.074192, +0.074320, +0.074448, +0.074578, +0.074707, +0.074837, +0.074968, +0.075099, +0.075231, +0.075363, +0.075496, +0.075629, +0.075762, +0.075897, +0.076031, +0.040332, +0.076774, +0.072551, +0.072952, +0.072827, +0.072762, +0.072689, +0.072617, +0.072544, +0.072471, +0.072398, +0.072324, +0.072250, +0.072175, +0.072101, +0.072026, +0.071950, +0.071875, +0.071798, +0.071722, +0.071645, +0.071568, +0.071491, +0.071413, +0.071335, +0.071256, +0.071178, +0.071099, +0.071019, +0.070939, +0.070859, +0.070779, +0.070698, +0.070617, +0.070535, +0.070453, +0.070371, +0.070289, +0.070206, +0.070123, +0.070039, +0.069955, +0.069871, +0.069786, +0.069702, +0.069616, +0.069531, +0.069445, +0.069359, +0.069272, +0.069185, +0.069098, +0.069010, +0.104757, +0.068362, +0.072633, +0.072280, +0.072453, +0.072566, +0.072687, +0.072808, +0.072929, +0.073051, +0.073173, +0.073296, +0.073420, +0.037709, +0.074139, +0.069905, +0.070295, +0.070159, +0.070082, +0.069998, +0.069914, +0.069830, +0.069746, +0.069661, +0.069576, +0.069490, +0.069405, +0.105153, +0.068761, +0.073033, +0.072681, +0.072856, +0.072972, +0.073095, +0.073217, +0.073340, +0.073464, +0.073588, +0.073713, +0.073838, +0.073964, +0.074090, +0.038383, +0.074816, +0.070584, +0.070977, +0.070844, +0.070770, +0.070688, +0.070608, +0.070527, +0.070445, +0.070363, +0.070281, +0.070198, +0.070116, +0.070032, +0.069949, +0.069865, +0.105615, +0.069225, +0.073499, +0.073149, +0.073326, +0.073443, +0.073568, +0.073693, +0.073818, +0.073943, +0.074069, +0.038362, +0.074795, +0.070563, +0.070955, +0.070822, +0.070748, +0.070666, +0.070585, +0.070504, +0.070422, +0.070340, +0.070258, +0.070175, +0.070092, +0.070009, +0.069925, +0.069841, +0.069757, +0.069672, +0.105421, +0.069030, +0.073304, +0.072953, +0.073129, +0.073245, +0.073369, +0.073493, +0.073617, +0.073742, +0.073867, +0.073993, +0.038285, +0.074717, +0.070485, +0.070878, +0.070744, +0.070669, +0.070587, +0.070506, +0.070424, +0.070342, +0.070260, +0.070177, +0.070094, +0.070011, +0.069927, +0.069843, +0.069759, +0.069674, +0.105424, +0.069032, +0.073306, +0.072955, +0.073131, +0.073248, +0.073371, +0.073495, +0.073619, +0.073744, +0.073869, +0.073995, +0.038287, +0.074719, +0.070487, +0.070880, +0.070746, +0.070671, +0.070590, +0.070508, +0.070427, +0.070345, +0.070262, +0.070180, +0.070097, +0.070013, +0.069929, +0.069845, +0.069761, +0.069676, +0.105426, +0.069034, +0.073308, +0.072957, +0.073133, +0.073250, +0.073374, +0.073497, +0.073621, +0.073746, +0.073871, +0.073997, +0.038289, +0.074722, +0.070490, +0.070882, +0.070748, +0.070673, +0.070592, +0.070510, +0.070429, +0.070347, +0.070264, +0.070182, +0.070099, +0.070015, +0.069932, +0.069848, +0.069763, +0.069679, +0.105428, +0.069037, +0.073310, +0.072959, +0.073135, +0.073252, +0.073376, +0.073499, +0.073624, +0.073748, +0.073873, +0.073999, +0.038291, +0.074724, +0.070492, +0.070884, +0.070750, +0.070676, +0.070594, +0.070513, +0.070431, +0.070349, +0.070267, +0.070184, +0.070101, +0.070018, +0.069934, +0.069850, +0.069765, +0.069681, +0.105430, +0.069039, +0.073312, +0.072962, +0.073137, +0.073254, +0.073378, +0.073502, +0.073626, +0.073750, +0.073876, +0.074001, +0.038293, +0.074726, +0.070494, +0.070886, +0.070752, +0.070678, +0.070596, +0.070515, +0.070433, +0.070351, +0.070269, +0.070186, +0.070103, +0.070020, +0.069936, +0.069852, +0.069768, +0.069683, +0.105432, +0.069041, +0.073314, +0.072964, +0.073140, +0.073256, +0.073380, +0.073504, +0.073628, +0.073753, +0.073878, +0.074004, +0.038295, +0.074728, +0.070496, +0.070888, +0.070754, +0.070680, +0.070598, +0.070517, +0.070435, +0.070353, +0.070271, +0.070188, +0.070105, +0.070022, +0.069938, +0.069854, +0.069770, +0.069685, +0.105434, +0.069043, +0.073317, +0.072966, +0.073142, +0.073258, +0.073382, +0.073506, +0.073630, +0.073755, +0.073880, +0.074006, +0.038298, +0.074730, +0.070498, +0.070891, +0.070757, +0.070682, +0.070600, +0.070519, +0.070438, +0.070356, +0.070273, +0.070191, +0.070108, +0.070024, +0.069940, +0.069856, +0.069772, +0.069687, +0.105437, +0.069045, +0.073319, +0.072968, +0.073144, +0.073261, +0.073385, +0.073508, +0.073632, +0.073757, +0.073882, +0.074008, +0.038300, +0.074733, +0.070501, +0.070893, +0.070759, +0.070684, +0.070603, +0.070521, +0.070440, +0.070358, +0.070276, +0.070193, +0.070110, +0.070026, +0.069943, +0.069859, +0.069774, +0.069690, +0.105439, +0.069048, +0.073321, +0.072971, +0.073146, +0.073263, +0.073387, +0.073510, +0.073635, +0.073759, +0.073885, +0.074010, +0.038302, +0.074735, +0.070503, +0.070895, +0.070761, +0.070687, +0.070605, +-0.753494, +-0.836334, +-0.919523, +-1.003059, +-1.086943, +-1.171175, +-1.255754, +-1.340680, +-1.318455, +-1.297993, +-1.194549, +-1.117358, +-1.020615, +-0.908591, +-0.779869, +-0.633670, +-0.504972, +-0.356623, +-0.263792, +-0.116917, +-0.032087, +0.033022, +0.105864, +0.147291, +0.157958, +0.169595, +0.142104, +0.147447, +0.072652, +0.030192, +-0.026083, +-0.055996, +-0.133087, +-0.181610, +-0.243325, +-0.278338, +-0.288272, +-0.305636, +-0.326967, +-0.281232, +-0.312866, +-0.269099, +-0.196166, +-0.192483, +-0.110278, +-0.066651, +0.020231, +0.037394, +0.134270, +0.157741, +0.225971, +0.257462, +0.293944, +0.294841, +0.332832, +0.331364, +0.295538, +0.328444, +0.281771, +0.272678, +0.219316, +0.198823, +0.169734, +0.100694, +0.098928, +0.051482, +0.039254, +-0.015258, +0.000645, +-0.026386, +-0.051012, +-0.042567, +-0.036777, +-0.029361, +-0.020583, +-0.010193, +0.002005, +0.016211, +0.032628, +0.051457, +0.072904, +0.097171, +0.088632, +0.119629, +0.113873, +0.112499, +0.110831, +0.109402, +0.072318, +0.107558, +0.066488, +0.030700, +0.062352, +0.018020, +-0.021297, +0.006625, +-0.041646, +-0.049279, +-0.062020, +-0.074670, +-0.087820, +-0.065574, +-0.080077, +-0.090667, +-0.066136, +-0.078096, +-0.085945, +-0.058468, +-0.031443, +-0.036404, +-0.037305, +-0.038243, +-0.002916, +-0.003515, +0.000632, +0.004903, +0.009827, +0.015346, +0.021469, +-0.007635, +0.036007, +0.003764, +-0.022769, +0.018565, +-0.015655, +-0.008596, +-0.041834, +-0.002197, +-0.038910, +-0.034478, +-0.034724, +-0.034437, +-0.034208, +-0.033970, +-0.033731, +-0.033491, +-0.033249, +-0.033005, +-0.032760, +0.003320, +-0.032736, +0.007707, +0.007223, +0.011627, +-0.020124, +0.020534, +0.020734, +0.025771, +0.030494, +-0.000342, +0.041168, +0.006397, +0.012770, +0.014474, +0.016720, +0.018914, +0.021125, +-0.012489, +0.026044, +-0.011910, +-0.008927, +-0.010820, +0.023452, +-0.014673, +-0.012330, +-0.014812, +0.018863, +-0.019862, +0.017713, +-0.021678, +0.015749, +-0.023851, +0.013374, +0.009405, +0.010121, +0.010305, +0.010551, +0.010790, +0.011032, +0.011274, +0.011516, +0.011760, +0.012005, +0.012250, +0.012496, +0.012743, +0.012991, +-0.022593, +0.013961, +0.009853, +0.010368, +-0.025475, +0.010879, +0.006563, +-0.028962, +0.007124, +0.002605, +-0.033131, +0.002744, +-0.001987, +-0.002102, +-0.002746, +-0.003332, +-0.003928, +-0.004525, +-0.005125, +-0.005727, +0.029501, +-0.007411, +-0.003662, +-0.004540, +-0.004893, +0.030526, +-0.006188, +-0.002241, +-0.002918, +-0.003071, +-0.003285, +0.032341, +-0.004173, +-0.000024, +-0.000499, +-0.000448, +-0.000457, +-0.000460, +-0.000463, +-0.000466, +-0.036302, +-0.000001, +-0.004363, +-0.004101, +-0.004367, +-0.004573, +-0.004787, +-0.005001, +-0.005216, +-0.005432, +-0.005649, +0.029967, +-0.006556, +-0.002416, +-0.002901, +-0.002860, +-0.002878, +0.032943, +-0.003374, +0.000973, +0.000696, +0.000946, +0.001137, +0.001336, +0.001534, +0.001734, +0.001935, +0.002136, +0.002338, +0.002541, +-0.033088, +0.003421, +-0.000733, +-0.000262, +-0.000317, +-0.000312, +-0.000314, +-0.000315, +-0.000317, +-0.000318, +-0.000319, +-0.000321, +-0.000322, +-0.000323, +-0.000325, +-0.000326, +-0.000327, +-0.000329, +-0.000330, +-0.000331, +-0.000333, +-0.000334, +-0.000336, +-0.000337, +-0.000338, +0.035494, +-0.000812, +0.003545, +0.003280, +0.003541, +0.003742, +0.003952, +0.004162, +-0.031461, +0.005055, +0.000909, +0.001386, +0.001338, +0.001350, +-0.034479, +0.001831, +-0.002522, +-0.002252, +-0.002509, +-0.002707, +-0.002913, +-0.003118, +-0.003325, +0.032301, +-0.004212, +-0.000062, +-0.000536, +-0.000485, +-0.000493, +-0.000495, +0.035336, +-0.000971, +0.003386, +0.003120, +0.003380, +0.003581, +0.003790, +-0.031835, +0.004680, +0.000531, +0.001007, +0.000957, +0.000967, +-0.034863, +0.001445, +-0.002910, +-0.002642, +-0.002900, +-0.003100, +-0.003307, +-0.003514, +-0.003723, +0.031901, +-0.004613, +-0.000465, +-0.000941, +-0.000891, +-0.000901, +0.034929, +-0.001380, +0.002976, +0.002707, +0.002966, +0.003165, +0.003372, +0.003579, +0.003787, +-0.031837, +0.004677, +0.000529, +0.001005, +0.000955, +0.000965, +-0.034865, +0.001443, +-0.002912, +-0.002644, +-0.002902, +-0.003102, +-0.003309, +-0.003517, +-0.003725, +0.031899, +-0.004615, +-0.000467, +-0.000943, +-0.000893, +-0.000903, +0.034927, +-0.001382, +0.002973, +0.002705, +0.002963, +0.003163, +0.003370, +0.003577, +0.003785, +-0.031839, +0.004675, +0.000527, +0.001003, +0.000953, +0.000963, +-0.034867, +0.001441, +-0.002914, +-0.002646, +-0.002905, +-0.003104, +-0.003312, +-0.003519, +-0.003727, +0.031897, +-0.004618, +-0.000469, +-0.000945, +-0.000896, +-0.000906, +0.034924, +-0.001384, +0.002971, +0.002703, +0.002961, +0.003161, +0.003368, +0.003575, +0.003783, +-0.031841, +0.004673, +0.000525, +0.001001, +0.000951, +0.000960, +-0.034870, +0.001439, +-0.002917, +-0.002648, +-0.002907, +-0.003107, +-0.003314, +-0.003521, +-0.003729, +0.031895, +-0.004620, +-0.000471, +-0.000948, +-0.000898, +-0.000908, +0.034922, +-0.001386, +0.002969, +0.002700, +0.002959, +0.003158, +0.003365, +0.003573, +0.003781, +-0.031843, +0.004671, +0.000522, +0.000998, +0.000948, +0.000958, +-0.034872, +0.001436, +-0.002919, +-0.002651, +-0.002909, +-0.003109, +-0.003316, +-0.003523, +-0.003732, +0.031892, +-0.004622, +-0.000474, +-0.000950, +-0.000900, +-0.000910, +0.034920, +-0.001389, +0.002967, +0.002698, +0.002957, +0.003156, +0.003363, +0.003570, +0.003778, +-0.031846, +0.004669, +0.000520, +0.000996, +0.000946, +0.000956, +-0.034874, +0.001434, +-0.002921, +-0.002653, +-0.002911, +-0.003111, +-0.003318, +-0.003526, +-0.003734, +0.031890, +-0.004624, +-0.000476, +-0.000952, +-0.000902, +-0.000912, +0.034918, +-0.001391, +0.002964, +0.002696, +0.002954, +0.003154, +0.003361, +0.003568, +0.003776, +-0.031848, +0.004666, +0.000518, +0.000994, +0.000944, +0.000954, +-0.034876, +0.001432, +-0.002923, +-0.002655, +-0.002914, +-0.003113, +-0.003320, +-0.003528, +-0.003736, +0.031888, +-0.004626, +-0.000478, +-0.000954, +-0.000904, +-0.000914, +0.034915, +-0.001393, +0.002962, +0.002694, +0.002952, +0.003152, +0.003359, +0.003566, +0.003774, +-0.031850, +0.004664, +0.000516, +0.000992, +0.000942, +0.000951, +-0.034879, +0.001430, +-0.002926, +-0.002657, +-0.002916, +-0.003115, +-0.003323, +-0.003530, +-0.003738, +0.031886, +-0.004629, +-0.000480, +-0.000956, +-0.000907, +-0.000917, +0.034913, +-0.001395, +0.002960, +0.002692, +0.002950, +0.003149, +0.003356, +0.003564, +0.003772, +-0.031852, +0.004662, +0.000513, +0.000989, +0.000939, +0.000949, +-0.034881, +0.001428, +-0.002928, +-0.002660, +-0.002918, +-0.003118, +-0.003325, +-0.003532, +-0.003740, +0.031884, +-0.004631, +-0.000483, +-0.000959, +-0.000909, +-0.000919, +0.034911, +-0.001397, +0.002958, +0.002689, +0.002948, +0.003147, +0.003354, +0.003561, +0.003769, +-0.031855, +0.004660, +0.000511, +0.000987, +0.000937, +0.000947, +-0.034883, +0.001425, +-0.002930, +-0.002662, +-0.002920, +-0.003120, +-0.003327, +-0.003534, +-0.003743, +0.031881, +-0.004633, +-0.000485, +-0.000961, +-0.000911, +-0.000921, +0.034909, +-0.001400, +0.002955, +0.002687, +0.002945, +0.003145, +0.003352, +0.003559, +0.003767, +-0.031857, +0.004657, +0.000509, +0.000985, +0.000935, +0.000945, +-0.034885, +0.001423, +-0.002932, +-0.002664, +-0.002923, +-0.003122, +-0.003329, +-0.003537, +-0.003745, +0.031879, +-0.004635, +-0.000487, +-0.000963, +-0.000913, +-0.000923, +0.034907, +-0.001402, +0.002953, +0.002685, +0.002943, +0.003143, +0.003350, +0.003557, +0.003765, +-0.031859, +0.004655, +0.000507, +0.000983, +0.000933, +0.000943, +-0.034887, +0.001421, +-0.002934, +-0.002666, +-0.002925, +-0.003124, +-0.003332, +-0.003539, +-0.003747, +0.031877, +-0.004638, +-0.000489, +-0.000965, +-0.000916, +-0.000926, +0.034904, +-0.001404, +0.002951, +0.002683, +0.002941, +0.003140, +0.003348, +0.003555, +0.003763, +-0.031861, +0.004653, +0.000505, +0.000980, +0.000930, +0.000940, +-0.034890, +0.001419, +-0.002937, +-0.002668, +-0.002927, +-0.003127, +-0.003334, +-0.003541, +-0.003749, +0.031875, +-0.004640, +-0.000492, +-0.000968, +-0.000918, +-0.000928, +0.034902, +-0.001406, +0.002949, +0.002680, +0.002939, +0.003138, +0.003345, +0.003552, +0.003761, +-0.031864, +0.004651, +0.000502, +0.000978, +0.000928, +0.000938, +-0.034892, +0.001416, +-0.002939, +-0.002671, +-0.002929, +-0.003129, +-0.003336, +-0.003543, +-0.003752, +0.031872, +-0.004642, +-0.000494, +-0.000970, +-0.000920, +-0.000930, +0.034900, +-0.001409, +0.002947, +0.002678, +0.002937, +0.003136, +0.003343, +0.003550, +0.003758, +-0.031866, +0.004648, +0.000500, +0.000976, +0.000926, +0.000936, +-0.034894, +0.001414, +-0.002941, +-0.002673, +-0.002931, +-0.003131, +-0.003338, +-0.003546, +-0.003754, +0.031870, +-0.004644, +-0.000496, +-0.000972, +-0.000922, +-0.000932, +0.034898, +-0.001411, +0.002944, +0.002676, +0.002934, +0.003134, +0.003341, +0.003548, +0.003756, +-0.031868, +0.004646, +0.000498, +0.000974, +0.000924, +0.000934, +-0.034896, +0.001412, +-0.002943, +-0.002675, +-0.002934, +-0.003133, +-0.003341, +-0.003548, +-0.003756, +0.031868, +-0.004647, +-0.000498, +-0.000974, +-0.000925, +-0.000935, +0.034895, +-0.001413, +0.002942, +0.002674, +0.002932, +0.003132, +0.003339, +0.003546, +0.003754, +-0.031870, +0.004644, +0.000496 diff --git a/examples/dcl/dcl_pi/data/PI_ctl-3.dat b/examples/dcl/dcl_pi/data/PI_ctl-3.dat new file mode 100644 index 0000000..2dcb3d0 --- /dev/null +++ b/examples/dcl/dcl_pi/data/PI_ctl-3.dat @@ -0,0 +1,1609 @@ +/* + A DCL_runPISeriesTustin example with the + following controller parameters: + .Kp = 2.50000f, + .Ki = 0.01000f, + .Umax = 2.00000f, + .Umin = -2.00000f +*/ +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +0.000000, +1.117313, +1.246750, +1.378313, +1.512000, +1.647813, +1.785750, +1.925812, +2.068000, +2.115138, +2.018420, +2.008658, +1.874592, +1.773544, +1.642692, +1.487557, +1.305863, +1.144786, +0.954317, +0.787397, +0.690877, +0.523959, +0.393966, +0.342308, +0.278137, +0.260912, +0.241471, +0.274930, +0.264452, +0.362530, +0.418345, +0.493783, +0.534654, +0.640112, +0.708444, +0.795662, +0.847944, +0.866927, +0.896168, +0.931126, +0.924144, +0.875433, +0.876558, +0.825229, +0.727476, +0.722407, +0.561793, +0.548510, +0.469535, +0.343469, +0.307948, +0.212050, +0.164475, +0.109506, +0.102057, +0.044319, +0.039326, +0.032396, +0.078706, +0.032238, +0.142025, +0.105145, +0.183240, +0.212096, +0.302722, +0.302790, +0.364934, +0.380312, +0.453284, +0.431917, +0.468431, +0.502247, +0.491730, +0.484633, +0.475201, +0.512349, +0.450058, +0.439474, +0.419725, +0.348805, +0.371258, +0.335408, +0.350060, +0.310924, +0.272819, +0.277722, +0.277515, +0.277677, +0.277567, +0.277260, +0.325325, +0.324696, +0.329740, +0.382863, +0.387702, +0.398552, +0.409249, +0.469077, +0.480908, +0.499123, +0.517554, +0.536910, +0.508535, +0.529519, +0.545486, +0.514048, +0.531564, +0.543748, +0.508186, +0.472651, +0.528505, +0.433298, +0.489597, +0.436181, +0.486210, +0.431966, +0.383340, +0.424614, +0.459900, +0.403290, +0.399405, +0.437047, +0.425924, +0.419634, +0.460646, +0.452588, +0.449736, +0.445922, +0.490422, +0.437503, +0.487192, +0.481868, +0.482787, +0.482982, +0.483246, +0.483487, +0.483718, +0.483936, +0.484141, +0.484334, +0.435927, +0.484573, +0.430245, +0.479145, +0.424361, +0.424299, +0.466190, +0.411356, +0.410434, +0.402963, +0.444394, +0.388291, +0.434769, +0.426188, +0.375221, +0.420554, +0.460127, +0.408748, +0.410984, +0.455652, +0.403891, +0.454960, +0.451332, +0.454251, +0.408177, +0.459554, +0.456861, +0.412074, +0.463966, +0.461890, +0.417721, +0.421655, +0.468692, +0.419276, +0.424150, +0.422842, +0.470816, +0.421638, +0.426837, +0.425850, +0.425564, +0.425196, +0.424835, +0.424471, +0.424105, +0.423736, +0.423366, +0.422994, +0.422619, +0.422243, +0.421864, +0.470073, +0.421210, +0.426723, +0.426056, +0.426095, +0.474643, +0.426141, +0.432014, +0.480300, +0.432233, +0.438469, +0.438545, +0.439336, +0.440061, +0.440808, +0.441568, +0.442341, +0.443128, +0.443928, +0.444742, +0.396982, +0.446301, +0.441258, +0.442406, +0.442860, +0.443401, +0.395356, +0.444383, +0.439044, +0.439892, +0.440039, +0.440269, +0.440494, +0.440722, +0.440954, +0.441189, +0.441427, +0.441667, +0.441912, +0.442159, +0.442409, +0.442662, +0.442919, +0.443178, +0.443441, +0.443707, +0.443976, +0.444248, +0.395934, +0.444692, +0.439076, +0.439641, +0.439501, +0.439439, +0.439365, +0.439291, +0.439214, +0.439135, +0.439055, +0.438972, +0.438887, +0.438800, +0.438711, +0.438619, +0.438526, +0.438431, +0.438333, +0.438234, +0.438132, +0.438029, +0.437923, +0.437815, +0.437706, +0.437594, +0.437480, +0.437364, +0.437245, +0.437125, +0.437003, +0.436879, +0.436752, +0.436624, +0.436493, +0.436360, +0.436226, +0.436089, +0.435950, +0.435809, +0.435666, +0.435521, +0.435374, +0.435224, +0.435073, +0.434920, +0.434764, +0.434606, +0.434447, +0.434285, +0.434121, +0.433955, +0.433788, +0.482207, +0.433555, +0.439278, +0.438822, +0.439071, +0.439244, +0.439429, +0.439615, +0.439806, +0.439999, +0.440195, +0.440395, +0.440597, +0.392214, +0.440902, +0.435216, +0.435712, +0.435502, +0.435371, +0.435228, +0.435084, +0.434937, +0.434789, +0.434639, +0.434487, +0.434332, +0.434176, +0.482606, +0.433966, +0.439701, +0.439255, +0.439516, +0.439700, +0.439896, +0.440095, +0.440296, +0.440501, +0.440709, +0.440920, +0.441134, +0.441351, +0.441571, +0.393205, +0.441911, +0.436243, +0.436756, +0.436564, +0.436450, +0.436325, +0.436199, +0.436070, +0.435939, +0.435807, +0.435672, +0.435535, +0.435396, +0.435255, +0.435112, +0.434967, +0.483409, +0.434780, +0.440527, +0.440093, +0.440365, +0.440560, +0.440768, +0.440978, +0.441191, +0.441407, +0.441626, +0.393259, +0.441964, +0.436295, +0.436807, +0.436614, +0.436499, +0.436373, +0.436245, +0.436116, +0.435984, +0.435851, +0.435715, +0.435577, +0.435437, +0.435295, +0.435151, +0.435005, +0.434857, +0.434706, +0.483143, +0.434509, +0.440250, +0.439811, +0.440078, +0.440268, +0.440471, +0.440675, +0.440883, +0.441094, +0.441308, +0.441525, +0.393156, +0.441859, +0.436188, +0.436698, +0.436503, +0.436386, +0.436257, +0.436128, +0.435996, +0.435863, +0.435727, +0.435589, +0.435449, +0.435307, +0.435163, +0.435017, +0.434869, +0.434718, +0.483155, +0.434521, +0.440262, +0.439823, +0.440090, +0.440281, +0.440483, +0.440688, +0.440895, +0.441106, +0.441320, +0.441537, +0.393169, +0.441871, +0.436200, +0.436710, +0.436515, +0.436398, +0.436270, +0.436140, +0.436009, +0.435875, +0.435739, +0.435601, +0.435461, +0.435319, +0.435175, +0.435029, +0.434881, +0.434731, +0.483167, +0.434533, +0.440275, +0.439835, +0.440103, +0.440293, +0.440495, +0.440700, +0.440908, +0.441119, +0.441332, +0.441550, +0.393181, +0.441884, +0.436212, +0.436723, +0.436528, +0.436410, +0.436282, +0.436153, +0.436021, +0.435887, +0.435751, +0.435614, +0.435474, +0.435332, +0.435188, +0.435042, +0.434893, +0.434743, +0.483180, +0.434546, +0.440287, +0.439848, +0.440115, +0.440305, +0.440508, +0.440712, +0.440920, +0.441131, +0.441345, +0.441562, +0.393193, +0.441896, +0.436225, +0.436735, +0.436540, +0.436423, +0.436294, +0.436165, +0.436033, +0.435900, +0.435764, +0.435626, +0.435486, +0.435344, +0.435200, +0.435054, +0.434906, +0.434756, +0.483192, +0.434558, +0.440300, +0.439860, +0.440127, +0.440318, +0.440520, +0.440725, +0.440933, +0.441144, +0.441357, +0.441575, +0.393206, +0.441909, +0.436238, +0.436748, +0.436553, +0.436435, +0.436307, +0.436178, +0.436046, +0.435912, +0.435777, +0.435639, +0.435499, +0.435357, +0.435213, +0.435067, +0.434919, +0.434768, +0.483205, +0.434571, +0.440312, +0.439873, +0.440140, +0.440330, +0.440533, +0.440738, +0.440945, +0.441156, +0.441370, +0.441587, +0.393219, +0.441922, +0.436250, +0.436760, +0.436565, +0.436448, +0.436320, +0.436190, +0.436059, +0.435925, +0.435789, +0.435652, +0.435512, +0.435370, +0.435226, +0.435080, +0.434931, +0.434781, +0.483218, +0.434584, +0.440325, +0.439886, +0.440153, +0.440343, +0.440546, +0.440750, +0.440958, +0.441169, +0.441383, +0.441600, +0.393232, +0.441934, +0.436263, +0.436773, +0.436578, +0.436461, +0.436333, +0.436203, +0.436072, +0.435938, +0.435802, +0.435665, +0.435525, +0.435383, +0.435239, +0.435093, +0.434944, +0.434794, +0.483231, +0.434597, +0.440338, +0.439899, +0.440166, +0.440356, +0.440559, +0.440763, +0.440971, +0.441182, +0.441396, +0.441613, +0.393245, +0.441947, +0.436276, +0.436786, +0.436591, +0.436474, +0.436346, +0.436216, +0.436085, +0.435951, +0.435815, +0.435678, +0.435538, +0.435396, +0.435252, +0.435106, +0.434957, +0.434807, +0.483244, +0.434610, +0.440351, +0.439912, +0.440179, +0.440369, +0.440572, +0.440776, +0.440984, +0.441195, +0.441409, +0.441626, +0.393258, +0.441961, +0.436289, +0.436800, +0.436604, +0.436487, +0.436359, +-0.681083, +-0.810652, +-0.942348, +-1.076172, +-1.212122, +-1.350199, +-1.490404, +-1.632735, +-1.631431, +-1.631927, +-1.519354, +-1.440094, +-1.332597, +-1.202256, +-1.046838, +-0.864947, +-0.703660, +-0.512979, +-0.394430, +-0.200629, +-0.087864, +-0.000056, +0.099600, +0.158177, +0.175902, +0.195150, +0.161571, +0.171923, +0.073709, +0.017764, +-0.057808, +-0.098815, +-0.204415, +-0.272885, +-0.360245, +-0.412673, +-0.431805, +-0.461195, +-0.496301, +-0.440888, +-0.489398, +-0.436306, +-0.342725, +-0.341493, +-0.233698, +-0.176478, +-0.059687, +-0.035610, +0.096908, +0.131913, +0.228084, +0.275851, +0.331020, +0.338676, +0.396620, +0.401825, +0.360381, +0.411353, +0.355081, +0.348758, +0.282194, +0.259058, +0.223817, +0.133778, +0.133500, +0.071236, +0.055725, +-0.017379, +0.003851, +-0.032801, +-0.066757, +-0.056382, +-0.049428, +-0.040142, +-0.028852, +-0.015190, +0.001142, +0.020454, +0.043059, +0.069278, +0.099436, +0.133862, +0.124304, +0.168168, +0.162838, +0.163318, +0.163361, +0.163681, +0.115617, +0.164834, +0.111311, +0.064081, +0.107543, +0.048634, +-0.004407, +0.032901, +-0.032518, +-0.043843, +-0.062251, +-0.080794, +-0.100276, +-0.072029, +-0.093139, +-0.109239, +-0.077932, +-0.095583, +-0.107904, +-0.072480, +-0.037087, +-0.044496, +-0.046500, +-0.048569, +-0.001483, +-0.002367, +0.003173, +0.008968, +0.015736, +0.023414, +0.032025, +-0.007002, +0.052000, +0.009020, +-0.026897, +0.028656, +-0.017371, +-0.008143, +-0.053407, +-0.000551, +-0.050387, +-0.045202, +-0.046263, +-0.046602, +-0.047012, +-0.047402, +-0.047782, +-0.048152, +-0.048512, +-0.048862, +-0.049201, +-0.000942, +-0.049738, +0.004439, +0.003970, +0.010118, +-0.032666, +0.022066, +0.022792, +0.030078, +0.037043, +-0.004112, +0.052180, +0.005910, +0.014697, +0.017286, +0.020644, +0.023978, +0.027378, +-0.017753, +0.034238, +-0.016677, +-0.012878, +-0.015629, +0.030621, +-0.020580, +-0.017705, +-0.021325, +0.024032, +-0.028075, +0.022464, +-0.030571, +0.019729, +-0.033628, +0.016353, +0.011258, +0.012432, +0.012899, +0.013453, +0.014002, +0.014557, +0.015117, +0.015683, +0.016254, +0.016830, +0.017411, +0.017998, +0.018589, +0.019186, +-0.028799, +0.020285, +0.015000, +0.015898, +-0.032494, +0.016259, +0.010627, +-0.037413, +0.010904, +0.004920, +-0.043487, +0.004458, +-0.001903, +-0.002105, +-0.003024, +-0.003880, +-0.004760, +-0.005654, +-0.006564, +-0.007490, +0.040156, +-0.009279, +-0.004354, +-0.005622, +-0.006198, +0.041723, +-0.007422, +-0.002203, +-0.003173, +-0.003445, +-0.003801, +0.044433, +-0.004404, +0.001129, +0.000479, +0.000533, +0.000506, +0.000488, +0.000469, +0.000451, +-0.048155, +0.000304, +-0.005612, +-0.005350, +-0.005797, +-0.006168, +-0.006554, +-0.006944, +-0.007339, +-0.007740, +-0.008146, +0.040031, +-0.008863, +-0.003387, +-0.004094, +-0.004098, +-0.004182, +0.044331, +-0.004223, +0.001599, +0.001243, +0.001595, +0.001872, +0.002164, +0.002460, +0.002761, +0.003067, +0.003378, +0.003695, +0.004017, +-0.044243, +0.004566, +-0.000994, +-0.000370, +-0.000451, +-0.000451, +-0.000460, +-0.000468, +-0.000476, +-0.000484, +-0.000493, +-0.000501, +-0.000509, +-0.000517, +-0.000526, +-0.000534, +-0.000542, +-0.000550, +-0.000559, +-0.000567, +-0.000575, +-0.000583, +-0.000591, +-0.000600, +-0.000608, +0.047971, +-0.000515, +0.005374, +0.005086, +0.005505, +0.005850, +0.006209, +0.006572, +-0.041646, +0.007205, +0.001686, +0.002351, +0.002312, +0.002354, +-0.046201, +0.002310, +-0.003554, +-0.003241, +-0.003635, +-0.003955, +-0.004289, +-0.004627, +-0.004971, +0.043268, +-0.005563, +-0.000025, +-0.000670, +-0.000611, +-0.000633, +-0.000645, +0.047928, +-0.000563, +0.005321, +0.005027, +0.005442, +0.005781, +0.006135, +-0.042094, +0.006747, +0.001218, +0.001872, +0.001823, +0.001854, +-0.046711, +0.001790, +-0.004085, +-0.003782, +-0.004186, +-0.004517, +-0.004861, +-0.005210, +-0.005563, +0.042665, +-0.006177, +-0.000649, +-0.001304, +-0.001256, +-0.001288, +0.047276, +-0.001225, +0.004648, +0.004344, +0.004748, +0.005077, +0.005421, +0.005768, +0.006121, +-0.042108, +0.006733, +0.001204, +0.001858, +0.001810, +0.001841, +-0.046725, +0.001776, +-0.004099, +-0.003795, +-0.004200, +-0.004530, +-0.004875, +-0.005223, +-0.005577, +0.042651, +-0.006191, +-0.000663, +-0.001318, +-0.001270, +-0.001302, +0.047263, +-0.001239, +0.004635, +0.004330, +0.004734, +0.005064, +0.005407, +0.005755, +0.006108, +-0.042121, +0.006720, +0.001191, +0.001845, +0.001796, +0.001827, +-0.046738, +0.001762, +-0.004112, +-0.003809, +-0.004214, +-0.004544, +-0.004888, +-0.005237, +-0.005591, +0.042638, +-0.006204, +-0.000676, +-0.001331, +-0.001283, +-0.001315, +0.047249, +-0.001252, +0.004621, +0.004317, +0.004721, +0.005050, +0.005394, +0.005741, +0.006094, +-0.042135, +0.006706, +0.001177, +0.001831, +0.001782, +0.001813, +-0.046752, +0.001749, +-0.004126, +-0.003822, +-0.004227, +-0.004557, +-0.004902, +-0.005250, +-0.005604, +0.042624, +-0.006218, +-0.000690, +-0.001345, +-0.001297, +-0.001329, +0.047235, +-0.001266, +0.004608, +0.004303, +0.004707, +0.005036, +0.005380, +0.005728, +0.006080, +-0.042149, +0.006692, +0.001163, +0.001818, +0.001769, +0.001800, +-0.046766, +0.001735, +-0.004140, +-0.003836, +-0.004241, +-0.004571, +-0.004916, +-0.005264, +-0.005618, +0.042610, +-0.006232, +-0.000703, +-0.001359, +-0.001311, +-0.001343, +0.047222, +-0.001280, +0.004594, +0.004290, +0.004694, +0.005023, +0.005366, +0.005714, +0.006067, +-0.042162, +0.006679, +0.001150, +0.001804, +0.001755, +0.001786, +-0.046779, +0.001721, +-0.004153, +-0.003850, +-0.004255, +-0.004585, +-0.004929, +-0.005278, +-0.005632, +0.042597, +-0.006245, +-0.000717, +-0.001372, +-0.001324, +-0.001356, +0.047208, +-0.001293, +0.004580, +0.004276, +0.004680, +0.005009, +0.005353, +0.005700, +0.006053, +-0.042176, +0.006665, +0.001136, +0.001790, +0.001741, +0.001772, +-0.046793, +0.001708, +-0.004167, +-0.003863, +-0.004268, +-0.004598, +-0.004943, +-0.005291, +-0.005645, +0.042583, +-0.006259, +-0.000731, +-0.001386, +-0.001338, +-0.001370, +0.047194, +-0.001307, +0.004567, +0.004262, +0.004666, +0.004995, +0.005339, +0.005687, +0.006040, +-0.042190, +0.006651, +0.001122, +0.001777, +0.001728, +0.001759, +-0.046807, +0.001694, +-0.004181, +-0.003877, +-0.004282, +-0.004612, +-0.004956, +-0.005305, +-0.005659, +0.042569, +-0.006272, +-0.000744, +-0.001400, +-0.001352, +-0.001384, +0.047181, +-0.001321, +0.004553, +0.004249, +0.004653, +0.004982, +0.005325, +0.005673, +0.006026, +-0.042203, +0.006638, +0.001109, +0.001763, +0.001714, +0.001745, +-0.046820, +0.001680, +-0.004194, +-0.003891, +-0.004296, +-0.004626, +-0.004970, +-0.005319, +-0.005673, +0.042556, +-0.006286, +-0.000758, +-0.001413, +-0.001365, +-0.001397, +0.047167, +-0.001334, +0.004539, +0.004235, +0.004639, +0.004968, +0.005312, +0.005659, +0.006012, +-0.042217, +0.006624, +0.001095, +0.001749, +0.001700, +0.001731, +-0.046834, +0.001667, +-0.004208, +-0.003904, +-0.004309, +-0.004639, +-0.004984, +-0.005332, +-0.005686, +0.042542, +-0.006300, +-0.000772, +-0.001427, +-0.001379, +-0.001411, +0.047153, +-0.001348, +0.004526, +0.004221, +0.004625, +0.004955, +0.005298, +0.005646, +0.005999, +-0.042231, +0.006610, +0.001081, +0.001736, +0.001687, +0.001718, +-0.046847, +0.001653, +-0.004221, +-0.003918, +-0.004323, +-0.004653, +-0.004997, +-0.005346, +-0.005700, +0.042528, +-0.006313, +-0.000785, +-0.001441, +-0.001393, +-0.001425, +0.047140, +-0.001362, +0.004512, +0.004208, +0.004612, +0.004941, +0.005284, +0.005632, +0.005985, +-0.042244, +0.006597, +0.001068, +0.001722, +0.001673, +0.001704, +-0.046861, +0.001639, +-0.004235, +-0.003932, +-0.004337, +-0.004667, +-0.005011, +-0.005360, +-0.005713, +0.042515, +-0.006327, +-0.000799, +-0.001454, +-0.001406, +-0.001438, +0.047126, +-0.001375, +0.004498, +0.004194, +0.004598, +0.004927, +0.005271, +0.005618, +0.005971, +-0.042258, +0.006583, +0.001054, +0.001708, +0.001659, +0.001691, +-0.046875, +0.001626, +-0.004249, +-0.003945, +-0.004350, +-0.004680, +-0.005025, +-0.005373, +-0.005727, +0.042501, +-0.006341, +-0.000813, +-0.001468, +-0.001420, +-0.001452, +0.047113, +-0.001389, +0.004485, +0.004180, +0.004584, +0.004914, +0.005257, +0.005605, +0.005958, +-0.042271, +0.006569, +0.001040, +0.001695, +0.001646, +0.001677, +-0.046888, +0.001612, +-0.004262, +-0.003959, +-0.004364, +-0.004694, +-0.005038, +-0.005387, +-0.005741, +0.042487, +-0.006354, +-0.000826, +-0.001481, +-0.001433, +-0.001465, +0.047099, +-0.001403, +0.004471, +0.004167, +0.004571, +0.004900, +0.005243, +0.005591, +0.005944, +-0.042285, +0.006556, +0.001027, +0.001681, +0.001632, +0.001663, +-0.046902, +0.001599, +-0.004276, +-0.003973, +-0.004377, +-0.004708, +-0.005052, +-0.005401, +-0.005754, +0.042474, +-0.006368, +-0.000840, +-0.001495, +-0.001447, +-0.001479, +0.047085, +-0.001416, +0.004457, +0.004153, +0.004557, +0.004886, +0.005230, +0.005577, +0.005930, +-0.042299, +0.006542, +0.001013, +0.001667, +0.001619, +0.001650, +-0.046916, +0.001585, +-0.004290, +-0.003986, +-0.004391, +-0.004721, +-0.005066, +-0.005414, +-0.005768, +0.042460, +-0.006382, +-0.000854, +-0.001509, +-0.001461, +-0.001493, +0.047072, +-0.001430, +0.004444, +0.004139, +0.004543, +0.004873, +0.005216, +0.005564, +0.005917, +-0.042312, +0.006528, +0.001000 diff --git a/examples/dcl/dcl_pi/data/PI_rk-1.dat b/examples/dcl/dcl_pi/data/PI_rk-1.dat new file mode 100644 index 0000000..4e8e70d --- /dev/null +++ b/examples/dcl/dcl_pi/data/PI_rk-1.dat @@ -0,0 +1,1601 @@ +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +4.42500025e-01f, +4.85000044e-01f, +5.27500033e-01f, +5.70000052e-01f, +6.12500072e-01f, +6.55000031e-01f, +6.97499990e-01f, +7.40000010e-01f, +7.44503379e-01f, +6.93175197e-01f, +6.78067803e-01f, +6.15299046e-01f, +5.67899108e-01f, +5.10702550e-01f, +4.46109116e-01f, +3.73383522e-01f, +3.11145663e-01f, +2.39396334e-01f, +1.79061413e-01f, +1.47991180e-01f, +9.00882483e-02f, +4.81491089e-02f, +3.77691984e-02f, +2.23348141e-02f, +2.52400041e-02f, +2.66372561e-02f, +4.81256843e-02f, +5.11810780e-02f, +9.60592628e-02f, +1.22420907e-01f, +1.55123681e-01f, +1.72804385e-01f, +2.14771658e-01f, +2.40486205e-01f, +2.72438914e-01f, +2.89420307e-01f, +2.92609096e-01f, +2.99524248e-01f, +3.08289051e-01f, +3.00231040e-01f, +2.76012301e-01f, +2.71976054e-01f, +2.47456238e-01f, +2.05495179e-01f, +2.01052547e-01f, +1.35808870e-01f, +1.30201414e-01f, +9.89277363e-02f, +5.01112342e-02f, +3.81307602e-02f, +2.72977352e-03f, +-1.28180683e-02f, +-3.09715867e-02f, +-3.01758349e-02f, +-4.93025482e-02f, +-4.73956764e-02f, +-4.65331376e-02f, +-2.50906795e-02f, +-4.08260822e-02f, +4.89063561e-03f, +-8.40775669e-03f, +2.35794336e-02f, +3.51547450e-02f, +7.04369992e-02f, +6.91079050e-02f, +9.20970812e-02f, +9.60566550e-02f, +1.22449979e-01f, +1.11145139e-01f, +1.22933857e-01f, +1.33367419e-01f, +1.26227796e-01f, +1.20779626e-01f, +1.14715233e-01f, +1.27179950e-01f, +1.00465655e-01f, +9.49734151e-02f, +8.61804113e-02f, +5.77644967e-02f, +6.68810159e-02f, +5.29612415e-02f, +5.93131781e-02f, +4.44762334e-02f, +3.05857137e-02f, +3.40077356e-02f, +3.53435352e-02f, +3.68034244e-02f, +3.81318480e-02f, +3.93602699e-02f, +5.94829321e-02f, +5.99216968e-02f, +6.25990182e-02f, +8.40201899e-02f, +8.58901143e-02f, +9.00984854e-02f, +9.41582471e-02f, +1.17346540e-01f, +1.21057183e-01f, +1.27212867e-01f, +1.33322790e-01f, +1.39668450e-01f, +1.27219394e-01f, +1.34560257e-01f, +1.39763683e-01f, +1.26329109e-01f, +1.32548690e-01f, +1.36533111e-01f, +1.21773876e-01f, +1.07566223e-01f, +1.29598901e-01f, +9.18625742e-02f, +1.14646129e-01f, +9.37811509e-02f, +1.14067614e-01f, +9.29100215e-02f, +7.46551007e-02f, +9.21408087e-02f, +1.06679097e-01f, +8.47890675e-02f, +8.42279792e-02f, +9.98947695e-02f, +9.59479809e-02f, +9.40030217e-02f, +1.10595934e-01f, +1.07431099e-01f, +1.06395878e-01f, +1.05004713e-01f, +1.22536279e-01f, +1.01382867e-01f, +1.21045753e-01f, +1.18532240e-01f, +1.18540742e-01f, +1.18262425e-01f, +1.18016727e-01f, +1.17767319e-01f, +1.17518328e-01f, +1.17269300e-01f, +1.17020272e-01f, +1.16771244e-01f, +9.75237861e-02f, +1.16854951e-01f, +9.52657685e-02f, +1.14747092e-01f, +9.30240825e-02f, +9.34078246e-02f, +1.10159755e-01f, +8.85172188e-02f, +8.86594951e-02f, +8.62099230e-02f, +1.02936789e-01f, +8.09492320e-02f, +9.97837037e-02f, +9.64399129e-02f, +7.66199380e-02f, +9.50917527e-02f, +1.10672086e-01f, +9.01632458e-02f, +9.12938043e-02f, +1.08962439e-01f, +8.83310586e-02f, +1.08588941e-01f, +1.06778286e-01f, +1.07591756e-01f, +8.92251208e-02f, +1.09572738e-01f, +1.08098552e-01f, +9.02220011e-02f, +1.10744387e-01f, +1.09481446e-01f, +9.18125808e-02f, +9.35446322e-02f, +1.12068161e-01f, +9.22652334e-02f, +9.43555534e-02f, +9.39560533e-02f, +1.12838142e-01f, +9.31094065e-02f, +9.53068435e-02f, +9.50107202e-02f, +9.49981734e-02f, +9.49533880e-02f, +9.49122608e-02f, +9.48707238e-02f, +9.48292241e-02f, +9.47877243e-02f, +9.47462246e-02f, +9.47047248e-02f, +9.46632251e-02f, +9.46217254e-02f, +9.45802256e-02f, +1.13537751e-01f, +9.39153954e-02f, +9.62162912e-02f, +9.60239619e-02f, +9.61151645e-02f, +1.15171969e-01f, +9.56550688e-02f, +9.80595350e-02f, +1.16969407e-01f, +9.75841731e-02f, +1.00089222e-01f, +1.00104786e-01f, +1.00403465e-01f, +1.00669950e-01f, +1.00940093e-01f, +1.01209827e-01f, +1.01479597e-01f, +1.01749368e-01f, +1.02019139e-01f, +1.02288909e-01f, +8.35602507e-02f, +1.03410214e-01f, +1.01337664e-01f, +1.01758257e-01f, +1.01895325e-01f, +1.02064624e-01f, +8.32324326e-02f, +1.02978013e-01f, +1.00801781e-01f, +1.01118609e-01f, +1.01151921e-01f, +1.01217464e-01f, +1.01279348e-01f, +1.01341642e-01f, +1.01403899e-01f, +1.01466157e-01f, +1.01528414e-01f, +1.01590671e-01f, +1.01652928e-01f, +1.01715185e-01f, +1.01777442e-01f, +1.01839699e-01f, +1.01901956e-01f, +1.01964213e-01f, +1.02026470e-01f, +1.02088727e-01f, +1.02150984e-01f, +1.02213241e-01f, +8.32764730e-02f, +1.02919586e-01f, +1.00639448e-01f, +1.00852534e-01f, +1.00782089e-01f, +1.00743875e-01f, +1.00702003e-01f, +1.00660540e-01f, +1.00619040e-01f, +1.00577541e-01f, +1.00536041e-01f, +1.00494541e-01f, +1.00453041e-01f, +1.00411542e-01f, +1.00370042e-01f, +1.00328542e-01f, +1.00287043e-01f, +1.00245543e-01f, +1.00204043e-01f, +1.00162543e-01f, +1.00121044e-01f, +1.00079544e-01f, +1.00038044e-01f, +9.99965444e-02f, +9.99550447e-02f, +9.99135450e-02f, +9.98720452e-02f, +9.98305455e-02f, +9.97890458e-02f, +9.97475460e-02f, +9.97060463e-02f, +9.96645465e-02f, +9.96230468e-02f, +9.95815471e-02f, +9.95400473e-02f, +9.94985476e-02f, +9.94570479e-02f, +9.94155481e-02f, +9.93740484e-02f, +9.93325487e-02f, +9.92910489e-02f, +9.92495492e-02f, +9.92080495e-02f, +9.91665497e-02f, +9.91250500e-02f, +9.90835503e-02f, +9.90420505e-02f, +9.90005508e-02f, +9.89590511e-02f, +9.89175513e-02f, +9.88760516e-02f, +9.88345519e-02f, +9.87930521e-02f, +1.17750578e-01f, +9.81282219e-02f, +1.00429118e-01f, +1.00236788e-01f, +1.00327991e-01f, +1.00386962e-01f, +1.00449592e-01f, +1.00511812e-01f, +1.00574069e-01f, +1.00636326e-01f, +1.00698583e-01f, +1.00760840e-01f, +1.00823097e-01f, +8.18863288e-02f, +1.01529442e-01f, +9.92493033e-02f, +9.94623899e-02f, +9.93919447e-02f, +9.93537307e-02f, +9.93118584e-02f, +9.92703959e-02f, +9.92288962e-02f, +9.91873965e-02f, +9.91458967e-02f, +9.91043970e-02f, +9.90628973e-02f, +9.90213975e-02f, +1.17978923e-01f, +9.83565673e-02f, +1.00657463e-01f, +1.00465134e-01f, +1.00556336e-01f, +1.00615308e-01f, +1.00677937e-01f, +1.00740157e-01f, +1.00802414e-01f, +1.00864671e-01f, +1.00926928e-01f, +1.00989185e-01f, +1.01051442e-01f, +1.01113699e-01f, +1.01175956e-01f, +8.22391883e-02f, +1.01882301e-01f, +9.96021628e-02f, +9.98152494e-02f, +9.97448042e-02f, +9.97065902e-02f, +9.96647179e-02f, +9.96232554e-02f, +9.95817557e-02f, +9.95402560e-02f, +9.94987562e-02f, +9.94572565e-02f, +9.94157568e-02f, +9.93742570e-02f, +9.93327573e-02f, +9.92912576e-02f, +9.92497578e-02f, +1.18207283e-01f, +9.85849276e-02f, +1.00885823e-01f, +1.00693494e-01f, +1.00784697e-01f, +1.00843668e-01f, +1.00906298e-01f, +1.00968517e-01f, +1.01030774e-01f, +1.01093031e-01f, +1.01155289e-01f, +8.22185203e-02f, +1.01861633e-01f, +9.95814949e-02f, +9.97945815e-02f, +9.97241363e-02f, +9.96859223e-02f, +9.96440500e-02f, +9.96025875e-02f, +9.95610878e-02f, +9.95195881e-02f, +9.94780883e-02f, +9.94365886e-02f, +9.93950889e-02f, +9.93535891e-02f, +9.93120894e-02f, +9.92705896e-02f, +9.92290899e-02f, +9.91875902e-02f, +9.91460904e-02f, +1.18103616e-01f, +9.84812602e-02f, +1.00782156e-01f, +1.00589827e-01f, +1.00681029e-01f, +1.00740001e-01f, +1.00802630e-01f, +1.00864850e-01f, +1.00927107e-01f, +1.00989364e-01f, +1.01051621e-01f, +1.01113878e-01f, +8.21771100e-02f, +1.01820223e-01f, +9.95400846e-02f, +9.97531712e-02f, +9.96827260e-02f, +9.96445119e-02f, +9.96026397e-02f, +9.95611772e-02f, +9.95196775e-02f, +9.94781777e-02f, +9.94366780e-02f, +9.93951783e-02f, +9.93536785e-02f, +9.93121788e-02f, +9.92706791e-02f, +9.92291793e-02f, +9.91876796e-02f, +9.91461799e-02f, +1.18103705e-01f, +9.84813496e-02f, +1.00782245e-01f, +1.00589916e-01f, +1.00681119e-01f, +1.00740090e-01f, +1.00802720e-01f, +1.00864939e-01f, +1.00927196e-01f, +1.00989453e-01f, +1.01051711e-01f, +1.01113968e-01f, +8.21771994e-02f, +1.01820312e-01f, +9.95401740e-02f, +9.97532606e-02f, +9.96828154e-02f, +9.96446013e-02f, +9.96027291e-02f, +9.95612666e-02f, +9.95197669e-02f, +9.94782671e-02f, +9.94367674e-02f, +9.93952677e-02f, +9.93537679e-02f, +9.93122682e-02f, +9.92707685e-02f, +9.92292687e-02f, +9.91877690e-02f, +9.91462693e-02f, +1.18103795e-01f, +9.84814391e-02f, +1.00782335e-01f, +1.00590006e-01f, +1.00681208e-01f, +1.00740179e-01f, +1.00802809e-01f, +1.00865029e-01f, +1.00927286e-01f, +1.00989543e-01f, +1.01051800e-01f, +1.01114057e-01f, +8.21772888e-02f, +1.01820402e-01f, +9.95402634e-02f, +9.97533500e-02f, +9.96829048e-02f, +9.96446908e-02f, +9.96028185e-02f, +9.95613560e-02f, +9.95198563e-02f, +9.94783565e-02f, +9.94368568e-02f, +9.93953571e-02f, +9.93538573e-02f, +9.93123576e-02f, +9.92708579e-02f, +9.92293581e-02f, +9.91878584e-02f, +9.91463587e-02f, +1.18103884e-01f, +9.84815285e-02f, +1.00782424e-01f, +1.00590095e-01f, +1.00681297e-01f, +1.00740269e-01f, +1.00802898e-01f, +1.00865118e-01f, +1.00927375e-01f, +1.00989632e-01f, +1.01051889e-01f, +1.01114146e-01f, +8.21773782e-02f, +1.01820491e-01f, +9.95403528e-02f, +9.97534394e-02f, +9.96829942e-02f, +9.96447802e-02f, +9.96029079e-02f, +9.95614454e-02f, +9.95199457e-02f, +9.94784459e-02f, +9.94369462e-02f, +9.93954465e-02f, +9.93539467e-02f, +9.93124470e-02f, +9.92709473e-02f, +9.92294475e-02f, +9.91879478e-02f, +9.91464481e-02f, +1.18103974e-01f, +9.84816179e-02f, +1.00782514e-01f, +1.00590184e-01f, +1.00681387e-01f, +1.00740358e-01f, +1.00802988e-01f, +1.00865208e-01f, +1.00927465e-01f, +1.00989722e-01f, +1.01051979e-01f, +1.01114236e-01f, +8.21774676e-02f, +1.01820581e-01f, +9.95404422e-02f, +9.97535288e-02f, +9.96830836e-02f, +9.96448696e-02f, +9.96029973e-02f, +9.95615348e-02f, +9.95200351e-02f, +9.94785354e-02f, +9.94370356e-02f, +9.93955359e-02f, +9.93540362e-02f, +9.93125364e-02f, +9.92710367e-02f, +9.92295370e-02f, +9.91880372e-02f, +9.91465375e-02f, +1.18104063e-01f, +9.84817073e-02f, +1.00782603e-01f, +1.00590274e-01f, +1.00681476e-01f, +1.00740448e-01f, +1.00803077e-01f, +1.00865297e-01f, +1.00927554e-01f, +1.00989811e-01f, +1.01052068e-01f, +1.01114325e-01f, +8.21775571e-02f, +1.01820670e-01f, +9.95405316e-02f, +9.97536182e-02f, +9.96831730e-02f, +9.96449590e-02f, +9.96030867e-02f, +9.95616242e-02f, +9.95201245e-02f, +9.94786248e-02f, +9.94371250e-02f, +9.93956253e-02f, +9.93541256e-02f, +9.93126258e-02f, +9.92711261e-02f, +9.92296264e-02f, +9.91881266e-02f, +9.91466269e-02f, +1.18104152e-01f, +9.84817967e-02f, +1.00782692e-01f, +1.00590363e-01f, +1.00681566e-01f, +1.00740537e-01f, +1.00803167e-01f, +1.00865386e-01f, +1.00927643e-01f, +1.00989901e-01f, +1.01052158e-01f, +1.01114415e-01f, +8.21776465e-02f, +1.01820759e-01f, +9.95406210e-02f, +9.97537076e-02f, +9.96832624e-02f, +9.96450484e-02f, +9.96031761e-02f, +9.95617136e-02f, +9.95202139e-02f, +9.94787142e-02f, +9.94372144e-02f, +9.93957147e-02f, +9.93542150e-02f, +9.93127152e-02f, +9.92712155e-02f, +9.92297158e-02f, +9.91882160e-02f, +9.91467163e-02f, +1.18104242e-01f, +9.84818861e-02f, +1.00782782e-01f, +1.00590453e-01f, +1.00681655e-01f, +1.00740626e-01f, +1.00803256e-01f, +1.00865476e-01f, +1.00927733e-01f, +1.00989990e-01f, +1.01052247e-01f, +1.01114504e-01f, +8.21777359e-02f, +1.01820849e-01f, +9.95407104e-02f, +9.97537971e-02f, +9.96833518e-02f, +9.96451378e-02f, +9.96032655e-02f, +9.95618030e-02f, +9.95203033e-02f, +9.94788036e-02f, +9.94373038e-02f, +9.93958041e-02f, +9.93543044e-02f, +9.93128046e-02f, +9.92713049e-02f, +9.92298052e-02f, +9.91883054e-02f, +9.91468057e-02f, +1.18104331e-01f, +9.84819755e-02f, +1.00782871e-01f, +1.00590542e-01f, +1.00681745e-01f, +1.00740716e-01f, +1.00803345e-01f, +1.00865565e-01f, +1.00927822e-01f, +1.00990079e-01f, +1.01052336e-01f, +1.01114593e-01f, +8.21778253e-02f, +1.01820938e-01f, +9.95407999e-02f, +9.97538865e-02f, +9.96834412e-02f, +9.96452272e-02f, +9.96033549e-02f, +-3.42938125e-01f, +-3.85479629e-01f, +-4.28021133e-01f, +-4.70562637e-01f, +-5.13104141e-01f, +-5.55645645e-01f, +-5.98187149e-01f, +-6.40728652e-01f, +-6.26274884e-01f, +-6.13566935e-01f, +-5.57580411e-01f, +-5.16925931e-01f, +-4.66942549e-01f, +-4.09970045e-01f, +-3.45281988e-01f, +-2.72497773e-01f, +-2.10196942e-01f, +-1.38385564e-01f, +-9.69865024e-02f, +-2.72760093e-02f, +8.76706839e-03f, +3.42630148e-02f, +6.40022159e-02f, +7.71883130e-02f, +7.44922161e-02f, +7.30258226e-02f, +5.14984727e-02f, +4.84022498e-02f, +3.48076224e-03f, +-2.29215324e-02f, +-5.56652844e-02f, +-7.33872652e-02f, +-1.15397274e-01f, +-1.41152546e-01f, +-1.73146278e-01f, +-1.90169528e-01f, +-1.93400681e-01f, +-2.00357273e-01f, +-2.09161803e-01f, +-1.82148278e-01f, +-1.96549773e-01f, +-1.70632660e-01f, +-1.29648015e-01f, +-1.26025021e-01f, +-8.07341412e-02f, +-5.66000342e-02f, +-9.82972980e-03f, +-7.03707337e-04f, +5.06999642e-02f, +6.24568909e-02f, +9.79519263e-02f, +1.13559149e-01f, +1.31774381e-01f, +1.31041825e-01f, +1.50229812e-01f, +1.48385748e-01f, +1.28586948e-01f, +1.45784944e-01f, +1.20663173e-01f, +1.16079122e-01f, +8.82356167e-02f, +7.84156322e-02f, +6.42740056e-02f, +2.92375125e-02f, +3.04918550e-02f, +7.46510923e-03f, +3.46343219e-03f, +-2.29710191e-02f, +-1.17079616e-02f, +-2.35381573e-02f, +-3.40131521e-02f, +-2.69152075e-02f, +-2.15080157e-02f, +-1.54852942e-02f, +-8.99375975e-03f, +-1.90117955e-03f, +5.89297712e-03f, +1.44928247e-02f, +2.40020975e-02f, +3.45245898e-02f, +4.61639799e-02f, +5.90240769e-02f, +5.42103164e-02f, +7.04048499e-02f, +6.67907298e-02f, +6.55449182e-02f, +6.41453341e-02f, +6.28788248e-02f, +4.27143499e-02f, +6.12324476e-02f, +3.89335603e-02f, +1.98133066e-02f, +3.67493629e-02f, +1.30515024e-02f, +-7.60401040e-03f, +7.69667327e-03f, +-1.77407265e-02f, +-2.12411806e-02f, +-2.74675824e-02f, +-3.36151347e-02f, +-4.00026888e-02f, +-2.75957584e-02f, +-3.49770151e-02f, +-4.02231142e-02f, +-2.68294625e-02f, +-3.30906212e-02f, +-3.71165238e-02f, +-2.23983452e-02f, +-8.23285431e-03f, +-1.13086058e-02f, +-1.21923573e-02f, +-1.30943507e-02f, +5.23524452e-03f, +4.18929383e-03f, +5.69359027e-03f, +7.25446083e-03f, +9.15567204e-03f, +1.13647636e-02f, +1.38855614e-02f, +-2.28073075e-03f, +2.04426534e-02f, +2.55659595e-03f, +-1.19432937e-02f, +9.82064568e-03f, +-8.84177908e-03f, +-5.25609963e-03f, +-2.30833609e-02f, +-1.94205716e-03f, +-2.16502845e-02f, +-1.91778392e-02f, +-1.92278996e-02f, +-1.89910866e-02f, +-1.87868997e-02f, +-1.85790006e-02f, +-1.83715243e-02f, +-1.81640014e-02f, +-1.79564822e-02f, +-1.77489631e-02f, +-1.75414439e-02f, +1.66440383e-03f, +-1.77081488e-02f, +3.84001061e-03f, +3.31497006e-03f, +5.41575439e-03f, +-1.16648311e-02f, +9.96935740e-03f, +9.78120603e-03f, +1.21903708e-02f, +1.44197224e-02f, +-2.21326388e-03f, +1.98322479e-02f, +1.06123928e-03f, +4.46713902e-03f, +5.35095949e-03f, +6.52160589e-03f, +7.65963271e-03f, +8.80136807e-03f, +-9.05563775e-03f, +1.16657894e-02f, +-8.53350386e-03f, +-6.65956968e-03f, +-7.41149299e-03f, +1.10179810e-02f, +-9.26733017e-03f, +-7.73029262e-03f, +-8.79059546e-03f, +9.32727382e-03f, +-1.12692788e-02f, +8.95479508e-03f, +-1.19968448e-02f, +8.15204903e-03f, +-1.29066026e-02f, +7.13890372e-03f, +4.97477967e-03f, +5.33645507e-03f, +5.41088311e-03f, +5.51797822e-03f, +5.62135875e-03f, +5.72516117e-03f, +5.82891610e-03f, +5.93267614e-03f, +6.03643572e-03f, +6.14019530e-03f, +6.24395488e-03f, +6.34771446e-03f, +6.45147404e-03f, +6.55523362e-03f, +-1.23393349e-02f, +7.34449876e-03f, +5.10594575e-03f, +5.36052650e-03f, +-1.36667546e-02f, +5.91661269e-03f, +3.57392570e-03f, +-1.52735384e-02f, +4.17381758e-03f, +1.73103833e-03f, +-1.72206033e-02f, +2.12304131e-03f, +-4.23502875e-04f, +-4.80575487e-04f, +-8.20764573e-04f, +-1.12875598e-03f, +-1.44040911e-03f, +-1.75164582e-03f, +-2.06293003e-03f, +-2.37420900e-03f, +1.63128395e-02f, +-3.57851293e-03f, +-1.54747977e-03f, +-2.00957968e-03f, +-2.18814681e-03f, +1.65993702e-02f, +-3.18784988e-03f, +-1.05309929e-03f, +-1.41143473e-03f, +-1.48624275e-03f, +-1.59329502e-03f, +1.73016489e-02f, +-2.38222838e-03f, +-1.43670652e-04f, +-3.98251635e-04f, +-3.69299290e-04f, +-3.72591894e-04f, +-3.72217444e-04f, +-3.72260023e-04f, +-3.72255192e-04f, +-1.93705838e-02f, +2.09489954e-04f, +-2.13282253e-03f, +-1.98200205e-03f, +-2.11471389e-03f, +-2.21518101e-03f, +-2.31931545e-03f, +-2.42303265e-03f, +-2.52679735e-03f, +-2.63055647e-03f, +-2.73431651e-03f, +1.61602516e-02f, +-3.52358166e-03f, +-1.28502876e-03f, +-1.53960916e-03f, +-1.51065690e-03f, +-1.51394948e-03f, +1.74847543e-02f, +-2.09536310e-03f, +2.46954267e-04f, +9.61332116e-05f, +2.28845282e-04f, +3.29312461e-04f, +4.33446723e-04f, +5.37163753e-04f, +6.40928396e-04f, +7.44687568e-04f, +8.48447438e-04f, +9.52207192e-04f, +1.05596695e-03f, +-1.78386010e-02f, +1.84523209e-03f, +-3.93320690e-04f, +-1.38740288e-04f, +-1.67692560e-04f, +-1.64399942e-04f, +-1.64774407e-04f, +-1.64731813e-04f, +-1.64736659e-04f, +-1.64736106e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +1.88335925e-02f, +-7.46481761e-04f, +1.59583078e-03f, +1.44501007e-03f, +1.57772214e-03f, +1.67818926e-03f, +1.78232358e-03f, +1.88604067e-03f, +-1.70085225e-02f, +2.67531024e-03f, +4.36757371e-04f, +6.91337802e-04f, +6.62385544e-04f, +6.65678119e-04f, +-1.83330253e-02f, +1.24709192e-03f, +-1.09522545e-03f, +-9.44404339e-04f, +-1.07711635e-03f, +-1.17758359e-03f, +-1.28171779e-03f, +-1.38543488e-03f, +-1.48919947e-03f, +1.74053684e-02f, +-2.27846415e-03f, +-3.99113924e-05f, +-2.94491823e-04f, +-2.65539536e-04f, +-2.68832140e-04f, +-2.68457690e-04f, +1.87298283e-02f, +-8.50240933e-04f, +1.49207085e-03f, +1.34125038e-03f, +1.47396233e-03f, +1.57442957e-03f, +1.67856389e-03f, +-1.72160473e-02f, +2.46779108e-03f, +2.29237805e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, diff --git a/examples/dcl/dcl_pi/data/PI_rk-2.dat b/examples/dcl/dcl_pi/data/PI_rk-2.dat new file mode 100644 index 0000000..4e8e70d --- /dev/null +++ b/examples/dcl/dcl_pi/data/PI_rk-2.dat @@ -0,0 +1,1601 @@ +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +4.42500025e-01f, +4.85000044e-01f, +5.27500033e-01f, +5.70000052e-01f, +6.12500072e-01f, +6.55000031e-01f, +6.97499990e-01f, +7.40000010e-01f, +7.44503379e-01f, +6.93175197e-01f, +6.78067803e-01f, +6.15299046e-01f, +5.67899108e-01f, +5.10702550e-01f, +4.46109116e-01f, +3.73383522e-01f, +3.11145663e-01f, +2.39396334e-01f, +1.79061413e-01f, +1.47991180e-01f, +9.00882483e-02f, +4.81491089e-02f, +3.77691984e-02f, +2.23348141e-02f, +2.52400041e-02f, +2.66372561e-02f, +4.81256843e-02f, +5.11810780e-02f, +9.60592628e-02f, +1.22420907e-01f, +1.55123681e-01f, +1.72804385e-01f, +2.14771658e-01f, +2.40486205e-01f, +2.72438914e-01f, +2.89420307e-01f, +2.92609096e-01f, +2.99524248e-01f, +3.08289051e-01f, +3.00231040e-01f, +2.76012301e-01f, +2.71976054e-01f, +2.47456238e-01f, +2.05495179e-01f, +2.01052547e-01f, +1.35808870e-01f, +1.30201414e-01f, +9.89277363e-02f, +5.01112342e-02f, +3.81307602e-02f, +2.72977352e-03f, +-1.28180683e-02f, +-3.09715867e-02f, +-3.01758349e-02f, +-4.93025482e-02f, +-4.73956764e-02f, +-4.65331376e-02f, +-2.50906795e-02f, +-4.08260822e-02f, +4.89063561e-03f, +-8.40775669e-03f, +2.35794336e-02f, +3.51547450e-02f, +7.04369992e-02f, +6.91079050e-02f, +9.20970812e-02f, +9.60566550e-02f, +1.22449979e-01f, +1.11145139e-01f, +1.22933857e-01f, +1.33367419e-01f, +1.26227796e-01f, +1.20779626e-01f, +1.14715233e-01f, +1.27179950e-01f, +1.00465655e-01f, +9.49734151e-02f, +8.61804113e-02f, +5.77644967e-02f, +6.68810159e-02f, +5.29612415e-02f, +5.93131781e-02f, +4.44762334e-02f, +3.05857137e-02f, +3.40077356e-02f, +3.53435352e-02f, +3.68034244e-02f, +3.81318480e-02f, +3.93602699e-02f, +5.94829321e-02f, +5.99216968e-02f, +6.25990182e-02f, +8.40201899e-02f, +8.58901143e-02f, +9.00984854e-02f, +9.41582471e-02f, +1.17346540e-01f, +1.21057183e-01f, +1.27212867e-01f, +1.33322790e-01f, +1.39668450e-01f, +1.27219394e-01f, +1.34560257e-01f, +1.39763683e-01f, +1.26329109e-01f, +1.32548690e-01f, +1.36533111e-01f, +1.21773876e-01f, +1.07566223e-01f, +1.29598901e-01f, +9.18625742e-02f, +1.14646129e-01f, +9.37811509e-02f, +1.14067614e-01f, +9.29100215e-02f, +7.46551007e-02f, +9.21408087e-02f, +1.06679097e-01f, +8.47890675e-02f, +8.42279792e-02f, +9.98947695e-02f, +9.59479809e-02f, +9.40030217e-02f, +1.10595934e-01f, +1.07431099e-01f, +1.06395878e-01f, +1.05004713e-01f, +1.22536279e-01f, +1.01382867e-01f, +1.21045753e-01f, +1.18532240e-01f, +1.18540742e-01f, +1.18262425e-01f, +1.18016727e-01f, +1.17767319e-01f, +1.17518328e-01f, +1.17269300e-01f, +1.17020272e-01f, +1.16771244e-01f, +9.75237861e-02f, +1.16854951e-01f, +9.52657685e-02f, +1.14747092e-01f, +9.30240825e-02f, +9.34078246e-02f, +1.10159755e-01f, +8.85172188e-02f, +8.86594951e-02f, +8.62099230e-02f, +1.02936789e-01f, +8.09492320e-02f, +9.97837037e-02f, +9.64399129e-02f, +7.66199380e-02f, +9.50917527e-02f, +1.10672086e-01f, +9.01632458e-02f, +9.12938043e-02f, +1.08962439e-01f, +8.83310586e-02f, +1.08588941e-01f, +1.06778286e-01f, +1.07591756e-01f, +8.92251208e-02f, +1.09572738e-01f, +1.08098552e-01f, +9.02220011e-02f, +1.10744387e-01f, +1.09481446e-01f, +9.18125808e-02f, +9.35446322e-02f, +1.12068161e-01f, +9.22652334e-02f, +9.43555534e-02f, +9.39560533e-02f, +1.12838142e-01f, +9.31094065e-02f, +9.53068435e-02f, +9.50107202e-02f, +9.49981734e-02f, +9.49533880e-02f, +9.49122608e-02f, +9.48707238e-02f, +9.48292241e-02f, +9.47877243e-02f, +9.47462246e-02f, +9.47047248e-02f, +9.46632251e-02f, +9.46217254e-02f, +9.45802256e-02f, +1.13537751e-01f, +9.39153954e-02f, +9.62162912e-02f, +9.60239619e-02f, +9.61151645e-02f, +1.15171969e-01f, +9.56550688e-02f, +9.80595350e-02f, +1.16969407e-01f, +9.75841731e-02f, +1.00089222e-01f, +1.00104786e-01f, +1.00403465e-01f, +1.00669950e-01f, +1.00940093e-01f, +1.01209827e-01f, +1.01479597e-01f, +1.01749368e-01f, +1.02019139e-01f, +1.02288909e-01f, +8.35602507e-02f, +1.03410214e-01f, +1.01337664e-01f, +1.01758257e-01f, +1.01895325e-01f, +1.02064624e-01f, +8.32324326e-02f, +1.02978013e-01f, +1.00801781e-01f, +1.01118609e-01f, +1.01151921e-01f, +1.01217464e-01f, +1.01279348e-01f, +1.01341642e-01f, +1.01403899e-01f, +1.01466157e-01f, +1.01528414e-01f, +1.01590671e-01f, +1.01652928e-01f, +1.01715185e-01f, +1.01777442e-01f, +1.01839699e-01f, +1.01901956e-01f, +1.01964213e-01f, +1.02026470e-01f, +1.02088727e-01f, +1.02150984e-01f, +1.02213241e-01f, +8.32764730e-02f, +1.02919586e-01f, +1.00639448e-01f, +1.00852534e-01f, +1.00782089e-01f, +1.00743875e-01f, +1.00702003e-01f, +1.00660540e-01f, +1.00619040e-01f, +1.00577541e-01f, +1.00536041e-01f, +1.00494541e-01f, +1.00453041e-01f, +1.00411542e-01f, +1.00370042e-01f, +1.00328542e-01f, +1.00287043e-01f, +1.00245543e-01f, +1.00204043e-01f, +1.00162543e-01f, +1.00121044e-01f, +1.00079544e-01f, +1.00038044e-01f, +9.99965444e-02f, +9.99550447e-02f, +9.99135450e-02f, +9.98720452e-02f, +9.98305455e-02f, +9.97890458e-02f, +9.97475460e-02f, +9.97060463e-02f, +9.96645465e-02f, +9.96230468e-02f, +9.95815471e-02f, +9.95400473e-02f, +9.94985476e-02f, +9.94570479e-02f, +9.94155481e-02f, +9.93740484e-02f, +9.93325487e-02f, +9.92910489e-02f, +9.92495492e-02f, +9.92080495e-02f, +9.91665497e-02f, +9.91250500e-02f, +9.90835503e-02f, +9.90420505e-02f, +9.90005508e-02f, +9.89590511e-02f, +9.89175513e-02f, +9.88760516e-02f, +9.88345519e-02f, +9.87930521e-02f, +1.17750578e-01f, +9.81282219e-02f, +1.00429118e-01f, +1.00236788e-01f, +1.00327991e-01f, +1.00386962e-01f, +1.00449592e-01f, +1.00511812e-01f, +1.00574069e-01f, +1.00636326e-01f, +1.00698583e-01f, +1.00760840e-01f, +1.00823097e-01f, +8.18863288e-02f, +1.01529442e-01f, +9.92493033e-02f, +9.94623899e-02f, +9.93919447e-02f, +9.93537307e-02f, +9.93118584e-02f, +9.92703959e-02f, +9.92288962e-02f, +9.91873965e-02f, +9.91458967e-02f, +9.91043970e-02f, +9.90628973e-02f, +9.90213975e-02f, +1.17978923e-01f, +9.83565673e-02f, +1.00657463e-01f, +1.00465134e-01f, +1.00556336e-01f, +1.00615308e-01f, +1.00677937e-01f, +1.00740157e-01f, +1.00802414e-01f, +1.00864671e-01f, +1.00926928e-01f, +1.00989185e-01f, +1.01051442e-01f, +1.01113699e-01f, +1.01175956e-01f, +8.22391883e-02f, +1.01882301e-01f, +9.96021628e-02f, +9.98152494e-02f, +9.97448042e-02f, +9.97065902e-02f, +9.96647179e-02f, +9.96232554e-02f, +9.95817557e-02f, +9.95402560e-02f, +9.94987562e-02f, +9.94572565e-02f, +9.94157568e-02f, +9.93742570e-02f, +9.93327573e-02f, +9.92912576e-02f, +9.92497578e-02f, +1.18207283e-01f, +9.85849276e-02f, +1.00885823e-01f, +1.00693494e-01f, +1.00784697e-01f, +1.00843668e-01f, +1.00906298e-01f, +1.00968517e-01f, +1.01030774e-01f, +1.01093031e-01f, +1.01155289e-01f, +8.22185203e-02f, +1.01861633e-01f, +9.95814949e-02f, +9.97945815e-02f, +9.97241363e-02f, +9.96859223e-02f, +9.96440500e-02f, +9.96025875e-02f, +9.95610878e-02f, +9.95195881e-02f, +9.94780883e-02f, +9.94365886e-02f, +9.93950889e-02f, +9.93535891e-02f, +9.93120894e-02f, +9.92705896e-02f, +9.92290899e-02f, +9.91875902e-02f, +9.91460904e-02f, +1.18103616e-01f, +9.84812602e-02f, +1.00782156e-01f, +1.00589827e-01f, +1.00681029e-01f, +1.00740001e-01f, +1.00802630e-01f, +1.00864850e-01f, +1.00927107e-01f, +1.00989364e-01f, +1.01051621e-01f, +1.01113878e-01f, +8.21771100e-02f, +1.01820223e-01f, +9.95400846e-02f, +9.97531712e-02f, +9.96827260e-02f, +9.96445119e-02f, +9.96026397e-02f, +9.95611772e-02f, +9.95196775e-02f, +9.94781777e-02f, +9.94366780e-02f, +9.93951783e-02f, +9.93536785e-02f, +9.93121788e-02f, +9.92706791e-02f, +9.92291793e-02f, +9.91876796e-02f, +9.91461799e-02f, +1.18103705e-01f, +9.84813496e-02f, +1.00782245e-01f, +1.00589916e-01f, +1.00681119e-01f, +1.00740090e-01f, +1.00802720e-01f, +1.00864939e-01f, +1.00927196e-01f, +1.00989453e-01f, +1.01051711e-01f, +1.01113968e-01f, +8.21771994e-02f, +1.01820312e-01f, +9.95401740e-02f, +9.97532606e-02f, +9.96828154e-02f, +9.96446013e-02f, +9.96027291e-02f, +9.95612666e-02f, +9.95197669e-02f, +9.94782671e-02f, +9.94367674e-02f, +9.93952677e-02f, +9.93537679e-02f, +9.93122682e-02f, +9.92707685e-02f, +9.92292687e-02f, +9.91877690e-02f, +9.91462693e-02f, +1.18103795e-01f, +9.84814391e-02f, +1.00782335e-01f, +1.00590006e-01f, +1.00681208e-01f, +1.00740179e-01f, +1.00802809e-01f, +1.00865029e-01f, +1.00927286e-01f, +1.00989543e-01f, +1.01051800e-01f, +1.01114057e-01f, +8.21772888e-02f, +1.01820402e-01f, +9.95402634e-02f, +9.97533500e-02f, +9.96829048e-02f, +9.96446908e-02f, +9.96028185e-02f, +9.95613560e-02f, +9.95198563e-02f, +9.94783565e-02f, +9.94368568e-02f, +9.93953571e-02f, +9.93538573e-02f, +9.93123576e-02f, +9.92708579e-02f, +9.92293581e-02f, +9.91878584e-02f, +9.91463587e-02f, +1.18103884e-01f, +9.84815285e-02f, +1.00782424e-01f, +1.00590095e-01f, +1.00681297e-01f, +1.00740269e-01f, +1.00802898e-01f, +1.00865118e-01f, +1.00927375e-01f, +1.00989632e-01f, +1.01051889e-01f, +1.01114146e-01f, +8.21773782e-02f, +1.01820491e-01f, +9.95403528e-02f, +9.97534394e-02f, +9.96829942e-02f, +9.96447802e-02f, +9.96029079e-02f, +9.95614454e-02f, +9.95199457e-02f, +9.94784459e-02f, +9.94369462e-02f, +9.93954465e-02f, +9.93539467e-02f, +9.93124470e-02f, +9.92709473e-02f, +9.92294475e-02f, +9.91879478e-02f, +9.91464481e-02f, +1.18103974e-01f, +9.84816179e-02f, +1.00782514e-01f, +1.00590184e-01f, +1.00681387e-01f, +1.00740358e-01f, +1.00802988e-01f, +1.00865208e-01f, +1.00927465e-01f, +1.00989722e-01f, +1.01051979e-01f, +1.01114236e-01f, +8.21774676e-02f, +1.01820581e-01f, +9.95404422e-02f, +9.97535288e-02f, +9.96830836e-02f, +9.96448696e-02f, +9.96029973e-02f, +9.95615348e-02f, +9.95200351e-02f, +9.94785354e-02f, +9.94370356e-02f, +9.93955359e-02f, +9.93540362e-02f, +9.93125364e-02f, +9.92710367e-02f, +9.92295370e-02f, +9.91880372e-02f, +9.91465375e-02f, +1.18104063e-01f, +9.84817073e-02f, +1.00782603e-01f, +1.00590274e-01f, +1.00681476e-01f, +1.00740448e-01f, +1.00803077e-01f, +1.00865297e-01f, +1.00927554e-01f, +1.00989811e-01f, +1.01052068e-01f, +1.01114325e-01f, +8.21775571e-02f, +1.01820670e-01f, +9.95405316e-02f, +9.97536182e-02f, +9.96831730e-02f, +9.96449590e-02f, +9.96030867e-02f, +9.95616242e-02f, +9.95201245e-02f, +9.94786248e-02f, +9.94371250e-02f, +9.93956253e-02f, +9.93541256e-02f, +9.93126258e-02f, +9.92711261e-02f, +9.92296264e-02f, +9.91881266e-02f, +9.91466269e-02f, +1.18104152e-01f, +9.84817967e-02f, +1.00782692e-01f, +1.00590363e-01f, +1.00681566e-01f, +1.00740537e-01f, +1.00803167e-01f, +1.00865386e-01f, +1.00927643e-01f, +1.00989901e-01f, +1.01052158e-01f, +1.01114415e-01f, +8.21776465e-02f, +1.01820759e-01f, +9.95406210e-02f, +9.97537076e-02f, +9.96832624e-02f, +9.96450484e-02f, +9.96031761e-02f, +9.95617136e-02f, +9.95202139e-02f, +9.94787142e-02f, +9.94372144e-02f, +9.93957147e-02f, +9.93542150e-02f, +9.93127152e-02f, +9.92712155e-02f, +9.92297158e-02f, +9.91882160e-02f, +9.91467163e-02f, +1.18104242e-01f, +9.84818861e-02f, +1.00782782e-01f, +1.00590453e-01f, +1.00681655e-01f, +1.00740626e-01f, +1.00803256e-01f, +1.00865476e-01f, +1.00927733e-01f, +1.00989990e-01f, +1.01052247e-01f, +1.01114504e-01f, +8.21777359e-02f, +1.01820849e-01f, +9.95407104e-02f, +9.97537971e-02f, +9.96833518e-02f, +9.96451378e-02f, +9.96032655e-02f, +9.95618030e-02f, +9.95203033e-02f, +9.94788036e-02f, +9.94373038e-02f, +9.93958041e-02f, +9.93543044e-02f, +9.93128046e-02f, +9.92713049e-02f, +9.92298052e-02f, +9.91883054e-02f, +9.91468057e-02f, +1.18104331e-01f, +9.84819755e-02f, +1.00782871e-01f, +1.00590542e-01f, +1.00681745e-01f, +1.00740716e-01f, +1.00803345e-01f, +1.00865565e-01f, +1.00927822e-01f, +1.00990079e-01f, +1.01052336e-01f, +1.01114593e-01f, +8.21778253e-02f, +1.01820938e-01f, +9.95407999e-02f, +9.97538865e-02f, +9.96834412e-02f, +9.96452272e-02f, +9.96033549e-02f, +-3.42938125e-01f, +-3.85479629e-01f, +-4.28021133e-01f, +-4.70562637e-01f, +-5.13104141e-01f, +-5.55645645e-01f, +-5.98187149e-01f, +-6.40728652e-01f, +-6.26274884e-01f, +-6.13566935e-01f, +-5.57580411e-01f, +-5.16925931e-01f, +-4.66942549e-01f, +-4.09970045e-01f, +-3.45281988e-01f, +-2.72497773e-01f, +-2.10196942e-01f, +-1.38385564e-01f, +-9.69865024e-02f, +-2.72760093e-02f, +8.76706839e-03f, +3.42630148e-02f, +6.40022159e-02f, +7.71883130e-02f, +7.44922161e-02f, +7.30258226e-02f, +5.14984727e-02f, +4.84022498e-02f, +3.48076224e-03f, +-2.29215324e-02f, +-5.56652844e-02f, +-7.33872652e-02f, +-1.15397274e-01f, +-1.41152546e-01f, +-1.73146278e-01f, +-1.90169528e-01f, +-1.93400681e-01f, +-2.00357273e-01f, +-2.09161803e-01f, +-1.82148278e-01f, +-1.96549773e-01f, +-1.70632660e-01f, +-1.29648015e-01f, +-1.26025021e-01f, +-8.07341412e-02f, +-5.66000342e-02f, +-9.82972980e-03f, +-7.03707337e-04f, +5.06999642e-02f, +6.24568909e-02f, +9.79519263e-02f, +1.13559149e-01f, +1.31774381e-01f, +1.31041825e-01f, +1.50229812e-01f, +1.48385748e-01f, +1.28586948e-01f, +1.45784944e-01f, +1.20663173e-01f, +1.16079122e-01f, +8.82356167e-02f, +7.84156322e-02f, +6.42740056e-02f, +2.92375125e-02f, +3.04918550e-02f, +7.46510923e-03f, +3.46343219e-03f, +-2.29710191e-02f, +-1.17079616e-02f, +-2.35381573e-02f, +-3.40131521e-02f, +-2.69152075e-02f, +-2.15080157e-02f, +-1.54852942e-02f, +-8.99375975e-03f, +-1.90117955e-03f, +5.89297712e-03f, +1.44928247e-02f, +2.40020975e-02f, +3.45245898e-02f, +4.61639799e-02f, +5.90240769e-02f, +5.42103164e-02f, +7.04048499e-02f, +6.67907298e-02f, +6.55449182e-02f, +6.41453341e-02f, +6.28788248e-02f, +4.27143499e-02f, +6.12324476e-02f, +3.89335603e-02f, +1.98133066e-02f, +3.67493629e-02f, +1.30515024e-02f, +-7.60401040e-03f, +7.69667327e-03f, +-1.77407265e-02f, +-2.12411806e-02f, +-2.74675824e-02f, +-3.36151347e-02f, +-4.00026888e-02f, +-2.75957584e-02f, +-3.49770151e-02f, +-4.02231142e-02f, +-2.68294625e-02f, +-3.30906212e-02f, +-3.71165238e-02f, +-2.23983452e-02f, +-8.23285431e-03f, +-1.13086058e-02f, +-1.21923573e-02f, +-1.30943507e-02f, +5.23524452e-03f, +4.18929383e-03f, +5.69359027e-03f, +7.25446083e-03f, +9.15567204e-03f, +1.13647636e-02f, +1.38855614e-02f, +-2.28073075e-03f, +2.04426534e-02f, +2.55659595e-03f, +-1.19432937e-02f, +9.82064568e-03f, +-8.84177908e-03f, +-5.25609963e-03f, +-2.30833609e-02f, +-1.94205716e-03f, +-2.16502845e-02f, +-1.91778392e-02f, +-1.92278996e-02f, +-1.89910866e-02f, +-1.87868997e-02f, +-1.85790006e-02f, +-1.83715243e-02f, +-1.81640014e-02f, +-1.79564822e-02f, +-1.77489631e-02f, +-1.75414439e-02f, +1.66440383e-03f, +-1.77081488e-02f, +3.84001061e-03f, +3.31497006e-03f, +5.41575439e-03f, +-1.16648311e-02f, +9.96935740e-03f, +9.78120603e-03f, +1.21903708e-02f, +1.44197224e-02f, +-2.21326388e-03f, +1.98322479e-02f, +1.06123928e-03f, +4.46713902e-03f, +5.35095949e-03f, +6.52160589e-03f, +7.65963271e-03f, +8.80136807e-03f, +-9.05563775e-03f, +1.16657894e-02f, +-8.53350386e-03f, +-6.65956968e-03f, +-7.41149299e-03f, +1.10179810e-02f, +-9.26733017e-03f, +-7.73029262e-03f, +-8.79059546e-03f, +9.32727382e-03f, +-1.12692788e-02f, +8.95479508e-03f, +-1.19968448e-02f, +8.15204903e-03f, +-1.29066026e-02f, +7.13890372e-03f, +4.97477967e-03f, +5.33645507e-03f, +5.41088311e-03f, +5.51797822e-03f, +5.62135875e-03f, +5.72516117e-03f, +5.82891610e-03f, +5.93267614e-03f, +6.03643572e-03f, +6.14019530e-03f, +6.24395488e-03f, +6.34771446e-03f, +6.45147404e-03f, +6.55523362e-03f, +-1.23393349e-02f, +7.34449876e-03f, +5.10594575e-03f, +5.36052650e-03f, +-1.36667546e-02f, +5.91661269e-03f, +3.57392570e-03f, +-1.52735384e-02f, +4.17381758e-03f, +1.73103833e-03f, +-1.72206033e-02f, +2.12304131e-03f, +-4.23502875e-04f, +-4.80575487e-04f, +-8.20764573e-04f, +-1.12875598e-03f, +-1.44040911e-03f, +-1.75164582e-03f, +-2.06293003e-03f, +-2.37420900e-03f, +1.63128395e-02f, +-3.57851293e-03f, +-1.54747977e-03f, +-2.00957968e-03f, +-2.18814681e-03f, +1.65993702e-02f, +-3.18784988e-03f, +-1.05309929e-03f, +-1.41143473e-03f, +-1.48624275e-03f, +-1.59329502e-03f, +1.73016489e-02f, +-2.38222838e-03f, +-1.43670652e-04f, +-3.98251635e-04f, +-3.69299290e-04f, +-3.72591894e-04f, +-3.72217444e-04f, +-3.72260023e-04f, +-3.72255192e-04f, +-1.93705838e-02f, +2.09489954e-04f, +-2.13282253e-03f, +-1.98200205e-03f, +-2.11471389e-03f, +-2.21518101e-03f, +-2.31931545e-03f, +-2.42303265e-03f, +-2.52679735e-03f, +-2.63055647e-03f, +-2.73431651e-03f, +1.61602516e-02f, +-3.52358166e-03f, +-1.28502876e-03f, +-1.53960916e-03f, +-1.51065690e-03f, +-1.51394948e-03f, +1.74847543e-02f, +-2.09536310e-03f, +2.46954267e-04f, +9.61332116e-05f, +2.28845282e-04f, +3.29312461e-04f, +4.33446723e-04f, +5.37163753e-04f, +6.40928396e-04f, +7.44687568e-04f, +8.48447438e-04f, +9.52207192e-04f, +1.05596695e-03f, +-1.78386010e-02f, +1.84523209e-03f, +-3.93320690e-04f, +-1.38740288e-04f, +-1.67692560e-04f, +-1.64399942e-04f, +-1.64774407e-04f, +-1.64731813e-04f, +-1.64736659e-04f, +-1.64736106e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +1.88335925e-02f, +-7.46481761e-04f, +1.59583078e-03f, +1.44501007e-03f, +1.57772214e-03f, +1.67818926e-03f, +1.78232358e-03f, +1.88604067e-03f, +-1.70085225e-02f, +2.67531024e-03f, +4.36757371e-04f, +6.91337802e-04f, +6.62385544e-04f, +6.65678119e-04f, +-1.83330253e-02f, +1.24709192e-03f, +-1.09522545e-03f, +-9.44404339e-04f, +-1.07711635e-03f, +-1.17758359e-03f, +-1.28171779e-03f, +-1.38543488e-03f, +-1.48919947e-03f, +1.74053684e-02f, +-2.27846415e-03f, +-3.99113924e-05f, +-2.94491823e-04f, +-2.65539536e-04f, +-2.68832140e-04f, +-2.68457690e-04f, +1.87298283e-02f, +-8.50240933e-04f, +1.49207085e-03f, +1.34125038e-03f, +1.47396233e-03f, +1.57442957e-03f, +1.67856389e-03f, +-1.72160473e-02f, +2.46779108e-03f, +2.29237805e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, diff --git a/examples/dcl/dcl_pi/data/PI_rk-3.dat b/examples/dcl/dcl_pi/data/PI_rk-3.dat new file mode 100644 index 0000000..4e8e70d --- /dev/null +++ b/examples/dcl/dcl_pi/data/PI_rk-3.dat @@ -0,0 +1,1601 @@ +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +4.42500025e-01f, +4.85000044e-01f, +5.27500033e-01f, +5.70000052e-01f, +6.12500072e-01f, +6.55000031e-01f, +6.97499990e-01f, +7.40000010e-01f, +7.44503379e-01f, +6.93175197e-01f, +6.78067803e-01f, +6.15299046e-01f, +5.67899108e-01f, +5.10702550e-01f, +4.46109116e-01f, +3.73383522e-01f, +3.11145663e-01f, +2.39396334e-01f, +1.79061413e-01f, +1.47991180e-01f, +9.00882483e-02f, +4.81491089e-02f, +3.77691984e-02f, +2.23348141e-02f, +2.52400041e-02f, +2.66372561e-02f, +4.81256843e-02f, +5.11810780e-02f, +9.60592628e-02f, +1.22420907e-01f, +1.55123681e-01f, +1.72804385e-01f, +2.14771658e-01f, +2.40486205e-01f, +2.72438914e-01f, +2.89420307e-01f, +2.92609096e-01f, +2.99524248e-01f, +3.08289051e-01f, +3.00231040e-01f, +2.76012301e-01f, +2.71976054e-01f, +2.47456238e-01f, +2.05495179e-01f, +2.01052547e-01f, +1.35808870e-01f, +1.30201414e-01f, +9.89277363e-02f, +5.01112342e-02f, +3.81307602e-02f, +2.72977352e-03f, +-1.28180683e-02f, +-3.09715867e-02f, +-3.01758349e-02f, +-4.93025482e-02f, +-4.73956764e-02f, +-4.65331376e-02f, +-2.50906795e-02f, +-4.08260822e-02f, +4.89063561e-03f, +-8.40775669e-03f, +2.35794336e-02f, +3.51547450e-02f, +7.04369992e-02f, +6.91079050e-02f, +9.20970812e-02f, +9.60566550e-02f, +1.22449979e-01f, +1.11145139e-01f, +1.22933857e-01f, +1.33367419e-01f, +1.26227796e-01f, +1.20779626e-01f, +1.14715233e-01f, +1.27179950e-01f, +1.00465655e-01f, +9.49734151e-02f, +8.61804113e-02f, +5.77644967e-02f, +6.68810159e-02f, +5.29612415e-02f, +5.93131781e-02f, +4.44762334e-02f, +3.05857137e-02f, +3.40077356e-02f, +3.53435352e-02f, +3.68034244e-02f, +3.81318480e-02f, +3.93602699e-02f, +5.94829321e-02f, +5.99216968e-02f, +6.25990182e-02f, +8.40201899e-02f, +8.58901143e-02f, +9.00984854e-02f, +9.41582471e-02f, +1.17346540e-01f, +1.21057183e-01f, +1.27212867e-01f, +1.33322790e-01f, +1.39668450e-01f, +1.27219394e-01f, +1.34560257e-01f, +1.39763683e-01f, +1.26329109e-01f, +1.32548690e-01f, +1.36533111e-01f, +1.21773876e-01f, +1.07566223e-01f, +1.29598901e-01f, +9.18625742e-02f, +1.14646129e-01f, +9.37811509e-02f, +1.14067614e-01f, +9.29100215e-02f, +7.46551007e-02f, +9.21408087e-02f, +1.06679097e-01f, +8.47890675e-02f, +8.42279792e-02f, +9.98947695e-02f, +9.59479809e-02f, +9.40030217e-02f, +1.10595934e-01f, +1.07431099e-01f, +1.06395878e-01f, +1.05004713e-01f, +1.22536279e-01f, +1.01382867e-01f, +1.21045753e-01f, +1.18532240e-01f, +1.18540742e-01f, +1.18262425e-01f, +1.18016727e-01f, +1.17767319e-01f, +1.17518328e-01f, +1.17269300e-01f, +1.17020272e-01f, +1.16771244e-01f, +9.75237861e-02f, +1.16854951e-01f, +9.52657685e-02f, +1.14747092e-01f, +9.30240825e-02f, +9.34078246e-02f, +1.10159755e-01f, +8.85172188e-02f, +8.86594951e-02f, +8.62099230e-02f, +1.02936789e-01f, +8.09492320e-02f, +9.97837037e-02f, +9.64399129e-02f, +7.66199380e-02f, +9.50917527e-02f, +1.10672086e-01f, +9.01632458e-02f, +9.12938043e-02f, +1.08962439e-01f, +8.83310586e-02f, +1.08588941e-01f, +1.06778286e-01f, +1.07591756e-01f, +8.92251208e-02f, +1.09572738e-01f, +1.08098552e-01f, +9.02220011e-02f, +1.10744387e-01f, +1.09481446e-01f, +9.18125808e-02f, +9.35446322e-02f, +1.12068161e-01f, +9.22652334e-02f, +9.43555534e-02f, +9.39560533e-02f, +1.12838142e-01f, +9.31094065e-02f, +9.53068435e-02f, +9.50107202e-02f, +9.49981734e-02f, +9.49533880e-02f, +9.49122608e-02f, +9.48707238e-02f, +9.48292241e-02f, +9.47877243e-02f, +9.47462246e-02f, +9.47047248e-02f, +9.46632251e-02f, +9.46217254e-02f, +9.45802256e-02f, +1.13537751e-01f, +9.39153954e-02f, +9.62162912e-02f, +9.60239619e-02f, +9.61151645e-02f, +1.15171969e-01f, +9.56550688e-02f, +9.80595350e-02f, +1.16969407e-01f, +9.75841731e-02f, +1.00089222e-01f, +1.00104786e-01f, +1.00403465e-01f, +1.00669950e-01f, +1.00940093e-01f, +1.01209827e-01f, +1.01479597e-01f, +1.01749368e-01f, +1.02019139e-01f, +1.02288909e-01f, +8.35602507e-02f, +1.03410214e-01f, +1.01337664e-01f, +1.01758257e-01f, +1.01895325e-01f, +1.02064624e-01f, +8.32324326e-02f, +1.02978013e-01f, +1.00801781e-01f, +1.01118609e-01f, +1.01151921e-01f, +1.01217464e-01f, +1.01279348e-01f, +1.01341642e-01f, +1.01403899e-01f, +1.01466157e-01f, +1.01528414e-01f, +1.01590671e-01f, +1.01652928e-01f, +1.01715185e-01f, +1.01777442e-01f, +1.01839699e-01f, +1.01901956e-01f, +1.01964213e-01f, +1.02026470e-01f, +1.02088727e-01f, +1.02150984e-01f, +1.02213241e-01f, +8.32764730e-02f, +1.02919586e-01f, +1.00639448e-01f, +1.00852534e-01f, +1.00782089e-01f, +1.00743875e-01f, +1.00702003e-01f, +1.00660540e-01f, +1.00619040e-01f, +1.00577541e-01f, +1.00536041e-01f, +1.00494541e-01f, +1.00453041e-01f, +1.00411542e-01f, +1.00370042e-01f, +1.00328542e-01f, +1.00287043e-01f, +1.00245543e-01f, +1.00204043e-01f, +1.00162543e-01f, +1.00121044e-01f, +1.00079544e-01f, +1.00038044e-01f, +9.99965444e-02f, +9.99550447e-02f, +9.99135450e-02f, +9.98720452e-02f, +9.98305455e-02f, +9.97890458e-02f, +9.97475460e-02f, +9.97060463e-02f, +9.96645465e-02f, +9.96230468e-02f, +9.95815471e-02f, +9.95400473e-02f, +9.94985476e-02f, +9.94570479e-02f, +9.94155481e-02f, +9.93740484e-02f, +9.93325487e-02f, +9.92910489e-02f, +9.92495492e-02f, +9.92080495e-02f, +9.91665497e-02f, +9.91250500e-02f, +9.90835503e-02f, +9.90420505e-02f, +9.90005508e-02f, +9.89590511e-02f, +9.89175513e-02f, +9.88760516e-02f, +9.88345519e-02f, +9.87930521e-02f, +1.17750578e-01f, +9.81282219e-02f, +1.00429118e-01f, +1.00236788e-01f, +1.00327991e-01f, +1.00386962e-01f, +1.00449592e-01f, +1.00511812e-01f, +1.00574069e-01f, +1.00636326e-01f, +1.00698583e-01f, +1.00760840e-01f, +1.00823097e-01f, +8.18863288e-02f, +1.01529442e-01f, +9.92493033e-02f, +9.94623899e-02f, +9.93919447e-02f, +9.93537307e-02f, +9.93118584e-02f, +9.92703959e-02f, +9.92288962e-02f, +9.91873965e-02f, +9.91458967e-02f, +9.91043970e-02f, +9.90628973e-02f, +9.90213975e-02f, +1.17978923e-01f, +9.83565673e-02f, +1.00657463e-01f, +1.00465134e-01f, +1.00556336e-01f, +1.00615308e-01f, +1.00677937e-01f, +1.00740157e-01f, +1.00802414e-01f, +1.00864671e-01f, +1.00926928e-01f, +1.00989185e-01f, +1.01051442e-01f, +1.01113699e-01f, +1.01175956e-01f, +8.22391883e-02f, +1.01882301e-01f, +9.96021628e-02f, +9.98152494e-02f, +9.97448042e-02f, +9.97065902e-02f, +9.96647179e-02f, +9.96232554e-02f, +9.95817557e-02f, +9.95402560e-02f, +9.94987562e-02f, +9.94572565e-02f, +9.94157568e-02f, +9.93742570e-02f, +9.93327573e-02f, +9.92912576e-02f, +9.92497578e-02f, +1.18207283e-01f, +9.85849276e-02f, +1.00885823e-01f, +1.00693494e-01f, +1.00784697e-01f, +1.00843668e-01f, +1.00906298e-01f, +1.00968517e-01f, +1.01030774e-01f, +1.01093031e-01f, +1.01155289e-01f, +8.22185203e-02f, +1.01861633e-01f, +9.95814949e-02f, +9.97945815e-02f, +9.97241363e-02f, +9.96859223e-02f, +9.96440500e-02f, +9.96025875e-02f, +9.95610878e-02f, +9.95195881e-02f, +9.94780883e-02f, +9.94365886e-02f, +9.93950889e-02f, +9.93535891e-02f, +9.93120894e-02f, +9.92705896e-02f, +9.92290899e-02f, +9.91875902e-02f, +9.91460904e-02f, +1.18103616e-01f, +9.84812602e-02f, +1.00782156e-01f, +1.00589827e-01f, +1.00681029e-01f, +1.00740001e-01f, +1.00802630e-01f, +1.00864850e-01f, +1.00927107e-01f, +1.00989364e-01f, +1.01051621e-01f, +1.01113878e-01f, +8.21771100e-02f, +1.01820223e-01f, +9.95400846e-02f, +9.97531712e-02f, +9.96827260e-02f, +9.96445119e-02f, +9.96026397e-02f, +9.95611772e-02f, +9.95196775e-02f, +9.94781777e-02f, +9.94366780e-02f, +9.93951783e-02f, +9.93536785e-02f, +9.93121788e-02f, +9.92706791e-02f, +9.92291793e-02f, +9.91876796e-02f, +9.91461799e-02f, +1.18103705e-01f, +9.84813496e-02f, +1.00782245e-01f, +1.00589916e-01f, +1.00681119e-01f, +1.00740090e-01f, +1.00802720e-01f, +1.00864939e-01f, +1.00927196e-01f, +1.00989453e-01f, +1.01051711e-01f, +1.01113968e-01f, +8.21771994e-02f, +1.01820312e-01f, +9.95401740e-02f, +9.97532606e-02f, +9.96828154e-02f, +9.96446013e-02f, +9.96027291e-02f, +9.95612666e-02f, +9.95197669e-02f, +9.94782671e-02f, +9.94367674e-02f, +9.93952677e-02f, +9.93537679e-02f, +9.93122682e-02f, +9.92707685e-02f, +9.92292687e-02f, +9.91877690e-02f, +9.91462693e-02f, +1.18103795e-01f, +9.84814391e-02f, +1.00782335e-01f, +1.00590006e-01f, +1.00681208e-01f, +1.00740179e-01f, +1.00802809e-01f, +1.00865029e-01f, +1.00927286e-01f, +1.00989543e-01f, +1.01051800e-01f, +1.01114057e-01f, +8.21772888e-02f, +1.01820402e-01f, +9.95402634e-02f, +9.97533500e-02f, +9.96829048e-02f, +9.96446908e-02f, +9.96028185e-02f, +9.95613560e-02f, +9.95198563e-02f, +9.94783565e-02f, +9.94368568e-02f, +9.93953571e-02f, +9.93538573e-02f, +9.93123576e-02f, +9.92708579e-02f, +9.92293581e-02f, +9.91878584e-02f, +9.91463587e-02f, +1.18103884e-01f, +9.84815285e-02f, +1.00782424e-01f, +1.00590095e-01f, +1.00681297e-01f, +1.00740269e-01f, +1.00802898e-01f, +1.00865118e-01f, +1.00927375e-01f, +1.00989632e-01f, +1.01051889e-01f, +1.01114146e-01f, +8.21773782e-02f, +1.01820491e-01f, +9.95403528e-02f, +9.97534394e-02f, +9.96829942e-02f, +9.96447802e-02f, +9.96029079e-02f, +9.95614454e-02f, +9.95199457e-02f, +9.94784459e-02f, +9.94369462e-02f, +9.93954465e-02f, +9.93539467e-02f, +9.93124470e-02f, +9.92709473e-02f, +9.92294475e-02f, +9.91879478e-02f, +9.91464481e-02f, +1.18103974e-01f, +9.84816179e-02f, +1.00782514e-01f, +1.00590184e-01f, +1.00681387e-01f, +1.00740358e-01f, +1.00802988e-01f, +1.00865208e-01f, +1.00927465e-01f, +1.00989722e-01f, +1.01051979e-01f, +1.01114236e-01f, +8.21774676e-02f, +1.01820581e-01f, +9.95404422e-02f, +9.97535288e-02f, +9.96830836e-02f, +9.96448696e-02f, +9.96029973e-02f, +9.95615348e-02f, +9.95200351e-02f, +9.94785354e-02f, +9.94370356e-02f, +9.93955359e-02f, +9.93540362e-02f, +9.93125364e-02f, +9.92710367e-02f, +9.92295370e-02f, +9.91880372e-02f, +9.91465375e-02f, +1.18104063e-01f, +9.84817073e-02f, +1.00782603e-01f, +1.00590274e-01f, +1.00681476e-01f, +1.00740448e-01f, +1.00803077e-01f, +1.00865297e-01f, +1.00927554e-01f, +1.00989811e-01f, +1.01052068e-01f, +1.01114325e-01f, +8.21775571e-02f, +1.01820670e-01f, +9.95405316e-02f, +9.97536182e-02f, +9.96831730e-02f, +9.96449590e-02f, +9.96030867e-02f, +9.95616242e-02f, +9.95201245e-02f, +9.94786248e-02f, +9.94371250e-02f, +9.93956253e-02f, +9.93541256e-02f, +9.93126258e-02f, +9.92711261e-02f, +9.92296264e-02f, +9.91881266e-02f, +9.91466269e-02f, +1.18104152e-01f, +9.84817967e-02f, +1.00782692e-01f, +1.00590363e-01f, +1.00681566e-01f, +1.00740537e-01f, +1.00803167e-01f, +1.00865386e-01f, +1.00927643e-01f, +1.00989901e-01f, +1.01052158e-01f, +1.01114415e-01f, +8.21776465e-02f, +1.01820759e-01f, +9.95406210e-02f, +9.97537076e-02f, +9.96832624e-02f, +9.96450484e-02f, +9.96031761e-02f, +9.95617136e-02f, +9.95202139e-02f, +9.94787142e-02f, +9.94372144e-02f, +9.93957147e-02f, +9.93542150e-02f, +9.93127152e-02f, +9.92712155e-02f, +9.92297158e-02f, +9.91882160e-02f, +9.91467163e-02f, +1.18104242e-01f, +9.84818861e-02f, +1.00782782e-01f, +1.00590453e-01f, +1.00681655e-01f, +1.00740626e-01f, +1.00803256e-01f, +1.00865476e-01f, +1.00927733e-01f, +1.00989990e-01f, +1.01052247e-01f, +1.01114504e-01f, +8.21777359e-02f, +1.01820849e-01f, +9.95407104e-02f, +9.97537971e-02f, +9.96833518e-02f, +9.96451378e-02f, +9.96032655e-02f, +9.95618030e-02f, +9.95203033e-02f, +9.94788036e-02f, +9.94373038e-02f, +9.93958041e-02f, +9.93543044e-02f, +9.93128046e-02f, +9.92713049e-02f, +9.92298052e-02f, +9.91883054e-02f, +9.91468057e-02f, +1.18104331e-01f, +9.84819755e-02f, +1.00782871e-01f, +1.00590542e-01f, +1.00681745e-01f, +1.00740716e-01f, +1.00803345e-01f, +1.00865565e-01f, +1.00927822e-01f, +1.00990079e-01f, +1.01052336e-01f, +1.01114593e-01f, +8.21778253e-02f, +1.01820938e-01f, +9.95407999e-02f, +9.97538865e-02f, +9.96834412e-02f, +9.96452272e-02f, +9.96033549e-02f, +-3.42938125e-01f, +-3.85479629e-01f, +-4.28021133e-01f, +-4.70562637e-01f, +-5.13104141e-01f, +-5.55645645e-01f, +-5.98187149e-01f, +-6.40728652e-01f, +-6.26274884e-01f, +-6.13566935e-01f, +-5.57580411e-01f, +-5.16925931e-01f, +-4.66942549e-01f, +-4.09970045e-01f, +-3.45281988e-01f, +-2.72497773e-01f, +-2.10196942e-01f, +-1.38385564e-01f, +-9.69865024e-02f, +-2.72760093e-02f, +8.76706839e-03f, +3.42630148e-02f, +6.40022159e-02f, +7.71883130e-02f, +7.44922161e-02f, +7.30258226e-02f, +5.14984727e-02f, +4.84022498e-02f, +3.48076224e-03f, +-2.29215324e-02f, +-5.56652844e-02f, +-7.33872652e-02f, +-1.15397274e-01f, +-1.41152546e-01f, +-1.73146278e-01f, +-1.90169528e-01f, +-1.93400681e-01f, +-2.00357273e-01f, +-2.09161803e-01f, +-1.82148278e-01f, +-1.96549773e-01f, +-1.70632660e-01f, +-1.29648015e-01f, +-1.26025021e-01f, +-8.07341412e-02f, +-5.66000342e-02f, +-9.82972980e-03f, +-7.03707337e-04f, +5.06999642e-02f, +6.24568909e-02f, +9.79519263e-02f, +1.13559149e-01f, +1.31774381e-01f, +1.31041825e-01f, +1.50229812e-01f, +1.48385748e-01f, +1.28586948e-01f, +1.45784944e-01f, +1.20663173e-01f, +1.16079122e-01f, +8.82356167e-02f, +7.84156322e-02f, +6.42740056e-02f, +2.92375125e-02f, +3.04918550e-02f, +7.46510923e-03f, +3.46343219e-03f, +-2.29710191e-02f, +-1.17079616e-02f, +-2.35381573e-02f, +-3.40131521e-02f, +-2.69152075e-02f, +-2.15080157e-02f, +-1.54852942e-02f, +-8.99375975e-03f, +-1.90117955e-03f, +5.89297712e-03f, +1.44928247e-02f, +2.40020975e-02f, +3.45245898e-02f, +4.61639799e-02f, +5.90240769e-02f, +5.42103164e-02f, +7.04048499e-02f, +6.67907298e-02f, +6.55449182e-02f, +6.41453341e-02f, +6.28788248e-02f, +4.27143499e-02f, +6.12324476e-02f, +3.89335603e-02f, +1.98133066e-02f, +3.67493629e-02f, +1.30515024e-02f, +-7.60401040e-03f, +7.69667327e-03f, +-1.77407265e-02f, +-2.12411806e-02f, +-2.74675824e-02f, +-3.36151347e-02f, +-4.00026888e-02f, +-2.75957584e-02f, +-3.49770151e-02f, +-4.02231142e-02f, +-2.68294625e-02f, +-3.30906212e-02f, +-3.71165238e-02f, +-2.23983452e-02f, +-8.23285431e-03f, +-1.13086058e-02f, +-1.21923573e-02f, +-1.30943507e-02f, +5.23524452e-03f, +4.18929383e-03f, +5.69359027e-03f, +7.25446083e-03f, +9.15567204e-03f, +1.13647636e-02f, +1.38855614e-02f, +-2.28073075e-03f, +2.04426534e-02f, +2.55659595e-03f, +-1.19432937e-02f, +9.82064568e-03f, +-8.84177908e-03f, +-5.25609963e-03f, +-2.30833609e-02f, +-1.94205716e-03f, +-2.16502845e-02f, +-1.91778392e-02f, +-1.92278996e-02f, +-1.89910866e-02f, +-1.87868997e-02f, +-1.85790006e-02f, +-1.83715243e-02f, +-1.81640014e-02f, +-1.79564822e-02f, +-1.77489631e-02f, +-1.75414439e-02f, +1.66440383e-03f, +-1.77081488e-02f, +3.84001061e-03f, +3.31497006e-03f, +5.41575439e-03f, +-1.16648311e-02f, +9.96935740e-03f, +9.78120603e-03f, +1.21903708e-02f, +1.44197224e-02f, +-2.21326388e-03f, +1.98322479e-02f, +1.06123928e-03f, +4.46713902e-03f, +5.35095949e-03f, +6.52160589e-03f, +7.65963271e-03f, +8.80136807e-03f, +-9.05563775e-03f, +1.16657894e-02f, +-8.53350386e-03f, +-6.65956968e-03f, +-7.41149299e-03f, +1.10179810e-02f, +-9.26733017e-03f, +-7.73029262e-03f, +-8.79059546e-03f, +9.32727382e-03f, +-1.12692788e-02f, +8.95479508e-03f, +-1.19968448e-02f, +8.15204903e-03f, +-1.29066026e-02f, +7.13890372e-03f, +4.97477967e-03f, +5.33645507e-03f, +5.41088311e-03f, +5.51797822e-03f, +5.62135875e-03f, +5.72516117e-03f, +5.82891610e-03f, +5.93267614e-03f, +6.03643572e-03f, +6.14019530e-03f, +6.24395488e-03f, +6.34771446e-03f, +6.45147404e-03f, +6.55523362e-03f, +-1.23393349e-02f, +7.34449876e-03f, +5.10594575e-03f, +5.36052650e-03f, +-1.36667546e-02f, +5.91661269e-03f, +3.57392570e-03f, +-1.52735384e-02f, +4.17381758e-03f, +1.73103833e-03f, +-1.72206033e-02f, +2.12304131e-03f, +-4.23502875e-04f, +-4.80575487e-04f, +-8.20764573e-04f, +-1.12875598e-03f, +-1.44040911e-03f, +-1.75164582e-03f, +-2.06293003e-03f, +-2.37420900e-03f, +1.63128395e-02f, +-3.57851293e-03f, +-1.54747977e-03f, +-2.00957968e-03f, +-2.18814681e-03f, +1.65993702e-02f, +-3.18784988e-03f, +-1.05309929e-03f, +-1.41143473e-03f, +-1.48624275e-03f, +-1.59329502e-03f, +1.73016489e-02f, +-2.38222838e-03f, +-1.43670652e-04f, +-3.98251635e-04f, +-3.69299290e-04f, +-3.72591894e-04f, +-3.72217444e-04f, +-3.72260023e-04f, +-3.72255192e-04f, +-1.93705838e-02f, +2.09489954e-04f, +-2.13282253e-03f, +-1.98200205e-03f, +-2.11471389e-03f, +-2.21518101e-03f, +-2.31931545e-03f, +-2.42303265e-03f, +-2.52679735e-03f, +-2.63055647e-03f, +-2.73431651e-03f, +1.61602516e-02f, +-3.52358166e-03f, +-1.28502876e-03f, +-1.53960916e-03f, +-1.51065690e-03f, +-1.51394948e-03f, +1.74847543e-02f, +-2.09536310e-03f, +2.46954267e-04f, +9.61332116e-05f, +2.28845282e-04f, +3.29312461e-04f, +4.33446723e-04f, +5.37163753e-04f, +6.40928396e-04f, +7.44687568e-04f, +8.48447438e-04f, +9.52207192e-04f, +1.05596695e-03f, +-1.78386010e-02f, +1.84523209e-03f, +-3.93320690e-04f, +-1.38740288e-04f, +-1.67692560e-04f, +-1.64399942e-04f, +-1.64774407e-04f, +-1.64731813e-04f, +-1.64736659e-04f, +-1.64736106e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +-1.64736164e-04f, +1.88335925e-02f, +-7.46481761e-04f, +1.59583078e-03f, +1.44501007e-03f, +1.57772214e-03f, +1.67818926e-03f, +1.78232358e-03f, +1.88604067e-03f, +-1.70085225e-02f, +2.67531024e-03f, +4.36757371e-04f, +6.91337802e-04f, +6.62385544e-04f, +6.65678119e-04f, +-1.83330253e-02f, +1.24709192e-03f, +-1.09522545e-03f, +-9.44404339e-04f, +-1.07711635e-03f, +-1.17758359e-03f, +-1.28171779e-03f, +-1.38543488e-03f, +-1.48919947e-03f, +1.74053684e-02f, +-2.27846415e-03f, +-3.99113924e-05f, +-2.94491823e-04f, +-2.65539536e-04f, +-2.68832140e-04f, +-2.68457690e-04f, +1.87298283e-02f, +-8.50240933e-04f, +1.49207085e-03f, +1.34125038e-03f, +1.47396233e-03f, +1.57442957e-03f, +1.67856389e-03f, +-1.72160473e-02f, +2.46779108e-03f, +2.29237805e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, +4.83818294e-04f, +4.54866007e-04f, +4.58158611e-04f, +-1.85405444e-02f, +1.03957253e-03f, +-1.30274496e-03f, +-1.15192391e-03f, +-1.28463586e-03f, +-1.38510310e-03f, +-1.48923742e-03f, +-1.59295439e-03f, +-1.69671909e-03f, +1.71978492e-02f, +-2.48598377e-03f, +-2.47430900e-04f, +-5.02011331e-04f, +-4.73059044e-04f, +-4.76351648e-04f, +1.85223520e-02f, +-1.05776545e-03f, +1.28455192e-03f, +1.13373087e-03f, +1.26644282e-03f, +1.36691006e-03f, +1.47104426e-03f, +1.57476135e-03f, +1.67852594e-03f, +-1.72160417e-02f, +2.46779062e-03f, +2.29237863e-04f, diff --git a/examples/dcl/dcl_pi/data/PI_yk-1.dat b/examples/dcl/dcl_pi/data/PI_yk-1.dat new file mode 100644 index 0000000..f0608ec --- /dev/null +++ b/examples/dcl/dcl_pi/data/PI_yk-1.dat @@ -0,0 +1,1601 @@ +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +4.88281250e-04f, +2.19726563e-03f, +4.63867188e-03f, +8.30078125e-03f, +1.29394531e-02f, +1.85546875e-02f, +2.51464844e-02f, +3.27148438e-02f, +4.10156250e-02f, +5.00488281e-02f, +5.95703125e-02f, +6.90917969e-02f, +7.88574219e-02f, +8.86230469e-02f, +9.79003906e-02f, +1.06689453e-01f, +1.14746094e-01f, +1.22070313e-01f, +1.28417969e-01f, +1.34033203e-01f, +1.38427734e-01f, +1.41845703e-01f, +1.44287109e-01f, +1.45996094e-01f, +1.46728516e-01f, +1.46728516e-01f, +1.45996094e-01f, +1.44775391e-01f, +1.43310547e-01f, +1.41601563e-01f, +1.39648438e-01f, +1.37695313e-01f, +1.35986328e-01f, +1.34277344e-01f, +1.32812500e-01f, +1.31835938e-01f, +1.30859375e-01f, +1.30615234e-01f, +1.30371094e-01f, +1.30371094e-01f, +1.30859375e-01f, +1.31347656e-01f, +1.32080078e-01f, +1.32812500e-01f, +1.33544922e-01f, +1.34033203e-01f, +1.34521484e-01f, +1.34765625e-01f, +1.34765625e-01f, +1.34277344e-01f, +1.33789063e-01f, +1.32568359e-01f, +1.31347656e-01f, +1.29638672e-01f, +1.27685547e-01f, +1.25244141e-01f, +1.22802734e-01f, +1.20117188e-01f, +1.17431641e-01f, +1.14501953e-01f, +1.11816406e-01f, +1.09130859e-01f, +1.06445313e-01f, +1.04003906e-01f, +1.01806641e-01f, +9.98535156e-02f, +9.79003906e-02f, +9.64355469e-02f, +9.52148438e-02f, +9.42382813e-02f, +9.37500000e-02f, +9.32617188e-02f, +9.30175781e-02f, +9.27734375e-02f, +9.27734375e-02f, +9.30175781e-02f, +9.32617188e-02f, +9.35058594e-02f, +9.37500000e-02f, +9.39941406e-02f, +9.42382813e-02f, +9.42382813e-02f, +9.42382813e-02f, +9.42382813e-02f, +9.39941406e-02f, +9.37500000e-02f, +9.35058594e-02f, +9.32617188e-02f, +9.27734375e-02f, +9.22851563e-02f, +9.17968750e-02f, +9.13085938e-02f, +9.08203125e-02f, +9.05761719e-02f, +9.03320313e-02f, +9.00878906e-02f, +9.00878906e-02f, +9.00878906e-02f, +9.00878906e-02f, +9.03320313e-02f, +9.08203125e-02f, +9.10644531e-02f, +9.17968750e-02f, +9.22851563e-02f, +9.30175781e-02f, +9.35058594e-02f, +9.42382813e-02f, +9.52148438e-02f, +9.59472656e-02f, +9.64355469e-02f, +9.71679688e-02f, +9.79003906e-02f, +9.83886719e-02f, +9.88769531e-02f, +9.93652344e-02f, +9.96093750e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00341797e-01f, +1.00341797e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00830078e-01f, +1.00830078e-01f, +1.01074219e-01f, +1.01074219e-01f, +1.01318359e-01f, +1.01562500e-01f, +1.01562500e-01f, +1.01806641e-01f, +1.02050781e-01f, +1.02294922e-01f, +1.02294922e-01f, +1.02539063e-01f, +1.02539063e-01f, +1.02539063e-01f, +1.02783203e-01f, +1.02783203e-01f, +1.02539063e-01f, +1.02539063e-01f, +1.02539063e-01f, +1.02294922e-01f, +1.02294922e-01f, +1.02050781e-01f, +1.01806641e-01f, +1.01562500e-01f, +1.01562500e-01f, +1.01318359e-01f, +1.01074219e-01f, +1.01074219e-01f, +1.00830078e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00341797e-01f, +1.00341797e-01f, +1.00341797e-01f, +1.00341797e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.93652344e-02f, +9.79003906e-02f, +9.52148438e-02f, +9.15527344e-02f, +8.69140625e-02f, +8.12988281e-02f, +7.47070313e-02f, +6.71386719e-02f, +5.88378906e-02f, +4.98046875e-02f, +4.05273438e-02f, +3.07617188e-02f, +2.09960938e-02f, +1.14746094e-02f, +2.19726563e-03f, +-6.59179688e-03f, +-1.46484375e-02f, +-2.19726563e-02f, +-2.83203125e-02f, +-3.39355469e-02f, +-3.83300781e-02f, +-4.17480469e-02f, +-4.41894531e-02f, +-4.58984375e-02f, +-4.66308594e-02f, +-4.66308594e-02f, +-4.58984375e-02f, +-4.46777344e-02f, +-4.32128906e-02f, +-4.15039063e-02f, +-3.95507813e-02f, +-3.78417969e-02f, +-3.58886719e-02f, +-3.41796875e-02f, +-3.29589844e-02f, +-3.17382813e-02f, +-3.10058594e-02f, +-3.05175781e-02f, +-3.05175781e-02f, +-3.05175781e-02f, +-3.10058594e-02f, +-3.14941406e-02f, +-3.22265625e-02f, +-3.29589844e-02f, +-3.36914063e-02f, +-3.41796875e-02f, +-3.46679688e-02f, +-3.49121094e-02f, +-3.46679688e-02f, +-3.44238281e-02f, +-3.36914063e-02f, +-3.27148438e-02f, +-3.12500000e-02f, +-2.95410156e-02f, +-2.75878906e-02f, +-2.51464844e-02f, +-2.27050781e-02f, +-2.00195313e-02f, +-1.73339844e-02f, +-1.44042969e-02f, +-1.17187500e-02f, +-9.03320313e-03f, +-6.34765625e-03f, +-3.90625000e-03f, +-1.70898438e-03f, +2.44140625e-04f, +1.95312500e-03f, +3.41796875e-03f, +4.63867188e-03f, +5.61523438e-03f, +6.34765625e-03f, +6.83593750e-03f, +7.08007813e-03f, +7.08007813e-03f, +7.08007813e-03f, +6.83593750e-03f, +6.59179688e-03f, +6.34765625e-03f, +6.10351563e-03f, +5.85937500e-03f, +5.85937500e-03f, +5.61523438e-03f, +5.61523438e-03f, +5.85937500e-03f, +5.85937500e-03f, +6.10351563e-03f, +6.59179688e-03f, +6.83593750e-03f, +7.32421875e-03f, +7.81250000e-03f, +8.30078125e-03f, +8.78906250e-03f, +9.27734375e-03f, +9.52148438e-03f, +9.76562500e-03f, +1.00097656e-02f, +1.00097656e-02f, +1.00097656e-02f, +1.00097656e-02f, +9.76562500e-03f, +9.27734375e-03f, +8.78906250e-03f, +8.30078125e-03f, +7.81250000e-03f, +7.08007813e-03f, +6.34765625e-03f, +5.61523438e-03f, +4.88281250e-03f, +4.15039063e-03f, +3.41796875e-03f, +2.68554688e-03f, +2.19726563e-03f, +1.46484375e-03f, +9.76562500e-04f, +7.32421875e-04f, +2.44140625e-04f, +0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-7.32421875e-04f, +-7.32421875e-04f, +-9.76562500e-04f, +-1.22070313e-03f, +-1.46484375e-03f, +-1.46484375e-03f, +-1.70898438e-03f, +-1.95312500e-03f, +-2.19726563e-03f, +-2.44140625e-03f, +-2.44140625e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.44140625e-03f, +-2.44140625e-03f, +-2.19726563e-03f, +-1.95312500e-03f, +-1.70898438e-03f, +-1.70898438e-03f, +-1.46484375e-03f, +-1.22070313e-03f, +-9.76562500e-04f, +-9.76562500e-04f, +-7.32421875e-04f, +-7.32421875e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +4.88281250e-04f, +4.88281250e-04f, +4.88281250e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +4.88281250e-04f, +4.88281250e-04f, +4.88281250e-04f, +4.88281250e-04f, +4.88281250e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, diff --git a/examples/dcl/dcl_pi/data/PI_yk-2.dat b/examples/dcl/dcl_pi/data/PI_yk-2.dat new file mode 100644 index 0000000..f0608ec --- /dev/null +++ b/examples/dcl/dcl_pi/data/PI_yk-2.dat @@ -0,0 +1,1601 @@ +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +4.88281250e-04f, +2.19726563e-03f, +4.63867188e-03f, +8.30078125e-03f, +1.29394531e-02f, +1.85546875e-02f, +2.51464844e-02f, +3.27148438e-02f, +4.10156250e-02f, +5.00488281e-02f, +5.95703125e-02f, +6.90917969e-02f, +7.88574219e-02f, +8.86230469e-02f, +9.79003906e-02f, +1.06689453e-01f, +1.14746094e-01f, +1.22070313e-01f, +1.28417969e-01f, +1.34033203e-01f, +1.38427734e-01f, +1.41845703e-01f, +1.44287109e-01f, +1.45996094e-01f, +1.46728516e-01f, +1.46728516e-01f, +1.45996094e-01f, +1.44775391e-01f, +1.43310547e-01f, +1.41601563e-01f, +1.39648438e-01f, +1.37695313e-01f, +1.35986328e-01f, +1.34277344e-01f, +1.32812500e-01f, +1.31835938e-01f, +1.30859375e-01f, +1.30615234e-01f, +1.30371094e-01f, +1.30371094e-01f, +1.30859375e-01f, +1.31347656e-01f, +1.32080078e-01f, +1.32812500e-01f, +1.33544922e-01f, +1.34033203e-01f, +1.34521484e-01f, +1.34765625e-01f, +1.34765625e-01f, +1.34277344e-01f, +1.33789063e-01f, +1.32568359e-01f, +1.31347656e-01f, +1.29638672e-01f, +1.27685547e-01f, +1.25244141e-01f, +1.22802734e-01f, +1.20117188e-01f, +1.17431641e-01f, +1.14501953e-01f, +1.11816406e-01f, +1.09130859e-01f, +1.06445313e-01f, +1.04003906e-01f, +1.01806641e-01f, +9.98535156e-02f, +9.79003906e-02f, +9.64355469e-02f, +9.52148438e-02f, +9.42382813e-02f, +9.37500000e-02f, +9.32617188e-02f, +9.30175781e-02f, +9.27734375e-02f, +9.27734375e-02f, +9.30175781e-02f, +9.32617188e-02f, +9.35058594e-02f, +9.37500000e-02f, +9.39941406e-02f, +9.42382813e-02f, +9.42382813e-02f, +9.42382813e-02f, +9.42382813e-02f, +9.39941406e-02f, +9.37500000e-02f, +9.35058594e-02f, +9.32617188e-02f, +9.27734375e-02f, +9.22851563e-02f, +9.17968750e-02f, +9.13085938e-02f, +9.08203125e-02f, +9.05761719e-02f, +9.03320313e-02f, +9.00878906e-02f, +9.00878906e-02f, +9.00878906e-02f, +9.00878906e-02f, +9.03320313e-02f, +9.08203125e-02f, +9.10644531e-02f, +9.17968750e-02f, +9.22851563e-02f, +9.30175781e-02f, +9.35058594e-02f, +9.42382813e-02f, +9.52148438e-02f, +9.59472656e-02f, +9.64355469e-02f, +9.71679688e-02f, +9.79003906e-02f, +9.83886719e-02f, +9.88769531e-02f, +9.93652344e-02f, +9.96093750e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00341797e-01f, +1.00341797e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00830078e-01f, +1.00830078e-01f, +1.01074219e-01f, +1.01074219e-01f, +1.01318359e-01f, +1.01562500e-01f, +1.01562500e-01f, +1.01806641e-01f, +1.02050781e-01f, +1.02294922e-01f, +1.02294922e-01f, +1.02539063e-01f, +1.02539063e-01f, +1.02539063e-01f, +1.02783203e-01f, +1.02783203e-01f, +1.02539063e-01f, +1.02539063e-01f, +1.02539063e-01f, +1.02294922e-01f, +1.02294922e-01f, +1.02050781e-01f, +1.01806641e-01f, +1.01562500e-01f, +1.01562500e-01f, +1.01318359e-01f, +1.01074219e-01f, +1.01074219e-01f, +1.00830078e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00341797e-01f, +1.00341797e-01f, +1.00341797e-01f, +1.00341797e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.93652344e-02f, +9.79003906e-02f, +9.52148438e-02f, +9.15527344e-02f, +8.69140625e-02f, +8.12988281e-02f, +7.47070313e-02f, +6.71386719e-02f, +5.88378906e-02f, +4.98046875e-02f, +4.05273438e-02f, +3.07617188e-02f, +2.09960938e-02f, +1.14746094e-02f, +2.19726563e-03f, +-6.59179688e-03f, +-1.46484375e-02f, +-2.19726563e-02f, +-2.83203125e-02f, +-3.39355469e-02f, +-3.83300781e-02f, +-4.17480469e-02f, +-4.41894531e-02f, +-4.58984375e-02f, +-4.66308594e-02f, +-4.66308594e-02f, +-4.58984375e-02f, +-4.46777344e-02f, +-4.32128906e-02f, +-4.15039063e-02f, +-3.95507813e-02f, +-3.78417969e-02f, +-3.58886719e-02f, +-3.41796875e-02f, +-3.29589844e-02f, +-3.17382813e-02f, +-3.10058594e-02f, +-3.05175781e-02f, +-3.05175781e-02f, +-3.05175781e-02f, +-3.10058594e-02f, +-3.14941406e-02f, +-3.22265625e-02f, +-3.29589844e-02f, +-3.36914063e-02f, +-3.41796875e-02f, +-3.46679688e-02f, +-3.49121094e-02f, +-3.46679688e-02f, +-3.44238281e-02f, +-3.36914063e-02f, +-3.27148438e-02f, +-3.12500000e-02f, +-2.95410156e-02f, +-2.75878906e-02f, +-2.51464844e-02f, +-2.27050781e-02f, +-2.00195313e-02f, +-1.73339844e-02f, +-1.44042969e-02f, +-1.17187500e-02f, +-9.03320313e-03f, +-6.34765625e-03f, +-3.90625000e-03f, +-1.70898438e-03f, +2.44140625e-04f, +1.95312500e-03f, +3.41796875e-03f, +4.63867188e-03f, +5.61523438e-03f, +6.34765625e-03f, +6.83593750e-03f, +7.08007813e-03f, +7.08007813e-03f, +7.08007813e-03f, +6.83593750e-03f, +6.59179688e-03f, +6.34765625e-03f, +6.10351563e-03f, +5.85937500e-03f, +5.85937500e-03f, +5.61523438e-03f, +5.61523438e-03f, +5.85937500e-03f, +5.85937500e-03f, +6.10351563e-03f, +6.59179688e-03f, +6.83593750e-03f, +7.32421875e-03f, +7.81250000e-03f, +8.30078125e-03f, +8.78906250e-03f, +9.27734375e-03f, +9.52148438e-03f, +9.76562500e-03f, +1.00097656e-02f, +1.00097656e-02f, +1.00097656e-02f, +1.00097656e-02f, +9.76562500e-03f, +9.27734375e-03f, +8.78906250e-03f, +8.30078125e-03f, +7.81250000e-03f, +7.08007813e-03f, +6.34765625e-03f, +5.61523438e-03f, +4.88281250e-03f, +4.15039063e-03f, +3.41796875e-03f, +2.68554688e-03f, +2.19726563e-03f, +1.46484375e-03f, +9.76562500e-04f, +7.32421875e-04f, +2.44140625e-04f, +0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-7.32421875e-04f, +-7.32421875e-04f, +-9.76562500e-04f, +-1.22070313e-03f, +-1.46484375e-03f, +-1.46484375e-03f, +-1.70898438e-03f, +-1.95312500e-03f, +-2.19726563e-03f, +-2.44140625e-03f, +-2.44140625e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.44140625e-03f, +-2.44140625e-03f, +-2.19726563e-03f, +-1.95312500e-03f, +-1.70898438e-03f, +-1.70898438e-03f, +-1.46484375e-03f, +-1.22070313e-03f, +-9.76562500e-04f, +-9.76562500e-04f, +-7.32421875e-04f, +-7.32421875e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +4.88281250e-04f, +4.88281250e-04f, +4.88281250e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +4.88281250e-04f, +4.88281250e-04f, +4.88281250e-04f, +4.88281250e-04f, +4.88281250e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, diff --git a/examples/dcl/dcl_pi/data/PI_yk-3.dat b/examples/dcl/dcl_pi/data/PI_yk-3.dat new file mode 100644 index 0000000..f0608ec --- /dev/null +++ b/examples/dcl/dcl_pi/data/PI_yk-3.dat @@ -0,0 +1,1601 @@ +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +4.88281250e-04f, +2.19726563e-03f, +4.63867188e-03f, +8.30078125e-03f, +1.29394531e-02f, +1.85546875e-02f, +2.51464844e-02f, +3.27148438e-02f, +4.10156250e-02f, +5.00488281e-02f, +5.95703125e-02f, +6.90917969e-02f, +7.88574219e-02f, +8.86230469e-02f, +9.79003906e-02f, +1.06689453e-01f, +1.14746094e-01f, +1.22070313e-01f, +1.28417969e-01f, +1.34033203e-01f, +1.38427734e-01f, +1.41845703e-01f, +1.44287109e-01f, +1.45996094e-01f, +1.46728516e-01f, +1.46728516e-01f, +1.45996094e-01f, +1.44775391e-01f, +1.43310547e-01f, +1.41601563e-01f, +1.39648438e-01f, +1.37695313e-01f, +1.35986328e-01f, +1.34277344e-01f, +1.32812500e-01f, +1.31835938e-01f, +1.30859375e-01f, +1.30615234e-01f, +1.30371094e-01f, +1.30371094e-01f, +1.30859375e-01f, +1.31347656e-01f, +1.32080078e-01f, +1.32812500e-01f, +1.33544922e-01f, +1.34033203e-01f, +1.34521484e-01f, +1.34765625e-01f, +1.34765625e-01f, +1.34277344e-01f, +1.33789063e-01f, +1.32568359e-01f, +1.31347656e-01f, +1.29638672e-01f, +1.27685547e-01f, +1.25244141e-01f, +1.22802734e-01f, +1.20117188e-01f, +1.17431641e-01f, +1.14501953e-01f, +1.11816406e-01f, +1.09130859e-01f, +1.06445313e-01f, +1.04003906e-01f, +1.01806641e-01f, +9.98535156e-02f, +9.79003906e-02f, +9.64355469e-02f, +9.52148438e-02f, +9.42382813e-02f, +9.37500000e-02f, +9.32617188e-02f, +9.30175781e-02f, +9.27734375e-02f, +9.27734375e-02f, +9.30175781e-02f, +9.32617188e-02f, +9.35058594e-02f, +9.37500000e-02f, +9.39941406e-02f, +9.42382813e-02f, +9.42382813e-02f, +9.42382813e-02f, +9.42382813e-02f, +9.39941406e-02f, +9.37500000e-02f, +9.35058594e-02f, +9.32617188e-02f, +9.27734375e-02f, +9.22851563e-02f, +9.17968750e-02f, +9.13085938e-02f, +9.08203125e-02f, +9.05761719e-02f, +9.03320313e-02f, +9.00878906e-02f, +9.00878906e-02f, +9.00878906e-02f, +9.00878906e-02f, +9.03320313e-02f, +9.08203125e-02f, +9.10644531e-02f, +9.17968750e-02f, +9.22851563e-02f, +9.30175781e-02f, +9.35058594e-02f, +9.42382813e-02f, +9.52148438e-02f, +9.59472656e-02f, +9.64355469e-02f, +9.71679688e-02f, +9.79003906e-02f, +9.83886719e-02f, +9.88769531e-02f, +9.93652344e-02f, +9.96093750e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00341797e-01f, +1.00341797e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00830078e-01f, +1.00830078e-01f, +1.01074219e-01f, +1.01074219e-01f, +1.01318359e-01f, +1.01562500e-01f, +1.01562500e-01f, +1.01806641e-01f, +1.02050781e-01f, +1.02294922e-01f, +1.02294922e-01f, +1.02539063e-01f, +1.02539063e-01f, +1.02539063e-01f, +1.02783203e-01f, +1.02783203e-01f, +1.02539063e-01f, +1.02539063e-01f, +1.02539063e-01f, +1.02294922e-01f, +1.02294922e-01f, +1.02050781e-01f, +1.01806641e-01f, +1.01562500e-01f, +1.01562500e-01f, +1.01318359e-01f, +1.01074219e-01f, +1.01074219e-01f, +1.00830078e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00585938e-01f, +1.00341797e-01f, +1.00341797e-01f, +1.00341797e-01f, +1.00341797e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.93652344e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.96093750e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +9.98535156e-02f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +1.00097656e-01f, +9.93652344e-02f, +9.79003906e-02f, +9.52148438e-02f, +9.15527344e-02f, +8.69140625e-02f, +8.12988281e-02f, +7.47070313e-02f, +6.71386719e-02f, +5.88378906e-02f, +4.98046875e-02f, +4.05273438e-02f, +3.07617188e-02f, +2.09960938e-02f, +1.14746094e-02f, +2.19726563e-03f, +-6.59179688e-03f, +-1.46484375e-02f, +-2.19726563e-02f, +-2.83203125e-02f, +-3.39355469e-02f, +-3.83300781e-02f, +-4.17480469e-02f, +-4.41894531e-02f, +-4.58984375e-02f, +-4.66308594e-02f, +-4.66308594e-02f, +-4.58984375e-02f, +-4.46777344e-02f, +-4.32128906e-02f, +-4.15039063e-02f, +-3.95507813e-02f, +-3.78417969e-02f, +-3.58886719e-02f, +-3.41796875e-02f, +-3.29589844e-02f, +-3.17382813e-02f, +-3.10058594e-02f, +-3.05175781e-02f, +-3.05175781e-02f, +-3.05175781e-02f, +-3.10058594e-02f, +-3.14941406e-02f, +-3.22265625e-02f, +-3.29589844e-02f, +-3.36914063e-02f, +-3.41796875e-02f, +-3.46679688e-02f, +-3.49121094e-02f, +-3.46679688e-02f, +-3.44238281e-02f, +-3.36914063e-02f, +-3.27148438e-02f, +-3.12500000e-02f, +-2.95410156e-02f, +-2.75878906e-02f, +-2.51464844e-02f, +-2.27050781e-02f, +-2.00195313e-02f, +-1.73339844e-02f, +-1.44042969e-02f, +-1.17187500e-02f, +-9.03320313e-03f, +-6.34765625e-03f, +-3.90625000e-03f, +-1.70898438e-03f, +2.44140625e-04f, +1.95312500e-03f, +3.41796875e-03f, +4.63867188e-03f, +5.61523438e-03f, +6.34765625e-03f, +6.83593750e-03f, +7.08007813e-03f, +7.08007813e-03f, +7.08007813e-03f, +6.83593750e-03f, +6.59179688e-03f, +6.34765625e-03f, +6.10351563e-03f, +5.85937500e-03f, +5.85937500e-03f, +5.61523438e-03f, +5.61523438e-03f, +5.85937500e-03f, +5.85937500e-03f, +6.10351563e-03f, +6.59179688e-03f, +6.83593750e-03f, +7.32421875e-03f, +7.81250000e-03f, +8.30078125e-03f, +8.78906250e-03f, +9.27734375e-03f, +9.52148438e-03f, +9.76562500e-03f, +1.00097656e-02f, +1.00097656e-02f, +1.00097656e-02f, +1.00097656e-02f, +9.76562500e-03f, +9.27734375e-03f, +8.78906250e-03f, +8.30078125e-03f, +7.81250000e-03f, +7.08007813e-03f, +6.34765625e-03f, +5.61523438e-03f, +4.88281250e-03f, +4.15039063e-03f, +3.41796875e-03f, +2.68554688e-03f, +2.19726563e-03f, +1.46484375e-03f, +9.76562500e-04f, +7.32421875e-04f, +2.44140625e-04f, +0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-7.32421875e-04f, +-7.32421875e-04f, +-9.76562500e-04f, +-1.22070313e-03f, +-1.46484375e-03f, +-1.46484375e-03f, +-1.70898438e-03f, +-1.95312500e-03f, +-2.19726563e-03f, +-2.44140625e-03f, +-2.44140625e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.68554688e-03f, +-2.44140625e-03f, +-2.44140625e-03f, +-2.19726563e-03f, +-1.95312500e-03f, +-1.70898438e-03f, +-1.70898438e-03f, +-1.46484375e-03f, +-1.22070313e-03f, +-9.76562500e-04f, +-9.76562500e-04f, +-7.32421875e-04f, +-7.32421875e-04f, +-4.88281250e-04f, +-4.88281250e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +4.88281250e-04f, +4.88281250e-04f, +4.88281250e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +7.32421875e-04f, +4.88281250e-04f, +4.88281250e-04f, +4.88281250e-04f, +4.88281250e-04f, +4.88281250e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +2.44140625e-04f, +0.00000000e+00f, +0.00000000e+00f, +0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-2.44140625e-04f, +-0.00000000e+00f, +-0.00000000e+00f, +-0.00000000e+00f, diff --git a/examples/dcl/dcl_pi/pi_test.c b/examples/dcl/dcl_pi/pi_test.c new file mode 100644 index 0000000..3354e64 --- /dev/null +++ b/examples/dcl/dcl_pi/pi_test.c @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "pi_test.h" + +void dcl_pi_main(void *args) +{ + /* Open drivers to open the UART driver for console */ + Drivers_open(); + Board_driversOpen(); + + // + // Available PI controllers are: + // - DCL_runPISeries + // - DCL_runPIParallel + // - DCL_runPISeriesTustin + // - DCL_runPIParallelEnhanced (Requires additional parameters) + // + PI_runTest(pi_controller, &DCL_runPISeries); + + Board_driversClose(); + Drivers_close(); +} + +int PI_runTest(DCL_PI *ctrl_handle, DCL_PI_FUNC dcl_pi_func) +{ + // + // Define DFLOG pointers that will be used to access the data buffer + // + DCL_FDLOG rkBuf, ykBuf, outBuf, ctlBuf; + DCL_resetPI(ctrl_handle); + + // + // Initialize Log pointers to the data buffer + // + DCL_initLog(&rkBuf, (float32_t*)rk_buffer, DATA_LENGTH); + DCL_initLog(&ykBuf, (float32_t*)yk_buffer, DATA_LENGTH); + DCL_initLog(&outBuf, (float32_t*)out_buffer, DATA_LENGTH); + DCL_initLog(&ctlBuf, (float32_t*)ctl_buffer, DATA_LENGTH); + DCL_clearLog(&outBuf); + + int i; + for (i = 0; i < NUM_ELEMENTS; i++) + { + // + // rk = Target referenced value + // yk = Current feedback value + // uk = Output control effort + // + float32_t rk,yk,uk; + + // + // Read the input data buffers + // + rk = DCL_readLog(&rkBuf); + yk = DCL_readLog(&ykBuf); + + // + // Run the controller + // Equivalent to uk = DCL_runPI_series(ctrl_handle, rk, yk); + // + uk = (*dcl_pi_func)(ctrl_handle, rk, yk); + + // + // Write the results to the output buffer + // + DCL_writeLog(&outBuf, uk); + + } + + // + // Reset the log pointer so it starts from the beginning + // + DCL_resetLog(&outBuf); + + // + // Check output against expected output with tolerance (1e-06) + // + int errors = 0; + for (i = 0; i < NUM_ELEMENTS; i++) + { + float32_t output = DCL_readLog(&outBuf); // out_buffer[i] + float32_t expected = DCL_readLog(&ctlBuf); // ctl_buffer[i] + if (!DCL_isZero(output - expected)) + { + errors++; + DebugP_log("FAIL at sample %d, outputs %f, should be %f\n", i, output, expected); + } + } + + DebugP_log("PI test produced %d error\n",errors); + + return errors; +} + + diff --git a/examples/dcl/dcl_pi/pi_test.h b/examples/dcl/dcl_pi/pi_test.h new file mode 100644 index 0000000..5f6e72a --- /dev/null +++ b/examples/dcl/dcl_pi/pi_test.h @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef PI_TEST_H +#define PI_TEST_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "ti_drivers_config.h" +#include "ti_drivers_open_close.h" +#include "ti_board_open_close.h" +#include + +// +// User configurable values +// +#define PI_TESTCASE 1 //!< Defines testcase, tests 1-3 is provided +#define DATA_LENGTH 1601 //!< Size of total data inputs +#define NUM_ELEMENTS 400 //!< The number of samples ran, cannot exceed DATA_LENGTH + +void dcl_pi_main(void *args); +typedef float32_t (*DCL_PI_FUNC)(DCL_PI *p, float32_t rk, float32_t yk); +int PI_runTest(DCL_PI *ctrl_handle, DCL_PI_FUNC dcl_pi_func); + + +// +// Controller initialization +// +//! Method 1: +//! Direct assignments +//! +DCL_PI *pi_controller = &(DCL_PI) +{ + .Kp = 2.50000f, + .Ki = 0.01000f, + .Umax = 2.00000f, + .Umin = -2.00000f, + PI_INT_DEFAULTS // macro for default values of internal attributes +}; + +//! Method 2: +//! Initalizing with input controller parameters +//! +/* +float32_t kp = 2.5f, ki = 0.01f, umax = 1.0f, umin = -1.0f; +DCL_PI *pi_controller = DCL_initPIasParam(2.5f,0.01f,1.0f,-1.0f); // (kp,ki,umax,umin) +*/ + +// +// Macros for selecting testvector based on PI_TESTCASE +// +#define _LSTR(x) #x +#define __LSTR(x) _LSTR(x) +#define PI_RK_DATA(x) __LSTR(data/PI_rk-x.dat) +#define PI_YK_DATA(x) __LSTR(data/PI_yk-x.dat) +#define PI_CTL_DATA(x) __LSTR(data/PI_ctl-x.dat) + +// +// Allocate data sections and initialize data +// +const float32_t __attribute__((weak)) rk_buffer[DATA_LENGTH] = +{ +#include PI_RK_DATA(PI_TESTCASE) +}; + +const float32_t __attribute__((weak)) yk_buffer[DATA_LENGTH] = +{ +#include PI_YK_DATA(PI_TESTCASE) +}; + +const float32_t __attribute__((weak)) ctl_buffer[DATA_LENGTH] = +{ +#include PI_CTL_DATA(PI_TESTCASE) +}; + +static float32_t out_buffer[DATA_LENGTH]; + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif diff --git a/makefile.am243x b/makefile.am243x index 1c2e442..2a9a5b8 100644 --- a/makefile.am243x +++ b/makefile.am243x @@ -46,6 +46,22 @@ help: @echo . @echo Example build targets, @echo ====================== + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] @echo $(MAKE) -s -C examples/position_sense/endat_diagnostic/single_channel/am243x-evm/r5fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] @echo $(MAKE) -s -C examples/position_sense/endat_diagnostic/single_channel/am243x-lp/r5fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] @echo $(MAKE) -s -C examples/position_sense/endat_diagnostic/multi_channel_load_share/am243x-evm/r5fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] @@ -172,6 +188,22 @@ $(BUILD_COMBO_SCRUB_motorcontrol_tamagawa): BUILD_COMBO_EXAMPLE_ALL = # Various Example Targets +BUILD_COMBO_EXAMPLE_ALL += dcl_df22_am243x-evm_r5fss0-0_nortos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_df22_am243x-evm_r5fss0-0_freertos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_df22_am243x-evm_m4fss0-0_nortos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_df22_am243x-evm_m4fss0-0_freertos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_df22_am243x-lp_r5fss0-0_nortos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_df22_am243x-lp_r5fss0-0_freertos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_df22_am243x-lp_m4fss0-0_nortos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_df22_am243x-lp_m4fss0-0_freertos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_pi_am243x-evm_r5fss0-0_nortos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_pi_am243x-evm_r5fss0-0_freertos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_pi_am243x-evm_m4fss0-0_nortos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_pi_am243x-evm_m4fss0-0_freertos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_pi_am243x-lp_r5fss0-0_nortos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_pi_am243x-lp_r5fss0-0_freertos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_pi_am243x-lp_m4fss0-0_nortos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_pi_am243x-lp_m4fss0-0_freertos_ti-arm-clang BUILD_COMBO_EXAMPLE_ALL += endat_diagnostic_single_channel_am243x-evm_r5fss0-0_freertos_ti-arm-clang BUILD_COMBO_EXAMPLE_ALL += endat_diagnostic_single_channel_am243x-lp_r5fss0-0_freertos_ti-arm-clang BUILD_COMBO_EXAMPLE_ALL += endat_diagnostic_multi_channel_load_share_am243x-evm_r5fss0-0_freertos_ti-arm-clang @@ -209,6 +241,54 @@ examples: $(BUILD_COMBO_EXAMPLE_ALL) examples-private: $(BUILD_COMBO_EXAMPLE_PRIVATE_ALL) + dcl_df22_am243x-evm_r5fss0-0_nortos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang -f makefile all + + dcl_df22_am243x-evm_r5fss0-0_freertos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile all + + dcl_df22_am243x-evm_m4fss0-0_nortos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang -f makefile all + + dcl_df22_am243x-evm_m4fss0-0_freertos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang -f makefile all + + dcl_df22_am243x-lp_r5fss0-0_nortos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile all + + dcl_df22_am243x-lp_r5fss0-0_freertos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile all + + dcl_df22_am243x-lp_m4fss0-0_nortos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang -f makefile all + + dcl_df22_am243x-lp_m4fss0-0_freertos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang -f makefile all + + dcl_pi_am243x-evm_r5fss0-0_nortos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang -f makefile all + + dcl_pi_am243x-evm_r5fss0-0_freertos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile all + + dcl_pi_am243x-evm_m4fss0-0_nortos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang -f makefile all + + dcl_pi_am243x-evm_m4fss0-0_freertos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang -f makefile all + + dcl_pi_am243x-lp_r5fss0-0_nortos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile all + + dcl_pi_am243x-lp_r5fss0-0_freertos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile all + + dcl_pi_am243x-lp_m4fss0-0_nortos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang -f makefile all + + dcl_pi_am243x-lp_m4fss0-0_freertos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang -f makefile all + endat_diagnostic_single_channel_am243x-evm_r5fss0-0_freertos_ti-arm-clang: $(MAKE) -C examples/position_sense/endat_diagnostic/single_channel/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile all @@ -293,6 +373,22 @@ examples-private: $(BUILD_COMBO_EXAMPLE_PRIVATE_ALL) BUILD_COMBO_EXAMPLE_CLEAN_ALL = # Various Example Clean Targets +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_df22_am243x-evm_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_df22_am243x-evm_r5fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_df22_am243x-evm_m4fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_df22_am243x-evm_m4fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_df22_am243x-lp_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_df22_am243x-lp_r5fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_df22_am243x-lp_m4fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_df22_am243x-lp_m4fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_pi_am243x-evm_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_pi_am243x-evm_r5fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_pi_am243x-evm_m4fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_pi_am243x-evm_m4fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_pi_am243x-lp_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_pi_am243x-lp_r5fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_pi_am243x-lp_m4fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_pi_am243x-lp_m4fss0-0_freertos_ti-arm-clang_clean BUILD_COMBO_EXAMPLE_CLEAN_ALL += endat_diagnostic_single_channel_am243x-evm_r5fss0-0_freertos_ti-arm-clang_clean BUILD_COMBO_EXAMPLE_CLEAN_ALL += endat_diagnostic_single_channel_am243x-lp_r5fss0-0_freertos_ti-arm-clang_clean BUILD_COMBO_EXAMPLE_CLEAN_ALL += endat_diagnostic_multi_channel_load_share_am243x-evm_r5fss0-0_freertos_ti-arm-clang_clean @@ -330,6 +426,54 @@ examples-clean: $(BUILD_COMBO_EXAMPLE_CLEAN_ALL) examples-private-clean: $(BUILD_COMBO_EXAMPLE_PRIVATE_CLEAN_ALL) + dcl_df22_am243x-evm_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang -f makefile clean + + dcl_df22_am243x-evm_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile clean + + dcl_df22_am243x-evm_m4fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang -f makefile clean + + dcl_df22_am243x-evm_m4fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang -f makefile clean + + dcl_df22_am243x-lp_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile clean + + dcl_df22_am243x-lp_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile clean + + dcl_df22_am243x-lp_m4fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang -f makefile clean + + dcl_df22_am243x-lp_m4fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang -f makefile clean + + dcl_pi_am243x-evm_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang -f makefile clean + + dcl_pi_am243x-evm_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile clean + + dcl_pi_am243x-evm_m4fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang -f makefile clean + + dcl_pi_am243x-evm_m4fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang -f makefile clean + + dcl_pi_am243x-lp_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile clean + + dcl_pi_am243x-lp_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile clean + + dcl_pi_am243x-lp_m4fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang -f makefile clean + + dcl_pi_am243x-lp_m4fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang -f makefile clean + endat_diagnostic_single_channel_am243x-evm_r5fss0-0_freertos_ti-arm-clang_clean: $(MAKE) -C examples/position_sense/endat_diagnostic/single_channel/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile clean @@ -414,6 +558,22 @@ examples-private-clean: $(BUILD_COMBO_EXAMPLE_PRIVATE_CLEAN_ALL) BUILD_COMBO_EXAMPLE_SCRUB_ALL = # Various Example Scrub Targets +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_df22_am243x-evm_r5fss0-0_nortos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_df22_am243x-evm_r5fss0-0_freertos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_df22_am243x-evm_m4fss0-0_nortos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_df22_am243x-evm_m4fss0-0_freertos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_df22_am243x-lp_r5fss0-0_nortos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_df22_am243x-lp_r5fss0-0_freertos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_df22_am243x-lp_m4fss0-0_nortos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_df22_am243x-lp_m4fss0-0_freertos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_pi_am243x-evm_r5fss0-0_nortos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_pi_am243x-evm_r5fss0-0_freertos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_pi_am243x-evm_m4fss0-0_nortos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_pi_am243x-evm_m4fss0-0_freertos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_pi_am243x-lp_r5fss0-0_nortos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_pi_am243x-lp_r5fss0-0_freertos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_pi_am243x-lp_m4fss0-0_nortos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_pi_am243x-lp_m4fss0-0_freertos_ti-arm-clang_scrub BUILD_COMBO_EXAMPLE_SCRUB_ALL += endat_diagnostic_single_channel_am243x-evm_r5fss0-0_freertos_ti-arm-clang_scrub BUILD_COMBO_EXAMPLE_SCRUB_ALL += endat_diagnostic_single_channel_am243x-lp_r5fss0-0_freertos_ti-arm-clang_scrub BUILD_COMBO_EXAMPLE_SCRUB_ALL += endat_diagnostic_multi_channel_load_share_am243x-evm_r5fss0-0_freertos_ti-arm-clang_scrub @@ -451,6 +611,54 @@ examples-scrub: $(BUILD_COMBO_EXAMPLE_SCRUB_ALL) examples-scrub-private: $(BUILD_COMBO_EXAMPLE_PRIVATE_SCRUB_ALL) + dcl_df22_am243x-evm_r5fss0-0_nortos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang -f makefile scrub + + dcl_df22_am243x-evm_r5fss0-0_freertos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile scrub + + dcl_df22_am243x-evm_m4fss0-0_nortos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang -f makefile scrub + + dcl_df22_am243x-evm_m4fss0-0_freertos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang -f makefile scrub + + dcl_df22_am243x-lp_r5fss0-0_nortos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile scrub + + dcl_df22_am243x-lp_r5fss0-0_freertos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile scrub + + dcl_df22_am243x-lp_m4fss0-0_nortos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang -f makefile scrub + + dcl_df22_am243x-lp_m4fss0-0_freertos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang -f makefile scrub + + dcl_pi_am243x-evm_r5fss0-0_nortos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang -f makefile scrub + + dcl_pi_am243x-evm_r5fss0-0_freertos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile scrub + + dcl_pi_am243x-evm_m4fss0-0_nortos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang -f makefile scrub + + dcl_pi_am243x-evm_m4fss0-0_freertos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang -f makefile scrub + + dcl_pi_am243x-lp_r5fss0-0_nortos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile scrub + + dcl_pi_am243x-lp_r5fss0-0_freertos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile scrub + + dcl_pi_am243x-lp_m4fss0-0_nortos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang -f makefile scrub + + dcl_pi_am243x-lp_m4fss0-0_freertos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang -f makefile scrub + endat_diagnostic_single_channel_am243x-evm_r5fss0-0_freertos_ti-arm-clang_scrub: $(MAKE) -C examples/position_sense/endat_diagnostic/single_channel/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile scrub diff --git a/makefile.am263x b/makefile.am263x index 346cda7..8a874ec 100644 --- a/makefile.am263x +++ b/makefile.am263x @@ -40,6 +40,14 @@ help: @echo . @echo Example build targets, @echo ====================== + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang [all clean syscfg-gui syscfg] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] @echo $(MAKE) -s -C examples/position_sense/tamagawa_diagnostic_over_soc_uart/am263x-lp/r5fss0-0_freertos/ti-arm-clang [all clean syscfg-gui syscfg] @echo . @echo System Example build targets, @@ -104,6 +112,14 @@ $(BUILD_COMBO_SCRUB_motorcontrol_tamagawa_over_soc_uart): BUILD_COMBO_EXAMPLE_ALL = # Various Example Targets +BUILD_COMBO_EXAMPLE_ALL += dcl_df22_am263x-cc_r5fss0-0_nortos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_df22_am263x-cc_r5fss0-0_freertos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_df22_am263x-lp_r5fss0-0_nortos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_df22_am263x-lp_r5fss0-0_freertos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_pi_am263x-cc_r5fss0-0_nortos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_pi_am263x-cc_r5fss0-0_freertos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_pi_am263x-lp_r5fss0-0_nortos_ti-arm-clang +BUILD_COMBO_EXAMPLE_ALL += dcl_pi_am263x-lp_r5fss0-0_freertos_ti-arm-clang BUILD_COMBO_EXAMPLE_ALL += tamagawa_diagnostic_soc_uart_am263x-lp_r5fss0-0_freertos_ti-arm-clang # Various System Example Targets @@ -115,12 +131,44 @@ examples: $(BUILD_COMBO_EXAMPLE_ALL) examples-private: $(BUILD_COMBO_EXAMPLE_PRIVATE_ALL) + dcl_df22_am263x-cc_r5fss0-0_nortos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang -f makefile all + + dcl_df22_am263x-cc_r5fss0-0_freertos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang -f makefile all + + dcl_df22_am263x-lp_r5fss0-0_nortos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile all + + dcl_df22_am263x-lp_r5fss0-0_freertos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile all + + dcl_pi_am263x-cc_r5fss0-0_nortos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang -f makefile all + + dcl_pi_am263x-cc_r5fss0-0_freertos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang -f makefile all + + dcl_pi_am263x-lp_r5fss0-0_nortos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile all + + dcl_pi_am263x-lp_r5fss0-0_freertos_ti-arm-clang: + $(MAKE) -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile all + tamagawa_diagnostic_soc_uart_am263x-lp_r5fss0-0_freertos_ti-arm-clang: $(MAKE) -C examples/position_sense/tamagawa_diagnostic_over_soc_uart/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile all BUILD_COMBO_EXAMPLE_CLEAN_ALL = # Various Example Clean Targets +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_df22_am263x-cc_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_df22_am263x-cc_r5fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_df22_am263x-lp_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_df22_am263x-lp_r5fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_pi_am263x-cc_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_pi_am263x-cc_r5fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_pi_am263x-lp_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_CLEAN_ALL += dcl_pi_am263x-lp_r5fss0-0_freertos_ti-arm-clang_clean BUILD_COMBO_EXAMPLE_CLEAN_ALL += tamagawa_diagnostic_soc_uart_am263x-lp_r5fss0-0_freertos_ti-arm-clang_clean # Various System Example Clean Targets @@ -132,12 +180,44 @@ examples-clean: $(BUILD_COMBO_EXAMPLE_CLEAN_ALL) examples-private-clean: $(BUILD_COMBO_EXAMPLE_PRIVATE_CLEAN_ALL) + dcl_df22_am263x-cc_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang -f makefile clean + + dcl_df22_am263x-cc_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang -f makefile clean + + dcl_df22_am263x-lp_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile clean + + dcl_df22_am263x-lp_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile clean + + dcl_pi_am263x-cc_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang -f makefile clean + + dcl_pi_am263x-cc_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang -f makefile clean + + dcl_pi_am263x-lp_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile clean + + dcl_pi_am263x-lp_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile clean + tamagawa_diagnostic_soc_uart_am263x-lp_r5fss0-0_freertos_ti-arm-clang_clean: $(MAKE) -C examples/position_sense/tamagawa_diagnostic_over_soc_uart/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile clean BUILD_COMBO_EXAMPLE_SCRUB_ALL = # Various Example Scrub Targets +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_df22_am263x-cc_r5fss0-0_nortos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_df22_am263x-cc_r5fss0-0_freertos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_df22_am263x-lp_r5fss0-0_nortos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_df22_am263x-lp_r5fss0-0_freertos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_pi_am263x-cc_r5fss0-0_nortos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_pi_am263x-cc_r5fss0-0_freertos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_pi_am263x-lp_r5fss0-0_nortos_ti-arm-clang_scrub +BUILD_COMBO_EXAMPLE_SCRUB_ALL += dcl_pi_am263x-lp_r5fss0-0_freertos_ti-arm-clang_scrub BUILD_COMBO_EXAMPLE_SCRUB_ALL += tamagawa_diagnostic_soc_uart_am263x-lp_r5fss0-0_freertos_ti-arm-clang_scrub # Various System Example Scrub Targets @@ -149,6 +229,30 @@ examples-scrub: $(BUILD_COMBO_EXAMPLE_SCRUB_ALL) examples-scrub-private: $(BUILD_COMBO_EXAMPLE_PRIVATE_SCRUB_ALL) + dcl_df22_am263x-cc_r5fss0-0_nortos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang -f makefile scrub + + dcl_df22_am263x-cc_r5fss0-0_freertos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang -f makefile scrub + + dcl_df22_am263x-lp_r5fss0-0_nortos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile scrub + + dcl_df22_am263x-lp_r5fss0-0_freertos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile scrub + + dcl_pi_am263x-cc_r5fss0-0_nortos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang -f makefile scrub + + dcl_pi_am263x-cc_r5fss0-0_freertos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang -f makefile scrub + + dcl_pi_am263x-lp_r5fss0-0_nortos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile scrub + + dcl_pi_am263x-lp_r5fss0-0_freertos_ti-arm-clang_scrub: + $(MAKE) -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile scrub + tamagawa_diagnostic_soc_uart_am263x-lp_r5fss0-0_freertos_ti-arm-clang_scrub: $(MAKE) -C examples/position_sense/tamagawa_diagnostic_over_soc_uart/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile scrub diff --git a/makefile_projectspec.am243x b/makefile_projectspec.am243x index 7f9f477..d83dd2b 100644 --- a/makefile_projectspec.am243x +++ b/makefile_projectspec.am243x @@ -7,6 +7,22 @@ include $(MOTOR_CONTROL_SDK_PATH)/imports.mak BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL = # Various Example Projectspec Build Targets +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_df22_am243x-evm_r5fss0-0_nortos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_df22_am243x-evm_r5fss0-0_freertos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_df22_am243x-evm_m4fss0-0_nortos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_df22_am243x-evm_m4fss0-0_freertos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_df22_am243x-lp_r5fss0-0_nortos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_df22_am243x-lp_r5fss0-0_freertos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_df22_am243x-lp_m4fss0-0_nortos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_df22_am243x-lp_m4fss0-0_freertos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_pi_am243x-evm_r5fss0-0_nortos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_pi_am243x-evm_r5fss0-0_freertos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_pi_am243x-evm_m4fss0-0_nortos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_pi_am243x-evm_m4fss0-0_freertos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_pi_am243x-lp_r5fss0-0_nortos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_pi_am243x-lp_r5fss0-0_freertos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_pi_am243x-lp_m4fss0-0_nortos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_pi_am243x-lp_m4fss0-0_freertos_ti-arm-clang_build BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += endat_diagnostic_single_channel_am243x-evm_r5fss0-0_freertos_ti-arm-clang_build BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += endat_diagnostic_single_channel_am243x-lp_r5fss0-0_freertos_ti-arm-clang_build BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += endat_diagnostic_multi_channel_load_share_am243x-evm_r5fss0-0_freertos_ti-arm-clang_build @@ -44,6 +60,54 @@ all: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL) all-private: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_PRIVATE_ALL) + dcl_df22_am243x-evm_r5fss0-0_nortos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec all + + dcl_df22_am243x-evm_r5fss0-0_freertos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec all + + dcl_df22_am243x-evm_m4fss0-0_nortos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec all + + dcl_df22_am243x-evm_m4fss0-0_freertos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec all + + dcl_df22_am243x-lp_r5fss0-0_nortos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec all + + dcl_df22_am243x-lp_r5fss0-0_freertos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec all + + dcl_df22_am243x-lp_m4fss0-0_nortos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec all + + dcl_df22_am243x-lp_m4fss0-0_freertos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec all + + dcl_pi_am243x-evm_r5fss0-0_nortos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec all + + dcl_pi_am243x-evm_r5fss0-0_freertos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec all + + dcl_pi_am243x-evm_m4fss0-0_nortos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec all + + dcl_pi_am243x-evm_m4fss0-0_freertos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec all + + dcl_pi_am243x-lp_r5fss0-0_nortos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec all + + dcl_pi_am243x-lp_r5fss0-0_freertos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec all + + dcl_pi_am243x-lp_m4fss0-0_nortos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec all + + dcl_pi_am243x-lp_m4fss0-0_freertos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec all + endat_diagnostic_single_channel_am243x-evm_r5fss0-0_freertos_ti-arm-clang_build: $(MAKE) -C examples/position_sense/endat_diagnostic/single_channel/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec all @@ -129,6 +193,22 @@ all-private: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_PRIVATE_ALL) BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL = # Various Example Projectspec Clean Targets +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_df22_am243x-evm_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_df22_am243x-evm_r5fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_df22_am243x-evm_m4fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_df22_am243x-evm_m4fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_df22_am243x-lp_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_df22_am243x-lp_r5fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_df22_am243x-lp_m4fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_df22_am243x-lp_m4fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_pi_am243x-evm_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_pi_am243x-evm_r5fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_pi_am243x-evm_m4fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_pi_am243x-evm_m4fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_pi_am243x-lp_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_pi_am243x-lp_r5fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_pi_am243x-lp_m4fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_pi_am243x-lp_m4fss0-0_freertos_ti-arm-clang_clean BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += endat_diagnostic_single_channel_am243x-evm_r5fss0-0_freertos_ti-arm-clang_clean BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += endat_diagnostic_single_channel_am243x-lp_r5fss0-0_freertos_ti-arm-clang_clean BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += endat_diagnostic_multi_channel_load_share_am243x-evm_r5fss0-0_freertos_ti-arm-clang_clean @@ -166,6 +246,54 @@ clean: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL) clean-private: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_PRIVATE_ALL) + dcl_df22_am243x-evm_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec clean + + dcl_df22_am243x-evm_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec clean + + dcl_df22_am243x-evm_m4fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec clean + + dcl_df22_am243x-evm_m4fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec clean + + dcl_df22_am243x-lp_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec clean + + dcl_df22_am243x-lp_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec clean + + dcl_df22_am243x-lp_m4fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec clean + + dcl_df22_am243x-lp_m4fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec clean + + dcl_pi_am243x-evm_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec clean + + dcl_pi_am243x-evm_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec clean + + dcl_pi_am243x-evm_m4fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec clean + + dcl_pi_am243x-evm_m4fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec clean + + dcl_pi_am243x-lp_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec clean + + dcl_pi_am243x-lp_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec clean + + dcl_pi_am243x-lp_m4fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec clean + + dcl_pi_am243x-lp_m4fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec clean + endat_diagnostic_single_channel_am243x-evm_r5fss0-0_freertos_ti-arm-clang_clean: $(MAKE) -C examples/position_sense/endat_diagnostic/single_channel/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec clean @@ -251,6 +379,22 @@ clean-private: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_PRIVATE_ALL) BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL = # Various Example Projectspec Export Targets +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_df22_am243x-evm_r5fss0-0_nortos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_df22_am243x-evm_r5fss0-0_freertos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_df22_am243x-evm_m4fss0-0_nortos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_df22_am243x-evm_m4fss0-0_freertos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_df22_am243x-lp_r5fss0-0_nortos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_df22_am243x-lp_r5fss0-0_freertos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_df22_am243x-lp_m4fss0-0_nortos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_df22_am243x-lp_m4fss0-0_freertos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_pi_am243x-evm_r5fss0-0_nortos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_pi_am243x-evm_r5fss0-0_freertos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_pi_am243x-evm_m4fss0-0_nortos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_pi_am243x-evm_m4fss0-0_freertos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_pi_am243x-lp_r5fss0-0_nortos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_pi_am243x-lp_r5fss0-0_freertos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_pi_am243x-lp_m4fss0-0_nortos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_pi_am243x-lp_m4fss0-0_freertos_ti-arm-clang_export BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += endat_diagnostic_single_channel_am243x-evm_r5fss0-0_freertos_ti-arm-clang_export BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += endat_diagnostic_single_channel_am243x-lp_r5fss0-0_freertos_ti-arm-clang_export BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += endat_diagnostic_multi_channel_load_share_am243x-evm_r5fss0-0_freertos_ti-arm-clang_export @@ -288,6 +432,54 @@ export: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL) export-private: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_PRIVATE_ALL) + dcl_df22_am243x-evm_r5fss0-0_nortos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec export + + dcl_df22_am243x-evm_r5fss0-0_freertos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec export + + dcl_df22_am243x-evm_m4fss0-0_nortos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec export + + dcl_df22_am243x-evm_m4fss0-0_freertos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec export + + dcl_df22_am243x-lp_r5fss0-0_nortos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec export + + dcl_df22_am243x-lp_r5fss0-0_freertos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec export + + dcl_df22_am243x-lp_m4fss0-0_nortos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec export + + dcl_df22_am243x-lp_m4fss0-0_freertos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec export + + dcl_pi_am243x-evm_r5fss0-0_nortos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec export + + dcl_pi_am243x-evm_r5fss0-0_freertos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec export + + dcl_pi_am243x-evm_m4fss0-0_nortos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec export + + dcl_pi_am243x-evm_m4fss0-0_freertos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec export + + dcl_pi_am243x-lp_r5fss0-0_nortos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec export + + dcl_pi_am243x-lp_r5fss0-0_freertos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec export + + dcl_pi_am243x-lp_m4fss0-0_nortos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec export + + dcl_pi_am243x-lp_m4fss0-0_freertos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec export + endat_diagnostic_single_channel_am243x-evm_r5fss0-0_freertos_ti-arm-clang_export: $(MAKE) -C examples/position_sense/endat_diagnostic/single_channel/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec export @@ -398,6 +590,22 @@ help: @echo . @echo Example ProjectSpec build targets, @echo ================================== + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-evm/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am243x-lp/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-evm/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_nortos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am243x-lp/m4fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] @echo $(MAKE) -s -C examples/position_sense/endat_diagnostic/single_channel/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] @echo $(MAKE) -s -C examples/position_sense/endat_diagnostic/single_channel/am243x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] @echo $(MAKE) -s -C examples/position_sense/endat_diagnostic/multi_channel_load_share/am243x-evm/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] diff --git a/makefile_projectspec.am263x b/makefile_projectspec.am263x index 82304bf..9130f64 100644 --- a/makefile_projectspec.am263x +++ b/makefile_projectspec.am263x @@ -4,6 +4,14 @@ BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL = # Various Example Projectspec Build Targets +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_df22_am263x-cc_r5fss0-0_nortos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_df22_am263x-cc_r5fss0-0_freertos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_df22_am263x-lp_r5fss0-0_nortos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_df22_am263x-lp_r5fss0-0_freertos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_pi_am263x-cc_r5fss0-0_nortos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_pi_am263x-cc_r5fss0-0_freertos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_pi_am263x-lp_r5fss0-0_nortos_ti-arm-clang_build +BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += dcl_pi_am263x-lp_r5fss0-0_freertos_ti-arm-clang_build BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL += tamagawa_diagnostic_soc_uart_am263x-lp_r5fss0-0_freertos_ti-arm-clang_build # Various System Example Projectspec Build Targets @@ -15,6 +23,30 @@ all: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_ALL) all-private: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_PRIVATE_ALL) + dcl_df22_am263x-cc_r5fss0-0_nortos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec all + + dcl_df22_am263x-cc_r5fss0-0_freertos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec all + + dcl_df22_am263x-lp_r5fss0-0_nortos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec all + + dcl_df22_am263x-lp_r5fss0-0_freertos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec all + + dcl_pi_am263x-cc_r5fss0-0_nortos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec all + + dcl_pi_am263x-cc_r5fss0-0_freertos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec all + + dcl_pi_am263x-lp_r5fss0-0_nortos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec all + + dcl_pi_am263x-lp_r5fss0-0_freertos_ti-arm-clang_build: + $(MAKE) -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec all + tamagawa_diagnostic_soc_uart_am263x-lp_r5fss0-0_freertos_ti-arm-clang_build: $(MAKE) -C examples/position_sense/tamagawa_diagnostic_over_soc_uart/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec all @@ -22,6 +54,14 @@ all-private: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_BUILD_PRIVATE_ALL) BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL = # Various Example Projectspec Clean Targets +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_df22_am263x-cc_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_df22_am263x-cc_r5fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_df22_am263x-lp_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_df22_am263x-lp_r5fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_pi_am263x-cc_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_pi_am263x-cc_r5fss0-0_freertos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_pi_am263x-lp_r5fss0-0_nortos_ti-arm-clang_clean +BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += dcl_pi_am263x-lp_r5fss0-0_freertos_ti-arm-clang_clean BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL += tamagawa_diagnostic_soc_uart_am263x-lp_r5fss0-0_freertos_ti-arm-clang_clean # Various System Example Projectspec Clean Targets @@ -33,6 +73,30 @@ clean: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_ALL) clean-private: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_PRIVATE_ALL) + dcl_df22_am263x-cc_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec clean + + dcl_df22_am263x-cc_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec clean + + dcl_df22_am263x-lp_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec clean + + dcl_df22_am263x-lp_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec clean + + dcl_pi_am263x-cc_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec clean + + dcl_pi_am263x-cc_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec clean + + dcl_pi_am263x-lp_r5fss0-0_nortos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec clean + + dcl_pi_am263x-lp_r5fss0-0_freertos_ti-arm-clang_clean: + $(MAKE) -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec clean + tamagawa_diagnostic_soc_uart_am263x-lp_r5fss0-0_freertos_ti-arm-clang_clean: $(MAKE) -C examples/position_sense/tamagawa_diagnostic_over_soc_uart/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec clean @@ -40,6 +104,14 @@ clean-private: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_CLEAN_PRIVATE_ALL) BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL = # Various Example Projectspec Export Targets +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_df22_am263x-cc_r5fss0-0_nortos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_df22_am263x-cc_r5fss0-0_freertos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_df22_am263x-lp_r5fss0-0_nortos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_df22_am263x-lp_r5fss0-0_freertos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_pi_am263x-cc_r5fss0-0_nortos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_pi_am263x-cc_r5fss0-0_freertos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_pi_am263x-lp_r5fss0-0_nortos_ti-arm-clang_export +BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += dcl_pi_am263x-lp_r5fss0-0_freertos_ti-arm-clang_export BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL += tamagawa_diagnostic_soc_uart_am263x-lp_r5fss0-0_freertos_ti-arm-clang_export # Various System Example Projectspec Export Targets @@ -51,6 +123,30 @@ export: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_ALL) export-private: $(BUILD_COMBO_EXAMPLE_PROJECTSPEC_EXPORT_PRIVATE_ALL) + dcl_df22_am263x-cc_r5fss0-0_nortos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec export + + dcl_df22_am263x-cc_r5fss0-0_freertos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec export + + dcl_df22_am263x-lp_r5fss0-0_nortos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec export + + dcl_df22_am263x-lp_r5fss0-0_freertos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec export + + dcl_pi_am263x-cc_r5fss0-0_nortos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec export + + dcl_pi_am263x-cc_r5fss0-0_freertos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec export + + dcl_pi_am263x-lp_r5fss0-0_nortos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec export + + dcl_pi_am263x-lp_r5fss0-0_freertos_ti-arm-clang_export: + $(MAKE) -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec export + tamagawa_diagnostic_soc_uart_am263x-lp_r5fss0-0_freertos_ti-arm-clang_export: $(MAKE) -C examples/position_sense/tamagawa_diagnostic_over_soc_uart/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec export @@ -74,6 +170,14 @@ help: @echo . @echo Example ProjectSpec build targets, @echo ================================== + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am263x-cc/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_df22/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am263x-cc/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_nortos/ti-arm-clang -f makefile_projectspec [export all clean] + @echo $(MAKE) -s -C examples/dcl/dcl_pi/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] @echo $(MAKE) -s -C examples/position_sense/tamagawa_diagnostic_over_soc_uart/am263x-lp/r5fss0-0_freertos/ti-arm-clang -f makefile_projectspec [export all clean] @echo . @echo System Example ProjectSpec build targets, diff --git a/source/dcl/common/dcl_aux.h b/source/dcl/common/dcl_aux.h new file mode 100644 index 0000000..544d169 --- /dev/null +++ b/source/dcl/common/dcl_aux.h @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_AUX_H_ +#define _DCL_AUX_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * + * \file dcl_aux.h + * \brief Defines all the auxiliary macros for DCL + */ + +#ifndef NULL +#define NULL 0 +#endif + +//! \brief Local definitions of the mathematical constant pi +//! +#define CONST_PI 3.14159265358979323846f +#define CONST_2PI 2.0f * CONST_PI +#define CONST_PI_F64 3.1415926535897932384626433832795028841971693993751058209749445923078164062L +#define CONST_2PI_F64 2.0L * CONST_PI_F64 + +//! \brief Define the acceptable FPU numerical tolerances +//! +#define DCL_FPU32_TOL 1.0e-06f +#define DCL_FPU64_TOL 1.0e-10L + +//! \brief Define the default control period in seconds +//! +#define DCL_DEFAULT_PERIOD_S 100.0e-06f +#define DCL_DEFAULT_PERIODF64_S 100.0e-06L + +//! \brief Determines numerical proximity to specified value +//! +#define DCL_isValue(x,y) (((x < (y + DCL_FPU32_TOL)) && (x > (y - DCL_FPU32_TOL))) ? 1U : 0U) +#define DCL_isValueF64(x,y) (((x < (y + DCL_FPU64_TOL)) && (x > (y - DCL_FPU64_TOL))) ? 1U : 0U) + +//! \brief Determines floating point numerical proximity to zero +//! +#define DCL_isZero(x) DCL_isValue(x,0.0f) +#define DCL_isZeroF64(x) DCL_isValueF64(x,0.0L) + +//! \brief Returns a random floating point result between -1.0 and +1.0 +//! where 'a' is the multiplier in single or double precision. +//! Useful for initialization of arrays and matrices during test. +//! +//! \code +//! float32_t s = DCL_rand(1.0f); +//! \endcode +//! +#define DCL_rand(a) (a * ((float32_t) rand() / (float32_t) (RAND_MAX >> 1) - 1.0f)) +#define DCL_randF64(a) (a * ((float64_t) rand() / (float64_t) (RAND_MAX >> 1) - 1.0L)) + +//! \brief Defines the lower limit on derivative filter coefficient c2 +//! in order for fc to lie below the Nyquist frequency +//! +#define DCL_c2Limit ((2.0f - CONST_PI) / (2.0f + CONST_PI)) +#define DCL_c2LimitF64 ((2.0L - CONST_PI_F64) / (2.0L + CONST_PI_F64)) + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_AUX_H_ \ No newline at end of file diff --git a/source/dcl/common/dcl_clamp.h b/source/dcl/common/dcl_clamp.h new file mode 100644 index 0000000..44c6b48 --- /dev/null +++ b/source/dcl/common/dcl_clamp.h @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_CLAMP_H_ +#define _DCL_CLAMP_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * + * \file dcl_clamp.h + * \brief Defines both single, double precision clamp function for saturation + */ + +//--- Controller clamping functions ------------------------------------ + +//! \brief Saturates a control variable and returns true if either limit is exceeded +//! +//! \param[in] data The address of the data variable +//! \param[in] Umax The upper limit +//! \param[in] Umin The lower limit +//! \return Returns 'false' if (Umin < data < Umax), else 'true' +//! +_DCL_CODE_ACCESS +bool DCL_runClamp(float32_t *data, float32_t Umax, float32_t Umin) +{ + float32_t iv = *(data); + *(data) = (*(data) > Umax) ? Umax : *(data); + *(data) = (*(data) < Umin) ? Umin : *(data); + return(((iv < Umax) && (iv > Umin)) ? false : true); +} + +//! \brief Saturates a control variable and returns true if either limit is exceeded +//! +//! \param[in] data The address of the data variable +//! \param[in] Umax The upper limit +//! \param[in] Umin The lower limit +//! \return Returns 'false' if (Umin < data < Umax), else 'true' +//! +_DCL_CODE_ACCESS +bool DCL_runClampF64(float64_t *data, float64_t Umax, float64_t Umin) +{ + float64_t iv = *(data); + *(data) = (*(data) > Umax) ? Umax : *(data); + *(data) = (*(data) < Umin) ? Umin : *(data); + return(((iv < Umax) && (iv > Umin)) ? false : true); +} + +//! \brief Macro to saturate a control variable but does not change the data itself unlike runClamp() +//! +//! \param[in] data The data value +//! \param[in] Umax The upper limit +//! \param[in] Umin The lower limit +//! \return Returns unchanged data value is not saturated, else either Umax or Umin +#define DCL_runSat(data,Umax,Umin) (data > Umax) ? Umax : (data < Umin) ? Umin : data + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_CLAMP_H_ diff --git a/source/dcl/common/dcl_css.h b/source/dcl/common/dcl_css.h new file mode 100644 index 0000000..5d28335 --- /dev/null +++ b/source/dcl/common/dcl_css.h @@ -0,0 +1,157 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_CSS_H_ +#define _DCL_CSS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * + * \file dcl_css.h + * \brief Defines Controller Common Support Structure (CSS) and related macros + */ + +//--- Controller Common Support Structure ------------------------------------ + +//! \brief Defines the controller common support structure +//! +//! \details The CSS is accessed via a pointer in most of the DCL +//! controller structs. It contains data used for testing and +//! configuring the controller, as well as for error checking. +//! +typedef struct dcl_css { + float32_t tpt; //!< Test point + float32_t t_sec; //!< Controller period in seconds + volatile uint32_t sts; //!< Status word + uint32_t err_line; //!< Error location line (errno) + uint32_t err; //!< Error status code + const char* err_func; //!< Error function name +} DCL_CSS; + +//! \brief Default values to initialize the CSS structure +//! +#define DCL_CSS_DEFAULTS { 0.0f, DCL_DEFAULT_PERIOD_S, 0U, 0U, 0U, NULL } + +//! \brief Defines the 64bit CSS structure +//! +typedef struct dcl_css64 { + float64_t tpt; //!< Test point + float64_t t_sec; //!< Controller period in seconds + volatile uint32_t sts; //!< Status word + uint32_t err_line; //!< Error location line (errno) + uint32_t err; //!< Error status code + const char* err_func; //!< Error function name +} DCL_CSSF64; + +//! \brief Default values to initialize the CSS 64bit structure +//! +#define DCL_CSSF64_DEFAULTS { 0.0L, DCL_DEFAULT_PERIODF64_S, 0U, 0U, 0U, NULL } + +//! \brief Loads the controller period in the CSS +//! CSS pointer must be configured first +//! +//! \param[in] p Pointer to the controller structure +//! \param[in] a Sample period in seconds +//! \return None +//! +#define DCL_setControllerPeriod(p,a) ((p)->css->T = a) + +//--- Status word ------------------------------------------------------------ + +//! \brief Defines the library enumerated status bits +//! +//! \details To perform a safe parameter update, the user first loads new parameter into +//! the controller's SPS. Then either invoke DCL_update() for an one-time update, +//! or in the case of an ISR routine update, the user could use +//! DCL_setPendingStatus() to indicate an pending update. In which the next call to +//! DCL_pendingUpdate() would update the controller parameter and clear the flag. +//! +//! Both DCL_update() and DCL_pendingUpdate() disables global interrupts to ensure a safe update. +//! +typedef enum +{ + dcl_sts_none = 0U, //!< Status empty + dcl_sts_param_update = (1U << 0), //!< Parameter update-in-progress flag, high if ongoing parameter update + dcl_sts_param_pending = (1U << 2), //!< Parameter pending-for-update flag, high if parameter needs to be updated + dcl_sts_ctrl_running = (1U << 1) //!< Controller operation-in-progress flag, high if operation is in progress +} dcl_status_bits; + +//! \brief Macros to set and clear the update-in-progress flag +//! +#define DCL_setUpdateStatus(p) ((p)->css->sts |= dcl_sts_param_update) +#define DCL_clearUpdateStatus(p) ((p)->css->sts &= ~dcl_sts_param_update) + +//! \brief Determine whether a parameter update-in-progress flag is set +//! +//! \return 'true' if update status is set, otherwise false +//! +#define DCL_getUpdateStatus(p) (0U != ((p)->css->sts & dcl_sts_param_update)) + + +//! \brief Macros to set and clear the pending-for-update flag +//! +#define DCL_setPendingStatus(p) ((p)->css->sts |= dcl_sts_param_pending) +#define DCL_clearPendingStatus(p) ((p)->css->sts &= ~dcl_sts_param_pending) + +//! \brief Determine whether a parameter pending-for-update flag is set +//! +//! \return 'true' if pending status is set, otherwise false +//! +#define DCL_getPendingStatus(p) (0U != ((p)->css->sts & dcl_sts_param_pending)) + +//! \brief Macros placed at the beginning and end of the controller +//! so that other functions know a control operation is in +//! progress. Typically only used with complex controllers +//! which may not be atomic. +//! +#define DCL_setControllerStatus(p) ((p)->css->sts |= dcl_sts_ctrl_running) +#define DCL_clearControllerStatus(p) ((p)->css->sts &= ~dcl_sts_ctrl_running) + +//! \brief Determine whether a controller operation-in-progress flag is set +//! +//! \return 'true' if controller running flag is set, otherwise false +//! +#define DCL_getControllerStatus(p) (0U != ((p)->css->sts & dcl_sts_ctrl_running)) + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_CSS_H_ diff --git a/source/dcl/common/dcl_stability.h b/source/dcl/common/dcl_stability.h new file mode 100644 index 0000000..5f406e0 --- /dev/null +++ b/source/dcl/common/dcl_stability.h @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_STABILITY_H_ +#define _DCL_STABILITY_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * + * \file dcl_stability.h + * \brief Defines polynomial stability functions + */ + +//--- Polynomial stability functions ----------------------------------------- + +//! \brief Determines stability of a first order real polynomial +//! P(z) = z + a1 +//! +//! \param[in] a1 Coefficient a1 +//! \return 'true' if the root has magnitude less than 1, 'false' otherwise +//! +_DCL_CODE_ACCESS +bool DCL_isStablePn1(float32_t a1) +{ + return ((a1 * a1) < 1.0f); +} + +//! \brief Determines stability of a second order polynomial with real coefficients +//! P(z) = a0 z^2 + a1 z + a2 +//! +//! \param[in] a0 Second order coefficient a1 +//! \param[in] a1 First order coefficient a1 +//! \param[in] a2 Coefficient a2 +//! \return 'true' if both roots have magnitude less than 1, 'false' otherwise +//! +_DCL_CODE_ACCESS +bool DCL_isStablePn2(float32_t a0, float32_t a1, float32_t a2) +{ + float32_t b0, b1, c0; + + b0 = a0 - a2 * a2 / a0; + b1 = a1 - a1 * a2 / a0; + c0 = b0 - b1 * b1 / b0; + + return ((a0 > 0.0f) && (b0 > 0.0f) && (c0 > 0.0f)); +} + +//! \brief Determines stability of a third order polynomial with real coefficients +//! P(z) = a0 z^3 + a1 z^2 + a2 z + a3 +//! +//! \param[in] a0 Third order coefficient a1 +//! \param[in] a1 Second order coefficient a1 +//! \param[in] a2 First order coefficient a2 +//! \param[in] a3 Coefficient a3 +//! \return 'true' if all roots have magnitude less than 1, 'false' otherwise +//! +_DCL_CODE_ACCESS +bool DCL_isStablePn3(float32_t a0, float32_t a1, float32_t a2, float32_t a3) +{ + float32_t b0, b1, b2, c0, c1, d0; + + b0 = a0 - a3 * a3 / a0; + b1 = a1 - a2 * a3 / a0; + b2 = a2 - a1 * a3 / a0; + c0 = b0 - b2 * b2 / b0; + c1 = b1 - b1 * b2 / b0; + d0 = c0 - c1 * c1 / c0; + + return ((a0 > 0.0f) && (b0 > 0.0f) && (c0 > 0.0f) && (d0 > 0.0f)); +} + +/* +//! \brief Determines stability of a ZPK3 representation by checking pole magnitude +//! Located in common/dcl_zpk3.h +extern bool DCL_isStableZpk3(DCL_ZPK3 *q); +*/ + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_STABILITY_H_ diff --git a/source/dcl/common/dcl_zpk3.h b/source/dcl/common/dcl_zpk3.h new file mode 100644 index 0000000..417f0ec --- /dev/null +++ b/source/dcl/common/dcl_zpk3.h @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_ZPK3_H_ +#define _DCL_ZPK3_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * + * @{ + * \file dcl_zpk3.h + * \brief Defines ZPK3 strcture that represents + * a third order transfer function of poles and zeros + */ + +#include + +//--- ZPK3 structure --------------------------------------------------------- + +//! \brief Defines the DCL_ZPK3 controller structure. +//! +//! \details Allows controllers to be defined in terms of complex pole +//! and zero frequencies. The common structure consists of +//! three complex zeros, three complex poles, and a real gain. +//! All frequencies must be specified in radians/sec. <--- TODO: Conflicting units compared with the documentation,rad/s or hz? +//! +typedef struct dcl_zpk3 +{ + float complex z1; //!< Complex zeros 1 + float complex z2; //!< Complex zeros 2 + float complex z3; //!< Complex zeros 3 + float complex p1; //!< Complex poles 1 + float complex p2; //!< Complex poles 2 + float complex p3; //!< Complex poles 3 + float32_t K; //!< Real gain +} DCL_ZPK3; + +//! \brief Defines default values to initialize the DCL_ZPK3 structure +//! +#define ZPK3_DEFAULTS { 0.0f + 0.0f*I, 0.0f + 0.0f*I, 0.0f + 0.0f*I, \ + 0.0f + 0.0f*I, 0.0f + 0.0f*I, 0.0f + 0.0f*I, \ + 1.0f } + +_DCL_CODE_ACCESS +bool DCL_isStableZpk3(DCL_ZPK3 *q) +{ + return((cabsf(q->p1) < 1.0f) && (cabsf(q->p2) < 1.0f) && (cabsf(q->p3) < 1.0f)); +} + +// \brief All ZPK functions exist in its respective controller conversion type +// All the ZPK conversion function prototypes are listed below +/* +//! \brief Loads the DF11 shadow coefficients from a ZPK3 description +//! Note: new settings take effect after DCL_updateDF11() +//! Only real z1 & p1 considered: all other roots ignored +//! Located in df/dcl_df11.h +extern void DCL_loadDF11asZPK(DCL_DF11 *p, DCL_ZPK3 *q); + +//! \brief Loads the DF13 shadow coefficients from a ZPK3 description +//! Note: new settings take effect after DCL_updateDF13() +//! Located in df/dcl_df13.h +extern void DCL_loadDF13asZPK(DCL_DF13 *p, DCL_ZPK3 *q); + +//! \brief Loads the DF22 shadow coefficients from a ZPK3 description +//! Note: new settings take effect after DCL_updateDF22() +//! Only z1, z2, p1 & p2 considered: z3 & p3 ignored +//! Located in df/dcl_df22.h +extern void DCL_loadDF22asZPK(DCL_DF22 *p, DCL_ZPK3 *q); + +//! \brief Loads the DF23 shadow coefficients from a ZPK3 description +//! Note: new settings take effect after DCL_updateDF23() +//! Located in df/dcl_df23.h +extern void DCL_loadDF23asZPK(DCL_DF23 *p, DCL_ZPK3 *q); + +//! \brief Configures a series PI controller in "zero-pole-gain" form +//! Note: new settings take effect after DCL_updatePI() +//! Only z1 considered in DCL_ZPK3, other poles & zeros ignored +//! Zero frequency assumed to be in radians/sec. +//! Located in pi/dcl_pi.h +extern void DCL_loadSeriesPIasZPK(DCL_PI *p, DCL_ZPK3 *q); + +//! \brief Configures a parallel PI controller in "zero-pole-gain" form +//! Note: new settings take effect after DCL_updatePI() +//! Zero frequency assumed to be in radians/sec. +//! Located in pi/dcl_pi.h +extern void DCL_loadParallelPIasZPK(DCL_PI *p, DCL_ZPK3 *q); + +//! \brief Configures a series PID controller in ZPK form +//! Note: parameters take effect after call to DCL_updatePID() +//! Only z1, z2 & p2 considered. p1 = 0 assumed. +//! Located in pid/dcl_pid.h +extern void DCL_loadSeriesPIDasZPK(DCL_PID *p, DCL_ZPK3 *q); + +//! \brief Configures a parallel PID controller in ZPK form +//! Note: parameters take effect after call to DCL_updatePID() +//! Only z1, z2 & p2 considered. p1 = 0 assumed. +//! Located in pid/dcl_pid.h +extern void DCL_loadParallelPIDasZPK(DCL_PID *p, DCL_ZPK3 *q); +*/ + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_ZPK3_H_ diff --git a/source/dcl/dcl.h b/source/dcl/dcl.h new file mode 100644 index 0000000..fc32970 --- /dev/null +++ b/source/dcl/dcl.h @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated 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 EXPgResS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_H_ +#define _DCL_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \defgroup DCL_API_MODULE APIs for Digital Control Library + * \ingroup MOTOR_CONTROL_API + * + * Here is the list of APIs used for Digital Control Library + * @{ + * + * \file dcl.h + * \brief Top level header that contains all Digital Controller Library functions + */ + +//! \brief Library version number formatted for numerical comparison +//! v4.00.00.00 +#define DCL_VERSION 4000000 + +//! \brief Enable voltaile flag for dcl strcutures +//! Only enable the flag if the controller can +//! execute across different cores/threads +//! (update parameter funcs does not count) +//! Disabled by default +//#define DCL_VOLATILE_ENABLED + +//! \brief Build the library with error handling enabled +//! Performs error checks on various update and +//! stability functions +//! Disabled by default +//#define DCL_ERROR_HANDLING_ENABLED + +//! \brief Build the library with test points enabled +//! during arthmetic operations +//! Disabled by default +//#define DCL_TESTPOINTS_ENABLED + +#include "misc/dcl_fdlog.h" +#include "misc/dcl_error.h" + +/* 32bit arthmetic */ +#include "pi/dcl_pi.h" +#include "pi/dcl_pi2.h" +#include "pid/dcl_pid.h" + +#include "df/dcl_df11.h" +#include "df/dcl_df13.h" +#include "df/dcl_df22.h" +#include "df/dcl_df23.h" + +/* 64bit arthmetic */ +#include "pid/dcl_pidf64.h" + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_H_ diff --git a/source/dcl/dcl_common.h b/source/dcl/dcl_common.h new file mode 100644 index 0000000..4ed4f85 --- /dev/null +++ b/source/dcl/dcl_common.h @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated 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 EXPgResS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_COMMON_H_ +#define _DCL_COMMON_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * + * \file dcl_common.h + * \brief Top level header that contains all DCL common strctures and functions + */ + +//! \brief Defines single,double precision data type. +//! Note: Assumes ABI to be __TI_EABI__, +//! does not support legacy __TI_COFF__. +typedef float float32_t; +typedef double float64_t; + +//! \brief Defines the scope of dcl functions (static inline/extern inline/none) +#define _DCL_CODE_ACCESS static inline + +//! \brief Defines dcl function section that users can specify in the linker file(.cmd) +//! and to accelerate performance by mapping to faster memory +//! Note: only DCL_runXXX and DCL_updateXXX/pendingUpdateXXX are included by default +#define _DCL_CODE_SECTION __attribute__((section("dclfuncs"))) + +//! \brief Defines volatile for DCL strctures +//! Flags can be defined in dcl.h or +//! user files before including DCL lib +#ifdef DCL_VOLATILE_ENABLED + #define _DCL_VOLATILE volatile +#else + #define _DCL_VOLATILE +#endif + +//! \brief Set a software breakpoint assembly instruction +//! +#if defined (__TMS320C28XX__) //C28 ISA + #define DCL_setBreakPoint() asm(" ESTOP") +#elif defined (__ARM_ARCH) //ARM ISA + #define DCL_setBreakPoint() __asm(" bkpt #0") +#else + #define DCL_setBreakPoint() + #warning "DCL currently doesn't support break point for this architecture" +#endif + +//! \brief Define enable and disable interrupt operations +//! +#if defined (__TMS320C28XX__) + #define DCL_disableInts() __disable_interrupts() + #define DCL_restoreInts(v) if (0U == (v & 0x1)) __enable_interrupts() + typedef uint16_t dcl_interrupt_t; +#elif defined (SOC_AM64X) || defined (SOC_AM243X) || defined (SOC_AM263X) + #include + #define DCL_disableInts() HwiP_disable() + #define DCL_restoreInts(v) HwiP_restore(v) + typedef uint32_t dcl_interrupt_t; +#else + #define DCL_disableInts() 0 + #define DCL_restoreInts(v) + typedef uint32_t dcl_interrupt_t; + #warning "DCL currently doesn't support interrupt operations for this architecture" +#endif + +#include +#include +#include "common/dcl_aux.h" +#include "common/dcl_css.h" +#include "common/dcl_zpk3.h" +#include "common/dcl_clamp.h" +#include "common/dcl_stability.h" + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_COMMON_H_ diff --git a/source/dcl/df/dcl_df11.h b/source/dcl/df/dcl_df11.h new file mode 100644 index 0000000..9e33335 --- /dev/null +++ b/source/dcl/df/dcl_df11.h @@ -0,0 +1,305 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_DF11_H_ +#define _DCL_DF11_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * + * \file dcl_df11.h + * \brief Contains direct form 1 1st order DF11 compensator + * with its related structures and functions + */ + +#include "../dcl_common.h" + +//--- Direct Form 1 - 1st order ---------------------------------------------- + +//! \brief Defines the DCL_DF11 shadow parameter set +//! used for updating compensator parameter +//! +typedef struct dcl_df11_sps +{ + float32_t b0; //!< pos. coefficient to e(k) + float32_t b1; //!< pos. coefficient to e(k-1) + float32_t a1; //!< neg. coefficient to u(k-1) +} DCL_DF11_SPS; + +#define DF11_SPS_DEFAULTS { 0.5f, 0.5f, 1.0f } + +//! \brief DF11 object for storing df11 specific parameters +//! +typedef _DCL_VOLATILE struct dcl_df11 +{ + /* compensator parameter */ + float32_t b0; //!< pos. coefficient to e(k) + float32_t b1; //!< pos. coefficient to e(k-1) + float32_t a1; //!< neg. coefficient to u(k-1) + + /* internal storage */ + float32_t d1; //!< e(k-1) + float32_t d2; //!< u(k-1) + + /* miscellaneous */ + DCL_DF11_SPS *sps; //!< Pointer to the shadow parameter set + DCL_CSS *css; //!< Pointer to the common support structure +} DCL_DF11, *DF11_Handle; + +//! \brief Defines default values to initialize DCL_DF11 +//! +#define DF11_DEFAULTS { 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, \ + &(DCL_DF11_SPS)DF11_SPS_DEFAULTS, &(DCL_CSS)DCL_CSS_DEFAULTS } + +//! \brief Macro for internal default values to initialize DCL_DF11 +//! Example: DCL_DF11 df11_ctrl = { +//! .b0 = 0.5f, +//! .b1 = 0.5f, +//! .a1 = 1.0f, +//! DF11_INT_DEFAULTS +//! }; +#define DF11_INT_DEFAULTS .d1=0.0f, .d2=0.0f, .sps=&(DCL_DF11_SPS)DF11_SPS_DEFAULTS, .css=&(DCL_CSS)DCL_CSS_DEFAULTS + +//! \brief Initialize DCL_DF11 struct with default parameters +//! Example: DCL_DF11* df11_ctrl = DCL_initDF11(); +//! +//! \return A DCL_DF11* pointer +//! +#define DCL_initDF11() &(DCL_DF11)DF11_DEFAULTS + +//! \brief Initialize DCL_DF11 struct with input compensator parameters +//! Example: DCL_DF11* DF11_ctrl = DCL_initDF11asParam(0.5f,0.5f,1.0f); +//! Note: input parameter needs to be in the same order as listed in DF11_SPS struct +//! +//! \return A DCL_DF11* pointer +//! +#define DCL_initDF11asParam(_b0,_b1,_a1) &(DCL_DF11){ .b0=_b0, .b1=_b1, .a1=_a1, \ + DF11_INT_DEFAULTS } + +//! \brief Initialize DCL_DF11 struct with sps parameters +//! Example: DCL_DF11_SPS df_sps = { .b0 = , .b1 = , ...}; //initial parameter +//! DCL_DF11 df_ctrl; +//! DCL_initDF11asSPS(&df_ctrl,&df_sps); +//! +//! \param[in] df_ptr DCL_DF11* pointer that needs to be initialized +//! \param[in] sps_ptr DCL_DF11_SPS* pointer with assigned parameters +//! \return DCL_DF11* Returns DCL_DF11* with set sps parameters, default parameter will be used +//! if sps_ptr is not specified +//! +#define DCL_initDF11asSPS(df_ptr,sps_ptr) \ +({ \ + DCL_DF11* new_df = (df_ptr) ? df_ptr : DCL_initDF11(); \ + DCL_DF11_SPS* new_sps = (sps_ptr) ? sps_ptr : &(DCL_DF11_SPS)DF11_SPS_DEFAULTS;\ + if(sps_ptr) \ + { \ + *new_df = (DCL_DF11){ (new_sps)->b0, (new_sps)->b1, (new_sps)->a1, \ + 0.0f, 0.0f, (DCL_DF11_SPS*)new_sps, &(DCL_CSS)DCL_CSS_DEFAULTS }; \ + } \ + new_df; \ +}) + +//! \brief Resets DF11 internal storage data with interrupt protection +//! +//! \param[in] df Pointer to the DCL_DF11 structure +//! +_DCL_CODE_ACCESS +void DCL_resetDF11(DCL_DF11 *df) +{ + dcl_interrupt_t ints = DCL_disableInts(); + df->d1 = df->d2 = 0.0f; + DCL_restoreInts(ints); +} + +//! \brief Loads DF11 tuning parameter from its SPS parameter +//! +//! \param[in] df Pointer to the active DCL_DF11 controller structure +//! +_DCL_CODE_ACCESS +void DCL_fupdateDF11(DCL_DF11 *df) +{ + df->b0 = df->sps->b0; + df->b1 = df->sps->b1; + df->a1 = df->sps->a1; +} + +//! \brief Updates DF11 parameter from its SPS parameter with interrupt protection +//! +//! \param[in] df Pointer to the DCL_DF11 controller structure +//! \return 'true' if update is successful, otherwise 'false' +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +bool DCL_updateDF11(DCL_DF11 *df) +{ + if (!DCL_getUpdateStatus(df)) + { + dcl_interrupt_t ints = DCL_disableInts(); + DCL_setUpdateStatus(df); + df->b0 = df->sps->b0; + df->b1 = df->sps->b1; + df->a1 = df->sps->a1; + DCL_clearUpdateStatus(df); + DCL_restoreInts(ints); + return true; + } + return false; +} + +//! \brief A conditional update based on the pending-for-update flag. +//! If the pending status is set, the function will update DF11 +//! parameter from its SPS parameter and clear the status flag on completion. +//! Note: Use DCL_setPendingStatus(df) to set the pending status. +//! +//! \param[in] df Pointer to the DCL_DF11 controller structure +//! \return 'true' if an update is applied, otherwise 'false' +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +bool DCL_pendingUpdateDF11(DCL_DF11 *df) +{ + if (DCL_getPendingStatus(df) && DCL_updateDF11(df)) + { + DCL_clearPendingStatus(df); + return true; + } + return false; +} + +//! \brief Update SPS parameter with active param, userful when needing +//! to update only few active param from SPS and keep rest the same +//! +//! \param[in] df Pointer to the active DCL_DF11 controller structure +//! +_DCL_CODE_ACCESS +void DCL_updateDF11SPS(DCL_DF11 *df) +{ + df->sps->b0 = df->b0; + df->sps->b1 = df->b1; + df->sps->a1 = df->a1; +} + +//! \brief Determines stability of the shadow DF11 compensator +//! +//! \param[in] df Pointer to the DCL_DF11 controller structure +//! \return 'true' if the pole has magnitude less than 1, 'false' otherwise +//! +_DCL_CODE_ACCESS +bool DCL_isStableDF11(DCL_DF11 *df) +{ + return(DCL_isStablePn1(df->sps->a1)); +} + +//! \brief Loads the DF11 shadow coefficients from a ZPK3 description +//! Note: Sampling period df->css->t_sec are used in the calculation. +//! New settings take effect after DCL_updateDF11(). +//! Only real z1 & p1 considered, all other roots ignored. +//! +//! \param[in] df Pointer to the DCL_DF11 controller structure +//! \param[in] zpk Pointer to the ZPK3 structure +//! +_DCL_CODE_ACCESS +void DCL_loadDF11asZPK(DCL_DF11 *df, DCL_ZPK3 *zpk) +{ +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= DCL_isZero(cimagf(zpk->z1)) ? dcl_none : dcl_param_warn_err; + err_code |= DCL_isZero(cimagf(zpk->p1)) ? dcl_none : dcl_param_warn_err; + if (err_code) + { + DCL_setError(df,err_code); + DCL_getErrorInfo(df); + DCL_runErrorHandler(df); + } +#endif + + float32_t t_sec = df->css->t_sec; + float32_t a0p = 2.0f - (float32_t) crealf(zpk->p1) * t_sec; + df->sps->b0 = zpk->K * (2.0f - (float32_t) crealf(zpk->z1) * t_sec) / a0p; + df->sps->b1 = zpk->K * (-2.0f - (float32_t) crealf(zpk->z1) * t_sec) / a0p; + df->sps->a1 = (-2.0f - (float32_t) crealf(zpk->p1) * t_sec) / a0p; +} + +//! \brief Loads compensator coefficients to emulate series form PI +//! Note: Sampling period df->css->t_sec are used in the calculation. +//! New settings take effect after DCL_updateDF11(). +//! +//! \param[in] df Pointer to the DCL_DF11 controller structure +//! \param[in] Kp Proportional gain +//! \param[in] Ki Integral gain +//! +_DCL_CODE_ACCESS +void DCL_loadDF11asPI(DCL_DF11 *df, float32_t Kp, float32_t Ki) +{ +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= (Kp < 0.0f) ? dcl_param_invalid_err : dcl_none; + err_code |= (Ki < 0.0f) ? dcl_param_invalid_err : dcl_none; + if (err_code) + { + DCL_setError(df,err_code); + DCL_getErrorInfo(df); + DCL_runErrorHandler(df); + } +#endif + + float32_t t_sec = df->css->t_sec; + df->sps->b0 = Kp * ((Ki * t_sec) + 2.0f) / 2.0f; + df->sps->b1 = Kp * ((Ki * t_sec) - 2.0f) / 2.0f; + df->sps->a1 = -1.0f; +} + +//! \brief Executes a 1st order Direct Form 1 controller +//! +//! \param[in] df Pointer to the DCL_DF11 controller structure +//! \param[in] ek The servo error +//! \return uk The control effort +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +float32_t DCL_runDF11(DCL_DF11 *df, float32_t ek) +{ + df->d2 = (ek * df->b0) + (df->d1 * df->b1) - (df->d2 * df->a1); + df->d1 = ek; + + return(df->d2); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_DF11_H_ diff --git a/source/dcl/df/dcl_df13.h b/source/dcl/df/dcl_df13.h new file mode 100644 index 0000000..c68e493 --- /dev/null +++ b/source/dcl/df/dcl_df13.h @@ -0,0 +1,372 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_DF13_H_ +#define _DCL_DF13_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * + * \file dcl_df13.h + * \brief Contains direct form 1 3rd order DF13 compensator + * with its related structures and functions + */ + +#include "../dcl_common.h" + +//--- Direct Form 1 - 3rd order ---------------------------------------------- + +//! \brief Defines the DCL_DF13 shadow parameter set +//! used for updating compensator parameter +//! +typedef struct dcl_df13_sps { + float32_t b0; //!< pos. coefficient to e(k) + float32_t b1; //!< pos. coefficient to e(k-1) + float32_t b2; //!< pos. coefficient to e(k-2) + float32_t b3; //!< pos. coefficient to e(k-3) + float32_t a1; //!< neg. coefficient to u(k-1) + float32_t a2; //!< neg. coefficient to u(k-2) + float32_t a3; //!< neg. coefficient to u(k-3) +} DCL_DF13_SPS; + +#define DF13_SPS_DEFAULTS { 0.25f, 0.25f, 0.25f, 0.25f, 0.0f, 0.0f, 0.0f } + +//! \brief DF13 object for storing df13 specific parameters +//! +typedef _DCL_VOLATILE struct dcl_df13 +{ + /* compensator parameter */ + float32_t b0; //!< pos. coefficient to e(k) + float32_t b1; //!< pos. coefficient to e(k-1) + float32_t b2; //!< pos. coefficient to e(k-2) + float32_t b3; //!< pos. coefficient to e(k-3) + float32_t a1; //!< neg. coefficient to u(k-1) + float32_t a2; //!< neg. coefficient to u(k-2) + float32_t a3; //!< neg. coefficient to u(k-3) + + /* internal storage */ + float32_t d1; //!< e(k-1) + float32_t d2; //!< e(k-2) + float32_t d3; //!< e(k-3) + float32_t d4; //!< u(k-1) + float32_t d5; //!< u(k-2) + float32_t d6; //!< u(k-3) + + /* miscellaneous */ + DCL_DF13_SPS *sps; //!< updates compensator parameter + DCL_CSS *css; //!< configuration & debugging +} DCL_DF13, *DF13_Handle; + +//! \brief Defines default values to initialize DCL_DF13 +//! +#define DF13_DEFAULTS { 0.25f, 0.25f, 0.25f, 0.25f, 0.0f, 0.0f, 0.0f, \ + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, \ + &(DCL_DF13_SPS)DF13_SPS_DEFAULTS, &(DCL_CSS)DCL_CSS_DEFAULTS } + +//! \brief Macro for internal default values to initialize DCL_DF13 +//! Example: DCL_DF13 df13_ctrl = { +//! .b0 = 0.25f, +//! .b1 = 0.25f, +//! ... +//! .a3 = 0.0f, +//! DF13_INT_DEFAULTS +//! }; +#define DF13_INT_DEFAULTS .d1=0.0f, .d2=0.0f, .d3=0.0f, .d4=0.0f, .d5=0.0f, \ + .d6=0.0f, .sps=&(DCL_DF13_SPS)DF13_SPS_DEFAULTS, \ + .css=&(DCL_CSS)DCL_CSS_DEFAULTS + +//! \brief Initialize DCL_DF13 struct with default parameters +//! Example: DCL_DF13* df13_ctrl = DCL_initDF13(); +//! +//! \return A DCL_DF13* pointer +//! +#define DCL_initDF13() &(DCL_DF13)DF13_DEFAULTS + +//! \brief Initialize DCL_DF13 struct with input compensator parameters +//! Example: DCL_DF13* DF13_ctrl = DCL_initDF13asParam(0.25f,0.25f,0.25f,0.25f,0.0f,0.0f,0.0f); +//! Note: input parameter needs to be in the same order as listed in DF13_SPS struct +//! +//! \return A DCL_DF13* pointer +//! +#define DCL_initDF13asParam(_b0,_b1,_b2,_b3,_a1,_a2,_a3) &(DCL_DF13){ .b0=_b0, .b1=_b1, \ + .b2=_b2, .b3=_b3, .a1=_a1, .a2=_a2, .a3=_a3, DF13_INT_DEFAULTS } + +//! \brief Initialize DCL_DF13 struct with sps parameters +//! Example: DCL_DF13_SPS df_sps = { .b0 = , .b1 = , ...}; //initial parameter +//! DCL_DF13 df_ctrl; +//! DCL_initDF13asSPS(&df_ctrl,&df_sps); +//! +//! \param[in] df_ptr DCL_DF13* pointer that needs to be initialized +//! \param[in] sps_ptr DCL_DF13_SPS* pointer with assigned parameters +//! \return DCL_DF13* Returns DCL_DF13* with set sps parameters, default parameter will be used +//! if sps_ptr is not specified +//! +#define DCL_initDF13asSPS(df_ptr,sps_ptr) \ +({ \ + DCL_DF13* new_df = (df_ptr) ? df_ptr : DCL_initDF13(); \ + DCL_DF13_SPS* new_sps = (sps_ptr) ? sps_ptr : &(DCL_DF13_SPS)DF13_SPS_DEFAULTS; \ + if(sps_ptr) \ + { \ + *new_df =(DCL_DF13){ (new_sps)->b0, (new_sps)->b1, (new_sps)->b2, (new_sps)->b3, \ + (new_sps)->a1, (new_sps)->a2, (new_sps)->a3, 0.0f, 0.0f, 0.0f, 0.0f, \ + 0.0f, 0.0f, (DCL_DF13_SPS*)new_sps, &(DCL_CSS)DCL_CSS_DEFAULTS }; \ + } \ + new_df; \ +}) + +//! \brief Resets DF13 internal storage data with interrupt protection +//! Implemented as inline C function +//! +//! \param[in] df Pointer to the DCL_DF13 controller structure +//! +_DCL_CODE_ACCESS +void DCL_resetDF13(DCL_DF13 *df) +{ + dcl_interrupt_t ints = DCL_disableInts(); + df->d1 = df->d2 = df->d3 = df->d4 = df->d5 = df->d6 = 0.0f; + DCL_restoreInts(ints); +} + +//! \brief Loads DF13 tuning parameter from its SPS parameter +//! +//! \param[in] df Pointer to the active DCL_DF13 controller structure +//! +_DCL_CODE_ACCESS +void DCL_fupdateDF13(DCL_DF13 *df) +{ + df->b0 = df->sps->b0; + df->b1 = df->sps->b1; + df->b2 = df->sps->b2; + df->b3 = df->sps->b3; + df->a1 = df->sps->a1; + df->a2 = df->sps->a2; + df->a3 = df->sps->a3; +} + +//! \brief Updates DF13 parameter from its SPS parameter with interrupt protection +//! +//! \param[in] df Pointer to the DCL_DF13 controller structure +//! \return 'true' if update is successful, otherwise 'false' +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +bool DCL_updateDF13(DCL_DF13 *df) +{ + if (!DCL_getUpdateStatus(df)) + { + dcl_interrupt_t ints = DCL_disableInts(); + DCL_setUpdateStatus(df); + df->b0 = df->sps->b0; + df->b1 = df->sps->b1; + df->b2 = df->sps->b2; + df->b3 = df->sps->b3; + df->a1 = df->sps->a1; + df->a2 = df->sps->a2; + df->a3 = df->sps->a3; + DCL_clearUpdateStatus(df); + DCL_restoreInts(ints); + return true; + } + return false; +} + +//! \brief A conditional update based on the pending-for-update flag. +//! If the pending status is set, the function will update DF13 +//! parameter from its SPS parameter and clear the status flag on completion.. +//! Note: Use DCL_setPendingStatus(df) to set the pending status. +//! +//! \param[in] df Pointer to the DCL_DF13 controller structure +//! \return 'true' if an update is applied, otherwise 'false' +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +bool DCL_pendingUpdateDF13(DCL_DF13 *df) +{ + if (DCL_getPendingStatus(df) && DCL_updateDF13(df)) + { + DCL_clearPendingStatus(df); + return true; + } + return false; +} + +//! \brief Update SPS parameter with active param, userful when needing +//! to update only few active param from SPS and keep rest the same +//! +//! \param[in] df Pointer to the active DCL_DF13 controller structure +//! +_DCL_CODE_ACCESS +void DCL_updateDF13SPS(DCL_DF13 *df) +{ + df->sps->b0 = df->b0; + df->sps->b1 = df->b1; + df->sps->b2 = df->b2; + df->sps->b3 = df->b3; + df->sps->a1 = df->a1; + df->sps->a2 = df->a2; + df->sps->a3 = df->a3; +} + +//! \brief Determines stability of the shadow compensator +//! +//! \param[in] df Pointer to the DCL_DF13 controller structure +//! \return 'true' if all poles have magnitude less than 1, 'false' otherwise +//! +_DCL_CODE_ACCESS +bool DCL_isStableDF13(DCL_DF13 *df) +{ + return(DCL_isStablePn3(1.0f, df->sps->a1, df->sps->a2, df->sps->a3)); +} + +//! \brief Loads the DF13 shadow coefficients from a ZPK3 description. +//! Note: Sampling period df->css->t_sec are used in the calculation. +//! New settings take effect after DCL_updateDF13(). +//! +//! \param[in] df Pointer to the DCL_DF13 controller structure +//! \param[in] zpk Pointer to the DCL_ZPK3 structure +//! +_DCL_CODE_ACCESS +void DCL_loadDF13asZPK(DCL_DF13 *df, DCL_ZPK3 *zpk) +{ +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= DCL_isZero(cimagf(zpk->z1) + cimagf(zpk->z2) + cimagf(zpk->z3)) ? dcl_none : dcl_param_invalid_err; + err_code |= DCL_isZero(cimagf(zpk->p1) + cimagf(zpk->p2) + cimagf(zpk->p3)) ? dcl_none : dcl_param_invalid_err; + if (err_code) + { + DCL_setError(df,err_code); + DCL_getErrorInfo(df); + DCL_runErrorHandler(df); + } +#endif + + float32_t beta2 = -(float32_t) crealf(zpk->z1 + zpk->z2 + zpk->z3); + float32_t beta1 = (float32_t) crealf((zpk->z1 * zpk->z2) + (zpk->z2 * zpk->z3) + (zpk->z1 * zpk->z3)); + float32_t beta0 = -(float32_t) crealf(zpk->z1 * zpk->z2 * zpk->z3); + + float32_t alpha2 = -(float32_t) crealf(zpk->p1 + zpk->p2 + zpk->p3); + float32_t alpha1 = (float32_t) crealf((zpk->p1 * zpk->p2) + (zpk->p2 * zpk->p3) + (zpk->p1 * zpk->p3)); + float32_t alpha0 = -(float32_t) crealf(zpk->p1 * zpk->p2 * zpk->p3); + + float32_t t_sec = df->css->t_sec; + + float32_t a0p = 8.0f + (alpha2 * 4.0f * t_sec) + (alpha1 * 2.0f * t_sec * t_sec) + (alpha0 * t_sec * t_sec * t_sec); + + df->sps->b0 = zpk->K * (8.0f + (beta2 * 4.0f * t_sec) + (beta1 * 2.0f * t_sec * t_sec) + (beta0 * t_sec * t_sec * t_sec)) / a0p; + df->sps->b1 = zpk->K * (-24.0f - (beta2 * 4.0f * t_sec) + (beta1 * 2.0f * t_sec * t_sec) + (3.0f * beta0 * t_sec * t_sec * t_sec)) / a0p; + df->sps->b2 = zpk->K * (24.0f - (beta2 * 4.0f * t_sec) - (beta1 * 2.0f * t_sec * t_sec) + (3.0f * beta0 * t_sec * t_sec * t_sec)) / a0p; + df->sps->b3 = zpk->K * (-8.0f + (beta2 * 4.0f * t_sec) - (beta1 * 2.0f * t_sec * t_sec) + (beta0 * t_sec * t_sec * t_sec)) / a0p; + + df->sps->a1 = (-24.0f - (alpha2 * 4.0f * t_sec) + (alpha1 * 2.0f * t_sec * t_sec) + (3.0f * alpha0 * t_sec * t_sec * t_sec)) / a0p; + df->sps->a2 = (24.0f - (alpha2 * 4.0f * t_sec) - (alpha1 * 2.0f * t_sec * t_sec) + (3.0f * alpha0 * t_sec * t_sec * t_sec)) / a0p; + df->sps->a3 = (-8.0f + (alpha2 * 4.0f * t_sec) - (alpha1 * 2.0f * t_sec * t_sec) + (alpha0 * t_sec * t_sec * t_sec)) / a0p; +} + +//! \brief Executes a 3rd order Direct Form 1 controller +//! +//! \param[in] df Pointer to the DCL_DF13 controller structure +//! \param[in] ek The servo error +//! \return The control effort +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +float32_t DCL_runDF13(DCL_DF13 *df, float32_t ek) +{ + float32_t v4 = (ek * df->b0) + (df->d1 * df->b1) + (df->d2 * df->b2) + (df->d3 * df->b3) - (df->d4 * df->a1) - (df->d5 * df->a2) - (df->d6 * df->a3); + df->d3 = df->d2; + df->d2 = df->d1; + df->d1 = ek; + df->d6 = df->d5; + df->d5 = df->d4; + df->d4 = v4; + + return(v4); +} + +//! \brief Immediate computation to obtain DF13 servo error +//! without updating the controller +//! +//! \param[in] df Pointer to the DCL_DF13 controller structure +//! \param[in] ek The servo error +//! \return The control effort +//! +_DCL_CODE_ACCESS +float32_t DCL_runDF13PartialCompute(DCL_DF13 *df, float32_t ek) +{ + float32_t v4 = (ek * df->b0) + (df->d1 * df->b1) + (df->d2 * df->b2) + (df->d3 * df->b3) - (df->d4 * df->a1) - (df->d5 * df->a2) - (df->d6 * df->a3); + return(v4); +} + +//! \brief Update DF13 controller based on pre-computed control effort +//! +//! \param[in] df Pointer to the DCL_DF13 controller structure +//! \param[in] ek The servo error +//! \param[in] uk The controller output in the previous sample interval +//! +_DCL_CODE_ACCESS +void DCL_runDF13PartialUpdate(DCL_DF13 *df, float32_t ek, float32_t uk) +{ + df->d3 = df->d2; + df->d2 = df->d1; + df->d1 = ek; + df->d6 = df->d5; + df->d5 = df->d4; + df->d4 = uk; +} + +//! \brief Executes a 3rd order Direct Form 1 controller with clamp +//! +//! \param[in] df Pointer to the DCL_DF13 controller structure +//! \param[in] ek The servo error +//! \param[in] Umax Upper saturation limit +//! \param[in] Umin Lower saturation limit +//! \return uk The control effort +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +float32_t DCL_runDF13Clamp(DCL_DF13 *df, float32_t ek, float32_t Umax, float32_t Umin) +{ + float32_t uk = DCL_runDF13PartialCompute(df, ek); + bool is_clamped = DCL_runClamp(&uk, Umax, Umin); + if(!is_clamped) DCL_runDF13PartialUpdate(df, ek, uk); + return(uk); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_DF13_H_ diff --git a/source/dcl/df/dcl_df22.h b/source/dcl/df/dcl_df22.h new file mode 100644 index 0000000..4ed9626 --- /dev/null +++ b/source/dcl/df/dcl_df22.h @@ -0,0 +1,458 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_DF22_H_ +#define _DCL_DF22_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * + * \file dcl_df22.h + * \brief Contains direct form 2 2nd order DF22 compensator + * with its related structures and functions + */ + +#include "../dcl_common.h" + +//--- Direct Form 2 - 2nd order ---------------------------------------------- + +//! \brief Defines the DCL_DF22 shadow parameter set +//! used for updating compensator parameter +//! +typedef struct dcl_df22_sps +{ + float32_t b0; //!< pos. coefficient to e(k) + float32_t b1; //!< pos. coefficient to e(k-1) + float32_t b2; //!< pos. coefficient to e(k-2) + float32_t a1; //!< neg. coefficient to u(k-1) + float32_t a2; //!< neg. coefficient to u(k-2) +} DCL_DF22_SPS; + +#define DF22_SPS_DEFAULTS { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f } + +//! \brief DF22 object for storing df22 specific parameters +//! +typedef _DCL_VOLATILE struct dcl_df22 +{ + /* compensator parameter */ + float32_t b0; //!< pos. coefficient to e(k) + float32_t b1; //!< pos. coefficient to e(k-1) + float32_t b2; //!< pos. coefficient to e(k-2) + float32_t a1; //!< neg. coefficient to u(k-1) + float32_t a2; //!< neg. coefficient to u(k-2) + + /* internal storage */ + float32_t x1; //!< x1 = b1*e(k-1) - a1*u(k-1) + x2 + float32_t x2; //!< x2 = b2*e(k-2) - a2*u(k-2) + + /* miscellaneous */ + DCL_DF22_SPS *sps; //!< updates compensator parameter + DCL_CSS *css; //!< configuration & debugging +} DCL_DF22, *DF22_Handle; + +//! \brief Defines default values to initialize DCL_DF22 +//! +#define DF22_DEFAULTS { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, \ + &(DCL_DF22_SPS)DF22_SPS_DEFAULTS, &(DCL_CSS)DCL_CSS_DEFAULTS } + +//! \brief Macro for internal default values to initialize DCL_DF22 +//! Example: DCL_DF22 df22_ctrl = { +//! .b0 = 1.00f, +//! .b1 = 0.0f, +//! ... +//! .a2 = 0.0f, +//! DF22_INT_DEFAULTS +//! }; +#define DF22_INT_DEFAULTS .x1=0.0f, .x2=0.0f, .sps=&(DCL_DF22_SPS)DF22_SPS_DEFAULTS, \ + .css=&(DCL_CSS)DCL_CSS_DEFAULTS + +//! \brief Initialize DCL_DF22 struct with default parameters +//! Example: DCL_DF22* df22_ctrl = DCL_initDF22(); +//! +//! \return A DCL_DF22* pointer +//! +#define DCL_initDF22() &(DCL_DF22)DF22_DEFAULTS + +//! \brief Initialize DCL_DF22 struct with input compensator parameters +//! Example: DCL_DF22 DF22_ctrl = DCL_initD22asParam(1.0f,0.0f,0.0f,0.0f,0.0f); +//! Note: input parameter needs to be in the same order as listed in DF22_SPS struct. +//! +//! \return A DCL_DF22* pointer +//! +#define DCL_initDF22asParam(_b0,_b1,_b2,_a1,_a2) &(DCL_DF22){ .b0=_b0, .b1=_b1, \ + .b2=_b2, .a1=_a1, .a2=_a2, .a3=_a3, DF22_INT_DEFAULTS } + +//! \brief Initialize DCL_DF22 struct using sps parameters +//! Example: DCL_DF22_SPS df_sps = { .b0 = , .b1 = , ...}; //initial parameter +//! DCL_DF22 df_ctrl; +//! DCL_initDF22asSPS(&df_ctrl,&df_sps); +//! +//! \param[in] df_ptr DCL_DF22* pointer that needs to be initialized +//! \param[in] sps_ptr DCL_DF22_SPS* pointer with assigned parameters +//! \return Returns DCL_DF22* with set sps parameters, default parameter will be used +//! if sps_ptr is not specified +//! +#define DCL_initDF22asSPS(df_ptr,sps_ptr) \ +({ \ + DCL_DF22* new_df = (df_ptr) ? df_ptr : DCL_initDF22(); \ + DCL_DF22_SPS* new_sps = (sps_ptr) ? sps_ptr : &(DCL_DF22_SPS)DF22_SPS_DEFAULTS; \ + if(sps_ptr) \ + { \ + *new_df = (DCL_DF22){ (new_sps)->b0, (new_sps)->b1, (new_sps)->b2, (new_sps)->a1,\ + (new_sps)->a2, 0.0f, 0.0f, (DCL_DF22_SPS*)new_sps, &(DCL_CSS)DCL_CSS_DEFAULTS }; \ + } \ + new_df; \ +}) + +//! \brief Resets DF22 internal storage data with interrupt protection +//! +//! \param[in] df Pointer to the DCL_DF22 controller structure +//! +_DCL_CODE_ACCESS +void DCL_resetDF22(DCL_DF22 *df) +{ + dcl_interrupt_t ints = DCL_disableInts(); + df->x1 = df->x2 = 0.0f; + DCL_restoreInts(ints); +} + +//! \brief Loads DF22 tuning parameter from its SPS parameter +//! +//! \param[in] df Pointer to the active DCL_DF22 controller structure +//! +_DCL_CODE_ACCESS +void DCL_fupdateDF22(DCL_DF22 *df) +{ + df->b0 = df->sps->b0; + df->b1 = df->sps->b1; + df->b2 = df->sps->b2; + df->a1 = df->sps->a1; + df->a2 = df->sps->a2; +} + +//! \brief Updates DF22 parameter from its SPS parameter with interrupt protection +//! +//! \param[in] df Pointer to the DCL_DF22 controller structure +//! \return 'true' if update is successful, otherwise 'false' +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +bool DCL_updateDF22(DCL_DF22 *df) +{ + if (!DCL_getUpdateStatus(df)) + { + dcl_interrupt_t ints = DCL_disableInts(); + DCL_setUpdateStatus(df); + df->b0 = df->sps->b0; + df->b1 = df->sps->b1; + df->b2 = df->sps->b2; + df->a1 = df->sps->a1; + df->a2 = df->sps->a2; + DCL_clearUpdateStatus(df); + DCL_restoreInts(ints); + return true; + } + return false; +} + +//! \brief A conditional update based on the pending-for-update flag. +//! If the pending status is set, the function will update DF22 +//! parameter from its SPS parameter and clear the status flag on completion. +//! Note: Use DCL_setPendingStatus(df) to set the pending status. +//! +//! \param[in] df Pointer to the DCL_DF22 controller structure +//! \return 'true' if an update is applied, otherwise 'false' +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +bool DCL_pendingUpdateDF22(DCL_DF22 *df) +{ + if (DCL_getPendingStatus(df) && DCL_updateDF22(df)) + { + DCL_clearPendingStatus(df); + return true; + } + return false; +} + +//! \brief Update SPS parameter with active param, userful when needing +//! to update only few active param from SPS and keep rest the same +//! +//! \param[in] df Pointer to the active DCL_DF22 controller structure +//! +_DCL_CODE_ACCESS +void DCL_updateDF22SPS(DCL_DF22 *df) +{ + df->sps->b0 = df->b0; + df->sps->b1 = df->b1; + df->sps->b2 = df->b2; + df->sps->a1 = df->a1; + df->sps->a2 = df->a2; +} + + +//! \brief Determines stability of the shadow compensator +//! +//! \param[in] df Pointer to the DCL_DF22 controller structure +//! \return 'true' if both poles have magnitude less than 1, 'false' otherwise +//! +_DCL_CODE_ACCESS +bool DCL_isStableDF22(DCL_DF22 *df) +{ + return(DCL_isStablePn2(1.0f, df->sps->a1, df->sps->a2)); +} + +//! \brief Loads the DF22 shadow coefficients from a ZPK3 description +//! Note: Sampling period df->css->t_sec are used in the calculation. +//! New settings take effect after DCL_updateDF22(). +//! Only z1, z2, p1 & p2 are considered, z3 & p3 are ignored. +//! +//! \param[in] df Pointer to the DCL_DF22 controller structure +//! \param[in] zpk Pointer to the DCL_ZPK3 structure +//! +_DCL_CODE_ACCESS +void DCL_loadDF22asZPK(DCL_DF22 *df, DCL_ZPK3 *zpk) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= DCL_isZero(cimagf(zpk->z1) + cimagf(zpk->z2)) ? dcl_none : dcl_param_invalid_err; + err_code |= DCL_isZero(cimagf(zpk->p1) + cimagf(zpk->p2)) ? dcl_none : dcl_param_invalid_err; + DCL_setError(df,err_code); + if (err_code) + { + DCL_getErrorInfo(df); + DCL_runErrorHandler(df); + } +#endif + + float32_t beta1 = -(float32_t) crealf(zpk->z1 + zpk->z2); + float32_t beta0 = (float32_t) crealf(zpk->z1 * zpk->z2); + float32_t alpha1 = -(float32_t) crealf(zpk->p1 + zpk->p2); + float32_t alpha0 = (float32_t) crealf(zpk->p1 * zpk->p2); + + float32_t t_sec = df->css->t_sec; + float32_t a0p = 4.0f + (alpha1 * 2.0f * t_sec) + (alpha0 * t_sec * t_sec); + + df->sps->b0 = zpk->K * (4.0f + (beta1 * 2.0f * t_sec) + (beta0 * t_sec * t_sec)) / a0p; + df->sps->b1 = zpk->K * (-8.0f + (2.0f * beta0 * t_sec * t_sec)) / a0p; + df->sps->b2 = zpk->K * (4.0f - (beta1 * 2.0f * t_sec) + (beta0 * t_sec * t_sec)) / a0p; + df->sps->a1 = (-8.0f + (2.0f * alpha0 * t_sec * t_sec)) / a0p; + df->sps->a2 = (4.0f - (alpha1 * 2.0f * t_sec) + (alpha0 * t_sec * t_sec)) / a0p; +} + +//! \brief Loads the DF22 shadow coefficients from damping ratio and un-damped +//! natural frequency using sample rate in CSS. +//! Note: Sampling period df->css->t_sec are used in the calculation. +//! New settings take effect after DCL_updateDF22(). +//! +//! \param[in] df Pointer to the DCL_DF22 controller structure +//! \param[in] z The damping ratio +//! \param[in] wn The un-damped natural frequency in rad/s +//! +_DCL_CODE_ACCESS +void DCL_loadDF22asZwn(DCL_DF22 *df, float32_t z, float32_t wn) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= (z >= 0.0f) ? dcl_none : dcl_param_invalid_err; + err_code |= (wn >= 0.0f) ? dcl_none : dcl_param_invalid_err; + if (err_code) + { + DCL_setError(df,err_code); + DCL_getErrorInfo(df); + DCL_runErrorHandler(df); + } +#endif + + float32_t t_sec = df->css->t_sec; + float32_t v1 = wn * wn * t_sec * t_sec; + float32_t a2p = 1.0f / (4.0f + (4.0f * z * wn * t_sec) + v1); + df->sps->b0 = v1 * a2p; + df->sps->b1 = 2.0f * df->sps->b0; + df->sps->b2 = df->sps->b0; + df->sps->a1 = ((2.0f * v1) - 8.0f) * a2p; + df->sps->a2 = (4.0f - (4.0f * z * wn * t_sec) + v1) * a2p; +} + +//! \brief Loads the shadow DF22 compensator coefficients to emulate a series form PID. +//! Note: Sampling period df->css->t_sec are used in the calculation. +//! New settings take effect after DCL_updateDF22(). +//! +//! \param[in] df Pointer to the DCL_DF22 controller structure +//! \param[in] Kp Proportional gain +//! \param[in] Ki Integral gain +//! \param[in] Kd Derivative gain +//! \param[in] fc Derivative path filter bandwidth in Hz +//! +_DCL_CODE_ACCESS +void DCL_loadDF22asSeriesPID(DCL_DF22 *df, float32_t Kp, float32_t Ki, float32_t Kd, float32_t fc) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= (Kp < 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (Ki < 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (Kd < 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= ((fc < 0.0f) || (fc > (1.0f / (2.0f * df->css->T)))) ? dcl_param_range_err : dcl_none; + if (err_code) + { + DCL_setError(df,err_code); + DCL_getErrorInfo(df); + DCL_runErrorHandler(df); + } +#endif + + float32_t t_sec = df->css->t_sec; + float32_t tau = 1 / (2.0f * CONST_PI * fc); + float32_t c1 = 2.0f / (t_sec + (2.0f * tau)); + float32_t c2 = c1 * (t_sec - (2.0f * tau)) / 2.0f; + float32_t Kdp = Kd * c1; + df->sps->b0 = Kp * (1 + Ki + Kdp); + df->sps->b1 = Kp * (c2 - 1 + Ki*c2 - 2*Kdp); + df->sps->b2 = Kp * (-c2 + Kdp); + df->sps->a1 = c2 - 1; + df->sps->a2 = -c2; +} + +//! \brief Loads the shadow DF22 compensator coefficients to emulate a parallel form PID. +//! Note: Sampling period df->css->t_sec are used in the calculation. +//! New settings take effect after DCL_updateDF22(). +//! +//! \param[in] df Pointer to the DCL_DF22 controller structure +//! \param[in] Kp Proportional gain +//! \param[in] Ki Integral gain +//! \param[in] Kd Derivative gain +//! \param[in] fc Derivative path filter bandwidth in Hz +//! +_DCL_CODE_ACCESS +void DCL_loadDF22asParallelPID(DCL_DF22 *df, float32_t Kp, float32_t Ki, float32_t Kd, float32_t fc) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= (Kp < 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (Ki < 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (Kd < 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (fc < 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (fc > (1.0f / (2.0f * df->css->t_sec))) ? dcl_param_warn_err : dcl_none; + if (err_code) + { + DCL_setError(df,err_code); + DCL_getErrorInfo(df); + DCL_runErrorHandler(df); + } +#endif + + float32_t t_sec = df->css->t_sec; + float32_t tau = 1.0f / (2.0f * CONST_PI * fc); + float32_t c1 = 2.0f / (t_sec + (2.0f * tau)); + float32_t c2 = c1 * (t_sec - (2.0f * tau)) / 2.0f; + float32_t Kdp = Kd * c1; + df->sps->b0 = Kp + Ki + Kdp; + df->sps->b1 = (Kp * (c2 - 1)) + (Ki * c2) - (2.0f * Kdp); + df->sps->b2 = (-c2 * Kp) + Kdp; + df->sps->a1 = c2 - 1; + df->sps->a2 = -c2; +} + +//! \brief Executes a 2nd order Direct Form 2 controller +//! +//! \param[in] df Pointer to the DCL_DF22 controller structure +//! \param[in] ek The servo error +//! \return The control effort +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +float32_t DCL_runDF22(DCL_DF22 *df, float32_t ek) +{ + float32_t v7 = (ek * df->b0) + df->x1; + df->x1 = (ek * df->b1) + df->x2 - (v7 * df->a1); + df->x2 = (ek * df->b2) - (v7 * df->a2); + + return(v7); +} + +//! \brief Immediate computation to obtain DF22 servo error +//! without updating the controller +//! +//! \param[in] df Pointer to the DCL_DF22 controller structure +//! \param[in] ek The servo error +//! \return The control effort +//! +_DCL_CODE_ACCESS +float32_t DCL_runDF22PartialCompute(DCL_DF22 *df, float32_t ek) +{ + return((ek * df->b0) + df->x1); +} + +//! \brief Update DF22 controller based on pre-computed control effort +//! +//! \param[in] df Pointer to the DCL_DF22 controller structure +//! \param[in] ek The servo error +//! \param[in] uk The controller output in the previous sample interval +//! +_DCL_CODE_ACCESS +void DCL_runDF22PartialUpdate(DCL_DF22 *df, float32_t ek, float32_t uk) +{ + df->x1 = (ek * df->b1) + df->x2 - (uk * df->a1); + df->x2 = (ek * df->b2) - (uk * df->a2); +} + +//! \brief Executes a 2nd order Direct Form 2 controller with clamp +//! +//! \param[in] df Pointer to the DCL_DF22 controller structure +//! \param[in] ek The servo error +//! \param[in] Umax Upper saturation limit +//! \param[in] Umin Lower saturation limit +//! \return The control effort +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +float32_t DCL_runDF22Clamp(DCL_DF22 *df, float32_t ek, float32_t Umax, float32_t Umin) +{ + float32_t uk = DCL_runDF22PartialCompute(df, ek); + bool is_clamped = DCL_runClamp(&uk, Umax, Umin); + if(!is_clamped) DCL_runDF22PartialUpdate(df, ek, uk); + return(uk); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_DF22_H_ diff --git a/source/dcl/df/dcl_df23.h b/source/dcl/df/dcl_df23.h new file mode 100644 index 0000000..3a35ad4 --- /dev/null +++ b/source/dcl/df/dcl_df23.h @@ -0,0 +1,359 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * 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 Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_DF23_H_ +#define _DCL_DF23_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * + * \file dcl_df23.h + * \brief Contains direct form 2 3rd order DF23 compensator + * with its related structures and functions + */ + +#include "../dcl_common.h" + +//--- Direct Form 2 - 3rd order ---------------------------------------------- + +//! \brief Defines the DCL_DF23 shadow parameter set +//! used for updating compensator parameter +//! +typedef struct dcl_df23_sps +{ + float32_t b0; //!< pos. coefficient to e(k) + float32_t b1; //!< pos. coefficient to e(k-1) + float32_t b2; //!< pos. coefficient to e(k-2) + float32_t b3; //!< pos. coefficient to e(k-3) + float32_t a1; //!< neg. coefficient to u(k-1) + float32_t a2; //!< neg. coefficient to u(k-2) + float32_t a3; //!< neg. coefficient to u(k-3) +} DCL_DF23_SPS; + +#define DF23_SPS_DEFAULTS { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f } + +//! \brief DF23 object for storing df23 specific parameters +//! +typedef _DCL_VOLATILE struct dcl_df23 +{ + /* compensator parameter */ + float32_t b0; //!< pos. coefficient to e(k) + float32_t b1; //!< pos. coefficient to e(k-1) + float32_t b2; //!< pos. coefficient to e(k-2) + float32_t b3; //!< pos. coefficient to e(k-3) + float32_t a1; //!< neg. coefficient to u(k-1) + float32_t a2; //!< neg. coefficient to u(k-2) + float32_t a3; //!< neg. coefficient to u(k-3) + + /* internal storage */ + float32_t x1; //!< x1 = b1*e(k-1) - a1*u(k-1) + x2 + float32_t x2; //!< x2 = b2*e(k-2) - a2*u(k-2) + x3 + float32_t x3; //!< x3 = b3*e(k-3) - a3*u(k-3) + + /* miscellaneous */ + DCL_DF23_SPS *sps; //!< updates compensator parameter + DCL_CSS *css; //!< configuration & debugging +} DCL_DF23, *DF23_Handle; + +//! \brief Defines default values to initialize DCL_DF23 +//! +#define DF23_DEFAULTS { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, \ + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, \ + &(DCL_DF23_SPS)DF23_SPS_DEFAULTS, &(DCL_CSS)DCL_CSS_DEFAULTS } + +//! \brief Macro for internal default values to initialize DCL_DF23 +//! Example: DCL_DF23 df23_ctrl = { +//! .b0 = 1.0f, +//! .b1 = 0.0f, +//! ... +//! .a3 = 0.0f, +//! DF23_INT_DEFAULTS +//! }; +#define DF23_INT_DEFAULTS .x1=0.0f, .x2=0.0f, .x3=0.0f, \ +.sps=&(DCL_DF23_SPS)DF23_SPS_DEFAULTS, .css=&(DCL_CSS)DCL_CSS_DEFAULTS + +//! \brief Initialize DCL_DF23 struct with default parameters +//! Example: DCL_DF23* df23_ctrl = DCL_initDF23(); +//! +//! \return A DCL_DF23* pointer +//! +#define DCL_initDF23() &(DCL_DF23)DF23_DEFAULTS + +//! \brief Initialize DCL_DF23 struct with input compensator parameters +//! Example: DCL_DF23* DF23_ctrl = DCL_initDF23asParam(1.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f); +//! Note: input parameter needs to be in the same order as listed in DF23_SPS struct. +//! +//! \return A DCL_DF23* pointer +//! +#define DCL_initDF23asParam(_b0,_b1,_b2,_b3,_a1,_a2,_a3) &(DCL_DF23){ .b0=_b0, .b1=_b1, \ + .b2=_b2, .b3=_b3, .a1=_a1, .a2=_a2, .a3=_a3, DF23_INT_DEFAULTS } + +//! \brief Initialize DCL_DF23 struct with sps parameters +//! Example: DCL_DF23_SPS df_sps = { .b0 = , .b1 = , ...}; //initial parameter +//! DCL_DF23 df_ctrl; +//! DCL_initDF23asSPS(&df_ctrl,&df_sps); +//! +//! \param[in] df_ptr DCL_DF23* pointer that needs to be initialized +//! \param[in] sps_ptr DCL_DF23_SPS* pointer with assigned parameters +//! \return Returns DCL_DF23* with set sps parameters, default parameter will be used +//! if sps_ptr is not specified +//! +#define DCL_initDF23asSPS(df_ptr,sps_ptr) \ +({ \ + DCL_DF23* new_df = (df_ptr) ? df_ptr : DCL_initDF23(); \ + DCL_DF23_SPS* new_sps = (sps_ptr) ? sps_ptr : &(DCL_DF23_SPS)DF23_SPS_DEFAULTS;\ + if(sps_ptr) \ + { \ + *new_df = (DCL_DF23){ (new_sps)->b0, (new_sps)->b1, (new_sps)->b2, \ + (new_sps)->b3,(new_sps)->a1, (new_sps)->a2, (new_sps)->a3, 0.0f, \ + 0.0f, 0.0f, (DCL_DF23_SPS*)new_sps, &(DCL_CSS)DCL_CSS_DEFAULTS }; \ + } \ + new_df; \ +}) + +//! \brief Resets DF23 internal storage data with interrupt protection +//! +//! \param[in] df Pointer to the DCL_DF23 controller structure +//! +_DCL_CODE_ACCESS +void DCL_resetDF23(DCL_DF23 *df) +{ + dcl_interrupt_t ints = DCL_disableInts(); + df->x1 = df->x2 = df->x3 = 0.0f; + DCL_restoreInts(ints); +} + +//! \brief Loads DF23 tuning parameter from its SPS parameter +//! +//! \param[in] df Pointer to the active DCL_DF23 controller structure +//! +_DCL_CODE_ACCESS +void DCL_fupdateDF23(DCL_DF23 *df) +{ + df->b0 = df->sps->b0; + df->b1 = df->sps->b1; + df->b2 = df->sps->b2; + df->b3 = df->sps->b3; + df->a1 = df->sps->a1; + df->a2 = df->sps->a2; + df->a3 = df->sps->a3; +} + +//! \brief Updates DF23 parameter from its SPS parameter with interrupt protection +//! +//! \param[in] df Pointer to the DCL_DF23 controller structure +//! \return 'true' if update is successful, otherwise 'false' +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +bool DCL_updateDF23(DCL_DF23 *df) +{ + if (!DCL_getUpdateStatus(df)) + { + dcl_interrupt_t ints = DCL_disableInts(); + DCL_setUpdateStatus(df); + df->b0 = df->sps->b0; + df->b1 = df->sps->b1; + df->b2 = df->sps->b2; + df->b3 = df->sps->b3; + df->a1 = df->sps->a1; + df->a2 = df->sps->a2; + df->a3 = df->sps->a3; + DCL_clearUpdateStatus(df); + DCL_restoreInts(ints); + return true; + } + return false; +} + +//! \brief A conditional update based on the pending-for-update flag. +//! If the pending status is set, the function will update DF23 +//! parameter from its SPS parameter and clear the status flag on completion. +//! Note: Use DCL_setPendingStatus(df) to set the pending status. +//! +//! \param[in] df Pointer to the DCL_DF23 controller structure +//! \return 'true' if an update is applied, otherwise 'false' +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +bool DCL_pendingUpdateDF23(DCL_DF23 *df) +{ + if (DCL_getPendingStatus(df) && DCL_updateDF23(df)) + { + DCL_clearPendingStatus(df); + return true; + } + return false; +} + +//! \brief Update SPS parameter with active param, userful when needing +//! to update only few active param from SPS and keep rest the same +//! +//! \param[in] df Pointer to the active DCL_DF23 controller structure +//! +_DCL_CODE_ACCESS +void DCL_updateDF23SPS(DCL_DF23 *df) +{ + df->sps->b0 = df->b0; + df->sps->b1 = df->b1; + df->sps->b2 = df->b2; + df->sps->b3 = df->b3; + df->sps->a1 = df->a1; + df->sps->a2 = df->a2; + df->sps->a3 = df->a3; +} + +//! \brief Determines stability of the shadow compensator +//! +//! \param[in] df Pointer to the DCL_DF23 controller structure +//! \return 'true' if all poles have magnitude less than 1, 'false' otherwise +//! +_DCL_CODE_ACCESS +bool DCL_isStableDF23(DCL_DF23 *df) +{ + return(DCL_isStablePn3(1.0f, df->sps->a1, df->sps->a2, df->sps->a3)); +} + +//! \brief Loads the DF23 shadow coefficients from a ZPK3 description +//! Note: Sampling period df->css->t_sec are used in the calculation. +//! New settings take effect after DCL_updateDF23(). +//! +//! \param[in] df Pointer to the DCL_DF23 controller structure +//! \param[in] zpk Pointer to the DCL_ZPK3 structure +//! +_DCL_CODE_ACCESS +void DCL_loadDF23asZPK(DCL_DF23 *df, DCL_ZPK3 *zpk) +{ +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= DCL_isZero(cimagf(zpk->z1) + cimagf(zpk->z2) + cimagf(zpk->z3)) ? dcl_none : dcl_param_invalid_err; + err_code |= DCL_isZero(cimagf(zpk->p1) + cimagf(zpk->p2) + cimagf(zpk->p3)) ? dcl_none : dcl_param_invalid_err; + if (err_code) + { + DCL_setError(df,err_code); + DCL_getErrorInfo(df); + DCL_runErrorHandler(df); + } +#endif + + float32_t beta2 = -(float32_t) crealf(zpk->z1 + zpk->z2 + zpk->z3); + float32_t beta1 = (float32_t) crealf((zpk->z1 * zpk->z2) + (zpk->z2 * zpk->z3) + (zpk->z1 * zpk->z3)); + float32_t beta0 = -(float32_t) crealf(zpk->z1 * zpk->z2 * zpk->z3); + + float32_t alpha2 = -(float32_t) crealf(zpk->p1 + zpk->p2 + zpk->p3); + float32_t alpha1 = (float32_t) crealf((zpk->p1 * zpk->p2) + (zpk->p2 * zpk->p3) + (zpk->p1 * zpk->p3)); + float32_t alpha0 = -(float32_t) crealf(zpk->p1 * zpk->p2 * zpk->p3); + + float32_t t_sec = df->css->t_sec; + float32_t a0p = 8.0f + (alpha2 * 4.0f * t_sec) + (alpha1 * 2.0f * t_sec * t_sec) + (alpha0 * t_sec * t_sec * t_sec); + + df->sps->b0 = zpk->K * (8.0f + (beta2 * 4.0f * t_sec) + (beta1 * 2.0f * t_sec * t_sec) + (beta0 * t_sec * t_sec * t_sec)) / a0p; + df->sps->b1 = zpk->K * (-24.0f - (beta2 * 4.0f * t_sec) + (beta1 * 2.0f * t_sec * t_sec) + (3.0f * beta0 * t_sec * t_sec * t_sec)) / a0p; + df->sps->b2 = zpk->K * (24.0f - (beta2 * 4.0f * t_sec) - (beta1 * 2.0f * t_sec * t_sec) + (3.0f * beta0 * t_sec * t_sec * t_sec)) / a0p; + df->sps->b3 = zpk->K * (-8.0f + (beta2 * 4.0f * t_sec) - (beta1 * 2.0f * t_sec * t_sec) + (beta0 * t_sec * t_sec * t_sec)) / a0p; + + df->sps->a1 = (-24.0f - (alpha2 * 4.0f * t_sec) + (alpha1 * 2.0f * t_sec * t_sec) + (3.0f * alpha0 * t_sec * t_sec * t_sec)) / a0p; + df->sps->a2 = (24.0f - (alpha2 * 4.0f * t_sec) - (alpha1 * 2.0f * t_sec * t_sec) + (3.0f * alpha0 * t_sec * t_sec * t_sec)) / a0p; + df->sps->a3 = (-8.0f + (alpha2 * 4.0f * t_sec) - (alpha1 * 2.0f * t_sec * t_sec) + (alpha0 * t_sec * t_sec * t_sec)) / a0p; +} + +//! \brief Executes a 3rd order Direct Form 2 controller +//! +//! \param[in] df Pointer to the DCL_DF23 controller structure +//! \param[in] ek The servo error +//! \return The control effort +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +float32_t DCL_runDF23(DCL_DF23 *df, float32_t ek) +{ + float32_t v7 = (ek * df->b0) + df->x1; + df->x1 = (ek * df->b1) + df->x2 - (v7 * df->a1); + df->x2 = (ek * df->b2) + df->x3 - (v7 * df->a2); + df->x3 = (ek * df->b3) - (v7 * df->a3); + return(v7); +} + +//! \brief Immediate computation to obtain DF23 servo error +//! without updating the controller +//! +//! \param[in] df Pointer to the DCL_DF23 controller structure +//! \param[in] ek The servo error +//! \return The control effort +//! +_DCL_CODE_ACCESS +float32_t DCL_runDF23PartialCompute(DCL_DF23 *df, float32_t ek) +{ + return((ek * df->b0) + df->x1); +} + +//! \brief Update DF22 controller based on pre-computed control effort +//! +//! \param[in] df Pointer to the DCL_DF23 controller structure +//! \param[in] ek The servo error +//! \param[in] uk The controller output in the previous sample interval +//! +_DCL_CODE_ACCESS +void DCL_runDF23PartialUpdate(DCL_DF23 *df, float32_t ek, float32_t uk) +{ + df->x1 = (ek * df->b1) + df->x2 - (uk * df->a1); + df->x2 = (ek * df->b2) + df->x3 - (uk * df->a2); + df->x3 = (ek * df->b3) - (uk * df->a3); +} + +//! \brief Executes a 3rd order Direct Form 2 controller with clamp +//! +//! \param[in] df Pointer to the DCL_DF23 controller structure +//! \param[in] ek The servo error +//! \param[in] Umax Upper saturation limit +//! \param[in] Umin Lower saturation limit +//! \return uk The control effort +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +float32_t DCL_runDF23Clamp(DCL_DF23 *df, float32_t ek, float32_t Umax, float32_t Umin) +{ + float32_t uk = DCL_runDF23PartialCompute(df, ek); + bool is_clamped = DCL_runClamp(&uk, Umax, Umin); + if(!is_clamped) DCL_runDF23PartialUpdate(df, ek, uk); + return(uk); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_DF23_H_ diff --git a/source/dcl/misc/dcl_c28_compatibility.h b/source/dcl/misc/dcl_c28_compatibility.h new file mode 100644 index 0000000..601d6bb --- /dev/null +++ b/source/dcl/misc/dcl_c28_compatibility.h @@ -0,0 +1,222 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated 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 EXPgResS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_C28_COMPATIBILITY_H_ +#define _DCL_C28_COMPATIBILITY_H_ + +//! \file dcl_c28_compatibility.h +//! \brief C28 compatibility macro +//! Contains backward compatbility mapping to C28 DCL's naming scheme +//! +//! Note: +//! CLA functions are not compatible, nonetheless its +//! direct equivalent are listed in comments +//! ASM functions will be alias into inline C code + +#ifdef __cplusplus +extern "C" { +#endif + +//***************************************************************************** +// PI +//***************************************************************************** +#define DCL_runPI_C1 DCL_runPISeries +#define DCL_runPI_C2 DCL_runPISeries +#define DCL_runPI_C3 DCL_runPIParallel +#define DCL_runPI_C4 DCL_runPIParallel +#define DCL_runPI_C5 DCL_runPIParallelEnhanced +#define DCL_runPI_C6 DCL_runPISeriesTustin +#define DCL_runPI_C7 DCL_runPISeriesTustin +/* +// C28 CLA Functions +#define DCL_runPI_L1 DCL_runPISeries +#define DCL_runPI_L2 DCL_runPIParallel +#define DCL_runPI_L3 DCL_runPISeries +#define DCL_runPI_L4 DCL_runPIParallel +#define DCL_runPI_L5 DCL_runPISeriesTustin +*/ + +//***************************************************************************** +// PI2 +//***************************************************************************** +#define DCL_runPI2_C1 DCL_runPI2Series +#define DCL_runPI2_C2 DCL_runPI2Series + +//***************************************************************************** +// PID +//***************************************************************************** +#define DCL_runPID_C1 DCL_runPIDSeries +#define DCL_runPID_C2 DCL_runPIDSeries +#define DCL_runPID_C3 DCL_runPIDParallel +#define DCL_runPID_C4 DCL_runPIDParallel +/* +// C28 CLA Functions +#define DCL_runPID_L1 DCL_runPIDSeries +#define DCL_runPID_L2 DCL_runPIDParallel +#define DCL_runPID_L3 DCL_runPIDSeries +#define DCL_runPID_L4 DCL_runPIDParallel +*/ + +//***************************************************************************** +// DF11 +//***************************************************************************** +#define DCL_runDF11_C1 DCL_runDF11 +#define DCL_runDF11_C2 DCL_runDF11 +/* +// C28 CLA Functions +#define DCL_runDF11_L1 DCL_runDF11 +*/ + +//***************************************************************************** +// DF13 +//***************************************************************************** +#define DCL_runDF13_C1 DCL_runDF13 +#define DCL_runDF13_C2 DCL_runDF13PartialCompute +#define DCL_runDF13_C3 DCL_runDF13PartialUpdate +#define DCL_runDF13_C4 DCL_runDF13 +#define DCL_runDF13_C5 DCL_runDF13PartialCompute +#define DCL_runDF13_C6 DCL_runDF13PartialUpdate +/* +// C28 CLA Functions +#define DCL_runDF13_L1 DCL_runDF13 +#define DCL_runDF13_L2 DCL_runDF13PartialCompute +#define DCL_runDF13_L3 DCL_runDF13PartialUpdate +#define DCL_runDF13_L4 DCL_runDF13 +#define DCL_runDF13_L5 DCL_runDF13PartialCompute +#define DCL_runDF13_L6 DCL_runDF13PartialUpdate +*/ + +//***************************************************************************** +// DF22 +//***************************************************************************** +#define DCL_runDF22_C1 DCL_runDF22 +#define DCL_runDF22_C2 DCL_runDF22PartialCompute +#define DCL_runDF22_C3 DCL_runDF22PartialUpdate +#define DCL_runDF22_C4 DCL_runDF22 +#define DCL_runDF22_C5 DCL_runDF22PartialCompute +#define DCL_runDF22_C6 DCL_runDF22PartialUpdate +/* +// C28 CLA Functions +#define DCL_runDF22_L1 DCL_runDF22 +#define DCL_runDF22_L2 DCL_runDF22PartialCompute +#define DCL_runDF22_L3 DCL_runDF22PartialUpdate +#define DCL_runDF22_L4 DCL_runDF22 +*/ + +//***************************************************************************** +// DF23 +//***************************************************************************** +#define DCL_runDF23_C1 DCL_runDF23 +#define DCL_runDF23_C2 DCL_runDF23PartialCompute +#define DCL_runDF23_C3 DCL_runDF23PartialUpdate +#define DCL_runDF23_C4 DCL_runDF23 +#define DCL_runDF23_C5 DCL_runDF23PartialCompute +#define DCL_runDF23_C6 DCL_runDF23PartialUpdate +/* +// C28 CLA Functions +#define DCL_runDF23_L1 DCL_runDF23 +#define DCL_runDF23_L2 DCL_runDF23PartialCompute +#define DCL_runDF23_L3 DCL_runDF23PartialUpdate +*/ + +//***************************************************************************** +// Clamp +//***************************************************************************** +#define DCL_runClamp_C1 DCL_runClamp +#define DCL_runClamp_C2 DCL_runClamp +#define DCL_runClamp_S1 DCL_runClampF64 +/* +// C28 CLA Functions +#define DCL_runClamp_L1 DCL_runClamp +*/ + +//***************************************************************************** +// Macro Functions +//***************************************************************************** +#define F32_IS_VALUE DCL_isValue +#define F64_IS_VALUE DCL_isValue64 +#define F32_IS_ZERO DCL_isZero +#define F64_IS_ZERO DCL_isZero64 +#define DCL_randf DCL_rand +#define DCL_randf64 DCL_rand64 +#define DCL_C2_LIMIT_32 DCL_c2Limit +#define DCL_C2_LIMIT_64 DCL_c2Limit64 +#define DCL_BREAK_POINT DCL_setBreakPoint +#define DCL_DISABLE_INTS DCL_disableInts +#define DCL_RESTORE_INTS DCL_restoreInts +#define DCL_SET_CONTROLLER_PERIOD DCL_setControllerPeriod +#define DCL_SET_SAMPLE_RATE DCL_setControllerPeriod +#define DCL_REQUEST_UPDATE DCL_setPendingStatus +#define DCL_CLEAR_UPDATE_REQUEST DCL_clearPendingStatus +#define DCL_UPDATE_WAITING DCL_getPendingStatus +#define DCL_CONTROLLER_BEGIN DCL_setControllerStatus +#define DCL_CONTROLLER_END DCL_clearControllerStatus +#define DCL_CONTROLLER_IN_PROGRESS DCL_getControllerStatus +#define DCL_SET_ERROR DCL_setError +#define DCL_CLEAR_ERROR_CODE DCL_clearError +#define DCL_RUN_ERROR_HANDLER DCL_runErrorHandler +#define DCL_GET_ERROR_LOC DCL_getErrorInfo + +//***************************************************************************** +// Macro Constants +//***************************************************************************** +#define CONST_PI_32 CONST_PI +#define CONST_2PI_32 CONST_2PI +#define CONST_PI_64 CONST_PI_F64 +#define CONST_2PI_64 CONST_2PI_F64 +#define DCL_DEFAULT_T_F32 DCL_DEFAULT_PERIOD_S +#define DCL_DEFAULT_T_F64 DCL_DEFAULT_PERIODF64_S +#define DEFAULT_FPU32_TOL DCL_FPU32_TOL +#define DEFAULT_FPU64_TOL DCL_FPU64_TOL +#define NULL_ADDR NULL + +//***************************************************************************** +// FDLOG +//***************************************************************************** +#define FDLOG DCL_FDLOG +#define DCL_createLog DCL_initLog +#define FDLOG_SPACE DCL_getLogRemain +#define FDLOG_SIZE DCL_getLogSize +#define FDLOG_ELEMENT DCL_getLogIndex +#define FDLOG_DEFAULTS {0,0,0} +#define FDLOG_DEFAULT_SIZE 0x0400 + +//***************************************************************************** +// PID64 - 64 bit +//***************************************************************************** +#define DCL_runPIDF64_S1 DCL_runPIDF64Series + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_C28_COMPATIBILITY_H_ diff --git a/source/dcl/misc/dcl_error.h b/source/dcl/misc/dcl_error.h new file mode 100644 index 0000000..fdc9a36 --- /dev/null +++ b/source/dcl/misc/dcl_error.h @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated 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 EXPgResS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_ERROR_H_ +#define _DCL_ERROR_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * + * \file dcl_error.h + * \brief Defines all error handling strctures and macro + */ + +#include "../dcl_common.h" + +//--- Error handling --------------------------------------------------------- + +//! \brief Defines the library enumerated error codes +//! These will be applied as bit masks in the error handler +//! +typedef enum +{ + dcl_none = 0U, //!< No error + dcl_param_range_err = (1U << 0), //!< Parameter range exceeded + dcl_param_invalid_err = (1U << 1), //!< Parameter not valid + dcl_param_warn_err = (1U << 2), //!< Parameter warning + dcl_input_range_err = (1U << 3), //!< Input range exceeded + dcl_overflow_err = (1U << 4), //!< Numerical overflow + dcl_underflow_err = (1U << 5), //!< Numerical underflow + dcl_controller_err = (1U << 6), //!< Controller operation not completed + dcl_timing_err = (1U << 7) //!< Timing error +} dcl_error_codes; + +//! \brief Macro to clear stored error code in CSS +//! +//! \param[in] ptr DCL controller object that contains css +//! +#define DCL_clearError(ptr) ((ptr)->css->err = dcl_none) + +//! \brief Macro to set error code in CSS +//! +//! \param[in] ptr DCL controller object that contains css +//! \param[in] code enum dcl_error_codes +//! +#define DCL_setError(ptr,code) ((ptr)->css->err |= code) + +//! \brief Macro to store line location of error in CSS +//! +//! \param[in] ptr DCL controller object that contains css +//! +#define DCL_getErrorLine(ptr) ((ptr)->css->err_line = ((ptr)->css->err) ? __LINE__ : 0) + +//! \brief Macro to store function location of error in CSS +//! +//! \param[in] ptr DCL controller object that contains css +//! +#define DCL_getErrorFunc(ptr) ((ptr)->css->err_func = ((ptr)->css->err) ? __FUNCTION__ : NULL) + +//! \brief Macro to store error info in CSS +//! +//! \param[in] ptr DCL controller object that contains css +//! +#define DCL_getErrorInfo(ptr) \ +{ \ + DCL_getErrorLine(ptr); \ + DCL_getErrorFunc(ptr); \ +} + +//! \brief Prototype for basic error handler +//! +//! \param[in] ptr DCL controller object that contains css +//! +#define DCL_runErrorHandler(ptr) \ +{ \ + if(dcl_none != ptr->css->err)\ + { \ + DCL_setBreakPoint(); \ + DCL_clearError(ptr); \ + } \ +} + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_ERROR_H_ diff --git a/source/dcl/misc/dcl_fdlog.h b/source/dcl/misc/dcl_fdlog.h new file mode 100644 index 0000000..26fc58b --- /dev/null +++ b/source/dcl/misc/dcl_fdlog.h @@ -0,0 +1,236 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated 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 EXPgResS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_FDLOG_H_ +#define _DCL_FDLOG_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * + * \file dcl_fdlog.h + * \brief Defines a 32-bit floating-point data logger strcture + * and related functions. + * + * \details The FDLOG structure describes a continuous memory block + * which is characterized by its start index pointer, + * current index pointer, and size of the buffer. + * + * Overfilling the data logger would result in a warp-around + * in a similar fashion as circular buffers. + * + * \code An example of initialization and use is shown below: + * + * uint32_t fdlog_size = 400; + * #pragma DATA_SECTION(r_Array, "DataLogSection") //Not unnecessary but helpful for debugging + * float32_t r_Array[fdlog_size]; + * DCL_FDLOG rBuf; + * + * DCL_initLog(&rBuf, r_Array, fdlog_size); + * DCL_clearLog(&rBuf); + * + * DCL_writeFDLOG(&rBuf, some_results); + * output = readFDLOG(&rBuf); + * \endcode + */ + +#include "../dcl_common.h" + +typedef _DCL_VOLATILE struct dcl_fdlog +{ + float32_t *fptr; //!< Pointer to first buffer element + float32_t *dptr; //!< Current data index pointer + uint32_t size; //!< The size of buffer +} DCL_FDLOG; + +/******************** macro definitions ********************/ + +//! \brief Obtain the total size of buffer +//! +//! \param[in] buf Pointer to DCL_FDLOG +//! \return uint32_t size +//! +#define DCL_getLogSize(buf) ((buf)->size) + +//! \brief Index of the current pointer (zero-indexed) +//! +//! \param[in] buf Pointer to DCL_FDLOG +//! \return uint32_t index +//! +#define DCL_getLogIndex(buf) ((uint32_t)((buf)->dptr - (buf)->fptr)) + +//! \brief Remaining space left from indexed pointer to end of buffer +//! +//! \param[in] buf Pointer to DCL_FDLOG +//! \return uint32_t remain +//! +#define DCL_getLogRemain(buf) ((buf)->size - DCL_getLogIndex(buf)) + +//! \brief Sets index of the current pointer (zero-indexed) +//! +//! \param[in] buf Pointer to DCL_FDLOG +//! \param[in] idx Index number +//! +_DCL_CODE_ACCESS +void DCL_setLogIndex(DCL_FDLOG *buf, uint32_t idx) +{ + if(idx < buf->size) + { + buf->dptr = buf->fptr + idx; + } +} + +/******************** inline functions ********************/ + +//! \brief Resets all structure pointers to null value +//! +//! \param[in] buf The DCL_FDLOG structure +//! +_DCL_CODE_ACCESS +void DCL_deleteLog(DCL_FDLOG *buf) { buf->dptr = buf->fptr = NULL; buf->size = 0; } + +//! \brief Resets the data index pointer to start of buffer +//! \param[in] buf The DCL_FDLOG structure +//! +_DCL_CODE_ACCESS +void DCL_resetLog(DCL_FDLOG *buf) { buf->dptr = buf->fptr; } + +//! \brief Fills the buffer with a given data value and resets the +//! data index pointer to the start of the buffer +//! +//! \param[in] buf The DCL_FDLOG structure +//! \param[in] data The fill data value +//! +_DCL_CODE_ACCESS +void DCL_fillLog(DCL_FDLOG *buf, float32_t data) +{ + uint32_t length = DCL_getLogSize(buf); + float32_t* mem = buf->fptr; + DCL_resetLog(buf); + while (length--) *mem++ = data; +} + +//! \brief Clears the buffer contents by writing 0 to all elements and +//! resets the data index pointer to the start of the buffer. +//! +#define DCL_clearLog(buf) DCL_fillLog(buf,0) + +//! \brief Assigns the buffer pointers to a memory block or array and +//! sets the data index pointer to the first address +//! +//! \param[in] buf The DCL_FDLOG structure +//! \param[in] addr The start address of the memory block +//! \param[in] size The length of the memory block in 32-bit words +//! +_DCL_CODE_ACCESS +void DCL_initLog(DCL_FDLOG *buf, float32_t *addr, uint32_t size) +{ + buf->fptr = addr; + buf->size = size; + DCL_resetLog(buf); +} + +//! \brief Writes a data point into the buffer and advances the +//! indexing pointer, wrapping if necessary. +//! Returns the over-written data value for delay line or FIFO +//! implementation. +//! +//! \param[in] buf The DCL_FDLOG structure +//! \param[in] data The input data value +//! \return The over-written data value +//! +_DCL_CODE_ACCESS +float32_t DCL_writeLog(DCL_FDLOG *buf, float32_t data) +{ + // save existing data + float32_t rv = *(buf->dptr); + + // write new data to log + *(buf->dptr++) = data; + + // check for end of buffer & wrap if necessary + if (DCL_getLogIndex(buf) > (buf->size - 1)) DCL_resetLog(buf); + + return(rv); +} + +//! \brief Reads a data point from the buffer and then advances the +//! indexing pointer, wrapping if necessary +//! +//! \param[in] buf The DCL_FDLOG structure +//! \return The indexed data value +//! +_DCL_CODE_ACCESS +float32_t DCL_readLog(DCL_FDLOG *buf) +{ + float32_t rv = *(buf->dptr++); + + // check for end of buffer & wrap if necessary + if (DCL_getLogIndex(buf) > (buf->size - 1)) DCL_resetLog(buf); + + return(rv); +} + +//! \brief Copies the contents of one log (src) into another (dst). +//! Both logs must have the same length. +//! +//! \param[in] src The destination DCL_FDLOG structure +//! \param[in] dst The source DCL_FDLOG structure +//! +_DCL_CODE_ACCESS +void DCL_copyLog(DCL_FDLOG *src, DCL_FDLOG *dst) +{ + uint32_t length = DCL_getLogSize(src); + if (length != DCL_getLogSize(dst)) + { + return; + } + + float32_t* src_ptr = src->fptr; + float32_t* dst_ptr = dst->fptr; + while (length--) *(dst_ptr++) = *(src_ptr++); + DCL_setLogIndex(dst, DCL_getLogIndex(src)); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_FDLOG_H_ + +/* end of file */ diff --git a/source/dcl/pi/dcl_pi.h b/source/dcl/pi/dcl_pi.h new file mode 100644 index 0000000..1f8bd01 --- /dev/null +++ b/source/dcl/pi/dcl_pi.h @@ -0,0 +1,437 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated 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 EXPgResS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_PI_H_ +#define _DCL_PI_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * + * \file dcl_pi.h + * \brief Contains PI controller with its related structures and functions + */ + +#include "../dcl_common.h" + +//--- Linear PI controller --------------------------------------------------- + +//! \brief Defines the DCL_PI shadow parameter set +//! used for updating controller parameter +//! +typedef struct dcl_pi_sps +{ + float32_t Kp; //!< Proportional gain + float32_t Ki; //!< Integral gain + float32_t Umax; //!< Upper saturation limit + float32_t Umin; //!< Lower saturation limit +} DCL_PI_SPS; + +//! \brief Defines default values to initialize DCL_PI_SPS +//! +#define PI_SPS_DEFAULTS { 1.0f, 0.0f, 1.0f, -1.0f } + +//! \brief PI object for storing PI specific parameters +//! +typedef _DCL_VOLATILE struct dcl_pi +{ + /* controller parameter */ + float32_t Kp; //!< Proportional gain + float32_t Ki; //!< Integral gain + float32_t Umax; //!< Upper control saturation limit + float32_t Umin; //!< Lower control saturation limit + + /* internal storage */ + float32_t i6; //!< Saturation storage + float32_t i10; //!< I path feedback value + float32_t i11; //!< Tustin integrator storage + + /* miscellaneous */ + DCL_PI_SPS *sps; //!< updates controller parameter + DCL_CSS *css; //!< configuration & debugging +} DCL_PI, *PI_Handle; + +//! \brief Defines default values to initialize DCL_PI +//! +#define PI_DEFAULTS { 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, \ + &(DCL_PI_SPS)PI_SPS_DEFAULTS, &(DCL_CSS)DCL_CSS_DEFAULTS } + +//! \brief Macro for internal default values to initialize DCL_PI +//! Example: DCL_PI pi_ctrl = { +//! .Kp = 1.0f, +//! .Ki = 0.0f, +//! .Umax = 1.0f, +//! .Umin = -1.0f, +//! PI_INT_DEFAULTS +//! }; +#define PI_INT_DEFAULTS .i6=1.0f, .i10=0.0f, .i11=0.0f, \ +.sps=&(DCL_PI_SPS)PI_SPS_DEFAULTS, .css=&(DCL_CSS)DCL_CSS_DEFAULTS + +//! \brief Initialize DCL_PI struct with default parameters +//! Example: DCL_PI* pi_ctrl = DCL_initPI(); +//! +//! \return A DCL_PI* pointer +//! +#define DCL_initPI() &(DCL_PI)PI_DEFAULTS + +//! \brief Initialize DCL_PI struct with input controller parameters +//! Example: DCL_PI* pi_ctrl = DCL_initPIasParam(1.0f,0.0f,1.0f,-1.0f); +//! Note: input parameter needs to be in the same order as listed in PI_SPS struct +//! +//! \return A DCL_PI* pointer +//! +#define DCL_initPIasParam(kp,ki,umax,umin) &(DCL_PI){ .Kp=kp, .Ki=ki, \ + .Umax=umax, .Umin=umin, PI_INT_DEFAULTS } + +//! \brief Initialize DCL_PI struct with sps parameters +//! Example: DCL_PI_SPS pi_sps = { .Kp = , .Ki = , ...}; +//! DCL_PI pi_ctrl; +//! DCL_initPIasSPS(&pi_ctrl,&pi_sps); +//! +//! \param[in] pi_ptr DCL_PI* pointer that needs to be initialized +//! \param[in] sps_ptr DCL_PI_SPS* pointer with assigned parameters +//! \return Returns DCL_PI* with set sps parameters, default parameter will be used +//! if sps_ptr is not specified +//! +#define DCL_initPIasSPS(pi_ptr,sps_ptr) \ +({ \ + DCL_PI* new_pi = (pi_ptr) ? pi_ptr : DCL_initPI(); \ + DCL_PI_SPS* new_sps = (sps_ptr) ? sps_ptr : &(DCL_PI_SPS)PI_SPS_DEFAULTS; \ + if(sps_ptr) \ + { \ + *new_pi = (DCL_PI){ (new_sps)->Kp, (new_sps)->Ki, (new_sps)->Umax, (new_sps)->Umin,\ + 1.0f, 0.0f, 0.0f, (DCL_PI_SPS*)new_sps, &(DCL_CSS)DCL_CSS_DEFAULTS }; \ + } \ + new_pi; \ +}) + +//! \brief Resets PI internal storage data with interrupt protection +//! +//! \param[in] pi Pointer to the DCL_PI structure +//! +_DCL_CODE_ACCESS +void DCL_resetPI(DCL_PI *pi) +{ + dcl_interrupt_t ints = DCL_disableInts(); + pi->i6 = 1.0f; + pi->i10 = pi->i11 = 0.0f; + DCL_restoreInts(ints); +} + +//! \brief Loads PI tuning parameter from its SPS parameter +//! +//! \param[in] pi Pointer to the DCL_PI controller structure +//! +_DCL_CODE_ACCESS +void DCL_fupdatePI(DCL_PI *pi) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= (pi->sps->Umax <= pi->sps->Umin) ? dcl_param_invalid_err : dcl_none; + err_code |= (pi->css->t_sec <= 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (pi->sps->Kp < 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (pi->sps->Ki < 0.0f) ? dcl_param_range_err : dcl_none; + if (err_code) + { + DCL_setError(pi,err_code); + DCL_getErrorInfo(pi); + DCL_runErrorHandler(pi); + } +#endif + + pi->Kp = pi->sps->Kp; + pi->Ki = pi->sps->Ki; + pi->Umax = pi->sps->Umax; + pi->Umin = pi->sps->Umin; +} + +//! \brief Updates PI parameter from its SPS parameter with interrupt protection +//! +//! \param[in] pi Pointer to the DCL_PI controller structure +//! \return 'true' if update is successful, otherwise 'false' +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +bool DCL_updatePI(DCL_PI *pi) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= (pi->sps->Umax <= pi->sps->Umin) ? dcl_param_invalid_err : dcl_none; + err_code |= (pi->css->t_sec <= 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (pi->sps->Kp < 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (pi->sps->Ki < 0.0f) ? dcl_param_range_err : dcl_none; + if (err_code) + { + DCL_setError(pi,err_code); + DCL_getErrorInfo(pi); + DCL_runErrorHandler(pi); + } +#endif + + if (!DCL_getUpdateStatus(pi)) + { + dcl_interrupt_t ints = DCL_disableInts(); + DCL_setUpdateStatus(pi); + pi->Kp = pi->sps->Kp; + pi->Ki = pi->sps->Ki; + pi->Umax = pi->sps->Umax; + pi->Umin = pi->sps->Umin; + DCL_clearUpdateStatus(pi); + DCL_restoreInts(ints); + return true; + } + return false; +} + +//! \brief A conditional update based on the pending-for-update flag. +//! If the pending status is set, the function will update PI +//! parameter from its SPS parameter and clear the status flag on completion. +//! Note: Use DCL_setPendingStatus(pi) to set the pending status. +//! +//! \param[in] pi Pointer to the DCL_PI controller structure +//! \return 'true' if an update is applied, otherwise 'false' +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +bool DCL_pendingUpdatePI(DCL_PI *pi) +{ + if (DCL_getPendingStatus(pi) && DCL_updatePI(pi)) + { + DCL_clearPendingStatus(pi); + return true; + } + return false; +} + +//! \brief Update SPS parameter with active param, userful when needing +//! to update only few active param from SPS and keep rest the same +//! +//! \param[in] pi Pointer to the active DCL_PI controller structure +//! +_DCL_CODE_ACCESS +void DCL_updatePISPS(DCL_PI *pi) +{ + pi->sps->Kp = pi->Kp; + pi->sps->Ki = pi->Ki; + pi->sps->Umax = pi->Umax; + pi->sps->Umin = pi->Umin; +} + +//! \brief Configures a series PI controller in "zero-pole-gain" form +//! Note: Sampling period pi->css->t_sec are used in the calculation. +//! New settings take effect after DCL_updatePI(). +//! Only z1 considered in DCL_ZPK3, other poles & zeros ignored. +//! Zero frequency assumed to be in radians/sec. +//! +//! \param[in] pi Pointer to the DCL_PI controller structure +//! \param[in] zpk Pointer to the ZPK3 structure +//! +_DCL_CODE_ACCESS +void DCL_loadSeriesPIasZPK(DCL_PI *pi, DCL_ZPK3 *zpk) +{ +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= (zpk->K < 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (crealf(zpk->z1) > (1.0f / (2.0f * pi->css->t_sec))) ? dcl_param_warn_err : dcl_none; + if (err_code) + { + DCL_setError(pi,err_code); + DCL_getErrorInfo(pi); + DCL_runErrorHandler(pi); + } +#endif + + float32_t t_sec = pi->css->t_sec; + float32_t z1 = (float32_t) crealf(zpk->z1); + pi->sps->Kp = zpk->K * (1.0f + (t_sec * z1) / 2.0f); + pi->sps->Ki = (-2.0f * t_sec * z1) / (2.0f + (t_sec * z1)); + +} + +//! \brief Configures a parallel PI controller in "zero-pole-gain" form +//! Note: Sampling period pi->css->t_sec are used in the calculation. +//! New settings take effect after DCL_updatePI(). +//! Zero frequency assumed to be in radians/sec. +//! +//! \param[in] pi Pointer to the active DCL_PI controller structure +//! \param[in] zpk Pointer to the ZPK3 structure +//! +_DCL_CODE_ACCESS +void DCL_loadParallelPIasZPK(DCL_PI *pi, DCL_ZPK3 *zpk) +{ +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= (zpk->K < 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (crealf(zpk->z1) > (1.0f / (2.0f * pi->css->t_sec))) ? dcl_param_warn_err : dcl_none; + if (err_code) + { + DCL_setError(pi,err_code); + DCL_getErrorInfo(pi); + DCL_runErrorHandler(pi); + } +#endif + + float32_t t_sec = pi->css->t_sec; + float32_t z1 = (float32_t) crealf(zpk->z1); + pi->sps->Kp = zpk->K * (1.0f + (t_sec * z1) / 2.0f); + pi->sps->Ki = -zpk->K * t_sec * z1; +} + +//! \brief Executes an inline series form PI controller +//! +//! \param[in] pi Pointer to the DCL_PI structure +//! \param[in] rk The controller set-point reference +//! \param[in] yk The measured feedback value +//! \return The control effort +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +float32_t DCL_runPISeries(DCL_PI *pi, float32_t rk, float32_t yk) +{ + float32_t v2, v4, v5, v9; + + v2 = pi->Kp * (rk - yk); + v4 = pi->i10 + (pi->Ki * pi->i6 * v2); + v5 = v2 + v4; + v9 = DCL_runSat(v5, pi->Umax, pi->Umin); + pi->i6 = (v5 == v9) ? 1.0f : 0.0f; + pi->i10 = v4; + +#ifdef DCL_TESTPOINTS_ENABLED + pi->css->tpt = v5; +#endif + + return(v9); +} + +//! \brief Executes a parallel form PI controller +//! Implemented as inline C function +//! +//! \param[in] pi Pointer to the DCL_PI structure +//! \param[in] rk The controller set-point reference +//! \param[in] yk The measured feedback value +//! \return The control effort +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +float32_t DCL_runPIParallel(DCL_PI *pi, float32_t rk, float32_t yk) +{ + float32_t v1, v2, v4, v5, v9; + + v1 = rk - yk; + v2 = pi->Kp * v1; + v4 = (v1 * pi->Ki * pi->i6) + pi->i10; + pi->i10 = v4; + v5 = v2 + v4; + v9 = DCL_runSat(v5, pi->Umax, pi->Umin); + pi->i6 = (v5 == v9) ? 1.0f : 0.0f; + +#ifdef DCL_TESTPOINTS_ENABLED + pi->css->tpt = v5; +#endif + + return(v9); +} + +//! \brief Executes a parallel form PI controller with +//! enhanced anti-windup logic incorporating an +//! addintional integrator saturation clamp +//! +//! \param[in] pi Pointer to the DCL_PI structure +//! \param[in] rk The controller set-point reference +//! \param[in] yk The measured feedback value +//! \param[in] Imax Upper integrator saturation limit +//! \param[in] Imin Lower integrator saturation limit +//! \return The control effort +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +float32_t DCL_runPIParallelEnhanced(DCL_PI *pi, float32_t rk, float32_t yk, float32_t Imax, float32_t Imin) +{ + float32_t v1, v5, v7, v8; + bool l11, l14, l17, l18, l19; + + v1 = rk - yk; + v5 = (v1 * pi->Ki * pi->i6) + pi->i10; + pi->i10 = v5; + v7 = (v1 * pi->Kp) + v5; + v8 = DCL_runSat(v7, pi->Umax, pi->Umin); + l17 = (v7 == v8) ? true : false; + l11 = (DCL_runSat(v5,Imax,Imin) == v5) ? true : false; + l19 = (v5 > 0) ? true : false; + l14 = (v1 > 0) ? true : false; + l18 = l17 && (!l11 || (l19 ^ l14)); + pi->i6 = (l18) ? 1.0f : 0.0f; + +#ifdef DCL_TESTPOINTS_ENABLED + pi->css->tpt = v7; +#endif + + return(v8); +} + +//! \brief Executes a series form PI controller with Tustin integrator +//! +//! \param[in] pi Pointer to the DCL_PI structure +//! \param[in] rk The controller set-point reference +//! \param[in] yk The measured feedback value +//! \return The control effort +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +float32_t DCL_runPISeriesTustin(DCL_PI *pi, float32_t rk, float32_t yk) +{ + float32_t v2, v4, v5, v8, v9; + + v2 = (rk - yk) * pi->Kp; + v8 = v2 * pi->Ki * pi->i6; + v4 = v8 + pi->i11 + pi->i10; + v5 = v2 + v4; + pi->i10 = v4; + pi->i11 = v8; + v9 = DCL_runSat(v5, pi->Umax, pi->Umin); + pi->i6 = (v5 == v9) ? 1.0f : 0.0f; + +#ifdef DCL_TESTPOINTS_ENABLED + pi->css->tpt = v4; +#endif + + return(v9); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_PI_H_ diff --git a/source/dcl/pi/dcl_pi2.h b/source/dcl/pi/dcl_pi2.h new file mode 100644 index 0000000..9d97c56 --- /dev/null +++ b/source/dcl/pi/dcl_pi2.h @@ -0,0 +1,299 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated 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 EXPgResS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_PI2_H_ +#define _DCL_PI2_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * \file dcl_pi2.h + * \brief Contains PI2 (double integrator) controller + * with its related structures and functions + */ + +#include "../dcl_common.h" + +//--- Linear PI2 controller -------------------------------------------------- + +//! \brief Defines the DCL_PI2 shadow parameter set +//! used for updating controller parameter +//! +typedef struct dcl_pi2_sps +{ + float32_t Kp; //!< Proportional gain + float32_t Ki; //!< Integral gain + float32_t Umax; //!< Upper saturation limit + float32_t Umin; //!< Lower saturation limit +} DCL_PI2_SPS; + +//! \brief Defines default values to initialize DCL_PI2_SPS +//! +#define PI2_SPS_DEFAULTS { 1.0f, 0.0f, 1.0f, -1.0f } + +//! \brief PI2 object for storing PI2 specific parameters +//! PI2 - PI controller with double integrators +//! +typedef _DCL_VOLATILE struct dcl_pi2 +{ + /* controller parameter */ + float32_t Kp; //!< Proportional gain + float32_t Ki; //!< Integral gain + float32_t Umax; //!< Upper saturation limit + float32_t Umin; //!< Lower saturation limit + + /* internal storage */ + float32_t i6; //!< Integrator 1 storage + float32_t i9; //!< Integrator 2 storage + float32_t i12; //!< Saturation 1 storage + float32_t i13; //!< Saturation 2 storage + + /* miscellaneous */ + DCL_PI2_SPS *sps; //!< updates controller parameter + DCL_CSS *css; //!< configuration & debugging +} DCL_PI2, *PI2_Handle; + +//! \brief Defines default values to initialize DCL_PI2 +//! +#define PI2_DEFAULTS { 1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f, \ + &(DCL_PI2_SPS)PI2_SPS_DEFAULTS, &(DCL_CSS)DCL_CSS_DEFAULTS } + +//! \brief Macro for internal default values to initialize DCL_PI2 +//! Example: DCL_PI2 pi2_ctrl = { +//! .Kp = 1.0f, +//! .Ki = 0.0f, +//! .Umax = 1.0f, +//! .Umin = -1.0f, +//! PI2_INT_DEFAULTS +//! }; +#define PI2_INT_DEFAULTS .i6=0.0f, .i9=0.0f, .i12=1.0f, .i13=1.0f, \ +.sps=&(DCL_PI2_SPS)PI2_SPS_DEFAULTS, .css=&(DCL_CSS)DCL_CSS_DEFAULTS + +//! \brief Initialize DCL_PI2 struct with default parameters +//! Example: DCL_PI2 pi2_ctrl = DCL_initPI2(); +//! +//! \return A DCL_PI2* pointer +//! +#define DCL_initPI2() &(DCL_PI2)PI2_DEFAULTS + +//! \brief Initialize DCL_PI2 struct with input controller parameters +//! Example: DCL_PI2* pi2_ctrl = DCL_initPI2asParam(1.0f,0.0f,1.0f,-1.0f); +//! Note: input parameter needs to be in the same order as listed in PI2_SPS struct +//! +//! \return A DCL_PI2* pointer +//! +#define DCL_initPI2asParam(kp,ki,umax,umin) &(DCL_PI2){ .Kp=kp, .Ki=ki, \ + .Umax=umax, .Umin=umin, PI2_INT_DEFAULTS } + +//! \brief Initialize DCL_PI2 struct with sps parameters +//! Example: DCL_PI2_SPS pi2_sps = { .Kp = , .Ki = , ...}; +//! DCL_PI2 pi2_ctrl; +//! DCL_initPI2asSPS(&pi2_ctrl,&pi2_sps); +//! +//! \param[in] pi2_ptr DCL_PI2* pointer that needs to be initialized +//! \param[in] sps_ptr DCL_PI2_SPS* pointer with assigned parameters +//! \return Returns DCL_PI2* with set sps parameters, default parameter will be used +//! if sps_ptr is not specified +//! +#define DCL_initPI2asSPS(pi2_ptr,sps_ptr) \ +({ \ + DCL_PI2* new_pi = (pi2_ptr) ? pi2_ptr : DCL_initPI2(); \ + DCL_PI2_SPS* new_sps = (sps_ptr) ? sps_ptr : &(DCL_PI2_SPS)PI2_SPS_DEFAULTS; \ + if(sps_ptr) \ + { \ + *new_pi = (DCL_PI){ (new_sps)->Kp, (new_sps)->Ki, (new_sps)->Umax, (new_sps)->Umin,\ + 0.0f, 0.0f, 1.0f, 1.0f, (DCL_PI_SPS*)new_sps, &(DCL_CSS)DCL_CSS_DEFAULTS }; \ + } \ + new_pi; \ +}) + +//! \brief Resets PI2 internal storage data with interrupt protection +//! +//! \param[in] pi2 Pointer to the DCL_PI2 structure +//! +_DCL_CODE_ACCESS +void DCL_resetPI2(DCL_PI2 *pi2) +{ + dcl_interrupt_t ints = DCL_disableInts(); + pi2->i6 = pi2->i9 = 0.0f; + pi2->i12 = pi2->i13 = 1.0f; + DCL_restoreInts(ints); +} + +//! \brief Loads PI2 tuning parameter from its SPS parameter +//! +//! \param[in] pi2 Pointer to the DCL_PI2 controller structure +//! +_DCL_CODE_ACCESS +void DCL_fupdatePI2(DCL_PI2 *pi2) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= (pi2->sps->Umax <= pi2->sps->Umin) ? dcl_param_invalid_err : dcl_none; + err_code |= (pi2->css->t_sec <= 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (pi2->sps->Kp < 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (pi2->sps->Ki < 0.0f) ? dcl_param_range_err : dcl_none; + if (err_code) + { + DCL_setError(pi2,err_code); + DCL_getErrorInfo(pi2); + DCL_runErrorHandler(pi2); + } +#endif + + pi2->Ki = pi2->sps->Ki; + pi2->Kp = pi2->sps->Kp; + pi2->Umax = pi2->sps->Umax; + pi2->Umin = pi2->sps->Umin; +} + +//! \brief Updates PI2 parameter from its SPS parameter with interrupt protection +//! +//! \param[in] pi2 Pointer to the DCL_PI2 controller structure +//! \return 'true' if update is successful, otherwise 'false' +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +bool DCL_updatePI2(DCL_PI2 *pi2) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= (pi2->sps->Umax <= pi2->sps->Umin) ? dcl_param_invalid_err : dcl_none; + err_code |= (pi2->css->t_sec <= 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (pi2->sps->Kp < 0.0f) ? dcl_param_range_err : dcl_none; + err_code |= (pi2->sps->Ki < 0.0f) ? dcl_param_range_err : dcl_none; + if (err_code) + { + DCL_setError(pi2,err_code); + DCL_getErrorInfo(pi2); + DCL_runErrorHandler(pi2); + } +#endif + + if (!DCL_getUpdateStatus(pi2)) + { + dcl_interrupt_t ints = DCL_disableInts(); + DCL_setUpdateStatus(pi2); + pi2->Ki = pi2->sps->Ki; + pi2->Kp = pi2->sps->Kp; + pi2->Umax = pi2->sps->Umax; + pi2->Umin = pi2->sps->Umin; + DCL_clearUpdateStatus(pi2); + DCL_restoreInts(ints); + return true; + } + return false; +} + +//! \brief A conditional update based on the pending-for-update flag. +//! If the pending status is set, the function will update PI2 +//! parameter from its SPS parameter and clear the status flag on completion. +//! Note: Use DCL_setPendingStatus(pi2) to set the pending status. +//! +//! \param[in] pi2 Pointer to the DCL_PI2 controller structure +//! \return 'true' if an update is applied, otherwise 'false' +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +bool DCL_pendingUpdatePI2(DCL_PI2 *pi2) +{ + if (DCL_getPendingStatus(pi2) && DCL_updatePI2(pi2)) + { + DCL_clearPendingStatus(pi2); + return true; + } + return false; +} + +//! \brief Update SPS parameter with active param, userful when needing +//! to update only few active param from SPS and keep rest the same +//! +//! \param[in] pi2 Pointer to the active DCL_PI controller structure +//! +_DCL_CODE_ACCESS +void DCL_updatePI2SPS(DCL_PI2 *pi2) +{ + pi2->sps->Kp = pi2->Kp; + pi2->sps->Ki = pi2->Ki; + pi2->sps->Umax = pi2->Umax; + pi2->sps->Umin = pi2->Umin; +} + +//! \brief Executes an inline series form PI2 controller on the FPU32 +//! +//! \param[in] pi2 Pointer to the DCL_PI2 structure +//! \param[in] rk The controller set-point reference +//! \param[in] yk The measured feedback +//! \return The control effort +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +float32_t DCL_runPI2Series(DCL_PI2 *pi2, float32_t rk, float32_t yk) +{ + float32_t v1, v2, v5, v8, v10, v11, v14; + bool l1, l2, l3, l4, l5, l6; + + v1 = rk - yk; + v2 = pi2->Kp * v1; + v5 = (v1 * pi2->Ki * pi2->i12) + pi2->i6; + pi2->i6 = v5; + v8 = (v5 * pi2->i13) + pi2->i9; + pi2->i9 = v8; + v10 = v2 + v8; + v11 = DCL_runSat(v10,pi2->Umax,pi2->Umin); + v14 = v10 - v11; + l1 = (v1 > 0.0f) ? true : false; + l2 = (v14 > 0.0f) ? true : false; + l3 = (v14 == 0.0f) ? true : false; + l4 = (v5 > 0.0f) ? true : false; + l5 = l3 || (l1 ^ l2); + l6 = l3 || (l4 ^ l2); + pi2->i12 = (l5) ? 1.0f : 0.0f; + pi2->i13 = (l6) ? 1.0f : 0.0f; + +#ifdef DCL_TESTPOINTS_ENABLED + pi2->css->tpt = v8; +#endif + + return(v11); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_PI2_H_ diff --git a/source/dcl/pid/dcl_pid.h b/source/dcl/pid/dcl_pid.h new file mode 100644 index 0000000..04ce65c --- /dev/null +++ b/source/dcl/pid/dcl_pid.h @@ -0,0 +1,549 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated 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 EXPgResS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_PID_H_ +#define _DCL_PID_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * + * \file dcl_pid.h + * \brief Contains 32-bit PID controller with its related structures and functions + */ + +#include "../dcl_common.h" + +//--- Linear PID controller -------------------------------------------------- + +//! \brief Defines the DCL_PID shadow parameter set +//! used for updating controller parameter +//! +typedef struct dcl_pid_sps +{ + float32_t Kp; //!< Proportional gain + float32_t Ki; //!< Integral gain + float32_t Kd; //!< Derivative gain + float32_t Kr; //!< Set point weight, default is 1 + float32_t c1; //!< D path filter coefficient 1, default is 1 + float32_t c2; //!< D path filter coefficient 2, default is 0 + float32_t Umax; //!< Upper saturation limit + float32_t Umin; //!< Lower saturation limit +} DCL_PID_SPS; + +//! \brief Defines default values to initialize DCL_PID_SPS +//! +#define PID_SPS_DEFAULTS { 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f } + +//! \brief PID object for storing PID specific parameters +//! +typedef _DCL_VOLATILE struct dcl_pid +{ + /* controller parameter */ + float32_t Kp; //!< Proportional gain + float32_t Ki; //!< Integral gain + float32_t Kd; //!< Derivative gain + float32_t Kr; //!< Set point weight, default is 1 + float32_t c1; //!< D path filter coefficient 1, default is 1 + float32_t c2; //!< D path filter coefficient 2, default is 0 + float32_t Umax; //!< Upper saturation limit + float32_t Umin; //!< Lower saturation limit + + /* internal storage */ + float32_t d2; //!< D path feedback value (Kd * c1) + float32_t d3; //!< D path feedback value (c2) + float32_t i10; //!< I path feedback value + float32_t i14; //!< I path saturation storage + + /* miscellaneous */ + DCL_PID_SPS *sps; //!< updates controller parameter + DCL_CSS *css; //!< configuration & debugging +} DCL_PID, *PID_Handle; + +//! \brief Defines default values to initialize the DCL_PID structure +//! +#define PID_DEFAULTS { 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, \ + 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, \ + &(DCL_PID_SPS)PID_SPS_DEFAULTS, &(DCL_CSS)DCL_CSS_DEFAULTS } + +//! \brief Macro for internal default values to initialize DCL_PID +//! Example: DCL_PID pid_ctrl = { +//! .Kp = 1.0f, +//! .Ki = 0.0f, +//! ... +//! .Umin = -1.0f, +//! PID_INT_DEFAULTS +//! }; +#define PID_INT_DEFAULTS .d2=0.0f, .d3=0.0f, .i10=0.0f, .i14=1.0f, \ + .sps=&(DCL_PID_SPS)PID_SPS_DEFAULTS, .css=&(DCL_CSS)DCL_CSS_DEFAULTS + +//! \brief Initialize DCL_PID struct with default parameters +//! Example: DCL_PID* pid_ctrl = DCL_initPID(); +//! +//! \return A DCL_PID* pointer +//! +#define DCL_initPID() &(DCL_PID)PID_DEFAULTS + +//! \brief Initialize DCL_PID struct with input controller parameters +//! Example: DCL_PID* pid_ctrl = DCL_initPIDasParam(1.0f,0.0f,0.0f,1.0f,1.0f,0.0f,1.0f,-1.0f); +//! Note: input parameter needs to be in the same order as listed in PID_SPS struct +//! +//! \return A DCL_PID* pointer +//! +#define DCL_initPIDasParam(kp,ki,kd,kr,_c1,_c2,umax,umin) &(DCL_PID){ .Kp=kp, .Ki=ki, .Kd=kd, .Kr=kr, \ + .c1=_c1, .c2=_c2, .Umax=umax, .Umin=umin, PID_INT_DEFAULTS } + +//! \brief Initialize DCL_PID struct with SPS parameters +//! Example: DCL_PID_SPS pid_sps = { .Kp = , .Ki = , ...}; //initial parameter +//! DCL_PID pid_ctrl; +//! DCL_initPIasSPS(&pid_ctrl,&pid_sps); +//! Note: The newly declared DCL_PID structure will use the SPS input parameter as its attribute for sps. +//! +//! \param[in] pid_ptr DCL_PID* pointer that needs to be initialized +//! \param[in] sps_ptr DCL_PID_SPS* pointer with assigned parameters +//! \return Returns DCL_PID* with set sps parameters, default parameter will be used +//! if sps_ptr is not specified +//! +#define DCL_initPIDasSPS(pid_ptr,sps_ptr) \ +({ \ + DCL_PID* new_pid = (pid_ptr) ? pid_ptr : DCL_initPID(); \ + DCL_PID_SPS* new_sps = (sps_ptr) ? sps_ptr : &(DCL_PID_SPS)PID_SPS_DEFAULTS; \ + if(sps_ptr) \ + { \ + *new_pid = (DCL_PID){ (new_sps)->Kp, (new_sps)->Ki, (new_sps)->Kd,(new_sps)->Kr,\ + (new_sps)->c1, (new_sps)->c2, (new_sps)->Umax, (new_sps)->Umin, 0.0f, 0.0f, \ + 0.0f, 1.0f, (DCL_PID_SPS*)new_sps, &(DCL_CSS)DCL_CSS_DEFAULTS }; \ + } \ + new_pid; \ +}) + +//! \brief Resets PID internal storage data with interrupt protection +//! +//! \param[in] pid Pointer to the DCL_PID structure +//! +_DCL_CODE_ACCESS +void DCL_resetPID(DCL_PID *pid) +{ + dcl_interrupt_t ints = DCL_disableInts(); + pid->d2 = pid->d3 = pid->i10 = 0.0f; + pid->i14 = 1.0f; + DCL_restoreInts(ints); +} + +//! \brief Loads PID tuning parameter from its SPS parameter +//! +//! \param[in] pid Pointer to the active DCL_PID controller structure +//! +_DCL_CODE_ACCESS +void DCL_fupdatePID(DCL_PID *pid) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + float32_t tau = (2.0f - pid->sps->c1 * pid->css->t_sec) / (2.0f * pid->sps->c1); + float32_t ec2 = pid->sps->c1 * (pid->css->t_sec - 2.0f * tau) / 2.0f; + uint32_t err_code = dcl_none; + err_code |= DCL_isValue(pid->sps->c2, ec2) ? dcl_none : dcl_param_invalid_err; + err_code |= (pid->sps->Umax > pid->sps->Umin) ? dcl_none : dcl_param_invalid_err; + err_code |= (pid->css->t_sec > 0.0f) ? dcl_none : dcl_param_range_err; + err_code |= ((pid->sps->Kp > 0.0f) && (pid->sps->Ki > 0.0f) && (pid->sps->Kd > 0.0f) && (pid->sps->Kr > 0.0f)) ? dcl_none : dcl_param_range_err ; + if (err_code) + { + DCL_setError(pid,err_code); + DCL_getErrorInfo(pid); + DCL_runErrorHandler(pid); + } +#endif + + pid->Kp = pid->sps->Kp; + pid->Ki = pid->sps->Ki; + pid->Kd = pid->sps->Kd; + pid->Kr = pid->sps->Kr; + pid->c1 = pid->sps->c1; + pid->c2 = pid->sps->c2; + pid->Umax = pid->sps->Umax; + pid->Umin = pid->sps->Umin; +} + +//! \brief Updates PID parameter from its SPS parameter with interrupt protection +//! +//! \param[in] pid Pointer to the active DCL_PID controller structure +//! \return 'true' if update is successful, otherwise 'false' +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +bool DCL_updatePID(DCL_PID *pid) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + float32_t tau = (2.0f - pid->sps->c1 * pid->css->t_sec) / (2.0f * pid->sps->c1); + float32_t ec2 = pid->sps->c1 * (pid->css->t_sec - 2.0f * tau) / 2.0f; + uint32_t err_code = dcl_none; + err_code |= DCL_isValue(pid->sps->c2, ec2) ? dcl_none : dcl_param_invalid_err; + err_code |= (pid->sps->Umax > pid->sps->Umin) ? dcl_none : dcl_param_invalid_err; + err_code |= (pid->css->t_sec > 0.0f) ? dcl_none : dcl_param_range_err; + err_code |= ((pid->sps->Kp > 0.0f) && (pid->sps->Ki > 0.0f) && (pid->sps->Kd > 0.0f) && (pid->sps->Kr > 0.0f)) ? dcl_none : dcl_param_range_err ; + if (err_code) + { + DCL_setError(pid,err_code); + DCL_getErrorInfo(pid); + DCL_runErrorHandler(pid); + } +#endif + + if (!DCL_getUpdateStatus(pid)) + { + dcl_interrupt_t ints = DCL_disableInts(); + DCL_setUpdateStatus(pid); + pid->Kp = pid->sps->Kp; + pid->Ki = pid->sps->Ki; + pid->Kd = pid->sps->Kd; + pid->Kr = pid->sps->Kr; + pid->c1 = pid->sps->c1; + pid->c2 = pid->sps->c2; + pid->Umax = pid->sps->Umax; + pid->Umin = pid->sps->Umin; + DCL_clearUpdateStatus(pid); + DCL_restoreInts(ints); + return true; + } + return false; +} + +//! \brief A conditional update based on the pending-for-update flag. +//! If the pending status is set, the function will update PID +//! parameter from its SPS parameter and clear the status flag on completion. +//! Note: Use DCL_setPendingStatus(pid) to set the pending status. +//! +//! \param[in] pid Pointer to the DCL_PID controller structure +//! \return 'true' if an update is applied, otherwise 'false' +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +bool DCL_pendingUpdatePID(DCL_PID *pid) +{ + if (DCL_getPendingStatus(pid) && DCL_updatePID(pid)) + { + DCL_clearPendingStatus(pid); + return true; + } + return false; +} + +//! \brief Update SPS parameter with active param, userful when needing +//! to update only few active param from SPS and keep rest the same +//! +//! \param[in] pid Pointer to the active DCL_PID controller structure +//! +_DCL_CODE_ACCESS +void DCL_updatePIDSPS(DCL_PID *pid) +{ + pid->sps->Kp = pid->Kp; + pid->sps->Ki = pid->Ki; + pid->sps->Kd = pid->Kd; + pid->sps->Kr = pid->Kr; + pid->sps->c1 = pid->c1; + pid->sps->c2 = pid->c2; + pid->sps->Umax = pid->Umax; + pid->sps->Umin = pid->Umin; +} + +//! \brief Loads the derivative path filter shadow coefficients. +//! Note: Sampling period pid->css->t_sec are used in the calculation. +//! New coefficients take effect when DCL_updatePID() is called. +//! +//! \param[in] pid Pointer to the DCL_PID structure +//! \param[in] fc The desired filter bandwidth in Hz +//! +_DCL_CODE_ACCESS +void DCL_setPIDfilterBW(DCL_PID *pid, float32_t fc) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= ((fc >= 1.0f / (2.0f * pid->css->t_sec)) || (fc <= 0.0f)) ? dcl_param_range_err : dcl_none; + if (err_code) + { + DCL_setError(pid,err_code); + DCL_getErrorInfo(pid); + DCL_runErrorHandler(pid); + } +#endif + + float32_t t_sec = pid->css->t_sec; + float32_t tau = 1.0f / (2.0f * CONST_PI * fc); + pid->sps->c1 = 2.0f / (t_sec + (2.0f * tau)); + pid->sps->c2 = (t_sec - (2.0f * tau)) / (t_sec + (2.0f * tau)); +} + +//! \brief Loads the PID derivative path filter active coefficients +//! Note: Sampling period pid->css->t_sec are used in the calculation. +//! New coefficients take effect immediately. SPS & CSS contents are unaffected. +//! +//! \param[in] pid Pointer to the DCL_PID structure +//! \param[in] fc The desired filter bandwidth in Hz +//! \param[in] t_sec The controller update rate in seconds +//! +_DCL_CODE_ACCESS +void DCL_setActivePIDfilterBW(DCL_PID *pid, float32_t fc, float32_t t_sec) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= ((fc >= 1.0f / (2.0f * t_sec)) || (fc <= 0.0f)) ? dcl_param_range_err : dcl_none; + if (err_code) + { + DCL_setError(pid,err_code); + DCL_getErrorInfo(pid); + DCL_runErrorHandler(pid); + } +#endif + + float32_t tau = 1.0f / (2.0f * CONST_PI * fc); + pid->c1 = 2.0f / (t_sec + (2.0f * tau)); + pid->c2 = (t_sec - (2.0f * tau)) / (t_sec + (2.0f * tau)); +} + +//! \brief Calculates the active derivative path filter bandwidth in Hz. +//! Note: Sampling period pid->css->t_sec are used in the calculation. +//! \param[in] pid Pointer to the DCL_PID structure +//! \return The filter bandwidth in Hz +//! +_DCL_CODE_ACCESS +float32_t DCL_getPIDfilterBW(DCL_PID *pid) +{ + float32_t tau = ((2.0f - pid->c1 * pid->css->t_sec) / (2.0f * pid->c1)); + return(1.0f / (2.0f * CONST_PI * tau)); +} + +//! \brief Configures a series PID controller parameter in ZPK form. +//! Note: Sampling period pid->css->t_sec are used in the calculation. +//! Parameters take effect after call to DCL_updatePID(). +//! Only z1, z2 & p2 considered, p1 = 0 assumed. +//! +//! \param[in] pid Pointer to the active DCL_PID controller structure +//! \param[in] zpk Pointer to the DCL_ZPK3 structure +//! +_DCL_CODE_ACCESS +void DCL_loadSeriesPIDasZPK(DCL_PID *pid, DCL_ZPK3 *zpk) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= DCL_isZero(cimagf(zpk->z1) + cimagf(zpk->z2)) ? dcl_none : dcl_param_invalid_err; + err_code |= DCL_isZero(cimagf(zpk->p2)) ? dcl_none : dcl_param_invalid_err; + err_code |= (crealf(zpk->p2) <= DCL_c2Limit) ? dcl_none :dcl_param_invalid_err; + err_code |= (zpk->K >= 0.0f) ? dcl_none : dcl_param_range_err; + if (err_code) + { + DCL_setError(pid,err_code); + DCL_getErrorInfo(pid); + DCL_runErrorHandler(pid); + } +#endif + + float32_t beta1 = -(float32_t) crealf(zpk->z1 + zpk->z2); + float32_t beta0 = (float32_t) crealf(zpk->z1 * zpk->z2); + float32_t alpha1 = -(float32_t) crealf(zpk->p1 + zpk->p2); + float32_t alpha0 = (float32_t) crealf(zpk->p1 * zpk->p2); + float32_t t_sec = pid->css->t_sec; + float32_t a0p = 4.0f + (alpha1 * 2.0f * t_sec) + (alpha0 * t_sec * t_sec); + float32_t b0 = zpk->K * (4.0f + (beta1 * 2.0f * t_sec) + (beta0 * t_sec *t_sec)) / a0p; + float32_t b1 = zpk->K * (-8.0f + (2.0f * beta0 * t_sec * t_sec)) / a0p; + float32_t b2 = zpk->K * (4.0f - (beta1 * 2.0f * t_sec) + (beta0 * t_sec * t_sec)) / a0p; + float32_t a2 = (4.0f - (alpha1 * 2.0f * t_sec) + (alpha0 * t_sec * t_sec)) / a0p; + float32_t c2 = -a2; + float32_t tau = (t_sec / 2.0f) * (1.0f - c2) / (1.0f + c2); + pid->sps->c1 = 2.0f / (t_sec + 2.0f * tau); + pid->sps->c2 = c2; + float32_t det = (c2 + 1.0f); + det *= det; + +#ifdef DCL_ERROR_HANDLING_ENABLED + err_code = dcl_none; + err_code |= (DCL_isZero(det)) ? dcl_param_invalid_err : dcl_none; + if (err_code) + { + DCL_setError(pid,err_code); + DCL_getErrorInfo(pid); + DCL_runErrorHandler(pid); + } +#endif + + float32_t k1 = ((c2 * b0) - b1 - ((2.0f + c2) * b2)) / det; + float32_t k2 = (c2 + 1.0f) * (b0 + b1 + b2) / det; + float32_t k3 = ((c2 * c2 * b0) - (c2 * b1) + b2) / det; + pid->sps->Kp = k1; + pid->sps->Ki = k2 / k1; + pid->sps->Kd = k3 / (k1 * pid->sps->c1); + +#ifdef DCL_TESTPOINTS_ENABLED + pid->css->tpt = det; +#endif + +} + +//! \brief Configures a parallel PID controller in ZPK form. +//! Note: Sampling period pid->css->t_sec are used in the calculation. +//! Parameters take effect after call to DCL_updatePID(). +//! Only z1, z2 & p2 considered, p1 = 0 assumed. +//! +//! \param[in] pid Pointer to the active DCL_PID controller structure +//! \param[in] zpk Pointer to the DCL_ZPK3 structure +//! +_DCL_CODE_ACCESS +void DCL_loadParallelPIDasZPK(DCL_PID *pid, DCL_ZPK3 *zpk) +{ +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code = dcl_none; + err_code |= DCL_isZero(cimagf(zpk->z1) + cimagf(zpk->z2)) ? dcl_none : dcl_param_invalid_err; + err_code |= DCL_isZero(cimagf(zpk->p2)) ? dcl_none : dcl_param_invalid_err; + err_code |= (crealf(zpk->p2) <= DCL_c2Limit) ? dcl_none : dcl_param_invalid_err; + err_code |= (zpk->K >= 0.0f) ? dcl_none : dcl_param_range_err; + if (err_code) + { + DCL_setError(pid,err_code); + DCL_getErrorInfo(pid); + DCL_runErrorHandler(pid); + } +#endif + + float32_t beta1 = -(float32_t) crealf(zpk->z1 + zpk->z2); + float32_t beta0 = (float32_t) crealf(zpk->z1 * zpk->z2); + float32_t alpha1 = -(float32_t) crealf(zpk->p1 + zpk->p2); + float32_t alpha0 = (float32_t) crealf(zpk->p1 * zpk->p2); + float32_t t_sec = pid->css->t_sec; + float32_t a0p = 4.0f + (alpha1 * 2.0f * t_sec) + (alpha0 * t_sec * t_sec); + float32_t b0 = zpk->K * (4.0f + (beta1 * 2.0f * t_sec) + (beta0 * t_sec * t_sec)) / a0p; + float32_t b1 = zpk->K * (-8.0f + (2.0f * beta0 * t_sec * t_sec)) / a0p; + float32_t b2 = zpk->K * (4.0f - (beta1 * 2.0f * t_sec) + (beta0 * t_sec * t_sec)) / a0p; + float32_t a2 = (4.0f - (alpha1 * 2.0f * t_sec) + (alpha0 * t_sec * t_sec)) / a0p; + float32_t c2 = -a2; + float32_t tau = (t_sec / 2.0f) * (1.0f - c2) / (1.0f + c2); + pid->sps->c1 = 2.0f / (t_sec + 2.0f * tau); + pid->sps->c2 = c2; + float32_t det = (c2 + 1.0f); + det *= det; + +#ifdef DCL_ERROR_HANDLING_ENABLED + err_code = (DCL_isZero(det)) ? dcl_param_invalid_err : dcl_none; + if (err_code) + { + DCL_setError(pid,err_code); + DCL_getErrorInfo(pid); + DCL_runErrorHandler(pid); + } +#endif + + pid->sps->Kp = ((c2 * b0) - b1 - ((2.0f + c2) * b2)) / det; + pid->sps->Ki = (c2 + 1.0f) * (b0 + b1 + b2) / det; + pid->sps->Kd = ((c2 * c2 * b0) - (c2 * b1) + b2) / (det * pid->sps->c1); + +#ifdef DCL_TESTPOINTS_ENABLED + pid->css->tpt = det; +#endif + +} + +//! \brief Executes an ideal form PID controller +//! +//! \param[in] pid Pointer to the DCL_PID structure +//! \param[in] rk The controller set-point reference +//! \param[in] yk The measured feedback value +//! \param[in] lk External output clamp flag +//! \return The control effort +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +float32_t DCL_runPIDSeries(DCL_PID *pid, float32_t rk, float32_t yk, float32_t lk) +{ + float32_t v1, v4, v5, v8, v9, v10, v12; + + v5 = (pid->Kr * rk) - yk; + v8 = ((rk - yk) * pid->Ki * pid->Kp * pid->i14) + pid->i10; + pid->i10 = v8; + v1 = yk * pid->Kd * pid->c1; + v4 = v1 - pid->d2 - pid->d3; + pid->d2 = v1; + pid->d3 = v4 * pid->c2; + v9 = ((v5 - v4) * pid->Kp) + v8; + v10 = DCL_runSat(v9, pid->Umax, pid->Umin); + v12 = (v10 == v9) ? 1.0f : 0.0f; + pid->i14 = v12 * lk; + +#ifdef DCL_TESTPOINTS_ENABLED + pid->css->tpt = v4; +#endif + + return(v10); +} + +//! \brief Executes a parallel form PID controller +//! +//! \param[in] pid Pointer to the DCL_PID structure +//! \param[in] rk The controller set-point reference +//! \param[in] yk The measured feedback value +//! \param[in] lk External output clamp flag +//! \return The control effort +//! +_DCL_CODE_ACCESS _DCL_CODE_SECTION +float32_t DCL_runPIDParallel(DCL_PID *pid, float32_t rk, float32_t yk, float32_t lk) +{ + float32_t v1, v4, v5, v6, v8, v9, v10, v12; + + v5 = rk - yk; + v6 = v5 * pid->Kp; + v8 = v5 * pid->Ki * pid->i14 + pid->i10; + pid->i10 = v8; + v1 = v5 * pid->Kd * pid->c1; + v4 = v1 - pid->d2 - pid->d3; + pid->d2 = v1; + pid->d3 = v4 * pid->c2; + v9 = v6 + v8 + v4; + v10 = DCL_runSat(v9, pid->Umax, pid->Umin); + v12 = (v10 == v9) ? 1.0f : 0.0f; + pid->i14 = v12 * lk; + +#ifdef DCL_TESTPOINTS_ENABLED + pid->css->tpt = v8; +#endif + + return(v10); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_PID_H_ diff --git a/source/dcl/pid/dcl_pidf64.h b/source/dcl/pid/dcl_pidf64.h new file mode 100644 index 0000000..e96d0cc --- /dev/null +++ b/source/dcl/pid/dcl_pidf64.h @@ -0,0 +1,420 @@ +/* + * Copyright (C) 2023 Texas Instruments Incorporated + * + * 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 Texas Instruments Incorporated 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 EXPgResS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DCL_PID64_H_ +#define _DCL_PID64_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup DCL_API_MODULE APIs for Digital Control Library + * @{ + * + * \file dcl_pidf64.h + * \brief Contains 64-bit PID controller with its related structures and functions + */ + +#include "../dcl_common.h" + +//--- Linear PID 64bit controller -------------------------------------------------- + +//! \brief Defines the shadow PID64 controller structure +//! used for updating controller parameter +//! +typedef struct dcl_pid64_sps { + float64_t Kp; //!< Proportional gain + float64_t Ki; //!< Integral gain + float64_t Kd; //!< Derivative gain + float64_t Kr; //!< Set point weight, default is 1 + float64_t c1; //!< D-term filter coefficient 1, default is 1 + float64_t c2; //!< D-term filter coefficient 2, default is 0 + float64_t Umax; //!< Upper saturation limit + float64_t Umin; //!< Lower saturation limit +} DCL_PIDF64_SPS; + +//! \brief Defines default values to initialize the DCL_PIDF64 shadow structure +//! +#define PIDF64_SPS_DEFAULTS { 1.0L, 0.0L, 0.0L, 1.0L, 1.0L, 0.0L, 1.0L, -1.0L } + +//! \brief PID 64bit object for storing PID specific 64bit parameters +//! +typedef _DCL_VOLATILE struct dcl_pidf64 { + /* controller parameter */ + float64_t Kp; //!< Proportional gain + float64_t Ki; //!< Integral gain + float64_t Kd; //!< Derivative gain + float64_t Kr; //!< Set point weight, default is 1 + float64_t c1; //!< D-term filter coefficient 1, default is 1 + float64_t c2; //!< D-term filter coefficient 2, default is 0 + float64_t Umax; //!< Upper saturation limit + float64_t Umin; //!< Lower saturation limit + + /* internal storage */ + float64_t d2; //!< D path feedback value (Kd * c1) + float64_t d3; //!< D path feedback value (c2) + float64_t i10; //!< I path feedback value + float64_t i14; //!< I path saturation storage + + /* miscellaneous */ + DCL_PIDF64_SPS *sps; //!< updates controller parameter + DCL_CSSF64 *css; //!< configuration & debugging +} DCL_PIDF64, *PIDF64_Handle; + +//! \brief Defines default values to initialize the DCL_PID64 active structure +//! +#define PIDF64_DEFAULTS { 1.0L, 0.0L, 0.0L, 1.0L, 1.0L, 0.0L, \ + 1.0L, -1.0L, 0.0L, 0.0L, 0.0L, 1.0L, \ +&(DCL_PIDF64_SPS)PIDF64_SPS_DEFAULTS, &(DCL_CSSF64)DCL_CSSF64_DEFAULTS } + +//! \brief Macro for internal default values to initialize DCL_PIDF64 +//! Example: DCL_PIDF64 pid_ctrl = { +//! .Kp = 1.0L, +//! .Ki = 0.0L, +//! ... +//! .Umin = -1.0L, +//! PIDF64_INT_DEFAULTS +//! }; +#define PIDF64_INT_DEFAULTS .d2=0.0L, .d3=0.0L, .i10=0.0L, .i14=1.0L, \ + .sps=&(DCL_PIDF64_SPS)PI_SPS_DEFAULTS, .css=&(DCL_CSSF64)DCL_CSS_DEFAULTS + +//! \brief Initialize DCL_PIDF64 struct with default parameters +//! Example: DCL_PIDF64* pid_ctrl = DCL_initPID(); +//! +//! \return A DCL_PIDF64* pointer +//! +#define DCL_initPIDF64() &(DCL_PIDF64)PIDF64_DEFAULTS + +//! \brief Initialize DCL_PIDF64 struct with input controller parameters +//! Example: DCL_PIDF64* pid_ctrl = DCL_initPIDF64asParam(1.0L,0.0L,0.0L,1.0L,1.0L,0.0L,1.0L,-1.0L); +//! Note: input parameter needs to be in the same order as listed in PIDF64_SPS struct +//! +//! \return A DCL_PID* pointer +//! +#define DCL_initPIDF64asParam(kp,ki,kd,kr,_c1,_c2,umax,umin) &(DCL_PIDF64){ .Kp=kp, .Ki=ki, .Kd=kd, .Kr=kr, \ + .c1=_c1, .c2=_c2, .Umax=umax, .Umin=umin, PIDF64_INT_DEFAULTS } + +//! \brief Initialize DCL_PIDF64 struct with sps parameters +//! Example: DCL_PIDF64_SPS pid_sps = { .Kp = , .Ki = , ...}; //initial parameter +//! DCL_PIDF64 pid_ctrl; +//! DCL_initPIasSPS(&pid_ctrl,&pid_sps); +//! +//! \param[in] pid_ptr DCL_PIDF64* pointer that needs to be initialized +//! \param[in] sps_ptr DCL_PIDF64_SPS* pointer with assigned parameters +//! \return Returns DCL_PID* with set sps parameters, default parameter will be used +//! if sps_ptr is not specified +//! +#define DCL_initPIDF64asSPS(pid_ptr,sps_ptr) \ +({ \ + DCL_PIDF64* new_pid = (pid_ptr) ? pid_ptr : DCL_initPID(); \ + DCL_PIDF64_SPS* new_sps = (sps_ptr) ? sps_ptr : &(DCL_PIDF64_SPS)PID_SPS_DEFAULTS; \ + if(sps_ptr) \ + { \ + *new_pi = (DCL_PID){ (new_sps)->Kp, (new_sps)->Ki, (new_sps)->Kd,(new_sps)->Kr,\ + (new_sps)->c1, (new_sps)->c2, (new_sps)->Umax, (new_sps)->Umin, 0.0L, 0.0L, \ + 0.0L, 1.0L,(DCL_PIDF64_SPS*)new_sps, &(DCL_CSS)DCL_CSS_DEFAULTS }; \ + } \ + new_pid; \ +}) + +//! \brief Resets PID64 internal storage data with interrupt protection +//! +//! \param[in] pid Pointer to the DCL_PID64 structure +//! +_DCL_CODE_ACCESS +void DCL_resetPIDF64(DCL_PIDF64 *pid) +{ + dcl_interrupt_t ints = DCL_disableInts(); + pid->d2 = pid->d3 = pid->i10 = 0.0L; + pid->i14 = 1.0L; + DCL_restoreInts(ints); +} + +//! \brief Loads PIDF64 tuning parameter from its SPS parameter +//! +//! \param[in] pid Pointer to the active DCL_PID64 controller structure +//! +_DCL_CODE_ACCESS +void DCL_fupdatePIDF64(DCL_PIDF64 *pid) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + float64_t tau = (2.0L - pid->sps->c1 * p->css->t_sec) / (2.0L * pid->sps->c1); + float64_t ec2 = pid->sps->c1 * (pid->css->t_sec - 2.0L * tau) / 2.0L; + uint32_t err_code = dcl_none; + err_code |= DCL_isValue(pid->sps->c2, ec2) ? dcl_none : dcl_param_invalid_err; + err_code |= (pid->sps->Umax > pid->sps->Umin) ? dcl_none : dcl_param_invalid_err; + err_code |= (pid->css->t_sec > 0.0L) ? dcl_none : dcl_param_range_err; + err_code |= ((pid->sps->Kp > 0.0L) && (pid->sps->Ki > 0.0L) && (pid->sps->Kd > 0.0L) && (pid->sps->Kr > 0.0L)) ? dcl_none : dcl_param_range_err ; + if (err_code) + { + DCL_setError(pid,err_code); + DCL_getErrorInfo(pid); + DCL_runErrorHandler(pid); + } +#endif + + pid->Kp = pid->sps->Kp; + pid->Ki = pid->sps->Ki; + pid->Kd = pid->sps->Kd; + pid->Kr = pid->sps->Kr; + pid->c1 = pid->sps->c1; + pid->c2 = pid->sps->c2; + pid->Umax = pid->sps->Umax; + pid->Umin = pid->sps->Umin; +} + + +//! \brief Updates PID parameter from its SPS parameter with interrupt protection +//! +//! \param[in] pid Pointer to the DCL_PID64 controller structure +//! \return 'true' if update is successful, otherwise 'false' +//! +_DCL_CODE_ACCESS +bool DCL_updatePIDF64(DCL_PIDF64 *pid) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + float64_t tau = (2.0L - pid->sps->c1 * pid->css->t_sec) / (2.0L * pid->sps->c1); + float64_t ec2 = pid->sps->c1 * (pid->css->t_sec - 2.0L * tau) / 2.0L; + uint32_t err_code = dcl_none; + err_code |= DCL_isValue(pid->sps->c2, ec2) ? dcl_none : dcl_param_invalid_err; + err_code |= (pid->sps->Umax > pid->sps->Umin) ? dcl_none : dcl_param_invalid_err; + err_code |= (pid->css->t_sec > 0.0L) ? dcl_none : dcl_param_range_err; + err_code |= ((pid->sps->Kp > 0.0L) && (pid->sps->Ki > 0.0L) && (pid->sps->Kd > 0.0L) && (pid->sps->Kr > 0.0L)) ? dcl_none : dcl_param_range_err ; + if (err_code) + { + DCL_setError(pid,err_code); + DCL_getErrorInfo(pid); + DCL_runErrorHandler(pid); + } +#endif + + if (!DCL_getUpdateStatus(pid)) + { + dcl_interrupt_t ints = DCL_disableInts(); + DCL_setUpdateStatus(pid); + pid->Kp = pid->sps->Kp; + pid->Ki = pid->sps->Ki; + pid->Kd = pid->sps->Kd; + pid->Kr = pid->sps->Kr; + pid->c1 = pid->sps->c1; + pid->c2 = pid->sps->c2; + pid->Umax = pid->sps->Umax; + pid->Umin = pid->sps->Umin; + DCL_clearUpdateStatus(pid); + DCL_restoreInts(ints); + return true; + } + return false; +} + +//! \brief A conditional update based on the pending-for-update flag. +//! If the pending status is set, the function will update PIDF64 +//! parameter from its SPS parameter and clear the status flag on completion. +//! Note: Use DCL_setPendingStatus(pid) to set the pending status. +//! +//! \param[in] pid Pointer to the DCL_PIDF64 controller structure +//! \return 'true' if an update is applied, otherwise 'false' +//! +_DCL_CODE_ACCESS +bool DCL_pendingUpdatePIDF64(DCL_PIDF64 *pid) +{ + if (DCL_getPendingStatus(pid) && DCL_updatePIDF64(pid)) + { + DCL_clearPendingStatus(pid); + return true; + } + return false; +} + +//! \brief Update SPS parameter with active param, userful when needing +//! to update only few active param from SPS and keep rest the same +//! +//! \param[in] pid Pointer to the active DCL_PIDF64 controller structure +//! +_DCL_CODE_ACCESS +void DCL_updatePIDF64SPS(DCL_PIDF64 *pid) +{ + pid->sps->Kp = pid->Kp; + pid->sps->Ki = pid->Ki; + pid->sps->Kd = pid->Kd; + pid->sps->Kr = pid->Kr; + pid->sps->c1 = pid->c1; + pid->sps->c2 = pid->c2; + pid->sps->Umax = pid->Umax; + pid->sps->Umin = pid->Umin; +} + +//! \brief Loads the derivative path filter shadow coefficients +//! Note: Sampling period pid->css->t_sec are used in the calculation +//! Note: new coefficients take effect when DCL_updatePID64() is called +//! +//! \param[in] pid Pointer to the DCL_PID64 structure +//! \param[in] fc The desired filter bandwidth in Hz +//! +_DCL_CODE_ACCESS +void DCL_setPIDF64filterBW(DCL_PIDF64 *pid, float64_t fc) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code; + err_code = ((fc >= 1.0L / (2.0L * pid->css->t_sec)) || (fc <= 0.0L)) ? dcl_param_range_err : dcl_none; + if (err_code) + { + DCL_setError(pid,err_code); + DCL_getErrorInfo(pid); + DCL_runErrorHandler(pid); + } +#endif + + float64_t t_sec = pid->css->t_sec; + float64_t tau = 1.0L / (2.0L * CONST_PI_F64 * fc); + pid->sps->c1 = 2.0L / (t_sec + (2.0L * tau)); + pid->sps->c2 = (t_sec - (2.0L * tau)) / (t_sec + (2.0L * tau)); +} + +//! \brief Loads the PID64 derivative path filter active coefficients +//! Note: Sampling period pid->css->t_sec are used in the calculation +//! Note: new coefficients take effect immediately. SPS & +//! CSS contents are unaffected. +//! +//! \param[in] pid Pointer to the DCL_PID64 structure +//! \param[in] fc The desired filter bandwidth in Hz +//! \param[in] t_sec The controller update rate in seconds +//! +_DCL_CODE_ACCESS +void DCL_setActivePIDF64filterBW(DCL_PIDF64 *pid, float64_t fc, float64_t t_sec) +{ + +#ifdef DCL_ERROR_HANDLING_ENABLED + uint32_t err_code; + err_code = ((fc >= 1.0L / (2.0L * t_sec)) || (fc <= 0.0L)) ? dcl_param_range_err : dcl_none; + if (err_code) + { + DCL_setError(pid,err_code); + DCL_getErrorInfo(pid); + DCL_runErrorHandler(pid); + } +#endif + + float64_t tau = 1.0L / (2.0L * CONST_PI_F64 * fc); + pid->c1 = 2.0L / (t_sec + (2.0L * tau)); + pid->c2 = (t_sec - (2.0L * tau)) / (t_sec + (2.0L * tau)); +} + +//! \brief Returns the active derivative path filter bandwidth in Hz +//! Note: Sampling period pid->css->t_sec are used in the calculation +//! +//! \param[in] pid Pointer to the DCL_PID64 structure +//! \return The filter bandwidth in Hz +//! +_DCL_CODE_ACCESS +float64_t DCL_getPIDF64filterBW(DCL_PIDF64 *pid) +{ + float64_t tau = ((2.0L - pid->c1 * pid->css->t_sec) / (2.0L * pid->c1)); + return(1.0L / (2.0L * CONST_PI_F64 * tau)); +} + +//! \brief Executes an ideal form PID64 controller +//! +//! \param[in] pid Pointer to the DCL_PID64 structure +//! \param[in] rk The controller set-point reference +//! \param[in] yk The measured feedback value +//! \param[in] lk External output clamp flag +//! \return The control effort +//! +_DCL_CODE_ACCESS +float64_t DCL_runPIDF64Series(DCL_PIDF64 *pid, float64_t rk, float64_t yk, float64_t lk) +{ + float64_t v1, v4, v5, v8, v9, v10, v12; + + v5 = (pid->Kr * rk) - yk; + v8 = ((rk - yk) * pid->Ki * pid->Kp * pid->i14) + pid->i10; + pid->i10 = v8; + v1 = yk * pid->Kd * pid->c1; + v4 = v1 - pid->d2 - pid->d3; + pid->d2 = v1; + pid->d3 = v4 * pid->c2; + v9 = ((v5 - v4) * pid->Kp) + v8; + v10 = DCL_runSat(v9, pid->Umax, pid->Umin); + v12 = (v10 == v9) ? 1.0 : 0.0; + pid->i14 = v12 * lk; + +#ifdef DCL_TESTPOINTS_ENABLED + pid->css->tpt = v5; +#endif + + return(v10); +} + +//! \brief Executes an parallel form PID64 controller +//! +//! \param[in] pid Pointer to the DCL_PID64 structure +//! \param[in] rk The controller set-point reference +//! \param[in] yk The measured feedback value +//! \param[in] lk External output clamp flag +//! \return The control effort +//! +_DCL_CODE_ACCESS +float64_t DCL_runPIDF64Parallel(DCL_PIDF64 *pid, float64_t rk, float64_t yk, float64_t lk) +{ + float64_t v1, v4, v5, v6, v8, v9, v10, v12; + + v5 = rk - yk; + v6 = v5 * pid->Kp; + v8 = v5 * pid->Ki * pid->i14 + pid->i10; + pid->i10 = v8; + v1 = v5 * pid->Kd * pid->c1; + v4 = v1 - pid->d2 - pid->d3; + pid->d2 = v1; + pid->d3 = v4 * pid->c2; + v9 = v6 + v8 + v4; + v10 = DCL_runSat(v9, pid->Umax, pid->Umin); + v12 = (v10 == v9) ? 1.0f : 0.0f; + pid->i14 = v12 * lk; + +#ifdef DCL_TESTPOINTS_ENABLED + pid->css->tpt = v8; +#endif + + return(v10); +} + +/** @} */ + +#ifdef __cplusplus +} +#endif // extern "C" + +#endif // _DCL_PIDF64_H_