Прерывание IRQ не сработало - PullRequest
0 голосов
/ 06 июня 2018

Мой код драйвера:

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;
}

Мое прерывание зарегистрировано в / proc / interrupts, но оно не запускается.

Я подключил UART с моимШтырьковый прерыватель.Я отправляю данные через порт uart.Мой обработчик IRQ не вызывается в то время.

Нужна помощь по этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...