Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux IRQ中断未被触发_Linux_Linux Kernel_Pwm_Irq - Fatal编程技术网

Linux IRQ中断未被触发

Linux IRQ中断未被触发,linux,linux-kernel,pwm,irq,Linux,Linux Kernel,Pwm,Irq,我的驱动程序代码: static irqreturn_t pwm_cnt_interrupt(int irq, void *data) { printk("==> %s\r\n", __func__); return IRQ_HANDLED; } static int ecap_cnt_probe(struct platform_device *pdev) { pc = devm_kzalloc(&pdev->dev, sizeof(*pc)

我的驱动程序代码:

static irqreturn_t pwm_cnt_interrupt(int irq, void *data)
{

    printk("==> %s\r\n", __func__);

    return IRQ_HANDLED;

}

static int ecap_cnt_probe(struct platform_device *pdev)
{

    pc = devm_kzalloc(&pdev->dev, sizeof(*pc), GFP_KERNEL);
    if (!pc)
            return -ENOMEM;

    clk = devm_clk_get(&pdev->dev, "fck");
    if (IS_ERR(clk)) {
            if (of_device_is_compatible(np, "ti,counter-ecap")) {
                    dev_warn(&pdev->dev, "Binding is obsolete.\n");
                    clk = devm_clk_get(pdev->dev.parent, "fck");
            }
    }

    if (IS_ERR(clk)) {
            dev_err(&pdev->dev, "failed to get clock\n");
            return PTR_ERR(clk);
    }

    pc->clk_rate = clk_get_rate(clk);
    if (!pc->clk_rate) {
            dev_err(&pdev->dev, "failed to get clock rate\n");
            return -EINVAL;
    }

    /* Get PWM IRQ number */
    ecapirq = platform_get_irq(pdev, 0);
    if (ecapirq < 0) {
        printk(KERN_ERR "Could not get IRQ");
        return -EINVAL;
    }
    printk(KERN_DEBUG "irq =  %d\n", ecapirq);

    oreore_dentry = debugfs_create_file("counter", 0666, NULL, &value, &fops);

    if(request_irq(ecapirq, pwm_cnt_interrupt, IRQF_SHARED,
                    "counter", (void *)&counter)) {
            printk(KERN_ERR "pwm counter: Can't allocate irq %d\n",
                            ecapirq);
            return -EBUSY;
    }
    enable_irq(ecapirq);
    return 0;
}
静态irqreturn\t pwm\u cnt\u中断(int-irq,void*数据)
{
printk(“==>%s\r\n”,函数);
返回已处理的IRQ_;
}
静态int ecap\U cnt\U探头(结构平台设备*pdev)
{
pc=devm_kzalloc(&pdev->dev,sizeof(*pc),GFP_内核);
如果(!pc)
return-ENOMEM;
clk=devm_clk_get(&pdev->dev,“fck”);
如果(是错误(时钟)){
如果(设备的)兼容(np,“ti,计数器ecap”)){
dev_警告(&pdev->dev,“绑定已过时。\n”);
clk=devm_clk_get(pdev->dev.parent,“fck”);
}
}
如果(是错误(时钟)){
dev_err(&pdev->dev,“获取时钟失败\n”);
返回PTR_ERR(时钟);
}
pc->clk\U率=clk\U获取率(clk);
如果(!pc->时钟频率){
dev_err(&pdev->dev,“无法获取时钟速率\n”);
返回-艾因瓦尔;
}
/*获取PWM IRQ编号*/
ecapirq=平台获取irq(pdev,0);
if(ecapirq<0){
printk(KERN_ERR“无法获取IRQ”);
返回-艾因瓦尔;
}
printk(内核调试“irq=%d\n”,ecapirq);
oreore\u dentry=debugfs\u create\u文件(“counter”,0666,NULL,&value,&fops);
如果(请求irq(ecapirq、pwm控制中断、IRQF共享、,
“计数器”(无效*)&计数器){
printk(KERN_ERR“pwm计数器:无法分配irq%d\n”,
ecapirq);
返回-EBUSY;
}
启用irq(ecapirq);
返回0;
}
我的中断已在/proc/interrupts中注册 但是,它不会被触发

我已经用我的pwm中断引脚连接了UART。我正在使用uart端口发送数据。我的irq处理程序当时没有被调用


需要这方面的帮助。

正在等待他人的回复。可能有几个问题。首先,硬件本身对所讨论的引脚没有任何作用(使用示波器)。接下来,管脚本身配置错误(请检查电路板的管脚控制配置)。只有这样,检查这里的代码,从中我看不到任何与问题相关的东西。另外,检查sysfs IRQ属性和GPIO/pinctrl状态。