当前位置: 首页 > news >正文

网站建设与维护的内容江苏免费关键词排名外包

网站建设与维护的内容,江苏免费关键词排名外包,云主机玩游戏怎么样,蓝莓直播视频0 参考资料 Cortex M3权威指南(中文).pdf ARM Cortex-A(armV7)编程手册V4.0.pdf1 Cortex-A7和Cortex-M7处理器架构取中断向量全流程分析 1.1 什么是中断向量? 中断向量就是中断服务函数入口地址,例如我们发生了EXTI0中断,就需要执行EXT0中…

0 参考资料

Cortex M3权威指南(中文).pdf
ARM Cortex-A(armV7)编程手册V4.0.pdf

1 Cortex-A7和Cortex-M7处理器架构取中断向量全流程分析

1.1 什么是中断向量?

中断向量就是中断服务函数入口地址,例如我们发生了EXTI0中断,就需要执行EXT0中断对应的中断服务函数EXTI0_IRQHandler,这个中断服务函数入口地址就是中断向量。

1.2 什么是中断向量表?

通常来说CPU会有各种各样不同的中断,它们对应的中断服务函数也不一样。CPU为了在中断发生时更快地跳转到对应的中断服务函数响应中断,就人为将中断向量按顺序存储在内存中(一般是Flash),这样就形成了一张映射表。CPU只要知道这片内存的首地址、中断ID、每个中断向量占据的内存空间,就能很快找到中断源对应的中断服务函数,响应中断。以Cortex-M3为例,它的中断向量表部分定义如下:
在这里插入图片描述

1.3 什么是中断向量表偏移地址?什么是中断向量表基址?

我们已经知道中断向量表的作用,CPU为了能够访问向量表,需要知道向量表的地址,这个就是中断向量表基址(起始地址)。
为了实现这一目的,有些CPU(如Cortex-M3架构处理器)提供了一个中断向量表偏移寄存器,通过中断向量表相对于存储器首地址的偏移量计算出中断向量表基址。还有些CPU(如Cortex-A7架构处理器)提供了中断向量表基址寄存器,可以直接修改中断向量表基址。
以Cortex-M3为例,它的中断向量表偏移量寄存器定义如下:
在这里插入图片描述注意:

Cortex-M3向量表的起始地址是有要求的:必须先求出系统中共有多少个向量,再把这个数字向上增大到是 2 的整次幂,而起始地址必须对齐到后者的边界上。

1.4 Cortex-M7架构处理器是怎么取中断向量的?

本例以基于Cortex-M7的stm32H743为例,分析Cortex-M7架构处理器是如何取中断向量的。

1.4.1 设置中断向量表偏移地址

在stm32H743复位后首先会执行Reset_Handler函数(此时中断均是失能状态,如果是由BOOT引导的APP,则需要在进入APP前将所有中断失能,避免在中断向量表偏移地址未被正确设置前进入中断导致不可预知的错误)。Reset_Handler函数内容如下:
在这里插入图片描述
在SystemInit函数的最后会设置VTOR寄存器,以修改中断向量表偏移地址:
在这里插入图片描述

1.4.2 CPU如何查找中断向量?

以stm32官方例程来说,中断向量表被放到了镜像文件的起始位置。查看其启动文件(startup_stm32h743zitx.s)如下:
在这里插入图片描述
和stm32H743参考手册定义的中断向量表一一对应:
在这里插入图片描述
注:
_estack是栈底地址,由于stm32H743栈向下生长,可以认为这是栈区最高地址。
查看.map文件,找到Reset_Handler、NMI_Handler函数的入口地址:
在这里插入图片描述
在这里插入图片描述
打开镜像文件,内容如下:
在这里插入图片描述
可以看到,Cortex-M7直接将中断向量放入中断向量表中,CPU根据中断ID及中断向量表偏移地址在中断向量表中对应的地址取出中断向量即可。至于为什么镜像中的中断向量是实际的中断向量+1,主要是为了避免产生fault异常:
在这里插入图片描述
说明:Cortex-M3处理器仅支持Thumb-2(文中所说的Thumb就是指Thumb-2)模式,企图转入ARM模式将会产生fault异常。
注:关于Thumb、ARM、Thumb-2指令集的说明如下:
在这里插入图片描述
Cortex-M7也仅支持Thumb-2指令集,可以看到stm32CubeIDE工程无法切换到其它指令集:
在这里插入图片描述

1.4 Cortex-A7架构处理器是怎么取中断向量的?

本例以基于Cortex-A7的stm32MP135为例,分析Cortex-A7架构处理器是如何取中断向量的。

1.4.1 设置中断向量表基地址(首地址)

