From 8f4cf99ba311201e2826bc7dbcae70df4ee9be40 Mon Sep 17 00:00:00 2001 From: Christopher Seidl Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 01/22] Update ARM.CMSIS.pdsc Fixes requested in https://github.com/ARM-software/CMSIS_6/issues/208 --- ARM.CMSIS.pdsc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ARM.CMSIS.pdsc b/ARM.CMSIS.pdsc index e2709983c..43ec6a65f 100644 --- a/ARM.CMSIS.pdsc +++ b/ARM.CMSIS.pdsc @@ -431,14 +431,14 @@ RTOS Kernel system tick timer interface - + CMSIS-RTOS API for Cortex-M, SC000, and SC300 - + From abe392ae9e41ea1bd4ea42de530dfd665f93bd1e Mon Sep 17 00:00:00 2001 From: Reinhard Keil Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 02/22] fixed typo (#212) --- CMSIS/Documentation/Overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMSIS/Documentation/Overview.md b/CMSIS/Documentation/Overview.md index ebd12797b..6602727a7 100644 --- a/CMSIS/Documentation/Overview.md +++ b/CMSIS/Documentation/Overview.md @@ -8,7 +8,7 @@ The **CMSIS** (Common Microcontroller Software Interface Standard) is a set of A ## CMSIS v6 Introduction Webinar -Watch the [introduction webinar](https://on-demand.arm.com/flow/arm/devhub/sessionCatalog/page/pubSessCatalog/session/1705915235972001vEdN) to learn about CMSIS v6 amd how to use it. +Watch the [introduction webinar](https://on-demand.arm.com/flow/arm/devhub/sessionCatalog/page/pubSessCatalog/session/1705915235972001vEdN) to learn about CMSIS v6 and how to use it. [![CMSIS v6 Introduction Webinar](./images/cmsis6introwebinar.png)](https://on-demand.arm.com/flow/arm/devhub/sessionCatalog/page/pubSessCatalog/session/1705915235972001vEdN) From 4258b01bd33276ab5060bab4b5fd1bf806139ce6 Mon Sep 17 00:00:00 2001 From: Jonatan Antoni Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 03/22] Fix workflows: Pin to Ubuntu 22.04 --- .github/workflows/core.yml | 2 +- .github/workflows/corevalidation.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index 457c07976..507d2a443 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -16,7 +16,7 @@ concurrency: jobs: lit: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 env: ARM_UBL_ACTIVATION_CODE: ${{ secrets.ARM_UBL_ACTIVATION_CODE }} diff --git a/.github/workflows/corevalidation.yml b/.github/workflows/corevalidation.yml index 4a8d309e0..f90627a97 100644 --- a/.github/workflows/corevalidation.yml +++ b/.github/workflows/corevalidation.yml @@ -23,7 +23,7 @@ jobs: matrix: compiler: [AC6, GCC, Clang] - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 env: ARM_UBL_ACTIVATION_CODE: ${{ secrets.ARM_UBL_ACTIVATION_CODE }} From 3aea10e58e409a892fab93728427dd604a1035b0 Mon Sep 17 00:00:00 2001 From: blckmn Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 04/22] Update armv8m_mpu.h - adding void Removes error: error: old-style function definition [-Werror=old-style-definition] --- CMSIS/Core/Include/m-profile/armv8m_mpu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMSIS/Core/Include/m-profile/armv8m_mpu.h b/CMSIS/Core/Include/m-profile/armv8m_mpu.h index d743af12c..2b4707854 100644 --- a/CMSIS/Core/Include/m-profile/armv8m_mpu.h +++ b/CMSIS/Core/Include/m-profile/armv8m_mpu.h @@ -188,7 +188,7 @@ typedef struct { \brief Read MPU Type Register \return Number of MPU regions */ -__STATIC_INLINE uint32_t ARM_MPU_TYPE() +__STATIC_INLINE uint32_t ARM_MPU_TYPE(void) { return ((MPU->TYPE) >> 8); } From d8d5e4dfc45549026f98e3fbb2a940cfc82e2e3b Mon Sep 17 00:00:00 2001 From: Jonatan Antoni Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 05/22] Guard include of RTE_Components.h with presence of _RTE_ Fixes ARM-software/CMSIS_6#205 --- CMSIS/Core/Source/irq_ctrl_gic.c | 5 +++++ CMSIS/RTOS2/Source/os_systick.c | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/CMSIS/Core/Source/irq_ctrl_gic.c b/CMSIS/Core/Source/irq_ctrl_gic.c index fa7765fe8..e6f1eb701 100644 --- a/CMSIS/Core/Source/irq_ctrl_gic.c +++ b/CMSIS/Core/Source/irq_ctrl_gic.c @@ -24,7 +24,12 @@ #include +#if defined(_RTE_) #include "RTE_Components.h" +#elif !defined(CMSIS_device_header) +#error "CMSIS_device_header must be defined to point to CMSIS device header" +#endif + #include CMSIS_device_header #include "irq_ctrl.h" diff --git a/CMSIS/RTOS2/Source/os_systick.c b/CMSIS/RTOS2/Source/os_systick.c index fe564f8e2..6435e8ee0 100644 --- a/CMSIS/RTOS2/Source/os_systick.c +++ b/CMSIS/RTOS2/Source/os_systick.c @@ -25,7 +25,13 @@ #include "os_tick.h" //lint -emacro((923,9078),SCB,SysTick) "cast from unsigned long to pointer" + +#if defined(_RTE_) #include "RTE_Components.h" +#elif !defined(CMSIS_device_header) +#error "CMSIS_device_header must be defined to point to CMSIS device header" +#endif + #include CMSIS_device_header #ifdef SysTick From a27a9816121693de60e88cc4bf1b46d99580f86e Mon Sep 17 00:00:00 2001 From: Jonatan Antoni Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 06/22] Enable CoreValidation on CM52 with LLVM/Clang 19 --- CMSIS/Core/Test/README.md | 19 +++--- CMSIS/Core/Test/lit.cfg.py | 64 +++++++++---------- CMSIS/Core/Test/src/ror.c | 4 +- CMSIS/Core/Test/vcpkg-configuration.json | 19 +++--- .../Layer/Target/CA5/Target.clayer.yml | 2 +- .../Layer/Target/CA7/Target.clayer.yml | 2 +- .../Layer/Target/CA9/Target.clayer.yml | 2 +- .../Layer/Target/CM7/model_config.txt | 2 - .../Layer/Target/CM85/model_config.txt | 3 +- .../Layer/Target/CM85NS/model_config.txt | 3 +- .../Layer/Target/CM85S/model_config.txt | 3 +- .../{ => Bootloader}/Bootloader.cproject.yml | 14 ++-- .../Project/Validation.csolution.yml | 6 +- .../{ => Validation}/Validation.cproject.yml | 56 ++++++++-------- CMSIS/CoreValidation/Project/build.py | 7 +- .../Project/vcpkg-configuration.json | 29 ++++----- 16 files changed, 114 insertions(+), 121 deletions(-) rename CMSIS/CoreValidation/Project/{ => Bootloader}/Bootloader.cproject.yml (50%) rename CMSIS/CoreValidation/Project/{ => Validation}/Validation.cproject.yml (56%) diff --git a/CMSIS/Core/Test/README.md b/CMSIS/Core/Test/README.md index bebf6f4da..2eb3fc515 100644 --- a/CMSIS/Core/Test/README.md +++ b/CMSIS/Core/Test/README.md @@ -71,19 +71,16 @@ Currently, the following build configurations are provided: ## Prerequisites -The following tools are required to build and run the CoreValidation tests: - -- [CMSIS-Toolbox 2.1.0](https://artifacts.keil.arm.com/cmsis-toolbox/2.1.0/)* -- [CMake 3.25.2](https://cmake.org/download/)* -- [Ninja 1.10.2](https://github.com/ninja-build/ninja/releases)* -- [Arm Compiler 6.22](https://artifacts.tools.arm.com/arm-compiler/6.22/45/)* -- [GCC Compiler 13.2.1](https://artifacts.keil.arm.com/arm-none-eabi-gcc/13.2.1/)* -- [Clang Compiler 18.1.3](https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases/tag/release-18.1.3)* -- [Arm Virtual Hardware for Cortex-M based on FastModels 11.22.39](https://artifacts.keil.arm.com/avh/11.22.39/)* +The following tools are required to build and run the Core tests: + +- [Arm Compiler 6.23](https://artifacts.tools.arm.com/arm-compiler/6.23/32/)* +- [GCC Compiler 14.2.1](https://artifacts.keil.arm.com/arm-none-eabi-gcc/14.2.1/)* +- [Clang Compiler 19.1.5](https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases/tag/release-19.1.5)* - [Python 3.9](https://www.python.org/downloads/) - [LLVM FileCheck](https://github.com/llvm/llvm-project/releases/) - Ubuntu package `llvm--tools` - MacOS Homebrew formula `llvm` + Symlink FileCheck binary `ln -s /opt/homebrew/opt/llvm/bin/FileCheck /opt/homebrew/bin` The executables need to be present on the `PATH`. For tools distributed via vcpkg (*) this can be achieved automatically: @@ -126,7 +123,7 @@ GCC Cortex-M3 none 33/33 The summary lists the amount of test cases executed and passed. -## Analyse failing test cases +## Analyze failing test cases In case of failing test cases, one can run a single test case with verbose output like this: @@ -146,7 +143,7 @@ Testing Time: 0.10s Passed: 1 ``` -The output reveales wich commands are chained and their error output if any. +The output reveals which commands are chained and their error output if any. Failing FileCheck requires in detail analysis of the `// CHECK` annotations in the test source file against the `llvm-objdump` output of the test compilation. diff --git a/CMSIS/Core/Test/lit.cfg.py b/CMSIS/Core/Test/lit.cfg.py index 1b63fa8db..d79d21ab3 100644 --- a/CMSIS/Core/Test/lit.cfg.py +++ b/CMSIS/Core/Test/lit.cfg.py @@ -791,38 +791,38 @@ def get_ccflags(self): class Toolchain_Clang(Toolchain): TARGET = { - 'CM0': 'thumbv6m-none-unknown-eabi', - 'CM0plus': 'thumbv6m-none-unknown-eabi', - 'CM3': 'thumbv7m-none-unknown-eabi', - 'CM4': 'thumbv7em-none-unknown-eabi', - 'CM4FP': 'thumbv7em-none-unknown-eabihf', - 'CM7': 'thumbv7em-none-unknown-eabi', - 'CM7SP': 'thumbv7em-none-unknown-eabihf', - 'CM7DP': 'thumbv7em-none-unknown-eabihf', - 'CM23': 'thumbv8m.base-none-unknown-eabi', - 'CM23S': 'thumbv8m.base-none-unknown-eabi', - 'CM23NS': 'thumbv8m.base-none-unknown-eabi', - 'CM33': 'thumbv8m.main-none-unknown-eabihf', - 'CM33S': 'thumbv8m.main-none-unknown-eabihf', - 'CM33NS': 'thumbv8m.main-none-unknown-eabihf', - 'CM35P': 'thumbv8m.main-none-unknown-eabihf', - 'CM35PS': 'thumbv8m.main-none-unknown-eabihf', - 'CM35PNS': 'thumbv8m.main-none-unknown-eabihf', - 'CM52': 'thumbv8.1m.main-none-unknown-eabihf', - 'CM52S': 'thumbv8.1m.main-none-unknown-eabihf', - 'CM52NS': 'thumbv8.1m.main-none-unknown-eabihf', - 'CM55': 'thumbv8.1m.main-none-unknown-eabihf', - 'CM55S': 'thumbv8.1m.main-none-unknown-eabihf', - 'CM55NS': 'thumbv8.1m.main-none-unknown-eabihf', - 'CM85': 'thumbv8.1m.main-none-unknown-eabihf', - 'CM85S': 'thumbv8.1m.main-none-unknown-eabihf', - 'CM85NS': 'thumbv8.1m.main-none-unknown-eabihf', - 'CA5': 'armv7-none-unknown-eabi', - 'CA5neon': 'armv7-none-unknown-eabihf', - 'CA7': 'armv7-none-unknown-eabi', - 'CA7neon': 'armv7-none-unknown-eabihf', - 'CA9': 'armv7-none-unknown-eabi', - 'CA9neon': 'armv7-none-unknown-eabihf' + 'CM0': 'thumbv6m-none-eabi', + 'CM0plus': 'thumbv6m-none-eabi', + 'CM3': 'thumbv7m-none-eabi', + 'CM4': 'thumbv7em-none-eabi', + 'CM4FP': 'thumbv7em-none-eabihf', + 'CM7': 'thumbv7em-none-eabi', + 'CM7SP': 'thumbv7em-none-eabihf', + 'CM7DP': 'thumbv7em-none-eabihf', + 'CM23': 'thumbv8m.base-none-eabi', + 'CM23S': 'thumbv8m.base-none-eabi', + 'CM23NS': 'thumbv8m.base-none-eabi', + 'CM33': 'thumbv8m.main-none-eabihf', + 'CM33S': 'thumbv8m.main-none-eabihf', + 'CM33NS': 'thumbv8m.main-none-eabihf', + 'CM35P': 'thumbv8m.main-none-eabihf', + 'CM35PS': 'thumbv8m.main-none-eabihf', + 'CM35PNS': 'thumbv8m.main-none-eabihf', + 'CM52': 'thumbv8.1m.main-none-eabihf', + 'CM52S': 'thumbv8.1m.main-none-eabihf', + 'CM52NS': 'thumbv8.1m.main-none-eabihf', + 'CM55': 'thumbv8.1m.main-none-eabihf', + 'CM55S': 'thumbv8.1m.main-none-eabihf', + 'CM55NS': 'thumbv8.1m.main-none-eabihf', + 'CM85': 'thumbv8.1m.main-none-eabihf', + 'CM85S': 'thumbv8.1m.main-none-eabihf', + 'CM85NS': 'thumbv8.1m.main-none-eabihf', + 'CA5': 'armv7-none-eabi', + 'CA5neon': 'armv7-none-eabihf', + 'CA7': 'armv7-none-eabi', + 'CA7neon': 'armv7-none-eabihf', + 'CA9': 'armv7-none-eabi', + 'CA9neon': 'armv7-none-eabihf' } OPTIMIZE = { 'none': '-O1', diff --git a/CMSIS/Core/Test/src/ror.c b/CMSIS/Core/Test/src/ror.c index 7f1b80f21..479760bb7 100644 --- a/CMSIS/Core/Test/src/ror.c +++ b/CMSIS/Core/Test/src/ror.c @@ -7,8 +7,8 @@ static volatile uint32_t b = 2u; void ror() { // CHECK-LABEL: : - // CHECK-THUMB: ror{{s|.w}} {{r[0-9]+}}, {{r[0-9]+}} - // CHECK-ARM: ror {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}} + // CHECK-THUMB: ror{{ne|s|.w}} {{r[0-9]+}}, {{r[0-9]+}} + // CHECK-ARM: {{ror|rorne}} {{r[0-9]+}}, {{r[0-9]+}}, {{r[0-9]+}} volatile uint32_t c = __ROR(a, b); // CHECK: {{(bx lr)|(pop {.*pc})}} } diff --git a/CMSIS/Core/Test/vcpkg-configuration.json b/CMSIS/Core/Test/vcpkg-configuration.json index 0a78c764f..981c69fde 100644 --- a/CMSIS/Core/Test/vcpkg-configuration.json +++ b/CMSIS/Core/Test/vcpkg-configuration.json @@ -1,15 +1,14 @@ { "registries": [ - { - "kind": "artifact", - "location": "https://artifacts.tools.arm.com/vcpkg-registry", - "name": "arm" - } + { + "name": "arm", + "kind": "artifact", + "location": "https://artifacts.tools.arm.com/vcpkg-registry" + } ], "requires": { - "arm:compilers/arm/armclang":"^6.22.0", - "arm:compilers/arm/arm-none-eabi-gcc": "^13.2.1", - "arm:compilers/arm/llvm-embedded": "^18.1.3" + "arm:compilers/arm/armclang": "6.23.0", + "arm:compilers/arm/arm-none-eabi-gcc": "14.2.1", + "arm:compilers/arm/llvm-embedded": "19.1.5" } - } - \ No newline at end of file +} \ No newline at end of file diff --git a/CMSIS/CoreValidation/Layer/Target/CA5/Target.clayer.yml b/CMSIS/CoreValidation/Layer/Target/CA5/Target.clayer.yml index d4b81fcef..9e9cab215 100644 --- a/CMSIS/CoreValidation/Layer/Target/CA5/Target.clayer.yml +++ b/CMSIS/CoreValidation/Layer/Target/CA5/Target.clayer.yml @@ -5,7 +5,7 @@ layer: components: # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - component: ARM::CMSIS:CORE - - component: Device:Startup + - component: Device:Startup&C Startup - component: Device:IRQ Controller:GIC misc: diff --git a/CMSIS/CoreValidation/Layer/Target/CA7/Target.clayer.yml b/CMSIS/CoreValidation/Layer/Target/CA7/Target.clayer.yml index ed0ab2818..105f09240 100644 --- a/CMSIS/CoreValidation/Layer/Target/CA7/Target.clayer.yml +++ b/CMSIS/CoreValidation/Layer/Target/CA7/Target.clayer.yml @@ -5,7 +5,7 @@ layer: components: # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - component: ARM::CMSIS:CORE - - component: Device:Startup + - component: Device:Startup&C Startup - component: Device:IRQ Controller:GIC misc: diff --git a/CMSIS/CoreValidation/Layer/Target/CA9/Target.clayer.yml b/CMSIS/CoreValidation/Layer/Target/CA9/Target.clayer.yml index 7a3fbecd5..4bbf79b07 100644 --- a/CMSIS/CoreValidation/Layer/Target/CA9/Target.clayer.yml +++ b/CMSIS/CoreValidation/Layer/Target/CA9/Target.clayer.yml @@ -5,7 +5,7 @@ layer: components: # [Cvendor::] Cclass [&Cbundle] :Cgroup [:Csub] [&Cvariant] [@[>=]Cversion] - component: ARM::CMSIS:CORE - - component: Device:Startup + - component: Device:Startup&C Startup - component: Device:IRQ Controller:GIC misc: diff --git a/CMSIS/CoreValidation/Layer/Target/CM7/model_config.txt b/CMSIS/CoreValidation/Layer/Target/CM7/model_config.txt index 0696224f2..da88f0c64 100644 --- a/CMSIS/CoreValidation/Layer/Target/CM7/model_config.txt +++ b/CMSIS/CoreValidation/Layer/Target/CM7/model_config.txt @@ -14,8 +14,6 @@ armcortexm7ct.semihosting-cwd="" # (string, init-time) defa armcortexm7ct.DP_FLOAT=1 # (bool , init-time) default = '1' : Support 8-byte floats armcortexm7ct.dcache-size=32768 # (int , init-time) default = '0x8000' : L1 D-cache size in bytes armcortexm7ct.dcache-state_modelled=1 # (bool , run-time ) default = '0' : Set whether D-cache has stateful implementation -armcortexm7ct.dcache-ways=4 # (int , init-time) default = '0x4' : L1 D-cache ways (sets are implicit from size) armcortexm7ct.icache-size=32768 # (int , init-time) default = '0x8000' : L1 I-cache size in bytes armcortexm7ct.icache-state_modelled=1 # (bool , run-time ) default = '0' : Set whether I-cache has stateful implementation -armcortexm7ct.icache-ways=2 # (int , init-time) default = '0x2' : L1 I-cache ways (sets are implicit from size) #---------------------------------------------------------------------------------------------- diff --git a/CMSIS/CoreValidation/Layer/Target/CM85/model_config.txt b/CMSIS/CoreValidation/Layer/Target/CM85/model_config.txt index ce488b805..cfbd37ba0 100644 --- a/CMSIS/CoreValidation/Layer/Target/CM85/model_config.txt +++ b/CMSIS/CoreValidation/Layer/Target/CM85/model_config.txt @@ -5,8 +5,7 @@ fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) defa fvp_mps2.DISABLE_GATING=1 # (bool , init-time) default = '0' : Disable Memory gating logic cpu0.FPU=1 # (bool , init-time) default = '1' : Set whether the model has VFP support cpu0.MVE=1 # (int , init-time) default = '0x1' : Set whether the model has MVE support. If FPU = 0: 0=MVE not included, 1=Integer subset of MVE included. If FPU = 1: 0=MVE not included, 1=Integer subset of MVE included, 2=Integer and half and single precision floating point MVE included -cpu0.ID_ISAR5.PACBTI=1 # (int , init-time) default = '0x0' : 0: PAC/BTI not implemented, 1: PAC implemented using the QARMA5 algorithm with BTI, 2: PAC implemented using an IMP DEF algorithm with BTI, 4: PAC implemented using the QARMA3 algorithm with BTI -# cpu0.CFGPACBTI=1 # (bool , init-time) default = '0' : Enables support for the Pointer Authentication and Branch Target Identification (PACBTI) Extension. FALSE: Disabled, TRUE:PAC implemented using the QARMA5 algorithm with BTI +cpu0.CFGPACBTI=1 # (bool , init-time) default = '0' : Enables support for the Pointer Authentication and Branch Target Identification (PACBTI) Extension. FALSE: Disabled, TRUE:PAC implemented using the QARMA5 algorithm with BTI cpu0.semihosting-enable=1 # (bool , init-time) default = '1' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false. cpu0.semihosting-Thumb_SVC=0xAB # (int , init-time) default = '0xAB' : T32 SVC number for semihosting : [0x0..0xFF] cpu0.semihosting-cmd_line="" # (string, init-time) default = '' : Command line available to semihosting SVC calls diff --git a/CMSIS/CoreValidation/Layer/Target/CM85NS/model_config.txt b/CMSIS/CoreValidation/Layer/Target/CM85NS/model_config.txt index f72e7ba8a..ecf55ffda 100644 --- a/CMSIS/CoreValidation/Layer/Target/CM85NS/model_config.txt +++ b/CMSIS/CoreValidation/Layer/Target/CM85NS/model_config.txt @@ -5,8 +5,7 @@ fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) defa fvp_mps2.DISABLE_GATING=1 # (bool , init-time) default = '0' : Disable Memory gating logic cpu0.FPU=1 # (bool , init-time) default = '1' : Set whether the model has VFP support cpu0.MVE=1 # (int , init-time) default = '0x1' : Set whether the model has MVE support. If FPU = 0: 0=MVE not included, 1=Integer subset of MVE included. If FPU = 1: 0=MVE not included, 1=Integer subset of MVE included, 2=Integer and half and single precision floating point MVE included -cpu0.ID_ISAR5.PACBTI=1 # (int , init-time) default = '0x0' : 0: PAC/BTI not implemented, 1: PAC implemented using the QARMA5 algorithm with BTI, 2: PAC implemented using an IMP DEF algorithm with BTI, 4: PAC implemented using the QARMA3 algorithm with BTI -# cpu0.CFGPACBTI=1 # (bool , init-time) default = '0' : Enables support for the Pointer Authentication and Branch Target Identification (PACBTI) Extension. FALSE: Disabled, TRUE:PAC implemented using the QARMA5 algorithm with BTI +cpu0.CFGPACBTI=1 # (bool , init-time) default = '0' : Enables support for the Pointer Authentication and Branch Target Identification (PACBTI) Extension. FALSE: Disabled, TRUE:PAC implemented using the QARMA5 algorithm with BTI cpu0.semihosting-enable=1 # (bool , init-time) default = '1' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false. cpu0.semihosting-Thumb_SVC=0xAB # (int , init-time) default = '0xAB' : T32 SVC number for semihosting : [0x0..0xFF] cpu0.semihosting-cmd_line="" # (string, init-time) default = '' : Command line available to semihosting SVC calls diff --git a/CMSIS/CoreValidation/Layer/Target/CM85S/model_config.txt b/CMSIS/CoreValidation/Layer/Target/CM85S/model_config.txt index f72e7ba8a..ecf55ffda 100644 --- a/CMSIS/CoreValidation/Layer/Target/CM85S/model_config.txt +++ b/CMSIS/CoreValidation/Layer/Target/CM85S/model_config.txt @@ -5,8 +5,7 @@ fvp_mps2.mps2_visualisation.disable-visualisation=1 # (bool , init-time) defa fvp_mps2.DISABLE_GATING=1 # (bool , init-time) default = '0' : Disable Memory gating logic cpu0.FPU=1 # (bool , init-time) default = '1' : Set whether the model has VFP support cpu0.MVE=1 # (int , init-time) default = '0x1' : Set whether the model has MVE support. If FPU = 0: 0=MVE not included, 1=Integer subset of MVE included. If FPU = 1: 0=MVE not included, 1=Integer subset of MVE included, 2=Integer and half and single precision floating point MVE included -cpu0.ID_ISAR5.PACBTI=1 # (int , init-time) default = '0x0' : 0: PAC/BTI not implemented, 1: PAC implemented using the QARMA5 algorithm with BTI, 2: PAC implemented using an IMP DEF algorithm with BTI, 4: PAC implemented using the QARMA3 algorithm with BTI -# cpu0.CFGPACBTI=1 # (bool , init-time) default = '0' : Enables support for the Pointer Authentication and Branch Target Identification (PACBTI) Extension. FALSE: Disabled, TRUE:PAC implemented using the QARMA5 algorithm with BTI +cpu0.CFGPACBTI=1 # (bool , init-time) default = '0' : Enables support for the Pointer Authentication and Branch Target Identification (PACBTI) Extension. FALSE: Disabled, TRUE:PAC implemented using the QARMA5 algorithm with BTI cpu0.semihosting-enable=1 # (bool , init-time) default = '1' : Enable semihosting SVC traps. Applications that do not use semihosting must set this parameter to false. cpu0.semihosting-Thumb_SVC=0xAB # (int , init-time) default = '0xAB' : T32 SVC number for semihosting : [0x0..0xFF] cpu0.semihosting-cmd_line="" # (string, init-time) default = '' : Command line available to semihosting SVC calls diff --git a/CMSIS/CoreValidation/Project/Bootloader.cproject.yml b/CMSIS/CoreValidation/Project/Bootloader/Bootloader.cproject.yml similarity index 50% rename from CMSIS/CoreValidation/Project/Bootloader.cproject.yml rename to CMSIS/CoreValidation/Project/Bootloader/Bootloader.cproject.yml index e8ad7134d..2ec56d390 100644 --- a/CMSIS/CoreValidation/Project/Bootloader.cproject.yml +++ b/CMSIS/CoreValidation/Project/Bootloader/Bootloader.cproject.yml @@ -2,28 +2,28 @@ project: layers: - - layer: ../Layer/App/Bootloader_Cortex-M/App.clayer.yml + - layer: ../../Layer/App/Bootloader_Cortex-M/App.clayer.yml - - layer: ../Layer/Target/CM23S/Target.clayer.yml + - layer: ../../Layer/Target/CM23S/Target.clayer.yml for-context: - +CM23NS - - layer: ../Layer/Target/CM33S/Target.clayer.yml + - layer: ../../Layer/Target/CM33S/Target.clayer.yml for-context: - +CM33NS - - layer: ../Layer/Target/CM35PS/Target.clayer.yml + - layer: ../../Layer/Target/CM35PS/Target.clayer.yml for-context: - +CM35PNS - - layer: ../Layer/Target/CM52S/Target.clayer.yml + - layer: ../../Layer/Target/CM52S/Target.clayer.yml for-context: - +CM52NS - - layer: ../Layer/Target/CM55S/Target.clayer.yml + - layer: ../../Layer/Target/CM55S/Target.clayer.yml for-context: - +CM55NS - - layer: ../Layer/Target/CM85S/Target.clayer.yml + - layer: ../../Layer/Target/CM85S/Target.clayer.yml for-context: - +CM85NS diff --git a/CMSIS/CoreValidation/Project/Validation.csolution.yml b/CMSIS/CoreValidation/Project/Validation.csolution.yml index 3044ef730..4b413531f 100644 --- a/CMSIS/CoreValidation/Project/Validation.csolution.yml +++ b/CMSIS/CoreValidation/Project/Validation.csolution.yml @@ -1,5 +1,5 @@ solution: - created-for: cmsis-toolbox@2.5.0 + created-for: cmsis-toolbox@2.7.0 cdefault: @@ -146,8 +146,8 @@ solution: debug: on projects: - - project: ./Validation.cproject.yml - - project: ./Bootloader.cproject.yml + - project: ./Validation/Validation.cproject.yml + - project: ./Bootloader/Bootloader.cproject.yml for-context: - +CM23NS - +CM33NS diff --git a/CMSIS/CoreValidation/Project/Validation.cproject.yml b/CMSIS/CoreValidation/Project/Validation/Validation.cproject.yml similarity index 56% rename from CMSIS/CoreValidation/Project/Validation.cproject.yml rename to CMSIS/CoreValidation/Project/Validation/Validation.cproject.yml index 6769eae71..ffa298856 100644 --- a/CMSIS/CoreValidation/Project/Validation.cproject.yml +++ b/CMSIS/CoreValidation/Project/Validation/Validation.cproject.yml @@ -1,7 +1,7 @@ project: layers: # App: CMSIS-Core Validation for Cortex-M - - layer: ../Layer/App/Validation_Cortex-M/App.clayer.yml + - layer: ../../Layer/App/Validation_Cortex-M/App.clayer.yml for-context: - +CM0 - +CM0plus @@ -28,138 +28,138 @@ project: - +CM85NS # App: CMSIS-Core Validation for Cortex-A - - layer: ../Layer/App/Validation_Cortex-A/App.clayer.yml + - layer: ../../Layer/App/Validation_Cortex-A/App.clayer.yml for-context: - +CA5 - +CA7 - +CA9 #Target: CM0 - - layer: ../Layer/Target/CM0/Target.clayer.yml + - layer: ../../Layer/Target/CM0/Target.clayer.yml for-context: - +CM0 #Target: CM0plus - - layer: ../Layer/Target/CM0plus/Target.clayer.yml + - layer: ../../Layer/Target/CM0plus/Target.clayer.yml for-context: - +CM0plus #Target: CM3 - - layer: ../Layer/Target/CM3/Target.clayer.yml + - layer: ../../Layer/Target/CM3/Target.clayer.yml for-context: - +CM3 #Target: CM4 - - layer: ../Layer/Target/CM4/Target.clayer.yml + - layer: ../../Layer/Target/CM4/Target.clayer.yml for-context: - +CM4 #Target: CM7 - - layer: ../Layer/Target/CM7/Target.clayer.yml + - layer: ../../Layer/Target/CM7/Target.clayer.yml for-context: - +CM7 #Target: CM23 - - layer: ../Layer/Target/CM23/Target.clayer.yml + - layer: ../../Layer/Target/CM23/Target.clayer.yml for-context: - +CM23 #Target: CM23S - - layer: ../Layer/Target/CM23S/Target.clayer.yml + - layer: ../../Layer/Target/CM23S/Target.clayer.yml for-context: - +CM23S #Target: CM23NS - - layer: ../Layer/Target/CM23NS/Target.clayer.yml + - layer: ../../Layer/Target/CM23NS/Target.clayer.yml for-context: - +CM23NS #Target: CM33 - - layer: ../Layer/Target/CM33/Target.clayer.yml + - layer: ../../Layer/Target/CM33/Target.clayer.yml for-context: - +CM33 #Target: CM33S - - layer: ../Layer/Target/CM33S/Target.clayer.yml + - layer: ../../Layer/Target/CM33S/Target.clayer.yml for-context: - +CM33S #Target: CM33NS - - layer: ../Layer/Target/CM33NS/Target.clayer.yml + - layer: ../../Layer/Target/CM33NS/Target.clayer.yml for-context: - +CM33NS #Target: CM35P - - layer: ../Layer/Target/CM35P/Target.clayer.yml + - layer: ../../Layer/Target/CM35P/Target.clayer.yml for-context: - +CM35P #Target: CM35PS - - layer: ../Layer/Target/CM35PS/Target.clayer.yml + - layer: ../../Layer/Target/CM35PS/Target.clayer.yml for-context: - +CM35PS #Target: CM35PNS - - layer: ../Layer/Target/CM35PNS/Target.clayer.yml + - layer: ../../Layer/Target/CM35PNS/Target.clayer.yml for-context: - +CM35PNS #Target: CM52 - - layer: ../Layer/Target/CM52/Target.clayer.yml + - layer: ../../Layer/Target/CM52/Target.clayer.yml for-context: - +CM52 #Target: CM52S - - layer: ../Layer/Target/CM52S/Target.clayer.yml + - layer: ../../Layer/Target/CM52S/Target.clayer.yml for-context: - +CM52S #Target: CM52NS - - layer: ../Layer/Target/CM52NS/Target.clayer.yml + - layer: ../../Layer/Target/CM52NS/Target.clayer.yml for-context: - +CM52NS #Target: CM55 - - layer: ../Layer/Target/CM55/Target.clayer.yml + - layer: ../../Layer/Target/CM55/Target.clayer.yml for-context: - +CM55 #Target: CM55S - - layer: ../Layer/Target/CM55S/Target.clayer.yml + - layer: ../../Layer/Target/CM55S/Target.clayer.yml for-context: - +CM55S #Target: CM55NS - - layer: ../Layer/Target/CM55NS/Target.clayer.yml + - layer: ../../Layer/Target/CM55NS/Target.clayer.yml for-context: - +CM55NS #Target: CM85 - - layer: ../Layer/Target/CM85/Target.clayer.yml + - layer: ../../Layer/Target/CM85/Target.clayer.yml for-context: - +CM85 #Target: CM85S - - layer: ../Layer/Target/CM85S/Target.clayer.yml + - layer: ../../Layer/Target/CM85S/Target.clayer.yml for-context: - +CM85S #Target: CM85NS - - layer: ../Layer/Target/CM85NS/Target.clayer.yml + - layer: ../../Layer/Target/CM85NS/Target.clayer.yml for-context: - +CM85NS #Target: CA5 - - layer: ../Layer/Target/CA5/Target.clayer.yml + - layer: ../../Layer/Target/CA5/Target.clayer.yml for-context: - +CA5 #Target: CA7 - - layer: ../Layer/Target/CA7/Target.clayer.yml + - layer: ../../Layer/Target/CA7/Target.clayer.yml for-context: - +CA7 #Target: CA9 - - layer: ../Layer/Target/CA9/Target.clayer.yml + - layer: ../../Layer/Target/CA9/Target.clayer.yml for-context: - +CA9 diff --git a/CMSIS/CoreValidation/Project/build.py b/CMSIS/CoreValidation/Project/build.py index 45793e713..41f654839 100755 --- a/CMSIS/CoreValidation/Project/build.py +++ b/CMSIS/CoreValidation/Project/build.py @@ -285,15 +285,18 @@ def qemu_exec(config): cmdline += ["-kernel", f"{build_dir(config)}/{output_dir(config)}/Validation.{config.compiler.image_ext}"] return cmdline + @matrix_filter def filter_iar(config): return config.compiler == CompilerAxis.IAR + @matrix_filter -def filter_cm52(config): +def filter_gcc_cm52(config): device = config.device.match('CM52*') - compiler = config.compiler != CompilerAxis.AC6 + compiler = config.compiler == CompilerAxis.GCC return device and compiler + if __name__ == "__main__": main() diff --git a/CMSIS/CoreValidation/Project/vcpkg-configuration.json b/CMSIS/CoreValidation/Project/vcpkg-configuration.json index 1d6b2bb85..0a15f89a4 100644 --- a/CMSIS/CoreValidation/Project/vcpkg-configuration.json +++ b/CMSIS/CoreValidation/Project/vcpkg-configuration.json @@ -1,20 +1,19 @@ { "registries": [ - { - "kind": "artifact", - "location": "https://artifacts.tools.arm.com/vcpkg-registry", - "name": "arm" - } + { + "name": "arm", + "kind": "artifact", + "location": "https://artifacts.tools.arm.com/vcpkg-registry" + } ], "requires": { - "arm:tools/kitware/cmake": "^3.25.2", - "arm:ninja": "^1.10.2", - "arm:compilers/arm/armclang":"^6.22.0", - "arm:compilers/arm/arm-none-eabi-gcc": "^13.2.1", - "arm:compilers/arm/llvm-embedded": "^18.1.3", - "arm:tools/open-cmsis-pack/cmsis-toolbox": "^2.5.0-0", - "arm:models/arm/avh-fvp": "11.22.39", - "arm:debuggers/arm/armdbg": "^6.0.0" + "arm:tools/kitware/cmake": "3.28.4", + "arm:compilers/arm/armclang": "6.23.0", + "arm:compilers/arm/arm-none-eabi-gcc": "14.2.1", + "arm:compilers/arm/llvm-embedded": "19.1.5", + "arm:tools/open-cmsis-pack/cmsis-toolbox": "2.7.0", + "arm:models/arm/avh-fvp": "11.27.31", + "arm:debuggers/arm/armdbg": "6.3.0", + "arm:tools/ninja-build/ninja": "1.12.0" } - } - \ No newline at end of file +} \ No newline at end of file From c56f0ebb01003b16afbdb970a95630d898f3cef3 Mon Sep 17 00:00:00 2001 From: Nikolay Markovich Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 07/22] Bug fix in GIC_GetConfiguration() (#217) Bit shift in accordance with IRQn % 16 was incorrect, and masking was needed to extract only the IRQn bits. Both fixed. --- CMSIS/Core/Include/core_ca.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMSIS/Core/Include/core_ca.h b/CMSIS/Core/Include/core_ca.h index eda3aa85f..2e9e07b59 100644 --- a/CMSIS/Core/Include/core_ca.h +++ b/CMSIS/Core/Include/core_ca.h @@ -1645,7 +1645,7 @@ __STATIC_INLINE void GIC_SetConfiguration(IRQn_Type IRQn, uint32_t int_config) */ __STATIC_INLINE uint32_t GIC_GetConfiguration(IRQn_Type IRQn) { - return (GICDistributor->ICFGR[IRQn / 16U] >> ((IRQn % 16U) >> 1U)); + return (GICDistributor->ICFGR[IRQn / 16U] >> ((IRQn % 16U) << 1U)) & 3UL; } /** \brief Set the priority for the given interrupt in the GIC's IPRIORITYR register. From ecdd649c4e0327284fc59b5c0b38b768a9f23c10 Mon Sep 17 00:00:00 2001 From: Nikolay Markovich Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 08/22] Possible bugs in MMU_MemorySection(), MMU_MemoryPage() (#219) Need to be tested /reviewed, as I am not sure about the flag control logic. --- CMSIS/Core/Include/core_ca.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMSIS/Core/Include/core_ca.h b/CMSIS/Core/Include/core_ca.h index 2e9e07b59..85da3030c 100644 --- a/CMSIS/Core/Include/core_ca.h +++ b/CMSIS/Core/Include/core_ca.h @@ -2700,7 +2700,7 @@ __STATIC_INLINE int MMU_MemorySection(uint32_t *descriptor_l1, mmu_memory_Type m *descriptor_l1 |= 1 << SECTION_TEX1_SHIFT; break; case WB_NO_WA: - *descriptor_l1 |= (1 << SECTION_TEX0_SHIFT) | (1 << SECTION_TEX0_SHIFT); + *descriptor_l1 |= (1 << SECTION_TEX1_SHIFT) | (1 << SECTION_TEX0_SHIFT); break; } } @@ -2768,7 +2768,7 @@ __STATIC_INLINE int MMU_MemoryPage(uint32_t *descriptor_l2, mmu_memory_Type mem, *descriptor_l2 |= 1 << PAGE_4K_TEX1_SHIFT; break; case WB_NO_WA: - *descriptor_l2 |= (1 << PAGE_4K_TEX0_SHIFT) | (1 << PAGE_4K_TEX0_SHIFT); + *descriptor_l2 |= (1 << PAGE_4K_TEX1_SHIFT) | (1 << PAGE_4K_TEX0_SHIFT); break; } } From 415eb1f661ee2ddd359175ed9d18800fe5d6e1eb Mon Sep 17 00:00:00 2001 From: Evagan2018 Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 09/22] Replaced doc references (#220) Replaced references to https://github.com/Open-CMSIS-Pack/cmsis-toolbox/... with https://open-cmsis-pack.github.io/cmsis-toolbox/ Open-CMSIS-Pack/cmsis-toolbox#248 --- CMSIS/Documentation/Doxygen/Toolbox/src/mainpage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMSIS/Documentation/Doxygen/Toolbox/src/mainpage.md b/CMSIS/Documentation/Doxygen/Toolbox/src/mainpage.md index eac01ad34..61cc6f248 100644 --- a/CMSIS/Documentation/Doxygen/Toolbox/src/mainpage.md +++ b/CMSIS/Documentation/Doxygen/Toolbox/src/mainpage.md @@ -11,7 +11,7 @@ The CMSIS-Toolbox provides command-line tools for: CMSIS-Toolbox is actively maintained in a dedicated GitHub repository and released as a set of binary utilities. - - [**CMSIS-Toolbox User Guide**](https://github.com/Open-CMSIS-Pack/cmsis-toolbox/blob/main/docs/README.md) - provides user documentation for the CMSIS-Toolbox. + - [**CMSIS-Toolbox User Guide**](https://open-cmsis-pack.github.io/cmsis-toolbox/) - provides user documentation for the CMSIS-Toolbox. - [**CMSIS-Toolbox Artifacts**](https://artifacts.keil.arm.com/cmsis-toolbox/) - pre-built utilities for integration into IDEs and CI workflows. - [**CMSIS-Toolbox GitHub Repo**](https://github.com/Open-CMSIS-Pack/cmsis-toolbox) - contains the source code and releases. From d07a5ded7a047d15e2699cf0659bab3af87a2265 Mon Sep 17 00:00:00 2001 From: Milorad Cvjetkovic Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 10/22] CMSIS-Driver: Minor update to USB Host Driver documentation (#225) - remove references to deprecated HCI driver --- CMSIS/Driver/Include/Driver_USBH.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMSIS/Driver/Include/Driver_USBH.h b/CMSIS/Driver/Include/Driver_USBH.h index bc989fb84..ed0070e2a 100644 --- a/CMSIS/Driver/Include/Driver_USBH.h +++ b/CMSIS/Driver/Include/Driver_USBH.h @@ -342,6 +342,7 @@ typedef struct _ARM_DRIVER_USBH { } const ARM_DRIVER_USBH; +// \cond #ifndef CMSIS_DISABLE_DEPRECATED // HCI (OHCI/EHCI) @@ -414,6 +415,7 @@ typedef struct _ARM_DRIVER_USBH_HCI { } const ARM_DRIVER_USBH_HCI; #endif // CMSIS_DISABLE_DEPRECATED +// \endcond #ifdef __cplusplus } From bff729a5d705baf8b5c6f80d4eaf874e2a400a32 Mon Sep 17 00:00:00 2001 From: Milorad Cvjetkovic Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 11/22] Update driver api descriptions in ARM.CMSIS.pdsc (#223) --- ARM.CMSIS.pdsc | 41 +++++++++++++++++------------------------ 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/ARM.CMSIS.pdsc b/ARM.CMSIS.pdsc index 43ec6a65f..9d3a88979 100644 --- a/ARM.CMSIS.pdsc +++ b/ARM.CMSIS.pdsc @@ -13,15 +13,8 @@ https://www.keil.com/pack/ - + Active development ... - Added Overview.md for display on web index service - CMSIS-Core: 6.1.0 - - Added support for Cortex-M52 - - Added deprecated CoreDebug symbols for CMSIS 5 compatibility - - Added define CMSIS_DISABLE_DEPRECATED to hide deprecated symbols - CMSIS-Driver: 2.10.0 - - Updated USB Host Interface API 2.4.0 (deprecated API for OHCI/EHCI Host Controller Interface (HCI)) CMSIS-Core(M): 5.6.0 @@ -444,63 +437,63 @@ - USART Driver API for Cortex-M + USART (Universal Synchronous/Asynchronous Receiver/Transmitter) Driver API - SPI Driver API for Cortex-M + SPI (Serial Peripheral Interface) Driver API - SAI Driver API for Cortex-M + SAI (Serial Audio Interface) Driver API - I2C Driver API for Cortex-M + I2C (Inter-Integrated Circuit) Driver API - CAN Driver API for Cortex-M + CAN (Controller Area Network) Driver API - Flash Driver API for Cortex-M + NOR Flash Driver API - MCI Driver API for Cortex-M + MCI (Memory Card Interface) Driver API - NAND Flash Driver API for Cortex-M + NAND Flash Driver API - Ethernet MAC and PHY Driver API for Cortex-M + Ethernet MAC (Media Access Control) and PHY (Physical layer) Driver API @@ -508,49 +501,49 @@ - Ethernet MAC Driver API for Cortex-M + Ethernet MAC (Media Access Control) Driver API - Ethernet PHY Driver API for Cortex-M + Ethernet PHY (Physical layer) Driver API - USB Device Driver API for Cortex-M + USB (Universal Serial Bus) Device Driver API - USB Host Driver API for Cortex-M + USB (Universal Serial Bus) Host Driver API - GPIO Driver API for Cortex-M + GPIO (General-Purpose Input/Output) Driver API - WiFi driver + WiFi (Wireless network) Driver API - Virtual I/O + Virtual I/O abstraction for simple peripherals (i.e. button, LED) From b7402a6297ca0fbaa8e66acb6f4b3befab2af455 Mon Sep 17 00:00:00 2001 From: Milorad Cvjetkovic Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 12/22] Remove CMSIS-Driver API header from custom component templates (#224) --- ARM.CMSIS.pdsc | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/ARM.CMSIS.pdsc b/ARM.CMSIS.pdsc index 9d3a88979..2c4a1c9b9 100644 --- a/ARM.CMSIS.pdsc +++ b/ARM.CMSIS.pdsc @@ -698,64 +698,54 @@ Access to #include Driver_USART.h file and code template for custom implementation - Access to #include Driver_SPI.h file and code template for custom implementation - Access to #include Driver_SAI.h file and code template for custom implementation - Access to #include Driver_I2C.h file and code template for custom implementation - Access to #include Driver_CAN.h file and code template for custom implementation - Access to #include Driver_Flash.h file and code template for custom implementation - Access to #include Driver_MCI.h file and code template for custom implementation - Access to #include Driver_NAND.h file and code template for custom implementation - Access to #include Driver_ETH_PHY/MAC.h files and code templates for custom implementation - - @@ -763,42 +753,36 @@ Access to #include Driver_ETH_MAC.h file and code template for custom implementation - Access to #include Driver_ETH_PHY.h file and code template for custom implementation - Access to #include Driver_USBD.h file and code template for custom implementation - Access to #include Driver_USBH.h file and code template for custom implementation - Access to #include Driver_GPIO.h file and code template for custom implementation - Access to #include Driver_WiFi.h file - From c517695a2fc7ab0cead6cd965bc9e9a1c18fdb44 Mon Sep 17 00:00:00 2001 From: Milorad Cvjetkovic Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 13/22] CMSIS-Driver: Added vStream Driver API 1.0.0 (#226) --- ARM.CMSIS.pdsc | 17 + .../Doxygen/Driver/Driver.dxy.in | 4 +- .../Doxygen/Driver/src/history.md | 6 + .../Doxygen/Driver/src/implementations.md | 208 ++++++++ .../Doxygen/Driver/src/mainpage.md | 1 + .../Doxygen/Driver/src/vStream.txt | 456 ++++++++++++++++++ .../Doxygen/Driver/src/vStream_Example.c | 81 ++++ .../Doxygen/General/src/revision_history.md | 7 + CMSIS/Driver/vStream/Include/cmsis_vstream.h | 122 +++++ CMSIS/Driver/vStream/Template/vstream.c | 171 +++++++ 10 files changed, 1072 insertions(+), 1 deletion(-) create mode 100644 CMSIS/Documentation/Doxygen/Driver/src/vStream.txt create mode 100644 CMSIS/Documentation/Doxygen/Driver/src/vStream_Example.c create mode 100644 CMSIS/Driver/vStream/Include/cmsis_vstream.h create mode 100644 CMSIS/Driver/vStream/Template/vstream.c diff --git a/ARM.CMSIS.pdsc b/ARM.CMSIS.pdsc index 2c4a1c9b9..df24aaeba 100644 --- a/ARM.CMSIS.pdsc +++ b/ARM.CMSIS.pdsc @@ -15,6 +15,8 @@ Active development ... + CMSIS-Driver: 2.11.0 + - Added vStream Driver API 1.0.0 CMSIS-Core(M): 5.6.0 @@ -550,6 +552,13 @@ + + Virtual Streaming interface Driver API + + + + + @@ -801,6 +810,14 @@ + + + Virtual Streaming interface Driver custom implementation template + + + + + diff --git a/CMSIS/Documentation/Doxygen/Driver/Driver.dxy.in b/CMSIS/Documentation/Doxygen/Driver/Driver.dxy.in index ac329ed3b..503833e50 100644 --- a/CMSIS/Documentation/Doxygen/Driver/Driver.dxy.in +++ b/CMSIS/Documentation/Doxygen/Driver/Driver.dxy.in @@ -47,7 +47,7 @@ PROJECT_NAME = "CMSIS-Driver" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "Version 2.10.0" +PROJECT_NUMBER = "Version 2.11.0" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a @@ -959,6 +959,8 @@ INPUT = ./src/mainpage.md \ src/Driver_GPIO.c \ ../../../Driver/VIO/Include/cmsis_vio.h \ src/VIO.txt \ + ../../../Driver/vStream/Include/cmsis_vstream.h \ + src/vStream.txt \ ../../../Driver/Include/Driver_WiFi.h \ src/Driver_WiFi.c diff --git a/CMSIS/Documentation/Doxygen/Driver/src/history.md b/CMSIS/Documentation/Doxygen/Driver/src/history.md index e1ce56aca..b43b97b72 100644 --- a/CMSIS/Documentation/Doxygen/Driver/src/history.md +++ b/CMSIS/Documentation/Doxygen/Driver/src/history.md @@ -9,6 +9,12 @@ The table below provides information about the changes delivered with specific v Version Description + + 2.11.0 + + - Added vStream Driver API 1.0.0 + + 2.10.0 diff --git a/CMSIS/Documentation/Doxygen/Driver/src/implementations.md b/CMSIS/Documentation/Doxygen/Driver/src/implementations.md index 09fa900ef..e52f6b56c 100644 --- a/CMSIS/Documentation/Doxygen/Driver/src/implementations.md +++ b/CMSIS/Documentation/Doxygen/Driver/src/implementations.md @@ -21,6 +21,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device [USB Device]: \ref usbd_interface_gr "USB Device". [GPIO]: \ref gpio_interface_gr "GPIO". [VIO]: \ref vio_interface_gr "VIO". +[vStream]: \ref vstream_interface_gr "vStream". [WiFi]: \ref wifi_interface_gr "WiFi". @@ -42,6 +43,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -63,6 +65,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -83,6 +86,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -103,6 +107,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -123,6 +128,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -143,6 +149,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -163,6 +170,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -182,6 +190,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -202,6 +211,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -223,6 +233,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -243,6 +254,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -263,6 +275,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -283,6 +296,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -302,6 +316,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -323,6 +338,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -343,6 +359,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -363,6 +380,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -383,6 +401,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -403,6 +422,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -423,6 +443,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -443,6 +464,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -463,6 +485,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -483,6 +506,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -503,6 +527,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -523,6 +548,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -543,6 +569,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -563,6 +590,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -583,6 +611,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -603,6 +632,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -623,6 +653,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -643,6 +674,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -663,6 +695,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -683,6 +716,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -703,6 +737,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -723,6 +758,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -743,6 +779,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -763,6 +800,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -783,6 +821,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -803,6 +842,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -823,6 +863,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -843,6 +884,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -863,6 +905,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -883,6 +926,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -903,6 +947,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -923,6 +968,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -943,6 +989,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -963,6 +1010,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -983,6 +1031,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1003,6 +1052,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1023,6 +1073,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1043,6 +1094,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1063,6 +1115,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1083,6 +1136,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1103,6 +1157,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1123,6 +1178,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1143,6 +1199,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1163,6 +1220,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1183,6 +1241,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1203,6 +1262,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1223,6 +1283,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1243,6 +1304,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1263,6 +1325,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1283,6 +1346,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1303,6 +1367,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1323,6 +1388,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1343,6 +1409,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1363,6 +1430,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1383,6 +1451,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1403,6 +1472,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1423,6 +1493,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1443,6 +1514,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1463,6 +1535,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1483,6 +1556,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1503,6 +1577,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1523,6 +1598,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1543,6 +1619,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1563,6 +1640,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1583,6 +1661,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1603,6 +1682,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1623,6 +1703,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1643,6 +1724,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1663,6 +1745,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1683,6 +1766,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1703,6 +1787,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1723,6 +1808,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1743,6 +1829,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1763,6 +1850,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1783,6 +1871,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1803,6 +1892,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1823,6 +1913,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1843,6 +1934,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1863,6 +1955,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1883,6 +1976,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1903,6 +1997,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1923,6 +2018,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1943,6 +2039,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1963,6 +2060,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -1983,6 +2081,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2003,6 +2102,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2023,6 +2123,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2043,6 +2144,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2063,6 +2165,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2083,6 +2186,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2103,6 +2207,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2123,6 +2228,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2143,6 +2249,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2163,6 +2270,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2183,6 +2291,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2203,6 +2312,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2223,6 +2333,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2243,6 +2354,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2263,6 +2375,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2283,6 +2396,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2303,6 +2417,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2323,6 +2438,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2343,6 +2459,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2363,6 +2480,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2383,6 +2501,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2403,6 +2522,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2423,6 +2543,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2443,6 +2564,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2463,6 +2585,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2483,6 +2606,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2503,6 +2627,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2523,6 +2648,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2543,6 +2669,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2563,6 +2690,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2583,6 +2711,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2603,6 +2732,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2623,6 +2753,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2643,6 +2774,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2663,6 +2795,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2683,6 +2816,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2703,6 +2837,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2723,6 +2858,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2743,6 +2879,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2763,6 +2900,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2783,6 +2921,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2803,6 +2942,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2823,6 +2963,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2843,6 +2984,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2863,6 +3005,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2883,6 +3026,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2903,6 +3047,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2923,6 +3068,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2943,6 +3089,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2963,6 +3110,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -2983,6 +3131,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3003,6 +3152,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3023,6 +3173,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3043,6 +3194,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3063,6 +3215,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3083,6 +3236,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3103,6 +3257,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3123,6 +3278,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3143,6 +3299,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3163,6 +3320,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3183,6 +3341,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3203,6 +3362,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3223,6 +3383,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3243,6 +3404,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3263,6 +3425,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3283,6 +3446,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3303,6 +3467,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3323,6 +3488,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3343,6 +3509,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3363,6 +3530,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3383,6 +3551,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3403,6 +3572,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3423,6 +3593,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3443,6 +3614,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3463,6 +3635,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3483,6 +3656,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3503,6 +3677,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3523,6 +3698,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3543,6 +3719,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3563,6 +3740,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3583,6 +3761,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3603,6 +3782,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3623,6 +3803,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3643,6 +3824,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3663,6 +3845,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3683,6 +3866,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3702,6 +3886,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3723,6 +3908,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3743,6 +3929,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3763,6 +3950,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3783,6 +3971,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3802,6 +3991,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3823,6 +4013,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3843,6 +4034,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3863,6 +4055,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3883,6 +4076,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3903,6 +4097,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3923,6 +4118,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3943,6 +4139,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3963,6 +4160,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -3983,6 +4181,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -4003,6 +4202,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -4023,6 +4223,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -4043,6 +4244,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -4063,6 +4265,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -4083,6 +4286,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -4103,6 +4307,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -4123,6 +4328,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -4143,6 +4349,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device + @@ -4162,6 +4369,7 @@ Some CMSIS-Driver implementations for external MCU-independent peripheral device +
[USB Device] [GPIO] [VIO][vStream] [WiFi]
Espressif
Infineon
Inventek
Micron
NXP
Qualcomm
Renesas
STMicroelectronics
Texas Instruments
WizNet
diff --git a/CMSIS/Documentation/Doxygen/Driver/src/mainpage.md b/CMSIS/Documentation/Doxygen/Driver/src/mainpage.md index 841ce0915..964b3f1d1 100644 --- a/CMSIS/Documentation/Doxygen/Driver/src/mainpage.md +++ b/CMSIS/Documentation/Doxygen/Driver/src/mainpage.md @@ -37,6 +37,7 @@ CMSIS-Driver APIs are defined for the following driver interfaces: - \ref usb_interface_gr "USB": Interface driver for USB Host and USB Device communication. - \ref gpio_interface_gr "GPIO": General-purpose Input/Output driver. - \ref vio_interface_gr "VIO": API for virtual I/Os (VIO). + - \ref vstream_interface_gr "vStream": API for Virtual streaming interface using fixed-size data blocks. - \ref wifi_interface_gr "WiFi": Interface driver for wireless communication. A list of current CMSIS-Driver implementations is available \ref listOfImplementations "here". diff --git a/CMSIS/Documentation/Doxygen/Driver/src/vStream.txt b/CMSIS/Documentation/Doxygen/Driver/src/vStream.txt new file mode 100644 index 000000000..627191e8c --- /dev/null +++ b/CMSIS/Documentation/Doxygen/Driver/src/vStream.txt @@ -0,0 +1,456 @@ +/** +\defgroup vstream_interface_gr vStream +\brief Driver API for Virtual Streaming interface using fixed-size data blocks (%cmsis_vstream.h) +\details + +The **vStream** software component provides an abstraction layer for streaming data using fixed-size blocks. +It offers a standardized interface to interact with various streaming devices such as sensors, cameras, microphones, speakers, or simulated devices. +It allows seamless development on one platform and deployment on another. + +vStream API + +The following header file defines the Application Programming Interface (API) for Virtual Streaming interface: + - %cmsis_vstream.h: Driver API for Virtual Streaming interface + +The driver implementation is typically a part of the Board Support Pack (BSP) for a specific board with streaming devices. + +Driver Functions + +All driver functions are grouped within the \ref vStreamDriver_t access structure. + +User Code Template + +The **CMSIS Driver:vStream (API):Custom** component provides a stub implementation of all vStream driver functions. +This template can be used to implement the vStream driver for your target hardware. + +The default driver access structure is named Driver_vStreamDevice, but `Device` should be replaced with +a specific device name, such as `Driver_vStreamAccelerometer`. See \ref vStreamDriver_t for more details. + +Code Example + +The following example demonstrates how to use the vStream driver for an accelerometer: + +\include vStream_Example.c + +@{ +*/ + +/** +\defgroup vstream_return_code Return Codes +\ingroup vstream_interface_gr +\brief Return codes for driver functions. Negative values indicate errors. +@{ +\def VSTREAM_OK +\def VSTREAM_ERROR +\def VSTREAM_ERROR_PARAMETER +@} +*/ + +/** +\defgroup vstream_mode Streaming Modes +\ingroup vstream_interface_gr +\brief Streaming modes used by the \ref vStreamStart function. +@{ +\def VSTREAM_MODE_CONTINUOUS +\def VSTREAM_MODE_SINGLE +@} +*/ + +/** +\defgroup vstream_events Driver Event Flags +\ingroup vstream_interface_gr +\brief Events signaled by the driver via the \ref vStreamEvent function. +@{ +\def VSTREAM_EVENT_DATA +\def VSTREAM_EVENT_OVERFLOW +\def VSTREAM_EVENT_UNDERFLOW +\def VSTREAM_EVENT_EOS +@} +*/ + +/** +\defgroup vStreamStatus_t Streaming Status +\ingroup vstream_interface_gr +\brief Structure indicating the status of the virtual stream. +@{ +\struct vStreamStatus_t +@} +*/ + +/** +\typedef vStreamEvent_t +\details +Provides the typedef for the callback function \ref vStreamEvent. + +Parameter for: + - \ref vStreamInitialize +*/ + +/** +\struct vStreamDriver_t +\details +This structure provides function pointers to access the vStream driver. + +Recommended naming convention for access structures: + - Driver_vStream + - Examples: + - Driver_vStreamAccelerometer + - Driver_vStreamGyroscope + - Driver_vStreamHumidity + - Driver_vStreamTemperature + - Driver_vStreamIMU + - Driver_vStreamAudioIn + - Driver_vStreamAudioOut + - Driver_vStreamVideoIn + - Driver_vStreamVideoOut + +*****************************************************************************************************************/ + +int32_t vStreamInitialize (vStreamEvent_t event_cb) { return VSTREAM_OK; } +/** +\fn int32_t vStreamInitialize (vStreamEvent_t event_cb) +\details +This function prepares the Virtual Streaming interface for operation. + +It performs the following tasks: + - Initializes internal driver resources and streaming device interface. + - Registers the \ref vStreamEvent event signaling callback function. + +The event callback function must conform to the \ref vStreamEvent_t type. +If event signaling is not required, pass a NULL pointer for \em event_cb. + +This function must be called before any other vStream operations. + +Code Example: + +\code +#include "cmsis_vstream.h" + +// vStream driver +extern vStreamDriver_t Driver_vStreamAccelerometer; +static vStreamDriver_t *ptrDriver_vStreamAccelerometer = &Driver_vStreamAccelerometer; + +int main (void) { + + SystemCoreClockUpdate(); // System Initialization + + ptrDriver_vStreamAccelerometer->Initialize(NULL); + // ... +} +\endcode + +********************************************************************************/ + +int32_t vStreamUninitialize (void) { return VSTREAM_OK; } +/** +\fn int32_t vStreamUninitialize (void) +\details +This function disables the Virtual Streaming interface and releases all associated resources that +were allocated during \ref vStreamInitialize. + +Use this function to properly shut down the interface when streaming is no longer required. +After calling \b vStreamUninitialize, the interface is considered inactive, and re-initialization is required to resume streaming operations. + +Code Example: +\code +#include "cmsis_vstream.h" + +// vStream driver +extern vStreamDriver_t Driver_vStreamAccelerometer; +static vStreamDriver_t *ptrDriver_vStreamAccelerometer = &Driver_vStreamAccelerometer; + +int main (void) { + + SystemCoreClockUpdate(); // System Initialization + + ptrDriver_vStreamAccelerometer->Initialize(NULL); + // ... + ptrDriver_vStreamAccelerometer->Uninitialize(); +} +\endcode + +********************************************************************************/ + +int32_t vStreamSetBuf (void *buf, uint32_t buf_size, uint32_t block_size) { return VSTREAM_OK; } +/** +\fn int32_t vStreamSetBuf (void *buf, uint32_t buf_size, uint32_t block_size) +\details +This function registers a memory buffer for use by the Virtual Streaming driver. +The buffer is used for reading or writing fixed-size data blocks, depending on the streaming direction. + +Memory buffer recommendations: + - the buffer should be aligned to a 4-byte boundary, to facilitate DMA usage. + - \em buf_size should be an integer multiple of \em block_size, otherwise the largest multiple that fits will be used. + - a minimum of two blocks is recommended to ensure proper buffering and streaming continuity. + +If \em block_size is larger than \em buf_size, the function returns \ref VSTREAM_ERROR_PARAMETER. + +This function must be called after initialization and before starting the stream. + +Code Example: +\code +#include "cmsis_vstream.h" + +// vStream driver +extern vStreamDriver_t Driver_vStreamAccelerometer; +static vStreamDriver_t *ptrDriver_vStreamAccelerometer = &Driver_vStreamAccelerometer; + +static uint32_t vstream_buf[256]; + +int main (void) { + + SystemCoreClockUpdate(); // System Initialization + + ptrDriver_vStreamAccelerometer->Initialize(NULL); + ptrDriver_vStreamAccelerometer->SetBuf(vstream_buf, sizeof(vstream_buf), sizeof(vstream_buf)/2); + // ... + ptrDriver_vStreamAccelerometer->Uninitialize(); +} +\endcode + +********************************************************************************/ + +int32_t vStreamStart (uint32_t mode) { return VSTREAM_OK; } +/** +\fn int32_t vStreamStart (uint32_t mode) +\details +This function initiates the streaming operation based on the specified mode. + +Before calling \b vStreamStart: + - The interface must be initialized using \ref vStreamInitialize. + - A valid buffer must be configured using \ref vStreamSetBuf. + +The \em mode parameter defines the streaming behavior: + - \ref VSTREAM_MODE_CONTINUOUS : Streaming continues until explicitly stopped. + - \ref VSTREAM_MODE_SINGLE : Streaming stops automatically after transferring a single data block. + +Code Example: +\code +#include "cmsis_vstream.h" + +// vStream driver +extern vStreamDriver_t Driver_vStreamAccelerometer; +static vStreamDriver_t *ptrDriver_vStreamAccelerometer = &Driver_vStreamAccelerometer; + +static uint32_t vstream_buf[256]; + +int main (void) { + + SystemCoreClockUpdate(); // System Initialization + + ptrDriver_vStreamAccelerometer->Initialize(NULL); + ptrDriver_vStreamAccelerometer->SetBuf(vstream_buf, sizeof(vstream_buf), sizeof(vstream_buf)/2); + ptrDriver_vStreamAccelerometer->Start(VSTREAM_MODE_CONTINUOUS); + // ... + ptrDriver_vStreamAccelerometer->Uninitialize(); +} +\endcode + +********************************************************************************/ + +int32_t vStreamStop (void) { return VSTREAM_OK; } +/** +\fn int32_t vStreamStop (void) +\details +This function stops the ongoing streaming process initiated by \ref vStreamStart and resets the +stream, by discarding any remaining or incomplete data blocks. + +Calling this function halts data transfers and prepares the stream for either shutdown or restart. +After stopping, the stream can be restarted using \ref vStreamStart without requiring re-initialization or reconfiguration, provided the buffer settings remain valid. + +Code Example: +\code +#include "cmsis_vstream.h" + +// vStream driver +extern vStreamDriver_t Driver_vStreamAccelerometer; +static vStreamDriver_t *ptrDriver_vStreamAccelerometer = &Driver_vStreamAccelerometer; + +static uint32_t vstream_buf[256]; + +int main (void) { + + SystemCoreClockUpdate(); // System Initialization + + ptrDriver_vStreamAccelerometer->Initialize(NULL); + ptrDriver_vStreamAccelerometer->SetBuf(vstream_buf, sizeof(vstream_buf), sizeof(vstream_buf)/2); + ptrDriver_vStreamAccelerometer->Start(VSTREAM_MODE_CONTINUOUS); + // ... + ptrDriver_vStreamAccelerometer->Stop(); + ptrDriver_vStreamAccelerometer->Uninitialize(); +} +\endcode + +********************************************************************************/ + +void *vStreamGetBlock (void) { return NULL; } +/** +\fn void *vStreamGetBlock (void) +\details +This function provides access to the current data block used for input or output operations, +depending on the streaming direction. + +- For input streams (receiving data): returns a pointer to the oldest unread data block. + If no unread block is available, the function returns NULL. + +- For output streams (sending data): returns a pointer to the next available empty block where the application can write data. + If no empty block is available, the function returns NULL. + +The returned block remains valid until it is released using \ref vStreamReleaseBlock. + +Code Example: +\code +#include "cmsis_vstream.h" + +// vStream driver +extern vStreamDriver_t Driver_vStreamAccelerometer; +static vStreamDriver_t *ptrDriver_vStreamAccelerometer = &Driver_vStreamAccelerometer; + +static uint32_t vstream_buf[256]; + +int main (void) { + static volatile uint32_t *ptr_sensor_data_block; + + SystemCoreClockUpdate(); // System Initialization + + ptrDriver_vStreamAccelerometer->Initialize(NULL); + ptrDriver_vStreamAccelerometer->SetBuf(vstream_buf, sizeof(vstream_buf), sizeof(vstream_buf)/2); + ptrDriver_vStreamAccelerometer->Start(VSTREAM_MODE_CONTINUOUS); + do { + ptr_sensor_data_block = ptrDriver_vStreamAccelerometer->GetBlock(); + } while (ptr_sensor_data_block == NULL); + // ... + ptrDriver_vStreamAccelerometer->Stop(); + ptrDriver_vStreamAccelerometer->Uninitialize(); +} +\endcode + +********************************************************************************/ + +int32_t vStreamReleaseBlock (void) { return VSTREAM_OK; } +/** +\fn int32_t vStreamReleaseBlock (void) +\details +This function finalizes the use of the current data block returned by \ref vStreamGetBlock. + +- For input streams: marks the block as processed, making it available for reuse by the driver. +- For output streams: commits the block for transmission, indicating that the data is ready to be streamed out. + +This function must be called after processing or preparing each data block to maintain proper buffer flow and avoid data loss or stalling. + +Code Example: +\code +#include "cmsis_vstream.h" + +// vStream driver +extern vStreamDriver_t Driver_vStreamAccelerometer; +static vStreamDriver_t *ptrDriver_vStreamAccelerometer = &Driver_vStreamAccelerometer; + +static uint32_t vstream_buf[256]; + +int main (void) { + static volatile uint32_t *ptr_sensor_data_block; + + SystemCoreClockUpdate(); // System Initialization + + ptrDriver_vStreamAccelerometer->Initialize(NULL); + ptrDriver_vStreamAccelerometer->SetBuf(vstream_buf, sizeof(vstream_buf), sizeof(vstream_buf)/2); + ptrDriver_vStreamAccelerometer->Start(VSTREAM_MODE_CONTINUOUS); + do { + ptr_sensor_data_block = ptrDriver_vStreamAccelerometer->GetBlock(); + } while (ptr_sensor_data_block == NULL); + // Do something with sensor data + // ... + ptrDriver_vStreamAccelerometer->ReleaseBlock(); + ptrDriver_vStreamAccelerometer->Stop(); + ptrDriver_vStreamAccelerometer->Uninitialize(); +} +\endcode + +********************************************************************************/ + +vStreamStatus_t vStreamGetStatus (void) { + vStreamStatus_t status = { 0U, 0U, 0U, 0U, 0U }; + return status; +} +/** +\fn vStreamStatus_t vStreamGetStatus (void) +\details +This function returns the current operational status of the Virtual Streaming interface. + +The returned structure includes the following information: + - Streaming activity status. + - Overflow or underflow conditions. + - End-of-stream (EOS) indication. + +Use this function to monitor the health and state of the streaming process during runtime. + +Code Example: +\code +#include "cmsis_vstream.h" + +// vStream driver +extern vStreamDriver_t Driver_vStreamAccelerometer; +static vStreamDriver_t *ptrDriver_vStreamAccelerometer = &Driver_vStreamAccelerometer; + +static uint32_t vstream_buf[256]; + +int main (void) { + + SystemCoreClockUpdate(); // System Initialization + + ptrDriver_vStreamAccelerometer->Initialize(NULL); + ptrDriver_vStreamAccelerometer->SetBuf(vstream_buf, sizeof(vstream_buf), sizeof(vstream_buf)/2); + ptrDriver_vStreamAccelerometer->Start(VSTREAM_MODE_CONTINUOUS); + if (ptrDriver_vStreamAccelerometer->GetStatus().active == 0U) { + // If streaming is not active exit + } + // ... + ptrDriver_vStreamAccelerometer->Stop(); + ptrDriver_vStreamAccelerometer->Uninitialize(); +} +\endcode + +********************************************************************************/ + +void vStreamEvent (uint32_t event_flags) { } +/** +\fn void vStreamEvent (uint32_t event_flags) +\details +This user-implemented callback function is invoked by the driver to signal runtime events during streaming. +It is registered by the \ref vStreamInitialize function. + +The \ref vstream_events "event_flags" parameter is a bitmask where each bit represents a specific event condition. + +Multiple events may be reported simultaneously via combined bits. Use this function to respond to runtime conditions, such as processing data, handling errors, or updating application state. + +The following events can be signaled: + + + + + + + + + + + + + + + + + +
Parameter \em event_flags Bit Description
\ref VSTREAM_EVENT_DATA 0 Occurs when a new block of incoming data is available + or when a block of outgoing data was streamed out.
\ref VSTREAM_EVENT_OVERFLOW 1 Occurs when a block of data was overwritten because + it was not released in time with \ref vStreamReleaseBlock function.
\ref VSTREAM_EVENT_UNDERFLOW 2 Occurs when a block of outgoing data was not ready + (committed with \ref vStreamReleaseBlock function) before streaming out required it.
\ref VSTREAM_EVENT_EOS 3 Occurs when a streaming interface reached end of stream.
+ +********************************************************************************/ + + +/** +@} +*/ +// End vStream Interface diff --git a/CMSIS/Documentation/Doxygen/Driver/src/vStream_Example.c b/CMSIS/Documentation/Doxygen/Driver/src/vStream_Example.c new file mode 100644 index 000000000..867f9dee7 --- /dev/null +++ b/CMSIS/Documentation/Doxygen/Driver/src/vStream_Example.c @@ -0,0 +1,81 @@ +#include "cmsis_vstream.h" +#include "cmsis_os2.h" +#include "cmsis_compiler.h" + +#include +#include + +// Sensor characteristics +#define SENSOR_DATA_BYTES_PER_SAMPLE (6U) + +// Sensor data usage configuration +#define SENSOR_DATA_SAMPLES_PER_SLICE (100U) + +// Thread flag for signaling sensor data available +#define SENSOR_DATA_READY_FLAG (1U) + +// Raw sensor data sample structure +typedef struct { + int16_t x; + int16_t y; + int16_t z; +} accelerometer_sample_t; + +static uint8_t vstream_buf[(SENSOR_DATA_SAMPLES_PER_SLICE * SENSOR_DATA_BYTES_PER_SAMPLE) * 2] __ALIGNED(4); + +// vStream driver +extern vStreamDriver_t Driver_vStreamAccelerometer; +static vStreamDriver_t *ptrDriver_vStreamAccelerometer = &Driver_vStreamAccelerometer; + +// Thread identifier +osThreadId_t threadId_threadDataProcess = NULL; + +// Local function declaration +__NO_RETURN void threadDataProcess (void *argument); + + +// Function that signals thread event when data is available with vStream +static void vStreamEvent (uint32_t event_flags) { + + if ((event_flags & VSTREAM_EVENT_DATA) != 0U) { + // Inform data processing thread that sensor data is available + osThreadFlagsSet(threadId_threadDataProcess, SENSOR_DATA_READY_FLAG); + } +} + +// Function that initializes vStream for accelerometer +void vStreamInit (void) { + + ptrDriver_vStreamAccelerometer->Initialize(vStreamEvent); + ptrDriver_vStreamAccelerometer->SetBuf(vstream_buf, sizeof(vstream_buf), SENSOR_DATA_SAMPLES_PER_SLICE * SENSOR_DATA_BYTES_PER_SAMPLE); + ptrDriver_vStreamAccelerometer->Start(VSTREAM_MODE_CONTINUOUS); + + threadId_threadDataProcess = osThreadNew(threadDataProcess, NULL, NULL); +} + +// Thread function that processes the sensor data +__NO_RETURN void threadDataProcess (void *argument) { + accelerometer_sample_t *ptr_acc_sample; + (void) argument; + + for (;;) { + uint32_t flags = osThreadFlagsWait(SENSOR_DATA_READY_FLAG, osFlagsWaitAny, osWaitForever); + + if (((flags & osFlagsError) == 0U) && // If not an error and + ((flags & SENSOR_DATA_READY_FLAG) != 0U)) { // if flag is sensor data ready + + // Get pointer to acquired sensor data + ptr_acc_sample = (accelerometer_sample_t *)ptrDriver_vStreamAccelerometer->GetBlock(); + + // Do something with sensor data, convert, copy for ML, ... + // In this example we just print it to STDIO + for (uint32_t i = 0U; i < SENSOR_DATA_SAMPLES_PER_SLICE; i++) { + printf("Acc x=%i, y=%i, z=%i\r\n", ptr_acc_sample->x, ptr_acc_sample->y, ptr_acc_sample->z); + ptr_acc_sample++; + } + } + + // Release current block for further data acquisition + ptrDriver_vStreamAccelerometer->ReleaseBlock(); + } +} diff --git a/CMSIS/Documentation/Doxygen/General/src/revision_history.md b/CMSIS/Documentation/Doxygen/General/src/revision_history.md index 81ed16a27..6028b8c56 100644 --- a/CMSIS/Documentation/Doxygen/General/src/revision_history.md +++ b/CMSIS/Documentation/Doxygen/General/src/revision_history.md @@ -15,6 +15,13 @@ Release history of other CMSIS components and tools can be found in their docume Version Description + + 6.2.0 + + - CMSIS-Driver: 2.11.0 + - Added vStream Driver API 1.0.0 + + 6.1.0 diff --git a/CMSIS/Driver/vStream/Include/cmsis_vstream.h b/CMSIS/Driver/vStream/Include/cmsis_vstream.h new file mode 100644 index 000000000..630a22493 --- /dev/null +++ b/CMSIS/Driver/vStream/Include/cmsis_vstream.h @@ -0,0 +1,122 @@ +/****************************************************************************** + * @file cmsis_vstream.h + * @brief CMSIS Virtual Streaming interface Driver definitions + * @version V1.0.0 + * @date 2. April 2025 + ******************************************************************************/ +/* + * Copyright (c) 2025 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CMSIS_VSTREAM_H_ +#define CMSIS_VSTREAM_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include + +// Virtual Streaming Mode Codes +#define VSTREAM_MODE_CONTINUOUS (0UL) ///< Continuous mode (default) +#define VSTREAM_MODE_SINGLE (1UL) ///< Single-shot mode + +// Virtual Streaming Event Flags +#define VSTREAM_EVENT_DATA (1UL) ///< Data block received/sent +#define VSTREAM_EVENT_OVERFLOW (1UL << 1) ///< Data buffer overflow +#define VSTREAM_EVENT_UNDERFLOW (1UL << 2) ///< Data buffer underflow +#define VSTREAM_EVENT_EOS (1UL << 3) ///< End of stream + +// Virtual Streaming Return Codes +#define VSTREAM_OK (0) ///< Operation succeeded +#define VSTREAM_ERROR (-1) ///< Unspecified error +#define VSTREAM_ERROR_PARAMETER (-2) ///< Parameter error + +// Virtual Streaming Status +typedef struct { + uint32_t active : 1; ///< Streaming active + uint32_t overflow : 1; ///< Data buffer overflow (cleared on GetStatus) + uint32_t underflow : 1; ///< Data buffer underflow (cleared on GetStatus) + uint32_t eos : 1; ///< End Of Stream (cleared on GetStatus) + uint32_t reserved : 28; +} vStreamStatus_t; + +/** + \fn int32_t vStreamInitialize (vStreamEvent_t event_cb) + \brief Initialize Virtual Streaming interface. + \return \ref VSTREAM_OK on success; otherwise, an appropriate error code (see \ref vstream_return_code) + + \fn int32_t vStreamUninitialize (void) + \brief De-initialize Virtual Streaming interface. + \return \ref VSTREAM_OK on success; otherwise, an \ref VSTREAM_ERROR error code (see \ref vstream_return_code) + + \fn int32_t vStreamSetBuf (void *buf, uint32_t buf_size, uint32_t block_size) + \brief Set Virtual Streaming data buffer. + \param[in] buf pointer to memory buffer used for streaming data + \param[in] buf_size total size of the streaming data buffer (in bytes) + \param[in] block_size streaming data block size (in bytes) + \return \ref VSTREAM_OK on success; otherwise, an appropriate error code (see \ref vstream_return_code) + + \fn int32_t vStreamStart (uint32_t mode) + \brief Start streaming. + \param[in] mode streaming mode (see \ref vstream_mode) + \return \ref VSTREAM_OK on success; otherwise, an appropriate error code (see \ref vstream_return_code) + + \fn int32_t vStreamStop (void) + \brief Stop streaming. + \return \ref VSTREAM_OK on success; otherwise, an \ref VSTREAM_ERROR error code (see \ref vstream_return_code) + + \fn void *vStreamGetBlock (void) + \brief Get pointer to Virtual Streaming data block. + \return pointer to data block, returns NULL if no block is available + + \fn int32_t vStreamReleaseBlock (void) + \brief Release Virtual Streaming data block. + \return \ref VSTREAM_OK on success; otherwise, an \ref VSTREAM_ERROR error code (see \ref vstream_return_code) + + \fn vStreamStatus_t vStreamGetStatus (void) + \brief Get Virtual Streaming status. + \return streaming status structure (see \ref vStreamStatus_t) + + \fn void vStreamEvent (uint32_t event_flags) + \brief Callback function for handling Virtual Streaming events. + \param[in] event_flags bitmask indicating one or more streaming events (see \ref vstream_events) +*/ + +typedef void (*vStreamEvent_t) (uint32_t event_flags); ///< Pointer to \ref vStreamEvent : Handling of Virtual Streaming Events. + + +/** +\brief Access structure of the Virtual Streaming interface Driver. +*/ +typedef struct { + int32_t (*Initialize) (vStreamEvent_t event_cb); ///< Pointer to \ref vStreamInitialize : Initialize Virtual Streaming interface. + int32_t (*Uninitialize) (void); ///< Pointer to \ref vStreamUninitialize : De-initialize Virtual Streaming interface. + int32_t (*SetBuf) (void *buf, uint32_t buf_size, uint32_t block_size); ///< Pointer to \ref vStreamSetBuf : Set Virtual Streaming data buffer. + int32_t (*Start) (uint32_t mode); ///< Pointer to \ref vStreamStart : Start streaming. + int32_t (*Stop) (void); ///< Pointer to \ref vStreamStop : Stop streaming. + void * (*GetBlock) (void); ///< Pointer to \ref vStreamGetBlock : Get pointer to data block. + int32_t (*ReleaseBlock) (void); ///< Pointer to \ref vStreamReleaseBlock : Release data block. + vStreamStatus_t (*GetStatus) (void); ///< Pointer to \ref vStreamGetStatus : Get Virtual Streaming status. +} const vStreamDriver_t; + +#ifdef __cplusplus +} +#endif + +#endif /* CMSIS_VSTREAM_H_ */ diff --git a/CMSIS/Driver/vStream/Template/vstream.c b/CMSIS/Driver/vStream/Template/vstream.c new file mode 100644 index 000000000..c8b8a9315 --- /dev/null +++ b/CMSIS/Driver/vStream/Template/vstream.c @@ -0,0 +1,171 @@ +/****************************************************************************** + * @file vstream.c + * @brief CMSIS Virtual Streaming interface Driver implementation template + * @version V1.0.0 + * @date 2. April 2025 + ******************************************************************************/ +/* + * Copyright (c) 2025 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "cmsis_vstream.h" + +#include "RTE_Components.h" +#include CMSIS_device_header + +// Add user includes here: + + +// Variables + +static vStreamEvent_t fn_event_cb; // Event handling callback function + +// Add user types and variables here: + + +// Functions + +// Add user functions here: + +/** + \fn int32_t Initialize (vStreamEvent_t event_cb) + \brief Initialize Virtual Streaming interface. + \return VSTREAM_OK on success; otherwise, an appropriate error code +*/ +static int32_t Initialize (vStreamEvent_t event_cb) { + + // Register event callback function + fn_event_cb = event_cb; + + // Add user code here: + + return VSTREAM_OK; +} + +/** + \fn int32_t Uninitialize (void) + \brief De-initialize Virtual Streaming interface. + \return VSTREAM_OK on success; otherwise, an VSTREAM_ERROR error code +*/ +static int32_t Uninitialize (void) { + + // De-register event callback function + fn_event_cb = NULL; + + // Add user code here: + + return VSTREAM_OK; +} + +/** + \fn int32_t SetBuf (void *buf, uint32_t buf_size, uint32_t block_size) + \brief Set Virtual Streaming data buffer. + \param[in] buf pointer to memory buffer used for streaming data + \param[in] buf_size total size of the streaming data buffer (in bytes) + \param[in] block_size streaming data block size (in bytes) + \return VSTREAM_OK on success; otherwise, an appropriate error code +*/ +static int32_t SetBuf (void *buf, uint32_t buf_size, uint32_t block_size) { + (void)buf; + (void)buf_size; + (void)block_size; + + // Add user code here: + + return VSTREAM_OK; +} + +/** + \fn int32_t Start (uint32_t mode) + \brief Start streaming. + \param[in] mode streaming mode + \return VSTREAM_OK on success; otherwise, an appropriate error code +*/ +static int32_t Start (uint32_t mode) { + + // Check parameters + if ((mode != VSTREAM_MODE_CONTINUOUS) && (mode != VSTREAM_MODE_SINGLE)) { + return VSTREAM_ERROR_PARAMETER; + } + + // Add user code here: + + return VSTREAM_OK; +} + +/** + \fn int32_t Stop (void) + \brief Stop streaming. + \return VSTREAM_OK on success; otherwise, an VSTREAM_ERROR error code +*/ +static int32_t Stop (void) { + + // Add user code here: + + return VSTREAM_OK; +} + +/** + \fn void *GetBlock (void) + \brief Get pointer to Virtual Streaming data block. + \return pointer to data block, returns NULL if no block is available +*/ +static void *GetBlock (void) { + + // Add user code here: + + return NULL; +} + +/** + \fn int32_t ReleaseBlock (void) + \brief Release Virtual Streaming data block. + \return VSTREAM_OK on success; otherwise, an VSTREAM_ERROR error code +*/ +static int32_t ReleaseBlock (void) { + return VSTREAM_OK; +} + +/** + \fn vStreamStatus_t GetStatus (void) + \brief Get Virtual Streaming status. + \return streaming status structure +*/ +static vStreamStatus_t GetStatus (void) { + vStreamStatus_t stat = { 0U, 0U, 0U, 0U, 0U }; + + // Add user code here: + + return stat; +} + + +// Driver structure + +extern \ +vStreamDriver_t Driver_vStreamDevice; +vStreamDriver_t Driver_vStreamDevice = { + Initialize, + Uninitialize, + SetBuf, + Start, + Stop, + GetBlock, + ReleaseBlock, + GetStatus +}; From 79acb0ffa86f6b63cb7a7c5bf889abec1b8cc4ae Mon Sep 17 00:00:00 2001 From: Milorad Cvjetkovic Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 14/22] CMSIS-Driver: Updated vStream Driver API to non-exclusive (#227) --- ARM.CMSIS.pdsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ARM.CMSIS.pdsc b/ARM.CMSIS.pdsc index df24aaeba..7418543db 100644 --- a/ARM.CMSIS.pdsc +++ b/ARM.CMSIS.pdsc @@ -552,7 +552,7 @@ - + Virtual Streaming interface Driver API From 46e5572517a355701f118934522a69f88a4f8a47 Mon Sep 17 00:00:00 2001 From: Vladimir Umek Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 15/22] Define linkage for the vStream and GPIO driver access structure (#231) --- CMSIS/Driver/Include/Driver_GPIO.h | 6 +++--- CMSIS/Driver/vStream/Include/cmsis_vstream.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CMSIS/Driver/Include/Driver_GPIO.h b/CMSIS/Driver/Include/Driver_GPIO.h index e290eca88..c21d41fc8 100644 --- a/CMSIS/Driver/Include/Driver_GPIO.h +++ b/CMSIS/Driver/Include/Driver_GPIO.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 ARM Limited. All rights reserved. + * Copyright (c) 2023-2025 ARM Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -15,7 +15,7 @@ * See the License for the specific language governing permissions and * limitations under the License. * - * $Date: 2. March 2023 + * $Date: 24. April 2025 * $Revision: V1.0 * * Project: GPIO (General-purpose Input/Output) Driver definitions @@ -137,7 +137,7 @@ typedef void (*ARM_GPIO_SignalEvent_t) (ARM_GPIO_Pin_t pin, uint32_t event); /* /** \brief Access structure of the GPIO Driver. */ -typedef struct { +typedef struct _ARM_DRIVER_GPIO { int32_t (*Setup) (ARM_GPIO_Pin_t pin, ARM_GPIO_SignalEvent_t cb_event); ///< Pointer to \ref ARM_GPIO_Setup : Setup GPIO Interface. int32_t (*SetDirection) (ARM_GPIO_Pin_t pin, ARM_GPIO_DIRECTION direction); ///< Pointer to \ref ARM_GPIO_SetDirection : Set GPIO Direction. int32_t (*SetOutputMode) (ARM_GPIO_Pin_t pin, ARM_GPIO_OUTPUT_MODE mode); ///< Pointer to \ref ARM_GPIO_SetOutputMode : Set GPIO Output Mode. diff --git a/CMSIS/Driver/vStream/Include/cmsis_vstream.h b/CMSIS/Driver/vStream/Include/cmsis_vstream.h index 630a22493..00a3513fc 100644 --- a/CMSIS/Driver/vStream/Include/cmsis_vstream.h +++ b/CMSIS/Driver/vStream/Include/cmsis_vstream.h @@ -104,7 +104,7 @@ typedef void (*vStreamEvent_t) (uint32_t event_flags); ///< Pointer to \ref vSt /** \brief Access structure of the Virtual Streaming interface Driver. */ -typedef struct { +typedef struct vStreamDriver_s { int32_t (*Initialize) (vStreamEvent_t event_cb); ///< Pointer to \ref vStreamInitialize : Initialize Virtual Streaming interface. int32_t (*Uninitialize) (void); ///< Pointer to \ref vStreamUninitialize : De-initialize Virtual Streaming interface. int32_t (*SetBuf) (void *buf, uint32_t buf_size, uint32_t block_size); ///< Pointer to \ref vStreamSetBuf : Set Virtual Streaming data buffer. From 77d7f5169b8190a8eb1b2f81b68848bf81e12b04 Mon Sep 17 00:00:00 2001 From: Markus Klein <46537402+Masmiseim36@users.noreply.github.com> Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 16/22] Fix documentation of the Register HPPIR_INTID (#233) Fix documentation of the Register HPPIR_INTID according to "ARM Generic Interrupt Controller Architecture version 2.0 Architecture Specification" Table 4-41 GICC_HPPIR bit assignments ![409053189-dfa13d3e-1650-489b-a8f2-b061ac9afe17](https://github.com/user-attachments/assets/919edcce-ce77-450b-8839-af6555f2249a) --- CMSIS/Documentation/Doxygen/Core_A/src/ref_gic.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMSIS/Documentation/Doxygen/Core_A/src/ref_gic.txt b/CMSIS/Documentation/Doxygen/Core_A/src/ref_gic.txt index e05bb63f5..6a6293c49 100644 --- a/CMSIS/Documentation/Doxygen/Core_A/src/ref_gic.txt +++ b/CMSIS/Documentation/Doxygen/Core_A/src/ref_gic.txt @@ -296,8 +296,9 @@ includes control of the end of interrupt (EOI) behavior. | Bits | Name | Function | | :------ | :------------ | :------------------------------------------------------------- | -| [31:24] | - | Reserved. | -| [23:0] | INTID | The INTID of the signaled interrupt. | +| [31:13] | - | Reserved. | +| [12:10] | CPUID | On a multiprocessor implementation this identifies the processor that generated the interrupt | +| [9:0] | INTID | The INTID of the signaled interrupt. | \var __IM uint32_t GICInterface_Type::IIDR \details CPU Interface Identification Register From b14ccfcf0c0a8db8ed950ee1ad74f25d32e6c671 Mon Sep 17 00:00:00 2001 From: Nikolay Markovich Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 17/22] Update core_ca.h (#216) --- CMSIS/Core/Include/core_ca.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CMSIS/Core/Include/core_ca.h b/CMSIS/Core/Include/core_ca.h index 85da3030c..a8fa9a7cd 100644 --- a/CMSIS/Core/Include/core_ca.h +++ b/CMSIS/Core/Include/core_ca.h @@ -641,13 +641,13 @@ typedef union uint32_t w; /*!< \brief Type used for word access */ } ISR_Type; -#define ISR_A_Pos 13U /*!< \brief ISR: A Position */ +#define ISR_A_Pos 8U /*!< \brief ISR: A Position */ #define ISR_A_Msk (1UL << ISR_A_Pos) /*!< \brief ISR: A Mask */ -#define ISR_I_Pos 12U /*!< \brief ISR: I Position */ +#define ISR_I_Pos 7U /*!< \brief ISR: I Position */ #define ISR_I_Msk (1UL << ISR_I_Pos) /*!< \brief ISR: I Mask */ -#define ISR_F_Pos 11U /*!< \brief ISR: F Position */ +#define ISR_F_Pos 6U /*!< \brief ISR: F Position */ #define ISR_F_Msk (1UL << ISR_F_Pos) /*!< \brief ISR: F Mask */ /* DACR Register */ @@ -918,7 +918,7 @@ typedef struct /* GICDistributor SGIR Register */ #define GICDistributor_SGIR_INTID_Pos 0U /*!< GICDistributor SGIR: INTID Position */ -#define GICDistributor_SGIR_INTID_Msk (0x7U /*<< GICDistributor_SGIR_INTID_Pos*/) /*!< GICDistributor SGIR: INTID Mask */ +#define GICDistributor_SGIR_INTID_Msk (0xFU /*<< GICDistributor_SGIR_INTID_Pos*/) /*!< GICDistributor SGIR: INTID Mask */ #define GICDistributor_SGIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_SGIR_INTID_Pos*/)) & GICDistributor_SGIR_INTID_Msk) #define GICDistributor_SGIR_NSATT_Pos 15U /*!< GICDistributor SGIR: NSATT Position */ @@ -1015,7 +1015,7 @@ typedef struct /* GICInterface HPPIR Register */ #define GICInterface_HPPIR_INTID_Pos 0U /*!< PTIM HPPIR: INTID Position */ -#define GICInterface_HPPIR_INTID_Msk (0xFFFFFFU /*<< GICInterface_HPPIR_INTID_Pos*/) /*!< PTIM HPPIR: INTID Mask */ +#define GICInterface_HPPIR_INTID_Msk (0x3FFU /*<< GICInterface_HPPIR_INTID_Pos*/) /*!< PTIM HPPIR: INTID Mask */ #define GICInterface_HPPIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_HPPIR_INTID_Pos*/)) & GICInterface_HPPIR_INTID_Msk) /* GICInterface ABPR Register */ @@ -1077,8 +1077,8 @@ typedef struct #define GICInterface_IIDR_ProductID(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_IIDR_ProductID_Pos)) & GICInterface_IIDR_ProductID_Msk) /* GICInterface DIR Register */ -#define GICInterface_DIR_INTID_Pos 0U /*!< PTIM DIR: INTID Position */ -#define GICInterface_DIR_INTID_Msk (0xFFFFFFU /*<< GICInterface_DIR_INTID_Pos*/) /*!< PTIM DIR: INTID Mask */ +#define GICInterface_DIR_INTID_Pos 0U /*!< GICInterface DIR: INTID Position */ +#define GICInterface_DIR_INTID_Msk (0xFFFFFFU /*<< GICInterface_DIR_INTID_Pos*/) /*!< GICInterface DIR: INTID Mask */ #define GICInterface_DIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_DIR_INTID_Pos*/)) & GICInterface_DIR_INTID_Msk) #endif /* (__GIC_PRESENT == 1U) || defined(DOXYGEN) */ From d8cc22e3d6ffb8d0a0cf03ab280a9ae77db0d1b9 Mon Sep 17 00:00:00 2001 From: Milorad Cvjetkovic Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 18/22] CMSIS-Driver: Minor update to vStream Driver API documentation (#238) --- CMSIS/Documentation/Doxygen/Driver/src/vStream.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CMSIS/Documentation/Doxygen/Driver/src/vStream.txt b/CMSIS/Documentation/Doxygen/Driver/src/vStream.txt index 627191e8c..36419805d 100644 --- a/CMSIS/Documentation/Doxygen/Driver/src/vStream.txt +++ b/CMSIS/Documentation/Doxygen/Driver/src/vStream.txt @@ -287,7 +287,7 @@ void *vStreamGetBlock (void) { return NULL; } /** \fn void *vStreamGetBlock (void) \details -This function provides access to the current data block used for input or output operations, +This function provides access to the data block used for input or output operations, depending on the streaming direction. - For input streams (receiving data): returns a pointer to the oldest unread data block. @@ -331,12 +331,12 @@ int32_t vStreamReleaseBlock (void) { return VSTREAM_OK; } /** \fn int32_t vStreamReleaseBlock (void) \details -This function finalizes the use of the current data block returned by \ref vStreamGetBlock. +This function finalizes the use of the data block returned by \ref vStreamGetBlock. - For input streams: marks the block as processed, making it available for reuse by the driver. - For output streams: commits the block for transmission, indicating that the data is ready to be streamed out. -This function must be called after processing or preparing each data block to maintain proper buffer flow and avoid data loss or stalling. +This function must be called after processing or preparing the data block returned by \ref vStreamGetBlock to maintain proper buffer flow and avoid data loss or stalling. Code Example: \code @@ -435,8 +435,8 @@ The following events can be signaled: or when a block of outgoing data was streamed out. - \ref VSTREAM_EVENT_OVERFLOW 1 Occurs when a block of data was overwritten because - it was not released in time with \ref vStreamReleaseBlock function. + \ref VSTREAM_EVENT_OVERFLOW 1 Occurs when a block of incoming data begins to be overwritten + because it was not released in time using the \ref vStreamReleaseBlock function. \ref VSTREAM_EVENT_UNDERFLOW 2 Occurs when a block of outgoing data was not ready From 7854cdd5bcb057e9c09677be80be50e91f2cee05 Mon Sep 17 00:00:00 2001 From: Jonatan Antoni Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 19/22] Bump component version of CMSIS-Core to 6.1.1 --- ARM.CMSIS.pdsc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ARM.CMSIS.pdsc b/ARM.CMSIS.pdsc index 7418543db..595091e2c 100644 --- a/ARM.CMSIS.pdsc +++ b/ARM.CMSIS.pdsc @@ -651,7 +651,7 @@ - + CMSIS-CORE for Cortex-M, SC000, SC300, Star-MC1, ARMv8-M, ARMv8.1-M @@ -664,7 +664,7 @@ - + CMSIS-CORE for Cortex-A From 0b03607481fef376d4671e2084f3ff62de43b5d2 Mon Sep 17 00:00:00 2001 From: Jonatan Antoni Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 20/22] Bump CMSIS-Core documentation version and history --- CMSIS/Documentation/Doxygen/Core/Core.dxy.in | 2 +- .../Documentation/Doxygen/Core/src/history.md | 41 ++++++++++++------- .../Doxygen/Core_A/Core_A.dxy.in | 2 +- .../Doxygen/Core_A/src/history.md | 13 ++++++ 4 files changed, 42 insertions(+), 16 deletions(-) diff --git a/CMSIS/Documentation/Doxygen/Core/Core.dxy.in b/CMSIS/Documentation/Doxygen/Core/Core.dxy.in index 760faf32c..6873f6540 100644 --- a/CMSIS/Documentation/Doxygen/Core/Core.dxy.in +++ b/CMSIS/Documentation/Doxygen/Core/Core.dxy.in @@ -47,7 +47,7 @@ PROJECT_NAME = "CMSIS-Core (Cortex-M)" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "Version 6.1.0" +PROJECT_NUMBER = "Version 6.1.1" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/CMSIS/Documentation/Doxygen/Core/src/history.md b/CMSIS/Documentation/Doxygen/Core/src/history.md index 948f73fe7..e039d154f 100644 --- a/CMSIS/Documentation/Doxygen/Core/src/history.md +++ b/CMSIS/Documentation/Doxygen/Core/src/history.md @@ -9,6 +9,19 @@ The table below provides information about the changes delivered with specific v Version Description + + V6.1.1 + +

