CMSIS  版本 5.3.0
Cortex 微控制器软件接口标准
介绍

Cortex 微控制器软件接口标准 (CMSIS) 是 Cortex®-M 系列处理器的独立于供应商的硬件抽象层,并定义了通用工具接口。CMSIS 支持一致的设备支持和与处理器和外设的简单软件接口,简化软件重用,减少微控制器开发人员的学习曲线,并缩短新设备的上市时间。

CMSIS 的定义与各种芯片和软件供应商密切合作,提供了一种通用的方法来连接外设,实时操作系统和中间件组件。CMSIS 旨在支持来自多个中间件供应商的软件组件的组合。

CMSIS 版本 5 还支持 Armv8-M 架构 包括用于 Armv8-M 硬件安全扩展的 TrustZone® 以及 Cortex-M23Cortex-M33 处理器。

CMSIS 组件是:

  • CMSIS-Core (Cortex-M): Cortex-M 处理器内核和外设的 API。它为 Cortex-M0,Cortex-M0+,Cortex-M3,Cortex-M4,Cortex-M7,Cortex-M23,Cortex-M33,SC000 和 SC300 提供了标准化接口。还包括用于 Cortex-M4,Cortex-M7 和 Cortex-M33 SIMD 指令的 SIMD 固有功能。
  • CMSIS-Core (Cortex-A): API和Cortex-A5 / A7 / A9处理器内核和外设的基本运行时系统。
  • CMSIS-Driver: 为中间件定义通用外设驱动程序接口,使其可在所支持的设备之间重复使用。该 API 与 RTOS 无关,并将微控制器外围设备与实现通信协议栈,文件系统或图形用户界面的中间件相连接。
  • CMSIS-DSP: DSP 库集合,包含超过 60 种用于各种数据类型的函数:定点(小数 q7,q15,q31)和单精度浮点(32 位)。该库适用于所有 Cortex-M 内核。针对 SIMD 指令集优化的实现可用于 Cortex-M4,Cortex-M7 和 Cortex-M33。
  • CMSIS-NN: CMSIS-NN 是一组高效的神经网络内核,旨在最大限度地提高性能并最大限度地减少 Cortex-M 处理器内核上的神经网络的内存占用。
  • CMSIS-RTOS v1: 实时操作系统的通用 API 以及基于 RTX 的参考实现。它提供了一个标准化的编程接口,可以移植到许多 RTOS,并支持可在多个 RTOS 系统上工作的软件组件。
  • CMSIS-RTOS v2: 扩展了 CMSIS-RTOS v1,支持 Armv8-M 体系结构,动态对象创建,多核系统规定以及跨 ABI 兼容编译器的二进制兼容接口。
  • CMSIS-Pack: 使用基于 XML 的软件包描述(PDSC)文件描述文件集合(称为软件包)的用户和设备相关部分,该文件集合包括源代码,头文件和库文件,文档,Flash 编程算法,源代码模板和示例项目。开发工具和 Web 基础架构使用 PDSC 文件来提取设备参数,软件组件和评估板配置。
  • CMSIS-SVD: 系统视图说明外设。在 XML 文件中描述设备的外围设备,可用于在调试器或带有外设寄存器和中断定义的头文件中创建外设感知功能。
  • CMSIS-DAP: 调试访问端口。调试单元的标准化固件,连接到 CoreSight 调试访问端口。CMSIS-DAP 作为单独的软件包进行分发,非常适合在评估板上集成。该组件作为单独的下载提供。
  • CMSIS-Zone: 系统资源定义和分区。定义描述系统资源的方法并将这些资源分区到多个项目和执行区域。
注意
有关该软件包的内容的更多信息,请参阅 ARM::CMSIS Pack
Overview.png
CMSIS 构成

目标

CMSIS 的创建旨在帮助行业进行标准化。它可以在各种开发工具和微控制器上实现一致的软件层和器件支持。CMSIS 不是一个巨大的软件层,它引入了开销并且没有定义标准的外围设备。因此,硅工业可以通过这个通用标准支持各种基于 Cortex-M 处理器的器件。

详细的 CMSIS 的好处是:

  • 总体 CMSIS 降低了学习曲线,开发成本和上市时间。开发人员可以通过各种易用,标准化的软件界面更快地编写软件。
  • 一致的软件界面改善了软件的可移植性和可重用性。通用软件库和接口提供一致的软件框架。
  • 为调试连接,调试外设视图,软件交付和设备支持提供接口,以缩短新微控制器部署的上市时间。
  • 提供一个编译器独立层,允许使用不同的编译器。CMSIS 由主流编译器支持。
  • 通过调试器和 ITM 通道的外设信息增强程序调试,实现 printf 式输出和 RTOS 内核意识。
  • CMSIS 以 CMSIS-Pack 格式提供,可实现快速软件交付,简化更新并实现与开发工具的一致集成。
  • CMSIS-Zone 将简化系统资源和分区,因为它管理多个处理器,内存区域和外围设备的配置。

