USB Device - Joystick/Mouse  1.0
stm324xg_eval_ioe.h
Go to the documentation of this file.
1 
29 /* File Info : ---------------------------------------------------------------
30 SUPPORTED FEATURES:
31 - IO Read/write : Set/Reset and Read (Polling/Interrupt)
32 - Joystick: config and Read (Polling/Interrupt)
33 - Touch Screen Features: Single point mode (Polling/Interrupt)
34 - TempSensor Feature: accuracy not determined (Polling).
35 
36 UNSUPPORTED FEATURES:
37 - Row ADC Feature is not supported (not implemented on STM324xG_EVAL board)
38 ----------------------------------------------------------------------------*/
39 
40 
41 /* Define to prevent recursive inclusion -------------------------------------*/
42 #ifndef __STM324xG_EVAL_IOE_H
43 #define __STM324xG_EVAL_IOE_H
44 
45 #ifdef __cplusplus
46 extern "C" {
47 #endif
48 
49  /* Includes ------------------------------------------------------------------*/
50 #include "stm324xg_eval.h"
51 
76  typedef struct
77  {
78  uint16_t TouchDetected;
79  uint16_t X;
80  uint16_t Y;
81  uint16_t Z;
82  }TS_STATE;
83 
87 #ifndef __STM324xG_EVAL_H
88  typedef enum
89  {
90  JOY_NONE = 0,
91  JOY_SEL = 1,
92  JOY_DOWN = 2,
93  JOY_LEFT = 3,
94  JOY_RIGHT = 4,
95  JOY_UP = 5
97  ;
98 #endif /* __STM324xG_EVAL_H */
99 
103  typedef enum
104  {
105  IOE_OK = 0,
106  IOE_FAILURE,
107  IOE_TIMEOUT,
108  PARAM_ERROR,
109  IOE1_NOT_OPERATIONAL,
110  IOE2_NOT_OPERATIONAL
112 
116  typedef enum
117  {
118  BitReset = 0,
119  BitSet = 1
121 
125  typedef enum
126  {
127  IOE_DMA_TX = 0,
128  IOE_DMA_RX = 1
130 
131 
146  /* #define VERIFY_WRITTENDATA */
147 
153  /* #define USE_TIMEOUT_USER_CALLBACK */
154 
160  /* #define USE_Delay */
161 
162 #ifdef USE_Delay
163 #include "main.h"
164 
165 #define _delay_ Delay /* !< User can provide more timing precise _delay_ function
166  (with 10ms time base), using SysTick for example */
167 #else
168 #define _delay_ delay /* !< Default _delay_ function with less precise timing */
169 #endif
170 
171  /*------------------------------------------------------------------------------
172  Hardware Configuration
173  ------------------------------------------------------------------------------*/
177 #define IOE_I2C I2C1
178 #define IOE_I2C_CLK RCC_APB1Periph_I2C1
179 #define IOE_I2C_SCL_PIN GPIO_Pin_6
180 #define IOE_I2C_SCL_GPIO_PORT GPIOB
181 #define IOE_I2C_SCL_GPIO_CLK RCC_AHB1Periph_GPIOB
182 #define IOE_I2C_SCL_SOURCE GPIO_PinSource6
183 #define IOE_I2C_SCL_AF GPIO_AF_I2C1
184 #define IOE_I2C_SDA_PIN GPIO_Pin_9
185 #define IOE_I2C_SDA_GPIO_PORT GPIOB
186 #define IOE_I2C_SDA_GPIO_CLK RCC_AHB1Periph_GPIOB
187 #define IOE_I2C_SDA_SOURCE GPIO_PinSource9
188 #define IOE_I2C_SDA_AF GPIO_AF_I2C1
189 #define IOE_I2C_DR ((uint32_t)0x40005410)
190 
191  /* I2C clock speed configuration (in Hz)
192  WARNING:
193  Make sure that this define is not already declared in other files (ie.
194  stm324xg_eval.h file). It can be used in parallel by other modules. */
195 #ifndef I2C_SPEED
196 #define I2C_SPEED 100000
197 #endif /* I2C_SPEED */
198 
202 #define IOE_DMA_CLK RCC_AHB1Periph_DMA1
203 #define IOE_DMA_CHANNEL DMA_Channel_1
204 
205 #ifndef IOE_DMA_TX_STREAM
206 #define IOE_DMA_TX_STREAM DMA1_Stream6
207 #endif /* IOE_DMA_TX_STREAM */
208 
209 #ifndef IOE_DMA_TX_TCFLAG
210 #define IOE_DMA_TX_TCFLAG DMA_FLAG_TCIF6
211 #endif /* IOE_DMA_TX_TCFLAG */
212 
213 #ifndef IOE_DMA_RX_STREAM
214 #define IOE_DMA_RX_STREAM DMA1_Stream0
215 #endif /* IOE_DMA_RX_STREAM */
216 
217 #ifndef IOE_DMA_RX_TCFLAG
218 #define IOE_DMA_RX_TCFLAG DMA_FLAG_TCIF0
219 #endif /* IOE_DMA_RX_TCFLAG */
220 
224 #define IOE_IT_PIN GPIO_Pin_2
225 #define IOE_IT_GPIO_PORT GPIOI
226 #define IOE_IT_GPIO_CLK RCC_AHB1Periph_GPIOI
227 #define IOE_IT_EXTI_PORT_SOURCE EXTI_PortSourceGPIOI
228 #define IOE_IT_EXTI_PIN_SOURCE EXTI_PinSource2
229 #define IOE_IT_EXTI_LINE EXTI_Line2
230 #define IOE_IT_EXTI_IRQn EXTI2_IRQn
231 
235 #define AUDIO_RESET_PIN IO_Pin_2 /* IO_Exapnader_2 */ /* Output */
236 #define MII_INT_PIN IO_Pin_0 /* IO_Exapnader_2 */ /* Output */
237 #define VBAT_DIV_PIN IO_Pin_0 /* IO_Exapnader_1 */ /* Output */
238 #define MEMS_INT1_PIN IO_Pin_3 /* IO_Exapnader_1 */ /* Input */
239 #define MEMS_INT2_PIN IO_Pin_2 /* IO_Exapnader_1 */ /* Input */
240 
244 #define IO1_IN_ALL_PINS (uint32_t)(MEMS_INT1_PIN | MEMS_INT2_PIN)
245 #define IO2_IN_ALL_PINS (uint32_t)(JOY_IO_PINS)
246 #define IO1_OUT_ALL_PINS (uint32_t)(VBAT_DIV_PIN)
247 #define IO2_OUT_ALL_PINS (uint32_t)(AUDIO_RESET_PIN | MII_INT_PIN)
248 
252 #define IOE_1_ADDR 0x82
253 #define IOE_2_ADDR 0x88
254 #define STMPE811_ID 0x0811
255 
256 
257  /*------------------------------------------------------------------------------
258  Functional and Interrupt Management
259  ------------------------------------------------------------------------------*/
263 #define IOE_ADC_FCT 0x01
264 #define IOE_TS_FCT 0x02
265 #define IOE_IO_FCT 0x04
266 #define IOE_TEMPSENS_FCT 0x08
267 
271 #define IOE_ITSRC_TSC 0x01 /* IO_Exapnder 1 */
272 #define IOE_ITSRC_INMEMS 0x02 /* IO_Exapnder 1 */
273 #define IOE_ITSRC_JOYSTICK 0x04 /* IO_Exapnder 2 */
274 #define IOE_ITSRC_TEMPSENS 0x08 /* IO_Exapnder 2 */
275 
279 #define IOE_GIT_GPIO 0x80
280 #define IOE_GIT_ADC 0x40
281 #define IOE_GIT_TEMP 0x20
282 #define IOE_GIT_FE 0x10
283 #define IOE_GIT_FF 0x08
284 #define IOE_GIT_FOV 0x04
285 #define IOE_GIT_FTH 0x02
286 #define IOE_GIT_TOUCH 0x01
287 
288 
289  /*------------------------------------------------------------------------------
290  STMPE811 device register definition
291  ------------------------------------------------------------------------------*/
295 #define IOE_REG_CHP_ID 0x00
296 #define IOE_REG_ID_VER 0x02
297 
301 #define IOE_REG_SYS_CTRL1 0x03
302 #define IOE_REG_SYS_CTRL2 0x04
303 #define IOE_REG_SPI_CFG 0x08
304 
308 #define IOE_REG_INT_CTRL 0x09
309 #define IOE_REG_INT_EN 0x0A
310 #define IOE_REG_INT_STA 0x0B
311 #define IOE_REG_GPIO_INT_EN 0x0C
312 #define IOE_REG_GPIO_INT_STA 0x0D
313 
317 #define IOE_REG_GPIO_SET_PIN 0x10
318 #define IOE_REG_GPIO_CLR_PIN 0x11
319 #define IOE_REG_GPIO_MP_STA 0x12
320 #define IOE_REG_GPIO_DIR 0x13
321 #define IOE_REG_GPIO_ED 0x14
322 #define IOE_REG_GPIO_RE 0x15
323 #define IOE_REG_GPIO_FE 0x16
324 #define IOE_REG_GPIO_AF 0x17
325 
329 #define IOE_REG_ADC_INT_EN 0x0E
330 #define IOE_REG_ADC_INT_STA 0x0F
331 #define IOE_REG_ADC_CTRL1 0x20
332 #define IOE_REG_ADC_CTRL2 0x21
333 #define IOE_REG_ADC_CAPT 0x22
334 #define IOE_REG_ADC_DATA_CH0 0x30 /* 16-Bit register */
335 #define IOE_REG_ADC_DATA_CH1 0x32 /* 16-Bit register */
336 #define IOE_REG_ADC_DATA_CH2 0x34 /* 16-Bit register */
337 #define IOE_REG_ADC_DATA_CH3 0x36 /* 16-Bit register */
338 #define IOE_REG_ADC_DATA_CH4 0x38 /* 16-Bit register */
339 #define IOE_REG_ADC_DATA_CH5 0x3A /* 16-Bit register */
340 #define IOE_REG_ADC_DATA_CH6 0x3B /* 16-Bit register */
341 #define IOE_REG_ADC_DATA_CH7 0x3C /* 16-Bit register */
342 
346 #define IOE_REG_TSC_CTRL 0x40
347 #define IOE_REG_TSC_CFG 0x41
348 #define IOE_REG_WDM_TR_X 0x42
349 #define IOE_REG_WDM_TR_Y 0x44
350 #define IOE_REG_WDM_BL_X 0x46
351 #define IOE_REG_WDM_BL_Y 0x48
352 #define IOE_REG_FIFO_TH 0x4A
353 #define IOE_REG_FIFO_STA 0x4B
354 #define IOE_REG_FIFO_SIZE 0x4C
355 #define IOE_REG_TSC_DATA_X 0x4D
356 #define IOE_REG_TSC_DATA_Y 0x4F
357 #define IOE_REG_TSC_DATA_Z 0x51
358 #define IOE_REG_TSC_DATA_XYZ 0x52
359 #define IOE_REG_TSC_FRACT_XYZ 0x56
360 #define IOE_REG_TSC_DATA 0x57
361 #define IOE_REG_TSC_I_DRIVE 0x58
362 #define IOE_REG_TSC_SHIELD 0x59
363 
367 #define IOE_REG_TEMP_CTRL 0x60
368 #define IOE_REG_TEMP_DATA 0x61
369 #define IOE_REG_TEMP_TH 0x62
370 
371 
372  /*------------------------------------------------------------------------------
373  Functions parameters defines
374  ------------------------------------------------------------------------------*/
378 #define TOUCH_YD IO_Pin_1 /* IO_Exapnader_1 */ /* Input */
379 #define TOUCH_XD IO_Pin_2 /* IO_Exapnader_1 */ /* Input */
380 #define TOUCH_YU IO_Pin_3 /* IO_Exapnader_1 */ /* Input */
381 #define TOUCH_XU IO_Pin_4 /* IO_Exapnader_1 */ /* Input */
382 #define TOUCH_IO_ALL (uint32_t)(IO_Pin_1 | IO_Pin_2 | IO_Pin_3 | IO_Pin_4)
383 
387 #define JOY_IO_SEL IO_Pin_7
388 #define JOY_IO_DOWN IO_Pin_6
389 #define JOY_IO_LEFT IO_Pin_5
390 #define JOY_IO_RIGHT IO_Pin_4
391 #define JOY_IO_UP IO_Pin_3
392 #define JOY_IO_NONE JOY_IO_PINS
393 #define JOY_IO_PINS (uint32_t)(IO_Pin_3 | IO_Pin_4 | IO_Pin_5 | IO_Pin_6 | IO_Pin_7)
394 
398 #define IO_Pin_0 0x01
399 #define IO_Pin_1 0x02
400 #define IO_Pin_2 0x04
401 #define IO_Pin_3 0x08
402 #define IO_Pin_4 0x10
403 #define IO_Pin_5 0x20
404 #define IO_Pin_6 0x40
405 #define IO_Pin_7 0x80
406 #define IO_Pin_ALL 0xFF
407 
411 #define Direction_IN 0x00
412 #define Direction_OUT 0x01
413 
417 #define Polarity_Low 0x00
418 #define Polarity_High 0x04
419 #define Type_Level 0x00
420 #define Type_Edge 0x02
421 
425 #define IO_IT_0 0x01
426 #define IO_IT_1 0x02
427 #define IO_IT_2 0x04
428 #define IO_IT_3 0x08
429 #define IO_IT_4 0x10
430 #define IO_IT_5 0x20
431 #define IO_IT_6 0x40
432 #define IO_IT_7 0x80
433 #define ALL_IT 0xFF
434 #define IOE_JOY_IT (uint8_t)(IO_IT_3 | IO_IT_4 | IO_IT_5 | IO_IT_6 | IO_IT_7)
435 #define IOE_TS_IT (uint8_t)(IO_IT_0 | IO_IT_1 | IO_IT_2)
436 #define IOE_INMEMS_IT (uint8_t)(IO_IT_2 | IO_IT_3)
437 
441 #define EDGE_FALLING 0x01
442 #define EDGE_RISING 0x02
443 
447 #define IOE_GIT_EN 0x01
448 
471  uint8_t IOE_Config(void);
472  uint8_t IOE_ITConfig(uint32_t IOE_ITSRC_Source);
473 
483 #ifdef USE_TIMEOUT_USER_CALLBACK
484  uint8_t IOE_TimeoutUserCallback(void);
485 #else
486 #define IOE_TimeoutUserCallback() IOE_TIMEOUT
487 #endif /* USE_TIMEOUT_USER_CALLBACK */
488 
492  uint8_t IOE_WriteIOPin(uint8_t IO_Pin, IOE_BitValue_TypeDef BitVal);
493  uint8_t IOE_ReadIOPin(uint32_t IO_Pin);
494  JOYState_TypeDef
495  IOE_JoyStickGetState(void);
496 
500  TS_STATE* IOE_TS_GetState(void);
501 
505  FlagStatus IOE_GetGITStatus(uint8_t DeviceAddr, uint8_t Global_IT);
506  uint8_t IOE_ClearGITPending(uint8_t DeviceAddr, uint8_t IO_IT);
507  FlagStatus IOE_GetIOITStatus(uint8_t DeviceAddr, uint8_t IO_IT);
508  uint8_t IOE_ClearIOITPending(uint8_t DeviceAddr, uint8_t IO_IT);
509 
513  uint32_t IOE_TempSens_GetData(void);
514 
518  uint8_t IOE_IsOperational(uint8_t DeviceAddr);
519  uint8_t IOE_Reset(uint8_t DeviceAddr);
520  uint16_t IOE_ReadID(uint8_t DeviceAddr);
521 
522  uint8_t IOE_FnctCmd(uint8_t DeviceAddr, uint8_t Fct, FunctionalState NewState);
523  uint8_t IOE_IOPinConfig(uint8_t DeviceAddr, uint8_t IO_Pin, uint8_t Direction);
524  uint8_t IOE_GITCmd(uint8_t DeviceAddr, FunctionalState NewState);
525  uint8_t IOE_GITConfig(uint8_t DeviceAddr, uint8_t Global_IT, FunctionalState NewState);
526  uint8_t IOE_IOITConfig(uint8_t DeviceAddr, uint8_t IO_IT, FunctionalState NewState);
527 
531  uint8_t IOE_TS_Config(void);
532  uint8_t IOE_TempSens_Config(void);
533  uint8_t IOE_IOAFConfig(uint8_t DeviceAddr, uint8_t IO_Pin, FunctionalState NewState);
534  uint8_t IOE_IOEdgeConfig(uint8_t DeviceAddr, uint8_t IO_Pin, uint8_t Edge);
535  uint8_t IOE_ITOutConfig(uint8_t Polarity, uint8_t Type);
536 
537  uint8_t I2C_WriteDeviceRegister(uint8_t DeviceAddr, uint8_t RegisterAddr, uint8_t RegisterValue);
538  uint8_t I2C_ReadDeviceRegister(uint8_t DeviceAddr, uint8_t RegisterAddr);
539  uint16_t I2C_ReadDataBuffer(uint8_t DeviceAddr, uint32_t RegisterAddr);
540 
541 #ifdef __cplusplus
542 }
543 #endif
544 #endif /* __STM324xG_EVAL_IOE_H */
545 
565 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
JOYState_TypeDef
Joystick State definitions.
Definition: stm324xg_eval_ioe.h:88
uint8_t I2C_ReadDeviceRegister(uint8_t DeviceAddr, uint8_t RegisterAddr)
Reads a register of the device through I2C.
Definition: stm324xg_eval_ioe.c:1149
uint16_t IOE_ReadID(uint8_t DeviceAddr)
Reads the selected device&#39;s ID.
Definition: stm324xg_eval_ioe.c:646
uint8_t IOE_TempSens_Config(void)
Configures and enables the Temperature sensor module.
Definition: stm324xg_eval_ioe.c:902
IOE_BitValue_TypeDef
IO bit values.
Definition: stm324xg_eval_ioe.h:116
uint8_t IOE_ITConfig(uint32_t IOE_ITSRC_Source)
Configures The selected interrupts on the IO Expanders.
Definition: stm324xg_eval_ioe.c:218
uint8_t IOE_FnctCmd(uint8_t DeviceAddr, uint8_t Fct, FunctionalState NewState)
Configures the selected IO Expander functionalities.
Definition: stm324xg_eval_ioe.c:671
uint8_t IOE_GITCmd(uint8_t DeviceAddr, FunctionalState NewState)
Enables or disables the Global interrupt.
Definition: stm324xg_eval_ioe.c:734
uint16_t I2C_ReadDataBuffer(uint8_t DeviceAddr, uint32_t RegisterAddr)
Reads a buffer of 2 bytes from the device registers.
Definition: stm324xg_eval_ioe.c:1247
uint8_t IOE_IOEdgeConfig(uint8_t DeviceAddr, uint8_t IO_Pin, uint8_t Edge)
Configures the Edge for which a transition is detectable for the the selected pin.
Definition: stm324xg_eval_ioe.c:965
uint8_t IOE_ReadIOPin(uint32_t IO_Pin)
Returns the status of the selected input IO pin.
Definition: stm324xg_eval_ioe.c:341
This file contains definitions for STM324xG_EVAL&#39;s Leds, push-buttons and COM ports hardware resource...
uint8_t IOE_IOITConfig(uint8_t DeviceAddr, uint8_t IO_IT, FunctionalState NewState)
Configures the selected pins to generate an interrupt or not.
Definition: stm324xg_eval_ioe.c:808
JOYState_TypeDef IOE_JoyStickGetState(void)
Returns the current Joystick status.
Definition: stm324xg_eval_ioe.c:383
uint8_t IOE_Reset(uint8_t DeviceAddr)
Resets the IO Expander by Software (SYS_CTRL1, RESET bit).
Definition: stm324xg_eval_ioe.c:625
uint8_t IOE_ClearIOITPending(uint8_t DeviceAddr, uint8_t IO_IT)
Clears the selected IO interrupt pending bit(s).
Definition: stm324xg_eval_ioe.c:573
uint8_t I2C_WriteDeviceRegister(uint8_t DeviceAddr, uint8_t RegisterAddr, uint8_t RegisterValue)
Writes a value in a register of the device through I2C.
Definition: stm324xg_eval_ioe.c:1048
uint8_t IOE_IOAFConfig(uint8_t DeviceAddr, uint8_t IO_Pin, FunctionalState NewState)
Configures the selected pin to be in Alternate function or not.
Definition: stm324xg_eval_ioe.c:930
uint8_t IOE_Config(void)
Configuration and initialization functions.
Definition: stm324xg_eval_ioe.c:136
IOE_DMADirection_TypeDef
IOE DMA Direction.
Definition: stm324xg_eval_ioe.h:125
uint32_t IOE_TempSens_GetData(void)
Temperature Sensor functions.
Definition: stm324xg_eval_ioe.c:465
uint8_t IOE_GITConfig(uint8_t DeviceAddr, uint8_t Global_IT, FunctionalState NewState)
Configures the selected source to generate or not a global interrupt.
Definition: stm324xg_eval_ioe.c:774
IOE_Status_TypDef
IO_Expander Error codes.
Definition: stm324xg_eval_ioe.h:103
uint8_t IOE_ITOutConfig(uint8_t Polarity, uint8_t Type)
Configures the Interrupt line active state and format (level/edge)
Definition: stm324xg_eval_ioe.c:1008
Touch Screen Information structure.
Definition: stm324xg_eval_ioe.h:76
FlagStatus IOE_GetIOITStatus(uint8_t DeviceAddr, uint8_t IO_IT)
Checks the status of the selected IO interrupt pending bit.
Definition: stm324xg_eval_ioe.c:548
TS_STATE * IOE_TS_GetState(void)
Touch Screen controller functions.
Definition: stm324xg_eval_ioe.c:425
uint8_t IOE_TS_Config(void)
Low Layer functions.
Definition: stm324xg_eval_ioe.c:837
uint8_t IOE_ClearGITPending(uint8_t DeviceAddr, uint8_t IO_IT)
Clears the selected Global interrupt pending bit(s)
Definition: stm324xg_eval_ioe.c:531
uint8_t IOE_IsOperational(uint8_t DeviceAddr)
IO-Expander Control functions.
Definition: stm324xg_eval_ioe.c:598
uint8_t IOE_WriteIOPin(uint8_t IO_Pin, IOE_BitValue_TypeDef BitVal)
IO pins control functions.
Definition: stm324xg_eval_ioe.c:298
FlagStatus IOE_GetGITStatus(uint8_t DeviceAddr, uint8_t Global_IT)
Interrupts Mangement functions.
Definition: stm324xg_eval_ioe.c:498
uint8_t IOE_IOPinConfig(uint8_t DeviceAddr, uint8_t IO_Pin, uint8_t Direction)
Configures the selected pin direction (to be an input or an output)
Definition: stm324xg_eval_ioe.c:704
#define IOE_TimeoutUserCallback()
Timeout user callback function.
Definition: stm324xg_eval_ioe.h:486