cortex 微控制器软件接口标准( CMSIS )

 简而言之: CMSIS 定义了一套 API,应用层代码调用这套API。微控制器厂商完成 API 的实现。

CMSIS 项目仍在不断更新,它开始是为了 cortex-M 微控制器的设备驱动库建立一致性,现在已经成为了 CMSIS-Core,其他的 CMSISI 项目也已经启动:

  • CMSIS-Core(cortex-M 处理器支持)。应用程序或者中间件开发者用的一组 API,可以访问 cortex-M 处理器的特性,无需考虑使用的是何种微控制器或者工具链。CMSIS 目前支持 cortex-M0、cortex-M0+、cortex-M3 和 cortex-M4 处理器以及 SC00 和 SC300 等 SecureCore 产品。由于架构相同,cortex-M1 可以使用 cortex-M0 版本的 CMSIS
  • CMSIS-DSP库。
  • CMSIS-SVD。
  • CMSIS-RTOS。定义了一套 OS 相关的 API,比如信号量、创建线程等。因为 freeRTOS 和 ucos 都有自己的一套 API,如果用 freeRTOS 或者 ucos 的 API 实现 CMSIS-RTOS 的 API,然后应用层代码都是调用 CMSIS-RTOS 的 API,这样就增强应用层代码的可移植性。
  • CMSIS-DAP。

CMSISI-Core 所做的标准化:

1、处理器外设的标准化。比如嵌套向量中断控制器(NVIC)中的寄存器、系统控制块(SCB)中的多个可编程寄存器等

2、访问处理器特性的标准化函数。包括使用 NVIC 进行中断控制的多个函数以及访问处理器中特殊寄存器的函数。

3、操作特殊指令的标准化函数。cortex-M 处理器支持几个用于特殊目的的指令(例如等待中断WFI、用于进入休眠模式)。CMSIS 实现了一组函数,C 程序代码可以利用这些函数实现特殊指令。

4、系统异常处理的标准化命名。

5、系统初始化的标准函数。在应用程序开始前需要配置时钟电路和电源管理寄存器,在符合 CMSIS 的设备驱动库中,这些配置过程由 SystemInit() 实现。

6、描述时钟频率的标准化变量。

CMSIS-Core 的组织结构:

如何使用 CMSIS-Core 

1、将源文件添加到工程中,包括:

  • 设备相关、工具链相关的启动代码
  • 设备相关的设备初始化代码(如 system_<device>.c)
  • 对于 CMSIS-Core 库的 CMSIS 2.00 或者之前版本,为了访问内核寄存器,还需要将处理器相关的 C 程序文件(如 core_cm3.c)添加到工程中,从 CMSIS-Core 版本 2.10 开始就不再需要了

2、将头文件添加到搜索路径中

  • 用于外设寄存器定义和中断分配定义的设备相关的头文件(如 <device>.h)
  • 用于设备初始化代码的设备相关的头文件(如 system_<device>.h)
  • 多个处理器相关的头文件(如 core_cm3.h、core_cm4.h,它们对于所有的微控制器供应商都是相同的)

原文地址:https://www.cnblogs.com/god-of-death/p/14944579.html