基于S3C2440的SPI驱动的开发和测试

这几天导师有一个基于嵌入式的心电采集系统的实验课要开,让我帮忙设计。系统涉及到SPI驱动的开发,这里把代码贴出来供大家参考交流。


开发板型号:small2440

Linux内核版本:linux-2.6.38

文件系统:yaffs2

交叉编译器版本:arm-linux-gcc-4.3.3


/*******************************************
*文件描述:small2440开发板spi驱动,用于和stm32
*          进行通信,接收stm32采集的心电数据,
*          stm32的AD位数为12位。
*作者:GYL
*日期:2015年5月5日
********************************************/

#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/cdev.h>
#include <linux/pci.h>
#include <asm/uaccess.h> 
 
#define MY_MAJOR 0       //主设备号
#define MY_MINOR 0	//从设备号
#define DEVICE_NAME "small2440_spi"  //设备名 

static int spi_major = MY_MAJOR;                                                   
static struct cdev *spiCdev = NULL;    //字符设备结构体
static struct class *myclass = NULL; //设备类结构体
/*****************************************************/
static int __init spi_init(void);
static void __exit spi_exit(void); 
static int spi_open(struct inode *,struct file *);
static int spi_release(struct inode *,struct file *);
static ssize_t spi_write(struct file *filp,const char *buf,size_t count,loff_t *f_ops);
static ssize_t spi_read(struct file *filp,char *buf,size_t count,loff_t *f_ops);
static long spi_ioctl(struct file *filp,unsigned int cmd,unsigned long data);

static void __iomem *base_addr0;  
static void __iomem *base_addr1;
static void __iomem *base_addr2;

#define S3C2440_GPG 0x56000060
#define S3C2440_CLK 0x4C00000C
#define S3C2440_SPI1 0x59000020

#define GPGCON (*(volatile unsigned long *)(base_addr0 + 0x00))
#define GPGDAT (*(volatile unsigned long *)(base_addr0 + 0x04))
#define GPGUP (*(volatile unsigned long *)(base_addr0 + 0x08))

#define CLKCON (*(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值