cortex m3权威指南64-m3与stm32f有什么区别 2016

STM32(Cortex-M3)中NVIC的理解
STM32(Cortex-M3)中NVIC的理解
STM32(Cortex-M3) 中NVIC(嵌套向量中断控制)的理解
一、STM32 (Cortex-M3) 中的优先级概念
&&&STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。
1. 何为占先式优先级(pre-emption priority)
&&&高占先式优先级的中断事件会打断当前的主程序/中断程序运行—抢断式优先响应,俗称中断嵌套。
2. 何为副优先级(subpriority)
&&&在占先式优先级相同的情况下,高副优先级的中断优先被响应;
&&&在占先式优先级相同的情况下,如果有低副优先级中断正在执行, 高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到响应—非抢断式响应(不能嵌套)。
3. 判断中断是否会被响应的依据
&&&首先是占先式优先级,其次是副优先级;
&&&占先式优先级决定是否会有中断嵌套;
&&&Reset、NMI、Hard Fault 优先级为负(高于普通中断优先级)且不可调整。
4. 优先级冲突的处理
&&&具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断的嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。
&&&当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。
5. Cortex-M3中对中断优先级的定义
&&&既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下:
所有8位用于指定响应优先级
最高1位用于指定抢占式优先级,最低7位用于指定响应优先级
最高2位用于指定抢占式优先级,最低6位用于指定响应优先级
最高3位用于指定抢占式优先级,最低5位用于指定响应优先级
最高4位用于指定抢占式优先级,最低4位用于指定响应优先级
最高5位用于指定抢占式优先级,最低3位用于指定响应优先级
最高6位用于指定抢占式优先级,最低2位用于指定响应优先级
最高7位用于指定抢占式优先级,最低1位用于指定响应优先级
这就是优先级分组的概念。
6. stm32中对中断优先级的定义
&&&Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:
第0组:所有4位用于指定响应优先级
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
第4组:所有4位用于指定抢占式优先级
中断优先级分组是为了给抢占式优先级和响应优先级在中断优先级寄存器的高四位分配各个优先级数字所占的位数,在一次程序中只能设定一次。&
&&&AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的 4 bits。这4个bits用于分配preemption优先级和sub优先级,在STM32的固件库中定义如下:
/* PreemptionPriority Group */
#define NVIC_PriorityGroup_0&&&&&&&& ((u32)0x700)/* 0 bits for pre-emption priority
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&4 bits for subpriority */
#define NVIC_PriorityGroup_1&&&&&&&&((u32)0x600) /* 1 bits for pre-emption priority
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&3 bits for subpriority */
#define NVIC_PriorityGroup_2&&&&&&&&((u32)0x500) /* 2 bits for pre-emption priority
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&2 bits for subpriority */
#define NVIC_PriorityGroup_3&&&&&&&&((u32)0x400) /* 3 bits for pre-emption priority
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&1 bits for subpriority */
#define NVIC_PriorityGroup_4&&&&&&&&((u32)0x300) /* 4 bits for pre-emption priority
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&0 bits for subpriority */
NVIC_PriorityGroup
先占优先级
NVIC_PriorityGroup_0
先占优先级0位从优先级4位
NVIC_PriorityGroup_1
先占优先级1位从优先级3位
NVIC_PriorityGroup_2
先占优先级2位从优先级2位
NVIC_PriorityGroup_3
先占优先级3位从优先级1位
NVIC_PriorityGroup_4
先占优先级4位从优先级0位
&&& 可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:
NVIC_PriorityGroup_0=& 选择第0组
NVIC_PriorityGroup_1 =& 选择第1组
NVIC_PriorityGroup_2 =& 选择第2组
NVIC_PriorityGroup_3 =& 选择第3组
NVIC_PriorityGroup_4 =& 选择第4组
&&&接下来就是指定中断源的优先级,下面以一个简单的例子说明如何指定中断源的抢占式优先级和响应优先级:
// 选择使用优先级分组第1组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
// 使能EXTI0中断
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQC
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 指定抢占式优先级别1
NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0; // 指定响应优先级别0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// 使能EXTI9_5中断
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQC
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
--------------------------------------------------------------------------------
&&&要注意的几点是:
&&&1. 如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想不到的结果;
&&&2. 抢占式优先级别相同的中断源之间没有嵌套关系;
&&&3. 如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。
二、开关总中断
&&&在STM32/Cortex-M3中是通过改变CPU的当前优先级来允许或禁止中断。
PRIMASK位:只允许NMI和hard fault异常,其他中断/异常都被屏蔽(当前CPU优先级=0)。&
FAULTMASK位:只允许NMI,其他所有中断/异常都被屏蔽(当前CPU优先级=-1)。
&&&在STM32固件库中(stm32f10x_nvic.c和stm32f10x_nvic.h) 定义了四个函数操作PRIMASK位和FAULTMASK位,改变CPU的当前优先级,从而达到控制所有中断的目的。
下面两个函数等效于关闭总中断:&
void NVIC_SETPRIMASK(void);&
void NVIC_SETFAULTMASK(void);
下面两个函数等效于开放总中断:&
void NVIC_RESETPRIMASK(void);&
void NVIC_RESETFAULTMASK(void);
上面两组函数要成对使用,但不能交叉使用。
第一种方法:&
NVIC_SETPRIMASK();&& //关闭总中断&
NVIC_RESETPRIMASK();//开放总中断
第二种方法:&
NVIC_SETFAULTMASK();&& //关闭总中断&
NVIC_RESETFAULTMASK();//开放总中断
常常使用:
NVIC_SETPRIMASK();&&&& // Disable Interrupts&
NVIC_RESETPRIMASK(); // Enable Interrupts
-------------------------------------------------------------------------------------------------
#define CLI()&&& __set_PRIMASK(1)&
#define SEI() __set_PRIMASK(0)&
来实现开关总中断的功能。
发表评论:
TA的最新馆藏[转]&[转]&ARM7与STM32 Cortex M3的区别_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
ARM7与STM32 Cortex M3的区别
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢m3和stm32的区别_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
m3和stm32的区别
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢10818人阅读
Cortex-M系列(10)
ARM Cortex&-M 处理器系列是一系列可向上兼容的高能效、易于使用的处理器,这些处理器旨在帮助开发人员满足将来的嵌入式应用的需要。这些需要包括以更低的成本提供更多功能、不断增加连接、改善代码重用和提高能效。& Cortex-M 系列针对成本和功耗敏感的 MCU 和终端应用(如智能测量、人机接口设备、汽车和工业控制系统、大型家用电器、消费性产品和医疗器械)的混合信号设备进行过优化。
为什么选择 Cortex-M&行业标准: ARM Cortex-M 处理器是全球微控制器标准,已许可给 40 个以上的 ARM 合作伙伴,包括 NXP Semiconductors、STMicroelectronics、Texas Instruments 和 Toshiba 等领先供应商。使用标准处理器使 ARM 合作伙伴可以创建具有一致体系结构的设备,同时使它们可以专注于创建优秀的设备实现。&能效:更低的能耗,更长的电池寿命&以更低的 MHz 或更短的活动时段运行。&基于架构的睡眠模式支持。&比 8/16 位设备的工作方式更智能、睡眠时间更长。&--------------------------------------------------------------------------------&更小的代码&更低的硅成本&高密度指令集&比 8/16 位设备每字节完成更多操作&更小的 RAM、ROM 或闪存要求&--------------------------------------------------------------------------------&易于使用&更快的软件开发和重用&多个供应商之间的全球标准&代码兼容性&统一的工具和操作系统支持&&&&&&--------------------------------------------------------------------------------&高性能&更有竞争力的产品&功能强大的 Cortex-M 处理器&每 MHz 提供更高的性能&能够以更低的能耗实现更丰富的功能&比较 Cortex-M 处理器
Cortex-M 系列是必须考虑不同的成本、能耗和性能的各类可兼容、易于使用的嵌入式设备(如微控制器 (MCU))的理想解决方案。每个处理器都针对十分广泛的嵌入式应用范围提供最佳权衡取舍。
ARM Cortex-M0&ARM Cortex-M3&ARM Cortex-M4
&8/16 位&应用
&16/32 位&应用
& &32 位/DSC&应用
低成本和简单性
& 性能效率
有效的数字信号控制
Cortex-M 系列处理器都是二进制向上兼容的,这使得软件重用以及从一个 Cortex-M 处理器无缝发展到另一个成为可能。&
ARM Cortex-M 技术
每个 Cortex-M 系列处理器都有特定的优点,但全部都受一些基本技术的支持,这些技术使 Cortex-M 处理器能够胜任多种嵌入式应用。
RISC 处理器内核
Thumb-2&&技术
高性能 32 位 CPU
具有确定性的运算
低延迟 3 阶段管道
16/32 位指令的最佳混合
小于 8 位设备 3 倍的代码大小
对性能没有负面影响
低能耗模式
嵌套矢量中断控制器 (NVIC)
集成的睡眠状态支持
基于架构的软件控制
低延迟、低抖动中断响应
不需要汇编编程
以纯 C 语言编写的中断服务例程
工具和 RTOS 支持&CoreSight 调试和跟踪
广泛的第三方工具支持
Cortex 微控制器软件接口标准 (CMSIS)
最大限度地增加软件成果重用
JTAG 或 2 针串行线调试 (SWD) 连接
支持多处理器
支持实时跟踪
CMSIS&ARM Cortex 微控制器软件接口标准 (CMSIS) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层。使用 CMSIS,可以为接口外设、实时操作系统和中间件实现一致且简单的处理器软件接口,从而简化软件的重用。借助于 CMSIS,可以缩短新微控制器开发人员的学习过程,从而缩短新产品的上市时间。&深入:嵌套矢量中断控制器 (NVIC)&NVIC 是 Cortex-M 处理器不可或缺的部分,它为处理器提供了卓越的中断处理能力。&Cortex-M 处理器使用一个矢量表,其中包含要为特定中断处理程序执行的函数的地址。接受中断时,处理器会从该矢量表中提取地址。&为了减少门数并增强系统灵活性,Cortex-M 处理器使用一个基于堆栈的异常模型。出现异常时,系统会将关键通用寄存器推送到堆栈上。完成入栈和指令提取后,将执行中断服务例程或故障处理程序,然后自动还原寄存器以使中断的程序恢复正常执行。使用此方法,便无需编写汇编器包装器了(而这是对基于 C 语言的传统中断服务例程执行堆栈操作所必需的),从而使得应用程序的开发变得非常容易。NVIC 支持中断嵌套(入栈),从而允许通过运用较高的优先级来较早地为某个中断提供服务。&在硬件中完成对中断的响应&Cortex-M 系列处理器的中断响应是从发出中断信号到执行中断服务例程的周期数。它包括:&
背对背或迟到中断的最佳处理(参见下文)
提取矢量地址
将易损坏的寄存器入栈
跳转到中断处理程序
这些任务在硬件中执行,并且包含在为 Cortex-M 处理器报出的中断响应周期时间中。在其他许多体系结构中,这些任务必须在软件的中断处理程序中执行,从而引起延迟并使得过程十分复杂。&NVIC 中的尾链
在背对背中断的情况下,传统系统会重复完整的状态保存和还原周期两次,从而导致更高的延迟。Cortex-M 处理器通过在 NVIC 硬件中实现尾链技术简化了活动中断和挂起的中断之间的转换。处理器状态会在比软件实现时间更少的周期内自动保存在中断条目上并在中断退出时还原,从而显著提升低 MHz 系统的性能。&&NVIC 对迟到的较高优先级中断的响应
如果在为上一个中断执行堆栈推送期间较高优先级的中断迟到,NVIC 会立即提取新的矢量地址来为挂起的中断提供服务,如上所示。Cortex-M NVIC 对这些可能性提供具有确定性的响应并支持迟到和抢占。
NVIC 进行的堆栈弹出抢占
同样,如果异常到达,NVIC 将放弃堆栈弹出并立即为新的中断提供服务,如上所示。通过抢占并切换到第二个中断而不完成状态还原和保存,NVIC 以具有确定性的方式实现了缩短延迟。
从 8/16 位迁移到 ARM Cortex-M
ARM Cortex-M 代码大小优势说明&ARM
使用相对 EEMBC CoreMark 测试大小的代码大小比较。
指令宽度&认为 8 位微控制器使用 8 位指令,基于 ARM Cortex-M 处理器的微控制器使用 32 位指令,这是一种常见的误解。事实上,PIC18 和 PIC16 指令大小分别是 16 位和 14 位。对于 8051 体系结构,虽然某些指令的长度为 1 字节,但许多其他指令的长度为 2 或 3 字节。通常,对于 16 位体系结构也是如此,其中某些指令可能占用 6 字节或更多内存。&ARM Cortex-M3 和 Cortex-M0 处理器利用可提供极佳代码密度的 ARM Thumb&-2 技术。借助于 Thumb-2 技术,Cortex-M 处理器可以支持已扩展为包括更强大的 32 位指令的 16 位 Thumb 指令的根本基础。在许多情况下,C 语言编译器将使用 16 位版本的指令,除非使用 32 位版本可以更有效地执行运算。
指令效率&由于没有同时考虑到 ARM Cortex-M 处理器指令更为强大,此图片是不完整的。在许多情况下,单个 Thumb 指令可相当于数个 8/16 位微控制器指令;这意味着 Cortex-M 设备的代码量更少,因此可以更低的总线速度完成同一任务。
在各处理器体系结构之间比较 16 位乘法运算
8 位示例&16 位示例&ARM Cortex-M
MOV A, XL;2 字节
MOV B, YL;3 字节
MUL AB;1 字节
MOV R0, A;1 字节
MOV R1, B;3 字节
MOV A, XL;2 字节
MOV B, YH;3 字节
MUL AB;1 字节
ADD A, R1;1 字节
MOV R1, A;1 字节
MOV A, B;2 字节
ADDC A, #0;2 字节
MOV R2, A;1 字节
MOV A, XH;2 字节
MOV B, YL;3 字节
MUL AB;1 字节
ADD A, R1;1 字节
MOV R1, A;1 字节
MOV A, B;2 字节
ADDC A, R2;1 字节
MOV R2, A;1 字节
MOV A, XH;2 字节
MOV B, YH;3 字节
MUL AB;1 字节
ADD A, R2;1 字节
MOV R2, A;1 字节
MOV A, B;2 字节
ADDC A, #0;2 字节
MOV R3, A;1 字节&
MOV R4,&0130h
MOV R5,&0138h
MOV SumLo,R6
MOV SumHi,R7
(操作数被移入或移出内存映射的硬件乘法单元)
MULS r0,r1,r0
N.B.Cortex-M 乘法实际上执行 32 位乘法,此处我们假设 r0 和 r1 包含 16 位数据。&压缩的数据占用空间&必须注意,Cortex-M 处理器支持 8 位和 16 位数据传输,可以有效利用数据内存。这意味着程序员可以继续使用他们在面向 8/16 位的软件中使用的相同数据类型。
对不断增加连接(例如,USB、蓝牙和 IEEE 802.15)、具有复杂模拟传感器(例如,加速计和触摸屏)且成本日益降低的产品的需求,已导致需要将模拟设备与数字功能更紧密地集成,以对数据进行预处理和传输。大多数 8 位设备在不显著增加 MHz(并因此不显著增加功率)的情况下不提供支持这些任务的性能,因此嵌入式开发人员需要寻找具有更高级处理器技术的替代设备。16 位设备以前曾被用来解决微控制器应用中的能效问题。但是,16 位设备相对不高的性能意味着它们通常需要较长的活动工作周期或较高的时钟频率才能完成 32 位设备所完成的相同任务。
使软件开发更加容易
基于 ARM Cortex 处理器的微控制器的软件开发可能比 8 位微控制器产品的开发容易得多。Cortex 处理器不但是完全可通过 C 语言进行编程的,而且还附带各种高级调试功能以帮助定位软件中的问题。除 MCU 开发工具包中包括的所有附加资源外,Internet 上还有大量示例和教程,其中许多来自基于 ARM 处理器的 MCU 供应商的网站。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:375901次
积分:4861
积分:4861
排名:第3952名
原创:109篇
转载:22篇
评论:95条
(1)(2)(8)(1)(6)(6)(2)(1)(4)(4)(2)(2)(1)(2)(2)(1)(4)(7)(10)(2)(1)(1)(13)(3)(1)(10)(6)(1)(4)(1)(1)(6)(1)(4)(2)(8)STM32与cortex A9的区别与联系?_stm32吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:18,800贴子:
STM32与cortex A9的区别与联系?收藏
STM32与cortex A9的区别与联系?学习STM32之后再学cortex A9会上手快些吗
和张大佛爷、二月红一起去探秘矿洞墓穴!
STM32是cortex M3内核。
如果要学A9,不必先学STM32.工具和应用环境绝大部分是不同的。
A9如果搞定了,再学STM32你可能会觉得非常简单。反过来搞定了STM32对学习A9帮助不大。
cortex A9是ARM处理器的一种内核STM32是意法半导体的一个产品系列,比如STM32F103是cortex M3内核的从命名规则上看,cortex A9的A,意思是application,就是应用级处理器,专门用来跑操作系统的。比如手机,德州仪器的omap4430处理器就是双A9内核的,摩托罗拉XT885用的就是这颗处理器而cortex M3的M,意思是大概是MicroController吧,就是微控制器,工业控制上用的,一般不跑操作系统的
列个表格比较一下厂商____________CPU型号____________内核架构______应用方向意法半导体_______STM32F103ZET6_____cortex M3_____工业控制德州仪器_________OMAP4430__________cortex A9_____智能消费级电子产品所以你问的,STM32和cortex A9的关系,他俩没关系,一个是产品型号,一个是内核的名字
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 cortex m0 m3 m4区别 的文章

 

随机推荐