DeviceSTMPE811
STMPE811 S-Touch advanced resistive touchscreen controller device driver
Ref.: ST STMPE811 datasheet Ref.: https://blog.embeddedexpert.io/?p=2093
Const
REG_CHIP_ID* = 000H;
REG_ID_VER* = 002H;
REG_SYS_CTRL1* = 003H;
REG_SYS_CTRL2* = 004H;
REG_SPI_CFG* = 008H;
REG_INT_CTRL* = 009H;
REG_INT_EN* = 00AH;
REG_INT_STA* = 00BH;
REG_GPIO_EN* = 00CH;
REG_GPIO_INT_STA* = 00DH;
REG_ADC_INT_EN* = 00EH;
REG_ADC_INT_STA* = 00FH;
REG_GPIO_SET_PIN* = 010H;
REG_GPIO_CLR_PIN* = 011H;
REG_GPIO_MP_STA* = 012H;
REG_GPIO_DIR* = 013H;
REG_GPIO_ED* = 014H;
REG_GPIO_RE* = 015H;
REG_GPIO_FE* = 016H;
REG_GPIO_AF* = 017H;
REG_ADC_CTRL1* = 020H;
REG_ADC_CTRL2* = 021H;
REG_ADC_CAPT* = 022H;
REG_ADC_DATA_CH0* = 030H;
REG_ADC_DATA_CH1* = 032H;
REG_ADC_DATA_CH2* = 034H;
REG_ADC_DATA_CH3* = 036H;
REG_ADC_DATA_CH4* = 038H;
REG_ADC_DATA_CH5* = 03AH;
REG_ADC_DATA_CH6* = 03CH;
REG_ADC_DATA_CH7* = 03EH;
REG_TSC_CTRL* = 040H;
REG_TSC_CFG* = 041H;
REG_WDW_TR_X* = 042H;
REG_WDW_TR_Y* = 044H;
REG_WDW_BL_X* = 046H;
REG_WDW_BL_Y* = 048H;
REG_FIFO_TH* = 04AH;
REG_FIFO_STA* = 04BH;
REG_FIFO_SIZE* = 04CH;
REG_TSC_DATA_X* = 04DH;
REG_TSC_DATA_Y* = 04FH;
REG_TSC_DATA_Z* = 051H;
REG_TSC_DATA_XYZ* = 052H;
REG_TSC_FRACTION_Z* = 056H;
REG_TSC_DATA* = 057H;
REG_TSC_I_DRIVE* = 058H;
REG_TSC_SHIELD* = 059H;
REG_TEMP_CTRL* = 060H;
REG_TEMP_DATA* = 061H;
REG_TEMP_TH* = 062H;
REG_TSC_DATA_NINC* = 0D7H;
HIBERNATE* = 0;
SOFT_RESET* = 1;
ADC_OFF* = 0;
TSC_OFF* = 1;
GPIO_OFF* = 2;
TS_OFF* = 3;
SPI_CLK_MOD0* = 0;
SPI_CLK_MOD1* = 1;
AUTO_INCR* = 2;
GLOBAL_INT* = 0;
INT_TYPE* = 1;
INT_POLARITY* = 2;
INT_EN_TOUCH_DET* = 0;
INT_EN_FIFO_TH* = 1;
INT_EN_FIFO_OFLOW* = 2;
INT_EN_FIFO_FULL* = 3;
INT_EN_FIFO_EMPTY* = 4;
INT_EN_TEMP_SENS* = 5;
INT_EN_ADC* = 6;
INT_EN_GPIO* = 7;
INT_STA_TOUCH_DET* = 0;
INT_STA_FIFO_TH* = 1;
INT_STA_FIFO_OFLOW* = 2;
INT_STA_FIFO_FULL* = 3;
INT_STA_FIFO_EMPTY* = 4;
INT_STA_TEMP_SENS* = 5;
INT_STA_ADC* = 6;
INT_STA_GPIO* = 7;
REF_SEL* = 1;
MOD_12B* = 3;
SAMPLE_TIME0* = 4;
SAMPLE_TIME1* = 5;
SAMPLE_TIME2* = 6;
ADC_FREQ0* = 0;
ADC_FREQ1* = 1;
TSC_EN* = 0;
OP_MOD0* = 1;
OP_MOD1* = 2;
OP_MOD2* = 3;
TRACK0* = 4;
TRACK1* = 5;
TRACK2* = 6;
TSC_STA* = 7;
SETTLING0* = 0;
SETTLING1* = 1;
SETTLING2* = 2;
TOUCH_DET_DELAY0* = 3;
TOUCH_DET_DELAY1* = 4;
TOUCH_DET_DELAY2* = 5;
AVE_CTRL0* = 6;
AVE_CTRL1* = 7;
FIFO_RESET* = 0;
FIFO_TH_TRIG* = 4;
FIFO_EMPTY* = 5;
FIFO_FULL* = 6;
FIFO_OFLOW* = 7;
FRACTION_Z0* = 0;
FRACTION_Z1* = 1;
FRACTION_Z2* = 2;
DRIVE0* = 0;
SHIELD0* = 0;
SHIELD1* = 1;
SHIELD2* = 2;
SHIELD3* = 3;
TEMP_ENABLE* = 0;
TEMP_ACQ* = 1;
TEMP_ACQ_MOD* = 2;
TEMP_THRES_EN* = 3;
TEMP_THRES_RANGE* = 4;
Types
Device* = RECORD
bus* : PtrBus;
adr* : INTEGER;
error* : INTEGER;
END;
Procedures
Init
Initialize driver
PROCEDURE Init* (VAR dev : Device; VAR bus: BusI2C.Bus; adr : INTEGER);
Device.WriteData
Write register with data.
PROCEDURE (VAR this : Device) WriteData* (register, data : BYTE);
Device.WriteRegister
Write register with data.
PROCEDURE (VAR this : Device) WriteRegister* (register : BYTE; data : SET8);
Device.ReadData
Read register data.
PROCEDURE (VAR this : Device) ReadData* (register : BYTE): BYTE;
Device.ReadRegister
Read register data.
PROCEDURE (VAR this : Device) ReadRegister* (register : BYTE): SET8;
Device.ReadData16
Read 16bit register data. Return TRUE on success
PROCEDURE (VAR this : Device) ReadData16* (register : BYTE): UNSIGNED16;
Device.ReadDeviceId
Read Device Identification.
PROCEDURE (VAR this : Device) ReadDeviceId* (): UNSIGNED16;
Device.Reset
Reset device.
PROCEDURE (VAR this : Device) Reset* ();
Device.EnableTouchInterrupt
Enable touch interrupt on INT pin.
PROCEDURE (VAR this : Device) EnableTouchInterrupt* ();
Device.ClearInterrupts
Clear pending interrupts
PROCEDURE (VAR this : Device) ClearInterrupts* ();
Device.ResetFIFO
Reset FIFO.
PROCEDURE (VAR this : Device) ResetFIFO* ();
Device.Config
Config
PROCEDURE (VAR this : Device) Config* ();
Device.HasTouchData
Return TRUE if we have touch data
PROCEDURE (VAR this : Device) HasTouchData* (): BOOLEAN;
Device.ReadXY
Return TRUE if we have touch data
PROCEDURE (VAR this : Device) ReadXY* (VAR x, y : UNSIGNED16);