STMPE811 TouchScreen MCB1700

Dependents:   Touch_Screen_MCB

Committer:
fblanc
Date:
Mon Feb 16 14:03:26 2015 +0000
Revision:
2:004e29745d5e
Parent:
1:a1e34dd1f0a0
PULLUP SDA0 SLK0 3.3k 3.3V

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fblanc 0:f69f52bd2222 1 /**
fblanc 0:f69f52bd2222 2 * @file STM811.c
fblanc 0:f69f52bd2222 3 * @brief library TouchScreen STM811
fblanc 0:f69f52bd2222 4 * @author Frederic BLANC
fblanc 0:f69f52bd2222 5 */
fblanc 0:f69f52bd2222 6
fblanc 0:f69f52bd2222 7
fblanc 0:f69f52bd2222 8 #include "TS.h"
fblanc 2:004e29745d5e 9 I2C i2c(P0_10, P0_11);//LPC1768 P0_10 SDA2 P0_11 SCL2 + pull up 3.3k 3.3VCC
fblanc 2:004e29745d5e 10
fblanc 0:f69f52bd2222 11 int TS_Init (void) {
fblanc 0:f69f52bd2222 12 int err=0;
fblanc 0:f69f52bd2222 13 // err+=TS_Write (TS_TSC_CTRL, 0x03); /* TSC_CTRL register X, Y only mode, enable */
fblanc 2:004e29745d5e 14 err+=TS_Write (TS_SYS_CTRL1, 0x02); /* Reset Touch-screen controller */
fblanc 2:004e29745d5e 15 wait_ms(10); /* Wait minimum of 10ms */
fblanc 0:f69f52bd2222 16 err+=TS_Write (TS_SYS_CTRL2, SYS_CTRL2_TS_OFF | SYS_CTRL2_GPIO_OFF); /* 1.Enable TSC and ADC */
fblanc 0:f69f52bd2222 17 err+=TS_Write (TS_INT_EN, INT_TOUCH_DET); /* 2.Enable Touch detect, FIFO */
fblanc 0:f69f52bd2222 18 err+=TS_Write (TS_ADC_CTRL1, 0x69); /* 3.Set sample time , 12-bit mode */
fblanc 0:f69f52bd2222 19 wait_ms(2); /* Wait minimum of 2ms */
fblanc 0:f69f52bd2222 20 err+=TS_Write (TS_ADC_CTRL2, 0x01); /* 4.ADC frequency 3.25 MHz */
fblanc 0:f69f52bd2222 21 err+=TS_Write (TS_GPIO_AF, 0x00); /* 5. ALL IO in ADC/TS mode */
fblanc 0:f69f52bd2222 22 err+=TS_Write (TS_TSC_CFG, 0xF5); /* 6. Set TSC_CFG register */
fblanc 0:f69f52bd2222 23 err+=TS_Write (TS_FIFO_TH, 0x01); /* 6a.Threshold for FIFO */
fblanc 0:f69f52bd2222 24 err+=TS_Write (TS_FIFO_STA, 0x01); /* 7.FIFO reset */
fblanc 0:f69f52bd2222 25 err+=TS_Write (TS_FIFO_STA, 0x00); /* 8.FIFO not reset */
fblanc 0:f69f52bd2222 26 err+=TS_Write (TS_TSC_FRACTION_Z, 0x07); /* 9.Fraction z */
fblanc 0:f69f52bd2222 27 err+=TS_Write (TS_TSC_I_DRIVE, 0x01); /* 10.Drive 50 mA typical */
fblanc 0:f69f52bd2222 28 err+=TS_Write (TS_TSC_CTRL, 0x01); /* 11.Enable TSC */
fblanc 0:f69f52bd2222 29 err+=TS_Write (TS_INT_STA, 0xFF); /* 12.Clear interrupt status */
fblanc 0:f69f52bd2222 30 err+=TS_Write (TS_INT_CTRL, 0x01); /* 13.Enable global interrupt */
fblanc 0:f69f52bd2222 31
fblanc 0:f69f52bd2222 32 return err;
fblanc 0:f69f52bd2222 33 }
fblanc 0:f69f52bd2222 34
fblanc 0:f69f52bd2222 35 int TS_Write (unsigned char reg,unsigned int val) {
fblanc 0:f69f52bd2222 36 int err=0;
fblanc 0:f69f52bd2222 37 int addr =0x82;
fblanc 0:f69f52bd2222 38 char cmd[2];
fblanc 0:f69f52bd2222 39 cmd[0] = reg; // Register to be written
fblanc 0:f69f52bd2222 40 cmd[1] = val;
fblanc 0:f69f52bd2222 41 err+=i2c.write(addr, cmd,2); // Send addr cmd val
fblanc 0:f69f52bd2222 42 return err;
fblanc 0:f69f52bd2222 43 }
fblanc 0:f69f52bd2222 44
fblanc 0:f69f52bd2222 45 unsigned int TS_Read (unsigned char reg, int num) {
fblanc 0:f69f52bd2222 46 int addr =(0x82 | 0);
fblanc 0:f69f52bd2222 47 unsigned int idata;
fblanc 0:f69f52bd2222 48 char* data=(char*) &idata;
fblanc 0:f69f52bd2222 49 data[1] =data[2] =data[3] =0;
fblanc 0:f69f52bd2222 50 data[0] = reg; // Register to be written
fblanc 0:f69f52bd2222 51 i2c.write(addr, data,1); // Send command string
fblanc 0:f69f52bd2222 52 do{
fblanc 0:f69f52bd2222 53 i2c.read (addr, &data[--num], 1);
fblanc 0:f69f52bd2222 54 }while (num);
fblanc 0:f69f52bd2222 55 return idata;
fblanc 0:f69f52bd2222 56
fblanc 0:f69f52bd2222 57 }
fblanc 0:f69f52bd2222 58
fblanc 0:f69f52bd2222 59 int ts_XY( int *x,int *y,int *z) {
fblanc 0:f69f52bd2222 60 int tch_z = 0;
fblanc 0:f69f52bd2222 61 int tch_int = 0;
fblanc 0:f69f52bd2222 62 int tch_smpl = 0;
fblanc 0:f69f52bd2222 63 tch_int = TS_Read (TS_INT_STA, 1); /* Read Touch-screen interrupt status */
fblanc 0:f69f52bd2222 64 if (tch_int & 2) { /* If FIFO is above threshold */
fblanc 0:f69f52bd2222 65 tch_smpl = TS_Read (TS_FIFO_SIZE, 1);
fblanc 0:f69f52bd2222 66 while (--tch_smpl) {
fblanc 0:f69f52bd2222 67 TS_Read (TS_TSC_DATA_NAI, 4);
fblanc 0:f69f52bd2222 68 }
fblanc 0:f69f52bd2222 69 }
fblanc 0:f69f52bd2222 70 tch_z = TS_Read (TS_TSC_DATA_NAI, 4); /* Read coordinates */
fblanc 0:f69f52bd2222 71 *x = (tch_z >> 20) & 0x00000FFF;
fblanc 0:f69f52bd2222 72 *y = (tch_z >> 8) & 0x00000FFF;
fblanc 0:f69f52bd2222 73 *z = (tch_z >> 0) & 0x0000000F;
fblanc 0:f69f52bd2222 74 return 0;
fblanc 0:f69f52bd2222 75
fblanc 0:f69f52bd2222 76 }