/**************************************************************************************
* 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
S5PV210 Linux 模拟SPI方式控制ADS7846触摸屏驱动
最新推荐文章于 2023-04-20 23:21:18 发布
本文详细介绍了如何在S5PV210处理器上使用Linux内核模拟SPI接口来驱动ADS7846触摸屏。通过分析,展示了Linux内核中的输入子系统、定时器机制和结构体的运用,为开发者提供了具体的驱动实现步骤。
摘要由CSDN通过智能技术生成