查看: 2194|回复: 6

[其他] gpio中断疑问

[复制链接]
  • TA的每日心情
    开心
    2020-4-30 08:32
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    79

    主题

    239

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1095
    最后登录
    2025-6-7
    发表于 2015-9-16 16:42:52 | 显示全部楼层 |阅读模式
    本帖最后由 xxs-133546 于 2015-9-16 16:46 编辑

    下面函数框架是PE生成的,

    void gpio1_PORTC_IRQHandler(void)
    {
      PORT_HAL_ClearPortIntFlag(PORTC_BASE_PTR);
      /* Write your code here ... */
      if(GPIO_DRV_IsPinIntPending(kGpioPS2CLK))
      {
              GPIO_DRV_ClearPinIntFlag(kGpioPS2CLK);
              __ps2_clk_irq();
      }
    }
    这几行是我添加的,
      if(GPIO_DRV_IsPinIntPending(kGpioPS2CLK))
      {
              GPIO_DRV_ClearPinIntFlag(kGpioPS2CLK);
              __ps2_clk_irq();
      }

    程序序进入gpio1_PORTC_IRQHandler()后首先执行
    PORT_HAL_ClearPortIntFlag(PORTC_BASE_PTR);
    由于中断标志被清除了
    if(GPIO_DRV_IsPinIntPending(kGpioPS2CLK))条件是否为假;
    这两条语句:
    GPIO_DRV_ClearPinIntFlag(kGpioPS2CLK);
      __ps2_clk_irq();
    是不是不被执行?

    如果不要 if(GPIO_DRV_IsPinIntPending(kGpioPS2CLK))条件判断,

    PORTC假设有多个Pin设置了中断,那如何判断是那个Pin产生了中断呢?




    我知道答案 目前已有6人回答
    Image 1.png
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
    发表于 2015-9-16 18:11:50 | 显示全部楼层
    换下顺序不就可以了,将PORT_HAL_ClearPortIntFlag(PORTC_BASE_PTR);放在处理函数的最后
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-4-30 08:32
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    79

    主题

    239

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1095
    最后登录
    2025-6-7
     楼主| 发表于 2015-9-16 18:25:25 | 显示全部楼层
    cxtarm 发表于 2015-9-16 18:11
    换下顺序不就可以了,将PORT_HAL_ClearPortIntFlag(PORTC_BASE_PTR);放在处理函数的最后 ...

    应该可以,PORT_HAL_ClearPortIntFlag(PORTC_BASE_PTR)是PE生成的,
    不过PE要求用户自己的代码/* Write your code here ...*/
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2015-9-16 20:39:42 | 显示全部楼层
    楼主看一下2个操作是否为同一寄存器,这个可以实际测试的。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-4-30 08:32
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    79

    主题

    239

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1095
    最后登录
    2025-6-7
     楼主| 发表于 2015-9-16 21:37:10 | 显示全部楼层
    安 发表于 2015-9-16 20:39
    楼主看一下2个操作是否为同一寄存器,这个可以实际测试的。

    谢谢 安!
    仔细查看了一下手册,每个pin有两个中断状态寄存器,针对每个管脚的控制寄存器PORTx_PCRn,bit_24是中断标志位,而每个PORT口还有一个全局中断状态寄存器,PORTx_ISFR,每个bit对应一个Pin,手册描述对这两个寄存器任意一个清零都可以,不知道会不会影响到另一个寄存器,如果影响到,我上述代码就不行,看来要实际调试一下才知道。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16701
    最后登录
    1970-1-1
    发表于 2015-9-16 23:52:35 | 显示全部楼层
    学习了
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
    发表于 2015-9-17 09:50:40 | 显示全部楼层
    xxs-133546 发表于 2015-9-16 18:25
    应该可以,PORT_HAL_ClearPortIntFlag(PORTC_BASE_PTR)是PE生成的,
    不过PE要求用户自己的代码/* Write y ...

    那只是建议,你可以不接受他的建议
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 01:56 , Processed in 0.100753 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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