OpenEdv-开源电子网

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

关于外部中断服务函数的问题,请教原子哥

[复制链接]

7

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-11-20
在线时间
7 小时
发表于 2016-6-21 21:56:57 | 显示全部楼层 |阅读模式
1金钱
有一个问题,
    STM32的外部中断线 9-5触发的是同一个中断服务函数,加入我配置了PD5 PD6的外部中断,并且PD6的抢占优先级高
       那么:
             假如程序现在正在响应PD5的中断,这时PD6触发了中断,会打断PD5的中断服务函数在进一次相同的中断服务函数吗?

最佳答案

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

是同一个中断,只有一个优先级,你的假设不存在。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-6-21 21:56:58 | 显示全部楼层
是同一个中断,只有一个优先级,你的假设不存在。
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11546
金钱
11546
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-6-21 22:02:23 | 显示全部楼层

不了解,
但同一个中断能设置两个级别吗?

回复

使用道具 举报

7

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2013-11-20
在线时间
7 小时
 楼主| 发表于 2016-6-21 22:13:19 | 显示全部楼层
xuande 发表于 2016-6-21 22:02
不了解,
但同一个中断能设置两个级别吗?

他们不是同一个中断,16个外部中断线,是16个不同的中断,只是 5-9 用同一个中断服务函数
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-6-22 09:44:51 | 显示全部楼层
力志强 发表于 2016-6-21 22:13
他们不是同一个中断,16个外部中断线,是16个不同的中断,只是 5-9 用同一个中断服务函数

你确定他们是16个中断线,而不是共用中断线,而是一人一个?
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2016-6-22 09:46:14 | 显示全部楼层
都是抢占不会抢占,抢占会抢占响应优先级中断,此时不会嵌套,还有你要尽量减小中断里的操作
回复

使用道具 举报

4

主题

42

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2016-4-7
在线时间
32 小时
发表于 2016-6-22 10:34:34 | 显示全部楼层
xyl210xyl 发表于 2016-6-22 09:46
都是抢占不会抢占,抢占会抢占响应优先级中断,此时不会嵌套,还有你要尽量减小中断里的操作

减小中断里的操作是为了防止溢出吗?
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2016-6-22 15:19:44 | 显示全部楼层
zhouchen5353845 发表于 2016-6-22 10:34
减小中断里的操作是为了防止溢出吗?

中断本来就是进去处理一下很快就出来的,你在中断里太久不久影响主进程的运行了
回复

使用道具 举报

10

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
837
金钱
837
注册时间
2016-5-13
在线时间
182 小时
发表于 2016-6-22 15:52:20 | 显示全部楼层
外部中断5-9是共用一个中断函数EXTI9_5_IRQHandler的,然后在EXTI9_5_IRQHandler中判断是5-9中哪个触发的,例:
void EXTI9_5_IRQHandler(void)
{                
        if( EXTI_GetITStatus(EXTI_Line5) != RESET )
        {

                EXTI_ClearITPendingBit(EXTI_Line5);
        }
        if( EXTI_GetITStatus(EXTI_Line6) != RESET )
        {

                EXTI_ClearITPendingBit(EXTI_Line6);
        }
}
所以不存在把5、6分开设置优先级,假如两个同时触发了,你想哪个优先运行,就在中断服务函数中让它优先判断
相信自己,每一步都是在进步
回复

使用道具 举报

3

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
金钱
436
注册时间
2015-1-13
在线时间
70 小时
发表于 2016-6-24 03:42:10 来自手机 | 显示全部楼层
可打断,不可以重入!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 13:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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