历史上的今天
返回首页

历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2018年10月21日 | STM32学习之:Context—M3简介

2018-10-21 来源:eefocus

Cortex-M3概览

(1)简介     

Cortex-M3是一个 32位处理器内核。内部的数据路径是 32位的,寄存器是 32位的,存储器接口也是 32 位的。CM3 采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性, CM3内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)。     

比较复杂的应用可能需要更多的存储系统功能,为此CM3提供一个可选的MPU,而且在需要的情况下也可以使用外部的 cache。另外在CM3中,Both小端模式和大端模式都是支持的。

(2)Cortex-M3的简化图


(3)寄存器组 

处理器拥有R0-R15的寄存器组,其中R13最为堆栈指针SP,SP有两个,但是同一时刻只能有一个可以看到,这就是所谓的“banked”寄存器。


a、R0-R12都是 32位通用寄存器,用于数据操作。但是注意:绝大多数 16位Thumb指令只能访问R0-R7,而 32位 Thumb-2指令可以访问所有寄存器。  

b、Cortex-M3拥有两个堆栈指针,然而它们是 banked,因此任一时刻只能使用其中的一个。 

主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程) 

进程堆栈指针(PSP):由用户的应用程序代码使用。

堆栈指针的最低两位永远是0,这意味着堆栈总是4字节对齐的。 

c、R14:连接寄存器--当呼叫一个子程序时,由R14存储返回地址

d、R15:程序计数寄存器--指向当前的程序地址,如果修改它的值,就能改变程序的执行流(这里有很多高级技巧)

e、Cortex-M3还在内核水平上搭载了若干特殊功能寄存器,包括

程序状态字寄存器组(PSRs)

中断屏蔽寄存器组(PRIMASK, FAULTMASK, BASEPRI) 

控制寄存器(CONTROL)


Cortex-M3处理器支持两种处理器的操作模式,还支持两级特权操作。 

       

两种操作模式分别为:处理者模式和线程模式(thread mode)。引入两个模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码——包括中断服务例程的代码。

Cortex-M3 的另一个侧面则是特权的分级——特权级和用户级。这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。处理器支持两种特权级,这也是一个基本的安全模型。


在 CM3 运行主应用程序时(线程模式),既可以使用特权级,也可以使用用户级;但是异常服务例程必须在特权级下执行。复位后,处理器默认进入线程模式,特权极访问。在特权级下,程序可以访问所有范围的存储器(如果有 MPU,还要 在MPU规定的禁地之外),并且可以执行所有指令。

在特权级下的程序可以为所欲为,但也可能会把自己给玩进去——切换到用户级。一旦进入用户级,再想回来就得走“法律程序”了——用户级的程序不能简简单单地试图改写 CONTROL寄存器就回到特权级,它必须先“申诉”:执行一条系统调用指令(SVC)。这会触发SVC异常,然后由异常服务例程(通常是操作系统的一部分)接管,如果批准了进入,则异常服务例程修改 CONTROL寄存器,才能在用户级的线程模式下重新进入特权级。信盈达,扣扣:一以七捂捂吧就领久要!

        

事实上,从用户级到特权级的唯一途径就是异常:如果在程序执行过程中触发了一个异常,处理器总是先切换入特权级,并且在异常服务例程执行完毕退出时,返回先前的状态。

通过引入特权级和用户级,就能够在硬件水平上限制某些不受信任的或者还没有调试好的程序,不让它们随便地配置涉及要害的寄存器,因而系统的可靠性得到了提高。进一步地,如果配了 MPU,它还可以作为特权机制的补充——保护关键的存储区域不被破坏,这些区域通常是操作系统的区域。 

(4)内建的嵌套向量中断控制器

Cortex-M3 在内核水平上搭载了一颗中断控制器——嵌套向量中断控制器 NVIC(Nested Vectored Interrupt Controller)。它与内核有很深的“亲密接触”——与内核是紧耦合的。

NVIC提供如下的功能: 

·   可嵌套中断支持 

·   向量中断支持 

·   动态优先级调整支持 

·   中断延迟大大缩短 

·   中断可屏蔽

可嵌套中断支持:  可嵌套中断支持的作用范围很广,覆盖了所有的外部中断和绝大多数系统异常。外在表现是,这些异常都可以被赋予不同的优先级。当前优先级被存储在 xPSR 的专用字段中。当一个异常发生时,硬件会自动比较该异常的优先级是否比当前的异常优先级更高。如果发现来了更高优先级的异常,处理器就会中断当前的中断服务例程(或者是普通程序),而服务新来的异常——即立即抢占。

向量中断支持:  当开始响应一个中断后,CM3会自动定位一张向量表,并且根据中断号从表中找出 ISR的入口地址,然后跳转过去执行。不需要像以前的 ARM那样,由软件来分辨到底是哪个中断发生了,也无需半导体厂商提供私有的中断控制器来完成这种工作。这么一来,中断延迟时间大为缩短。


推荐阅读

