一.目标
在米尔科技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 file

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

被折叠的 条评论
为什么被折叠?