Minor fixes and enhancements:

+
    +
  • Fixed CMSIS_DEPRECATED for IAR
  • +
  • Added LAR, LSR register to DWT
  • +
  • Add CMSIS-R for IAR
  • +
  • Added BPU for Star-MC1
  • +
  • Add CPPWR SU10/11 for Cortex-M55/-M85
  • +
+ + V6.1.0 @@ -384,9 +397,9 @@ The table below provides information about the changes delivered with specific v In summary, following types of incompatible changes are present: - - struct member is renamed in an existing structure (e.g. NVIC->PR -> NVIC->IPR) - - struct name is changed (e.g. CoreDebug_Type -> DCB_Type) - - define name is changed (e.g. CoreDebug_DEMCR_TRCENA_Msk -> DCB_DEMCR_TRCENA_Msk) +- struct member is renamed in an existing structure (e.g. NVIC->PR -> NVIC->IPR) +- struct name is changed (e.g. CoreDebug_Type -> DCB_Type) +- define name is changed (e.g. CoreDebug_DEMCR_TRCENA_Msk -> DCB_DEMCR_TRCENA_Msk) For the latest two types, CMSIS-Core v6.1 and higher provide also the original CMSIS 5 symbols as deprecated and so improve the backward compatibility. See section \ref deprecated_gr. @@ -419,10 +432,10 @@ Below is detailed information about the changes relevant for each Cortex-M core. - define names for ITM_TCR_* changed - define names for ITM_LSR_* changed - struct TPI_Type renamed to TPIU_Type -- define names for TPI_* renamed to TPIU_* +- define names for TPI_*renamed to TPIU_* - define names for FPU_MVFR0/1_* changed (Cortex-M4) - struct CoreDebug_Type renamed to DCB_Type -- defines for CoreDebug_* renamed to DCB_* +- defines for CoreDebug_*renamed to DCB_* **Cortex-M7:** @@ -435,10 +448,10 @@ Below is detailed information about the changes relevant for each Cortex-M core. - define names for ITM_TCR_* changed - define names for ITM_LSR_* changed - struct TPI_Type renamed to TPIU_Type -- define names for TPI_* renamed to TPIU_* +- define names for TPI_*renamed to TPIU_* - define names for FPU_MVFR0/1_* changed - struct CoreDebug_Type renamed to DCB_Type -- defines for CoreDebug_* renamed to DCB_* +- defines for CoreDebug_*renamed to DCB_* **Cortex-M23:** @@ -446,9 +459,9 @@ Below is detailed information about the changes relevant for each Cortex-M core. - member RESERVED0[6] replaced by CYCCNT, CPICNT, EXCCNT, SLEEPCNT, LSUCNT, FOLDCNT - other RESERVED members mainly removed - struct TPI_Type renamed to TPIU_Type -- define names for TPI_* renamed to TPIU_* +- define names for TPI_*renamed to TPIU_* - struct CoreDebug_Type removed (struct DCB_Type already existed) -- defines CoreDebug_* removed (defines DCB_* already existed) +- defines CoreDebug_*removed (defines DCB_* already existed) **Cortex-M33:** @@ -456,10 +469,10 @@ Below is detailed information about the changes relevant for each Cortex-M core. - members LAR, LSR removed - members PIDx and CIDx removed - struct TPI_Type renamed to TPIU_Type -- define names for TPI_* renamed to TPIU_* +- define names for TPI_*renamed to TPIU_* - define names for FPU_MVFR0/1_* changed - struct CoreDebug_Type removed (struct DCB_Type already existed) -- defines CoreDebug_* removed (defines DCB_* already existed) +- defines CoreDebug_*removed (defines DCB_* already existed) **Cortex-M55, Cortex-M85:** @@ -473,11 +486,11 @@ Below is detailed information about the changes relevant for each Cortex-M core. - define names EWIC_* changed - struct TPI_Type renamed to TPIU_Type - members LAR, LSR replaced -- define names for TPI_* renamed to TPIU_* +- define names for TPI_*renamed to TPIU_* - struct PMU_Type - members PIDx and CIDx removed - struct CoreDebug_Type removed (struct DCB_Type already existed) -- defines CoreDebug_* removed (defines DCB_* already existed) +- defines CoreDebug_*removed (defines DCB_* already existed) - struct DIB_Type - members DLAR, DLSR removed (replaced by RESERVED0[2]) -- defines for DIB_DLAR_* and DIB_DLSR_* removed +- defines for DIB_DLAR_*and DIB_DLSR_* removed diff --git a/CMSIS/Documentation/Doxygen/Core_A/Core_A.dxy.in b/CMSIS/Documentation/Doxygen/Core_A/Core_A.dxy.in index ca8d3b66f..7d516e411 100644 --- a/CMSIS/Documentation/Doxygen/Core_A/Core_A.dxy.in +++ b/CMSIS/Documentation/Doxygen/Core_A/Core_A.dxy.in @@ -47,7 +47,7 @@ PROJECT_NAME = "CMSIS-Core (Cortex-A)" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "Version 6.1.0" +PROJECT_NUMBER = "Version 6.1.1" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/CMSIS/Documentation/Doxygen/Core_A/src/history.md b/CMSIS/Documentation/Doxygen/Core_A/src/history.md index dd43751a9..746b1aa6c 100644 --- a/CMSIS/Documentation/Doxygen/Core_A/src/history.md +++ b/CMSIS/Documentation/Doxygen/Core_A/src/history.md @@ -9,6 +9,19 @@ The table below provides information about the changes delivered with specific v Version Description + + V6.1.1 + +

