1.CMSIS的代码
书里给的5,https://github.com/ARM-software/CMSIS_5
现在有6了,https://github.com/ARM-software/CMSIS_6
这是官网的书,介绍cmsis函数的https://arm-software.github.io/CMSIS_5/Core/html/index.html
2.CMSIS介绍
Cortex-M系列ARM处理器在嵌入式系统中得到广泛应用,不同的Cortex-M ARM处理器配备不同的外部控制器,但执行二进制指令的核心是相同的。为了提高这一系列ARM处理器软件的开发效率,ARM公司从2008年开始,推动并开发了CMSIS软件接口标准。CMSIS是Cortex Microcontroller Software Interface Standard的首字母缩写,它的英文全称表明CMSIS主要面向Cortex-M系列ARM处理器,但现有的CMSIS软件包也提供了少量针对Cortex-A5/A7/A9系列ARM处理器的内容。
3.CMSIS子模块
·CMSIS-Core
CMSIS-Core提供ARM处理器启动时最初运行的代码、处理器内部单元的访问代码以及外设控制器部分代码。这些代码包括处理器、寄存器的基本配置,默认的中断服务程序的代码,时钟中断设置等。这部分代码为后续的软件执行提供一个最基本的运行环境。
·CMSIS-DAP
CMSIS-DAP中的DAP来自英文Debug Access Port的首字母。它规定了ARM处理器和调试器的统一接口,包括调试控制命令、数据格式等信息。CMSIS-DAP同时包括了ARM处理器调试控制固件(firmware)的具体实现,它使得PC端的调试软件通过USB口和ARM处理器通信,并执行调试任务。利用CMSIS-DAP提供的固件可以快速实现一个Cortex处理器的仿真器硬件,如图8-2所示。
关于CMSIS-DAP的细节,请参照https://arm-software.github.io/CMSIS_5,我们在这里不详细展开。
·CMSIS-Zone
对于复杂的ARM处理器架构以及多核ARM处理器,不同软件模块运行在相互分离的不同“空间”。这里的“空间”就是英文单词Zone,它包括了软件模块运行的地址访问范围以及能够访问的外围控制器集合两部分。CMSIS-Zone定义了用于描述不同空间的文件格式,并提供图形化的界面生成这些描述文件。而这些描述文件能够进一步被自动代码生成工具使用,生成各种程序源代码,包括编译链接脚本文件、地址空间定义的头文件、CPU启动时刻的初始化代码、C/C++代码框架等。
·CMSIS-RTOS
CMSIS-RTOS是实时操作系统(Real Time Operating System,RTOS)的接口API,它本身不是RTOS,需要和第三方提供的RTOS一起使用,但它为上层应用提供名称统一的API接口,通过这些API调用底层不同类型操作系统的服务。使用CMSIS-RTOS定义的API接口,使得运行在操作系统上的用户应用程序可以和底层操作系统的类型“无关”,方便应用程序移植到兼容CMSIS-RTOS的不同实时操作系统上。图8-3所示是基于CMSIS-RTOS架构的示意图。
·CMSIS-NN
CMSIS-NN包括和神经网络相关的数学运算代码,其中一部分运算基于CMSIS-DSP实现。它具体包括了神经网络卷积层的卷积运算、激活函数运算、神经网络全连接层的计算、softmax运算等。
·CMSIS-DSP
CMSIS-DSP包括一系列数学运算的实现代码,用于各类信号处理应用,内容包括快速算法、复数运算、矩阵运算、时域/频域变换运算、数据统计、插值等数学运算。它同时也包括和应用相关的滤波运算和电机控制代码。这些代码针对特定的处理器进行了手工优化,因此对于不同的ARM处理器类型有不同的版本,用户程序需要用“宏开关”来选择和所使用的处理器匹配的代码。
·CMSIS-Driver
CMSIS-Driver定义了处理器内置的外部设备控制器的驱动程序API接口,包括描述不同设备操作函数API的头文件以及建议的设备操作流程。使用CMSIS-Driver定义的驱动程序API接口使得用户应用程序能够和设备的具体型号保持相对“独立”,便于软件在不同处理器上移植。需要注意的是,驱动程序API接口仅仅是头文件里的函数申明,而具体的代码实现细节还是需要第三方开发完成。由于CPU外围控制器的多样性,CMSIS-Driver定义的内容随着硬件产品更新而不断扩充。
·CMSIS-SVD
CMSIS-SVD中的SVD是指System View Description,即“系统视图描述”,CMSIS-SVD定义了基于XML文本的处理器外设信息和参数格式,这一格式的文本能够清晰地描述每种Cortex-M处理器的特性,包括处理器型号、总线位宽、外围控制器特性、片内寄存器等。ARM的硬件调试器通过这些描述文件,在调试时为程序员提供处理器状态数据显示。图8-4给出了CMSIS-SVD定义的XML文件的层次化结构,它从高到低定义了ARM处理器的所有参数信息,包括了从器件级、处理器级、外围控制器级、存储器级、寄存器域级和每个位域取值的信息。