UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

取消
显示结果 
搜索替代 
您的意思是: 
223 次查看
注册日期: ‎04-15-2019

linux下带有中断自定义IP核的驱动的问题

您好,我在调试linux中断的时候碰到了如下的问题。我先给您描述下我的应用场景!1-1.png2.png图23.png

图1和图2是我封装的my_ip_test里面的核心代码,图1是一个秒脉冲发生器,通过Q输出,然后这个方波连到了中断上,Q引脚也设置了中断属性,上升沿触发中断!

下面是驱动中的代码,我是手动设置中断号的,设备树里生成的中断号是29,而且我驱动是按照misc设备写的,不是platform驱动。

static int my_ip_open(struct inode * inode , struct file * filp)
{
int ret = 0;
ret = request_irq(MY_IP_IRQ, button_irq_handle, IRQF_TRIGGER_RISING , DEVICE_NAME, NULL); //申请中断
if (ret)
{
printk("request_irq error=%d\n",ret);
return ret;
}
else
{
printk("irq = %d\n", MY_IP_IRQ);
printk("irq_devname = %s\n", DEVICE_NAME);
return 0;
}

}

 

//中断处理函数
static irqreturn_t button_irq_handle(int irq, void *dev_id)
{
printk("start to irq_handle and MY_IP_IRQ is %d",MY_IP_IRQ);
/* 解除read函数睡眠状态 */
button_condition = 1; //表示中断发生
wake_up_interruptible(&button_waitq); //唤醒休眠的进程
kill_fasync(&button_async, SIGIO, POLL_IN); //发送SIGIO信号给应用层
return IRQ_RETVAL(IRQ_HANDLED);
}

通过打印出的调试信息可以看出,request_irq有申请到中断号,返回值正常,但是没有进入中断处理函数,您知道我是哪个地方存在问题吗?还有一个问题就是我使用cat /proc/interrupts时找不到我申请的中断,希望您帮忙指导下,在这个地方困扰很久了

0 项奖励
3 条回复3
Xilinx Employee
Xilinx Employee
175 次查看
注册日期: ‎03-27-2013

回复: linux下带有中断自定义IP核的驱动的问题

HI @chaorenbuhuifei ,

 

Linux driver的自定义中断处理我建议参考petalinux-create -t modules --name <user-module-name> --enable生成的模板,配合create and package IP生成的带中断的IP模板(会生成对应的DTS,可以作为DTS的参考)。在能正常工作的情况下再考虑做自定义的修改,调试难度会小很多的。

 

Best Regards,
Jason
-----------------------------------------------------------------------------------------------
Please mark the Answer as "Accept as solution" if the information provided is helpful.

Give Kudos to a post which you think is helpful and reply oriented.
-----------------------------------------------------------------------------------------------
Highlighted
Contributor
Contributor
158 次查看
注册日期: ‎09-10-2018

回复: linux下带有中断自定义IP核的驱动的问题

可以按如下找到你的中断号吗?
 
所有的中断可以在fsbl的bsp文件夹xparameters_ps.h中找到,可以在sdk中创建一个工程打开该文件。
  •  PL的中断号都是该文件中的数值-32,比如#define XPS_FPGA0_INT_ID 121U,那么如果连到第0个中断引脚,那么在Linux中的配置中断号为121-32=89。但是在cat /proc/interrupts中显示为121
  •  PS的中断号,比如#define XPS_UART0_INT_ID  (21U + 32U),那么在Linux中的中断号为21,但是在cat /proc/interrupts中显示为53
Xilinx Employee
Xilinx Employee
116 次查看
注册日期: ‎03-27-2013

回复: linux下带有中断自定义IP核的驱动的问题

HI @dongkesi ,

 

感觉你的计算方式没问题。

另外Linux中的ID可以参考petalinux工程编译完之后自动生成的DTS/DTSI中的值,

cat /proc/interrupts会附带相关的中断对应的IP详细信息都可以作为验证。

如果有具体什么地方不相符合的,可以发个帖子详细讨论下的。

 

Best Regards,
Jason
-----------------------------------------------------------------------------------------------
Please mark the Answer as "Accept as solution" if the information provided is helpful.

Give Kudos to a post which you think is helpful and reply oriented.
-----------------------------------------------------------------------------------------------
0 项奖励