5378|8

39

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

arm端触发fpga端中断 [复制链接]

  本帖最后由 tc317891209 于 2016-9-27 15:08 编辑


以上是Qsys连线和设备树,中断号为3,对应手册GIC :75
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

MODULE_LICENSE("Dual BSD/GPL");

struct resource *pio_res = NULL;

irqreturn_t pio_interrupt(int irqno, void *devid)
{
        printk("irqno = %d\n", irqno);
        return IRQ_HANDLED;
}

int fpga_pio_init(struct platform_device *p)
{
        printk("Probe....\n");
        int ret = 0;
        int irqflags;   

        pio_res = platform_get_resource(p,IORESOURCE_IRQ,0);
        if (pio_res == NULL) {
                printk("No resource !\n");
        }

        irqflags = IRQF_DISABLED | (pio_res->flags & IRQF_TRIGGER_MASK);  
        ret = request_irq(pio_res->start, pio_interrupt, irqflags, "fpga_irq", NULL);
        if (ret < 0) {
                printk("failed request irq: irqno = irq_res->start");
        }
        printk("register irq success!\n");
        return 0;
}

static int fpga_pio_exit(struct platform_device *p)
{
        printk("Remove...\n");
        free_irq(pio_res->start, NULL);
        printk("unregister irq exit\n");
        return 0;
}

static const struct of_device_id fpga_pio_of_matches[] = {
                {.compatible = "DE1-SoC,FPGA_IRQ0",},
                { }
};
MODULE_DEVICE_TABLE(of, fpga_pio_of_matches);
static struct platform_driver fpga_pio_driver = {
        .driver        = {
                .name   = "fpga_irq",
                .owner         = THIS_MODULE,
                .of_match_table = of_match_ptr(fpga_pio_of_matches),
        },
        .probe   = fpga_pio_init,
        .remove  = fpga_pio_exit,
};
module_platform_driver(fpga_pio_driver);请大家帮忙看下,我的button pio是接到一个按键上,按理说按一下按键应该会进入中断处理函数,但是按了按键没反应,帮忙看看是不是程序存在问题。谢谢大家。有关于ARM想要交流的私信我。


此帖出自Altera SoC论坛

最新回复

楼主您好,问题解决了么?我也是,fpga端中断号是0,对应的ARM侧中断号是72   ALT_INT_INTERRUPT_F2S_FPGA_IRQ0  =  72, /*!< # */     ALT_INT_INTERRUPT_F2S_FPGA_IRQ1  =  73, /*!< # */     ALT_INT_INTERRUPT_F2S_FPGA_IRQ2  =  74, /*!< # */     ALT_INT_INTERRUPT_F2S_FPGA_IRQ3  =  75, /*!< # */ 我的也是无法触发,用中断注册函数注册成功,但就是进不去中断函数  详情 回复 发表于 2016-12-4 22:28
点赞 关注
 
 

回复
举报

1234

帖子

4

TA的资源

纯净的硅(高级)

沙发
 
这是你的整个程序吗?

简单的流程分析一下吧
module_platform_driver(fpga_pio_driver); 用这个宏定义指定名称的平台设备驱动注册函数和平台设备驱动注销函数
这个仅仅只是设备驱动,你的硬件设备资源device呢? 透过“fpga_irq”去全局搜索,至于你那  .probe  只有匹配的上的时候,才会调用,那都是后话

做驱动开发,要具备一定的驱动调试手段,哪怕是个
printk("wei mark here : %s : %d at %s()/n",__FILE__ ,__LINE__ ,__FUNCTION__ );  都可以去调试
这个可以很直观的看到程序执行到哪了


此帖出自Altera SoC论坛

点评

谢谢您回答。这个程序编译没有问题,加载驱动也没有问题,在/proc/interrupt 下也能看到中断注册成功,问题是fpga端按按键,arm端没有进入中断处理函数。不知道您遇到过没,谢谢!  详情 回复 发表于 2016-9-27 15:42
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 
 
 