史海拾趣

CAMBION公司的发展小趣事

随着国内市场的饱和,CAMBION公司开始将目光投向海外市场。公司制定了详细的国际化战略,通过设立海外研发中心、拓展销售渠道等方式进入国际市场。在国际化过程中,CAMBION公司不仅面临着文化差异、法律法规等挑战,还需要与众多国际知名企业竞争。然而,凭借卓越的技术实力和灵活的市场策略,CAMBION逐渐在国际市场上占据了一席之地。

Faraday Technology公司的发展小趣事

CAMBION公司自成立以来,始终将技术创新作为核心驱动力。在早期,公司研发团队成功开发了一款具有革命性的芯片技术,显著提升了电子设备的处理速度和能效。这一技术迅速在行业内引起关注,为CAMBION赢得了大量订单和合作伙伴。随着技术的不断完善和应用范围的扩大,CAMBION逐渐在电子行业中崭露头角。

Andigilog公司的发展小趣事

随着电子行业的快速发展和变革,CAMBION公司也面临着诸多挑战。例如,新兴技术的崛起使得市场竞争日益激烈,消费者对电子产品性能的要求也不断提高。为了应对这些变革,CAMBION公司不断调整战略,加大研发投入,推出了一系列具有竞争力的新产品。同时,公司还加强与上下游企业的合作,共同推动产业链的升级和发展。

AINFO Inc公司的发展小趣事

AINFO Inc公司在初创期便明确了其在电子行业中的技术发展方向和市场定位。公司注重技术积累,投入大量资源进行研发,逐步在某一领域取得了技术突破。同时,公司对市场进行了深入调研,确定了目标客户群体和市场需求,为后续的产品开发和市场推广打下了坚实基础。

AEC Design公司的发展小趣事
为了进一步提升技术实力和市场竞争力,AEC Design公司积极寻求与其他企业或研究机构的战略合作。通过与上下游企业建立紧密的供应链合作关系,公司确保了原材料的稳定供应和产品质量的有效控制。同时,与高校和研究机构的合作则为公司带来了源源不断的技术创新动力。
Axon' Cable公司的发展小趣事

随着科技的不断进步,Axon' Cable公司逐渐将业务拓展至航空航天领域。公司研发出了一系列高性能、高可靠性的数据网络系统和连接器产品,成功应用于众多重要的航空航天项目中。这些产品的成功应用不仅提升了Axon' Cable在航空航天领域的知名度,也为公司带来了丰厚的利润和更广阔的发展空间。

问答坊 | AI 解惑

[分享]一些不错的技术网站

找到一个帖子,与技术爱好者一起分享一下, 电子项目博览网:            http://www.51project.com.cn/单片机王国:          & ...…

查看全部问答>

wallacer的电子世界

在网易博客上建了个博客,主要关于单片机等电子知识,希望大家多去踩下,希望有对您有用的东西! http://blog.163.com/guojinlong928@126…

查看全部问答>

怎样实现U盘内程序的自动运行? 类似电子银行的U盾之类?

原理是什么? 之前一直以为就是一个简单的autorun ,实验过之后发现不行, 那位大大了解,到底U盾他是怎么实现的?原理是什么?…

查看全部问答>

wince中如何实现Form的全屏显示

就是把标题栏任务栏都隐藏了 如果加一黑布做背景的话 全屏都是黑的…

查看全部问答>

关于avalon总线burst传输的问题

看到一本书上写到,avalon总线在进行burst传输的时候,主端口必须在整个突发传输期间置所有的byteenable信号线有效,从端口方面,Avalon交换架构在突发传输期间置byteenable的所有信号线有效。我不明白这是什么意思,比如说64位主端口去访问32位从 ...…

查看全部问答>

求助MAX7219级联问题!

初学单片机,想自己做电子钟,买了两块MAX7219,会驱动一片MAX7219,但是两块MAX7219级联后,无法驱动第二块芯片,请各位大虾帮帮忙!   说明一下:     这个word版式是从百度上下载的,在原版中,作者只是写了驱动一片MAX7 ...…

查看全部问答>

用PDIUSBD12和K9F5608U0A设计USB移动闪存

摘要 简要介绍USB(通用串行总线)大容量存储设备类,给出USB控制PDIUSBD12和闪存K9F5608U0A的原理框图,并以这两个芯片为例设计出存储设备的电路图,最后列出程序流程图。 关键词 USB PDIUSBD12 K9F5608U0A 移动闪存 引言   自从USB规范发布以来 ...…

查看全部问答>

请问哪位高手知道Cyclone IV E器件怎么加密啊

FPGA加密可以用CPLD,也可以用DS28E01,如果用CPLD加密,那么用什么型号的呢,请高手推荐一个最简单的CPLD型号,再就是CPLD和DS28E01加密哪个更简单些…

查看全部问答>

如何用tinymix调试WM8960 音频驱动?

RT,用过的来说一下,偶要多学习。 …

查看全部问答>