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