回复

39

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
ywlzh 发表于 2016-9-27 15:31
这是你的整个程序吗?

简单的流程分析一下吧
module_platform_driver(fpga_pio_driver); 用这个宏定义 ...

谢谢您回答。这个程序编译没有问题,加载驱动也没有问题,在/proc/interrupt 下也能看到中断注册成功,问题是fpga端按按键,arm端没有进入中断处理函数。不知道您遇到过没,谢谢!
此帖出自Altera SoC论坛

点评

那就是中断的问题了 查查pio_res->start是不是你需要的对应引脚资源的中断向量 再就是给个建议,Linux里面函数基本都会被static给修饰一下的,不做静态函数使用也是要被 EXPORT_SYMBOL给修饰一下的,做全局调用  详情 回复 发表于 2016-9-27 16:54
 
 
 

回复

1234

帖子

4

TA的资源

纯净的硅(高级)

4
 
本帖最后由 ywlzh 于 2016-9-27 16:58 编辑
tc317891209 发表于 2016-9-27 15:42
谢谢您回答。这个程序编译没有问题,加载驱动也没有问题,在/proc/interrupt 下也能看到中断注册成功,问 ...

那就是中断的问题了 查查pio_res->start是不是你需要的对应引脚资源的中断向量

再就是给个建议,Linux里面函数基本都会被static给定义一下的,不做静态函数使用也是要被
EXPORT_SYMBOL给修饰一下的,做全局调用
刚才看一下申请中断函数
request_irq(unsigned int  irq, irq_handler_t  handler, unsigned long  flags, const char  *name, void  *dev)  

你觉得你的irqflags作为参数合适吗?为何不直接用IRQF_DISABLED
此帖出自Altera SoC论坛
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 
 
 

回复

39

帖子

0

TA的资源

一粒金砂(中级)

5
 
altera soc又没有人弄过中断的,麻烦指导一下谢谢!
此帖出自Altera SoC论坛

点评

你可以试着用platform_get_irq获取中断号 再用devm_request_any_context_irq注册中断号, 我这样成功了,  详情 回复 发表于 2016-9-28 13:18
 
 
 

回复

169

帖子

1

TA的资源

一粒金砂(高级)

6
 
tc317891209 发表于 2016-9-28 09:38
altera soc又没有人弄过中断的,麻烦指导一下谢谢!

你可以试着用platform_get_irq获取中断号
再用devm_request_any_context_irq注册中断号,
我这样成功了,
此帖出自Altera SoC论坛

点评

谢谢啊,我试试  详情 回复 发表于 2016-9-28 13:26
 
 
 

回复

39

帖子

0

TA的资源

一粒金砂(中级)

7
 
yupc123 发表于 2016-9-28 13:18
你可以试着用platform_get_irq获取中断号
再用devm_request_any_context_irq注册中断号,
我这样成功了 ...

谢谢啊,我试试
此帖出自Altera SoC论坛

点评

能把你的代码贴出来看看吗  详情 回复 发表于 2016-9-28 13:27
 
 
 

回复

39

帖子

0

TA的资源

一粒金砂(中级)

8
 

能把你的代码贴出来看看吗
此帖出自Altera SoC论坛
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

9
 
楼主您好,问题解决了么?我也是,fpga端中断号是0,对应的ARM侧中断号是72
  ALT_INT_INTERRUPT_F2S_FPGA_IRQ0  =  72, /*!< # */
    ALT_INT_INTERRUPT_F2S_FPGA_IRQ1  =  73, /*!< # */
    ALT_INT_INTERRUPT_F2S_FPGA_IRQ2  =  74, /*!< # */
    ALT_INT_INTERRUPT_F2S_FPGA_IRQ3  =  75, /*!< # */
我的也是无法触发,用中断注册函数注册成功,但就是进不去中断函数
此帖出自Altera SoC论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表