Cortex微控制器软件接口标准ppt课件

上传人:沈*** 文档编号:137381946 上传时间:2022-08-18 格式:PPT 页数:17 大小:433.50KB
返回 下载 相关 举报
Cortex微控制器软件接口标准ppt课件_第1页
第1页 / 共17页
Cortex微控制器软件接口标准ppt课件_第2页
第2页 / 共17页
Cortex微控制器软件接口标准ppt课件_第3页
第3页 / 共17页
点击查看更多>>
资源描述
张国琛武汉理工大学 UP研发中心 CMSIS简介 CMSIS架构 CMSIS文件构造 CMSIS支持的工具链 CMSIS中的中断定义 CMSIS中的编程商定 CMSIS实例 总结Cortex微控制器软件接口规范Cortex Microcontroller Software Interface Standard是ARM和一些编译器厂家以及半导体厂家共同遵照的一套规范,是由ARM提出,专门针对CORTEX-M系列的规范。在该规范的商定下,ARM和芯片厂商会提供一些通用的API接口来访问CORTEX内核以及一些公用外设,以减少改换芯片以及开发工具等移植任务所带来的金钱以及时间上的耗费。只需都是基于M3的芯片,代码均是可以复用的。根据近期的研讨调查,发如今嵌入式开发领域,软件的破费在不断提高,相反硬件的破费却逐年降低,因此嵌入式领域的公司,越来越把精神放到了软件上,但软件在改换芯片或是开发工具的更新换代中,代码的重用性不高,随着CORTEX-M3处置器大量投放市场,ARM认识到建立一套软件开发规范的重要性,因此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首先对文件名的定义给出了规范 core_cm3.h Cortex-M3 global declarations and definitions,static function definitions core_cm3.c Cortex-M3 global definitions.h Top-level header file(device specific).To be included by application code.Includes core_cm3.h and system_.h system_.h Device specific declarations system_.c Device specific definitions,e.g.SystemInit()运用程序只需包含.h 即可。以STM32为例,来看下相关的文件名定义,以及它们的相互关系。由于CORTEX-M3有一些可选硬件如MPU,在中包含core_cm3.h和system_.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()将不被包含,因此厂商必需在中给以实现。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 CMSIS要求定义的API以及编码与MISRA-C 2004规范兼容。MISRA-C是由Motor Industry Software Reliability Association提出的,意在添加代码的平安性,该规范提出了一些规范。如Rule 12.不同名空间中的变量名不得一样。Rule 13.不得运用char,int,float,double,long等根本类型,应该用本人定义的类型显示表示类型的大小,如CHAR8,UCHAR8,INT16,INT32,FLOAT32,LONG64,ULONG64等。Rule 37.不得对有符号数施加位操作,例如 1 4 将被制止,必需写 1UL 4;中断号的定义,在中typedef enum IRQn/*Cortex-M3 Processor Exceptions Numbers*、NonMaskableInt_IRQn=-14,/*!2 Non Maskable Interrupt*/MemoryManagement_IRQn=-12,/*!4 Cortex-M3 Memory Mgmt Interrupt*/BusFault_IRQn=-11,/*!5 Cortex-M3 Bus Fault Interrupt*/UsageFault_IRQn=-10,/*!6 Cortex-M3 Usage Fault Interrupt*/SVCall_IRQn=-5,/*!11 Cortex-M3 SV Call Interrupt*/DebugMonitor_IRQn=-4,/*!12 Cortex-M3 Debug Monitor Interrupt*/PendSV_IRQn=-2,/*!14 Cortex-M3 Pend SV Interrupt*/SysTick_IRQn=-1,/*!15 Cortex-M3 System Tick Interrupt*/*Device specific Interrupt Numbers*/UART_IRQn=0,/*!AIRCR,GPIOB,LDMIAEQ外设访问函数以及中断和中断处置函数用大小写“CamelCase定义例如:SysTickConfig(),DebugMonitor_IRQn对一些外设的操作函数前面讲相应的前缀例如:ITM_SendChar(),NVIC_SystemReset()2.注释/*brief Enable Interrupt in NVIC Interrupt Controller*param IRQn_Type IRQn specifies the interrupt number*return none*Enable a device specific interupt in the NVIC interrupt controller.*The interrupt number cannot be a negative value.*/#include stm32.h#include main.hvolatile unsigned int seconds=0;int main(void)SystemInit();if(SysTick_Config(SystemFrequency/1000)/*Setup SysTick Timer for 1 msec interrupts */while(1);/*Capture error*/while(1);void SysTick_Handler(void)static int count=0;count+;if(count=1000)count=0;seconds+;谢 谢!
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!