ultrascale学习笔记之uio中断

1.版本说明

2.概述

本文主要实现PL端中断PS功能,并且支持多个中断信号。

2.1.工具

  • xilinx vivado 2018.3
  • xilinx sdk 2018.3
  • petalinux 2018.3
  • linux-xlnx-xilinx-v2018.3 (源码,辅助分析,Xilinx github可下载)

2.2.平台

  • ZCU106

2.3.重要参考资料

linux-xlnx-xilinx-v2018.3\Documentation\devicetree\bindings\interrupt-controller\xilinx,intc.txt

3.软件VIVADO工程

PL端使用vio来产生中断信号,配合linux软件验证。

4.软件PETALINUX工程

使用UIO方法,应用层直接操作中断
设备树:

/include/ "system-conf.dtsi"
/ {
    chosen {
        bootargs = "earlycon console=ttyPS0,115200 clk_ignore_unused uio_pdrv_genirq.of_id=generic-uio";
        stdout-path = "serial0:115200n8";
    };
};

&amba_pl {
    uio@0{
        compatible="generic-uio";
        status="okay";
        interrupt-controller;
        interrupt-parent=<&gic>;
        interrupts=<0x0 89 0x1>; /* 0x1 = posedge 0x4 = high */
    };
    uio@1{
        compatible="generic-uio";
        status="okay";
        interrupt-controller;
        interrupt-parent=<&gic>;
        interrupts=<0x0 90 0x1>; /* 0x1 = posedge 0x4 = high */
    };
};

5.linux命令

  • cat /proc/interrupts

6.软件SDK工程

    pid_t pid;
    pthread_t tid;
    int fd;
    uint32_t uio_key = 1;
    uint32_t uio_value = 0;
    int err;

    pid = getpid();
    tid = pthread_self();
    printf("%s pid %lu tid %lu (0x%lx) \r\n", s, (unsigned long)pid, (unsigned long)tid, (unsigned long)tid);
    while (true)
    {
        fd = open("/dev/uio0", O_RDWR);
        if (fd < 0)
        {
            printf("uio0 can't open!");
        }
        write(fd, &uio_key, sizeof(uio_key));
        err = read(fd, &uio_value, sizeof(uio_value));
        if (err == 4)
        {
            // TODO
        }
    }

7.后序

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值