米尔科技zynq三色灯 linux 驱动

本文介绍了如何在Zynq的Linux系统上编写驱动以控制7z020开发板上的三色灯。通过AXI-GPIO实现PS对三色灯的控制,详细阐述了驱动的逻辑分析,包括I/O口的配置和虚拟地址映射。此外,还讲解了驱动代码的实现步骤,涉及约束文件设定、BOOT.bin制作、驱动接口函数、模块初始化以及驱动和可执行文件的编译与拷贝过程。
摘要由CSDN通过智能技术生成

一.目标
在zynq的randisk操作系统上,通过编写驱动,实现对三色灯的控制。采用的是米尔科技
7z020开发板。
二.分析
1)逻辑分析
三色灯是挂载在PL上,可以通过AXI-GPIO实现ps控制。
在这里插入图片描述
由于是三色灯,所以只需要三个位宽即可,同时设置为输出。
在这里插入图片描述
通常操作一个I/O口,①需要配置I/O口时钟,②配置I/O口方向(输入还是输出),③I/O口使能,④给I/O口赋值。在vivado上已经将完成I/O的,时钟连接,设置了输出,只需要向I/O口写数据就能操作三色灯了。
查看AXI GPIO 的物理地址:
在这里插入图片描述
在驱动中操作I/O口需要先将物理地址映射成虚拟地址。
在这里插入图片描述
在物理地址上差4,在虚拟地址上差4。
2)驱动分析
用户想要直接操作硬件是不行的,操作系统不允许,只有间接的操作,通过操作系统提供的接口函数,open,write、read等。
字符驱动框架
①头文件包含
②与read,write,open对应的led_read,led_write,led_open接口函数。
③模块初始化。
三.代码实现
①vivado上约束文件将三色灯引脚确定。
在这里插入图片描述
②制作BOOT.bin
Vivado上产生bit文件与SDK产生的FSBL,加u-boot生成。
③驱动代码

#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>
/**
 *三色灯驱动  
 *
 *
 *前提:需要在vivado上配置好pl部分,使用AXI操作GPIO,约束好引脚。
 *
 *
 *在AXI——GPIO上已经配置好了 位宽为3,输出,同时也有时钟;
 *在驱动中只需要对io地址直接进行赋值即可。
 *
 *
 *
 * **/


//驱动框架
int major;
static volatile unsigned int *led_base;
#define LED_ADDRESS 0X41200000
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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值