相信所有用ARM内核单片机做开发的朋友都用过CMSIS,但很多人可能对它既熟悉又陌生。肯定见过它,但具体是做什么的又说不清楚。这里来抛砖引玉介绍一下。
简介
首先,CMSIS(Cortex Microcontroller Software Interface Standard) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层。它是ARM公司制定的一个标准。它可以为处理器和外设实现一致且简单的软件接口,从而简化软件的重用、缩短微控制器新开发人员的学习过程,并缩短新设备的上市时间。简单来说,就是ARM公司制定标准,芯片厂商按照此标准编写相应的程序,实现统一的接口,方便开发人员的使用。
那么CMSIS都包括哪些东西呢,看下面这张图就清楚了:
它包括与软件相关的:
CMSIS-Core、CMSIS-Driver、CMSIS-DSP、CMSIS-NN、CMSIS-RTOS。
以及与调试相关的:
CMSIS-DAP、CMSIS-Zone、CMSIS-SVD。
CMSIS-Core
CMSIS-Core是最基础的,为Cortex-M内核的处理器和外设定义应用程序接口也包括一致的系统启动代码。简单来说就是芯片厂商将芯片的启动代码、时钟配置、寄存器定义等封装成标准的文件,一般包含以下一些文件:
1、Startup_xxxxx.s——设备启动代码,包括复位处理程序和异常向量。
2、System_xxxxx.c——设备的基本配置文件,包括时钟和总线的配置。
3、.h寄存器定义及用户代码需要的包含文件,用于访问设备。
在我们编程时需要将这些文件添加或包含到工程中:
CMSIS-Driver
CMSIS-Driver是在CMSIS-Core的基础上将微控制器外设与中间件或通用应用程序代码做了一个统一的接口。CMSIS-Driver包含的内容如下(非最新版本):
目前,许多微控制器系列都提供了即用型CMSIS-Driver接口,避免了繁琐且耗时的驱动程序移植。当然这些文件不是编程必须的,我们也可以使用第三方或自己编写相关的驱动程序。
CMSIS-DSP
信号处理算法库,提供了超过60多种功能的DSP算法库,包括正余弦、矩阵计算、FFT等等。支持定点、浮点等数据类型。可参考之前的文章《STM32使用CMSIS DSP库》。
CMSIS-NN
机器学习库,还没玩过,就不做介绍了。
CMSIS-RTOS
实时操作系统的通用API,简单来说就是将Freertos、Rtthread等操作系统再进行一次封装,形成通用的API函数。目的是使移植更方便。使用STM32CubeMx生成RTOS程序的朋友应该会比较熟悉。
CMSIS-DAP
一款Cortex-M内核处理器的开源调试器固件。官方给的源代码,使用的是NXP的单片机LPC4320做的,已经有很多朋友移植到了不同的单片机上。
CMSIS-Zone
主要用多核配置,TrustZone和MPU设置。不熟悉,也不做介绍了。
CMSIS-SVD
系统视图描述 (SVD) 文件以基于格式化的 XML 提供了外设信息和其他设备参数。SVD 文件通常与设备参考手册中芯片供应商提供的信息相匹配。SVD相当于把传统的芯片手册(DATA SHEET)给“数字化”了,手册是给人看的,而SVD采用XML文档结构化的方式,是给机器、开发环境、MDK/IAR等软件“看”的,SVD文件中定义了某个芯片的非常详细的信息,包含了哪些片内外设,每一个外设的硬件寄存器,每一个寄存器中每一个数据位的值,以及详细的说明信息等等。
欢迎关注公众号"嵌入式技术开发",大家可以后台给我留言沟通交流。如果觉得该公众号对你有所帮助,也欢迎推荐分享给其他人。