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_runPISeries |
+ 49.15 |
+
+
+ | DCL_runPIParallel |
+ 50.00 |
+
+
+ | DCL_runPISeriesTustin |
+ 56.35 |
+
+
+ | DCL_runPIParallelEnhanced |
+ 62.57 |
+
+| PI2 Controller |
+
+ | DCL_runPI2Series |
+ 74.00 |
+
+| PID Controller |
+
+ | DCL_runPIDSeries |
+ 64.68 |
+
+
+ | DCL_runPIDParallel |
+ 64.84 |
+
+| DF11 Controller |
+
+ | DCL_runDF11 |
+ 24.00 |
+
+| DF13 Controller |
+
+ | DCL_runDF13 |
+ 43.00 |
+
+
+ | DCL_runDF13Clamp |
+ 53.00 |
+
+| DF22 Controller |
+
+ | DCL_runDF22 |
+ 27.00 |
+
+
+ | DCL_runDF22Clamp |
+ 41.00 |
+
+| DF23 Controller |
+
+ | DCL_runDF23 |
+ 29.00 |
+
+
+ | DCL_runDF23Clamp |
+ 45.00 |
+
+| PID 64bit Controller |
+
+ | DCL_runPIDF64Series |
+ 185.14 |
+
+
+ | DCL_runPIDF64Parallel |
+ 173.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.c |
+ Main function for DF22 testing |
+
+
+ | df22_test.h |
+ Contains 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.c |
+ Main function for PI testing |
+
+
+ | pi_test.h |
+ Contains 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_