OpenEdv-开源电子网

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

中断的问题

[复制链接]

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2014-5-25
在线时间
18 小时
发表于 2016-11-18 17:10:56 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 stopshooting 于 2016-11-18 17:13 编辑

   当系统发生中断时,PC将跳往响应的中断入口地址进入中断,相关寄存器入栈后,执行ISR,最后从栈中恢复寄存器内容,退出ISR。     我在想,如果在ISR开始之初就清除了相应的中断请求标志,CPU是怎么知道PC正处于ISR之中的?这个时候如果再次发生同样的中断,是不是会嵌套自己。

最佳答案

查看完整内容[请看2#楼]

它是单核的,正忙着压栈,不会执行你的这个指令。 ARM Cortex-M3 有内核寄存器(SCB->ICSR)专门用来处理中断重入问题: 参考资料:Cortex™-M3 Devices Generic User Guide
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-11-18 17:10:57 | 显示全部楼层
本帖最后由 xkwy 于 2016-11-18 17:40 编辑
在ISR开始之初就清除了相应的中断请求标志

它是单核的,正忙着压栈,不会执行你的这个指令。

ARM Cortex-M3 有内核寄存器(SCB->ICSR)专门用来处理中断重入问题:

SCB.ICSR.png

参考资料:Cortex™-M3 Devices Generic User Guide  
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2014-5-25
在线时间
18 小时
 楼主| 发表于 2016-11-20 23:43:52 | 显示全部楼层
xkwy 发表于 2016-11-18 17:30
它是单核的,正忙着压栈,不会执行你的这个指令。

ARM Cortex-M3 有内核寄存器(SCB->ICSR)专门用来处 ...

谢谢你的回答,这个vectpending r0对中断嵌套数量进行计数,如果有中断发生,计数值会加一,中断结束,计数值减一。问题是加一很好理解,但是cpu通过什么判断这个ISR是否结束,然后减一?
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-11-21 12:19:40 | 显示全部楼层
stopshooting 发表于 2016-11-20 23:43
谢谢你的回答,这个vectpending r0对中断嵌套数量进行计数,如果有中断发生,计数值会加一,中断结束,计 ...

你要是想真了解就去看ARM的架构手册,《ARM®v7-M Architecture Reference Manual》

一千多页,非常详尽,能回答你的所有问题。

你这样一点一点的问没什么太大的意义(仅满足你的好奇心?)

CPU怎么知道中断结束了?

给你举个例子吧,在51里普通函数返回用RET指令,中断函数返回使用的是RETI指令
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-5-24 06:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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