首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

CMSIS(Cortex微控制器软件接口标准)详细介绍

CMSIS(Cortex微控制器软件接口标准)详细介绍

CMSIS的简介 (相关英文文档:201012201425176070.pdf
Cortex微控制器软件接口标准(Cortex Microcontroller Software Interface Standard)是ARM和一些编译器厂家以及半导体厂家共同遵循的一套标准,是由ARM提出,专门针对CORTEX-M系列的标准。在该标准的约定下,ARM和芯片厂商会提供一些通用的API接口来访问CORTEX内核以及一些专用外设,以减少更换芯片以及开发工具等移植工作所带来的金钱以及时间上的消耗。只要都是基于M3的芯片,代码均是可以复用的。
根据近期的研究调查,发现在嵌入式开发领域,软件的花费在不断提高,相反硬件的花费却逐年降低,因此嵌入式领域的公司,越来越把精力放到了软件上,但软件在更换芯片或是开发工具的更新换代中,代码的重用性不高,随着CORTEX-M3处理器大量投放市场,ARM意识到建立一套软件开发标准的重要性,因此CMSIS应运而生。
CMSIS的架构
CMSIS可以分为以下3个基本功能层
核内外设访问层 Core Peripheral Access Layer (CPAL)
中间件访问层  Middleware Access Layer (MWAL)
设备访问层   Device Peripheral Access Layer (DPAL)
CMSIS的架构如下图所示:



Core Peripheral Access Layer (CPAL)
    该层用来定义一些CORTEX-M处理器内部的一些寄存器地址以及功能函数。如对内核寄存器,NVIC,调试子系统的访问。一些对特殊用途寄存器的访问被定义成内联函数或是内嵌汇编的形式。
    该层的实现由ARM提供。
Middleware Access Layer (MWAL)
    该层定义访问中间件的一些通用API,该层也由ARM负责实现,但芯片厂商需要根据自己的设备特性进行更新。目前该层仍在开发中,还没有更进一步的消息。
Device Peripheral Access Layer (DPAL)
     该层和CPAL层类似,用来定义一些硬件寄存器的地址以及对外设的访问函数。另外芯片厂商还需要对异常向量表进行扩展,以实现对自己设备的中断处理。该层可引用CPAL层定义的地址和函数,该层由具体的芯片厂商提供。
CMSIS文件结构
CMSIS首先对文件名的定义给出了标准
core_cm3.h :Cortex-M3 global declarations and definitions, static function definitions
core_cm3.c :Cortex-M3 global definitions
<device>.h :Top-level header file (device specific). To be included by application code.Includes core_cm3.h and system_<device>.h
system_<device>.h: Device specific declarations
system_<device>.c :Device specific definitions, e.g. SystemInit()
应用程序只需包含<device>.h 即可。
以STM32为例,来看下相关的文件名定义,以及它们的相互关系:



由于CORTEX-M3有一些可选硬件如MPU,在<device.h>中包含core_cm3.h和system_<device>.h时需注意以下一点,
以STM32.h为例。
/* Configuration of the Cortex-M3 Processor and Core Peripherals */
#define __MPU_PRESENT 0      /*!< STM32 does not provide a MPU present or not*/
#define __NVIC_PRIO_BITS 4    /*!< STM32 uses 4 Bits for the Priority Levels */
#define __Vendor_SysTickConfig 0     /*!< Set to 1 if different SysTick Config is used */
#include "core_cm3.h"     /* Cortex-M3 processor and core peripherals */
#include "system_stm32.h"   /* STM32 System */
即需定义以上三个宏之后,在包含相应的头文件,因为这些头文件中用到了这些宏。
注意:如果__Vendor_SysTickConfig 被定义为1,则在cm3_core.h中定义的SysTickConfig()将不被包含,因此厂商必须在<device.h>中给以实现。
CMSIS支持的工具链
CMSIS目前支持三大主流的工具链,即ARM RealView (armcc), IAR EWARM (iccarm), and GNU Compiler Collection (gcc).
   在core_cm3.h中有如下定义:
    /* define compiler specific symbols */
  #if defined ( __CC_ARM )
     #define __ASM __asm /*!< asm keyword for armcc */
     #define __INLINE __inline /*!< inline keyword for armcc */
#elif defined ( __ICCARM__ )
     #define __ASM __asm /*!< asm keyword for iarcc */
     #define __INLINE inline /*!< inline keyword for iarcc. Only
                                   avaiable in High optimization mode! */
     #define __nop __no_operation /*!< no operation intrinsic in iarcc */
#elif defined ( __GNUC__ )
     #define __ASM asm /*!< asm keyword for gcc */
     #define __INLINE inline /*!< inline keyword for gcc
#endif
继承事业,薪火相传
返回列表