OpenEdv-开源电子网

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

共用中断线,中断服务子函数不能判断中断源的BUG

[复制链接]

2

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2018-3-14
在线时间
33 小时
发表于 2019-6-13 20:11:12 | 显示全部楼层 |阅读模式
今天发现外部中断同一个中断服务子函数不能判断中断源。如下面所示,假设发生了line9中断,line5处理函数1也会执行,假设发生了line9中断,处理函数2也会执行。void EXTI9_5_IRQHandler(void)//中断服务函数,如果中断线是5-9。
{
        if(EXTI_GetITStatus(EXTI_Line5) != RESET)
        {
                处理函数1
                EXTI_ClearITPendingBit(EXTI_Line5);     
        }  

        if(EXTI_GetITStatus(EXTI_Line9) != RESET)
        {
                处理函数2
                EXTI_ClearITPendingBit(EXTI_Line9);     
        }
}       
库函数里面清中断标志函数,只会把对应中断标志置1来清除对应中断,所以我觉得应该是假如上一次发生了对应中断,下一次该标志位还是置位,所以即使线中断没有发生,对应处理函数还是会执行。

void EXTI_ClearITPendingBit(uint32_t EXTI_Line)
{
  /* Check the parameters */
  assert_param(IS_EXTI_LINE(EXTI_Line));

  EXTI->PR = EXTI_Line;
}

不知道大家有没有遇到过这样的问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

32

主题

1938

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4259
金钱
4259
注册时间
2018-5-11
在线时间
886 小时
发表于 2019-6-13 22:12:29 | 显示全部楼层
不应该哦,
如果想保险一些的话,
可以在中断服务函数中再检测一下对应引脚的电平。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2018-3-14
在线时间
33 小时
 楼主| 发表于 2019-6-14 12:39:48 | 显示全部楼层
warship 发表于 2019-6-13 22:12
不应该哦,
如果想保险一些的话,
可以在中断服务函数中再检测一下对应引脚的电平。

手册上说,EXTI_PR寄存器:当在外部中断线上发生了选择的边沿事件,该位被置’1’。在该位中写入’1’可以清除它。试过了清除标志位后,把EXTI_PR寄存器全部位赋值为0,仍然还是会同时执行两个线中断处理函数。
看来仅凭EXTI_PR寄存器对应位是不能判断中断源。

外部中断寄存器

外部中断寄存器
回复 支持 反对

使用道具 举报

32

主题

1938

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4259
金钱
4259
注册时间
2018-5-11
在线时间
886 小时
发表于 2019-6-14 19:29:02 | 显示全部楼层
radar 发表于 2019-6-14 12:39
手册上说,EXTI_PR寄存器:当在外部中断线上发生了选择的边沿事件,该位被置’1’。在该位中写入’1’可 ...

应该是没有问题的,
二者除了共用中断服务函数,
彼此是完全独立的,
你找一下其它的原因吧
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-3-29 21:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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