打印
[牛人杂谈]

CMSIS 到底是什么?

[复制链接]
3948|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

CMSIS 到底是什么?

先来看看ARM公司对CMSIS的定义:

ARM® Cortex™ 微控制器软件接口标准 (CMSIS) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层。CMSIS 可实现与处理器和外设之间的一致且简单的软件接口,从而简化软件的重用,缩短微控制器开发人员新手的学习过程,并缩短新设备的上市时间。

软件的创建是嵌入式产品行业的一个主要成本因素。通过跨所有 Cortex-M 芯片供应商产品将软件接口标准化(尤其是在创建新项目或将现有软件迁移到新设备时),可以大大降低成本。

我们知道,不同厂家,比如FSL,ST,Energy Micro等不同厂家的内核都是使用Cortex M,但是这些MCU的外设却大相径庭,外设的设计、接口、寄存器等都不一样,因此,一个能够非常熟练使用STM32软件编程的工程师很难快速地上手开发一款他不熟悉的,尽管是Cortex M内核的芯片。而CMSIS的目的是让不同厂家的Cortex M的MCU至少在内核层次上能够做到一定的一致性,提高软件移植的效率。


沙发
yiyigirl2014|  楼主 | 2016-11-15 23:08 | 只看该作者

1. CMSIS的结构:

CMSIS 包含以下组件:

  • CMSIS-CORE:提供与 Cortex-M0、Cortex-M3、Cortex-M4、SC000 和 SC300 处理器与外围寄存器之间的接口
  • CMSIS-DSP:包含以定点(分数 q7、q15、q31)和单精度浮点(32 位)实现的 60 多种函数的 DSP 库
  • CMSIS-RTOS API:用于线程控制、资源和时间管理的实时操作系统的标准化编程接口
  • CMSIS-SVD:包含完整微控制器系统(包括外设)的程序员视图的系统视图描述 XML 文件

此标准可进行全面扩展,以确保适用于所有 Cortex-M 处理器系列微控制器。其中包括所有设备:从最小的 8 KB 设备,直至带有精密通信外设(例如以太网或 USB)的设备。(内核外设功能的内存要求小于 1 KB 代码,低于 10 字节 RAM)。


使用特权

评论回复
板凳
yiyigirl2014|  楼主 | 2016-11-15 23:12 | 只看该作者

2. 框架

看上去CMSIS-Core和CMSIS-DSP很好理解,但是CMSIS-RTOS不好理解,这玩意是干嘛的

再看一张图吧:

看了这张图的含义更清楚些,CMSIS-RTOS在用户的应用代码和第三方的RTOS Kernel直接架起一道桥梁,一个设计在不同的RTOS之间移植,或者在不同Cortex MCU直接移植的时候,如果两个RTOS都实现了CMSIS-RTOS,那么用户的应用程序代码完全可以不做修改。


使用特权

评论回复
地板
yiyigirl2014|  楼主 | 2016-11-15 23:12 | 只看该作者

3. 已经支持的MCU和工具链:


完整的CMSIS文档可以从ARM公司网站下载,大小有100多M字节。



使用特权

评论回复
5
yiyigirl2014|  楼主 | 2016-11-15 23:15 | 只看该作者

4.   如何使用CMSIS,需要哪些文件,以Freescale Kinetis L系列举例。

独立于编译器的文件:
● Cortex-M3内核及其设备文件(core_cm0.h + core_cm0.c)
─ 访问Cortex-M0内核及其设备:NVIC等
─ 访问Cortex-M0的CPU寄存器和内核外设的函数
● 微控制器专用头文件(device.h)  -  MKL25Z4.h
─ 指定中断号码(与启动文件一致)
─ 外设寄存器定义(寄存器的基地址和布局)
─ 控制微控制器其他特有的功能的函数(可选)
● 微控制器专用系统文件(system_device.c)  -- system_MKL25Z4.h + system_MKL25Z4 .c
─ 函数SystemInit,用来初始化微控制器
--函数 void SystemCoreClockUpdate (void); 用于获取内核时钟频率
─SystemCoreClock,该值代表系统时钟频率
─ 微控制器的其他功能(可选)
● 编译器启动代码(汇编或者C)(startup_device.s)  -  startup_MKL25Z4.s for Keil
─ 微控制器专用的中断处理程序列表(与头文件一致)
─ 弱定义(Weak)的中断处理程序默认函数(可以被用户代码覆盖)

使用特权

评论回复
6
yiyigirl2014|  楼主 | 2016-11-15 23:17 | 只看该作者
Cortex微控制器软件标准(Cortex Microcontroller Software Interface Standard)是ARM和一些编译器厂家以及半导体厂家共同遵循的一套标准,是由ARM提出,专门针对CORTEX-M系列的标准。在该标准的约定下,ARM和芯片厂商会提供一些通用的API接口(API:应用程序编程接口,是一些预先定义的函数,目的是提供程序与开发人员基于某软件或硬件的以访问一组例程的能力)来访问CORTEX内核以及一些专用外设,以减少更换芯片以及开发工具等移植工作所带来的金钱以及时间上的消耗。只要是基于M3的芯片,代码均是可以复用的。     该标准完全可扩展,可确保其适合于所有的CORTEX-M处理器系列微控制器。


     CMSIS可以分为以下3个基本功能层:
(1)核内外设访问层 Core Peripheral Access Layer(CPAL)
(2)中间件访问层 Middleware Access Layer(MWAL)
(3)设备访问层 Device Peripheral Access Layer(DPAL)


1:核内外设访问层 Core Peripheral Access Layer(CPAL)
    该层用来定义一些CORTEX-M处理器内部的一些寄存器地址以及功能函数。如对内核寄存器,NVIC,调试子系统的访问。一些对特殊用途寄存器的访问被定义成内联函数或是内嵌汇编的形式。
    该层的实现由ARM提供
2:中间件访问层 Middleware Access Layer(MWAL)
    该层一定访问中间件的一些通用API,该层也由ARM负责实现,但芯片厂商需要根据自己的设备进行更新,目前该层仍在开发中,还没有更进一步的消息。
3:设备访问层 Device Peripheral Access Layer(DPAL)
     该层和CPAL层类似,用来定义一些硬件寄存器的地址以及对外设的访问函数。另外芯片厂商还需要对异常向量表进行扩展,以实现对自己设备的中断处理。该层可饮用CPAL层定义的地址和函数,该层由具体芯片厂商提供。



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

213

主题

3545

帖子

10

粉丝