wujian100中GPIO口的中断控制问题

wujian100中GPIO口的中断控制问题

由于设计的需求,原本是想要利用PWM的捕获中断,进行中断的定义,但是研究了一会,发现PWM一直进不了中断状态。
但是在无意中发现,GPIO中也有中断函数。
因此萌发出利用GPIO获取PWM的输入波形,从而进入中断状态。
但是官方wujian100给出的中断vic案例中只是简单利用GPIO中断直接跳出循环,并没有涉及连续边沿中断的应用。
于是我修改了代码,利用PWM输入GPIO口,想产生1s的中断尝试一下,发现中断间隔并不是1s。
因此调试观察GPIO的中断情况,发现当产生中断后,GPIO中断清除寄存器不能将中断清除,导致无限的进入中断。

修改过程

阅读手册,获得GPIO基础地址为base = 0x60018000。
在这里插入图片描述
清除寄存器
手册中找到清除中断位原理,为在Clear interrupt寄存器中写入1
在c项目中GPIO口调用的中断位清除函数定义。

static void gpio_irq_clear(gpio_pin_handle_t pin, uint32_t idx)
{
   
    wj_oip_gpio_pin_priv_t *gpio_pin_priv = pin;

    /* convert portidx to port handle */
    wj_oip_gpio_priv_t *port_handle = &gpio_handle[gpio_pin_priv->portidx];
    
    wj_oip_gpio_control_reg_t *gpio_control_reg = (wj_oip_gpio_control_reg_t *)(port_handle->base + 0x30);
    
    gpio_control_reg->PORTA_EOI = idx;	//清除中断
}

观察发现其是在 gpio_control_reg->PORTA_EOI 对应的GPIO口写入1使其执行中断清除(对应手册的清除中断寄存器)。

但是经调试发现

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值