1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
标准是CMSIS2.0,与之前的版本有了一些新的变化。CMSIS2.0标准包含Cortex-M0、Cortex-M3、Cortex-M4以及SVD(SystemViewDescription)这四部分。目前,各芯片厂商也还没有都推出各自基于CMSIS标准的完整BSP包。但未来的Cortex-M处理器应用将统一在CMSIS的标准之下是一个不可避免的趋势。本节将以STM32F10x处理器为对象,介绍CMSIS2.0标准的Cortex-M3部分。
4.1.1 基于CMSIS标准的软件架构 基于CMSIS2.0标准的软件架构如图4-2所示。与CMSIS1.x版本相比,CMSIS2.0去除了中间层,增加了一个可选的外设访问函数(Access Functionsfor Peripherals)。 从图4-2可以看到,基于CMSIS标准的软件架构主要分为以下四层:用户应用层,操作系统层,CMSIS层以及硬件寄存器层。其中CMSIS层起着承上启下的作用,一方面该层对硬件寄存器层进行了统一的实现,屏蔽了不同厂商对Cortex-M系列微处理器核内外设寄存器的不同定义,另一方面又向上层的操作系统和应用层提供接口,简化了应用程序开发的难度,使开发人员能够在完全透明的情况下进行一些应用程序的开发。也正是如此,CMSIS层的实现也相对复杂,下面将对CMSIS层次结构进行剖析。 CMSIS层主要分为以下3个部分: 核内外设访问层(CPAL,Core Peripheral Access Layer): 该层由ARM负责实现。包括对寄存器名称、地址的定义,内核寄存器、NVIC、调试子系统的访问接口定义以及对特殊用途寄存器的访问接口(例如:CONTROL,xPSR)定义。由于对特殊寄存器的访问以内联方式定义,所以针对不同的编译器ARM统一用__INLINE来屏蔽差异。该层定义的接口函数均是可重入的。 片上外设访问层(DPAL,Device Peripheral Access Layer): 该层由芯片厂商负责实现。该层的实现与CPAL类似,负责对硬件寄存器地址以及外设访问接口进行定义。该层可调用CPAL层提供的接口函数同时根据设备特性对异常向量表进行扩展,以处理相应外设的中断请求。 外设访问函数(AFP,Access Functionsfor Peripherals): 该层也由芯片厂商负责实现,主要是提供访问片上外设的访问函数,这一部分是可选的。 对一个Cortex-M微控制系统而言,CMSIS通过以上三个部分实现了: 定义了访问外设寄存器和异常向量的通用方法; 定义了核内外设的寄存器名称和核异常向量的名称; 为RTOS核定义了与设备独立的接口,包括Debug通道。 这样芯片厂商就能专注于对其产品的外设特性进行差异化,并且消除他们对微控制器进行编程时需要维持的不同的、互相不兼容的标准需求,以达到低成本开发的目的。 4.1.2 CMSIS代码规范 基本规范 1. CMSIS的C代码遵照MISRA2004规则。 2. 使用标准ANSIC头文件《stdint.h》中定义的标准数据类型。 3. 由#define定义的包含表达式的常数必须用括号括起来。 4. 变量和参数必须有完全的数据类型。 5. CPAL层的函数必须是可重入的。 6. CPAL层的函数不能有阻塞代码,也就是说等待、查询等循环必须在其他的软件层中。 7. 定义每个异常/中断的: 每个异常处理函数的后缀是_Handler,每个中断处理器函数的后缀是_IRQHandler。 默认的异常中断处理器函数(弱定义)包含一个无限循环。 用#define将中断号定义为后缀为_IRQn的名称。 推荐规范 定义核寄存器、外设寄存器和CPU指令名称时使用大写。 定义外设访问函数、中断函数名称时首字母大写。 对于某个外设相应的函数,一般用该外设名称作为其前缀。 按照Doxygen规范撰写函数的注释,注释使用C90风格(/* 注释*/) 或者C++风格(// 注释),函数的注释应包含以下内容: 一行函数简介; 参数的详细解释; 返回值的详细解释; 函数功能的详细描述。 数据类型及IO类型限定符 HAL层使用标准ANSIC头文件stdint.h定义的数据类型。 IO类型限定符用于指定外设寄存器的访问限制,定义如表4-1所列。 CMSIS版本号 CMSIS标准有多个版本号,对于CortexM3处理器,在core_cm3.h中定义所用CMSIS的版本。 Cortex内核 对于CortexM3处理器,在头文件core_cm3.h中定义: #define__CORTEX_M (0x03) 对于CortexM0处理器,在头文件core_cm0.h中定义: #define__CORTEX_M (0x00) 工具链 CMSIS支持目前嵌入式开发的三大主流工具链,即ARM Reak View(armcc),IAR EWARM(iccarm)以及GNU工具链(gcc)。 通过在core_cm0.c中的如下定义,来屏蔽一些编译器内置关键字的差异。 这样CPAL中的功能函数就可以被定义成静态内联类型(static__INLINE),以实现编译优化。 4.1.3 CMSIS文件结构 CMSIS标准的文件结构如图4-3所示,下面将对其中各文件作简要介绍。 1. device.h device.h由芯片厂商提供,是工程中C源程序的主要包含文件。其中“device”是指处理器型号,例如STM32F10x系列处理器对应的头文件是stm32f10x.h。它包含: 中断号的定义。 提供所有内核及处理器定义的所有中断及异常的中断号(IRQn)。例如stm32f10x处理器,中断号定义如下: 厂商实现处理器时CortexM核的配置。 CortexM处理器在具体实现时,有些部件是可选、有些参数是可以设置的,例如MPU、NVIC优先级位等。在stm32f10x.h中包含头文件core_cm0.h/core_cm3.h的预处理命令之前,需要先根据处理器的具体实现对以下参数做设置。 DPAL层。 提供所有处理器片上外设的定义,包含数据结构和片上外设的地址映射。一般数据结构的名称定义为“处理器或厂商缩写_外设缩写_TypeDef”,也有些厂家定义的数据结构名称为“外设缩写_TypeDef”。例如LPC17xx系列处理器的I2C寄存器组数据结构定义如下: LPC17xx处理器I2C接口基地址定义如下: 访问LPC17xx处理器I2C接口的定义如下: 外设访问函数(可选)。 这些函数由芯片厂商提供,为访问片上外设提供帮助,它们可以作为内联函数,也可以在厂商提供的库中外部引用。 2. core_cm3.h和core_cm3.c 这两个文件是实现Cortex-M3处理器CMSIS标准的CPAL层。其中,头文件core_cm3.h定义Cortex-M3核内外设的数据结构及其地址映射,另外它也提供一些访问Cortex-M3核内寄存器及外设的函数,这些函数定义为静态内联。c文件core_cm3.c则定义了一些访问Cortex-M3核内寄存器的函数,例如对xPSR、MSP、PSP等寄存器的访问;另外还将一些汇编语言指令也定义为函数。 3. startup_device.s 汇编文件startup_device.s是在ARM提供的启动文件模板基础上,由各芯片厂商各自修订而成的,例如STM32F107处理器的启动代码文件就是startup_stm32f10x_c1.s,它主要有三个功能。 配置并初始化堆和栈,例如startup_stm32f10x_c1.s对堆和栈的配置如下: 定义中断向量表及相应的中断处理函数。例如,startup_stm32f10x_c1.s定义中断向量表如下: 4. system_.h和system_.c system_.h和system_.c文件是由ARM提供模板,各芯片厂商根据自己芯片的特性来实现。一般是提供处理器的系统初始化配置函数,以及包含系统时钟频率的全局变量。按CMSIS标准的最低要求,system_.c中必须要定义SetSysClock和SystemCoreClockUpdate两个函数,和全局变量SystemCoreClock。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1820 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1634 浏览 1 评论
1104 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
740 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1692 浏览 2 评论
1951浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
756浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
587浏览 3评论
605浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
569浏览 3评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-31 01:17 , Processed in 0.866285 second(s), Total 76, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号