Touch driver for companion boards (VKLCD50RTA & VKLCD70RT)
Diff: stmpe811iic.h
- Revision:
- 0:0383b9f88d72
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stmpe811iic.h Fri Nov 03 08:52:07 2017 +0000 @@ -0,0 +1,200 @@ +/******************************************************************************* + +*******************************************************************************/ +/****************************************************************************** +* File Name : tpiic.h +* Description : TPIIC header +******************************************************************************/ +#ifndef STMPE811IIC_H +#define STMPE811IIC_H + +#ifdef LCD_PANEL_H +#include "lcd_panel.h" +#else +/* TOUCH panels: */ +#define LCD_CH0_PANEL_VKLCD50RTA (1) /* 16bitRGB(565) [HVGA 480x272] */ +#define LCD_CH0_PANEL_VKLCD70RT (2) /* LVDS [WSVGA 1024x600] */ + +#define LCD_VDC5_CH0_PANEL LCD_CH0_PANEL_VKLCD70RT +#endif + +/****************************************************************************** +Includes <System Includes> , "Project Includes" +******************************************************************************/ + +#define __USE_DEFAULT_CALIBRATION_DATA__ + +#define STMPE811_DEVICE_ADDR (0x82) +//#define STMPE811_DEVICE_ADDR (0x88) +//#define EE_LPC11U35_DEVICE_ADDR (0xA0) + +#define TPIIC_CH 3 +#define TPIIC_SCL P1_6 +#define TPIIC_SDA P1_7 + +#if (LCD_VDC5_CH0_PANEL==LCD_CH0_PANEL_VKLCD70RT) + #define TPIRQ_CH 1 + #define TPIRQ_PIN P7_8 + + #define EEIIC_CH 3 + #define EEIIC_SCL P1_6 + #define EEIIC_SDA P1_7 + #define EE_CALIB_DEVICE_ADDR 0xA8 + + #define TPCALIBRATION_DATA 0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,\ + 0x50,0xb4,0x52,0x38,0xec,0x97,0xd0,0x3f,0xd7,0xfe,0x58,0xc5,0x10,0xb2,0x52,0x3f,\ + 0xde,0x09,0xc6,0x87,0xaa,0x7d,0xbb,0x3e,0x65,0xaa,0xb4,0xd2,0x56,0x04,0xc5,0xbf,\ + 0x02,0xb3,0x33,0x61,0x9b,0x1e,0x34,0xc0,0x88,0x87,0xc3,0x39,0x38,0x7d,0x83,0x40 +#else + #define TPIRQ_CH 2 + #define TPIRQ_PIN P1_2 + + #define EEIIC_CH 0 + #define EEIIC_SCL P1_0 + #define EEIIC_SDA P1_1 + #define EE_CALIB_DEVICE_ADDR 0xA8 + + #define TPCALIBRATION_DATA 0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,\ + 0x66,0x44,0x6c,0xe9,0x11,0xa1,0xbf,0xbf,0x70,0x8f,0x61,0x1c,0x3f,0x5e,0x20,0x3f,\ + 0xad,0x80,0xca,0x76,0x62,0xb9,0x8a,0x3e,0xae,0x95,0xef,0x7e,0xa7,0x8d,0xb2,0xbf,\ + 0x24,0x37,0x82,0x68,0xe6,0xc1,0x7e,0x40,0xf4,0xb6,0xa8,0xe8,0x88,0xa3,0x71,0x40 +#endif + +#define FIFO_DEPTH 128 // packets, which means 12bit x + 12bit y +8bit = 32bit for 1 data packet + +//sys regs +#define CHIP_ID 0x00 // 16 R 0x0811 Device identification +#define ID_VER 0x02 // 8 R 0x01 Revision number 0x01 for engineering sample for final silicon +#define SYS_CTRL1 0x03 // 8 R/W 0x00 Reset control +#define SYS_CTRL2 0x04 // 8 R/W 0x0F Clock control +#define SPI_CFG 0x08 // 8 R/W 0x01 SPI interface configuration +#define INT_CTRL 0x09 // 8 R/W 0x00 Interrupt control register +#define INT_EN 0x0A // 8 R/W 0x00 Interrupt enable register +#define INT_STA 0x0B // 8 R 0x10 interrupt status register +#define GPIO_EN 0x0C // 8 R/W 0x00 GPIO interrupt enable register +#define GPIO_INT_STA 0x0D // 8 R 0x00 GPIO interrupt status register +#define ADC_INT_EN 0x0E // 8 R/W 0x00 ADC interrupt enable register +#define ADC_INT_STA 0x0F // 8 R 0x00 ADC interrupt status register +#define GPIO_SET_PIN 0x10 // 8 R/W 0x00 GPIO set pin register +#define GPIO_CLR_PIN 0x11 // 8 R/W 0x00 GPIO clear pin register +#define GPIO_MP_STA 0x12 // 8 R/W 0x00 GPIO monitor pin state register +#define GPIO_DIR 0x13 // 8 R/W 0x00 GPIO direction register +#define GPIO_ED 0x14 // 8 R/W 0x00 GPIO edge detect register +#define GPIO_RE 0x15 // 8 R/W 0x00 GPIO rising edge register +#define GPIO_FE 0x16 // 8 R/W 0x00 GPIO falling edge register +#define GPIO_AF 0x17 // 8 R/W 0x00 Alternate function register + +//ADC regs +#define ADC_CTRL1 0x20 // 8 R/W 0x9C ADC control +#define ADC_CTRL2 0x21 // 8 R/W 0x01 ADC control +#define ADC_CAPT 0x22 // 8 R/W 0xFF To initiate ADC data acquisition +#define ADC_DATA_CH0 0x30 // 16 R 0x0000 ADC channel 0 +#define ADC_DATA_CH1 0x32 // 16 R 0x0000 ADC channel 1 +#define ADC_DATA_CH2 0x34 // 16 R 0x0000 ADC channel 2 +#define ADC_DATA_CH3 0x36 // 16 R 0x0000 ADC channel 3 +#define ADC_DATA_CH4 0x38 // 16 R 0x0000 ADC channel 4 +#define ADC_DATA_CH5 0x3A // 16 R 0x0000 ADC channel 5 +#define ADC_DATA_CH6 0x3C // 16 R 0x0000 ADC channel 6 +#define ADC_DATA_CH7 0x3E // 16 R 0x0000 ADC channel 7 + +//touch regs +#define TSC_CTRL 0x40 // 8 R/W 0x90 4-wire touchscreen controller setup +#define TSC_CFG 0x41 // 8 R/W 0x00 Touchscreen controller configuration +#define WDW_TR_X 0x42 // 16 R/W 0x0FFF Window setup for top right X +#define WDW_TR_Y 0x44 // 16 R/W 0x0FFF Window setup for top right Y +#define WDW_BL_X 0x46 // 16 R/W 0x0000 Window setup for bottom left X +#define WDW_BL_Y 0x48 // 16 R/W 0x0000 Window setup for bottom left Y +#define FIFO_TH 0x4A // 8 R/W 0x00 FIFO level to generate interrupt +#define FIFO_STA 0x4B // 8 R/W 0x20 Current status of FIFO +#define FIFO_SIZE 0x4C // 8 R 0x00 Current filled level of FIFO +#define TSC_DATA_X 0x4D // 16 R 0x0000 Data port for touchscreen controller data access +#define TSC_DATA_Y 0x4F // 16 R 0x0000 Data port for touchscreen controller data access +#define TSC_DATA_Z 0x51 // 8 R 0x0000 Data port for touchscreen controller data access +#define TSC_DATA_XYZ 0x52 // 32 R 0x00000000 Data port for touchscreen controller data access +#define TSC_FRACT_Z 0x56 // 8 0x00 +#define TSC_DATA_AI 0x57 // 8 R 0x00 Data port for touchscreen controller data access AUTO_INCREMENT +#define TSC_DATA_NAI 0x07 // 8 R 0x00 Data port for touchscreen controller data access NONE_AUTO_INCREMENT +#define TSC_DATA_FIFO 0xD7 // +#define TSC_I_DRIVE 0x58 // 8 R/W 0x00 +#define TSC_SHIELD 0x59 // 8 R/W 0x00 + +//temperature regs +#define TEMP_CTRL 0x60 // 8 R/W 0x00 Temperature sensor setup +#define TEMP_DATA 0x61 // 8 R 0x00 Temperature data access port +#define TEMP_TH 0x62 // 8 R/W 0x00 Threshold for temperature controlled interrupt + +//interrupt status & enable bits +#define INT_GPIO 0x80 +#define INT_ADC 0x40 +#define INT_TEMP_SENS 0x20 +#define INT_FIFO_EMPTY 0x10 +#define INT_FIFO_FULL 0x08 +#define INT_FIFO_OFLOW 0x04 +#define INT_FIFO_TH 0x02 +#define INT_TOUCH_DET 0x01 + +//other bits +#define TSC_STA 0x80 + +//Z axis accuracy +#define _8_0 0x00 +#define _7_1 0x01 +#define _6_2 0x02 +#define _5_3 0x03 +#define _4_4 0x04 +#define _3_5 0x05 +#define _2_6 0x06 +#define _1_7 0x07 + +#define INIT_DATA /* {register, value}, ... */ \ +{SYS_CTRL1, 0x02}, /* 0. Reset touchscreen controller */ \ +{SYS_CTRL2, 0x0C}, /* 1. Disable the clock gating for the touchscreen controller and ADC in the SYS_CFG2 register*/ \ +{INT_EN, (INT_FIFO_OFLOW | INT_FIFO_TH | INT_TOUCH_DET)}, /* 2. Configure which interrupts to be outputed */ \ +{ADC_CTRL1, 0x49}, /* 3. Write: register Add = 0x20 ADC_CTRL1, data = 0x49 delay, 2mS */ \ +{ADC_CTRL2, 0x01}, /* 4. Write: register Add = 0x21 ADC_CTRL2, data = 0x01 */ \ +{GPIO_AF, 0x00}, /* 5. Write: register Add = 0x17 GPIO_AF, data = 0x00 */ \ +{TSC_CFG, 0x6C}, /* 6. 5ms panel voltage setting time, 1ms touch detection delay, averaging on every 2-nd sample */ \ +{FIFO_TH, 0x05}, /* 7. Group points reading (if more than 4 points collected generate interrupt) */ \ +{FIFO_STA, 0x01}, /* 8a. Clear FIFO */ \ +{FIFO_STA, 0x00}, /* 8b. Reset FIFO */ \ +{TSC_FRACT_Z, _8_0}, /* 9. Choose the appropriate accurency of the measured pressure of the touch 7 fractional bits & 1 int */ \ +{TSC_I_DRIVE, 0x00}, /* 10. Write: register Add = 0x58 TSC_I_DRIVE, data = 0x01 */ \ +{TSC_CTRL, 0x01}, /* 11. Configure the operating mode and the window tracking index, start touch detection & data acquisition*/\ +{INT_STA, 0xFF}, /* 12. Clear Interrupt register*/ \ +{INT_CTRL, 0x03}, /* 13. Configure the interrupt signal and enable the interrupts //int-> Edge interrupt -> falling edge*/ + +/****************************************************************************** +Variable Externs +******************************************************************************/ + +typedef union __CALIB { + struct __DATA + { + unsigned long len; + unsigned long flag; + double KX1, KY1, KX2, KY2, KX3, KY3; + }data; + unsigned char KX08[sizeof(struct __DATA)]; +}touch_calib_data_t; + +typedef union RAW_SAMPLE__ { + struct AXIS__ + { + unsigned short x; + unsigned short y; + unsigned long z; + }axis; + unsigned long long dot; +}touch_raw_data_t; + +typedef union SCREEN_SAMPLE__ { + struct AXIS_ + { + short x; + short y; + float z; + }axis; + unsigned long long dot; +}touch_screen_data_t; + +#endif /* STMPE811IIC_H */