NXP imx6q linux4.1.15中关于pwm可以很简单的使用pwm_requeset();pwm_config();pwm_enable();pwm_disable();进行申请、配置、使能和禁止;但是内核中并没有对pwm中断进行配置, ret = request_irq(irq_num, timer3_irq_handle, IRQ_TYPE_EDGE_RISING, DEVICENAME_MOTOR, pdev);(申请的相关参数是作者的项目中的,根据实际进行修改)可以进行中断申请,但是不会进入中断服务函数中,可以在pwm-imx.c中加入pwm_irq_enable();中断标志清除irq_clearflags();中断禁止irq_disable();
static int pwm_irq_enable(struct imx_chip *imx){
unsigned long reg;
reg = readl(imx->mmio_base + MX3_PWMMIR);
reg |= MX3_PWM_ROV_IRQ_EN;
writel(reg,imx->mmio_base + MX3_PWMMIR);
reg = readl(imx->mmio_base + MX3_PWMMIR);
}
static int irq_clearflags(void){
unsigned long reg;
reg = readl(0xEF938000 + 0x04);
reg |= 0x40;
writel(reg,0xEF938000 + 0x04);
}
static int irq_disable(void)
{
writel(0,0xEF938000 + 0x08);
}
中断处理函数为:
static irqreturn_t timer3_irq_handle(int irq, void *devid)
{
irq_clearflags();//清除中断标志
//中断处理
}
return IRQ_HANDLED;
}
相关的配置要根据自己的实际情况进行修改!