OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6078|回复: 2

M3 M4内核异常的具体行为

[复制链接]

17

主题

84

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2015-11-30
在线时间
22 小时
发表于 2015-12-9 15:46:09 | 显示全部楼层 |阅读模式
5金钱
        我看了一下cortex-M3的权威指南,有些问题不明白,想请教各位大神帮忙指点。
        在那本书的第九章,讲的就是中断的具体行为,其中写道:
            中断/异常的相应序列
                1、入栈:把八个寄存器的值压入栈中
                2、取向量:从向量表中找出对应的服务程序入口地址。
                3、选择堆栈指针MSP/PSP,更新堆栈指针SP,跟新连接寄存器LR,更新程序计数器PC。

            行为的具体行为介绍,压栈是硬件自动完成,压入八个寄存器的值,包括了r1,r2,r3,r12,pc,lr,xPSR等保护现场。然后是取向量,有指令总线自动完成。上面的这些几乎都是有硬件完成,且是自动,不用多管。关键是下面的更新寄存器。我原样写上来!
                入栈和取向量操作完成之后。在执行服务立城之前,还要更新一系列的寄存器。
                1、sp:在入栈之后会把堆栈指针(PSP/MSP)更新到新的位置。在执行服务例程时,将由MSP负责对堆栈的访问。
                2、PSR:更新IPSR字段的值为新响应的异常编号。
                3、PC:在取完向量之后,PC将指向服务例程的入口地址。
                4、LR:在出入ISR的时候,LR的值将从新的到诠释、、、、(诠释内容略,不用关心)。
                以上是响应异常时的通用寄存器的变化,另一方面,在NVIC中,也有跟新若干个相关寄存器。(这个我几乎可以确定是自动更新,用户程          序不用关心)。我想知道的是SP会跟新如果他更新了,那么栈就改变了,要想在会来,要怎回来。不管他是硬件更新还是程序更新,总要有个              可以恢复SP的方法吧。书上直说会更新,没有解释怎么更新,也没有说怎么恢复,只是说了遇到某些特定指令后启动中断返回序列,然后就堆栈SP      就回来了。
                我想问的就是SP是怎么恢复的,是在新的SP的栈低存放着原来的SP吗?还是有其他的机制保存这个SP?我经过单步调试  几乎看不出来结          果!    
     
      (cortex-m3权威指南 Joseph yiu著 宋岩 译   第九章   P145)           

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-12-9 22:46:04 | 显示全部楼层
回复

使用道具 举报

17

主题

84

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2015-11-30
在线时间
22 小时
 楼主| 发表于 2015-12-12 11:00:45 | 显示全部楼层
求大神解决啊!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 18:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表