编码规则

CMSIS 使用以下基本编码规则和约定:

  • 符合 ANSI C(C99)和 C++(C++ 03)。
  • 使用 <stdint.h> 中定义的 ANSI C 标准数据类型。
  • 变量和参数具有完整的数据类型。
  • #define 常量的表达式括在括号中。
  • 符合 MISRA 2012(但不声称符合 MISRA)。记录 MISRA 规则违规。

另外,CMSIS 为标识符推荐以下约定:

  • CAPITAL 用于标识内核寄存器,外设寄存器和 CPU 指令的名称。
  • CamelCase 名称来标识函数名称和中断函数。
  • Namespace_ 前缀避免与用户标识冲突并提供功能组(即用于外设,RTOS 或 DSP 库)。

CMSIS 记录在源文件中:

  • 使用 C 或 C++ 风格的注释。
  • 符合 Doxygen 标准的功能注释提供:
    • 简要功能概述。
    • 功能的详细说明。
    • 详细的参数说明。
    • 有关返回值的详细信息。

Doxygen 注释示例:

/** 
 * @brief  Enable Interrupt in NVIC Interrupt Controller
 * @param  IRQn  interrupt number that specifies the interrupt
 * @return none.
 * Enable the specified interrupt in the NVIC Interrupt Controller.
 * Other settings of the interrupt such as priority are not affected.
 */

验证

使用主流编译器验证 CMSIS 版本 5 的各个组件。为了获得多样化的覆盖范围,Arm 在各种测试中使用 Arm Compiler v5(基于 EDG 前端),Arm Compiler v6(基于 LLVM 前端)和 GCC Compiler。对于每个组件,“验证”部分描述了各种验证的范围。

CMSIS 组件与一系列 C 和 C++ 语言标准兼容。CMSIS 组件符合 Arm 架构应用程序二进制接口(ABI) (例外 CMSIS-RTOS v1)。这确保 C API 接口支持各种工具链之间的互操作。

由于 CMSIS 定义了扩展到各种处理器和设备的 API 接口和函数,因此运行时测试覆盖范围有限。但是,使用专用测试套件验证了几个组件。

使用 PC-Lint 检查 CMSIS 源代码是否符合 MISRA C:2012 标准。MISRA 偏差记录在合理的努力中,但是 Arm 没有声明 MISRA 合规性,因为如今没有指导性执行计划。由于 CMSIS 源代码存在与 C 语言标准不兼容的风险,特别是各种 C 编译器可能产生的警告,因此不会检查 CMSIS 源代码。

许可证

CMSIS 由 Apache 根据 Apache 2.0 许可免费提供。查看 Apache 2.0 许可证

ARM::CMSIS 包

ARM::CMSIS 包包含以下内容:

文件/目录内容
ARM.CMSIS.pdsc 软件包描述文件采用 CMSIS-Pack 格式。
LICENSE.txt CMSIS 许可协议(Apache 2.0)
CMSIS CMSIS 组件 (见下文)
Device 基于 ARM Cortex-M 处理器的 CMSIS 参考实现

CMSIS 目录

目录内容
Documentation 本文档
Core 用于 CMSIS-Core (Cortex-M) 相关文件的用户代码模板,在 ARM.CMSIS.PDSC 中引用
Core_A 用于 CMSIS-Core (Cortex-A) 相关文件的用户代码模板,在 ARM.CMSIS.PDSC 中引用
DAP CMSIS-DAP 调试访问端口源代码和参考实现
Driver CMSIS-Driver 外围接口 API 的头文件
DSP_Lib CMSIS-DSP 软件库源代码
NN CMSIS-NN 软件库源代码
Include 包含 CMSIS-Core (Cortex-M)CMSIS-DSP 的头文件
Lib CMSIS-DSP 为 ARMCC 和 GCC 生成库
Pack CMSIS-Pack 示例
RTOS CMSIS-RTOS 版本 1 以及 RTX 参考实现
RTOS2 CMSIS-RTOS 版本 2 以及 RTX 参考实现
SVD CMSIS-SVD 示例
Utilities PACK.xsd (CMSIS-Pack 模式文件), PackChk.exe (软件包检查工具),
CMSIS-SVD.xsd (CMSIS-SVD 模式文件), SVDConv.exe (用于 SVD 文件的转换工具)