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);