S5PV210 Linux 模拟SPI方式控制ADS7846触摸屏驱动

本文详细介绍了如何在S5PV210处理器上使用Linux内核模拟SPI接口来驱动ADS7846触摸屏。通过分析,展示了Linux内核中的输入子系统、定时器机制和结构体的运用,为开发者提供了具体的驱动实现步骤。
摘要由CSDN通过智能技术生成
/**************************************************************************************
*	ads7846 touch screen	ads.c
*	Light	< lightwu@hotmail.com >
*	20011-11-28
*	
***************************************************************************************/

#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/input.h>
#include <linux/init.h>
#include <linux/serio.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
#include <linux/clk.h>
#include <linux/fs.h>
#include <linux/poll.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/cdev.h>
#include <linux/miscdevice.h>

#include <asm/uaccess.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <mach/hardware.h>
#include <mach/map.h>
#include <mach/regs-clock.h>
#include <mach/regs-gpio.h>
#include <plat/gpio-cfg.h>
#include <mach/gpio.h>	

#define ADS7846_CNV_NBR  8  //ADC连续转换的次数

struct ads7846_ts_info {

    struct input_dev *dev;

    unsigned int xp; //x方向位置
    unsigned int yp; //y方向位置
    unsigned int count; //adc转换次数
    unsigned int cnv_nbr;
    unsigned int x_buf[ADS7846_CNV_NBR];  //ad转换buf 
    unsigned int y_buf[ADS7846_CNV_NBR];
    
};

static struct ads7846_ts_info	*ts;
static struct input_dev *OFN_dev;
int absX = 0;
int absY = 0;

#define ADS7846_GPIO_MISO	6		//gpb6
#define ADS7846_GPIO_MOSI	7		//gpb7
#define ADS7846_GPIO_CLK	4		//gpb4
#define ADS7846_GPIO_CS		5		//gpb5

// ADS7846 Control Byte bit defines
#define ADS7846_CMD_START	0x0080
#define ADS7846_ADDR_BIT	4
#define ADS7846_ADDR_MASK 	(0x7<<ADS7846_ADDR_BIT)
#define ADS7846_MEASURE_X  	(0x5<<ADS7846_ADDR_BIT)
#define ADS7846_MEASURE_Y  	(0x1<<ADS7846_ADDR_BIT)
#define ADS7846_MEASURE_Z1 	(0x3<<ADS7846_ADDR_BIT)
#define ADS7846_MEASURE_Z2 	(0x4<<ADS7846_ADDR_BIT)
#define ADS7846_8BITS     	(1<<3)
#define ADS7846_12BITS    	0
#define ADS7846_SER       	(1<<2)
#define ADS7846_DFR       	0
#define ADS7846_PWR_BIT   	0
#define ADS7846_PD      	0
#define ADS7846_ADC_ON  	(0x1<<ADS7846_PWR_BIT)
#define ADS7846_REF_ON  	(0x2<<ADS7846_PWR_BIT)
#define ADS7846_REF_ADC_ON 	(0x3<<ADS7846_PWR_BIT)

#define MEASURE_8BIT_X\
    (unsigned short)(ADS7846_CMD_START | ADS7846_MEASURE_X | ADS7846_8BITS | ADS7846_DFR | ADS7846_PD)
#define MEASURE_8BIT_Y\
    (unsigned short)(ADS7846_CMD_START | ADS7846_MEASURE_Y | ADS7846_8BITS | ADS7846_DFR | ADS7846_PD)

#define MEASURE_12BIT_X \
    (unsigned short)(ADS7846_CMD_START | ADS7846_MEASURE_X | ADS7846_12BITS | ADS7846_DFR | ADS7846_PD)
#define MEASURE_12BIT_Y \
    (unsigned short)(ADS7846_CMD_START | ADS7846_MEASURE_Y | ADS7846_12BITS | ADS7846_DFR | ADS7846_PD)
#define MEASURE_12BIT_Z1 \
    (unsigned char)(ADS784
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值