wujian100中GPIO口的中断控制问题

本文介绍了在wujian100平台上遇到的GPIO中断控制问题。原本计划使用PWM捕获中断,但未能成功,转而利用GPIO中断。在尝试通过GPIO获取PWM输入波形时,发现中断清除寄存器无法有效清除中断,导致无限循环。通过阅读手册和修改中断函数,实现了1s间隔的中断计时。作者指出,问题可能在于中断清除机制,并分享了修改后的中断处理代码。
摘要由CSDN通过智能技术生成

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_EO

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值