Minor fixes and enhancements:

+
    +
  • Fixed CMSIS_DEPRECATED for IAR
  • +
  • Added LAR, LSR register to DWT
  • +
  • Add CMSIS-R for IAR
  • +
  • Added BPU for Star-MC1
  • +
  • Add CPPWR SU10/11 for Cortex-M55/-M85
  • +
+ + V6.1.0 From bde0b68dbdf6d207a42a4abb0721086bd758d707 Mon Sep 17 00:00:00 2001 From: Robin Kastberg Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 21/22] IAR __get_SP_usr/__set_SP_usr fix (#241) Inline assembler constraints were incorrect Signed-off-by: Robin Kastberg --- CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h | 8 ++++---- CMSIS/Core/Include/r-profile/cmsis_iccarm_r.h | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h b/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h index 8b61c6d8c..91c922308 100644 --- a/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h +++ b/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h @@ -67,8 +67,8 @@ __IAR_FT uint32_t __get_SP_usr(void) "MRS %0, cpsr \n" "CPS #0x1F \n" // no effect in USR mode "MOV %1, sp \n" - "MSR cpsr_c, %2 \n" // no effect in USR mode - "ISB" : "=r"(cpsr), "=r"(result) : "r"(cpsr) : "memory" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "+r"(cpsr), "=r"(result) :: "memory" ); return result; } @@ -80,8 +80,8 @@ __IAR_FT void __set_SP_usr(uint32_t topOfProcStack) "MRS %0, cpsr \n" "CPS #0x1F \n" // no effect in USR mode "MOV sp, %1 \n" - "MSR cpsr_c, %2 \n" // no effect in USR mode - "ISB" : "=r"(cpsr) : "r" (topOfProcStack), "r"(cpsr) : "memory" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "+r"(cpsr) : "r" (topOfProcStack) : "memory" ); } diff --git a/CMSIS/Core/Include/r-profile/cmsis_iccarm_r.h b/CMSIS/Core/Include/r-profile/cmsis_iccarm_r.h index 392c4e86f..0f3963c0d 100644 --- a/CMSIS/Core/Include/r-profile/cmsis_iccarm_r.h +++ b/CMSIS/Core/Include/r-profile/cmsis_iccarm_r.h @@ -69,10 +69,10 @@ __IAR_FT uint32_t __get_SP_usr(void) { __ASM volatile("MRS %0, cpsr \n" "CPS #0x1F \n" // no effect in USR mode "MOV %1, sp \n" - "MSR cpsr_c, %2 \n" // no effect in USR mode + "MSR cpsr_c, %0 \n" // no effect in USR mode "ISB" - : "=r"(cpsr), "=r"(result) - : "r"(cpsr) + : "+r"(cpsr), "=r"(result) + : : "memory"); return result; } @@ -84,8 +84,8 @@ __IAR_FT void __set_SP_usr(uint32_t topOfProcStack) { "MOV sp, %1 \n" "MSR cpsr_c, %2 \n" // no effect in USR mode "ISB" - : "=r"(cpsr) - : "r"(topOfProcStack), "r"(cpsr) + : "+r"(cpsr) + : "r"(topOfProcStack) : "memory"); } From dccc7a5cb119a1b965783e370b3c8b2ff475b44d Mon Sep 17 00:00:00 2001 From: Robin Kastberg Date: Fri, 20 Jun 2025 19:29:11 +0200 Subject: [PATCH 22/22] IAR LDR{,B,H}T fix (#242) Inline assembler constraints were incorrect. Signed-off-by: Robin Kastberg --- CMSIS/Core/Include/cmsis_iccarm.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMSIS/Core/Include/cmsis_iccarm.h b/CMSIS/Core/Include/cmsis_iccarm.h index 1628446c6..722126e34 100644 --- a/CMSIS/Core/Include/cmsis_iccarm.h +++ b/CMSIS/Core/Include/cmsis_iccarm.h @@ -348,21 +348,21 @@ __STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) __IAR_FT uint8_t __LDRBT(volatile uint8_t *addr) { uint32_t res; - __ASM volatile ("LDRBT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + __ASM volatile ("LDRBT %0, [%1]" : "=&r" (res) : "r" (addr) : "memory"); return ((uint8_t)res); } __IAR_FT uint16_t __LDRHT(volatile uint16_t *addr) { uint32_t res; - __ASM volatile ("LDRHT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + __ASM volatile ("LDRHT %0, [%1]" : "=&r" (res) : "r" (addr) : "memory"); return ((uint16_t)res); } __IAR_FT uint32_t __LDRT(volatile uint32_t *addr) { uint32_t res; - __ASM volatile ("LDRT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + __ASM volatile ("LDRT %0, [%1]" : "=&r" (res) : "r" (addr) : "memory"); return res; }