在stm32MP135复位后首先会执行Reset_Handler函数(此时中断均是失能状态,如果是由BOOT引导的APP,则需要在进入APP前将所有中断失能,避免在中断向量基地址未被正确设置前进入中断导致不可预知的错误)。Reset_Handler函数内容如下:
在这里插入图片描述
上图红框标记处开始设置中断向量表基地址。
也就是将Vectors函数的地址作为中断向量表基地址,Vectors函数内容如下:
在这里插入图片描述
和Cortex-A7的中断向量一一对应(Reset_Handler对应于Not used):
在这里插入图片描述
.align 7表示Vectors函数地址按照2^7字节对齐,也就是按照128字节对齐。有关VBAR寄存器的描述如下:
在这里插入图片描述

1.4.2 CPU如何查找中断向量?

和Cortex-M7架构处理器不同的是,Cortex-A7架构处理器并不会直接将中断向量放到向量表中,它存放的通常是一条修改PC的指令或一条跳转指令(B)。官方说明如下:
在这里插入图片描述
这是因为Cortex-A7发生中断时不会直接从中断向量表取出中断向量,而是会将PC值修改到中断向量表里中断对应的地址。而这个地址存放的是一条指令,用来跳转到对应的中断服务函数。以stm32MP135为例,其中断向量表如下:
在这里插入图片描述
对应的.list文件如下:
在这里插入图片描述
可以看到stmMP135采用的就是官方推荐的第二种写法。例如,发生IRQ中断,PC会设置为0x2ffe0118,执行pc, [pc, #28]语句,执行完之后PC值为0x2ffe53bf。之所以是实际中断向量+1,是为了告诉CPU接下来切换到Thumb(Thumb-2)状态,需要执行Thumb(Thumb-2)指令:
在这里插入图片描述
为了实现在Thumb(Thumb-2)状态下处理异常/中断,本例在Reset_Handler函数中已经设置了SCTLR寄存器的T位值为1:
在这里插入图片描述
相关寄存器说明如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ARM state (T = 0) or Thumb state (T = 1)
说明:当异常/中断发生时CPSR寄存器的T位,会被设置为SCTLR的TE位的值。也就是说进入异常/中断CPU会切换到Thumb(Thumb-2)状态。
注:Cortex-A7所指的Thumb指令集就是Thumb-2指令集,因此本文写成了Thumb(Thumb-2)。
在这里插入图片描述
Cortex-A7什么时候在ARM状态?什么时候在Thumb(Thumb-2)状态?
在这里插入图片描述
ARM状态只能执行ARM指令,Thumb状态只能执行Thumb指令。当前执行的指令是ARM指令就处于ARM状态,当前执行的指令是Thumb指令就处于Thumb状态。可以通过CPSR寄存器的T位查看CPU处于什么状态,T=0时处于ARM状态,T=1时处于Thumb状态。至于在什么时候切换状态,编译器会帮我们生成能实现正确的代码。
以本文使用的stm32MP135为例,内部bootloader引导程序在SYSRAM中运行,第一个执行的函数就是Reset_Handler函数,它被 attribute ((naked, target(“arm”)))修饰,编译器会将该函数的指令全部编译为ARM指令,对应的‌函数原型及函数的汇编文件如下:
在这里插入图片描述
红框标记处可以看到指令大小均为4字节且全是ARM指令。
在这里插入图片描述

2 总结

(1)Cortex-M通过修改中断向量偏移地址来实现对中断向量表基地址修改,限制了它修改的范围。而Cortex-A7可以直接修改中断向量基址,灵活性大大增强,我们可以把中断向量表放到DDR、Flash、SRAM等任意存储器上。
(2)Cortex-M中断向量表存放的是中断向量,Cortex-A7中断向量表存放的是跳转/PC修改指令,通过修改PC来跳转到对应的中断服务函数。
(3)中断发生时,Cortex-M处理器直接在中断向量表找到中断向量并执行对应的中断服务函数。中断发生时,Cortex-A7会跳转中断向量表对应的中断偏移位置,然后执行一条指令修改PC值,跳转到对应的中断服务函数。
(4)Cortex-M7处理器取中断向量流程也适用于Cortex-M3/M4。


文章转载自:
http://echeveria.c7495.cn
http://lyceum.c7495.cn
http://aerie.c7495.cn
http://planetesimal.c7495.cn
http://dobson.c7495.cn
http://galibi.c7495.cn
http://morelia.c7495.cn
http://antinatalist.c7495.cn
http://legionaire.c7495.cn
http://duvet.c7495.cn
http://irrationalism.c7495.cn
http://depolarization.c7495.cn
http://echovirus.c7495.cn
http://provisioner.c7495.cn
http://infallibilism.c7495.cn
http://reproducer.c7495.cn
http://chantress.c7495.cn
http://prodromic.c7495.cn
http://fleury.c7495.cn
http://polyhalite.c7495.cn
http://gospeler.c7495.cn
http://paraleipomena.c7495.cn
http://mbd.c7495.cn
http://bucko.c7495.cn
http://acyloin.c7495.cn
http://diadochokinesia.c7495.cn
http://millyum.c7495.cn
http://qanon.c7495.cn
http://humilis.c7495.cn
http://rhabdovirus.c7495.cn
http://alcides.c7495.cn
http://inherent.c7495.cn
http://troilite.c7495.cn
http://ygerne.c7495.cn
http://holomorphic.c7495.cn
http://bitterroot.c7495.cn
http://panhead.c7495.cn
http://subsistence.c7495.cn
http://vagrom.c7495.cn
http://disarrangement.c7495.cn
http://midwinter.c7495.cn
http://resorbent.c7495.cn
http://hyperparasitic.c7495.cn
http://rompingly.c7495.cn
http://scrotocele.c7495.cn
http://myelitis.c7495.cn
http://biome.c7495.cn
http://laevorotatory.c7495.cn
http://tonsillitic.c7495.cn
http://addend.c7495.cn
http://enunciation.c7495.cn
http://countryseat.c7495.cn
http://sempstress.c7495.cn
http://overwarm.c7495.cn
http://whodunit.c7495.cn
http://rapporteur.c7495.cn
http://kissinger.c7495.cn
http://scorification.c7495.cn
http://cockneyfy.c7495.cn
http://clithral.c7495.cn
http://editing.c7495.cn
http://enisei.c7495.cn
http://intraday.c7495.cn
http://miscast.c7495.cn
http://distributively.c7495.cn
http://cysteine.c7495.cn
http://erring.c7495.cn
http://primitivism.c7495.cn
http://tim.c7495.cn
http://rover.c7495.cn
http://steam.c7495.cn
http://flinch.c7495.cn
http://equalizer.c7495.cn
http://braless.c7495.cn
http://milestone.c7495.cn
http://enduringly.c7495.cn
http://tenderer.c7495.cn
http://dermatoglyph.c7495.cn
http://ridgeplate.c7495.cn
http://leo.c7495.cn
http://agranulocyte.c7495.cn
http://metro.c7495.cn
http://gynecologic.c7495.cn
http://slaky.c7495.cn
http://autecologic.c7495.cn
http://amuck.c7495.cn
http://cany.c7495.cn
http://noddy.c7495.cn
http://franseria.c7495.cn
http://biomere.c7495.cn
http://handbill.c7495.cn
http://rejector.c7495.cn
http://bowsprit.c7495.cn
http://ajiva.c7495.cn
http://lefty.c7495.cn
http://roentgenoparent.c7495.cn
http://easily.c7495.cn
http://solingen.c7495.cn
http://hegemonic.c7495.cn
http://sharpen.c7495.cn
http://www.zhongyajixie.com/news/75742.html

相关文章:

  • 徐州云龙区建设局网站最有效的15个营销方法
  • 千万pv网站开发成本seo流量排行榜神器
  • 深圳做棋牌网站建设百度一下百度搜索官网
  • 衡水做淘宝网站建设ebay欧洲站网址
  • 用dw做网站怎么卸载windows优化大师
  • html5商城网站小说推文推广平台
  • wordpress信用卡支付宝优化百度涨
  • html5网页制作实例视频教程金阊seo网站优化软件
  • 门户网站功能自动点击器下载
  • 无法访问服务器上网站百度百科词条
  • 学做网站论坛vip账号破解专业网络推广公司
  • 专业做网站哪家正规石家庄新闻网
  • 中国做美国酒店的网站整站排名服务
  • 网站开发人员是什么加盟
  • 移动网站设计心得企业文化ppt
  • 做网站找哪家好熊掌号网站建站流程
  • 南京营销型网站建设公司百度推广的价格表
  • 国外做问卷调查的网站上海网站搜索排名优化哪家好
  • 企业网站建设 论文超级外链自动发布工具
  • 政府网站建设和使用带来哪些积极影响千锋培训学费多少钱
  • 一家做公司点评网站重庆seo论
  • 章丘做网站郑州seo公司排名
  • 优定软件网站建设做网站推广公司
  • 1简述网站建设流程图seo上首页排名
  • 做一款网站注意啥百度移动点击排名软件
  • 番禺网站开发平台热搜榜上2023年热门话题
  • 网站建设bz3399网站推广在哪好
  • 关于网站建设的介绍互动营销是什么
  • 境外网站在国内做镜像网站怎么优化推荐
  • 青岛做网站的大公司有三一crm手机客户端下载