一.目标
在米尔科技zynq的开发平台上,通过zynq的按键开关,实现pl中断。
二.分析
原理图

挂在pl端,需要在vivado上进行引脚锁定。配置如下


当然可以通过中断函数操作三色灯,也可以不用管三色灯了,在中断中打印信息也可证明进入中断了。
三.代码实现
引脚限制文件

set_property PACKAGE_PIN R14 [get_ports {gpio_rtl_tri_o[0]}]
set_property PACKAGE_PIN Y16 [get_ports {gpio_rtl_tri_o[1]}]
set_property PACKAGE_PIN Y17 [get_ports {gpio_rtl_tri_o[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_tri_o[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_tri_o[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_tri_o[0]}]
set_property PACKAGE_PIN R19 [get_ports {button1}]
set_property IOSTANDARD LVCMOS33 [get_ports {button1}]
set_property PACKAGE_PIN T19 [get_ports {button2}]
set_property IOSTANDARD LVCMOS33 [get_ports {button2}]
set_property PACKAGE_PIN G14 [get_ports {button3}]
set_property IOSTANDARD LVCMOS33 [get_ports {button3}]
set_property PACKAGE_PIN J15 [get_ports {button4}]
set_property IOSTANDARD LVCMOS33 [get_ports {button4}]

中断驱动程序

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/device.h>
#include <asm/io.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/miscdevice.h>
#include <linux/ioport.h>
#include <linux/of.h>
#include <linux/uaccess.h>
#include <linux/interrupt.h>
#include <asm/irq.h>
#include <linux/irq.h>
#include <asm/uaccess.h>
/***按键中断驱动  ********* **/
static irqreturn_t k1_irq(int irq,void *dev_id)
{printk("irq=%d\n",irq);return IRQ_HANDLED;
}
static irqreturn_t k2_irq(int irq,void *dev_id)
{printk("irq=%d\n",irq);return IRQ_HANDLED;
}
static irqreturn_t k3_irq(int irq,void *dev_id)
{printk("irq=%d\n",irq);return IRQ_HANDLED;
}
static irqreturn_t k4_irq(int irq,void *dev_id)
{printk("irq=%d\n",irq);return IRQ_HANDLED;
}
//驱动框架
int major;static struct class *led_class   = NULL;
static struct device *led_device = NULL;
static int led_init(void);
static int led_exit(void);
static int led_open(struct inode *inode,struct file *file);
static int led_write(struct file *file,const char __user *buf, size_t count,loff_t *ppos);
static int led_read(struct file *file,char __user *buf,size_t size,loff_t *ppos);
/**file_operations 结构数据,沟通内核与操作系统桥梁*建立起 read 与led_read  write与led_write 对应关系* */
static struct file_operations led_lops=
{.owner = THIS_MODULE,
.read  = led_read,
.write = led_write,
};
/**LED 初始化,用于module init** */
static int led_init(void)
{major=register_chrdev(0,"led_IRQ",&led_lops);led_class  = class_create(THIS_MODULE,"led_IRQ");led_device = device_create(led_class,NULL,MKDEV(major,0),NULL,"led_IRQ");request_irq(61,k1_irq,IRQF_TRIGGER_RISING,"led_IRQ",NULL);request_irq(62,k2_irq,IRQF_TRIGGER_RISING,"led_IRQ",NULL);request_irq(63,k3_irq,IRQF_TRIGGER_RISING,"led_IRQ",NULL);request_irq(64,k4_irq,IRQF_TRIGGER_RISING,"led_IRQ",NULL);printk("LED init");return 0;
}
/**LED 退出 用于 module exit** */
static int led_exit(void)
{unregister_chrdev(major,"led_IRQ");device_destroy(led_class,MKDEV(major,0));class_destroy(led_class);free_irq(k1_irq,NULL);free_irq(k2_irq,NULL);free_irq(k3_irq,NULL);free_irq(k4_irq,NULL);printk("LED exit");return 0;
}
/**LED open 接口函数** */
static int led_open(struct inode *inode,struct file *file)
{printk("LED open\r\n");return 0;
}
/**LED write 接口函数** */
static int led_write(struct file *file,const char __user *buf, size_t count,loff_t *ppos)
{return 0;
}
/**LED read 接口函数** */
static int led_read(struct file *file,char __user *buf,size_t size,loff_t *ppos)
{printk("LED read\n");return 0;
}module_init(led_init);
module_exit(led_exit);MODULE_AUTHOR("TEST@LED");
MODULE_DESCRIPTION("LED driver");
MODULE_ALIAS("led linux driver");
MODULE_LICENSE("GPL");

测试程序

#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>void delay(void)
{int i,j;for(i=0;i<20000;i++)for(j=0;j<10000;j++);
}
int main(int argc , char ** argv)
{int fd;int i;int val=7;fd = open("/dev/led_IRQ",O_RDWR);if(fd<0) {printf("can not open file\n");while(1);}else printf("open file sucuss\n");while(1){/*        printf(" light off all led!\n");val = 0x00000007;write(fd,&val,4);delay();delay();printf("light on frist!\n");val = 0x00000006;write(fd,&val,4);delay();delay();delay();printf("light on second!\n");val = 0x00000005;write(fd,&val,4);delay();delay();delay();printf("light on third!\n");val = 0x00000003;write(fd,&val,4);delay();delay();delay();printf("light on all led!\n");val = 0;write(fd,&val,4);delay();delay();delay();*/  }return 0;
}

Makefile文件

KDIR = /home/python/Hard_disk_21G/04-Linux_Source/Kernel/linux-xlnx
PWD := $(shell pwd)
CC   = $(CROSS_COMPILE)gcc
ARCH =arm
MAKE =makeobj-m:=button_interrupt.omodules:$(MAKE) -C $(KDIR) ARCH=$(ARCH) CROSS_COMPLE=$(CROSS_COMPLE) M=$(PWD) modules
clean:make -C $(KDIR) ARCH=$(ARCH) CROSS_COMPLE=$(CROSS_COMPLE) M=$(PWD) clean

米尔科技Zynq pl中断的linux驱动相关推荐

  1. 米尔科技zynq利用MIO操作LED灯的linux驱动

    一.目标 在米尔科技zynq的z-turn开发板上,通过编写驱动,实现对两盏灯的控制. 二.分析 ①硬件部分 这两盏绿灯位于zynq的MIO0和MIO9上. 有关操作IO口的地址,查找ug585-zy ...

  2. 米尔科技ZYNQ -Linux下的DMA驱动

    一.目标 在米尔科技的z-turn板上实现linux下的DMA驱动,同时对DMA中断进行测试. 二.分析 ZYNQ的AXIDMA有Direct Register Mode和Scatter/Gather ...

  3. 米尔科技zynq三色灯 linux 驱动

    一.目标 在zynq的randisk操作系统上,通过编写驱动,实现对三色灯的控制.采用的是米尔科技 7z020开发板. 二.分析 1)逻辑分析 三色灯是挂载在PL上,可以通过AXI-GPIO实现ps控 ...

  4. 米尔科技Zynq利用EMIO操作三色灯的linux驱动

    一.目标 在米尔科技的zynq的z-turn开发板上利用EMIO操作三色灯亮灭. 二.分析 三色灯是挂载在PL部分的,PS想要操作它可以通过EMIO接口实现. IP配置关键如下 产生顶层文件中有gpi ...

  5. 米尔科技 Z-turn XC7Z010 Linux驱动源码路径

    米尔科技 Z-turn XC7Z010 Linux驱动源码路径 网址:http://www.myir-tech.com/bbs/thread-6999-1-1.html Z-turn XC7Z010 ...

  6. 基于xilinx Zynq UltraScale MPSoC平台的核心板及开发板介绍-米尔科技

    近日,米尔科技推出国内首款基于xilinx Zynq UltraScale+MPSoC 平台的核心板及开发板.其优势主要有:采用16纳米制程,相比Znyq7000系列每瓦性能提升5倍,且单芯片融合4核 ...

  7. 米尔科技MPSoC开发板评测

    米尔科技推出的MYD-CZU3EG开发板搭载的就是UltraScale+ MPSoC平台器件 - XCZU3EG,它集成了四核Cortex-A53 处理器,双核 Cortex-R5 实时处理单元以及M ...

  8. 普中科技开发板使用说明书_百度大脑加持,米尔科技FZ3深度学习计算卡评测

    如果你要问我现在电子产业什么最热,那无疑是AI,而基于大数据训练的深度学习技术可以说是目前AI应用的最广,最成功的产品形态了,覆盖我们生活的方方面面,诸如购物.看病.新闻编辑等,在这高深技术的背后少不 ...

  9. 米尔电子zynq ultrascale+ mpsoc底板外设资源清单分享

    米尔电子推出的国内首款zynq ultrascale+ mpsoc平台核心板(及开发板):MYC-CZU3EG吸引了人工智能.工业控制.嵌入式视觉.ADAS.算法加速.云计算.有线/无线通信等应用行业 ...

最新文章

  1. java中synchronized介绍和用法
  2. golang表单及验证支持
  3. HTML中显示的文字自动换行
  4. 信安精品课:第1章网络信息安全概述精讲笔记
  5. Hadoop之WEBUi界面功能介绍及日志配置查看
  6. OneGame V1.0 发布,开源免费页游联运系统
  7. java hql left join_求教hql的left join结合条件的写法
  8. AndroidTV开发9远程adb调试设备
  9. 诺顿误杀导致系统崩溃 百万PC面临灾难
  10. java 判断是不是昨天、今天、明天
  11. 用opencv将左右眼视角图片转换为红蓝3D图片
  12. [机缘参悟-36]:鬼谷子-飞箝篇 - 面对捧杀与诱饵的防范之道
  13. 嵌入式开发工程师需要掌握哪些知识呢?
  14. 混凝土骨料微观结构数学物理模型建模
  15. GAN(生成对抗网络) 解释
  16. fpga实操训练(vga测试)
  17. quick-cocos2d-x可调试开发环境搭建(vs+babelua和vscode+luaide)
  18. 杰奇安装 mysql失败_关于杰奇CMS安装乱码的解决方法
  19. 多年炒股心得体会(转)
  20. jquery 给连接上面加上hot图标

热门文章

  1. 51单片机(十七)—— 定时器2寄存器介绍及功能描述
  2. 链表的回文结构(有图易懂)
  3. 每天学习一点英语——number,amount,quantity区别、用法
  4. 【无标题】 `x` is assigned to here but it was already borrowed
  5. IDEA request.getHeaderNames()和prin()报错
  6. java while语句打印三角形_Java 循环结构
  7. 【计算机网络】对称加密、非对称加密和Hash加密的介绍和区别
  8. Qt之QAbstractAnimation 实现网易云音乐背景墙图片轮换效果
  9. WiFi_日本认证测要求
  10. Arduino应用笔记(一)利用蜂鸣器播放天空之城