linux下的fpga驱动
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#ifndef _FPGA_H_
#define _FPGA_H_
#define INTMSK (0x4A000008)
#define EINTMASK (0x560000A4)
#define S3C2410_ENABLE_EINT8_23 (~(1<<5))
#define S3C2410_ENABLE_EINT18 (~(1<<18))
#undef PDEBUG /* undef it, just in case */
#define DEBUG //调试时添加此行程序,实际产品中需要注释掉
#ifdef DEBUG
# define PDEBUG(fmt, args...) printk( KERN_WARNING "fpga: " fmt, ## args)
#else
# define PDEBUG(fmt, args...) /* not debugging: nothing */
#endif
#define DEVICE_NAME "FPGA"
#ifndef FPGA_NR_DEVS
#define FPGA_NR_DEVS 1 /*设备数*/
#endif
#define FPGAMEM_SIZE 1024/*FPGA每次产生中断可以读取到缓存的数据大小*/
#define FPGACMD_SIZE 3 /*FPGA每次产生中断可以读取到缓存的数据大小*/
#define FPGA_ADDR_START (0x08000000) //nGCS1地址
#define FPGA_ADDR_SIZE 0x30 //申请IO内存的大小
#define FPGA_ADDR_DATA 0x10 //FPGA数据寄存器偏移地址
#define FPGA_ADDR_CMD 0x14 //FPGA命令寄存器偏移地址
/* 定义幻数,定义一个字符,8位,用于检测是否是这类设备,ioctl-number.txt中给出了已经使用的幻数,定义的时候注意避免冲突*/
#define FPGA_IOC 'k'
/* 定义命令,这里的命令都是unsigned int类型*/
#define FPGA_IOC_ALLON _IO(FPGA_IOC, 0) //
#define FPGA_IOC_ALLDOWN _IO(FPGA_IOC, 1) //
#define FPGA_IOC_SET _IOW(FPGA_IOC, 2, int) //
#define FPGA_IOC_CLEAR _IOW(FPGA_IOC, 3, int)//
#define FPGA_IOC_MAXNR 4 //定义命令的最大序列号
/* Per-device (per-bank) structure */
struct fpga_dev {
struct cdev cdev; /* The cdev structure */
unsigned int readlength; /* 每次中断从FPGA读取数据的实际字节数*/ char bus_data[FPGAMEM_SIZE]; /* 缓存从FPGA读取的数据*/
char cmd_data[FPGACMD_SIZE]; /* 缓存发送给FPGA的命令*/
// struct fasync_struct *async_queue;/* 异步结构体指针,用于读*/
/* ... */ /* Mutexes, spinlocks, wait
queues, .. */
wait_queue_head_t r_wait; /* 阻塞读用的等待队列头*/
} *fpga_devp;
#endif /* _FPGA_H_ */
#include
//#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
//#include
#include "fpga.h"
//#define FPGADATA (*(volatile unsigned long *)(fpga_addr + 0x10)) //FPGA data
//#define FPGACON (*(volatile unsigned long *)(fpga_addr + 0x08)) //FPGA control //struct cdev cdev;