-
Notifications
You must be signed in to change notification settings - Fork 0
/
STMPE811QTR.h
executable file
·472 lines (403 loc) · 14.1 KB
/
STMPE811QTR.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
/**
******************************************************************************
* <h2><center>© COPYRIGHT 2012 Embest Tech. Co., Ltd.</center></h2>
* @file STMPE811QTR.h
* @author CMP Team
* @version V1.0.0
* @date 28-December-2012
* @brief header for STMPE811QTR.c
******************************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, Embest SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT
* OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
* OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
* CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STMPE811QTR_H
#define __STMPE811QTR_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"
/** @addtogroup Utilities
* @{
*/
/** @addtogroup STM32F4_DISCOVERY
* @{
*/
/** @defgroup STM32F4_DISCOVERY_IOE
* @{
*/
/** @defgroup STM32F4_DISCOVERY_IOE_Exported_Types
* @{
*/
/**
* @brief Touch Screen Information structure
*/
typedef struct
{
uint16_t TouchDetected;
uint16_t X;
uint16_t Y;
uint16_t Z;
}TS_STATE;
/**
* @brief IO_Expander Error codes
*/
typedef enum
{
IOE_OK = 0,
IOE_FAILURE,
IOE_TIMEOUT,
PARAM_ERROR,
IOE1_NOT_OPERATIONAL,
}IOE_Status_TypDef;
/**
* @brief IO bit values
*/
typedef enum
{
BitReset = 0,
BitSet = 1
}IOE_BitValue_TypeDef;
/**
* @brief IOE DMA Direction
*/
typedef enum
{
IOE_DMA_TX = 0,
IOE_DMA_RX = 1
}IOE_DMADirection_TypeDef;
/**
* @}
*/
/** @defgroup STM32F4_DISCOVERY_IOE_Exported_Constants
* @{
*/
/**
* @brief Uncomment the line below to enable verfying each written byte in write
* operation. The I2C_WriteDeviceRegister() function will then compare the
* written and read data and return error status if a mismatch occurs.
*/
/* #define VERIFY_WRITTENDATA */
/**
* @brief Uncomment the line below if you want to use user timeout callback.
* Function prototypes is declared in this file but function body may be
* implemented into user application.
*/
/* #define USE_TIMEOUT_USER_CALLBACK */
/**
* @brief Uncomment the line below if you want to use user defined Delay function
* (for precise timing), otherwise default _delay_ function defined within
* this driver is used (less precise timing).
*/
/* #define USE_Delay */
#ifdef USE_Delay
#include "main.h"
#define _delay_ Delay /* !< User can provide more timing precise _delay_ function
(with 10ms time base), using SysTick for example */
#else
#define _delay_ delay /* !< Default _delay_ function with less precise timing */
#endif
/*------------------------------------------------------------------------------
Hardware Configuration
------------------------------------------------------------------------------*/
/**
* @brief I2C port definitions
*/
#define IOE_I2C I2C1
#define IOE_I2C_CLK RCC_APB1Periph_I2C1
#define IOE_I2C_SCL_PIN GPIO_Pin_8
#define IOE_I2C_SCL_GPIO_PORT GPIOB
#define IOE_I2C_SCL_GPIO_CLK RCC_AHB1Periph_GPIOB
#define IOE_I2C_SCL_SOURCE GPIO_PinSource8
#define IOE_I2C_SCL_AF GPIO_AF_I2C1
#define IOE_I2C_SDA_PIN GPIO_Pin_9
#define IOE_I2C_SDA_GPIO_PORT GPIOB
#define IOE_I2C_SDA_GPIO_CLK RCC_AHB1Periph_GPIOB
#define IOE_I2C_SDA_SOURCE GPIO_PinSource9
#define IOE_I2C_SDA_AF GPIO_AF_I2C1
#define IOE_I2C_DR ((uint32_t)0x40005410)
/* I2C clock speed configuration (in Hz)
WARNING:
Make sure that this define is not already declared in other files (ie.
stm322xg_eval.h file). It can be used in parallel by other modules. */
#ifndef I2C_SPEED
#define I2C_SPEED 100000
#endif /* I2C_SPEED */
/**
* @brief IOE DMA definitions
*/
#define IOE_DMA_CLK RCC_AHB1Periph_DMA1
#define IOE_DMA_CHANNEL DMA_Channel_1
#define IOE_DMA_TX_STREAM DMA1_Stream6
#define IOE_DMA_RX_STREAM DMA1_Stream0
#define IOE_DMA_TX_TCFLAG DMA_FLAG_TCIF6
#define IOE_DMA_RX_TCFLAG DMA_FLAG_TCIF0
/**
* @brief IO Expander Interrupt line on EXTI
*/
/**
* @brief Eval Board IO Pins definition
*/
/**
* @brief Eval Board both IO Exapanders Pins definition
*/
#define IO1_OUT_ALL_PINS (uint32_t)(VBAT_DIV_PIN)
/**
* @brief The 7 bits IO Expanders adresses and chip IDs
*/
#define IOE_1_ADDR 0x82
#define STMPE811_ID 0x0811
/*------------------------------------------------------------------------------
Functional and Interrupt Management
------------------------------------------------------------------------------*/
/**
* @brief IO Expander Functionalities definitions
*/
#define IOE_ADC_FCT 0x01
#define IOE_TS_FCT 0x02
#define IOE_IO_FCT 0x04
#define IOE_TEMPSENS_FCT 0x08
/**
* @brief Interrupt source configuration definitons
*/
#define IOE_ITSRC_TSC 0x01 /* IO_Exapnder 1 */
#define IOE_ITSRC_INMEMS 0x02 /* IO_Exapnder 1 */
#define IOE_ITSRC_TEMPSENS 0x08 /* IO_Exapnder 2 */
/**
* @brief Glaobal Interrupts definitions
*/
#define IOE_GIT_GPIO 0x80
#define IOE_GIT_ADC 0x40
#define IOE_GIT_TEMP 0x20
#define IOE_GIT_FE 0x10
#define IOE_GIT_FF 0x08
#define IOE_GIT_FTH 0x02
#define IOE_GIT_TOUCH 0x01
/*------------------------------------------------------------------------------
STMPE811 device register definition
------------------------------------------------------------------------------*/
/**
* @brief Identification registers
*/
#define IOE_REG_CHP_ID 0x00
#define IOE_REG_ID_VER 0x02
/**
* @brief General Control Registers
*/
#define IOE_REG_SYS_CTRL1 0x03
#define IOE_REG_SYS_CTRL2 0x04
#define IOE_REG_SPI_CFG 0x08
/**
* @brief Interrupt Control register
*/
#define IOE_REG_INT_CTRL 0x09
#define IOE_REG_INT_EN 0x0A
#define IOE_REG_INT_STA 0x0B
#define IOE_REG_GPIO_INT_EN 0x0C
#define IOE_REG_GPIO_INT_STA 0x0D
/**
* @brief GPIO Registers
*/
#define IOE_REG_GPIO_SET_PIN 0x10
#define IOE_REG_GPIO_CLR_PIN 0x11
#define IOE_REG_GPIO_MP_STA 0x12
#define IOE_REG_GPIO_DIR 0x13
#define IOE_REG_GPIO_ED 0x14
#define IOE_REG_GPIO_RE 0x15
#define IOE_REG_GPIO_FE 0x16
#define IOE_REG_GPIO_AF 0x17
/**
* @brief ADC Registers
*/
#define IOE_REG_ADC_INT_EN 0x0E
#define IOE_REG_ADC_INT_STA 0x0F
#define IOE_REG_ADC_CTRL1 0x20
#define IOE_REG_ADC_CTRL2 0x21
#define IOE_REG_ADC_CAPT 0x22
#define IOE_REG_ADC_DATA_CH0 0x30 /* 16-Bit register */
#define IOE_REG_ADC_DATA_CH1 0x32 /* 16-Bit register */
#define IOE_REG_ADC_DATA_CH2 0x34 /* 16-Bit register */
#define IOE_REG_ADC_DATA_CH3 0x36 /* 16-Bit register */
#define IOE_REG_ADC_DATA_CH4 0x38 /* 16-Bit register */
#define IOE_REG_ADC_DATA_CH5 0x3A /* 16-Bit register */
#define IOE_REG_ADC_DATA_CH6 0x3B /* 16-Bit register */
#define IOE_REG_ADC_DATA_CH7 0x3C /* 16-Bit register */
/**
* @brief TouchScreen Registers
*/
#define IOE_REG_TSC_CTRL 0x40
#define IOE_REG_TSC_CFG 0x41
#define IOE_REG_WDM_TR_X 0x42
#define IOE_REG_WDM_TR_Y 0x44
#define IOE_REG_WDM_BL_X 0x46
#define IOE_REG_WDM_BL_Y 0x48
#define IOE_REG_FIFO_TH 0x4A
#define IOE_REG_FIFO_STA 0x4B
#define IOE_REG_FIFO_SIZE 0x4C
#define IOE_REG_TSC_DATA_X 0x4D
#define IOE_REG_TSC_DATA_Y 0x4F
#define IOE_REG_TSC_DATA_Z 0x51
#define IOE_REG_TSC_DATA_XYZ 0x52
#define IOE_REG_TSC_FRACT_XYZ 0x56
#define IOE_REG_TSC_DATA 0x57
#define IOE_REG_TSC_I_DRIVE 0x58
#define IOE_REG_TSC_SHIELD 0x59
/**
* @brief Temperature Sensor registers
*/
#define IOE_REG_TEMP_CTRL 0x60
#define IOE_REG_TEMP_DATA 0x61
#define IOE_REG_TEMP_TH 0x62
/*------------------------------------------------------------------------------
Functions parameters defines
------------------------------------------------------------------------------*/
/**
* @brief Touch Screen Pins definition
*/
#define TOUCH_YD IO_Pin_1 /* IO_Exapnader_1 */ /* Input */
#define TOUCH_XD IO_Pin_2 /* IO_Exapnader_1 */ /* Input */
#define TOUCH_YU IO_Pin_3 /* IO_Exapnader_1 */ /* Input */
#define TOUCH_XU IO_Pin_4 /* IO_Exapnader_1 */ /* Input */
#define TOUCH_IO_ALL (uint32_t)(IO_Pin_1 | IO_Pin_2 | IO_Pin_3 | IO_Pin_4)
/**
* @brief IO Pins
*/
#define IO_Pin_0 0x01
#define IO_Pin_1 0x02
#define IO_Pin_2 0x04
#define IO_Pin_3 0x08
#define IO_Pin_4 0x10
#define IO_Pin_5 0x20
#define IO_Pin_6 0x40
#define IO_Pin_7 0x80
#define IO_Pin_ALL 0xFF
/**
* @brief IO Pin directions
*/
#define Direction_IN 0x00
#define Direction_OUT 0x01
/**
* @brief Interrupt Line output parameters
*/
#define Polarity_Low 0x00
#define Polarity_High 0x04
#define Type_Level 0x00
#define Type_Edge 0x02
/**
* @brief IO Interrupts
*/
#define IO_IT_0 0x01
#define IO_IT_1 0x02
#define IO_IT_2 0x04
#define IO_IT_3 0x08
#define IO_IT_4 0x10
#define IO_IT_5 0x20
#define IO_IT_6 0x40
#define IO_IT_7 0x80
#define ALL_IT 0xFF
#define IOE_TS_IT (uint8_t)(IO_IT_0 | IO_IT_1 | IO_IT_2)
/**
* @brief Edge detection value
*/
#define EDGE_FALLING 0x01
#define EDGE_RISING 0x02
/**
* @brief Global interrupt Enable bit
*/
#define IOE_GIT_EN 0x01
/**
* @}
*/
/** @defgroup STM32F4_DISCOVERY_IOE_Exported_Functions
* @{
*/
/**
* @brief Configuration and initialization functions
*/
uint8_t IOE_Config(void);
uint8_t IOE_ITConfig(uint32_t IOE_ITSRC_Source);
/**
* @brief Timeout user callback function. This function is called when a timeout
* condition occurs during communication with IO Expander. Only protoype
* of this function is decalred in IO Expander driver. Its implementation
* may be done into user application. This function may typically stop
* current operations and reset the I2C peripheral and IO Expander.
* To enable this function use uncomment the define USE_TIMEOUT_USER_CALLBACK
* at the top of this file.
*/
#ifdef USE_TIMEOUT_USER_CALLBACK
uint8_t IOE_TimeoutUserCallback(void);
#else
#define IOE_TimeoutUserCallback() IOE_TIMEOUT
#endif /* USE_TIMEOUT_USER_CALLBACK */
/**
* @brief IO pins control functions
*/
uint8_t IOE_ReadIOPin(uint32_t IO_Pin);
/**
* @brief Touch Screen controller functions
*/
TS_STATE* IOE_TS_GetState(void);
/**
* @brief Interrupts Management functions
*/
FlagStatus IOE_GetGITStatus(uint8_t DeviceAddr, uint8_t Global_IT);
uint8_t IOE_ClearGITPending(uint8_t DeviceAddr, uint8_t IO_IT);
FlagStatus IOE_GetIOITStatus(uint8_t DeviceAddr, uint8_t IO_IT);
uint8_t IOE_ClearIOITPending(uint8_t DeviceAddr, uint8_t IO_IT);
/**
* @brief Temperature Sensor functions
*/
uint32_t IOE_TempSens_GetData(void);
/**
* @brief IO-Expander Control functions
*/
uint8_t IOE_IsOperational(uint8_t DeviceAddr);
uint8_t IOE_Reset(uint8_t DeviceAddr);
uint16_t IOE_ReadID(uint8_t DeviceAddr);
uint8_t IOE_FnctCmd(uint8_t DeviceAddr, uint8_t Fct, FunctionalState NewState);
uint8_t IOE_IOPinConfig(uint8_t DeviceAddr, uint8_t IO_Pin, uint8_t Direction);
uint8_t IOE_GITCmd(uint8_t DeviceAddr, FunctionalState NewState);
uint8_t IOE_GITConfig(uint8_t DeviceAddr, uint8_t Global_IT, FunctionalState NewState);
uint8_t IOE_IOITConfig(uint8_t DeviceAddr, uint8_t IO_IT, FunctionalState NewState);
/**
* @brief Low Layer functions
*/
uint8_t IOE_TS_Config(void);
uint8_t IOE_TempSens_Config(void);
uint8_t IOE_IOAFConfig(uint8_t DeviceAddr, uint8_t IO_Pin, FunctionalState NewState);
uint8_t IOE_IOEdgeConfig(uint8_t DeviceAddr, uint8_t IO_Pin, uint8_t Edge);
uint8_t IOE_ITOutConfig(uint8_t Polarity, uint8_t Type);
uint8_t I2C_WriteDeviceRegister(uint8_t DeviceAddr, uint8_t RegisterAddr, uint8_t RegisterValue);
uint8_t I2C_ReadDeviceRegister(uint8_t DeviceAddr, uint8_t RegisterAddr);
uint16_t I2C_ReadDataBuffer(uint8_t DeviceAddr, uint8_t RegisterAddr);
uint16_t IOE_TS_Read_X(void);
uint16_t IOE_TS_Read_Y(void);
#ifdef __cplusplus
}
#endif
#endif /* __STMPE811QTR_H */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/******************** COPYRIGHT 2012 Embest Tech. Co., Ltd.*****END OF FILE****/