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

本文档详细介绍了如何在米尔科技的Zynq z-turn开发板上,通过编写Linux驱动来操作连接在MIO0和MIO9上的LED灯。首先,文章分析了硬件连接和GPIO基地址,接着说明了在Vivado中配置IP并生成boot.bin的过程。然后,逐步讲解了驱动代码、测试代码、Makefile的编写及交叉编译生成可执行文件的方法。最后,验证了LED灯的控制效果,达到了预期的亮灭状态。
摘要由CSDN通过智能技术生成

一.目标
在米尔科技zynq的z-turn开发板上,通过编写驱动,实现对两盏灯的控制。
二.分析
①硬件部分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这两盏绿灯位于zynq的MIO0和MIO9上。
有关操作IO口的地址,查找ug585-zynq-7000-TRM手册
在这里插入图片描述
可以看出GPIO基地址为0xe000a000,同样的有关IO操作的寄存器相对地址可以从手册中找到。
②boot.bin生成
在vivado上进行配置IP等一些列操作,导入SDK中产生。
三.代码实现
①驱动代码

#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>
/**
 *  LED MIO驱动  
 *
 *MIO0---LED1
 *MIO9---LED2
 *
 *
 *
 *
 *
 *
 * **/


//驱动框架
int major;
//MIO基地址
#define GPIO_BASE_Address 0xe000a000

volatile unsigned int *mask_data_lsw;
//屏蔽输出低16bit
#define MASK_DATA_0_LSW   0X00000000

volatile unsigned int *mask_data_msw;
//屏蔽输出高16bit
#define MASK_DATA_0_MSW   0X00000004

volatile unsigned int *data;
//输出数据
#define DATA_0            0X00000040

volatile unsigned int *dirm;
//配置I/O口方向
#define DIRM_0            0X00000204

volatile unsigned int *oen;
//输出使能
#define OEN_0             0X00000208

volatile unsigned int *clk;
//时钟地址
#define CLK_ADDR          0XF800012C

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
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值